kiokuko 1.0.20 → 1.0.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/dist/agent-file/render.d.ts +1 -1
  2. package/dist/agent-file/render.js +3 -3
  3. package/dist/agent-file/render.js.map +1 -1
  4. package/dist/akinator/agent-task.d.ts +27 -0
  5. package/dist/akinator/agent-task.d.ts.map +1 -1
  6. package/dist/akinator/agent-task.js +14 -5
  7. package/dist/akinator/agent-task.js.map +1 -1
  8. package/dist/akinator/capability-contract.d.ts +25 -0
  9. package/dist/akinator/capability-contract.d.ts.map +1 -0
  10. package/dist/akinator/capability-contract.js +33 -0
  11. package/dist/akinator/capability-contract.js.map +1 -0
  12. package/dist/akinator/instructions.d.ts +3 -1
  13. package/dist/akinator/instructions.d.ts.map +1 -1
  14. package/dist/akinator/instructions.js +3 -1
  15. package/dist/akinator/instructions.js.map +1 -1
  16. package/dist/akinator/preparation-recovery.d.ts +48 -0
  17. package/dist/akinator/preparation-recovery.d.ts.map +1 -0
  18. package/dist/akinator/preparation-recovery.js +161 -0
  19. package/dist/akinator/preparation-recovery.js.map +1 -0
  20. package/dist/akinator/service.d.ts +7 -0
  21. package/dist/akinator/service.d.ts.map +1 -1
  22. package/dist/akinator/service.js +13 -0
  23. package/dist/akinator/service.js.map +1 -1
  24. package/dist/assurance/codex-hooks.d.ts.map +1 -1
  25. package/dist/assurance/codex-hooks.js +103 -20
  26. package/dist/assurance/codex-hooks.js.map +1 -1
  27. package/dist/assurance/contracts.d.ts +8 -1
  28. package/dist/assurance/contracts.d.ts.map +1 -1
  29. package/dist/assurance/contracts.js +3 -2
  30. package/dist/assurance/contracts.js.map +1 -1
  31. package/dist/assurance/hook-diagnostics.d.ts +4 -0
  32. package/dist/assurance/hook-diagnostics.d.ts.map +1 -0
  33. package/dist/assurance/hook-diagnostics.js +16 -0
  34. package/dist/assurance/hook-diagnostics.js.map +1 -0
  35. package/dist/commands/codex-hook.d.ts.map +1 -1
  36. package/dist/commands/codex-hook.js +15 -0
  37. package/dist/commands/codex-hook.js.map +1 -1
  38. package/dist/commands/setup.d.ts.map +1 -1
  39. package/dist/commands/setup.js +5 -2
  40. package/dist/commands/setup.js.map +1 -1
  41. package/dist/gateway/agent-service.d.ts +4 -0
  42. package/dist/gateway/agent-service.d.ts.map +1 -1
  43. package/dist/gateway/agent-service.js +14 -5
  44. package/dist/gateway/agent-service.js.map +1 -1
  45. package/dist/mcp/request-deadline.d.ts +1 -1
  46. package/dist/mcp/request-deadline.d.ts.map +1 -1
  47. package/dist/mcp/request-deadline.js +1 -0
  48. package/dist/mcp/request-deadline.js.map +1 -1
  49. package/dist/mcp/server.d.ts.map +1 -1
  50. package/dist/mcp/server.js +53 -8
  51. package/dist/mcp/server.js.map +1 -1
  52. package/dist/server/routes/task-assurance.d.ts.map +1 -1
  53. package/dist/server/routes/task-assurance.js +8 -3
  54. package/dist/server/routes/task-assurance.js.map +1 -1
  55. package/dist/setup/codex-hooks.d.ts +7 -1
  56. package/dist/setup/codex-hooks.d.ts.map +1 -1
  57. package/dist/setup/codex-hooks.js +12 -2
  58. package/dist/setup/codex-hooks.js.map +1 -1
  59. package/dist/setup/render.js +2 -2
  60. package/dist/setup/render.js.map +1 -1
  61. package/docs/client-compatibility.md +51 -2
  62. package/docs/memory-assurance.md +34 -5
  63. package/migrations/009_preparation_recovery.sql +11 -0
  64. package/package.json +1 -1
  65. package/skills/kiokuko-soul/SKILL.md +6 -2
  66. package/templates/AGENTS.md +3 -3
