@codedeck/codedeck 2026.3.1-4.63

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 (239) hide show
  1. package/README.md +38 -0
  2. package/config/default.yaml +51 -0
  3. package/dist/agent/brain-dispatcher.d.ts +67 -0
  4. package/dist/agent/brain-dispatcher.d.ts.map +1 -0
  5. package/dist/agent/brain-dispatcher.js +136 -0
  6. package/dist/agent/brain-dispatcher.js.map +1 -0
  7. package/dist/agent/detect.d.ts +20 -0
  8. package/dist/agent/detect.d.ts.map +1 -0
  9. package/dist/agent/detect.js +187 -0
  10. package/dist/agent/detect.js.map +1 -0
  11. package/dist/agent/drivers/base.d.ts +57 -0
  12. package/dist/agent/drivers/base.d.ts.map +1 -0
  13. package/dist/agent/drivers/base.js +3 -0
  14. package/dist/agent/drivers/base.js.map +1 -0
  15. package/dist/agent/drivers/claude-code.d.ts +14 -0
  16. package/dist/agent/drivers/claude-code.d.ts.map +1 -0
  17. package/dist/agent/drivers/claude-code.js +112 -0
  18. package/dist/agent/drivers/claude-code.js.map +1 -0
  19. package/dist/agent/drivers/codex.d.ts +14 -0
  20. package/dist/agent/drivers/codex.d.ts.map +1 -0
  21. package/dist/agent/drivers/codex.js +77 -0
  22. package/dist/agent/drivers/codex.js.map +1 -0
  23. package/dist/agent/drivers/gemini.d.ts +24 -0
  24. package/dist/agent/drivers/gemini.d.ts.map +1 -0
  25. package/dist/agent/drivers/gemini.js +142 -0
  26. package/dist/agent/drivers/gemini.js.map +1 -0
  27. package/dist/agent/drivers/opencode.d.ts +18 -0
  28. package/dist/agent/drivers/opencode.d.ts.map +1 -0
  29. package/dist/agent/drivers/opencode.js +50 -0
  30. package/dist/agent/drivers/opencode.js.map +1 -0
  31. package/dist/agent/drivers/shell.d.ts +13 -0
  32. package/dist/agent/drivers/shell.d.ts.map +1 -0
  33. package/dist/agent/drivers/shell.js +30 -0
  34. package/dist/agent/drivers/shell.js.map +1 -0
  35. package/dist/agent/env-isolation.d.ts +26 -0
  36. package/dist/agent/env-isolation.d.ts.map +1 -0
  37. package/dist/agent/env-isolation.js +103 -0
  38. package/dist/agent/env-isolation.js.map +1 -0
  39. package/dist/agent/notify-setup.d.ts +18 -0
  40. package/dist/agent/notify-setup.d.ts.map +1 -0
  41. package/dist/agent/notify-setup.js +68 -0
  42. package/dist/agent/notify-setup.js.map +1 -0
  43. package/dist/agent/session-manager.d.ts +75 -0
  44. package/dist/agent/session-manager.d.ts.map +1 -0
  45. package/dist/agent/session-manager.js +407 -0
  46. package/dist/agent/session-manager.js.map +1 -0
  47. package/dist/agent/signal.d.ts +32 -0
  48. package/dist/agent/signal.d.ts.map +1 -0
  49. package/dist/agent/signal.js +199 -0
  50. package/dist/agent/signal.js.map +1 -0
  51. package/dist/agent/status-poller.d.ts +27 -0
  52. package/dist/agent/status-poller.d.ts.map +1 -0
  53. package/dist/agent/status-poller.js +76 -0
  54. package/dist/agent/status-poller.js.map +1 -0
  55. package/dist/agent/templates/brain-prompt.d.ts +14 -0
  56. package/dist/agent/templates/brain-prompt.d.ts.map +1 -0
  57. package/dist/agent/templates/brain-prompt.js +57 -0
  58. package/dist/agent/templates/brain-prompt.js.map +1 -0
  59. package/dist/agent/templates/identity.d.ts +19 -0
  60. package/dist/agent/templates/identity.d.ts.map +1 -0
  61. package/dist/agent/templates/identity.js +97 -0
  62. package/dist/agent/templates/identity.js.map +1 -0
  63. package/dist/agent/tmux.d.ts +90 -0
  64. package/dist/agent/tmux.d.ts.map +1 -0
  65. package/dist/agent/tmux.js +386 -0
  66. package/dist/agent/tmux.js.map +1 -0
  67. package/dist/autofix/audit-engine.d.ts +35 -0
  68. package/dist/autofix/audit-engine.d.ts.map +1 -0
  69. package/dist/autofix/audit-engine.js +144 -0
  70. package/dist/autofix/audit-engine.js.map +1 -0
  71. package/dist/autofix/branch-manager.d.ts +44 -0
  72. package/dist/autofix/branch-manager.d.ts.map +1 -0
  73. package/dist/autofix/branch-manager.js +97 -0
  74. package/dist/autofix/branch-manager.js.map +1 -0
  75. package/dist/autofix/decision-engine.d.ts +38 -0
  76. package/dist/autofix/decision-engine.d.ts.map +1 -0
  77. package/dist/autofix/decision-engine.js +115 -0
  78. package/dist/autofix/decision-engine.js.map +1 -0
  79. package/dist/autofix/index.d.ts +23 -0
  80. package/dist/autofix/index.d.ts.map +1 -0
  81. package/dist/autofix/index.js +192 -0
  82. package/dist/autofix/index.js.map +1 -0
  83. package/dist/autofix/prompt-builder.d.ts +25 -0
  84. package/dist/autofix/prompt-builder.d.ts.map +1 -0
  85. package/dist/autofix/prompt-builder.js +137 -0
  86. package/dist/autofix/prompt-builder.js.map +1 -0
  87. package/dist/autofix/report-parser.d.ts +18 -0
  88. package/dist/autofix/report-parser.d.ts.map +1 -0
  89. package/dist/autofix/report-parser.js +74 -0
  90. package/dist/autofix/report-parser.js.map +1 -0
  91. package/dist/autofix/state-machine.d.ts +40 -0
  92. package/dist/autofix/state-machine.d.ts.map +1 -0
  93. package/dist/autofix/state-machine.js +76 -0
  94. package/dist/autofix/state-machine.js.map +1 -0
  95. package/dist/bind/bind-flow.d.ts +15 -0
  96. package/dist/bind/bind-flow.d.ts.map +1 -0
  97. package/dist/bind/bind-flow.js +198 -0
  98. package/dist/bind/bind-flow.js.map +1 -0
  99. package/dist/config.d.ts +53 -0
  100. package/dist/config.d.ts.map +1 -0
  101. package/dist/config.js +89 -0
  102. package/dist/config.js.map +1 -0
  103. package/dist/daemon/codex-watcher.d.ts +46 -0
  104. package/dist/daemon/codex-watcher.d.ts.map +1 -0
  105. package/dist/daemon/codex-watcher.js +533 -0
  106. package/dist/daemon/codex-watcher.js.map +1 -0
  107. package/dist/daemon/command-handler.d.ts +6 -0
  108. package/dist/daemon/command-handler.d.ts.map +1 -0
  109. package/dist/daemon/command-handler.js +770 -0
  110. package/dist/daemon/command-handler.js.map +1 -0
  111. package/dist/daemon/discussion-orchestrator.d.ts +63 -0
  112. package/dist/daemon/discussion-orchestrator.d.ts.map +1 -0
  113. package/dist/daemon/discussion-orchestrator.js +482 -0
  114. package/dist/daemon/discussion-orchestrator.js.map +1 -0
  115. package/dist/daemon/gemini-watcher.d.ts +42 -0
  116. package/dist/daemon/gemini-watcher.d.ts.map +1 -0
  117. package/dist/daemon/gemini-watcher.js +463 -0
  118. package/dist/daemon/gemini-watcher.js.map +1 -0
  119. package/dist/daemon/hook-server.d.ts +42 -0
  120. package/dist/daemon/hook-server.d.ts.map +1 -0
  121. package/dist/daemon/hook-server.js +160 -0
  122. package/dist/daemon/hook-server.js.map +1 -0
  123. package/dist/daemon/jsonl-watcher.d.ts +35 -0
  124. package/dist/daemon/jsonl-watcher.d.ts.map +1 -0
  125. package/dist/daemon/jsonl-watcher.js +635 -0
  126. package/dist/daemon/jsonl-watcher.js.map +1 -0
  127. package/dist/daemon/lifecycle.d.ts +20 -0
  128. package/dist/daemon/lifecycle.d.ts.map +1 -0
  129. package/dist/daemon/lifecycle.js +331 -0
  130. package/dist/daemon/lifecycle.js.map +1 -0
  131. package/dist/daemon/server-link.d.ts +44 -0
  132. package/dist/daemon/server-link.d.ts.map +1 -0
  133. package/dist/daemon/server-link.js +232 -0
  134. package/dist/daemon/server-link.js.map +1 -0
  135. package/dist/daemon/subsession-manager.d.ts +37 -0
  136. package/dist/daemon/subsession-manager.d.ts.map +1 -0
  137. package/dist/daemon/subsession-manager.js +240 -0
  138. package/dist/daemon/subsession-manager.js.map +1 -0
  139. package/dist/daemon/terminal-parser.d.ts +42 -0
  140. package/dist/daemon/terminal-parser.d.ts.map +1 -0
  141. package/dist/daemon/terminal-parser.js +278 -0
  142. package/dist/daemon/terminal-parser.js.map +1 -0
  143. package/dist/daemon/terminal-streamer.d.ts +93 -0
  144. package/dist/daemon/terminal-streamer.d.ts.map +1 -0
  145. package/dist/daemon/terminal-streamer.js +451 -0
  146. package/dist/daemon/terminal-streamer.js.map +1 -0
  147. package/dist/daemon/timeline-emitter.d.ts +32 -0
  148. package/dist/daemon/timeline-emitter.d.ts.map +1 -0
  149. package/dist/daemon/timeline-emitter.js +97 -0
  150. package/dist/daemon/timeline-emitter.js.map +1 -0
  151. package/dist/daemon/timeline-event.d.ts +23 -0
  152. package/dist/daemon/timeline-event.d.ts.map +1 -0
  153. package/dist/daemon/timeline-event.js +7 -0
  154. package/dist/daemon/timeline-event.js.map +1 -0
  155. package/dist/daemon/timeline-store.d.ts +40 -0
  156. package/dist/daemon/timeline-store.d.ts.map +1 -0
  157. package/dist/daemon/timeline-store.js +153 -0
  158. package/dist/daemon/timeline-store.js.map +1 -0
  159. package/dist/index.d.ts +3 -0
  160. package/dist/index.d.ts.map +1 -0
  161. package/dist/index.js +149 -0
  162. package/dist/index.js.map +1 -0
  163. package/dist/memory/claude-mem.d.ts +9 -0
  164. package/dist/memory/claude-mem.d.ts.map +1 -0
  165. package/dist/memory/claude-mem.js +58 -0
  166. package/dist/memory/claude-mem.js.map +1 -0
  167. package/dist/memory/context-builder.d.ts +4 -0
  168. package/dist/memory/context-builder.d.ts.map +1 -0
  169. package/dist/memory/context-builder.js +35 -0
  170. package/dist/memory/context-builder.js.map +1 -0
  171. package/dist/memory/detector.d.ts +7 -0
  172. package/dist/memory/detector.d.ts.map +1 -0
  173. package/dist/memory/detector.js +17 -0
  174. package/dist/memory/detector.js.map +1 -0
  175. package/dist/memory/extractor.d.ts +21 -0
  176. package/dist/memory/extractor.d.ts.map +1 -0
  177. package/dist/memory/extractor.js +83 -0
  178. package/dist/memory/extractor.js.map +1 -0
  179. package/dist/memory/injector.d.ts +7 -0
  180. package/dist/memory/injector.d.ts.map +1 -0
  181. package/dist/memory/injector.js +18 -0
  182. package/dist/memory/injector.js.map +1 -0
  183. package/dist/memory/interface.d.ts +25 -0
  184. package/dist/memory/interface.d.ts.map +1 -0
  185. package/dist/memory/interface.js +3 -0
  186. package/dist/memory/interface.js.map +1 -0
  187. package/dist/memory/mem0.d.ts +12 -0
  188. package/dist/memory/mem0.d.ts.map +1 -0
  189. package/dist/memory/mem0.js +93 -0
  190. package/dist/memory/mem0.js.map +1 -0
  191. package/dist/router/command-parser.d.ts +33 -0
  192. package/dist/router/command-parser.d.ts.map +1 -0
  193. package/dist/router/command-parser.js +66 -0
  194. package/dist/router/command-parser.js.map +1 -0
  195. package/dist/router/message-router.d.ts +42 -0
  196. package/dist/router/message-router.d.ts.map +1 -0
  197. package/dist/router/message-router.js +222 -0
  198. package/dist/router/message-router.js.map +1 -0
  199. package/dist/router/response-collector.d.ts +28 -0
  200. package/dist/router/response-collector.d.ts.map +1 -0
  201. package/dist/router/response-collector.js +164 -0
  202. package/dist/router/response-collector.js.map +1 -0
  203. package/dist/store/project-store.d.ts +37 -0
  204. package/dist/store/project-store.d.ts.map +1 -0
  205. package/dist/store/project-store.js +70 -0
  206. package/dist/store/project-store.js.map +1 -0
  207. package/dist/store/session-store.d.ts +32 -0
  208. package/dist/store/session-store.d.ts.map +1 -0
  209. package/dist/store/session-store.js +67 -0
  210. package/dist/store/session-store.js.map +1 -0
  211. package/dist/tracker/branch.d.ts +24 -0
  212. package/dist/tracker/branch.d.ts.map +1 -0
  213. package/dist/tracker/branch.js +55 -0
  214. package/dist/tracker/branch.js.map +1 -0
  215. package/dist/tracker/github.d.ts +31 -0
  216. package/dist/tracker/github.d.ts.map +1 -0
  217. package/dist/tracker/github.js +117 -0
  218. package/dist/tracker/github.js.map +1 -0
  219. package/dist/tracker/gitlab.d.ts +31 -0
  220. package/dist/tracker/gitlab.d.ts.map +1 -0
  221. package/dist/tracker/gitlab.js +116 -0
  222. package/dist/tracker/gitlab.js.map +1 -0
  223. package/dist/tracker/index.d.ts +9 -0
  224. package/dist/tracker/index.d.ts.map +1 -0
  225. package/dist/tracker/index.js +28 -0
  226. package/dist/tracker/index.js.map +1 -0
  227. package/dist/tracker/interface.d.ts +39 -0
  228. package/dist/tracker/interface.d.ts.map +1 -0
  229. package/dist/tracker/interface.js +7 -0
  230. package/dist/tracker/interface.js.map +1 -0
  231. package/dist/tracker/priority.d.ts +19 -0
  232. package/dist/tracker/priority.d.ts.map +1 -0
  233. package/dist/tracker/priority.js +40 -0
  234. package/dist/tracker/priority.js.map +1 -0
  235. package/dist/util/logger.d.ts +4 -0
  236. package/dist/util/logger.d.ts.map +1 -0
  237. package/dist/util/logger.js +14 -0
  238. package/dist/util/logger.js.map +1 -0
  239. package/package.json +65 -0
