@sayknow-cli/coding-agent 0.3.7 → 0.3.8

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 (248) hide show
  1. package/dist/types/append-only-mode.d.ts +31 -0
  2. package/dist/types/capability/rule.d.ts +8 -0
  3. package/dist/types/cli/completion-cli.d.ts +41 -0
  4. package/dist/types/cli/config-cli.d.ts +1 -0
  5. package/dist/types/cli/fixture-report.d.ts +20 -0
  6. package/dist/types/cli/fixture-report.test.d.ts +1 -0
  7. package/dist/types/cli/nofile-limit.d.ts +11 -0
  8. package/dist/types/cli/notify-cli.d.ts +7 -0
  9. package/dist/types/cli/update-cli.d.ts +22 -0
  10. package/dist/types/cli.d.ts +124 -1
  11. package/dist/types/commands/completion.d.ts +29 -0
  12. package/dist/types/commands/config.d.ts +3 -0
  13. package/dist/types/commands/deep-interview.d.ts +3 -0
  14. package/dist/types/config/file-lock.d.ts +7 -6
  15. package/dist/types/config/keybindings.d.ts +2 -2
  16. package/dist/types/config/model-profile-activation.d.ts +6 -0
  17. package/dist/types/config/model-profiles.d.ts +1 -0
  18. package/dist/types/config/settings-schema.d.ts +105 -1
  19. package/dist/types/config/settings.d.ts +8 -0
  20. package/dist/types/discovery/index.d.ts +1 -0
  21. package/dist/types/export/html/template.generated.d.ts +1 -1
  22. package/dist/types/export/ttsr.d.ts +14 -3
  23. package/dist/types/extensibility/extensions/runner.d.ts +2 -1
  24. package/dist/types/extensibility/extensions/types.d.ts +8 -0
  25. package/dist/types/goals/runtime.d.ts +1 -0
  26. package/dist/types/hooks/native-skill-hook.d.ts +12 -0
  27. package/dist/types/main.d.ts +4 -1
  28. package/dist/types/modes/components/assistant-message.d.ts +5 -1
  29. package/dist/types/modes/components/model-selector.d.ts +4 -0
  30. package/dist/types/modes/components/queued-message-selector.d.ts +12 -0
  31. package/dist/types/modes/components/settings-selector.d.ts +2 -0
  32. package/dist/types/modes/components/status-line.d.ts +9 -0
  33. package/dist/types/modes/controllers/command-controller.d.ts +1 -0
  34. package/dist/types/modes/controllers/event-controller.d.ts +5 -0
  35. package/dist/types/modes/controllers/input-controller.d.ts +1 -3
  36. package/dist/types/modes/interactive-mode.d.ts +2 -0
  37. package/dist/types/modes/print-mode.d.ts +13 -1
  38. package/dist/types/modes/prompt-action-autocomplete.d.ts +1 -1
  39. package/dist/types/modes/rpc/rpc-types.d.ts +14 -0
  40. package/dist/types/modes/shared/agent-wire/event-contract.d.ts +19 -0
  41. package/dist/types/modes/shared/agent-wire/event-envelope.d.ts +23 -1
  42. package/dist/types/modes/types.d.ts +1 -0
  43. package/dist/types/modes/utils/ui-helpers.d.ts +1 -0
  44. package/dist/types/notifications/config.d.ts +14 -1
  45. package/dist/types/notifications/daemon-paths.d.ts +1 -0
  46. package/dist/types/notifications/index.d.ts +6 -3
  47. package/dist/types/notifications/lifecycle-commands.d.ts +11 -3
  48. package/dist/types/notifications/telegram-daemon.d.ts +23 -3
  49. package/dist/types/notifications/telegram-reference.d.ts +0 -5
  50. package/dist/types/notifications/threaded-render.d.ts +6 -0
  51. package/dist/types/runtime-api-key.d.ts +7 -0
  52. package/dist/types/sdk.d.ts +3 -0
  53. package/dist/types/session/agent-session.d.ts +61 -6
  54. package/dist/types/session/agent-storage.d.ts +1 -0
  55. package/dist/types/session/file-mention-pruning.d.ts +8 -0
  56. package/dist/types/session/messages.d.ts +4 -0
  57. package/dist/types/session/session-manager.d.ts +17 -1
  58. package/dist/types/skc-runtime/deep-interview-ambiguity.d.ts +39 -0
  59. package/dist/types/skc-runtime/deep-interview-recorder.d.ts +10 -1
  60. package/dist/types/skc-runtime/deep-interview-state.d.ts +17 -2
  61. package/dist/types/skc-runtime/session-state-sidecar.d.ts +7 -0
  62. package/dist/types/skc-runtime/state-writer.d.ts +3 -0
  63. package/dist/types/skc-runtime/ultragoal-receipt-freshness.d.ts +42 -0
  64. package/dist/types/skc-runtime/ultragoal-runtime.d.ts +120 -13
  65. package/dist/types/skill-state/active-state.d.ts +18 -1
  66. package/dist/types/system-prompt.d.ts +18 -2
  67. package/dist/types/task/executor.d.ts +3 -0
  68. package/dist/types/task/fork-context-budget.d.ts +7 -0
  69. package/dist/types/task/token-log.d.ts +30 -0
  70. package/dist/types/task/token-log.test.d.ts +1 -0
  71. package/dist/types/tools/bisect.d.ts +81 -0
  72. package/dist/types/tools/computer.d.ts +2 -2
  73. package/dist/types/tools/index.d.ts +1 -0
  74. package/dist/types/tools/search.d.ts +2 -2
  75. package/dist/types/tools/ultragoal-ask-guard.d.ts +9 -2
  76. package/dist/types/utils/file-mentions.d.ts +14 -0
  77. package/dist/types/utils/git.d.ts +32 -0
  78. package/dist/types/web/scrapers/youtube.d.ts +8 -0
  79. package/dist/types/workflow/workflow-intent-diff.d.ts +8 -2
  80. package/dist/types/workflow/workflow-intent-report-consumer.d.ts +50 -0
  81. package/dist/types/workflow/workflow-intent-report-schema.d.ts +2 -0
  82. package/dist/types/workflow/workflow-intent-report.d.ts +48 -0
  83. package/package.json +8 -8
  84. package/src/append-only-mode.ts +58 -0
  85. package/src/autoresearch/prompt.md +1 -1
  86. package/src/autoresearch/tools/log-experiment.ts +1 -1
  87. package/src/capability/rule.ts +9 -0
  88. package/src/cli/completion-cli.ts +234 -0
  89. package/src/cli/config-cli.ts +61 -9
  90. package/src/cli/fast-help.ts +1 -0
  91. package/src/cli/fixture-report.test.ts +230 -0
  92. package/src/cli/fixture-report.ts +171 -0
  93. package/src/cli/nofile-limit.ts +48 -0
  94. package/src/cli/notify-cli.ts +92 -8
  95. package/src/cli/telegram-cli.ts +1 -1
  96. package/src/cli/update-cli.ts +85 -9
  97. package/src/cli.ts +29 -1
  98. package/src/commands/completion.ts +84 -0
  99. package/src/commands/config.ts +2 -0
  100. package/src/commands/contribution-prep.ts +1 -1
  101. package/src/commands/deep-interview.ts +2 -1
  102. package/src/config/file-lock.ts +73 -34
  103. package/src/config/keybindings.ts +2 -2
  104. package/src/config/model-profile-activation.ts +65 -0
  105. package/src/config/model-profiles.ts +31 -2
  106. package/src/config/settings-schema.ts +68 -1
  107. package/src/config/settings.ts +22 -0
  108. package/src/defaults/skc/skills/team/SKILL.md +17 -14
  109. package/src/defaults/skc/skills/ultragoal/SKILL.md +59 -4
  110. package/src/defaults/skc/skills/ultragoal/pipeline-validation-contracts.md +30 -0
  111. package/src/defaults/skc-defaults.ts +9 -0
  112. package/src/discovery/helpers.ts +10 -0
  113. package/src/discovery/index.ts +1 -0
  114. package/src/export/html/template.generated.ts +1 -1
  115. package/src/export/html/template.js +60 -2
  116. package/src/export/ttsr.ts +96 -18
  117. package/src/extensibility/extensions/runner.ts +183 -219
  118. package/src/extensibility/extensions/types.ts +9 -0
  119. package/src/extensibility/skc-plugins/runtime-adapters.ts +156 -44
  120. package/src/goals/runtime.ts +10 -2
  121. package/src/hindsight/backend.ts +1 -3
  122. package/src/hooks/native-skill-hook.ts +124 -4
  123. package/src/internal-urls/docs-index.generated.ts +14 -5
  124. package/src/main.ts +95 -43
  125. package/src/memories/index.ts +12 -1
  126. package/src/modes/components/assistant-message.ts +241 -82
  127. package/src/modes/components/custom-editor.ts +1 -0
  128. package/src/modes/components/model-selector.ts +54 -11
  129. package/src/modes/components/queued-message-selector.ts +92 -0
  130. package/src/modes/components/settings-selector.ts +4 -0
  131. package/src/modes/components/status-line.ts +167 -54
  132. package/src/modes/components/tool-execution.ts +44 -19
  133. package/src/modes/components/welcome.ts +181 -44
  134. package/src/modes/controllers/command-controller.ts +40 -4
  135. package/src/modes/controllers/event-controller.ts +66 -47
  136. package/src/modes/controllers/extension-ui-controller.ts +4 -10
  137. package/src/modes/controllers/input-controller.ts +180 -18
  138. package/src/modes/controllers/selector-controller.ts +127 -24
  139. package/src/modes/interactive-mode.ts +51 -16
  140. package/src/modes/print-mode.ts +43 -4
  141. package/src/modes/prompt-action-autocomplete.ts +21 -20
  142. package/src/modes/rpc/rpc-mode.ts +29 -3
  143. package/src/modes/rpc/rpc-types.ts +9 -0
  144. package/src/modes/shared/agent-wire/command-validation.ts +4 -0
  145. package/src/modes/shared/agent-wire/event-contract.ts +22 -0
  146. package/src/modes/shared/agent-wire/event-envelope.ts +82 -0
  147. package/src/modes/shared/agent-wire/scopes.ts +1 -0
  148. package/src/modes/types.ts +1 -0
  149. package/src/modes/utils/hotkeys-markdown.ts +1 -0
  150. package/src/modes/utils/ui-helpers.ts +20 -7
  151. package/src/notifications/config.ts +25 -5
  152. package/src/notifications/daemon-paths.ts +2 -0
  153. package/src/notifications/index.ts +117 -14
  154. package/src/notifications/lifecycle-commands.ts +37 -7
  155. package/src/notifications/lifecycle-orchestrator.ts +19 -6
  156. package/src/notifications/telegram-daemon-control.ts +5 -3
  157. package/src/notifications/telegram-daemon.ts +302 -51
  158. package/src/notifications/telegram-reference.ts +0 -16
  159. package/src/notifications/threaded-render.ts +17 -1
  160. package/src/prompts/agents/architect.md +19 -10
  161. package/src/prompts/agents/critic.md +16 -18
  162. package/src/prompts/agents/executor.md +14 -11
  163. package/src/prompts/agents/planner.md +18 -13
  164. package/src/prompts/ci-green-request.md +3 -8
  165. package/src/prompts/goals/goal-continuation.md +0 -5
  166. package/src/prompts/goals/goal-mode-active.md +0 -5
  167. package/src/prompts/system/agent-creation-architect.md +2 -2
  168. package/src/prompts/system/plan-mode-active.md +1 -1
  169. package/src/prompts/system/plan-mode-subagent.md +3 -3
  170. package/src/prompts/system/project-prompt.md +0 -13
  171. package/src/prompts/system/subagent-system-prompt.md +3 -2
  172. package/src/prompts/system/system-prompt.md +29 -17
  173. package/src/prompts/system/volatile-project-context.md +10 -0
  174. package/src/prompts/system/web-search.md +4 -7
  175. package/src/prompts/tools/apply-patch.md +6 -0
  176. package/src/prompts/tools/ast-edit.md +1 -0
  177. package/src/prompts/tools/bash.md +1 -1
  178. package/src/prompts/tools/bisect.md +22 -0
  179. package/src/prompts/tools/browser.md +1 -1
  180. package/src/prompts/tools/computer.md +2 -2
  181. package/src/prompts/tools/cron.md +0 -2
  182. package/src/prompts/tools/eval.md +2 -2
  183. package/src/prompts/tools/find.md +1 -1
  184. package/src/prompts/tools/github.md +6 -6
  185. package/src/prompts/tools/goal.md +1 -3
  186. package/src/prompts/tools/image-gen.md +12 -5
  187. package/src/prompts/tools/irc.md +5 -4
  188. package/src/prompts/tools/job.md +2 -2
  189. package/src/prompts/tools/lsp.md +1 -1
  190. package/src/prompts/tools/monitor.md +2 -2
  191. package/src/prompts/tools/patch.md +2 -2
  192. package/src/prompts/tools/replace.md +2 -21
  193. package/src/prompts/tools/rewind.md +1 -1
  194. package/src/prompts/tools/search-tool-bm25.md +1 -11
  195. package/src/prompts/tools/search.md +1 -1
  196. package/src/prompts/tools/skill.md +3 -2
  197. package/src/prompts/tools/ssh.md +2 -1
  198. package/src/prompts/tools/subagent.md +2 -2
  199. package/src/prompts/tools/task.md +4 -5
  200. package/src/prompts/tools/todo-write.md +1 -1
  201. package/src/prompts/tools/vim.md +1 -0
  202. package/src/prompts/tools/web-search.md +2 -0
  203. package/src/prompts/tools/write.md +8 -2
  204. package/src/runtime-api-key.ts +16 -0
  205. package/src/sdk.ts +52 -28
  206. package/src/session/agent-session.ts +1011 -141
  207. package/src/session/agent-storage.ts +4 -0
  208. package/src/session/file-mention-pruning.ts +64 -0
  209. package/src/session/messages.ts +4 -0
  210. package/src/session/session-manager.ts +103 -4
  211. package/src/skc-runtime/deep-interview-ambiguity.ts +206 -0
  212. package/src/skc-runtime/deep-interview-recorder.ts +62 -8
  213. package/src/skc-runtime/deep-interview-state.ts +44 -2
  214. package/src/skc-runtime/session-state-sidecar.ts +263 -20
  215. package/src/skc-runtime/state-runtime.ts +12 -2
  216. package/src/skc-runtime/state-writer.ts +15 -0
  217. package/src/skc-runtime/ultragoal-guard.ts +55 -66
  218. package/src/skc-runtime/ultragoal-receipt-freshness.ts +315 -0
  219. package/src/skc-runtime/ultragoal-runtime.ts +1663 -159
  220. package/src/skc-runtime/workflow-manifest.generated.json +113 -2
  221. package/src/skc-runtime/workflow-manifest.ts +74 -1
  222. package/src/skill-state/active-state.ts +141 -5
  223. package/src/skill-state/deep-interview-mutation-guard.ts +67 -3
  224. package/src/slash-commands/builtin-registry.ts +218 -71
  225. package/src/system-prompt.ts +57 -16
  226. package/src/task/executor.ts +132 -24
  227. package/src/task/fork-context-advisory.ts +2 -7
  228. package/src/task/fork-context-budget.ts +9 -0
  229. package/src/task/index.ts +13 -6
  230. package/src/task/output-manager.ts +20 -8
  231. package/src/task/receipt.ts +26 -7
  232. package/src/task/token-log.test.ts +188 -0
  233. package/src/task/token-log.ts +179 -0
  234. package/src/tools/bisect.ts +367 -0
  235. package/src/tools/computer.ts +246 -43
  236. package/src/tools/index.ts +3 -0
  237. package/src/tools/output-meta.ts +116 -4
  238. package/src/tools/search.ts +8 -2
  239. package/src/tools/skill.ts +15 -0
  240. package/src/tools/telegram-send.ts +6 -0
  241. package/src/tools/ultragoal-ask-guard.ts +39 -5
  242. package/src/utils/file-mentions.ts +39 -7
  243. package/src/utils/git.ts +73 -0
  244. package/src/web/scrapers/youtube.ts +24 -12
  245. package/src/workflow/workflow-intent-diff.ts +29 -6
  246. package/src/workflow/workflow-intent-report-consumer.ts +221 -0
  247. package/src/workflow/workflow-intent-report-schema.ts +129 -0
  248. package/src/workflow/workflow-intent-report.ts +135 -0
