@promptwheel/mcp 0.6.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 (134) hide show
  1. package/README.md +178 -0
  2. package/dist/advance-helpers.d.ts +27 -0
  3. package/dist/advance-helpers.d.ts.map +1 -0
  4. package/dist/advance-helpers.js +127 -0
  5. package/dist/advance-helpers.js.map +1 -0
  6. package/dist/advance-prompts.d.ts +48 -0
  7. package/dist/advance-prompts.d.ts.map +1 -0
  8. package/dist/advance-prompts.js +420 -0
  9. package/dist/advance-prompts.js.map +1 -0
  10. package/dist/advance.d.ts +30 -0
  11. package/dist/advance.d.ts.map +1 -0
  12. package/dist/advance.js +752 -0
  13. package/dist/advance.js.map +1 -0
  14. package/dist/codebase-index.d.ts +5 -0
  15. package/dist/codebase-index.d.ts.map +1 -0
  16. package/dist/codebase-index.js +5 -0
  17. package/dist/codebase-index.js.map +1 -0
  18. package/dist/dedup-memory.d.ts +30 -0
  19. package/dist/dedup-memory.d.ts.map +1 -0
  20. package/dist/dedup-memory.js +76 -0
  21. package/dist/dedup-memory.js.map +1 -0
  22. package/dist/direct-client.d.ts +57 -0
  23. package/dist/direct-client.d.ts.map +1 -0
  24. package/dist/direct-client.js +92 -0
  25. package/dist/direct-client.js.map +1 -0
  26. package/dist/event-handlers-qa.d.ts +5 -0
  27. package/dist/event-handlers-qa.d.ts.map +1 -0
  28. package/dist/event-handlers-qa.js +186 -0
  29. package/dist/event-handlers-qa.js.map +1 -0
  30. package/dist/event-handlers-scout.d.ts +5 -0
  31. package/dist/event-handlers-scout.d.ts.map +1 -0
  32. package/dist/event-handlers-scout.js +270 -0
  33. package/dist/event-handlers-scout.js.map +1 -0
  34. package/dist/event-handlers-ticket.d.ts +5 -0
  35. package/dist/event-handlers-ticket.d.ts.map +1 -0
  36. package/dist/event-handlers-ticket.js +232 -0
  37. package/dist/event-handlers-ticket.js.map +1 -0
  38. package/dist/event-helpers.d.ts +46 -0
  39. package/dist/event-helpers.d.ts.map +1 -0
  40. package/dist/event-helpers.js +125 -0
  41. package/dist/event-helpers.js.map +1 -0
  42. package/dist/event-processor.d.ts +15 -0
  43. package/dist/event-processor.d.ts.map +1 -0
  44. package/dist/event-processor.js +111 -0
  45. package/dist/event-processor.js.map +1 -0
  46. package/dist/formulas.d.ts +27 -0
  47. package/dist/formulas.d.ts.map +1 -0
  48. package/dist/formulas.js +109 -0
  49. package/dist/formulas.js.map +1 -0
  50. package/dist/guidelines.d.ts +16 -0
  51. package/dist/guidelines.d.ts.map +1 -0
  52. package/dist/guidelines.js +44 -0
  53. package/dist/guidelines.js.map +1 -0
  54. package/dist/index.d.ts +9 -0
  55. package/dist/index.d.ts.map +1 -0
  56. package/dist/index.js +42 -0
  57. package/dist/index.js.map +1 -0
  58. package/dist/learnings.d.ts +42 -0
  59. package/dist/learnings.d.ts.map +1 -0
  60. package/dist/learnings.js +117 -0
  61. package/dist/learnings.js.map +1 -0
  62. package/dist/project-metadata.d.ts +34 -0
  63. package/dist/project-metadata.d.ts.map +1 -0
  64. package/dist/project-metadata.js +617 -0
  65. package/dist/project-metadata.js.map +1 -0
  66. package/dist/proposals.d.ts +23 -0
  67. package/dist/proposals.d.ts.map +1 -0
  68. package/dist/proposals.js +201 -0
  69. package/dist/proposals.js.map +1 -0
  70. package/dist/qa-stats.d.ts +51 -0
  71. package/dist/qa-stats.d.ts.map +1 -0
  72. package/dist/qa-stats.js +121 -0
  73. package/dist/qa-stats.js.map +1 -0
  74. package/dist/run-manager.d.ts +97 -0
  75. package/dist/run-manager.d.ts.map +1 -0
  76. package/dist/run-manager.js +583 -0
  77. package/dist/run-manager.js.map +1 -0
  78. package/dist/run-state-bridge.d.ts +13 -0
  79. package/dist/run-state-bridge.d.ts.map +1 -0
  80. package/dist/run-state-bridge.js +101 -0
  81. package/dist/run-state-bridge.js.map +1 -0
  82. package/dist/scope-policy.d.ts +83 -0
  83. package/dist/scope-policy.d.ts.map +1 -0
  84. package/dist/scope-policy.js +278 -0
  85. package/dist/scope-policy.js.map +1 -0
  86. package/dist/server.d.ts +18 -0
  87. package/dist/server.d.ts.map +1 -0
  88. package/dist/server.js +35 -0
  89. package/dist/server.js.map +1 -0
  90. package/dist/spindle.d.ts +41 -0
  91. package/dist/spindle.d.ts.map +1 -0
  92. package/dist/spindle.js +230 -0
  93. package/dist/spindle.js.map +1 -0
  94. package/dist/state.d.ts +36 -0
  95. package/dist/state.d.ts.map +1 -0
  96. package/dist/state.js +50 -0
  97. package/dist/state.js.map +1 -0
  98. package/dist/ticket-worker.d.ts +37 -0
  99. package/dist/ticket-worker.d.ts.map +1 -0
  100. package/dist/ticket-worker.js +527 -0
  101. package/dist/ticket-worker.js.map +1 -0
  102. package/dist/tool-registry.d.ts +35 -0
  103. package/dist/tool-registry.d.ts.map +1 -0
  104. package/dist/tool-registry.js +129 -0
  105. package/dist/tool-registry.js.map +1 -0
  106. package/dist/tools/execute.d.ts +17 -0
  107. package/dist/tools/execute.d.ts.map +1 -0
  108. package/dist/tools/execute.js +418 -0
  109. package/dist/tools/execute.js.map +1 -0
  110. package/dist/tools/git.d.ts +7 -0
  111. package/dist/tools/git.d.ts.map +1 -0
  112. package/dist/tools/git.js +98 -0
  113. package/dist/tools/git.js.map +1 -0
  114. package/dist/tools/intelligence.d.ts +10 -0
  115. package/dist/tools/intelligence.d.ts.map +1 -0
  116. package/dist/tools/intelligence.js +432 -0
  117. package/dist/tools/intelligence.js.map +1 -0
  118. package/dist/tools/session.d.ts +7 -0
  119. package/dist/tools/session.d.ts.map +1 -0
  120. package/dist/tools/session.js +533 -0
  121. package/dist/tools/session.js.map +1 -0
  122. package/dist/tools/trajectory.d.ts +10 -0
  123. package/dist/tools/trajectory.d.ts.map +1 -0
  124. package/dist/tools/trajectory.js +374 -0
  125. package/dist/tools/trajectory.js.map +1 -0
  126. package/dist/trajectory-io.d.ts +21 -0
  127. package/dist/trajectory-io.d.ts.map +1 -0
  128. package/dist/trajectory-io.js +105 -0
  129. package/dist/trajectory-io.js.map +1 -0
  130. package/dist/types.d.ts +229 -0
  131. package/dist/types.d.ts.map +1 -0
  132. package/dist/types.js +13 -0
  133. package/dist/types.js.map +1 -0
  134. package/package.json +63 -0
