agentix-cli 0.21.0 → 0.23.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 (73) hide show
  1. package/dist/{agent-I3ILI3MO.js → agent-FSE4KRLX.js} +2 -2
  2. package/dist/{board-dashboard-ASI6MDKX.js → board-dashboard-PUACKWAN.js} +4 -4
  3. package/dist/builtin-TQKMR42Z.js +2 -0
  4. package/dist/chunk-3SHMHYPD.js +450 -0
  5. package/dist/chunk-3SHMHYPD.js.map +1 -0
  6. package/dist/{chunk-FUYZUGNQ.js → chunk-4INOOHND.js} +2 -2
  7. package/dist/chunk-72PAN7UI.js +103 -0
  8. package/dist/chunk-72PAN7UI.js.map +1 -0
  9. package/dist/chunk-BHSPAP4U.js +44 -0
  10. package/dist/chunk-BHSPAP4U.js.map +1 -0
  11. package/dist/chunk-BOUKM2PS.js +163 -0
  12. package/dist/chunk-BOUKM2PS.js.map +1 -0
  13. package/dist/{chunk-AANSVC5A.js → chunk-DXTIG5YV.js} +2 -2
  14. package/dist/chunk-EK37JHJI.js +13 -0
  15. package/dist/chunk-EK37JHJI.js.map +1 -0
  16. package/dist/chunk-EQPUB7CZ.js +685 -0
  17. package/dist/chunk-EQPUB7CZ.js.map +1 -0
  18. package/dist/{chunk-4MREHZP5.js → chunk-GOLZ6NEL.js} +2 -2
  19. package/dist/chunk-GOLZ6NEL.js.map +1 -0
  20. package/dist/{chunk-2B2DIQKD.js → chunk-KWUWZQGV.js} +2 -2
  21. package/dist/{chunk-K6MC66D6.js → chunk-PD5Q7D6Z.js} +2 -2
  22. package/dist/{chunk-AGINLNAW.js → chunk-Q6CAFGXT.js} +2 -2
  23. package/dist/chunk-ZZFXI3CS.js +8 -0
  24. package/dist/chunk-ZZFXI3CS.js.map +1 -0
  25. package/dist/cli.js +1 -1
  26. package/dist/cli.js.map +1 -1
  27. package/dist/{config-RWHSEE4N.js → config-ADS54KLC.js} +2 -2
  28. package/dist/config-mutator-WTRMBZTO.js +2 -0
  29. package/dist/doctor-T6RB4Q5X.js +2 -0
  30. package/dist/index.d.ts +191 -3
  31. package/dist/index.js +1 -1
  32. package/dist/index.js.map +1 -1
  33. package/dist/program-V7NGFB2R.js +2 -0
  34. package/dist/registry-42HEWCLA.js +2 -0
  35. package/dist/scheduler-C56ABAVP.js +2 -0
  36. package/dist/web/workflow-editor.global.js +11 -11
  37. package/dist/web/workflow-editor.global.js.map +1 -1
  38. package/dist/workspace-setup-DQCZX2NE.js +2 -0
  39. package/dist/workspace-setup-DQCZX2NE.js.map +1 -0
  40. package/package.json +2 -1
  41. package/dist/chunk-4MREHZP5.js.map +0 -1
  42. package/dist/chunk-5GDCJ2SF.js +0 -13
  43. package/dist/chunk-5GDCJ2SF.js.map +0 -1
  44. package/dist/chunk-5XZ73VM4.js +0 -102
  45. package/dist/chunk-5XZ73VM4.js.map +0 -1
  46. package/dist/chunk-BLRLUF2H.js +0 -743
  47. package/dist/chunk-BLRLUF2H.js.map +0 -1
  48. package/dist/chunk-EQNM3TOF.js +0 -15
  49. package/dist/chunk-EQNM3TOF.js.map +0 -1
  50. package/dist/chunk-IFQQVDM6.js +0 -442
  51. package/dist/chunk-IFQQVDM6.js.map +0 -1
  52. package/dist/chunk-ZE2YFX4K.js +0 -45
  53. package/dist/chunk-ZE2YFX4K.js.map +0 -1
  54. package/dist/config-mutator-JKCNCY2F.js +0 -2
  55. package/dist/doctor-KWN7NUFQ.js +0 -2
  56. package/dist/program-JEKM7SCS.js +0 -2
  57. package/dist/registry-EGKDMVSP.js +0 -2
  58. package/dist/scheduler-ED4FCI2Y.js +0 -2
  59. package/dist/workspace-setup-FPGN5VNY.js +0 -2
  60. /package/dist/{agent-I3ILI3MO.js.map → agent-FSE4KRLX.js.map} +0 -0
  61. /package/dist/{board-dashboard-ASI6MDKX.js.map → board-dashboard-PUACKWAN.js.map} +0 -0
  62. /package/dist/{config-RWHSEE4N.js.map → builtin-TQKMR42Z.js.map} +0 -0
  63. /package/dist/{chunk-FUYZUGNQ.js.map → chunk-4INOOHND.js.map} +0 -0
  64. /package/dist/{chunk-AANSVC5A.js.map → chunk-DXTIG5YV.js.map} +0 -0
  65. /package/dist/{chunk-2B2DIQKD.js.map → chunk-KWUWZQGV.js.map} +0 -0
  66. /package/dist/{chunk-K6MC66D6.js.map → chunk-PD5Q7D6Z.js.map} +0 -0
  67. /package/dist/{chunk-AGINLNAW.js.map → chunk-Q6CAFGXT.js.map} +0 -0
  68. /package/dist/{config-mutator-JKCNCY2F.js.map → config-ADS54KLC.js.map} +0 -0
  69. /package/dist/{doctor-KWN7NUFQ.js.map → config-mutator-WTRMBZTO.js.map} +0 -0
  70. /package/dist/{program-JEKM7SCS.js.map → doctor-T6RB4Q5X.js.map} +0 -0
  71. /package/dist/{registry-EGKDMVSP.js.map → program-V7NGFB2R.js.map} +0 -0
  72. /package/dist/{scheduler-ED4FCI2Y.js.map → registry-42HEWCLA.js.map} +0 -0
  73. /package/dist/{workspace-setup-FPGN5VNY.js.map → scheduler-C56ABAVP.js.map} +0 -0
