kiokuko-dsh 0.2.2 → 0.2.4
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 +225 -159
- 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/models/profiles.d.ts +2 -0
- package/dist/dsh/models/profiles.d.ts.map +1 -1
- package/dist/dsh/models/profiles.js +9 -5
- package/dist/dsh/models/profiles.js.map +1 -1
- package/dist/dsh/models/service.d.ts +24 -1
- package/dist/dsh/models/service.d.ts.map +1 -1
- package/dist/dsh/models/service.js +85 -42
- package/dist/dsh/models/service.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/dist/models-client.cjs +223 -157
- package/dist/models-client.d.ts.map +1 -1
- package/dist/models-client.js +261 -166
- package/dist/models-client.js.map +1 -1
- package/docs/coding-workflow.md +45 -0
- package/docs/execution-support.md +4 -0
- package/docs/kiokuko-models.md +25 -13
- 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.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":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAC9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAA;AACtE,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,sBAAsB,EAAoD,MAAM,uBAAuB,CAAA;AACzJ,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AAC1D,OAAO,EAAE,mBAAmB,EAAE,sBAAsB,EAAmE,MAAM,gBAAgB,CAAA;AAC7I,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAE3F,MAAM,QAAQ,GAAG,CAAC,KAAqB,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;AAC1G,MAAM,WAAW,GAAG,IAAI,GAAG,EAA2B,CAAA;AACtD,MAAM,UAAU,mBAAmB,CAAC,QAAiC;IACnE,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;IACzB,OAAO,GAAG,EAAE,GAAG,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA,CAAC,CAAC,CAAA;AAC/C,CAAC;AACD,SAAS,eAAe,CAAC,KAAa,IAAU,KAAK,MAAM,QAAQ,IAAI,WAAW;IAAE,QAAQ,CAAC,KAAK,CAAC,CAAA,CAAC,CAAC;AACrG,MAAM,UAAU,iBAAiB,CAAC,KAAqB,EAAE,EAAU,IAAY,OAAO,UAAU,KAAK,CAAC,UAAU,IAAI,EAAE,EAAE,CAAA,CAAC,CAAC;AAC1H,MAAM,UAAU,WAAW,CAAC,KAAqB,EAAE,UAAgC;IACjF,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,KAAK,WAAW,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAA;IACvH,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,iBAAiB,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAA;IACrK,OAAO,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,IAAI;QAC3D,KAAK,EAAE,KAAK,CAAC,KAAK,KAAK,WAAW,IAAI,KAAK,CAAC,KAAK,KAAK,YAAY,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW;YACxH,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS;gBACpF,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,KAAK,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS;KACxH,CAAC,CAAC,CAAA;AACL,CAAC;AACD,MAAM,UAAU,YAAY,CAAC,EAAkB,EAAE,QAAwB;IACvE,yBAAyB,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAA;IACvC,IAAI,KAAK,GAAG,kBAAkB,CAAC,EAAE,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAA;IAClD,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,UAAU,EAAE,KAAc,EAAE,CAAA;IACjD,oBAAoB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;IACrC,IAAI,KAAK,CAAC,OAAO,EAAE,IAAI,KAAK,cAAc,EAAE,CAAC;QAC3C,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE;YACpD,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,mFAAmF,CAAC;iBACxG,GAAG,CAA0B,KAAM,CAAC,KAAK,EAAE,iBAAiB,CAAC,KAAM,EAAE,EAAE,CAAC,CAAC,CAAA;YAC5E,MAAM,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAqB,CAAC,CAAC,CAAC,SAAS,CAAA;YAChF,OAAO,MAAM,EAAE,IAAI,KAAK,gBAAgB,IAAI,KAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,YAAY,KAAK,sBAAsB,CAAC,EAAE,EAAE,KAAM,CAAC,KAAK,EAAE,KAAM,CAAC,cAAc,EAAE,MAAM,CAAC,WAAW,CAAC,CAAA;QACvK,CAAC,CAAC,CAAA;QACF,IAAI,OAAO;YAAE,KAAK,GAAG,oBAAoB,CAAC,EAAE,EAAE,QAAQ,EAAE,YAAY,KAAK,CAAC,QAAQ,EAAE,EAAE,KAAK,CAAC,QAAQ,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE;gBAClH,OAAO,OAAO,CAAC,OAAO,CAAC;gBAAC,OAAO,CAAC,KAAK,GAAG,OAAO,CAAA;YACjD,CAAC,CAAC,CAAA;IACJ,CAAC;IACD,MAAM,UAAU,GAAG,oBAAoB,CAAC,EAAE,EAAE,KAAK,CAAC,KAAK,CAAC,CAAA;IACxD,OAAO,EAAE,UAAU,EAAE,IAAa,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,WAAW,CAAC,KAAK,EAAE,UAAU,CAAC,EAAE,UAAU,EAAE,CAAA;AACnG,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,qBAAqB,CAAC,EAAkB,EAAE,QAAwB,EAAE,MAAc,EAChG,gBAAwB,EAAE,GAAY,EAAE,MAAM,GAAG,KAAK,EAAE,YAAY,GAAG,KAAK,EAAE,SAAS,GAAG,KAAK;IAC/F,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC,OAAO,CAAC,oGAAoG,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC;QACpJ,MAAM,IAAI,YAAY,CAAC,UAAU,EAAE,6FAA6F,CAAC,CAAA;IACnI,MAAM,UAAU,GAAG,sBAAsB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IACpD,OAAO,oBAAoB,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,gBAAgB,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,EAAE,UAAU,EAAE,YAAY,EAAE,EAAE,KAAK,CAAC,EAAE;QAC/I,IAAI,QAAQ,CAAC,KAAK,CAAC;YAAE,MAAM,IAAI,YAAY,CAAC,UAAU,EAAE,6BAA6B,CAAC,CAAA;QACtF,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC,UAAU;YAAE,MAAM,IAAI,YAAY,CAAC,UAAU,EAAE,wCAAwC,CAAC,CAAA;QAC7G,IAAI,MAAM,IAAI,CAAC,KAAK,CAAC,UAAU;YAAE,MAAM,IAAI,YAAY,CAAC,UAAU,EAAE,0BAA0B,CAAC,CAAA;QAC/F,MAAM,GAAG,GAAG,KAAK,CAAC,UAAU,CAAA;QAC5B,IAAI,GAAG,EAAE,CAAC;YACR,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,KAAK,UAAU,CAAC,IAAI,CAAC,MAAM;gBAAE,MAAM,IAAI,YAAY,CAAC,UAAU,EAAE,yBAAyB,CAAC,CAAA;YAC7G,MAAM,WAAW,GAAG,oBAAoB,CAAC,EAAE,GAAG,GAAG,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,KAAK,oBAAoB,CAAC,EAAE,GAAG,UAAU,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAA;YACpI,IAAI,UAAU,CAAC,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC,IAAI,CAAC,QAAQ,IAAI,WAAW,IAAI,UAAU,CAAC,IAAI,CAAC,QAAQ,IAAI,GAAG,CAAC,IAAI,CAAC,QAAQ;gBAC9G,MAAM,IAAI,YAAY,CAAC,UAAU,EAAE,sCAAsC,CAAC,CAAA;YAC5E,KAAK,MAAM,SAAS,IAAI,UAAU,CAAC,QAAQ,EAAE,CAAC;gBAC5C,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,KAAK,SAAS,CAAC,WAAW,CAAC,CAAA;gBACnF,IAAI,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,WAAW,CAAC;oBAAE,MAAM,IAAI,YAAY,CAAC,UAAU,EAAE,uCAAuC,CAAC,CAAA;gBACjI,IAAI,KAAK,IAAI,CAAC,SAAS,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,IAAI,oBAAoB,CAAC,EAAE,GAAG,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,KAAK,oBAAoB,CAAC,EAAE,GAAG,SAAS,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;uBACvJ,SAAS,CAAC,QAAQ,IAAI,KAAK,CAAC,QAAQ,CAAC;oBAAE,MAAM,IAAI,YAAY,CAAC,UAAU,EAAE,2CAA2C,CAAC,CAAA;YAC7H,CAAC;YACD,KAAK,MAAM,IAAI,IAAI,UAAU,CAAC,KAAK;gBAAE,IAAI,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;oBAAE,MAAM,IAAI,YAAY,CAAC,UAAU,EAAE,kCAAkC,CAAC,CAAA;YACvJ,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;YAC5H,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;YAC9I,sJAAsJ;YACtJ,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC,EAAE,QAAQ,GAAG,WAAW,CAAC,UAAU,CAAC,CAAA;YACrE,YAAY,KAAK,QAAQ,KAAK,QAAQ,CAAA;QACxC,CAAC;QACD,KAAK,CAAC,UAAU,GAAG,UAAU,CAAA;QAC7B,OAAO,KAAK,CAAC,YAAY,CAAC;QAAC,OAAO,KAAK,CAAC,OAAO,CAAA;QAC/C,IAAI,YAAY,EAAE,CAAC;YACjB,KAAK,CAAC,YAAY,EAAE,CAAA;YACpB,KAAK,CAAC,MAAM,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,KAAK,CAAC,YAAY;gBACjE,UAAU,EAAE,eAAe,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,YAAY,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAA;QAC9G,CAAC;QACD,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,OAAO,CAAA;IACnF,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,yBAAyB,CAAC,EAAkB,EAAE,QAAwB;IACpF,IAAI,KAAK,GAAG,kBAAkB,CAAC,EAAE,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAA;IAClD,IAAI,CAAC,KAAK,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,oGAAoG,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAM;IAC9K,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,iGAAiG,CAAC;SACvH,GAAG,CAA+C,QAAQ,CAAC,KAAK,CAAC,CAAA;IACpE,IAAI,CAAC,IAAI;QAAE,OAAM;IACjB,MAAM,UAAU,GAAG,mBAAmB,EAAE,CAAC,gBAAgB,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,EAAC,QAAQ,CAAC,KAAK,EAAC,GAAG,IAAI,EAAE,CAAC,CAAA;IACjG,IAAI,CAAC,UAAU;QAAE,OAAM;IACvB,MAAM,MAAM,GAAG,oBAAoB,CAAC,UAAU,CAAC,UAAU,CAAC,CAAA;IAC1D,IAAI,KAAK,CAAC,oBAAoB,KAAK,MAAM,EAAE,CAAC;QAC1C,KAAK,GAAG,qBAAqB,CAAC,EAAE,EAAE,QAAQ,EAAE,mBAAmB,MAAM,EAAE,EAAE,KAAK,CAAC,QAAQ,EAAE,UAAU,CAAC,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,EAAE,IAAI,CAAC,CAAA;QAChJ,KAAK,GAAG,oBAAoB,CAAC,EAAE,EAAE,QAAQ,EAAE,eAAe,MAAM,EAAE,EAAE,KAAK,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,EAAE,OAAO,CAAA,EAAE,GAAE,OAAO,CAAC,oBAAoB,GAAG,MAAM,CAAA,CAAC,CAAC,CAAC,CAAA;IACrJ,CAAC;IACD,KAAK,MAAM,OAAO,IAAI,UAAU,CAAC,QAAQ;QAAE,iBAAiB,CAAC,EAAE,EAAE,EAAE,KAAK,EAAC,QAAQ,CAAC,KAAK;YACrF,MAAM,EAAC,cAAc,MAAM,IAAI,KAAK,CAAC,YAAY,IAAI,OAAO,CAAC,WAAW,IAAI,UAAU,CAAC,QAAQ,EAAE,EAAE,WAAW,EAAC,iBAAiB,CAAC,KAAK,EAAC,OAAO,CAAC,WAAW,CAAC;YAC3J,MAAM,EAAC,EAAE,IAAI,EAAC,eAAe,EAAE,UAAU,EAAC,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC,OAAO,CAAC,UAAU,CAAA,CAAC,CAAA,EAAC,UAAU,EAAC,OAAO,CAAC,UAAU,EAAC,CAAA,CAAC,CAAA,EAAE,CAAC,EAAE,SAAS,EAAC,qBAAqB,EAAE,EAAE,QAAQ,EAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAA;AAChM,CAAC;AACD,SAAS,WAAW,CAAC,KAAuB;IAC1C,OAAO,oBAAoB,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAC,QAAQ,EAAE,SAAS,EAAE,GAAG,SAAS,EAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC,EAAE,CAAA,CAAC,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE,EAAE,UAAU,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,EAAE;QACxT,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,YAAY,EAAE,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,EAAE;YAC5J,gBAAgB,EAAE,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAA;AACjH,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,kBAAkB,CAAC,EAAkB,EAAE,QAAwB,EAAE,KAGhF;IACC,OAAO,oBAAoB,CAAC,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,gBAAgB,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE;QAC7F,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,UAAU,KAAK,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,YAAY,KAAK,KAAK,CAAC,YAAY;eACpG,KAAK,CAAC,MAAM,CAAC,UAAU,KAAK,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,MAAM,CAAC,QAAQ,KAAK,KAAK,CAAC,gBAAgB;eAChG,KAAK,CAAC,MAAM,CAAC,KAAK,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,UAAU,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE;YACnF,MAAM,IAAI,YAAY,CAAC,UAAU,EAAE,yDAAyD,CAAC,CAAA;QAC/F,KAAK,CAAC,MAAM,GAAG,EAAE,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,CAAA;QACnF,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAA;IACpE,CAAC,CAAC,CAAA;AACJ,CAAC;AACD,MAAM,UAAU,cAAc,CAAC,EAAkB,EAAE,QAAwB;IACzE,MAAM,MAAM,GAAG,YAAY,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAA;IACzC,IAAI,CAAC,MAAM,CAAC,UAAU;QAAE,OAAO,MAAM,CAAA;IACrC,IAAI,CAAC,MAAM,CAAC,UAAU;QAAE,OAAO,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,iCAAiC,EAAE,CAAA;IACrF,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,KAAK,SAAS;QAAE,OAAO,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,oBAAoB,EAAE,CAAA;IACvF,IAAI,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,KAAK,EAAE,CAAA;IAC9D,IAAI,MAAM,CAAC,OAAO,EAAE,YAAY,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAA;IAC5F,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,KAAK,OAAO,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC,CAAA;IAC3F,OAAO,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,KAAK,WAAW,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,iBAAiB,EAAE,IAAI,EAAE,KAAK,EAAE,CAAA;AACjL,CAAC;AACD,MAAM,UAAU,mBAAmB,CAAC,EAAkB,EAAE,QAAwB,EAAE,MAAc,EAAE,gBAAwB,EAAE,GAAY;IACtI,MAAM,OAAO,GAAG,mBAAmB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAC9C,OAAO,oBAAoB,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,gBAAgB,EAAE,EAAE,OAAO,EAAE,EAAE,KAAK,CAAC,EAAE;QACvF,IAAI,QAAQ,CAAC,KAAK,CAAC;YAAE,MAAM,IAAI,YAAY,CAAC,UAAU,EAAE,6BAA6B,CAAC,CAAA;QACtF,IAAI,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,UAAU,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,KAAK,EAAE,CAAC,CAAC;YAAE,MAAM,IAAI,YAAY,CAAC,kBAAkB,EAAE,2BAA2B,CAAC,CAAA;QAC/K,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;QAAC,KAAK,CAAC,KAAK,GAAG,SAAS,CAAA;IAClD,CAAC,CAAC,CAAA;AACJ,CAAC;AACD,MAAM,UAAU,oBAAoB,CAAC,EAAkB,EAAE,QAAwB,EAAE,IAAY;IAC7F,YAAY,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAA;IAC1B,MAAM,KAAK,GAAG,kBAAkB,CAAC,EAAE,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAA;IACpD,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAA,CAAC,6DAA6D;IAC1F,oBAAoB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;IACrC,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,KAAK,SAAS;QAAE,MAAM,IAAI,YAAY,CAAC,UAAU,EAAE,0FAA0F,CAAC,CAAA;IAC5M,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,KAAK,KAAK;QAAE,MAAM,IAAI,YAAY,CAAC,UAAU,EAAE,2CAA2C,CAAC,CAAA;IAC7I,IAAI,KAAK,CAAC,OAAO,EAAE,IAAI,KAAK,cAAc,IAAI,CAAC,aAAa,EAAE,YAAY,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAA;IACrH,MAAM,IAAI,GAAG,cAAc,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAA;IACzC,IAAI,CAAC,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QACpC,IAAI,MAAM,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,mBAAmB;YAAE,OAAO,KAAK,CAAA;QACrE,MAAM,IAAI,YAAY,CAAC,UAAU,EAAE,+DAA+D,CAAC,CAAA;IACrG,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AACD,MAAM,UAAU,mBAAmB,CAAC,EAAkB,EAAE,QAAwB,EAAE,MAAc,EAAE,IAAY;IAC5G,MAAM,KAAK,GAAG,oBAAoB,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAA;IACtD,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAA;IACxB,MAAM,IAAI,GAAG,cAAc,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAA;IACzC,OAAO,oBAAoB,CAAC,EAAE,EAAE,QAAQ,EAAE,YAAY,MAAM,EAAE,EAAE,KAAK,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,CAAC,YAAY,EAAE,EAAE,OAAO,CAAC,EAAE;QACpI,IAAI,MAAM,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YAAC,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;YAAC,OAAO,CAAC,KAAK,GAAG,cAAc,CAAA;QAAC,CAAC;;YACvG,OAAO,CAAC,KAAK,GAAG,gBAAgB,CAAA;IACvC,CAAC,EAAE,IAAI,CAAC,CAAA;AACV,CAAC;AACD,MAAM,UAAU,yBAAyB,CAAC,EAAkB,EAAE,KAAa;IACzE,MAAM,KAAK,GAAG,kBAAkB,CAAC,EAAE,EAAE,KAAK,CAAC,CAAA;IAC3C,IAAI,CAAC,KAAK,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,KAAK,SAAS;QAAE,OAAO,KAAK,CAAA;IACpG,MAAM,UAAU,GAAG,oBAAoB,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,KAAK,GAAG,WAAW,CAAC,KAAK,EAAE,UAAU,CAAC,CAAA;IAC1F,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC;yHAC+F,CAAC;SACrH,GAAG,CAA+C,KAAK,CAAC,CAAA;IAC3D,MAAM,iBAAiB,GAAG,CAAC,IAAI,IAAI,mBAAmB,EAAE,CAAC,gBAAgB,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,EAAC,GAAG,IAAI,EAAE,CAAC,EAAE,SAAS,KAAK,IAAI,CAAA;IACtH,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,IAAI,iBAAiB,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,KAAK,WAAW,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAA;IACnL,IAAI,KAAK,KAAK,KAAK,CAAC,KAAK;QAAE,OAAO,KAAK,CAAA;IACvC,OAAO,oBAAoB,CAAC,EAAE,EAAE,KAAK,EAAE,YAAY,oBAAoB,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,UAAU,EAAE,CAAC,EAAE,EAAE,KAAK,CAAC,QAAQ,EAAE,EAAE,UAAU,EAAE,EAAE,OAAO,CAAC,EAAE,GAAG,OAAO,CAAC,KAAK,GAAG,KAAK,CAAA,CAAC,CAAC,CAAC,CAAA;AAC5L,CAAC;AACD,MAAM,UAAU,kBAAkB,CAAC,EAAkB,EAAE,KAAa,EAAE,KAAiC;IACrG,MAAM,KAAK,GAAG,kBAAkB,CAAC,EAAE,EAAE,KAAK,CAAC,CAAA;IAC3C,IAAI,CAAC,KAAK,IAAI,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAM;IACrC,oBAAoB,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,KAAK,IAAI,KAAK,CAAC,QAAQ,EAAE,EAAE,KAAK,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,CAAC,EAAE,GAAG,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,OAAO,OAAO,CAAC,YAAY,CAAA,CAAC,CAAC,CAAC,CAAA;IAChK,eAAe,CAAC,KAAK,CAAC,CAAA;AACxB,CAAC;AACD,MAAM,UAAU,mBAAmB,CAAC,EAAkB,EAAE,QAAwB,EAAE,MAAc,EAAE,WAAmB,EACnH,WAAmB,EAAE,GAAW,EAAE,YAAqB;IACvD,MAAM,KAAK,GAAG,kBAAkB,CAAC,EAAE,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAA;IACpD,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,YAAY,CAAC,WAAW,EAAE,oBAAoB,CAAC,CAAA;IACrE,OAAO,oBAAoB,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,QAAQ,EAAE,EAAE,WAAW,EAAE,WAAW,EAAE,GAAG,EAAE,EAAE,OAAO,CAAC,EAAE;QAC7G,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAA;QAC3C,IAAI,KAAK,EAAE,WAAW,KAAK,WAAW,IAAI,GAAG,GAAG,KAAK,CAAC,OAAO;YAAE,MAAM,IAAI,YAAY,CAAC,UAAU,EAAE,8DAA8D,CAAC,CAAA;QACjK,MAAM,KAAK,GAAG,KAAK,EAAE,WAAW,KAAK,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QACtE,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAA;QACjK,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;YACf,OAAO,CAAC,OAAO,GAAG,EAAE,YAAY,EAAE,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,4BAA4B;gBACxG,QAAQ,EAAE,yCAAyC,EAAE,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,kDAAkD,EAAE,CAAA;YACrI,OAAO,CAAC,KAAK,GAAG,SAAS,CAAA;QAC3B,CAAC;aAAM,IAAI,KAAK,EAAE,WAAW,KAAK,WAAW,IAAI,OAAO,CAAC,OAAO,EAAE,IAAI,KAAK,cAAc,EAAE,CAAC;YAAC,OAAO,OAAO,CAAC,OAAO,CAAC;YAAC,OAAO,CAAC,KAAK,GAAG,OAAO,CAAA;QAAC,CAAC;IAChJ,CAAC,EAAE,IAAI,CAAC,CAAA;AACV,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,wBAAwB,CAAC,EAAkB,EAAE,QAAwB,EAAE,OAAe;IACpG,MAAM,QAAQ,GAAG,kBAAkB,CAAC,EAAE,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAA;IACvD,IAAI,CAAC,QAAQ,EAAE,UAAU;QAAE,OAAM;IACjC,oBAAoB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;IACxC,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,4FAA4F,CAAC;SAClH,GAAG,CAAgD,QAAQ,CAAC,KAAK,CAAC,CAAA;IACrE,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAqB,CAAA;QAC9D,IAAI,MAAM,CAAC,IAAI,KAAK,gBAAgB,IAAI,gBAAgB,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,gBAAgB,CAAC,OAAO,CAAC;YAAE,SAAQ;QAChH,MAAM,EAAE,GAAG,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC,UAAU,QAAQ,CAAC,UAAU,GAAG,CAAC,MAAM,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;QAC3G,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,YAAY,KAAK,sBAAsB,CAAC,EAAE,EAAE,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC,WAAW,CAAC;YAAE,SAAQ;QAC1I,IAAI,OAAO,CAAC,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,OAAO;YAAE,MAAM,IAAI,YAAY,CAAC,UAAU,EAAE,2EAA2E,CAAC,CAAA;IACzK,CAAC;AACH,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,EAAkB,EAAE,QAAwB;IACpF,MAAM,KAAK,GAAG,kBAAkB,CAAC,EAAE,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAA;IACpD,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,OAAO,EAAE,IAAI,KAAK,SAAS,IAAI,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAM;IAC1E,oBAAoB,CAAC,EAAE,EAAE,QAAQ,EAAE,iBAAiB,KAAK,CAAC,QAAQ,EAAE,EAAE,KAAK,CAAC,QAAQ,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE;QAClG,OAAO,OAAO,CAAC,OAAO,CAAC;QAAC,OAAO,CAAC,KAAK,GAAG,OAAO,CAAA;IACjD,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,qFAAqF;AACrF,MAAM,UAAU,oBAAoB,CAAC,EAAkB,EAAE,QAAwB,EAAE,MAAoB,EAAE,SAAiB;IACxH,MAAM,KAAK,GAAG,kBAAkB,CAAC,EAAE,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAA;IACpD,IAAI,CAAC,KAAK;QAAE,OAAM;IAClB,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;QAAE,MAAM,IAAI,YAAY,CAAC,UAAU,EAAE,wDAAwD,CAAC,CAAA;IAC3J,IAAI,EAAE,CAAC,OAAO,CAAC,uEAAuE,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC;WACtG,EAAE,CAAC,OAAO,CAAC,uGAAuG,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC;QAC9I,MAAM,IAAI,YAAY,CAAC,UAAU,EAAE,wEAAwE,CAAC,CAAA;IAC9G,OAAO,oBAAoB,CAAC,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE;QACzF,OAAO,CAAC,YAAY,EAAE,CAAA;QACtB,OAAO,CAAC,MAAM,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,CAAC,YAAY,EAAE,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,QAAQ,GAAG,CAAC;YACzG,UAAU,EAAE,eAAe,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,CAAA;QACtF,OAAO,OAAO,CAAC,OAAO,CAAC;QAAC,OAAO,OAAO,CAAC,YAAY,CAAC;QAAC,OAAO,CAAC,KAAK,GAAG,OAAO,CAAA;IAC9E,CAAC,CAAC,CAAA;AACJ,CAAC"}
|
|
@@ -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"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { randomUUID } from 'node:crypto';
|
|
2
|
+
import { withImmediateTransaction } from '../../db/transaction.js';
|
|
3
|
+
import { KiokukoError } from '../../errors.js';
|
|
4
|
+
import { canonicalContentHash } from '../../serialization/validate.js';
|
|
5
|
+
export function readCodingWorkflow(db, runId) {
|
|
6
|
+
// Legacy consumers may use a pre-workflow schema. Do not manufacture a
|
|
7
|
+
// choice or catch database failures as though they were a legacy task.
|
|
8
|
+
if (!db.prepare("SELECT 1 FROM sqlite_master WHERE type='table' AND name='dsh_coding_workflows'").get())
|
|
9
|
+
return undefined;
|
|
10
|
+
const row = db.prepare('SELECT snapshot_json FROM dsh_coding_workflows WHERE run_id=?').get(runId);
|
|
11
|
+
return row ? JSON.parse(row.snapshot_json) : undefined;
|
|
12
|
+
}
|
|
13
|
+
export function sessionCodingWorkflow(db, sessionId) {
|
|
14
|
+
if (!db.prepare("SELECT 1 FROM sqlite_master WHERE type='table' AND name='dsh_coding_workflows'").get())
|
|
15
|
+
return undefined;
|
|
16
|
+
const row = db.prepare(`SELECT w.snapshot_json FROM dsh_coding_workflows w JOIN dsh_execution_owners o ON o.run_id=w.run_id
|
|
17
|
+
WHERE o.dsh_session_id=? AND w.session_id=?`).get(sessionId, sessionId);
|
|
18
|
+
return row ? JSON.parse(row.snapshot_json) : undefined;
|
|
19
|
+
}
|
|
20
|
+
export function assertCodingIdentity(workflow, identity) {
|
|
21
|
+
if (workflow.runId !== identity.runId || workflow.sessionId !== identity.sessionId || workflow.repositoryRoot !== identity.repositoryRoot)
|
|
22
|
+
throw new KiokukoError('CONFLICT', 'Coding workflow owner or repository changed');
|
|
23
|
+
}
|
|
24
|
+
export function initializeCodingWorkflow(db, input) {
|
|
25
|
+
return withImmediateTransaction(db, () => initializeCodingWorkflowInTransaction(db, input));
|
|
26
|
+
}
|
|
27
|
+
/** Run admission already owns the transaction that creates its ledger identity. */
|
|
28
|
+
export function initializeCodingWorkflowInTransaction(db, input) {
|
|
29
|
+
const previous = readCodingWorkflow(db, input.runId);
|
|
30
|
+
if (previous) {
|
|
31
|
+
assertCodingIdentity(previous, input);
|
|
32
|
+
if (previous.requestId !== input.requestId || previous.requestDigest !== canonicalContentHash(input.task))
|
|
33
|
+
throw new KiokukoError('CONFLICT', 'Coding request identity was reused with different input');
|
|
34
|
+
return previous;
|
|
35
|
+
}
|
|
36
|
+
const workflowId = randomUUID();
|
|
37
|
+
const value = { runId: input.runId, sessionId: input.sessionId, repositoryRoot: input.repositoryRoot,
|
|
38
|
+
requestId: input.requestId, request: input.task, requestDigest: canonicalContentHash(input.task),
|
|
39
|
+
workflowId, revision: 1, scopeVersion: 1, state: 'preparing', retiredIds: [], attempts: {},
|
|
40
|
+
choice: { state: 'pending', scopeVersion: 1, questionId: `coding-lisp-${workflowId}-1`, revision: 1 } };
|
|
41
|
+
db.prepare('INSERT INTO dsh_coding_workflows VALUES(?,?,?,?,?,?,?,?)')
|
|
42
|
+
.run(workflowId, input.runId, input.sessionId, input.repositoryRoot, input.requestId, 1, JSON.stringify(value), new Date().toISOString());
|
|
43
|
+
db.prepare('INSERT OR IGNORE INTO dsh_completion_runs(run_id,mode,created_at) VALUES(?,?,?)')
|
|
44
|
+
.run(input.runId, 'enforce', new Date().toISOString());
|
|
45
|
+
db.prepare("UPDATE dsh_completion_runs SET mode='enforce' WHERE run_id=?").run(input.runId);
|
|
46
|
+
return value;
|
|
47
|
+
}
|
|
48
|
+
/** Revision, effect and replay receipt commit together. Callers never retain mutable stored state. */
|
|
49
|
+
export function mutateCodingWorkflow(db, identity, callId, expectedRevision, payload, change, implicitRevision = false) {
|
|
50
|
+
return withImmediateTransaction(db, () => {
|
|
51
|
+
const current = readCodingWorkflow(db, identity.runId);
|
|
52
|
+
if (!current)
|
|
53
|
+
throw new KiokukoError('NOT_FOUND', 'No coding workflow for this task');
|
|
54
|
+
assertCodingIdentity(current, identity);
|
|
55
|
+
const digest = canonicalContentHash({ identity: { runId: identity.runId, sessionId: identity.sessionId, repositoryRoot: identity.repositoryRoot },
|
|
56
|
+
...(implicitRevision ? {} : { expectedRevision }), payload });
|
|
57
|
+
const previous = db.prepare('SELECT request_digest,response_json FROM dsh_coding_operations WHERE workflow_id=? AND call_id=?')
|
|
58
|
+
.get(current.workflowId, callId);
|
|
59
|
+
if (previous) {
|
|
60
|
+
if (previous.request_digest !== digest)
|
|
61
|
+
throw new KiokukoError('CONFLICT', 'Coding call ID reused with changed input');
|
|
62
|
+
return JSON.parse(previous.response_json);
|
|
63
|
+
}
|
|
64
|
+
if (current.revision !== expectedRevision)
|
|
65
|
+
throw new KiokukoError('CONFLICT', 'Stale coding workflow revision');
|
|
66
|
+
change(current);
|
|
67
|
+
current.revision++;
|
|
68
|
+
const json = JSON.stringify(current);
|
|
69
|
+
db.prepare('UPDATE dsh_coding_workflows SET revision=?,snapshot_json=?,updated_at=? WHERE workflow_id=? AND revision=?')
|
|
70
|
+
.run(current.revision, json, new Date().toISOString(), current.workflowId, expectedRevision);
|
|
71
|
+
if (readCodingWorkflow(db, identity.runId)?.revision !== current.revision)
|
|
72
|
+
throw new KiokukoError('CONFLICT', 'Coding CAS failed');
|
|
73
|
+
db.prepare('INSERT INTO dsh_coding_operations VALUES(?,?,?,?)').run(current.workflowId, callId, digest, json);
|
|
74
|
+
return current;
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../../src/dsh/coding-workflow/store.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { SqliteDatabase } from '../db/adapter.js';
|
|
2
2
|
import type { TapSummary } from './node-tap-summary.js';
|
|
3
|
+
import type { CodingDefinition } from './coding-workflow/contracts.js';
|
|
3
4
|
interface Identity {
|
|
4
5
|
runId: string;
|
|
5
6
|
workspace: string;
|
|
@@ -13,11 +14,23 @@ interface CompletionVerifiers {
|
|
|
13
14
|
description: string;
|
|
14
15
|
}[];
|
|
15
16
|
};
|
|
16
|
-
results(db: SqliteDatabase, identity: Identity, root: string): readonly {
|
|
17
|
+
results(db: SqliteDatabase, identity: Identity, root: string, workUnitId?: string): readonly {
|
|
17
18
|
verifierId: string;
|
|
18
19
|
status: string;
|
|
19
20
|
tapSummary?: TapSummary;
|
|
21
|
+
explicitCases?: boolean;
|
|
22
|
+
receiptId?: string;
|
|
20
23
|
}[] | null | undefined;
|
|
24
|
+
codingProjection?(db: SqliteDatabase, identity: Identity): {
|
|
25
|
+
definition: CodingDefinition;
|
|
26
|
+
approved: boolean;
|
|
27
|
+
completed: boolean;
|
|
28
|
+
bindings: readonly {
|
|
29
|
+
criterionId: string;
|
|
30
|
+
verifierId: string;
|
|
31
|
+
workUnitId?: string;
|
|
32
|
+
}[];
|
|
33
|
+
} | undefined;
|
|
21
34
|
}
|
|
22
35
|
/** The optional Enno module supplies its own readers; core never imports that module. */
|
|
23
36
|
export declare function registerCompletionVerifiers(value: CompletionVerifiers): void;
|