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.
- package/dist/agent-file/render.d.ts +1 -1
- package/dist/agent-file/render.js +3 -3
- package/dist/agent-file/render.js.map +1 -1
- package/dist/akinator/agent-task.d.ts +27 -0
- package/dist/akinator/agent-task.d.ts.map +1 -1
- package/dist/akinator/agent-task.js +14 -5
- package/dist/akinator/agent-task.js.map +1 -1
- package/dist/akinator/capability-contract.d.ts +25 -0
- package/dist/akinator/capability-contract.d.ts.map +1 -0
- package/dist/akinator/capability-contract.js +33 -0
- package/dist/akinator/capability-contract.js.map +1 -0
- package/dist/akinator/instructions.d.ts +3 -1
- package/dist/akinator/instructions.d.ts.map +1 -1
- package/dist/akinator/instructions.js +3 -1
- package/dist/akinator/instructions.js.map +1 -1
- package/dist/akinator/preparation-recovery.d.ts +48 -0
- package/dist/akinator/preparation-recovery.d.ts.map +1 -0
- package/dist/akinator/preparation-recovery.js +161 -0
- package/dist/akinator/preparation-recovery.js.map +1 -0
- package/dist/akinator/service.d.ts +7 -0
- package/dist/akinator/service.d.ts.map +1 -1
- package/dist/akinator/service.js +13 -0
- package/dist/akinator/service.js.map +1 -1
- package/dist/assurance/codex-hooks.d.ts.map +1 -1
- package/dist/assurance/codex-hooks.js +103 -20
- package/dist/assurance/codex-hooks.js.map +1 -1
- package/dist/assurance/contracts.d.ts +8 -1
- package/dist/assurance/contracts.d.ts.map +1 -1
- package/dist/assurance/contracts.js +3 -2
- package/dist/assurance/contracts.js.map +1 -1
- package/dist/assurance/hook-diagnostics.d.ts +4 -0
- package/dist/assurance/hook-diagnostics.d.ts.map +1 -0
- package/dist/assurance/hook-diagnostics.js +16 -0
- package/dist/assurance/hook-diagnostics.js.map +1 -0
- package/dist/commands/codex-hook.d.ts.map +1 -1
- package/dist/commands/codex-hook.js +15 -0
- package/dist/commands/codex-hook.js.map +1 -1
- package/dist/commands/setup.d.ts.map +1 -1
- package/dist/commands/setup.js +5 -2
- package/dist/commands/setup.js.map +1 -1
- package/dist/gateway/agent-service.d.ts +4 -0
- package/dist/gateway/agent-service.d.ts.map +1 -1
- package/dist/gateway/agent-service.js +14 -5
- package/dist/gateway/agent-service.js.map +1 -1
- package/dist/mcp/request-deadline.d.ts +1 -1
- package/dist/mcp/request-deadline.d.ts.map +1 -1
- package/dist/mcp/request-deadline.js +1 -0
- package/dist/mcp/request-deadline.js.map +1 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +53 -8
- package/dist/mcp/server.js.map +1 -1
- package/dist/server/routes/task-assurance.d.ts.map +1 -1
- package/dist/server/routes/task-assurance.js +8 -3
- package/dist/server/routes/task-assurance.js.map +1 -1
- package/dist/setup/codex-hooks.d.ts +7 -1
- package/dist/setup/codex-hooks.d.ts.map +1 -1
- package/dist/setup/codex-hooks.js +12 -2
- package/dist/setup/codex-hooks.js.map +1 -1
- package/dist/setup/render.js +2 -2
- package/dist/setup/render.js.map +1 -1
- package/docs/client-compatibility.md +51 -2
- package/docs/memory-assurance.md +34 -5
- package/migrations/009_preparation_recovery.sql +11 -0
- package/package.json +1 -1
- package/skills/kiokuko-soul/SKILL.md +6 -2
- 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"}
|
package/dist/akinator/service.js
CHANGED
|
@@ -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;
|
|
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: ${
|
|
55
|
-
hookSpecificOutput: { hookEventName: 'PreToolUse', permissionDecision: 'deny', permissionDecisionReason:
|
|
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
|
-
|
|
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
|
|
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' ?
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
226
|
+
return denyTurn('Task state changed before tool admission');
|
|
181
227
|
if (admission === 'conflict')
|
|
182
|
-
return
|
|
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 = ?').
|
|
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
|
-
|
|
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')
|