loopforge 3.9.2 → 4.0.7

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 (285) hide show
  1. package/README.md +236 -112
  2. package/dist/audit.d.ts +73 -15
  3. package/dist/audit.d.ts.map +1 -1
  4. package/dist/audit.js +131 -61
  5. package/dist/audit.js.map +1 -1
  6. package/dist/canonical-state.d.ts +152 -40
  7. package/dist/canonical-state.d.ts.map +1 -1
  8. package/dist/canonical-state.js +382 -206
  9. package/dist/canonical-state.js.map +1 -1
  10. package/dist/cli.d.ts.map +1 -1
  11. package/dist/cli.js +41 -12
  12. package/dist/cli.js.map +1 -1
  13. package/dist/cognitive-governance.d.ts +0 -2
  14. package/dist/cognitive-governance.d.ts.map +1 -1
  15. package/dist/cognitive-governance.js +0 -4
  16. package/dist/cognitive-governance.js.map +1 -1
  17. package/dist/committed-round.d.ts +105 -141
  18. package/dist/committed-round.d.ts.map +1 -1
  19. package/dist/committed-round.js +249 -372
  20. package/dist/committed-round.js.map +1 -1
  21. package/dist/constraint-lifecycle.d.ts +73 -0
  22. package/dist/constraint-lifecycle.d.ts.map +1 -0
  23. package/dist/constraint-lifecycle.js +174 -0
  24. package/dist/constraint-lifecycle.js.map +1 -0
  25. package/dist/context-boundary.d.ts +83 -0
  26. package/dist/context-boundary.d.ts.map +1 -0
  27. package/dist/context-boundary.js +101 -0
  28. package/dist/context-boundary.js.map +1 -0
  29. package/dist/contract-items.d.ts +12 -8
  30. package/dist/contract-items.d.ts.map +1 -1
  31. package/dist/contract-items.js +31 -26
  32. package/dist/contract-items.js.map +1 -1
  33. package/dist/contract-requirement.d.ts +47 -0
  34. package/dist/contract-requirement.d.ts.map +1 -0
  35. package/dist/contract-requirement.js +51 -0
  36. package/dist/contract-requirement.js.map +1 -0
  37. package/dist/criterion-status.d.ts +35 -0
  38. package/dist/criterion-status.d.ts.map +1 -0
  39. package/dist/criterion-status.js +89 -0
  40. package/dist/criterion-status.js.map +1 -0
  41. package/dist/enforcement-gate.d.ts +32 -67
  42. package/dist/enforcement-gate.d.ts.map +1 -1
  43. package/dist/enforcement-gate.js +203 -439
  44. package/dist/enforcement-gate.js.map +1 -1
  45. package/dist/engine.d.ts +9 -103
  46. package/dist/engine.d.ts.map +1 -1
  47. package/dist/engine.js +28 -887
  48. package/dist/engine.js.map +1 -1
  49. package/dist/errors.d.ts +41 -0
  50. package/dist/errors.d.ts.map +1 -0
  51. package/dist/errors.js +69 -0
  52. package/dist/errors.js.map +1 -0
  53. package/dist/evidence-claims.d.ts +33 -31
  54. package/dist/evidence-claims.d.ts.map +1 -1
  55. package/dist/evidence-claims.js +58 -72
  56. package/dist/evidence-claims.js.map +1 -1
  57. package/dist/evidence-posture-view.d.ts +19 -0
  58. package/dist/evidence-posture-view.d.ts.map +1 -0
  59. package/dist/evidence-posture-view.js +116 -0
  60. package/dist/evidence-posture-view.js.map +1 -0
  61. package/dist/evidence-posture.d.ts +73 -0
  62. package/dist/evidence-posture.d.ts.map +1 -0
  63. package/dist/evidence-posture.js +281 -0
  64. package/dist/evidence-posture.js.map +1 -0
  65. package/dist/evidence-provider.d.ts +55 -37
  66. package/dist/evidence-provider.d.ts.map +1 -1
  67. package/dist/evidence-provider.js +182 -332
  68. package/dist/evidence-provider.js.map +1 -1
  69. package/dist/explain.d.ts +167 -27
  70. package/dist/explain.d.ts.map +1 -1
  71. package/dist/explain.js +373 -58
  72. package/dist/explain.js.map +1 -1
  73. package/dist/field-accounting.d.ts.map +1 -1
  74. package/dist/field-accounting.js +3 -22
  75. package/dist/field-accounting.js.map +1 -1
  76. package/dist/generate-schema.js +13 -8
  77. package/dist/generate-schema.js.map +1 -1
  78. package/dist/git-boundary.d.ts +128 -0
  79. package/dist/git-boundary.d.ts.map +1 -0
  80. package/dist/git-boundary.js +625 -0
  81. package/dist/git-boundary.js.map +1 -0
  82. package/dist/git-facts.d.ts +22 -0
  83. package/dist/git-facts.d.ts.map +1 -0
  84. package/dist/git-facts.js +29 -0
  85. package/dist/git-facts.js.map +1 -0
  86. package/dist/git-motion.d.ts +37 -0
  87. package/dist/git-motion.d.ts.map +1 -0
  88. package/dist/git-motion.js +59 -0
  89. package/dist/git-motion.js.map +1 -0
  90. package/dist/history.d.ts +44 -0
  91. package/dist/history.d.ts.map +1 -0
  92. package/dist/history.js +77 -0
  93. package/dist/history.js.map +1 -0
  94. package/dist/index.d.ts +19 -9
  95. package/dist/index.d.ts.map +1 -1
  96. package/dist/index.js +12 -4
  97. package/dist/index.js.map +1 -1
  98. package/dist/init.d.ts +16 -0
  99. package/dist/init.d.ts.map +1 -1
  100. package/dist/init.js +80 -14
  101. package/dist/init.js.map +1 -1
  102. package/dist/loop-compiler.d.ts +51 -19
  103. package/dist/loop-compiler.d.ts.map +1 -1
  104. package/dist/loop-compiler.js +423 -507
  105. package/dist/loop-compiler.js.map +1 -1
  106. package/dist/loop-store.d.ts +6 -5
  107. package/dist/loop-store.d.ts.map +1 -1
  108. package/dist/loop-store.js +153 -35
  109. package/dist/loop-store.js.map +1 -1
  110. package/dist/mcp/round-lifecycle.d.ts +285 -81
  111. package/dist/mcp/round-lifecycle.d.ts.map +1 -1
  112. package/dist/mcp/round-lifecycle.js +1629 -574
  113. package/dist/mcp/round-lifecycle.js.map +1 -1
  114. package/dist/mcp/server.d.ts +5 -0
  115. package/dist/mcp/server.d.ts.map +1 -1
  116. package/dist/mcp/server.js +61 -19
  117. package/dist/mcp/server.js.map +1 -1
  118. package/dist/mcp/session.d.ts +81 -39
  119. package/dist/mcp/session.d.ts.map +1 -1
  120. package/dist/mcp/session.js +963 -271
  121. package/dist/mcp/session.js.map +1 -1
  122. package/dist/mcp/submission-boundary.d.ts +23 -31
  123. package/dist/mcp/submission-boundary.d.ts.map +1 -1
  124. package/dist/mcp/submission-boundary.js +242 -82
  125. package/dist/mcp/submission-boundary.js.map +1 -1
  126. package/dist/mcp/submission-handle.d.ts +66 -0
  127. package/dist/mcp/submission-handle.d.ts.map +1 -0
  128. package/dist/mcp/submission-handle.js +173 -0
  129. package/dist/mcp/submission-handle.js.map +1 -0
  130. package/dist/mcp/tools.d.ts +17 -7
  131. package/dist/mcp/tools.d.ts.map +1 -1
  132. package/dist/mcp/tools.js +763 -244
  133. package/dist/mcp/tools.js.map +1 -1
  134. package/dist/open-question.d.ts +7 -0
  135. package/dist/open-question.d.ts.map +1 -0
  136. package/dist/open-question.js +14 -0
  137. package/dist/open-question.js.map +1 -0
  138. package/dist/policy-metrics.d.ts +31 -21
  139. package/dist/policy-metrics.d.ts.map +1 -1
  140. package/dist/policy-metrics.js +117 -64
  141. package/dist/policy-metrics.js.map +1 -1
  142. package/dist/policy.d.ts +15 -40
  143. package/dist/policy.d.ts.map +1 -1
  144. package/dist/policy.js +13 -13
  145. package/dist/policy.js.map +1 -1
  146. package/dist/progress.d.ts +45 -0
  147. package/dist/progress.d.ts.map +1 -0
  148. package/dist/progress.js +136 -0
  149. package/dist/progress.js.map +1 -0
  150. package/dist/prompt-assembler.d.ts +28 -9
  151. package/dist/prompt-assembler.d.ts.map +1 -1
  152. package/dist/prompt-assembler.js +592 -603
  153. package/dist/prompt-assembler.js.map +1 -1
  154. package/dist/prompt-coverage.d.ts +39 -0
  155. package/dist/prompt-coverage.d.ts.map +1 -0
  156. package/dist/prompt-coverage.js +80 -0
  157. package/dist/prompt-coverage.js.map +1 -0
  158. package/dist/prompt-freshness.d.ts +25 -0
  159. package/dist/prompt-freshness.d.ts.map +1 -0
  160. package/dist/prompt-freshness.js +88 -0
  161. package/dist/prompt-freshness.js.map +1 -0
  162. package/dist/prompt-policy.d.ts +14 -4
  163. package/dist/prompt-policy.d.ts.map +1 -1
  164. package/dist/prompt-policy.js +29 -10
  165. package/dist/prompt-policy.js.map +1 -1
  166. package/dist/protocol.d.ts +875 -419
  167. package/dist/protocol.d.ts.map +1 -1
  168. package/dist/protocol.js +73 -99
  169. package/dist/protocol.js.map +1 -1
  170. package/dist/recovery-guidance.d.ts +13 -0
  171. package/dist/recovery-guidance.d.ts.map +1 -0
  172. package/dist/recovery-guidance.js +15 -0
  173. package/dist/recovery-guidance.js.map +1 -0
  174. package/dist/recovery.d.ts +68 -0
  175. package/dist/recovery.d.ts.map +1 -0
  176. package/dist/recovery.js +234 -0
  177. package/dist/recovery.js.map +1 -0
  178. package/dist/replay.d.ts +42 -8
  179. package/dist/replay.d.ts.map +1 -1
  180. package/dist/replay.js +311 -84
  181. package/dist/replay.js.map +1 -1
  182. package/dist/result-facts.d.ts +45 -0
  183. package/dist/result-facts.d.ts.map +1 -0
  184. package/dist/result-facts.js +86 -0
  185. package/dist/result-facts.js.map +1 -0
  186. package/dist/round-contract.d.ts +38 -8
  187. package/dist/round-contract.d.ts.map +1 -1
  188. package/dist/round-contract.js +71 -31
  189. package/dist/round-contract.js.map +1 -1
  190. package/dist/round-coordinator.d.ts +45 -91
  191. package/dist/round-coordinator.d.ts.map +1 -1
  192. package/dist/round-coordinator.js +254 -271
  193. package/dist/round-coordinator.js.map +1 -1
  194. package/dist/round-driver.d.ts +56 -16
  195. package/dist/round-driver.d.ts.map +1 -1
  196. package/dist/round-driver.js +225 -39
  197. package/dist/round-driver.js.map +1 -1
  198. package/dist/round-facts.d.ts +33 -52
  199. package/dist/round-facts.d.ts.map +1 -1
  200. package/dist/round-facts.js +54 -157
  201. package/dist/round-facts.js.map +1 -1
  202. package/dist/round-guidance.d.ts +56 -0
  203. package/dist/round-guidance.d.ts.map +1 -0
  204. package/dist/round-guidance.js +161 -0
  205. package/dist/round-guidance.js.map +1 -0
  206. package/dist/round-outcome.d.ts +21 -0
  207. package/dist/round-outcome.d.ts.map +1 -0
  208. package/dist/round-outcome.js +31 -0
  209. package/dist/round-outcome.js.map +1 -0
  210. package/dist/round-transaction.d.ts +168 -21
  211. package/dist/round-transaction.d.ts.map +1 -1
  212. package/dist/round-transaction.js +856 -39
  213. package/dist/round-transaction.js.map +1 -1
  214. package/dist/self-eval.d.ts +40 -60
  215. package/dist/self-eval.d.ts.map +1 -1
  216. package/dist/self-eval.js +455 -384
  217. package/dist/self-eval.js.map +1 -1
  218. package/dist/storage.d.ts +16 -0
  219. package/dist/storage.d.ts.map +1 -1
  220. package/dist/storage.js +54 -4
  221. package/dist/storage.js.map +1 -1
  222. package/dist/subgoal-state.d.ts +2 -3
  223. package/dist/subgoal-state.d.ts.map +1 -1
  224. package/dist/subgoal-state.js +2 -3
  225. package/dist/subgoal-state.js.map +1 -1
  226. package/dist/submission-guidance.d.ts +43 -21
  227. package/dist/submission-guidance.d.ts.map +1 -1
  228. package/dist/submission-guidance.js +368 -262
  229. package/dist/submission-guidance.js.map +1 -1
  230. package/dist/submission-receipt.d.ts +16 -8
  231. package/dist/submission-receipt.d.ts.map +1 -1
  232. package/dist/submission-receipt.js +146 -51
  233. package/dist/submission-receipt.js.map +1 -1
  234. package/dist/token-utils.d.ts +47 -7
  235. package/dist/token-utils.d.ts.map +1 -1
  236. package/dist/token-utils.js +66 -15
  237. package/dist/token-utils.js.map +1 -1
  238. package/dist/transaction-identity.d.ts +9 -0
  239. package/dist/transaction-identity.d.ts.map +1 -0
  240. package/dist/transaction-identity.js +69 -0
  241. package/dist/transaction-identity.js.map +1 -0
  242. package/dist/verification-actions.d.ts +13 -0
  243. package/dist/verification-actions.d.ts.map +1 -0
  244. package/dist/verification-actions.js +44 -0
  245. package/dist/verification-actions.js.map +1 -0
  246. package/dist/verification-gate.d.ts +26 -46
  247. package/dist/verification-gate.d.ts.map +1 -1
  248. package/dist/verification-gate.js +218 -427
  249. package/dist/verification-gate.js.map +1 -1
  250. package/dist/version.d.ts +1 -1
  251. package/dist/version.js +1 -1
  252. package/dist/working-memory.d.ts +187 -0
  253. package/dist/working-memory.d.ts.map +1 -0
  254. package/dist/working-memory.js +767 -0
  255. package/dist/working-memory.js.map +1 -0
  256. package/dist/workspace-checkpoint.d.ts +88 -0
  257. package/dist/workspace-checkpoint.d.ts.map +1 -0
  258. package/dist/workspace-checkpoint.js +326 -0
  259. package/dist/workspace-checkpoint.js.map +1 -0
  260. package/dist/workspace-restore.d.ts +68 -0
  261. package/dist/workspace-restore.d.ts.map +1 -0
  262. package/dist/workspace-restore.js +604 -0
  263. package/dist/workspace-restore.js.map +1 -0
  264. package/dist/workspace.d.ts +0 -9
  265. package/dist/workspace.d.ts.map +1 -1
  266. package/dist/workspace.js +0 -17
  267. package/dist/workspace.js.map +1 -1
  268. package/loop_policy.json +5 -19
  269. package/package.json +2 -2
  270. package/skills/forge/SKILL.md +212 -0
  271. package/skills/forge/references/evidence-and-contracts.md +204 -0
  272. package/skills/forge/references/recovery-and-views.md +188 -0
  273. package/dist/cognitive-facts.d.ts +0 -30
  274. package/dist/cognitive-facts.d.ts.map +0 -1
  275. package/dist/cognitive-facts.js +0 -113
  276. package/dist/cognitive-facts.js.map +0 -1
  277. package/dist/loop-extras-parser.d.ts +0 -81
  278. package/dist/loop-extras-parser.d.ts.map +0 -1
  279. package/dist/loop-extras-parser.js +0 -213
  280. package/dist/loop-extras-parser.js.map +0 -1
  281. package/dist/loop-projection.d.ts +0 -6
  282. package/dist/loop-projection.d.ts.map +0 -1
  283. package/dist/loop-projection.js +0 -28
  284. package/dist/loop-projection.js.map +0 -1
  285. package/skills/perception/SKILL.md +0 -370
