mstro-app 0.4.21 → 0.4.24

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 (167) hide show
  1. package/README.md +66 -0
  2. package/dist/server/cli/headless/claude-invoker-process.js +1 -1
  3. package/dist/server/cli/headless/claude-invoker-process.js.map +1 -1
  4. package/dist/server/cli/headless/mcp-config.d.ts +1 -1
  5. package/dist/server/cli/headless/mcp-config.d.ts.map +1 -1
  6. package/dist/server/cli/headless/mcp-config.js +4 -1
  7. package/dist/server/cli/headless/mcp-config.js.map +1 -1
  8. package/dist/server/cli/headless/runner.d.ts.map +1 -1
  9. package/dist/server/cli/headless/runner.js +1 -0
  10. package/dist/server/cli/headless/runner.js.map +1 -1
  11. package/dist/server/cli/headless/types.d.ts +4 -1
  12. package/dist/server/cli/headless/types.d.ts.map +1 -1
  13. package/dist/server/index.js +9 -1
  14. package/dist/server/index.js.map +1 -1
  15. package/dist/server/mcp/bouncer-integration.d.ts.map +1 -1
  16. package/dist/server/mcp/bouncer-integration.js +9 -1
  17. package/dist/server/mcp/bouncer-integration.js.map +1 -1
  18. package/dist/server/mcp/security-analysis.d.ts +6 -0
  19. package/dist/server/mcp/security-analysis.d.ts.map +1 -1
  20. package/dist/server/mcp/security-analysis.js +16 -1
  21. package/dist/server/mcp/security-analysis.js.map +1 -1
  22. package/dist/server/mcp/security-patterns.d.ts +8 -0
  23. package/dist/server/mcp/security-patterns.d.ts.map +1 -1
  24. package/dist/server/mcp/security-patterns.js +47 -2
  25. package/dist/server/mcp/security-patterns.js.map +1 -1
  26. package/dist/server/services/deploy/ai-broker.d.ts +63 -0
  27. package/dist/server/services/deploy/ai-broker.d.ts.map +1 -0
  28. package/dist/server/services/deploy/ai-broker.js +360 -0
  29. package/dist/server/services/deploy/ai-broker.js.map +1 -0
  30. package/dist/server/services/deploy/board-execution-handler.d.ts +114 -0
  31. package/dist/server/services/deploy/board-execution-handler.d.ts.map +1 -0
  32. package/dist/server/services/deploy/board-execution-handler.js +621 -0
  33. package/dist/server/services/deploy/board-execution-handler.js.map +1 -0
  34. package/dist/server/services/deploy/credentials.d.ts +35 -0
  35. package/dist/server/services/deploy/credentials.d.ts.map +1 -0
  36. package/dist/server/services/deploy/credentials.js +177 -0
  37. package/dist/server/services/deploy/credentials.js.map +1 -0
  38. package/dist/server/services/deploy/deploy-ai-service.d.ts +107 -0
  39. package/dist/server/services/deploy/deploy-ai-service.d.ts.map +1 -0
  40. package/dist/server/services/deploy/deploy-ai-service.js +294 -0
  41. package/dist/server/services/deploy/deploy-ai-service.js.map +1 -0
  42. package/dist/server/services/deploy/headless-session-handler.d.ts +94 -0
  43. package/dist/server/services/deploy/headless-session-handler.d.ts.map +1 -0
  44. package/dist/server/services/deploy/headless-session-handler.js +274 -0
  45. package/dist/server/services/deploy/headless-session-handler.js.map +1 -0
  46. package/dist/server/services/file-explorer-ops.d.ts.map +1 -1
  47. package/dist/server/services/file-explorer-ops.js +2 -6
  48. package/dist/server/services/file-explorer-ops.js.map +1 -1
  49. package/dist/server/services/plan/agent-loader.d.ts +10 -0
  50. package/dist/server/services/plan/agent-loader.d.ts.map +1 -0
  51. package/dist/server/services/plan/agent-loader.js +65 -0
  52. package/dist/server/services/plan/agent-loader.js.map +1 -0
  53. package/dist/server/services/plan/composer.js +1 -1
  54. package/dist/server/services/plan/dependency-resolver.d.ts +1 -1
  55. package/dist/server/services/plan/dependency-resolver.js +2 -2
  56. package/dist/server/services/plan/dependency-resolver.js.map +1 -1
  57. package/dist/server/services/plan/executor.d.ts +6 -2
  58. package/dist/server/services/plan/executor.d.ts.map +1 -1
  59. package/dist/server/services/plan/executor.js +21 -6
  60. package/dist/server/services/plan/executor.js.map +1 -1
  61. package/dist/server/services/plan/front-matter.d.ts +5 -0
  62. package/dist/server/services/plan/front-matter.d.ts.map +1 -1
  63. package/dist/server/services/plan/front-matter.js +19 -0
  64. package/dist/server/services/plan/front-matter.js.map +1 -1
  65. package/dist/server/services/plan/issue-prompt-builder.d.ts +1 -1
  66. package/dist/server/services/plan/issue-prompt-builder.d.ts.map +1 -1
  67. package/dist/server/services/plan/issue-prompt-builder.js +1 -1
  68. package/dist/server/services/plan/issue-retry.d.ts +2 -0
  69. package/dist/server/services/plan/issue-retry.d.ts.map +1 -1
  70. package/dist/server/services/plan/issue-retry.js +1 -0
  71. package/dist/server/services/plan/issue-retry.js.map +1 -1
  72. package/dist/server/services/plan/output-manager.d.ts +2 -2
  73. package/dist/server/services/plan/output-manager.js +2 -2
  74. package/dist/server/services/plan/parser-core.d.ts +1 -1
  75. package/dist/server/services/plan/parser-core.js +1 -1
  76. package/dist/server/services/plan/parser-core.js.map +1 -1
  77. package/dist/server/services/plan/parser-migration.d.ts +2 -2
  78. package/dist/server/services/plan/parser-migration.d.ts.map +1 -1
  79. package/dist/server/services/plan/parser-migration.js +5 -5
  80. package/dist/server/services/plan/parser-migration.js.map +1 -1
  81. package/dist/server/services/plan/parser.d.ts.map +1 -1
  82. package/dist/server/services/plan/parser.js +4 -7
  83. package/dist/server/services/plan/parser.js.map +1 -1
  84. package/dist/server/services/plan/prompt-builder.d.ts +1 -1
  85. package/dist/server/services/plan/prompt-builder.d.ts.map +1 -1
  86. package/dist/server/services/plan/review-gate.d.ts +4 -0
  87. package/dist/server/services/plan/review-gate.d.ts.map +1 -1
  88. package/dist/server/services/plan/review-gate.js +89 -34
  89. package/dist/server/services/plan/review-gate.js.map +1 -1
  90. package/dist/server/services/plan/state-reconciler.d.ts.map +1 -1
  91. package/dist/server/services/plan/state-reconciler.js +21 -11
  92. package/dist/server/services/plan/state-reconciler.js.map +1 -1
  93. package/dist/server/services/plan/types.d.ts +2 -2
  94. package/dist/server/services/plan/types.d.ts.map +1 -1
  95. package/dist/server/services/plan/watcher.js +1 -1
  96. package/dist/server/services/sentry.d.ts.map +1 -1
  97. package/dist/server/services/sentry.js +8 -4
  98. package/dist/server/services/sentry.js.map +1 -1
  99. package/dist/server/services/websocket/deploy-handlers.d.ts +14 -0
  100. package/dist/server/services/websocket/deploy-handlers.d.ts.map +1 -0
  101. package/dist/server/services/websocket/deploy-handlers.js +409 -0
  102. package/dist/server/services/websocket/deploy-handlers.js.map +1 -0
  103. package/dist/server/services/websocket/handler.d.ts.map +1 -1
  104. package/dist/server/services/websocket/handler.js +4 -0
  105. package/dist/server/services/websocket/handler.js.map +1 -1
  106. package/dist/server/services/websocket/handlers/deploy-handlers.d.ts +11 -0
  107. package/dist/server/services/websocket/handlers/deploy-handlers.d.ts.map +1 -0
  108. package/dist/server/services/websocket/handlers/deploy-handlers.js +181 -0
  109. package/dist/server/services/websocket/handlers/deploy-handlers.js.map +1 -0
  110. package/dist/server/services/websocket/plan-board-handlers.d.ts.map +1 -1
  111. package/dist/server/services/websocket/plan-board-handlers.js +54 -1
  112. package/dist/server/services/websocket/plan-board-handlers.js.map +1 -1
  113. package/dist/server/services/websocket/plan-helpers.d.ts +1 -1
  114. package/dist/server/services/websocket/plan-helpers.d.ts.map +1 -1
  115. package/dist/server/services/websocket/plan-helpers.js +3 -4
  116. package/dist/server/services/websocket/plan-helpers.js.map +1 -1
  117. package/dist/server/services/websocket/plan-issue-handlers.d.ts.map +1 -1
  118. package/dist/server/services/websocket/plan-issue-handlers.js +5 -1
  119. package/dist/server/services/websocket/plan-issue-handlers.js.map +1 -1
  120. package/dist/server/services/websocket/plan-sprint-handlers.d.ts.map +1 -1
  121. package/dist/server/services/websocket/plan-sprint-handlers.js +3 -11
  122. package/dist/server/services/websocket/plan-sprint-handlers.js.map +1 -1
  123. package/dist/server/services/websocket/types.d.ts +264 -2
  124. package/dist/server/services/websocket/types.d.ts.map +1 -1
  125. package/package.json +1 -1
  126. package/server/cli/headless/claude-invoker-process.ts +1 -1
  127. package/server/cli/headless/mcp-config.ts +4 -1
  128. package/server/cli/headless/runner.ts +1 -0
  129. package/server/cli/headless/types.ts +4 -1
  130. package/server/index.ts +9 -1
  131. package/server/mcp/bouncer-integration.ts +9 -1
  132. package/server/mcp/security-analysis.ts +19 -0
  133. package/server/mcp/security-patterns.ts +53 -2
  134. package/server/services/deploy/ai-broker.ts +512 -0
  135. package/server/services/deploy/board-execution-handler.ts +847 -0
  136. package/server/services/deploy/credentials.ts +200 -0
  137. package/server/services/deploy/deploy-ai-service.ts +401 -0
  138. package/server/services/deploy/headless-session-handler.ts +415 -0
  139. package/server/services/file-explorer-ops.ts +2 -6
  140. package/server/services/plan/agent-loader.ts +73 -0
  141. package/server/services/plan/agents/review-code.md +28 -0
  142. package/server/services/plan/agents/review-custom.md +27 -0
  143. package/server/services/plan/agents/review-quality.md +42 -0
  144. package/server/services/plan/composer.ts +1 -1
  145. package/server/services/plan/dependency-resolver.ts +2 -2
  146. package/server/services/plan/executor.ts +21 -6
  147. package/server/services/plan/front-matter.ts +23 -0
  148. package/server/services/plan/issue-prompt-builder.ts +2 -2
  149. package/server/services/plan/issue-retry.ts +3 -0
  150. package/server/services/plan/output-manager.ts +2 -2
  151. package/server/services/plan/parser-core.ts +2 -2
  152. package/server/services/plan/parser-migration.ts +5 -5
  153. package/server/services/plan/parser.ts +4 -5
  154. package/server/services/plan/prompt-builder.ts +1 -1
  155. package/server/services/plan/review-gate.ts +104 -33
  156. package/server/services/plan/state-reconciler.ts +21 -11
  157. package/server/services/plan/types.ts +3 -3
  158. package/server/services/plan/watcher.ts +1 -1
  159. package/server/services/sentry.ts +8 -4
  160. package/server/services/websocket/deploy-handlers.ts +544 -0
  161. package/server/services/websocket/handler.ts +5 -1
  162. package/server/services/websocket/handlers/deploy-handlers.ts +231 -0
  163. package/server/services/websocket/plan-board-handlers.ts +53 -1
  164. package/server/services/websocket/plan-helpers.ts +3 -4
  165. package/server/services/websocket/plan-issue-handlers.ts +6 -1
  166. package/server/services/websocket/plan-sprint-handlers.ts +3 -9
  167. package/server/services/websocket/types.ts +333 -2
