@telora/factory 0.4.5

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 (301) hide show
  1. package/dist/audit.d.ts +69 -0
  2. package/dist/audit.d.ts.map +1 -0
  3. package/dist/audit.js +376 -0
  4. package/dist/audit.js.map +1 -0
  5. package/dist/builder-completion.d.ts +35 -0
  6. package/dist/builder-completion.d.ts.map +1 -0
  7. package/dist/builder-completion.js +375 -0
  8. package/dist/builder-completion.js.map +1 -0
  9. package/dist/builder-spawner.d.ts +40 -0
  10. package/dist/builder-spawner.d.ts.map +1 -0
  11. package/dist/builder-spawner.js +493 -0
  12. package/dist/builder-spawner.js.map +1 -0
  13. package/dist/completion-gate.d.ts +52 -0
  14. package/dist/completion-gate.d.ts.map +1 -0
  15. package/dist/completion-gate.js +336 -0
  16. package/dist/completion-gate.js.map +1 -0
  17. package/dist/completion-report.d.ts +36 -0
  18. package/dist/completion-report.d.ts.map +1 -0
  19. package/dist/completion-report.js +348 -0
  20. package/dist/completion-report.js.map +1 -0
  21. package/dist/completion.d.ts +58 -0
  22. package/dist/completion.d.ts.map +1 -0
  23. package/dist/completion.js +287 -0
  24. package/dist/completion.js.map +1 -0
  25. package/dist/config.d.ts +16 -0
  26. package/dist/config.d.ts.map +1 -0
  27. package/dist/config.js +57 -0
  28. package/dist/config.js.map +1 -0
  29. package/dist/context-manager.d.ts +152 -0
  30. package/dist/context-manager.d.ts.map +1 -0
  31. package/dist/context-manager.js +421 -0
  32. package/dist/context-manager.js.map +1 -0
  33. package/dist/crash-detection.d.ts +70 -0
  34. package/dist/crash-detection.d.ts.map +1 -0
  35. package/dist/crash-detection.js +123 -0
  36. package/dist/crash-detection.js.map +1 -0
  37. package/dist/crash-recovery.d.ts +83 -0
  38. package/dist/crash-recovery.d.ts.map +1 -0
  39. package/dist/crash-recovery.js +522 -0
  40. package/dist/crash-recovery.js.map +1 -0
  41. package/dist/crash-resolution.d.ts +34 -0
  42. package/dist/crash-resolution.d.ts.map +1 -0
  43. package/dist/crash-resolution.js +382 -0
  44. package/dist/crash-resolution.js.map +1 -0
  45. package/dist/escalation.d.ts +150 -0
  46. package/dist/escalation.d.ts.map +1 -0
  47. package/dist/escalation.js +352 -0
  48. package/dist/escalation.js.map +1 -0
  49. package/dist/execution-target.d.ts +31 -0
  50. package/dist/execution-target.d.ts.map +1 -0
  51. package/dist/execution-target.js +71 -0
  52. package/dist/execution-target.js.map +1 -0
  53. package/dist/execution-unit-init.d.ts +28 -0
  54. package/dist/execution-unit-init.d.ts.map +1 -0
  55. package/dist/execution-unit-init.js +115 -0
  56. package/dist/execution-unit-init.js.map +1 -0
  57. package/dist/execution.d.ts +17 -0
  58. package/dist/execution.d.ts.map +1 -0
  59. package/dist/execution.js +20 -0
  60. package/dist/execution.js.map +1 -0
  61. package/dist/factory-engine.d.ts +100 -0
  62. package/dist/factory-engine.d.ts.map +1 -0
  63. package/dist/factory-engine.js +243 -0
  64. package/dist/factory-engine.js.map +1 -0
  65. package/dist/gap-detection.d.ts +43 -0
  66. package/dist/gap-detection.d.ts.map +1 -0
  67. package/dist/gap-detection.js +149 -0
  68. package/dist/gap-detection.js.map +1 -0
  69. package/dist/gate-context.d.ts +23 -0
  70. package/dist/gate-context.d.ts.map +1 -0
  71. package/dist/gate-context.js +63 -0
  72. package/dist/gate-context.js.map +1 -0
  73. package/dist/gate-engine.d.ts +55 -0
  74. package/dist/gate-engine.d.ts.map +1 -0
  75. package/dist/gate-engine.js +191 -0
  76. package/dist/gate-engine.js.map +1 -0
  77. package/dist/gates/adversarial.d.ts +59 -0
  78. package/dist/gates/adversarial.d.ts.map +1 -0
  79. package/dist/gates/adversarial.js +426 -0
  80. package/dist/gates/adversarial.js.map +1 -0
  81. package/dist/gates/adversary-spawner.d.ts +35 -0
  82. package/dist/gates/adversary-spawner.d.ts.map +1 -0
  83. package/dist/gates/adversary-spawner.js +286 -0
  84. package/dist/gates/adversary-spawner.js.map +1 -0
  85. package/dist/gates/adversary-test-dir.d.ts +41 -0
  86. package/dist/gates/adversary-test-dir.d.ts.map +1 -0
  87. package/dist/gates/adversary-test-dir.js +150 -0
  88. package/dist/gates/adversary-test-dir.js.map +1 -0
  89. package/dist/gates/behavioral-parser.d.ts +32 -0
  90. package/dist/gates/behavioral-parser.d.ts.map +1 -0
  91. package/dist/gates/behavioral-parser.js +190 -0
  92. package/dist/gates/behavioral-parser.js.map +1 -0
  93. package/dist/gates/behavioral-runner.d.ts +36 -0
  94. package/dist/gates/behavioral-runner.d.ts.map +1 -0
  95. package/dist/gates/behavioral-runner.js +306 -0
  96. package/dist/gates/behavioral-runner.js.map +1 -0
  97. package/dist/gates/behavioral.d.ts +37 -0
  98. package/dist/gates/behavioral.d.ts.map +1 -0
  99. package/dist/gates/behavioral.js +485 -0
  100. package/dist/gates/behavioral.js.map +1 -0
  101. package/dist/gates/deterministic.d.ts +24 -0
  102. package/dist/gates/deterministic.d.ts.map +1 -0
  103. package/dist/gates/deterministic.js +186 -0
  104. package/dist/gates/deterministic.js.map +1 -0
  105. package/dist/git-factory.d.ts +59 -0
  106. package/dist/git-factory.d.ts.map +1 -0
  107. package/dist/git-factory.js +102 -0
  108. package/dist/git-factory.js.map +1 -0
  109. package/dist/guard-evaluation.d.ts +48 -0
  110. package/dist/guard-evaluation.d.ts.map +1 -0
  111. package/dist/guard-evaluation.js +416 -0
  112. package/dist/guard-evaluation.js.map +1 -0
  113. package/dist/index.d.ts +30 -0
  114. package/dist/index.d.ts.map +1 -0
  115. package/dist/index.js +39 -0
  116. package/dist/index.js.map +1 -0
  117. package/dist/instance-completion.d.ts +34 -0
  118. package/dist/instance-completion.d.ts.map +1 -0
  119. package/dist/instance-completion.js +366 -0
  120. package/dist/instance-completion.js.map +1 -0
  121. package/dist/instance-lifecycle.d.ts +15 -0
  122. package/dist/instance-lifecycle.d.ts.map +1 -0
  123. package/dist/instance-lifecycle.js +18 -0
  124. package/dist/instance-lifecycle.js.map +1 -0
  125. package/dist/instance-phase-dispatch.d.ts +75 -0
  126. package/dist/instance-phase-dispatch.d.ts.map +1 -0
  127. package/dist/instance-phase-dispatch.js +674 -0
  128. package/dist/instance-phase-dispatch.js.map +1 -0
  129. package/dist/instance-poll-loop.d.ts +43 -0
  130. package/dist/instance-poll-loop.d.ts.map +1 -0
  131. package/dist/instance-poll-loop.js +360 -0
  132. package/dist/instance-poll-loop.js.map +1 -0
  133. package/dist/instance-state-machine.d.ts +52 -0
  134. package/dist/instance-state-machine.d.ts.map +1 -0
  135. package/dist/instance-state-machine.js +235 -0
  136. package/dist/instance-state-machine.js.map +1 -0
  137. package/dist/log-manager.d.ts +28 -0
  138. package/dist/log-manager.d.ts.map +1 -0
  139. package/dist/log-manager.js +71 -0
  140. package/dist/log-manager.js.map +1 -0
  141. package/dist/pipeline-evaluator.d.ts +61 -0
  142. package/dist/pipeline-evaluator.d.ts.map +1 -0
  143. package/dist/pipeline-evaluator.js +107 -0
  144. package/dist/pipeline-evaluator.js.map +1 -0
  145. package/dist/pipeline-metrics.d.ts +52 -0
  146. package/dist/pipeline-metrics.d.ts.map +1 -0
  147. package/dist/pipeline-metrics.js +40 -0
  148. package/dist/pipeline-metrics.js.map +1 -0
  149. package/dist/pipeline-traversal.d.ts +43 -0
  150. package/dist/pipeline-traversal.d.ts.map +1 -0
  151. package/dist/pipeline-traversal.js +68 -0
  152. package/dist/pipeline-traversal.js.map +1 -0
  153. package/dist/plan-parser.d.ts +76 -0
  154. package/dist/plan-parser.d.ts.map +1 -0
  155. package/dist/plan-parser.js +223 -0
  156. package/dist/plan-parser.js.map +1 -0
  157. package/dist/planning-phase.d.ts +52 -0
  158. package/dist/planning-phase.d.ts.map +1 -0
  159. package/dist/planning-phase.js +444 -0
  160. package/dist/planning-phase.js.map +1 -0
  161. package/dist/planning-prompt.d.ts +64 -0
  162. package/dist/planning-prompt.d.ts.map +1 -0
  163. package/dist/planning-prompt.js +251 -0
  164. package/dist/planning-prompt.js.map +1 -0
  165. package/dist/planning.d.ts +16 -0
  166. package/dist/planning.d.ts.map +1 -0
  167. package/dist/planning.js +17 -0
  168. package/dist/planning.js.map +1 -0
  169. package/dist/process-runner.d.ts +41 -0
  170. package/dist/process-runner.d.ts.map +1 -0
  171. package/dist/process-runner.js +81 -0
  172. package/dist/process-runner.js.map +1 -0
  173. package/dist/product-config.d.ts +34 -0
  174. package/dist/product-config.d.ts.map +1 -0
  175. package/dist/product-config.js +43 -0
  176. package/dist/product-config.js.map +1 -0
  177. package/dist/queries/cycle-evaluations.d.ts +23 -0
  178. package/dist/queries/cycle-evaluations.d.ts.map +1 -0
  179. package/dist/queries/cycle-evaluations.js +37 -0
  180. package/dist/queries/cycle-evaluations.js.map +1 -0
  181. package/dist/queries/escalations.d.ts +30 -0
  182. package/dist/queries/escalations.d.ts.map +1 -0
  183. package/dist/queries/escalations.js +42 -0
  184. package/dist/queries/escalations.js.map +1 -0
  185. package/dist/queries/execution-units.d.ts +76 -0
  186. package/dist/queries/execution-units.d.ts.map +1 -0
  187. package/dist/queries/execution-units.js +109 -0
  188. package/dist/queries/execution-units.js.map +1 -0
  189. package/dist/queries/gate-results.d.ts +32 -0
  190. package/dist/queries/gate-results.d.ts.map +1 -0
  191. package/dist/queries/gate-results.js +44 -0
  192. package/dist/queries/gate-results.js.map +1 -0
  193. package/dist/queries/instances.d.ts +51 -0
  194. package/dist/queries/instances.d.ts.map +1 -0
  195. package/dist/queries/instances.js +77 -0
  196. package/dist/queries/instances.js.map +1 -0
  197. package/dist/queries/sessions.d.ts +50 -0
  198. package/dist/queries/sessions.d.ts.map +1 -0
  199. package/dist/queries/sessions.js +81 -0
  200. package/dist/queries/sessions.js.map +1 -0
  201. package/dist/queries/shared.d.ts +38 -0
  202. package/dist/queries/shared.d.ts.map +1 -0
  203. package/dist/queries/shared.js +119 -0
  204. package/dist/queries/shared.js.map +1 -0
  205. package/dist/queries/specs.d.ts +12 -0
  206. package/dist/queries/specs.d.ts.map +1 -0
  207. package/dist/queries/specs.js +21 -0
  208. package/dist/queries/specs.js.map +1 -0
  209. package/dist/queries/strategies.d.ts +14 -0
  210. package/dist/queries/strategies.d.ts.map +1 -0
  211. package/dist/queries/strategies.js +18 -0
  212. package/dist/queries/strategies.js.map +1 -0
  213. package/dist/queries/work-units.d.ts +42 -0
  214. package/dist/queries/work-units.d.ts.map +1 -0
  215. package/dist/queries/work-units.js +57 -0
  216. package/dist/queries/work-units.js.map +1 -0
  217. package/dist/queries/workflows.d.ts +29 -0
  218. package/dist/queries/workflows.d.ts.map +1 -0
  219. package/dist/queries/workflows.js +103 -0
  220. package/dist/queries/workflows.js.map +1 -0
  221. package/dist/remediation-units.d.ts +40 -0
  222. package/dist/remediation-units.d.ts.map +1 -0
  223. package/dist/remediation-units.js +263 -0
  224. package/dist/remediation-units.js.map +1 -0
  225. package/dist/replanning.d.ts +72 -0
  226. package/dist/replanning.d.ts.map +1 -0
  227. package/dist/replanning.js +403 -0
  228. package/dist/replanning.js.map +1 -0
  229. package/dist/resource-limits.d.ts +62 -0
  230. package/dist/resource-limits.d.ts.map +1 -0
  231. package/dist/resource-limits.js +322 -0
  232. package/dist/resource-limits.js.map +1 -0
  233. package/dist/scheduler.d.ts +98 -0
  234. package/dist/scheduler.d.ts.map +1 -0
  235. package/dist/scheduler.js +203 -0
  236. package/dist/scheduler.js.map +1 -0
  237. package/dist/session-adapter.d.ts +89 -0
  238. package/dist/session-adapter.d.ts.map +1 -0
  239. package/dist/session-adapter.js +108 -0
  240. package/dist/session-adapter.js.map +1 -0
  241. package/dist/sop-generator.d.ts +29 -0
  242. package/dist/sop-generator.d.ts.map +1 -0
  243. package/dist/sop-generator.js +235 -0
  244. package/dist/sop-generator.js.map +1 -0
  245. package/dist/spec-profiles.d.ts +41 -0
  246. package/dist/spec-profiles.d.ts.map +1 -0
  247. package/dist/spec-profiles.js +131 -0
  248. package/dist/spec-profiles.js.map +1 -0
  249. package/dist/strategy-design-graph.d.ts +23 -0
  250. package/dist/strategy-design-graph.d.ts.map +1 -0
  251. package/dist/strategy-design-graph.js +205 -0
  252. package/dist/strategy-design-graph.js.map +1 -0
  253. package/dist/strategy-design-prompt.d.ts +28 -0
  254. package/dist/strategy-design-prompt.d.ts.map +1 -0
  255. package/dist/strategy-design-prompt.js +108 -0
  256. package/dist/strategy-design-prompt.js.map +1 -0
  257. package/dist/strategy-design-schema.d.ts +767 -0
  258. package/dist/strategy-design-schema.d.ts.map +1 -0
  259. package/dist/strategy-design-schema.js +126 -0
  260. package/dist/strategy-design-schema.js.map +1 -0
  261. package/dist/strategy-design.d.ts +69 -0
  262. package/dist/strategy-design.d.ts.map +1 -0
  263. package/dist/strategy-design.js +411 -0
  264. package/dist/strategy-design.js.map +1 -0
  265. package/dist/strategy-gating.d.ts +31 -0
  266. package/dist/strategy-gating.d.ts.map +1 -0
  267. package/dist/strategy-gating.js +276 -0
  268. package/dist/strategy-gating.js.map +1 -0
  269. package/dist/team-prompt-builder.d.ts +47 -0
  270. package/dist/team-prompt-builder.d.ts.map +1 -0
  271. package/dist/team-prompt-builder.js +362 -0
  272. package/dist/team-prompt-builder.js.map +1 -0
  273. package/dist/trace-engine.d.ts +40 -0
  274. package/dist/trace-engine.d.ts.map +1 -0
  275. package/dist/trace-engine.js +344 -0
  276. package/dist/trace-engine.js.map +1 -0
  277. package/dist/types.d.ts +612 -0
  278. package/dist/types.d.ts.map +1 -0
  279. package/dist/types.js +9 -0
  280. package/dist/types.js.map +1 -0
  281. package/dist/unit-session-lifecycle.d.ts +78 -0
  282. package/dist/unit-session-lifecycle.d.ts.map +1 -0
  283. package/dist/unit-session-lifecycle.js +141 -0
  284. package/dist/unit-session-lifecycle.js.map +1 -0
  285. package/dist/unit-session.d.ts +30 -0
  286. package/dist/unit-session.d.ts.map +1 -0
  287. package/dist/unit-session.js +370 -0
  288. package/dist/unit-session.js.map +1 -0
  289. package/dist/watchdogs.d.ts +33 -0
  290. package/dist/watchdogs.d.ts.map +1 -0
  291. package/dist/watchdogs.js +170 -0
  292. package/dist/watchdogs.js.map +1 -0
  293. package/dist/work-unit-scheduler.d.ts +34 -0
  294. package/dist/work-unit-scheduler.d.ts.map +1 -0
  295. package/dist/work-unit-scheduler.js +91 -0
  296. package/dist/work-unit-scheduler.js.map +1 -0
  297. package/dist/workflow-transition.d.ts +90 -0
  298. package/dist/workflow-transition.d.ts.map +1 -0
  299. package/dist/workflow-transition.js +340 -0
  300. package/dist/workflow-transition.js.map +1 -0
  301. package/package.json +65 -0
