kiokuko-dsh 0.2.2 → 0.2.3
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/README.ja.md +4 -5
- package/README.md +5 -5
- package/dist/client.cjs +2 -2
- package/dist/context/continuity-view.d.ts +1 -1
- package/dist/dsh/coding-workflow/contracts.d.ts +120 -0
- package/dist/dsh/coding-workflow/contracts.d.ts.map +1 -0
- package/dist/dsh/coding-workflow/contracts.js +77 -0
- package/dist/dsh/coding-workflow/contracts.js.map +1 -0
- package/dist/dsh/coding-workflow/host.d.ts +41 -0
- package/dist/dsh/coding-workflow/host.d.ts.map +1 -0
- package/dist/dsh/coding-workflow/host.js +235 -0
- package/dist/dsh/coding-workflow/host.js.map +1 -0
- package/dist/dsh/coding-workflow/intent.d.ts +15 -0
- package/dist/dsh/coding-workflow/intent.d.ts.map +1 -0
- package/dist/dsh/coding-workflow/intent.js +86 -0
- package/dist/dsh/coding-workflow/intent.js.map +1 -0
- package/dist/dsh/coding-workflow/service.d.ts +155 -0
- package/dist/dsh/coding-workflow/service.d.ts.map +1 -0
- package/dist/dsh/coding-workflow/service.js +282 -0
- package/dist/dsh/coding-workflow/service.js.map +1 -0
- package/dist/dsh/coding-workflow/store.d.ts +17 -0
- package/dist/dsh/coding-workflow/store.d.ts.map +1 -0
- package/dist/dsh/coding-workflow/store.js +77 -0
- package/dist/dsh/coding-workflow/store.js.map +1 -0
- package/dist/dsh/completion-verifiers.d.ts +14 -1
- package/dist/dsh/completion-verifiers.d.ts.map +1 -1
- package/dist/dsh/completion-verifiers.js.map +1 -1
- package/dist/dsh/core/host.d.ts.map +1 -1
- package/dist/dsh/core/host.js +48 -7
- package/dist/dsh/core/host.js.map +1 -1
- package/dist/dsh/core/index.js +2 -2
- package/dist/dsh/core/index.js.map +1 -1
- package/dist/dsh/core/tasks.d.ts +2 -0
- package/dist/dsh/core/tasks.d.ts.map +1 -1
- package/dist/dsh/core/tasks.js +37 -2
- package/dist/dsh/core/tasks.js.map +1 -1
- package/dist/dsh/execution-selection.d.ts +1 -1
- package/dist/dsh/host-adapter/admission.d.ts.map +1 -1
- package/dist/dsh/host-adapter/admission.js +13 -22
- package/dist/dsh/host-adapter/admission.js.map +1 -1
- package/dist/dsh/host-adapter/boundaries.d.ts.map +1 -1
- package/dist/dsh/host-adapter/boundaries.js +2 -0
- package/dist/dsh/host-adapter/boundaries.js.map +1 -1
- package/dist/dsh/host-adapter/context.d.ts.map +1 -1
- package/dist/dsh/host-adapter/context.js +18 -13
- package/dist/dsh/host-adapter/context.js.map +1 -1
- package/dist/dsh/host-adapter/lifecycle.d.ts.map +1 -1
- package/dist/dsh/host-adapter/lifecycle.js +12 -0
- package/dist/dsh/host-adapter/lifecycle.js.map +1 -1
- package/dist/dsh/host-adapter/routing.js +1 -1
- package/dist/dsh/host-adapter/routing.js.map +1 -1
- package/dist/dsh/host-adapter.d.ts.map +1 -1
- package/dist/dsh/host-adapter.js +36 -6
- package/dist/dsh/host-adapter.js.map +1 -1
- package/dist/dsh/lisp/candidate.d.ts +2 -2
- package/dist/dsh/lisp/code-intelligence-contracts.d.ts +1 -1
- package/dist/dsh/lisp/coding-choice.d.ts +3 -1
- package/dist/dsh/lisp/coding-choice.d.ts.map +1 -1
- package/dist/dsh/lisp/coding-choice.js +17 -12
- package/dist/dsh/lisp/coding-choice.js.map +1 -1
- package/dist/dsh/lisp/manager.d.ts +1 -0
- package/dist/dsh/lisp/manager.d.ts.map +1 -1
- package/dist/dsh/lisp/manager.js +13 -0
- package/dist/dsh/lisp/manager.js.map +1 -1
- package/dist/dsh/lisp/request-surface.d.ts +12 -2
- package/dist/dsh/lisp/request-surface.d.ts.map +1 -1
- package/dist/dsh/lisp/request-surface.js +1 -1
- package/dist/dsh/lisp/request-surface.js.map +1 -1
- package/dist/dsh/lisp/surface.d.ts.map +1 -1
- package/dist/dsh/lisp/surface.js +46 -5
- package/dist/dsh/lisp/surface.js.map +1 -1
- package/dist/dsh/lisp-service-key.d.ts +9 -0
- package/dist/dsh/lisp-service-key.d.ts.map +1 -1
- package/dist/dsh/lisp-service-key.js +11 -0
- package/dist/dsh/lisp-service-key.js.map +1 -1
- package/dist/dsh/modules/lisp.d.ts.map +1 -1
- package/dist/dsh/modules/lisp.js +1 -12
- package/dist/dsh/modules/lisp.js.map +1 -1
- package/dist/dsh/modules/resources.d.ts +3 -1
- package/dist/dsh/modules/resources.d.ts.map +1 -1
- package/dist/dsh/modules/resources.js +4 -0
- package/dist/dsh/modules/resources.js.map +1 -1
- package/dist/dsh/node-tap-summary.d.ts +2 -0
- package/dist/dsh/node-tap-summary.d.ts.map +1 -1
- package/dist/dsh/node-tap-summary.js +6 -1
- package/dist/dsh/node-tap-summary.js.map +1 -1
- package/dist/dsh/on-demand-intake.d.ts.map +1 -1
- package/dist/dsh/on-demand-intake.js +13 -4
- package/dist/dsh/on-demand-intake.js.map +1 -1
- package/dist/dsh/owned-evidence.d.ts.map +1 -1
- package/dist/dsh/owned-evidence.js +2 -2
- package/dist/dsh/owned-evidence.js.map +1 -1
- package/dist/dsh/owned-execution.d.ts +1 -0
- package/dist/dsh/owned-execution.d.ts.map +1 -1
- package/dist/dsh/owned-execution.js +37 -2
- package/dist/dsh/owned-execution.js.map +1 -1
- package/dist/dsh/skill-prompts.json +1 -1
- package/dist/dsh/task-completion-host.js +3 -3
- package/dist/dsh/task-completion-host.js.map +1 -1
- package/dist/dsh/task-completion.d.ts +16 -0
- package/dist/dsh/task-completion.d.ts.map +1 -1
- package/dist/dsh/task-completion.js +130 -24
- package/dist/dsh/task-completion.js.map +1 -1
- package/dist/dsh/task-intake.d.ts.map +1 -1
- package/dist/dsh/task-intake.js +7 -0
- package/dist/dsh/task-intake.js.map +1 -1
- package/dist/enno-oduno/coding-workflow.d.ts +39 -0
- package/dist/enno-oduno/coding-workflow.d.ts.map +1 -0
- package/dist/enno-oduno/coding-workflow.js +33 -0
- package/dist/enno-oduno/coding-workflow.js.map +1 -0
- package/dist/enno-oduno/schemas.d.ts +2 -2
- package/dist/enno-oduno/store.d.ts.map +1 -1
- package/dist/enno-oduno/store.js +46 -3
- package/dist/enno-oduno/store.js.map +1 -1
- package/dist/enno-oduno/types.d.ts +1 -0
- package/dist/enno-oduno/types.d.ts.map +1 -1
- package/dist/enno-oduno/verifier.d.ts.map +1 -1
- package/dist/enno-oduno/verifier.js +4 -1
- package/dist/enno-oduno/verifier.js.map +1 -1
- package/dist/locale/en.json +1 -1
- package/dist/locale/ja.json +1 -1
- package/dist/locale/ko.json +1 -1
- package/dist/locale/zh-CN.json +1 -1
- package/dist/model-tools/contracts.d.ts +2 -2
- package/docs/coding-workflow.md +45 -0
- package/docs/execution-support.md +4 -0
- package/docs/lisp-hot-tools.md +2 -2
- package/docs/lisp.md +7 -9
- package/migrations/036_coding_workflow.sql +26 -0
- package/package.json +2 -2
- package/skills/coding-ideal-routine-skill/SKILL.md +6 -0
- package/skills/kiokuko-lisp/SKILL.md +5 -1
- package/skills/kiokuko-soul/SKILL.md +2 -2
- package/skills/one-shot-software-completion/SKILL.md +5 -6
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"intent.d.ts","sourceRoot":"","sources":["../../../src/dsh/coding-workflow/intent.ts"],"names":[],"mappings":"AAEA,oGAAoG;AACpG,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAMxD;AACD,gFAAgF;AAChF,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE1D;AAED,+EAA+E;AAC/E,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAkBlD;AAED,oFAAoF;AACpF,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAGxD;AAMD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAA6B;AACvF,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,GAAG,OAAO,CAG/E;AACD,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAU1F;AACD,mFAAmF;AACnF,eAAO,MAAM,gBAAgB,eAAyC,CAAA;AACtE,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAExD"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { executionClarification } from '../intake-clarification.js';
|
|
2
|
+
/** An explicit README text edit stays on the document path unless code/config is also requested. */
|
|
3
|
+
export function documentEditIntent(task) {
|
|
4
|
+
if (!/\bREADME(?:\.(?:md|rst|txt))?\b/iu.test(task)
|
|
5
|
+
|| /(?:\.(?:[cm]?[jt]sx?|svelte|py|lisp|json|ya?ml|toml)\b|\b(?:code|runtime|config|behavior|function|api)\b|コード|挙動|関数|設定)/iu.test(task)
|
|
6
|
+
|| /(?:\b(?:do not|don't|never|explain|describe|what|why|how|should)\b|(?:修正|変更|編集)(?:しない|するな|すべき)|[??]|^\s*[>"“「`~])/imu.test(task))
|
|
7
|
+
return false;
|
|
8
|
+
return /^(?:(?:please|can you|could you|would you|help me)\s+)?(?:edit|revise|fix|repair|modify|update|write|create|add)\b/iu.test(task.trim())
|
|
9
|
+
|| /(?:修正|変更|編集|追記)(?:して|してください|も実装して)/u.test(task);
|
|
10
|
+
}
|
|
11
|
+
/** Legacy document recovery may use a short, unambiguous human continuation. */
|
|
12
|
+
export function documentContinuation(task) {
|
|
13
|
+
return /^(?:(?:please\s+)?(?:continue|resume)|続けて(?:ください)?|続行してください)[.!。!]?$/iu.test(task.trim());
|
|
14
|
+
}
|
|
15
|
+
/** Conservative human intent evidence, independent of advisory task labels. */
|
|
16
|
+
export function codingIntent(task) {
|
|
17
|
+
let fence;
|
|
18
|
+
const lines = [];
|
|
19
|
+
for (const line of task.split('\n')) {
|
|
20
|
+
const marker = line.match(/^\s*(`{3,}|~{3,})/u)?.[1];
|
|
21
|
+
if (marker) {
|
|
22
|
+
if (!fence)
|
|
23
|
+
fence = marker;
|
|
24
|
+
else if (marker[0] === fence[0] && marker.length >= fence.length)
|
|
25
|
+
fence = undefined;
|
|
26
|
+
continue;
|
|
27
|
+
}
|
|
28
|
+
if (!fence && !/^\s*(?:>|["“「]|(?:read|write) paths\s*:)/iu.test(line))
|
|
29
|
+
lines.push(line.trim());
|
|
30
|
+
}
|
|
31
|
+
const request = lines.join('\n');
|
|
32
|
+
if (executionClarification(request))
|
|
33
|
+
return false;
|
|
34
|
+
if (documentEditIntent(request))
|
|
35
|
+
return false;
|
|
36
|
+
if (/\b(?:write|create|draft)\s+(?:an?\s+)?(?:email|letter|message|report|document|post)\b/iu.test(request)
|
|
37
|
+
|| /(?:案内文|メール|記事|文章|文書|レポート)を(?:書|作|保存)/u.test(request))
|
|
38
|
+
return false;
|
|
39
|
+
if (/(?:\b(?:do not|don't|never)\s+(?:implement|change|edit|fix|write|modify)|コード変更は行わない|(?:実装|変更|修正)(?:しない|するな|は不要))/iu.test(request))
|
|
40
|
+
return false;
|
|
41
|
+
if (/^(?:explain|describe|what|why|how|should\s+(?:we|i)|is\s+it|(?:can|could)\s+(?:this|it))\b/iu.test(request)
|
|
42
|
+
|| /(?:修正すべき|実装すべき|(?:説明|解説)(?:して|しろ)|(?:計画|プラン)(?:だけ|のみ)|(?:計画|プラン)を(?:作|立))/u.test(request))
|
|
43
|
+
return false;
|
|
44
|
+
return lines.some(line => /^(?:(?:please|can you|could you|would you|help me|i want you to)\s+)?(?:implement|fix|repair|add|create|build|refactor|update|modify|change|write)\b/iu.test(line)
|
|
45
|
+
|| /(?:実装して|実装しろ|修正して|直して|追加して|変更して|作って|作成して|更新して|リファクタリングして)/u.test(line));
|
|
46
|
+
}
|
|
47
|
+
/** Explicit continuation preserves the old task; a new action gets a new choice. */
|
|
48
|
+
export function codingContinuation(task) {
|
|
49
|
+
return /^(?:please\s+)?(?:continue|resume)(?:\s+(?:the|this|my))?\s+(?:(?:current|same|previous)\s+)?task(?:\s+without changing its scope)?[.!。!]?$/iu.test(task.trim())
|
|
50
|
+
|| /^(?:この|同じ|現在の|前の)?(?:タスク|作業)(?:を)?(?:再開|続行|継続)(?:して|してください)[。!!]?$/u.test(task.trim());
|
|
51
|
+
}
|
|
52
|
+
const readers = new Set(['read', 'glob', 'grep', 'skill', 'web_search', 'web_fetch', 'kioku_read', 'kioku_result',
|
|
53
|
+
'task_memory_review', 'task_completion', 'coding_workflow', 'prepare_requested_work', 'ask_user_question',
|
|
54
|
+
'exit_plan_mode', 'lisp_status', 'lisp_hot_status', 'lisp_describe', 'lisp_inspect', 'lisp_cancel', 'observation_read',
|
|
55
|
+
'enno_ideal_submit', 'enno_plan_submit', 'enno_plan_review', 'enno_finish', 'enno_meditation_submit', 'memory_checkpoint', 'curator_check']);
|
|
56
|
+
export function codingControlOrRead(name) { return readers.has(name); }
|
|
57
|
+
export function codingControlCarrier(name, arguments_) {
|
|
58
|
+
const tool = codingLiteralCarrier(name, arguments_);
|
|
59
|
+
return tool !== undefined && codingControlOrRead(tool);
|
|
60
|
+
}
|
|
61
|
+
export function codingLiteralCarrier(name, arguments_) {
|
|
62
|
+
if (name !== 'run_code' || !arguments_ || typeof arguments_ !== 'object')
|
|
63
|
+
return undefined;
|
|
64
|
+
const code = arguments_.code;
|
|
65
|
+
if (typeof code !== 'string')
|
|
66
|
+
return undefined;
|
|
67
|
+
const source = code.trim();
|
|
68
|
+
const match = source.startsWith('return JSON.stringify(')
|
|
69
|
+
? source.match(/^return JSON\.stringify\(await tools\.([a-z_]+)\((.*)\)\);?$/u)
|
|
70
|
+
: source.match(/^return await tools\.([a-z_]+)\((.*)\);?$/u);
|
|
71
|
+
if (!match)
|
|
72
|
+
return undefined;
|
|
73
|
+
try {
|
|
74
|
+
const input = JSON.parse(match[2]);
|
|
75
|
+
return input !== null && typeof input === 'object' && !Array.isArray(input) ? match[1] : undefined;
|
|
76
|
+
}
|
|
77
|
+
catch {
|
|
78
|
+
return undefined;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
/** Extension authors may mark their pinned host definition as a read operation. */
|
|
82
|
+
export const CODING_READ_ONLY = Symbol.for('kiokuko.coding.read-only');
|
|
83
|
+
export function codingMutationTool(name) {
|
|
84
|
+
return /^(?:kioku_(?:write|edit|remove|exec)|lisp_(?!status|hot_status|inspect|cancel)|run_code|bash|zsh|exec|write|edit|delete|remove)/u.test(name);
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=intent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"intent.js","sourceRoot":"","sources":["../../../src/dsh/coding-workflow/intent.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
import type { SqliteDatabase } from '../../db/adapter.js';
|
|
2
|
+
import { type CompletionAssessment } from '../task-completion.js';
|
|
3
|
+
import { type CodingDefinition, type CodingIdentity, type CodingWorkflow } from './contracts.js';
|
|
4
|
+
export declare function onCodingInterrupted(listener: (runId: string) => void): () => void;
|
|
5
|
+
export declare function codingCriterionId(value: CodingWorkflow, id: string): string;
|
|
6
|
+
export declare function codingItems(value: CodingWorkflow, assessment: CompletionAssessment): {
|
|
7
|
+
state: string;
|
|
8
|
+
itemId: string;
|
|
9
|
+
change: string;
|
|
10
|
+
dependsOn: string[];
|
|
11
|
+
goalCriterionIds: string[];
|
|
12
|
+
criterionIds: string[];
|
|
13
|
+
}[];
|
|
14
|
+
export declare function codingStatus(db: SqliteDatabase, identity: CodingIdentity): {
|
|
15
|
+
applicable: false;
|
|
16
|
+
} | {
|
|
17
|
+
items: {
|
|
18
|
+
state: string;
|
|
19
|
+
itemId: string;
|
|
20
|
+
change: string;
|
|
21
|
+
dependsOn: string[];
|
|
22
|
+
goalCriterionIds: string[];
|
|
23
|
+
criterionIds: string[];
|
|
24
|
+
}[];
|
|
25
|
+
assessment: CompletionAssessment;
|
|
26
|
+
workflowId: string;
|
|
27
|
+
requestId: string;
|
|
28
|
+
requestDigest: string;
|
|
29
|
+
request: string;
|
|
30
|
+
revision: number;
|
|
31
|
+
scopeVersion: number;
|
|
32
|
+
state: import("./contracts.js").CodingState;
|
|
33
|
+
definition?: CodingDefinition;
|
|
34
|
+
choice: import("./contracts.js").CodingChoice;
|
|
35
|
+
retiredIds: string[];
|
|
36
|
+
activeItemId?: string;
|
|
37
|
+
blocker?: import("./contracts.js").CodingBlocker;
|
|
38
|
+
attempts: Record<string, {
|
|
39
|
+
fingerprint: string;
|
|
40
|
+
count: number;
|
|
41
|
+
retryAt: number;
|
|
42
|
+
sourceDigest?: string;
|
|
43
|
+
}>;
|
|
44
|
+
ennoProjectionDigest?: string;
|
|
45
|
+
runId: string;
|
|
46
|
+
sessionId: string;
|
|
47
|
+
repositoryRoot: string;
|
|
48
|
+
applicable: true;
|
|
49
|
+
};
|
|
50
|
+
/** Definitions propose observable work; only host evidence can satisfy it. */
|
|
51
|
+
export declare function proposeCodingWorkflow(db: SqliteDatabase, identity: CodingIdentity, callId: string, expectedRevision: number, raw: unknown, revise?: boolean, scopeChanged?: boolean, projected?: boolean): CodingWorkflow;
|
|
52
|
+
/** Optional Enno module supplies a projection through the core reader seam. */
|
|
53
|
+
export declare function projectEnnoCodingWorkflow(db: SqliteDatabase, identity: CodingIdentity): void;
|
|
54
|
+
/** Host-only answer seam. The model-facing tool never accepts these fields. */
|
|
55
|
+
export declare function answerCodingChoice(db: SqliteDatabase, identity: CodingIdentity, input: {
|
|
56
|
+
callId: string;
|
|
57
|
+
expectedRevision: number;
|
|
58
|
+
workflowId: string;
|
|
59
|
+
scopeVersion: number;
|
|
60
|
+
questionId: string;
|
|
61
|
+
questionRevision: number;
|
|
62
|
+
answerRef: string;
|
|
63
|
+
choice: 'yes' | 'no' | 'cancelled';
|
|
64
|
+
}): CodingWorkflow;
|
|
65
|
+
export declare function nextCodingWork(db: SqliteDatabase, identity: CodingIdentity): {
|
|
66
|
+
applicable: false;
|
|
67
|
+
} | {
|
|
68
|
+
next: string;
|
|
69
|
+
items: {
|
|
70
|
+
state: string;
|
|
71
|
+
itemId: string;
|
|
72
|
+
change: string;
|
|
73
|
+
dependsOn: string[];
|
|
74
|
+
goalCriterionIds: string[];
|
|
75
|
+
criterionIds: string[];
|
|
76
|
+
}[];
|
|
77
|
+
assessment: CompletionAssessment;
|
|
78
|
+
workflowId: string;
|
|
79
|
+
requestId: string;
|
|
80
|
+
requestDigest: string;
|
|
81
|
+
request: string;
|
|
82
|
+
revision: number;
|
|
83
|
+
scopeVersion: number;
|
|
84
|
+
state: import("./contracts.js").CodingState;
|
|
85
|
+
definition?: CodingDefinition;
|
|
86
|
+
choice: import("./contracts.js").CodingChoice;
|
|
87
|
+
retiredIds: string[];
|
|
88
|
+
activeItemId?: string;
|
|
89
|
+
blocker?: import("./contracts.js").CodingBlocker;
|
|
90
|
+
attempts: Record<string, {
|
|
91
|
+
fingerprint: string;
|
|
92
|
+
count: number;
|
|
93
|
+
retryAt: number;
|
|
94
|
+
sourceDigest?: string;
|
|
95
|
+
}>;
|
|
96
|
+
ennoProjectionDigest?: string;
|
|
97
|
+
runId: string;
|
|
98
|
+
sessionId: string;
|
|
99
|
+
repositoryRoot: string;
|
|
100
|
+
applicable: true;
|
|
101
|
+
} | {
|
|
102
|
+
next: string;
|
|
103
|
+
item: {
|
|
104
|
+
state: string;
|
|
105
|
+
itemId: string;
|
|
106
|
+
change: string;
|
|
107
|
+
dependsOn: string[];
|
|
108
|
+
goalCriterionIds: string[];
|
|
109
|
+
criterionIds: string[];
|
|
110
|
+
} | undefined;
|
|
111
|
+
items: {
|
|
112
|
+
state: string;
|
|
113
|
+
itemId: string;
|
|
114
|
+
change: string;
|
|
115
|
+
dependsOn: string[];
|
|
116
|
+
goalCriterionIds: string[];
|
|
117
|
+
criterionIds: string[];
|
|
118
|
+
}[];
|
|
119
|
+
assessment: CompletionAssessment;
|
|
120
|
+
workflowId: string;
|
|
121
|
+
requestId: string;
|
|
122
|
+
requestDigest: string;
|
|
123
|
+
request: string;
|
|
124
|
+
revision: number;
|
|
125
|
+
scopeVersion: number;
|
|
126
|
+
state: import("./contracts.js").CodingState;
|
|
127
|
+
definition?: CodingDefinition;
|
|
128
|
+
choice: import("./contracts.js").CodingChoice;
|
|
129
|
+
retiredIds: string[];
|
|
130
|
+
activeItemId?: string;
|
|
131
|
+
blocker?: import("./contracts.js").CodingBlocker;
|
|
132
|
+
attempts: Record<string, {
|
|
133
|
+
fingerprint: string;
|
|
134
|
+
count: number;
|
|
135
|
+
retryAt: number;
|
|
136
|
+
sourceDigest?: string;
|
|
137
|
+
}>;
|
|
138
|
+
ennoProjectionDigest?: string;
|
|
139
|
+
runId: string;
|
|
140
|
+
sessionId: string;
|
|
141
|
+
repositoryRoot: string;
|
|
142
|
+
applicable: true;
|
|
143
|
+
};
|
|
144
|
+
export declare function reportCodingBlocker(db: SqliteDatabase, identity: CodingIdentity, callId: string, expectedRevision: number, raw: unknown): CodingWorkflow;
|
|
145
|
+
export declare function assertCodingDispatch(db: SqliteDatabase, identity: CodingIdentity, name: string): CodingWorkflow | undefined;
|
|
146
|
+
export declare function beginCodingDispatch(db: SqliteDatabase, identity: CodingIdentity, callId: string, name: string): CodingWorkflow | undefined;
|
|
147
|
+
export declare function synchronizeCodingWorkflow(db: SqliteDatabase, runId: string): CodingWorkflow | undefined;
|
|
148
|
+
export declare function stopCodingWorkflow(db: SqliteDatabase, runId: string, state: 'cancelled' | 'superseded'): void;
|
|
149
|
+
export declare function recordCodingAttempt(db: SqliteDatabase, identity: CodingIdentity, callId: string, criterionId: string, fingerprint: string, now: number, sourceDigest?: string): CodingWorkflow;
|
|
150
|
+
/** Check the actual child command at the shared process boundary, before spawn. */
|
|
151
|
+
export declare function assertCodingCommandRetry(db: SqliteDatabase, identity: CodingIdentity, command: string): void;
|
|
152
|
+
export declare function clearCodingRuntimeBlocker(db: SqliteDatabase, identity: CodingIdentity): void;
|
|
153
|
+
/** Only the host command handler calls this after an explicit human route change. */
|
|
154
|
+
export declare function overrideCodingChoice(db: SqliteDatabase, identity: CodingIdentity, choice: 'yes' | 'no', answerRef: string): CodingWorkflow | undefined;
|
|
155
|
+
//# sourceMappingURL=service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../../src/dsh/coding-workflow/service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,282 @@
|
|
|
1
|
+
import { KiokukoError } from '../../errors.js';
|
|
2
|
+
import { canonicalContentHash } from '../../serialization/validate.js';
|
|
3
|
+
import { assessTaskCompletion, bindTaskCriterion, completionSourceDigest } from '../task-completion.js';
|
|
4
|
+
import { completionVerifiers } from '../completion-verifiers.js';
|
|
5
|
+
import { executionCommand } from '../execution-command.js';
|
|
6
|
+
import { CodingBlockerSchema, CodingDefinitionSchema } from './contracts.js';
|
|
7
|
+
import { assertCodingIdentity, mutateCodingWorkflow, readCodingWorkflow } from './store.js';
|
|
8
|
+
const terminal = (value) => ['completed', 'cancelled', 'superseded'].includes(value.state);
|
|
9
|
+
const interrupted = new Set();
|
|
10
|
+
export function onCodingInterrupted(listener) {
|
|
11
|
+
interrupted.add(listener);
|
|
12
|
+
return () => { interrupted.delete(listener); };
|
|
13
|
+
}
|
|
14
|
+
function interruptCoding(runId) { for (const listener of interrupted)
|
|
15
|
+
listener(runId); }
|
|
16
|
+
export function codingCriterionId(value, id) { return `coding:${value.workflowId}:${id}`; }
|
|
17
|
+
export function codingItems(value, assessment) {
|
|
18
|
+
const satisfied = new Set(assessment.criteria.filter(item => item.state === 'satisfied').map(item => item.criterionId));
|
|
19
|
+
const complete = new Set(value.definition?.items.filter(item => item.criterionIds.every(id => satisfied.has(codingCriterionId(value, id)))).map(item => item.itemId));
|
|
20
|
+
return (value.definition?.items ?? []).map(item => ({ ...item,
|
|
21
|
+
state: value.state === 'cancelled' || value.state === 'superseded' ? 'cancelled' : complete.has(item.itemId) ? 'satisfied'
|
|
22
|
+
: value.blocker?.criterionIds.some(id => item.criterionIds.includes(id)) ? 'blocked'
|
|
23
|
+
: item.dependsOn.every(id => complete.has(id)) ? value.activeItemId === item.itemId ? 'running' : 'ready' : 'pending',
|
|
24
|
+
}));
|
|
25
|
+
}
|
|
26
|
+
export function codingStatus(db, identity) {
|
|
27
|
+
projectEnnoCodingWorkflow(db, identity);
|
|
28
|
+
let value = readCodingWorkflow(db, identity.runId);
|
|
29
|
+
if (!value)
|
|
30
|
+
return { applicable: false };
|
|
31
|
+
assertCodingIdentity(value, identity);
|
|
32
|
+
if (value.blocker?.kind === 'retry_budget') {
|
|
33
|
+
const changed = value.blocker.criterionIds.every(id => {
|
|
34
|
+
const row = db.prepare('SELECT method_json FROM dsh_completion_bindings WHERE run_id=? AND criterion_id=?')
|
|
35
|
+
.get(value.runId, codingCriterionId(value, id));
|
|
36
|
+
const method = row ? JSON.parse(row.method_json) : undefined;
|
|
37
|
+
return method?.kind === 'native_command' && value.attempts[id]?.sourceDigest !== completionSourceDigest(db, value.runId, value.repositoryRoot, method.sourcePaths);
|
|
38
|
+
});
|
|
39
|
+
if (changed)
|
|
40
|
+
value = mutateCodingWorkflow(db, identity, `repaired:${value.revision}`, value.revision, {}, current => {
|
|
41
|
+
delete current.blocker;
|
|
42
|
+
current.state = 'ready';
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
const assessment = assessTaskCompletion(db, value.runId);
|
|
46
|
+
return { applicable: true, ...value, items: codingItems(value, assessment), assessment };
|
|
47
|
+
}
|
|
48
|
+
/** Definitions propose observable work; only host evidence can satisfy it. */
|
|
49
|
+
export function proposeCodingWorkflow(db, identity, callId, expectedRevision, raw, revise = false, scopeChanged = false, projected = false) {
|
|
50
|
+
if (!projected && db.prepare("SELECT 1 FROM dsh_execution_selections WHERE run_id=? AND json_extract(state_json,'$.mode')='enno'").get(identity.runId))
|
|
51
|
+
throw new KiokukoError('CONFLICT', 'Enno coding Goal comes from its existing ideal and plan; submit those through Enno controls');
|
|
52
|
+
const definition = CodingDefinitionSchema.parse(raw);
|
|
53
|
+
return mutateCodingWorkflow(db, identity, callId, expectedRevision, { action: revise ? 'revise' : 'propose', definition, scopeChanged }, value => {
|
|
54
|
+
if (terminal(value))
|
|
55
|
+
throw new KiokukoError('CONFLICT', 'Coding workflow is terminal');
|
|
56
|
+
if (!revise && value.definition)
|
|
57
|
+
throw new KiokukoError('CONFLICT', 'Use revise for an existing coding Goal');
|
|
58
|
+
if (revise && !value.definition)
|
|
59
|
+
throw new KiokukoError('CONFLICT', 'No coding Goal to revise');
|
|
60
|
+
const old = value.definition;
|
|
61
|
+
if (old) {
|
|
62
|
+
if (old.goal.goalId !== definition.goal.goalId)
|
|
63
|
+
throw new KiokukoError('CONFLICT', 'Goal identity is stable');
|
|
64
|
+
const changedGoal = canonicalContentHash({ ...old.goal, revision: 0 }) !== canonicalContentHash({ ...definition.goal, revision: 0 });
|
|
65
|
+
if (definition.goal.revision < old.goal.revision || changedGoal && definition.goal.revision <= old.goal.revision)
|
|
66
|
+
throw new KiokukoError('CONFLICT', 'Changed Goal requires a new revision');
|
|
67
|
+
for (const criterion of definition.criteria) {
|
|
68
|
+
const prior = old.criteria.find(item => item.criterionId === criterion.criterionId);
|
|
69
|
+
if (value.retiredIds.includes(criterion.criterionId))
|
|
70
|
+
throw new KiokukoError('CONFLICT', 'Retired criterion ID cannot be reused');
|
|
71
|
+
if (prior && (criterion.revision < prior.revision || canonicalContentHash({ ...prior, revision: 0 }) !== canonicalContentHash({ ...criterion, revision: 0 })
|
|
72
|
+
&& criterion.revision <= prior.revision))
|
|
73
|
+
throw new KiokukoError('CONFLICT', 'Changed criterion requires a new revision');
|
|
74
|
+
}
|
|
75
|
+
for (const item of definition.items)
|
|
76
|
+
if (value.retiredIds.includes(item.itemId))
|
|
77
|
+
throw new KiokukoError('CONFLICT', 'Retired item ID cannot be reused');
|
|
78
|
+
const newIds = new Set([...definition.criteria.map(item => item.criterionId), ...definition.items.map(item => item.itemId)]);
|
|
79
|
+
value.retiredIds.push(...[...old.criteria.map(item => item.criterionId), ...old.items.map(item => item.itemId)].filter(id => !newIds.has(id)));
|
|
80
|
+
// A material target/constraint/item change invalidates the task's choice. Reordering preserves it; changed observable behavior requires a new choice.
|
|
81
|
+
const oldScope = scopeDigest(old), newScope = scopeDigest(definition);
|
|
82
|
+
scopeChanged ||= oldScope !== newScope;
|
|
83
|
+
}
|
|
84
|
+
value.definition = definition;
|
|
85
|
+
delete value.activeItemId;
|
|
86
|
+
delete value.blocker;
|
|
87
|
+
if (scopeChanged) {
|
|
88
|
+
value.scopeVersion++;
|
|
89
|
+
value.choice = { state: 'pending', scopeVersion: value.scopeVersion,
|
|
90
|
+
questionId: `coding-lisp-${value.workflowId}-${value.scopeVersion}`, revision: value.choice.revision + 1 };
|
|
91
|
+
}
|
|
92
|
+
value.state = value.choice.state === 'pending' ? 'awaiting_lisp_choice' : 'ready';
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
/** Optional Enno module supplies a projection through the core reader seam. */
|
|
96
|
+
export function projectEnnoCodingWorkflow(db, identity) {
|
|
97
|
+
let value = readCodingWorkflow(db, identity.runId);
|
|
98
|
+
if (!value || terminal(value) || !db.prepare("SELECT 1 FROM dsh_execution_selections WHERE run_id=? AND json_extract(state_json,'$.mode')='enno'").get(identity.runId))
|
|
99
|
+
return;
|
|
100
|
+
const enno = db.prepare('SELECT workspace,orchestration_session_id AS orchestrationId FROM enno_contracts WHERE run_id=?')
|
|
101
|
+
.get(identity.runId);
|
|
102
|
+
if (!enno)
|
|
103
|
+
return;
|
|
104
|
+
const projection = completionVerifiers().codingProjection?.(db, { runId: identity.runId, ...enno });
|
|
105
|
+
if (!projection)
|
|
106
|
+
return;
|
|
107
|
+
const digest = canonicalContentHash(projection.definition);
|
|
108
|
+
if (value.ennoProjectionDigest !== digest) {
|
|
109
|
+
value = proposeCodingWorkflow(db, identity, `enno-definition:${digest}`, value.revision, projection.definition, !!value.definition, false, true);
|
|
110
|
+
value = mutateCodingWorkflow(db, identity, `enno-source:${digest}`, value.revision, { digest }, current => { current.ennoProjectionDigest = digest; });
|
|
111
|
+
}
|
|
112
|
+
for (const binding of projection.bindings)
|
|
113
|
+
bindTaskCriterion(db, { runId: identity.runId,
|
|
114
|
+
callId: `enno-check:${digest}:${value.scopeVersion}:${binding.criterionId}:${projection.approved}`, criterionId: codingCriterionId(value, binding.criterionId),
|
|
115
|
+
method: { kind: 'enno_verifier', verifierId: binding.verifierId, ...(binding.workUnitId ? { workUnitId: binding.workUnitId } : {}), assertion: 'selected_tests_pass' }, approved: projection.approved });
|
|
116
|
+
}
|
|
117
|
+
function scopeDigest(value) {
|
|
118
|
+
return canonicalContentHash({ ideal: value.goal.ideal, target: value.goal.target, criteria: value.criteria.map(({ revision: _revision, ...criterion }) => criterion).sort((a, b) => a.criterionId.localeCompare(b.criterionId)), constraints: [...value.goal.constraints].sort(), outOfScope: [...value.goal.outOfScope].sort(),
|
|
119
|
+
items: value.items.map(item => ({ itemId: item.itemId, change: item.change, dependsOn: [...item.dependsOn].sort(), criterionIds: [...item.criterionIds].sort(),
|
|
120
|
+
goalCriterionIds: [...item.goalCriterionIds].sort() })).sort((a, b) => a.itemId.localeCompare(b.itemId)) });
|
|
121
|
+
}
|
|
122
|
+
/** Host-only answer seam. The model-facing tool never accepts these fields. */
|
|
123
|
+
export function answerCodingChoice(db, identity, input) {
|
|
124
|
+
return mutateCodingWorkflow(db, identity, input.callId, input.expectedRevision, input, value => {
|
|
125
|
+
if (terminal(value) || value.workflowId !== input.workflowId || value.scopeVersion !== input.scopeVersion
|
|
126
|
+
|| value.choice.questionId !== input.questionId || value.choice.revision !== input.questionRevision
|
|
127
|
+
|| value.choice.state !== 'pending' || !value.definition || !input.answerRef.trim())
|
|
128
|
+
throw new KiokukoError('CONFLICT', 'Lisp answer does not belong to this pending coding task');
|
|
129
|
+
value.choice = { ...value.choice, state: input.choice, answerRef: input.answerRef };
|
|
130
|
+
value.state = input.choice === 'cancelled' ? 'cancelled' : 'ready';
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
export function nextCodingWork(db, identity) {
|
|
134
|
+
const status = codingStatus(db, identity);
|
|
135
|
+
if (!status.applicable)
|
|
136
|
+
return status;
|
|
137
|
+
if (!status.definition)
|
|
138
|
+
return { ...status, next: 'propose_goal_items_and_criteria' };
|
|
139
|
+
if (status.choice.state === 'pending')
|
|
140
|
+
return { ...status, next: 'answer_lisp_choice' };
|
|
141
|
+
if (terminal(status))
|
|
142
|
+
return { ...status, next: status.state };
|
|
143
|
+
if (status.blocker?.criterionIds.length === 0)
|
|
144
|
+
return { ...status, next: 'resolve_blocker' };
|
|
145
|
+
const ready = status.items.find(item => item.state === 'ready' || item.state === 'running');
|
|
146
|
+
return { ...status, next: ready ? 'implement_and_verify_item' : status.items.every(item => item.state === 'satisfied') ? 'verify_final_goal' : 'resolve_blocker', item: ready };
|
|
147
|
+
}
|
|
148
|
+
export function reportCodingBlocker(db, identity, callId, expectedRevision, raw) {
|
|
149
|
+
const blocker = CodingBlockerSchema.parse(raw);
|
|
150
|
+
return mutateCodingWorkflow(db, identity, callId, expectedRevision, { blocker }, value => {
|
|
151
|
+
if (terminal(value))
|
|
152
|
+
throw new KiokukoError('CONFLICT', 'Coding workflow is terminal');
|
|
153
|
+
if (blocker.criterionIds.some(id => !value.definition?.criteria.some(item => item.criterionId === id)))
|
|
154
|
+
throw new KiokukoError('VALIDATION_ERROR', 'Unknown blocked criterion');
|
|
155
|
+
value.blocker = blocker;
|
|
156
|
+
value.state = 'blocked';
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
export function assertCodingDispatch(db, identity, name) {
|
|
160
|
+
codingStatus(db, identity);
|
|
161
|
+
const value = readCodingWorkflow(db, identity.runId);
|
|
162
|
+
if (!value)
|
|
163
|
+
return undefined; // Explicit legacy boundary: old tasks retain their contract.
|
|
164
|
+
assertCodingIdentity(value, identity);
|
|
165
|
+
if (terminal(value) || !value.definition || value.choice.state === 'pending')
|
|
166
|
+
throw new KiokukoError('CONFLICT', 'Define Goal, items and checks, then answer this task’s Lisp choice before implementation');
|
|
167
|
+
if (name.startsWith('lisp_') && value.choice.state !== 'yes')
|
|
168
|
+
throw new KiokukoError('CONFLICT', 'Lisp is not selected for this coding task');
|
|
169
|
+
if (value.blocker?.kind === 'retry_budget' && ['kioku_write', 'kioku_edit', 'lisp_eval'].includes(name))
|
|
170
|
+
return value;
|
|
171
|
+
const next = nextCodingWork(db, identity);
|
|
172
|
+
if (!('item' in next) || !next.item) {
|
|
173
|
+
if ('next' in next && next.next === 'verify_final_goal')
|
|
174
|
+
return value;
|
|
175
|
+
throw new KiokukoError('CONFLICT', 'No dependency-ready coding item; resolve the recorded blocker');
|
|
176
|
+
}
|
|
177
|
+
return value;
|
|
178
|
+
}
|
|
179
|
+
export function beginCodingDispatch(db, identity, callId, name) {
|
|
180
|
+
const value = assertCodingDispatch(db, identity, name);
|
|
181
|
+
if (!value)
|
|
182
|
+
return value;
|
|
183
|
+
const next = nextCodingWork(db, identity);
|
|
184
|
+
return mutateCodingWorkflow(db, identity, `dispatch:${callId}`, value.revision, { name, scopeVersion: value.scopeVersion }, current => {
|
|
185
|
+
if ('item' in next && next.item) {
|
|
186
|
+
current.activeItemId = next.item.itemId;
|
|
187
|
+
current.state = 'implementing';
|
|
188
|
+
}
|
|
189
|
+
else
|
|
190
|
+
current.state = 'verifying_goal';
|
|
191
|
+
}, true);
|
|
192
|
+
}
|
|
193
|
+
export function synchronizeCodingWorkflow(db, runId) {
|
|
194
|
+
const value = readCodingWorkflow(db, runId);
|
|
195
|
+
if (!value || terminal(value) || !value.definition || value.choice.state === 'pending')
|
|
196
|
+
return value;
|
|
197
|
+
const assessment = assessTaskCompletion(db, runId), items = codingItems(value, assessment);
|
|
198
|
+
const enno = db.prepare(`SELECT e.workspace,e.orchestration_session_id AS orchestrationId FROM enno_contracts e
|
|
199
|
+
JOIN dsh_execution_selections s ON s.run_id=e.run_id WHERE e.run_id=? AND json_extract(s.state_json,'$.mode')='enno'`)
|
|
200
|
+
.get(runId);
|
|
201
|
+
const authorityComplete = !enno || completionVerifiers().codingProjection?.(db, { runId, ...enno })?.completed === true;
|
|
202
|
+
const state = assessment.verified && authorityComplete ? 'completed' : items.every(item => item.state === 'satisfied') ? 'verifying_goal' : value.blocker ? 'blocked' : value.state;
|
|
203
|
+
if (state === value.state)
|
|
204
|
+
return value;
|
|
205
|
+
return mutateCodingWorkflow(db, value, `evidence:${canonicalContentHash({ revision: value.revision, assessment })}`, value.revision, { assessment }, current => { current.state = state; });
|
|
206
|
+
}
|
|
207
|
+
export function stopCodingWorkflow(db, runId, state) {
|
|
208
|
+
const value = readCodingWorkflow(db, runId);
|
|
209
|
+
if (!value || terminal(value))
|
|
210
|
+
return;
|
|
211
|
+
mutateCodingWorkflow(db, value, `stop:${state}:${value.revision}`, value.revision, { state }, current => { current.state = state; delete current.activeItemId; });
|
|
212
|
+
interruptCoding(runId);
|
|
213
|
+
}
|
|
214
|
+
export function recordCodingAttempt(db, identity, callId, criterionId, fingerprint, now, sourceDigest) {
|
|
215
|
+
const value = readCodingWorkflow(db, identity.runId);
|
|
216
|
+
if (!value)
|
|
217
|
+
throw new KiokukoError('NOT_FOUND', 'No coding workflow');
|
|
218
|
+
return mutateCodingWorkflow(db, identity, callId, value.revision, { criterionId, fingerprint, now }, current => {
|
|
219
|
+
const prior = current.attempts[criterionId];
|
|
220
|
+
if (prior?.fingerprint === fingerprint && now < prior.retryAt)
|
|
221
|
+
throw new KiokukoError('CONFLICT', 'Unchanged failure is in backoff; inspect or repair its cause');
|
|
222
|
+
const count = prior?.fingerprint === fingerprint ? prior.count + 1 : 1;
|
|
223
|
+
current.attempts[criterionId] = { fingerprint, count, retryAt: now + Math.min(60000, 1000 * 2 ** Math.min(count, 6)), ...(sourceDigest ? { sourceDigest } : {}) };
|
|
224
|
+
if (count >= 3) {
|
|
225
|
+
current.blocker = { criterionIds: [criterionId], kind: 'retry_budget', cause: 'Repeated unchanged failure',
|
|
226
|
+
required: 'Repair or inspect the failing condition', recovery: [], resumeWhen: 'The source, environment or failure cause changes' };
|
|
227
|
+
current.state = 'blocked';
|
|
228
|
+
}
|
|
229
|
+
else if (prior?.fingerprint !== fingerprint && current.blocker?.kind === 'retry_budget') {
|
|
230
|
+
delete current.blocker;
|
|
231
|
+
current.state = 'ready';
|
|
232
|
+
}
|
|
233
|
+
}, true);
|
|
234
|
+
}
|
|
235
|
+
/** Check the actual child command at the shared process boundary, before spawn. */
|
|
236
|
+
export function assertCodingCommandRetry(db, identity, command) {
|
|
237
|
+
const workflow = readCodingWorkflow(db, identity.runId);
|
|
238
|
+
if (!workflow?.definition)
|
|
239
|
+
return;
|
|
240
|
+
assertCodingIdentity(workflow, identity);
|
|
241
|
+
const rows = db.prepare('SELECT criterion_id,method_json FROM dsh_completion_bindings WHERE run_id=? AND approved=1')
|
|
242
|
+
.all(identity.runId);
|
|
243
|
+
for (const row of rows) {
|
|
244
|
+
const method = JSON.parse(row.method_json);
|
|
245
|
+
if (method.kind !== 'native_command' || executionCommand(method.command) !== executionCommand(command))
|
|
246
|
+
continue;
|
|
247
|
+
const id = row.criterion_id.slice(`coding:${workflow.workflowId}:`.length), attempt = workflow.attempts[id];
|
|
248
|
+
if (!attempt || attempt.sourceDigest !== completionSourceDigest(db, identity.runId, identity.repositoryRoot, method.sourcePaths))
|
|
249
|
+
continue;
|
|
250
|
+
if (attempt.count >= 3 || Date.now() < attempt.retryAt)
|
|
251
|
+
throw new KiokukoError('CONFLICT', 'Unchanged verification failure needs inspection or repair before retrying');
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
export function clearCodingRuntimeBlocker(db, identity) {
|
|
255
|
+
const value = readCodingWorkflow(db, identity.runId);
|
|
256
|
+
if (!value || value.blocker?.kind !== 'runtime' || terminal(value))
|
|
257
|
+
return;
|
|
258
|
+
mutateCodingWorkflow(db, identity, `runtime-ready:${value.revision}`, value.revision, {}, current => {
|
|
259
|
+
delete current.blocker;
|
|
260
|
+
current.state = 'ready';
|
|
261
|
+
});
|
|
262
|
+
}
|
|
263
|
+
/** Only the host command handler calls this after an explicit human route change. */
|
|
264
|
+
export function overrideCodingChoice(db, identity, choice, answerRef) {
|
|
265
|
+
const value = readCodingWorkflow(db, identity.runId);
|
|
266
|
+
if (!value)
|
|
267
|
+
return;
|
|
268
|
+
if (terminal(value) || !value.definition || !answerRef.trim())
|
|
269
|
+
throw new KiokukoError('CONFLICT', 'Define this task’s Goal before changing its Lisp route');
|
|
270
|
+
if (db.prepare("SELECT 1 FROM dsh_owned_operations WHERE run_id=? AND state='started'").get(identity.runId)
|
|
271
|
+
|| db.prepare("SELECT 1 FROM dsh_lisp_operations WHERE session_id=? AND state IN ('RUNNING','EVALUATING','ADMITTED')").get(identity.sessionId))
|
|
272
|
+
throw new KiokukoError('CONFLICT', 'Cancel or collect current operations before changing this task’s route');
|
|
273
|
+
return mutateCodingWorkflow(db, identity, answerRef, value.revision, { choice }, current => {
|
|
274
|
+
current.scopeVersion++;
|
|
275
|
+
current.choice = { state: choice, scopeVersion: current.scopeVersion, revision: current.choice.revision + 1,
|
|
276
|
+
questionId: `coding-lisp-${current.workflowId}-${current.scopeVersion}`, answerRef };
|
|
277
|
+
delete current.blocker;
|
|
278
|
+
delete current.activeItemId;
|
|
279
|
+
current.state = 'ready';
|
|
280
|
+
});
|
|
281
|
+
}
|
|
282
|
+
//# sourceMappingURL=service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../../src/dsh/coding-workflow/service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { SqliteDatabase } from '../../db/adapter.js';
|
|
2
|
+
import type { CodingIdentity, CodingWorkflow } from './contracts.js';
|
|
3
|
+
export declare function readCodingWorkflow(db: SqliteDatabase, runId: string): CodingWorkflow | undefined;
|
|
4
|
+
export declare function sessionCodingWorkflow(db: SqliteDatabase, sessionId: string): CodingWorkflow | undefined;
|
|
5
|
+
export declare function assertCodingIdentity(workflow: CodingWorkflow, identity: CodingIdentity): void;
|
|
6
|
+
export declare function initializeCodingWorkflow(db: SqliteDatabase, input: CodingIdentity & {
|
|
7
|
+
requestId: string;
|
|
8
|
+
task: string;
|
|
9
|
+
}): CodingWorkflow;
|
|
10
|
+
/** Run admission already owns the transaction that creates its ledger identity. */
|
|
11
|
+
export declare function initializeCodingWorkflowInTransaction(db: SqliteDatabase, input: CodingIdentity & {
|
|
12
|
+
requestId: string;
|
|
13
|
+
task: string;
|
|
14
|
+
}): CodingWorkflow;
|
|
15
|
+
/** Revision, effect and replay receipt commit together. Callers never retain mutable stored state. */
|
|
16
|
+
export declare function mutateCodingWorkflow(db: SqliteDatabase, identity: CodingIdentity, callId: string, expectedRevision: number, payload: unknown, change: (value: CodingWorkflow) => void, implicitRevision?: boolean): CodingWorkflow;
|
|
17
|
+
//# sourceMappingURL=store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../../src/dsh/coding-workflow/store.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAIzD,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAEpE,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAMhG;AACD,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAKvG;AACD,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,cAAc,GAAG,IAAI,CAG7F;AACD,wBAAgB,wBAAwB,CAAC,EAAE,EAAE,cAAc,EAAE,KAAK,EAAE,cAAc,GAAG;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,cAAc,CAExI;AACD,mFAAmF;AACnF,wBAAgB,qCAAqC,CAAC,EAAE,EAAE,cAAc,EAAE,KAAK,EAAE,cAAc,GAAG;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,cAAc,CAmBrJ;AACD,sGAAsG;AACtG,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,cAAc,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,EACzH,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,EAAE,gBAAgB,UAAQ,GAAG,cAAc,CAuBrG"}
|