@@ -0,0 +1,161 @@
1
+ import * as z from 'zod/v4';
2
+ import { createHash, randomUUID } from 'node:crypto';
3
+ import { withImmediateTransaction } from '../db/transaction.js';
4
+ import { KiokukoError } from '../errors.js';
5
+ import { LedgerStore } from '../ledger/store.js';
6
+ import { AgentGatewayService } from '../gateway/agent-service.js';
7
+ import { canonicalContentHash } from '../serialization/validate.js';
8
+ import { resolveProjectWorkspaceReadOnly } from '../memory/workspaces.js';
9
+ import { canonicalDirectory } from '../repository/detect-root.js';
10
+ import { captureProjectManifestSnapshot, bindProjectManifestSnapshot, assertProjectManifestSnapshotBinding, } from '../repository/project-fingerprint.js';
11
+ import { assuranceState, enrollAssurance, bindAssuranceRoot } from '../assurance/service.js';
12
+ import { getAkinatorStateService } from './service.js';
13
+ import { resolveCapabilities, hasBlockingRequiredCapability } from './capabilities.js';
14
+ import { capabilityCatalogDigest, assertCapabilityCatalogBinding } from './capability-binding.js';
15
+ import { assertPreparationCapabilities, capabilityCatalogSchema } from './capability-contract.js';
16
+ import { readTaskContextRequestBinding, bindTaskContextRequest, bindSkillDiscoveryRequest, skillDiscoveryRequestIdentity, assertSkillDiscoveryRequestBinding, finalizeAgentTask, } from './agent-task.js';
17
+ import { readSkillDiscoveryConfig } from '../skills/config.js';
18
+ const id = z.string().min(1).max(256).refine(value => value.trim() === value && !/\p{Cc}/u.test(value));
19
+ export const preparationRecoverySchema = z.object({
20
+ cwd: z.string().min(1).max(4096),
21
+ runId: id,
22
+ requestId: id,
23
+ operationId: id,
24
+ expectedRevision: z.number().int().min(0),
25
+ soulRead: z.literal(true),
26
+ previousCapabilities: z.array(z.unknown()).optional(),
27
+ capabilities: capabilityCatalogSchema,
28
+ }).strict();
29
+ function conflict(message) { throw new KiokukoError('CONFLICT', message); }
30
+ /** Establish the immutable predecessor identity without retrieving its memories. */
31
+ async function readPredecessor(db, input) {
32
+ const root = canonicalDirectory(input.cwd);
33
+ const project = await resolveProjectWorkspaceReadOnly(db, root);
34
+ if (!project)
35
+ conflict('Recovery project is not registered');
36
+ const old = new LedgerStore(db).readRun(input.runId);
37
+ if (!old || old.workspace !== project.workspace
38
+ || assuranceState(db, old.runId)?.repository_root !== project.repositoryRoot) {
39
+ conflict('Recovery repository differs from predecessor');
40
+ }
41
+ assertCapabilityCatalogBinding(old.metadata, input.previousCapabilities);
42
+ const openingKey = `mcp-task-prepare-${canonicalContentHash({ version: 1, requestId: input.requestId })}`;
43
+ const opening = db.prepare("SELECT response_json FROM gateway_idempotency WHERE scope='agent.run.open' AND key_hash=?")
44
+ .get(createHash('sha256').update(openingKey).digest('hex'));
45
+ if (!opening || JSON.parse(opening.response_json).runId !== old.runId) {
46
+ conflict('Logical request does not identify predecessor');
47
+ }
48
+ const session = db.prepare('SELECT session_id FROM run_intakes WHERE run_id=?')
49
+ .get(old.runId);
50
+ if (!session)
51
+ conflict('Predecessor intake is unavailable');
52
+ const intake = await getAkinatorStateService(db, { workspace: old.workspace, sessionId: session.session_id });
53
+ const capabilities = resolveCapabilities({
54
+ task: intake.session.task, profile: intake.session.profile, recommendedTags: intake.recommendedTags,
55
+ capabilities: input.previousCapabilities, memoryUse: 'none',
56
+ });
57
+ if (!hasBlockingRequiredCapability(capabilities))
58
+ conflict('Predecessor is not capability blocked');
59
+ const binding = readTaskContextRequestBinding(old.metadata);
60
+ if (!binding)
61
+ conflict('Predecessor retrieval binding is unavailable');
62
+ return { root, project, old, intake, binding };
63
+ }
64
+ /** Check safety again under the write lock, including work admitted by client hooks. */
65
+ function assertUnexecutedPredecessor(db, input, old) {
66
+ const current = new LedgerStore(db).readRun(old.runId);
67
+ const state = assuranceState(db, old.runId);
68
+ if (!['active', 'intake'].includes(current.status) || state?.revision !== input.expectedRevision
69
+ || current.lastSequence !== old.lastSequence)
70
+ conflict('Predecessor state changed');
71
+ const executed = db.prepare(`SELECT 1 FROM ledger_events WHERE run_id=? AND event_type NOT IN
72
+ ('intake.started','intake.answered','intake.ready','intake.exhausted','run.started') LIMIT 1`).get(old.runId);
73
+ const evidence = db.prepare('SELECT 1 FROM task_execution_evidence WHERE run_id=? LIMIT 1').get(old.runId);
74
+ const hook = db.prepare('SELECT 1 FROM codex_hook_tools WHERE run_id=? LIMIT 1').get(old.runId);
75
+ const running = db.prepare("SELECT 1 FROM agent_task_skill_discovery_attempts WHERE run_id=? AND state='started' LIMIT 1")
76
+ .get(old.runId);
77
+ if (executed || evidence || hook || running)
78
+ conflict('Predecessor has execution or in-flight work');
79
+ }
80
+ /** Recover only an unexecuted capability-blocked task; retain its immutable history. */
81
+ export async function recoverTaskPreparation(db, raw, signal) {
82
+ const parsed = preparationRecoverySchema.safeParse(raw);
83
+ if (!parsed.success)
84
+ throw new KiokukoError('VALIDATION_ERROR', 'Invalid preparation recovery input');
85
+ const input = parsed.data;
86
+ assertPreparationCapabilities(input.capabilities);
87
+ signal?.throwIfAborted();
88
+ const { root, project, old, intake, binding } = await readPredecessor(db, input);
89
+ const requestDigest = canonicalContentHash({
90
+ ...input, cwd: root, previousCapabilities: capabilityCatalogDigest(input.previousCapabilities),
91
+ capabilities: capabilityCatalogDigest(input.capabilities),
92
+ });
93
+ const operationHash = canonicalContentHash(input.operationId);
94
+ const logicalHash = canonicalContentHash(input.requestId);
95
+ const manifestSnapshot = captureProjectManifestSnapshot(project);
96
+ const discovery = skillDiscoveryRequestIdentity(readSkillDiscoveryConfig().mode, input.capabilities);
97
+ const successor = withImmediateTransaction(db, () => {
98
+ signal?.throwIfAborted();
99
+ const operation = db.prepare('SELECT predecessor_run_id FROM task_preparation_recoveries WHERE operation_hash=?')
100
+ .get(operationHash);
101
+ if (operation && operation.predecessor_run_id !== old.runId)
102
+ conflict('Recovery operation belongs to another predecessor');
103
+ const prior = db.prepare('SELECT * FROM task_preparation_recoveries WHERE predecessor_run_id=?')
104
+ .get(old.runId);
105
+ if (prior) {
106
+ if (prior.request_digest !== requestDigest || prior.operation_hash !== operationHash
107
+ || prior.logical_request_hash !== logicalHash)
108
+ conflict('Recovery operation conflicts');
109
+ return prior.successor_run_id;
110
+ }
111
+ assertUnexecutedPredecessor(db, input, old);
112
+ const newRunId = randomUUID();
113
+ const gateway = new AgentGatewayService(db, { runIdFactory: () => newRunId });
114
+ gateway.openRunInTransaction({
115
+ idempotencyKey: `recovery-${canonicalContentHash({ predecessor: old.runId, operationHash })}`,
116
+ request: {
117
+ apiVersion: '1', workspace: old.workspace, client: old.client,
118
+ captureProfile: old.captureProfile, coverage: old.coverage,
119
+ task: { title: old.title ?? intake.session.task, query: intake.session.task, profileHints: intake.session.profile },
120
+ capabilities: input.capabilities,
121
+ metadata: bindTaskContextRequest(bindSkillDiscoveryRequest(bindProjectManifestSnapshot({ source: 'mcp' }, project, manifestSnapshot), discovery), binding.maxContextChars, binding.temporal, binding.relatedMode),
122
+ },
123
+ }, { predecessorRunId: old.runId });
124
+ const now = new Date().toISOString();
125
+ enrollAssurance(db, newRunId, now);
126
+ bindAssuranceRoot(db, newRunId, project.repositoryRoot, 'pending');
127
+ const store = new LedgerStore(db);
128
+ store.appendBatchInTransaction(old.runId, { events: [{
129
+ eventId: randomUUID(), eventType: 'run.closed', actor: 'kiokuko', occurredAt: now,
130
+ payload: { status: 'failed', reason: 'capability_preparation_recovered', successorRunId: newRunId },
131
+ }] });
132
+ store.updateRunStatusInTransaction(old.runId, 'failed', now);
133
+ db.prepare(`INSERT INTO task_preparation_recoveries
134
+ (predecessor_run_id,successor_run_id,request_digest,operation_hash,logical_request_hash,
135
+ old_catalog_digest,new_catalog_digest,created_at) VALUES (?,?,?,?,?,?,?,?)`)
136
+ .run(old.runId, newRunId, requestDigest, operationHash, logicalHash, capabilityCatalogDigest(input.previousCapabilities), capabilityCatalogDigest(input.capabilities), now);
137
+ return newRunId;
138
+ });
139
+ const newRun = new LedgerStore(db).readRun(successor);
140
+ if (!['active', 'intake'].includes(newRun.status))
141
+ conflict('Recovered successor is terminal');
142
+ assertProjectManifestSnapshotBinding(newRun.metadata, project, manifestSnapshot);
143
+ assertSkillDiscoveryRequestBinding(newRun.metadata, discovery);
144
+ const session = db.prepare('SELECT session_id FROM run_intakes WHERE run_id=?')
145
+ .get(successor);
146
+ const context = await getAkinatorStateService(db, { workspace: old.workspace, sessionId: session.session_id });
147
+ const prepared = await finalizeAgentTask({
148
+ database: db, project,
149
+ executionContext: {
150
+ canonicalCwd: root, repositoryRoot: project.repositoryRoot,
151
+ cwdIsRepositoryRoot: root === project.repositoryRoot, pathPolicy: 'canonical_absolute_under_repository_root',
152
+ },
153
+ manifestSnapshot, context, runId: successor, capabilities: input.capabilities,
154
+ maxContextChars: binding.maxContextChars,
155
+ ...(binding.temporal === undefined ? {} : { temporal: binding.temporal }),
156
+ relatedMode: binding.relatedMode, discoveryMode: discovery.mode,
157
+ ...(signal === undefined ? {} : { signal }),
158
+ });
159
+ return { ...prepared, recoveredFromRunId: old.runId };
160
+ }
161
+ //# sourceMappingURL=preparation-recovery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preparation-recovery.js","sourceRoot":"","sources":["../../src/akinator/preparation-recovery.ts"],"names":[],"mappings":"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"}
@@ -24,6 +24,13 @@ export interface AkinatorAnswerTransactionResult {
24
24
  }