@@ -0,0 +1,94 @@
1
+ /**
2
+ * Headless Session Handler
3
+ *
4
+ * Handles headless Claude Code session requests from a developer's backend
5
+ * on behalf of end users. Each session is isolated — no shared context
6
+ * between end users.
7
+ *
8
+ * Security: End-user prompts are untrusted input. They are always passed as
9
+ * user messages, never injected into system prompts or tool parameters.
10
+ * The Security Bouncer governs tool access within each session.
11
+ */
12
+ import type { ToolUseEvent } from '../../cli/headless/types.js';
13
+ import { type DeployExecutionResult } from './deploy-ai-service.js';
14
+ export interface HeadlessSessionRequest {
15
+ /** The end user's prompt (untrusted input) */
16
+ prompt: string;
17
+ /** Override the deployment's default system prompt */
18
+ systemPrompt?: string;
19
+ /** Restrict which tools Claude can use in this session */
20
+ allowedTools?: string[];
21
+ /** Override the deployment's default model */
22
+ model?: string;
23
+ /** Unique identifier for the end user (for isolation + rate tracking) */
24
+ endUserId: string;
25
+ }
26
+ export interface DeploymentAiConfig {
27
+ deploymentId: string;
28
+ aiEnabled: boolean;
29
+ allowedAiCapabilities: string[];
30
+ maxTokensPerRequest: number | null;
31
+ maxRequestsPerMinute: number | null;
32
+ maxConcurrentSessions: number;
33
+ defaultSystemPrompt: string | null;
34
+ defaultModel: string;
35
+ workingDir: string;
36
+ }
37
+ export type HeadlessSessionErrorCode = 'CAPABILITY_DENIED' | 'AI_DISABLED' | 'RATE_LIMIT_EXCEEDED' | 'CONCURRENT_LIMIT_EXCEEDED' | 'INVALID_REQUEST' | 'EXECUTION_FAILED';
38
+ export interface HeadlessSessionError {
39
+ code: HeadlessSessionErrorCode;
40
+ message: string;
41
+ }
42
+ export interface HeadlessSessionStreamCallbacks {
43
+ onOutput?: (text: string) => void;
44
+ onThinking?: (text: string) => void;
45
+ onToolUse?: (event: ToolUseEvent) => void;
46
+ onUsageReport?: (report: UsageReportData) => void;
47
+ onHealthUpdate?: (update: HealthUpdateData) => void;
48
+ }
49
+ export interface UsageReportData {
50
+ deploymentId: string;
51
+ endUserId: string;
52
+ capability: 'headless' | 'pm-board';
53
+ tokensUsed: number;
54
+ model: string;
55
+ durationMs: number;
56
+ boardId?: string;
57
+ }
58
+ export interface HealthUpdateData {
59
+ deploymentId: string;
60
+ status: 'healthy' | 'invalid_key' | 'no_credits' | 'rate_limited' | 'unknown_error';
61
+ message: string;
62
+ aiDisabled: boolean;
63
+ }
64
+ export type HeadlessSessionResult = {
65
+ ok: true;
66
+ result: DeployExecutionResult;
67
+ } | {
68
+ ok: false;
69
+ error: HeadlessSessionError;
70
+ };
71
+ /**
72
+ * Handle a headless session request for an end user.
73
+ *
74
+ * Validates the deployment config, checks rate limits, composes the prompt
75
+ * with the system instruction, and launches an isolated headless session
76
+ * via DeployAiService. Streams results back through the provided callbacks.
77
+ *
78
+ * @returns Structured result with either the execution result or an error.
79
+ */
80
+ export declare function handleHeadlessSession(request: HeadlessSessionRequest, config: DeploymentAiConfig, callbacks?: HeadlessSessionStreamCallbacks): Promise<HeadlessSessionResult>;
81
+ /**
82
+ * Get the current rate limit state for a deployment.
83
+ * Useful for status/monitoring endpoints.
84
+ */
85
+ export declare function getDeploymentRateLimitState(deploymentId: string): {
86
+ requestsInLastMinute: number;
87
+ activeSessions: number;
88
+ };
89
+ /**
90
+ * Reset rate limit state for a deployment. Call when a deployment
91
+ * is deleted or all its sessions are force-stopped.
92
+ */
93
+ export declare function resetDeploymentRateLimit(deploymentId: string): void;
94
+ //# sourceMappingURL=headless-session-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"headless-session-handler.d.ts","sourceRoot":"","sources":["../../../../server/services/deploy/headless-session-handler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,274 @@
1
+ // Copyright (c) 2025-present Mstro, Inc. All rights reserved.
2
+ // Licensed under the MIT License. See LICENSE file for details.
3
+ import { DeployAiService } from './deploy-ai-service.js';
4
+ const rateBuckets = new Map();
5
+ function getBucket(deploymentId) {
6
+ let bucket = rateBuckets.get(deploymentId);
7
+ if (!bucket) {
8
+ bucket = { timestamps: [], activeSessions: 0 };
9
+ rateBuckets.set(deploymentId, bucket);
10
+ }
11
+ return bucket;
12
+ }
13
+ function pruneTimestamps(bucket) {
14
+ const oneMinuteAgo = Date.now() - 60_000;
15
+ // Remove timestamps older than 1 minute
16
+ while (bucket.timestamps.length > 0 && bucket.timestamps[0] < oneMinuteAgo) {
17
+ bucket.timestamps.shift();
18
+ }
19
+ }
20
+ function checkRateLimit(config) {
21
+ const bucket = getBucket(config.deploymentId);
22
+ // Check concurrent sessions
23
+ if (bucket.activeSessions >= config.maxConcurrentSessions) {
24
+ return {
25
+ code: 'CONCURRENT_LIMIT_EXCEEDED',
26
+ message: `Deployment has reached the maximum of ${config.maxConcurrentSessions} concurrent sessions. Wait for an existing session to complete.`,
27
+ };
28
+ }
29
+ // Check requests per minute
30
+ if (config.maxRequestsPerMinute !== null) {
31
+ pruneTimestamps(bucket);
32
+ if (bucket.timestamps.length >= config.maxRequestsPerMinute) {
33
+ return {
34
+ code: 'RATE_LIMIT_EXCEEDED',
35
+ message: `Deployment has exceeded the rate limit of ${config.maxRequestsPerMinute} requests per minute. Try again shortly.`,
36
+ };
37
+ }
38
+ }
39
+ return null;
40
+ }
41
+ function recordRequestStart(deploymentId) {
42
+ const bucket = getBucket(deploymentId);
43
+ bucket.timestamps.push(Date.now());
44
+ bucket.activeSessions++;
45
+ }
46
+ function recordRequestEnd(deploymentId) {
47
+ const bucket = getBucket(deploymentId);
48
+ bucket.activeSessions = Math.max(0, bucket.activeSessions - 1);
49
+ }
50
+ // ========== Prompt Composition ==========
51
+ /**
52
+ * Compose the final prompt sent to Claude. The system prompt (from deployment
53
+ * config or per-request override) is prepended as a system instruction block.
54
+ * The end-user prompt follows as a clearly delimited user message.
55
+ *
56
+ * SECURITY: The end-user prompt is always in the user-message section,
57
+ * never interpolated into the system instruction.
58
+ */
59
+ function composePrompt(systemPrompt, userPrompt) {
60
+ if (!systemPrompt) {
61
+ return userPrompt;
62
+ }
63
+ return [
64
+ '<system-instruction>',
65
+ systemPrompt,
66
+ '</system-instruction>',
67
+ '',
68
+ userPrompt,
69
+ ].join('\n');
70
+ }
71
+ // ========== Handler ==========
72
+ /**
73
+ * Handle a headless session request for an end user.
74
+ *
75
+ * Validates the deployment config, checks rate limits, composes the prompt
76
+ * with the system instruction, and launches an isolated headless session
77
+ * via DeployAiService. Streams results back through the provided callbacks.
78
+ *
79
+ * @returns Structured result with either the execution result or an error.
80
+ */
81
+ export async function handleHeadlessSession(request, config, callbacks) {
82
+ // ── Validate request ───────────────────────────────────────
83
+ if (!request.prompt || request.prompt.trim().length === 0) {
84
+ return {
85
+ ok: false,
86
+ error: { code: 'INVALID_REQUEST', message: 'prompt is required and must not be empty.' },
87
+ };
88
+ }
89
+ if (!request.endUserId || request.endUserId.trim().length === 0) {
90
+ return {
91
+ ok: false,
92
+ error: { code: 'INVALID_REQUEST', message: 'endUserId is required.' },
93
+ };
94
+ }
95
+ // ── Validate AI is enabled ─────────────────────────────────
96
+ if (!config.aiEnabled) {
97
+ return {
98
+ ok: false,
99
+ error: { code: 'AI_DISABLED', message: 'AI features are not enabled for this deployment.' },
100
+ };
101
+ }
102
+ // ── Validate headless capability ───────────────────────────
103
+ if (!config.allowedAiCapabilities.includes('headless')) {
104
+ return {
105
+ ok: false,
106
+ error: {
107
+ code: 'CAPABILITY_DENIED',
108
+ message: "This deployment does not have the 'headless' AI capability enabled.",
109
+ },
110
+ };
111
+ }
112
+ // ── Rate limit checks ─────────────────────────────────────
113
+ const rateLimitError = checkRateLimit(config);
114
+ if (rateLimitError) {
115
+ return { ok: false, error: rateLimitError };
116
+ }
117
+ // ── Token limit pre-check ─────────────────────────────────
118
+ // Estimate input tokens from prompt length (~4 chars per token).
119
+ // Reject if estimated input alone exceeds the cap.
120
+ if (config.maxTokensPerRequest !== null) {
121
+ const estimatedInputTokens = Math.ceil(request.prompt.length / 4);
122
+ if (estimatedInputTokens > config.maxTokensPerRequest) {
123
+ return {
124
+ ok: false,
125
+ error: {
126
+ code: 'RATE_LIMIT_EXCEEDED',
127
+ message: `Estimated input tokens (${estimatedInputTokens}) exceeds maxTokensPerRequest (${config.maxTokensPerRequest}). Shorten your prompt.`,
128
+ },
129
+ };
130
+ }
131
+ }
132
+ // ── Compose prompt ─────────────────────────────────────────
133
+ // Use per-request system prompt if provided, otherwise deployment default
134
+ const effectiveSystemPrompt = request.systemPrompt ?? config.defaultSystemPrompt;
135
+ const composedPrompt = composePrompt(effectiveSystemPrompt, request.prompt);
136
+ // Use per-request model if provided, otherwise deployment default
137
+ const effectiveModel = request.model ?? config.defaultModel;
138
+ // ── Launch isolated session ────────────────────────────────
139
+ const service = DeployAiService.getInstance();
140
+ recordRequestStart(config.deploymentId);
141
+ try {
142
+ const result = await service.execute({
143
+ deploymentId: config.deploymentId,
144
+ prompt: composedPrompt,
145
+ workingDir: config.workingDir,
146
+ model: effectiveModel,
147
+ outputCallback: callbacks?.onOutput,
148
+ thinkingCallback: callbacks?.onThinking,
149
+ toolUseCallback: callbacks?.onToolUse,
150
+ // allowedTools from request are inverted: any tool NOT in the list is disallowed.
151
+ // If allowedTools is not specified, no additional restrictions are applied
152
+ // (Security Bouncer still governs tool access).
153
+ disallowedTools: request.allowedTools
154
+ ? invertAllowedTools(request.allowedTools)
155
+ : undefined,
156
+ });
157
+ // Check token limit if configured
158
+ if (config.maxTokensPerRequest !== null &&
159
+ result.totalTokens > config.maxTokensPerRequest) {
160
+ // Session already ran — log but don't fail the response.
161
+ // The token overage is informational; the developer can use this
162
+ // for billing or to tighten limits.
163
+ }
164
+ // Emit usage report after successful execution
165
+ callbacks?.onUsageReport?.({
166
+ deploymentId: config.deploymentId,
167
+ endUserId: request.endUserId,
168
+ capability: 'headless',
169
+ tokensUsed: result.totalTokens,
170
+ model: effectiveModel,
171
+ durationMs: result.durationMs,
172
+ });
173
+ // Check for API key health issues from execution result
174
+ const healthStatus = detectAiHealthIssue(result.error);
175
+ if (healthStatus) {
176
+ callbacks?.onHealthUpdate?.({
177
+ deploymentId: config.deploymentId,
178
+ ...healthStatus,
179
+ });
180
+ }
181
+ return { ok: true, result };
182
+ }
183
+ catch (error) {
184
+ const message = error instanceof Error ? error.message : String(error);
185
+ // Check for API key health issues from caught errors
186
+ const healthStatus = detectAiHealthIssue(message);
187
+ if (healthStatus) {
188
+ callbacks?.onHealthUpdate?.({
189
+ deploymentId: config.deploymentId,
190
+ ...healthStatus,
191
+ });
192
+ }
193
+ return {
194
+ ok: false,
195
+ error: { code: 'EXECUTION_FAILED', message },
196
+ };
197
+ }
198
+ finally {
199
+ recordRequestEnd(config.deploymentId);
200
+ }
201
+ }
202
+ // ========== Health Detection ==========
203
+ /**
204
+ * Detect API key health issues from error messages returned by Claude Code.
205
+ *
206
+ * Anthropic API errors that indicate credential/billing problems:
207
+ * - 401: Invalid API key
208
+ * - 402/insufficient_funds: Account has no credits
209
+ * - 429: Rate limited by Anthropic
210
+ */
211
+ function detectAiHealthIssue(errorMessage) {
212
+ if (!errorMessage)
213
+ return null;
214
+ const lower = errorMessage.toLowerCase();
215
+ if (lower.includes('invalid api key') || lower.includes('invalid x-api-key') || lower.includes('authentication_error')) {
216
+ return { status: 'invalid_key', message: 'Anthropic API key is invalid or revoked.', aiDisabled: true };
217
+ }
218
+ if (lower.includes('insufficient_funds') || lower.includes('no credits') || lower.includes('billing') || lower.includes('credit balance')) {
219
+ return { status: 'no_credits', message: 'Anthropic account has insufficient credits.', aiDisabled: true };
220
+ }
221
+ if (lower.includes('rate_limit') || lower.includes('rate limit') || lower.includes('too many requests')) {
222
+ return { status: 'rate_limited', message: 'Anthropic API rate limit exceeded.', aiDisabled: false };
223
+ }
224
+ return null;
225
+ }
226
+ // ========== Helpers ==========
227
+ /**
228
+ * The DeployAiService accepts `disallowedTools` (blocklist), but the
229
+ * headless session API exposes `allowedTools` (allowlist) for a better
230
+ * developer UX. This converts an allowlist into a blocklist by marking
231
+ * everything outside the allowlist as disallowed.
232
+ *
233
+ * We use a known set of standard Claude Code tool names. Tools not in
234
+ * the known set are left unrestricted (the Security Bouncer handles them).
235
+ */
236
+ const KNOWN_TOOLS = [
237
+ 'Read',
238
+ 'Write',
239
+ 'Edit',
240
+ 'MultiEdit',
241
+ 'Bash',
242
+ 'Glob',
243
+ 'Grep',
244
+ 'WebFetch',
245
+ 'WebSearch',
246
+ 'TodoRead',
247
+ 'TodoWrite',
248
+ 'NotebookEdit',
249
+ 'Agent',
250
+ ];
251
+ function invertAllowedTools(allowedTools) {
252
+ const allowed = new Set(allowedTools);
253
+ return KNOWN_TOOLS.filter((tool) => !allowed.has(tool));
254
+ }
255
+ /**
256
+ * Get the current rate limit state for a deployment.
257
+ * Useful for status/monitoring endpoints.
258
+ */
259
+ export function getDeploymentRateLimitState(deploymentId) {
260
+ const bucket = getBucket(deploymentId);
261
+ pruneTimestamps(bucket);
262
+ return {
263
+ requestsInLastMinute: bucket.timestamps.length,
264
+ activeSessions: bucket.activeSessions,
265
+ };
266
+ }
267
+ /**
268
+ * Reset rate limit state for a deployment. Call when a deployment
269
+ * is deleted or all its sessions are force-stopped.
270
+ */
271
+ export function resetDeploymentRateLimit(deploymentId) {
272
+ rateBuckets.delete(deploymentId);
273
+ }
274
+ //# sourceMappingURL=headless-session-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"headless-session-handler.js","sourceRoot":"","sources":["../../../../server/services/deploy/headless-session-handler.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"file-explorer-ops.d.ts","sourceRoot":"","sources":["../../../server/services/file-explorer-ops.ts"],"names":[],"mappings":"AAyBA,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,GAAG,WAAW,CAAA;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,OAAO,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,OAAO,CAAA;IAChB,OAAO,CAAC,EAAE,cAAc,EAAE,CAAA;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,wBAAgB,aAAa,CAC3B,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,UAAU,GAAE,OAAe,GAC1B,mBAAmB,CAwDrB;AAED,wBAAgB,SAAS,CACvB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,QAAQ,CAAC,EAAE,QAAQ,GAClB,mBAAmB,CAkCrB;AAED,wBAAgB,UAAU,CACxB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,GACjB,mBAAmB,CA2BrB;AAED,wBAAgB,eAAe,CAC7B,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,GACjB,mBAAmB,CA4BrB;AAED,wBAAgB,UAAU,CACxB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,GACjB,mBAAmB,CAwCrB;AAED,wBAAgB,UAAU,CACxB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,GACjB,mBAAmB,CAmCrB"}
1
+ {"version":3,"file":"file-explorer-ops.d.ts","sourceRoot":"","sources":["../../../server/services/file-explorer-ops.ts"],"names":[],"mappings":"AAyBA,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,GAAG,WAAW,CAAA;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,OAAO,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,OAAO,CAAA;IAChB,OAAO,CAAC,EAAE,cAAc,EAAE,CAAA;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,wBAAgB,aAAa,CAC3B,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,UAAU,GAAE,OAAe,GAC1B,mBAAmB,CAwDrB;AAED,wBAAgB,SAAS,CACvB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,QAAQ,CAAC,EAAE,QAAQ,GAClB,mBAAmB,CAkCrB;AAED,wBAAgB,UAAU,CACxB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,GACjB,mBAAmB,CA2BrB;AAED,wBAAgB,eAAe,CAC7B,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,GACjB,mBAAmB,CA4BrB;AAED,wBAAgB,UAAU,CACxB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,GACjB,mBAAmB,CAoCrB;AAED,wBAAgB,UAAU,CACxB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,GACjB,mBAAmB,CAmCrB"}
@@ -4,7 +4,7 @@
4
4
  * File Explorer Operations — CRUD for files/directories in the working directory.