@@ -0,0 +1,89 @@
1
+ /**
2
+ * Session communication adapter -- abstracts how the daemon communicates
3
+ * with a running Claude Code agent session.
4
+ *
5
+ * McpAdapter detects work unit completion by polling the DB for status
6
+ * changes (agents call telora_factory_work_unit_update via MCP tool).
7
+ * Work dispatch and gate feedback go through stdin.
8
+ *
9
+ * All session monitoring and work dispatch goes through the adapter --
10
+ * no code outside this module should directly parse stdout or write to stdin.
11
+ */
12
+ import type { Writable } from 'node:stream';
13
+ import type { FactoryWorkUnit, FactoryInstanceState } from './types.js';
14
+ /**
15
+ * Interface for communicating with a running agent session.
16
+ *
17
+ * Implementations wrap the concrete protocol (stdout signal parsing,
18
+ * MCP tools, etc.) behind a uniform API.
19
+ */
20
+ export interface SessionCommunicationAdapter {
21
+ /**
22
+ * Register a callback for when a work unit is completed by the agent.
23
+ * Called with the work unit ID.
24
+ */
25
+ onWorkUnitComplete(callback: (workUnitId: string) => void): void;
26
+ /**
27
+ * Dispatch a batch of work units to the agent session.
28
+ */
29
+ dispatchWork(units: FactoryWorkUnit[], state: FactoryInstanceState): void;
30
+ /**
31
+ * Send a free-form message to the agent session (e.g., gate feedback).
32
+ * Returns true if the message was sent successfully.
33
+ */
34
+ sendMessage(content: string): boolean;
35
+ /**
36
+ * Clean up resources (detach listeners, etc.).
37
+ */
38
+ dispose(): void;
39
+ }
40
+ /**
41
+ * Dependencies injected into McpAdapter.
42
+ * Avoids direct imports for testability.
43
+ */
44
+ export interface McpAdapterDeps {
45
+ /** Factory instance ID to poll work units for. */
46
+ instanceId: string;
47
+ /** Process stdin writable for sending messages. */
48
+ stdin: Writable | null;
49
+ /** sendMessage function from daemon-core. */
50
+ sendMessageFn: (stdin: Writable, content: string) => boolean;
51
+ /** Build work batch directive text. */
52
+ buildDirectiveFn: (units: FactoryWorkUnit[], state: FactoryInstanceState) => string;
53
+ /** Polling interval in ms (default 5000). */
54
+ pollIntervalMs?: number;
55
+ /** Injected query function for testability. Defaults to getCompletedWorkUnits. */
56
+ queryCompletedFn?: (instanceId: string) => Promise<FactoryWorkUnit[]>;
57
+ }
58
+ /**
59
+ * Adapter that detects work unit completion by polling the DB for status
60
+ * changes. Agents call telora_factory_work_unit_update via MCP to mark
61
+ * units completed; this adapter polls for those changes.
62
+ *
63
+ * Work dispatch and gate feedback still go through stdin (hybrid approach).
64
+ */
65
+ export declare class McpAdapter implements SessionCommunicationAdapter {
66
+ private deps;
67
+ private disposed;
68
+ private pollTimer;
69
+ private callback;
70
+ /** Set of work unit IDs already reported as completed (prevents duplicates). */
71
+ private reportedCompletedIds;
72
+ constructor(deps: McpAdapterDeps);
73
+ onWorkUnitComplete(callback: (workUnitId: string) => void): void;
74
+ dispatchWork(units: FactoryWorkUnit[], state: FactoryInstanceState): void;
75
+ sendMessage(content: string): boolean;
76
+ /**
77
+ * Update the stdin reference (e.g., when it's nulled on process exit).
78
+ */
79
+ updateStdin(stdin: Writable | null): void;
80
+ dispose(): void;
81
+ /**
82
+ * Reset the reported completed set. Called when work units are cycled
83
+ * back to in_progress after a gate failure, so re-completions are detected.
84
+ */
85
+ resetCompleted(workUnitIds: string[]): void;
86
+ private startPolling;
87
+ private poll;
88
+ }
89
+ //# sourceMappingURL=session-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-adapter.d.ts","sourceRoot":"","sources":["../src/session-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAOxE;;;;;GAKG;AACH,MAAM,WAAW,2BAA2B;IAC1C;;;OAGG;IACH,kBAAkB,CAAC,QAAQ,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI,CAAC;IAEjE;;OAEG;IACH,YAAY,CAAC,KAAK,EAAE,eAAe,EAAE,EAAE,KAAK,EAAE,oBAAoB,GAAG,IAAI,CAAC;IAE1E;;;OAGG;IACH,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;IAEtC;;OAEG;IACH,OAAO,IAAI,IAAI,CAAC;CACjB;AASD;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,kDAAkD;IAClD,UAAU,EAAE,MAAM,CAAC;IACnB,mDAAmD;IACnD,KAAK,EAAE,QAAQ,GAAG,IAAI,CAAC;IACvB,6CAA6C;IAC7C,aAAa,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC;IAC7D,uCAAuC;IACvC,gBAAgB,EAAE,CAAC,KAAK,EAAE,eAAe,EAAE,EAAE,KAAK,EAAE,oBAAoB,KAAK,MAAM,CAAC;IACpF,6CAA6C;IAC7C,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,kFAAkF;IAClF,gBAAgB,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC;CACvE;AAED;;;;;;GAMG;AACH,qBAAa,UAAW,YAAW,2BAA2B;IAC5D,OAAO,CAAC,IAAI,CAAiB;IAC7B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,SAAS,CAA+C;IAChE,OAAO,CAAC,QAAQ,CAA+C;IAC/D,gFAAgF;IAChF,OAAO,CAAC,oBAAoB,CAAqB;gBAErC,IAAI,EAAE,cAAc;IAIhC,kBAAkB,CAAC,QAAQ,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI;IAKhE,YAAY,CAAC,KAAK,EAAE,eAAe,EAAE,EAAE,KAAK,EAAE,oBAAoB,GAAG,IAAI;IAMzE,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAKrC;;OAEG;IACH,WAAW,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI,GAAG,IAAI;IAIzC,OAAO,IAAI,IAAI;IAQf;;;OAGG;IACH,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,IAAI;IAU3C,OAAO,CAAC,YAAY;YAaN,IAAI;CAyBnB"}
@@ -0,0 +1,108 @@
1
+ /**
2
+ * Session communication adapter -- abstracts how the daemon communicates
3
+ * with a running Claude Code agent session.
4
+ *
5
+ * McpAdapter detects work unit completion by polling the DB for status
6
+ * changes (agents call telora_factory_work_unit_update via MCP tool).
7
+ * Work dispatch and gate feedback go through stdin.
8
+ *
9
+ * All session monitoring and work dispatch goes through the adapter --
10
+ * no code outside this module should directly parse stdout or write to stdin.
11
+ */
12
+ import { getCompletedWorkUnits } from './queries/work-units.js';
13
+ // ============================================================================
14
+ // MCP adapter (DB polling based)
15
+ // ============================================================================
16
+ /** Default polling interval for MCP adapter (ms). */
17
+ const DEFAULT_MCP_POLL_INTERVAL_MS = 5000;
18
+ /**
19
+ * Adapter that detects work unit completion by polling the DB for status
20
+ * changes. Agents call telora_factory_work_unit_update via MCP to mark
21
+ * units completed; this adapter polls for those changes.
22
+ *
23
+ * Work dispatch and gate feedback still go through stdin (hybrid approach).
24
+ */
25
+ export class McpAdapter {
26
+ deps;
27
+ disposed = false;
28
+ pollTimer = null;
29
+ callback = null;
30
+ /** Set of work unit IDs already reported as completed (prevents duplicates). */
31
+ reportedCompletedIds = new Set();
32
+ constructor(deps) {
33
+ this.deps = deps;
34
+ }
35
+ onWorkUnitComplete(callback) {
36
+ this.callback = callback;
37
+ this.startPolling();
38
+ }
39
+ dispatchWork(units, state) {
40
+ if (this.disposed || !this.deps.stdin || this.deps.stdin.destroyed)
41
+ return;
42
+ const directive = this.deps.buildDirectiveFn(units, state);
43
+ this.deps.sendMessageFn(this.deps.stdin, directive);
44
+ }
45
+ sendMessage(content) {
46
+ if (this.disposed || !this.deps.stdin || this.deps.stdin.destroyed)
47
+ return false;
48
+ return this.deps.sendMessageFn(this.deps.stdin, content);
49
+ }
50
+ /**
51
+ * Update the stdin reference (e.g., when it's nulled on process exit).
52
+ */
53
+ updateStdin(stdin) {
54
+ this.deps.stdin = stdin;
55
+ }
56
+ dispose() {
57
+ this.disposed = true;
58
+ if (this.pollTimer) {
59
+ clearInterval(this.pollTimer);
60
+ this.pollTimer = null;
61
+ }
62
+ }
63
+ /**
64
+ * Reset the reported completed set. Called when work units are cycled
65
+ * back to in_progress after a gate failure, so re-completions are detected.
66
+ */
67
+ resetCompleted(workUnitIds) {
68
+ for (const id of workUnitIds) {
69
+ this.reportedCompletedIds.delete(id);
70
+ }
71
+ }
72
+ // --------------------------------------------------------------------------
73
+ // Internal polling
74
+ // --------------------------------------------------------------------------
75
+ startPolling() {
76
+ if (this.pollTimer || this.disposed)
77
+ return;
78
+ const intervalMs = this.deps.pollIntervalMs ?? DEFAULT_MCP_POLL_INTERVAL_MS;
79
+ this.pollTimer = setInterval(() => {
80
+ this.poll().catch((err) => {
81
+ console.error('[McpAdapter] Poll error:', err.message);
82
+ });
83
+ }, intervalMs);
84
+ }
85
+ async poll() {
86
+ if (this.disposed || !this.callback)
87
+ return;
88
+ const queryFn = this.deps.queryCompletedFn ?? getCompletedWorkUnits;
89
+ const completed = await queryFn(this.deps.instanceId);
90
+ // Build set of currently completed IDs from DB
91
+ const currentlyCompleted = new Set(completed.map((u) => u.id));
92
+ // Detect units cycled back from completed (gate failure retry).
93
+ // Remove them from reportedCompletedIds so re-completion is detected.
94
+ for (const id of this.reportedCompletedIds) {
95
+ if (!currentlyCompleted.has(id)) {
96
+ this.reportedCompletedIds.delete(id);
97
+ }
98
+ }
99
+ // Report newly completed units
100
+ for (const unit of completed) {
101
+ if (!this.reportedCompletedIds.has(unit.id)) {
102
+ this.reportedCompletedIds.add(unit.id);
103
+ this.callback(unit.id);
104
+ }
105
+ }
106
+ }
107
+ }
108
+ //# sourceMappingURL=session-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-adapter.js","sourceRoot":"","sources":["../src/session-adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Factory SOP (Standard Operating Procedure) Generator.
3
+ *
4
+ * Generates a markdown SOP document from a pipeline graph's promise contracts.
5
+ * Each node's Consumes / Produces / Delegates contract is chained into a
6
+ * readable operating procedure that establishes what each pipeline stage
7
+ * handles versus what the factory infrastructure handles.
8
+ *
9
+ * Nodes without authored contracts fall back to template type defaults.
10
+ * Loop-back edges (e.g. review -> engineering) are surfaced as feedback
11
+ * paths rather than breaking the topological sort.
12
+ *
13
+ * @module factory/sop-generator
14
+ */
15
+ import type { PipelineGraph } from './types.js';
16
+ /**
17
+ * Generate a Factory SOP (Standard Operating Procedure) document from a
18
+ * pipeline graph.
19
+ *
20
+ * The SOP chains each node's promise contracts in topological order,
21
+ * establishing what each stage consumes, produces, and delegates to
22
+ * infrastructure. Loop-back edges are surfaced as feedback paths at
23
+ * the end of the document.
24
+ *
25
+ * @param graph - The pipeline graph from the blueprint
26
+ * @returns Markdown SOP document, or empty string for null/empty graphs
27
+ */
28
+ export declare function generateFactorySOP(graph: PipelineGraph | null | undefined): string;
29
+ //# sourceMappingURL=sop-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sop-generator.d.ts","sourceRoot":"","sources":["../src/sop-generator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,aAAa,EAA8B,MAAM,YAAY,CAAC;AA2K5E;;;;;;;;;;;GAWG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CA6ElF"}
@@ -0,0 +1,235 @@
1
+ /**
2
+ * Factory SOP (Standard Operating Procedure) Generator.
3
+ *
4
+ * Generates a markdown SOP document from a pipeline graph's promise contracts.
5
+ * Each node's Consumes / Produces / Delegates contract is chained into a
6
+ * readable operating procedure that establishes what each pipeline stage
7
+ * handles versus what the factory infrastructure handles.
8
+ *
9
+ * Nodes without authored contracts fall back to template type defaults.
10
+ * Loop-back edges (e.g. review -> engineering) are surfaced as feedback
11
+ * paths rather than breaking the topological sort.
12
+ *
13
+ * @module factory/sop-generator
14
+ */
15
+ const DEFAULT_CONTRACTS = {
16
+ planning: {
17
+ consumes: 'Blueprint spec (synthesized specification from the authoring conversation) and any prior cycle gate results if this is a re-planning iteration.',
18
+ produces: 'Prioritized work unit DAG with acceptance criteria per unit. Each work unit is independently implementable and testable.',
19
+ delegates: 'Gate execution (typecheck, lint, build, test), session management, codebase audit, and cycle evaluation to factory infrastructure.',
20
+ },
21
+ engineering: {
22
+ consumes: 'Approved work unit spec with acceptance criteria from the planning stage.',
23
+ produces: 'Committed code satisfying the work unit spec. All changes committed to the worktree branch.',
24
+ delegates: 'Gate execution (typecheck, lint, build, test) to factory infrastructure. Agents write code and tests but do not run the gate suite themselves.',
25
+ },
26
+ review: {
27
+ consumes: 'Committed code from the engineering stage plus gate results (pass/fail with output) from factory infrastructure.',
28
+ produces: 'Gap analysis report identifying unmet spec requirements. List of remediation work units if gaps are found.',
29
+ delegates: 'Re-running gates, session lifecycle, and cycle iteration decisions to factory infrastructure.',
30
+ },
31
+ qa: {
32
+ consumes: 'Committed code from engineering and gap analysis from the review stage.',
33
+ produces: 'QA pass/fail report with evidence. Critical failures trigger loop-back to engineering via pipeline edge conditions.',
34
+ delegates: 'Gate execution, cycle evaluation, and pipeline advancement decisions to factory infrastructure.',
35
+ },
36
+ terminal: {
37
+ consumes: '',
38
+ produces: '',
39
+ delegates: '',
40
+ },
41
+ };
42
+ // ============================================================================
43
+ // Topological sort (Kahn's algorithm, loop-back edges excluded)
44
+ // ============================================================================
45
+ /**
46
+ * Identify loop-back edges in the graph. A loop-back edge is one whose
47
+ * target has lower topological order than its source in the forward DAG.
48
+ * We detect these by running Kahn's algorithm on the full graph and
49
+ * identifying edges that create cycles (i.e. nodes not reached by the sort).
50
+ *
51
+ * Simpler heuristic: an edge is a loop-back if it points from a node that
52
+ * appears later in the node list to one that appears earlier, OR if removing
53
+ * it makes the graph a DAG. We use the standard cycle-detection approach:
54
+ * run Kahn's, any edge whose target still has non-zero in-degree is part of
55
+ * a cycle and thus a loop-back.
56
+ */
57
+ function partitionEdges(nodes, edges) {
58
+ const nodeIds = new Set(nodes.map((n) => n.id));
59
+ // Use DFS to classify edges. Back-edges (target is an ancestor in the DFS
60
+ // tree) are loop-backs; all other valid edges are forward.
61
+ const adjacency = new Map();
62
+ for (const node of nodes) {
63
+ adjacency.set(node.id, []);
64
+ }
65
+ for (const edge of edges) {
66
+ if (!nodeIds.has(edge.from) || !nodeIds.has(edge.to))
67
+ continue;
68
+ adjacency.get(edge.from)?.push({ to: edge.to, edge });
69
+ }
70
+ const WHITE = 0; // unvisited
71
+ const GRAY = 1; // in current DFS path (ancestor)
72
+ const BLACK = 2; // fully processed
73
+ const color = new Map();
74
+ for (const node of nodes)
75
+ color.set(node.id, WHITE);
76
+ const forwardEdges = [];
77
+ const loopBackEdges = [];
78
+ function dfs(nodeId) {
79
+ color.set(nodeId, GRAY);
80
+ for (const { to, edge } of adjacency.get(nodeId) ?? []) {
81
+ const toColor = color.get(to) ?? BLACK;
82
+ if (toColor === GRAY) {
83
+ // Target is an ancestor in current DFS path -> back-edge (loop-back)
84
+ loopBackEdges.push(edge);
85
+ }
86
+ else {
87
+ forwardEdges.push(edge);
88
+ if (toColor === WHITE) {
89
+ dfs(to);
90
+ }
91
+ }
92
+ }
93
+ color.set(nodeId, BLACK);
94
+ }
95
+ for (const node of nodes) {
96
+ if (color.get(node.id) === WHITE) {
97
+ dfs(node.id);
98
+ }
99
+ }
100
+ return { forwardEdges, loopBackEdges };
101
+ }
102
+ /**
103
+ * Topologically sort pipeline nodes using only forward edges.
104
+ * Returns nodes in execution order (entry nodes first).
105
+ */
106
+ function topoSort(nodes, forwardEdges) {
107
+ if (nodes.length === 0)
108
+ return [];
109
+ const inDegree = new Map();
110
+ const adjacency = new Map();
111
+ for (const node of nodes) {
112
+ inDegree.set(node.id, 0);
113
+ adjacency.set(node.id, []);
114
+ }
115
+ for (const edge of forwardEdges) {
116
+ inDegree.set(edge.to, (inDegree.get(edge.to) ?? 0) + 1);
117
+ adjacency.get(edge.from)?.push(edge.to);
118
+ }
119
+ const queue = [];
120
+ for (const [id, deg] of inDegree) {
121
+ if (deg === 0)
122
+ queue.push(id);
123
+ }
124
+ const sorted = [];
125
+ while (queue.length > 0) {
126
+ const current = queue.shift();
127
+ sorted.push(current);
128
+ for (const neighbor of adjacency.get(current) ?? []) {
129
+ const newDeg = (inDegree.get(neighbor) ?? 1) - 1;
130
+ inDegree.set(neighbor, newDeg);
131
+ if (newDeg === 0)
132
+ queue.push(neighbor);
133
+ }
134
+ }
135
+ const nodeMap = new Map(nodes.map((n) => [n.id, n]));
136
+ return sorted.map((id) => nodeMap.get(id)).filter(Boolean);
137
+ }
138
+ // ============================================================================
139
+ // SOP generator
140
+ // ============================================================================
141
+ /**
142
+ * Resolve the promise contract for a node, falling back to template type
143
+ * defaults when the node has no authored contracts.
144
+ */
145
+ function resolveContract(node) {
146
+ const defaults = DEFAULT_CONTRACTS[node.templateType ?? ''] ?? {
147
+ consumes: '',
148
+ produces: '',
149
+ delegates: '',
150
+ };
151
+ return {
152
+ consumes: node.consumes || defaults.consumes,
153
+ produces: node.produces || defaults.produces,
154
+ delegates: node.delegates || defaults.delegates,
155
+ };
156
+ }
157
+ /**
158
+ * Generate a Factory SOP (Standard Operating Procedure) document from a
159
+ * pipeline graph.
160
+ *
161
+ * The SOP chains each node's promise contracts in topological order,
162
+ * establishing what each stage consumes, produces, and delegates to
163
+ * infrastructure. Loop-back edges are surfaced as feedback paths at
164
+ * the end of the document.
165
+ *
166
+ * @param graph - The pipeline graph from the blueprint
167
+ * @returns Markdown SOP document, or empty string for null/empty graphs
168
+ */
169
+ export function generateFactorySOP(graph) {
170
+ if (!graph || graph.nodes.length === 0)
171
+ return '';
172
+ const { forwardEdges, loopBackEdges } = partitionEdges(graph.nodes, graph.edges);
173
+ const sortedNodes = topoSort(graph.nodes, forwardEdges);
174
+ // If topo sort didn't include all nodes (shouldn't happen with loop-backs removed),
175
+ // append any missing nodes at the end
176
+ const sortedIds = new Set(sortedNodes.map((n) => n.id));
177
+ for (const node of graph.nodes) {
178
+ if (!sortedIds.has(node.id)) {
179
+ sortedNodes.push(node);
180
+ }
181
+ }
182
+ const lines = [];
183
+ lines.push('## Factory Operating Procedure');
184
+ lines.push('');
185
+ lines.push('This pipeline defines the execution stages, their responsibilities, and what');
186
+ lines.push('the factory infrastructure handles automatically. Each stage\'s contract');
187
+ lines.push('describes what it receives (Consumes), what it produces (Produces), and what');
188
+ lines.push('it delegates to infrastructure (Delegates).');
189
+ lines.push('');
190
+ // Emit each node in topological order
191
+ for (let i = 0; i < sortedNodes.length; i++) {
192
+ const node = sortedNodes[i];
193
+ const contract = resolveContract(node);
194
+ const typeLabel = node.templateType
195
+ ? ` (${node.templateType})`
196
+ : '';
197
+ lines.push(`### Stage ${i + 1}: ${node.label}${typeLabel}`);
198
+ lines.push('');
199
+ if (contract.consumes) {
200
+ lines.push(`**Consumes:** ${contract.consumes}`);
201
+ lines.push('');
202
+ }
203
+ if (contract.produces) {
204
+ lines.push(`**Produces:** ${contract.produces}`);
205
+ lines.push('');
206
+ }
207
+ if (contract.delegates) {
208
+ lines.push(`**Delegates:** ${contract.delegates}`);
209
+ lines.push('');
210
+ }
211
+ }
212
+ // Feedback paths (loop-back edges)
213
+ if (loopBackEdges.length > 0) {
214
+ const nodeMap = new Map(graph.nodes.map((n) => [n.id, n]));
215
+ lines.push('### Feedback Paths');
216
+ lines.push('');
217
+ lines.push('The following edges loop back to earlier stages when conditions are met:');
218
+ lines.push('');
219
+ for (const edge of loopBackEdges) {
220
+ const fromNode = nodeMap.get(edge.from);
221
+ const toNode = nodeMap.get(edge.to);
222
+ const fromLabel = fromNode?.label ?? edge.from;
223
+ const toLabel = toNode?.label ?? edge.to;
224
+ let conditionDesc = 'unconditionally';
225
+ if (edge.condition) {
226
+ const { field, operator, value } = edge.condition;
227
+ conditionDesc = `when ${field} ${operator} ${value}`;
228
+ }
229
+ lines.push(`- **${fromLabel}** loops back to **${toLabel}** ${conditionDesc}`);
230
+ }
231
+ lines.push('');
232
+ }
233
+ return lines.join('\n');
234
+ }
235
+ //# sourceMappingURL=sop-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sop-generator.js","sourceRoot":"","sources":["../src/sop-generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Execution profiles for factory spec types.
3
+ *
4
+ * Each spec type (prototype, mvp, extend_existing) maps to a different
5
+ * execution profile that controls which gates run, iteration limits,
6
+ * audit depth, operational guidance, and prompt injection for strategy
7
+ * design and planning phases.
8
+ *
9
+ * Used by:
10
+ * - strategy-design.ts to inject spec type context into the design prompt
11
+ * - planning.ts to inject planning emphasis into prompts
12
+ * - gate-engine.ts to skip disabled gate layers
13
+ * - instance-lifecycle.ts for resolved execution configuration
14
+ */
15
+ import type { FactoryBlueprint, SpecType } from './types.js';
16
+ export type AuditDepth = 'shallow' | 'standard' | 'deep';
17
+ export interface ExecutionProfile {
18
+ gatesEnabled: {
19
+ deterministic: boolean;
20
+ behavioral: boolean;
21
+ adversarial: boolean;
22
+ };
23
+ maxIterations: number;
24
+ auditDepth: AuditDepth;
25
+ conformanceChecks: boolean;
26
+ operationalNotes: string;
27
+ /** Strategy design guidance text for the AI. */
28
+ strategyDesignGuidance: string;
29
+ /** Planning emphasis text for the AI. */
30
+ planningGuidance: string;
31
+ }
32
+ /**
33
+ * Resolve an execution profile for a given spec type and blueprint.
34
+ *
35
+ * - `prototype`: deterministic gates only, 2 iterations max, shallow audit
36
+ * - `mvp`: all gates, blueprint-default iterations, standard audit
37
+ * - `extend_existing`: all gates + conformance checks, blueprint-default iterations, deep audit
38
+ * - `null` / unknown: returns blueprint defaults unchanged
39
+ */
40
+ export declare function resolveExecutionProfile(specType: SpecType | string | null, blueprint?: FactoryBlueprint | null): ExecutionProfile;
41
+ //# sourceMappingURL=spec-profiles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spec-profiles.d.ts","sourceRoot":"","sources":["../src/spec-profiles.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAM7D,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,UAAU,GAAG,MAAM,CAAC;AAEzD,MAAM,WAAW,gBAAgB;IAC/B,YAAY,EAAE;QAAE,aAAa,EAAE,OAAO,CAAC;QAAC,UAAU,EAAE,OAAO,CAAC;QAAC,WAAW,EAAE,OAAO,CAAA;KAAE,CAAC;IACpF,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,UAAU,CAAC;IACvB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,gBAAgB,EAAE,MAAM,CAAC;IACzB,gDAAgD;IAChD,sBAAsB,EAAE,MAAM,CAAC;IAC/B,yCAAyC;IACzC,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAiED;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,QAAQ,GAAG,MAAM,GAAG,IAAI,EAClC,SAAS,CAAC,EAAE,gBAAgB,GAAG,IAAI,GAClC,gBAAgB,CA8BlB"}