@@ -1,45 +0,0 @@
1
- import{c as m}from"./chunk-WJXU5F4Z.js";import{existsSync as u,mkdirSync as y,writeFileSync as h,readFileSync as k}from"fs";import{resolve as p}from"path";function d(o,s){let n=`${o} ${s.systemPrompt||""} ${s.name}`.toLowerCase();return/cod(e|ing|er)|develop|engineer|program/.test(n)?"coding":/pm|project.?manag|product|scrum/.test(n)?"pm":/devops|deploy|infra|ops|sre|ci.?cd/.test(n)?"devops":/qa|test|quality|forensic/.test(n)?"qa":"general"}function b(o,s,n){let t=d(o,s),e=[];if(e.push(`# ${s.name}`),e.push(""),e.push("@AGENTS.md"),e.push(""),s.systemPrompt){let i=s.systemPrompt.split(`
2
- `).slice(0,3).join(`
3
- `);e.push("## Role"),e.push(i),e.push("")}switch(e.push("## Commands"),e.push(""),u(p(s.workspace,"package.json"))?(e.push("```bash"),e.push("npm install # install dependencies"),e.push("npm test # run tests"),e.push("npm run build # build project"),e.push("```")):u(p(s.workspace,"requirements.txt"))&&(e.push("```bash"),e.push("pip install -r requirements.txt"),e.push("pytest"),e.push("```")),e.push(""),e.push("## Conventions"),e.push(""),t){case"coding":e.push("- Write tests for new code before committing"),e.push("- Keep functions small and focused"),e.push("- Follow existing patterns in the codebase"),e.push("- Run tests before pushing");break;case"pm":e.push("- Keep responses concise (3-5 lines main message)"),e.push("- Reference issues with #IID and MRs with !IID"),e.push("- Update issue labels and milestones when relevant"),e.push("- Summarize decisions, don't narrate process");break;case"devops":e.push("- Always check service status before making changes"),e.push("- Never run destructive commands without confirmation"),e.push("- Log all deployment actions"),e.push("- Verify changes in staging before production");break;case"qa":e.push("- Document reproduction steps for every bug"),e.push("- Include expected vs actual behavior"),e.push("- Check both happy path and edge cases"),e.push("- Attach screenshots when reporting UI issues");break;default:e.push("- Be concise \u2014 lead with the answer, skip preamble"),e.push("- Follow existing patterns in the codebase")}return e.push(""),e.push("## Cross-Channel Messaging"),e.push(""),e.push("You can send messages to any channel proactively:"),e.push("```bash"),e.push(`curl -X POST http://localhost:${n}/send \\`),e.push(' -H "Content-Type: application/json" \\'),e.push(` -d '{"channel":"telegram","chatId":"<id>","text":"<message>","agentId":"${o}"}'`),e.push("```"),e.push("Channels: telegram, whatsapp, gitlab, discord"),e.push(""),e.join(`
4
- `)}function w(o,s){let n={autoMemoryEnabled:!0,env:{CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS:"1"}};s.permissionMode==="bypassPermissions"||(s.permissionMode==="plan"?n.permissions={deny:["Bash(rm -rf *)","Bash(drop *)","Bash(DELETE *)"]}:n.permissions={deny:["Bash(rm -rf /)","Bash(> /dev/sda*)","Bash(mkfs*)"]});let t={};return t.Notification=[{matcher:"",hooks:[{type:"command",command:`echo "[${o}] notification: $(jq -r '.type // "unknown"')" >> /tmp/agentx-${o}.log`}]}],t.PostToolUse=[{matcher:"Bash",hooks:[{type:"command",command:`jq -r '.tool_input.command // empty' >> /tmp/agentx-${o}-commands.log`}]}],t.SessionStart=[{matcher:"compact",hooks:[{type:"command",command:`echo "Reminder: You are ${s.name} (${o}). Follow the conventions in CLAUDE.md."`}]}],n.hooks=t,n}function v(o,s){let n=d(o,s),t=[];switch(n){case"coding":t.push({name:"testing.md",content:`---
5
- paths:
6
- - "**/*.test.{ts,tsx,js,jsx}"
7
- - "**/*.spec.{ts,tsx,js,jsx}"
8
- - "test/**/*"
9
- ---
10
-
11
- # Testing Rules
12
-
13
- - Every new function should have a corresponding test
14
- - Test both happy path and error cases
15
- - Use descriptive test names that explain what's being tested
16
- - Mock external dependencies, not internal modules
17
- `}),t.push({name:"code-quality.md",content:`# Code Quality
18
-
19
- - No console.log in production code (use a logger)
20
- - Handle errors explicitly \u2014 no empty catch blocks
21
- - Keep files under 300 lines
22
- - Extract repeated logic into shared utilities
23
- `});break;case"devops":t.push({name:"deployment-safety.md",content:`# Deployment Safety
24
-
25
- - Always verify staging before production
26
- - Check disk space and memory before deploying
27
- - Never expose secrets in logs or commits
28
- - Use rollback-safe deployment strategies
29
- `});break;case"pm":t.push({name:"communication.md",content:`# Communication Rules
30
-
31
- - Keep GitLab comments under 5 lines for the main message
32
- - Use <details> for verbose output (logs, commands, steps)
33
- - Reference issues with #IID, merge requests with !IID
34
- - Never mention Telegram handles on GitLab
35
- `});break;case"qa":t.push({name:"bug-reports.md",content:`# Bug Report Format
36
-
37
- Always include:
38
- 1. Steps to reproduce
39
- 2. Expected behavior
40
- 3. Actual behavior
41
- 4. Environment (browser, OS, version)
42
- 5. Screenshots if applicable
43
- `});break}return t}function A(o,s,n="19900",t=console.error){let e=[],i=[],r=s.workspace;if(!u(r))return t(`Workspace not found: ${r}`),{created:e,skipped:i};if(s.tier!=="claude-code")return{created:e,skipped:i};let a=(c,f)=>{u(c)?i.push(c):(y(p(c,".."),{recursive:!0}),h(c,f),e.push(c))};a(p(r,"AGENTS.md"),m({name:s.name,id:o,role:s.systemPrompt?.split(`
44
- `)[0],workspace:r,tier:s.tier})),a(p(r,"CLAUDE.md"),b(o,s,n));let l=p(r,".claude/settings.json");a(l,JSON.stringify(w(o,s),null,2));let g=v(o,s);for(let c of g)a(p(r,".claude/rules",c.name),c.content);return e.length>0&&t(`[${o}] workspace setup: created ${e.length} file(s)`),{created:e,skipped:i}}function E(o,s){let n=p(o,".claude/settings.json");if(!u(n))return!1;try{let t=JSON.parse(k(n,"utf-8")),e=!1;for(let[i,r]of Object.entries(s))if(typeof r=="object"&&r!==null&&!Array.isArray(r)){t[i]||(t[i]={});for(let[a,l]of Object.entries(r))t[i][a]===void 0&&(t[i][a]=l,e=!0)}else t[i]===void 0&&(t[i]=r,e=!0);return e&&h(n,JSON.stringify(t,null,2)),e}catch{return!1}}function C(o,s="19900",n=console.error){let t=0,e=0;for(let[i,r]of Object.entries(o)){if(r.tier!=="claude-code")continue;let a=A(i,r,s,n);t+=a.created.length,E(r.workspace,{env:{CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS:"1"}})&&e++}t>0&&n(`Workspace setup: ${t} file(s) created across agent workspaces`),e>0&&n(`Workspace patch: ${e} workspace(s) updated with agent teams support`)}export{A as a,C as b};
45
- //# sourceMappingURL=chunk-ZE2YFX4K.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/agents/workspace-setup.ts"],"sourcesContent":["import { existsSync, mkdirSync, writeFileSync, readFileSync } from \"fs\"\nimport { resolve } from \"path\"\nimport type { AgentDef } from \"@/daemon/config\"\nimport { generateAgentsMd } from \"./bootstrap\"\n\n// --- Workspace Setup: align agent workspaces with Claude Code best practices ---\n//\n// Generates on daemon start (if missing):\n// CLAUDE.md — project conventions, under 200 lines, @AGENTS.md import\n// AGENTS.md — agents.md spec for cross-tool compatibility\n// .claude/settings.json — hooks, permissions, auto memory\n// .claude/rules/ — path-specific rules based on agent role\n\n/** Detect agent role from systemPrompt or agent ID */\nfunction detectRole(agentId: string, def: AgentDef): \"coding\" | \"pm\" | \"devops\" | \"qa\" | \"general\" {\n const text = `${agentId} ${def.systemPrompt || \"\"} ${def.name}`.toLowerCase()\n if (/cod(e|ing|er)|develop|engineer|program/.test(text)) return \"coding\"\n if (/pm|project.?manag|product|scrum/.test(text)) return \"pm\"\n if (/devops|deploy|infra|ops|sre|ci.?cd/.test(text)) return \"devops\"\n if (/qa|test|quality|forensic/.test(text)) return \"qa\"\n return \"general\"\n}\n\n/** Generate CLAUDE.md for an agent workspace */\nfunction generateClaudeMd(agentId: string, def: AgentDef, daemonPort: string): string {\n const role = detectRole(agentId, def)\n const lines: string[] = []\n\n lines.push(`# ${def.name}`)\n lines.push(\"\")\n lines.push(\"@AGENTS.md\")\n lines.push(\"\")\n\n // Agent identity from systemPrompt (first 3 lines)\n if (def.systemPrompt) {\n const promptLines = def.systemPrompt.split(\"\\n\").slice(0, 3).join(\"\\n\")\n lines.push(\"## Role\")\n lines.push(promptLines)\n lines.push(\"\")\n }\n\n // Build/test commands\n lines.push(\"## Commands\")\n lines.push(\"\")\n if (existsSync(resolve(def.workspace, \"package.json\"))) {\n lines.push(\"```bash\")\n lines.push(\"npm install # install dependencies\")\n lines.push(\"npm test # run tests\")\n lines.push(\"npm run build # build project\")\n lines.push(\"```\")\n } else if (existsSync(resolve(def.workspace, \"requirements.txt\"))) {\n lines.push(\"```bash\")\n lines.push(\"pip install -r requirements.txt\")\n lines.push(\"pytest\")\n lines.push(\"```\")\n }\n lines.push(\"\")\n\n // Role-specific conventions\n lines.push(\"## Conventions\")\n lines.push(\"\")\n switch (role) {\n case \"coding\":\n lines.push(\"- Write tests for new code before committing\")\n lines.push(\"- Keep functions small and focused\")\n lines.push(\"- Follow existing patterns in the codebase\")\n lines.push(\"- Run tests before pushing\")\n break\n case \"pm\":\n lines.push(\"- Keep responses concise (3-5 lines main message)\")\n lines.push(\"- Reference issues with #IID and MRs with !IID\")\n lines.push(\"- Update issue labels and milestones when relevant\")\n lines.push(\"- Summarize decisions, don't narrate process\")\n break\n case \"devops\":\n lines.push(\"- Always check service status before making changes\")\n lines.push(\"- Never run destructive commands without confirmation\")\n lines.push(\"- Log all deployment actions\")\n lines.push(\"- Verify changes in staging before production\")\n break\n case \"qa\":\n lines.push(\"- Document reproduction steps for every bug\")\n lines.push(\"- Include expected vs actual behavior\")\n lines.push(\"- Check both happy path and edge cases\")\n lines.push(\"- Attach screenshots when reporting UI issues\")\n break\n default:\n lines.push(\"- Be concise — lead with the answer, skip preamble\")\n lines.push(\"- Follow existing patterns in the codebase\")\n }\n lines.push(\"\")\n\n // Cross-channel messaging capability\n lines.push(\"## Cross-Channel Messaging\")\n lines.push(\"\")\n lines.push(\"You can send messages to any channel proactively:\")\n lines.push(\"```bash\")\n lines.push(`curl -X POST http://localhost:${daemonPort}/send \\\\`)\n lines.push(` -H \"Content-Type: application/json\" \\\\`)\n lines.push(` -d '{\"channel\":\"telegram\",\"chatId\":\"<id>\",\"text\":\"<message>\",\"agentId\":\"${agentId}\"}'`)\n lines.push(\"```\")\n lines.push('Channels: telegram, whatsapp, gitlab, discord')\n lines.push(\"\")\n\n return lines.join(\"\\n\")\n}\n\n/** Generate .claude/settings.json with hooks and permissions */\nfunction generateSettings(agentId: string, def: AgentDef): Record<string, unknown> {\n const settings: Record<string, unknown> = {\n autoMemoryEnabled: true,\n env: {\n CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS: \"1\",\n },\n }\n\n // Permission mode\n if (def.permissionMode === \"bypassPermissions\") {\n // No deny rules — full access\n } else if (def.permissionMode === \"plan\") {\n settings[\"permissions\"] = {\n deny: [\"Bash(rm -rf *)\", \"Bash(drop *)\", \"Bash(DELETE *)\"],\n }\n } else {\n // Default: deny destructive operations\n settings[\"permissions\"] = {\n deny: [\n \"Bash(rm -rf /)\",\n \"Bash(> /dev/sda*)\",\n \"Bash(mkfs*)\",\n ],\n }\n }\n\n // Hooks\n const hooks: Record<string, unknown[]> = {}\n\n // Notification hook — log when agent needs input\n hooks[\"Notification\"] = [{\n matcher: \"\",\n hooks: [{\n type: \"command\",\n command: `echo \"[${agentId}] notification: $(jq -r '.type // \\\"unknown\\\"')\" >> /tmp/agentx-${agentId}.log`,\n }],\n }]\n\n // PostToolUse — log tool activity\n hooks[\"PostToolUse\"] = [{\n matcher: \"Bash\",\n hooks: [{\n type: \"command\",\n command: `jq -r '.tool_input.command // empty' >> /tmp/agentx-${agentId}-commands.log`,\n }],\n }]\n\n // SessionStart after compaction — re-inject key context\n hooks[\"SessionStart\"] = [{\n matcher: \"compact\",\n hooks: [{\n type: \"command\",\n command: `echo \"Reminder: You are ${def.name} (${agentId}). Follow the conventions in CLAUDE.md.\"`,\n }],\n }]\n\n settings[\"hooks\"] = hooks\n return settings\n}\n\n/** Generate .claude/rules/ files based on agent role */\nfunction generateRules(agentId: string, def: AgentDef): Array<{ name: string; content: string }> {\n const role = detectRole(agentId, def)\n const rules: Array<{ name: string; content: string }> = []\n\n switch (role) {\n case \"coding\":\n rules.push({\n name: \"testing.md\",\n content: `---\npaths:\n - \"**/*.test.{ts,tsx,js,jsx}\"\n - \"**/*.spec.{ts,tsx,js,jsx}\"\n - \"test/**/*\"\n---\n\n# Testing Rules\n\n- Every new function should have a corresponding test\n- Test both happy path and error cases\n- Use descriptive test names that explain what's being tested\n- Mock external dependencies, not internal modules\n`,\n })\n rules.push({\n name: \"code-quality.md\",\n content: `# Code Quality\n\n- No console.log in production code (use a logger)\n- Handle errors explicitly — no empty catch blocks\n- Keep files under 300 lines\n- Extract repeated logic into shared utilities\n`,\n })\n break\n\n case \"devops\":\n rules.push({\n name: \"deployment-safety.md\",\n content: `# Deployment Safety\n\n- Always verify staging before production\n- Check disk space and memory before deploying\n- Never expose secrets in logs or commits\n- Use rollback-safe deployment strategies\n`,\n })\n break\n\n case \"pm\":\n rules.push({\n name: \"communication.md\",\n content: `# Communication Rules\n\n- Keep GitLab comments under 5 lines for the main message\n- Use <details> for verbose output (logs, commands, steps)\n- Reference issues with #IID, merge requests with !IID\n- Never mention Telegram handles on GitLab\n`,\n })\n break\n\n case \"qa\":\n rules.push({\n name: \"bug-reports.md\",\n content: `# Bug Report Format\n\nAlways include:\n1. Steps to reproduce\n2. Expected behavior\n3. Actual behavior\n4. Environment (browser, OS, version)\n5. Screenshots if applicable\n`,\n })\n break\n }\n\n return rules\n}\n\n/**\n * Set up an agent workspace with Claude Code best practices.\n * Only creates files that don't already exist (non-destructive).\n */\nexport function setupWorkspace(\n agentId: string,\n def: AgentDef,\n daemonPort: string = \"19900\",\n log: (...args: unknown[]) => void = console.error,\n): { created: string[]; skipped: string[] } {\n const created: string[] = []\n const skipped: string[] = []\n const workspace = def.workspace\n\n if (!existsSync(workspace)) {\n log(`Workspace not found: ${workspace}`)\n return { created, skipped }\n }\n\n // Only set up claude-code tier agents\n if (def.tier !== \"claude-code\") {\n return { created, skipped }\n }\n\n const writeIfMissing = (path: string, content: string) => {\n if (existsSync(path)) {\n skipped.push(path)\n } else {\n mkdirSync(resolve(path, \"..\"), { recursive: true })\n writeFileSync(path, content)\n created.push(path)\n }\n }\n\n // AGENTS.md (agents.md spec)\n writeIfMissing(\n resolve(workspace, \"AGENTS.md\"),\n generateAgentsMd({ name: def.name, id: agentId, role: def.systemPrompt?.split(\"\\n\")[0], workspace, tier: def.tier }),\n )\n\n // CLAUDE.md\n writeIfMissing(\n resolve(workspace, \"CLAUDE.md\"),\n generateClaudeMd(agentId, def, daemonPort),\n )\n\n // .claude/settings.json\n const settingsPath = resolve(workspace, \".claude/settings.json\")\n writeIfMissing(settingsPath, JSON.stringify(generateSettings(agentId, def), null, 2))\n\n // .claude/rules/\n const rules = generateRules(agentId, def)\n for (const rule of rules) {\n writeIfMissing(resolve(workspace, \".claude/rules\", rule.name), rule.content)\n }\n\n if (created.length > 0) {\n log(`[${agentId}] workspace setup: created ${created.length} file(s)`)\n }\n\n return { created, skipped }\n}\n\n/**\n * Patch existing .claude/settings.json to add missing keys (non-destructive).\n * Used to enable new features (like agent teams) on workspaces that already have settings.\n */\nfunction patchSettings(workspace: string, patches: Record<string, unknown>): boolean {\n const settingsPath = resolve(workspace, \".claude/settings.json\")\n if (!existsSync(settingsPath)) return false\n\n try {\n const existing = JSON.parse(readFileSync(settingsPath, \"utf-8\"))\n let changed = false\n\n for (const [key, value] of Object.entries(patches)) {\n if (typeof value === \"object\" && value !== null && !Array.isArray(value)) {\n // Merge objects (e.g. env: { KEY: \"value\" })\n if (!existing[key]) existing[key] = {}\n for (const [subKey, subValue] of Object.entries(value as Record<string, unknown>)) {\n if (existing[key][subKey] === undefined) {\n existing[key][subKey] = subValue\n changed = true\n }\n }\n } else if (existing[key] === undefined) {\n existing[key] = value\n changed = true\n }\n }\n\n if (changed) {\n writeFileSync(settingsPath, JSON.stringify(existing, null, 2))\n }\n return changed\n } catch {\n return false\n }\n}\n\n/**\n * Set up all agent workspaces on daemon start.\n */\nexport function setupAllWorkspaces(\n agents: Record<string, AgentDef>,\n daemonPort: string = \"19900\",\n log: (...args: unknown[]) => void = console.error,\n): void {\n let totalCreated = 0\n let totalPatched = 0\n for (const [id, def] of Object.entries(agents)) {\n if (def.tier !== \"claude-code\") continue\n const result = setupWorkspace(id, def, daemonPort, log)\n totalCreated += result.created.length\n\n // Patch existing settings with new features (agent teams, etc.)\n if (patchSettings(def.workspace, {\n env: { CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS: \"1\" },\n })) {\n totalPatched++\n }\n }\n if (totalCreated > 0) {\n log(`Workspace setup: ${totalCreated} file(s) created across agent workspaces`)\n }\n if (totalPatched > 0) {\n log(`Workspace patch: ${totalPatched} workspace(s) updated with agent teams support`)\n }\n}\n"],"mappings":"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","names":["existsSync","mkdirSync","writeFileSync","readFileSync","resolve","detectRole","agentId","def","text","generateClaudeMd","daemonPort","role","lines","promptLines","existsSync","resolve","generateSettings","settings","hooks","generateRules","rules","setupWorkspace","log","created","skipped","workspace","writeIfMissing","path","content","mkdirSync","writeFileSync","generateAgentsMd","settingsPath","rule","patchSettings","patches","existing","readFileSync","changed","key","value","subKey","subValue","setupAllWorkspaces","agents","totalCreated","totalPatched","id","result"]}
@@ -1,2 +0,0 @@
1
- import{a,b,c,d}from"./chunk-AANSVC5A.js";import"./chunk-5GDCJ2SF.js";import"./chunk-4YCH6IZV.js";export{a as applyConfigMutation,c as getAtPath,b as setAtPath,d as unsetAtPath};
2
- //# sourceMappingURL=config-mutator-JKCNCY2F.js.map
@@ -1,2 +0,0 @@
1
- import{a,b}from"./chunk-FUYZUGNQ.js";import"./chunk-5GDCJ2SF.js";import"./chunk-4YCH6IZV.js";export{b as doctor,a as runDoctorChecks};
2
- //# sourceMappingURL=doctor-KWN7NUFQ.js.map
@@ -1,2 +0,0 @@
1
- import{a}from"./chunk-IFQQVDM6.js";import"./chunk-2B2DIQKD.js";import"./chunk-CNNLREHD.js";import"./chunk-FUYZUGNQ.js";import"./chunk-SZDACK6O.js";import"./chunk-GV7S5BAX.js";import"./chunk-GSX4NK2N.js";import"./chunk-BLRLUF2H.js";import"./chunk-EQNM3TOF.js";import"./chunk-N67JZAXU.js";import"./chunk-AFRHKA7B.js";import"./chunk-EW27SCCC.js";import"./chunk-ZE2YFX4K.js";import"./chunk-AGINLNAW.js";import"./chunk-SFQUP3BP.js";import"./chunk-K6MC66D6.js";import"./chunk-AANSVC5A.js";import"./chunk-5GDCJ2SF.js";import"./chunk-CDNWCYF7.js";import"./chunk-5XZ73VM4.js";import"./chunk-5F3J55LG.js";import"./chunk-WJXU5F4Z.js";import"./chunk-4MREHZP5.js";import"./chunk-VWTBHLMX.js";import"./chunk-7P5QRX5W.js";import"./chunk-JTJIPNXY.js";import"./chunk-64P4QHSZ.js";import"./chunk-BFZUG66X.js";import"./chunk-SR3X25TN.js";import"./chunk-53NRX2NA.js";import"./chunk-A6BKSZQA.js";import"./chunk-JGXE2YNV.js";import"./chunk-VJUTQAPJ.js";import"./chunk-DJEZ2HVU.js";import"./chunk-DSYKYZMT.js";import"./chunk-IKBHHTIT.js";import"./chunk-QOYAX2FT.js";import"./chunk-4YCH6IZV.js";export{a as buildProgram};
2
- //# sourceMappingURL=program-JEKM7SCS.js.map
@@ -1,2 +0,0 @@
1
- import{g as a,h as b,i as c}from"./chunk-5XZ73VM4.js";import"./chunk-5F3J55LG.js";import"./chunk-WJXU5F4Z.js";import"./chunk-4MREHZP5.js";import"./chunk-VWTBHLMX.js";import"./chunk-7P5QRX5W.js";import"./chunk-JTJIPNXY.js";import"./chunk-64P4QHSZ.js";import"./chunk-BFZUG66X.js";import"./chunk-SR3X25TN.js";import"./chunk-53NRX2NA.js";import"./chunk-A6BKSZQA.js";import"./chunk-JGXE2YNV.js";import"./chunk-VJUTQAPJ.js";import"./chunk-DSYKYZMT.js";import"./chunk-IKBHHTIT.js";import"./chunk-QOYAX2FT.js";import"./chunk-4YCH6IZV.js";export{c as AgentRegistry,b as getGlobalRegistry,a as setGlobalRegistry};
2
- //# sourceMappingURL=registry-EGKDMVSP.js.map
@@ -1,2 +0,0 @@
1
- import{e as a,f as b}from"./chunk-K6MC66D6.js";import"./chunk-AANSVC5A.js";import"./chunk-5GDCJ2SF.js";import"./chunk-4MREHZP5.js";import"./chunk-VJUTQAPJ.js";import"./chunk-4YCH6IZV.js";export{b as CronScheduler,a as getNextCronDate};
2
- //# sourceMappingURL=scheduler-ED4FCI2Y.js.map
@@ -1,2 +0,0 @@
1
- import{a,b}from"./chunk-ZE2YFX4K.js";import"./chunk-WJXU5F4Z.js";import"./chunk-4YCH6IZV.js";export{b as setupAllWorkspaces,a as setupWorkspace};
2
- //# sourceMappingURL=workspace-setup-FPGN5VNY.js.map