README,src/{observer,prompt},test: route observer through deepseek
27 unmodified lines28293031323332333435363729 unmodified lines27 unmodified lines
## configuration
```bashexport PRIME_COMMITMENT_OBSERVER_PROVIDER=googleexport PRIME_COMMITMENT_OBSERVER_MODEL=gemini-3.1-flash-liteexport PRIME_COMMITMENT_OBSERVER_PROVIDER=deepseekexport PRIME_COMMITMENT_OBSERVER_MODEL=deepseek-v4-flashexport PRIME_COMMITMENT_OBSERVER_TIMEOUT_MS=60000```
Optional variables:29 unmodified lines21 unmodified lines22232425262726272829303186 unmodified lines21 unmodified lines | { ok: false; error: string };
export function configFromEnv(env: NodeJS.ProcessEnv = process.env): ObserverConfig { return { provider: env.PRIME_COMMITMENT_OBSERVER_PROVIDER ?? "google", modelId: env.PRIME_COMMITMENT_OBSERVER_MODEL ?? "gemini-3.1-flash-lite", provider: env.PRIME_COMMITMENT_OBSERVER_PROVIDER ?? "deepseek", modelId: env.PRIME_COMMITMENT_OBSERVER_MODEL ?? "deepseek-v4-flash", apiKey: env.PRIME_COMMITMENT_OBSERVER_API_KEY, baseUrl: env.PRIME_COMMITMENT_OBSERVER_BASE_URL, temperature: env.PRIME_COMMITMENT_OBSERVER_TEMPERATURE ? Number(env.PRIME_COMMITMENT_OBSERVER_TEMPERATURE)86 unmodified lines123345678913 unmodified linesexport const OBSERVER_SYSTEM_PROMPT = `You maintain a lightweight ledger of unfinished user requests after one completed agent turn.
Return JSON matching the supplied schema.Return exactly one JSON object with this shape and no Markdown:{"existing":[{"id":"...","canonicalRequest":"...","status":"..."}],"additions":[{"canonicalRequest":"...","status":"..."}]}Existing entries always include id. Addition entries never include id.
Rules:- Return every existing thread exactly once in existing, with its unchanged id.- Never put an existing id in additions.13 unmodified lines157 unmodified linesExpand all15815916016116216316416516627 unmodified lines157 unmodified linesExpand all});
test("prompt has one coherent completion contract", () => { assert.match(OBSERVER_SYSTEM_PROMPT, /Use done when/); assert.match(OBSERVER_SYSTEM_PROMPT, /Addition entries never include id/); assert.doesNotMatch(OBSERVER_SYSTEM_PROMPT, /Never emit done|evidenceActionIds|required validation/);});
test("event parser rejects malformed persisted values", () => {27 unmodified lines