@@ -0,0 +1,533 @@
1
+ /**
2
+ * Session management tools: start_session, session_status, end_session, advance, ingest_event
3
+ */
4
+ import { join, resolve } from 'node:path';
5
+ import { unlinkSync, existsSync, readdirSync, statSync, rmSync, readFileSync, appendFileSync } from 'node:fs';
6
+ import { spawnSync } from 'node:child_process';
7
+ import { loadGuidelines } from '../guidelines.js';
8
+ import { z } from 'zod';
9
+ import { advance } from '../advance.js';
10
+ import { processEvent } from '../event-processor.js';
11
+ import { advanceTicketWorker, ingestTicketEvent } from '../ticket-worker.js';
12
+ import { deriveScopePolicy, isFileAllowed, serializeScopePolicy } from '../scope-policy.js';
13
+ import { repos } from '@promptwheel/core';
14
+ import { loadFormula, applyFormula, listFormulas } from '../formulas.js';
15
+ export function registerSessionTools(server, getState) {
16
+ server.tool('promptwheel_start_session', 'Initialize an improvement session. Creates a run folder with state.json and event log. Call this first.', {
17
+ hours: z.number().optional().describe('Session duration in hours. Omit for unlimited.'),
18
+ formula: z.string().optional().describe('Formula name (e.g., security-audit, test-coverage).'),
19
+ deep: z.boolean().optional().describe('Enable deep architectural review mode.'),
20
+ continuous: z.boolean().optional().describe('Run until manually stopped.'),
21
+ scope: z.string().optional().describe('Glob pattern for files to scan (default: ** i.e. entire project).'),
22
+ categories: z.array(z.string()).optional().describe('Trust ladder categories.'),
23
+ min_confidence: z.number().optional().describe('Minimum confidence threshold (default: 70).'),
24
+ max_proposals: z.number().optional().describe('Max proposals per scout (default: 5).'),
25
+ step_budget: z.number().optional().describe('Max advance() calls (default: 200).'),
26
+ ticket_step_budget: z.number().optional().describe('Max steps per ticket (default: 12).'),
27
+ max_prs: z.number().optional().describe('Max PRs to create (default: 5, unlimited when hours is set).'),
28
+ max_cycles: z.number().optional().describe('Max scout→execute cycles (default: 1). Use with hours for multi-cycle runs.'),
29
+ draft_prs: z.boolean().optional().describe('Deprecated: use create_prs + draft instead.'),
30
+ create_prs: z.boolean().optional().describe('Create PRs for completed tickets (default: false). Without this, commits directly.'),
31
+ draft: z.boolean().optional().describe('When creating PRs, make them drafts (default: false).'),
32
+ eco: z.boolean().optional().describe('Eco mode: allow subagent delegation during scout for lower cost (default: false).'),
33
+ parallel: z.number().optional().describe('Number of tickets to execute in parallel (default: 2, max: 5). Set to 1 for sequential mode.'),
34
+ min_impact_score: z.number().optional().describe('Minimum impact score (1-10) for proposals to be accepted (default: 3). Filters out low-value lint/cleanup.'),
35
+ learnings: z.boolean().optional().describe('Enable cross-run learnings (default: true). Set false to disable.'),
36
+ learnings_budget: z.number().optional().describe('Max chars for learnings injected into prompts (default: 2000).'),
37
+ learnings_decay_rate: z.number().optional().describe('Weight decay per session load (default: 3).'),
38
+ direct: z.boolean().optional().describe('Direct mode: edit in place without worktrees/branches (default: true for simple solo use). Auto-disabled when create_prs=true or parallel>1.'),
39
+ cross_verify: z.boolean().optional().describe('Cross-verify: use a separate verifier agent for QA instead of self-verification (default: false).'),
40
+ skip_review: z.boolean().optional().describe('Skip adversarial review: create tickets directly from scout proposals without a second review pass (default: false).'),
41
+ dry_run: z.boolean().optional().describe('Dry-run mode: scout only, no ticket creation or execution (default: false).'),
42
+ qa_commands: z.array(z.string()).optional().describe('QA commands to always run after every ticket (e.g. ["pytest", "cargo test"]).'),
43
+ }, async (params) => {
44
+ const state = getState();
45
+ // Load and apply formula if specified
46
+ let config = {
47
+ hours: params.hours,
48
+ formula: params.formula,
49
+ deep: params.deep,
50
+ continuous: params.continuous,
51
+ scope: params.scope,
52
+ categories: params.categories,
53
+ min_confidence: params.min_confidence,
54
+ max_proposals: params.max_proposals,
55
+ step_budget: params.step_budget,
56
+ ticket_step_budget: params.ticket_step_budget,
57
+ max_prs: params.max_prs,
58
+ max_cycles: params.max_cycles,
59
+ draft_prs: params.draft_prs,
60
+ create_prs: params.create_prs,
61
+ draft: params.draft,
62
+ eco: params.eco,
63
+ parallel: params.parallel,
64
+ min_impact_score: params.min_impact_score,
65
+ learnings: params.learnings,
66
+ learnings_budget: params.learnings_budget,
67
+ learnings_decay_rate: params.learnings_decay_rate,
68
+ direct: params.direct,
69
+ cross_verify: params.cross_verify,
70
+ skip_review: params.skip_review,
71
+ dry_run: params.dry_run,
72
+ qa_commands: params.qa_commands,
73
+ };
74
+ let formulaInfo;
75
+ if (params.formula) {
76
+ const formula = loadFormula(params.formula, state.projectPath);
77
+ if (formula) {
78
+ config = applyFormula(formula, config);
79
+ formulaInfo = { name: formula.name, description: formula.description };
80
+ }
81
+ }
82
+ // Pre-start validation: detect environment and adjust config
83
+ const warnings = [];
84
+ // Git repo check — force direct mode if not a git repo
85
+ const isGitRepo = existsSync(join(state.projectPath, '.git'));
86
+ if (!isGitRepo) {
87
+ config = { ...config, direct: true, create_prs: false };
88
+ warnings.push('Not a git repository — PR creation disabled, using direct mode.');
89
+ }
90
+ else {
91
+ // Check for uncommitted changes
92
+ const gitStatus = spawnSync('git', ['status', '--porcelain'], {
93
+ cwd: state.projectPath, encoding: 'utf-8', timeout: 5000,
94
+ });
95
+ if (gitStatus.stdout && gitStatus.stdout.trim().length > 0) {
96
+ const changedCount = gitStatus.stdout.trim().split('\n').length;
97
+ warnings.push(`${changedCount} uncommitted change(s) detected. Consider committing or stashing before running PromptWheel.`);
98
+ }
99
+ // Ensure .promptwheel/ is in .gitignore
100
+ const gitignorePath = join(state.projectPath, '.gitignore');
101
+ try {
102
+ const gitignore = existsSync(gitignorePath) ? readFileSync(gitignorePath, 'utf8') : '';
103
+ if (!gitignore.includes('.promptwheel')) {
104
+ appendFileSync(gitignorePath, `${gitignore.endsWith('\n') || gitignore === '' ? '' : '\n'}# PromptWheel session data\n.promptwheel/\n`);
105
+ warnings.push('Added .promptwheel/ to .gitignore.');
106
+ }
107
+ }
108
+ catch (err) {
109
+ warnings.push(`Could not update .gitignore: ${err instanceof Error ? err.message : 'unknown error'}. Please add .promptwheel/ to .gitignore manually.`);
110
+ }
111
+ }
112
+ // Guidelines awareness
113
+ const guidelines = loadGuidelines(state.projectPath);
114
+ if (guidelines) {
115
+ warnings.push(`Using project guidelines from ${guidelines.source}.`);
116
+ }
117
+ else {
118
+ warnings.push('No CLAUDE.md found — consider adding project guidelines for better results.');
119
+ }
120
+ // Scope suggestion for large repos
121
+ if (!config.scope || config.scope === '**') {
122
+ const sourceDirs = ['src', 'lib', 'app', 'packages'].filter(d => existsSync(join(state.projectPath, d)));
123
+ if (sourceDirs.length > 0) {
124
+ try {
125
+ const topEntries = readdirSync(state.projectPath).filter(e => !e.startsWith('.') && e !== 'node_modules');
126
+ if (topEntries.length > 50) {
127
+ warnings.push(`Large project (${topEntries.length}+ top-level entries). Consider narrowing scope: ${sourceDirs.map(d => `${d}/**`).join(', ')}`);
128
+ }
129
+ }
130
+ catch { /* ignore readdir failures */ }
131
+ }
132
+ }
133
+ const runState = state.start(config);
134
+ // Test runner info
135
+ if (!runState.project_metadata?.test_run_command) {
136
+ warnings.push('No test runner detected — QA will rely on commands from scout proposals. Consider adding a test script (e.g. package.json scripts.test, pytest.ini, Makefile test target).');
137
+ }
138
+ return {
139
+ content: [{
140
+ type: 'text',
141
+ text: JSON.stringify({
142
+ run_id: runState.run_id,
143
+ session_id: runState.session_id,
144
+ project_id: runState.project_id,
145
+ phase: runState.phase,
146
+ step_budget: runState.step_budget,
147
+ expires_at: runState.expires_at,
148
+ run_dir: state.run.dir,
149
+ formula: formulaInfo,
150
+ warnings: warnings.length > 0 ? warnings : undefined,
151
+ detected: {
152
+ languages: runState.project_metadata?.languages ?? [],
153
+ test_runner: runState.project_metadata?.test_runner_name ?? null,
154
+ framework: runState.project_metadata?.framework ?? null,
155
+ linter: runState.project_metadata?.linter ?? null,
156
+ },
157
+ message: 'Session started. Call promptwheel_advance to begin.',
158
+ }, null, 2),
159
+ }],
160
+ };
161
+ });
162
+ server.tool('promptwheel_advance', 'Get the next action to perform. This is the main loop driver. Call repeatedly until it returns STOP.', {}, async () => {
163
+ const state = getState();
164
+ try {
165
+ const response = await advance({
166
+ run: state.run,
167
+ db: state.db,
168
+ project: state.project,
169
+ });
170
+ // Clean up loop-state.json on terminal responses so stop hook doesn't deadlock
171
+ if (response.next_action === 'STOP') {
172
+ try {
173
+ unlinkSync(join(state.projectPath, '.promptwheel', 'loop-state.json'));
174
+ }
175
+ catch (err) {
176
+ if (err instanceof Error && !('code' in err && err.code === 'ENOENT')) {
177
+ console.warn(`[promptwheel] failed to clean up loop-state.json: ${err.message}`);
178
+ }
179
+ }
180
+ }
181
+ return {
182
+ content: [{
183
+ type: 'text',
184
+ text: JSON.stringify(response, null, 2),
185
+ }],
186
+ };
187
+ }
188
+ catch (e) {
189
+ return {
190
+ content: [{
191
+ type: 'text',
192
+ text: JSON.stringify({ error: e.message }),
193
+ }],
194
+ isError: true,
195
+ };
196
+ }
197
+ });
198
+ server.tool('promptwheel_ingest_event', 'Report an event back to PromptWheel. Used after executing an action from advance(). Triggers state transitions.', {
199
+ type: z.string().describe('Event type (e.g., SCOUT_OUTPUT, PLAN_SUBMITTED, TICKET_RESULT, QA_PASSED, QA_FAILED, PR_CREATED, USER_OVERRIDE).'),
200
+ payload: z.record(z.string(), z.unknown()).describe('Event payload data.'),
201
+ }, async (params) => {
202
+ const state = getState();
203
+ try {
204
+ state.run.require();
205
+ // Log the raw event
206
+ state.run.appendEvent(params.type, params.payload);
207
+ // Process the event (may trigger state transitions)
208
+ const result = await processEvent(state.run, state.db, params.type, params.payload, state.project);
209
+ return {
210
+ content: [{
211
+ type: 'text',
212
+ text: JSON.stringify({
213
+ ...result,
214
+ step: state.run.require().step_count,
215
+ current_phase: state.run.require().phase,
216
+ }, null, 2),
217
+ }],
218
+ };
219
+ }
220
+ catch (e) {
221
+ return {
222
+ content: [{
223
+ type: 'text',
224
+ text: JSON.stringify({ error: e.message }),
225
+ }],
226
+ isError: true,
227
+ };
228
+ }
229
+ });
230
+ server.tool('promptwheel_session_status', 'Get current session state: phase, budgets, tickets completed/failed, time remaining.', {}, async () => {
231
+ const state = getState();
232
+ try {
233
+ const status = state.getStatus();
234
+ const digest = state.run.buildDigest();
235
+ const warnings = state.run.getBudgetWarnings();
236
+ const s = state.run.require();
237
+ // Surface last QA failure details if any tickets have failed
238
+ const lastFailure = s.last_qa_failure ? {
239
+ failed_commands: s.last_qa_failure.failed_commands,
240
+ error_snippet: s.last_qa_failure.error_output.slice(0, 200),
241
+ } : undefined;
242
+ return {
243
+ content: [{
244
+ type: 'text',
245
+ text: JSON.stringify({
246
+ ...status,
247
+ digest,
248
+ budget_warnings: warnings.length > 0 ? warnings : undefined,
249
+ last_qa_failure: lastFailure,
250
+ last_plan_rejection: s.last_plan_rejection_reason ?? undefined,
251
+ }, null, 2),
252
+ }],
253
+ };
254
+ }
255
+ catch (e) {
256
+ return {
257
+ content: [{
258
+ type: 'text',
259
+ text: JSON.stringify({ error: e.message }),
260
+ }],
261
+ isError: true,
262
+ };
263
+ }
264
+ });
265
+ server.tool('promptwheel_end_session', 'Finalize the current session. Returns summary.', {}, async () => {
266
+ const state = getState();
267
+ try {
268
+ const finalState = state.end();
269
+ const durationMs = Date.now() - new Date(finalState.started_at).getTime();
270
+ // Clean up loop-state.json so the stop hook doesn't block exit
271
+ try {
272
+ unlinkSync(join(state.projectPath, '.promptwheel', 'loop-state.json'));
273
+ }
274
+ catch (err) {
275
+ if (err instanceof Error && !('code' in err && err.code === 'ENOENT')) {
276
+ console.warn(`[promptwheel] failed to clean up loop-state.json on end: ${err.message}`);
277
+ }
278
+ }
279
+ // Clean up orphaned worktrees
280
+ const worktreesRemoved = pruneWorktrees(state.projectPath);
281
+ if (worktreesRemoved > 0) {
282
+ spawnSync('git', ['worktree', 'prune'], {
283
+ cwd: state.projectPath,
284
+ encoding: 'utf-8',
285
+ });
286
+ }
287
+ return {
288
+ content: [{
289
+ type: 'text',
290
+ text: JSON.stringify({
291
+ run_id: finalState.run_id,
292
+ session_id: finalState.session_id,
293
+ duration_ms: durationMs,
294
+ step_count: finalState.step_count,
295
+ tickets_completed: finalState.tickets_completed,
296
+ tickets_failed: finalState.tickets_failed,
297
+ tickets_blocked: finalState.tickets_blocked,
298
+ prs_created: finalState.prs_created,
299
+ scout_cycles: finalState.scout_cycles,
300
+ final_phase: finalState.phase,
301
+ coverage_percent: finalState.files_total > 0 ? Math.round((finalState.files_scanned / finalState.files_total) * 100) : 0,
302
+ sectors_scanned: finalState.sectors_scanned,
303
+ sectors_total: finalState.sectors_total,
304
+ worktrees_removed: worktreesRemoved,
305
+ message: (() => {
306
+ const pct = finalState.files_total > 0 ? Math.round((finalState.files_scanned / finalState.files_total) * 100) : 0;
307
+ return pct >= 100
308
+ ? 'Session ended. Full coverage achieved.'
309
+ : `Session ended. ${pct}% of codebase scanned — run longer for full coverage.`;
310
+ })(),
311
+ }, null, 2),
312
+ }],
313
+ };
314
+ }
315
+ catch (e) {
316
+ return {
317
+ content: [{
318
+ type: 'text',
319
+ text: JSON.stringify({ error: e.message }),
320
+ }],
321
+ isError: true,
322
+ };
323
+ }
324
+ });
325
+ server.tool('promptwheel_get_scope_policy', 'Get the scope policy for the current ticket. Used by PreToolUse hooks to check if a file path is allowed before writes.', {
326
+ file_path: z.string().optional().describe('Optional file path to check. If provided, returns whether this specific file is allowed.'),
327
+ }, async (params) => {
328
+ const state = getState();
329
+ try {
330
+ const s = state.run.require();
331
+ if (!s.current_ticket_id) {
332
+ return {
333
+ content: [{
334
+ type: 'text',
335
+ text: JSON.stringify({ error: 'No active ticket' }),
336
+ }],
337
+ isError: true,
338
+ };
339
+ }
340
+ const ticket = await repos.tickets.getById(state.db, s.current_ticket_id);
341
+ if (!ticket) {
342
+ return {
343
+ content: [{
344
+ type: 'text',
345
+ text: JSON.stringify({ error: 'Ticket not found' }),
346
+ }],
347
+ isError: true,
348
+ };
349
+ }
350
+ const policy = deriveScopePolicy({
351
+ allowedPaths: ticket.allowedPaths ?? [],
352
+ category: ticket.category ?? 'refactor',
353
+ maxLinesPerTicket: s.max_lines_per_ticket,
354
+ });
355
+ const result = {
356
+ ticket_id: s.current_ticket_id,
357
+ policy: serializeScopePolicy(policy),
358
+ };
359
+ // If a file path is provided, check it
360
+ if (params.file_path) {
361
+ const allowed = isFileAllowed(params.file_path, policy);
362
+ result.file_check = {
363
+ path: params.file_path,
364
+ allowed,
365
+ };
366
+ // Log the scope check event
367
+ state.run.appendEvent(allowed ? 'SCOPE_ALLOWED' : 'SCOPE_BLOCKED', { path: params.file_path, ticket_id: s.current_ticket_id });
368
+ }
369
+ return {
370
+ content: [{
371
+ type: 'text',
372
+ text: JSON.stringify(result, null, 2),
373
+ }],
374
+ };
375
+ }
376
+ catch (e) {
377
+ return {
378
+ content: [{
379
+ type: 'text',
380
+ text: JSON.stringify({ error: e.message }),
381
+ }],
382
+ isError: true,
383
+ };
384
+ }
385
+ });
386
+ server.tool('promptwheel_nudge', 'Add a hint to guide the running session. Hints are consumed in the next scout cycle and appended to the scout prompt.', {
387
+ hint: z.string().describe('Guidance for the scout (e.g., "focus on auth module", "skip test files").'),
388
+ }, async (params) => {
389
+ const state = getState();
390
+ try {
391
+ state.run.addHint(params.hint);
392
+ const s = state.run.require();
393
+ return {
394
+ content: [{
395
+ type: 'text',
396
+ text: JSON.stringify({
397
+ hint: params.hint,
398
+ pending_hints: s.hints.length,
399
+ message: 'Hint added. Will be consumed in next scout cycle.',
400
+ }, null, 2),
401
+ }],
402
+ };
403
+ }
404
+ catch (e) {
405
+ return {
406
+ content: [{
407
+ type: 'text',
408
+ text: JSON.stringify({ error: e.message }),
409
+ }],
410
+ isError: true,
411
+ };
412
+ }
413
+ });
414
+ server.tool('promptwheel_advance_ticket', 'Advance a single ticket through its PLAN→EXECUTE→QA→PR lifecycle (parallel mode). Called by subagents working on individual tickets.', {
415
+ ticket_id: z.string().describe('The ticket ID to advance.'),
416
+ }, async (params) => {
417
+ const state = getState();
418
+ try {
419
+ const response = await advanceTicketWorker({ run: state.run, db: state.db, project: state.project }, params.ticket_id);
420
+ return {
421
+ content: [{
422
+ type: 'text',
423
+ text: JSON.stringify(response, null, 2),
424
+ }],
425
+ };
426
+ }
427
+ catch (e) {
428
+ return {
429
+ content: [{
430
+ type: 'text',
431
+ text: JSON.stringify({ error: e.message }),
432
+ }],
433
+ isError: true,
434
+ };
435
+ }
436
+ });
437
+ server.tool('promptwheel_ticket_event', 'Report an event for a specific ticket (parallel mode). Used by subagents to report plan submissions, QA results, PR creation, etc.', {
438
+ ticket_id: z.string().describe('The ticket ID this event belongs to.'),
439
+ type: z.string().describe('Event type (e.g., PLAN_SUBMITTED, TICKET_RESULT, QA_PASSED, QA_FAILED, QA_COMMAND_RESULT, PR_CREATED).'),
440
+ payload: z.record(z.string(), z.unknown()).describe('Event payload data.'),
441
+ }, async (params) => {
442
+ const state = getState();
443
+ try {
444
+ const result = await ingestTicketEvent({ run: state.run, db: state.db, project: state.project }, params.ticket_id, params.type, params.payload);
445
+ return {
446
+ content: [{
447
+ type: 'text',
448
+ text: JSON.stringify(result, null, 2),
449
+ }],
450
+ };
451
+ }
452
+ catch (e) {
453
+ return {
454
+ content: [{
455
+ type: 'text',
456
+ text: JSON.stringify({ error: e.message }),
457
+ }],
458
+ isError: true,
459
+ };
460
+ }
461
+ });
462
+ server.tool('promptwheel_list_formulas', 'List all available formulas (built-in + custom from .promptwheel/formulas/).', {}, async () => {
463
+ const state = getState();
464
+ const formulas = listFormulas(state.projectPath);
465
+ return {
466
+ content: [{
467
+ type: 'text',
468
+ text: JSON.stringify({
469
+ formulas: formulas.map(f => ({
470
+ name: f.name,
471
+ version: f.version,
472
+ description: f.description,
473
+ categories: f.categories,
474
+ risk_tolerance: f.risk_tolerance,
475
+ tags: f.tags,
476
+ })),
477
+ }, null, 2),
478
+ }],
479
+ };
480
+ });
481
+ }
482
+ // ── Worktree cleanup ──────────────────────────────────────────────────────────
483
+ function pruneWorktrees(repoRoot) {
484
+ try {
485
+ const worktreesDir = join(repoRoot, '.promptwheel', 'worktrees');
486
+ if (!existsSync(worktreesDir))
487
+ return 0;
488
+ const entries = readdirSync(worktreesDir).filter(e => {
489
+ try {
490
+ return statSync(join(worktreesDir, e)).isDirectory();
491
+ }
492
+ catch {
493
+ return false;
494
+ }
495
+ });
496
+ if (entries.length === 0)
497
+ return 0;
498
+ // Get worktrees git knows about
499
+ const listResult = spawnSync('git', ['worktree', 'list', '--porcelain'], {
500
+ cwd: repoRoot, encoding: 'utf-8',
501
+ });
502
+ const gitWorktrees = new Set((listResult.stdout ?? '').split('\n')
503
+ .filter(l => l.startsWith('worktree '))
504
+ .map(l => l.replace('worktree ', '').trim()));
505
+ let removed = 0;
506
+ for (const entry of entries) {
507
+ if (entry === '_milestone')
508
+ continue;
509
+ const worktreePath = join(worktreesDir, entry);
510
+ const isTracked = gitWorktrees.has(resolve(worktreePath));
511
+ try {
512
+ if (isTracked) {
513
+ spawnSync('git', ['worktree', 'remove', '--force', worktreePath], {
514
+ cwd: repoRoot, encoding: 'utf-8',
515
+ });
516
+ }
517
+ else {
518
+ rmSync(worktreePath, { recursive: true, force: true });
519
+ }
520
+ removed++;
521
+ }
522
+ catch (err) {
523
+ console.warn(`[promptwheel] failed to remove worktree ${entry}: ${err instanceof Error ? err.message : String(err)}`);
524
+ }
525
+ }
526
+ return removed;
527
+ }
528
+ catch (err) {
529
+ console.warn(`[promptwheel] failed to prune worktrees: ${err instanceof Error ? err.message : String(err)}`);
530
+ return 0;
531
+ }
532
+ }
533
+ //# sourceMappingURL=session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/tools/session.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Trajectory management tools: list, show, activate, pause, resume, skip, reset
3
+ *
4
+ * Enables trajectory workflows from the Claude Code plugin, providing
5
+ * parity with the CLI's `trajectory` subcommands.
6
+ */
7
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
8
+ import type { SessionManager } from '../state.js';
9
+ export declare function registerTrajectoryTools(server: McpServer, getState: () => SessionManager): void;
10
+ //# sourceMappingURL=trajectory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trajectory.d.ts","sourceRoot":"","sources":["../../src/tools/trajectory.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAWlD,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,cAAc,QAkaxF"}