25
25
  /** Caller-owned transaction primitive. It never begins, commits, or rolls back. */
26
26
  export declare function startAkinatorInTransaction(database: SqliteDatabase, input: StartAkinatorInput): AkinatorResult;
27
+ /** Clone intake progress into a fresh session inside the caller's transaction. */
28
+ export declare function cloneAkinatorInTransaction(database: SqliteDatabase, input: {
29
+ workspace: string;
30
+ sessionId: string;
31
+ successorSessionId: string;
32
+ now: string;
33
+ }): AkinatorResult;
27
34
  export declare function startAkinatorService(database: SqliteDatabase, input: StartAkinatorInput): Promise<AkinatorResult>;
28
35
  /** Caller-owned transaction primitive. It never begins, commits, or rolls back. */
29
36
  export declare function answerAkinatorInTransaction(database: SqliteDatabase, input: AnswerAkinatorInput): AkinatorAnswerTransactionResult;
@@ -1 +1 @@
1
- {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/akinator/service.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAiBvD,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAuB,WAAW,EAAE,MAAM,YAAY,CAAC;AAKpG,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,WAAW,CAAC;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,+BAA+B;IAC9C,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAChC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;CAC5B;AAqLD,mFAAmF;AACnF,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,cAAc,EACxB,KAAK,EAAE,kBAAkB,GACxB,cAAc,CAsBhB;AAED,wBAAsB,oBAAoB,CACxC,QAAQ,EAAE,cAAc,EACxB,KAAK,EAAE,kBAAkB,GACxB,OAAO,CAAC,cAAc,CAAC,CAGzB;AAED,mFAAmF;AACnF,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,cAAc,EACxB,KAAK,EAAE,mBAAmB,GACzB,+BAA+B,CA0CjC;AAED,wBAAsB,qBAAqB,CACzC,QAAQ,EAAE,cAAc,EACxB,KAAK,EAAE,mBAAmB,GACzB,OAAO,CAAC,cAAc,CAAC,CAGzB;AAED,wBAAsB,uBAAuB,CAC3C,QAAQ,EAAE,cAAc,EACxB,KAAK,EAAE,oBAAoB,GAC1B,OAAO,CAAC,cAAc,CAAC,CAOzB;AAED,wBAAsB,yBAAyB,CAC7C,QAAQ,EAAE,cAAc,EACxB,KAAK,EAAE,oBAAoB,GAC1B,OAAO,CAAC,eAAe,CAAC,CAyB1B"}
1
+ {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/akinator/service.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAiBvD,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAuB,WAAW,EAAE,MAAM,YAAY,CAAC;AAKpG,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,WAAW,CAAC;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,+BAA+B;IAC9C,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAChC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;CAC5B;AAqLD,mFAAmF;AACnF,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,cAAc,EACxB,KAAK,EAAE,kBAAkB,GACxB,cAAc,CAsBhB;AAED,kFAAkF;AAClF,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,cAAc,EACxB,KAAK,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,kBAAkB,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GACvF,cAAc,CAWhB;AAED,wBAAsB,oBAAoB,CACxC,QAAQ,EAAE,cAAc,EACxB,KAAK,EAAE,kBAAkB,GACxB,OAAO,CAAC,cAAc,CAAC,CAGzB;AAED,mFAAmF;AACnF,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,cAAc,EACxB,KAAK,EAAE,mBAAmB,GACzB,+BAA+B,CA0CjC;AAED,wBAAsB,qBAAqB,CACzC,QAAQ,EAAE,cAAc,EACxB,KAAK,EAAE,mBAAmB,GACzB,OAAO,CAAC,cAAc,CAAC,CAGzB;AAED,wBAAsB,uBAAuB,CAC3C,QAAQ,EAAE,cAAc,EACxB,KAAK,EAAE,oBAAoB,GAC1B,OAAO,CAAC,cAAc,CAAC,CAOzB;AAED,wBAAsB,yBAAyB,CAC7C,QAAQ,EAAE,cAAc,EACxB,KAAK,EAAE,oBAAoB,GAC1B,OAAO,CAAC,eAAe,CAAC,CAyB1B"}
@@ -221,6 +221,19 @@ export function startAkinatorInTransaction(database, input) {
221
221
  });
222
222
  return resultForSession(session);
223
223
  }
