@zelari/core 1.48.1 → 2.0.0-alpha.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (117) hide show
  1. package/dist/agents/promptModules.d.ts +9 -0
  2. package/dist/agents/promptModules.d.ts.map +1 -1
  3. package/dist/agents/promptModules.js +34 -0
  4. package/dist/agents/promptModules.js.map +1 -1
  5. package/dist/experimental.d.ts +17 -0
  6. package/dist/experimental.d.ts.map +1 -0
  7. package/dist/experimental.js +31 -0
  8. package/dist/experimental.js.map +1 -0
  9. package/dist/index.d.ts +5 -0
  10. package/dist/index.d.ts.map +1 -1
  11. package/dist/index.js +10 -0
  12. package/dist/index.js.map +1 -1
  13. package/dist/mission/index.d.ts +5 -0
  14. package/dist/mission/index.d.ts.map +1 -0
  15. package/dist/mission/index.js +5 -0
  16. package/dist/mission/index.js.map +1 -0
  17. package/dist/mission/missionState.d.ts +37 -0
  18. package/dist/mission/missionState.d.ts.map +1 -0
  19. package/dist/mission/missionState.js +61 -0
  20. package/dist/mission/missionState.js.map +1 -0
  21. package/dist/runtime/executionContext.d.ts +46 -0
  22. package/dist/runtime/executionContext.d.ts.map +1 -0
  23. package/dist/runtime/executionContext.js +63 -0
  24. package/dist/runtime/executionContext.js.map +1 -0
  25. package/dist/runtime/index.d.ts +10 -0
  26. package/dist/runtime/index.d.ts.map +1 -0
  27. package/dist/runtime/index.js +10 -0
  28. package/dist/runtime/index.js.map +1 -0
  29. package/dist/runtime/memoryProviders.d.ts +27 -0
  30. package/dist/runtime/memoryProviders.d.ts.map +1 -0
  31. package/dist/runtime/memoryProviders.js +64 -0
  32. package/dist/runtime/memoryProviders.js.map +1 -0
  33. package/dist/runtime/nodeProviders.d.ts +21 -0
  34. package/dist/runtime/nodeProviders.d.ts.map +1 -0
  35. package/dist/runtime/nodeProviders.js +138 -0
  36. package/dist/runtime/nodeProviders.js.map +1 -0
  37. package/dist/runtime/profiles.d.ts +44 -0
  38. package/dist/runtime/profiles.d.ts.map +1 -0
  39. package/dist/runtime/profiles.js +91 -0
  40. package/dist/runtime/profiles.js.map +1 -0
  41. package/dist/runtime/providers.d.ts +85 -0
  42. package/dist/runtime/providers.d.ts.map +1 -0
  43. package/dist/runtime/providers.js +58 -0
  44. package/dist/runtime/providers.js.map +1 -0
  45. package/dist/runtime/worktreeWorkspace.d.ts +38 -0
  46. package/dist/runtime/worktreeWorkspace.d.ts.map +1 -0
  47. package/dist/runtime/worktreeWorkspace.js +80 -0
  48. package/dist/runtime/worktreeWorkspace.js.map +1 -0
  49. package/dist/session/exportSession.d.ts +31 -0
  50. package/dist/session/exportSession.d.ts.map +1 -0
  51. package/dist/session/exportSession.js +37 -0
  52. package/dist/session/exportSession.js.map +1 -0
  53. package/dist/session/index.d.ts +15 -0
  54. package/dist/session/index.d.ts.map +1 -0
  55. package/dist/session/index.js +15 -0
  56. package/dist/session/index.js.map +1 -0
  57. package/dist/session/lineage.d.ts +38 -0
  58. package/dist/session/lineage.d.ts.map +1 -0
  59. package/dist/session/lineage.js +69 -0
  60. package/dist/session/lineage.js.map +1 -0
  61. package/dist/session/modelSurface.d.ts +43 -0
  62. package/dist/session/modelSurface.d.ts.map +1 -0
  63. package/dist/session/modelSurface.js +96 -0
  64. package/dist/session/modelSurface.js.map +1 -0
  65. package/dist/session/replay.d.ts +61 -0
  66. package/dist/session/replay.d.ts.map +1 -0
  67. package/dist/session/replay.js +137 -0
  68. package/dist/session/replay.js.map +1 -0
  69. package/dist/session/store.d.ts +60 -0
  70. package/dist/session/store.d.ts.map +1 -0
  71. package/dist/session/store.js +117 -0
  72. package/dist/session/store.js.map +1 -0
  73. package/dist/session/types.d.ts +85 -0
  74. package/dist/session/types.d.ts.map +1 -0
  75. package/dist/session/types.js +62 -0
  76. package/dist/session/types.js.map +1 -0
  77. package/dist/session/writer.d.ts +44 -0
  78. package/dist/session/writer.d.ts.map +1 -0
  79. package/dist/session/writer.js +114 -0
  80. package/dist/session/writer.js.map +1 -0
  81. package/dist/shared/events.d.ts +76 -2
  82. package/dist/shared/events.d.ts.map +1 -1
  83. package/dist/shared/events.js +6 -0
  84. package/dist/shared/events.js.map +1 -1
  85. package/dist/skills/index.d.ts +2 -2
  86. package/dist/skills/index.d.ts.map +1 -1
  87. package/dist/skills/index.js +1 -1
  88. package/dist/skills/index.js.map +1 -1
  89. package/dist/verification/completionPolicy.d.ts +33 -0
  90. package/dist/verification/completionPolicy.d.ts.map +1 -0
  91. package/dist/verification/completionPolicy.js +68 -0
  92. package/dist/verification/completionPolicy.js.map +1 -0
  93. package/dist/verification/criteriaPack.v1.d.ts +27 -0
  94. package/dist/verification/criteriaPack.v1.d.ts.map +1 -0
  95. package/dist/verification/criteriaPack.v1.js +58 -0
  96. package/dist/verification/criteriaPack.v1.js.map +1 -0
  97. package/dist/verification/engine.d.ts +38 -0
  98. package/dist/verification/engine.d.ts.map +1 -0
  99. package/dist/verification/engine.js +163 -0
  100. package/dist/verification/engine.js.map +1 -0
  101. package/dist/verification/index.d.ts +11 -0
  102. package/dist/verification/index.d.ts.map +1 -0
  103. package/dist/verification/index.js +11 -0
  104. package/dist/verification/index.js.map +1 -0
  105. package/dist/verification/metrics.d.ts +26 -0
  106. package/dist/verification/metrics.d.ts.map +1 -0
  107. package/dist/verification/metrics.js +29 -0
  108. package/dist/verification/metrics.js.map +1 -0
  109. package/dist/verification/types.d.ts +161 -0
  110. package/dist/verification/types.d.ts.map +1 -0
  111. package/dist/verification/types.js +92 -0
  112. package/dist/verification/types.js.map +1 -0
  113. package/dist/verification/verifier.d.ts +133 -0
  114. package/dist/verification/verifier.d.ts.map +1 -0
  115. package/dist/verification/verifier.js +215 -0
  116. package/dist/verification/verifier.js.map +1 -0
  117. package/package.json +17 -1
