kiokuko-dsh 0.2.16 → 0.2.17

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 (102) hide show
  1. package/PERMISSIONS.md +11 -0
  2. package/README.ja.md +2 -0
  3. package/README.ko.md +2 -0
  4. package/README.md +2 -0
  5. package/README.zh-CN.md +2 -0
  6. package/THIRD_PARTY_NOTICES.md +4 -0
  7. package/dist/deep-thinker/core/contracts.d.ts +5 -5
  8. package/dist/deep-thinker/memory-finalizer.d.ts +1 -1
  9. package/dist/deep-thinker/store.d.ts +1 -1
  10. package/dist/dsh/coding-workflow/host.d.ts.map +1 -1
  11. package/dist/dsh/coding-workflow/host.js +7 -6
  12. package/dist/dsh/coding-workflow/host.js.map +1 -1
  13. package/dist/dsh/composition.js +1 -1
  14. package/dist/dsh/composition.js.map +1 -1
  15. package/dist/dsh/config.d.ts +1 -1
  16. package/dist/dsh/core/host.d.ts.map +1 -1
  17. package/dist/dsh/core/host.js +7 -1
  18. package/dist/dsh/core/host.js.map +1 -1
  19. package/dist/dsh/decisions/contracts.d.ts +1 -0
  20. package/dist/dsh/decisions/contracts.d.ts.map +1 -1
  21. package/dist/dsh/decisions/contracts.js +1 -1
  22. package/dist/dsh/decisions/contracts.js.map +1 -1
  23. package/dist/dsh/decisions/diagnostic-correlation.d.ts +3 -0
  24. package/dist/dsh/decisions/diagnostic-correlation.d.ts.map +1 -0
  25. package/dist/dsh/decisions/diagnostic-correlation.js +7 -0
  26. package/dist/dsh/decisions/diagnostic-correlation.js.map +1 -0
  27. package/dist/dsh/decisions/diagnostics.d.ts +512 -0
  28. package/dist/dsh/decisions/diagnostics.d.ts.map +1 -0
  29. package/dist/dsh/decisions/diagnostics.js +389 -0
  30. package/dist/dsh/decisions/diagnostics.js.map +1 -0
  31. package/dist/dsh/decisions/host.d.ts +2 -1
  32. package/dist/dsh/decisions/host.d.ts.map +1 -1
  33. package/dist/dsh/decisions/host.js +18 -5
  34. package/dist/dsh/decisions/host.js.map +1 -1
  35. package/dist/dsh/decisions/intent-assessment.d.ts +20 -0
  36. package/dist/dsh/decisions/intent-assessment.d.ts.map +1 -0
  37. package/dist/dsh/decisions/intent-assessment.js +104 -0
  38. package/dist/dsh/decisions/intent-assessment.js.map +1 -0
  39. package/dist/dsh/decisions/message-refs.d.ts +6 -0
  40. package/dist/dsh/decisions/message-refs.d.ts.map +1 -0
  41. package/dist/dsh/decisions/message-refs.js +16 -0
  42. package/dist/dsh/decisions/message-refs.js.map +1 -0
  43. package/dist/dsh/decisions/micro-judge.d.ts +58 -0
  44. package/dist/dsh/decisions/micro-judge.d.ts.map +1 -0
  45. package/dist/dsh/decisions/micro-judge.js +160 -0
  46. package/dist/dsh/decisions/micro-judge.js.map +1 -0
  47. package/dist/dsh/decisions/request-intent.d.ts +1 -2
  48. package/dist/dsh/decisions/request-intent.d.ts.map +1 -1
  49. package/dist/dsh/decisions/request-intent.js +16 -18
  50. package/dist/dsh/decisions/request-intent.js.map +1 -1
  51. package/dist/dsh/decisions/service.d.ts +10 -1
  52. package/dist/dsh/decisions/service.d.ts.map +1 -1
  53. package/dist/dsh/decisions/service.js +52 -7
  54. package/dist/dsh/decisions/service.js.map +1 -1
  55. package/dist/dsh/execution-selection.d.ts +5 -5
  56. package/dist/dsh/host-adapter/admission.d.ts.map +1 -1
  57. package/dist/dsh/host-adapter/admission.js +3 -0
  58. package/dist/dsh/host-adapter/admission.js.map +1 -1
  59. package/dist/dsh/host-adapter.d.ts.map +1 -1
  60. package/dist/dsh/host-adapter.js +4 -0
  61. package/dist/dsh/host-adapter.js.map +1 -1
  62. package/dist/dsh/index.d.ts +2 -2
  63. package/dist/dsh/model-configuration.d.ts +6 -6
  64. package/dist/dsh/modules/enno.d.ts +1 -1
  65. package/dist/dsh/on-demand-intake.d.ts +10 -0
  66. package/dist/dsh/on-demand-intake.d.ts.map +1 -1
  67. package/dist/dsh/on-demand-intake.js +63 -9
  68. package/dist/dsh/on-demand-intake.js.map +1 -1
  69. package/dist/dsh/task-state.d.ts.map +1 -1
  70. package/dist/dsh/task-state.js +4 -0
  71. package/dist/dsh/task-state.js.map +1 -1
  72. package/dist/dsh/turn-process.d.ts.map +1 -1
  73. package/dist/dsh/turn-process.js +3 -0
  74. package/dist/dsh/turn-process.js.map +1 -1
  75. package/dist/enno-oduno/store.d.ts.map +1 -1
  76. package/dist/enno-oduno/store.js +2 -0
  77. package/dist/enno-oduno/store.js.map +1 -1
  78. package/dist/locale/en.json +1 -1
  79. package/dist/locale/ja.json +1 -1
  80. package/dist/locale/ko.json +1 -1
  81. package/dist/locale/zh-CN.json +1 -1
  82. package/dist/memory/lifecycle.d.ts +1 -1
  83. package/docs/coding-workflow.md +1 -1
  84. package/docs/decision-diagnostics.md +60 -0
  85. package/docs/guardrail.md +3 -3
  86. package/docs/harness-map.md +2 -0
  87. package/docs/micro-judge.md +34 -0
  88. package/guardrail/manifest.json +0 -22
  89. package/micro-judge/darwin-arm64/kiokuko-micro-judge +0 -0
  90. package/micro-judge/licenses/COPYRIGHT-Rust-1.85.0.txt +384 -0
  91. package/micro-judge/licenses/LICENSE-APACHE +176 -0
  92. package/micro-judge/licenses/LICENSE-MIT +23 -0
  93. package/micro-judge/licenses/manifest.json +5 -0
  94. package/micro-judge/manifest.json +15 -0
  95. package/micro-judge/native-acceptance-darwin-arm64.tap +118 -0
  96. package/micro-judge/native-verification-darwin-arm64.json +20 -0
  97. package/migrations/044_decision_diagnostics.sql +46 -0
  98. package/package.json +13 -8
  99. package/scripts/guardrail-artifacts.mjs +0 -1
  100. package/scripts/verify-micro-judge.mjs +53 -0
  101. package/guardrail/x86_64-apple-darwin/kiokuko-guardrail +0 -0
  102. package/guardrail/x86_64-apple-darwin/manifest.json +0 -71
