@itaila/archetype 0.3.30

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 (319) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +475 -0
  3. package/dist/audit/audit-persona.d.ts +163 -0
  4. package/dist/audit/audit-persona.d.ts.map +1 -0
  5. package/dist/audit/audit-persona.js +415 -0
  6. package/dist/audit/audit-persona.js.map +1 -0
  7. package/dist/audit/brain-reflection.d.ts +33 -0
  8. package/dist/audit/brain-reflection.d.ts.map +1 -0
  9. package/dist/audit/brain-reflection.js +148 -0
  10. package/dist/audit/brain-reflection.js.map +1 -0
  11. package/dist/audit/conversation-audit.d.ts +12 -0
  12. package/dist/audit/conversation-audit.d.ts.map +1 -0
  13. package/dist/audit/conversation-audit.js +76 -0
  14. package/dist/audit/conversation-audit.js.map +1 -0
  15. package/dist/audit/prompt-audit.d.ts +10 -0
  16. package/dist/audit/prompt-audit.d.ts.map +1 -0
  17. package/dist/audit/prompt-audit.js +153 -0
  18. package/dist/audit/prompt-audit.js.map +1 -0
  19. package/dist/audit/prompt-dump.d.ts +137 -0
  20. package/dist/audit/prompt-dump.d.ts.map +1 -0
  21. package/dist/audit/prompt-dump.js +269 -0
  22. package/dist/audit/prompt-dump.js.map +1 -0
  23. package/dist/audit/trace-integrity.d.ts +33 -0
  24. package/dist/audit/trace-integrity.d.ts.map +1 -0
  25. package/dist/audit/trace-integrity.js +109 -0
  26. package/dist/audit/trace-integrity.js.map +1 -0
  27. package/dist/audit/types.d.ts +92 -0
  28. package/dist/audit/types.d.ts.map +1 -0
  29. package/dist/audit/types.js +2 -0
  30. package/dist/audit/types.js.map +1 -0
  31. package/dist/audit/version.d.ts +14 -0
  32. package/dist/audit/version.d.ts.map +1 -0
  33. package/dist/audit/version.js +65 -0
  34. package/dist/audit/version.js.map +1 -0
  35. package/dist/brain.d.ts +7 -0
  36. package/dist/brain.d.ts.map +1 -0
  37. package/dist/brain.js +83 -0
  38. package/dist/brain.js.map +1 -0
  39. package/dist/builder/actions.d.ts +60 -0
  40. package/dist/builder/actions.d.ts.map +1 -0
  41. package/dist/builder/actions.js +257 -0
  42. package/dist/builder/actions.js.map +1 -0
  43. package/dist/builder/browser.d.ts +140 -0
  44. package/dist/builder/browser.d.ts.map +1 -0
  45. package/dist/builder/browser.js +232 -0
  46. package/dist/builder/browser.js.map +1 -0
  47. package/dist/builder/executor.d.ts +228 -0
  48. package/dist/builder/executor.d.ts.map +1 -0
  49. package/dist/builder/executor.js +1548 -0
  50. package/dist/builder/executor.js.map +1 -0
  51. package/dist/builder/index.d.ts +24 -0
  52. package/dist/builder/index.d.ts.map +1 -0
  53. package/dist/builder/index.js +24 -0
  54. package/dist/builder/index.js.map +1 -0
  55. package/dist/builder/node-test-discovery.d.ts +13 -0
  56. package/dist/builder/node-test-discovery.d.ts.map +1 -0
  57. package/dist/builder/node-test-discovery.js +45 -0
  58. package/dist/builder/node-test-discovery.js.map +1 -0
  59. package/dist/builder/sandbox.d.ts +172 -0
  60. package/dist/builder/sandbox.d.ts.map +1 -0
  61. package/dist/builder/sandbox.js +294 -0
  62. package/dist/builder/sandbox.js.map +1 -0
  63. package/dist/builder/workspace-files.d.ts +63 -0
  64. package/dist/builder/workspace-files.d.ts.map +1 -0
  65. package/dist/builder/workspace-files.js +190 -0
  66. package/dist/builder/workspace-files.js.map +1 -0
  67. package/dist/core/actions.d.ts +55 -0
  68. package/dist/core/actions.d.ts.map +1 -0
  69. package/dist/core/actions.js +311 -0
  70. package/dist/core/actions.js.map +1 -0
  71. package/dist/core/attachment-notes.d.ts +7 -0
  72. package/dist/core/attachment-notes.d.ts.map +1 -0
  73. package/dist/core/attachment-notes.js +38 -0
  74. package/dist/core/attachment-notes.js.map +1 -0
  75. package/dist/core/context.d.ts +10 -0
  76. package/dist/core/context.d.ts.map +1 -0
  77. package/dist/core/context.js +108 -0
  78. package/dist/core/context.js.map +1 -0
  79. package/dist/core/crud-prompt.d.ts +16 -0
  80. package/dist/core/crud-prompt.d.ts.map +1 -0
  81. package/dist/core/crud-prompt.js +268 -0
  82. package/dist/core/crud-prompt.js.map +1 -0
  83. package/dist/core/crud-schema.d.ts +12 -0
  84. package/dist/core/crud-schema.d.ts.map +1 -0
  85. package/dist/core/crud-schema.js +42 -0
  86. package/dist/core/crud-schema.js.map +1 -0
  87. package/dist/core/effective-config.d.ts +13 -0
  88. package/dist/core/effective-config.d.ts.map +1 -0
  89. package/dist/core/effective-config.js +33 -0
  90. package/dist/core/effective-config.js.map +1 -0
  91. package/dist/core/entities.d.ts +82 -0
  92. package/dist/core/entities.d.ts.map +1 -0
  93. package/dist/core/entities.js +116 -0
  94. package/dist/core/entities.js.map +1 -0
  95. package/dist/core/entity-helpers.d.ts +47 -0
  96. package/dist/core/entity-helpers.d.ts.map +1 -0
  97. package/dist/core/entity-helpers.js +122 -0
  98. package/dist/core/entity-helpers.js.map +1 -0
  99. package/dist/core/entity-registry.d.ts +47 -0
  100. package/dist/core/entity-registry.d.ts.map +1 -0
  101. package/dist/core/entity-registry.js +54 -0
  102. package/dist/core/entity-registry.js.map +1 -0
  103. package/dist/core/eq.d.ts +13 -0
  104. package/dist/core/eq.d.ts.map +1 -0
  105. package/dist/core/eq.js +41 -0
  106. package/dist/core/eq.js.map +1 -0
  107. package/dist/core/focus-context.d.ts +19 -0
  108. package/dist/core/focus-context.d.ts.map +1 -0
  109. package/dist/core/focus-context.js +46 -0
  110. package/dist/core/focus-context.js.map +1 -0
  111. package/dist/core/focus-mode-actions.d.ts +23 -0
  112. package/dist/core/focus-mode-actions.d.ts.map +1 -0
  113. package/dist/core/focus-mode-actions.js +74 -0
  114. package/dist/core/focus-mode-actions.js.map +1 -0
  115. package/dist/core/greeting.d.ts +10 -0
  116. package/dist/core/greeting.d.ts.map +1 -0
  117. package/dist/core/greeting.js +41 -0
  118. package/dist/core/greeting.js.map +1 -0
  119. package/dist/core/identity.d.ts +13 -0
  120. package/dist/core/identity.d.ts.map +1 -0
  121. package/dist/core/identity.js +54 -0
  122. package/dist/core/identity.js.map +1 -0
  123. package/dist/core/knowledge.d.ts +10 -0
  124. package/dist/core/knowledge.d.ts.map +1 -0
  125. package/dist/core/knowledge.js +40 -0
  126. package/dist/core/knowledge.js.map +1 -0
  127. package/dist/core/memory-actions.d.ts +38 -0
  128. package/dist/core/memory-actions.d.ts.map +1 -0
  129. package/dist/core/memory-actions.js +181 -0
  130. package/dist/core/memory-actions.js.map +1 -0
  131. package/dist/core/memory.d.ts +35 -0
  132. package/dist/core/memory.d.ts.map +1 -0
  133. package/dist/core/memory.js +168 -0
  134. package/dist/core/memory.js.map +1 -0
  135. package/dist/core/peer-actions.d.ts +15 -0
  136. package/dist/core/peer-actions.d.ts.map +1 -0
  137. package/dist/core/peer-actions.js +33 -0
  138. package/dist/core/peer-actions.js.map +1 -0
  139. package/dist/core/prompt-builder.d.ts +46 -0
  140. package/dist/core/prompt-builder.d.ts.map +1 -0
  141. package/dist/core/prompt-builder.js +543 -0
  142. package/dist/core/prompt-builder.js.map +1 -0
  143. package/dist/core/prompt-mode.d.ts +3 -0
  144. package/dist/core/prompt-mode.d.ts.map +1 -0
  145. package/dist/core/prompt-mode.js +6 -0
  146. package/dist/core/prompt-mode.js.map +1 -0
  147. package/dist/core/prompted-turn.d.ts +6 -0
  148. package/dist/core/prompted-turn.d.ts.map +1 -0
  149. package/dist/core/prompted-turn.js +48 -0
  150. package/dist/core/prompted-turn.js.map +1 -0
  151. package/dist/core/request-builder.d.ts +14 -0
  152. package/dist/core/request-builder.d.ts.map +1 -0
  153. package/dist/core/request-builder.js +64 -0
  154. package/dist/core/request-builder.js.map +1 -0
  155. package/dist/core/session-routing.d.ts +23 -0
  156. package/dist/core/session-routing.d.ts.map +1 -0
  157. package/dist/core/session-routing.js +59 -0
  158. package/dist/core/session-routing.js.map +1 -0
  159. package/dist/core/voice.d.ts +6 -0
  160. package/dist/core/voice.d.ts.map +1 -0
  161. package/dist/core/voice.js +30 -0
  162. package/dist/core/voice.js.map +1 -0
  163. package/dist/engine/chat.d.ts +45 -0
  164. package/dist/engine/chat.d.ts.map +1 -0
  165. package/dist/engine/chat.js +308 -0
  166. package/dist/engine/chat.js.map +1 -0
  167. package/dist/engine/continuity.d.ts +107 -0
  168. package/dist/engine/continuity.d.ts.map +1 -0
  169. package/dist/engine/continuity.js +320 -0
  170. package/dist/engine/continuity.js.map +1 -0
  171. package/dist/engine/crud.d.ts +62 -0
  172. package/dist/engine/crud.d.ts.map +1 -0
  173. package/dist/engine/crud.js +260 -0
  174. package/dist/engine/crud.js.map +1 -0
  175. package/dist/engine/side-effects.d.ts +93 -0
  176. package/dist/engine/side-effects.d.ts.map +1 -0
  177. package/dist/engine/side-effects.js +271 -0
  178. package/dist/engine/side-effects.js.map +1 -0
  179. package/dist/engine/staging.d.ts +29 -0
  180. package/dist/engine/staging.d.ts.map +1 -0
  181. package/dist/engine/staging.js +159 -0
  182. package/dist/engine/staging.js.map +1 -0
  183. package/dist/engine/working-set.d.ts +18 -0
  184. package/dist/engine/working-set.d.ts.map +1 -0
  185. package/dist/engine/working-set.js +246 -0
  186. package/dist/engine/working-set.js.map +1 -0
  187. package/dist/evals/action-contracts.d.ts +40 -0
  188. package/dist/evals/action-contracts.d.ts.map +1 -0
  189. package/dist/evals/action-contracts.js +208 -0
  190. package/dist/evals/action-contracts.js.map +1 -0
  191. package/dist/evals/brain-bloat.d.ts +39 -0
  192. package/dist/evals/brain-bloat.d.ts.map +1 -0
  193. package/dist/evals/brain-bloat.js +167 -0
  194. package/dist/evals/brain-bloat.js.map +1 -0
  195. package/dist/evals/brain-prescriptions.d.ts +30 -0
  196. package/dist/evals/brain-prescriptions.d.ts.map +1 -0
  197. package/dist/evals/brain-prescriptions.js +148 -0
  198. package/dist/evals/brain-prescriptions.js.map +1 -0
  199. package/dist/evals/cross-layer-duplicates.d.ts +49 -0
  200. package/dist/evals/cross-layer-duplicates.d.ts.map +1 -0
  201. package/dist/evals/cross-layer-duplicates.js +289 -0
  202. package/dist/evals/cross-layer-duplicates.js.map +1 -0
  203. package/dist/evals/entity-visibility.d.ts +28 -0
  204. package/dist/evals/entity-visibility.d.ts.map +1 -0
  205. package/dist/evals/entity-visibility.js +216 -0
  206. package/dist/evals/entity-visibility.js.map +1 -0
  207. package/dist/evals/index.d.ts +19 -0
  208. package/dist/evals/index.d.ts.map +1 -0
  209. package/dist/evals/index.js +11 -0
  210. package/dist/evals/index.js.map +1 -0
  211. package/dist/evals/judge.d.ts +22 -0
  212. package/dist/evals/judge.d.ts.map +1 -0
  213. package/dist/evals/judge.js +337 -0
  214. package/dist/evals/judge.js.map +1 -0
  215. package/dist/evals/operational-contract.d.ts +40 -0
  216. package/dist/evals/operational-contract.d.ts.map +1 -0
  217. package/dist/evals/operational-contract.js +115 -0
  218. package/dist/evals/operational-contract.js.map +1 -0
  219. package/dist/evals/prompt-content.d.ts +14 -0
  220. package/dist/evals/prompt-content.d.ts.map +1 -0
  221. package/dist/evals/prompt-content.js +104 -0
  222. package/dist/evals/prompt-content.js.map +1 -0
  223. package/dist/evals/runtime.d.ts +4 -0
  224. package/dist/evals/runtime.d.ts.map +1 -0
  225. package/dist/evals/runtime.js +197 -0
  226. package/dist/evals/runtime.js.map +1 -0
  227. package/dist/evals/sample-projects.d.ts +143 -0
  228. package/dist/evals/sample-projects.d.ts.map +1 -0
  229. package/dist/evals/sample-projects.js +644 -0
  230. package/dist/evals/sample-projects.js.map +1 -0
  231. package/dist/evals/types.d.ts +88 -0
  232. package/dist/evals/types.d.ts.map +1 -0
  233. package/dist/evals/types.js +2 -0
  234. package/dist/evals/types.js.map +1 -0
  235. package/dist/foundation/index.d.ts +158 -0
  236. package/dist/foundation/index.d.ts.map +1 -0
  237. package/dist/foundation/index.js +256 -0
  238. package/dist/foundation/index.js.map +1 -0
  239. package/dist/index.d.ts +223 -0
  240. package/dist/index.d.ts.map +1 -0
  241. package/dist/index.js +998 -0
  242. package/dist/index.js.map +1 -0
  243. package/dist/managed/autonomous-loop.d.ts +199 -0
  244. package/dist/managed/autonomous-loop.d.ts.map +1 -0
  245. package/dist/managed/autonomous-loop.js +451 -0
  246. package/dist/managed/autonomous-loop.js.map +1 -0
  247. package/dist/managed/conversation.d.ts +20 -0
  248. package/dist/managed/conversation.d.ts.map +1 -0
  249. package/dist/managed/conversation.js +40 -0
  250. package/dist/managed/conversation.js.map +1 -0
  251. package/dist/managed/knowledge.d.ts +7 -0
  252. package/dist/managed/knowledge.d.ts.map +1 -0
  253. package/dist/managed/knowledge.js +174 -0
  254. package/dist/managed/knowledge.js.map +1 -0
  255. package/dist/managed/memory-manager.d.ts +7 -0
  256. package/dist/managed/memory-manager.d.ts.map +1 -0
  257. package/dist/managed/memory-manager.js +18 -0
  258. package/dist/managed/memory-manager.js.map +1 -0
  259. package/dist/managed/memory-review.d.ts +45 -0
  260. package/dist/managed/memory-review.d.ts.map +1 -0
  261. package/dist/managed/memory-review.js +130 -0
  262. package/dist/managed/memory-review.js.map +1 -0
  263. package/dist/managed/storage.d.ts +2 -0
  264. package/dist/managed/storage.d.ts.map +1 -0
  265. package/dist/managed/storage.js +2 -0
  266. package/dist/managed/storage.js.map +1 -0
  267. package/dist/managed/work-history.d.ts +23 -0
  268. package/dist/managed/work-history.d.ts.map +1 -0
  269. package/dist/managed/work-history.js +31 -0
  270. package/dist/managed/work-history.js.map +1 -0
  271. package/dist/observability/index.d.ts +15 -0
  272. package/dist/observability/index.d.ts.map +1 -0
  273. package/dist/observability/index.js +15 -0
  274. package/dist/observability/index.js.map +1 -0
  275. package/dist/observability/render-run-markdown.d.ts +90 -0
  276. package/dist/observability/render-run-markdown.d.ts.map +1 -0
  277. package/dist/observability/render-run-markdown.js +231 -0
  278. package/dist/observability/render-run-markdown.js.map +1 -0
  279. package/dist/observability/turn-reporter.d.ts +20 -0
  280. package/dist/observability/turn-reporter.d.ts.map +1 -0
  281. package/dist/observability/turn-reporter.js +106 -0
  282. package/dist/observability/turn-reporter.js.map +1 -0
  283. package/dist/persona.d.ts +49 -0
  284. package/dist/persona.d.ts.map +1 -0
  285. package/dist/persona.js +287 -0
  286. package/dist/persona.js.map +1 -0
  287. package/dist/playbook/defaults.d.ts +25 -0
  288. package/dist/playbook/defaults.d.ts.map +1 -0
  289. package/dist/playbook/defaults.js +108 -0
  290. package/dist/playbook/defaults.js.map +1 -0
  291. package/dist/playbook/invariants.d.ts +244 -0
  292. package/dist/playbook/invariants.d.ts.map +1 -0
  293. package/dist/playbook/invariants.js +259 -0
  294. package/dist/playbook/invariants.js.map +1 -0
  295. package/dist/playbook/templates.d.ts +7 -0
  296. package/dist/playbook/templates.d.ts.map +1 -0
  297. package/dist/playbook/templates.js +437 -0
  298. package/dist/playbook/templates.js.map +1 -0
  299. package/dist/providers/gemini.d.ts +73 -0
  300. package/dist/providers/gemini.d.ts.map +1 -0
  301. package/dist/providers/gemini.js +536 -0
  302. package/dist/providers/gemini.js.map +1 -0
  303. package/dist/providers/types.d.ts +2 -0
  304. package/dist/providers/types.d.ts.map +1 -0
  305. package/dist/providers/types.js +2 -0
  306. package/dist/providers/types.js.map +1 -0
  307. package/dist/providers/zod-to-gemini.d.ts +8 -0
  308. package/dist/providers/zod-to-gemini.d.ts.map +1 -0
  309. package/dist/providers/zod-to-gemini.js +148 -0
  310. package/dist/providers/zod-to-gemini.js.map +1 -0
  311. package/dist/samples/pm-spec-agent.d.ts +22 -0
  312. package/dist/samples/pm-spec-agent.d.ts.map +1 -0
  313. package/dist/samples/pm-spec-agent.js +53 -0
  314. package/dist/samples/pm-spec-agent.js.map +1 -0
  315. package/dist/types.d.ts +920 -0
  316. package/dist/types.d.ts.map +1 -0
  317. package/dist/types.js +2 -0
  318. package/dist/types.js.map +1 -0
  319. package/package.json +68 -0
