mcp-subagents-opencode 1.0.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 (219) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +602 -0
  3. package/build/config/timeouts.d.ts +9 -0
  4. package/build/config/timeouts.d.ts.map +1 -0
  5. package/build/config/timeouts.js +18 -0
  6. package/build/config/timeouts.js.map +1 -0
  7. package/build/helpers.d.ts +6 -0
  8. package/build/helpers.d.ts.map +1 -0
  9. package/build/helpers.js +47 -0
  10. package/build/helpers.js.map +1 -0
  11. package/build/index.d.ts +3 -0
  12. package/build/index.d.ts.map +1 -0
  13. package/build/index.js +245 -0
  14. package/build/index.js.map +1 -0
  15. package/build/models.d.ts +32 -0
  16. package/build/models.d.ts.map +1 -0
  17. package/build/models.js +58 -0
  18. package/build/models.js.map +1 -0
  19. package/build/server/register-notifications.d.ts +3 -0
  20. package/build/server/register-notifications.d.ts.map +1 -0
  21. package/build/server/register-notifications.js +77 -0
  22. package/build/server/register-notifications.js.map +1 -0
  23. package/build/server/register-resources.d.ts +3 -0
  24. package/build/server/register-resources.d.ts.map +1 -0
  25. package/build/server/register-resources.js +210 -0
  26. package/build/server/register-resources.js.map +1 -0
  27. package/build/server/register-retry-execution.d.ts +2 -0
  28. package/build/server/register-retry-execution.d.ts.map +1 -0
  29. package/build/server/register-retry-execution.js +28 -0
  30. package/build/server/register-retry-execution.js.map +1 -0
  31. package/build/server/register-tasks.d.ts +3 -0
  32. package/build/server/register-tasks.d.ts.map +1 -0
  33. package/build/server/register-tasks.js +52 -0
  34. package/build/server/register-tasks.js.map +1 -0
  35. package/build/server/register-tools.d.ts +3 -0
  36. package/build/server/register-tools.d.ts.map +1 -0
  37. package/build/server/register-tools.js +32 -0
  38. package/build/server/register-tools.js.map +1 -0
  39. package/build/server/resource-helpers.d.ts +21 -0
  40. package/build/server/resource-helpers.d.ts.map +1 -0
  41. package/build/server/resource-helpers.js +84 -0
  42. package/build/server/resource-helpers.js.map +1 -0
  43. package/build/services/account-manager.d.ts +88 -0
  44. package/build/services/account-manager.d.ts.map +1 -0
  45. package/build/services/account-manager.js +239 -0
  46. package/build/services/account-manager.js.map +1 -0
  47. package/build/services/claude-code-runner.d.ts +15 -0
  48. package/build/services/claude-code-runner.d.ts.map +1 -0
  49. package/build/services/claude-code-runner.js +475 -0
  50. package/build/services/claude-code-runner.js.map +1 -0
  51. package/build/services/client-context.d.ts +31 -0
  52. package/build/services/client-context.d.ts.map +1 -0
  53. package/build/services/client-context.js +44 -0
  54. package/build/services/client-context.js.map +1 -0
  55. package/build/services/exhaustion-fallback.d.ts +27 -0
  56. package/build/services/exhaustion-fallback.d.ts.map +1 -0
  57. package/build/services/exhaustion-fallback.js +30 -0
  58. package/build/services/exhaustion-fallback.js.map +1 -0
  59. package/build/services/fallback-orchestrator.d.ts +16 -0
  60. package/build/services/fallback-orchestrator.d.ts.map +1 -0
  61. package/build/services/fallback-orchestrator.js +48 -0
  62. package/build/services/fallback-orchestrator.js.map +1 -0
  63. package/build/services/opencode-client.d.ts +40 -0
  64. package/build/services/opencode-client.d.ts.map +1 -0
  65. package/build/services/opencode-client.js +147 -0
  66. package/build/services/opencode-client.js.map +1 -0
  67. package/build/services/opencode-spawner.d.ts +56 -0
  68. package/build/services/opencode-spawner.d.ts.map +1 -0
  69. package/build/services/opencode-spawner.js +426 -0
  70. package/build/services/opencode-spawner.js.map +1 -0
  71. package/build/services/output-file.d.ts +24 -0
  72. package/build/services/output-file.d.ts.map +1 -0
  73. package/build/services/output-file.js +90 -0
  74. package/build/services/output-file.js.map +1 -0
  75. package/build/services/progress-registry.d.ts +12 -0
  76. package/build/services/progress-registry.d.ts.map +1 -0
  77. package/build/services/progress-registry.js +97 -0
  78. package/build/services/progress-registry.js.map +1 -0
  79. package/build/services/question-registry.d.ts +79 -0
  80. package/build/services/question-registry.d.ts.map +1 -0
  81. package/build/services/question-registry.js +249 -0
  82. package/build/services/question-registry.js.map +1 -0
  83. package/build/services/retry-queue.d.ts +41 -0
  84. package/build/services/retry-queue.d.ts.map +1 -0
  85. package/build/services/retry-queue.js +195 -0
  86. package/build/services/retry-queue.js.map +1 -0
  87. package/build/services/sdk-client-manager.d.ts +149 -0
  88. package/build/services/sdk-client-manager.d.ts.map +1 -0
  89. package/build/services/sdk-client-manager.js +632 -0
  90. package/build/services/sdk-client-manager.js.map +1 -0
  91. package/build/services/sdk-session-adapter.d.ts +203 -0
  92. package/build/services/sdk-session-adapter.d.ts.map +1 -0
  93. package/build/services/sdk-session-adapter.js +1088 -0
  94. package/build/services/sdk-session-adapter.js.map +1 -0
  95. package/build/services/sdk-spawner.d.ts +42 -0
  96. package/build/services/sdk-spawner.d.ts.map +1 -0
  97. package/build/services/sdk-spawner.js +488 -0
  98. package/build/services/sdk-spawner.js.map +1 -0
  99. package/build/services/session-hooks.d.ts +24 -0
  100. package/build/services/session-hooks.d.ts.map +1 -0
  101. package/build/services/session-hooks.js +130 -0
  102. package/build/services/session-hooks.js.map +1 -0
  103. package/build/services/session-snapshot.d.ts +19 -0
  104. package/build/services/session-snapshot.d.ts.map +1 -0
  105. package/build/services/session-snapshot.js +203 -0
  106. package/build/services/session-snapshot.js.map +1 -0
  107. package/build/services/subscription-registry.d.ts +12 -0
  108. package/build/services/subscription-registry.d.ts.map +1 -0
  109. package/build/services/subscription-registry.js +27 -0
  110. package/build/services/subscription-registry.js.map +1 -0
  111. package/build/services/task-manager.d.ts +150 -0
  112. package/build/services/task-manager.d.ts.map +1 -0
  113. package/build/services/task-manager.js +765 -0
  114. package/build/services/task-manager.js.map +1 -0
  115. package/build/services/task-persistence.d.ts +29 -0
  116. package/build/services/task-persistence.d.ts.map +1 -0
  117. package/build/services/task-persistence.js +159 -0
  118. package/build/services/task-persistence.js.map +1 -0
  119. package/build/services/task-status-mapper.d.ts +21 -0
  120. package/build/services/task-status-mapper.d.ts.map +1 -0
  121. package/build/services/task-status-mapper.js +171 -0
  122. package/build/services/task-status-mapper.js.map +1 -0
  123. package/build/templates/index.d.ts +22 -0
  124. package/build/templates/index.d.ts.map +1 -0
  125. package/build/templates/index.js +147 -0
  126. package/build/templates/index.js.map +1 -0
  127. package/build/templates/overlays/coder-csharp.mdx +58 -0
  128. package/build/templates/overlays/coder-go.mdx +53 -0
  129. package/build/templates/overlays/coder-java.mdx +54 -0
  130. package/build/templates/overlays/coder-kotlin.mdx +56 -0
  131. package/build/templates/overlays/coder-nextjs.mdx +65 -0
  132. package/build/templates/overlays/coder-python.mdx +53 -0
  133. package/build/templates/overlays/coder-react.mdx +55 -0
  134. package/build/templates/overlays/coder-ruby.mdx +59 -0
  135. package/build/templates/overlays/coder-rust.mdx +48 -0
  136. package/build/templates/overlays/coder-supabase.mdx +268 -0
  137. package/build/templates/overlays/coder-supastarter.mdx +313 -0
  138. package/build/templates/overlays/coder-swift.mdx +56 -0
  139. package/build/templates/overlays/coder-tauri.mdx +566 -0
  140. package/build/templates/overlays/coder-triggerdev.mdx +296 -0
  141. package/build/templates/overlays/coder-typescript.mdx +45 -0
  142. package/build/templates/overlays/coder-vue.mdx +62 -0
  143. package/build/templates/overlays/planner-architecture.mdx +78 -0
  144. package/build/templates/overlays/planner-bugfix.mdx +36 -0
  145. package/build/templates/overlays/planner-feature.mdx +38 -0
  146. package/build/templates/overlays/planner-migration.mdx +50 -0
  147. package/build/templates/overlays/planner-refactor.mdx +57 -0
  148. package/build/templates/overlays/researcher-library.mdx +59 -0
  149. package/build/templates/overlays/researcher-performance.mdx +68 -0
  150. package/build/templates/overlays/researcher-security.mdx +86 -0
  151. package/build/templates/overlays/tester-graphql.mdx +191 -0
  152. package/build/templates/overlays/tester-playwright.mdx +621 -0
  153. package/build/templates/overlays/tester-rest.mdx +101 -0
  154. package/build/templates/overlays/tester-suite.mdx +177 -0
  155. package/build/templates/super-coder.mdx +529 -0
  156. package/build/templates/super-planner.mdx +568 -0
  157. package/build/templates/super-researcher.mdx +406 -0
  158. package/build/templates/super-tester.mdx +243 -0
  159. package/build/tools/answer-question.d.ts +30 -0
  160. package/build/tools/answer-question.d.ts.map +1 -0
  161. package/build/tools/answer-question.js +108 -0
  162. package/build/tools/answer-question.js.map +1 -0
  163. package/build/tools/cancel-task.d.ts +44 -0
  164. package/build/tools/cancel-task.d.ts.map +1 -0
  165. package/build/tools/cancel-task.js +144 -0
  166. package/build/tools/cancel-task.js.map +1 -0
  167. package/build/tools/send-message.d.ts +39 -0
  168. package/build/tools/send-message.d.ts.map +1 -0
  169. package/build/tools/send-message.js +124 -0
  170. package/build/tools/send-message.js.map +1 -0
  171. package/build/tools/shared-spawn.d.ts +56 -0
  172. package/build/tools/shared-spawn.d.ts.map +1 -0
  173. package/build/tools/shared-spawn.js +114 -0
  174. package/build/tools/shared-spawn.js.map +1 -0
  175. package/build/tools/spawn-agent.d.ts +85 -0
  176. package/build/tools/spawn-agent.d.ts.map +1 -0
  177. package/build/tools/spawn-agent.js +133 -0
  178. package/build/tools/spawn-agent.js.map +1 -0
  179. package/build/tools/spawn-coder.d.ts +70 -0
  180. package/build/tools/spawn-coder.d.ts.map +1 -0
  181. package/build/tools/spawn-coder.js +71 -0
  182. package/build/tools/spawn-coder.js.map +1 -0
  183. package/build/tools/spawn-planner.d.ts +70 -0
  184. package/build/tools/spawn-planner.d.ts.map +1 -0
  185. package/build/tools/spawn-planner.js +71 -0
  186. package/build/tools/spawn-planner.js.map +1 -0
  187. package/build/tools/spawn-researcher.d.ts +70 -0
  188. package/build/tools/spawn-researcher.d.ts.map +1 -0
  189. package/build/tools/spawn-researcher.js +70 -0
  190. package/build/tools/spawn-researcher.js.map +1 -0
  191. package/build/tools/spawn-task.d.ts +74 -0
  192. package/build/tools/spawn-task.d.ts.map +1 -0
  193. package/build/tools/spawn-task.js +107 -0
  194. package/build/tools/spawn-task.js.map +1 -0
  195. package/build/tools/spawn-tester.d.ts +70 -0
  196. package/build/tools/spawn-tester.d.ts.map +1 -0
  197. package/build/tools/spawn-tester.js +69 -0
  198. package/build/tools/spawn-tester.js.map +1 -0
  199. package/build/types.d.ts +101 -0
  200. package/build/types.d.ts.map +1 -0
  201. package/build/types.js +28 -0
  202. package/build/types.js.map +1 -0
  203. package/build/utils/brief-validator.d.ts +30 -0
  204. package/build/utils/brief-validator.d.ts.map +1 -0
  205. package/build/utils/brief-validator.js +254 -0
  206. package/build/utils/brief-validator.js.map +1 -0
  207. package/build/utils/format.d.ts +34 -0
  208. package/build/utils/format.d.ts.map +1 -0
  209. package/build/utils/format.js +55 -0
  210. package/build/utils/format.js.map +1 -0
  211. package/build/utils/sanitize.d.ts +240 -0
  212. package/build/utils/sanitize.d.ts.map +1 -0
  213. package/build/utils/sanitize.js +89 -0
  214. package/build/utils/sanitize.js.map +1 -0
  215. package/build/utils/task-id-generator.d.ts +10 -0
  216. package/build/utils/task-id-generator.d.ts.map +1 -0
  217. package/build/utils/task-id-generator.js +22 -0
  218. package/build/utils/task-id-generator.js.map +1 -0
  219. package/package.json +62 -0