@@ -8,7 +8,7 @@ export * from '../agents/toolSchemas.js';
8
8
  export * from '../agents/advancedTools.js';
9
9
  export * from '../agents/vaultTools.js';
10
10
  export { cliToolToEnhanced } from '../agents/harnessToolBridge.js';
11
- export { KRAKEN_IDENTITY_MODULE, KRAKEN_LEAD_PLAYBOOK_MODULE, SINGLE_AGENT_IDENTITY_MODULE, getBasePromptModules, CODING_PRACTICES_MODULE, NATIVE_TOOL_PROTOCOL_MODULE, CLARIFICATION_PROTOCOL_MODULE, } from '../agents/promptModules.js';
11
+ export { KRAKEN_IDENTITY_MODULE, KRAKEN_LEAD_PLAYBOOK_MODULE, KRAKEN_SELECTION_PLAYBOOK_MODULE, SINGLE_AGENT_IDENTITY_MODULE, getBasePromptModules, CODING_PRACTICES_MODULE, NATIVE_TOOL_PROTOCOL_MODULE, CLARIFICATION_PROTOCOL_MODULE, } from '../agents/promptModules.js';
12
12
  export { buildSystemPrompt, buildSystemPromptSplit, systemMessagesFromSplit, } from '../agents/systemPromptBuilder.js';
13
13
  export { detectResponseLanguage, resolveResponseLanguage, buildLanguageDirective, buildLanguagePolicyModule, buildLanguagePolicyModuleFor, LANGUAGE_POLICY_MODULE_TYPE, } from '../agents/languagePolicy.js';