@@ -0,0 +1,29 @@
1
+ import type { ParsedAction, ActionDefinition, StagedBatch, StagedActionStatus, BatchSummary } from '../types.js';
2
+ import type { SideEffectHandler, SideEffectResult } from './side-effects.js';
3
+ export interface BatchCommitResult {
4
+ results: SideEffectResult[];
5
+ summary: BatchSummary;
6
+ }
7
+ /**
8
+ * Create a staged batch from parsed actions.
9
+ * Validates each action against its definition — invalid/unknown actions are auto-rejected.
10
+ */
11
+ export declare function createBatch(actions: ParsedAction[], actionDefs: Record<string, ActionDefinition>): StagedBatch;
12
+ /**
13
+ * Update the status of a single action in the batch. Returns a new batch (immutable).
14
+ */
15
+ export declare function updateActionStatus(batch: StagedBatch, index: number, status: StagedActionStatus): StagedBatch;
16
+ /**
17
+ * Edit an action's params, re-validating against the schema. Returns a new batch.
18
+ * Throws if validation fails (caller surfaces as toast).
19
+ */
20
+ export declare function editActionParams(batch: StagedBatch, index: number, newParams: Record<string, unknown>, actionDefs: Record<string, ActionDefinition>): StagedBatch;
21
+ /**
22
+ * Commit all accepted actions in a batch by running their handlers sequentially.
23
+ */
24
+ export declare function commitBatch(batch: StagedBatch, handlers: Record<string, SideEffectHandler>): Promise<BatchCommitResult>;
25
+ /**
26
+ * Summarize a batch by status counts and labels.
27
+ */
28
+ export declare function summarizeBatch(batch: StagedBatch): BatchSummary;
29
+ //# sourceMappingURL=staging.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"staging.d.ts","sourceRoot":"","sources":["../../src/engine/staging.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,gBAAgB,EAEhB,WAAW,EACX,kBAAkB,EAClB,YAAY,EACb,MAAM,aAAa,CAAA;AACpB,OAAO,KAAK,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAG5E,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,gBAAgB,EAAE,CAAA;IAC3B,OAAO,EAAE,YAAY,CAAA;CACtB;AAED;;;GAGG;AACH,wBAAgB,WAAW,CACzB,OAAO,EAAE,YAAY,EAAE,EACvB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,GAC3C,WAAW,CA0Cb;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,WAAW,EAClB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,kBAAkB,GACzB,WAAW,CASb;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,WAAW,EAClB,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,GAC3C,WAAW,CA2Bb;AAED;;GAEG;AACH,wBAAsB,WAAW,CAC/B,KAAK,EAAE,WAAW,EAClB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,GAC1C,OAAO,CAAC,iBAAiB,CAAC,CA0C5B;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,WAAW,GAAG,YAAY,CA+B/D"}
@@ -0,0 +1,159 @@
1
+ import { buildAnnotations } from '../core/actions.js';
2
+ /**
3
+ * Create a staged batch from parsed actions.
4
+ * Validates each action against its definition — invalid/unknown actions are auto-rejected.
5
+ */
6
+ export function createBatch(actions, actionDefs) {
7
+ const stagedActions = actions.map((action, index) => {
8
+ // Unknown action name → rejected
9
+ const def = actionDefs[action.name];
10
+ if (!def) {
11
+ return {
12
+ index,
13
+ action,
14
+ validatedParams: action.params,
15
+ annotation: `Unknown action: ${action.name}`,
16
+ status: 'rejected',
17
+ };
18
+ }
19
+ // Validate params
20
+ const parseResult = def.schema.safeParse(action.params);
21
+ if (!parseResult.success) {
22
+ return {
23
+ index,
24
+ action,
25
+ validatedParams: action.params,
26
+ annotation: `Invalid params: ${parseResult.error.message}`,
27
+ status: 'rejected',
28
+ };
29
+ }
30
+ // Valid → pending
31
+ const annotations = buildAnnotations([{ name: action.name, params: action.params }]);
32
+ return {
33
+ index,
34
+ action,
35
+ validatedParams: parseResult.data,
36
+ annotation: annotations[0],
37
+ status: 'pending',
38
+ };
39
+ });
40
+ return {
41
+ id: crypto.randomUUID(),
42
+ actions: stagedActions,
43
+ createdAt: new Date().toISOString(),
44
+ };
45
+ }
46
+ /**
47
+ * Update the status of a single action in the batch. Returns a new batch (immutable).
48
+ */
49
+ export function updateActionStatus(batch, index, status) {
50
+ if (index < 0 || index >= batch.actions.length) {
51
+ throw new RangeError(`Index ${index} out of bounds (batch has ${batch.actions.length} actions)`);
52
+ }
53
+ const newActions = batch.actions.map((a, i) => i === index ? { ...a, status } : a);
54
+ return { ...batch, actions: newActions };
55
+ }
56
+ /**
57
+ * Edit an action's params, re-validating against the schema. Returns a new batch.
58
+ * Throws if validation fails (caller surfaces as toast).
59
+ */
60
+ export function editActionParams(batch, index, newParams, actionDefs) {
61
+ if (index < 0 || index >= batch.actions.length) {
62
+ throw new RangeError(`Index ${index} out of bounds (batch has ${batch.actions.length} actions)`);
63
+ }
64
+ const action = batch.actions[index];
65
+ const def = actionDefs[action.action.name];
66
+ if (!def) {
67
+ throw new Error(`Unknown action: ${action.action.name}`);
68
+ }
69
+ const parseResult = def.schema.safeParse(newParams);
70
+ if (!parseResult.success) {
71
+ throw new Error(`Invalid params for ${action.action.name}: ${parseResult.error.message}`);
72
+ }
73
+ const annotations = buildAnnotations([{ name: action.action.name, params: newParams }]);
74
+ const newActions = batch.actions.map((a, i) => i === index
75
+ ? {
76
+ ...a,
77
+ validatedParams: parseResult.data,
78
+ annotation: annotations[0],
79
+ }
80
+ : a);
81
+ return { ...batch, actions: newActions };
82
+ }
83
+ /**
84
+ * Commit all accepted actions in a batch by running their handlers sequentially.
85
+ */
86
+ export async function commitBatch(batch, handlers) {
87
+ const results = [];
88
+ const accepted = batch.actions.filter(a => a.status === 'accepted');
89
+ for (const staged of accepted) {
90
+ const handler = handlers[staged.action.name];
91
+ if (!handler) {
92
+ results.push({
93
+ action: staged.action,
94
+ status: 'failed',
95
+ success: false,
96
+ error: `No handler registered for action: ${staged.action.name}`,
97
+ annotation: staged.annotation,
98
+ });
99
+ continue;
100
+ }
101
+ try {
102
+ const result = await handler(staged.validatedParams);
103
+ results.push({
104
+ action: staged.action,
105
+ status: result.success ? 'executed' : 'failed',
106
+ success: result.success,
107
+ error: result.error,
108
+ annotation: staged.annotation,
109
+ });
110
+ }
111
+ catch (err) {
112
+ results.push({
113
+ action: staged.action,
114
+ status: 'failed',
115
+ success: false,
116
+ error: `Handler error for ${staged.action.name}: ${err instanceof Error ? err.message : String(err)}`,
117
+ annotation: staged.annotation,
118
+ });
119
+ }
120
+ }
121
+ return {
122
+ results,
123
+ summary: summarizeBatch(batch),
124
+ };
125
+ }
126
+ /**
127
+ * Summarize a batch by status counts and labels.
128
+ */
129
+ export function summarizeBatch(batch) {
130
+ let accepted = 0;
131
+ let rejected = 0;
132
+ let pending = 0;
133
+ const acceptedLabels = [];
134
+ const rejectedLabels = [];
135
+ for (const action of batch.actions) {
136
+ switch (action.status) {
137
+ case 'accepted':
138
+ accepted++;
139
+ acceptedLabels.push(action.annotation);
140
+ break;
141
+ case 'rejected':
142
+ rejected++;
143
+ rejectedLabels.push(action.annotation);
144
+ break;
145
+ case 'pending':
146
+ pending++;
147
+ break;
148
+ }
149
+ }
150
+ return {
151
+ total: batch.actions.length,
152
+ accepted,
153
+ rejected,
154
+ pending,
155
+ acceptedLabels,
156
+ rejectedLabels,
157
+ };
158
+ }
159
+ //# sourceMappingURL=staging.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"staging.js","sourceRoot":"","sources":["../../src/engine/staging.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAOrD;;;GAGG;AACH,MAAM,UAAU,WAAW,CACzB,OAAuB,EACvB,UAA4C;IAE5C,MAAM,aAAa,GAAmB,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;QAClE,iCAAiC;QACjC,MAAM,GAAG,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QACnC,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,OAAO;gBACL,KAAK;gBACL,MAAM;gBACN,eAAe,EAAE,MAAM,CAAC,MAAM;gBAC9B,UAAU,EAAE,mBAAmB,MAAM,CAAC,IAAI,EAAE;gBAC5C,MAAM,EAAE,UAAmB;aAC5B,CAAA;QACH,CAAC;QAED,kBAAkB;QAClB,MAAM,WAAW,GAAG,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;QACvD,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;YACzB,OAAO;gBACL,KAAK;gBACL,MAAM;gBACN,eAAe,EAAE,MAAM,CAAC,MAAM;gBAC9B,UAAU,EAAE,mBAAmB,WAAW,CAAC,KAAK,CAAC,OAAO,EAAE;gBAC1D,MAAM,EAAE,UAAmB;aAC5B,CAAA;QACH,CAAC;QAED,kBAAkB;QAClB,MAAM,WAAW,GAAG,gBAAgB,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;QACpF,OAAO;YACL,KAAK;YACL,MAAM;YACN,eAAe,EAAE,WAAW,CAAC,IAA+B;YAC5D,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC;YAC1B,MAAM,EAAE,SAAkB;SAC3B,CAAA;IACH,CAAC,CAAC,CAAA;IAEF,OAAO;QACL,EAAE,EAAE,MAAM,CAAC,UAAU,EAAE;QACvB,OAAO,EAAE,aAAa;QACtB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACpC,CAAA;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAChC,KAAkB,EAClB,KAAa,EACb,MAA0B;IAE1B,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QAC/C,MAAM,IAAI,UAAU,CAAC,SAAS,KAAK,6BAA6B,KAAK,CAAC,OAAO,CAAC,MAAM,WAAW,CAAC,CAAA;IAClG,CAAC;IAED,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAC5C,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CACnC,CAAA;IACD,OAAO,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,CAAA;AAC1C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAC9B,KAAkB,EAClB,KAAa,EACb,SAAkC,EAClC,UAA4C;IAE5C,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QAC/C,MAAM,IAAI,UAAU,CAAC,SAAS,KAAK,6BAA6B,KAAK,CAAC,OAAO,CAAC,MAAM,WAAW,CAAC,CAAA;IAClG,CAAC;IAED,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;IACnC,MAAM,GAAG,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IAC1C,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,IAAI,KAAK,CAAC,mBAAmB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAA;IAC1D,CAAC;IAED,MAAM,WAAW,GAAG,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,CAAA;IACnD,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,sBAAsB,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,WAAW,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAA;IAC3F,CAAC;IAED,MAAM,WAAW,GAAG,gBAAgB,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,CAAA;IACvF,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAC5C,CAAC,KAAK,KAAK;QACT,CAAC,CAAC;YACE,GAAG,CAAC;YACJ,eAAe,EAAE,WAAW,CAAC,IAA+B;YAC5D,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC;SAC3B;QACH,CAAC,CAAC,CAAC,CACN,CAAA;IACD,OAAO,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,CAAA;AAC1C,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,KAAkB,EAClB,QAA2C;IAE3C,MAAM,OAAO,GAAuB,EAAE,CAAA;IAEtC,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,UAAU,CAAC,CAAA;IAEnE,KAAK,MAAM,MAAM,IAAI,QAAQ,EAAE,CAAC;QAC9B,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QAC5C,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CAAC;gBACX,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,MAAM,EAAE,QAAQ;gBAChB,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,qCAAqC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE;gBAChE,UAAU,EAAE,MAAM,CAAC,UAAU;aAC9B,CAAC,CAAA;YACF,SAAQ;QACV,CAAC;QAED,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,eAAe,CAAC,CAAA;YACpD,OAAO,CAAC,IAAI,CAAC;gBACX,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ;gBAC9C,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,UAAU,EAAE,MAAM,CAAC,UAAU;aAC9B,CAAC,CAAA;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CAAC;gBACX,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,MAAM,EAAE,QAAQ;gBAChB,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,qBAAqB,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;gBACrG,UAAU,EAAE,MAAM,CAAC,UAAU;aAC9B,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;IAED,OAAO;QACL,OAAO;QACP,OAAO,EAAE,cAAc,CAAC,KAAK,CAAC;KAC/B,CAAA;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,KAAkB;IAC/C,IAAI,QAAQ,GAAG,CAAC,CAAA;IAChB,IAAI,QAAQ,GAAG,CAAC,CAAA;IAChB,IAAI,OAAO,GAAG,CAAC,CAAA;IACf,MAAM,cAAc,GAAa,EAAE,CAAA;IACnC,MAAM,cAAc,GAAa,EAAE,CAAA;IAEnC,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QACnC,QAAQ,MAAM,CAAC,MAAM,EAAE,CAAC;YACtB,KAAK,UAAU;gBACb,QAAQ,EAAE,CAAA;gBACV,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;gBACtC,MAAK;YACP,KAAK,UAAU;gBACb,QAAQ,EAAE,CAAA;gBACV,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;gBACtC,MAAK;YACP,KAAK,SAAS;gBACZ,OAAO,EAAE,CAAA;gBACT,MAAK;QACT,CAAC;IACH,CAAC;IAED,OAAO;QACL,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM;QAC3B,QAAQ;QACR,QAAQ;QACR,OAAO;QACP,cAAc;QACd,cAAc;KACf,CAAA;AACH,CAAC"}
@@ -0,0 +1,18 @@
1
+ import type { ActionDefinition, ParsedAction, PersonaConfig, WorkingSetReviewDecision, WorkingSet, WorkingSetSummary } from '../types.js';
2
+ import type { SideEffectHandler, SideEffectResult } from './side-effects.js';
3
+ export interface WorkingSetCommitResult {
4
+ workingSet: WorkingSet;
5
+ results: SideEffectResult[];
6
+ summary: WorkingSetSummary;
7
+ }
8
+ export interface ReviewWorkingSetDeltaInput {
9
+ deltaId: string;
10
+ decision: WorkingSetReviewDecision;
11
+ }
12
+ export declare function usesWorkingSet(config: PersonaConfig): boolean;
13
+ export declare function buildWorkingSetSection(workingSet?: WorkingSet | null): string | null;
14
+ export declare function summarizeWorkingSet(workingSet?: WorkingSet | null): WorkingSetSummary | undefined;
15
+ export declare function reviewWorkingSetDelta(workingSet: WorkingSet, input: ReviewWorkingSetDeltaInput): WorkingSet;
16
+ export declare function applyActionsToWorkingSet(existing: WorkingSet | null | undefined, actions: ParsedAction[], actionDefs: Record<string, ActionDefinition> | undefined): WorkingSet | undefined;
17
+ export declare function commitWorkingSet(workingSet: WorkingSet, handlers: Record<string, SideEffectHandler>, deltaIds?: string[]): Promise<WorkingSetCommitResult>;
18
+ //# sourceMappingURL=working-set.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"working-set.d.ts","sourceRoot":"","sources":["../../src/engine/working-set.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,gBAAgB,EAChB,YAAY,EACZ,aAAa,EAGb,wBAAwB,EACxB,UAAU,EACV,iBAAiB,EAClB,MAAM,aAAa,CAAA;AACpB,OAAO,KAAK,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAI5E,MAAM,WAAW,sBAAsB;IACrC,UAAU,EAAE,UAAU,CAAA;IACtB,OAAO,EAAE,gBAAgB,EAAE,CAAA;IAC3B,OAAO,EAAE,iBAAiB,CAAA;CAC3B;AAED,MAAM,WAAW,0BAA0B;IACzC,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,wBAAwB,CAAA;CACnC;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAE7D;AAED,wBAAgB,sBAAsB,CAAC,UAAU,CAAC,EAAE,UAAU,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAwBpF;AAED,wBAAgB,mBAAmB,CAAC,UAAU,CAAC,EAAE,UAAU,GAAG,IAAI,GAAG,iBAAiB,GAAG,SAAS,CAsBjG;AAYD,wBAAgB,qBAAqB,CACnC,UAAU,EAAE,UAAU,EACtB,KAAK,EAAE,0BAA0B,GAChC,UAAU,CAwCZ;AAED,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,UAAU,GAAG,IAAI,GAAG,SAAS,EACvC,OAAO,EAAE,YAAY,EAAE,EACvB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,GAAG,SAAS,GACvD,UAAU,GAAG,SAAS,CAuFxB;AAED,wBAAsB,gBAAgB,CACpC,UAAU,EAAE,UAAU,EACtB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,EAC3C,QAAQ,CAAC,EAAE,MAAM,EAAE,GAClB,OAAO,CAAC,sBAAsB,CAAC,CA4EjC"}
@@ -0,0 +1,246 @@
1
+ import { buildAnnotations } from '../core/actions.js';
2
+ import { MEMORY_ACTION_NAMES } from '../core/memory-actions.js';
3
+ const REVIEWABLE_STATES = new Set(['accepted', 'pending']);
4
+ export function usesWorkingSet(config) {
5
+ return config.staging?.model === 'working-set';
6
+ }
7
+ export function buildWorkingSetSection(workingSet) {
8
+ if (!workingSet)
9
+ return null;
10
+ const visible = workingSet.deltas.filter(delta => delta.reviewState === 'accepted' && delta.commitState !== 'committed');
11
+ if (visible.length === 0)
12
+ return null;
13
+ const lines = visible.map(delta => {
14
+ const commitLabel = delta.layer === 'transport'
15
+ ? delta.commitState === 'committed'
16
+ ? 'committed'
17
+ : 'accepted but not executed'
18
+ : 'current draft';
19
+ return `- ${delta.annotation} [${delta.layer}; ${commitLabel}]`;
20
+ });
21
+ return [
22
+ 'CURRENT WORKING SET:',
23
+ 'Accepted meaning-layer items are the current working truth of this conversation.',
24
+ 'Accepted transport-layer items are approved within the conversation, but not executed externally unless explicitly committed.',
25
+ ...lines,
26
+ 'Do not re-propose accepted items unless the user challenges them. Never claim a transport action already happened unless it is committed.',
27
+ ].join('\n');
28
+ }
29
+ export function summarizeWorkingSet(workingSet) {
30
+ if (!workingSet)
31
+ return undefined;
32
+ const summary = {
33
+ total: workingSet.deltas.length,
34
+ accepted: 0,
35
+ pending: 0,
36
+ rejected: 0,
37
+ superseded: 0,
38
+ ready: 0,
39
+ committed: 0,
40
+ failed: 0,
41
+ };
42
+ for (const delta of workingSet.deltas) {
43
+ summary[delta.reviewState]++;
44
+ if (delta.commitState === 'ready')
45
+ summary.ready++;
46
+ if (delta.commitState === 'committed')
47
+ summary.committed++;
48
+ if (delta.commitState === 'failed')
49
+ summary.failed++;
50
+ }
51
+ return summary;
52
+ }
53
+ function deriveReviewCommitState(delta, decision) {
54
+ if (delta.layer === 'transport') {
55
+ return decision === 'accept' ? 'ready' : 'not_required';
56
+ }
57
+ return 'not_required';
58
+ }
59
+ export function reviewWorkingSetDelta(workingSet, input) {
60
+ const index = workingSet.deltas.findIndex(delta => delta.id === input.deltaId);
61
+ if (index === -1) {
62
+ throw new Error(`Working-set delta not found: ${input.deltaId}`);
63
+ }
64
+ const current = workingSet.deltas[index];
65
+ if (current.reviewState === 'superseded') {
66
+ throw new Error(`Cannot review superseded delta: ${input.deltaId}`);
67
+ }
68
+ if (current.commitState === 'committed') {
69
+ throw new Error(`Cannot review committed delta: ${input.deltaId}`);
70
+ }
71
+ const nextReviewState = input.decision === 'accept' ? 'accepted' : 'rejected';
72
+ const nextCommitState = deriveReviewCommitState(current, input.decision);
73
+ if (current.reviewState === nextReviewState &&
74
+ current.commitState === nextCommitState &&
75
+ !current.error) {
76
+ return workingSet;
77
+ }
78
+ const now = new Date().toISOString();
79
+ const deltas = [...workingSet.deltas];
80
+ deltas[index] = {
81
+ ...current,
82
+ reviewState: nextReviewState,
83
+ commitState: nextCommitState,
84
+ updatedAt: now,
85
+ error: undefined,
86
+ };
87
+ return {
88
+ ...workingSet,
89
+ deltas,
90
+ updatedAt: now,
91
+ };
92
+ }
93
+ export function applyActionsToWorkingSet(existing, actions, actionDefs) {
94
+ if (!actionDefs || actions.length === 0) {
95
+ return existing ?? undefined;
96
+ }
97
+ const now = new Date().toISOString();
98
+ const base = existing ?? {
99
+ id: crypto.randomUUID(),
100
+ deltas: [],
101
+ createdAt: now,
102
+ updatedAt: now,
103
+ };
104
+ let deltas = [...base.deltas];
105
+ let changed = false;
106
+ for (const action of actions) {
107
+ const def = actionDefs[action.name];
108
+ if (!def)
109
+ continue;
110
+ if (MEMORY_ACTION_NAMES.has(action.name))
111
+ continue;
112
+ const validated = def.schema.safeParse(action.params);
113
+ if (!validated.success)
114
+ continue;
115
+ const layer = def.layer ?? 'meaning';
116
+ const reviewState = def.defaultReviewState ?? 'accepted';
117
+ const commitMode = def.commitMode ?? (layer === 'transport' ? 'explicit' : 'not_required');
118
+ if (commitMode === 'immediate')
119
+ continue;
120
+ const targetKey = def.targetKey?.(validated.data) ?? null;
121
+ let supersededId;
122
+ if (targetKey) {
123
+ deltas = deltas.map(delta => {
124
+ if (delta.targetKey === targetKey &&
125
+ REVIEWABLE_STATES.has(delta.reviewState) &&
126
+ delta.commitState !== 'committed') {
127
+ supersededId = delta.id;
128
+ changed = true;
129
+ return {
130
+ ...delta,
131
+ reviewState: 'superseded',
132
+ updatedAt: now,
133
+ };
134
+ }
135
+ return delta;
136
+ });
137
+ }
138
+ const annotation = buildAnnotations([{ name: action.name, params: validated.data }])[0];
139
+ const commitState = commitMode === 'explicit'
140
+ ? (reviewState === 'accepted' ? 'ready' : 'not_required')
141
+ : commitMode === 'committed'
142
+ ? 'committed'
143
+ : commitMode === 'failed'
144
+ ? 'failed'
145
+ : 'not_required';
146
+ const delta = {
147
+ id: crypto.randomUUID(),
148
+ action,
149
+ validatedParams: validated.data,
150
+ annotation,
151
+ layer,
152
+ reviewState,
153
+ commitState,
154
+ targetKey,
155
+ supersedes: supersededId,
156
+ createdAt: now,
157
+ updatedAt: now,
158
+ };
159
+ deltas.push(delta);
160
+ changed = true;
161
+ }
162
+ if (!changed)
163
+ return existing ?? undefined;
164
+ return {
165
+ ...base,
166
+ deltas,
167
+ updatedAt: now,
168
+ };
169
+ }
170
+ export async function commitWorkingSet(workingSet, handlers, deltaIds) {
171
+ const allowed = deltaIds ? new Set(deltaIds) : null;
172
+ const results = [];
173
+ const now = new Date().toISOString();
174
+ const deltas = [...workingSet.deltas];
175
+ for (let i = 0; i < deltas.length; i++) {
176
+ const delta = deltas[i];
177
+ if (delta.layer !== 'transport')
178
+ continue;
179
+ if (delta.reviewState !== 'accepted')
180
+ continue;
181
+ if (delta.commitState !== 'ready')
182
+ continue;
183
+ if (allowed && !allowed.has(delta.id))
184
+ continue;
185
+ const handler = handlers[delta.action.name];
186
+ if (!handler) {
187
+ deltas[i] = {
188
+ ...delta,
189
+ commitState: 'failed',
190
+ updatedAt: now,
191
+ error: `No handler registered for action: ${delta.action.name}`,
192
+ };
193
+ results.push({
194
+ action: delta.action,
195
+ status: 'failed',
196
+ success: false,
197
+ error: `No handler registered for action: ${delta.action.name}`,
198
+ annotation: delta.annotation,
199
+ });
200
+ continue;
201
+ }
202
+ try {
203
+ const outcome = await handler(delta.validatedParams);
204
+ deltas[i] = {
205
+ ...delta,
206
+ commitState: outcome.success ? 'committed' : 'failed',
207
+ updatedAt: now,
208
+ error: outcome.error,
209
+ };
210
+ results.push({
211
+ action: delta.action,
212
+ status: outcome.success ? 'executed' : 'failed',
213
+ success: outcome.success,
214
+ error: outcome.error,
215
+ annotation: delta.annotation,
216
+ });
217
+ }
218
+ catch (err) {
219
+ const message = `Handler error for ${delta.action.name}: ${err instanceof Error ? err.message : String(err)}`;
220
+ deltas[i] = {
221
+ ...delta,
222
+ commitState: 'failed',
223
+ updatedAt: now,
224
+ error: message,
225
+ };
226
+ results.push({
227
+ action: delta.action,
228
+ status: 'failed',
229
+ success: false,
230
+ error: message,
231
+ annotation: delta.annotation,
232
+ });
233
+ }
234
+ }
235
+ const nextWorkingSet = {
236
+ ...workingSet,
237
+ deltas,
238
+ updatedAt: now,
239
+ };
240
+ return {
241
+ workingSet: nextWorkingSet,
242
+ results,
243
+ summary: summarizeWorkingSet(nextWorkingSet),
244
+ };
245
+ }
246
+ //# sourceMappingURL=working-set.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"working-set.js","sourceRoot":"","sources":["../../src/engine/working-set.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Action & entity contract auditor — catches the "malformed tool call" pattern
3
+ * at its real source: ambiguous contracts.
4
+ *
5
+ * When an AI emits a malformed or wrong-shaped action, the instinct is to
6
+ * assume the AI is "dumb" and add validation/boxing in code. The AI is as
7
+ * capable as the engineer — the problem is almost always that the contract
8
+ * (name + schema + description + field describe() annotations) didn't
9
+ * clearly tell it what the action represents.
10
+ *
11
+ * This audit flags the specific shapes that force the AI to guess:
12
+ * - Generic action/entity names (data, handle, process, update, etc.)
13
+ * - Self-documenting names with long descriptions that restate the name
14
+ * - Vague schemas (any types, untyped strings that should be enums, etc.)
15
+ * - Missing field descriptions on non-obvious fields
16
+ * - Fights between name/description (e.g., name says "send", description says "draft")
17
+ */
18
+ import type { PersonaConfig } from '../types.js';
19
+ export interface ActionContractAuditInput {
20
+ config: PersonaConfig;
21
+ }
22
+ export interface ActionContractIssue {
23
+ severity: 'error' | 'warn';
24
+ /** 'action' or 'entity'. */
25
+ surface: 'action' | 'entity';
26
+ /** The action or entity name. */
27
+ name: string;
28
+ /** Which aspect of the contract is unclear. */
29
+ principle: 'generic-name' | 'self-documenting-overdocumented' | 'missing-description' | 'missing-field-description' | 'vague-schema-type' | 'name-description-conflict';
30
+ /** Concrete explanation. */
31
+ message: string;
32
+ /** Suggested fix. */
33
+ suggestion: string;
34
+ }
35
+ export interface ActionContractAuditResult {
36
+ pass: boolean;
37
+ issues: ActionContractIssue[];
38
+ }
39
+ export declare function auditActionContracts(input: ActionContractAuditInput): ActionContractAuditResult;
40
+ //# sourceMappingURL=action-contracts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"action-contracts.d.ts","sourceRoot":"","sources":["../../src/evals/action-contracts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,KAAK,EAAE,aAAa,EAAkC,MAAM,aAAa,CAAA;AAGhF,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,aAAa,CAAA;CACtB;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,OAAO,GAAG,MAAM,CAAA;IAC1B,4BAA4B;IAC5B,OAAO,EAAE,QAAQ,GAAG,QAAQ,CAAA;IAC5B,iCAAiC;IACjC,IAAI,EAAE,MAAM,CAAA;IACZ,+CAA+C;IAC/C,SAAS,EACL,cAAc,GACd,iCAAiC,GACjC,qBAAqB,GACrB,2BAA2B,GAC3B,mBAAmB,GACnB,2BAA2B,CAAA;IAC/B,4BAA4B;IAC5B,OAAO,EAAE,MAAM,CAAA;IACf,qBAAqB;IACrB,UAAU,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,OAAO,CAAA;IACb,MAAM,EAAE,mBAAmB,EAAE,CAAA;CAC9B;AAoBD,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,wBAAwB,GAAG,yBAAyB,CAgB/F"}