@@ -0,0 +1,129 @@
1
+ import * as z from "zod/v4";
2
+ import { WORKFLOW_ESCALATION_ROUTES, WORKFLOW_INTENT_ROUTES, type WorkflowIntentDiff } from "./workflow-intent-diff";
3
+
4
+ const WORKFLOW_CLAIM_IDS = ["workflow-route", "root-cause-phase", "escalation-gate"] as const;
5
+ const WORKFLOW_OBSERVERS = ["intent-router", "root-cause-schema", "escalation-gate"] as const;
6
+
7
+ const WorkflowIntentRouteSchema = z.enum(WORKFLOW_INTENT_ROUTES);
8
+ const WorkflowEscalationRouteSchema = z.enum(WORKFLOW_ESCALATION_ROUTES);
9
+ const WorkflowRootCausePhaseSchema = z.object({
10
+ status: z.enum(["active", "inactive"]),
11
+ triggers: z.array(z.string()),
12
+ });
13
+ const WorkflowClaimsLedgerSchema = z.object({
14
+ version: z.literal(1),
15
+ claims: z.array(
16
+ z.object({
17
+ id: z.enum(WORKFLOW_CLAIM_IDS),
18
+ statement: z.string(),
19
+ status: z.literal("confirmed"),
20
+ confidence: z.literal("high"),
21
+ evidence: z.array(z.string()),
22
+ }),
23
+ ),
24
+ });
25
+ const WorkflowConsensusReportSchema = z.object({
26
+ version: z.literal(1),
27
+ route: WorkflowIntentRouteSchema,
28
+ confidence: z.literal("high"),
29
+ summary: z.string(),
30
+ observerSignals: z.array(
31
+ z.object({
32
+ observer: z.enum(WORKFLOW_OBSERVERS),
33
+ conclusion: z.string(),
34
+ evidence: z.array(z.string()),
35
+ }),
36
+ ),
37
+ escalationGate: z.object({
38
+ status: z.enum(["required", "not-required"]),
39
+ reason: z.string(),
40
+ }),
41
+ });
42
+
43
+ const WorkflowIntentDiffSchema = z
44
+ .object({
45
+ version: z.literal(1),
46
+ route: WorkflowIntentRouteSchema,
47
+ reason: z.string(),
48
+ directTracking: z.enum(["custom-entry-only", "not-direct"]),
49
+ recommendedSkill: WorkflowEscalationRouteSchema.optional(),
50
+ recommendedInvocation: z.string().optional(),
51
+ triggers: z.array(z.string()),
52
+ rootCausePhase: WorkflowRootCausePhaseSchema,
53
+ claimsLedger: WorkflowClaimsLedgerSchema,
54
+ consensusReport: WorkflowConsensusReportSchema,
55
+ promptPreview: z.string(),
56
+ })
57
+ .superRefine((intent, ctx) => {
58
+ const direct = intent.route === "direct";
59
+ const expectedTracking = direct ? "custom-entry-only" : "not-direct";
60
+ const expectedGateStatus = direct ? "not-required" : "required";
61
+
62
+ if (intent.directTracking !== expectedTracking) {
63
+ ctx.addIssue({
64
+ code: "custom",
65
+ path: ["directTracking"],
66
+ message: `directTracking must be ${expectedTracking} for route ${intent.route}`,
67
+ });
68
+ }
69
+ if (intent.consensusReport.route !== intent.route) {
70
+ ctx.addIssue({
71
+ code: "custom",
72
+ path: ["consensusReport", "route"],
73
+ message: "consensus route must match the top-level workflow route",
74
+ });
75
+ }
76
+ if (intent.consensusReport.escalationGate.status !== expectedGateStatus) {
77
+ ctx.addIssue({
78
+ code: "custom",
79
+ path: ["consensusReport", "escalationGate", "status"],
80
+ message: `escalation gate must be ${expectedGateStatus} for route ${intent.route}`,
81
+ });
82
+ }
83
+ if (direct) {
84
+ if (intent.recommendedSkill !== undefined || intent.recommendedInvocation !== undefined) {
85
+ ctx.addIssue({
86
+ code: "custom",
87
+ path: ["recommendedSkill"],
88
+ message: "direct workflow reports must not carry escalation recommendations",
89
+ });
90
+ }
91
+ } else {
92
+ if (intent.recommendedSkill !== intent.route || intent.recommendedInvocation === undefined) {
93
+ ctx.addIssue({
94
+ code: "custom",
95
+ path: ["recommendedSkill"],
96
+ message: "escalated workflow reports must carry matching recommendations",
97
+ });
98
+ }
99
+ }
100
+
101
+ for (const signal of intent.consensusReport.observerSignals) {
102
+ if (signal.observer === "intent-router" && signal.conclusion !== intent.route) {
103
+ ctx.addIssue({
104
+ code: "custom",
105
+ path: ["consensusReport", "observerSignals"],
106
+ message: "intent-router signal must match the top-level workflow route",
107
+ });
108
+ }
109
+ if (signal.observer === "root-cause-schema" && signal.conclusion !== intent.rootCausePhase.status) {
110
+ ctx.addIssue({
111
+ code: "custom",
112
+ path: ["consensusReport", "observerSignals"],
113
+ message: "root-cause-schema signal must match the root-cause phase status",
114
+ });
115
+ }
116
+ if (signal.observer === "escalation-gate" && signal.conclusion !== expectedGateStatus) {
117
+ ctx.addIssue({
118
+ code: "custom",
119
+ path: ["consensusReport", "observerSignals"],
120
+ message: "escalation-gate signal must match the escalation gate status",
121
+ });
122
+ }
123
+ }
124
+ });
125
+
126
+ export function parseWorkflowIntentDiffPayload(value: unknown): WorkflowIntentDiff | undefined {
127
+ const result = WorkflowIntentDiffSchema.safeParse(value);
128
+ return result.success ? result.data : undefined;
129
+ }
@@ -0,0 +1,135 @@
1
+ import type { RootCausePhaseStatus, WorkflowIntentRoute } from "./workflow-intent-diff";
2
+
3
+ export type WorkflowConfidence = "high";
4
+ export type WorkflowClaimStatus = "confirmed";
5
+ export type WorkflowEscalationGateStatus = "required" | "not-required";
6
+ export type WorkflowSignalObserver = "intent-router" | "root-cause-schema" | "escalation-gate";
7
+
8
+ export interface WorkflowClaim {
9
+ readonly id: "workflow-route" | "root-cause-phase" | "escalation-gate";
10
+ readonly statement: string;
11
+ readonly status: WorkflowClaimStatus;
12
+ readonly confidence: WorkflowConfidence;
13
+ readonly evidence: readonly string[];
14
+ }
15
+
16
+ export interface WorkflowClaimsLedger {
17
+ readonly version: 1;
18
+ readonly claims: readonly WorkflowClaim[];
19
+ }
20
+
21
+ export interface WorkflowObserverSignal {
22
+ readonly observer: WorkflowSignalObserver;
23
+ readonly conclusion: string;
24
+ readonly evidence: readonly string[];
25
+ }
26
+
27
+ export interface WorkflowConsensusReport {
28
+ readonly version: 1;
29
+ readonly route: WorkflowIntentRoute;
30
+ readonly confidence: WorkflowConfidence;
31
+ readonly summary: string;
32
+ readonly observerSignals: readonly WorkflowObserverSignal[];
33
+ readonly escalationGate: {
34
+ readonly status: WorkflowEscalationGateStatus;
35
+ readonly reason: string;
36
+ };
37
+ }
38
+
39
+ export interface WorkflowIntentReport {
40
+ readonly claimsLedger: WorkflowClaimsLedger;
41
+ readonly consensusReport: WorkflowConsensusReport;
42
+ }
43
+
44
+ export interface WorkflowIntentReportInput {
45
+ readonly route: WorkflowIntentRoute;
46
+ readonly reason: string;
47
+ readonly direct: boolean;
48
+ readonly recommendedInvocation?: string;
49
+ readonly triggers: readonly string[];
50
+ readonly rootCausePhase: {
51
+ readonly status: RootCausePhaseStatus;
52
+ readonly triggers: readonly string[];
53
+ };
54
+ }
55
+
56
+ function triggerEvidence(triggers: readonly string[]): readonly string[] {
57
+ return triggers.map(trigger => `trigger: ${trigger}`);
58
+ }
59
+
60
+ function rootCauseEvidence(input: WorkflowIntentReportInput): readonly string[] {
61
+ if (input.rootCausePhase.status === "inactive") return ["root-cause: inactive"];
62
+ return ["root-cause: active", ...input.rootCausePhase.triggers.map(trigger => `root-cause-trigger: ${trigger}`)];
63
+ }
64
+
65
+ function escalationEvidence(input: WorkflowIntentReportInput): readonly string[] {
66
+ if (input.direct) return ["escalation: not-required", `reason: ${input.reason}`];
67
+ return ["escalation: required", `invocation: ${input.recommendedInvocation ?? input.route}`];
68
+ }
69
+
70
+ function escalationGate(input: WorkflowIntentReportInput): WorkflowConsensusReport["escalationGate"] {
71
+ if (input.direct) {
72
+ return {
73
+ status: "not-required",
74
+ reason: input.reason,
75
+ };
76
+ }
77
+ return {
78
+ status: "required",
79
+ reason: input.recommendedInvocation ?? input.route,
80
+ };
81
+ }
82
+
83
+ function consensusSummary(input: WorkflowIntentReportInput): string {
84
+ if (input.direct) return "Consensus: direct implementation with CustomEntry-only workflow traceability.";
85
+ return `Consensus: route through ${input.recommendedInvocation ?? input.route} because ${input.reason}.`;
86
+ }
87
+
88
+ export function buildWorkflowIntentReport(input: WorkflowIntentReportInput): WorkflowIntentReport {
89
+ const confidence: WorkflowConfidence = "high";
90
+ const gate = escalationGate(input);
91
+ const routeEvidence = [`route: ${input.route}`, `reason: ${input.reason}`, ...triggerEvidence(input.triggers)];
92
+ const causeEvidence = rootCauseEvidence(input);
93
+ const gateEvidence = escalationEvidence(input);
94
+
95
+ return {
96
+ claimsLedger: {
97
+ version: 1,
98
+ claims: [
99
+ {
100
+ id: "workflow-route",
101
+ statement: `Prompt should follow the ${input.route} workflow route.`,
102
+ status: "confirmed",
103
+ confidence,
104
+ evidence: routeEvidence,
105
+ },
106
+ {
107
+ id: "root-cause-phase",
108
+ statement: `Root-cause phase is ${input.rootCausePhase.status}.`,
109
+ status: "confirmed",
110
+ confidence,
111
+ evidence: causeEvidence,
112
+ },
113
+ {
114
+ id: "escalation-gate",
115
+ statement: `Escalation gate is ${gate.status}.`,
116
+ status: "confirmed",
117
+ confidence,
118
+ evidence: gateEvidence,
119
+ },
120
+ ],
121
+ },
122
+ consensusReport: {
123
+ version: 1,
124
+ route: input.route,
125
+ confidence,
126
+ summary: consensusSummary(input),
127
+ observerSignals: [
128
+ { observer: "intent-router", conclusion: input.route, evidence: routeEvidence },
129
+ { observer: "root-cause-schema", conclusion: input.rootCausePhase.status, evidence: causeEvidence },
130
+ { observer: "escalation-gate", conclusion: gate.status, evidence: gateEvidence },
131
+ ],
132
+ escalationGate: gate,
133
+ },
134
+ };
135
+ }