mastracode 0.26.0-alpha.5 → 0.26.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.
- package/CHANGELOG.md +133 -0
- package/dist/acp/agent.d.ts +4 -4
- package/dist/acp/agent.d.ts.map +1 -1
- package/dist/acp/event-mapper.d.ts +3 -3
- package/dist/acp/event-mapper.d.ts.map +1 -1
- package/dist/acp/server.d.ts +2 -2
- package/dist/acp/server.d.ts.map +1 -1
- package/dist/{acp-7DQDVR3M.js → acp-G5OLW7EV.js} +12 -12
- package/dist/acp-G5OLW7EV.js.map +1 -0
- package/dist/{acp-NTTZEFVN.cjs → acp-YSYEXVBE.cjs} +15 -15
- package/dist/acp-YSYEXVBE.cjs.map +1 -0
- package/dist/acp.cjs +2 -2
- package/dist/acp.js +1 -1
- package/dist/agents/instructions.d.ts.map +1 -1
- package/dist/agents/mastracode-gateway.d.ts +8 -1
- package/dist/agents/mastracode-gateway.d.ts.map +1 -1
- package/dist/agents/memory.d.ts +1 -1
- package/dist/agents/model.d.ts +1 -1
- package/dist/agents/modes/build.d.ts +2 -2
- package/dist/agents/modes/build.d.ts.map +1 -1
- package/dist/agents/modes/explore.d.ts +2 -2
- package/dist/agents/modes/explore.d.ts.map +1 -1
- package/dist/agents/modes/plan.d.ts +2 -2
- package/dist/agents/modes/plan.d.ts.map +1 -1
- package/dist/agents/prompts/plan.d.ts +5 -4
- package/dist/agents/prompts/plan.d.ts.map +1 -1
- package/dist/agents/thread-caveman-state.d.ts +2 -2
- package/dist/agents/thread-caveman-state.d.ts.map +1 -1
- package/dist/agents/tool-availability.d.ts +5 -1
- package/dist/agents/tool-availability.d.ts.map +1 -1
- package/dist/{chunk-QO4KIOLG.js → chunk-GT3A3LAA.js} +221 -117
- package/dist/chunk-GT3A3LAA.js.map +1 -0
- package/dist/{chunk-IU477VVQ.js → chunk-IFUIWWGJ.js} +8 -8
- package/dist/chunk-IFUIWWGJ.js.map +1 -0
- package/dist/{chunk-DVBJN36L.cjs → chunk-KGBCGF6C.cjs} +47 -23
- package/dist/chunk-KGBCGF6C.cjs.map +1 -0
- package/dist/{chunk-L67CU2OP.js → chunk-LUSQ75XP.js} +233 -136
- package/dist/chunk-LUSQ75XP.js.map +1 -0
- package/dist/{chunk-F3TKSK3C.js → chunk-NDCWIAKG.js} +43 -21
- package/dist/chunk-NDCWIAKG.js.map +1 -0
- package/dist/{chunk-UW25EMMX.cjs → chunk-NUKVNLFS.cjs} +1160 -1063
- package/dist/chunk-NUKVNLFS.cjs.map +1 -0
- package/dist/{chunk-DPRNPXVC.cjs → chunk-VBH3L4LD.cjs} +8 -8
- package/dist/chunk-VBH3L4LD.cjs.map +1 -0
- package/dist/{chunk-MUZ2ZLWN.cjs → chunk-Z3HFSXTB.cjs} +256 -152
- package/dist/chunk-Z3HFSXTB.cjs.map +1 -0
- package/dist/cli.cjs +33 -33
- package/dist/cli.cjs.map +1 -1
- package/dist/cli.js +18 -18
- package/dist/cli.js.map +1 -1
- package/dist/evals/context-builder.d.ts +5 -5
- package/dist/evals/context-builder.d.ts.map +1 -1
- package/dist/headless.d.ts +3 -3
- package/dist/headless.d.ts.map +1 -1
- package/dist/index.cjs +10 -10
- package/dist/index.d.ts +36 -34
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/mcp/config.d.ts +6 -2
- package/dist/mcp/config.d.ts.map +1 -1
- package/dist/processors/plan-rejection-abort.d.ts.map +1 -1
- package/dist/tools/request-sandbox-access.d.ts.map +1 -1
- package/dist/tools/utils.d.ts +2 -2
- package/dist/tui/commands/api-keys.d.ts +15 -0
- package/dist/tui/commands/api-keys.d.ts.map +1 -1
- package/dist/tui/commands/clone.d.ts +1 -1
- package/dist/tui/commands/goal.d.ts +2 -2
- package/dist/tui/commands/goal.d.ts.map +1 -1
- package/dist/tui/commands/types.d.ts +3 -3
- package/dist/tui/commands/types.d.ts.map +1 -1
- package/dist/tui/components/assistant-message.d.ts +3 -3
- package/dist/tui/components/assistant-message.d.ts.map +1 -1
- package/dist/tui/components/help-overlay.d.ts +1 -1
- package/dist/tui/components/help-overlay.d.ts.map +1 -1
- package/dist/tui/components/login-selector.d.ts +1 -1
- package/dist/tui/components/om-progress.d.ts +2 -2
- package/dist/tui/components/om-progress.d.ts.map +1 -1
- package/dist/tui/components/plan-approval-inline.d.ts.map +1 -1
- package/dist/tui/components/task-progress.d.ts +1 -1
- package/dist/tui/components/thread-selector.d.ts +4 -4
- package/dist/tui/components/thread-selector.d.ts.map +1 -1
- package/dist/tui/event-dispatch.d.ts +3 -3
- package/dist/tui/event-dispatch.d.ts.map +1 -1
- package/dist/tui/handlers/agent-lifecycle.d.ts +1 -1
- package/dist/tui/handlers/agent-lifecycle.d.ts.map +1 -1
- package/dist/tui/handlers/message.d.ts +4 -4
- package/dist/tui/handlers/message.d.ts.map +1 -1
- package/dist/tui/handlers/prompts.d.ts +1 -1
- package/dist/tui/handlers/prompts.d.ts.map +1 -1
- package/dist/tui/handlers/types.d.ts +3 -2
- package/dist/tui/handlers/types.d.ts.map +1 -1
- package/dist/tui/mastra-tui.d.ts +3 -3
- package/dist/tui/mastra-tui.d.ts.map +1 -1
- package/dist/tui/render-messages.d.ts +4 -3
- package/dist/tui/render-messages.d.ts.map +1 -1
- package/dist/tui/setup.d.ts +1 -1
- package/dist/tui/setup.d.ts.map +1 -1
- package/dist/tui/state.d.ts +24 -10
- package/dist/tui/state.d.ts.map +1 -1
- package/dist/tui/status-line.d.ts.map +1 -1
- package/dist/tui.cjs +19 -19
- package/dist/tui.js +2 -2
- package/dist/utils/plan-diff.d.ts +25 -0
- package/dist/utils/plan-diff.d.ts.map +1 -0
- package/dist/utils/plans.d.ts +41 -12
- package/dist/utils/plans.d.ts.map +1 -1
- package/package.json +16 -16
- package/dist/acp-7DQDVR3M.js.map +0 -1
- package/dist/acp-NTTZEFVN.cjs.map +0 -1
- package/dist/chunk-DPRNPXVC.cjs.map +0 -1
- package/dist/chunk-DVBJN36L.cjs.map +0 -1
- package/dist/chunk-F3TKSK3C.js.map +0 -1
- package/dist/chunk-IU477VVQ.js.map +0 -1
- package/dist/chunk-L67CU2OP.js.map +0 -1
- package/dist/chunk-MUZ2ZLWN.cjs.map +0 -1
- package/dist/chunk-QO4KIOLG.js.map +0 -1
- package/dist/chunk-UW25EMMX.cjs.map +0 -1
|
@@ -19,7 +19,7 @@ function mapToolKind(toolName) {
|
|
|
19
19
|
if (name.includes("think") || name.includes("reason")) return "think";
|
|
20
20
|
return "other";
|
|
21
21
|
}
|
|
22
|
-
function
|
|
22
|
+
function handleAgentControllerEvent(event, state, connection, session) {
|
|
23
23
|
if (!state) return;
|
|
24
24
|
switch (event.type) {
|
|
25
25
|
case "agent_start":
|
|
@@ -161,7 +161,7 @@ function accumulateUsage(target, usage) {
|
|
|
161
161
|
}
|
|
162
162
|
var MastraCodeAcpAgent = class {
|
|
163
163
|
connection;
|
|
164
|
-
|
|
164
|
+
controller;
|
|
165
165
|
session;
|
|
166
166
|
modes;
|
|
167
167
|
unsubscribeSessionEvents;
|
|
@@ -176,13 +176,13 @@ var MastraCodeAcpAgent = class {
|
|
|
176
176
|
}
|
|
177
177
|
return threadId;
|
|
178
178
|
}
|
|
179
|
-
constructor(connection,
|
|
179
|
+
constructor(connection, controller, session, modes) {
|
|
180
180
|
this.connection = connection;
|
|
181
|
-
this.
|
|
181
|
+
this.controller = controller;
|
|
182
182
|
this.session = session;
|
|
183
183
|
this.modes = modes;
|
|
184
184
|
this.unsubscribeSessionEvents = this.session.subscribe((event) => {
|
|
185
|
-
|
|
185
|
+
handleAgentControllerEvent(event, this.currentPromptState, this.connection, this.session);
|
|
186
186
|
});
|
|
187
187
|
}
|
|
188
188
|
dispose() {
|
|
@@ -215,7 +215,7 @@ var MastraCodeAcpAgent = class {
|
|
|
215
215
|
const currentModeId = this.session.mode.get();
|
|
216
216
|
let models;
|
|
217
217
|
try {
|
|
218
|
-
const availableModels = await this.
|
|
218
|
+
const availableModels = await this.controller.listAvailableModels();
|
|
219
219
|
const currentModelId = this.session.model.get();
|
|
220
220
|
models = {
|
|
221
221
|
currentModelId: currentModelId ?? "",
|
|
@@ -326,5 +326,5 @@ function mapStopReason(reason) {
|
|
|
326
326
|
}
|
|
327
327
|
|
|
328
328
|
export { MastraCodeAcpAgent, setAutoApprove };
|
|
329
|
-
//# sourceMappingURL=chunk-
|
|
330
|
-
//# sourceMappingURL=chunk-
|
|
329
|
+
//# sourceMappingURL=chunk-IFUIWWGJ.js.map
|
|
330
|
+
//# sourceMappingURL=chunk-IFUIWWGJ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/acp/event-mapper.ts","../src/acp/agent.ts"],"names":["usage","reason"],"mappings":"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","file":"chunk-IFUIWWGJ.js","sourcesContent":["import type { SessionNotification, RequestPermissionRequest, AgentSideConnection } from '@agentclientprotocol/sdk';\nimport type { AgentControllerEvent, Session, TokenUsage } from '@mastra/core/agent-controller';\n\nlet autoApprove = false;\n\n/**\n * Enable or disable automatic tool approval (set via --dangerous-auto-approve CLI flag).\n */\nexport function setAutoApprove(value: boolean): void {\n autoApprove = value;\n}\n\n/**\n * Map a mastracode tool name to an ACP ToolKind.\n */\nfunction mapToolKind(\n toolName: string,\n): 'read' | 'edit' | 'delete' | 'move' | 'search' | 'execute' | 'think' | 'fetch' | 'other' {\n const name = toolName.toLowerCase();\n if (name.includes('edit') || name.includes('write') || name.includes('replace') || name.includes('patch'))\n return 'edit';\n if (name.includes('read') || name.includes('view') || name.includes('list') || name.includes('find')) return 'read';\n if (name.includes('delete') || name.includes('remove')) return 'delete';\n if (name.includes('search') || name.includes('grep') || name.includes('query')) return 'search';\n if (name.includes('execute') || name.includes('run') || name.includes('command') || name.includes('shell'))\n return 'execute';\n if (\n name.includes('fetch') ||\n name.includes('curl') ||\n name.includes('http') ||\n name.includes('browse') ||\n name.includes('navigate')\n )\n return 'fetch';\n if (name.includes('think') || name.includes('reason')) return 'think';\n return 'other';\n}\n\n/**\n * Accumulated state for an active prompt turn.\n */\nexport interface PromptState {\n sessionId: string;\n lastTextLength: number;\n usage: TokenUsage;\n resolve: (reason: 'complete' | 'aborted' | 'error' | 'suspended') => void;\n}\n\n/**\n * Translate an AgentControllerEvent into an ACP SessionNotification and send it\n * via the provided connection. Returns null for events that don't produce\n * a session update.\n */\nexport function handleAgentControllerEvent(\n event: AgentControllerEvent,\n state: PromptState | null,\n connection: AgentSideConnection,\n session: Session,\n): void {\n if (!state) return;\n\n switch (event.type) {\n case 'agent_start':\n state.lastTextLength = 0;\n break;\n\n case 'message_update': {\n if (event.message.role !== 'assistant') break;\n const fullText = event.message.content\n .filter((c): c is { type: 'text'; text: string } => c.type === 'text')\n .map(p => p.text)\n .join('');\n if (fullText.length > state.lastTextLength) {\n const delta = fullText.slice(state.lastTextLength);\n state.lastTextLength = fullText.length;\n sendUpdate(connection, state.sessionId, {\n sessionUpdate: 'agent_message_chunk',\n content: { type: 'text', text: delta },\n });\n }\n break;\n }\n\n case 'message_end':\n state.lastTextLength = 0;\n break;\n\n case 'tool_start':\n sendUpdate(connection, state.sessionId, {\n sessionUpdate: 'tool_call',\n toolCallId: event.toolCallId,\n title: event.toolName,\n kind: mapToolKind(event.toolName),\n status: 'in_progress',\n rawInput: JSON.stringify(event.args),\n });\n break;\n\n case 'tool_end':\n sendUpdate(connection, state.sessionId, {\n sessionUpdate: 'tool_call_update',\n toolCallId: event.toolCallId,\n status: event.isError ? 'failed' : 'completed',\n rawOutput: typeof event.result === 'string' ? event.result : JSON.stringify(event.result),\n });\n break;\n\n case 'tool_approval_required':\n void handleToolApproval(state, connection, session, event).catch(err => {\n process.stderr.write(`[acp] handleToolApproval error: ${err}\\n`);\n });\n break;\n\n case 'tool_suspended':\n void handleToolSuspended(state, connection, session, event).catch(err => {\n process.stderr.write(`[acp] handleToolSuspended error: ${err}\\n`);\n });\n break;\n\n case 'usage_update':\n accumulateUsage(state.usage, event.usage);\n break;\n\n case 'agent_end':\n state.resolve(event.reason ?? 'complete');\n break;\n\n // Ignored in v1: om_*, subagent_*, workspace_*, task_updated, etc.\n default:\n break;\n }\n}\n\nfunction sendUpdate(connection: AgentSideConnection, sessionId: string, update: SessionNotification['update']): void {\n connection.sessionUpdate({ sessionId, update }).catch(err => {\n process.stderr.write(`[acp] sessionUpdate error: ${err}\\n`);\n });\n}\n\nasync function handleToolApproval(\n state: PromptState,\n connection: AgentSideConnection,\n session: Session,\n event: Extract<AgentControllerEvent, { type: 'tool_approval_required' }>,\n): Promise<void> {\n // Auto-approve if --dangerous-auto-approve flag is set\n if (autoApprove) {\n session.respondToToolApproval({ decision: 'approve' });\n return;\n }\n\n const req: RequestPermissionRequest = {\n sessionId: state.sessionId,\n toolCall: {\n toolCallId: event.toolCallId,\n title: event.toolName,\n rawInput: JSON.stringify(event.args),\n },\n options: [\n { optionId: 'approve', name: 'Allow', kind: 'allow_once' },\n { optionId: 'reject', name: 'Reject', kind: 'reject_once' },\n ],\n };\n\n try {\n const resp = await connection.requestPermission(req);\n if (resp.outcome.outcome === 'selected') {\n const decision = resp.outcome.optionId === 'approve' ? 'approve' : 'decline';\n session.respondToToolApproval({ decision });\n } else {\n session.respondToToolApproval({ decision: 'decline' });\n }\n } catch (err) {\n process.stderr.write(`[acp] requestPermission error: ${err}\\n`);\n session.respondToToolApproval({ decision: 'decline' });\n }\n}\n\nasync function handleToolSuspended(\n state: PromptState,\n connection: AgentSideConnection,\n session: Session,\n event: Extract<AgentControllerEvent, { type: 'tool_suspended' }>,\n): Promise<void> {\n const { toolCallId, toolName, args, suspendPayload } = event;\n\n // Auto-resolve certain suspensions (mirrors headless.ts autoResolve)\n if (toolName === 'request_access' || (suspendPayload as any)?.kind === 'sandbox_access_request') {\n void session.respondToToolSuspension({ toolCallId, resumeData: 'Yes' });\n return;\n }\n\n if (toolName === 'submit_plan') {\n // Request permission for plan approval\n const req: RequestPermissionRequest = {\n sessionId: state.sessionId,\n toolCall: {\n toolCallId,\n title: toolName,\n rawInput: JSON.stringify(args),\n },\n options: [\n { optionId: 'approve', name: 'Approve Plan', kind: 'allow_once' },\n { optionId: 'reject', name: 'Reject Plan', kind: 'reject_once' },\n ],\n };\n\n try {\n const resp = await connection.requestPermission(req);\n const action =\n resp.outcome.outcome === 'selected' && resp.outcome.optionId === 'approve' ? 'approved' : 'rejected';\n void session.respondToToolSuspension({ toolCallId, resumeData: { action } });\n } catch {\n void session.respondToToolSuspension({ toolCallId, resumeData: { action: 'rejected' } });\n }\n return;\n }\n\n // For ask_user and other suspensions, auto-resolve\n void session.respondToToolSuspension({\n toolCallId,\n resumeData: 'Proceed with your best judgment. Do not ask further questions.',\n });\n}\n\nfunction accumulateUsage(target: TokenUsage, usage: TokenUsage): void {\n target.promptTokens += usage.promptTokens;\n target.completionTokens += usage.completionTokens;\n target.totalTokens += usage.totalTokens;\n if (usage.reasoningTokens) target.reasoningTokens = (target.reasoningTokens ?? 0) + usage.reasoningTokens;\n if (usage.cachedInputTokens) target.cachedInputTokens = (target.cachedInputTokens ?? 0) + usage.cachedInputTokens;\n if (usage.cacheCreationInputTokens) {\n target.cacheCreationInputTokens = (target.cacheCreationInputTokens ?? 0) + usage.cacheCreationInputTokens;\n }\n}\n","import type {\n Agent,\n AgentSideConnection,\n InitializeRequest,\n InitializeResponse,\n NewSessionRequest,\n NewSessionResponse,\n PromptRequest,\n PromptResponse,\n CancelNotification,\n ContentBlock,\n} from '@agentclientprotocol/sdk';\nimport { PROTOCOL_VERSION } from '@agentclientprotocol/sdk';\nimport type { AgentController, AgentControllerMode, Session } from '@mastra/core/agent-controller';\nimport { handleAgentControllerEvent } from './event-mapper.js';\nimport type { PromptState } from './event-mapper.js';\n\n/**\n * ACP Agent implementation that wraps a mastracode Controller.\n * Each instance represents one ACP connection from a client.\n */\nexport class MastraCodeAcpAgent implements Agent {\n private readonly connection: AgentSideConnection;\n private readonly controller: AgentController;\n private readonly session: Session;\n private readonly modes: AgentControllerMode[];\n private readonly unsubscribeSessionEvents: () => void;\n private readonly sessionMap = new Map<string, string>(); // sessionId -> threadId\n private currentPromptState: PromptState | null = null;\n private promptMutex: Promise<void> = Promise.resolve();\n\n private getThreadIdOrThrow(sessionId: string): string {\n const threadId = this.sessionMap.get(sessionId);\n if (!threadId) {\n throw new Error(`Unknown ACP sessionId: ${sessionId}`);\n }\n return threadId;\n }\n\n constructor(\n connection: AgentSideConnection,\n controller: AgentController,\n session: Session,\n modes: AgentControllerMode[],\n ) {\n this.connection = connection;\n this.controller = controller;\n this.session = session;\n this.modes = modes;\n\n // Register persistent event listener\n this.unsubscribeSessionEvents = this.session.subscribe(event => {\n handleAgentControllerEvent(event, this.currentPromptState, this.connection, this.session);\n });\n }\n\n dispose(): void {\n this.unsubscribeSessionEvents();\n }\n\n async initialize(_request: InitializeRequest): Promise<InitializeResponse> {\n return {\n protocolVersion: PROTOCOL_VERSION,\n agentInfo: {\n name: 'mastracode',\n title: 'Mastra Code',\n version: '0.1.0',\n },\n agentCapabilities: {\n loadSession: false,\n },\n };\n }\n\n async authenticate(): Promise<void> {\n // No-op: mastracode handles its own auth\n }\n\n async newSession(_request: NewSessionRequest): Promise<NewSessionResponse> {\n const thread = await this.session.thread.create();\n const sessionId = thread.id;\n this.sessionMap.set(sessionId, thread.id);\n\n // Switch to the new thread\n await this.session.thread.switch({ threadId: thread.id });\n\n // Build modes list from constructor param\n const availableModes = this.modes.map((m: AgentControllerMode) => ({\n id: m.id,\n name: m.name ?? m.id,\n }));\n\n const currentModeId = this.session.mode.get();\n\n // Build models list (best-effort)\n let models: NewSessionResponse['models'];\n try {\n const availableModels = await this.controller.listAvailableModels();\n const currentModelId = this.session.model.get();\n models = {\n currentModelId: currentModelId ?? '',\n availableModels: availableModels.map(m => ({\n modelId: m.id,\n name: m.modelName,\n })),\n };\n } catch {\n // Model listing may fail if no providers are configured\n }\n\n return {\n sessionId,\n modes: {\n currentModeId,\n availableModes,\n },\n models,\n };\n }\n\n async prompt(request: PromptRequest): Promise<PromptResponse> {\n const { sessionId, prompt: contentBlocks } = request;\n\n // Extract text from content blocks\n const text = extractTextFromContentBlocks(contentBlocks);\n\n const threadId = this.getThreadIdOrThrow(sessionId);\n\n // Serialize prompts via mutex\n const prevMutex = this.promptMutex;\n let resolveMutex: () => void;\n this.promptMutex = new Promise<void>(resolve => {\n resolveMutex = resolve;\n });\n\n await prevMutex;\n\n try {\n // Ensure we're on the right thread while prompts are serialized\n await this.session.thread.switch({ threadId });\n\n // Create prompt state that will be resolved when agent_end fires\n const result = new Promise<{\n reason: 'complete' | 'aborted' | 'error' | 'suspended';\n usage: PromptState['usage'];\n }>(resolve => {\n const usage: PromptState['usage'] = {\n promptTokens: 0,\n completionTokens: 0,\n totalTokens: 0,\n };\n\n this.currentPromptState = {\n sessionId,\n lastTextLength: 0,\n usage,\n resolve: reason => {\n resolve({ reason, usage });\n this.currentPromptState = null;\n },\n };\n });\n\n // Send the message to the session\n try {\n await this.session.sendMessage({ content: text });\n } catch (error) {\n this.currentPromptState = null;\n throw error;\n }\n\n // Wait for agent_end to resolve\n const { reason, usage } = await result;\n\n return {\n stopReason: mapStopReason(reason),\n usage: {\n inputTokens: usage.promptTokens,\n outputTokens: usage.completionTokens,\n totalTokens: usage.totalTokens,\n thoughtTokens: usage.reasoningTokens,\n cachedReadTokens: usage.cachedInputTokens,\n cachedWriteTokens: usage.cacheCreationInputTokens,\n },\n };\n } finally {\n resolveMutex!();\n }\n }\n\n async cancel(_notification: CancelNotification): Promise<void> {\n this.session.abort();\n }\n\n async setSessionMode(params: { sessionId: string; modeId: string }): Promise<void> {\n const threadId = this.getThreadIdOrThrow(params.sessionId);\n await this.session.thread.switch({ threadId });\n this.session.mode.set({ modeId: params.modeId });\n }\n\n async unstable_setSessionModel(params: { sessionId: string; modelId: string }): Promise<void> {\n const threadId = this.getThreadIdOrThrow(params.sessionId);\n await this.session.thread.switch({ threadId });\n this.session.model.set({ modelId: params.modelId });\n }\n}\n\nexport function extractTextFromContentBlocks(blocks: ContentBlock[]): string {\n const parts: string[] = [];\n for (const block of blocks) {\n if (block.type === 'text') {\n parts.push(block.text);\n } else if (block.type === 'resource_link') {\n parts.push(`[resource: ${block.uri}]`);\n } else if (block.type === 'resource') {\n parts.push(`[resource: ${block.resource.uri}]`);\n }\n }\n return parts.join('\\n');\n}\n\nexport function mapStopReason(\n reason: 'complete' | 'aborted' | 'error' | 'suspended',\n): 'end_turn' | 'cancelled' | 'max_tokens' | 'max_turn_requests' | 'refusal' {\n switch (reason) {\n case 'complete':\n return 'end_turn';\n case 'aborted':\n return 'cancelled';\n case 'error':\n return 'end_turn';\n case 'suspended':\n return 'end_turn';\n }\n}\n"]}
|
|
@@ -1495,10 +1495,26 @@ function getPlansDir() {
|
|
|
1495
1495
|
function getLocalPlansDir(projectPath) {
|
|
1496
1496
|
return path2__namespace.default.join(projectPath, chunkBULVNQ2P_cjs.DEFAULT_CONFIG_DIR, "plans");
|
|
1497
1497
|
}
|
|
1498
|
+
function getLocalPlansRelativeDir() {
|
|
1499
|
+
return path2__namespace.default.join(chunkBULVNQ2P_cjs.DEFAULT_CONFIG_DIR, "plans");
|
|
1500
|
+
}
|
|
1498
1501
|
function slugify(str) {
|
|
1499
1502
|
const slug = str.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-|-$/g, "");
|
|
1500
1503
|
return slug || "untitled";
|
|
1501
1504
|
}
|
|
1505
|
+
function resolvePlanPath(projectPath, submittedPath) {
|
|
1506
|
+
if (!submittedPath) return void 0;
|
|
1507
|
+
return path2__namespace.default.isAbsolute(submittedPath) ? submittedPath : path2__namespace.default.resolve(projectPath, submittedPath);
|
|
1508
|
+
}
|
|
1509
|
+
function isPlanFilePath(projectPath, targetPath) {
|
|
1510
|
+
const abs = resolvePlanPath(projectPath, targetPath);
|
|
1511
|
+
if (!abs) return false;
|
|
1512
|
+
if (path2__namespace.default.extname(abs).toLowerCase() !== ".md") return false;
|
|
1513
|
+
const plansDir = path2__namespace.default.resolve(getLocalPlansDir(projectPath));
|
|
1514
|
+
const rel = path2__namespace.default.relative(plansDir, abs);
|
|
1515
|
+
if (rel === "" || rel.startsWith("..") || path2__namespace.default.isAbsolute(rel)) return false;
|
|
1516
|
+
return !rel.includes(path2__namespace.default.sep);
|
|
1517
|
+
}
|
|
1502
1518
|
async function savePlanToDisk(opts) {
|
|
1503
1519
|
const { title, plan, resourceId } = opts;
|
|
1504
1520
|
const plansDir = opts.plansDir ?? getPlansDir();
|
|
@@ -1521,26 +1537,32 @@ ${plan}
|
|
|
1521
1537
|
`;
|
|
1522
1538
|
await fs2__default.default.writeFile(path2__namespace.default.join(dir, filename), content, "utf-8");
|
|
1523
1539
|
}
|
|
1524
|
-
async function
|
|
1525
|
-
|
|
1526
|
-
|
|
1527
|
-
|
|
1528
|
-
|
|
1529
|
-
|
|
1530
|
-
const target = path2__namespace.default.resolve(baseDir, filename);
|
|
1531
|
-
const rel = path2__namespace.default.relative(baseDir, target);
|
|
1532
|
-
if (rel.startsWith("..") || path2__namespace.default.isAbsolute(rel)) {
|
|
1533
|
-
throw new Error(`Invalid plan title: ${title}`);
|
|
1540
|
+
async function readPlanFile(absPath) {
|
|
1541
|
+
let raw;
|
|
1542
|
+
try {
|
|
1543
|
+
raw = await fs2__default.default.readFile(absPath, "utf-8");
|
|
1544
|
+
} catch {
|
|
1545
|
+
return void 0;
|
|
1534
1546
|
}
|
|
1535
|
-
const
|
|
1536
|
-
|
|
1537
|
-
|
|
1538
|
-
|
|
1539
|
-
|
|
1540
|
-
|
|
1547
|
+
const lines = raw.split(/\r?\n/);
|
|
1548
|
+
const headingIndex = lines.findIndex((line) => line.trim().length > 0);
|
|
1549
|
+
const heading = headingIndex >= 0 ? lines[headingIndex] : void 0;
|
|
1550
|
+
if (heading?.startsWith("# ")) {
|
|
1551
|
+
const title = heading.slice(2).trim();
|
|
1552
|
+
const plan = lines.slice(headingIndex + 1).join("\n").replace(/^\n+/, "").trimEnd();
|
|
1553
|
+
return { title, plan };
|
|
1554
|
+
}
|
|
1555
|
+
return { title: "", plan: raw.trimEnd() };
|
|
1541
1556
|
}
|
|
1542
|
-
function
|
|
1543
|
-
|
|
1557
|
+
async function approvePlanFile(opts) {
|
|
1558
|
+
const { planPath, title, resourceId, plansDir } = opts;
|
|
1559
|
+
const current = await readPlanFile(planPath);
|
|
1560
|
+
if (!current) {
|
|
1561
|
+
return void 0;
|
|
1562
|
+
}
|
|
1563
|
+
const resolvedTitle = title || current.title || "Implementation Plan";
|
|
1564
|
+
await savePlanToDisk({ title: resolvedTitle, plan: current.plan, resourceId, plansDir });
|
|
1565
|
+
return path2__namespace.default.basename(planPath);
|
|
1544
1566
|
}
|
|
1545
1567
|
|
|
1546
1568
|
exports.BOX_INDENT = BOX_INDENT;
|
|
@@ -1556,6 +1578,7 @@ exports.THREAD_ACTIVE_MODEL_PACK_ID_KEY = THREAD_ACTIVE_MODEL_PACK_ID_KEY;
|
|
|
1556
1578
|
exports.ThreadLockError = ThreadLockError;
|
|
1557
1579
|
exports.acquireThreadLock = acquireThreadLock;
|
|
1558
1580
|
exports.applyThemeMode = applyThemeMode;
|
|
1581
|
+
exports.approvePlanFile = approvePlanFile;
|
|
1559
1582
|
exports.buildOpenAICodexOAuthFetch = buildOpenAICodexOAuthFetch;
|
|
1560
1583
|
exports.checkProfileProviderMismatch = checkProfileProviderMismatch;
|
|
1561
1584
|
exports.createBrowserFromSettings = createBrowserFromSettings;
|
|
@@ -1567,31 +1590,32 @@ exports.getAvailableOmPacks = getAvailableOmPacks;
|
|
|
1567
1590
|
exports.getCustomProviderId = getCustomProviderId;
|
|
1568
1591
|
exports.getEditorTheme = getEditorTheme;
|
|
1569
1592
|
exports.getEffectiveThinkingLevel = getEffectiveThinkingLevel;
|
|
1593
|
+
exports.getLocalPlansRelativeDir = getLocalPlansRelativeDir;
|
|
1570
1594
|
exports.getMarkdownTheme = getMarkdownTheme;
|
|
1571
|
-
exports.getPlanFilename = getPlanFilename;
|
|
1572
1595
|
exports.getPlansDir = getPlansDir;
|
|
1573
1596
|
exports.getSelectListTheme = getSelectListTheme;
|
|
1574
1597
|
exports.getSettingsListTheme = getSettingsListTheme;
|
|
1575
1598
|
exports.getTermWidth = getTermWidth;
|
|
1576
1599
|
exports.getThemeMode = getThemeMode;
|
|
1600
|
+
exports.isPlanFilePath = isPlanFilePath;
|
|
1577
1601
|
exports.loadSettings = loadSettings;
|
|
1578
1602
|
exports.luminance = luminance;
|
|
1579
1603
|
exports.mastra = mastra;
|
|
1580
1604
|
exports.mastraBrand = mastraBrand;
|
|
1581
1605
|
exports.openaiCodexProvider = openaiCodexProvider;
|
|
1606
|
+
exports.readPlanFile = readPlanFile;
|
|
1582
1607
|
exports.releaseAllThreadLocks = releaseAllThreadLocks;
|
|
1583
1608
|
exports.releaseThreadLock = releaseThreadLock;
|
|
1584
1609
|
exports.resolveModelDefaults = resolveModelDefaults;
|
|
1585
1610
|
exports.resolveOmRoleModel = resolveOmRoleModel;
|
|
1611
|
+
exports.resolvePlanPath = resolvePlanPath;
|
|
1586
1612
|
exports.resolveThreadActiveModelPackId = resolveThreadActiveModelPackId;
|
|
1587
1613
|
exports.restoreTerminalForeground = restoreTerminalForeground;
|
|
1588
|
-
exports.savePlanSnapshot = savePlanSnapshot;
|
|
1589
|
-
exports.savePlanToDisk = savePlanToDisk;
|
|
1590
1614
|
exports.saveSettings = saveSettings;
|
|
1591
1615
|
exports.setAuthStorage = setAuthStorage;
|
|
1592
1616
|
exports.setProfileProvider = setProfileProvider;
|
|
1593
1617
|
exports.theme = theme;
|
|
1594
1618
|
exports.tintHex = tintHex;
|
|
1595
1619
|
exports.toCustomProviderModelId = toCustomProviderModelId;
|
|
1596
|
-
//# sourceMappingURL=chunk-
|
|
1597
|
-
//# sourceMappingURL=chunk-
|
|
1620
|
+
//# sourceMappingURL=chunk-KGBCGF6C.cjs.map
|
|
1621
|
+
//# sourceMappingURL=chunk-KGBCGF6C.cjs.map
|