@planu/cli 0.90.1 → 0.91.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 (252) hide show
  1. package/dist/config/license-plans.json +3 -1
  2. package/dist/engine/batch-script-generator/index.d.ts +6 -0
  3. package/dist/engine/batch-script-generator/index.d.ts.map +1 -0
  4. package/dist/engine/batch-script-generator/index.js +126 -0
  5. package/dist/engine/batch-script-generator/index.js.map +1 -0
  6. package/dist/engine/ci-generator/index.d.ts.map +1 -1
  7. package/dist/engine/ci-generator/index.js +32 -1
  8. package/dist/engine/ci-generator/index.js.map +1 -1
  9. package/dist/engine/ci-generator/output-formats.d.ts +15 -0
  10. package/dist/engine/ci-generator/output-formats.d.ts.map +1 -0
  11. package/dist/engine/ci-generator/output-formats.js +52 -0
  12. package/dist/engine/ci-generator/output-formats.js.map +1 -0
  13. package/dist/engine/claude-config-auditor/claudemd-auditor.d.ts.map +1 -1
  14. package/dist/engine/claude-config-auditor/claudemd-auditor.js +139 -31
  15. package/dist/engine/claude-config-auditor/claudemd-auditor.js.map +1 -1
  16. package/dist/engine/claude-config-auditor/rules-auditor.d.ts.map +1 -1
  17. package/dist/engine/claude-config-auditor/rules-auditor.js +87 -49
  18. package/dist/engine/claude-config-auditor/rules-auditor.js.map +1 -1
  19. package/dist/engine/claude-config-auditor/scoring.d.ts.map +1 -1
  20. package/dist/engine/claude-config-auditor/scoring.js +37 -1
  21. package/dist/engine/claude-config-auditor/scoring.js.map +1 -1
  22. package/dist/engine/claude-config-auditor/settings-auditor.d.ts.map +1 -1
  23. package/dist/engine/claude-config-auditor/settings-auditor.js +55 -40
  24. package/dist/engine/claude-config-auditor/settings-auditor.js.map +1 -1
  25. package/dist/engine/config-schemas.d.ts.map +1 -1
  26. package/dist/engine/config-schemas.js +1 -0
  27. package/dist/engine/config-schemas.js.map +1 -1
  28. package/dist/engine/context-advisor/btw-advisor.d.ts +11 -0
  29. package/dist/engine/context-advisor/btw-advisor.d.ts.map +1 -0
  30. package/dist/engine/context-advisor/btw-advisor.js +29 -0
  31. package/dist/engine/context-advisor/btw-advisor.js.map +1 -0
  32. package/dist/engine/facilitate/context-loader.d.ts +12 -0
  33. package/dist/engine/facilitate/context-loader.d.ts.map +1 -0
  34. package/dist/engine/facilitate/context-loader.js +156 -0
  35. package/dist/engine/facilitate/context-loader.js.map +1 -0
  36. package/dist/engine/facilitate/intent-classifier.d.ts +6 -0
  37. package/dist/engine/facilitate/intent-classifier.d.ts.map +1 -0
  38. package/dist/engine/facilitate/intent-classifier.js +153 -0
  39. package/dist/engine/facilitate/intent-classifier.js.map +1 -0
  40. package/dist/engine/facilitate/plan-parser.d.ts +7 -0
  41. package/dist/engine/facilitate/plan-parser.d.ts.map +1 -0
  42. package/dist/engine/facilitate/plan-parser.js +115 -0
  43. package/dist/engine/facilitate/plan-parser.js.map +1 -0
  44. package/dist/engine/facilitate/router.d.ts +6 -0
  45. package/dist/engine/facilitate/router.d.ts.map +1 -0
  46. package/dist/engine/facilitate/router.js +71 -0
  47. package/dist/engine/facilitate/router.js.map +1 -0
  48. package/dist/engine/hooks/context-injector.d.ts +11 -0
  49. package/dist/engine/hooks/context-injector.d.ts.map +1 -0
  50. package/dist/engine/hooks/context-injector.js +163 -0
  51. package/dist/engine/hooks/context-injector.js.map +1 -0
  52. package/dist/engine/hooks/hook-templates.d.ts +16 -0
  53. package/dist/engine/hooks/hook-templates.d.ts.map +1 -0
  54. package/dist/engine/hooks/hook-templates.js +148 -0
  55. package/dist/engine/hooks/hook-templates.js.map +1 -0
  56. package/dist/engine/hooks/plan-mode-detector.d.ts +27 -0
  57. package/dist/engine/hooks/plan-mode-detector.d.ts.map +1 -0
  58. package/dist/engine/hooks/plan-mode-detector.js +68 -0
  59. package/dist/engine/hooks/plan-mode-detector.js.map +1 -0
  60. package/dist/engine/hooks/plan-mode-scripts.d.ts +10 -0
  61. package/dist/engine/hooks/plan-mode-scripts.d.ts.map +1 -0
  62. package/dist/engine/hooks/plan-mode-scripts.js +45 -0
  63. package/dist/engine/hooks/plan-mode-scripts.js.map +1 -0
  64. package/dist/engine/model-router/complexity-analyzer.d.ts +9 -1
  65. package/dist/engine/model-router/complexity-analyzer.d.ts.map +1 -1
  66. package/dist/engine/model-router/complexity-analyzer.js +44 -1
  67. package/dist/engine/model-router/complexity-analyzer.js.map +1 -1
  68. package/dist/engine/model-router/rules-engine.d.ts.map +1 -1
  69. package/dist/engine/model-router/rules-engine.js +14 -1
  70. package/dist/engine/model-router/rules-engine.js.map +1 -1
  71. package/dist/engine/nfr-profile-detector.d.ts.map +1 -1
  72. package/dist/engine/nfr-profile-detector.js +2 -1
  73. package/dist/engine/nfr-profile-detector.js.map +1 -1
  74. package/dist/engine/spec-coverage/core.js.map +1 -1
  75. package/dist/engine/spec-migrator/frontmatter-parser.d.ts.map +1 -1
  76. package/dist/engine/spec-migrator/frontmatter-parser.js.map +1 -1
  77. package/dist/engine/spec-summary-html.d.ts.map +1 -1
  78. package/dist/engine/spec-summary-html.js +1 -1
  79. package/dist/engine/spec-summary-html.js.map +1 -1
  80. package/dist/engine/team-planner/writer-reviewer.d.ts +12 -0
  81. package/dist/engine/team-planner/writer-reviewer.d.ts.map +1 -0
  82. package/dist/engine/team-planner/writer-reviewer.js +48 -0
  83. package/dist/engine/team-planner/writer-reviewer.js.map +1 -0
  84. package/dist/engine/tool-groups/group-manager.js.map +1 -1
  85. package/dist/index.js +11 -1
  86. package/dist/index.js.map +1 -1
  87. package/dist/storage/drift-cache-store.js.map +1 -1
  88. package/dist/storage/error-telemetry-store.js.map +1 -1
  89. package/dist/storage/federation-store.js.map +1 -1
  90. package/dist/storage/global-store.js.map +1 -1
  91. package/dist/storage/ideas-store.d.ts.map +1 -1
  92. package/dist/storage/ideas-store.js.map +1 -1
  93. package/dist/storage/living-dashboard-store.js.map +1 -1
  94. package/dist/storage/metrics-store.js.map +1 -1
  95. package/dist/storage/rbac-store.js.map +1 -1
  96. package/dist/storage/spec-observability-store.js.map +1 -1
  97. package/dist/storage/worker-metrics-store.js.map +1 -1
  98. package/dist/storage/worker-store.js.map +1 -1
  99. package/dist/tools/checkpoint-handler.d.ts.map +1 -1
  100. package/dist/tools/checkpoint-handler.js +11 -0
  101. package/dist/tools/checkpoint-handler.js.map +1 -1
  102. package/dist/tools/clarify-requirements/interview-mode.d.ts +42 -0
  103. package/dist/tools/clarify-requirements/interview-mode.d.ts.map +1 -0
  104. package/dist/tools/clarify-requirements/interview-mode.js +342 -0
  105. package/dist/tools/clarify-requirements/interview-mode.js.map +1 -0
  106. package/dist/tools/configure-workers-handler.d.ts.map +1 -1
  107. package/dist/tools/configure-workers-handler.js +81 -0
  108. package/dist/tools/configure-workers-handler.js.map +1 -1
  109. package/dist/tools/facilitate.d.ts +1 -5
  110. package/dist/tools/facilitate.d.ts.map +1 -1
  111. package/dist/tools/facilitate.js +100 -23
  112. package/dist/tools/facilitate.js.map +1 -1
  113. package/dist/tools/generate-automation-guide.d.ts +10 -0
  114. package/dist/tools/generate-automation-guide.d.ts.map +1 -0
  115. package/dist/tools/generate-automation-guide.js +222 -0
  116. package/dist/tools/generate-automation-guide.js.map +1 -0
  117. package/dist/tools/generate-batch-script.d.ts +27 -0
  118. package/dist/tools/generate-batch-script.d.ts.map +1 -0
  119. package/dist/tools/generate-batch-script.js +77 -0
  120. package/dist/tools/generate-batch-script.js.map +1 -0
  121. package/dist/tools/generate-sub-agent.d.ts.map +1 -1
  122. package/dist/tools/generate-sub-agent.js +16 -2
  123. package/dist/tools/generate-sub-agent.js.map +1 -1
  124. package/dist/tools/git/branch-ops.d.ts +18 -0
  125. package/dist/tools/git/branch-ops.d.ts.map +1 -1
  126. package/dist/tools/git/branch-ops.js +121 -0
  127. package/dist/tools/git/branch-ops.js.map +1 -1
  128. package/dist/tools/git/pr-ops.d.ts.map +1 -1
  129. package/dist/tools/git/pr-ops.js +7 -0
  130. package/dist/tools/git/pr-ops.js.map +1 -1
  131. package/dist/tools/init-project/git-setup.d.ts.map +1 -1
  132. package/dist/tools/init-project/git-setup.js.map +1 -1
  133. package/dist/tools/init-project/handler.d.ts.map +1 -1
  134. package/dist/tools/init-project/handler.js +5 -2
  135. package/dist/tools/init-project/handler.js.map +1 -1
  136. package/dist/tools/init-project/hooks-configurator.d.ts +17 -0
  137. package/dist/tools/init-project/hooks-configurator.d.ts.map +1 -0
  138. package/dist/tools/init-project/hooks-configurator.js +102 -0
  139. package/dist/tools/init-project/hooks-configurator.js.map +1 -0
  140. package/dist/tools/init-project/lifecycle-helpers.d.ts.map +1 -1
  141. package/dist/tools/init-project/lifecycle-helpers.js +1 -1
  142. package/dist/tools/init-project/lifecycle-helpers.js.map +1 -1
  143. package/dist/tools/init-project/migration-runner.d.ts.map +1 -1
  144. package/dist/tools/init-project/migration-runner.js +1 -1
  145. package/dist/tools/init-project/migration-runner.js.map +1 -1
  146. package/dist/tools/init-project/planu-workflow-generator.d.ts +21 -0
  147. package/dist/tools/init-project/planu-workflow-generator.d.ts.map +1 -0
  148. package/dist/tools/init-project/planu-workflow-generator.js +73 -0
  149. package/dist/tools/init-project/planu-workflow-generator.js.map +1 -0
  150. package/dist/tools/init-project/rules-generator.d.ts +15 -0
  151. package/dist/tools/init-project/rules-generator.d.ts.map +1 -0
  152. package/dist/tools/init-project/rules-generator.js +110 -0
  153. package/dist/tools/init-project/rules-generator.js.map +1 -0
  154. package/dist/tools/init-project/scaffold-writer.d.ts +3 -0
  155. package/dist/tools/init-project/scaffold-writer.d.ts.map +1 -1
  156. package/dist/tools/init-project/scaffold-writer.js +33 -0
  157. package/dist/tools/init-project/scaffold-writer.js.map +1 -1
  158. package/dist/tools/integrate-pm.js.map +1 -1
  159. package/dist/tools/license-status.js +4 -4
  160. package/dist/tools/license-status.js.map +1 -1
  161. package/dist/tools/list-backlog-handler.d.ts.map +1 -1
  162. package/dist/tools/list-backlog-handler.js +4 -1
  163. package/dist/tools/list-backlog-handler.js.map +1 -1
  164. package/dist/tools/list-sessions.d.ts.map +1 -1
  165. package/dist/tools/list-sessions.js +8 -0
  166. package/dist/tools/list-sessions.js.map +1 -1
  167. package/dist/tools/manage-git.d.ts.map +1 -1
  168. package/dist/tools/manage-git.js +15 -1
  169. package/dist/tools/manage-git.js.map +1 -1
  170. package/dist/tools/orchestrate/state.js.map +1 -1
  171. package/dist/tools/promote-idea-handler.d.ts.map +1 -1
  172. package/dist/tools/promote-idea-handler.js +1 -3
  173. package/dist/tools/promote-idea-handler.js.map +1 -1
  174. package/dist/tools/recommend-model-handler.d.ts.map +1 -1
  175. package/dist/tools/recommend-model-handler.js +7 -0
  176. package/dist/tools/recommend-model-handler.js.map +1 -1
  177. package/dist/tools/register-backlog-tools.d.ts.map +1 -1
  178. package/dist/tools/register-backlog-tools.js +3 -13
  179. package/dist/tools/register-backlog-tools.js.map +1 -1
  180. package/dist/tools/register-facilitator-tools.d.ts.map +1 -1
  181. package/dist/tools/register-facilitator-tools.js +12 -7
  182. package/dist/tools/register-facilitator-tools.js.map +1 -1
  183. package/dist/tools/register-generate-automation-guide.d.ts +3 -0
  184. package/dist/tools/register-generate-automation-guide.d.ts.map +1 -0
  185. package/dist/tools/register-generate-automation-guide.js +10 -0
  186. package/dist/tools/register-generate-automation-guide.js.map +1 -0
  187. package/dist/tools/register-generate-batch-script.d.ts +3 -0
  188. package/dist/tools/register-generate-batch-script.d.ts.map +1 -0
  189. package/dist/tools/register-generate-batch-script.js +10 -0
  190. package/dist/tools/register-generate-batch-script.js.map +1 -0
  191. package/dist/tools/register-hooks-tools.d.ts.map +1 -1
  192. package/dist/tools/register-hooks-tools.js +27 -0
  193. package/dist/tools/register-hooks-tools.js.map +1 -1
  194. package/dist/tools/register-platform-tools/design-stack-tools.d.ts.map +1 -1
  195. package/dist/tools/register-platform-tools/design-stack-tools.js +4 -0
  196. package/dist/tools/register-platform-tools/design-stack-tools.js.map +1 -1
  197. package/dist/tools/restore-session.d.ts.map +1 -1
  198. package/dist/tools/restore-session.js +10 -0
  199. package/dist/tools/restore-session.js.map +1 -1
  200. package/dist/tools/schemas/ide-config.d.ts +2 -2
  201. package/dist/tools/schemas/workers-schema.d.ts +1 -0
  202. package/dist/tools/schemas/workers-schema.d.ts.map +1 -1
  203. package/dist/tools/schemas/workers-schema.js +10 -2
  204. package/dist/tools/schemas/workers-schema.js.map +1 -1
  205. package/dist/tools/start-hooks.d.ts.map +1 -1
  206. package/dist/tools/start-hooks.js +104 -1
  207. package/dist/tools/start-hooks.js.map +1 -1
  208. package/dist/tools/status-handler.d.ts.map +1 -1
  209. package/dist/tools/status-handler.js +9 -0
  210. package/dist/tools/status-handler.js.map +1 -1
  211. package/dist/types/analysis.d.ts +8 -0
  212. package/dist/types/analysis.d.ts.map +1 -1
  213. package/dist/types/batch-script.d.ts +36 -0
  214. package/dist/types/batch-script.d.ts.map +1 -0
  215. package/dist/types/batch-script.js +3 -0
  216. package/dist/types/batch-script.js.map +1 -0
  217. package/dist/types/ci.d.ts +4 -0
  218. package/dist/types/ci.d.ts.map +1 -1
  219. package/dist/types/common/tech-enums.d.ts +1 -1
  220. package/dist/types/common/tech-enums.d.ts.map +1 -1
  221. package/dist/types/execution.d.ts +9 -0
  222. package/dist/types/execution.d.ts.map +1 -1
  223. package/dist/types/facilitator.d.ts +67 -0
  224. package/dist/types/facilitator.d.ts.map +1 -1
  225. package/dist/types/file-hooks.d.ts +7 -0
  226. package/dist/types/file-hooks.d.ts.map +1 -1
  227. package/dist/types/file-hooks.js +0 -1
  228. package/dist/types/file-hooks.js.map +1 -1
  229. package/dist/types/git.d.ts +12 -0
  230. package/dist/types/git.d.ts.map +1 -1
  231. package/dist/types/hooks.d.ts +77 -0
  232. package/dist/types/hooks.d.ts.map +1 -1
  233. package/dist/types/index.d.ts +1 -0
  234. package/dist/types/index.d.ts.map +1 -1
  235. package/dist/types/index.js +1 -0
  236. package/dist/types/index.js.map +1 -1
  237. package/dist/types/model-routing.d.ts +16 -0
  238. package/dist/types/model-routing.d.ts.map +1 -1
  239. package/dist/types/project/planu-config.d.ts +6 -0
  240. package/dist/types/project/planu-config.d.ts.map +1 -1
  241. package/dist/types/session.d.ts +2 -0
  242. package/dist/types/session.d.ts.map +1 -1
  243. package/dist/types/stack/recommend.d.ts +1 -0
  244. package/dist/types/stack/recommend.d.ts.map +1 -1
  245. package/dist/types/status.d.ts +7 -0
  246. package/dist/types/status.d.ts.map +1 -1
  247. package/dist/types/team-planner.d.ts +18 -0
  248. package/dist/types/team-planner.d.ts.map +1 -1
  249. package/dist/types/workers.d.ts +1 -1
  250. package/dist/types/workers.d.ts.map +1 -1
  251. package/package.json +10 -10
  252. package/src/config/license-plans.json +3 -1