@@ -0,0 +1,254 @@
1
+ import { existsSync, accessSync, statSync, readFileSync, constants } from 'fs';
2
+ import { extname, isAbsolute } from 'path';
3
+ // --- Per-tool validation rules ---
4
+ const MAX_FILE_SIZE = 200 * 1024; // 200KB per file
5
+ const MAX_TOTAL_SIZE = 500 * 1024; // 500KB total
6
+ const CODER_RULES = {
7
+ toolName: 'spawn_coder',
8
+ minPromptLength: 1000,
9
+ requireContextFiles: true,
10
+ minContextFiles: 1,
11
+ requireMdExtension: true,
12
+ maxFileSizeBytes: MAX_FILE_SIZE,
13
+ maxTotalSizeBytes: MAX_TOTAL_SIZE,
14
+ briefTemplate: [
15
+ '🎯 OBJECTIVE: [What exactly to build/modify — specific deliverables, not vague goals]',
16
+ '📁 FILES TO MODIFY: [ALL absolute file paths the agent needs to touch]',
17
+ '✅ SUCCESS CRITERIA: [Exactly how to verify the implementation is correct]',
18
+ '🚫 CONSTRAINTS: [What NOT to do — boundaries, forbidden approaches, patterns to avoid]',
19
+ '🔗 PATTERNS TO FOLLOW: [Existing code patterns to match, utilities to reuse]',
20
+ '📝 CONTEXT: [Background — why this matters, dependencies, architectural decisions]',
21
+ ].join('\n'),
22
+ workflowHint: [
23
+ '🔄 RECOMMENDED WORKFLOW:',
24
+ '1. spawn_planner → creates plan at .agent-workspace/plans/[topic]/',
25
+ '2. spawn_coder → reference plan files in context_files',
26
+ '3. spawn_tester → verify the implementation',
27
+ '',
28
+ '📎 REFERENCE FILES FROM OTHER AGENTS:',
29
+ '• Planner output: .agent-workspace/plans/[topic]/05-handoff/builder-briefing.md',
30
+ '• Researcher output: .agent-workspace/researches/[topic]/HANDOFF.md',
31
+ ].join('\n'),
32
+ };
33
+ const PLANNER_RULES = {
34
+ toolName: 'spawn_planner',
35
+ minPromptLength: 300,
36
+ requireContextFiles: false,
37
+ minContextFiles: 0,
38
+ requireMdExtension: false,
39
+ maxFileSizeBytes: MAX_FILE_SIZE,
40
+ maxTotalSizeBytes: MAX_TOTAL_SIZE,
41
+ briefTemplate: [
42
+ '🎯 PROBLEM STATEMENT: [What needs to be solved — the actual problem, not a solution]',
43
+ '🚫 CONSTRAINTS: [What\'s been ruled out, what must be preserved]',
44
+ '✅ VERIFIED FACTS: [What you already know — don\'t re-investigate these]',
45
+ '📏 SCOPE: [What\'s in/out of scope — be explicit]',
46
+ '📤 EXPECTED OUTPUT: [What the next agent (Coder/Tester) needs from this plan]',
47
+ ].join('\n'),
48
+ workflowHint: [
49
+ '📎 TIP: The planner creates files at .agent-workspace/plans/[topic]/',
50
+ 'Use those files as context_files when spawning spawn_coder next.',
51
+ ].join('\n'),
52
+ };
53
+ const TESTER_RULES = {
54
+ toolName: 'spawn_tester',
55
+ minPromptLength: 300,
56
+ requireContextFiles: true,
57
+ minContextFiles: 1,
58
+ requireMdExtension: false,
59
+ maxFileSizeBytes: MAX_FILE_SIZE,
60
+ maxTotalSizeBytes: MAX_TOTAL_SIZE,
61
+ briefTemplate: [
62
+ '🎯 WHAT WAS BUILT: [Feature/fix to verify — specific deliverable]',
63
+ '📁 FILES CHANGED: [Where to focus testing — absolute paths]',
64
+ '✅ SUCCESS CRITERIA: [What "working" means — specific, testable conditions]',
65
+ '🔍 TEST SUGGESTIONS: [Specific flows to test — happy path + edge cases]',
66
+ '⚠️ EDGE CASES: [What the coder is worried about — potential failure points]',
67
+ '🌐 BASE URL / SETUP: [How to access the system under test]',
68
+ ].join('\n'),
69
+ workflowHint: [
70
+ '📎 REFERENCE FILES FROM OTHER AGENTS:',
71
+ '• Coder handoff: .agent-workspace/implementation/[topic]/HANDOFF.md',
72
+ '• Planner test checklist: .agent-workspace/plans/[topic]/05-handoff/tester-checklist.md',
73
+ ].join('\n'),
74
+ };
75
+ const RESEARCHER_RULES = {
76
+ toolName: 'spawn_researcher',
77
+ minPromptLength: 200,
78
+ requireContextFiles: false,
79
+ minContextFiles: 0,
80
+ requireMdExtension: false,
81
+ maxFileSizeBytes: MAX_FILE_SIZE,
82
+ maxTotalSizeBytes: MAX_TOTAL_SIZE,
83
+ briefTemplate: [
84
+ '🎯 WHAT TO RESEARCH: [Specific topic or question — not vague "research X"]',
85
+ '🤔 WHY IT MATTERS: [What decision this research informs]',
86
+ '📚 WHAT\'S ALREADY KNOWN: [Don\'t re-research verified facts]',
87
+ '❓ SPECIFIC QUESTIONS: [2-5 pointed, answerable questions]',
88
+ '📤 HANDOFF TARGET: [Who reads the output — Planner? Coder? Human?]',
89
+ ].join('\n'),
90
+ workflowHint: [
91
+ '📎 TIP: Research output goes to .agent-workspace/researches/[topic]/HANDOFF.md',
92
+ 'Reference this file when spawning spawn_planner or spawn_coder next.',
93
+ ].join('\n'),
94
+ };
95
+ export const VALIDATION_RULES = {
96
+ 'spawn_coder': CODER_RULES,
97
+ 'spawn_planner': PLANNER_RULES,
98
+ 'spawn_tester': TESTER_RULES,
99
+ 'spawn_researcher': RESEARCHER_RULES,
100
+ };
101
+ // --- Validation functions ---
102
+ export function validateBrief(toolName, prompt, contextFiles) {
103
+ const rules = VALIDATION_RULES[toolName];
104
+ if (!rules)
105
+ return { valid: true, errors: [] };
106
+ const errors = [];
107
+ // 1. Prompt length check
108
+ if (prompt.length < rules.minPromptLength) {
109
+ errors.push({
110
+ code: 'PROMPT_TOO_SHORT',
111
+ message: `PROMPT TOO SHORT: ${prompt.length} characters (MINIMUM: ${rules.minPromptLength})`,
112
+ detail: `Your prompt MUST include these sections:\n${rules.briefTemplate}`,
113
+ });
114
+ }
115
+ // 2. Context files required check
116
+ const files = contextFiles || [];
117
+ if (rules.requireContextFiles && files.length < rules.minContextFiles) {
118
+ errors.push({
119
+ code: 'MISSING_CONTEXT_FILES',
120
+ message: `MISSING CONTEXT FILES: ${rules.toolName} REQUIRES at least ${rules.minContextFiles} file(s)`,
121
+ detail: rules.requireMdExtension
122
+ ? 'Attach Markdown files (.md) — plan documents, specifications, or research findings.\nEach file must have an absolute path ending with .md'
123
+ : 'Attach relevant files — code, handoff documents, or specifications.\nEach file must have an absolute path.',
124
+ });
125
+ }
126
+ // 3. Validate each context file
127
+ let totalSize = 0;
128
+ for (const file of files) {
129
+ // Absolute path check
130
+ if (!isAbsolute(file.path)) {
131
+ errors.push({
132
+ code: 'RELATIVE_PATH',
133
+ message: `RELATIVE PATH: "${file.path}" — paths MUST be absolute (start with /)`,
134
+ detail: `Use the full absolute path, e.g. /Users/dev/project/${file.path}`,
135
+ });
136
+ continue;
137
+ }
138
+ // .md extension check (coder only)
139
+ if (rules.requireMdExtension && extname(file.path).toLowerCase() !== '.md') {
140
+ errors.push({
141
+ code: 'NOT_MARKDOWN',
142
+ message: `NOT A MARKDOWN FILE: "${file.path}" — ${rules.toolName} requires .md files`,
143
+ detail: 'Context files for the coder MUST be Markdown (.md) plan/specification documents.',
144
+ });
145
+ continue;
146
+ }
147
+ // File existence check
148
+ if (!existsSync(file.path)) {
149
+ errors.push({
150
+ code: 'FILE_NOT_FOUND',
151
+ message: `FILE NOT FOUND: "${file.path}" does not exist`,
152
+ detail: 'Ensure the file path is correct and the file has been created.\nIf referencing planner output, make sure spawn_planner has completed first.',
153
+ });
154
+ continue;
155
+ }
156
+ // Readability check
157
+ try {
158
+ accessSync(file.path, constants.R_OK);
159
+ }
160
+ catch {
161
+ errors.push({
162
+ code: 'FILE_NOT_READABLE',
163
+ message: `FILE NOT READABLE: "${file.path}" exists but cannot be read`,
164
+ detail: 'Check file permissions. The MCP server needs read access to this file.',
165
+ });
166
+ continue;
167
+ }
168
+ // Size check
169
+ try {
170
+ const stat = statSync(file.path);
171
+ if (stat.size > rules.maxFileSizeBytes) {
172
+ errors.push({
173
+ code: 'FILE_TOO_LARGE',
174
+ message: `FILE TOO LARGE: "${file.path}" is ${Math.round(stat.size / 1024)}KB (max: ${Math.round(rules.maxFileSizeBytes / 1024)}KB)`,
175
+ });
176
+ continue;
177
+ }
178
+ totalSize += stat.size;
179
+ }
180
+ catch (err) {
181
+ errors.push({
182
+ code: 'FILE_STAT_FAILED',
183
+ message: `FILE STAT FAILED: "${file.path}" — ${err instanceof Error ? err.message : 'unknown error'}`,
184
+ detail: 'The file exists but its metadata could not be read. Check for broken symlinks or permission issues.',
185
+ });
186
+ continue;
187
+ }
188
+ }
189
+ // Total size check
190
+ if (totalSize > rules.maxTotalSizeBytes) {
191
+ errors.push({
192
+ code: 'TOTAL_SIZE_EXCEEDED',
193
+ message: `TOTAL FILE SIZE EXCEEDED: ${Math.round(totalSize / 1024)}KB (max: ${Math.round(rules.maxTotalSizeBytes / 1024)}KB)`,
194
+ detail: 'Reduce the number of context files or use smaller files.',
195
+ });
196
+ }
197
+ return { valid: errors.length === 0, errors };
198
+ }
199
+ // --- Error message formatting ---
200
+ export function formatValidationError(toolName, errors) {
201
+ const rules = VALIDATION_RULES[toolName];
202
+ if (!rules)
203
+ return errors.map(e => e.message).join('\n');
204
+ const parts = [
205
+ `❌ **BRIEF VALIDATION FAILED — ${rules.toolName}**`,
206
+ '',
207
+ '⚠️ **ISSUES FOUND:**',
208
+ ];
209
+ for (const err of errors) {
210
+ parts.push(`• **${err.message}**`);
211
+ if (err.detail) {
212
+ for (const line of err.detail.split('\n')) {
213
+ parts.push(` ${line}`);
214
+ }
215
+ }
216
+ }
217
+ parts.push('');
218
+ parts.push('📋 **HOW TO FIX — Follow this brief template:**');
219
+ parts.push('```');
220
+ parts.push(rules.briefTemplate);
221
+ parts.push('```');
222
+ parts.push('');
223
+ parts.push(rules.workflowHint);
224
+ return parts.join('\n');
225
+ }
226
+ // --- Context file content assembly ---
227
+ export function assemblePromptWithContext(prompt, contextFiles) {
228
+ if (!contextFiles || contextFiles.length === 0)
229
+ return prompt;
230
+ const sections = [prompt, '', '---', '', '## 📎 ATTACHED CONTEXT FILES', ''];
231
+ for (const file of contextFiles) {
232
+ sections.push(`### File: ${file.path}`);
233
+ if (file.description) {
234
+ sections.push(`> ${file.description}`);
235
+ }
236
+ sections.push('');
237
+ try {
238
+ const content = readFileSync(file.path, 'utf-8');
239
+ // Truncate if over limit (should be caught by validation, but safety net)
240
+ const truncated = content.length > MAX_FILE_SIZE
241
+ ? content.slice(0, MAX_FILE_SIZE) + '\n\n[... TRUNCATED — file exceeds 200KB limit ...]'
242
+ : content;
243
+ sections.push('```');
244
+ sections.push(truncated);
245
+ sections.push('```');
246
+ }
247
+ catch {
248
+ sections.push('> ⚠️ Could not read file contents');
249
+ }
250
+ sections.push('');
251
+ }
252
+ return sections.join('\n');
253
+ }
254
+ //# sourceMappingURL=brief-validator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"brief-validator.js","sourceRoot":"","sources":["../../src/utils/brief-validator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Shared formatting helpers for converting MCP tool responses to markdown.
3
+ */
4
+ /** Wraps a markdown string in the MCP response shape. */
5
+ export declare function mcpText(markdown: string): {
6
+ content: Array<{
7
+ type: string;
8
+ text: string;
9
+ }>;
10
+ };
11
+ /** Display status in human-readable form: "rate_limited" -> "rate limited" */
12
+ export declare function displayStatus(status: string): string;
13
+ /** Standard error block with optional actionable hint. */
14
+ export declare function formatError(error: string, hint?: string): string;
15
+ /** MCP-compliant error response with isError: true and optional hint. */
16
+ export declare function mcpError(title: string, hint?: string): {
17
+ content: Array<{
18
+ type: string;
19
+ text: string;
20
+ }>;
21
+ isError: true;
22
+ };
23
+ /** MCP-compliant validation error response with isError: true. */
24
+ export declare function mcpValidationError(markdown: string): {
25
+ content: Array<{
26
+ type: string;
27
+ text: string;
28
+ }>;
29
+ isError: true;
30
+ };
31
+ export declare function formatDuration(ms: number): string;
32
+ /** Render a markdown table from headers and rows. */
33
+ export declare function formatTable(headers: string[], rows: string[][]): string;
34
+ //# sourceMappingURL=format.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../src/utils/format.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,yDAAyD;AACzD,wBAAgB,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAE5F;AAED,8EAA8E;AAC9E,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED,0DAA0D;AAC1D,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAIhE;AAED,yEAAyE;AACzE,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAAC,OAAO,EAAE,IAAI,CAAA;CAAE,CAIxH;AAED,kEAAkE;AAClE,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAAC,OAAO,EAAE,IAAI,CAAA;CAAE,CAEtH;AAED,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAUjD;AAOD,qDAAqD;AACrD,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,MAAM,CAKvE"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Shared formatting helpers for converting MCP tool responses to markdown.
3
+ */
4
+ /** Wraps a markdown string in the MCP response shape. */
5
+ export function mcpText(markdown) {
6
+ return { content: [{ type: 'text', text: markdown }] };
7
+ }
8
+ /** Display status in human-readable form: "rate_limited" -> "rate limited" */
9
+ export function displayStatus(status) {
10
+ return status.replace(/_/g, ' ');
11
+ }
12
+ /** Standard error block with optional actionable hint. */
13
+ export function formatError(error, hint) {
14
+ const parts = [`**Error:** ${error}`];
15
+ if (hint)
16
+ parts.push('', hint);
17
+ return parts.join('\n');
18
+ }
19
+ /** MCP-compliant error response with isError: true and optional hint. */
20
+ export function mcpError(title, hint) {
21
+ const parts = [`**Error:** ${title}`];
22
+ if (hint)
23
+ parts.push('', hint);
24
+ return { content: [{ type: 'text', text: parts.join('\n') }], isError: true };
25
+ }
26
+ /** MCP-compliant validation error response with isError: true. */
27
+ export function mcpValidationError(markdown) {
28
+ return { content: [{ type: 'text', text: markdown }], isError: true };
29
+ }
30
+ export function formatDuration(ms) {
31
+ if (ms < 1000)
32
+ return `${ms}ms`;
33
+ const seconds = Math.floor(ms / 1000);
34
+ if (seconds < 60)
35
+ return `${seconds}s`;
36
+ const minutes = Math.floor(seconds / 60);
37
+ const remainingSec = seconds % 60;
38
+ if (minutes < 60)
39
+ return `${minutes}m ${remainingSec}s`;
40
+ const hours = Math.floor(minutes / 60);
41
+ const remainingMin = minutes % 60;
42
+ return `${hours}h ${remainingMin}m`;
43
+ }
44
+ /** Escape pipe characters in table cell content. */
45
+ function escapeCell(value) {
46
+ return value.replace(/\|/g, '\\|');
47
+ }
48
+ /** Render a markdown table from headers and rows. */
49
+ export function formatTable(headers, rows) {
50
+ const headerRow = `| ${headers.map(escapeCell).join(' | ')} |`;
51
+ const separator = `|${headers.map(() => '------').join('|')}|`;
52
+ const dataRows = rows.map(r => `| ${r.map(escapeCell).join(' | ')} |`);
53
+ return [headerRow, separator, ...dataRows].join('\n');
54
+ }
55
+ //# sourceMappingURL=format.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.js","sourceRoot":"","sources":["../../src/utils/format.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,240 @@
1
+ import { z } from 'zod';
2
+ export declare const SpawnTaskSchema: z.ZodObject<{
3
+ prompt: z.ZodString;
4
+ timeout: z.ZodOptional<z.ZodDefault<z.ZodNumber>>;
5
+ cwd: z.ZodOptional<z.ZodString>;
6
+ model: z.ZodOptional<z.ZodEnum<[string, ...string[]]>>;
7
+ task_type: z.ZodOptional<z.ZodEnum<[string, ...string[]]>>;
8
+ autonomous: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
9
+ depends_on: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
10
+ labels: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
11
+ context_files: z.ZodOptional<z.ZodArray<z.ZodObject<{
12
+ path: z.ZodString;
13
+ description: z.ZodOptional<z.ZodString>;
14
+ }, "strip", z.ZodTypeAny, {
15
+ path: string;
16
+ description?: string | undefined;
17
+ }, {
18
+ path: string;
19
+ description?: string | undefined;
20
+ }>, "many">>;
21
+ }, "strip", z.ZodTypeAny, {
22
+ prompt: string;
23
+ cwd?: string | undefined;
24
+ model?: string | undefined;
25
+ autonomous?: boolean | undefined;
26
+ labels?: string[] | undefined;
27
+ timeout?: number | undefined;
28
+ task_type?: string | undefined;
29
+ depends_on?: string[] | undefined;
30
+ context_files?: {
31
+ path: string;
32
+ description?: string | undefined;
33
+ }[] | undefined;
34
+ }, {
35
+ prompt: string;
36
+ cwd?: string | undefined;
37
+ model?: string | undefined;
38
+ autonomous?: boolean | undefined;
39
+ labels?: string[] | undefined;
40
+ timeout?: number | undefined;
41
+ task_type?: string | undefined;
42
+ depends_on?: string[] | undefined;
43
+ context_files?: {
44
+ path: string;
45
+ description?: string | undefined;
46
+ }[] | undefined;
47
+ }>;
48
+ export declare const CODER_LANGUAGES: readonly ["typescript", "python", "rust", "go", "java", "ruby", "swift", "csharp", "kotlin", "react", "nextjs", "vue", "supabase", "tauri", "triggerdev", "supastarter", "general"];
49
+ export type CoderLanguage = typeof CODER_LANGUAGES[number];
50
+ export declare const PLANNING_TYPES: readonly ["feature", "bugfix", "migration", "refactor", "architecture"];
51
+ export type PlanningType = typeof PLANNING_TYPES[number];
52
+ export declare const TESTING_TYPES: readonly ["playwright", "rest", "graphql", "suite", "accessibility", "performance", "security", "general"];
53
+ export type TestingType = typeof TESTING_TYPES[number];
54
+ export declare const RESEARCH_TYPES: readonly ["security", "library", "performance", "architecture", "general"];
55
+ export type ResearchType = typeof RESEARCH_TYPES[number];
56
+ export declare const SpawnCoderSchema: z.ZodObject<{
57
+ prompt: z.ZodString;
58
+ context_files: z.ZodArray<z.ZodObject<{
59
+ path: z.ZodString;
60
+ description: z.ZodOptional<z.ZodString>;
61
+ }, "strip", z.ZodTypeAny, {
62
+ path: string;
63
+ description?: string | undefined;
64
+ }, {
65
+ path: string;
66
+ description?: string | undefined;
67
+ }>, "many">;
68
+ language: z.ZodOptional<z.ZodEnum<["typescript", "python", "rust", "go", "java", "ruby", "swift", "csharp", "kotlin", "react", "nextjs", "vue", "supabase", "tauri", "triggerdev", "supastarter", "general"]>>;
69
+ model: z.ZodOptional<z.ZodEnum<[string, ...string[]]>>;
70
+ cwd: z.ZodOptional<z.ZodString>;
71
+ timeout: z.ZodOptional<z.ZodDefault<z.ZodNumber>>;
72
+ autonomous: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
73
+ depends_on: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
74
+ labels: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
75
+ }, "strip", z.ZodTypeAny, {
76
+ prompt: string;
77
+ context_files: {
78
+ path: string;
79
+ description?: string | undefined;
80
+ }[];
81
+ cwd?: string | undefined;
82
+ model?: string | undefined;
83
+ autonomous?: boolean | undefined;
84
+ labels?: string[] | undefined;
85
+ timeout?: number | undefined;
86
+ depends_on?: string[] | undefined;
87
+ language?: "typescript" | "python" | "rust" | "go" | "java" | "ruby" | "swift" | "csharp" | "kotlin" | "react" | "nextjs" | "vue" | "supabase" | "tauri" | "triggerdev" | "supastarter" | "general" | undefined;
88
+ }, {
89
+ prompt: string;
90
+ context_files: {
91
+ path: string;
92
+ description?: string | undefined;
93
+ }[];
94
+ cwd?: string | undefined;
95
+ model?: string | undefined;
96
+ autonomous?: boolean | undefined;
97
+ labels?: string[] | undefined;
98
+ timeout?: number | undefined;
99
+ depends_on?: string[] | undefined;
100
+ language?: "typescript" | "python" | "rust" | "go" | "java" | "ruby" | "swift" | "csharp" | "kotlin" | "react" | "nextjs" | "vue" | "supabase" | "tauri" | "triggerdev" | "supastarter" | "general" | undefined;
101
+ }>;
102
+ export declare const SpawnPlannerSchema: z.ZodObject<{
103
+ prompt: z.ZodString;
104
+ context_files: z.ZodOptional<z.ZodArray<z.ZodObject<{
105
+ path: z.ZodString;
106
+ description: z.ZodOptional<z.ZodString>;
107
+ }, "strip", z.ZodTypeAny, {
108
+ path: string;
109
+ description?: string | undefined;
110
+ }, {
111
+ path: string;
112
+ description?: string | undefined;
113
+ }>, "many">>;
114
+ planning_type: z.ZodOptional<z.ZodEnum<["feature", "bugfix", "migration", "refactor", "architecture"]>>;
115
+ model: z.ZodOptional<z.ZodEnum<[string, ...string[]]>>;
116
+ cwd: z.ZodOptional<z.ZodString>;
117
+ timeout: z.ZodOptional<z.ZodDefault<z.ZodNumber>>;
118
+ autonomous: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
119
+ depends_on: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
120
+ labels: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
121
+ }, "strip", z.ZodTypeAny, {
122
+ prompt: string;
123
+ cwd?: string | undefined;
124
+ model?: string | undefined;
125
+ autonomous?: boolean | undefined;
126
+ labels?: string[] | undefined;
127
+ timeout?: number | undefined;
128
+ depends_on?: string[] | undefined;
129
+ context_files?: {
130
+ path: string;
131
+ description?: string | undefined;
132
+ }[] | undefined;
133
+ planning_type?: "feature" | "bugfix" | "migration" | "refactor" | "architecture" | undefined;
134
+ }, {
135
+ prompt: string;
136
+ cwd?: string | undefined;
137
+ model?: string | undefined;
138
+ autonomous?: boolean | undefined;
139
+ labels?: string[] | undefined;
140
+ timeout?: number | undefined;
141
+ depends_on?: string[] | undefined;
142
+ context_files?: {
143
+ path: string;
144
+ description?: string | undefined;
145
+ }[] | undefined;
146
+ planning_type?: "feature" | "bugfix" | "migration" | "refactor" | "architecture" | undefined;
147
+ }>;
148
+ export declare const SpawnTesterSchema: z.ZodObject<{
149
+ prompt: z.ZodString;
150
+ context_files: z.ZodArray<z.ZodObject<{
151
+ path: z.ZodString;
152
+ description: z.ZodOptional<z.ZodString>;
153
+ }, "strip", z.ZodTypeAny, {
154
+ path: string;
155
+ description?: string | undefined;
156
+ }, {
157
+ path: string;
158
+ description?: string | undefined;
159
+ }>, "many">;
160
+ testing_type: z.ZodOptional<z.ZodEnum<["playwright", "rest", "graphql", "suite", "accessibility", "performance", "security", "general"]>>;
161
+ model: z.ZodOptional<z.ZodEnum<[string, ...string[]]>>;
162
+ cwd: z.ZodOptional<z.ZodString>;
163
+ timeout: z.ZodOptional<z.ZodDefault<z.ZodNumber>>;
164
+ autonomous: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
165
+ depends_on: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
166
+ labels: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
167
+ }, "strip", z.ZodTypeAny, {
168
+ prompt: string;
169
+ context_files: {
170
+ path: string;
171
+ description?: string | undefined;
172
+ }[];
173
+ cwd?: string | undefined;
174
+ model?: string | undefined;
175
+ autonomous?: boolean | undefined;
176
+ labels?: string[] | undefined;
177
+ timeout?: number | undefined;
178
+ depends_on?: string[] | undefined;
179
+ testing_type?: "rest" | "general" | "playwright" | "graphql" | "suite" | "accessibility" | "performance" | "security" | undefined;
180
+ }, {
181
+ prompt: string;
182
+ context_files: {
183
+ path: string;
184
+ description?: string | undefined;
185
+ }[];
186
+ cwd?: string | undefined;
187
+ model?: string | undefined;
188
+ autonomous?: boolean | undefined;
189
+ labels?: string[] | undefined;
190
+ timeout?: number | undefined;
191
+ depends_on?: string[] | undefined;
192
+ testing_type?: "rest" | "general" | "playwright" | "graphql" | "suite" | "accessibility" | "performance" | "security" | undefined;
193
+ }>;
194
+ export declare const SpawnResearcherSchema: z.ZodObject<{
195
+ prompt: z.ZodString;
196
+ context_files: z.ZodOptional<z.ZodArray<z.ZodObject<{
197
+ path: z.ZodString;
198
+ description: z.ZodOptional<z.ZodString>;
199
+ }, "strip", z.ZodTypeAny, {
200
+ path: string;
201
+ description?: string | undefined;
202
+ }, {
203
+ path: string;
204
+ description?: string | undefined;
205
+ }>, "many">>;
206
+ research_type: z.ZodOptional<z.ZodEnum<["security", "library", "performance", "architecture", "general"]>>;
207
+ model: z.ZodOptional<z.ZodEnum<[string, ...string[]]>>;
208
+ cwd: z.ZodOptional<z.ZodString>;
209
+ timeout: z.ZodOptional<z.ZodDefault<z.ZodNumber>>;
210
+ autonomous: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
211
+ depends_on: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
212
+ labels: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
213
+ }, "strip", z.ZodTypeAny, {
214
+ prompt: string;
215
+ cwd?: string | undefined;
216
+ model?: string | undefined;
217
+ autonomous?: boolean | undefined;
218
+ labels?: string[] | undefined;
219
+ timeout?: number | undefined;
220
+ depends_on?: string[] | undefined;
221
+ context_files?: {
222
+ path: string;
223
+ description?: string | undefined;
224
+ }[] | undefined;
225
+ research_type?: "general" | "architecture" | "performance" | "security" | "library" | undefined;
226
+ }, {
227
+ prompt: string;
228
+ cwd?: string | undefined;
229
+ model?: string | undefined;
230
+ autonomous?: boolean | undefined;
231
+ labels?: string[] | undefined;
232
+ timeout?: number | undefined;
233
+ depends_on?: string[] | undefined;
234
+ context_files?: {
235
+ path: string;
236
+ description?: string | undefined;
237
+ }[] | undefined;
238
+ research_type?: "general" | "architecture" | "performance" | "security" | "library" | undefined;
239
+ }>;
240
+ //# sourceMappingURL=sanitize.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sanitize.d.ts","sourceRoot":"","sources":["../../src/utils/sanitize.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAuBxB,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAU1B,CAAC;AAIH,eAAO,MAAM,eAAe,qLAIlB,CAAC;AACX,MAAM,MAAM,aAAa,GAAG,OAAO,eAAe,CAAC,MAAM,CAAC,CAAC;AAI3D,eAAO,MAAM,cAAc,yEAEjB,CAAC;AACX,MAAM,MAAM,YAAY,GAAG,OAAO,cAAc,CAAC,MAAM,CAAC,CAAC;AAIzD,eAAO,MAAM,aAAa,4GAEhB,CAAC;AACX,MAAM,MAAM,WAAW,GAAG,OAAO,aAAa,CAAC,MAAM,CAAC,CAAC;AAIvD,eAAO,MAAM,cAAc,4EAEjB,CAAC;AACX,MAAM,MAAM,YAAY,GAAG,OAAO,cAAc,CAAC,MAAM,CAAC,CAAC;AAIzD,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAU3B,CAAC;AAEH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAU7B,CAAC;AAEH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAU5B,CAAC;AAEH,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAUhC,CAAC"}