duocode 0.1.0

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 (220) hide show
  1. package/.env.example +36 -0
  2. package/LICENSE +21 -0
  3. package/README.md +52 -0
  4. package/dist/ast/context.d.ts +16 -0
  5. package/dist/ast/context.js +37 -0
  6. package/dist/ast/context.js.map +1 -0
  7. package/dist/ast/diff.d.ts +27 -0
  8. package/dist/ast/diff.js +44 -0
  9. package/dist/ast/diff.js.map +1 -0
  10. package/dist/ast/locks.d.ts +47 -0
  11. package/dist/ast/locks.js +88 -0
  12. package/dist/ast/locks.js.map +1 -0
  13. package/dist/ast/merge.d.ts +22 -0
  14. package/dist/ast/merge.js +120 -0
  15. package/dist/ast/merge.js.map +1 -0
  16. package/dist/ast/ownership.d.ts +31 -0
  17. package/dist/ast/ownership.js +111 -0
  18. package/dist/ast/ownership.js.map +1 -0
  19. package/dist/ast/parser.d.ts +44 -0
  20. package/dist/ast/parser.js +134 -0
  21. package/dist/ast/parser.js.map +1 -0
  22. package/dist/cli.d.ts +2 -0
  23. package/dist/cli.js +423 -0
  24. package/dist/cli.js.map +1 -0
  25. package/dist/commands/doctor.d.ts +5 -0
  26. package/dist/commands/doctor.js +63 -0
  27. package/dist/commands/doctor.js.map +1 -0
  28. package/dist/commands/duo.d.ts +9 -0
  29. package/dist/commands/duo.js +285 -0
  30. package/dist/commands/duo.js.map +1 -0
  31. package/dist/commands/github.d.ts +2 -0
  32. package/dist/commands/github.js +85 -0
  33. package/dist/commands/github.js.map +1 -0
  34. package/dist/commands/init.d.ts +2 -0
  35. package/dist/commands/init.js +33 -0
  36. package/dist/commands/init.js.map +1 -0
  37. package/dist/commands/negotiation.d.ts +2 -0
  38. package/dist/commands/negotiation.js +160 -0
  39. package/dist/commands/negotiation.js.map +1 -0
  40. package/dist/commands/repl_commands.d.ts +26 -0
  41. package/dist/commands/repl_commands.js +226 -0
  42. package/dist/commands/repl_commands.js.map +1 -0
  43. package/dist/commands/shell.d.ts +1 -0
  44. package/dist/commands/shell.js +110 -0
  45. package/dist/commands/shell.js.map +1 -0
  46. package/dist/commands/start.d.ts +2 -0
  47. package/dist/commands/start.js +231 -0
  48. package/dist/commands/start.js.map +1 -0
  49. package/dist/commands/task.d.ts +2 -0
  50. package/dist/commands/task.js +215 -0
  51. package/dist/commands/task.js.map +1 -0
  52. package/dist/config/loader.d.ts +193 -0
  53. package/dist/config/loader.js +106 -0
  54. package/dist/config/loader.js.map +1 -0
  55. package/dist/context/project_context.d.ts +79 -0
  56. package/dist/context/project_context.js +292 -0
  57. package/dist/context/project_context.js.map +1 -0
  58. package/dist/context/token_budget.d.ts +35 -0
  59. package/dist/context/token_budget.js +81 -0
  60. package/dist/context/token_budget.js.map +1 -0
  61. package/dist/db/queries.d.ts +121 -0
  62. package/dist/db/queries.js +109 -0
  63. package/dist/db/queries.js.map +1 -0
  64. package/dist/db/schema.d.ts +110 -0
  65. package/dist/db/schema.js +346 -0
  66. package/dist/db/schema.js.map +1 -0
  67. package/dist/duo/duo_orchestrator.d.ts +50 -0
  68. package/dist/duo/duo_orchestrator.js +510 -0
  69. package/dist/duo/duo_orchestrator.js.map +1 -0
  70. package/dist/duo/duo_session.d.ts +47 -0
  71. package/dist/duo/duo_session.js +127 -0
  72. package/dist/duo/duo_session.js.map +1 -0
  73. package/dist/duo/duo_types.d.ts +168 -0
  74. package/dist/duo/duo_types.js +53 -0
  75. package/dist/duo/duo_types.js.map +1 -0
  76. package/dist/duo/session_store.d.ts +71 -0
  77. package/dist/duo/session_store.js +177 -0
  78. package/dist/duo/session_store.js.map +1 -0
  79. package/dist/git/worktree.d.ts +21 -0
  80. package/dist/git/worktree.js +86 -0
  81. package/dist/git/worktree.js.map +1 -0
  82. package/dist/github/cache.d.ts +23 -0
  83. package/dist/github/cache.js +67 -0
  84. package/dist/github/cache.js.map +1 -0
  85. package/dist/github/issues.d.ts +17 -0
  86. package/dist/github/issues.js +93 -0
  87. package/dist/github/issues.js.map +1 -0
  88. package/dist/github/mcp_client.d.ts +57 -0
  89. package/dist/github/mcp_client.js +214 -0
  90. package/dist/github/mcp_client.js.map +1 -0
  91. package/dist/github/sync.d.ts +11 -0
  92. package/dist/github/sync.js +65 -0
  93. package/dist/github/sync.js.map +1 -0
  94. package/dist/github/webhook.d.ts +25 -0
  95. package/dist/github/webhook.js +197 -0
  96. package/dist/github/webhook.js.map +1 -0
  97. package/dist/negotiation/index.d.ts +1 -0
  98. package/dist/negotiation/index.js +2 -0
  99. package/dist/negotiation/index.js.map +1 -0
  100. package/dist/negotiation/protocol.d.ts +62 -0
  101. package/dist/negotiation/protocol.js +188 -0
  102. package/dist/negotiation/protocol.js.map +1 -0
  103. package/dist/orchestrator/complexity_scorer.d.ts +2 -0
  104. package/dist/orchestrator/complexity_scorer.js +79 -0
  105. package/dist/orchestrator/complexity_scorer.js.map +1 -0
  106. package/dist/orchestrator/dependency_graph.d.ts +7 -0
  107. package/dist/orchestrator/dependency_graph.js +73 -0
  108. package/dist/orchestrator/dependency_graph.js.map +1 -0
  109. package/dist/orchestrator/intent_parser.d.ts +11 -0
  110. package/dist/orchestrator/intent_parser.js +116 -0
  111. package/dist/orchestrator/intent_parser.js.map +1 -0
  112. package/dist/orchestrator/task_runner.d.ts +56 -0
  113. package/dist/orchestrator/task_runner.js +181 -0
  114. package/dist/orchestrator/task_runner.js.map +1 -0
  115. package/dist/orchestrator/types.d.ts +44 -0
  116. package/dist/orchestrator/types.js +21 -0
  117. package/dist/orchestrator/types.js.map +1 -0
  118. package/dist/providers/anthropic.d.ts +12 -0
  119. package/dist/providers/anthropic.js +258 -0
  120. package/dist/providers/anthropic.js.map +1 -0
  121. package/dist/providers/auction.d.ts +42 -0
  122. package/dist/providers/auction.js +190 -0
  123. package/dist/providers/auction.js.map +1 -0
  124. package/dist/providers/base.d.ts +103 -0
  125. package/dist/providers/base.js +2 -0
  126. package/dist/providers/base.js.map +1 -0
  127. package/dist/providers/cost_tracker.d.ts +45 -0
  128. package/dist/providers/cost_tracker.js +111 -0
  129. package/dist/providers/cost_tracker.js.map +1 -0
  130. package/dist/providers/duo_pair_router.d.ts +11 -0
  131. package/dist/providers/duo_pair_router.js +67 -0
  132. package/dist/providers/duo_pair_router.js.map +1 -0
  133. package/dist/providers/factory.d.ts +7 -0
  134. package/dist/providers/factory.js +130 -0
  135. package/dist/providers/factory.js.map +1 -0
  136. package/dist/providers/grading_rubric.d.ts +37 -0
  137. package/dist/providers/grading_rubric.js +238 -0
  138. package/dist/providers/grading_rubric.js.map +1 -0
  139. package/dist/providers/openai.d.ts +12 -0
  140. package/dist/providers/openai.js +229 -0
  141. package/dist/providers/openai.js.map +1 -0
  142. package/dist/providers/openrouter.d.ts +14 -0
  143. package/dist/providers/openrouter.js +178 -0
  144. package/dist/providers/openrouter.js.map +1 -0
  145. package/dist/providers/performance_tracker.d.ts +21 -0
  146. package/dist/providers/performance_tracker.js +63 -0
  147. package/dist/providers/performance_tracker.js.map +1 -0
  148. package/dist/providers/registry_loader.d.ts +6 -0
  149. package/dist/providers/registry_loader.js +54 -0
  150. package/dist/providers/registry_loader.js.map +1 -0
  151. package/dist/providers/retry.d.ts +66 -0
  152. package/dist/providers/retry.js +203 -0
  153. package/dist/providers/retry.js.map +1 -0
  154. package/dist/providers/role_scorer.d.ts +16 -0
  155. package/dist/providers/role_scorer.js +16 -0
  156. package/dist/providers/role_scorer.js.map +1 -0
  157. package/dist/providers/router.d.ts +84 -0
  158. package/dist/providers/router.js +542 -0
  159. package/dist/providers/router.js.map +1 -0
  160. package/dist/security/credentials.d.ts +6 -0
  161. package/dist/security/credentials.js +16 -0
  162. package/dist/security/credentials.js.map +1 -0
  163. package/dist/setup/browser.d.ts +1 -0
  164. package/dist/setup/browser.js +12 -0
  165. package/dist/setup/browser.js.map +1 -0
  166. package/dist/setup/global_config.d.ts +14 -0
  167. package/dist/setup/global_config.js +54 -0
  168. package/dist/setup/global_config.js.map +1 -0
  169. package/dist/setup/wizard.d.ts +2 -0
  170. package/dist/setup/wizard.js +206 -0
  171. package/dist/setup/wizard.js.map +1 -0
  172. package/dist/tools/agent_loop.d.ts +38 -0
  173. package/dist/tools/agent_loop.js +72 -0
  174. package/dist/tools/agent_loop.js.map +1 -0
  175. package/dist/tools/approval.d.ts +64 -0
  176. package/dist/tools/approval.js +172 -0
  177. package/dist/tools/approval.js.map +1 -0
  178. package/dist/tools/checkpoint.d.ts +65 -0
  179. package/dist/tools/checkpoint.js +342 -0
  180. package/dist/tools/checkpoint.js.map +1 -0
  181. package/dist/tools/definitions.d.ts +13 -0
  182. package/dist/tools/definitions.js +103 -0
  183. package/dist/tools/definitions.js.map +1 -0
  184. package/dist/tools/diff_display.d.ts +46 -0
  185. package/dist/tools/diff_display.js +298 -0
  186. package/dist/tools/diff_display.js.map +1 -0
  187. package/dist/tools/executor.d.ts +12 -0
  188. package/dist/tools/executor.js +340 -0
  189. package/dist/tools/executor.js.map +1 -0
  190. package/dist/tools/permissions.d.ts +17 -0
  191. package/dist/tools/permissions.js +139 -0
  192. package/dist/tools/permissions.js.map +1 -0
  193. package/dist/tools/tool_types.d.ts +48 -0
  194. package/dist/tools/tool_types.js +7 -0
  195. package/dist/tools/tool_types.js.map +1 -0
  196. package/dist/ui/banner.d.ts +4 -0
  197. package/dist/ui/banner.js +104 -0
  198. package/dist/ui/banner.js.map +1 -0
  199. package/dist/ui/callbacks.d.ts +30 -0
  200. package/dist/ui/callbacks.js +132 -0
  201. package/dist/ui/callbacks.js.map +1 -0
  202. package/dist/ui/colors.d.ts +14 -0
  203. package/dist/ui/colors.js +28 -0
  204. package/dist/ui/colors.js.map +1 -0
  205. package/dist/ui/dashboard.d.ts +51 -0
  206. package/dist/ui/dashboard.js +181 -0
  207. package/dist/ui/dashboard.js.map +1 -0
  208. package/dist/ui/leaderboard.d.ts +16 -0
  209. package/dist/ui/leaderboard.js +43 -0
  210. package/dist/ui/leaderboard.js.map +1 -0
  211. package/dist/ui/logger.d.ts +28 -0
  212. package/dist/ui/logger.js +117 -0
  213. package/dist/ui/logger.js.map +1 -0
  214. package/dist/ui/progress.d.ts +16 -0
  215. package/dist/ui/progress.js +62 -0
  216. package/dist/ui/progress.js.map +1 -0
  217. package/dist/ui/tokenizer.d.ts +5 -0
  218. package/dist/ui/tokenizer.js +54 -0
  219. package/dist/ui/tokenizer.js.map +1 -0
  220. package/package.json +63 -0
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Slash command handlers for the conversational REPL.
3
+ * Extracted from cli.ts to keep file sizes manageable.
4
+ */
5
+ import type { DuoSession } from "../duo/duo_session.js";
6
+ import type { SessionStore } from "../duo/session_store.js";
7
+ import type { CheckpointManager } from "../tools/checkpoint.js";
8
+ import type { Logger } from "../ui/logger.js";
9
+ import type Database from "better-sqlite3";
10
+ export interface SlashCommandContext {
11
+ session: DuoSession;
12
+ sessionStore: SessionStore;
13
+ checkpointMgr: CheckpointManager;
14
+ currentSessionId: string | undefined;
15
+ setSessionId: (id: string | undefined) => void;
16
+ db: Database.Database | null;
17
+ log: Logger;
18
+ }
19
+ /**
20
+ * Handle a slash command. Returns:
21
+ * - "handled" if the command was processed
22
+ * - "exit" if user wants to quit
23
+ * - "unknown" if the command is not recognized
24
+ */
25
+ export declare function handleSlashCommand(cmdLower: string, rest: string[], ctx: SlashCommandContext): "handled" | "exit" | "unknown";
26
+ export declare function printHelp(log: Logger): void;
@@ -0,0 +1,226 @@
1
+ import { DIMENSION_WEIGHTS } from "../duo/duo_types.js";
2
+ import { R, B, CYN, GRN, RED, DM, MAG } from "../ui/colors.js";
3
+ import { printLeaderboard } from "../ui/leaderboard.js";
4
+ /**
5
+ * Handle a slash command. Returns:
6
+ * - "handled" if the command was processed
7
+ * - "exit" if user wants to quit
8
+ * - "unknown" if the command is not recognized
9
+ */
10
+ export function handleSlashCommand(cmdLower, rest, ctx) {
11
+ const { session, sessionStore, checkpointMgr, log, db } = ctx;
12
+ if (cmdLower === "exit" || cmdLower === "quit") {
13
+ return "exit";
14
+ }
15
+ if (cmdLower === "clear") {
16
+ session.clear();
17
+ log.raw(`${DM}Session cleared.${R}\n\n`);
18
+ return "handled";
19
+ }
20
+ if (cmdLower === "history") {
21
+ log.raw(`\n${session.buildHistorySummary()}\n\n`);
22
+ return "handled";
23
+ }
24
+ if (cmdLower === "help") {
25
+ printHelp(log);
26
+ return "handled";
27
+ }
28
+ if (cmdLower === "leaderboard") {
29
+ if (!db) {
30
+ log.raw(`${DM}No database available (no project initialized).${R}\n\n`);
31
+ return "handled";
32
+ }
33
+ printLeaderboard(db);
34
+ return "handled";
35
+ }
36
+ if (cmdLower === "config") {
37
+ log.raw(`\n${B}${CYN}DuoPair Configuration${R}\n\n`);
38
+ log.raw(`${DM}Model selection: user-driven (interactive picker)${R}\n`);
39
+ log.raw(`${DM}Default assignment: sorted by roleAffinity${R}\n\n`);
40
+ log.raw(`${B}${MAG}ISO/IEC 25010 Grading Weights${R}\n`);
41
+ for (const [key, value] of Object.entries(DIMENSION_WEIGHTS)) {
42
+ log.raw(` ${key.padEnd(18)} ${(value * 100).toFixed(0)}%\n`);
43
+ }
44
+ log.raw("\n");
45
+ return "handled";
46
+ }
47
+ if (cmdLower === "no-grade") {
48
+ const enabled = session.toggleGrading();
49
+ log.raw(`${DM}Grading ${enabled ? "enabled" : "disabled"} for subsequent turns.${R}\n\n`);
50
+ return "handled";
51
+ }
52
+ if (cmdLower === "auto-confirm") {
53
+ const enabled = session.toggleAutoConfirm();
54
+ log.raw(`${DM}Auto-confirm ${enabled ? "enabled" : "disabled"}.${R}\n\n`);
55
+ return "handled";
56
+ }
57
+ if (cmdLower === "save") {
58
+ try {
59
+ const id = sessionStore.save(session, ctx.currentSessionId);
60
+ ctx.setSessionId(id);
61
+ log.info("Session saved", { sessionId: id });
62
+ }
63
+ catch (err) {
64
+ const msg = err instanceof Error ? err.message : String(err);
65
+ log.error(`Save failed: ${msg}`);
66
+ }
67
+ return "handled";
68
+ }
69
+ if (cmdLower === "resume") {
70
+ handleResume(rest, ctx);
71
+ return "handled";
72
+ }
73
+ if (cmdLower === "sessions") {
74
+ handleSessionsList(ctx);
75
+ return "handled";
76
+ }
77
+ if (cmdLower === "undo") {
78
+ handleUndo(rest, ctx);
79
+ return "handled";
80
+ }
81
+ if (cmdLower === "redo") {
82
+ handleRedo(ctx);
83
+ return "handled";
84
+ }
85
+ return "unknown";
86
+ }
87
+ function handleResume(rest, ctx) {
88
+ const { session, sessionStore, log } = ctx;
89
+ const targetId = rest[0];
90
+ if (!targetId) {
91
+ const sessions = sessionStore.list();
92
+ if (sessions.length === 0) {
93
+ log.raw(`${DM}No saved sessions.${R}\n\n`);
94
+ return;
95
+ }
96
+ log.raw(`\n ${B}Saved sessions${R} ${DM}(use /resume <id>)${R}\n\n`);
97
+ for (const s of sessions.slice(0, 10)) {
98
+ const date = new Date(s.updatedAt).toLocaleString();
99
+ log.raw(` ${CYN}${s.id.slice(0, 8)}${R} ${DM}${date} ${s.turns.length} turns $${s.totalCostUsd.toFixed(4)}${R} "${s.promptPreview}"\n`);
100
+ }
101
+ log.raw("\n");
102
+ return;
103
+ }
104
+ const allSessions = sessionStore.list();
105
+ const match = allSessions.find((s) => s.id.startsWith(targetId));
106
+ if (!match) {
107
+ log.error(`Session not found: ${targetId}`);
108
+ return;
109
+ }
110
+ try {
111
+ const { session: restored, data } = sessionStore.resume(match.id);
112
+ session.clear();
113
+ for (const turn of restored.getTurns()) {
114
+ session.addTurn(turn);
115
+ }
116
+ session.setMode(data.mode);
117
+ if (data.gradingEnabled !== session.gradingEnabled)
118
+ session.toggleGrading();
119
+ if (data.autoConfirm !== session.autoConfirm)
120
+ session.toggleAutoConfirm();
121
+ session.assignment = data.assignment;
122
+ if (data.pendingPlan)
123
+ session.storePlan(data.pendingPlan);
124
+ ctx.setSessionId(match.id);
125
+ log.info("Resumed session", {
126
+ sessionId: match.id.slice(0, 8),
127
+ turns: data.turns.length,
128
+ cost: `$${data.totalCostUsd.toFixed(4)}`,
129
+ });
130
+ }
131
+ catch (err) {
132
+ const msg = err instanceof Error ? err.message : String(err);
133
+ log.error(`Resume failed: ${msg}`);
134
+ }
135
+ }
136
+ function handleSessionsList(ctx) {
137
+ const { sessionStore, log, currentSessionId } = ctx;
138
+ const sessions = sessionStore.list();
139
+ if (sessions.length === 0) {
140
+ log.raw(`${DM}No saved sessions.${R}\n\n`);
141
+ return;
142
+ }
143
+ log.raw(`\n ${B}Saved sessions${R}\n\n`);
144
+ for (const s of sessions) {
145
+ const date = new Date(s.updatedAt).toLocaleString();
146
+ const current = s.id === currentSessionId ? ` ${GRN}(current)${R}` : "";
147
+ log.raw(` ${CYN}${s.id.slice(0, 8)}${R}${current} ${DM}${date} ${s.turns.length} turns $${s.totalCostUsd.toFixed(4)}${R} "${s.promptPreview}"\n`);
148
+ }
149
+ log.raw("\n");
150
+ }
151
+ function handleUndo(rest, ctx) {
152
+ const { checkpointMgr, log } = ctx;
153
+ const subCmd = rest[0]?.toLowerCase();
154
+ if (subCmd === "list") {
155
+ const history = checkpointMgr.getHistory();
156
+ if (history.length === 0) {
157
+ log.raw(`${DM}No checkpoints available.${R}\n\n`);
158
+ return;
159
+ }
160
+ log.raw(`\n ${B}Checkpoint history${R} ${DM}(${history.length} available)${R}\n\n`);
161
+ for (const cp of history) {
162
+ const date = new Date(cp.timestamp).toLocaleString();
163
+ log.raw(` ${CYN}#${cp.id}${R} ${DM}${date} ${cp.strategy} ${cp.files.length} files${R} "${cp.label}"\n`);
164
+ }
165
+ log.raw("\n");
166
+ return;
167
+ }
168
+ const steps = subCmd ? parseInt(subCmd, 10) : 1;
169
+ if (isNaN(steps) || steps < 1) {
170
+ log.raw(`${RED}Usage: /undo [list | <n>]${R}\n\n`);
171
+ return;
172
+ }
173
+ if (checkpointMgr.undoCount === 0) {
174
+ log.raw(`${DM}No checkpoints to undo.${R}\n\n`);
175
+ return;
176
+ }
177
+ const restored = checkpointMgr.undo(steps);
178
+ if (restored) {
179
+ log.raw(`${GRN}Restored checkpoint #${restored.id}${R} ${DM}(${restored.files.length} files, ${restored.strategy})${R}\n\n`);
180
+ }
181
+ else {
182
+ log.error("Undo failed.");
183
+ }
184
+ }
185
+ function handleRedo(ctx) {
186
+ const { checkpointMgr, log } = ctx;
187
+ if (checkpointMgr.redoCount === 0) {
188
+ log.raw(`${DM}No checkpoints to redo.${R}\n\n`);
189
+ return;
190
+ }
191
+ const restored = checkpointMgr.redo();
192
+ if (restored) {
193
+ log.raw(`${GRN}Redone checkpoint #${restored.id}${R} ${DM}(${restored.files.length} files)${R}\n\n`);
194
+ }
195
+ else {
196
+ log.error("Redo failed.");
197
+ }
198
+ }
199
+ export function printHelp(log) {
200
+ log.raw(`\n ${B}Slash commands${R}\n`);
201
+ log.raw(` ${CYN}/exit${R} ${DM}Exit the REPL${R}\n`);
202
+ log.raw(` ${CYN}/clear${R} ${DM}Clear conversation history${R}\n`);
203
+ log.raw(` ${CYN}/history${R} ${DM}Show conversation turns${R}\n`);
204
+ log.raw(` ${CYN}/mode${R} ${DM}Cycle mode (or Shift+Tab)${R}\n`);
205
+ log.raw(` ${CYN}/mode <name>${R} ${DM}Switch to code|plan|execute|debug${R}\n`);
206
+ log.raw(` ${CYN}/save${R} ${DM}Save current session to disk${R}\n`);
207
+ log.raw(` ${CYN}/resume [id]${R} ${DM}Resume a saved session${R}\n`);
208
+ log.raw(` ${CYN}/sessions${R} ${DM}List saved sessions${R}\n`);
209
+ log.raw(` ${CYN}/undo${R} ${DM}Undo last file changes${R}\n`);
210
+ log.raw(` ${CYN}/undo list${R} ${DM}Show checkpoint history${R}\n`);
211
+ log.raw(` ${CYN}/undo <n>${R} ${DM}Undo N steps back${R}\n`);
212
+ log.raw(` ${CYN}/redo${R} ${DM}Redo last undone checkpoint${R}\n`);
213
+ log.raw(` ${CYN}/leaderboard${R} ${DM}Show ELO rankings${R}\n`);
214
+ log.raw(` ${CYN}/config${R} ${DM}Show scoring config${R}\n`);
215
+ log.raw(` ${CYN}/shell${R} ${DM}Drop into the command shell${R}\n`);
216
+ log.raw(` ${CYN}/no-grade${R} ${DM}Toggle grading on/off${R}\n`);
217
+ log.raw(` ${CYN}/auto-confirm${R} ${DM}Toggle cost confirmation on/off${R}\n`);
218
+ log.raw(` ${CYN}/help${R} ${DM}Show this help${R}\n\n`);
219
+ log.raw(` ${B}Bare commands${R}\n`);
220
+ log.raw(` ${CYN}man${R} ${DM}Show all commands and usage${R}\n`);
221
+ log.raw(` ${CYN}models${R} ${DM}List available model profiles${R}\n`);
222
+ log.raw(` ${CYN}go${R} ${DM}Execute stored plan (Plan mode)${R}\n`);
223
+ log.raw(` ${CYN}help${R} ${DM}Show this help${R}\n\n`);
224
+ log.raw(` ${DM}Anything else is sent as a DuoPair prompt.${R}\n\n`);
225
+ }
226
+ //# sourceMappingURL=repl_commands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repl_commands.js","sourceRoot":"","sources":["../../src/commands/repl_commands.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare function runInteractiveShell(selfPath: string): Promise<void>;
@@ -0,0 +1,110 @@
1
+ import fs from "node:fs";
2
+ import os from "node:os";
3
+ import path from "node:path";
4
+ import { spawn } from "node:child_process";
5
+ import { createInterface } from "node:readline/promises";
6
+ import { R, CYN, DM } from "../ui/colors.js";
7
+ import { tokenizeCommandLine } from "../ui/tokenizer.js";
8
+ import { createLogger } from "../ui/logger.js";
9
+ function runChildCommand(args, cwd, selfPath) {
10
+ return new Promise((resolve) => {
11
+ const child = spawn(process.execPath, [...process.execArgv, selfPath, ...args], {
12
+ stdio: "inherit",
13
+ cwd,
14
+ env: {
15
+ ...process.env,
16
+ DUOCODE_SHELL_CHILD: "1",
17
+ },
18
+ });
19
+ child.on("close", (code) => {
20
+ resolve(code ?? 1);
21
+ });
22
+ });
23
+ }
24
+ const log = createLogger("shell");
25
+ export async function runInteractiveShell(selfPath) {
26
+ if (!process.stdin.isTTY || !process.stdout.isTTY) {
27
+ return;
28
+ }
29
+ log.raw(`\n ${CYN}Interactive mode${R} ${DM}(type 'exit' to quit)${R}\n`);
30
+ log.raw(` ${DM}Use commands like:${R} start "add prompt"\n`);
31
+ log.raw(` ${DM}All commands from 'man' work here without the 'duocode' prefix.${R}\n\n`);
32
+ let shellCwd = process.cwd();
33
+ const rl = createInterface({ input: process.stdin, output: process.stdout });
34
+ try {
35
+ while (true) {
36
+ const raw = await rl.question(`${CYN}duocode${R}:${DM}${shellCwd}${R}> `);
37
+ const line = raw.trim();
38
+ if (!line) {
39
+ continue;
40
+ }
41
+ if (line === "exit" || line === "quit") {
42
+ break;
43
+ }
44
+ if (line === "help" || line === "?") {
45
+ log.raw(` ${DM}Examples:${R}\n`);
46
+ log.raw(` cd /path/to/repo\n`);
47
+ log.raw(` pwd\n`);
48
+ log.raw(` start "build an express endpoint"\n`);
49
+ log.raw(` init\n`);
50
+ log.raw(` task create "my task"\n`);
51
+ log.raw(` negotiation run --help\n`);
52
+ log.raw(` github sync --help\n`);
53
+ log.raw(` task list\n`);
54
+ log.raw(` man\n`);
55
+ log.raw(` exit\n\n`);
56
+ continue;
57
+ }
58
+ let tokens;
59
+ try {
60
+ tokens = tokenizeCommandLine(line);
61
+ }
62
+ catch (error) {
63
+ const message = error instanceof Error ? error.message : String(error);
64
+ log.error(`duocode shell: ${message}`);
65
+ continue;
66
+ }
67
+ if (tokens[0] === "duocode") {
68
+ tokens = tokens.slice(1);
69
+ }
70
+ if (tokens.length === 0) {
71
+ continue;
72
+ }
73
+ if (tokens[0] === "shell") {
74
+ log.raw(` ${DM}Already in interactive mode.${R}\n`);
75
+ continue;
76
+ }
77
+ if (tokens[0] === "pwd") {
78
+ log.raw(`${shellCwd}\n`);
79
+ continue;
80
+ }
81
+ if (tokens[0] === "cd") {
82
+ const rawTarget = tokens[1] ?? "~";
83
+ const target = rawTarget === "~"
84
+ ? os.homedir()
85
+ : rawTarget.startsWith("~/")
86
+ ? path.join(os.homedir(), rawTarget.slice(2))
87
+ : path.resolve(shellCwd, rawTarget);
88
+ if (!fs.existsSync(target)) {
89
+ log.error(`directory does not exist: ${target}`);
90
+ continue;
91
+ }
92
+ if (!fs.statSync(target).isDirectory()) {
93
+ log.error(`not a directory: ${target}`);
94
+ continue;
95
+ }
96
+ shellCwd = target;
97
+ continue;
98
+ }
99
+ const exitCode = await runChildCommand(tokens, shellCwd, selfPath);
100
+ if (exitCode !== 0) {
101
+ log.warn(`Command exited with code ${exitCode}`);
102
+ }
103
+ }
104
+ }
105
+ finally {
106
+ rl.close();
107
+ log.raw("\n");
108
+ }
109
+ }
110
+ //# sourceMappingURL=shell.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shell.js","sourceRoot":"","sources":["../../src/commands/shell.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { Command } from "commander";
2
+ export declare function registerStartCommand(program: Command): void;
@@ -0,0 +1,231 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ import { createProviderStack } from "../providers/factory.js";
4
+ import { printDashboardHeader, printDashboardFooter, printDashboardAuction, printDashboardIntent, } from "../ui/dashboard.js";
5
+ import { analyzeIntent } from "../orchestrator/intent_parser.js";
6
+ import { createLogger } from "../ui/logger.js";
7
+ const log = createLogger("start");
8
+ const LANGUAGE_EXTENSIONS = {
9
+ markdown: ".md",
10
+ md: ".md",
11
+ python: ".py",
12
+ typescript: ".ts",
13
+ javascript: ".js",
14
+ rust: ".rs",
15
+ go: ".go",
16
+ ruby: ".rb",
17
+ java: ".java",
18
+ cpp: ".cpp",
19
+ "c++": ".cpp",
20
+ c: ".c",
21
+ bash: ".sh",
22
+ shell: ".sh",
23
+ html: ".html",
24
+ css: ".css",
25
+ sql: ".sql",
26
+ php: ".php",
27
+ swift: ".swift",
28
+ kotlin: ".kt",
29
+ lua: ".lua",
30
+ perl: ".pl",
31
+ r: ".r",
32
+ scala: ".scala",
33
+ zig: ".zig",
34
+ dart: ".dart",
35
+ elixir: ".ex",
36
+ haskell: ".hs",
37
+ yaml: ".yaml",
38
+ toml: ".toml",
39
+ };
40
+ // Domain-specific tools/frameworks that imply a language or file type.
41
+ // Checked before generic language keywords so "nmap script" → .nse, not .c.
42
+ const DOMAIN_EXTENSIONS = [
43
+ { pattern: /\breadme\b/, ext: ".md", baseFallback: "README" },
44
+ { pattern: /\bnmap\b/, ext: ".nse", baseFallback: "script" },
45
+ { pattern: /\bwireshark\b/, ext: ".lua" },
46
+ { pattern: /\bdocker(?:file)?\b/, ext: "", baseFallback: "Dockerfile" },
47
+ { pattern: /\bmakefile\b/, ext: "", baseFallback: "Makefile" },
48
+ { pattern: /\bterraform\b/, ext: ".tf" },
49
+ { pattern: /\bansible\b/, ext: ".yaml", baseFallback: "playbook" },
50
+ { pattern: /\bwebpack\b/, ext: ".js", baseFallback: "webpack.config" },
51
+ { pattern: /\bnginx\b/, ext: ".conf" },
52
+ { pattern: /\bgithub action\b/, ext: ".yaml", baseFallback: "action" },
53
+ { pattern: /\bgrpc\b/, ext: ".proto" },
54
+ { pattern: /\bgraphql\b/, ext: ".graphql" },
55
+ { pattern: /\bcmake\b/, ext: ".cmake", baseFallback: "CMakeLists" },
56
+ ];
57
+ function buildSystemMessage(prompt) {
58
+ const lower = prompt.toLowerCase();
59
+ const codeOnlyRequested = /\b(only code|just code|no explanation|no markdown|code only)\b/.test(lower);
60
+ if (codeOnlyRequested) {
61
+ return "You are a code generator. Output only the requested code content.";
62
+ }
63
+ return [
64
+ "You are DuoCode, a software engineering assistant.",
65
+ "Follow the user's requested deliverables exactly.",
66
+ "If the user asks for code plus docs/plans/README/tests, include all requested artifacts.",
67
+ "If multiple files are needed, separate them clearly using file headers like 'File: path/to/file.ext'.",
68
+ "Do not omit explanations or planning text when explicitly requested.",
69
+ ].join(" ");
70
+ }
71
+ function inferOutputPath(prompt) {
72
+ const lower = prompt.toLowerCase();
73
+ // Try to extract a meaningful name after action verbs
74
+ const actionPattern = /(?:create|write|build|make|generate)\s+(?:a\s+)?(?:(?:simple|basic|new)\s+)?(\w+)/i;
75
+ const match = lower.match(actionPattern);
76
+ let baseName = match?.[1] ?? "output";
77
+ // If baseName is a language name, look for a better noun after it
78
+ if (LANGUAGE_EXTENSIONS[baseName]) {
79
+ const afterLang = new RegExp(`${baseName}\\s+(?:script|program|function|file|module|class)?\\s*(?:that|to|which|for|called|named)?\\s+(\\w+)`, "i");
80
+ const betterMatch = lower.match(afterLang);
81
+ if (betterMatch?.[1]) {
82
+ baseName = betterMatch[1];
83
+ }
84
+ }
85
+ // 1) Check for an explicit language keyword (word-boundary match).
86
+ // "python nmap scanner" → .py wins over the nmap domain default.
87
+ let ext = "";
88
+ for (const [lang, extension] of Object.entries(LANGUAGE_EXTENSIONS)) {
89
+ const wordBoundary = new RegExp(`\\b${lang}\\b`);
90
+ if (wordBoundary.test(lower)) {
91
+ ext = extension;
92
+ break;
93
+ }
94
+ }
95
+ // 2) If no explicit language, check domain-specific tools (e.g. "nmap" → .nse).
96
+ if (!ext) {
97
+ for (const domain of DOMAIN_EXTENSIONS) {
98
+ if (domain.pattern.test(lower)) {
99
+ if (domain.baseFallback) {
100
+ baseName = domain.baseFallback;
101
+ }
102
+ return `${baseName}${domain.ext}`;
103
+ }
104
+ }
105
+ }
106
+ // 3) Fallback
107
+ if (!ext) {
108
+ ext = ".txt";
109
+ }
110
+ // If baseName is still a language name, fall back to a generic name
111
+ if (LANGUAGE_EXTENSIONS[baseName]) {
112
+ baseName = "output";
113
+ }
114
+ return `${baseName}${ext}`;
115
+ }
116
+ function tierToCapabilities(tier) {
117
+ switch (tier) {
118
+ case "fast":
119
+ return ["code_generation", "fast_response", "streaming"];
120
+ case "strong":
121
+ return ["code_generation", "deep_reasoning", "streaming"];
122
+ case "frontier":
123
+ return ["code_generation", "deep_reasoning", "streaming"];
124
+ }
125
+ }
126
+ export function registerStartCommand(program) {
127
+ program
128
+ .command("start")
129
+ .description("Send a prompt to AI and stream the response")
130
+ .argument("<prompt>", "What you want built")
131
+ .option("--model <id>", "Override model (e.g. openai/gpt-4o)")
132
+ .option("--output <path>", "Output file path")
133
+ .option("--auction-mode <mode>", "auto|single|hybrid|ab_test", "auto")
134
+ .option("--ab-key <key>", "Stable key for A/B assignment (used with --auction-mode ab_test)")
135
+ .option("--no-parse", "Skip intent parsing (faster, no analysis cost)")
136
+ .action(async (prompt, opts) => {
137
+ const { router, costTracker, capabilityRouter } = createProviderStack();
138
+ // Step 1: Intent analysis (if enabled)
139
+ let analysis = null;
140
+ if (opts.parse !== false && !opts.model) {
141
+ try {
142
+ analysis = await analyzeIntent({ prompt, router, capabilityRouter, costTracker });
143
+ }
144
+ catch (err) {
145
+ const msg = err instanceof Error ? err.message : String(err);
146
+ log.warn("Intent parsing skipped", { error: msg });
147
+ }
148
+ }
149
+ // Step 2: Model routing — complexity-aware if analysis succeeded
150
+ let modelId = opts.model;
151
+ let contextWindow;
152
+ if (!modelId) {
153
+ const requiredCaps = analysis
154
+ ? tierToCapabilities(analysis.complexity.recommendedTier)
155
+ : ["code_generation", "streaming"];
156
+ const route = capabilityRouter.route({
157
+ requiredCapabilities: requiredCaps,
158
+ requireStreaming: true,
159
+ ...(analysis ? {
160
+ estimatedInputTokens: analysis.intent.estimatedTokens.input,
161
+ estimatedOutputTokens: analysis.intent.estimatedTokens.output,
162
+ } : {}),
163
+ }, costTracker);
164
+ modelId = route.model.model;
165
+ contextWindow = route.model.contextWindow;
166
+ }
167
+ else {
168
+ const profile = capabilityRouter.listProfiles().find((p) => p.model === modelId);
169
+ contextWindow = profile?.contextWindow;
170
+ }
171
+ if (analysis) {
172
+ printDashboardIntent({ analysis });
173
+ }
174
+ printDashboardHeader({ model: modelId, contextWindow });
175
+ const systemMessage = buildSystemMessage(prompt);
176
+ const textParts = [];
177
+ let inputTokens = 0;
178
+ let outputTokens = 0;
179
+ const streamRequest = opts.model
180
+ ? {
181
+ model: opts.model,
182
+ messages: [
183
+ { role: "system", content: systemMessage },
184
+ { role: "user", content: prompt },
185
+ ],
186
+ }
187
+ : {
188
+ messages: [
189
+ { role: "system", content: systemMessage },
190
+ { role: "user", content: prompt },
191
+ ],
192
+ route: {
193
+ requiredCapabilities: ["code_generation", "streaming"],
194
+ requireStreaming: true,
195
+ },
196
+ auctionMode: opts.auctionMode,
197
+ abTestKey: opts.abKey,
198
+ };
199
+ const auctionPreview = router.previewAuction(streamRequest);
200
+ printDashboardAuction({ auction: auctionPreview });
201
+ for await (const event of router.stream(streamRequest)) {
202
+ if (event.type === "text-delta") {
203
+ process.stdout.write(event.delta);
204
+ textParts.push(event.delta);
205
+ }
206
+ else if (event.type === "usage") {
207
+ inputTokens = event.usage.inputTokens;
208
+ outputTokens = event.usage.outputTokens;
209
+ }
210
+ else if (event.type === "done") {
211
+ inputTokens = event.response.usage.inputTokens;
212
+ outputTokens = event.response.usage.outputTokens;
213
+ }
214
+ }
215
+ const outputText = textParts.join("");
216
+ const outputPath = opts.output ?? inferOutputPath(prompt);
217
+ if (outputText.trim().length > 0) {
218
+ const resolved = path.resolve(outputPath);
219
+ fs.mkdirSync(path.dirname(resolved), { recursive: true });
220
+ fs.writeFileSync(resolved, outputText, "utf8");
221
+ }
222
+ const totals = costTracker.getTotals();
223
+ printDashboardFooter({
224
+ inputTokens,
225
+ outputTokens,
226
+ costUsd: totals.totalUsd,
227
+ savedPath: outputText.trim().length > 0 ? outputPath : undefined,
228
+ });
229
+ });
230
+ }
231
+ //# sourceMappingURL=start.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { Command } from "commander";
2
+ export declare function registerTaskCommand(program: Command): void;