@@ -0,0 +1,173 @@
1
+ /** v4.0.0: the ONE submission-handle projection and validator.
2
+ *
3
+ * A handle bundles the three identities a held-round call needs. It is derived
4
+ * from the persisted session snapshot on every response and is never written
5
+ * to durable state. This module is deliberately free of I/O and of the
6
+ * `McpSession` import: `round-lifecycle.ts` needs the factory, so importing
7
+ * that module here would create a cycle.
8
+ */
9
+ /** THE held-prompt predicate. A snapshot is held only when it names the current
10
+ * round and the exact prompted attempt the artifact was rendered for. A
11
+ * committed/terminated/stopped/retrying snapshot must never expose a handle:
12
+ * returning a stale prompt as "held" is the failure mode this predicate
13
+ * closes. */
14
+ export function heldPromptSnapshot(session) {
15
+ if (!session || session.status === "stopped")
16
+ return null;
17
+ const snapshot = session.roundSnapshot;
18
+ if (!snapshot)
19
+ return null;
20
+ if (snapshot.kind !== "evaluation")
21
+ return null;
22
+ if (snapshot.round !== session.currentRound)
23
+ return null;
24
+ if (snapshot.phase !== "prompted")
25
+ return null;
26
+ const artifact = snapshot.promptArtifact;
27
+ if (!artifact)
28
+ return null;
29
+ if (artifact.roundId !== snapshot.roundId)
30
+ return null;
31
+ if (artifact.round !== snapshot.round)
32
+ return null;
33
+ if (artifact.attempt !== snapshot.attempt)
34
+ return null;
35
+ if (typeof artifact.renderedPrompt !== "string" || artifact.renderedPrompt.length === 0) {
36
+ return null;
37
+ }
38
+ return snapshot;
39
+ }
40
+ /** Derive the handle from the held snapshot. Never recomputes the transaction
41
+ * id (the snapshot's identity is the authority), never reads the vault, and
42
+ * never mutates the session. */
43
+ export function makeSubmissionHandle(session) {
44
+ const snapshot = heldPromptSnapshot(session);
45
+ if (!snapshot || !session)
46
+ return null;
47
+ const { roundId, transactionId } = snapshot;
48
+ if (typeof session.sessionId !== "string" || session.sessionId.length === 0)
49
+ return null;
50
+ if (typeof roundId !== "string" || roundId.length === 0)
51
+ return null;
52
+ if (typeof transactionId !== "string" || transactionId.length === 0)
53
+ return null;
54
+ return {
55
+ sessionId: session.sessionId,
56
+ roundId,
57
+ transactionId,
58
+ };
59
+ }
60
+ /** Strict shape parsing: a plain object with exactly the three non-empty
61
+ * string fields. No trimming, case folding, prefix matching, or defaults. */
62
+ export function parseSubmissionHandle(raw) {
63
+ if (!raw || typeof raw !== "object" || Array.isArray(raw))
64
+ return null;
65
+ const record = raw;
66
+ const keys = Object.keys(record);
67
+ if (keys.length !== 3)
68
+ return null;
69
+ if (!keys.includes("sessionId") || !keys.includes("roundId") ||
70
+ !keys.includes("transactionId")) {
71
+ return null;
72
+ }
73
+ const { sessionId, roundId, transactionId } = record;
74
+ if (typeof sessionId !== "string" || sessionId.length === 0)
75
+ return null;
76
+ if (typeof roundId !== "string" || roundId.length === 0)
77
+ return null;
78
+ if (typeof transactionId !== "string" || transactionId.length === 0)
79
+ return null;
80
+ return { sessionId, roundId, transactionId };
81
+ }
82
+ /** Exact comparison against the held snapshot. The caller resolves the session
83
+ * by `handle.sessionId`; this function owns every field comparison so no
84
+ * second anchor rule can appear in the lifecycle or transport. */
85
+ export function validateSubmissionHandle(raw, session) {
86
+ const parsed = parseSubmissionHandle(raw);
87
+ if (!parsed) {
88
+ return {
89
+ ok: false,
90
+ code: "submission_handle_required",
91
+ reason: "shape",
92
+ mismatched: [],
93
+ current: null,
94
+ detail: "submissionHandle must be an object with exactly sessionId, roundId, " +
95
+ "and transactionId as non-empty strings.",
96
+ };
97
+ }
98
+ if (!session) {
99
+ return {
100
+ ok: false,
101
+ code: "session_not_found",
102
+ reason: "session",
103
+ mismatched: [],
104
+ current: null,
105
+ detail: `No session exists for sessionId "${parsed.sessionId}". Call ` +
106
+ `loopforge_status with view="all" to find the loopId; if the held ` +
107
+ `prompt is still in context, call loopforge_status with that loopId ` +
108
+ `to fetch the current handle; otherwise call loopforge_resume with it.`,
109
+ };
110
+ }
111
+ const current = makeSubmissionHandle(session);
112
+ if (!current) {
113
+ return {
114
+ ok: false,
115
+ code: "submission_handle_mismatch",
116
+ reason: "no_held_prompt",
117
+ mismatched: [],
118
+ current: null,
119
+ detail: "No held prompt exists for this session. Call loopforge_resume with " +
120
+ "the loopId to recover the current prompt; loopforge_status is " +
121
+ "read-only and cannot create one.",
122
+ };
123
+ }
124
+ const mismatched = [];
125
+ if (parsed.sessionId !== current.sessionId)
126
+ mismatched.push("sessionId");
127
+ if (parsed.roundId !== current.roundId)
128
+ mismatched.push("roundId");
129
+ if (parsed.transactionId !== current.transactionId)
130
+ mismatched.push("transactionId");
131
+ if (mismatched.length === 0) {
132
+ const snapshot = heldPromptSnapshot(session);
133
+ // `current` is non-null only when the predicate holds; the assertion is
134
+ // local and keeps the success branch total.
135
+ if (!snapshot) {
136
+ return {
137
+ ok: false,
138
+ code: "submission_handle_mismatch",
139
+ reason: "no_held_prompt",
140
+ mismatched: [],
141
+ current: null,
142
+ detail: "No held prompt exists for this session. Call loopforge_resume with " +
143
+ "the loopId to recover the current prompt; loopforge_status is " +
144
+ "read-only and cannot create one.",
145
+ };
146
+ }
147
+ return { ok: true, handle: current, snapshot };
148
+ }
149
+ const reason = mismatched.length > 1
150
+ ? "attempt"
151
+ : mismatched[0] === "sessionId"
152
+ ? "session"
153
+ : mismatched[0] === "roundId"
154
+ ? "round"
155
+ : "transaction";
156
+ return {
157
+ ok: false,
158
+ code: "submission_handle_mismatch",
159
+ reason,
160
+ mismatched,
161
+ current,
162
+ detail: "submissionHandle does not match the current held attempt " +
163
+ `(mismatched: ${mismatched.join(", ")}). Use the submissionHandle ` +
164
+ "returned with the current prompt; do not reconstruct it.",
165
+ };
166
+ }
167
+ /** The one deterministic warning used whenever a stale handle returns the
168
+ * held prompt. It names no ids and never changes with the attempt. */
169
+ export function staleHandleWarning() {
170
+ return ("Submitted submissionHandle does not match the current held attempt — " +
171
+ "returning the current prompt. Use the submissionHandle returned with it.");
172
+ }
173
+ //# sourceMappingURL=submission-handle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"submission-handle.js","sourceRoot":"","sources":["../../src/mcp/submission-handle.ts"],"names":[],"mappings":"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"}
@@ -1,16 +1,21 @@
1
1
  /** LoopForge MCP — Tool definitions and handlers.
2
2
  *
3
- * 9 tools: start, next, status, stop, pause, resume, replay,
4
- * gate_check, gate_resolve.
5
- * status is the unified inspection tool (view=session|loop|all|audit).
3
+ * 10 tools: start, next, status, stop, pause, resume, replay,
4
+ * checkpoint, gate_check, gate_resolve.
5
+ * status is the unified inspection tool (view=session|loop|all|audit|explain).
6
6
  * Each handler receives SessionManager + parsed input, returns the output object.
7
7
  */
