9.7 KiB
9.7 KiB
Task: PI-100 Core Host API and Runtime Composition
Identity
- Task ID: 20260823-pi-core-host-api-a17f6c2e
- Mode: Feature
- Branch: codex/20260823-pi-core-host-api-a17f6c2e-pi-core-host-api
- Worktree: D:\Datas\OthersProjects\makelore-pi-core-host-api-a17f6c2e
- Base commit:
98bac20639 - Owner: codex-root
- Status: In Progress
Scope
- Implement PI-100's vendor-neutral project and Conversation service, core
/api/codingroutes, runtime Snapshot/Patch SSE, interactions, diagnostics, and HTTP 202 prompt acceptance contract. - Compose the production Pi runtime behind one Main-owned product Host composition, reusing PI-105's attachment store, product tools, change tracker, file routes, skills, and command projection.
- Replace PI-105's temporary active-project adapter with the vendor-neutral
project store and inject the target worker's live
get_commandsresult. - Add focused route/service/composition tests and run the repository-required verification for Main/Renderer/packaging-impacting changes.
Intent And Constraints
- Base is the reviewed cumulative PI-105 HEAD
98bac206396198cc276c659ed988372fc5c8bc10; PI-100 is the planner's exact sole Ready Frontier. - Project/partner/Conversation metadata creation must remain local-only and must not spawn Pi. Runtime preparation stays lazy at Snapshot or execution boundaries.
- Routes validate active-project ownership and return stable, sanitized product errors. No Pi wire fields, absolute session paths, credentials, provider bodies, stderr, stacks, or extension paths may cross to Renderer.
- Accepted prompt/steer/follow-up mutations return HTTP 202 without waiting for
provider first token or settle. Accepted
clientRequestIdvalues are bounded and deduplicated; uncertain mutations are never silently resent. - The service is the deep product seam. Route files own HTTP parsing/projection, while process/RPC/event/session/provider lifecycle stays inside the existing Pi runtime modules.
- Do not introduce an OpenCode fallback, runtime selector, compatibility adapter, second product-tool composition, or speculative security framework.
- Real external Provider verification remains Explicitly Waived / Accepted
Risk with
realTurnVerified=false; macOS x64/arm64 remains deferred to the mandatory PI-150 gate. Neither is Pass evidence. - No subagents are authorized for this repository task.
Project Context Loaded
maintain-project-docsConcurrent Task Gate passed in the isolated worktree above; the canonicalmainworktree is occupied/dirty and was not modified.- Planning Gate inputs, canonical integrated memory, architecture/domain files, the only semantically adjacent active task, PI-105 completion record, and the planner's latest PI-100 ticket/Spec sections were read before planning.
- The adjacent planning task
20260820-partner-create-model-parity-c83dhas no defined scope or claimed files, so no ownership conflict is present. - Confirmed implementation seams: schema-v2 project/conversation stores,
CodingConversationRuntime,PiConversationRuntime, managed extension host, PI-105'sCodingProductComposition, and the shared Host dispatcher already exist. The temporary OpenCode project-store callback in Main is the seam PI-100 must remove from the product composition. - The canonical project-positioning and project-level success fields remain placeholders; ticket boundaries and product constraints therefore come from repository guidance, current-state memory, and the planner-owned normative Pi documents.
- Gate result: Passed.
Plan
- Deepen the vendor-neutral project/Conversation service and runtime contract with the minimal Host-facing operations, bounded acceptance registry, event session, interaction correlation, command lookup, and safe diagnostics.
- Implement the project and Conversation route modules, including metadata CRUD, Snapshot, 202 mutations, SSE, interactions, and diagnostics with ownership validation and stable error projection.
- Build one production Main composition from the vendor-neutral project store, existing PI runtime/provider/resource/extension/product-tool seams, then register it in the shared Host dispatcher and shutdown lifecycle.
- Add focused service/route/composition regressions for local-only creation, dedupe/uncertain behavior, snapshot-first SSE, redaction, interaction IDs, project adapter replacement, and live command projection.
- Run focused tests, all Pi/coding tests, typecheck, lint, full unit suite, Vite build, Windows Electron coverage, documentation gates, and planner review; correct confirmed failures before completion.
Planner Review Correction
- Planner review of
98bac20..22b4a9fconcludedNEEDS FIXand kept the exact Ready Frontier at{PI-100}. - The correction scope is limited to eight confirmed contract gaps: unresolved model recovery, session trash on delete, protected uncertain-request tombstones, cleanup across every active-project transition, Renderer-safe project DTOs, production authentication recovery wiring, failed-fork runtime cleanup, and stable fixed Host error projection including storage failures.
- PI-105 remains closed; its vendor-neutral project seam and live target
get_commandsseam were accepted structurally.
Outcome
- Added the vendor-neutral
CodingProjectServiceandCodingConversationService. Project/Agent/Conversation metadata creation is local-only; Snapshot and execution operations prepare the target worker lazily. - Implemented the Spec 12.1 core project/Conversation routes, global and target-filtered snapshot-first SSE, 202 prompt/steer/follow-up acceptance, bounded concurrent dedupe, uncertain-request retention, interaction correlation, and privacy-safe runtime diagnostics.
- Extended the runtime product contract with safe commands, interactions,
provider/resource invalidation, and diagnostics. Pi commands are fetched from
the live target worker with
get_commands; absent/unready workers degrade to the managed Makelore/skill catalog without exposing raw Pi fields. - Replaced PI-105's temporary OpenCode active-project callback with the product project service. Main now builds one shared product/Pi composition containing attachments, product tools, extension host, worker pool, subagents, project/Conversation services, and Host routes; the composition owns shutdown.
- Provider changes advance the Pi provider revision, project config/knowledge changes advance the resource revision and invalidate cached Agent resources, and deactivating a project disposes its Conversation workers/interactions.
- No Renderer route was migrated here; PI-110 remains the next consumer of the
new Main contract. Old
/api/opencoderemoval remains PI-140 scope.
Verification
pnpm install --frozen-lockfile— Passed using the repository-pinned pnpm.pnpm run typecheck— Passed after final implementation changes.pnpm run lint:check— Passed with zero errors; six existing Renderer warnings remain outside PI-100-owned files.- Focused PI/coding/provider suites — Passed: 7 files / 53 tests.
- In-memory Conversation contract plus PI-100 Host/SSE suite — Passed: 2 files / 23 tests. Coverage includes local-only create, one Main composition, concurrent dedupe, uncertain no-resend, global and target snapshot-first streams, real HTTP SSE ordering, interaction route ID correlation, command degradation, and runtime error redaction.
pnpm test— Passed: 208 files / 2247 tests passed, 2 skipped.pnpm run build:vite— Passed for Renderer, Electron Main, Preload, and utility worker. Existing dynamic-import/chunk-size warnings remain.pnpm run test:e2e— Production build passed and 27/28 Windows Electron tests passed. The pre-existing OpenCode slash-command assertion failed because its legacy/commandrequest omittedmodel; isolated rerun reproduced it. This task changes no Renderer file, OpenCode command route, or slash-command spec, and the new composition performs no runtime/provider/project read before a coding Snapshot/execution request, so no causal PI-100 path was found.- Real external Provider turns remain Explicitly Waived / Accepted Risk;
realTurnVerified=false. This is not Pass evidence. - macOS x64/arm64 validation remains skipped by user direction and mandatory at PI-150. This is not Pass evidence.
Follow-ups
- PI-110 should bind the Renderer typed facade/store to these
/api/codingroutes and implement target Snapshot recovery on seq gaps. - PI-140 should remove the legacy OpenCode Renderer/routes/runtime residue after the hard cutover; PI-150 still owns final packaged platform qualification.
- The legacy OpenCode slash-command E2E missing-model assertion should be reconciled by its owning UI/runtime task; it is outside PI-100 scope.
Promotion Candidates
- Target canonical documents:
current-state.md, system overview, module map, and PI ticket/DAG status. - Proposal: record PI-100 as implemented with the product project/Conversation services, core Host API, snapshot-first global SSE, one Main Pi composition, provider/resource revision integration, and PI-105 project/live-command seams closed.
- Evidence: cumulative task commit(s), the focused Host/SSE tests, full unit result, typecheck/lint, and Vite build listed above.
- Future impact: PI-110 may consume the new Main contract; PI-140 must still own legacy removal. The real Provider waiver and macOS deferral remain unchanged.
- Semantic conflicts: none identified with accepted architecture or adjacent active task scopes. Human confirmation is not required for promotion, but the planner must review the cumulative HEAD before changing the Ready Frontier.