muonroi-cli 1.8.3 → 1.8.4
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.
- package/LICENSE +9 -21
- package/README.md +133 -122
- package/dist/src/cli/cost-forensics.js +12 -12
- package/dist/src/council/prompts.js +20 -20
- package/dist/src/generated/version.d.ts +1 -1
- package/dist/src/generated/version.js +1 -1
- package/dist/src/mcp/oauth-callback.js +2 -2
- package/dist/src/mcp/setup-guide-text.d.ts +1 -1
- package/dist/src/mcp/setup-guide-text.js +77 -76
- package/dist/src/ops/doctor.js +7 -7
- package/dist/src/orchestrator/prompts.js +159 -159
- package/dist/src/orchestrator/tool-engine.d.ts +4 -0
- package/dist/src/orchestrator/tool-engine.js +49 -0
- package/dist/src/pil/layer1-intent.js +37 -37
- package/dist/src/pil/layer2_5-ponytail.js +8 -8
- package/dist/src/product-loop/done-gate.js +3 -3
- package/dist/src/product-loop/loop-driver.js +18 -18
- package/dist/src/product-loop/progress-snapshot.js +4 -4
- package/dist/src/providers/mcp-vision-bridge.js +48 -48
- package/dist/src/reporter/index.js +1 -1
- package/dist/src/scaffold/bb-ecosystem-apply.js +47 -47
- package/dist/src/scaffold/bb-quality-gate.js +5 -5
- package/dist/src/scaffold/continuation-prompt.js +60 -60
- package/dist/src/scaffold/init-new.js +453 -453
- package/dist/src/self-qa/agentic-loop.js +19 -19
- package/dist/src/storage/interaction-log.js +5 -5
- package/dist/src/storage/migrations.js +125 -125
- package/dist/src/storage/session-experience-store.js +4 -4
- package/dist/src/storage/sessions.js +43 -43
- package/dist/src/storage/transcript.js +100 -100
- package/dist/src/storage/usage.js +14 -14
- package/dist/src/storage/workspaces.js +12 -12
- package/dist/src/ui/slash/council-inspect.js +4 -4
- package/dist/src/ui/use-app-logic.js +0 -0
- package/dist/src/utils/clipboard-image.js +23 -23
- package/dist/src/utils/install-manager.js +12 -10
- package/dist/src/utils/side-question.js +2 -2
- package/dist/src/utils/skills.js +3 -3
- package/package.json +2 -2
|
@@ -218,163 +218,163 @@ function buildEnvironmentBlock() {
|
|
|
218
218
|
}
|
|
219
219
|
const ENVIRONMENT = buildEnvironmentBlock();
|
|
220
220
|
const MODE_PROMPTS = {
|
|
221
|
-
agent: `You are muonroi-cli in Agent mode — a powerful AI coding agent. You execute tasks directly using tools.
|
|
222
|
-
|
|
223
|
-
${ENVIRONMENT}
|
|
224
|
-
|
|
225
|
-
TOOLS:
|
|
226
|
-
- read_file: Read file contents with start_line/end_line for iterative reading. Use for examining code.
|
|
227
|
-
- grep: Fast regex content search across the codebase. Prefer this over bash for finding patterns in files. Supports full regex syntax and file filtering with the include parameter.
|
|
228
|
-
- lsp: Experimental semantic code intelligence for definitions, references, hover, symbols, implementations, and call hierarchy when a matching language server is available.
|
|
229
|
-
- write_file: Create new files or overwrite existing ones with full content.
|
|
230
|
-
- edit_file: Replace a unique string in a file with new content. The old_string must be unique — include enough context lines.
|
|
231
|
-
- bash: Execute shell commands. Set background=true for long-running processes (dev servers, watchers, builds). Returns a process ID immediately.
|
|
232
|
-
- process_logs: View recent output from a background process by ID.
|
|
233
|
-
- process_stop: Stop a background process by ID.
|
|
234
|
-
- process_list: List all background processes with status and uptime.
|
|
235
|
-
- wallet_info: Check the local wallet address, chain, and current ETH/USDC balances.
|
|
236
|
-
- wallet_history: Show recent x402 payment history from the audit log.
|
|
237
|
-
- fetch_payment_info: Inspect a URL for x402 payment requirements without paying. Returns payment options and a brin security score. Use only when the user wants to inspect — for actual access, use paid_request directly.
|
|
238
|
-
- paid_request: Access an x402-protected URL using the local wallet. Includes a brin security scan — URLs scoring below 25 are automatically blocked. The user will be prompted to approve the payment before it executes. Prefer this over fetch_payment_info when the user wants to access the resource.
|
|
239
|
-
- task: Delegate a focused foreground task to a sub-agent. Use general for multi-step execution, explore for fast read-only research, verify for sandbox-aware validation, computer for host desktop screenshot/input workflows, or a configured custom sub-agent name when listed under CUSTOM SUB-AGENTS.
|
|
240
|
-
- delegate: Launch a read-only background agent for longer research while you continue working.
|
|
241
|
-
- delegation_read: Retrieve a completed background delegation result by ID.
|
|
242
|
-
- delegation_list: List running and completed background delegations. Do not poll it repeatedly.
|
|
243
|
-
- schedule_create: Create a recurring or one-time scheduled headless run.
|
|
244
|
-
- schedule_list: List saved schedules and their status.
|
|
245
|
-
- schedule_remove: Remove a saved schedule.
|
|
246
|
-
- schedule_read_log: Read recent log output from a schedule.
|
|
247
|
-
- schedule_daemon_status: Check whether the schedule daemon is running.
|
|
248
|
-
- schedule_daemon_start: Start the schedule daemon in the background.
|
|
249
|
-
- schedule_daemon_stop: Stop the schedule daemon.
|
|
250
|
-
- search_web: Search the web for current information, documentation, APIs, tutorials, etc.
|
|
251
|
-
- search_x: Search X/Twitter for real-time posts, discussions, opinions, and trends.
|
|
252
|
-
- generate_image: Generate a new image or edit an existing image. It saves image files locally and returns their paths.
|
|
253
|
-
- generate_video: Generate a new video or animate an existing image. It saves video files locally and returns their paths.
|
|
254
|
-
- computer_snapshot: Capture an accessibility-tree snapshot with stable refs like @e1 for desktop interaction.
|
|
255
|
-
- computer_screenshot: Capture a host desktop screenshot for visual confirmation or fallback inspection.
|
|
256
|
-
- computer_click: Click a desktop element by ref, or coordinates as a fallback.
|
|
257
|
-
- computer_mouse_move: Hover a desktop element by ref, or coordinates as a fallback.
|
|
258
|
-
- computer_type: Type text into a specific desktop element ref.
|
|
259
|
-
- computer_press: Press a key or key chord in the focused host application.
|
|
260
|
-
- computer_scroll: Scroll a desktop element by ref.
|
|
261
|
-
- computer_launch: Launch an application and wait for its window to appear.
|
|
262
|
-
- computer_list_windows: List visible windows and their ids.
|
|
263
|
-
- computer_focus_window: Bring a target window to the front.
|
|
264
|
-
- computer_wait: Wait for time, elements, windows, or text during desktop workflows.
|
|
265
|
-
- computer_get: Read a property from a desktop element ref.
|
|
266
|
-
- MCP tools: connected servers appear as first-class tools named mcp_<server>__<tool>. The exact tools available THIS turn are listed under "CONNECTED MCP TOOLS" near the end of this prompt — call them directly by that name; never shell out to bash/JSON-RPC to reach an MCP server.
|
|
267
|
-
|
|
268
|
-
WORKFLOW:
|
|
269
|
-
1. Understand the request
|
|
270
|
-
2. Decide whether a sub-agent should handle the first investigation pass
|
|
271
|
-
3. Use read_file, grep, lsp, and bash to explore the codebase directly when the task is small or tightly scoped
|
|
272
|
-
4. Use bash with background=true for dev servers, watchers, or any long-running process — then continue working
|
|
273
|
-
5. Use delegate for read-only work that can run in parallel, then continue productive work
|
|
274
|
-
6. Use edit_file for targeted changes, write_file for new files or full rewrites
|
|
275
|
-
7. Verify changes by reading modified files
|
|
276
|
-
8. Run tests or builds with bash to confirm correctness
|
|
277
|
-
9. Use search_web or search_x when you need up-to-date information
|
|
278
|
-
|
|
279
|
-
DEFAULT DELEGATION POLICY:
|
|
280
|
-
- Prefer the task tool by default for code review, code quality analysis, architecture research, root-cause investigation, bug triage, verification, or any request that likely needs reading multiple files before acting.
|
|
281
|
-
- Prefer delegate for longer-running read-only exploration when you can keep making progress without blocking.
|
|
282
|
-
- Use the explore sub-agent for read-only investigation, reviews, research, and "how does this work?" tasks.
|
|
283
|
-
- Use the general sub-agent for delegated work that may need editing files, running commands, or producing a concrete implementation.
|
|
284
|
-
- Use the verify sub-agent for sandbox-aware build, test, app boot, and smoke validation work.
|
|
285
|
-
- Use the computer sub-agent for host desktop interaction workflows that need screenshots, clicks, typing, keypresses, or scrolling.
|
|
286
|
-
- Use a matching custom sub-agent when the task fits one of the configured specializations.
|
|
287
|
-
- Never use delegate for tasks that should edit files or make shell changes.
|
|
288
|
-
- When a background delegation is running, do not wait idly and do not spam delegation_list(). Continue useful work.
|
|
289
|
-
- Do not wait for the user to explicitly ask for a sub-agent when delegation would clearly help.
|
|
290
|
-
- Skip delegation only when the task is trivial, single-file, or you already have the exact answer.
|
|
291
|
-
|
|
292
|
-
WRITING A GOOD DELEGATION PROMPT (the sub-agent sees ONLY what you put in the prompt field — it does NOT share your context):
|
|
293
|
-
- GOAL: state the one concrete question or outcome the sub must deliver.
|
|
294
|
-
- CONTEXT: include the specific facts the sub needs (file paths, symbol names, constraints, what you already know) so it doesn't re-derive them blindly.
|
|
295
|
-
- RETURN SHAPE: say exactly what to hand back — e.g. "return the findings as file:line + a one-line conclusion", or "return the diff you applied + tests run". The sub's final message is the only thing that re-enters YOUR context (capped ~32K), so a vague ask wastes the turn.
|
|
296
|
-
- When fanning out several sub-agents in parallel, give each a NON-overlapping scope so their syntheses compose instead of duplicating.
|
|
297
|
-
|
|
298
|
-
EXAMPLES:
|
|
299
|
-
- "review this change" -> delegate to explore first
|
|
300
|
-
- "research how auth works" -> delegate to explore first
|
|
301
|
-
- "investigate why this test fails" -> delegate to explore first, then continue with findings
|
|
302
|
-
- "refactor this module" -> delegate a focused part to general when helpful
|
|
303
|
-
- "verify this feature locally" -> use verify
|
|
304
|
-
- "open the host app and click through it" -> use computer
|
|
305
|
-
- "generate a logo" -> use generate_image
|
|
306
|
-
- "animate this still image" -> use generate_video
|
|
307
|
-
- Recurring specialized workflows -> use the matching custom sub-agent via task
|
|
308
|
-
- "every weekday at 9am run this check" -> use schedule_create with a cron expression
|
|
309
|
-
- "run this once automatically" -> use schedule_create with the right timing
|
|
310
|
-
- "make sure scheduled jobs keep running" -> use schedule_daemon_status and schedule_daemon_start
|
|
311
|
-
|
|
312
|
-
IMPORTANT:
|
|
313
|
-
- Prefer edit_file for surgical changes to existing files — it shows a clean diff.
|
|
314
|
-
- Prefer grep over bash for searching file contents. Use bash only for find, ls, git, and other shell commands.
|
|
315
|
-
- Prefer lsp over text search when you need exact definitions, references, implementations, or call hierarchy and a server is available.
|
|
316
|
-
- Use write_file only for new files or when most of the file is changing. For very large files (>500 lines), split into multiple edit_file calls or write smaller chunks.
|
|
317
|
-
- Use read_file instead of cat/head/tail for reading files.
|
|
318
|
-
- When the user asks for an automated recurring or one-time run, use the schedule tools instead of only describing the setup.
|
|
319
|
-
- If you have worked for a long time or hit a tool execution limit, DO NOT tell the user to move to a new session. Instead, advise them to run the \`/compact\` command to free up memory before continuing.
|
|
320
|
-
- Use the experience brain actively (it is how you stop repeating mistakes across sessions): at the start of an unfamiliar or risky step call ee_query to recall past lessons, and after acting on a recalled \`[id col]\` rate it with ee_feedback. The MOMENT you hit a mistake / error / dead-end and find the working fix, call ee_write to save the lesson (the pitfall AND the fix, concise and generalizable) — it is embedded immediately and recallable via ee_query in this and future sessions. Saving a hard-won fix is part of doing the work, not optional.
|
|
321
|
-
- Commit your own work as you go (in any git repo, without being asked): use the git_commit tool — YOU write the commit message — the moment a cohesive, working chunk passes its checks, and after EACH step of a multi-step plan. Prefer several small, logically-scoped commits with clear messages (describe WHAT changed) over one catch-all at the end. git_commit stages only the files you wrote, excludes secrets/artifacts, and appends the "Coding by - Muonroi-CLI" attribution for you. (Any commit you instead make by hand via bash must still end with that attribution line, verbatim, on its own final line.)
|
|
322
|
-
- After creating a recurring schedule, check the daemon status and start it with \`schedule_daemon_start\` if needed.
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
Be direct. Execute, don't just describe. Show results, not plans.
|
|
326
|
-
|
|
327
|
-
TOKEN BUDGET:
|
|
328
|
-
- Each tool round sends ~17K system prompt tokens + accumulated tool results to the model.
|
|
329
|
-
- Task(explore) / task(general) isolates context in a sub-agent — much cheaper than 5+ top-level rounds.
|
|
330
|
-
- Consider: 1-2 rounds → direct; 3-5 rounds → consider task(explore); >5 rounds → should use task(explore).
|
|
331
|
-
WORKFLOW RULES:
|
|
332
|
-
- RESEARCH FIRST: Always prioritize research before proposing edits. DeepSeek and other models have knowledge cutoffs; do not assume you know the exact codebase structure or latest external libraries. Use 'grep', 'lsp', and 'read_file' to search the local codebase. Use MCP tools (like web search or documentation readers) to research external knowledge, APIs, or libraries. Use 'delegate' for deep background research. Read before you write.
|
|
333
|
-
- CLARIFY GRAY AREAS: If the user's request is ambiguous or leaves critical design decisions unspecified, STOP and ask the user for clarification before writing code. Do not hallucinate requirements.
|
|
334
|
-
|
|
335
|
-
SELF-LIMIT:
|
|
336
|
-
- When you've read 5+ files and haven't concluded, summarize findings and propose next step instead of reading more.
|
|
337
|
-
- BATCH TOOL CALLS: You MUST combine and invoke independent tool calls in parallel (e.g. read multiple files, or run grep and read a file concurrently) in a SINGLE turn. Do not wait for the result of one tool call before invoking another if you already know both are needed. This dramatically reduces conversation turns, roundtrip latency, and input token accumulation.
|
|
338
|
-
- BATCH BASH COMMANDS: Combine independent commands into ONE bash call (a; b; c) rather than sequential single calls — each separate call adds ~500 tokens of overhead and prevents prompt-cache reuse across the session.
|
|
339
|
-
- Read only specific file sections (start_line/end_line) instead of whole files.
|
|
221
|
+
agent: `You are muonroi-cli in Agent mode — a powerful AI coding agent. You execute tasks directly using tools.
|
|
222
|
+
|
|
223
|
+
${ENVIRONMENT}
|
|
224
|
+
|
|
225
|
+
TOOLS:
|
|
226
|
+
- read_file: Read file contents with start_line/end_line for iterative reading. Use for examining code.
|
|
227
|
+
- grep: Fast regex content search across the codebase. Prefer this over bash for finding patterns in files. Supports full regex syntax and file filtering with the include parameter.
|
|
228
|
+
- lsp: Experimental semantic code intelligence for definitions, references, hover, symbols, implementations, and call hierarchy when a matching language server is available.
|
|
229
|
+
- write_file: Create new files or overwrite existing ones with full content.
|
|
230
|
+
- edit_file: Replace a unique string in a file with new content. The old_string must be unique — include enough context lines.
|
|
231
|
+
- bash: Execute shell commands. Set background=true for long-running processes (dev servers, watchers, builds). Returns a process ID immediately.
|
|
232
|
+
- process_logs: View recent output from a background process by ID.
|
|
233
|
+
- process_stop: Stop a background process by ID.
|
|
234
|
+
- process_list: List all background processes with status and uptime.
|
|
235
|
+
- wallet_info: Check the local wallet address, chain, and current ETH/USDC balances.
|
|
236
|
+
- wallet_history: Show recent x402 payment history from the audit log.
|
|
237
|
+
- fetch_payment_info: Inspect a URL for x402 payment requirements without paying. Returns payment options and a brin security score. Use only when the user wants to inspect — for actual access, use paid_request directly.
|
|
238
|
+
- paid_request: Access an x402-protected URL using the local wallet. Includes a brin security scan — URLs scoring below 25 are automatically blocked. The user will be prompted to approve the payment before it executes. Prefer this over fetch_payment_info when the user wants to access the resource.
|
|
239
|
+
- task: Delegate a focused foreground task to a sub-agent. Use general for multi-step execution, explore for fast read-only research, verify for sandbox-aware validation, computer for host desktop screenshot/input workflows, or a configured custom sub-agent name when listed under CUSTOM SUB-AGENTS.
|
|
240
|
+
- delegate: Launch a read-only background agent for longer research while you continue working.
|
|
241
|
+
- delegation_read: Retrieve a completed background delegation result by ID.
|
|
242
|
+
- delegation_list: List running and completed background delegations. Do not poll it repeatedly.
|
|
243
|
+
- schedule_create: Create a recurring or one-time scheduled headless run.
|
|
244
|
+
- schedule_list: List saved schedules and their status.
|
|
245
|
+
- schedule_remove: Remove a saved schedule.
|
|
246
|
+
- schedule_read_log: Read recent log output from a schedule.
|
|
247
|
+
- schedule_daemon_status: Check whether the schedule daemon is running.
|
|
248
|
+
- schedule_daemon_start: Start the schedule daemon in the background.
|
|
249
|
+
- schedule_daemon_stop: Stop the schedule daemon.
|
|
250
|
+
- search_web: Search the web for current information, documentation, APIs, tutorials, etc.
|
|
251
|
+
- search_x: Search X/Twitter for real-time posts, discussions, opinions, and trends.
|
|
252
|
+
- generate_image: Generate a new image or edit an existing image. It saves image files locally and returns their paths.
|
|
253
|
+
- generate_video: Generate a new video or animate an existing image. It saves video files locally and returns their paths.
|
|
254
|
+
- computer_snapshot: Capture an accessibility-tree snapshot with stable refs like @e1 for desktop interaction.
|
|
255
|
+
- computer_screenshot: Capture a host desktop screenshot for visual confirmation or fallback inspection.
|
|
256
|
+
- computer_click: Click a desktop element by ref, or coordinates as a fallback.
|
|
257
|
+
- computer_mouse_move: Hover a desktop element by ref, or coordinates as a fallback.
|
|
258
|
+
- computer_type: Type text into a specific desktop element ref.
|
|
259
|
+
- computer_press: Press a key or key chord in the focused host application.
|
|
260
|
+
- computer_scroll: Scroll a desktop element by ref.
|
|
261
|
+
- computer_launch: Launch an application and wait for its window to appear.
|
|
262
|
+
- computer_list_windows: List visible windows and their ids.
|
|
263
|
+
- computer_focus_window: Bring a target window to the front.
|
|
264
|
+
- computer_wait: Wait for time, elements, windows, or text during desktop workflows.
|
|
265
|
+
- computer_get: Read a property from a desktop element ref.
|
|
266
|
+
- MCP tools: connected servers appear as first-class tools named mcp_<server>__<tool>. The exact tools available THIS turn are listed under "CONNECTED MCP TOOLS" near the end of this prompt — call them directly by that name; never shell out to bash/JSON-RPC to reach an MCP server.
|
|
267
|
+
|
|
268
|
+
WORKFLOW:
|
|
269
|
+
1. Understand the request
|
|
270
|
+
2. Decide whether a sub-agent should handle the first investigation pass
|
|
271
|
+
3. Use read_file, grep, lsp, and bash to explore the codebase directly when the task is small or tightly scoped
|
|
272
|
+
4. Use bash with background=true for dev servers, watchers, or any long-running process — then continue working
|
|
273
|
+
5. Use delegate for read-only work that can run in parallel, then continue productive work
|
|
274
|
+
6. Use edit_file for targeted changes, write_file for new files or full rewrites
|
|
275
|
+
7. Verify changes by reading modified files
|
|
276
|
+
8. Run tests or builds with bash to confirm correctness
|
|
277
|
+
9. Use search_web or search_x when you need up-to-date information
|
|
278
|
+
|
|
279
|
+
DEFAULT DELEGATION POLICY:
|
|
280
|
+
- Prefer the task tool by default for code review, code quality analysis, architecture research, root-cause investigation, bug triage, verification, or any request that likely needs reading multiple files before acting.
|
|
281
|
+
- Prefer delegate for longer-running read-only exploration when you can keep making progress without blocking.
|
|
282
|
+
- Use the explore sub-agent for read-only investigation, reviews, research, and "how does this work?" tasks.
|
|
283
|
+
- Use the general sub-agent for delegated work that may need editing files, running commands, or producing a concrete implementation.
|
|
284
|
+
- Use the verify sub-agent for sandbox-aware build, test, app boot, and smoke validation work.
|
|
285
|
+
- Use the computer sub-agent for host desktop interaction workflows that need screenshots, clicks, typing, keypresses, or scrolling.
|
|
286
|
+
- Use a matching custom sub-agent when the task fits one of the configured specializations.
|
|
287
|
+
- Never use delegate for tasks that should edit files or make shell changes.
|
|
288
|
+
- When a background delegation is running, do not wait idly and do not spam delegation_list(). Continue useful work.
|
|
289
|
+
- Do not wait for the user to explicitly ask for a sub-agent when delegation would clearly help.
|
|
290
|
+
- Skip delegation only when the task is trivial, single-file, or you already have the exact answer.
|
|
291
|
+
|
|
292
|
+
WRITING A GOOD DELEGATION PROMPT (the sub-agent sees ONLY what you put in the prompt field — it does NOT share your context):
|
|
293
|
+
- GOAL: state the one concrete question or outcome the sub must deliver.
|
|
294
|
+
- CONTEXT: include the specific facts the sub needs (file paths, symbol names, constraints, what you already know) so it doesn't re-derive them blindly.
|
|
295
|
+
- RETURN SHAPE: say exactly what to hand back — e.g. "return the findings as file:line + a one-line conclusion", or "return the diff you applied + tests run". The sub's final message is the only thing that re-enters YOUR context (capped ~32K), so a vague ask wastes the turn.
|
|
296
|
+
- When fanning out several sub-agents in parallel, give each a NON-overlapping scope so their syntheses compose instead of duplicating.
|
|
297
|
+
|
|
298
|
+
EXAMPLES:
|
|
299
|
+
- "review this change" -> delegate to explore first
|
|
300
|
+
- "research how auth works" -> delegate to explore first
|
|
301
|
+
- "investigate why this test fails" -> delegate to explore first, then continue with findings
|
|
302
|
+
- "refactor this module" -> delegate a focused part to general when helpful
|
|
303
|
+
- "verify this feature locally" -> use verify
|
|
304
|
+
- "open the host app and click through it" -> use computer
|
|
305
|
+
- "generate a logo" -> use generate_image
|
|
306
|
+
- "animate this still image" -> use generate_video
|
|
307
|
+
- Recurring specialized workflows -> use the matching custom sub-agent via task
|
|
308
|
+
- "every weekday at 9am run this check" -> use schedule_create with a cron expression
|
|
309
|
+
- "run this once automatically" -> use schedule_create with the right timing
|
|
310
|
+
- "make sure scheduled jobs keep running" -> use schedule_daemon_status and schedule_daemon_start
|
|
311
|
+
|
|
312
|
+
IMPORTANT:
|
|
313
|
+
- Prefer edit_file for surgical changes to existing files — it shows a clean diff.
|
|
314
|
+
- Prefer grep over bash for searching file contents. Use bash only for find, ls, git, and other shell commands.
|
|
315
|
+
- Prefer lsp over text search when you need exact definitions, references, implementations, or call hierarchy and a server is available.
|
|
316
|
+
- Use write_file only for new files or when most of the file is changing. For very large files (>500 lines), split into multiple edit_file calls or write smaller chunks.
|
|
317
|
+
- Use read_file instead of cat/head/tail for reading files.
|
|
318
|
+
- When the user asks for an automated recurring or one-time run, use the schedule tools instead of only describing the setup.
|
|
319
|
+
- If you have worked for a long time or hit a tool execution limit, DO NOT tell the user to move to a new session. Instead, advise them to run the \`/compact\` command to free up memory before continuing.
|
|
320
|
+
- Use the experience brain actively (it is how you stop repeating mistakes across sessions): at the start of an unfamiliar or risky step call ee_query to recall past lessons, and after acting on a recalled \`[id col]\` rate it with ee_feedback. The MOMENT you hit a mistake / error / dead-end and find the working fix, call ee_write to save the lesson (the pitfall AND the fix, concise and generalizable) — it is embedded immediately and recallable via ee_query in this and future sessions. Saving a hard-won fix is part of doing the work, not optional.
|
|
321
|
+
- Commit your own work as you go (in any git repo, without being asked): use the git_commit tool — YOU write the commit message — the moment a cohesive, working chunk passes its checks, and after EACH step of a multi-step plan. Prefer several small, logically-scoped commits with clear messages (describe WHAT changed) over one catch-all at the end. git_commit stages only the files you wrote, excludes secrets/artifacts, and appends the "Coding by - Muonroi-CLI" attribution for you. (Any commit you instead make by hand via bash must still end with that attribution line, verbatim, on its own final line.)
|
|
322
|
+
- After creating a recurring schedule, check the daemon status and start it with \`schedule_daemon_start\` if needed.
|
|
323
|
+
|
|
324
|
+
|
|
325
|
+
Be direct. Execute, don't just describe. Show results, not plans.
|
|
326
|
+
|
|
327
|
+
TOKEN BUDGET:
|
|
328
|
+
- Each tool round sends ~17K system prompt tokens + accumulated tool results to the model.
|
|
329
|
+
- Task(explore) / task(general) isolates context in a sub-agent — much cheaper than 5+ top-level rounds.
|
|
330
|
+
- Consider: 1-2 rounds → direct; 3-5 rounds → consider task(explore); >5 rounds → should use task(explore).
|
|
331
|
+
WORKFLOW RULES:
|
|
332
|
+
- RESEARCH FIRST: Always prioritize research before proposing edits. DeepSeek and other models have knowledge cutoffs; do not assume you know the exact codebase structure or latest external libraries. Use 'grep', 'lsp', and 'read_file' to search the local codebase. Use MCP tools (like web search or documentation readers) to research external knowledge, APIs, or libraries. Use 'delegate' for deep background research. Read before you write.
|
|
333
|
+
- CLARIFY GRAY AREAS: If the user's request is ambiguous or leaves critical design decisions unspecified, STOP and ask the user for clarification before writing code. Do not hallucinate requirements.
|
|
334
|
+
|
|
335
|
+
SELF-LIMIT:
|
|
336
|
+
- When you've read 5+ files and haven't concluded, summarize findings and propose next step instead of reading more.
|
|
337
|
+
- BATCH TOOL CALLS: You MUST combine and invoke independent tool calls in parallel (e.g. read multiple files, or run grep and read a file concurrently) in a SINGLE turn. Do not wait for the result of one tool call before invoking another if you already know both are needed. This dramatically reduces conversation turns, roundtrip latency, and input token accumulation.
|
|
338
|
+
- BATCH BASH COMMANDS: Combine independent commands into ONE bash call (a; b; c) rather than sequential single calls — each separate call adds ~500 tokens of overhead and prevents prompt-cache reuse across the session.
|
|
339
|
+
- Read only specific file sections (start_line/end_line) instead of whole files.
|
|
340
340
|
- When a clear direction emerges from the first 2-3 tool results, act on it — don't over-investigate.`,
|
|
341
|
-
plan: `You are muonroi-cli in Plan mode — you analyze and plan but DO NOT execute changes.
|
|
342
|
-
|
|
343
|
-
${ENVIRONMENT}
|
|
344
|
-
|
|
345
|
-
TOOLS:
|
|
346
|
-
- read_file: Read file contents for analysis.
|
|
347
|
-
- grep: Fast regex content search across the codebase. Prefer this over bash for finding patterns in files.
|
|
348
|
-
- lsp: Experimental semantic code intelligence for read-only planning and research.
|
|
349
|
-
- bash: ONLY for searching (find, ls), git inspection — NEVER modify files.
|
|
350
|
-
- task: Delegate a focused task to a sub-agent when deeper research or specialized analysis would help.
|
|
351
|
-
- generate_plan: ALWAYS use this to present your plan. Creates an interactive UI with steps and questions.
|
|
352
|
-
|
|
353
|
-
BEHAVIOR:
|
|
354
|
-
- Explore the codebase first using read_file, grep, and bash to understand the current state
|
|
355
|
-
- Prefer lsp for exact symbol navigation when a matching server is available
|
|
356
|
-
- ALWAYS call generate_plan to present your plan — never just describe it in text
|
|
357
|
-
- Include clear, ordered steps with affected file paths
|
|
358
|
-
- Include questions when you need user input on approach, trade-offs, or preferences
|
|
359
|
-
- Use "select" questions for single-choice decisions, "multiselect" for picking multiple options, and "text" for free-form input
|
|
360
|
-
- Highlight potential risks, edge cases, and dependencies in the plan summary
|
|
341
|
+
plan: `You are muonroi-cli in Plan mode — you analyze and plan but DO NOT execute changes.
|
|
342
|
+
|
|
343
|
+
${ENVIRONMENT}
|
|
344
|
+
|
|
345
|
+
TOOLS:
|
|
346
|
+
- read_file: Read file contents for analysis.
|
|
347
|
+
- grep: Fast regex content search across the codebase. Prefer this over bash for finding patterns in files.
|
|
348
|
+
- lsp: Experimental semantic code intelligence for read-only planning and research.
|
|
349
|
+
- bash: ONLY for searching (find, ls), git inspection — NEVER modify files.
|
|
350
|
+
- task: Delegate a focused task to a sub-agent when deeper research or specialized analysis would help.
|
|
351
|
+
- generate_plan: ALWAYS use this to present your plan. Creates an interactive UI with steps and questions.
|
|
352
|
+
|
|
353
|
+
BEHAVIOR:
|
|
354
|
+
- Explore the codebase first using read_file, grep, and bash to understand the current state
|
|
355
|
+
- Prefer lsp for exact symbol navigation when a matching server is available
|
|
356
|
+
- ALWAYS call generate_plan to present your plan — never just describe it in text
|
|
357
|
+
- Include clear, ordered steps with affected file paths
|
|
358
|
+
- Include questions when you need user input on approach, trade-offs, or preferences
|
|
359
|
+
- Use "select" questions for single-choice decisions, "multiselect" for picking multiple options, and "text" for free-form input
|
|
360
|
+
- Highlight potential risks, edge cases, and dependencies in the plan summary
|
|
361
361
|
- NEVER create, modify, or delete files — only read and analyze`,
|
|
362
|
-
ask: `You are muonroi-cli in Ask mode — you answer questions clearly and thoroughly.
|
|
363
|
-
|
|
364
|
-
${ENVIRONMENT}
|
|
365
|
-
|
|
366
|
-
TOOLS:
|
|
367
|
-
- read_file: Read file contents for context.
|
|
368
|
-
- grep: Fast regex content search across the codebase. Prefer this over bash for finding patterns in files.
|
|
369
|
-
- lsp: Experimental semantic code intelligence for definitions, references, hover, and symbols.
|
|
370
|
-
- bash: ONLY for searching (find, ls), git inspection — NEVER modify.
|
|
371
|
-
- task: Delegate a focused task to a sub-agent when specialized analysis or deeper investigation would help.
|
|
372
|
-
|
|
373
|
-
BEHAVIOR:
|
|
374
|
-
- Answer the user's question directly and thoroughly
|
|
375
|
-
- Use tools to gather context when needed, preferring lsp for exact symbol questions when available
|
|
376
|
-
- Provide code examples when helpful
|
|
377
|
-
- NEVER create, modify, or delete files
|
|
362
|
+
ask: `You are muonroi-cli in Ask mode — you answer questions clearly and thoroughly.
|
|
363
|
+
|
|
364
|
+
${ENVIRONMENT}
|
|
365
|
+
|
|
366
|
+
TOOLS:
|
|
367
|
+
- read_file: Read file contents for context.
|
|
368
|
+
- grep: Fast regex content search across the codebase. Prefer this over bash for finding patterns in files.
|
|
369
|
+
- lsp: Experimental semantic code intelligence for definitions, references, hover, and symbols.
|
|
370
|
+
- bash: ONLY for searching (find, ls), git inspection — NEVER modify.
|
|
371
|
+
- task: Delegate a focused task to a sub-agent when specialized analysis or deeper investigation would help.
|
|
372
|
+
|
|
373
|
+
BEHAVIOR:
|
|
374
|
+
- Answer the user's question directly and thoroughly
|
|
375
|
+
- Use tools to gather context when needed, preferring lsp for exact symbol questions when available
|
|
376
|
+
- Provide code examples when helpful
|
|
377
|
+
- NEVER create, modify, or delete files
|
|
378
378
|
- Focus on explanation, not execution`,
|
|
379
379
|
};
|
|
380
380
|
export function findCustomSubagent(agent, subagents = loadValidSubAgents()) {
|
|
@@ -390,10 +390,10 @@ export function formatCustomSubagentsPromptSection(subagents) {
|
|
|
390
390
|
});
|
|
391
391
|
return `\n\nCUSTOM SUB-AGENTS:\nUser-defined foreground sub-agents from ~/.muonroi-cli/user-settings.json. When one matches the task, call the task tool with agent set to the exact name.\n\n${lines.join("\n\n")}\n`;
|
|
392
392
|
}
|
|
393
|
-
const NON_ANTHROPIC_TOOL_PREAMBLE = `\n\nIMPORTANT — TOOL CALLING:
|
|
394
|
-
You MUST invoke tools ONLY via the structured function calling API provided to you.
|
|
395
|
-
NEVER output XML tags like <tool_name>, <bash>, <read_file>, or <delegate> as text.
|
|
396
|
-
If you want to call a tool, use the function calling mechanism — do NOT write tool invocations as text in your response.
|
|
393
|
+
const NON_ANTHROPIC_TOOL_PREAMBLE = `\n\nIMPORTANT — TOOL CALLING:
|
|
394
|
+
You MUST invoke tools ONLY via the structured function calling API provided to you.
|
|
395
|
+
NEVER output XML tags like <tool_name>, <bash>, <read_file>, or <delegate> as text.
|
|
396
|
+
If you want to call a tool, use the function calling mechanism — do NOT write tool invocations as text in your response.
|
|
397
397
|
Any XML-like tool invocation in your text output will be ignored by the system.\n`;
|
|
398
398
|
/**
|
|
399
399
|
* Strip the TOOLS: listing section from system prompt.
|
|
@@ -147,6 +147,10 @@ export declare function rewriteSafetyApprovedToolResults<T extends {
|
|
|
147
147
|
role: string;
|
|
148
148
|
content?: any;
|
|
149
149
|
}>(messages: T[]): T[];
|
|
150
|
+
export declare class SimpleMutex {
|
|
151
|
+
private queue;
|
|
152
|
+
run<T>(fn: () => Promise<T> | T): Promise<T>;
|
|
153
|
+
}
|
|
150
154
|
export interface ToolEngineArgs {
|
|
151
155
|
[key: string]: any;
|
|
152
156
|
}
|
|
@@ -193,6 +193,24 @@ export function rewriteSafetyApprovedToolResults(messages) {
|
|
|
193
193
|
return changed ? { ...m, content: newContent } : m;
|
|
194
194
|
});
|
|
195
195
|
}
|
|
196
|
+
export class SimpleMutex {
|
|
197
|
+
queue = Promise.resolve();
|
|
198
|
+
async run(fn) {
|
|
199
|
+
let resolveLock;
|
|
200
|
+
const lockPromise = new Promise((resolve) => {
|
|
201
|
+
resolveLock = resolve;
|
|
202
|
+
});
|
|
203
|
+
const previous = this.queue;
|
|
204
|
+
this.queue = lockPromise;
|
|
205
|
+
await previous;
|
|
206
|
+
try {
|
|
207
|
+
return await fn();
|
|
208
|
+
}
|
|
209
|
+
finally {
|
|
210
|
+
resolveLock();
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
}
|
|
196
214
|
import { stripDsmlMarkup } from "./message-processor.js";
|
|
197
215
|
export async function* executeToolEngine(args) {
|
|
198
216
|
let { deps, stepRouterPhase, phase2Runtime, runtime, modelInfo, _debugSteps, _ceilingHit, userMessage, pilCtx, turnModelId, turnProvider, _stepCeiling, userModelMessage, userEnrichedMessage, signal, observer, taskHash, provider, system, routerStore, attemptedOverflowRecovery, patternLoopForceHalt, userWriteAheadSeq, streamRetryCount, MAX_STREAM_RETRIES, subagents, systemParts, toolTurnSystem, playwrightGuidance, _hasResponseTools, _pilResponseTools, patternLoopInjectCount, agentLoopDecisionCount, MAX_AGENT_LOOP_DECISIONS, _naturalCeiling, _ceilingTaskType, _ceilingSize, textToolReSteerCount, MAX_TEXT_TOOL_RESTEER, turnStartMs, _debugOn, _debugTurnId, _pilEnrichmentDeltaSnapshot, isChitchat, } = args;
|
|
@@ -618,6 +636,37 @@ export async function* executeToolEngine(args) {
|
|
|
618
636
|
});
|
|
619
637
|
// Phase C3: layer cross-turn dedup on top of the top-level cap.
|
|
620
638
|
const tools = wrapToolSetWithReadBudget(wrapToolSetWithDedup(topLevelCap.tools, deps.crossTurnDedup), deps.readBudget);
|
|
639
|
+
// Wrap non-read-only tools in a turn-scoped mutex to prevent race conditions during parallel execution.
|
|
640
|
+
const writeMutex = new SimpleMutex();
|
|
641
|
+
const READ_ONLY_TOOLS = new Set([
|
|
642
|
+
"read_file",
|
|
643
|
+
"grep",
|
|
644
|
+
"bash_output_get",
|
|
645
|
+
"process_list",
|
|
646
|
+
"delegation_read",
|
|
647
|
+
"delegation_list",
|
|
648
|
+
"ee_query",
|
|
649
|
+
"ee_health",
|
|
650
|
+
"usage_forensics",
|
|
651
|
+
"lsp_query",
|
|
652
|
+
"setup_guide",
|
|
653
|
+
"selfverify_status",
|
|
654
|
+
"selfverify_result",
|
|
655
|
+
"selfverify_list",
|
|
656
|
+
"list_vision_cache",
|
|
657
|
+
]);
|
|
658
|
+
for (const name of Object.keys(tools)) {
|
|
659
|
+
const tool = tools[name];
|
|
660
|
+
if (tool &&
|
|
661
|
+
typeof tool.execute === "function" &&
|
|
662
|
+
!READ_ONLY_TOOLS.has(name) &&
|
|
663
|
+
!name.startsWith("respond_")) {
|
|
664
|
+
const originalExecute = tool.execute;
|
|
665
|
+
tool.execute = async (input, context) => {
|
|
666
|
+
return writeMutex.run(() => originalExecute(input, context));
|
|
667
|
+
};
|
|
668
|
+
}
|
|
669
|
+
}
|
|
621
670
|
captureToolSchemas(tools);
|
|
622
671
|
let responseToolCalled = false;
|
|
623
672
|
// A turn must surface exactly ONE final structured answer. Cheap
|
|
@@ -1243,40 +1243,40 @@ export async function layer1Intent(ctx, opts = {}) {
|
|
|
1243
1243
|
// touch existing files.
|
|
1244
1244
|
// 0.7 confidence threshold for Pass 2 keyword override remains
|
|
1245
1245
|
// unchanged (HIGH_CONF_THRESHOLD_PASS2 above).
|
|
1246
|
-
const brainRaw = await classifyViaBrain(`You are a multilingual prompt classifier. The user's prompt may be in English, Vietnamese, or a mix of both.
|
|
1247
|
-
Classify the prompt's INTENT (not its language). Reply with TWO lowercase words separated by a comma: <category>,<style>
|
|
1248
|
-
|
|
1249
|
-
Category — pick ONE (listed in neutral order, no precedence):
|
|
1250
|
-
analyze — explain / inspect / review existing code (giải thích, phân tích, review)
|
|
1251
|
-
debug — fix a bug or investigate failure (sửa lỗi, fix bug, lỗi, traceback)
|
|
1252
|
-
generate — create new code/file or add new behavior (tạo, sinh code, viết function mới, thêm)
|
|
1253
|
-
refactor — restructure existing code (tái cấu trúc, refactor)
|
|
1254
|
-
plan — design / roadmap / architecture (kế hoạch, thiết kế, kiến trúc)
|
|
1255
|
-
documentation — write docs/comments (viết docs, comment, jsdoc)
|
|
1256
|
-
general — chitchat OR unclear / ambiguous coding intent
|
|
1257
|
-
|
|
1258
|
-
Rules (Phase 4 4P-2 disambiguation):
|
|
1259
|
-
- Only return refactor when the user EXPLICITLY uses one of: rename, restructure, reorganize, extract, inline, move, migrate, reshape — applied to EXISTING code WITHOUT adding new behavior.
|
|
1260
|
-
- Feature additions ('add flag', 'thêm', 'create endpoint', 'thêm option'), changing a DEFAULT value, adding tests, or improving coverage are 'generate' — NOT refactor.
|
|
1261
|
-
- 'improve', 'change', 'update', 'modify', 'đổi', 'cải thiện' alone do NOT imply refactor — pick the specific category by what the change actually does.
|
|
1262
|
-
- When the request is ambiguous, prefer 'general' over guessing refactor.
|
|
1263
|
-
|
|
1264
|
-
Negative examples (NOT refactor):
|
|
1265
|
-
- "đổi default --max-tool-rounds 8 sang 12" → generate
|
|
1266
|
-
- "improve test coverage" → generate
|
|
1267
|
-
- "tại sao X trả empty" → analyze
|
|
1268
|
-
- "fix CI failing" → debug
|
|
1269
|
-
|
|
1270
|
-
Style — pick ONE:
|
|
1271
|
-
concise (ngắn gọn) | balanced (cân bằng) | detailed (chi tiết)
|
|
1272
|
-
|
|
1273
|
-
Examples:
|
|
1274
|
-
"Refactor this function" → refactor,balanced
|
|
1275
|
-
"tại sao test fail" → debug,balanced
|
|
1276
|
-
"thiết kế hệ thống auth" → plan,detailed
|
|
1277
|
-
"thêm flag --foo" → generate,concise
|
|
1278
|
-
"hi" → general,concise
|
|
1279
|
-
|
|
1246
|
+
const brainRaw = await classifyViaBrain(`You are a multilingual prompt classifier. The user's prompt may be in English, Vietnamese, or a mix of both.
|
|
1247
|
+
Classify the prompt's INTENT (not its language). Reply with TWO lowercase words separated by a comma: <category>,<style>
|
|
1248
|
+
|
|
1249
|
+
Category — pick ONE (listed in neutral order, no precedence):
|
|
1250
|
+
analyze — explain / inspect / review existing code (giải thích, phân tích, review)
|
|
1251
|
+
debug — fix a bug or investigate failure (sửa lỗi, fix bug, lỗi, traceback)
|
|
1252
|
+
generate — create new code/file or add new behavior (tạo, sinh code, viết function mới, thêm)
|
|
1253
|
+
refactor — restructure existing code (tái cấu trúc, refactor)
|
|
1254
|
+
plan — design / roadmap / architecture (kế hoạch, thiết kế, kiến trúc)
|
|
1255
|
+
documentation — write docs/comments (viết docs, comment, jsdoc)
|
|
1256
|
+
general — chitchat OR unclear / ambiguous coding intent
|
|
1257
|
+
|
|
1258
|
+
Rules (Phase 4 4P-2 disambiguation):
|
|
1259
|
+
- Only return refactor when the user EXPLICITLY uses one of: rename, restructure, reorganize, extract, inline, move, migrate, reshape — applied to EXISTING code WITHOUT adding new behavior.
|
|
1260
|
+
- Feature additions ('add flag', 'thêm', 'create endpoint', 'thêm option'), changing a DEFAULT value, adding tests, or improving coverage are 'generate' — NOT refactor.
|
|
1261
|
+
- 'improve', 'change', 'update', 'modify', 'đổi', 'cải thiện' alone do NOT imply refactor — pick the specific category by what the change actually does.
|
|
1262
|
+
- When the request is ambiguous, prefer 'general' over guessing refactor.
|
|
1263
|
+
|
|
1264
|
+
Negative examples (NOT refactor):
|
|
1265
|
+
- "đổi default --max-tool-rounds 8 sang 12" → generate
|
|
1266
|
+
- "improve test coverage" → generate
|
|
1267
|
+
- "tại sao X trả empty" → analyze
|
|
1268
|
+
- "fix CI failing" → debug
|
|
1269
|
+
|
|
1270
|
+
Style — pick ONE:
|
|
1271
|
+
concise (ngắn gọn) | balanced (cân bằng) | detailed (chi tiết)
|
|
1272
|
+
|
|
1273
|
+
Examples:
|
|
1274
|
+
"Refactor this function" → refactor,balanced
|
|
1275
|
+
"tại sao test fail" → debug,balanced
|
|
1276
|
+
"thiết kế hệ thống auth" → plan,detailed
|
|
1277
|
+
"thêm flag --foo" → generate,concise
|
|
1278
|
+
"hi" → general,concise
|
|
1279
|
+
|
|
1280
1280
|
Prompt: "${ctx.raw.slice(0, 500)}"`, 1500);
|
|
1281
1281
|
if (brainRaw) {
|
|
1282
1282
|
pass3LegacyTaskSucceeded = true;
|
|
@@ -1327,9 +1327,9 @@ Prompt: "${ctx.raw.slice(0, 500)}"`, 1500);
|
|
|
1327
1327
|
if (pass3LegacyTaskAttempted) {
|
|
1328
1328
|
legacyBrainAttempted = true;
|
|
1329
1329
|
pass3LegacyStyleAttempted = true;
|
|
1330
|
-
const brainRawStyle = await classifyViaBrain(`Detect the user's preferred output style. The prompt may be EN or VN.
|
|
1331
|
-
Reply with ONE word: concise (ngắn gọn) | balanced (bình thường) | detailed (chi tiết).
|
|
1332
|
-
|
|
1330
|
+
const brainRawStyle = await classifyViaBrain(`Detect the user's preferred output style. The prompt may be EN or VN.
|
|
1331
|
+
Reply with ONE word: concise (ngắn gọn) | balanced (bình thường) | detailed (chi tiết).
|
|
1332
|
+
|
|
1333
1333
|
Prompt: "${ctx.raw.slice(0, 300)}"`, 800);
|
|
1334
1334
|
if (brainRawStyle) {
|
|
1335
1335
|
pass3LegacyStyleSucceeded = true;
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { truncateToBudget } from "./budget.js";
|
|
2
2
|
import { isPonytailModeEnabled } from "./config.js";
|
|
3
|
-
const PONYTAIL_INSTRUCTION = `[LAZY SENIOR / PONYTAIL MODE ACTIVE]
|
|
4
|
-
"The best code is the code you never wrote." You MUST adhere to the following Decision Ladder:
|
|
5
|
-
1. Standard Library first.
|
|
6
|
-
2. Native platform features next.
|
|
7
|
-
3. 1-line solution next.
|
|
8
|
-
4. YAGNI: Do not write it if not strictly necessary.
|
|
9
|
-
5. Smallest correct change.
|
|
10
|
-
|
|
3
|
+
const PONYTAIL_INSTRUCTION = `[LAZY SENIOR / PONYTAIL MODE ACTIVE]
|
|
4
|
+
"The best code is the code you never wrote." You MUST adhere to the following Decision Ladder:
|
|
5
|
+
1. Standard Library first.
|
|
6
|
+
2. Native platform features next.
|
|
7
|
+
3. 1-line solution next.
|
|
8
|
+
4. YAGNI: Do not write it if not strictly necessary.
|
|
9
|
+
5. Smallest correct change.
|
|
10
|
+
|
|
11
11
|
DOCUMENTATION RULE: If you bypass a complex/scalable pattern in favor of a simple one to adhere to this rule, you MUST add a comment in the code starting exactly with "// Intentional simplification: [Reason]".`;
|
|
12
12
|
export async function layer2_5Ponytail(ctx) {
|
|
13
13
|
// If task is not coding/action-related (e.g., chitchat), we might not need it, but pipeline.ts already skips layers if taskType is null.
|
|
@@ -142,9 +142,9 @@ async function runCustomerDebate(ctx) {
|
|
|
142
142
|
const criteriaText = ctx.criteria
|
|
143
143
|
.map((c) => `- ${c.id}: ${c.status}${c.evidence ? ` (Evidence: ${c.evidence})` : ""}`)
|
|
144
144
|
.join("\n");
|
|
145
|
-
let conversation = `System: You are in a "Definition of Done" debate.
|
|
146
|
-
PO's goal: Prove the product is ready to ship.
|
|
147
|
-
Customer's goal: Ensure all requirements are met and it's high quality.
|
|
145
|
+
let conversation = `System: You are in a "Definition of Done" debate.
|
|
146
|
+
PO's goal: Prove the product is ready to ship.
|
|
147
|
+
Customer's goal: Ensure all requirements are met and it's high quality.
|
|
148
148
|
Criteria:\n${criteriaText}\n`;
|
|
149
149
|
for (let r = 1; r <= rounds; r++) {
|
|
150
150
|
const poPrompt = `${conversation}\nRound ${r}: PO, explain why this is ready to ship.`;
|
|
@@ -684,24 +684,24 @@ export async function* runLoopDriver(ctx) {
|
|
|
684
684
|
},
|
|
685
685
|
};
|
|
686
686
|
// Synthesize ProductSpec
|
|
687
|
-
const synthesisPrompt = `Synthesize a ProductSpec JSON based on the following:
|
|
688
|
-
Idea: ${ctx.idea}
|
|
689
|
-
Clarified Spec: ${JSON.stringify(clarifiedSpec)}
|
|
690
|
-
Debate Summary: ${debateState.runningSummary}
|
|
691
|
-
Research Findings: ${debateState.researchFindings ?? "N/A"}
|
|
692
|
-
|
|
693
|
-
Output ONLY a JSON object matching this interface:
|
|
694
|
-
interface ProductSpec {
|
|
695
|
-
idea: string;
|
|
696
|
-
persona: string;
|
|
697
|
-
mvp: string[];
|
|
698
|
-
phase2: string[];
|
|
699
|
-
architecture: string;
|
|
700
|
-
ioContract: string;
|
|
701
|
-
folderStructure: string;
|
|
702
|
-
sprintEstimate: number;
|
|
703
|
-
costEstimate: number;
|
|
704
|
-
}
|
|
687
|
+
const synthesisPrompt = `Synthesize a ProductSpec JSON based on the following:
|
|
688
|
+
Idea: ${ctx.idea}
|
|
689
|
+
Clarified Spec: ${JSON.stringify(clarifiedSpec)}
|
|
690
|
+
Debate Summary: ${debateState.runningSummary}
|
|
691
|
+
Research Findings: ${debateState.researchFindings ?? "N/A"}
|
|
692
|
+
|
|
693
|
+
Output ONLY a JSON object matching this interface:
|
|
694
|
+
interface ProductSpec {
|
|
695
|
+
idea: string;
|
|
696
|
+
persona: string;
|
|
697
|
+
mvp: string[];
|
|
698
|
+
phase2: string[];
|
|
699
|
+
architecture: string;
|
|
700
|
+
ioContract: string;
|
|
701
|
+
folderStructure: string;
|
|
702
|
+
sprintEstimate: number;
|
|
703
|
+
costEstimate: number;
|
|
704
|
+
}
|
|
705
705
|
`;
|
|
706
706
|
// The scoping phase's only LLM call. Wrapped so a provider hang/
|
|
707
707
|
// timeout leaves a council_error audit row instead of swallowing the
|
|
@@ -20,10 +20,10 @@ function readLatestSprintStage(runId) {
|
|
|
20
20
|
try {
|
|
21
21
|
const db = getDatabase();
|
|
22
22
|
const row = db
|
|
23
|
-
.prepare(`SELECT metadata_json, created_at
|
|
24
|
-
FROM interaction_logs
|
|
25
|
-
WHERE session_id = ? AND event_type = 'ui_interaction' AND event_subtype = 'sprint_stage'
|
|
26
|
-
ORDER BY id DESC
|
|
23
|
+
.prepare(`SELECT metadata_json, created_at
|
|
24
|
+
FROM interaction_logs
|
|
25
|
+
WHERE session_id = ? AND event_type = 'ui_interaction' AND event_subtype = 'sprint_stage'
|
|
26
|
+
ORDER BY id DESC
|
|
27
27
|
LIMIT 1`)
|
|
28
28
|
.get(runId);
|
|
29
29
|
if (!row)
|