@@ -0,0 +1 @@
1
+ {"version":3,"file":"intent-assessment.d.ts","sourceRoot":"","sources":["../../../src/dsh/decisions/intent-assessment.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAA;AACtF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AACnD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AACnD,OAAO,EAAE,aAAa,EAAmB,KAAK,mBAAmB,EAAE,KAAK,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AAClH,eAAO,MAAM,wBAAwB,oCAAkC,CAAA;AACvE,MAAM,MAAM,eAAe,GAAC,WAAW,GAAC,cAAc,GAAC,cAAc,GAAC,aAAa,CAAA;AACnF,MAAM,WAAW,gBAAgB;IAAG,QAAQ,EAAE,eAAe,CAAC;IAAC,mBAAmB,EAAE,MAAM,CAAC;IAAC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,gBAAgB,CAAC;IAAC,OAAO,EAAE,YAAY,GAAC,SAAS,GAAC,aAAa,CAAA;CAAE;AAOnO,4HAA4H;AAC5H,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,oBAAoB,EAAE,SAAS,EAAE,qBAAqB,GAAG,aAAa,CAKzH;AAED,0GAA0G;AAC1G,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,oBAAoB,EAAC,SAAS,EAAE,qBAAqB,EAAC,QAAQ,EAAE,eAAe,GAAG,mBAAmB,CAyCpJ;AACD,wBAAsB,mBAAmB,CAAC,OAAO,EAAC,eAAe,GAAC,SAAS,EAAC,SAAS,EAAC,MAAM,EAAC,OAAO,EAAC,oBAAoB,EAAC,SAAS,EAAC,qBAAqB,EAAC,MAAM,EAAC,WAAW,EAC1K,OAAO,GAAC,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC,CAAC,CAAI,GAAE,OAAO,CAAC,gBAAgB,GAAC,SAAS,CAAC,CAkBpF"}
@@ -0,0 +1,104 @@
1
+ import { canonicalContentHash } from '../../serialization/validate.js';
2
+ import { runMicroJudge } from './micro-judge.js';
3
+ export const INTENT_ASSESSMENT_POLICY = 'source-candidate-independent-v1';
4
+ const criteria = [
5
+ ['action', 'The proposed action and artifact scope preserve every requested action, negation, quotation, actor and distinction between explanation, verification and implementation.'],
6
+ ['reference', 'Every proposed continuation, scope change and adopted proposal refers to the exact supplied current-session source. Omitted or uncertain targets are not replaced by the current directory.'],
7
+ ['constraints', 'The candidate preserves applicable target exclusions and constraints. It does not turn a forbidden, quoted or hypothetical action into a request.'],
8
+ ['latest-answer', 'Apply the latest explicitly labelled native clarification answer to its question and current scope. A same-scope explicit revision can supersede the earlier conflicting instruction; do not let an older prohibition permanently override it. Unrelated constraints remain in force.'],
9
+ ];
10
+ /** Separate inference compares original source against a candidate; extraction scores/results are deliberately excluded. */
11
+ export function buildIntentAssessmentBatch(context, candidate) {
12
+ return { purpose: 'intent-semantic-match', state: { source: context, candidate: { relation: candidate.relation, action: candidate.action, changeScope: candidate.changeScope, taskOperation: candidate.taskOperation ?? null, evidence: candidate.evidence },
13
+ boundary: 'Independent semantic comparison, not authorization. Read the original source before assessing the candidate. Do not rubber-stamp extraction. Missing information is insufficient, not false. Optional Lisp metadata is irrelevant to understanding or starting the requested implementation. Native permissions, ownership, task lifecycle and cancellation remain host authority.' },
14
+ questions: criteria.map(([name, instructions]) => ({ id: `semantic-${name}`, instructions,
15
+ choices: [{ id: 'supported', description: 'The source independently supports this aspect of the candidate.' }, { id: 'contradicted', description: 'The source contradicts this aspect of the candidate.' }, { id: 'insufficient', description: 'The source does not establish this aspect or is ambiguous.' }], abstainId: 'insufficient' })) };
16
+ }
17
+ const op = (name, ...args) => ({ op: name, args });
18
+ /** Relations over host-owned source revisions and reference sets. No model-supplied authorization bit. */
19
+ export function compileIntentRelations(context, candidate, semantic) {
20
+ const domains = [], constraints = [], requirements = [];
21
+ const value = (kind, values) => { const variable = domains.length; domains.push({ kind, values }); return { variable }; };
22
+ const bit = (known) => value('bool', [known ? 1 : 0]);
23
+ const equal = (a, b) => {
24
+ if (a === undefined && b === undefined)
25
+ return;
26
+ if (a === undefined || b === undefined) {
27
+ requirements.push(value('bool', [0]));
28
+ return;
29
+ }
30
+ requirements.push(op('eq', value('int', [a]), b));
31
+ };
32
+ const symbols = new Map();
33
+ const symbol = (v) => { const digest = canonicalContentHash(v ?? null); if (!symbols.has(digest))
34
+ symbols.set(digest, symbols.size); return symbols.get(digest); };
35
+ const identity = (a, b) => {
36
+ // Intern exact opaque identities locally: only equality reaches the solver, never raw text.
37
+ requirements.push(op('eq', value('int', [symbol(a)]), symbol(b)));
38
+ };
39
+ identity(candidate.evidence.requestDigest, canonicalContentHash(context.task));
40
+ identity(candidate.evidence.messageRefs, context.messageRefs);
41
+ const task = context.activeTask, goal = context.activeGoal;
42
+ identity(candidate.evidence.runId, goal?.runId);
43
+ identity(candidate.evidence.taskId, task?.taskId);
44
+ equal(candidate.evidence.taskRevision, task?.revision);
45
+ equal(candidate.evidence.taskGeneration, task?.generation);
46
+ equal(candidate.evidence.workflowRevision, goal?.workflowRevision);
47
+ equal(candidate.evidence.goalRevision, goal?.goalRevision);
48
+ equal(candidate.evidence.scopeRevision, goal?.scopeRevision);
49
+ // Set membership is encoded as candidate membership => exact host membership.
50
+ for (const ref of candidate.evidence.proposalRefs) {
51
+ const source = context.proposals.find(p => p.id === ref.id);
52
+ requirements.push(op('implies', bit(true), bit(!!source)));
53
+ if (source) {
54
+ identity(ref.digest, source.digest);
55
+ equal(ref.revision ?? undefined, source.revision ?? undefined);
56
+ }
57
+ }
58
+ const resolved = value('bool', candidate.action === 'unknown' || candidate.relation === 'unknown' || candidate.action === 'change' && candidate.changeScope === 'unknown' ? [0, 1] : [1]);
59
+ const semanticVariable = value('bool', semantic === 'supported' ? [1] : semantic === 'contradicted' ? [0] : [0, 1]);
60
+ // A candidate task transition must belong to the host's current legal operation set.
61
+ if (candidate.taskOperation)
62
+ requirements.push(op('implies', bit(true), bit(!!task?.allowedOps.includes(candidate.taskOperation))));
63
+ const valid = value('bool', [0, 1]);
64
+ let conjunction = op('and', resolved, semanticVariable);
65
+ for (const relation of requirements)
66
+ conjunction = op('and', conjunction, relation);
67
+ // Split conjunctions into ternary relations; propagation can eliminate impossible states before MRV search.
68
+ function flatten(e) {
69
+ if (typeof e === 'object' && 'op' in e) {
70
+ const args = e.args.map(flatten);
71
+ const next = value('bool', [0, 1]);
72
+ constraints.push(op('eq', next, { op: e.op, args }));
73
+ return next;
74
+ }
75
+ return e;
76
+ }
77
+ constraints.push(op('eq', valid, flatten(conjunction)));
78
+ return { domains, constraints, query: valid, workBudget: 200000 };
79
+ }
80
+ export async function assessRequestIntent(service, requestId, context, candidate, signal, options = {}) {
81
+ // Explicitly disabled typed decisions retain the existing native authority path; no assessment is claimed.
82
+ if (service && (await service.bind(requestId, signal)).mode === 'off')
83
+ return undefined;
84
+ const batch = buildIntentAssessmentBatch(context, candidate), semanticInputDigest = canonicalContentHash(batch);
85
+ let semantic = 'unavailable', semanticOutputDigest, providerDecisionId;
86
+ if (service)
87
+ try {
88
+ const result = await service.evaluate(requestId, batch, signal, INTENT_ASSESSMENT_POLICY, undefined, { onEvaluation: o => { providerDecisionId = o.decisionId; } });
89
+ signal.throwIfAborted();
90
+ if (result.status === 'completed') {
91
+ semanticOutputDigest = canonicalContentHash(result.result);
92
+ const answers = result.result.answers;
93
+ semantic = answers.some(a => a.status === 'selected' && a.choiceId === 'contradicted') ? 'contradicted' : answers.length === criteria.length && answers.every(a => a.status === 'selected' && a.choiceId === 'supported') ? 'supported' : 'insufficient';
94
+ }
95
+ }
96
+ catch {
97
+ signal.throwIfAborted();
98
+ }
99
+ const problem = compileIntentRelations(context, candidate, semantic);
100
+ const detector = await runMicroJudge(problem, canonicalContentHash([requestId, semanticInputDigest]), signal, options);
101
+ const outcome = semantic === 'unavailable' || detector.state === 'unavailable' || !detector.result.complete ? 'unavailable' : detector.result.status === 'entailed' ? 'consistent' : 'clarify';
102
+ return { semantic, semanticInputDigest, ...(semanticOutputDigest ? { semanticOutputDigest } : {}), ...(providerDecisionId ? { providerDecisionId } : {}), detector, outcome };
103
+ }
104
+ //# sourceMappingURL=intent-assessment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"intent-assessment.js","sourceRoot":"","sources":["../../../src/dsh/decisions/intent-assessment.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /** Pure native message references, independent of task/decision runtime initialization. */
2
+ export declare function requestIntentMessageRefs(messages: readonly unknown[], task: string): {
3
+ id: string;
4
+ digest: string;
5
+ }[];
6
+ //# sourceMappingURL=message-refs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message-refs.d.ts","sourceRoot":"","sources":["../../../src/dsh/decisions/message-refs.ts"],"names":[],"mappings":"AAEA,2FAA2F;AAC3F,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,SAAS,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG;IAAC,EAAE,EAAC,MAAM,CAAC;IAAA,MAAM,EAAC,MAAM,CAAA;CAAC,EAAE,CAUhH"}
@@ -0,0 +1,16 @@
1
+ import { canonicalContentHash } from '../../serialization/validate.js';
2
+ /** Pure native message references, independent of task/decision runtime initialization. */
3
+ export function requestIntentMessageRefs(messages, task) {
4
+ const refs = messages.flatMap(value => {
5
+ if (!value || typeof value !== 'object' || Array.isArray(value))
6
+ return [];
7
+ const message = value;
8
+ const source = message.source && typeof message.source === 'object' && !Array.isArray(message.source) ? message.source : undefined;
9
+ if (message.role !== 'user' || source !== undefined && source.kind !== 'user')
10
+ return [];
11
+ const id = typeof message.id === 'string' && message.id.length > 0 ? message.id : `message:${canonicalContentHash(message)}`;
12
+ return [{ id, digest: canonicalContentHash(message) }];
13
+ });
14
+ return refs.length ? refs.slice(-16) : [{ id: `input:${canonicalContentHash(task)}`, digest: canonicalContentHash(task) }];
15
+ }
16
+ //# sourceMappingURL=message-refs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message-refs.js","sourceRoot":"","sources":["../../../src/dsh/decisions/message-refs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAA;AAEtE,2FAA2F;AAC3F,MAAM,UAAU,wBAAwB,CAAC,QAA4B,EAAE,IAAY;IACjF,MAAM,IAAI,GAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAA,EAAE;QACjC,IAAG,CAAC,KAAK,IAAI,OAAO,KAAK,KAAG,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;YAAC,OAAO,EAAE,CAAA;QACtE,MAAM,OAAO,GAAC,KAA+B,CAAA;QAC7C,MAAM,MAAM,GAAC,OAAO,CAAC,MAAM,IAAI,OAAO,OAAO,CAAC,MAAM,KAAG,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAgC,CAAC,CAAC,CAAC,SAAS,CAAA;QACxJ,IAAG,OAAO,CAAC,IAAI,KAAG,MAAM,IAAI,MAAM,KAAG,SAAS,IAAI,MAAM,CAAC,IAAI,KAAG,MAAM;YAAC,OAAO,EAAE,CAAA;QAChF,MAAM,EAAE,GAAC,OAAO,OAAO,CAAC,EAAE,KAAG,QAAQ,IAAI,OAAO,CAAC,EAAE,CAAC,MAAM,GAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,oBAAoB,CAAC,OAAO,CAAC,EAAE,CAAA;QACtH,OAAO,CAAC,EAAC,EAAE,EAAC,MAAM,EAAC,oBAAoB,CAAC,OAAO,CAAC,EAAC,CAAC,CAAA;IACpD,CAAC,CAAC,CAAA;IACF,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAC,EAAE,EAAC,SAAS,oBAAoB,CAAC,IAAI,CAAC,EAAE,EAAC,MAAM,EAAC,oBAAoB,CAAC,IAAI,CAAC,EAAC,CAAC,CAAA;AACvH,CAAC"}
@@ -0,0 +1,58 @@
1
+ import { z } from 'zod';
2
+ export declare const MICRO_JUDGE_VERSION = "kiokuko-fd-v1";
3
+ export type Expression = number | boolean | {
4
+ variable: number;
5
+ } | {
6
+ op: 'eq' | 'ne' | 'lt' | 'and' | 'or' | 'implies' | 'diag';
7
+ args: Expression[];
8
+ };
9
+ export interface FiniteDomainProblem {
10
+ domains: {
11
+ kind: 'bool' | 'int';
12
+ values: number[];
13
+ }[];
14
+ constraints: Expression[];
15
+ query: Expression;
16
+ workBudget?: number;
17
+ }
18
+ declare const reply: z.ZodObject<{
19
+ version: z.ZodLiteral<"kiokuko-fd-v1">;
20
+ inputId: z.ZodString;
21
+ inputDigest: z.ZodString;
22
+ complete: z.ZodBoolean;
23
+ status: z.ZodEnum<{
24
+ entailed: "entailed";
25
+ refuted: "refuted";
26
+ undetermined: "undetermined";
27
+ inconsistent: "inconsistent";
28
+ resource_limit: "resource_limit";
29
+ }>;
30
+ solutions: z.ZodNumber;
31
+ truth: z.ZodNumber;
32
+ nodes: z.ZodNumber;
33
+ work: z.ZodNumber;
34
+ elapsedMicros: z.ZodNumber;
35
+ peakRssBytes: z.ZodNull;
36
+ }, z.core.$strict>;
37
+ export type MicroJudgeResult = {
38
+ state: 'available';
39
+ binaryHash: string;
40
+ outputDigest: string;
41
+ elapsedMs: number;
42
+ result: z.infer<typeof reply>;
43
+ } | {
44
+ state: 'unavailable';
45
+ reason: 'unsupported_platform' | 'artifact_unavailable' | 'artifact_mismatch' | 'invalid_input' | 'cancelled' | 'timeout' | 'process_failed' | 'output_limit' | 'malformed_response';
46
+ inputDigest?: string;
47
+ binaryHash?: string;
48
+ elapsedMs: number;
49
+ };
50
+ /** Typed, bounded wire compiler. A Boolean unknown is the domain [0,1], never false. */
51
+ export declare function encodeFiniteDomain(problem: FiniteDomainProblem): string;
52
+ /** No PATH fallback, compiler, download, environment override, or provider authority. */
53
+ export declare function runMicroJudge(problem: FiniteDomainProblem, inputId: string, signal: AbortSignal, options?: {
54
+ artifactRoot?: string;
55
+ timeoutMs?: number;
56
+ }): Promise<MicroJudgeResult>;
57
+ export {};
58
+ //# sourceMappingURL=micro-judge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"micro-judge.d.ts","sourceRoot":"","sources":["../../../src/dsh/decisions/micro-judge.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,eAAO,MAAM,mBAAmB,kBAAkB,CAAA;AAClD,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,OAAO,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,IAAI,GAAC,IAAI,GAAC,IAAI,GAAC,KAAK,GAAC,IAAI,GAAC,SAAS,GAAC,MAAM,CAAC;IAAC,IAAI,EAAE,UAAU,EAAE,CAAA;CAAE,CAAA;AACzI,MAAM,WAAW,mBAAmB;IAAG,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,GAAC,KAAK,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE,EAAE,CAAC;IAAC,WAAW,EAAE,UAAU,EAAE,CAAC;IAAC,KAAK,EAAE,UAAU,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE;AAG/J,QAAA,MAAM,KAAK;;;;;;;;;;;;;;;;;;kBAGqJ,CAAA;AAChK,MAAM,MAAM,gBAAgB,GAAG;IAAE,KAAK,EAAE,WAAW,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,KAAK,CAAC,CAAA;CAAE,GAC7I;IAAE,KAAK,EAAE,aAAa,CAAC;IAAC,MAAM,EAAE,sBAAsB,GAAC,sBAAsB,GAAC,mBAAmB,GAAC,eAAe,GAAC,WAAW,GAAC,SAAS,GAAC,gBAAgB,GAAC,cAAc,GAAC,oBAAoB,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAA;AAChQ,wFAAwF;AACxF,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,mBAAmB,GAAG,MAAM,CAwBvE;AAED,yFAAyF;AACzF,wBAAsB,aAAa,CAAC,OAAO,EAAE,mBAAmB,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EACpG,OAAO,GAAE;IAAE,YAAY,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAoDxF"}
@@ -0,0 +1,160 @@
1
+ import { spawn } from 'node:child_process';
2
+ import { createHash } from 'node:crypto';
3
+ import { constants } from 'node:fs';
4
+ import { open, lstat, readFile } from 'node:fs/promises';
5
+ import { dirname, join } from 'node:path';
6
+ import { fileURLToPath } from 'node:url';
7
+ import { z } from 'zod';
8
+ export const MICRO_JUDGE_VERSION = 'kiokuko-fd-v1';
9
+ const hash = (value) => createHash('sha256').update(value).digest('hex');
10
+ const hex = z.string().regex(/^[a-f0-9]{64}$/u);
11
+ const reply = z.object({ version: z.literal(MICRO_JUDGE_VERSION), inputId: hex, inputDigest: hex,
12
+ complete: z.boolean(), status: z.enum(['entailed', 'refuted', 'undetermined', 'inconsistent', 'resource_limit']),
13
+ solutions: z.number().int().min(0).max(100000), truth: z.number().int().min(0).max(100000),
14
+ nodes: z.number().int().nonnegative(), work: z.number().int().nonnegative(), elapsedMicros: z.number().int().nonnegative(), peakRssBytes: z.null() }).strict();
15
+ /** Typed, bounded wire compiler. A Boolean unknown is the domain [0,1], never false. */
16
+ export function encodeFiniteDomain(problem) {
17
+ if (problem.domains.length > 128 || problem.constraints.length > 256)
18
+ throw new Error('bound');
19
+ const budget = problem.workBudget ?? 200000;
20
+ if (!Number.isSafeInteger(budget) || budget < 1 || budget > 2000000)
21
+ throw new Error('budget');
22
+ let nodes = 0;
23
+ function expr(e, depth = 0) {
24
+ if (++nodes > 2048 || depth > 32)
25
+ throw new Error('expression bound');
26
+ if (typeof e === 'boolean')
27
+ return { wire: String(e), kind: 'bool', vars: new Set() };
28
+ if (typeof e === 'number') {
29
+ if (!Number.isSafeInteger(e) || Math.abs(e) > 1000000000)
30
+ throw new Error('integer');
31
+ return { wire: String(e), kind: 'int', vars: new Set() };
32
+ }
33
+ if ('variable' in e) {
34
+ const d = problem.domains[e.variable];
35
+ if (!Number.isSafeInteger(e.variable) || !d)
36
+ throw new Error('variable');
37
+ return { wire: `@${e.variable}`, kind: d.kind, vars: new Set([e.variable]) };
38
+ }
39
+ if (!['eq', 'ne', 'lt', 'and', 'or', 'implies', 'diag'].includes(e.op) || e.args.length !== (e.op === 'diag' ? 3 : 2))
40
+ throw new Error('operator');
41
+ const xs = e.args.map(x => expr(x, depth + 1));
42
+ if ((e.op === 'eq' || e.op === 'ne') ? xs[0].kind !== xs[1].kind : xs.some(x => x.kind !== (e.op === 'lt' || e.op === 'diag' ? 'int' : 'bool')))
43
+ throw new Error('type');
44
+ return { wire: `${e.op} ${xs.map(x => x.wire).join(' ')}`, kind: 'bool', vars: new Set(xs.flatMap(x => [...x.vars])) };
45
+ }
46
+ const domains = problem.domains.map(d => {
47
+ if (!['bool', 'int'].includes(d.kind) || !d.values.length || d.values.length > 32 || d.values.some(v => !Number.isSafeInteger(v) || Math.abs(v) > 1000000000 || d.kind === 'bool' && v !== 0 && v !== 1))
48
+ throw new Error('domain');
49
+ return `${d.kind === 'bool' ? 'b' : 'i'} ${d.values.length} ${d.values.join(' ')}`;
50
+ });
51
+ const constraints = problem.constraints.map(c => { const x = expr(c); if (x.kind !== 'bool' || x.vars.size > 3)
52
+ throw new Error('constraint'); return x.wire; });
53
+ const query = expr(problem.query);
54
+ if (query.kind !== 'bool')
55
+ throw new Error('query');
56
+ const payload = [budget, domains.length, constraints.length, ...domains, ...constraints, query.wire].join(' ');
57
+ if (Buffer.byteLength(payload) > 120000)
58
+ throw new Error('bytes');
59
+ return payload;
60
+ }
61
+ const manifestSchema = z.object({ version: z.literal(MICRO_JUDGE_VERSION), artifacts: z.array(z.object({ platform: z.enum(['darwin', 'linux']), arch: z.enum(['arm64', 'x64']), sha256: hex, bytes: z.number().int().positive(), file: z.string(), nativeVerified: z.boolean(), sourceDigest: hex.optional(), compiler: z.string().max(256).optional() }).strict().refine(entry => entry.platform !== 'darwin' || entry.arch === 'arm64')).max(3) }).strict();
62
+ /** No PATH fallback, compiler, download, environment override, or provider authority. */
63
+ export async function runMicroJudge(problem, inputId, signal, options = {}) {
64
+ const started = performance.now();
65
+ let inputDigest, binaryHash;
66
+ const unavailable = (reason) => ({ state: 'unavailable', reason, elapsedMs: Math.ceil(performance.now() - started), ...(inputDigest ? { inputDigest } : {}), ...(binaryHash ? { binaryHash } : {}) });
67
+ let payload;
68
+ try {
69
+ hex.parse(inputId);
70
+ payload = encodeFiniteDomain(problem);
71
+ inputDigest = hash(payload);
72
+ }
73
+ catch {
74
+ return unavailable('invalid_input');
75
+ }
76
+ if (signal.aborted)
77
+ return unavailable('cancelled');
78
+ if (!['linux-x64', 'linux-arm64', 'darwin-arm64'].includes(`${process.platform}-${process.arch}`))
79
+ return unavailable('unsupported_platform');
80
+ const root = options.artifactRoot ?? fileURLToPath(new URL('../../../micro-judge/', import.meta.url));
81
+ let executable;
82
+ try {
83
+ const rootStat = await lstat(root);
84
+ if (!rootStat.isDirectory() || rootStat.isSymbolicLink())
85
+ return unavailable('artifact_mismatch');
86
+ const manifestFile = join(root, 'manifest.json'), ms = await lstat(manifestFile);
87
+ if (!ms.isFile() || ms.isSymbolicLink() || ms.size > 16384)
88
+ return unavailable('artifact_mismatch');
89
+ const manifest = manifestSchema.parse(JSON.parse(await readFile(manifestFile, 'utf8')));
90
+ const entries = manifest.artifacts.filter(a => a.platform === process.platform && a.arch === process.arch);
91
+ if (entries.length !== 1)
92
+ return unavailable('unsupported_platform');
93
+ const entry = entries[0], expected = `${process.platform}-${process.arch}/kiokuko-micro-judge${process.platform === 'win32' ? '.exe' : ''}`;
94
+ if (entry.file !== expected || entry.bytes > 8000000)
95
+ return unavailable('artifact_mismatch');
96
+ executable = join(root, entry.file);
97
+ const parent = await lstat(dirname(executable));
98
+ if (!parent.isDirectory() || parent.isSymbolicLink())
99
+ return unavailable('artifact_mismatch');
100
+ const handle = await open(executable, constants.O_RDONLY | constants.O_NOFOLLOW);
101
+ try {
102
+ const stat = await handle.stat();
103
+ if (!stat.isFile() || stat.size !== entry.bytes || process.platform !== 'win32' && (stat.mode & 0o111) === 0)
104
+ return unavailable('artifact_mismatch');
105
+ binaryHash = hash(await handle.readFile());
106
+ }
107
+ finally {
108
+ await handle.close();
109
+ }
110
+ if (binaryHash !== entry.sha256)
111
+ return unavailable('artifact_mismatch');
112
+ }
113
+ catch {
114
+ return unavailable('artifact_unavailable');
115
+ }
116
+ const deadline = options.timeoutMs ?? 1500;
117
+ if (!Number.isSafeInteger(deadline) || deadline < 1 || deadline > 5000)
118
+ return unavailable('invalid_input');
119
+ const execution = await new Promise(resolve => {
120
+ let output = Buffer.alloc(0), reason, done = false;
121
+ const child = spawn(executable, [], { stdio: ['pipe', 'pipe', 'ignore'], env: {}, windowsHide: true });
122
+ const stop = (why) => { reason ??= why; child.kill('SIGKILL'); };
123
+ const abort = () => stop('cancelled'), timer = setTimeout(() => stop('timeout'), deadline);
124
+ signal.addEventListener('abort', abort, { once: true });
125
+ if (signal.aborted)
126
+ abort();
127
+ const finish = (value) => { if (done)
128
+ return; done = true; clearTimeout(timer); signal.removeEventListener('abort', abort); resolve(value); };
129
+ child.on('error', () => finish({ reason: reason ?? 'process_failed' }));
130
+ child.stdin.on('error', () => stop('process_failed'));
131
+ child.stdout.on('data', (chunk) => { if (output.length + chunk.length > 16384) {
132
+ stop('output_limit');
133
+ return;
134
+ } output = Buffer.concat([output, chunk]); });
135
+ child.on('close', code => finish(reason ? { reason } : code !== 0 ? { reason: 'process_failed' } : { output: output.toString('utf8') }));
136
+ child.stdin.end(`${MICRO_JUDGE_VERSION}\t${inputId}\t${inputDigest}\t${payload}\n`);
137
+ });
138
+ if (signal.aborted)
139
+ return unavailable('cancelled');
140
+ if (execution.reason)
141
+ return unavailable(execution.reason);
142
+ try {
143
+ // Detect replacement during the call too. Digest identities are integrity evidence, not signatures.
144
+ if (hash(await readFile(executable)) !== binaryHash)
145
+ return unavailable('artifact_mismatch');
146
+ const result = reply.parse(JSON.parse(execution.output));
147
+ if (result.inputId !== inputId || result.inputDigest !== inputDigest || result.truth > result.solutions
148
+ || result.complete !== (result.status !== 'resource_limit') || result.work > (problem.workBudget ?? 200000) + 1
149
+ || result.status === 'entailed' && (!result.solutions || result.truth !== result.solutions)
150
+ || result.status === 'refuted' && (!result.solutions || result.truth !== 0)
151
+ || result.status === 'inconsistent' && (result.solutions !== 0 || result.truth !== 0)
152
+ || result.status === 'undetermined' && (!result.truth || result.truth >= result.solutions))
153
+ return unavailable('malformed_response');
154
+ return { state: 'available', binaryHash: binaryHash, outputDigest: hash(execution.output), elapsedMs: Math.ceil(performance.now() - started), result };
155
+ }
156
+ catch {
157
+ return unavailable('malformed_response');
158
+ }
159
+ }
160
+ //# sourceMappingURL=micro-judge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"micro-judge.js","sourceRoot":"","sources":["../../../src/dsh/decisions/micro-judge.ts"],"names":[],"mappings":"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"}
@@ -137,8 +137,7 @@ export declare const RequestIntentContextSchema: z.ZodObject<{
137
137
  }, z.core.$strict>>>;
138
138
  }, z.core.$strict>;
