@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,97 @@
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.createBranch = createBranch;
7
+ exports.getCurrentSha = getCurrentSha;
8
+ exports.mergeBranch = mergeBranch;
9
+ exports.hasUncommittedChanges = hasUncommittedChanges;
10
+ exports.pushBranch = pushBranch;
11
+ exports.buildBranchName = buildBranchName;
12
+ /**
13
+ * Git branch management for auto-fix pipeline.
14
+ * Creates feature branches, tracks commits, merges to base branch.
15
+ */
16
+ const child_process_1 = require("child_process");
17
+ const util_1 = require("util");
18
+ const logger_js_1 = __importDefault(require("../util/logger.js"));
19
+ const exec = (0, util_1.promisify)(child_process_1.exec);
20
+ /**
21
+ * Create a feature branch for an issue.
22
+ * Branch name: fix/<issue-id>-<slug>
23
+ */
24
+ async function createBranch(opts) {
25
+ const branchName = buildBranchName(opts.issueId, opts.title);
26
+ try {
27
+ // Ensure we're on the base branch and up to date
28
+ await gitExec(opts.cwd, `checkout ${opts.baseBranch}`);
29
+ await gitExec(opts.cwd, 'pull --ff-only').catch(() => { }); // best-effort
30
+ // Create and switch to feature branch
31
+ await gitExec(opts.cwd, `checkout -b ${branchName}`);
32
+ logger_js_1.default.info({ branch: branchName, base: opts.baseBranch }, 'Created feature branch');
33
+ return { name: branchName, baseBranch: opts.baseBranch, created: true };
34
+ }
35
+ catch (err) {
36
+ // Branch may already exist
37
+ await gitExec(opts.cwd, `checkout ${branchName}`).catch(() => { });
38
+ logger_js_1.default.warn({ branch: branchName, err }, 'Branch may already exist — switched to it');
39
+ return { name: branchName, baseBranch: opts.baseBranch, created: false };
40
+ }
41
+ }
42
+ /**
43
+ * Get the current HEAD commit SHA.
44
+ */
45
+ async function getCurrentSha(cwd) {
46
+ const { stdout } = await exec('git rev-parse HEAD', { cwd });
47
+ return stdout.trim();
48
+ }
49
+ /**
50
+ * Merge the feature branch into the base branch.
51
+ * Uses --no-ff to preserve branch history.
52
+ */
53
+ async function mergeBranch(opts) {
54
+ await gitExec(opts.cwd, `checkout ${opts.baseBranch}`);
55
+ try {
56
+ await gitExec(opts.cwd, `merge --no-ff ${opts.branchName} -m "Auto-fix: merge ${opts.branchName}"`);
57
+ logger_js_1.default.info({ branch: opts.branchName, base: opts.baseBranch }, 'Branch merged');
58
+ }
59
+ catch (err) {
60
+ logger_js_1.default.error({ branch: opts.branchName, err }, 'Merge failed — conflict detected');
61
+ await gitExec(opts.cwd, 'merge --abort').catch(() => { });
62
+ throw new Error(`Merge conflict: ${opts.branchName} → ${opts.baseBranch}`);
63
+ }
64
+ }
65
+ /**
66
+ * Check if there are uncommitted changes in the working tree.
67
+ */
68
+ async function hasUncommittedChanges(cwd) {
69
+ const { stdout } = await exec('git status --porcelain', { cwd });
70
+ return stdout.trim().length > 0;
71
+ }
72
+ /**
73
+ * Push branch to remote origin.
74
+ */
75
+ async function pushBranch(branchName, cwd) {
76
+ await gitExec(cwd, `push origin ${branchName} --set-upstream`);
77
+ logger_js_1.default.info({ branch: branchName }, 'Branch pushed to origin');
78
+ }
79
+ // ── Helpers ───────────────────────────────────────────────────────────────────
80
+ /**
81
+ * Build a git branch name from issue ID and title.
82
+ * Format: fix/<issue-id>-<slug>
83
+ * Slug: lowercase, special chars → hyphens, max 50 chars total.
84
+ */
85
+ function buildBranchName(issueId, title) {
86
+ const slug = title
87
+ .toLowerCase()
88
+ .replace(/[^a-z0-9]+/g, '-')
89
+ .replace(/^-+|-+$/g, '')
90
+ .slice(0, 50);
91
+ return `fix/${issueId}-${slug}`;
92
+ }
93
+ async function gitExec(cwd, args) {
94
+ const { stdout } = await exec(`git ${args}`, { cwd });
95
+ return stdout.trim();
96
+ }
97
+ //# sourceMappingURL=branch-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"branch-manager.js","sourceRoot":"","sources":["../../src/autofix/branch-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Structured JSON decision engine for brain auto-fix actions.
3
+ * Fast-path rules for known states, JSON decisions for complex scenarios.
4
+ */
5
+ import type { AutoFixTask } from './state-machine.js';
6
+ export type ActionType = 'send_to_worker' | 'audit' | 'approve_design' | 'approve_code' | 'push' | 'close' | 'wait' | 'fail';
7
+ export interface Decision {
8
+ action: ActionType;
9
+ target?: string;
10
+ message?: string;
11
+ reason?: string;
12
+ }
13
+ /**
14
+ * Fast-path: determine action based on task state without LLM.
15
+ * Returns null if no fast-path applies (fall through to LLM decision).
16
+ */
17
+ export declare function fastPathDecision(task: AutoFixTask): Decision | null;
18
+ /**
19
+ * Parse a JSON decision from brain output.
20
+ * Brain outputs: {"action": "...", "target": "...", "message": "..."}
21
+ */
22
+ export declare function parseDecision(text: string): Decision | null;
23
+ /**
24
+ * Execute a decision. Returns the (potentially updated) task.
25
+ */
26
+ export declare function executeDecision(decision: Decision, task: AutoFixTask, executors: DecisionExecutors): Promise<AutoFixTask>;
27
+ export interface DecisionExecutors {
28
+ sendToSession: (sessionName: string, text: string) => Promise<void>;
29
+ runDesignReview: (task: AutoFixTask) => Promise<{
30
+ task: AutoFixTask;
31
+ }>;
32
+ runCodeReview: (task: AutoFixTask) => Promise<{
33
+ task: AutoFixTask;
34
+ }>;
35
+ pushChanges: (task: AutoFixTask) => Promise<void>;
36
+ closeIssue: (task: AutoFixTask) => Promise<void>;
37
+ }
38
+ //# sourceMappingURL=decision-engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decision-engine.d.ts","sourceRoot":"","sources":["../../src/autofix/decision-engine.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,WAAW,EAAgB,MAAM,oBAAoB,CAAC;AAKpE,MAAM,MAAM,UAAU,GAClB,gBAAgB,GAChB,OAAO,GACP,gBAAgB,GAChB,cAAc,GACd,MAAM,GACN,OAAO,GACP,MAAM,GACN,MAAM,CAAC;AAEX,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,UAAU,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAID;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,WAAW,GAAG,QAAQ,GAAG,IAAI,CA+BnE;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,CAe3D;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE,WAAW,EACjB,SAAS,EAAE,iBAAiB,GAC3B,OAAO,CAAC,WAAW,CAAC,CAuCtB;AAID,MAAM,WAAW,iBAAiB;IAChC,aAAa,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpE,eAAe,EAAE,CAAC,IAAI,EAAE,WAAW,KAAK,OAAO,CAAC;QAAE,IAAI,EAAE,WAAW,CAAA;KAAE,CAAC,CAAC;IACvE,aAAa,EAAE,CAAC,IAAI,EAAE,WAAW,KAAK,OAAO,CAAC;QAAE,IAAI,EAAE,WAAW,CAAA;KAAE,CAAC,CAAC;IACrE,WAAW,EAAE,CAAC,IAAI,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAClD,UAAU,EAAE,CAAC,IAAI,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAClD"}
@@ -0,0 +1,115 @@
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.fastPathDecision = fastPathDecision;
7
+ exports.parseDecision = parseDecision;
8
+ exports.executeDecision = executeDecision;
9
+ const logger_js_1 = __importDefault(require("../util/logger.js"));
10
+ // ── Fast-path rules ───────────────────────────────────────────────────────────
11
+ /**
12
+ * Fast-path: determine action based on task state without LLM.
13
+ * Returns null if no fast-path applies (fall through to LLM decision).
14
+ */
15
+ function fastPathDecision(task) {
16
+ switch (task.state) {
17
+ case 'planning':
18
+ // Always start by sending the task to the coder
19
+ return {
20
+ action: 'send_to_worker',
21
+ target: task.coderSession,
22
+ message: buildPlanningPrompt(task),
23
+ };
24
+ case 'design_review':
25
+ // Trigger design audit
26
+ return { action: 'audit', target: task.auditorSession };
27
+ case 'code_review':
28
+ // Trigger code audit
29
+ return { action: 'audit', target: task.auditorSession };
30
+ case 'approved':
31
+ // Push changes
32
+ return { action: 'push', target: task.branch };
33
+ case 'done':
34
+ return { action: 'close' };
35
+ case 'failed':
36
+ return { action: 'fail', reason: task.error ?? 'Task failed' };
37
+ default:
38
+ return null; // implementing — wait for worker output
39
+ }
40
+ }
41
+ /**
42
+ * Parse a JSON decision from brain output.
43
+ * Brain outputs: {"action": "...", "target": "...", "message": "..."}
44
+ */
45
+ function parseDecision(text) {
46
+ try {
47
+ const jsonMatch = text.match(/\{[^}]+\}/);
48
+ if (!jsonMatch)
49
+ return null;
50
+ const parsed = JSON.parse(jsonMatch[0]);
51
+ if (typeof parsed.action !== 'string')
52
+ return null;
53
+ return {
54
+ action: parsed.action,
55
+ target: typeof parsed.target === 'string' ? parsed.target : undefined,
56
+ message: typeof parsed.message === 'string' ? parsed.message : undefined,
57
+ reason: typeof parsed.reason === 'string' ? parsed.reason : undefined,
58
+ };
59
+ }
60
+ catch {
61
+ return null;
62
+ }
63
+ }
64
+ /**
65
+ * Execute a decision. Returns the (potentially updated) task.
66
+ */
67
+ async function executeDecision(decision, task, executors) {
68
+ logger_js_1.default.info({ taskId: task.id, action: decision.action, target: decision.target }, 'Executing decision');
69
+ switch (decision.action) {
70
+ case 'send_to_worker':
71
+ if (decision.target && decision.message) {
72
+ await executors.sendToSession(decision.target, decision.message);
73
+ }
74
+ return task;
75
+ case 'audit':
76
+ if (task.state === 'design_review') {
77
+ return (await executors.runDesignReview(task)).task;
78
+ }
79
+ if (task.state === 'code_review') {
80
+ return (await executors.runCodeReview(task)).task;
81
+ }
82
+ return task;
83
+ case 'approve_design':
84
+ case 'approve_code':
85
+ return task; // Handled by audit engine
86
+ case 'push':
87
+ await executors.pushChanges(task);
88
+ return task;
89
+ case 'close':
90
+ await executors.closeIssue(task);
91
+ return task;
92
+ case 'fail':
93
+ logger_js_1.default.error({ taskId: task.id, reason: decision.reason }, 'Task marked as failed');
94
+ return { ...task, state: 'failed', error: decision.reason };
95
+ case 'wait':
96
+ default:
97
+ return task;
98
+ }
99
+ }
100
+ // ── Prompt builders ───────────────────────────────────────────────────────────
101
+ function buildPlanningPrompt(task) {
102
+ return `You are tasked with: ${task.title}
103
+
104
+ ${task.description}
105
+
106
+ Please start by creating a design document that includes:
107
+ 1. Problem analysis
108
+ 2. Proposed solution approach
109
+ 3. Files to be modified/created
110
+ 4. Potential risks or trade-offs
111
+ 5. Testing strategy
112
+
113
+ When your design is complete, I will have it reviewed before you start coding.`;
114
+ }
115
+ //# sourceMappingURL=decision-engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decision-engine.js","sourceRoot":"","sources":["../../src/autofix/decision-engine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Auto-fix pipeline CLI entry point.
3
+ * Usage:
4
+ * codedeck autofix --project <name> --coder claude-code --auditor codex "task description"
5
+ * codedeck autofix --project <name> --tracker github|gitlab [--continuous]
6
+ */
7
+ import type { Command } from 'commander';
8
+ export type AgentType = 'claude-code' | 'codex' | 'opencode';
9
+ export type TrackerType = 'github' | 'gitlab' | 'none';
10
+ export interface AutoFixOptions {
11
+ project: string;
12
+ coder: AgentType;
13
+ auditor: AgentType;
14
+ tracker?: TrackerType;
15
+ trackerUrl?: string;
16
+ continuous?: boolean;
17
+ maxRounds?: number;
18
+ }
19
+ /**
20
+ * Register the autofix subcommand on a Commander instance.
21
+ */
22
+ export declare function registerAutoFixCommand(program: Command): void;
23
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/autofix/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWzC,MAAM,MAAM,SAAS,GAAG,aAAa,GAAG,OAAO,GAAG,UAAU,CAAC;AAC7D,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,CAAC;AAEvD,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,SAAS,CAAC;IACjB,OAAO,EAAE,SAAS,CAAC;IACnB,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAwC7D"}
@@ -0,0 +1,192 @@
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.registerAutoFixCommand = registerAutoFixCommand;
7
+ const audit_engine_js_1 = require("./audit-engine.js");
8
+ const state_machine_js_1 = require("./state-machine.js");
9
+ const decision_engine_js_1 = require("./decision-engine.js");
10
+ const branch_manager_js_1 = require("./branch-manager.js");
11
+ const config_js_1 = require("../config.js");
12
+ const tmux_js_1 = require("../agent/tmux.js");
13
+ const session_manager_js_1 = require("../agent/session-manager.js");
14
+ const project_store_js_1 = require("../store/project-store.js");
15
+ const logger_js_1 = __importDefault(require("../util/logger.js"));
16
+ /**
17
+ * Register the autofix subcommand on a Commander instance.
18
+ */
19
+ function registerAutoFixCommand(program) {
20
+ program
21
+ .command('autofix')
22
+ .description('Run the auto-fix pipeline')
23
+ .option('-p, --project <name>', 'Project name')
24
+ .option('--coder <type>', 'Coder agent type (claude-code|codex|opencode)', 'claude-code')
25
+ .option('--auditor <type>', 'Auditor agent type (claude-code|codex|opencode)', 'codex')
26
+ .option('--tracker <type>', 'Issue tracker type (github|gitlab|none)', 'none')
27
+ .option('--tracker-url <url>', 'Tracker API URL (for self-hosted)')
28
+ .option('--continuous', 'Continuously process issues from tracker')
29
+ .option('--max-rounds <n>', 'Max discussion rounds', '3')
30
+ .argument('[task]', 'Task description (standalone mode)')
31
+ .action(async (taskDescription, opts) => {
32
+ const config = await (0, config_js_1.loadConfig)();
33
+ const projectName = opts.project ?? config.defaultProject;
34
+ if (!projectName) {
35
+ console.error('--project is required');
36
+ process.exit(1);
37
+ }
38
+ const autoFixOpts = {
39
+ project: projectName,
40
+ coder: opts.coder ?? 'claude-code',
41
+ auditor: opts.auditor ?? 'codex',
42
+ tracker: opts.tracker ?? 'none',
43
+ trackerUrl: opts.trackerUrl,
44
+ continuous: opts.continuous === 'true' || opts.continuous === '',
45
+ maxRounds: parseInt(opts.maxRounds ?? '3', 10),
46
+ };
47
+ if (opts.tracker !== 'none' && opts.tracker) {
48
+ await runTrackerMode(autoFixOpts);
49
+ }
50
+ else if (taskDescription) {
51
+ await runStandaloneMode(taskDescription, autoFixOpts);
52
+ }
53
+ else {
54
+ console.error('Provide a task description or --tracker mode');
55
+ process.exit(1);
56
+ }
57
+ });
58
+ }
59
+ // ── Standalone mode ───────────────────────────────────────────────────────────
60
+ async function runStandaloneMode(taskDescription, opts) {
61
+ logger_js_1.default.info({ project: opts.project, coder: opts.coder, auditor: opts.auditor }, 'Starting standalone auto-fix');
62
+ const projectRecord = (0, project_store_js_1.getProject)(opts.project);
63
+ const projectDir = projectRecord?.dir ?? process.cwd();
64
+ const { coderSession, auditorSession } = await (0, session_manager_js_1.startAutoFixProject)({
65
+ projectName: opts.project,
66
+ projectDir,
67
+ coderType: opts.coder,
68
+ auditorType: opts.auditor,
69
+ featureBranch: 'HEAD',
70
+ });
71
+ let task = (0, state_machine_js_1.createTask)({
72
+ title: taskDescription.slice(0, 80),
73
+ description: taskDescription,
74
+ coderSession,
75
+ auditorSession,
76
+ projectName: opts.project,
77
+ maxDiscussionRounds: opts.maxRounds ?? 3,
78
+ });
79
+ const auditEngine = new audit_engine_js_1.AuditEngine({
80
+ onTaskUpdate: async (updated) => { task = updated; },
81
+ });
82
+ const executors = {
83
+ sendToSession: async (session, text) => { await (0, tmux_js_1.sendKeys)(session, text); },
84
+ runDesignReview: async (t) => auditEngine.runDesignReview(t),
85
+ runCodeReview: async (t) => auditEngine.runCodeReview(t),
86
+ pushChanges: async (_t) => {
87
+ logger_js_1.default.info({ task: _t.id }, 'Push changes (no-op in standalone mode)');
88
+ },
89
+ closeIssue: async (_t) => {
90
+ logger_js_1.default.info({ task: _t.id }, 'Task complete');
91
+ },
92
+ };
93
+ // Run the pipeline
94
+ while (task.state !== 'done' && task.state !== 'failed') {
95
+ const decision = (0, decision_engine_js_1.fastPathDecision)(task);
96
+ if (decision) {
97
+ task = await (0, decision_engine_js_1.executeDecision)(decision, task, executors);
98
+ }
99
+ else {
100
+ // Wait for implementing state to complete
101
+ await new Promise((r) => setTimeout(r, 5000));
102
+ }
103
+ }
104
+ if (task.state === 'done') {
105
+ console.log(`\n✓ Task complete: ${task.title}`);
106
+ }
107
+ else {
108
+ console.error(`\n✗ Task failed: ${task.error}`);
109
+ process.exit(1);
110
+ }
111
+ }
112
+ // ── Tracker mode ──────────────────────────────────────────────────────────────
113
+ async function runTrackerMode(opts) {
114
+ const { createTracker } = await import('../tracker/index.js');
115
+ const tracker = createTracker(opts.tracker, opts.trackerUrl);
116
+ logger_js_1.default.info({ project: opts.project, tracker: opts.tracker }, 'Starting tracker auto-fix mode');
117
+ do {
118
+ const issues = await tracker.fetchIssues({ status: 'open', assignedToMe: true });
119
+ if (issues.length === 0) {
120
+ if (opts.continuous) {
121
+ logger_js_1.default.info('No issues — waiting 60s before retry');
122
+ await new Promise((r) => setTimeout(r, 60_000));
123
+ continue;
124
+ }
125
+ console.log('No open issues to process');
126
+ break;
127
+ }
128
+ const issue = issues[0]; // Highest priority
129
+ logger_js_1.default.info({ issueId: issue.id, title: issue.title }, 'Processing issue');
130
+ await tracker.claimIssue(issue.id);
131
+ // In tracker mode, also create a branch (before starting sessions)
132
+ const config = await (0, config_js_1.loadConfig)();
133
+ const projectRecord = (0, project_store_js_1.getProject)(opts.project);
134
+ const cwd = projectRecord?.dir ?? process.cwd();
135
+ const baseBranch = projectRecord?.tracker?.baseBranch ?? config.tracker?.baseBranch ?? 'main';
136
+ const branch = await (0, branch_manager_js_1.createBranch)({
137
+ issueId: issue.id,
138
+ title: issue.title,
139
+ baseBranch,
140
+ cwd,
141
+ });
142
+ const { coderSession, auditorSession } = await (0, session_manager_js_1.startAutoFixProject)({
143
+ projectName: opts.project,
144
+ projectDir: cwd,
145
+ coderType: opts.coder,
146
+ auditorType: opts.auditor,
147
+ featureBranch: branch.name,
148
+ });
149
+ let task = (0, state_machine_js_1.createTask)({
150
+ title: issue.title,
151
+ description: issue.body,
152
+ coderSession,
153
+ auditorSession,
154
+ projectName: opts.project,
155
+ issueId: issue.id,
156
+ maxDiscussionRounds: opts.maxRounds ?? 3,
157
+ });
158
+ const auditEngine = new audit_engine_js_1.AuditEngine({
159
+ onTaskUpdate: async (updated) => { task = updated; },
160
+ });
161
+ const executors = {
162
+ sendToSession: async (session, text) => { await (0, tmux_js_1.sendKeys)(session, text); },
163
+ runDesignReview: async (t) => auditEngine.runDesignReview(t),
164
+ runCodeReview: async (t) => auditEngine.runCodeReview(t),
165
+ pushChanges: async (t) => {
166
+ if (t.branch)
167
+ await (0, branch_manager_js_1.pushBranch)(t.branch, cwd);
168
+ },
169
+ closeIssue: async (t) => {
170
+ if (t.issueId)
171
+ await tracker.closeIssue(t.issueId, 'Resolved via auto-fix pipeline');
172
+ },
173
+ };
174
+ while (task.state !== 'done' && task.state !== 'failed') {
175
+ const decision = (0, decision_engine_js_1.fastPathDecision)(task);
176
+ if (decision) {
177
+ task = await (0, decision_engine_js_1.executeDecision)(decision, task, executors);
178
+ }
179
+ else {
180
+ await new Promise((r) => setTimeout(r, 5000));
181
+ }
182
+ }
183
+ if (task.state === 'done') {
184
+ console.log(`✓ Issue #${issue.id} resolved: ${issue.title}`);
185
+ }
186
+ else {
187
+ console.error(`✗ Issue #${issue.id} failed: ${task.error}`);
188
+ await tracker.updateStatus(issue.id, 'open');
189
+ }
190
+ } while (opts.continuous);
191
+ }
192
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/autofix/index.ts"],"names":[],"mappings":";;;;;AAiCA,wDAwCC;AAlED,uDAAgD;AAChD,yDAAgD;AAChD,6DAAyE;AACzE,2DAA+D;AAC/D,4CAA0C;AAC1C,8CAA4C;AAC5C,oEAAkE;AAClE,gEAAuD;AACvD,kEAAuC;AAevC;;GAEG;AACH,SAAgB,sBAAsB,CAAC,OAAgB;IACrD,OAAO;SACJ,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,2BAA2B,CAAC;SACxC,MAAM,CAAC,sBAAsB,EAAE,cAAc,CAAC;SAC9C,MAAM,CAAC,gBAAgB,EAAE,+CAA+C,EAAE,aAAa,CAAC;SACxF,MAAM,CAAC,kBAAkB,EAAE,iDAAiD,EAAE,OAAO,CAAC;SACtF,MAAM,CAAC,kBAAkB,EAAE,yCAAyC,EAAE,MAAM,CAAC;SAC7E,MAAM,CAAC,qBAAqB,EAAE,mCAAmC,CAAC;SAClE,MAAM,CAAC,cAAc,EAAE,0CAA0C,CAAC;SAClE,MAAM,CAAC,kBAAkB,EAAE,uBAAuB,EAAE,GAAG,CAAC;SACxD,QAAQ,CAAC,QAAQ,EAAE,oCAAoC,CAAC;SACxD,MAAM,CAAC,KAAK,EAAE,eAAmC,EAAE,IAA4B,EAAE,EAAE;QAClF,MAAM,MAAM,GAAG,MAAM,IAAA,sBAAU,GAAE,CAAC;QAClC,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,IAAK,MAA4C,CAAC,cAAc,CAAC;QAEjG,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,OAAO,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;YACvC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,WAAW,GAAmB;YAClC,OAAO,EAAE,WAAW;YACpB,KAAK,EAAG,IAAI,CAAC,KAAmB,IAAI,aAAa;YACjD,OAAO,EAAG,IAAI,CAAC,OAAqB,IAAI,OAAO;YAC/C,OAAO,EAAG,IAAI,CAAC,OAAuB,IAAI,MAAM;YAChD,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,UAAU,EAAE,IAAI,CAAC,UAAU,KAAK,MAAM,IAAI,IAAI,CAAC,UAAU,KAAK,EAAE;YAChE,SAAS,EAAE,QAAQ,CAAC,IAAI,CAAC,SAAS,IAAI,GAAG,EAAE,EAAE,CAAC;SAC/C,CAAC;QAEF,IAAI,IAAI,CAAC,OAAO,KAAK,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAC5C,MAAM,cAAc,CAAC,WAAW,CAAC,CAAC;QACpC,CAAC;aAAM,IAAI,eAAe,EAAE,CAAC;YAC3B,MAAM,iBAAiB,CAAC,eAAe,EAAE,WAAW,CAAC,CAAC;QACxD,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC;YAC9D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC;AAED,iFAAiF;AAEjF,KAAK,UAAU,iBAAiB,CAAC,eAAuB,EAAE,IAAoB;IAC5E,mBAAM,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,8BAA8B,CAAC,CAAC;IAEjH,MAAM,aAAa,GAAG,IAAA,6BAAU,EAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC/C,MAAM,UAAU,GAAG,aAAa,EAAE,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAEvD,MAAM,EAAE,YAAY,EAAE,cAAc,EAAE,GAAG,MAAM,IAAA,wCAAmB,EAAC;QACjE,WAAW,EAAE,IAAI,CAAC,OAAO;QACzB,UAAU;QACV,SAAS,EAAE,IAAI,CAAC,KAAK;QACrB,WAAW,EAAE,IAAI,CAAC,OAAO;QACzB,aAAa,EAAE,MAAM;KACtB,CAAC,CAAC;IAEH,IAAI,IAAI,GAAG,IAAA,6BAAU,EAAC;QACpB,KAAK,EAAE,eAAe,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;QACnC,WAAW,EAAE,eAAe;QAC5B,YAAY;QACZ,cAAc;QACd,WAAW,EAAE,IAAI,CAAC,OAAO;QACzB,mBAAmB,EAAE,IAAI,CAAC,SAAS,IAAI,CAAC;KACzC,CAAC,CAAC;IAEH,MAAM,WAAW,GAAG,IAAI,6BAAW,CAAC;QAClC,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC;KACrD,CAAC,CAAC;IAEH,MAAM,SAAS,GAAG;QAChB,aAAa,EAAE,KAAK,EAAE,OAAe,EAAE,IAAY,EAAE,EAAE,GAAG,MAAM,IAAA,kBAAQ,EAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;QAC1F,eAAe,EAAE,KAAK,EAAE,CAAc,EAAE,EAAE,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC,CAAC;QACzE,aAAa,EAAE,KAAK,EAAE,CAAc,EAAE,EAAE,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC;QACrE,WAAW,EAAE,KAAK,EAAE,EAAe,EAAE,EAAE;YACrC,mBAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,yCAAyC,CAAC,CAAC;QAC1E,CAAC;QACD,UAAU,EAAE,KAAK,EAAE,EAAe,EAAE,EAAE;YACpC,mBAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,eAAe,CAAC,CAAC;QAChD,CAAC;KACF,CAAC;IAEF,mBAAmB;IACnB,OAAO,IAAI,CAAC,KAAK,KAAK,MAAM,IAAI,IAAI,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;QACxD,MAAM,QAAQ,GAAG,IAAA,qCAAgB,EAAC,IAAI,CAAC,CAAC;QACxC,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,GAAG,MAAM,IAAA,oCAAe,EAAC,QAAQ,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;QAC1D,CAAC;aAAM,CAAC;YACN,0CAA0C;YAC1C,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IAED,IAAI,IAAI,CAAC,KAAK,KAAK,MAAM,EAAE,CAAC;QAC1B,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;IAClD,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,KAAK,CAAC,oBAAoB,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QAChD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,iFAAiF;AAEjF,KAAK,UAAU,cAAc,CAAC,IAAoB;IAChD,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;IAC9D,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,OAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IAE9D,mBAAM,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,gCAAgC,CAAC,CAAC;IAEhG,GAAG,CAAC;QACF,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;QACjF,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;gBACpB,mBAAM,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;gBACpD,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;gBAChD,SAAS;YACX,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;YACzC,MAAM;QACR,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,mBAAmB;QAC5C,mBAAM,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,EAAE,kBAAkB,CAAC,CAAC;QAE3E,MAAM,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAEnC,mEAAmE;QACnE,MAAM,MAAM,GAAG,MAAM,IAAA,sBAAU,GAAE,CAAC;QAClC,MAAM,aAAa,GAAG,IAAA,6BAAU,EAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC/C,MAAM,GAAG,GAAG,aAAa,EAAE,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAChD,MAAM,UAAU,GAAG,aAAa,EAAE,OAAO,EAAE,UAAU,IAAI,MAAM,CAAC,OAAO,EAAE,UAAU,IAAI,MAAM,CAAC;QAC9F,MAAM,MAAM,GAAG,MAAM,IAAA,gCAAY,EAAC;YAChC,OAAO,EAAE,KAAK,CAAC,EAAE;YACjB,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,UAAU;YACV,GAAG;SACJ,CAAC,CAAC;QAEH,MAAM,EAAE,YAAY,EAAE,cAAc,EAAE,GAAG,MAAM,IAAA,wCAAmB,EAAC;YACjE,WAAW,EAAE,IAAI,CAAC,OAAO;YACzB,UAAU,EAAE,GAAG;YACf,SAAS,EAAE,IAAI,CAAC,KAAK;YACrB,WAAW,EAAE,IAAI,CAAC,OAAO;YACzB,aAAa,EAAE,MAAM,CAAC,IAAI;SAC3B,CAAC,CAAC;QAEH,IAAI,IAAI,GAAG,IAAA,6BAAU,EAAC;YACpB,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,WAAW,EAAE,KAAK,CAAC,IAAI;YACvB,YAAY;YACZ,cAAc;YACd,WAAW,EAAE,IAAI,CAAC,OAAO;YACzB,OAAO,EAAE,KAAK,CAAC,EAAE;YACjB,mBAAmB,EAAE,IAAI,CAAC,SAAS,IAAI,CAAC;SACzC,CAAC,CAAC;QAEH,MAAM,WAAW,GAAG,IAAI,6BAAW,CAAC;YAClC,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC;SACrD,CAAC,CAAC;QAEH,MAAM,SAAS,GAAG;YAChB,aAAa,EAAE,KAAK,EAAE,OAAe,EAAE,IAAY,EAAE,EAAE,GAAG,MAAM,IAAA,kBAAQ,EAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;YAC1F,eAAe,EAAE,KAAK,EAAE,CAAc,EAAE,EAAE,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC,CAAC;YACzE,aAAa,EAAE,KAAK,EAAE,CAAc,EAAE,EAAE,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC;YACrE,WAAW,EAAE,KAAK,EAAE,CAAc,EAAE,EAAE;gBACpC,IAAI,CAAC,CAAC,MAAM;oBAAE,MAAM,IAAA,8BAAU,EAAC,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;YAChD,CAAC;YACD,UAAU,EAAE,KAAK,EAAE,CAAc,EAAE,EAAE;gBACnC,IAAI,CAAC,CAAC,OAAO;oBAAE,MAAM,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,EAAE,gCAAgC,CAAC,CAAC;YACvF,CAAC;SACF,CAAC;QAEF,OAAO,IAAI,CAAC,KAAK,KAAK,MAAM,IAAI,IAAI,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YACxD,MAAM,QAAQ,GAAG,IAAA,qCAAgB,EAAC,IAAI,CAAC,CAAC;YACxC,IAAI,QAAQ,EAAE,CAAC;gBACb,IAAI,GAAG,MAAM,IAAA,oCAAe,EAAC,QAAQ,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;YAC1D,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;YAChD,CAAC;QACH,CAAC;QAED,IAAI,IAAI,CAAC,KAAK,KAAK,MAAM,EAAE,CAAC;YAC1B,OAAO,CAAC,GAAG,CAAC,YAAY,KAAK,CAAC,EAAE,cAAc,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;QAC/D,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,YAAY,KAAK,CAAC,EAAE,YAAY,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;YAC5D,MAAM,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC,QAAQ,IAAI,CAAC,UAAU,EAAE;AAC5B,CAAC"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Phase-specific prompt builders for auto-fix pipeline.
3
+ * Each phase gets a tailored system prompt that focuses the agent's behavior.
4
+ */
5
+ import type { AutoFixState } from './state-machine.js';
6
+ export interface PromptContext {
7
+ taskTitle: string;
8
+ taskDescription: string;
9
+ projectName: string;
10
+ coderAgent: string;
11
+ auditorAgent: string;
12
+ discussionRound?: number;
13
+ maxRounds?: number;
14
+ previousFindings?: string[];
15
+ workerList?: string[];
16
+ }
17
+ /**
18
+ * Build phase-specific prompt for the brain/auditor agent.
19
+ */
20
+ export declare function buildPhasePrompt(phase: AutoFixState, ctx: PromptContext): string;
21
+ /**
22
+ * Build a discussion prompt for a rejection round.
23
+ */
24
+ export declare function buildDiscussionPrompt(coderResponse: string, findings: string[], round: number, maxRounds: number): string;
25
+ //# sourceMappingURL=prompt-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-builder.d.ts","sourceRoot":"","sources":["../../src/autofix/prompt-builder.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,EAAE,aAAa,GAAG,MAAM,CAehF;AAyGD;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,MAAM,EAAE,EAClB,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,GAChB,MAAM,CAaR"}