5
5
  * All paths are validated to prevent path traversal outside workingDir.
6
6
  */
7
- import { existsSync, mkdirSync, readdirSync, renameSync, rmdirSync, statSync, unlinkSync, writeFileSync } from 'node:fs';
7
+ import { existsSync, mkdirSync, readdirSync, renameSync, rmSync, statSync, unlinkSync, writeFileSync } from 'node:fs';
8
8
  import { dirname, join } from 'node:path';
9
9
  import { containsDangerousPatterns, validateBothPathsWithinWorkingDir, validatePathWithinWorkingDir } from './pathUtils.js';
10
10
  export function listDirectory(dirPath, workingDir, showHidden = false) {
@@ -164,11 +164,7 @@ export function deleteFile(targetPath, workingDir) {
164
164
  }
165
165
  const stats = statSync(resolvedPath);
166
166
  if (stats.isDirectory()) {
167
- const contents = readdirSync(resolvedPath);
168
- if (contents.length > 0) {
169
- return { success: false, error: 'Directory is not empty. Only empty directories can be deleted.' };
170
- }
171
- rmdirSync(resolvedPath);
167
+ rmSync(resolvedPath, { recursive: true });
172
168
  }
173
169
  else {
174
170
  unlinkSync(resolvedPath);
@@ -1 +1 @@
1
- {"version":3,"file":"file-explorer-ops.js","sourceRoot":"","sources":["../../../server/services/file-explorer-ops.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"file-explorer-ops.js","sourceRoot":"","sources":["../../../server/services/file-explorer-ops.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Load an agent prompt by name with layered resolution.
3
+ *
4
+ * @param agentName - The agent file name without extension (e.g., "review-code")
5
+ * @param variables - Key-value map for {{variable}} substitution
6
+ * @param boardDir - Optional board directory for board-level overrides
7
+ * @returns The interpolated prompt string, or null if no agent file found
8
+ */
9
+ export declare function loadAgentPrompt(agentName: string, variables: Record<string, string>, boardDir?: string | null): string | null;
10
+ //# sourceMappingURL=agent-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-loader.d.ts","sourceRoot":"","sources":["../../../../server/services/plan/agent-loader.ts"],"names":[],"mappings":"AAoCA;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAC7B,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACjC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,GACvB,MAAM,GAAG,IAAI,CAwBf"}
@@ -0,0 +1,65 @@
1
+ // Copyright (c) 2025-present Mstro, Inc. All rights reserved.
2
+ // Licensed under the MIT License. See LICENSE file for details.
3
+ /**
4
+ * Agent Prompt Loader — loads review agent prompts from markdown files.
5
+ *
6
+ * Resolution order (first match wins):
7
+ * 1. Board-level override: {boardDir}/agents/{agentName}.md
8
+ * 2. System default: cli/server/services/plan/agents/{agentName}.md
9
+ *
10
+ * Files use YAML frontmatter + markdown body with {{variable}} placeholders.
11
+ * Falls back to null when no file is found (caller should use hardcoded fallback).
12
+ */
13
+ import { existsSync, readFileSync } from 'node:fs';
14
+ import { dirname, join } from 'node:path';
15
+ import { fileURLToPath } from 'node:url';
16
+ const __dirname = dirname(fileURLToPath(import.meta.url));
17
+ const SYSTEM_AGENTS_DIR = join(__dirname, 'agents');
18
+ /** Strip YAML frontmatter (--- ... ---) from markdown, returning just the body. */
19
+ function stripFrontmatter(content) {
20
+ if (!content.startsWith('---'))
21
+ return content;
22
+ const endIdx = content.indexOf('---', 3);
23
+ if (endIdx === -1)
24
+ return content;
25
+ return content.slice(endIdx + 3).trimStart();
26
+ }
27
+ /** Replace all {{variable}} placeholders with values from the provided map. */
28
+ function interpolate(template, variables) {
29
+ return template.replace(/\{\{(\w+)\}\}/g, (match, key) => {
30
+ return key in variables ? variables[key] : match;
31
+ });
32
+ }
33
+ /**
34
+ * Load an agent prompt by name with layered resolution.
35
+ *
36
+ * @param agentName - The agent file name without extension (e.g., "review-code")
37
+ * @param variables - Key-value map for {{variable}} substitution
38
+ * @param boardDir - Optional board directory for board-level overrides
39
+ * @returns The interpolated prompt string, or null if no agent file found
40
+ */
41
+ export function loadAgentPrompt(agentName, variables, boardDir) {
42
+ const fileName = `${agentName}.md`;
43
+ // 1. Board-level override
44
+ if (boardDir) {
45
+ const boardAgentPath = join(boardDir, 'agents', fileName);
46
+ if (existsSync(boardAgentPath)) {
47
+ try {
48
+ const raw = readFileSync(boardAgentPath, 'utf-8');
49
+ return interpolate(stripFrontmatter(raw), variables);
50
+ }
51
+ catch { /* fall through to system default */ }
52
+ }
53
+ }
54
+ // 2. System default
55
+ const systemPath = join(SYSTEM_AGENTS_DIR, fileName);
56
+ if (existsSync(systemPath)) {
57
+ try {
58
+ const raw = readFileSync(systemPath, 'utf-8');
59
+ return interpolate(stripFrontmatter(raw), variables);
60
+ }
61
+ catch { /* return null */ }
62
+ }
63
+ return null;
64
+ }
65
+ //# sourceMappingURL=agent-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-loader.js","sourceRoot":"","sources":["../../../../server/services/plan/agent-loader.ts"],"names":[],"mappings":"AAAA,8DAA8D;AAC9D,gEAAgE;AAEhE;;;;;;;;;GASG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1D,MAAM,iBAAiB,GAAG,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;AAEpD,mFAAmF;AACnF,SAAS,gBAAgB,CAAC,OAAe;IACvC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC;QAAE,OAAO,OAAO,CAAC;IAC/C,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACzC,IAAI,MAAM,KAAK,CAAC,CAAC;QAAE,OAAO,OAAO,CAAC;IAClC,OAAO,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;AAC/C,CAAC;AAED,+EAA+E;AAC/E,SAAS,WAAW,CAAC,QAAgB,EAAE,SAAiC;IACtE,OAAO,QAAQ,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC,KAAK,EAAE,GAAW,EAAE,EAAE;QAC/D,OAAO,GAAG,IAAI,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IACnD,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,eAAe,CAC7B,SAAiB,EACjB,SAAiC,EACjC,QAAwB;IAExB,MAAM,QAAQ,GAAG,GAAG,SAAS,KAAK,CAAC;IAEnC,0BAA0B;IAC1B,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC1D,IAAI,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;YAC/B,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,YAAY,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;gBAClD,OAAO,WAAW,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,SAAS,CAAC,CAAC;YACvD,CAAC;YAAC,MAAM,CAAC,CAAC,oCAAoC,CAAC,CAAC;QAClD,CAAC;IACH,CAAC;IAED,oBAAoB;IACpB,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAC;IACrD,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3B,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YAC9C,OAAO,WAAW,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,SAAS,CAAC,CAAC;QACvD,CAAC;QAAC,MAAM,CAAC,CAAC,iBAAiB,CAAC,CAAC;IAC/B,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -4,7 +4,7 @@
4
4
  * Plan Composer — Handles natural language prompts for PPS creation/editing.
5
5
  *
6
6
  * When a planPrompt message arrives, this builds a context-enriched prompt
7
- * against the .pm/ (or legacy .plan/) directory and spawns a scoped
7
+ * against the .mstro/pm/ directory and spawns a scoped
8
8
  * HeadlessRunner session to execute it.
9
9
  */
10
10
  import { existsSync, readFileSync } from 'node:fs';
@@ -14,7 +14,7 @@ export declare function detectCycles(issues: Issue[]): string[] | null;
14
14
  * Compute the set of issues that are ready to work on.
15
15
  * An issue is ready if:
16
16
  * - It's not an epic
17
- * - Its status is backlog or todo (not started, done, or cancelled)
17
+ * - Its status is todo (refined and ready for execution)
18
18
  * - All its blocked_by items are done or cancelled
19
19
  *
20
20
  * If epicScope is provided, only returns issues belonging to that epic.
@@ -59,7 +59,7 @@ function dfs(path, issueByPath, color, parent) {
59
59
  * Compute the set of issues that are ready to work on.
60
60
  * An issue is ready if:
61
61
  * - It's not an epic
62
- * - Its status is backlog or todo (not started, done, or cancelled)
62
+ * - Its status is todo (refined and ready for execution)
63
63
  * - All its blocked_by items are done or cancelled
64
64
  *
65
65
  * If epicScope is provided, only returns issues belonging to that epic.
@@ -69,7 +69,7 @@ export function resolveReadyToWork(issues, epicScope, sprintScope) {
69
69
  for (const issue of issues) {
70
70
  issueByPath.set(issue.path, issue);
71
71
  }
72
- const readyStatuses = new Set(['backlog', 'todo']);
72
+ const readyStatuses = new Set(['todo']);
73
73
  const doneStatuses = new Set(['done', 'cancelled']);
74
74
  const priorityOrder = { P0: 0, P1: 1, P2: 2, P3: 3 };
75
75
  // Build set of child paths for epic scoping
@@ -1 +1 @@
1
- {"version":3,"file":"dependency-resolver.js","sourceRoot":"","sources":["../../../../server/services/plan/dependency-resolver.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dependency-resolver.js","sourceRoot":"","sources":["../../../../server/services/plan/dependency-resolver.ts"],"names":[],"mappings":"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"}
@@ -30,15 +30,19 @@ export declare class PlanExecutor extends EventEmitter {
30
30
  private epicScope;
31
31
  /** Cached PM directory path — resolved once per start(). */
32
32
  private pmDir;
33
- /** Board directory path (e.g. /path/.pm/boards/BOARD-001). Used for outputs, reviews, progress. */
33
+ /** Board directory path (e.g. /path/.mstro/pm/boards/BOARD-001). Used for outputs, reviews, progress. */
34
34
  private boardDir;
35
35
  /** Board ID being executed (e.g. "BOARD-001") */
36
36
  private boardId;
37
37
  private configInstaller;
38
38
  /** Flag to prevent start() from clearing scope set by startBoard/startEpic */
39
39
  private _scopeSetByCall;
40
+ /** Extra environment variables forwarded to HeadlessRunner child processes (e.g. API keys) */
41
+ private extraEnv?;
40
42
  private metrics;
41
- constructor(workingDir: string);
43
+ constructor(workingDir: string, options?: {
44
+ extraEnv?: Record<string, string>;
45
+ });
42
46
  getStatus(): ExecutionStatus;
43
47
  getMetrics(): ExecutionMetrics;
44
48
  startEpic(epicPath: string): Promise<void>;