14
14
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/skills/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC;AACzC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,yBAAyB,CAAC;AACxC,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAEnE,OAAO,EACL,sBAAsB,EACtB,2BAA2B,EAC3B,4BAA4B,EAC5B,oBAAoB,EACpB,uBAAuB,EACvB,2BAA2B,EAC3B,6BAA6B,GAC9B,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EACL,iBAAiB,EACjB,sBAAsB,EACtB,uBAAuB,GACxB,MAAM,kCAAkC,CAAC;AAE1C,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EACvB,sBAAsB,EACtB,yBAAyB,EACzB,4BAA4B,EAC5B,2BAA2B,GAC5B,MAAM,6BAA6B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/skills/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC;AACzC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,yBAAyB,CAAC;AACxC,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAEnE,OAAO,EACL,sBAAsB,EACtB,2BAA2B,EAC3B,gCAAgC,EAChC,4BAA4B,EAC5B,oBAAoB,EACpB,uBAAuB,EACvB,2BAA2B,EAC3B,6BAA6B,GAC9B,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EACL,iBAAiB,EACjB,sBAAsB,EACtB,uBAAuB,GACxB,MAAM,kCAAkC,CAAC;AAE1C,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EACvB,sBAAsB,EACtB,yBAAyB,EACzB,4BAA4B,EAC5B,2BAA2B,GAC5B,MAAM,6BAA6B,CAAC"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * verification/completionPolicy.ts — evidence-based completion gate (ADR-0023).
3
+ *
4
+ * PASS only when every required criterion has a `pass` result WITH at least
5
+ * one EvidenceRef. `fail` → REPAIR_REQUIRED (repair loop); missing/unknown
6
+ * (including "pass without evidence") → BLOCKED. A clean "done" without
7
+ * sufficient evidence is blockable by construction: unknown ≠ pass.
8
+ */
9
+ import type { Criterion, VerificationResult } from './types.js';
10
+ export type CompletionVerdict = 'PASS' | 'REPAIR_REQUIRED' | 'BLOCKED';
11
+ export interface CompletionPolicy {
12
+ mode: 'strict';
13
+ /** Criterion ids gating completion; '*' = every criterion with required:true. */
14
+ required: '*' | string[];
15
+ }
16
+ export declare const STRICT_ALL_POLICY: CompletionPolicy;
17
+ export interface UnsatisfiedCriterion {
18
+ id: string;
19
+ status: 'fail' | 'unknown' | 'missing';
20
+ reason: string;
21
+ }
22
+ export interface CompletionEvaluation {
23
+ verdict: CompletionVerdict;
24
+ satisfied: string[];
25
+ unsatisfied: UnsatisfiedCriterion[];
26
+ /** True when every required criterion passed with evidence. */
27
+ evidenceComplete: boolean;
28
+ summary: string;
29
+ }
30
+ export declare function evaluateCompletion(criteria: readonly Criterion[], results: readonly VerificationResult[], policy?: CompletionPolicy): CompletionEvaluation;
31
+ /** Alias for the strict BUILD/mission completion gate (ZELARI_STRICT_DONE). */
32
+ export declare const strictBuildGate: typeof evaluateCompletion;
33
+ //# sourceMappingURL=completionPolicy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"completionPolicy.d.ts","sourceRoot":"","sources":["../../src/verification/completionPolicy.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAEhE,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,iBAAiB,GAAG,SAAS,CAAC;AAEvE,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,QAAQ,CAAC;IACf,iFAAiF;IACjF,QAAQ,EAAE,GAAG,GAAG,MAAM,EAAE,CAAC;CAC1B;AAED,eAAO,MAAM,iBAAiB,EAAE,gBAAoD,CAAC;AAErF,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAAC;IACvC,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,iBAAiB,CAAC;IAC3B,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,WAAW,EAAE,oBAAoB,EAAE,CAAC;IACpC,+DAA+D;IAC/D,gBAAgB,EAAE,OAAO,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;CACjB;AAQD,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,SAAS,SAAS,EAAE,EAC9B,OAAO,EAAE,SAAS,kBAAkB,EAAE,EACtC,MAAM,GAAE,gBAAoC,GAC3C,oBAAoB,CAuDtB;AAED,+EAA+E;AAC/E,eAAO,MAAM,eAAe,2BAAqB,CAAC"}
@@ -0,0 +1,68 @@
1
+ /**
2
+ * verification/completionPolicy.ts — evidence-based completion gate (ADR-0023).
3
+ *
4
+ * PASS only when every required criterion has a `pass` result WITH at least
5
+ * one EvidenceRef. `fail` → REPAIR_REQUIRED (repair loop); missing/unknown
6
+ * (including "pass without evidence") → BLOCKED. A clean "done" without
7
+ * sufficient evidence is blockable by construction: unknown ≠ pass.
8
+ */
9
+ export const STRICT_ALL_POLICY = { mode: 'strict', required: '*' };
10
+ function lastResultById(results) {
11
+ const map = new Map();
12
+ for (const r of results)
13
+ map.set(r.criterionId, r);
14
+ return map;
15
+ }
16
+ export function evaluateCompletion(criteria, results, policy = STRICT_ALL_POLICY) {
17
+ const requiredIds = policy.required === '*'
18
+ ? criteria.filter((c) => c.required).map((c) => c.id)
19
+ : policy.required;
20
+ const byId = lastResultById(results);
21
+ const order = new Map(criteria.map((c, i) => [c.id, i]));
22
+ const satisfied = [];
23
+ const unsatisfied = [];
24
+ const ids = [...requiredIds].sort((a, b) => (order.get(a) ?? 0) - (order.get(b) ?? 0));
25
+ for (const id of ids) {
26
+ const result = byId.get(id);
27
+ if (!result) {
28
+ unsatisfied.push({ id, status: 'missing', reason: 'no verification result' });
29
+ continue;
30
+ }
31
+ if (result.status === 'fail') {
32
+ unsatisfied.push({ id, status: 'fail', reason: result.detail ?? 'check failed' });
33
+ continue;
34
+ }
35
+ if (result.status === 'unknown') {
36
+ unsatisfied.push({ id, status: 'unknown', reason: result.detail ?? 'not evaluable — unknown ≠ pass' });
37
+ continue;
38
+ }
39
+ if (result.evidence.length === 0) {
40
+ unsatisfied.push({
41
+ id,
42
+ status: 'unknown',
43
+ reason: 'pass without evidence refs — not acceptable for completion',
44
+ });
45
+ continue;
46
+ }
47
+ satisfied.push(id);
48
+ }
49
+ const verdict = unsatisfied.length === 0
50
+ ? 'PASS'
51
+ : unsatisfied.some((u) => u.status === 'fail')
52
+ ? 'REPAIR_REQUIRED'
53
+ : 'BLOCKED';
54
+ return {
55
+ verdict,
56
+ satisfied,
57
+ unsatisfied,
58
+ evidenceComplete: unsatisfied.length === 0,
59
+ summary: verdict === 'PASS'
60
+ ? `complete: ${satisfied.length}/${ids.length} required criteria pass with evidence`
61
+ : `incomplete (${verdict}): ${unsatisfied
62
+ .map((u) => `${u.id}=${u.status}`)
63
+ .join(', ')}`,
64
+ };
65
+ }
66
+ /** Alias for the strict BUILD/mission completion gate (ZELARI_STRICT_DONE). */
67
+ export const strictBuildGate = evaluateCompletion;
68
+ //# sourceMappingURL=completionPolicy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"completionPolicy.js","sourceRoot":"","sources":["../../src/verification/completionPolicy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * verification/criteriaPack.v1.ts — Zelari Coding Criteria Pack v1.
3
+ *
4
+ * Category ids follow the plan §3A.4 taxonomy:
5
+ * correctness.{specification, observable-output, error-signals}
6
+ * quality.{scope-discipline, regression-risk}
7
+ * evidence.verification-quality
8
+ *
9
+ * Commands are repo-overridable; passing `null` leaves the criterion without
10
+ * a deterministic check → honestly `unknown` (advisory), never `pass`.
11
+ */
12
+ import type { Criterion } from './types.js';
13
+ export declare const ZELARI_CODING_PACK_ID = "zelari-coding/v1";
14
+ export interface CodingPackOptions {
15
+ typecheckCommand?: string | null;
16
+ testCommand?: string | null;
17
+ buildCommand?: string | null;
18
+ /** e.g. `git diff --name-only <base>` compared against a scope allowlist. */
19
+ scopeCommand?: string | null;
20
+ commandTimeoutMs?: number;
21
+ }
22
+ export interface CriteriaPack {
23
+ id: string;
24
+ criteria: Criterion[];
25
+ }
26
+ export declare function codingCriteriaPack(options?: CodingPackOptions): CriteriaPack;
27
+ //# sourceMappingURL=criteriaPack.v1.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"criteriaPack.v1.d.ts","sourceRoot":"","sources":["../../src/verification/criteriaPack.v1.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,eAAO,MAAM,qBAAqB,qBAAqB,CAAC;AAExD,MAAM,WAAW,iBAAiB;IAChC,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,6EAA6E;IAC7E,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,SAAS,EAAE,CAAC;CACvB;AAED,wBAAgB,kBAAkB,CAAC,OAAO,GAAE,iBAAsB,GAAG,YAAY,CA+ChF"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * verification/criteriaPack.v1.ts — Zelari Coding Criteria Pack v1.
3
+ *
4
+ * Category ids follow the plan §3A.4 taxonomy:
5
+ * correctness.{specification, observable-output, error-signals}
6
+ * quality.{scope-discipline, regression-risk}
7
+ * evidence.verification-quality
8
+ *
9
+ * Commands are repo-overridable; passing `null` leaves the criterion without
10
+ * a deterministic check → honestly `unknown` (advisory), never `pass`.
11
+ */
12
+ export const ZELARI_CODING_PACK_ID = 'zelari-coding/v1';
13
+ export function codingCriteriaPack(options = {}) {
14
+ const timeoutMs = options.commandTimeoutMs ?? 600_000;
15
+ const command = (command) => command ? { kind: 'command', command, timeoutMs } : undefined;
16
+ const criteria = [
17
+ {
18
+ id: 'correctness.error-signals',
19
+ text: 'Static checks (typecheck) pass with no new errors.',
20
+ source: 'criteria-pack',
21
+ required: true,
22
+ check: command(options.typecheckCommand ?? 'npm run typecheck'),
23
+ },
24
+ {
25
+ id: 'correctness.specification',
26
+ text: 'The test suite passes — behavior matches the specification.',
27
+ source: 'criteria-pack',
28
+ required: true,
29
+ check: command(options.testCommand ?? 'npm run test'),
30
+ },
31
+ {
32
+ id: 'correctness.observable-output',
33
+ text: 'The project builds successfully (observable output artifact).',
34
+ source: 'criteria-pack',
35
+ required: true,
36
+ check: command(options.buildCommand ?? 'npm run build'),
37
+ },
38
+ {
39
+ id: 'quality.scope-discipline',
40
+ text: 'No unrelated files changed (minimal diff discipline).',
41
+ source: 'criteria-pack',
42
+ required: false,
43
+ check: command(options.scopeCommand),
44
+ },
45
+ {
46
+ id: 'evidence.verification-quality',
47
+ text: 'Verification evidence is traceable to the original tool output.',
48
+ source: 'criteria-pack',
49
+ required: false,
50
+ check: {
51
+ kind: 'none',
52
+ reason: 'advisory: audited via EvidenceRef digests on the session spine',
53
+ },
54
+ },
55
+ ];
56
+ return { id: ZELARI_CODING_PACK_ID, criteria };
57
+ }
58
+ //# sourceMappingURL=criteriaPack.v1.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"criteriaPack.v1.js","sourceRoot":"","sources":["../../src/verification/criteriaPack.v1.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,MAAM,CAAC,MAAM,qBAAqB,GAAG,kBAAkB,CAAC;AAgBxD,MAAM,UAAU,kBAAkB,CAAC,UAA6B,EAAE;IAChE,MAAM,SAAS,GAAG,OAAO,CAAC,gBAAgB,IAAI,OAAO,CAAC;IACtD,MAAM,OAAO,GAAG,CAAC,OAAkC,EAAsB,EAAE,CACzE,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IAEhE,MAAM,QAAQ,GAAgB;QAC5B;YACE,EAAE,EAAE,2BAA2B;YAC/B,IAAI,EAAE,oDAAoD;YAC1D,MAAM,EAAE,eAAe;YACvB,QAAQ,EAAE,IAAI;YACd,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,gBAAgB,IAAI,mBAAmB,CAAC;SAChE;QACD;YACE,EAAE,EAAE,2BAA2B;YAC/B,IAAI,EAAE,6DAA6D;YACnE,MAAM,EAAE,eAAe;YACvB,QAAQ,EAAE,IAAI;YACd,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,WAAW,IAAI,cAAc,CAAC;SACtD;QACD;YACE,EAAE,EAAE,+BAA+B;YACnC,IAAI,EAAE,+DAA+D;YACrE,MAAM,EAAE,eAAe;YACvB,QAAQ,EAAE,IAAI;YACd,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,YAAY,IAAI,eAAe,CAAC;SACxD;QACD;YACE,EAAE,EAAE,0BAA0B;YAC9B,IAAI,EAAE,uDAAuD;YAC7D,MAAM,EAAE,eAAe;YACvB,QAAQ,EAAE,KAAK;YACf,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC;SACrC;QACD;YACE,EAAE,EAAE,+BAA+B;YACnC,IAAI,EAAE,iEAAiE;YACvE,MAAM,EAAE,eAAe;YACvB,QAAQ,EAAE,KAAK;YACf,KAAK,EAAE;gBACL,IAAI,EAAE,MAAM;gBACZ,MAAM,EAAE,gEAAgE;aACzE;SACF;KACF,CAAC;IAEF,OAAO,EAAE,EAAE,EAAE,qBAAqB,EAAE,QAAQ,EAAE,CAAC;AACjD,CAAC"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * verification/engine.ts — deterministic VerificationEngine (ADR-0023).
3
+ *
4
+ * Zero LLM: criteria with a deterministic check are evaluated via the
5
+ * injected Shell/Fs providers; everything else (no check, provider missing,
6
+ * timeout) is honestly `unknown`. Every result carries EvidenceRef with a
7
+ * sha256 digest of the captured output, and a `verification.run` event is
8
+ * appended to the session spine when an emitter is configured.
9
+ */
10
+ import type { FsProvider, ShellProvider } from '../runtime/providers.js';
11
+ import type { SessionEventInput } from '../session/types.js';
12
+ import type { Criterion, VerificationResult } from './types.js';
13
+ export interface VerificationServices {
14
+ shell?: ShellProvider;
15
+ fs?: FsProvider;
16
+ }
17
+ export interface VerificationEngineOptions {
18
+ /** Session spine emitter (ExecutionContext.appendSessionEvent). */
19
+ emit?: (input: SessionEventInput) => Promise<unknown>;
20
+ now?: () => number;
21
+ sha256?: (input: string) => string;
22
+ }
23
+ export declare class VerificationEngine {
24
+ private readonly services;
25
+ private readonly options;
26
+ constructor(services?: VerificationServices, options?: VerificationEngineOptions);
27
+ /** Evaluate criteria deterministically; optionally emit the spine event. */
28
+ evaluate(criteria: readonly Criterion[], context?: {
29
+ packId?: string;
30
+ }): Promise<VerificationResult[]>;
31
+ private evaluateOne;
32
+ private evalCommand;
33
+ private fsEvidence;
34
+ private evalFileExists;
35
+ private evalFileAbsent;
36
+ private evalFileContains;
37
+ }
38
+ //# sourceMappingURL=engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../src/verification/engine.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACzE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,KAAK,EAAE,SAAS,EAAe,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAE7E,MAAM,WAAW,oBAAoB;IACnC,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,EAAE,CAAC,EAAE,UAAU,CAAC;CACjB;AAED,MAAM,WAAW,yBAAyB;IACxC,mEAAmE;IACnE,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACtD,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;CACpC;AAUD,qBAAa,kBAAkB;IAE3B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,OAAO;gBADP,QAAQ,GAAE,oBAAyB,EACnC,OAAO,GAAE,yBAA8B;IAG1D,4EAA4E;IACtE,QAAQ,CAAC,QAAQ,EAAE,SAAS,SAAS,EAAE,EAAE,OAAO,GAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC;YAuBlG,WAAW;YAqCX,WAAW;IAuCzB,OAAO,CAAC,UAAU;YAIJ,cAAc;YAad,cAAc;YAYd,gBAAgB;CAwB/B"}
@@ -0,0 +1,163 @@
1
+ /**
2
+ * verification/engine.ts — deterministic VerificationEngine (ADR-0023).
3
+ *
4
+ * Zero LLM: criteria with a deterministic check are evaluated via the
5
+ * injected Shell/Fs providers; everything else (no check, provider missing,
6
+ * timeout) is honestly `unknown`. Every result carries EvidenceRef with a
7
+ * sha256 digest of the captured output, and a `verification.run` event is
8
+ * appended to the session spine when an emitter is configured.
9
+ */
10
+ import { createHash } from 'node:crypto';
11
+ function defaultSha256(input) {
12
+ return createHash('sha256').update(input).digest('hex');
13
+ }
14
+ function tail(text, max = 400) {
15
+ return text.length > max ? `…${text.slice(text.length - max)}` : text;
16
+ }
17
+ export class VerificationEngine {
18
+ services;
19
+ options;
20
+ constructor(services = {}, options = {}) {
21
+ this.services = services;
22
+ this.options = options;
23
+ }
24
+ /** Evaluate criteria deterministically; optionally emit the spine event. */
25
+ async evaluate(criteria, context = {}) {
26
+ const results = [];
27
+ for (const criterion of criteria) {
28
+ results.push(await this.evaluateOne(criterion));
29
+ }
30
+ if (this.options.emit) {
31
+ await this.options.emit({
32
+ kind: 'verification.run',
33
+ actor: { type: 'system', role: 'verification' },
34
+ data: {
35
+ source: 'deterministic-engine',
36
+ packId: context.packId,
37
+ results: results.map((r) => ({
38
+ criterionId: r.criterionId,
39
+ status: r.status,
40
+ evidence: r.evidence.map((e) => ({ tier: e.tier, ref: e.ref, digest: e.digest })),
41
+ })),
42
+ },
43
+ });
44
+ }
45
+ return results;
46
+ }
47
+ async evaluateOne(criterion) {
48
+ const started = this.options.now?.() ?? Date.now();
49
+ const base = {
50
+ criterionId: criterion.id,
51
+ source: 'deterministic-engine',
52
+ evaluatedAt: started,
53
+ };
54
+ const done = (patch) => ({
55
+ ...base,
56
+ ...patch,
57
+ durationMs: Math.max(0, (this.options.now?.() ?? Date.now()) - started),
58
+ });
59
+ const check = criterion.check;
60
+ if (!check || check.kind === 'none') {
61
+ return done({
62
+ status: 'unknown',
63
+ evidence: [],
64
+ detail: check?.kind === 'none' && check.reason
65
+ ? check.reason
66
+ : 'no deterministic check bound — unknown ≠ pass',
67
+ });
68
+ }
69
+ switch (check.kind) {
70
+ case 'command':
71
+ return await this.evalCommand(check, done);
72
+ case 'file-exists':
73
+ return await this.evalFileExists(check, done);
74
+ case 'file-contains':
75
+ return await this.evalFileContains(check, done);
76
+ case 'file-absent':
77
+ return await this.evalFileAbsent(check, done);
78
+ }
79
+ }
80
+ async evalCommand(check, done) {
81
+ const sha256 = this.options.sha256 ?? defaultSha256;
82
+ const shell = this.services.shell;
83
+ if (!shell) {
84
+ return done({ status: 'unknown', evidence: [], detail: 'shell provider unavailable' });
85
+ }
86
+ const result = await shell.exec(check.command, { timeoutMs: check.timeoutMs });
87
+ const evidence = [
88
+ {
89
+ tier: 'command-output',
90
+ ref: `${check.command} → exit ${result.exitCode ?? 'signal'}`,
91
+ capturedAt: Date.now(),
92
+ digest: sha256(result.stdout),
93
+ },
94
+ ];
95
+ if (result.timedOut) {
96
+ return done({ status: 'unknown', evidence, detail: `command timed out (${check.timeoutMs ?? 'default'}ms)` });
97
+ }
98
+ const expectExit = check.expectExit ?? 0;
99
+ if (result.exitCode !== expectExit) {
100
+ return done({
101
+ status: 'fail',
102
+ evidence,
103
+ detail: `exit ${result.exitCode} (expected ${expectExit}) — stderr: ${tail(result.stderr)}`,
104
+ });
105
+ }
106
+ if (check.expectStdoutIncludes && !result.stdout.includes(check.expectStdoutIncludes)) {
107
+ return done({
108
+ status: 'fail',
109
+ evidence,
110
+ detail: `stdout missing "${check.expectStdoutIncludes}" — got: ${tail(result.stdout)}`,
111
+ });
112
+ }
113
+ return done({ status: 'pass', evidence });
114
+ }
115
+ fsEvidence(path, content, sha256) {
116
+ return { tier: 'fs-observation', ref: path, capturedAt: Date.now(), digest: sha256(content) };
117
+ }
118
+ async evalFileExists(check, done) {
119
+ const sha256 = this.options.sha256 ?? defaultSha256;
120
+ const fs = this.services.fs;
121
+ if (!fs)
122
+ return done({ status: 'unknown', evidence: [], detail: 'fs provider unavailable' });
123
+ const exists = await fs.exists(check.path);
124
+ if (!exists)
125
+ return done({ status: 'fail', evidence: [], detail: `file not found: ${check.path}` });
126
+ const content = await fs.readFile(check.path).catch(() => '');
127
+ return done({ status: 'pass', evidence: [this.fsEvidence(check.path, content, sha256)] });
128
+ }
129
+ async evalFileAbsent(check, done) {
130
+ const fs = this.services.fs;
131
+ if (!fs)
132
+ return done({ status: 'unknown', evidence: [], detail: 'fs provider unavailable' });
133
+ const exists = await fs.exists(check.path);
134
+ return exists
135
+ ? done({ status: 'fail', evidence: [], detail: `file still present: ${check.path}` })
136
+ : done({ status: 'pass', evidence: [{ tier: 'fs-observation', ref: check.path, capturedAt: Date.now() }] });
137
+ }
138
+ async evalFileContains(check, done) {
139
+ const sha256 = this.options.sha256 ?? defaultSha256;
140
+ const fs = this.services.fs;
141
+ if (!fs)
142
+ return done({ status: 'unknown', evidence: [], detail: 'fs provider unavailable' });
143
+ let content;
144
+ try {
145
+ content = await fs.readFile(check.path);
146
+ }
147
+ catch {
148
+ return done({ status: 'fail', evidence: [], detail: `file not readable: ${check.path}` });
149
+ }
150
+ const evidence = [this.fsEvidence(check.path, content, sha256)];
151
+ let hit;
152
+ try {
153
+ hit = new RegExp(check.pattern, 'm').test(content);
154
+ }
155
+ catch {
156
+ hit = content.includes(check.pattern);
157
+ }
158
+ return hit
159
+ ? done({ status: 'pass', evidence })
160
+ : done({ status: 'fail', evidence, detail: `pattern not found in ${check.path}: ${tail(check.pattern)}` });
161
+ }
162
+ }
163
+ //# sourceMappingURL=engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/verification/engine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * @zelari/core/verification — deterministic evidence contract + optional
3
+ * LLM VerifierService (ADR-0023).
4
+ */
5
+ export * from './types.js';
6
+ export * from './engine.js';
7
+ export * from './completionPolicy.js';
8
+ export * from './criteriaPack.v1.js';
9
+ export * from './metrics.js';
10
+ export * from './verifier.js';
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/verification/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * @zelari/core/verification — deterministic evidence contract + optional
3
+ * LLM VerifierService (ADR-0023).
4
+ */
5
+ export * from './types.js';
6
+ export * from './engine.js';
7
+ export * from './completionPolicy.js';
8
+ export * from './criteriaPack.v1.js';
9
+ export * from './metrics.js';
10
+ export * from './verifier.js';
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/verification/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * verification/metrics.ts — false-done and verification-cost metrics (plan §23).
3
+ *
4
+ * North star: average cost per verified solved task. These helpers feed the
5
+ * harness-delta benchmark reports (minimal vs kraken vs +verification).
6
+ */
7
+ export interface TaskOutcomeSample {
8
+ taskId: string;
9
+ /** The agent claimed the task done. */
10
+ claimedDone: boolean;
11
+ /** Deterministic verification verdict (undefined = not verified). */
12
+ verified?: boolean;
13
+ }
14
+ export interface FalseDoneStats {
15
+ claimed: number;
16
+ falseDone: number;
17
+ /** falseDone / claimed (0 when nothing was claimed). */
18
+ rate: number;
19
+ }
20
+ /** Share of claimed-done tasks that did NOT survive deterministic verification. */
21
+ export declare function computeFalseDoneRate(samples: readonly TaskOutcomeSample[]): FalseDoneStats;
22
+ /** Verified solve rate over all tasks (verified / total). */
23
+ export declare function verifiedSolveRate(samples: readonly TaskOutcomeSample[]): number;
24
+ /** Verification cost ratio; null when total time is unknown/zero. */
25
+ export declare function verificationCostRatio(verificationMs: number, totalMs: number): number | null;
26
+ //# sourceMappingURL=metrics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../src/verification/metrics.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,uCAAuC;IACvC,WAAW,EAAE,OAAO,CAAC;IACrB,qEAAqE;IACrE,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,wDAAwD;IACxD,IAAI,EAAE,MAAM,CAAC;CACd;AAED,mFAAmF;AACnF,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,SAAS,iBAAiB,EAAE,GAAG,cAAc,CAQ1F;AAED,6DAA6D;AAC7D,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,SAAS,iBAAiB,EAAE,GAAG,MAAM,CAG/E;AAED,qEAAqE;AACrE,wBAAgB,qBAAqB,CAAC,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAG5F"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * verification/metrics.ts — false-done and verification-cost metrics (plan §23).
3
+ *
4
+ * North star: average cost per verified solved task. These helpers feed the
5
+ * harness-delta benchmark reports (minimal vs kraken vs +verification).
6
+ */
7
+ /** Share of claimed-done tasks that did NOT survive deterministic verification. */
8
+ export function computeFalseDoneRate(samples) {
9
+ const claimed = samples.filter((s) => s.claimedDone);
10
+ const falseDone = claimed.filter((s) => s.verified !== true);
11
+ return {
12
+ claimed: claimed.length,
13
+ falseDone: falseDone.length,
14
+ rate: claimed.length === 0 ? 0 : falseDone.length / claimed.length,
15
+ };
16
+ }
17
+ /** Verified solve rate over all tasks (verified / total). */
18
+ export function verifiedSolveRate(samples) {
19
+ if (samples.length === 0)
20
+ return 0;
21
+ return samples.filter((s) => s.verified === true).length / samples.length;
22
+ }
23
+ /** Verification cost ratio; null when total time is unknown/zero. */
24
+ export function verificationCostRatio(verificationMs, totalMs) {
25
+ if (totalMs <= 0)
26
+ return null;
27
+ return verificationMs / totalMs;
28
+ }
29
+ //# sourceMappingURL=metrics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../src/verification/metrics.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAiBH,mFAAmF;AACnF,MAAM,UAAU,oBAAoB,CAAC,OAAqC;IACxE,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;IACrD,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC;IAC7D,OAAO;QACL,OAAO,EAAE,OAAO,CAAC,MAAM;QACvB,SAAS,EAAE,SAAS,CAAC,MAAM;QAC3B,IAAI,EAAE,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM;KACnE,CAAC;AACJ,CAAC;AAED,6DAA6D;AAC7D,MAAM,UAAU,iBAAiB,CAAC,OAAqC;IACrE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IACnC,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;AAC5E,CAAC;AAED,qEAAqE;AACrE,MAAM,UAAU,qBAAqB,CAAC,cAAsB,EAAE,OAAe;IAC3E,IAAI,OAAO,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAC9B,OAAO,cAAc,GAAG,OAAO,CAAC;AAClC,CAAC"}