224
+ /** Clone intake progress into a fresh session inside the caller's transaction. */
225
+ export function cloneAkinatorInTransaction(database, input) {
226
+ const previous = readAkinatorSession(database, { workspace: input.workspace, sessionId: input.sessionId });
227
+ const session = insertAkinatorSession(database, {
228
+ id: input.successorSessionId, workspace: previous.workspace, task: previous.task,
229
+ profile: previous.profile, status: previous.status, questionCount: previous.questionCount,
230
+ createdAt: input.now, updatedAt: input.now,
231
+ });
232
+ database.prepare(`INSERT INTO akinator_answers (session_id, question_id, answer_json, created_at)
233
+ SELECT ?, question_id, answer_json, created_at FROM akinator_answers WHERE session_id=?`)
234
+ .run(session.id, previous.id);
235
+ return resultForSession(session);
236
+ }
224
237
  export async function startAkinatorService(database, input) {
225
238
  const normalized = startInput(input);
226
239
  return withImmediateTransaction(database, () => startAkinatorInTransaction(database, normalized));
@@ -1 +1 @@
1
- {"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/akinator/service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/akinator/service.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"codex-hooks.d.ts","sourceRoot":"","sources":["../../src/assurance/codex-hooks.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAa,MAAM,kBAAkB,CAAC;AASlE,eAAO,MAAM,qBAAqB,yMAAyM,CAAC;AAU5O,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAI9E;AAkBD,iGAAiG;AACjG,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAG9D;AAoKD,+EAA+E;AAC/E,wBAAgB,eAAe,CAAC,EAAE,EAAE,cAAc,EAAE,GAAG,EAAE,OAAO,GAAG,MAAM,CAuBxE;AACD,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAU3D"}
1
+ {"version":3,"file":"codex-hooks.d.ts","sourceRoot":"","sources":["../../src/assurance/codex-hooks.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAa,MAAM,kBAAkB,CAAC;AASlE,eAAO,MAAM,qBAAqB,yMAAyM,CAAC;AAU5O,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAI9E;AAkBD,iGAAiG;AACjG,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAG9D;AAoOD,+EAA+E;AAC/E,wBAAgB,eAAe,CAAC,EAAE,EAAE,cAAc,EAAE,GAAG,EAAE,OAAO,GAAG,MAAM,CAuBxE;AACD,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAe3D"}
@@ -49,12 +49,20 @@ export function observedExitCode(value) {
49
49
  const response = record(value);
50
50
  return typeof response.exit_code === 'number' && Number.isSafeInteger(response.exit_code) ? response.exit_code : null;
51
51
  }
52
+ const turnStopReason = 'Kiokuko stopped this turn after a policy denial. Do not retry tools or attempt preparation/recovery. Report the blocker and wait for a new user message.';
52
53
  function deny(reason) {
54
+ const message = `${reason} ${turnStopReason}`;
53
55
  return {
54
- systemMessage: `Kiokuko blocked this tool call: ${reason}`,
55
- hookSpecificOutput: { hookEventName: 'PreToolUse', permissionDecision: 'deny', permissionDecisionReason: reason },
56
+ systemMessage: `Kiokuko blocked this tool call: ${message}`,
57
+ hookSpecificOutput: { hookEventName: 'PreToolUse', permissionDecision: 'deny', permissionDecisionReason: message },
56
58
  };
57
59
  }
60
+ function stopTurn(event) {
61
+ // SubagentStart cannot stop a child with continue:false. Its tool gate still denies.
62
+ if (event === 'SubagentStart')
63
+ return context(event, turnStopReason);
64
+ return { continue: false, stopReason: turnStopReason, systemMessage: turnStopReason };
65
+ }
58
66
  function context(event, text) {
59
67
  return { hookSpecificOutput: { hookEventName: event, additionalContext: text } };
60
68
  }
@@ -68,7 +76,9 @@ function memoryStepContext(db, runId, root) {
68
76
  return context('PostToolUse', `Next action: review_memory_application (${report.pending.length} pending). Call task_memory_status with ${identity}, then task_memory_review for every pending entry. Use task_inspect for evidence and bundled Skills, including natural-japanese-output; do not use shell commands or code search yet. Submit reviews sequentially with the revision from the latest response. Register grounded adoption, inapplicability or contradiction; never invent decisions to unlock execution. After the last review, check task_memory_status. Do not repeat task_prepare.`);
69
77
  return context('PostToolUse', 'Memory decisions are current; ordinary tools may proceed for this active run. Adopted code memories still require passing verification before completion.');
70
78
  }
71
- const preparationTools = new Set(['memory_index_submit', 'memory_index_review', 'task_inspect', 'task_prepare', 'task_answer', 'task_memory_review', 'task_memory_status', 'task_memory_refresh', 'task_execution_evidence', 'memory_checkpoint', 'memory_capture', 'memory_recall', 'handoff_save', 'handoff_load', 'handoff_discard', 'curator_check']);
79
+ const preparationTools = new Set(['memory_index_submit', 'memory_index_review', 'task_inspect', 'task_prepare', 'task_prepare_recover', 'task_answer', 'task_memory_review', 'task_memory_status', 'task_memory_refresh', 'task_execution_evidence', 'memory_checkpoint', 'memory_capture', 'memory_recall', 'handoff_save', 'handoff_load', 'handoff_discard', 'curator_check']);
80
+ // Exact, observed non-execution tools. Never infer safety from names or shell text.
81
+ const conversationTools = new Set(['request_user_input', 'request_user_input_async', 'clockcurr_time']);
72
82
  function kiokukoTool(name) {
73
83
  const match = /^mcp__kiokuko__(\w+)$/.exec(name);
74
84
  return match && preparationTools.has(match[1]) ? match[1] : null;
@@ -80,19 +90,41 @@ function handleCodexHookEvent(db, raw) {
80
90
  const identity = canonicalContentHash({ session: input.session_id, turn: input.turn_id, agent: input.agent_id ?? 'main', root });
81
91
  const requestId = `codex-${identity}`;
82
92
  const now = new Date().toISOString();
93
+ const denyTurn = (reason) => {
94
+ withImmediateTransaction(db, () => {
95
+ // Reuse the existing durable stop flag; exact event replay never clears it.
96
+ db.prepare(`INSERT INTO codex_hook_requests
97
+ (identity_digest, repository_root, run_id, request_id, state, stop_notified, last_event, updated_at)
98
+ VALUES (?, ?, NULL, ?, 'pending', 1, ?, ?)
99
+ ON CONFLICT(identity_digest) DO UPDATE SET stop_notified=1, last_event=excluded.last_event, updated_at=excluded.updated_at`)
100
+ .run(identity, root, requestId, input.hook_event_name, now);
101
+ const current = db.prepare('SELECT run_id FROM codex_hook_requests WHERE identity_digest=?').get(identity);
102
+ if (current?.run_id) {
103
+ const store = new LedgerStore(db);
104
+ const run = store.readRun(current.run_id);
105
+ if (run && (run.status === 'active' || run.status === 'intake'))
106
+ store.updateRunStatusInTransaction(run.runId, 'failed', now);
107
+ }
108
+ });
109
+ return deny(reason);
110
+ };
83
111
  let request = db.prepare('SELECT * FROM codex_hook_requests WHERE identity_digest = ?').get(identity);
84
112
  if (input.hook_event_name === 'UserPromptSubmit' || input.hook_event_name === 'SubagentStart') {
113
+ if (request?.stop_notified)
114
+ return stopTurn(input.hook_event_name);
85
115
  withImmediateTransaction(db, () => {
86
116
  db.prepare("INSERT INTO codex_hook_requests VALUES (?, ?, NULL, ?, 'pending', 0, ?, ?) ON CONFLICT(identity_digest) DO UPDATE SET last_event=excluded.last_event, updated_at=excluded.updated_at")
87
117
  .run(identity, root, requestId, input.hook_event_name, now);
88
118
  });
89
- return context(input.hook_event_name, `Kiokuko request ${requestId}. Before project work, call task_inspect with {"cwd":${JSON.stringify(root)},"operation":"skill"} (omit path to read kiokuko-soul). Read memory-reasoning through task_inspect before advertising it, then call task_prepare with this requestId and soulRead=true. Use task_inspect for all preparation reads and bundled Skills, including natural-japanese-output; do not read Skills through shell commands. After intake, resolve every pending or stale memory decision before ordinary tools, code search or execution. Follow nextAction; use task_memory_status and sequential task_memory_review calls with the latest revision. Ordinary conversation needs no project run. ${CODEX_HOOK_LIMITATION}`);
119
+ if (db.prepare('SELECT stop_notified FROM codex_hook_requests WHERE identity_digest=?').get(identity)?.stop_notified)
120
+ return stopTurn(input.hook_event_name);
121
+ return context(input.hook_event_name, `Kiokuko request ${requestId}. Before project work, call task_inspect with {"cwd":${JSON.stringify(root)},"operation":"skill"} (omit path to read kiokuko-soul). Read memory-reasoning through task_inspect before advertising it, then call task_prepare with this requestId and soulRead=true. Use task_inspect for all preparation reads and bundled Skills, including natural-japanese-output; do not read Skills through shell commands. After intake, resolve every pending or stale memory decision before ordinary tools, code search or execution. Follow nextAction; use task_memory_status and sequential task_memory_review calls with the latest revision. User clarification tools request_user_input and request_user_input_async, and the clockcurr_time read, remain available before preparation and memory review. A policy denial ends this turn: do not retry or recover within it; report the blocker and wait for a new user message. Ordinary conversation needs no project run. ${CODEX_HOOK_LIMITATION}`);
90
122
  }
91
123
  if (!request) {
92
124
  if (input.hook_event_name === 'Interrupt' || input.hook_event_name === 'SubagentStop')
93
125
  return {};
94
126
  if (input.hook_event_name === 'PreToolUse')
95
- return deny('Kiokuko has not observed this request start. Parent-agent preparation is not inherited.');
127
+ return denyTurn('Kiokuko has not observed this request start. Parent-agent preparation is not inherited.');
96
128
  throw new KiokukoError('CONFLICT', 'Hook request start was not observed');
97
129
  }
98
130
  db.prepare('UPDATE codex_hook_requests SET last_event = ?, updated_at = ? WHERE identity_digest = ?').run(input.hook_event_name, now, identity);
@@ -109,7 +141,9 @@ function handleCodexHookEvent(db, raw) {
109
141
  return {}; // Never request continuation after cancellation.
110
142
  }
111
143
  if (request.state === 'cancelled')
112
- return input.hook_event_name === 'PreToolUse' ? deny('Request was interrupted') : {};
144
+ return input.hook_event_name === 'PreToolUse' ? denyTurn('Request was interrupted') : {};
145
+ if (request.stop_notified)
146
+ return input.hook_event_name === 'PreToolUse' ? deny('This turn already had a policy denial.') : stopTurn(input.hook_event_name);
113
147
  if (input.hook_event_name === 'Stop' || input.hook_event_name === 'SubagentStop') {
114
148
  if (!request.run_id)
115
149
  return {}; // Ordinary conversation never required a run.
@@ -126,33 +160,45 @@ function handleCodexHookEvent(db, raw) {
126
160
  }
127
161
  if (!input.tool_name || !input.tool_use_id)
128
162
  throw new KiokukoError('VALIDATION_ERROR', 'Hook tool identity is missing');
163
+ if (conversationTools.has(input.tool_name))
164
+ return {};
129
165
  const operation = kiokukoTool(input.tool_name);
130
166
  const args = record(input.tool_input);
131
167
  if (input.hook_event_name === 'PreToolUse') {
132
168
  if (['spawn_agent', 'Agent'].includes(input.tool_name))
133
- return deny('Delegation requires a client adapter that supplies distinct agent identity on every child tool event.');
169
+ return denyTurn('Delegation requires a client adapter that supplies distinct agent identity on every child tool event.');
170
+ if (operation === 'task_prepare_recover') {
171
+ const receipt = db.prepare('SELECT successor_run_id FROM task_preparation_recoveries WHERE predecessor_run_id=?')
172
+ .get(String(args.runId));
173
+ if (args.requestId !== requestId
174
+ || (args.runId !== request.run_id && receipt?.successor_run_id !== request.run_id)
175
+ || typeof args.cwd !== 'string' || realpathSync(args.cwd) !== root) {
176
+ return denyTurn('Recovery must match the pending client request and predecessor');
177
+ }
178
+ return {};
179
+ }
134
180
  if (operation === 'task_prepare') {
135
181
  // Validate rather than rewrite: MCP updatedInput can trigger client approval.
136
182
  // The model must supply its own read attestation and request binding.
137
183
  if (args.requestId !== requestId || typeof args.cwd !== 'string' || realpathSync(args.cwd) !== root)
138
- return deny(`Use requestId ${requestId} and cwd ${root} for this request.`);
184
+ return denyTurn(`Use requestId ${requestId} and cwd ${root} for this request.`);
139
185
  return {};
140
186
  }
141
187
  if (operation) {
142
188
  if (args.runId !== undefined && args.runId !== request.run_id)
143
- return deny('Tool run is not bound to this client request');
189
+ return denyTurn('Tool run is not bound to this client request');
144
190
  return {};
145
191
  }
146
192
  if (!request.run_id)
147
- return deny(`Read kiokuko-soul with task_inspect {"cwd":${JSON.stringify(root)},"operation":"skill"} (omit path), then complete task_prepare. task_inspect also permits bounded preparation reads.`);
193
+ return denyTurn(`Preparation was missing: read kiokuko-soul with task_inspect {"cwd":${JSON.stringify(root)},"operation":"skill"} (omit path), then complete task_prepare in a new turn. task_inspect also permits bounded preparation reads.`);
148
194
  if (request.state !== 'bound')
149
- return deny('Kiokuko preparation has not permitted progress; resolve the current intake or required capability gate.');
195
+ return denyTurn('Kiokuko preparation has not permitted progress; the current intake or required capability gate is unresolved.');
150
196
  const run = new LedgerStore(db).readRun(request.run_id);
151
197
  if (!run || run.status !== 'active')
152
- return deny('Kiokuko intake is unfinished or the run is terminal');
198
+ return denyTurn('Kiokuko intake is unfinished or the run is terminal');
153
199
  const report = taskAssuranceReport(db, request.run_id, false);
154
200
  if (report.pending.length || report.stale.length)
155
- return deny(`Memory review is incomplete (${report.pending.length} pending, ${report.stale.length} stale). The agent must call task_memory_status, ${report.stale.length ? 'then task_memory_refresh on the same run for stale entries,' : ''} then task_memory_review for each unresolved entry using the current revision returned by the latest response. Use task_inspect for bounded reads while reviews are pending. This tool call did not execute.`);
201
+ return denyTurn(`Memory review is incomplete (${report.pending.length} pending, ${report.stale.length} stale). Required order: task_memory_status, ${report.stale.length ? 'then task_memory_refresh for stale entries,' : ''} then task_memory_review for each unresolved entry using the latest revision. Use task_inspect for bounded reads before attempting ordinary tools. This tool call did not execute.`);
156
202
  const state = assuranceState(db, request.run_id);
157
203
  const inputDigest = canonicalContentHash(input.tool_input ?? null);
158
204
  let stateDigest;
@@ -166,7 +212,7 @@ function handleCodexHookEvent(db, raw) {
166
212
  const current = db.prepare('SELECT * FROM codex_hook_requests WHERE identity_digest = ?').get(identity);
167
213
  const currentRun = current?.run_id ? new LedgerStore(db).readRun(current.run_id) : null;
168
214
  const currentState = current?.run_id ? assuranceState(db, current.run_id) : null;
169
- if (!current || current.state !== 'bound' || current.run_id !== request.run_id || currentRun?.status !== 'active'
215
+ if (!current || current.stop_notified || current.state !== 'bound' || current.run_id !== request.run_id || currentRun?.status !== 'active'
170
216
  || currentState?.delivery_id !== state.delivery_id)
171
217
  return 'stale';
172
218
  const prior = db.prepare('SELECT input_digest FROM codex_hook_tools WHERE identity_digest = ? AND call_id = ?').get(identity, input.tool_use_id);
@@ -177,11 +223,32 @@ function handleCodexHookEvent(db, raw) {
177
223
  return 'accepted';
178
224
  });
179
225
  if (admission === 'stale')
180
- return deny('Task state changed before tool admission');
226
+ return denyTurn('Task state changed before tool admission');
181
227
  if (admission === 'conflict')
182
- return deny('Tool call identity was reused with different input');
228
+ return denyTurn('Tool call identity was reused with different input');
183
229
  return {};
184
230
  }
231
+ if (operation === 'task_prepare_recover') {
232
+ const result = responseData(input.tool_response);
233
+ const successor = record(result.run).runId;
234
+ if (typeof successor !== 'string')
235
+ return {};
236
+ const receipt = db.prepare('SELECT * FROM task_preparation_recoveries WHERE predecessor_run_id=?')
237
+ .get(String(args.runId));
238
+ if (!receipt || receipt.successor_run_id !== successor
239
+ || receipt.logical_request_hash !== canonicalContentHash(requestId)
240
+ || receipt.operation_hash !== canonicalContentHash(args.operationId)
241
+ || (result.recoveredFromRunId !== request.run_id && successor !== request.run_id)
242
+ || assuranceState(db, successor)?.repository_root !== root) {
243
+ throw new KiokukoError('CONFLICT', 'Recovery response does not match durable client binding');
244
+ }
245
+ const admitted = ['proceed', 'review_memory_application', 'refresh_memory'].includes(String(result.nextAction));
246
+ const updated = db.prepare('UPDATE codex_hook_requests SET run_id=?,state=? WHERE identity_digest=? AND stop_notified=0 RETURNING identity_digest')
247
+ .get(successor, admitted ? 'bound' : 'pending', identity);
248
+ if (!updated)
249
+ return stopTurn('PostToolUse');
250
+ return admitted ? memoryStepContext(db, successor, root) : {};
251
+ }
185
252
  if (operation === 'task_prepare' || operation === 'task_answer') {
186
253
  const result = responseData(input.tool_response);
187
254
  const runId = record(result.run).runId;
@@ -196,7 +263,9 @@ function handleCodexHookEvent(db, raw) {
196
263
  // Intake binding and memory admission are separate: reviews must be able to
197
264
  // unlock a prepared run without replaying task_prepare or task_answer.
198
265
  const prepared = ['proceed', 'review_memory_application', 'refresh_memory'].includes(String(result.nextAction));
199
- db.prepare('UPDATE codex_hook_requests SET run_id = ?, state = ? WHERE identity_digest = ?').run(runId, prepared ? 'bound' : 'pending', identity);
266
+ const updated = db.prepare('UPDATE codex_hook_requests SET run_id = ?, state = ? WHERE identity_digest = ? AND stop_notified=0 RETURNING identity_digest').get(runId, prepared ? 'bound' : 'pending', identity);
267
+ if (!updated)
268
+ return stopTurn('PostToolUse');
200
269
  return prepared ? memoryStepContext(db, runId, root) : {};
201
270
  }
202
271
  if (['task_memory_review', 'task_memory_refresh'].includes(operation ?? '') && request.state === 'bound'
@@ -212,10 +281,17 @@ function handleCodexHookEvent(db, raw) {
212
281
  // the writer lock. A different call may have advanced that revision already.
213
282
  return withImmediateTransaction(db, () => {
214
283
  const current = db.prepare('SELECT * FROM codex_hook_requests WHERE identity_digest = ?').get(identity);
284
+ if (current?.stop_notified)
285
+ return stopTurn('PostToolUse');
215
286
  const call = db.prepare('SELECT * FROM codex_hook_tools WHERE identity_digest = ? AND call_id = ?').get(identity, input.tool_use_id);
216
- if (!current || current.run_id !== request.run_id || current.state !== 'bound'
217
- || !call || call.run_id !== current.run_id || call.input_digest !== canonicalContentHash(input.tool_input ?? null))
287
+ if (!current || current.run_id !== request.run_id || current.state !== 'bound')
288
+ throw new KiokukoError('CONFLICT', 'Tool completion binding changed');
289
+ if (!call)
218
290
  throw new KiokukoError('CONFLICT', 'Tool completion has no matching start');
291
+ if (call.run_id !== current.run_id)
292
+ throw new KiokukoError('CONFLICT', 'Tool completion binding changed');
293
+ if (call.input_digest !== canonicalContentHash(input.tool_input ?? null))
294
+ throw new KiokukoError('CONFLICT', 'Tool completion input changed');
219
295
  const run = new LedgerStore(db).readRun(current.run_id);
220
296
  if (!run || run.status !== 'active')
221
297
  throw new KiokukoError('CONFLICT', 'Tool completion belongs to a terminal run');
@@ -286,8 +362,15 @@ export function handleCodexHook(db, raw) {
286
362
  }
287
363
  export function codexHookFailureCode(error) {
288
364
  if (error instanceof KiokukoError) {
289
- if (error.code === 'CONFLICT')
365
+ if (error.code === 'CONFLICT') {
366
+ if (error.message === 'Tool completion has no matching start')
367
+ return 'completion_without_admission';
368
+ if (error.message === 'Tool completion input changed')
369
+ return 'completion_input_mismatch';
370
+ if (error.message === 'Tool completion binding changed')
371
+ return 'completion_binding_changed';
290
372
  return 'state_conflict';
373
+ }
291
374
  if (error.code === 'BACKPRESSURE')
292
375
  return 'database_busy';
293
376
  if (error.code === 'SERVICE_UNAVAILABLE' && error.message === 'Repository state digest unavailable')