8
8
  import type { SessionManager } from "./session.js";
9
+ /** The closed argument set for `loopforge_start`.
10
+ *
11
+ * The handler's unknown-argument guard reads this list; `schema-sync.test`
12
+ * asserts that the advertised tool schema exposes exactly the same keys. A
13
+ * field removed from the protocol (for example `domain` in 4.0.1) must not
14
+ * survive in only one of them: the schema says what clients may send, and
15
+ * the guard makes a stale caller fail loudly instead of silently dropping
16
+ * the field. */
17
+ export declare const START_INPUT_KEYS: readonly ["task", "loopId", "maxRounds", "planSource", "constraints", "criteria"];
9
18
  type JsonSchema = Record<string, unknown>;
10
- /** Declared structured-output contracts for every tool. The MCP server
11
- * validates each handler's output against these before returning it —
12
- * a mismatch is a contract bug, surfaced as a JSON-RPC error instead of
13
- * silently shipping an output that violates the declared schema. */
14
19
  export declare const TOOL_OUTPUT_SCHEMAS: Record<string, JsonSchema>;
15
20
  /** MCP tool contracts include strict input and structured output schemas. */
16
21
  export declare const TOOL_SCHEMAS: ({
@@ -53,6 +58,11 @@ export declare const TOOL_SCHEMAS: ({
53
58
  outputSchema: JsonSchema;
54
59
  name: string;
55
60
  description: string;
61
+ } | {
62
+ inputSchema: JsonSchema;
63
+ outputSchema: JsonSchema;
64
+ name: string;
65
+ description: string;
56
66
  })[];
57
67
  export declare class ToolInputValidationError extends Error {
58
68
  constructor(message: string);
@@ -1 +1 @@
1
- {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/mcp/tools.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAc,MAAM,cAAc,CAAC;AAkgB/D,KAAK,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AA6C1C;;;qEAGqE;AACrE,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAkG1D,CAAC;AAqDF,6EAA6E;AAC7E,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAOtB,CAAC;AAEJ,qBAAa,wBAAyB,SAAQ,KAAK;gBACrC,OAAO,EAAE,MAAM;CAI5B;AA8ED,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,IAAI,CAIN;AAED;;;;;2DAK2D;AAC3D,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,IAAI,CAoBN;AAED;;;4CAG4C;AAC5C,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,IAAI,CAIN;AAMD,MAAM,MAAM,WAAW,GAAG,CAAC,GAAG,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAapH,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAiZrD,CAAC"}
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/mcp/tools.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAc,MAAM,cAAc,CAAC;AAkE/D;;;;;;;iBAOiB;AACjB,eAAO,MAAM,gBAAgB,mFAOnB,CAAC;AAunBX,KAAK,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAiI1C,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAiI1D,CAAC;AA+CF,6EAA6E;AAC7E,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAOtB,CAAC;AAEJ,qBAAa,wBAAyB,SAAQ,KAAK;gBACrC,OAAO,EAAE,MAAM;CAI5B;AA8ED,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,IAAI,CAIN;AAED;;;;;2DAK2D;AAC3D,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,IAAI,CAoBN;AAED;;;4CAG4C;AAC5C,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,IAAI,CAIN;AAMD,MAAM,MAAM,WAAW,GAAG,CAAC,GAAG,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AA6CpH,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CA4nBrD,CAAC"}