@askdkc/kiokuko 0.1.32 → 0.2.0
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 +55 -4
- package/README.ko.md +50 -4
- package/README.md +55 -4
- package/README.zh-CN.md +50 -4
- package/dist/agent-file/render.d.ts +1 -1
- package/dist/agent-file/render.d.ts.map +1 -1
- package/dist/agent-file/render.js +11 -6
- package/dist/agent-file/render.js.map +1 -1
- package/dist/akinator/agent-task.d.ts +2 -0
- package/dist/akinator/agent-task.d.ts.map +1 -1
- package/dist/akinator/agent-task.js +39 -12
- package/dist/akinator/agent-task.js.map +1 -1
- package/dist/akinator/capabilities.d.ts.map +1 -1
- package/dist/akinator/capabilities.js +21 -14
- package/dist/akinator/capabilities.js.map +1 -1
- package/dist/akinator/skill-discovery-attempt.d.ts +1 -0
- package/dist/akinator/skill-discovery-attempt.d.ts.map +1 -1
- package/dist/akinator/skill-discovery-attempt.js +20 -18
- package/dist/akinator/skill-discovery-attempt.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +5 -1
- package/dist/cli.js.map +1 -1
- package/dist/commands/agent.d.ts.map +1 -1
- package/dist/commands/agent.js +18 -9
- package/dist/commands/agent.js.map +1 -1
- package/dist/commands/enno.d.ts +7 -0
- package/dist/commands/enno.d.ts.map +1 -0
- package/dist/commands/enno.js +76 -0
- package/dist/commands/enno.js.map +1 -0
- package/dist/commands/setup.d.ts +5 -1
- package/dist/commands/setup.d.ts.map +1 -1
- package/dist/commands/setup.js +83 -18
- package/dist/commands/setup.js.map +1 -1
- package/dist/config/paths.d.ts +6 -0
- package/dist/config/paths.d.ts.map +1 -1
- package/dist/config/paths.js +40 -0
- package/dist/config/paths.js.map +1 -1
- package/dist/enno-oduno/adapters.d.ts +18 -0
- package/dist/enno-oduno/adapters.d.ts.map +1 -0
- package/dist/enno-oduno/adapters.js +216 -0
- package/dist/enno-oduno/adapters.js.map +1 -0
- package/dist/enno-oduno/directives.d.ts +12 -0
- package/dist/enno-oduno/directives.d.ts.map +1 -0
- package/dist/enno-oduno/directives.js +215 -0
- package/dist/enno-oduno/directives.js.map +1 -0
- package/dist/enno-oduno/enno-oduno.d.mts +2 -0
- package/dist/enno-oduno/enno-oduno.d.mts.map +1 -0
- package/dist/enno-oduno/enno-oduno.mjs +3 -0
- package/dist/enno-oduno/enno-oduno.mjs.map +1 -0
- package/dist/enno-oduno/experts.d.ts +6 -0
- package/dist/enno-oduno/experts.d.ts.map +1 -0
- package/dist/enno-oduno/experts.js +18 -0
- package/dist/enno-oduno/experts.js.map +1 -0
- package/dist/enno-oduno/goki.d.mts +2 -0
- package/dist/enno-oduno/goki.d.mts.map +1 -0
- package/dist/enno-oduno/goki.mjs +3 -0
- package/dist/enno-oduno/goki.mjs.map +1 -0
- package/dist/enno-oduno/handoff.d.ts +4 -0
- package/dist/enno-oduno/handoff.d.ts.map +1 -0
- package/dist/enno-oduno/handoff.js +18 -0
- package/dist/enno-oduno/handoff.js.map +1 -0
- package/dist/enno-oduno/harness.d.ts +20 -0
- package/dist/enno-oduno/harness.d.ts.map +1 -0
- package/dist/enno-oduno/harness.js +65 -0
- package/dist/enno-oduno/harness.js.map +1 -0
- package/dist/enno-oduno/instructions.d.ts +2 -0
- package/dist/enno-oduno/instructions.d.ts.map +1 -0
- package/dist/enno-oduno/instructions.js +3 -0
- package/dist/enno-oduno/instructions.js.map +1 -0
- package/dist/enno-oduno/role-runner.d.ts +9 -0
- package/dist/enno-oduno/role-runner.d.ts.map +1 -0
- package/dist/enno-oduno/role-runner.js +171 -0
- package/dist/enno-oduno/role-runner.js.map +1 -0
- package/dist/enno-oduno/schemas.d.ts +615 -0
- package/dist/enno-oduno/schemas.d.ts.map +1 -0
- package/dist/enno-oduno/schemas.js +336 -0
- package/dist/enno-oduno/schemas.js.map +1 -0
- package/dist/enno-oduno/service.d.ts +47 -0
- package/dist/enno-oduno/service.d.ts.map +1 -0
- package/dist/enno-oduno/service.js +841 -0
- package/dist/enno-oduno/service.js.map +1 -0
- package/dist/enno-oduno/skills.d.ts +22 -0
- package/dist/enno-oduno/skills.d.ts.map +1 -0
- package/dist/enno-oduno/skills.js +127 -0
- package/dist/enno-oduno/skills.js.map +1 -0
- package/dist/enno-oduno/store.d.ts +61 -0
- package/dist/enno-oduno/store.d.ts.map +1 -0
- package/dist/enno-oduno/store.js +337 -0
- package/dist/enno-oduno/store.js.map +1 -0
- package/dist/enno-oduno/types.d.ts +191 -0
- package/dist/enno-oduno/types.d.ts.map +1 -0
- package/dist/enno-oduno/types.js +41 -0
- package/dist/enno-oduno/types.js.map +1 -0
- package/dist/enno-oduno/verifier.d.ts +9 -0
- package/dist/enno-oduno/verifier.d.ts.map +1 -0
- package/dist/enno-oduno/verifier.js +101 -0
- package/dist/enno-oduno/verifier.js.map +1 -0
- package/dist/enno-oduno/zenki.d.mts +2 -0
- package/dist/enno-oduno/zenki.d.mts.map +1 -0
- package/dist/enno-oduno/zenki.mjs +3 -0
- package/dist/enno-oduno/zenki.mjs.map +1 -0
- package/dist/ledger/types.d.ts +1 -1
- package/dist/ledger/types.d.ts.map +1 -1
- package/dist/ledger/types.js +5 -0
- package/dist/ledger/types.js.map +1 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +66 -26
- package/dist/mcp/server.js.map +1 -1
- package/dist/setup/claude-config.d.ts +2 -0
- package/dist/setup/claude-config.d.ts.map +1 -1
- package/dist/setup/claude-config.js +12 -0
- package/dist/setup/claude-config.js.map +1 -1
- package/dist/setup/enno-client-config.d.ts +9 -0
- package/dist/setup/enno-client-config.d.ts.map +1 -0
- package/dist/setup/enno-client-config.js +172 -0
- package/dist/setup/enno-client-config.js.map +1 -0
- package/dist/setup/opencode-config.d.ts +2 -0
- package/dist/setup/opencode-config.d.ts.map +1 -1
- package/dist/setup/opencode-config.js +12 -0
- package/dist/setup/opencode-config.js.map +1 -1
- package/dist/setup/render.d.ts +2 -0
- package/dist/setup/render.d.ts.map +1 -1
- package/dist/setup/render.js +21 -12
- package/dist/setup/render.js.map +1 -1
- package/dist/setup/standard-skills.d.ts +23 -4
- package/dist/setup/standard-skills.d.ts.map +1 -1
- package/dist/setup/standard-skills.js +51 -1
- package/dist/setup/standard-skills.js.map +1 -1
- package/dist/skills/discovery-service.d.ts.map +1 -1
- package/dist/skills/discovery-service.js +2 -1
- package/dist/skills/discovery-service.js.map +1 -1
- package/dist/skills/types.d.ts +1 -0
- package/dist/skills/types.d.ts.map +1 -1
- package/migrations/013_enno_oduno.sql +176 -0
- package/migrations/014_oduno_reflection_phases.sql +40 -0
- package/package.json +7 -1
- package/skills/kiokuko-enno-oduno/SKILL.md +122 -0
- package/skills/kiokuko-enno-oduno/enno-oduno.png +0 -0
- package/skills/kiokuko-single-purpose-functions/SKILL.md +44 -258
- package/skills/kiokuko-single-purpose-functions/references/boundaries-and-ownership.md +50 -0
- package/skills/kiokuko-single-purpose-functions/references/domain-and-types.md +48 -0
- package/skills/kiokuko-single-purpose-functions/references/effects-and-data.md +43 -0
- package/skills/kiokuko-single-purpose-functions/references/protocols-and-idempotency.md +42 -0
- package/skills/kiokuko-single-purpose-functions/references/verification.md +41 -0
- package/skills/kiokuko-soul/SKILL.md +72 -0
- package/skills/kiokuko-ui-design-soul/SKILL.md +39 -1178
- package/skills/kiokuko-ui-design-soul/references/accessibility-and-navigation.md +31 -0
- package/skills/kiokuko-ui-design-soul/references/async-recovery.md +49 -0
- package/skills/kiokuko-ui-design-soul/references/forms-and-controls.md +35 -0
- package/skills/kiokuko-ui-design-soul/references/interaction-feedback.md +34 -0
- package/skills/kiokuko-ui-design-soul/references/responsive-and-platform.md +38 -0
- package/skills/kiokuko-ui-design-soul/references/safety-and-review.md +39 -0
- package/templates/AGENTS.md +9 -6
|
@@ -0,0 +1,337 @@
|
|
|
1
|
+
import { randomUUID } from 'node:crypto';
|
|
2
|
+
import { withImmediateTransaction } from '../db/transaction.js';
|
|
3
|
+
import { KiokukoError } from '../errors.js';
|
|
4
|
+
import { LedgerStore } from '../ledger/store.js';
|
|
5
|
+
import { canonicalJson } from '../serialization/validate.js';
|
|
6
|
+
import { parseStrictJson } from '../setup/strict-json.js';
|
|
7
|
+
import { parseEnnoContract, parseEnnoRequestHandoff, parseOdunoIdeal, parseOdunoMeditation, parseWorkReportResult, parseWorkPlan, } from './schemas.js';
|
|
8
|
+
import { ENNO_DEFAULT_MAX_ATTEMPTS, ENNO_APPLICABLE_TASK_TYPES, ENNO_CLIENT_KINDS, ENNO_STATUSES, } from './types.js';
|
|
9
|
+
function integrity(message) {
|
|
10
|
+
throw new KiokukoError('INTEGRITY_ERROR', message);
|
|
11
|
+
}
|
|
12
|
+
function parseCanonicalJson(value, message) {
|
|
13
|
+
let parsed;
|
|
14
|
+
try {
|
|
15
|
+
parsed = parseStrictJson(value, { allowTrailingComma: false, disallowComments: true, allowEmptyContent: false }, message);
|
|
16
|
+
}
|
|
17
|
+
catch {
|
|
18
|
+
return integrity(message);
|
|
19
|
+
}
|
|
20
|
+
if (canonicalJson(parsed) !== value)
|
|
21
|
+
return integrity(message);
|
|
22
|
+
return parsed;
|
|
23
|
+
}
|
|
24
|
+
function contractRow(database, runId) {
|
|
25
|
+
return database.prepare('SELECT * FROM enno_contracts WHERE run_id = ?').get(runId);
|
|
26
|
+
}
|
|
27
|
+
function validateContractRow(row) {
|
|
28
|
+
if (!ENNO_STATUSES.includes(row.status)
|
|
29
|
+
|| !ENNO_APPLICABLE_TASK_TYPES.includes(row.task_type)
|
|
30
|
+
|| !Number.isSafeInteger(row.revision) || row.revision < 1
|
|
31
|
+
|| !Number.isSafeInteger(row.attempts) || row.attempts < 0 || row.attempts > 20
|
|
32
|
+
|| !Number.isSafeInteger(row.mutation_revision) || row.mutation_revision < 0) {
|
|
33
|
+
integrity('Stored Enno run state is invalid');
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
function exposedStatus(row) {
|
|
37
|
+
if (row.phase === null)
|
|
38
|
+
return row.status;
|
|
39
|
+
if (row.phase === 'oduno_ideal' && row.status === 'zenki_planning')
|
|
40
|
+
return row.phase;
|
|
41
|
+
if (row.phase === 'oduno_meditation' && row.status === 'enno_verifying')
|
|
42
|
+
return row.phase;
|
|
43
|
+
return integrity('Stored Oduno phase is inconsistent');
|
|
44
|
+
}
|
|
45
|
+
function persistedState(status) {
|
|
46
|
+
if (status === 'oduno_ideal')
|
|
47
|
+
return { status: 'zenki_planning', phase: status };
|
|
48
|
+
if (status === 'oduno_meditation')
|
|
49
|
+
return { status: 'enno_verifying', phase: status };
|
|
50
|
+
return { status, phase: null };
|
|
51
|
+
}
|
|
52
|
+
function workUnits(database, runId, revision) {
|
|
53
|
+
return database.prepare(`
|
|
54
|
+
SELECT work_unit_json, status, attempt_count, result_json
|
|
55
|
+
FROM enno_work_units
|
|
56
|
+
WHERE run_id = ? AND contract_revision = ?
|
|
57
|
+
ORDER BY order_index
|
|
58
|
+
`).all(runId, revision).map((row) => ({
|
|
59
|
+
workUnit: parseWorkPlan({ objective: 'stored unit', units: [parseCanonicalJson(row.work_unit_json, 'Stored Enno WorkUnit is invalid')] }).units[0],
|
|
60
|
+
status: row.status,
|
|
61
|
+
attemptCount: row.attempt_count,
|
|
62
|
+
result: row.result_json === null
|
|
63
|
+
? null
|
|
64
|
+
: parseWorkReportResult(parseCanonicalJson(row.result_json, 'Stored Enno work result is invalid')),
|
|
65
|
+
}));
|
|
66
|
+
}
|
|
67
|
+
function assertLedgerIdentity(database, identity, repositoryRoot) {
|
|
68
|
+
const run = new LedgerStore(database).readRun(identity.runId, identity.workspace);
|
|
69
|
+
if (run === undefined)
|
|
70
|
+
throw new KiokukoError('NOT_FOUND', 'Enno run was not found');
|
|
71
|
+
const intake = database.prepare('SELECT session_id AS sessionId FROM run_intakes WHERE run_id = ?')
|
|
72
|
+
.get(identity.runId);
|
|
73
|
+
if (intake?.sessionId !== identity.orchestrationId) {
|
|
74
|
+
throw new KiokukoError('CONFLICT', 'Enno orchestration session does not own this run');
|
|
75
|
+
}
|
|
76
|
+
if (repositoryRoot !== undefined && contractRow(database, identity.runId)?.repository_root !== repositoryRoot) {
|
|
77
|
+
throw new KiokukoError('CONFLICT', 'Enno repository binding changed');
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
export function readEnnoSnapshot(database, identity) {
|
|
81
|
+
assertLedgerIdentity(database, identity);
|
|
82
|
+
const row = contractRow(database, identity.runId);
|
|
83
|
+
if (row === undefined)
|
|
84
|
+
throw new KiokukoError('NOT_FOUND', 'Enno contract was not found');
|
|
85
|
+
validateContractRow(row);
|
|
86
|
+
if (row.workspace !== identity.workspace || row.orchestration_session_id !== identity.orchestrationId) {
|
|
87
|
+
throw new KiokukoError('CONFLICT', 'Enno run identity changed');
|
|
88
|
+
}
|
|
89
|
+
if ((row.client_kind !== null && !ENNO_CLIENT_KINDS.includes(row.client_kind))
|
|
90
|
+
|| ((row.client_version !== null || row.client_session_id !== null) && row.client_kind === null)) {
|
|
91
|
+
integrity('Stored Enno client binding is invalid');
|
|
92
|
+
}
|
|
93
|
+
const contract = parseEnnoContract(parseCanonicalJson(row.contract_json, 'Stored Enno contract is invalid'));
|
|
94
|
+
const handoff = parseEnnoRequestHandoff(parseCanonicalJson(row.handoff_json, 'Stored Enno request handoff is invalid'));
|
|
95
|
+
const ideal = row.ideal_json === null
|
|
96
|
+
? null
|
|
97
|
+
: parseOdunoIdeal(parseCanonicalJson(row.ideal_json, 'Stored Oduno ideal is invalid'));
|
|
98
|
+
const meditation = row.meditation_json === null
|
|
99
|
+
? null
|
|
100
|
+
: parseOdunoMeditation(parseCanonicalJson(row.meditation_json, 'Stored Oduno meditation is invalid'));
|
|
101
|
+
const status = exposedStatus(row);
|
|
102
|
+
if (contract.revision !== row.revision)
|
|
103
|
+
integrity('Stored Enno contract revision is inconsistent');
|
|
104
|
+
if (handoff.taskType !== row.task_type)
|
|
105
|
+
integrity('Stored Enno request handoff is inconsistent');
|
|
106
|
+
if (status === 'oduno_ideal' && ideal !== null)
|
|
107
|
+
integrity('Stored Oduno ideal phase is inconsistent');
|
|
108
|
+
if (status === 'oduno_meditation' && (ideal === null || meditation !== null)) {
|
|
109
|
+
integrity('Stored Oduno meditation phase is inconsistent');
|
|
110
|
+
}
|
|
111
|
+
if (meditation !== null && status !== 'completed')
|
|
112
|
+
integrity('Stored Oduno meditation result is inconsistent');
|
|
113
|
+
return {
|
|
114
|
+
runId: row.run_id,
|
|
115
|
+
workspace: row.workspace,
|
|
116
|
+
orchestrationId: row.orchestration_session_id,
|
|
117
|
+
clientKind: row.client_kind,
|
|
118
|
+
clientVersion: row.client_version,
|
|
119
|
+
clientSessionId: row.client_session_id,
|
|
120
|
+
repositoryRoot: row.repository_root,
|
|
121
|
+
taskType: row.task_type,
|
|
122
|
+
status,
|
|
123
|
+
revision: row.revision,
|
|
124
|
+
confirmationState: row.confirmation_state,
|
|
125
|
+
attempts: row.attempts,
|
|
126
|
+
mutationRevision: row.mutation_revision,
|
|
127
|
+
ideal,
|
|
128
|
+
meditation,
|
|
129
|
+
contract,
|
|
130
|
+
handoff,
|
|
131
|
+
workUnits: workUnits(database, identity.runId, row.revision),
|
|
132
|
+
blocker: row.blocker,
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
function emptyDiscovery(mode) {
|
|
136
|
+
return {
|
|
137
|
+
attempted: false,
|
|
138
|
+
mode,
|
|
139
|
+
requirements: [],
|
|
140
|
+
queries: [],
|
|
141
|
+
cacheHits: 0,
|
|
142
|
+
candidates: 0,
|
|
143
|
+
selected: [],
|
|
144
|
+
failures: [],
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
export function createEnnoDraft(database, input) {
|
|
148
|
+
return withImmediateTransaction(database, () => {
|
|
149
|
+
assertLedgerIdentity(database, input);
|
|
150
|
+
const existing = contractRow(database, input.runId);
|
|
151
|
+
if (existing !== undefined)
|
|
152
|
+
return readEnnoSnapshot(database, input);
|
|
153
|
+
const contract = {
|
|
154
|
+
revision: 1,
|
|
155
|
+
scope: input.taskTarget === null ? [] : [input.taskTarget],
|
|
156
|
+
exclusions: [],
|
|
157
|
+
acceptanceCriteria: input.taskExpected === null ? [] : [{ id: 'task-expected', description: input.taskExpected }],
|
|
158
|
+
workPlan: { objective: input.taskTarget ?? 'Plan the requested task', units: [] },
|
|
159
|
+
skillSet: {
|
|
160
|
+
entries: [],
|
|
161
|
+
intakeDiscovery: input.skillDiscovery,
|
|
162
|
+
zenkiDiscovery: emptyDiscovery(input.skillDiscovery.mode),
|
|
163
|
+
},
|
|
164
|
+
finalVerifiers: [],
|
|
165
|
+
maxAttempts: ENNO_DEFAULT_MAX_ATTEMPTS,
|
|
166
|
+
provenance: {
|
|
167
|
+
scope: 'inferred',
|
|
168
|
+
exclusions: 'inferred',
|
|
169
|
+
acceptanceCriteria: 'inferred',
|
|
170
|
+
workPlan: 'inferred',
|
|
171
|
+
skillSet: 'inferred',
|
|
172
|
+
finalVerifiers: 'inferred',
|
|
173
|
+
maxAttempts: 'inferred',
|
|
174
|
+
},
|
|
175
|
+
};
|
|
176
|
+
const recognizedClientKind = typeof input.initialClientKind === 'string'
|
|
177
|
+
&& ENNO_CLIENT_KINDS.includes(input.initialClientKind)
|
|
178
|
+
? input.initialClientKind
|
|
179
|
+
: null;
|
|
180
|
+
const clientVersion = recognizedClientKind === null ? null : input.initialClientVersion ?? null;
|
|
181
|
+
const clientSessionId = recognizedClientKind === null ? null : input.initialClientSessionId ?? null;
|
|
182
|
+
const now = new Date().toISOString();
|
|
183
|
+
database.prepare(`
|
|
184
|
+
INSERT INTO enno_contracts (
|
|
185
|
+
run_id, workspace, orchestration_session_id, client_kind, client_version, client_session_id,
|
|
186
|
+
repository_root, task_type, status, revision,
|
|
187
|
+
confirmation_state, attempts, mutation_revision, contract_json, handoff_json,
|
|
188
|
+
intake_discovery_json, plan_digest, blocker, created_at, updated_at
|
|
189
|
+
, phase, ideal_json, meditation_json
|
|
190
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, 'zenki_planning', 1, 'not_required', 0, 0, ?, ?, ?, NULL, NULL, ?, ?, 'oduno_ideal', NULL, NULL)
|
|
191
|
+
`).run(input.runId, input.workspace, input.orchestrationId, recognizedClientKind, clientVersion, clientSessionId, input.repositoryRoot, input.taskType, canonicalJson(contract), canonicalJson(input.handoff), canonicalJson(input.skillDiscovery), now, now);
|
|
192
|
+
appendEnnoEventInTransaction(database, input.runId, 'enno.started', 'enno-oduno', 'started', {
|
|
193
|
+
contractRevision: 1,
|
|
194
|
+
harnessKind: recognizedClientKind,
|
|
195
|
+
clientBinding: clientSessionId === null ? 'pending' : 'bound',
|
|
196
|
+
});
|
|
197
|
+
return readEnnoSnapshot(database, input);
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
export function appendEnnoEventInTransaction(database, runId, eventType, actor, outcome, payload) {
|
|
201
|
+
new LedgerStore(database).appendBatchInTransaction(runId, { events: [{
|
|
202
|
+
eventId: randomUUID(),
|
|
203
|
+
eventType,
|
|
204
|
+
actor,
|
|
205
|
+
outcome,
|
|
206
|
+
payload,
|
|
207
|
+
}] });
|
|
208
|
+
}
|
|
209
|
+
export function updateContractInTransaction(database, snapshot, input) {
|
|
210
|
+
const nextState = persistedState(input.status);
|
|
211
|
+
const currentState = persistedState(snapshot.status);
|
|
212
|
+
const updated = database.prepare(`
|
|
213
|
+
UPDATE enno_contracts
|
|
214
|
+
SET status = ?, phase = ?, revision = ?, confirmation_state = ?, attempts = ?, mutation_revision = ?,
|
|
215
|
+
contract_json = ?, ideal_json = ?, meditation_json = ?, plan_digest = ?, blocker = ?, updated_at = ?
|
|
216
|
+
WHERE run_id = ? AND workspace = ? AND orchestration_session_id = ? AND revision = ?
|
|
217
|
+
AND status = ? AND phase IS ?
|
|
218
|
+
RETURNING run_id AS runId
|
|
219
|
+
`).get(nextState.status, nextState.phase, input.contract.revision, input.confirmationState, input.attempts ?? snapshot.attempts, input.mutationRevision ?? snapshot.mutationRevision, canonicalJson(input.contract), input.ideal === undefined
|
|
220
|
+
? snapshot.ideal === null ? null : canonicalJson(snapshot.ideal)
|
|
221
|
+
: input.ideal === null ? null : canonicalJson(input.ideal), input.meditation === undefined
|
|
222
|
+
? snapshot.meditation === null ? null : canonicalJson(snapshot.meditation)
|
|
223
|
+
: input.meditation === null ? null : canonicalJson(input.meditation), input.planDigest ?? null, input.blocker ?? null, new Date().toISOString(), snapshot.runId, snapshot.workspace, snapshot.orchestrationId, snapshot.revision, currentState.status, currentState.phase);
|
|
224
|
+
if (updated?.runId !== snapshot.runId)
|
|
225
|
+
throw new KiokukoError('CONFLICT', 'Enno state changed concurrently');
|
|
226
|
+
}
|
|
227
|
+
export function replaceWorkUnitsInTransaction(database, runId, revision, workPlan) {
|
|
228
|
+
database.prepare('DELETE FROM enno_work_units WHERE run_id = ? AND contract_revision = ?').run(runId, revision);
|
|
229
|
+
const statement = database.prepare(`
|
|
230
|
+
INSERT INTO enno_work_units (
|
|
231
|
+
run_id, work_unit_id, contract_revision, order_index, work_unit_json,
|
|
232
|
+
status, attempt_count, result_json, created_at, updated_at
|
|
233
|
+
) VALUES (?, ?, ?, ?, ?, 'pending', 0, NULL, ?, ?)
|
|
234
|
+
`);
|
|
235
|
+
const now = new Date().toISOString();
|
|
236
|
+
workPlan.units.forEach((unit, index) => {
|
|
237
|
+
statement.run(runId, unit.id, revision, index, canonicalJson(unit), now, now);
|
|
238
|
+
});
|
|
239
|
+
}
|
|
240
|
+
export function setWorkUnitStatusInTransaction(database, input) {
|
|
241
|
+
const from = Array.isArray(input.from) ? input.from : [input.from];
|
|
242
|
+
const placeholders = from.map(() => '?').join(', ');
|
|
243
|
+
const updated = database.prepare(`
|
|
244
|
+
UPDATE enno_work_units
|
|
245
|
+
SET status = ?,
|
|
246
|
+
attempt_count = COALESCE(?, attempt_count),
|
|
247
|
+
result_json = ?,
|
|
248
|
+
updated_at = ?
|
|
249
|
+
WHERE run_id = ? AND contract_revision = ? AND work_unit_id = ? AND status IN (${placeholders})
|
|
250
|
+
RETURNING work_unit_id AS workUnitId
|
|
251
|
+
`).get(input.to, input.attemptCount ?? null, input.result === undefined || input.result === null ? null : canonicalJson(input.result), new Date().toISOString(), input.runId, input.contractRevision, input.workUnitId, ...from);
|
|
252
|
+
if (updated?.workUnitId !== input.workUnitId)
|
|
253
|
+
throw new KiokukoError('CONFLICT', 'Enno WorkUnit changed concurrently');
|
|
254
|
+
}
|
|
255
|
+
export function startVerifierRunsInTransaction(database, input) {
|
|
256
|
+
const statement = database.prepare(`
|
|
257
|
+
INSERT INTO enno_verifier_runs (
|
|
258
|
+
verifier_run_id, run_id, work_unit_id, contract_revision, mutation_revision,
|
|
259
|
+
verifier_id, verifier_json, status, started_at
|
|
260
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, 'started', ?)
|
|
261
|
+
`);
|
|
262
|
+
const now = new Date().toISOString();
|
|
263
|
+
return input.verifiers.map((verifier) => {
|
|
264
|
+
const verifierRunId = randomUUID();
|
|
265
|
+
statement.run(verifierRunId, input.runId, input.workUnitId, input.revision, input.mutationRevision, verifier.id, canonicalJson(verifier), now);
|
|
266
|
+
return verifierRunId;
|
|
267
|
+
});
|
|
268
|
+
}
|
|
269
|
+
export function finishVerifierRunsInTransaction(database, verifierRunIds, results) {
|
|
270
|
+
if (verifierRunIds.length !== results.length)
|
|
271
|
+
integrity('Enno verifier result count is inconsistent');
|
|
272
|
+
const finishedAt = new Date().toISOString();
|
|
273
|
+
results.forEach((result, index) => {
|
|
274
|
+
const verifierRunId = verifierRunIds[index];
|
|
275
|
+
if (verifierRunId === undefined)
|
|
276
|
+
integrity('Enno verifier result count is inconsistent');
|
|
277
|
+
const updated = database.prepare(`
|
|
278
|
+
UPDATE enno_verifier_runs
|
|
279
|
+
SET status = ?, exit_code = ?, signal = ?, duration_ms = ?,
|
|
280
|
+
stdout_preview = ?, stderr_preview = ?, stdout_digest = ?, stderr_digest = ?, finished_at = ?
|
|
281
|
+
WHERE verifier_run_id = ? AND status = 'started'
|
|
282
|
+
RETURNING verifier_run_id AS verifierRunId
|
|
283
|
+
`).get(result.status, result.exitCode, result.signal, result.durationMs, result.stdoutPreview, result.stderrPreview, result.stdoutDigest, result.stderrDigest, finishedAt, verifierRunId);
|
|
284
|
+
if (updated?.verifierRunId !== verifierRunId)
|
|
285
|
+
throw new KiokukoError('CONFLICT', 'Enno verifier state changed concurrently');
|
|
286
|
+
});
|
|
287
|
+
}
|
|
288
|
+
export function readOperationReceipt(database, runId, operation) {
|
|
289
|
+
const row = database.prepare(`
|
|
290
|
+
SELECT request_digest, state, response_json
|
|
291
|
+
FROM enno_operation_receipts
|
|
292
|
+
WHERE run_id = ? AND operation = ? AND idempotency_key = ?
|
|
293
|
+
`).get(runId, operation.operation, operation.idempotencyKey);
|
|
294
|
+
if (row === undefined)
|
|
295
|
+
return undefined;
|
|
296
|
+
if (row.request_digest !== operation.requestDigest) {
|
|
297
|
+
throw new KiokukoError('CONFLICT', 'Enno idempotency key was reused with different input');
|
|
298
|
+
}
|
|
299
|
+
if (row.state === 'started')
|
|
300
|
+
throw new KiokukoError('CONFLICT', 'Enno operation is already in progress');
|
|
301
|
+
if (row.response_json === null)
|
|
302
|
+
integrity('Stored Enno operation receipt is invalid');
|
|
303
|
+
return parseCanonicalJson(row.response_json, 'Stored Enno operation receipt is invalid');
|
|
304
|
+
}
|
|
305
|
+
export function startOperationInTransaction(database, runId, operation) {
|
|
306
|
+
const replay = readOperationReceipt(database, runId, operation);
|
|
307
|
+
if (replay !== undefined)
|
|
308
|
+
throw new KiokukoError('CONFLICT', 'Completed Enno operation must be replayed before mutation');
|
|
309
|
+
const active = database.prepare(`
|
|
310
|
+
SELECT operation FROM enno_operation_receipts
|
|
311
|
+
WHERE run_id = ? AND state = 'started'
|
|
312
|
+
LIMIT 1
|
|
313
|
+
`).get(runId);
|
|
314
|
+
if (active !== undefined)
|
|
315
|
+
throw new KiokukoError('CONFLICT', 'Another Enno operation is already in progress');
|
|
316
|
+
database.prepare(`
|
|
317
|
+
INSERT INTO enno_operation_receipts (
|
|
318
|
+
run_id, operation, idempotency_key, request_digest, state, response_json, created_at, finished_at
|
|
319
|
+
) VALUES (?, ?, ?, ?, 'started', NULL, ?, NULL)
|
|
320
|
+
`).run(runId, operation.operation, operation.idempotencyKey, operation.requestDigest, new Date().toISOString());
|
|
321
|
+
}
|
|
322
|
+
export function completeOperationInTransaction(database, runId, operation, response) {
|
|
323
|
+
const serialized = canonicalJson(response);
|
|
324
|
+
const updated = database.prepare(`
|
|
325
|
+
UPDATE enno_operation_receipts
|
|
326
|
+
SET state = 'completed', response_json = ?, finished_at = ?
|
|
327
|
+
WHERE run_id = ? AND operation = ? AND idempotency_key = ?
|
|
328
|
+
AND request_digest = ? AND state = 'started'
|
|
329
|
+
RETURNING run_id AS runId
|
|
330
|
+
`).get(serialized, new Date().toISOString(), runId, operation.operation, operation.idempotencyKey, operation.requestDigest);
|
|
331
|
+
if (updated?.runId !== runId)
|
|
332
|
+
throw new KiokukoError('CONFLICT', 'Enno operation receipt changed concurrently');
|
|
333
|
+
}
|
|
334
|
+
export function terminalizeLedgerRunInTransaction(database, runId, status) {
|
|
335
|
+
new LedgerStore(database).updateRunStatusInTransaction(runId, status);
|
|
336
|
+
}
|
|
337
|
+
//# sourceMappingURL=store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/enno-oduno/store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
import type { SkillDiscoverySummary } from '../skills/types.js';
|
|
2
|
+
export declare const ENNO_STATUSES: readonly ["intake", "oduno_ideal", "zenki_planning", "needs_confirmation", "goki_executing", "enno_verifying", "oduno_meditation", "completed", "blocked", "cancelled"];
|
|
3
|
+
export type EnnoStatus = (typeof ENNO_STATUSES)[number];
|
|
4
|
+
export declare const ENNO_ROLES: readonly ["enno-oduno", "zenki", "goki"];
|
|
5
|
+
export type EnnoRole = (typeof ENNO_ROLES)[number];
|
|
6
|
+
export declare const ENNO_CLIENT_KINDS: readonly ["codex", "claude", "opencode"];
|
|
7
|
+
export type EnnoClientKind = (typeof ENNO_CLIENT_KINDS)[number];
|
|
8
|
+
export declare const ENNO_NEXT_ACTIONS: readonly ["answer_intake", "submit_ideal", "submit_plan", "ask_user_confirmation", "execute_work_unit", "run_final_verification", "submit_meditation", "report_blocker", "complete"];
|
|
9
|
+
export type EnnoNextAction = (typeof ENNO_NEXT_ACTIONS)[number];
|
|
10
|
+
export declare const ENNO_APPLICABLE_TASK_TYPES: readonly ["build", "debug", "review", "devops"];
|
|
11
|
+
export declare const ENNO_DEFAULT_MAX_ATTEMPTS = 8;
|
|
12
|
+
export declare const ENNO_MIN_ATTEMPTS = 1;
|
|
13
|
+
export declare const ENNO_MAX_ATTEMPTS = 20;
|
|
14
|
+
export declare const ENNO_MAX_TOTAL_SKILL_QUERIES = 3;
|
|
15
|
+
export declare const ENNO_MAX_EXTERNAL_SKILLS = 2;
|
|
16
|
+
export type SkillPurpose = 'planning' | 'implementation' | 'ui' | 'testing' | 'review' | 'operations';
|
|
17
|
+
export type ContractProvenance = 'explicit_user' | 'repository_evidence' | 'inferred';
|
|
18
|
+
export declare const ENNO_PROVENANCE_KEYS: readonly ["scope", "exclusions", "acceptanceCriteria", "workPlan", "skillSet", "finalVerifiers", "maxAttempts"];
|
|
19
|
+
export type EnnoProvenanceKey = (typeof ENNO_PROVENANCE_KEYS)[number];
|
|
20
|
+
export interface AcceptanceCriterion {
|
|
21
|
+
id: string;
|
|
22
|
+
description: string;
|
|
23
|
+
}
|
|
24
|
+
export interface VerifierSpec {
|
|
25
|
+
id: string;
|
|
26
|
+
kind: 'test' | 'typecheck' | 'build' | 'lint' | 'custom';
|
|
27
|
+
executable: string;
|
|
28
|
+
args: string[];
|
|
29
|
+
cwd: string;
|
|
30
|
+
timeoutMs: number;
|
|
31
|
+
}
|
|
32
|
+
export interface ExpertRef {
|
|
33
|
+
id: string;
|
|
34
|
+
reason: string;
|
|
35
|
+
}
|
|
36
|
+
export interface WorkUnit {
|
|
37
|
+
id: string;
|
|
38
|
+
objective: string;
|
|
39
|
+
scope: string[];
|
|
40
|
+
dependencies: string[];
|
|
41
|
+
skillNames: string[];
|
|
42
|
+
expertRefs: ExpertRef[];
|
|
43
|
+
acceptanceCriteria: string[];
|
|
44
|
+
focusedVerifiers: VerifierSpec[];
|
|
45
|
+
}
|
|
46
|
+
export interface WorkPlan {
|
|
47
|
+
objective: string;
|
|
48
|
+
units: WorkUnit[];
|
|
49
|
+
}
|
|
50
|
+
export interface SkillSetEntry {
|
|
51
|
+
name: string;
|
|
52
|
+
purposes: SkillPurpose[];
|
|
53
|
+
required: boolean;
|
|
54
|
+
availability: 'local' | 'imported_fresh' | 'external_reference' | 'unavailable';
|
|
55
|
+
referenceId: string | null;
|
|
56
|
+
}
|
|
57
|
+
export interface SkillSetSnapshot {
|
|
58
|
+
entries: SkillSetEntry[];
|
|
59
|
+
intakeDiscovery: SkillDiscoverySummary;
|
|
60
|
+
zenkiDiscovery: SkillDiscoverySummary;
|
|
61
|
+
}
|
|
62
|
+
export interface EnnoOdunoContract {
|
|
63
|
+
revision: number;
|
|
64
|
+
scope: string[];
|
|
65
|
+
exclusions: string[];
|
|
66
|
+
acceptanceCriteria: AcceptanceCriterion[];
|
|
67
|
+
workPlan: WorkPlan;
|
|
68
|
+
skillSet: SkillSetSnapshot;
|
|
69
|
+
finalVerifiers: VerifierSpec[];
|
|
70
|
+
maxAttempts: number;
|
|
71
|
+
provenance: Record<EnnoProvenanceKey, ContractProvenance>;
|
|
72
|
+
}
|
|
73
|
+
export interface OdunoIdealSkillContribution {
|
|
74
|
+
skillName: string;
|
|
75
|
+
contribution: string;
|
|
76
|
+
}
|
|
77
|
+
export interface OdunoIdeal {
|
|
78
|
+
objective: string;
|
|
79
|
+
principles: string[];
|
|
80
|
+
skillContributions: OdunoIdealSkillContribution[];
|
|
81
|
+
successSignals: string[];
|
|
82
|
+
}
|
|
83
|
+
export interface OdunoDeletionCandidate {
|
|
84
|
+
kind: 'test' | 'function';
|
|
85
|
+
path: string;
|
|
86
|
+
name: string;
|
|
87
|
+
reason: string;
|
|
88
|
+
evidence: string[];
|
|
89
|
+
}
|
|
90
|
+
export interface OdunoMeditation {
|
|
91
|
+
summary: string;
|
|
92
|
+
inspectedPaths: string[];
|
|
93
|
+
deletionCandidates: OdunoDeletionCandidate[];
|
|
94
|
+
}
|
|
95
|
+
export interface EnnoRequestHandoff {
|
|
96
|
+
sourceRole: 'enno-oduno';
|
|
97
|
+
taskType: (typeof ENNO_APPLICABLE_TASK_TYPES)[number];
|
|
98
|
+
objective: string;
|
|
99
|
+
target: string | null;
|
|
100
|
+
expected: string | null;
|
|
101
|
+
constraints: string[];
|
|
102
|
+
verification: string[];
|
|
103
|
+
stopConditions: string[];
|
|
104
|
+
}
|
|
105
|
+
export interface EnnoHarnessDirective {
|
|
106
|
+
kind: EnnoClientKind | null;
|
|
107
|
+
version: string | null;
|
|
108
|
+
continuation: 'stop_hook' | 'session_idle_plugin' | 'unidentified';
|
|
109
|
+
instructions: string[];
|
|
110
|
+
}
|
|
111
|
+
export interface RoleDirective {
|
|
112
|
+
protocolVersion: 1;
|
|
113
|
+
runId: string;
|
|
114
|
+
contractRevision: number | null;
|
|
115
|
+
role: EnnoRole;
|
|
116
|
+
harness: EnnoHarnessDirective;
|
|
117
|
+
handoff: EnnoRequestHandoff | null;
|
|
118
|
+
objective: string;
|
|
119
|
+
requiredSkills: string[];
|
|
120
|
+
workUnit: WorkUnit | null;
|
|
121
|
+
stopConditions: string[];
|
|
122
|
+
reportSchema: Record<string, unknown>;
|
|
123
|
+
}
|
|
124
|
+
export interface EnnoOdunoState {
|
|
125
|
+
applicable: boolean;
|
|
126
|
+
status: EnnoStatus;
|
|
127
|
+
orchestrationId: string | null;
|
|
128
|
+
clientBinding: {
|
|
129
|
+
status: 'pending' | 'bound';
|
|
130
|
+
clientKind: EnnoClientKind | null;
|
|
131
|
+
clientVersion: string | null;
|
|
132
|
+
identified: boolean;
|
|
133
|
+
} | null;
|
|
134
|
+
contractRevision: number | null;
|
|
135
|
+
ideal: OdunoIdeal | null;
|
|
136
|
+
meditation: OdunoMeditation | null;
|
|
137
|
+
currentRole: EnnoRole | null;
|
|
138
|
+
directive: RoleDirective | null;
|
|
139
|
+
nextAction: EnnoNextAction;
|
|
140
|
+
}
|
|
141
|
+
export type WorkUnitStatus = 'pending' | 'in_progress' | 'completed' | 'failed' | 'blocked';
|
|
142
|
+
export interface StoredWorkUnit {
|
|
143
|
+
workUnit: WorkUnit;
|
|
144
|
+
status: WorkUnitStatus;
|
|
145
|
+
attemptCount: number;
|
|
146
|
+
result: WorkReportResult | null;
|
|
147
|
+
}
|
|
148
|
+
export interface WorkReportResult {
|
|
149
|
+
outcome: 'completed' | 'failed' | 'blocked';
|
|
150
|
+
summary: string;
|
|
151
|
+
mutated: boolean;
|
|
152
|
+
changedPaths: string[];
|
|
153
|
+
}
|
|
154
|
+
export interface EnnoFinalReview {
|
|
155
|
+
decision: 'accept' | 'replan';
|
|
156
|
+
summary: string;
|
|
157
|
+
}
|
|
158
|
+
export type VerifierRunStatus = 'started' | 'passed' | 'failed' | 'timeout' | 'spawn_failed';
|
|
159
|
+
export interface VerifierRunResult {
|
|
160
|
+
verifier: VerifierSpec;
|
|
161
|
+
status: Exclude<VerifierRunStatus, 'started'>;
|
|
162
|
+
exitCode: number | null;
|
|
163
|
+
signal: string | null;
|
|
164
|
+
durationMs: number;
|
|
165
|
+
stdoutPreview: string;
|
|
166
|
+
stderrPreview: string;
|
|
167
|
+
stdoutDigest: string;
|
|
168
|
+
stderrDigest: string;
|
|
169
|
+
}
|
|
170
|
+
export interface EnnoRunSnapshot {
|
|
171
|
+
runId: string;
|
|
172
|
+
workspace: string;
|
|
173
|
+
orchestrationId: string;
|
|
174
|
+
clientKind: EnnoClientKind | null;
|
|
175
|
+
clientVersion: string | null;
|
|
176
|
+
clientSessionId: string | null;
|
|
177
|
+
repositoryRoot: string;
|
|
178
|
+
taskType: (typeof ENNO_APPLICABLE_TASK_TYPES)[number];
|
|
179
|
+
status: EnnoStatus;
|
|
180
|
+
revision: number;
|
|
181
|
+
confirmationState: 'not_required' | 'pending' | 'approved' | 'revision_requested' | 'cancelled';
|
|
182
|
+
attempts: number;
|
|
183
|
+
mutationRevision: number;
|
|
184
|
+
ideal: OdunoIdeal | null;
|
|
185
|
+
meditation: OdunoMeditation | null;
|
|
186
|
+
contract: EnnoOdunoContract;
|
|
187
|
+
handoff: EnnoRequestHandoff;
|
|
188
|
+
workUnits: StoredWorkUnit[];
|
|
189
|
+
blocker: string | null;
|
|
190
|
+
}
|
|
191
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/enno-oduno/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
export const ENNO_STATUSES = [
|
|
2
|
+
'intake',
|
|
3
|
+
'oduno_ideal',
|
|
4
|
+
'zenki_planning',
|
|
5
|
+
'needs_confirmation',
|
|
6
|
+
'goki_executing',
|
|
7
|
+
'enno_verifying',
|
|
8
|
+
'oduno_meditation',
|
|
9
|
+
'completed',
|
|
10
|
+
'blocked',
|
|
11
|
+
'cancelled',
|
|
12
|
+
];
|
|
13
|
+
export const ENNO_ROLES = ['enno-oduno', 'zenki', 'goki'];
|
|
14
|
+
export const ENNO_CLIENT_KINDS = ['codex', 'claude', 'opencode'];
|
|
15
|
+
export const ENNO_NEXT_ACTIONS = [
|
|
16
|
+
'answer_intake',
|
|
17
|
+
'submit_ideal',
|
|
18
|
+
'submit_plan',
|
|
19
|
+
'ask_user_confirmation',
|
|
20
|
+
'execute_work_unit',
|
|
21
|
+
'run_final_verification',
|
|
22
|
+
'submit_meditation',
|
|
23
|
+
'report_blocker',
|
|
24
|
+
'complete',
|
|
25
|
+
];
|
|
26
|
+
export const ENNO_APPLICABLE_TASK_TYPES = ['build', 'debug', 'review', 'devops'];
|
|
27
|
+
export const ENNO_DEFAULT_MAX_ATTEMPTS = 8;
|
|
28
|
+
export const ENNO_MIN_ATTEMPTS = 1;
|
|
29
|
+
export const ENNO_MAX_ATTEMPTS = 20;
|
|
30
|
+
export const ENNO_MAX_TOTAL_SKILL_QUERIES = 3;
|
|
31
|
+
export const ENNO_MAX_EXTERNAL_SKILLS = 2;
|
|
32
|
+
export const ENNO_PROVENANCE_KEYS = [
|
|
33
|
+
'scope',
|
|
34
|
+
'exclusions',
|
|
35
|
+
'acceptanceCriteria',
|
|
36
|
+
'workPlan',
|
|
37
|
+
'skillSet',
|
|
38
|
+
'finalVerifiers',
|
|
39
|
+
'maxAttempts',
|
|
40
|
+
];
|
|
41
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/enno-oduno/types.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,QAAQ;IACR,aAAa;IACb,gBAAgB;IAChB,oBAAoB;IACpB,gBAAgB;IAChB,gBAAgB;IAChB,kBAAkB;IAClB,WAAW;IACX,SAAS;IACT,WAAW;CACH,CAAC;AAGX,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,YAAY,EAAE,OAAO,EAAE,MAAM,CAAU,CAAC;AAGnE,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,UAAU,CAAU,CAAC;AAG1E,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,eAAe;IACf,cAAc;IACd,aAAa;IACb,uBAAuB;IACvB,mBAAmB;IACnB,wBAAwB;IACxB,mBAAmB;IACnB,gBAAgB;IAChB,UAAU;CACF,CAAC;AAGX,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAU,CAAC;AAC1F,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC;AAC3C,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC;AACnC,MAAM,CAAC,MAAM,iBAAiB,GAAG,EAAE,CAAC;AACpC,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,CAAC;AAC9C,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC;AAI1C,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,OAAO;IACP,YAAY;IACZ,oBAAoB;IACpB,UAAU;IACV,UAAU;IACV,gBAAgB;IAChB,aAAa;CACL,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { spawn } from 'node:child_process';
|
|
2
|
+
import type { VerifierRunResult, VerifierSpec } from './types.js';
|
|
3
|
+
export interface VerifierDependencies {
|
|
4
|
+
spawn?: typeof spawn;
|
|
5
|
+
now?: () => number;
|
|
6
|
+
}
|
|
7
|
+
export declare function runVerifier(rawVerifier: VerifierSpec, repositoryRoot: string, dependencies?: VerifierDependencies): Promise<VerifierRunResult>;
|
|
8
|
+
export declare function runVerifiers(verifiers: readonly VerifierSpec[], repositoryRoot: string, dependencies?: VerifierDependencies): Promise<VerifierRunResult[]>;
|
|
9
|
+
//# sourceMappingURL=verifier.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verifier.d.ts","sourceRoot":"","sources":["../../src/enno-oduno/verifier.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAA4B,MAAM,oBAAoB,CAAC;AAKrE,OAAO,KAAK,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAIlE,MAAM,WAAW,oBAAoB;IACnC,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACpB;AAWD,wBAAsB,WAAW,CAC/B,WAAW,EAAE,YAAY,EACzB,cAAc,EAAE,MAAM,EACtB,YAAY,GAAE,oBAAyB,GACtC,OAAO,CAAC,iBAAiB,CAAC,CA+E5B;AAED,wBAAsB,YAAY,CAChC,SAAS,EAAE,SAAS,YAAY,EAAE,EAClC,cAAc,EAAE,MAAM,EACtB,YAAY,GAAE,oBAAyB,GACtC,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAI9B"}
|