139
139
  export type RequestIntentContext = z.infer<typeof RequestIntentContextSchema>;
140
- /** Bind exact current user messages; injected/plugin messages are never candidates. */
141
- export declare function requestIntentMessageRefs(messages: readonly unknown[], task: string): RequestIntentContext['messageRefs'];
140
+ export { requestIntentMessageRefs } from './message-refs.js';
142
141
  export declare function createRequestIntentContext(input: {
143
142
  readonly task: string;
144
143
  readonly messageRefs: RequestIntentContext['messageRefs'];
@@ -1 +1 @@
1
- {"version":3,"file":"request-intent.d.ts","sourceRoot":"","sources":["../../../src/dsh/decisions/request-intent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AACvD,OAAO,EAAiB,KAAK,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAClE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AACnD,OAAO,EAA8D,KAAK,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAEjH,eAAO,MAAM,6BAA6B,iCAAiC,CAAA;AAC3E,eAAO,MAAM,wBAAwB,QAAY,CAAA;AAEjD,eAAO,MAAM,mBAAmB;;;;;EAAwE,CAAA;AACxG,eAAO,MAAM,aAAa;;;;;;;EAA2E,CAAA;AACrG,eAAO,MAAM,kBAAkB;;;;EAAoD,CAAA;AACnF,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAA;AACrE,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAA;AACzD,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAA;AAwBnE,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAkBrC,CAAA;AACF,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAA;AAE7E,uFAAuF;AACvF,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,SAAS,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,oBAAoB,CAAC,aAAa,CAAC,CAYxH;AAED,wBAAgB,0BAA0B,CAAC,KAAK,EAAE;IAChD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,WAAW,EAAE,oBAAoB,CAAC,aAAa,CAAC,CAAA;IACzD,QAAQ,CAAC,UAAU,CAAC,EAAE,oBAAoB,CAAC,YAAY,CAAC,CAAA;IACxD,QAAQ,CAAC,UAAU,CAAC,EAAE,oBAAoB,CAAC,YAAY,CAAC,CAAA;IACxD,QAAQ,CAAC,SAAS,CAAC,EAAE,oBAAoB,CAAC,WAAW,CAAC,CAAA;CACvD,GAAG,oBAAoB,GAAG,SAAS,CAOnC;AAED,eAAO,MAAM,6BAA6B;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAaxC,CAAA;AACF,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,6BAA6B,CAAC,CAAA;AAEnF,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAA;IAC9B,QAAQ,CAAC,WAAW,EAAE,SAAS;QAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;IACjF,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAA;IAClC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAA;IAC9B,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAA;IAC/B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAA;IAC9B,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAA;IAChC,QAAQ,CAAC,YAAY,EAAE,SAAS;QAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;CACrH;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,QAAQ,EAAE,mBAAmB,CAAA;IACtC,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAA;IAC9B,QAAQ,CAAC,WAAW,EAAE,kBAAkB,CAAA;IACxC,QAAQ,CAAC,MAAM,EAAE,mBAAmB,GAAG,YAAY,GAAG,YAAY,CAAA;IAClE,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAA;IAC9B,QAAQ,CAAC,QAAQ,EAAE,qBAAqB,CAAA;IACxC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAA;IAC9B,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAA;IAClC,QAAQ,CAAC,aAAa,CAAC,EAAE,aAAa,CAAA;CACvC;AAED,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,OAAO,EAAE,oBAAoB,CAAA;IACtC,QAAQ,CAAC,QAAQ,EAAE,qBAAqB,CAAA;CACzC;AAsBD,8EAA8E;AAC9E,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,OAAO,GAAG,aAAa,GAAG,SAAS,CA4B/E;AAED,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,oBAAoB,GAAG,MAAM,EAAE,CAWjF;AAED,6FAA6F;AAC7F,wBAAgB,iCAAiC,CAAC,OAAO,EAAE,oBAAoB,GAAG,MAAM,EAAE,CAEzF;AAoBD,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,oBAAoB,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,UAAQ,GAAG,qBAAqB,CAGlI;AAED,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,qBAAqB,GAAG,SAAS,GAAG,OAAO,CAG3F;AAED,MAAM,MAAM,0BAA0B,GAAG;IAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,qBAAqB,CAAA;CAAE,GACpG;IAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,oBAAoB,GAAG,mBAAmB,GAAG,mBAAmB,GAAG,mBAAmB,GAAG,gBAAgB,GAAG,wBAAwB,CAAA;CAAE,CAAA;AAEjL,+GAA+G;AAC/G,wBAAgB,8BAA8B,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,oBAAoB,GAAG,0BAA0B,CAuBtH;AAED,6GAA6G;AAC7G,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,oBAAoB,GAAG,qBAAqB,GAAG,SAAS,CAGzH;AAED,iFAAiF;AACjF,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,oBAAoB,GAAG,qBAAqB,GAAG,SAAS,CAmC1H;AAED,oGAAoG;AACpG,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,qBAAqB,GAAG,SAAS,EAAE,QAAQ,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAW5H;AAED,wBAAsB,qBAAqB,CAAC,OAAO,EAAE,eAAe,GAAG,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EACtH,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC,CA4DjE"}
1
+ {"version":3,"file":"request-intent.d.ts","sourceRoot":"","sources":["../../../src/dsh/decisions/request-intent.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,7 @@ import { z } from 'zod';
2
2
  import { canonicalContentHash } from '../../serialization/validate.js';
3
3
  import { DecisionError } from './contracts.js';
4
4
  import { TaskSnapshotSchema, TASK_OPERATIONS, validateTaskOperation } from '../task-state.js';
5
+ import { correlateRequestIntent, requestIntentDiagnosticId } from './diagnostic-correlation.js';
5
6
  export const REQUEST_INTENT_POLICY_VERSION = 'request-intent-task-state-v3';
6
7
  export const MAX_REQUEST_INTENT_BYTES = 32 * 1024;
7
8
  export const RequestRelationship = z.enum(['new', 'same_scope_continuation', 'scope_change', 'unknown']);
@@ -47,23 +48,7 @@ export const RequestIntentContextSchema = z.object({
47
48
  context.addIssue({ code: 'custom', message: 'Request intent context exceeds its byte limit' });
48
49
  }
49
50
  });
50
- /** Bind exact current user messages; injected/plugin messages are never candidates. */
51
- export function requestIntentMessageRefs(messages, task) {
52
- const refs = messages.flatMap(value => {
53
- if (!value || typeof value !== 'object' || Array.isArray(value))
54
- return [];
55
- const message = value;
56
- const source = message.source && typeof message.source === 'object' && !Array.isArray(message.source)
57
- ? message.source : undefined;
58
- if (message.role !== 'user' || source !== undefined && source.kind !== 'user')
59
- return [];
60
- const id = typeof message.id === 'string' && message.id.length > 0 ? message.id : `message:${canonicalContentHash(message)}`;
61
- return [{ id, digest: canonicalContentHash(message) }];
62
- });
63
- if (refs.length)
64
- return refs.slice(-16);
65
- return [{ id: `input:${canonicalContentHash(task)}`, digest: canonicalContentHash(task) }];
66
- }
51
+ export { requestIntentMessageRefs } from './message-refs.js';
67
52
  export function createRequestIntentContext(input) {
68
53
  // Request-scoped diagnostics are not new task authority and must not invalidate their own retry context.
69
54
  const { unresolved: _unresolved, ...activeTask } = input.activeTask ?? {};
@@ -263,7 +248,11 @@ export function rebindRequestIntentDecision(raw, context) {
263
248
  if (!validated.ok)
264
249
  return undefined;
265
250
  }
266
- return { ...value, evidence: evidenceFor(context, selected) };
251
+ const rebound = { ...value, evidence: evidenceFor(context, selected) };
252
+ const diagnosticId = requestIntentDiagnosticId(raw);
253
+ if (diagnosticId)
254
+ correlateRequestIntent(rebound, diagnosticId);
255
+ return rebound;
267
256
  }
268
257
  /** A selected action can advise intake type; it never supplies a target or execution permission. */
269
258
  export function requestIntentTaskType(decision, fallback) {
@@ -279,6 +268,13 @@ export function requestIntentTaskType(decision, fallback) {
279
268
  }
280
269
  }
281
270
  export async function classifyRequestIntent(service, requestId, rawContext, signal) {
271
+ let diagnosticId;
272
+ const result = await classifyRequestIntentAttempt(service, requestId, rawContext, signal, id => { diagnosticId = id; });
273
+ if (result && diagnosticId)
274
+ correlateRequestIntent(result, diagnosticId);
275
+ return result;
276
+ }
277
+ async function classifyRequestIntentAttempt(service, requestId, rawContext, signal, observeId) {
282
278
  const parsed = RequestIntentContextSchema.safeParse(rawContext);
283
279
  if (!parsed.success)
284
280
  return undefined;
@@ -295,6 +291,8 @@ export async function classifyRequestIntent(service, requestId, rawContext, sign
295
291
  return unresolvedRequestIntent(context, 'context_not_usable');
296
292
  const outcome = await service.evaluate(requestId, batch, signal, REQUEST_INTENT_POLICY_VERSION, undefined, {
297
293
  onProviderDispatch: () => { providerSent = true; },
294
+ onEvaluation: observation => { if (observation.decisionId)
295
+ observeId(observation.decisionId); },
298
296
  });
299
297
  if (outcome.status !== 'completed')
300
298
  return unresolvedRequestIntent(context, outcome.reason, providerSent);