@@ -0,0 +1,137 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildPhasePrompt = buildPhasePrompt;
4
+ exports.buildDiscussionPrompt = buildDiscussionPrompt;
5
+ /**
6
+ * Build phase-specific prompt for the brain/auditor agent.
7
+ */
8
+ function buildPhasePrompt(phase, ctx) {
9
+ switch (phase) {
10
+ case 'planning':
11
+ return buildPlanningPrompt(ctx);
12
+ case 'design_review':
13
+ return buildDesignReviewPrompt(ctx);
14
+ case 'implementing':
15
+ return buildImplementingPrompt(ctx);
16
+ case 'code_review':
17
+ return buildCodeReviewPrompt(ctx);
18
+ case 'approved':
19
+ return buildApprovedPrompt(ctx);
20
+ default:
21
+ return '';
22
+ }
23
+ }
24
+ function buildPlanningPrompt(ctx) {
25
+ return `# Auto-Fix Pipeline — Planning Phase
26
+
27
+ You are the brain coordinating an auto-fix task.
28
+
29
+ **Task:** ${ctx.taskTitle}
30
+ **Project:** ${ctx.projectName}
31
+ **Coder agent:** ${ctx.coderAgent} (session: ${ctx.coderAgent})
32
+ **Auditor agent:** ${ctx.auditorAgent} (session: ${ctx.auditorAgent})
33
+
34
+ **Instructions:**
35
+ 1. Send the task description to the coder worker using @w1
36
+ 2. Tell the coder to create a design document first, before any code changes
37
+ 3. Wait for the coder to complete the design (you'll see @status idle)
38
+ 4. Then trigger a design review with @audit w1
39
+
40
+ **Task description to send:**
41
+ ${ctx.taskDescription}`;
42
+ }
43
+ function buildDesignReviewPrompt(ctx) {
44
+ const roundInfo = ctx.discussionRound
45
+ ? ` (Round ${ctx.discussionRound}/${ctx.maxRounds})`
46
+ : '';
47
+ return `# Auto-Fix Pipeline — Design Review${roundInfo}
48
+
49
+ You are reviewing a design proposal from the coder.
50
+
51
+ **Task:** ${ctx.taskTitle}
52
+ ${ctx.previousFindings?.length ? `\n**Previous findings addressed:**\n${ctx.previousFindings.join('\n')}` : ''}
53
+
54
+ **Your review should evaluate:**
55
+ - Is the technical approach sound?
56
+ - Are security implications considered?
57
+ - Are edge cases handled?
58
+ - Is it consistent with existing architecture?
59
+
60
+ **Decision format:**
61
+ - If acceptable: \`APPROVED: <brief summary>\`
62
+ - If changes needed: \`REJECTED: <specific issues as bullet points>\``;
63
+ }
64
+ function buildImplementingPrompt(ctx) {
65
+ return `# Auto-Fix Pipeline — Implementation Phase
66
+
67
+ The design has been approved. Now implement the solution.
68
+
69
+ **Task:** ${ctx.taskTitle}
70
+ **Project:** ${ctx.projectName}
71
+
72
+ **Instructions:**
73
+ 1. Follow the approved design document
74
+ 2. Implement the changes with proper error handling
75
+ 3. Write or update tests for the changed code
76
+ 4. Run the test suite to verify nothing is broken
77
+ 5. When complete, notify the brain (write a completion report)
78
+
79
+ Your completion report should include:
80
+ - Files modified/created
81
+ - Tests added/updated
82
+ - Any deviations from the design (if necessary)`;
83
+ }
84
+ function buildCodeReviewPrompt(ctx) {
85
+ const roundInfo = ctx.discussionRound
86
+ ? ` (Round ${ctx.discussionRound}/${ctx.maxRounds})`
87
+ : '';
88
+ return `# Auto-Fix Pipeline — Code Review${roundInfo}
89
+
90
+ You are reviewing the implementation from the coder.
91
+
92
+ **Task:** ${ctx.taskTitle}
93
+ ${ctx.previousFindings?.length ? `\n**Previous issues to verify are fixed:**\n${ctx.previousFindings.join('\n')}` : ''}
94
+
95
+ **Your review should evaluate:**
96
+ - Does it correctly implement the requirements?
97
+ - Are there bugs or logic errors?
98
+ - Security issues? (injection, auth bypass, data exposure, secret leaks)
99
+ - Are tests sufficient?
100
+ - Code quality and maintainability?
101
+
102
+ **Decision format:**
103
+ - If acceptable: \`APPROVED: <brief summary>\`
104
+ - If changes needed: \`REJECTED: <specific issues as bullet points>\``;
105
+ }
106
+ function buildApprovedPrompt(ctx) {
107
+ return `# Auto-Fix Pipeline — Approved
108
+
109
+ The implementation has been approved!
110
+
111
+ **Task:** ${ctx.taskTitle}
112
+ **Project:** ${ctx.projectName}
113
+
114
+ **Next steps:**
115
+ 1. Push the changes to the feature branch
116
+ 2. ${ctx.taskDescription.includes('tracker') ? 'Close the issue in the tracker' : 'Mark the task as complete'}
117
+
118
+ Use @merge to push and merge the changes.`;
119
+ }
120
+ /**
121
+ * Build a discussion prompt for a rejection round.
122
+ */
123
+ function buildDiscussionPrompt(coderResponse, findings, round, maxRounds) {
124
+ return `# Round ${round}/${maxRounds} Discussion
125
+
126
+ **Coder's response:**
127
+ ${coderResponse}
128
+
129
+ **Original findings:**
130
+ ${findings.map((f, i) => `${i + 1}. ${f}`).join('\n')}
131
+
132
+ **Re-evaluation:**
133
+ Evaluate if the coder's response adequately addresses each finding.
134
+ If all issues are resolved: \`APPROVED: <summary>\`
135
+ If issues remain: \`REJECTED: <remaining issues>\``;
136
+ }
137
+ //# sourceMappingURL=prompt-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-builder.js","sourceRoot":"","sources":["../../src/autofix/prompt-builder.ts"],"names":[],"mappings":";;AAqBA,4CAeC;AA4GD,sDAkBC;AAhJD;;GAEG;AACH,SAAgB,gBAAgB,CAAC,KAAmB,EAAE,GAAkB;IACtE,QAAQ,KAAK,EAAE,CAAC;QACd,KAAK,UAAU;YACb,OAAO,mBAAmB,CAAC,GAAG,CAAC,CAAC;QAClC,KAAK,eAAe;YAClB,OAAO,uBAAuB,CAAC,GAAG,CAAC,CAAC;QACtC,KAAK,cAAc;YACjB,OAAO,uBAAuB,CAAC,GAAG,CAAC,CAAC;QACtC,KAAK,aAAa;YAChB,OAAO,qBAAqB,CAAC,GAAG,CAAC,CAAC;QACpC,KAAK,UAAU;YACb,OAAO,mBAAmB,CAAC,GAAG,CAAC,CAAC;QAClC;YACE,OAAO,EAAE,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,mBAAmB,CAAC,GAAkB;IAC7C,OAAO;;;;YAIG,GAAG,CAAC,SAAS;eACV,GAAG,CAAC,WAAW;mBACX,GAAG,CAAC,UAAU,cAAc,GAAG,CAAC,UAAU;qBACxC,GAAG,CAAC,YAAY,cAAc,GAAG,CAAC,YAAY;;;;;;;;;EASjE,GAAG,CAAC,eAAe,EAAE,CAAC;AACxB,CAAC;AAED,SAAS,uBAAuB,CAAC,GAAkB;IACjD,MAAM,SAAS,GAAG,GAAG,CAAC,eAAe;QACnC,CAAC,CAAC,WAAW,GAAG,CAAC,eAAe,IAAI,GAAG,CAAC,SAAS,GAAG;QACpD,CAAC,CAAC,EAAE,CAAC;IAEP,OAAO,sCAAsC,SAAS;;;;YAI5C,GAAG,CAAC,SAAS;EACvB,GAAG,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC,CAAC,uCAAuC,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;;;;;;;;;;sEAUxC,CAAC;AACvE,CAAC;AAED,SAAS,uBAAuB,CAAC,GAAkB;IACjD,OAAO;;;;YAIG,GAAG,CAAC,SAAS;eACV,GAAG,CAAC,WAAW;;;;;;;;;;;;gDAYkB,CAAC;AACjD,CAAC;AAED,SAAS,qBAAqB,CAAC,GAAkB;IAC/C,MAAM,SAAS,GAAG,GAAG,CAAC,eAAe;QACnC,CAAC,CAAC,WAAW,GAAG,CAAC,eAAe,IAAI,GAAG,CAAC,SAAS,GAAG;QACpD,CAAC,CAAC,EAAE,CAAC;IAEP,OAAO,oCAAoC,SAAS;;;;YAI1C,GAAG,CAAC,SAAS;EACvB,GAAG,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC,CAAC,+CAA+C,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;;;;;;;;;;;sEAWhD,CAAC;AACvE,CAAC;AAED,SAAS,mBAAmB,CAAC,GAAkB;IAC7C,OAAO;;;;YAIG,GAAG,CAAC,SAAS;eACV,GAAG,CAAC,WAAW;;;;KAIzB,GAAG,CAAC,eAAe,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,gCAAgC,CAAC,CAAC,CAAC,2BAA2B;;0CAEnE,CAAC;AAC3C,CAAC;AAED;;GAEG;AACH,SAAgB,qBAAqB,CACnC,aAAqB,EACrB,QAAkB,EAClB,KAAa,EACb,SAAiB;IAEjB,OAAO,WAAW,KAAK,IAAI,SAAS;;;EAGpC,aAAa;;;EAGb,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;;;;;mDAKF,CAAC;AACpD,CAAC"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Parse agent completion reports for structured review data.
3
+ * Extracts files changed, tests run, summary from agent output.
4
+ */
5
+ export interface CompletionReport {
6
+ summary: string;
7
+ filesChanged: string[];
8
+ testsRun: boolean;
9
+ testsPassed: boolean;
10
+ errors: string[];
11
+ commitSha?: string;
12
+ raw: string;
13
+ }
14
+ /**
15
+ * Parse an agent's completion output into a structured report.
16
+ */
17
+ export declare function parseCompletionReport(output: string): CompletionReport;
18
+ //# sourceMappingURL=report-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report-parser.d.ts","sourceRoot":"","sources":["../../src/autofix/report-parser.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,OAAO,CAAC;IACrB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,gBAAgB,CAoEtE"}
@@ -0,0 +1,74 @@
1
+ "use strict";
2
+ /**
3
+ * Parse agent completion reports for structured review data.
4
+ * Extracts files changed, tests run, summary from agent output.
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.parseCompletionReport = parseCompletionReport;
8
+ /**
9
+ * Parse an agent's completion output into a structured report.
10
+ */
11
+ function parseCompletionReport(output) {
12
+ const lines = output.split('\n');
13
+ const report = {
14
+ summary: '',
15
+ filesChanged: [],
16
+ testsRun: false,
17
+ testsPassed: false,
18
+ errors: [],
19
+ raw: output,
20
+ };
21
+ // Extract summary (first non-empty paragraph or a "Summary:" section)
22
+ const summaryMatch = output.match(/(?:summary:|completed?:?)\s*([^\n]+(?:\n(?!\n)[^\n]+)*)/i);
23
+ if (summaryMatch) {
24
+ report.summary = summaryMatch[1].trim();
25
+ }
26
+ else {
27
+ // Use first non-empty line
28
+ report.summary = lines.find((l) => l.trim().length > 10)?.trim() ?? '';
29
+ }
30
+ // Extract files changed
31
+ // Look for patterns like: "- Modified: src/foo.ts", "● Write file src/bar.ts", etc.
32
+ const filePatterns = [
33
+ /(?:modified|created|wrote|write file|read file|edit)\s+([^\s,]+\.(?:ts|js|py|go|rs|json|yaml|yml|md|css|html|tsx|jsx))/gi,
34
+ /^[\s-]*([a-z][a-z0-9/._-]+\.(?:ts|js|py|go|rs|json|yaml|yml|md|css|html|tsx|jsx))\s*(?:modified|changed|created|updated)?$/gim,
35
+ ];
36
+ const foundFiles = new Set();
37
+ for (const pattern of filePatterns) {
38
+ let match;
39
+ while ((match = pattern.exec(output)) !== null) {
40
+ foundFiles.add(match[1]);
41
+ }
42
+ }
43
+ report.filesChanged = Array.from(foundFiles);
44
+ // Detect test execution
45
+ const testIndicators = ['npm test', 'yarn test', 'pnpm test', 'vitest', 'jest', 'pytest', 'cargo test', 'go test'];
46
+ report.testsRun = testIndicators.some((ind) => output.toLowerCase().includes(ind));
47
+ // Detect test results
48
+ if (report.testsRun) {
49
+ const passPatterns = [/all tests? passed/i, /✓ \d+/i, /\d+ pass/i, /tests? pass/i];
50
+ const failPatterns = [/tests? failed/i, /✗ \d+/i, /\d+ fail/i, /test failure/i];
51
+ report.testsPassed = passPatterns.some((p) => p.test(output)) && !failPatterns.some((p) => p.test(output));
52
+ }
53
+ // Extract errors
54
+ const errorPatterns = [
55
+ /(?:error|exception|failed?):\s+([^\n]+)/gi,
56
+ /^[A-Z][a-zA-Z]+Error:\s+([^\n]+)/gm,
57
+ ];
58
+ for (const pattern of errorPatterns) {
59
+ let match;
60
+ while ((match = pattern.exec(output)) !== null) {
61
+ if (match[1] && !match[1].toLowerCase().includes('no error')) {
62
+ report.errors.push(match[1].trim());
63
+ }
64
+ }
65
+ }
66
+ // Deduplicate errors
67
+ report.errors = [...new Set(report.errors)].slice(0, 10);
68
+ // Extract git commit SHA
69
+ const shaMatch = output.match(/\b([a-f0-9]{7,40})\b/i);
70
+ if (shaMatch)
71
+ report.commitSha = shaMatch[1];
72
+ return report;
73
+ }
74
+ //# sourceMappingURL=report-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report-parser.js","sourceRoot":"","sources":["../../src/autofix/report-parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Auto-fix pipeline state machine.
3
+ * States: planning → design_review → implementing → code_review → approved → done | failed
4
+ * In tracker mode, 'done' triggers branch merge + issue close.
5
+ */
6
+ export type AutoFixState = 'planning' | 'design_review' | 'implementing' | 'code_review' | 'approved' | 'done' | 'failed';
7
+ export interface AutoFixTask {
8
+ id: string;
9
+ issueId?: string;
10
+ title: string;
11
+ description: string;
12
+ state: AutoFixState;
13
+ discussionRounds: number;
14
+ maxDiscussionRounds: number;
15
+ coderSession: string;
16
+ auditorSession: string;
17
+ projectName: string;
18
+ branch?: string;
19
+ startedAt: number;
20
+ updatedAt: number;
21
+ error?: string;
22
+ }
23
+ type Transition = 'start_planning' | 'submit_design' | 'approve_design' | 'reject_design' | 'start_implementing' | 'submit_code' | 'approve_code' | 'reject_code' | 'complete' | 'fail';
24
+ export declare class StateMachineError extends Error {
25
+ constructor(message: string);
26
+ }
27
+ export declare function canTransition(task: AutoFixTask, transition: Transition): boolean;
28
+ export declare function transition(task: AutoFixTask, tr: Transition): AutoFixTask;
29
+ export declare function createTask(opts: {
30
+ id?: string;
31
+ title: string;
32
+ description: string;
33
+ coderSession: string;
34
+ auditorSession: string;
35
+ projectName: string;
36
+ issueId?: string;
37
+ maxDiscussionRounds?: number;
38
+ }): AutoFixTask;
39
+ export {};
40
+ //# sourceMappingURL=state-machine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state-machine.d.ts","sourceRoot":"","sources":["../../src/autofix/state-machine.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,MAAM,YAAY,GACpB,UAAU,GACV,eAAe,GACf,cAAc,GACd,aAAa,GACb,UAAU,GACV,MAAM,GACN,QAAQ,CAAC;AAEb,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,YAAY,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAID,KAAK,UAAU,GACX,gBAAgB,GAChB,eAAe,GACf,gBAAgB,GAChB,eAAe,GACf,oBAAoB,GACpB,aAAa,GACb,cAAc,GACd,aAAa,GACb,UAAU,GACV,MAAM,CAAC;AA2BX,qBAAa,iBAAkB,SAAQ,KAAK;gBAC9B,OAAO,EAAE,MAAM;CAI5B;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,GAAG,OAAO,CAEhF;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,UAAU,GAAG,WAAW,CAoBzE;AAID,wBAAgB,UAAU,CAAC,IAAI,EAAE;IAC/B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B,GAAG,WAAW,CAed"}
@@ -0,0 +1,76 @@
1
+ "use strict";
2
+ /**
3
+ * Auto-fix pipeline state machine.
4
+ * States: planning → design_review → implementing → code_review → approved → done | failed
5
+ * In tracker mode, 'done' triggers branch merge + issue close.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.StateMachineError = void 0;
9
+ exports.canTransition = canTransition;
10
+ exports.transition = transition;
11
+ exports.createTask = createTask;
12
+ const VALID_TRANSITIONS = {
13
+ planning: ['submit_design', 'fail'],
14
+ design_review: ['approve_design', 'reject_design', 'fail'],
15
+ implementing: ['submit_code', 'fail'],
16
+ code_review: ['approve_code', 'reject_code', 'fail'],
17
+ approved: ['complete', 'fail'],
18
+ done: [],
19
+ failed: [],
20
+ };
21
+ const STATE_AFTER = {
22
+ start_planning: 'planning',
23
+ submit_design: 'design_review',
24
+ approve_design: 'implementing',
25
+ reject_design: 'planning',
26
+ start_implementing: 'implementing',
27
+ submit_code: 'code_review',
28
+ approve_code: 'approved',
29
+ reject_code: 'implementing',
30
+ complete: 'done',
31
+ fail: 'failed',
32
+ };
33
+ // ── Guards ────────────────────────────────────────────────────────────────────
34
+ class StateMachineError extends Error {
35
+ constructor(message) {
36
+ super(message);
37
+ this.name = 'StateMachineError';
38
+ }
39
+ }
40
+ exports.StateMachineError = StateMachineError;
41
+ function canTransition(task, transition) {
42
+ return VALID_TRANSITIONS[task.state].includes(transition);
43
+ }
44
+ function transition(task, tr) {
45
+ if (!canTransition(task, tr)) {
46
+ throw new StateMachineError(`Invalid transition "${tr}" from state "${task.state}" for task "${task.id}"`);
47
+ }
48
+ const newState = STATE_AFTER[tr];
49
+ const updated = { ...task, state: newState, updatedAt: Date.now() };
50
+ // Track discussion rounds
51
+ if (tr === 'reject_design' || tr === 'reject_code') {
52
+ updated.discussionRounds = task.discussionRounds + 1;
53
+ if (updated.discussionRounds > task.maxDiscussionRounds) {
54
+ return { ...updated, state: 'failed', error: `Max discussion rounds (${task.maxDiscussionRounds}) exceeded` };
55
+ }
56
+ }
57
+ return updated;
58
+ }
59
+ // ── Factory ───────────────────────────────────────────────────────────────────
60
+ function createTask(opts) {
61
+ return {
62
+ id: opts.id ?? `task_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`,
63
+ issueId: opts.issueId,
64
+ title: opts.title,
65
+ description: opts.description,
66
+ state: 'planning',
67
+ discussionRounds: 0,
68
+ maxDiscussionRounds: opts.maxDiscussionRounds ?? 3,
69
+ coderSession: opts.coderSession,
70
+ auditorSession: opts.auditorSession,
71
+ projectName: opts.projectName,
72
+ startedAt: Date.now(),
73
+ updatedAt: Date.now(),
74
+ };
75
+ }
76
+ //# sourceMappingURL=state-machine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state-machine.js","sourceRoot":"","sources":["../../src/autofix/state-machine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ interface ServerCredentials {
2
+ serverId: string;
3
+ token: string;
4
+ workerUrl: string;
5
+ serverName: string;
6
+ boundAt: number;
7
+ }
8
+ /**
9
+ * Main entry point.
10
+ * Usage: codedeck bind https://app.codedeck.cc/bind/<apiKey> [device-name]
11
+ */
12
+ export declare function bindFlow(bindUrl: string, deviceName?: string): Promise<void>;
13
+ export declare function loadCredentials(): Promise<ServerCredentials | null>;
14
+ export {};
15
+ //# sourceMappingURL=bind-flow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bind-flow.d.ts","sourceRoot":"","sources":["../../src/bind/bind-flow.ts"],"names":[],"mappings":"AAYA,UAAU,iBAAiB;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;GAGG;AACH,wBAAsB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA8DlF;AAgHD,wBAAsB,eAAe,IAAI,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAOzE"}
@@ -0,0 +1,198 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.bindFlow = bindFlow;
7
+ exports.loadCredentials = loadCredentials;
8
+ const promises_1 = require("fs/promises");
9
+ const path_1 = require("path");
10
+ const os_1 = require("os");
11
+ const child_process_1 = require("child_process");
12
+ const logger_js_1 = __importDefault(require("../util/logger.js"));
13
+ const CREDS_DIR = (0, path_1.join)((0, os_1.homedir)(), '.codedeck');
14
+ const CREDS_PATH = (0, path_1.join)(CREDS_DIR, 'server.json');
15
+ const PLIST_LABEL = 'codedeck.daemon';
16
+ const PLIST_PATH = (0, path_1.join)((0, os_1.homedir)(), 'Library', 'LaunchAgents', `${PLIST_LABEL}.plist`);
17
+ const OLD_PLIST_PATH = (0, path_1.join)((0, os_1.homedir)(), 'Library', 'LaunchAgents', 'cc.codedeck.daemon.plist');
18
+ /**
19
+ * Main entry point.
20
+ * Usage: codedeck bind https://app.codedeck.cc/bind/<apiKey> [device-name]
21
+ */
22
+ async function bindFlow(bindUrl, deviceName) {
23
+ // Parse the bind URL
24
+ let url;
25
+ try {
26
+ url = new URL(bindUrl);
27
+ }
28
+ catch {
29
+ console.error('Invalid URL. Usage: codedeck bind https://app.codedeck.cc/bind/<api-key> [device-name]');
30
+ process.exit(1);
31
+ }
32
+ const pathParts = url.pathname.split('/').filter(Boolean); // ['bind', '<apiKey>']
33
+ if (pathParts[0] !== 'bind' || !pathParts[1]) {
34
+ console.error('Invalid bind URL format. Expected: https://<worker>/bind/<api-key>');
35
+ process.exit(1);
36
+ }
37
+ const apiKey = pathParts[1];
38
+ const workerUrl = url.origin;
39
+ const serverName = deviceName ?? (0, os_1.hostname)();
40
+ console.log(`Binding "${serverName}" to ${workerUrl}...`);
41
+ // One-shot bind — no code dance needed
42
+ const res = await fetch(`${workerUrl}/api/bind/direct`, {
43
+ method: 'POST',
44
+ headers: {
45
+ 'Content-Type': 'application/json',
46
+ 'Authorization': `Bearer ${apiKey}`,
47
+ },
48
+ body: JSON.stringify({ serverName }),
49
+ });
50
+ if (!res.ok) {
51
+ const body = await res.text().catch(() => '');
52
+ console.error(`Bind failed: ${res.status} ${body}`);
53
+ process.exit(1);
54
+ }
55
+ const { serverId, token } = await res.json();
56
+ // Save credentials (0600 permissions)
57
+ const creds = { serverId, token, workerUrl, serverName, boundAt: Date.now() };
58
+ await (0, promises_1.mkdir)(CREDS_DIR, { recursive: true });
59
+ await (0, promises_1.writeFile)(CREDS_PATH, JSON.stringify(creds, null, 2), { encoding: 'utf8', mode: 0o600 });
60
+ logger_js_1.default.info({ serverId, serverName }, 'Daemon bound');
61
+ // Install tmux if missing
62
+ await ensureTmux();
63
+ // Install system service
64
+ if (process.platform === 'darwin') {
65
+ await installLaunchAgent();
66
+ console.log('\nDaemon installed as a launch agent — starts automatically on login.');
67
+ }
68
+ else if (process.platform === 'linux') {
69
+ await installSystemdService();
70
+ console.log('\nDaemon installed as a systemd user service — starts automatically on login.');
71
+ }
72
+ else {
73
+ console.log('\nRun "codedeck start" to start the daemon.');
74
+ }
75
+ console.log(`\nBound! Device "${serverName}" is ready.`);
76
+ console.log(`Open ${workerUrl} to see it online.`);
77
+ }
78
+ async function ensureTmux() {
79
+ try {
80
+ (0, child_process_1.execSync)('tmux -V', { stdio: 'ignore' });
81
+ return; // already installed
82
+ }
83
+ catch {
84
+ // not found
85
+ }
86
+ if (process.platform === 'darwin') {
87
+ // Check brew is available
88
+ try {
89
+ (0, child_process_1.execSync)('which brew', { stdio: 'ignore' });
90
+ }
91
+ catch {
92
+ console.error('tmux not found and Homebrew is not installed. Please install tmux manually: https://formulae.brew.sh/formula/tmux');
93
+ process.exit(1);
94
+ }
95
+ console.log('tmux not found — installing via Homebrew...');
96
+ (0, child_process_1.execSync)('brew install tmux', { stdio: 'inherit' });
97
+ console.log('tmux installed.');
98
+ }
99
+ else {
100
+ console.error('tmux not found. Please install it with your package manager (e.g. apt install tmux).');
101
+ process.exit(1);
102
+ }
103
+ }
104
+ async function installLaunchAgent() {
105
+ const nodeExec = process.execPath;
106
+ const script = process.argv[1];
107
+ const logPath = (0, path_1.join)(CREDS_DIR, 'daemon.log');
108
+ const launchAgentsDir = (0, path_1.join)((0, os_1.homedir)(), 'Library', 'LaunchAgents');
109
+ const plist = `<?xml version="1.0" encoding="UTF-8"?>
110
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
111
+ <plist version="1.0">
112
+ <dict>
113
+ <key>Label</key>
114
+ <string>${PLIST_LABEL}</string>
115
+ <key>ProgramArguments</key>
116
+ <array>
117
+ <string>${nodeExec}</string>
118
+ <string>${script}</string>
119
+ <string>start</string>
120
+ </array>
121
+ <key>EnvironmentVariables</key>
122
+ <dict>
123
+ <key>PATH</key>
124
+ <string>${process.env.PATH ?? '/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin'}</string>
125
+ <key>HOME</key>
126
+ <string>${(0, os_1.homedir)()}</string>
127
+ </dict>
128
+ <key>RunAtLoad</key>
129
+ <true/>
130
+ <key>KeepAlive</key>
131
+ <true/>
132
+ <key>StandardOutPath</key>
133
+ <string>${logPath}</string>
134
+ <key>StandardErrorPath</key>
135
+ <string>${logPath}</string>
136
+ </dict>
137
+ </plist>`;
138
+ await (0, promises_1.mkdir)(launchAgentsDir, { recursive: true });
139
+ await (0, promises_1.writeFile)(PLIST_PATH, plist, 'utf8');
140
+ // Migrate: unload and remove old cc.codedeck.daemon plist if present
141
+ const { existsSync, unlinkSync } = await import('fs');
142
+ if (existsSync(OLD_PLIST_PATH)) {
143
+ try {
144
+ (0, child_process_1.execSync)(`launchctl unload "${OLD_PLIST_PATH}" 2>/dev/null`, { stdio: 'ignore' });
145
+ }
146
+ catch { /* ok */ }
147
+ try {
148
+ unlinkSync(OLD_PLIST_PATH);
149
+ }
150
+ catch { /* ok */ }
151
+ console.log('Removed old cc.codedeck.daemon.plist');
152
+ }
153
+ // Unload existing (ignore error), then load fresh
154
+ try {
155
+ (0, child_process_1.execSync)(`launchctl unload "${PLIST_PATH}" 2>/dev/null`, { stdio: 'ignore' });
156
+ }
157
+ catch { /* ok */ }
158
+ (0, child_process_1.execSync)(`launchctl load -w "${PLIST_PATH}"`);
159
+ console.log(`Launch agent loaded: ${PLIST_PATH}`);
160
+ }
161
+ async function installSystemdService() {
162
+ const nodeExec = process.execPath;
163
+ const script = process.argv[1];
164
+ const logPath = (0, path_1.join)(CREDS_DIR, 'daemon.log');
165
+ const serviceDir = (0, path_1.join)((0, os_1.homedir)(), '.config', 'systemd', 'user');
166
+ const servicePath = (0, path_1.join)(serviceDir, 'codedeck.service');
167
+ const unit = `[Unit]
168
+ Description=Codedeck Daemon
169
+ After=network.target
170
+
171
+ [Service]
172
+ ExecStart=${nodeExec} ${script} start
173
+ Restart=always
174
+ RestartSec=5
175
+ Environment=PATH=${process.env.PATH ?? '/usr/local/bin:/usr/bin:/bin'}
176
+ Environment=HOME=${(0, os_1.homedir)()}
177
+ StandardOutput=append:${logPath}
178
+ StandardError=append:${logPath}
179
+
180
+ [Install]
181
+ WantedBy=default.target
182
+ `;
183
+ await (0, promises_1.mkdir)(serviceDir, { recursive: true });
184
+ await (0, promises_1.writeFile)(servicePath, unit, 'utf8');
185
+ (0, child_process_1.execSync)('systemctl --user daemon-reload', { stdio: 'inherit' });
186
+ (0, child_process_1.execSync)('systemctl --user enable --now codedeck', { stdio: 'inherit' });
187
+ console.log(`Systemd user service installed: ${servicePath}`);
188
+ }
189
+ async function loadCredentials() {
190
+ try {
191
+ const raw = await (0, promises_1.readFile)(CREDS_PATH, 'utf8');
192
+ return JSON.parse(raw);
193
+ }
194
+ catch {
195
+ return null;
196
+ }
197
+ }
198
+ //# sourceMappingURL=bind-flow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bind-flow.js","sourceRoot":"","sources":["../../src/bind/bind-flow.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ export interface Config {
2
+ daemon: {
3
+ pollInterval: number;
4
+ signalCheckInterval: number;
5
+ streamFps: number;
6
+ streamIdleFps: number;
7
+ maxRestarts: number;
8
+ restartWindow: number;
9
+ heartbeatInterval: number;
10
+ reconnectBase: number;
11
+ reconnectMax: number;
12
+ };
13
+ agents: {
14
+ defaultType: string;
15
+ supportedTypes: string[];
16
+ };
17
+ sessions: {
18
+ storePath: string;
19
+ signalDir: string;
20
+ };
21
+ projects: {
22
+ storePath: string;
23
+ };
24
+ autofix: {
25
+ defaultCoder: string;
26
+ defaultAuditor: string;
27
+ maxDiscussionRounds: number;
28
+ autoMerge: boolean;
29
+ };
30
+ tracker: {
31
+ type: 'github' | 'gitlab';
32
+ apiUrl: string;
33
+ tokenEnv: string;
34
+ repo: string;
35
+ projectId: string;
36
+ baseBranch: string;
37
+ };
38
+ memory: {
39
+ claudeMemUrl: string;
40
+ };
41
+ cf?: {
42
+ workerUrl?: string;
43
+ apiKey?: string;
44
+ credentialsPath: string;
45
+ };
46
+ log: {
47
+ level: string;
48
+ pretty: boolean;
49
+ };
50
+ }
51
+ export declare function loadConfig(): Promise<Config>;
52
+ export declare function resetConfigCache(): void;
53
+ //# sourceMappingURL=config.d.ts.map