@@ -1,13 +1,15 @@
1
1
  import { scoreAmbiguity, shouldBlock } from '../engine/ambiguity-detector.js';
2
2
  import { setFocus, getFocus, checkFocusDrift, parseChangeFocusDirective, } from '../engine/focus-tracker.js';
3
3
  import { getParadigmRecommendations, formatParadigmObservations, } from '../engine/paradigm-advisor.js';
4
+ import { classifyIntent } from '../engine/facilitate/intent-classifier.js';
5
+ import { loadContext } from '../engine/facilitate/context-loader.js';
6
+ import { route } from '../engine/facilitate/router.js';
7
+ import { parsePlanContent } from '../engine/facilitate/plan-parser.js';
4
8
  // ---------------------------------------------------------------------------
5
- // Scenario detection
9
+ // Scenario detection (SPEC-037 legacy — kept for backward compatibility)
6
10
  // ---------------------------------------------------------------------------
7
11
  function detectScenario(description) {
8
12
  const lower = description.toLowerCase();
9
- // Concrete problem indicators — check before existing_project to avoid
10
- // false positives with phrases like "existing spec"
11
13
  if (lower.includes('how to') ||
12
14
  lower.includes('how do i') ||
13
15
  lower.includes('what tool') ||
@@ -17,13 +19,11 @@ function detectScenario(description) {
17
19
  lower.includes('problem')) {
18
20
  return 'concrete_problem';
19
21
  }
20
- // Existing project indicators
21
22
  if (lower.includes('already have') ||
22
23
  lower.includes('my project') ||
23
24
  lower.includes('our project') ||
24
25
  /existing project/i.test(description) ||
25
- lower.includes('/') // path-like input
26
- ) {
26
+ lower.includes('/')) {
27
27
  return 'existing_project';
28
28
  }
29
29
  return 'new_project';
@@ -44,7 +44,6 @@ function buildNewProjectResponse(step, collectedInfo) {
44
44
  : `Got it! ${Object.values(collectedInfo).join(', ')}\n\n`;
45
45
  return `${intro}Step ${step + 1}/3: ${question}`;
46
46
  }
47
- // All 3 steps complete — suggest create_spec
48
47
  const info = Object.values(collectedInfo).join(' | ');
49
48
  return (`Great — I have enough context to generate your spec.\n\n` +
50
49
  `Summary: ${info}\n\n` +
@@ -97,10 +96,6 @@ function buildConcreteProblemResponse(description) {
97
96
  // ---------------------------------------------------------------------------
98
97
  // Paradigm observations (SPEC-035b)
99
98
  // ---------------------------------------------------------------------------
100
- /**
101
- * Builds paradigm expert voice observations from a pre-computed ParadigmReport.
102
- * Degrades gracefully when no detection data is available.
103
- */
104
99
  export function buildParadigmObservations(paradigmReport) {
105
100
  if (!paradigmReport) {
106
101
  return '';
@@ -145,11 +140,97 @@ function generateExpertObservations(description) {
145
140
  return observations;
146
141
  }
147
142
  // ---------------------------------------------------------------------------
143
+ // SPEC-264: Routing suggestion text
144
+ // ---------------------------------------------------------------------------
145
+ function buildRoutingSuggestion(decision) {
146
+ switch (decision.action) {
147
+ case 'resume':
148
+ return `Resume work on spec ${decision.specId} — it matches your request and is in progress.`;
149
+ case 'create-spec':
150
+ return `Create a new spec for this ${decision.type} request using \`create_spec\`.`;
151
+ case 'direct':
152
+ return decision.reason;
153
+ case 'clarify':
154
+ return decision.question;
155
+ }
156
+ }
157
+ // ---------------------------------------------------------------------------
158
+ // SPEC-264: Smart orchestrator path
159
+ // ---------------------------------------------------------------------------
160
+ async function runSmartOrchestrator(description, projectId, planContent) {
161
+ // 1. Classify intent
162
+ const intent = classifyIntent(description);
163
+ // 2. Load context from project data
164
+ const projectPath = projectId ?? process.cwd();
165
+ const ctx = await loadContext(projectPath, intent.keywords);
166
+ // 3. Handle Plan Mode content
167
+ let parsedPlan = null;
168
+ let effectiveDescription = description;
169
+ if (planContent) {
170
+ parsedPlan = parsePlanContent(planContent);
171
+ if (parsedPlan) {
172
+ effectiveDescription =
173
+ `${parsedPlan.title}: ` + parsedPlan.acceptanceCriteria.slice(0, 3).join('; ');
174
+ }
175
+ }
176
+ // 4. Route
177
+ const decision = route(intent, ctx, effectiveDescription);
178
+ // 5. Build compact response (≤150 tokens main content)
179
+ const result = {
180
+ action: 'facilitate',
181
+ routing: decision,
182
+ context: {
183
+ activeCount: ctx.activeSpecs.length,
184
+ relatedFound: ctx.relatedSpecs.map((s) => s.id),
185
+ },
186
+ intent: {
187
+ type: intent.type,
188
+ complexity: intent.complexity,
189
+ confidence: intent.confidence,
190
+ },
191
+ suggestion: buildRoutingSuggestion(decision),
192
+ };
193
+ if (parsedPlan) {
194
+ result.parsedPlan = {
195
+ title: parsedPlan.title,
196
+ acCount: parsedPlan.acceptanceCriteria.length,
197
+ estimatedComplexity: parsedPlan.estimatedComplexity,
198
+ };
199
+ }
200
+ return result;
201
+ }
202
+ // ---------------------------------------------------------------------------
148
203
  // Main handler
149
204
  // ---------------------------------------------------------------------------
150
- export function handleFacilitate(params) {
151
- const { description, projectId, sessionId, scenario: explicitScenario, collectedInfo = {}, step = 0, targetTool, checkFocus = false, changeFocus, paradigmReport, } = params;
205
+ export async function handleFacilitate(params) {
206
+ const { description, projectId, sessionId, scenario: explicitScenario, collectedInfo = {}, step = 0, targetTool, checkFocus = false, changeFocus, paradigmReport, planContent, } = params;
152
207
  const sessionKey = sessionId ?? projectId ?? 'default';
208
+ // SPEC-264: When planContent provided OR no explicit scenario/control params given,
209
+ // use the smart orchestrator path.
210
+ const useSmartOrchestrator = planContent !== undefined ||
211
+ (explicitScenario === undefined &&
212
+ targetTool === undefined &&
213
+ !checkFocus &&
214
+ changeFocus === undefined);
215
+ if (useSmartOrchestrator) {
216
+ try {
217
+ const orchestratorResult = await runSmartOrchestrator(description, projectId, planContent);
218
+ const observations = generateExpertObservations(description);
219
+ const paradigmObs = buildParadigmObservations(paradigmReport);
220
+ const merged = { ...orchestratorResult };
221
+ if (observations.length > 0) {
222
+ merged.expertObservations = observations;
223
+ }
224
+ if (paradigmObs) {
225
+ merged.paradigmObservations = paradigmObs;
226
+ }
227
+ return ok(merged);
228
+ }
229
+ catch (err) {
230
+ const message = err instanceof Error ? err.message : String(err);
231
+ return ok({ action: 'facilitate', error: message, fallback: true });
232
+ }
233
+ }
153
234
  try {
154
235
  // --- Focus change directive ---
155
236
  const changeFocusText = changeFocus ?? parseChangeFocusDirective(description);
@@ -204,9 +285,8 @@ export function handleFacilitate(params) {
204
285
  message: `Request is clear enough for \`${targetTool}\`. Proceed.`,
205
286
  });
206
287
  }
207
- // --- Main facilitate flow ---
288
+ // --- Main facilitate flow (legacy scenario-based) ---
208
289
  const scenario = explicitScenario ?? detectScenario(description);
209
- // Set initial focus for new sessions
210
290
  const existingFocus = getFocus(sessionKey);
211
291
  if (!existingFocus) {
212
292
  setFocus(sessionKey, {
@@ -214,12 +294,10 @@ export function handleFacilitate(params) {
214
294
  startedAt: new Date().toISOString(),
215
295
  });
216
296
  }
217
- // Generate expert observations (non-blocking)
218
297
  const observations = generateExpertObservations(description);
219
298
  let guidance;
220
299
  switch (scenario) {
221
300
  case 'new_project': {
222
- // Merge current description into collectedInfo for current step
223
301
  const updatedInfo = step === 0
224
302
  ? { ...collectedInfo, step0: description }
225
303
  : { ...collectedInfo, [`step${step}`]: description };
@@ -233,22 +311,21 @@ export function handleFacilitate(params) {
233
311
  guidance = buildConcreteProblemResponse(description);
234
312
  break;
235
313
  }
236
- const result = {
314
+ const legacyResult = {
237
315
  action: 'facilitate',
238
316
  scenario,
239
317
  step,
240
318
  guidance,
241
319
  };
242
320
  if (observations.length > 0) {
243
- result.expertObservations = observations;
244
- result.expertNote = 'Expert observations added below — these do not block execution.';
321
+ legacyResult.expertObservations = observations;
322
+ legacyResult.expertNote = 'Expert observations added below — these do not block execution.';
245
323
  }
246
- // SPEC-035b: Append paradigm expert voice observations when detection data is available
247
324
  const paradigmObservations = buildParadigmObservations(paradigmReport);
248
325
  if (paradigmObservations) {
249
- result.paradigmObservations = paradigmObservations;
326
+ legacyResult.paradigmObservations = paradigmObservations;
250
327
  }
251
- return ok(result);
328
+ return ok(legacyResult);
252
329
  }
253
330
  catch (error) {
254
331
  const message = error instanceof Error ? error.message : String(error);
@@ -1 +1 @@
1
- {"version":3,"file":"facilitate.js","sourceRoot":"","sources":["../../src/tools/facilitate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"facilitate.js","sourceRoot":"","sources":["../../src/tools/facilitate.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAC9E,OAAO,EACL,QAAQ,EACR,QAAQ,EACR,eAAe,EACf,yBAAyB,GAC1B,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,0BAA0B,EAC1B,0BAA0B,GAC3B,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,2CAA2C,CAAC;AAC3E,OAAO,EAAE,WAAW,EAAE,MAAM,wCAAwC,CAAC;AACrE,OAAO,EAAE,KAAK,EAAE,MAAM,gCAAgC,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AAEvE,8EAA8E;AAC9E,yEAAyE;AACzE,8EAA8E;AAE9E,SAAS,cAAc,CAAC,WAAmB;IACzC,MAAM,KAAK,GAAG,WAAW,CAAC,WAAW,EAAE,CAAC;IAExC,IACE,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC;QACxB,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC;QAC1B,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC;QAC3B,KAAK,CAAC,QAAQ,CAAC,kBAAkB,CAAC;QAClC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;QACrB,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC;QACvB,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,EACzB,CAAC;QACD,OAAO,kBAAkB,CAAC;IAC5B,CAAC;IAED,IACE,KAAK,CAAC,QAAQ,CAAC,cAAc,CAAC;QAC9B,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC;QAC5B,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC;QAC7B,mBAAmB,CAAC,IAAI,CAAC,WAAW,CAAC;QACrC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EACnB,CAAC;QACD,OAAO,kBAAkB,CAAC;IAC5B,CAAC;IAED,OAAO,aAAa,CAAC;AACvB,CAAC;AAED,8EAA8E;AAC9E,0CAA0C;AAC1C,8EAA8E;AAE9E,MAAM,iBAAiB,GAAG;IACxB,gFAAgF;IAChF,8FAA8F;IAC9F,sFAAsF;CACvF,CAAC;AAEF,SAAS,uBAAuB,CAAC,IAAY,EAAE,aAAqC;IAClF,IAAI,IAAI,GAAG,iBAAiB,CAAC,MAAM,EAAE,CAAC;QACpC,MAAM,QAAQ,GAAG,iBAAiB,CAAC,IAAI,CAAC,IAAI,iBAAiB,CAAC,CAAC,CAAC,CAAC;QACjE,MAAM,KAAK,GACT,IAAI,KAAK,CAAC;YACR,CAAC,CAAC,uFAAuF;YACzF,CAAC,CAAC,WAAW,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;QAC/D,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,OAAO,QAAQ,EAAE,CAAC;IACnD,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACtD,OAAO,CACL,0DAA0D;QAC1D,YAAY,IAAI,MAAM;QACtB,0DAA0D;QAC1D,IAAI,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ;QACnD,yEAAyE,CAC1E,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,4BAA4B;AAC5B,8EAA8E;AAE9E,SAAS,4BAA4B,CAAC,WAAmB;IACvD,OAAO,CACL,4CAA4C;QAC5C,6CAA6C;QAC7C,sEAAsE;QACtE,kDAAkD;QAClD,sCAAsC;QACtC,sBAAsB,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CACnD,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,4BAA4B;AAC5B,8EAA8E;AAE9E,MAAM,eAAe,GAA+B;IAClD,CAAC,iBAAiB,EAAE,aAAa,EAAE,0BAA0B,CAAC;IAC9D,CAAC,UAAU,EAAE,UAAU,EAAE,0BAA0B,CAAC;IACpD,CAAC,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,CAAC;IAC7C,CAAC,eAAe,EAAE,eAAe,EAAE,wBAAwB,CAAC;IAC5D,CAAC,gBAAgB,EAAE,cAAc,EAAE,mBAAmB,CAAC;IACvD,CAAC,UAAU,EAAE,UAAU,EAAE,iBAAiB,CAAC;IAC3C,CAAC,qBAAqB,EAAE,eAAe,EAAE,0BAA0B,CAAC;IACpE,CAAC,sBAAsB,EAAE,oBAAoB,EAAE,sBAAsB,CAAC;IACtE,CAAC,yBAAyB,EAAE,yBAAyB,EAAE,4BAA4B,CAAC;IACpF,CAAC,YAAY,EAAE,oBAAoB,EAAE,sBAAsB,CAAC;CAC7D,CAAC;AAEF,SAAS,4BAA4B,CAAC,WAAmB;IACvD,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;IACnE,IAAI,KAAK,EAAE,CAAC;QACV,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,GAAG,KAAK,CAAC;QAC/B,OAAO,CACL,8BAA8B,MAAM,OAAO;YAC3C,uBAAuB,IAAI,QAAQ;YACnC,UAAU,IAAI,sDAAsD,CACrE,CAAC;IACJ,CAAC;IACD,OAAO,CACL,mEAAmE;QACnE,qDAAqD;QACrD,2DAA2D;QAC3D,6CAA6C;QAC7C,gDAAgD;QAChD,oDAAoD;QACpD,yCAAyC,CAC1C,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,oCAAoC;AACpC,8EAA8E;AAE9E,MAAM,UAAU,yBAAyB,CACvC,cAAiD;IAEjD,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,MAAM,eAAe,GAAG,0BAA0B,CAAC,cAAc,CAAC,CAAC;IACnE,OAAO,0BAA0B,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;AAC3D,CAAC;AAED,8EAA8E;AAC9E,gCAAgC;AAChC,8EAA8E;AAE9E,SAAS,0BAA0B,CAAC,WAAmB;IACrD,MAAM,YAAY,GAAwB,EAAE,CAAC;IAC7C,MAAM,KAAK,GAAG,WAAW,CAAC,WAAW,EAAE,CAAC;IAExC,IAAI,gCAAgC,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;QACvD,YAAY,CAAC,IAAI,CAAC;YAChB,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,8FAA8F;YACpG,MAAM,EAAE,iEAAiE;SAC1E,CAAC,CAAC;IACL,CAAC;IAED,IAAI,qCAAqC,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;QAC5D,YAAY,CAAC,IAAI,CAAC;YAChB,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,6DAA6D;YACnE,MAAM,EAAE,oFAAoF;SAC7F,CAAC,CAAC;IACL,CAAC;IAED,IAAI,0BAA0B,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC7E,YAAY,CAAC,IAAI,CAAC;YAChB,IAAI,EAAE,YAAY;YAClB,IAAI,EAAE,sEAAsE;YAC5E,MAAM,EAAE,uEAAuE;SAChF,CAAC,CAAC;IACL,CAAC;IAED,IAAI,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;QACtC,YAAY,CAAC,IAAI,CAAC;YAChB,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,mFAAmF;YACzF,MAAM,EAAE,4EAA4E;SACrF,CAAC,CAAC;IACL,CAAC;IAED,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,8EAA8E;AAC9E,oCAAoC;AACpC,8EAA8E;AAE9E,SAAS,sBAAsB,CAAC,QAAuB;IACrD,QAAQ,QAAQ,CAAC,MAAM,EAAE,CAAC;QACxB,KAAK,QAAQ;YACX,OAAO,uBAAuB,QAAQ,CAAC,MAAM,gDAAgD,CAAC;QAChG,KAAK,aAAa;YAChB,OAAO,8BAA8B,QAAQ,CAAC,IAAI,iCAAiC,CAAC;QACtF,KAAK,QAAQ;YACX,OAAO,QAAQ,CAAC,MAAM,CAAC;QACzB,KAAK,SAAS;YACZ,OAAO,QAAQ,CAAC,QAAQ,CAAC;IAC7B,CAAC;AACH,CAAC;AAED,8EAA8E;AAC9E,oCAAoC;AACpC,8EAA8E;AAE9E,KAAK,UAAU,oBAAoB,CACjC,WAAmB,EACnB,SAA6B,EAC7B,WAA+B;IAE/B,qBAAqB;IACrB,MAAM,MAAM,GAAG,cAAc,CAAC,WAAW,CAAC,CAAC;IAE3C,oCAAoC;IACpC,MAAM,WAAW,GAAG,SAAS,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAC/C,MAAM,GAAG,GAAG,MAAM,WAAW,CAAC,WAAW,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;IAE5D,8BAA8B;IAC9B,IAAI,UAAU,GAAwC,IAAI,CAAC;IAC3D,IAAI,oBAAoB,GAAG,WAAW,CAAC;IACvC,IAAI,WAAW,EAAE,CAAC;QAChB,UAAU,GAAG,gBAAgB,CAAC,WAAW,CAAC,CAAC;QAC3C,IAAI,UAAU,EAAE,CAAC;YACf,oBAAoB;gBAClB,GAAG,UAAU,CAAC,KAAK,IAAI,GAAG,UAAU,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnF,CAAC;IACH,CAAC;IAED,WAAW;IACX,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,EAAE,GAAG,EAAE,oBAAoB,CAAC,CAAC;IAE1D,uDAAuD;IACvD,MAAM,MAAM,GAA4B;QACtC,MAAM,EAAE,YAAY;QACpB,OAAO,EAAE,QAAQ;QACjB,OAAO,EAAE;YACP,WAAW,EAAE,GAAG,CAAC,WAAW,CAAC,MAAM;YACnC,YAAY,EAAE,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAChD;QACD,MAAM,EAAE;YACN,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,UAAU,EAAE,MAAM,CAAC,UAAU;SAC9B;QACD,UAAU,EAAE,sBAAsB,CAAC,QAAQ,CAAC;KAC7C,CAAC;IAEF,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,CAAC,UAAU,GAAG;YAClB,KAAK,EAAE,UAAU,CAAC,KAAK;YACvB,OAAO,EAAE,UAAU,CAAC,kBAAkB,CAAC,MAAM;YAC7C,mBAAmB,EAAE,UAAU,CAAC,mBAAmB;SACpD,CAAC;IACJ,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,8EAA8E;AAC9E,eAAe;AACf,8EAA8E;AAE9E,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,MAAuB;IAC5D,MAAM,EACJ,WAAW,EACX,SAAS,EACT,SAAS,EACT,QAAQ,EAAE,gBAAgB,EAC1B,aAAa,GAAG,EAAE,EAClB,IAAI,GAAG,CAAC,EACR,UAAU,EACV,UAAU,GAAG,KAAK,EAClB,WAAW,EACX,cAAc,EACd,WAAW,GACZ,GAAG,MAAM,CAAC;IAEX,MAAM,UAAU,GAAG,SAAS,IAAI,SAAS,IAAI,SAAS,CAAC;IAEvD,oFAAoF;IACpF,mCAAmC;IACnC,MAAM,oBAAoB,GACxB,WAAW,KAAK,SAAS;QACzB,CAAC,gBAAgB,KAAK,SAAS;YAC7B,UAAU,KAAK,SAAS;YACxB,CAAC,UAAU;YACX,WAAW,KAAK,SAAS,CAAC,CAAC;IAE/B,IAAI,oBAAoB,EAAE,CAAC;QACzB,IAAI,CAAC;YACH,MAAM,kBAAkB,GAAG,MAAM,oBAAoB,CAAC,WAAW,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;YAC3F,MAAM,YAAY,GAAG,0BAA0B,CAAC,WAAW,CAAC,CAAC;YAC7D,MAAM,WAAW,GAAG,yBAAyB,CAAC,cAAc,CAAC,CAAC;YAC9D,MAAM,MAAM,GAA4B,EAAE,GAAG,kBAAkB,EAAE,CAAC;YAClE,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC5B,MAAM,CAAC,kBAAkB,GAAG,YAAY,CAAC;YAC3C,CAAC;YACD,IAAI,WAAW,EAAE,CAAC;gBAChB,MAAM,CAAC,oBAAoB,GAAG,WAAW,CAAC;YAC5C,CAAC;YACD,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC;QACpB,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACjE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QACtE,CAAC;IACH,CAAC;IAED,IAAI,CAAC;QACH,iCAAiC;QACjC,MAAM,eAAe,GAAG,WAAW,IAAI,yBAAyB,CAAC,WAAW,CAAC,CAAC;QAC9E,IAAI,eAAe,EAAE,CAAC;YACpB,MAAM,QAAQ,GAAe;gBAC3B,SAAS,EAAE,eAAe;gBAC1B,cAAc,EAAE,UAAU;gBAC1B,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aACpC,CAAC;YACF,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;YAC/B,OAAO,EAAE,CAAC;gBACR,MAAM,EAAE,eAAe;gBACvB,SAAS,EAAE,eAAe;gBAC1B,OAAO,EAAE,sBAAsB,eAAe,sEAAsE;aACrH,CAAC,CAAC;QACL,CAAC;QAED,4BAA4B;QAC5B,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,KAAK,GAAG,eAAe,CAAC,UAAU,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC;YACnE,IAAI,KAAK,EAAE,CAAC;gBACV,OAAO,EAAE,CAAC;oBACR,MAAM,EAAE,sBAAsB;oBAC9B,KAAK;oBACL,OAAO,EAAE,KAAK,CAAC,eAAe;oBAC9B,YAAY,EAAE,IAAI;iBACnB,CAAC,CAAC;YACL,CAAC;YACD,OAAO,EAAE,CAAC;gBACR,MAAM,EAAE,eAAe;gBACvB,YAAY,EAAE,QAAQ,CAAC,UAAU,CAAC;gBAClC,OAAO,EAAE,oDAAoD;aAC9D,CAAC,CAAC;QACL,CAAC;QAED,8CAA8C;QAC9C,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,SAAS,GAAG,cAAc,CAAC,WAAW,CAAC,CAAC;YAC9C,MAAM,OAAO,GAAG,WAAW,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;YACnD,IAAI,OAAO,EAAE,CAAC;gBACZ,OAAO,EAAE,CAAC;oBACR,MAAM,EAAE,iBAAiB;oBACzB,KAAK,EAAE,SAAS,CAAC,KAAK;oBACtB,KAAK,EAAE,SAAS,CAAC,KAAK;oBACtB,iBAAiB,EAAE,SAAS,CAAC,iBAAiB;oBAC9C,QAAQ,EAAE,SAAS,CAAC,qBAAqB;oBACzC,OAAO,EAAE,oBAAoB,UAAU,sBAAsB,SAAS,CAAC,qBAAqB,EAAE;iBAC/F,CAAC,CAAC;YACL,CAAC;YACD,OAAO,EAAE,CAAC;gBACR,MAAM,EAAE,iBAAiB;gBACzB,KAAK,EAAE,SAAS,CAAC,KAAK;gBACtB,KAAK,EAAE,SAAS,CAAC,KAAK;gBACtB,OAAO,EAAE,iCAAiC,UAAU,cAAc;aACnE,CAAC,CAAC;QACL,CAAC;QAED,uDAAuD;QACvD,MAAM,QAAQ,GAAG,gBAAgB,IAAI,cAAc,CAAC,WAAW,CAAC,CAAC;QAEjE,MAAM,aAAa,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC;QAC3C,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,QAAQ,CAAC,UAAU,EAAE;gBACnB,SAAS,EAAE,WAAW;gBACtB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aACpC,CAAC,CAAC;QACL,CAAC;QAED,MAAM,YAAY,GAAG,0BAA0B,CAAC,WAAW,CAAC,CAAC;QAE7D,IAAI,QAAgB,CAAC;QAErB,QAAQ,QAAQ,EAAE,CAAC;YACjB,KAAK,aAAa,CAAC,CAAC,CAAC;gBACnB,MAAM,WAAW,GACf,IAAI,KAAK,CAAC;oBACR,CAAC,CAAC,EAAE,GAAG,aAAa,EAAE,KAAK,EAAE,WAAW,EAAE;oBAC1C,CAAC,CAAC,EAAE,GAAG,aAAa,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC;gBACzD,QAAQ,GAAG,uBAAuB,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;gBACtD,MAAM;YACR,CAAC;YACD,KAAK,kBAAkB;gBACrB,QAAQ,GAAG,4BAA4B,CAAC,WAAW,CAAC,CAAC;gBACrD,MAAM;YACR,KAAK,kBAAkB;gBACrB,QAAQ,GAAG,4BAA4B,CAAC,WAAW,CAAC,CAAC;gBACrD,MAAM;QACV,CAAC;QAED,MAAM,YAAY,GAA4B;YAC5C,MAAM,EAAE,YAAY;YACpB,QAAQ;YACR,IAAI;YACJ,QAAQ;SACT,CAAC;QAEF,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,YAAY,CAAC,kBAAkB,GAAG,YAAY,CAAC;YAC/C,YAAY,CAAC,UAAU,GAAG,iEAAiE,CAAC;QAC9F,CAAC;QAED,MAAM,oBAAoB,GAAG,yBAAyB,CAAC,cAAc,CAAC,CAAC;QACvE,IAAI,oBAAoB,EAAE,CAAC;YACzB,YAAY,CAAC,oBAAoB,GAAG,oBAAoB,CAAC;QAC3D,CAAC;QAED,OAAO,EAAE,CAAC,YAAY,CAAC,CAAC;IAC1B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;YAC9E,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,EAAE,CAAC,IAA6B;IACvC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;AAC9E,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { z } from 'zod';
2
+ import type { ToolResult } from '../types/index.js';
3
+ export declare const GenerateAutomationGuideInputSchema: z.ZodObject<{
4
+ projectPath: z.ZodString;
5
+ saveToDisk: z.ZodOptional<z.ZodBoolean>;
6
+ includeExamples: z.ZodOptional<z.ZodBoolean>;
7
+ }, z.core.$strip>;
8
+ export type GenerateAutomationGuideInput = z.infer<typeof GenerateAutomationGuideInputSchema>;
9
+ export declare function handleGenerateAutomationGuide(args: GenerateAutomationGuideInput): Promise<ToolResult>;
10
+ //# sourceMappingURL=generate-automation-guide.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-automation-guide.d.ts","sourceRoot":"","sources":["../../src/tools/generate-automation-guide.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAOpD,eAAO,MAAM,kCAAkC;;;;iBAO7C,CAAC;AAEH,MAAM,MAAM,4BAA4B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kCAAkC,CAAC,CAAC;AAiQ9F,wBAAsB,6BAA6B,CACjD,IAAI,EAAE,4BAA4B,GACjC,OAAO,CAAC,UAAU,CAAC,CAiCrB"}
@@ -0,0 +1,222 @@
1
+ // tools/generate-automation-guide.ts — Generate Claude Code automation guide (SPEC-257)
2
+ import { mkdir, writeFile } from 'fs/promises';
3
+ import { dirname } from 'path';
4
+ import { z } from 'zod';
5
+ import { buildClaudeCommand, generateStreamJsonPipeline, getJobPermissionMode, } from '../engine/ci-generator/output-formats.js';
6
+ export const GenerateAutomationGuideInputSchema = z.object({
7
+ projectPath: z.string().describe('Absolute path to the project root'),
8
+ saveToDisk: z.boolean().optional().describe('Save guide to docs/automation-guide.md'),
9
+ includeExamples: z
10
+ .boolean()
11
+ .optional()
12
+ .describe('Include code examples for each section (default: true)'),
13
+ });
14
+ function buildGuide(includeExamples) {
15
+ const sections = [];
16
+ sections.push('# Claude Code Automation Guide');
17
+ sections.push('');
18
+ sections.push('> This guide covers how to automate Claude Code in CI pipelines, scheduled tasks, and non-interactive workflows.');
19
+ sections.push('');
20
+ // Section 1: Non-interactive mode
21
+ sections.push('## 1. Non-Interactive Mode (`claude -p`)');
22
+ sections.push('');
23
+ sections.push('The `-p` flag runs Claude non-interactively — a single prompt, then Claude exits. Ideal for one-off queries and CI pipelines.');
24
+ sections.push('');
25
+ if (includeExamples) {
26
+ sections.push('```bash');
27
+ sections.push(buildClaudeCommand({ prompt: 'Summarize all failing tests', nonInteractive: true }));
28
+ sections.push(buildClaudeCommand({
29
+ prompt: 'Check for security issues',
30
+ nonInteractive: true,
31
+ permissionMode: 'plan',
32
+ }));
33
+ sections.push('```');
34
+ sections.push('');
35
+ }
36
+ // Section 2: Output formats
37
+ sections.push('## 2. Output Formats');
38
+ sections.push('');
39
+ sections.push('Three output formats are available. Choose based on your integration needs:');
40
+ sections.push('');
41
+ sections.push('| Format | Description | Best for |');
42
+ sections.push('|--------|-------------|----------|');
43
+ sections.push('| `text` | Plain text response (default) | Human-readable output, logs |');
44
+ sections.push('| `json` | Full conversation as JSON | Structured parsing, audit trails |');
45
+ sections.push('| `stream-json` | Real-time JSON events streamed | Live dashboards, piping to `jq` |');
46
+ sections.push('');
47
+ if (includeExamples) {
48
+ sections.push('```bash');
49
+ sections.push('# text (default)');
50
+ sections.push(buildClaudeCommand({ prompt: 'List all TODOs', nonInteractive: true }));
51
+ sections.push('');
52
+ sections.push('# json — full conversation object');
53
+ sections.push(buildClaudeCommand({
54
+ prompt: 'Audit dependencies',
55
+ nonInteractive: true,
56
+ outputFormat: 'json',
57
+ }));
58
+ sections.push('');
59
+ sections.push('# stream-json — pipe to jq for filtering');
60
+ sections.push(generateStreamJsonPipeline('Run linter and report issues', '.content'));
61
+ sections.push('```');
62
+ sections.push('');
63
+ }
64
+ // Section 3: Permission modes
65
+ sections.push('## 3. Permission Modes');
66
+ sections.push('');
67
+ sections.push('Permission modes control what actions Claude can take without asking for confirmation:');
68
+ sections.push('');
69
+ sections.push('| Mode | Description | When to use |');
70
+ sections.push('|------|-------------|-------------|');
71
+ sections.push('| `plan` | Read-only analysis — no file writes | Safe exploration, spec validation |');
72
+ sections.push('| `acceptEdits` | Can edit files, asks before running commands | Iterating on code while reviewing |');
73
+ sections.push('| `auto` | Long tasks, reduces prompt fatigue | Requires Team plan + Sonnet/Opus 4.6 |');
74
+ sections.push('| `dontAsk` | Pre-approved tools only, no confirmations | Locked CI environments |');
75
+ sections.push('| `bypassPermissions` | No safety checks — full autonomy | Containers/VMs only |');
76
+ sections.push('');
77
+ sections.push('**Recommended modes per CI job type:**');
78
+ sections.push('');
79
+ sections.push(`- validate → \`${getJobPermissionMode('validate')}\` — safe, read-only spec checks`);
80
+ sections.push(`- lint → \`${getJobPermissionMode('lint')}\` — pre-approved linting tools only`);
81
+ sections.push(`- migrate → \`${getJobPermissionMode('migrate')}\` — automated migrations with Team plan`);
82
+ sections.push(`- container → \`${getJobPermissionMode('container')}\` — full autonomy inside isolated VMs`);
83
+ sections.push(`- review → \`${getJobPermissionMode('review')}\` — edits files while you review commands`);
84
+ sections.push('');
85
+ if (includeExamples) {
86
+ sections.push('```bash');
87
+ sections.push(buildClaudeCommand({
88
+ prompt: 'validate all specs',
89
+ nonInteractive: true,
90
+ permissionMode: 'plan',
91
+ }));
92
+ sections.push('```');
93
+ sections.push('');
94
+ }
95
+ // Section 4: Scheduled tasks
96
+ sections.push('## 4. Scheduled Tasks');
97
+ sections.push('');
98
+ sections.push('Multiple scheduling options exist — choose based on your access requirements:');
99
+ sections.push('');
100
+ sections.push('| Method | Runs when offline | Access to | Best for |');
101
+ sections.push('|--------|-------------------|-----------|----------|');
102
+ sections.push('| **Cloud** (`claude.ai/code`) | Yes | Remote repos only | Background jobs independent of your machine |');
103
+ sections.push('| **Desktop** | No (requires local machine) | Local files, uncommitted changes | Dev-time checks on local work |');
104
+ sections.push('| **GitHub Actions** | Yes | Repo at event time | Repo-event-driven automation |');
105
+ sections.push('| **`/loop`** | No (session only) | Current context | Quick session-scoped repetition |');
106
+ sections.push('');
107
+ sections.push('> **Note**: `/loop` is cancelled when the session exits — not suitable for production automation.');
108
+ sections.push('');
109
+ // Section 5: Fan-out pattern
110
+ sections.push('## 5. Fan-Out Pattern');
111
+ sections.push('');
112
+ sections.push('Process multiple files in parallel by looping with `claude -p` and `--allowedTools`:');
113
+ sections.push('');
114
+ if (includeExamples) {
115
+ sections.push('```bash');
116
+ sections.push('# Fan-out: lint every changed file independently');
117
+ sections.push('for file in $(git diff --name-only HEAD~1); do');
118
+ sections.push(` ${buildClaudeCommand({
119
+ prompt: 'Review this file for issues: $file',
120
+ nonInteractive: true,
121
+ permissionMode: 'plan',
122
+ allowedTools: ['Read', 'Grep'],
123
+ })} &`);
124
+ sections.push('done');
125
+ sections.push('wait # wait for all parallel jobs');
126
+ sections.push('```');
127
+ sections.push('');
128
+ }
129
+ // Section 6: Session resume
130
+ sections.push('## 6. Session Resume');
131
+ sections.push('');
132
+ sections.push('Resume previous Claude sessions to maintain context across invocations:');
133
+ sections.push('');
134
+ sections.push('| Flag | Behavior |');
135
+ sections.push('|------|----------|');
136
+ sections.push('| `--continue` | Resume the most recent session |');
137
+ sections.push('| `--resume <name>` | Resume a named session by identifier |');
138
+ sections.push('| `--from-pr <N>` | Start a session pre-loaded with PR #N context |');
139
+ sections.push('');
140
+ if (includeExamples) {
141
+ sections.push('```bash');
142
+ sections.push('# Continue the last session and run non-interactively');
143
+ sections.push('claude --continue -p "Summarize what was accomplished in the last session"');
144
+ sections.push('');
145
+ sections.push('# Resume a named session');
146
+ sections.push('claude --resume my-migration-session -p "Continue the migration"');
147
+ sections.push('');
148
+ sections.push('# Start from a PR context');
149
+ sections.push('claude --from-pr 42 -p "Review the changes in this PR"');
150
+ sections.push('```');
151
+ sections.push('');
152
+ }
153
+ // Section 7: dontAsk for CI
154
+ sections.push('## 7. `dontAsk` for CI Environments');
155
+ sections.push('');
156
+ sections.push('Use `dontAsk` permission mode in locked CI environments where only pre-approved tools should run. Combined with `--allowedTools`, this gives deterministic, safe automation:');
157
+ sections.push('');
158
+ if (includeExamples) {
159
+ sections.push('```yaml');
160
+ sections.push('# .github/workflows/planu-validate.yml');
161
+ sections.push('name: Planu Spec Validation');
162
+ sections.push('');
163
+ sections.push('on:');
164
+ sections.push(' pull_request:');
165
+ sections.push(' branches: [main, develop]');
166
+ sections.push('');
167
+ sections.push('jobs:');
168
+ sections.push(' validate:');
169
+ sections.push(' name: Validate Specs');
170
+ sections.push(' runs-on: ubuntu-latest');
171
+ sections.push(' steps:');
172
+ sections.push(' - uses: actions/checkout@v4');
173
+ sections.push('');
174
+ sections.push(' - name: Install Claude Code');
175
+ sections.push(' run: npm install -g @anthropic-ai/claude-code');
176
+ sections.push('');
177
+ sections.push(' - name: Validate all specs');
178
+ sections.push(` run: ${buildClaudeCommand({
179
+ prompt: 'validate all specs and report any issues',
180
+ nonInteractive: true,
181
+ permissionMode: 'dontAsk',
182
+ allowedTools: ['Read', 'Glob', 'Grep'],
183
+ })}`);
184
+ sections.push(' env:');
185
+ sections.push(' ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}');
186
+ sections.push('```');
187
+ sections.push('');
188
+ }
189
+ return sections.join('\n');
190
+ }
191
+ export async function handleGenerateAutomationGuide(args) {
192
+ const includeExamples = args.includeExamples ?? true;
193
+ const guide = buildGuide(includeExamples);
194
+ if (args.saveToDisk === true) {
195
+ const outputPath = `${args.projectPath}/docs/automation-guide.md`;
196
+ await mkdir(dirname(outputPath), { recursive: true });
197
+ await writeFile(outputPath, guide, 'utf-8');
198
+ return {
199
+ content: [
200
+ {
201
+ type: 'text',
202
+ text: [
203
+ '## Automation Guide Generated',
204
+ '',
205
+ `Saved to: \`${outputPath}\``,
206
+ '',
207
+ guide,
208
+ ].join('\n'),
209
+ },
210
+ ],
211
+ };
212
+ }
213
+ return {
214
+ content: [
215
+ {
216
+ type: 'text',
217
+ text: guide,
218
+ },
219
+ ],
220
+ };
221
+ }
222
+ //# sourceMappingURL=generate-automation-guide.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-automation-guide.js","sourceRoot":"","sources":["../../src/tools/generate-automation-guide.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import { z } from 'zod';
2
+ import type { BatchScriptInput, ToolResult } from '../types/index.js';
3
+ export declare const GenerateBatchScriptInputSchema: z.ZodObject<{
4
+ projectPath: z.ZodString;
5
+ taskDescription: z.ZodString;
6
+ fileGlob: z.ZodString;
7
+ specId: z.ZodOptional<z.ZodString>;
8
+ allowedTools: z.ZodOptional<z.ZodArray<z.ZodString>>;
9
+ outputFormat: z.ZodOptional<z.ZodEnum<{
10
+ text: "text";
11
+ json: "json";
12
+ "stream-json": "stream-json";
13
+ }>>;
14
+ permissionMode: z.ZodOptional<z.ZodEnum<{
15
+ auto: "auto";
16
+ dontAsk: "dontAsk";
17
+ default: "default";
18
+ }>>;
19
+ pilotCount: z.ZodOptional<z.ZodNumber>;
20
+ dryRun: z.ZodOptional<z.ZodBoolean>;
21
+ }, z.core.$strip>;
22
+ /**
23
+ * Handle the generate_batch_script tool.
24
+ * Generates full and pilot bash scripts for fan-out batch processing with claude -p.
25
+ */
26
+ export declare function handleGenerateBatchScript(args: BatchScriptInput): Promise<ToolResult>;
27
+ //# sourceMappingURL=generate-batch-script.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-batch-script.d.ts","sourceRoot":"","sources":["../../src/tools/generate-batch-script.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAGtE,eAAO,MAAM,8BAA8B;;;;;;;;;;;;;;;;;;iBAsCzC,CAAC;AAEH;;;GAGG;AACH,wBAAsB,yBAAyB,CAC7C,IAAI,EAAE,gBAAgB,GACrB,OAAO,CAAC,UAAU,CAAC,CAsCrB"}
@@ -0,0 +1,77 @@
1
+ // tools/generate-batch-script.ts — Handle generate_batch_script tool calls (SPEC-253)
2
+ import { z } from 'zod';
3
+ import { generateBatchScript } from '../engine/batch-script-generator/index.js';
4
+ export const GenerateBatchScriptInputSchema = z.object({
5
+ projectPath: z.string().describe('Absolute path to the project root'),
6
+ taskDescription: z
7
+ .string()
8
+ .describe('What claude -p should do to each file'),
9
+ fileGlob: z
10
+ .string()
11
+ .describe("Glob pattern for files, e.g. 'src/**/*.ts'"),
12
+ specId: z
13
+ .string()
14
+ .optional()
15
+ .describe('SPEC ID for naming the output script, e.g. SPEC-253'),
16
+ allowedTools: z
17
+ .array(z.string())
18
+ .optional()
19
+ .describe("List of allowed tools passed to claude -p, e.g. ['Edit', 'Bash(git commit *)']"),
20
+ outputFormat: z
21
+ .enum(['text', 'json', 'stream-json'])
22
+ .optional()
23
+ .describe('Output format for claude -p: text (default) | json | stream-json'),
24
+ permissionMode: z
25
+ .enum(['auto', 'dontAsk', 'default'])
26
+ .optional()
27
+ .describe('Permission mode for claude -p: auto (default, unattended) | dontAsk (pre-approved tools only) | default'),
28
+ pilotCount: z
29
+ .number()
30
+ .optional()
31
+ .describe('Number of files in the pilot script (default: 3)'),
32
+ dryRun: z
33
+ .boolean()
34
+ .optional()
35
+ .describe('Return script content without writing to disk (default: false)'),
36
+ });
37
+ /**
38
+ * Handle the generate_batch_script tool.
39
+ * Generates full and pilot bash scripts for fan-out batch processing with claude -p.
40
+ */
41
+ export async function handleGenerateBatchScript(args) {
42
+ const result = await generateBatchScript(args);
43
+ const lines = [
44
+ '## Batch Script Generated',
45
+ '',
46
+ `**Task**: ${args.taskDescription}`,
47
+ `**File glob**: \`${args.fileGlob}\``,
48
+ `**Estimated files**: ~${String(result.estimatedFiles)}`,
49
+ `**Pilot size**: ${String(args.pilotCount ?? 3)} files`,
50
+ '',
51
+ ];
52
+ if (args.dryRun) {
53
+ lines.push('> **dry-run mode** — scripts not written to disk');
54
+ lines.push('');
55
+ }
56
+ else {
57
+ lines.push(`**Full script**: \`${result.fullScriptPath}\``);
58
+ lines.push(`**Pilot script**: \`${result.pilotScriptPath}\``);
59
+ lines.push('');
60
+ }
61
+ lines.push('### Recommended workflow');
62
+ lines.push('');
63
+ lines.push('1. **Run pilot first** (validates the task on a small sample):');
64
+ lines.push(` \`\`\`bash\n ${result.suggestedPilotCommand}\n \`\`\``);
65
+ lines.push('2. **Scale up** (run on all files once pilot looks good):');
66
+ lines.push(` \`\`\`bash\n ${result.scaleUpCommand}\n \`\`\``);
67
+ lines.push('');
68
+ lines.push('### Pilot script preview');
69
+ lines.push('');
70
+ lines.push('```bash');
71
+ lines.push(result.pilotScript.trimEnd());
72
+ lines.push('```');
73
+ return {
74
+ content: [{ type: 'text', text: lines.join('\n') }],
75
+ };
76
+ }
77
+ //# sourceMappingURL=generate-batch-script.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-batch-script.js","sourceRoot":"","sources":["../../src/tools/generate-batch-script.ts"],"names":[],"mappings":"AAAA,sFAAsF;AAEtF,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,mBAAmB,EAAE,MAAM,2CAA2C,CAAC;AAEhF,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAAC,CAAC,MAAM,CAAC;IACrD,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;IACrE,eAAe,EAAE,CAAC;SACf,MAAM,EAAE;SACR,QAAQ,CAAC,uCAAuC,CAAC;IACpD,QAAQ,EAAE,CAAC;SACR,MAAM,EAAE;SACR,QAAQ,CAAC,4CAA4C,CAAC;IACzD,MAAM,EAAE,CAAC;SACN,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,qDAAqD,CAAC;IAClE,YAAY,EAAE,CAAC;SACZ,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;SACjB,QAAQ,EAAE;SACV,QAAQ,CACP,gFAAgF,CACjF;IACH,YAAY,EAAE,CAAC;SACZ,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC;SACrC,QAAQ,EAAE;SACV,QAAQ,CACP,kEAAkE,CACnE;IACH,cAAc,EAAE,CAAC;SACd,IAAI,CAAC,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;SACpC,QAAQ,EAAE;SACV,QAAQ,CACP,yGAAyG,CAC1G;IACH,UAAU,EAAE,CAAC;SACV,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,kDAAkD,CAAC;IAC/D,MAAM,EAAE,CAAC;SACN,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,QAAQ,CAAC,gEAAgE,CAAC;CAC9E,CAAC,CAAC;AAEH;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,IAAsB;IAEtB,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAE/C,MAAM,KAAK,GAAa;QACtB,2BAA2B;QAC3B,EAAE;QACF,aAAa,IAAI,CAAC,eAAe,EAAE;QACnC,oBAAoB,IAAI,CAAC,QAAQ,IAAI;QACrC,yBAAyB,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE;QACxD,mBAAmB,MAAM,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,CAAC,QAAQ;QACvD,EAAE;KACH,CAAC;IAEF,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,KAAK,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAC;QAC/D,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CAAC,sBAAsB,MAAM,CAAC,cAAc,IAAI,CAAC,CAAC;QAC5D,KAAK,CAAC,IAAI,CAAC,uBAAuB,MAAM,CAAC,eAAe,IAAI,CAAC,CAAC;QAC9D,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;IACvC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,gEAAgE,CAAC,CAAC;IAC7E,KAAK,CAAC,IAAI,CAAC,qBAAqB,MAAM,CAAC,qBAAqB,aAAa,CAAC,CAAC;IAC3E,KAAK,CAAC,IAAI,CAAC,2DAA2D,CAAC,CAAC;IACxE,KAAK,CAAC,IAAI,CAAC,qBAAqB,MAAM,CAAC,cAAc,aAAa,CAAC,CAAC;IACpE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;IACvC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACtB,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC;IACzC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAElB,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;KAC7D,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"generate-sub-agent.d.ts","sourceRoot":"","sources":["../../src/tools/generate-sub-agent.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,qBAAqB,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE3E,wBAAsB,sBAAsB,CAAC,IAAI,EAAE,qBAAqB,GAAG,OAAO,CAAC,UAAU,CAAC,CA8F7F"}
1
+ {"version":3,"file":"generate-sub-agent.d.ts","sourceRoot":"","sources":["../../src/tools/generate-sub-agent.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,qBAAqB,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE3E,wBAAsB,sBAAsB,CAAC,IAAI,EAAE,qBAAqB,GAAG,OAAO,CAAC,UAAU,CAAC,CA2H7F"}