mcp-subagents-opencode 1.0.0 → 1.2.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/build/helpers.d.ts +43 -0
- package/build/helpers.d.ts.map +1 -1
- package/build/helpers.js +99 -8
- package/build/helpers.js.map +1 -1
- package/build/index.js +17 -3
- package/build/index.js.map +1 -1
- package/build/models.d.ts +27 -14
- package/build/models.d.ts.map +1 -1
- package/build/models.js +78 -39
- package/build/models.js.map +1 -1
- package/build/server/register-notifications.d.ts +5 -0
- package/build/server/register-notifications.d.ts.map +1 -1
- package/build/server/register-notifications.js +28 -3
- package/build/server/register-notifications.js.map +1 -1
- package/build/server/register-resources.d.ts.map +1 -1
- package/build/server/register-resources.js +9 -4
- package/build/server/register-resources.js.map +1 -1
- package/build/server/register-tasks.d.ts.map +1 -1
- package/build/server/register-tasks.js +13 -6
- package/build/server/register-tasks.js.map +1 -1
- package/build/server/register-tools.d.ts.map +1 -1
- package/build/server/register-tools.js +4 -3
- package/build/server/register-tools.js.map +1 -1
- package/build/services/model-discovery.d.ts +56 -0
- package/build/services/model-discovery.d.ts.map +1 -0
- package/build/services/model-discovery.js +259 -0
- package/build/services/model-discovery.js.map +1 -0
- package/build/services/opencode-client.d.ts +15 -1
- package/build/services/opencode-client.d.ts.map +1 -1
- package/build/services/opencode-client.js +229 -8
- package/build/services/opencode-client.js.map +1 -1
- package/build/services/opencode-spawner.d.ts +8 -2
- package/build/services/opencode-spawner.d.ts.map +1 -1
- package/build/services/opencode-spawner.js +331 -28
- package/build/services/opencode-spawner.js.map +1 -1
- package/build/services/output-file.d.ts +7 -5
- package/build/services/output-file.d.ts.map +1 -1
- package/build/services/output-file.js +28 -31
- package/build/services/output-file.js.map +1 -1
- package/build/services/task-manager.d.ts +6 -2
- package/build/services/task-manager.d.ts.map +1 -1
- package/build/services/task-manager.js +34 -5
- package/build/services/task-manager.js.map +1 -1
- package/build/services/task-persistence.d.ts +3 -3
- package/build/services/task-persistence.d.ts.map +1 -1
- package/build/services/task-persistence.js +15 -13
- package/build/services/task-persistence.js.map +1 -1
- package/build/services/template-home.d.ts +25 -0
- package/build/services/template-home.d.ts.map +1 -0
- package/build/services/template-home.js +105 -0
- package/build/services/template-home.js.map +1 -0
- package/build/templates/index.d.ts +1 -0
- package/build/templates/index.d.ts.map +1 -1
- package/build/templates/index.js +34 -7
- package/build/templates/index.js.map +1 -1
- package/build/templates/overlays/coder-csharp.mdx +6 -0
- package/build/templates/overlays/coder-go.mdx +6 -0
- package/build/templates/overlays/coder-java.mdx +6 -0
- package/build/templates/overlays/coder-kotlin.mdx +6 -0
- package/build/templates/overlays/coder-nextjs.mdx +6 -0
- package/build/templates/overlays/coder-python.mdx +6 -0
- package/build/templates/overlays/coder-react.mdx +6 -0
- package/build/templates/overlays/coder-ruby.mdx +6 -0
- package/build/templates/overlays/coder-rust.mdx +6 -0
- package/build/templates/overlays/coder-supabase.mdx +6 -0
- package/build/templates/overlays/coder-supastarter.mdx +6 -0
- package/build/templates/overlays/coder-swift.mdx +6 -0
- package/build/templates/overlays/coder-tauri.mdx +6 -0
- package/build/templates/overlays/coder-triggerdev.mdx +6 -0
- package/build/templates/overlays/coder-typescript.mdx +6 -0
- package/build/templates/overlays/coder-vue.mdx +6 -0
- package/build/templates/overlays/planner-architecture.mdx +6 -0
- package/build/templates/overlays/planner-bugfix.mdx +6 -0
- package/build/templates/overlays/planner-feature.mdx +6 -0
- package/build/templates/overlays/planner-migration.mdx +6 -0
- package/build/templates/overlays/planner-refactor.mdx +6 -0
- package/build/templates/overlays/researcher-library.mdx +6 -0
- package/build/templates/overlays/researcher-performance.mdx +6 -0
- package/build/templates/overlays/researcher-security.mdx +6 -0
- package/build/templates/overlays/tester-graphql.mdx +6 -0
- package/build/templates/overlays/tester-playwright.mdx +6 -0
- package/build/templates/overlays/tester-rest.mdx +6 -0
- package/build/templates/overlays/tester-suite.mdx +6 -0
- package/build/templates/super-coder.mdx +21 -0
- package/build/templates/super-planner.mdx +21 -0
- package/build/templates/super-researcher.mdx +21 -0
- package/build/templates/super-tester.mdx +21 -0
- package/build/tools/answer-question.d.ts.map +1 -1
- package/build/tools/answer-question.js +4 -3
- package/build/tools/answer-question.js.map +1 -1
- package/build/tools/cancel-task.d.ts.map +1 -1
- package/build/tools/cancel-task.js +6 -2
- package/build/tools/cancel-task.js.map +1 -1
- package/build/tools/send-message.d.ts.map +1 -1
- package/build/tools/send-message.js +13 -2
- package/build/tools/send-message.js.map +1 -1
- package/build/tools/shared-spawn.d.ts.map +1 -1
- package/build/tools/shared-spawn.js +19 -2
- package/build/tools/shared-spawn.js.map +1 -1
- package/build/tools/spawn-agent.d.ts +1 -1
- package/build/tools/spawn-agent.js +5 -5
- package/build/tools/spawn-agent.js.map +1 -1
- package/package.json +1 -1
- package/build/services/account-manager.d.ts +0 -88
- package/build/services/account-manager.d.ts.map +0 -1
- package/build/services/account-manager.js +0 -239
- package/build/services/account-manager.js.map +0 -1
- package/build/services/claude-code-runner.d.ts +0 -15
- package/build/services/claude-code-runner.d.ts.map +0 -1
- package/build/services/claude-code-runner.js +0 -475
- package/build/services/claude-code-runner.js.map +0 -1
- package/build/services/exhaustion-fallback.d.ts +0 -27
- package/build/services/exhaustion-fallback.d.ts.map +0 -1
- package/build/services/exhaustion-fallback.js +0 -30
- package/build/services/exhaustion-fallback.js.map +0 -1
- package/build/services/fallback-orchestrator.d.ts +0 -16
- package/build/services/fallback-orchestrator.d.ts.map +0 -1
- package/build/services/fallback-orchestrator.js +0 -48
- package/build/services/fallback-orchestrator.js.map +0 -1
- package/build/services/sdk-client-manager.d.ts +0 -149
- package/build/services/sdk-client-manager.d.ts.map +0 -1
- package/build/services/sdk-client-manager.js +0 -632
- package/build/services/sdk-client-manager.js.map +0 -1
- package/build/services/sdk-session-adapter.d.ts +0 -203
- package/build/services/sdk-session-adapter.d.ts.map +0 -1
- package/build/services/sdk-session-adapter.js +0 -1088
- package/build/services/sdk-session-adapter.js.map +0 -1
- package/build/services/sdk-spawner.d.ts +0 -42
- package/build/services/sdk-spawner.d.ts.map +0 -1
- package/build/services/sdk-spawner.js +0 -488
- package/build/services/sdk-spawner.js.map +0 -1
- package/build/services/session-hooks.d.ts +0 -24
- package/build/services/session-hooks.d.ts.map +0 -1
- package/build/services/session-hooks.js +0 -130
- package/build/services/session-hooks.js.map +0 -1
- package/build/services/session-snapshot.d.ts +0 -19
- package/build/services/session-snapshot.d.ts.map +0 -1
- package/build/services/session-snapshot.js +0 -203
- package/build/services/session-snapshot.js.map +0 -1
- package/build/tools/spawn-coder.d.ts +0 -70
- package/build/tools/spawn-coder.d.ts.map +0 -1
- package/build/tools/spawn-coder.js +0 -71
- package/build/tools/spawn-coder.js.map +0 -1
- package/build/tools/spawn-planner.d.ts +0 -70
- package/build/tools/spawn-planner.d.ts.map +0 -1
- package/build/tools/spawn-planner.js +0 -71
- package/build/tools/spawn-planner.js.map +0 -1
- package/build/tools/spawn-researcher.d.ts +0 -70
- package/build/tools/spawn-researcher.d.ts.map +0 -1
- package/build/tools/spawn-researcher.js +0 -70
- package/build/tools/spawn-researcher.js.map +0 -1
- package/build/tools/spawn-task.d.ts +0 -74
- package/build/tools/spawn-task.d.ts.map +0 -1
- package/build/tools/spawn-task.js +0 -107
- package/build/tools/spawn-task.js.map +0 -1
- package/build/tools/spawn-tester.d.ts +0 -70
- package/build/tools/spawn-tester.d.ts.map +0 -1
- package/build/tools/spawn-tester.js +0 -69
- package/build/tools/spawn-tester.js.map +0 -1
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Session Hooks Service - Implements SDK SessionHooks for lifecycle control.
|
|
3
|
-
*
|
|
4
|
-
* Provides:
|
|
5
|
-
* - Structured error handling with retry decisions
|
|
6
|
-
* - Session lifecycle monitoring (start, end)
|
|
7
|
-
* - Pre/post tool use hooks for logging and allow/deny decisions
|
|
8
|
-
* - Centralized hook management per task
|
|
9
|
-
*
|
|
10
|
-
* Note: Tool execution metrics are tracked by sdk-session-adapter using
|
|
11
|
-
* toolCallId-based matching, which is more accurate than the toolName-based
|
|
12
|
-
* matching previously done here. This file no longer tracks tool metrics
|
|
13
|
-
* to avoid duplicate/conflicting writes to task.sessionMetrics.toolMetrics.
|
|
14
|
-
*
|
|
15
|
-
* Uses SessionHooks interface from the SDK.
|
|
16
|
-
*/
|
|
17
|
-
import type { SessionHooks } from '@github/copilot-sdk';
|
|
18
|
-
/**
|
|
19
|
-
* Create session hooks for a specific task.
|
|
20
|
-
* These hooks integrate SDK lifecycle events with our task management.
|
|
21
|
-
* Returns SessionHooks with single handler functions as expected by the SDK.
|
|
22
|
-
*/
|
|
23
|
-
export declare function createSessionHooks(taskId: string): SessionHooks;
|
|
24
|
-
//# sourceMappingURL=session-hooks.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"session-hooks.d.ts","sourceRoot":"","sources":["../../src/services/session-hooks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EACV,YAAY,EAWb,MAAM,qBAAqB,CAAC;AAI7B;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,CA4H/D"}
|
|
@@ -1,130 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Session Hooks Service - Implements SDK SessionHooks for lifecycle control.
|
|
3
|
-
*
|
|
4
|
-
* Provides:
|
|
5
|
-
* - Structured error handling with retry decisions
|
|
6
|
-
* - Session lifecycle monitoring (start, end)
|
|
7
|
-
* - Pre/post tool use hooks for logging and allow/deny decisions
|
|
8
|
-
* - Centralized hook management per task
|
|
9
|
-
*
|
|
10
|
-
* Note: Tool execution metrics are tracked by sdk-session-adapter using
|
|
11
|
-
* toolCallId-based matching, which is more accurate than the toolName-based
|
|
12
|
-
* matching previously done here. This file no longer tracks tool metrics
|
|
13
|
-
* to avoid duplicate/conflicting writes to task.sessionMetrics.toolMetrics.
|
|
14
|
-
*
|
|
15
|
-
* Uses SessionHooks interface from the SDK.
|
|
16
|
-
*/
|
|
17
|
-
import { taskManager } from './task-manager.js';
|
|
18
|
-
/**
|
|
19
|
-
* Create session hooks for a specific task.
|
|
20
|
-
* These hooks integrate SDK lifecycle events with our task management.
|
|
21
|
-
* Returns SessionHooks with single handler functions as expected by the SDK.
|
|
22
|
-
*/
|
|
23
|
-
export function createSessionHooks(taskId) {
|
|
24
|
-
return {
|
|
25
|
-
/**
|
|
26
|
-
* Called when a session starts.
|
|
27
|
-
* Logs session start and sets up monitoring.
|
|
28
|
-
*/
|
|
29
|
-
onSessionStart: async (input) => {
|
|
30
|
-
console.error(`[session-hooks] Session started for task ${taskId}: source=${input.source}`);
|
|
31
|
-
// Hook lifecycle → file only (internal metadata)
|
|
32
|
-
taskManager.appendOutputFileOnly(taskId, `[hooks] Session ${input.source === 'resume' ? 'resumed' : 'started'}`);
|
|
33
|
-
// Initialize session metrics
|
|
34
|
-
const task = taskManager.getTask(taskId);
|
|
35
|
-
if (task && !task.sessionMetrics) {
|
|
36
|
-
taskManager.updateTask(taskId, {
|
|
37
|
-
sessionMetrics: {
|
|
38
|
-
quotas: {},
|
|
39
|
-
toolMetrics: {},
|
|
40
|
-
activeSubagents: [],
|
|
41
|
-
completedSubagents: [],
|
|
42
|
-
turnCount: 0,
|
|
43
|
-
totalTokens: { input: 0, output: 0 },
|
|
44
|
-
},
|
|
45
|
-
});
|
|
46
|
-
}
|
|
47
|
-
return {
|
|
48
|
-
additionalContext: `Task ID: ${taskId}`,
|
|
49
|
-
};
|
|
50
|
-
},
|
|
51
|
-
/**
|
|
52
|
-
* Called when a session ends.
|
|
53
|
-
* Logs session end and generates summary.
|
|
54
|
-
*/
|
|
55
|
-
onSessionEnd: async (input) => {
|
|
56
|
-
console.error(`[session-hooks] Session ended for task ${taskId}: reason=${input.reason}`);
|
|
57
|
-
// Hook lifecycle → file only
|
|
58
|
-
taskManager.appendOutputFileOnly(taskId, `[hooks] Session ended: ${input.reason}`);
|
|
59
|
-
// Generate session summary if available
|
|
60
|
-
if (input.finalMessage) {
|
|
61
|
-
return {
|
|
62
|
-
sessionSummary: input.finalMessage,
|
|
63
|
-
};
|
|
64
|
-
}
|
|
65
|
-
return undefined;
|
|
66
|
-
},
|
|
67
|
-
/**
|
|
68
|
-
* Called when an error occurs.
|
|
69
|
-
* Provides structured error handling with retry decisions.
|
|
70
|
-
*/
|
|
71
|
-
onErrorOccurred: async (input) => {
|
|
72
|
-
const errorMsg = String(input.error);
|
|
73
|
-
console.error(`[session-hooks] Error for task ${taskId}: context=${input.errorContext}, recoverable=${input.recoverable}`);
|
|
74
|
-
// Create structured failure context
|
|
75
|
-
const failureContext = {
|
|
76
|
-
errorType: input.errorContext,
|
|
77
|
-
errorContext: input.errorContext,
|
|
78
|
-
recoverable: input.recoverable,
|
|
79
|
-
message: errorMsg,
|
|
80
|
-
};
|
|
81
|
-
// Update task with failure context
|
|
82
|
-
taskManager.updateTask(taskId, { failureContext });
|
|
83
|
-
taskManager.appendOutput(taskId, `[hooks] Error: ${input.errorContext} - ${errorMsg.slice(0, 100)}`);
|
|
84
|
-
// Determine error handling strategy
|
|
85
|
-
if (input.recoverable) {
|
|
86
|
-
// For recoverable errors, suggest retry
|
|
87
|
-
return {
|
|
88
|
-
errorHandling: 'retry',
|
|
89
|
-
retryCount: 3,
|
|
90
|
-
userNotification: `Recoverable error in ${input.errorContext}: ${errorMsg.slice(0, 100)}`,
|
|
91
|
-
};
|
|
92
|
-
}
|
|
93
|
-
// For non-recoverable errors in tool execution, skip the tool
|
|
94
|
-
if (input.errorContext === 'tool_execution') {
|
|
95
|
-
return {
|
|
96
|
-
errorHandling: 'skip',
|
|
97
|
-
userNotification: `Tool execution failed: ${errorMsg.slice(0, 100)}`,
|
|
98
|
-
};
|
|
99
|
-
}
|
|
100
|
-
// For model call errors, abort (let the adapter handle rotation)
|
|
101
|
-
if (input.errorContext === 'model_call') {
|
|
102
|
-
return {
|
|
103
|
-
errorHandling: 'abort',
|
|
104
|
-
userNotification: `Model call failed: ${errorMsg.slice(0, 100)}`,
|
|
105
|
-
};
|
|
106
|
-
}
|
|
107
|
-
return undefined;
|
|
108
|
-
},
|
|
109
|
-
/**
|
|
110
|
-
* Called before a tool is executed.
|
|
111
|
-
* Logs tool start. Metrics are tracked by sdk-session-adapter.
|
|
112
|
-
*/
|
|
113
|
-
onPreToolUse: async (input) => {
|
|
114
|
-
console.error(`[session-hooks] Tool starting for task ${taskId}: ${input.toolName}`);
|
|
115
|
-
return {
|
|
116
|
-
permissionDecision: 'allow',
|
|
117
|
-
};
|
|
118
|
-
},
|
|
119
|
-
/**
|
|
120
|
-
* Called after a tool is executed.
|
|
121
|
-
* Logs tool completion. Metrics are tracked by sdk-session-adapter.
|
|
122
|
-
*/
|
|
123
|
-
onPostToolUse: async (input) => {
|
|
124
|
-
const isSuccess = input.toolResult?.resultType === 'success';
|
|
125
|
-
console.error(`[session-hooks] Tool completed for task ${taskId}: ${input.toolName} (${isSuccess ? 'success' : 'failure'})`);
|
|
126
|
-
return undefined;
|
|
127
|
-
},
|
|
128
|
-
};
|
|
129
|
-
}
|
|
130
|
-
//# sourceMappingURL=session-hooks.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"session-hooks.js","sourceRoot":"","sources":["../../src/services/session-hooks.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Session Snapshot Builder
|
|
3
|
-
*
|
|
4
|
-
* Extracts bounded context from a Copilot session for handoff to Claude Agent SDK.
|
|
5
|
-
* Provides last N turns with message truncation to prevent excessive context size.
|
|
6
|
-
*/
|
|
7
|
-
import type { CopilotSession } from '@github/copilot-sdk';
|
|
8
|
-
import { TaskState } from '../types.js';
|
|
9
|
-
/**
|
|
10
|
-
* Build handoff prompt from session snapshot.
|
|
11
|
-
* Includes original prompt and bounded recent context.
|
|
12
|
-
*/
|
|
13
|
-
export declare function buildHandoffPrompt(task: TaskState, maxTurns?: number, reason?: string): string;
|
|
14
|
-
/**
|
|
15
|
-
* Build handoff prompt with structured SDK history when available.
|
|
16
|
-
* Falls back to output-file snapshot if session history is unavailable.
|
|
17
|
-
*/
|
|
18
|
-
export declare function buildHandoffPromptFromSession(task: TaskState, session: CopilotSession | undefined, maxTurns?: number, reason?: string): Promise<string>;
|
|
19
|
-
//# sourceMappingURL=session-snapshot.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"session-snapshot.d.ts","sourceRoot":"","sources":["../../src/services/session-snapshot.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAgB,MAAM,qBAAqB,CAAC;AACxE,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AA+HxC;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,GAAE,MAAkB,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CA8CzG;AAED;;;GAGG;AACH,wBAAsB,6BAA6B,CACjD,IAAI,EAAE,SAAS,EACf,OAAO,EAAE,cAAc,GAAG,SAAS,EACnC,QAAQ,GAAE,MAAkB,EAC5B,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,CAAC,CA2CjB"}
|
|
@@ -1,203 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Session Snapshot Builder
|
|
3
|
-
*
|
|
4
|
-
* Extracts bounded context from a Copilot session for handoff to Claude Agent SDK.
|
|
5
|
-
* Provides last N turns with message truncation to prevent excessive context size.
|
|
6
|
-
*/
|
|
7
|
-
import { readFileSync } from 'fs';
|
|
8
|
-
const MAX_TURNS = 5; // Max number of turns to include
|
|
9
|
-
const MAX_MESSAGE_LENGTH = 2000; // Max chars per message
|
|
10
|
-
const MAX_TOTAL_LENGTH = 20000; // Max total snapshot size
|
|
11
|
-
/**
|
|
12
|
-
* Parse output file and extract recent message pairs.
|
|
13
|
-
* Simple heuristic: split on common markers.
|
|
14
|
-
*/
|
|
15
|
-
function parseOutputFile(filePath) {
|
|
16
|
-
try {
|
|
17
|
-
const content = readFileSync(filePath, 'utf-8');
|
|
18
|
-
const pairs = [];
|
|
19
|
-
// Split by common output markers
|
|
20
|
-
const lines = content.split('\n');
|
|
21
|
-
let currentAssistant = '';
|
|
22
|
-
let isAssistant = false;
|
|
23
|
-
for (const line of lines) {
|
|
24
|
-
// Detect assistant output (simple heuristic - lines without user markers)
|
|
25
|
-
if (line.startsWith('[') || line.startsWith('>') || line.trim().length === 0) {
|
|
26
|
-
// System/tool output, skip
|
|
27
|
-
continue;
|
|
28
|
-
}
|
|
29
|
-
// Accumulate assistant output
|
|
30
|
-
if (!isAssistant) {
|
|
31
|
-
isAssistant = true;
|
|
32
|
-
currentAssistant = '';
|
|
33
|
-
}
|
|
34
|
-
currentAssistant += line + '\n';
|
|
35
|
-
}
|
|
36
|
-
// If we have any output, treat it as one big assistant turn
|
|
37
|
-
if (currentAssistant.trim()) {
|
|
38
|
-
pairs.push({
|
|
39
|
-
user: '',
|
|
40
|
-
assistant: currentAssistant.trim(),
|
|
41
|
-
});
|
|
42
|
-
}
|
|
43
|
-
return pairs;
|
|
44
|
-
}
|
|
45
|
-
catch (error) {
|
|
46
|
-
console.warn(`[session-snapshot] Failed to read output file: ${error}`);
|
|
47
|
-
return [];
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
/**
|
|
51
|
-
* Truncate a message to max length with ellipsis.
|
|
52
|
-
*/
|
|
53
|
-
function truncateMessage(msg, maxLength) {
|
|
54
|
-
if (msg.length <= maxLength) {
|
|
55
|
-
return msg;
|
|
56
|
-
}
|
|
57
|
-
return msg.slice(0, maxLength - 3) + '...';
|
|
58
|
-
}
|
|
59
|
-
function pairsFromSessionEvents(events) {
|
|
60
|
-
const pairs = [];
|
|
61
|
-
let pendingUser = '';
|
|
62
|
-
let pendingAssistant = '';
|
|
63
|
-
const flush = () => {
|
|
64
|
-
if (pendingUser.trim() || pendingAssistant.trim()) {
|
|
65
|
-
pairs.push({
|
|
66
|
-
user: pendingUser.trim(),
|
|
67
|
-
assistant: pendingAssistant.trim(),
|
|
68
|
-
});
|
|
69
|
-
}
|
|
70
|
-
pendingUser = '';
|
|
71
|
-
pendingAssistant = '';
|
|
72
|
-
};
|
|
73
|
-
for (const event of events) {
|
|
74
|
-
if (event.type === 'user.message') {
|
|
75
|
-
if (pendingAssistant.trim()) {
|
|
76
|
-
flush();
|
|
77
|
-
}
|
|
78
|
-
const content = event.data.content?.trim();
|
|
79
|
-
if (content) {
|
|
80
|
-
pendingUser = content;
|
|
81
|
-
}
|
|
82
|
-
continue;
|
|
83
|
-
}
|
|
84
|
-
if (event.type === 'assistant.message') {
|
|
85
|
-
const content = event.data.content?.trim();
|
|
86
|
-
if (!content)
|
|
87
|
-
continue;
|
|
88
|
-
if (pendingAssistant.trim()) {
|
|
89
|
-
pendingAssistant += '\n\n' + content;
|
|
90
|
-
}
|
|
91
|
-
else {
|
|
92
|
-
pendingAssistant = content;
|
|
93
|
-
}
|
|
94
|
-
flush();
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
flush();
|
|
98
|
-
return pairs;
|
|
99
|
-
}
|
|
100
|
-
function fallbackReasonIntro(reason) {
|
|
101
|
-
switch (reason) {
|
|
102
|
-
case 'copilot_startup_no_accounts':
|
|
103
|
-
return 'No Copilot account is currently available, so you are taking over before initial execution.';
|
|
104
|
-
case 'copilot_accounts_exhausted':
|
|
105
|
-
return 'All Copilot accounts are currently exhausted, so you are taking over.';
|
|
106
|
-
case 'copilot_rate_limited':
|
|
107
|
-
return 'The Copilot session is rate-limited and cannot continue within policy, so you are taking over.';
|
|
108
|
-
case 'copilot_non_rotatable_error':
|
|
109
|
-
return 'The Copilot session hit a non-rotatable error, so you are taking over.';
|
|
110
|
-
case 'copilot_unhandled_error':
|
|
111
|
-
return 'The Copilot path hit an unhandled error, so you are taking over.';
|
|
112
|
-
default:
|
|
113
|
-
return 'The previous Copilot path cannot continue, so you are taking over.';
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
/**
|
|
117
|
-
* Build handoff prompt from session snapshot.
|
|
118
|
-
* Includes original prompt and bounded recent context.
|
|
119
|
-
*/
|
|
120
|
-
export function buildHandoffPrompt(task, maxTurns = MAX_TURNS, reason) {
|
|
121
|
-
const parts = [];
|
|
122
|
-
// Header explaining the handoff
|
|
123
|
-
parts.push('You are continuing a task that started with GitHub Copilot SDK.');
|
|
124
|
-
parts.push(fallbackReasonIntro(reason));
|
|
125
|
-
parts.push('');
|
|
126
|
-
// Original prompt
|
|
127
|
-
parts.push(`Original task prompt:\n${task.prompt}`);
|
|
128
|
-
parts.push('');
|
|
129
|
-
// Extract recent context if output file exists
|
|
130
|
-
if (task.outputFilePath) {
|
|
131
|
-
const pairs = parseOutputFile(task.outputFilePath);
|
|
132
|
-
const recentPairs = pairs.slice(-maxTurns);
|
|
133
|
-
if (recentPairs.length > 0) {
|
|
134
|
-
parts.push('Recent context from the Copilot session:');
|
|
135
|
-
parts.push('');
|
|
136
|
-
for (const pair of recentPairs) {
|
|
137
|
-
if (pair.user) {
|
|
138
|
-
const truncated = truncateMessage(pair.user, MAX_MESSAGE_LENGTH);
|
|
139
|
-
parts.push(`User: ${truncated}`);
|
|
140
|
-
parts.push('');
|
|
141
|
-
}
|
|
142
|
-
if (pair.assistant) {
|
|
143
|
-
const truncated = truncateMessage(pair.assistant, MAX_MESSAGE_LENGTH);
|
|
144
|
-
parts.push(`Assistant: ${truncated}`);
|
|
145
|
-
parts.push('');
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
// Footer with instruction
|
|
151
|
-
parts.push('Please continue working on this task. Pick up where the Copilot session left off.');
|
|
152
|
-
// Join and enforce total length limit
|
|
153
|
-
const snapshot = parts.join('\n');
|
|
154
|
-
if (snapshot.length > MAX_TOTAL_LENGTH) {
|
|
155
|
-
return snapshot.slice(0, MAX_TOTAL_LENGTH - 100) + '\n\n...[context truncated]\n\nPlease continue working on the original task.';
|
|
156
|
-
}
|
|
157
|
-
return snapshot;
|
|
158
|
-
}
|
|
159
|
-
/**
|
|
160
|
-
* Build handoff prompt with structured SDK history when available.
|
|
161
|
-
* Falls back to output-file snapshot if session history is unavailable.
|
|
162
|
-
*/
|
|
163
|
-
export async function buildHandoffPromptFromSession(task, session, maxTurns = MAX_TURNS, reason) {
|
|
164
|
-
if (!session) {
|
|
165
|
-
return buildHandoffPrompt(task, maxTurns, reason);
|
|
166
|
-
}
|
|
167
|
-
try {
|
|
168
|
-
const events = await session.getMessages();
|
|
169
|
-
const pairs = pairsFromSessionEvents(events);
|
|
170
|
-
if (pairs.length === 0) {
|
|
171
|
-
return buildHandoffPrompt(task, maxTurns, reason);
|
|
172
|
-
}
|
|
173
|
-
const parts = [];
|
|
174
|
-
parts.push('You are continuing a task that started with GitHub Copilot SDK.');
|
|
175
|
-
parts.push(fallbackReasonIntro(reason));
|
|
176
|
-
parts.push('');
|
|
177
|
-
parts.push(`Original task prompt:\n${task.prompt}`);
|
|
178
|
-
parts.push('');
|
|
179
|
-
parts.push('Recent context from structured Copilot session history:');
|
|
180
|
-
parts.push('');
|
|
181
|
-
for (const pair of pairs.slice(-maxTurns)) {
|
|
182
|
-
if (pair.user) {
|
|
183
|
-
parts.push(`User: ${truncateMessage(pair.user, MAX_MESSAGE_LENGTH)}`);
|
|
184
|
-
parts.push('');
|
|
185
|
-
}
|
|
186
|
-
if (pair.assistant) {
|
|
187
|
-
parts.push(`Assistant: ${truncateMessage(pair.assistant, MAX_MESSAGE_LENGTH)}`);
|
|
188
|
-
parts.push('');
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
parts.push('Please continue working on this task. Pick up where the Copilot session left off.');
|
|
192
|
-
const snapshot = parts.join('\n');
|
|
193
|
-
if (snapshot.length > MAX_TOTAL_LENGTH) {
|
|
194
|
-
return snapshot.slice(0, MAX_TOTAL_LENGTH - 100) + '\n\n...[context truncated]\n\nPlease continue working on the original task.';
|
|
195
|
-
}
|
|
196
|
-
return snapshot;
|
|
197
|
-
}
|
|
198
|
-
catch (error) {
|
|
199
|
-
console.warn(`[session-snapshot] Failed to load session history: ${error}`);
|
|
200
|
-
return buildHandoffPrompt(task, maxTurns, reason);
|
|
201
|
-
}
|
|
202
|
-
}
|
|
203
|
-
//# sourceMappingURL=session-snapshot.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"session-snapshot.js","sourceRoot":"","sources":["../../src/services/session-snapshot.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
export declare const spawnCoderTool: {
|
|
2
|
-
name: string;
|
|
3
|
-
description: string;
|
|
4
|
-
inputSchema: {
|
|
5
|
-
type: "object";
|
|
6
|
-
properties: {
|
|
7
|
-
prompt: {
|
|
8
|
-
type: string;
|
|
9
|
-
description: string;
|
|
10
|
-
};
|
|
11
|
-
context_files: {
|
|
12
|
-
type: string;
|
|
13
|
-
items: {
|
|
14
|
-
type: string;
|
|
15
|
-
properties: {
|
|
16
|
-
path: {
|
|
17
|
-
type: string;
|
|
18
|
-
description: string;
|
|
19
|
-
};
|
|
20
|
-
description: {
|
|
21
|
-
type: string;
|
|
22
|
-
description: string;
|
|
23
|
-
};
|
|
24
|
-
};
|
|
25
|
-
required: string[];
|
|
26
|
-
};
|
|
27
|
-
description: string;
|
|
28
|
-
};
|
|
29
|
-
language: {
|
|
30
|
-
type: string;
|
|
31
|
-
enum: ("typescript" | "python" | "rust" | "go" | "java" | "ruby" | "swift" | "csharp" | "kotlin" | "react" | "nextjs" | "vue" | "supabase" | "tauri" | "triggerdev" | "supastarter" | "general")[];
|
|
32
|
-
description: string;
|
|
33
|
-
};
|
|
34
|
-
model: {
|
|
35
|
-
type: string;
|
|
36
|
-
enum: ("claude-opus-4.6" | "claude-haiku-4.5" | "claude-sonnet-4.5")[];
|
|
37
|
-
description: string;
|
|
38
|
-
};
|
|
39
|
-
cwd: {
|
|
40
|
-
type: string;
|
|
41
|
-
description: string;
|
|
42
|
-
};
|
|
43
|
-
timeout: {
|
|
44
|
-
type: string;
|
|
45
|
-
description: string;
|
|
46
|
-
};
|
|
47
|
-
autonomous: {
|
|
48
|
-
type: string;
|
|
49
|
-
description: string;
|
|
50
|
-
};
|
|
51
|
-
depends_on: {
|
|
52
|
-
type: string;
|
|
53
|
-
items: {
|
|
54
|
-
type: string;
|
|
55
|
-
};
|
|
56
|
-
description: string;
|
|
57
|
-
};
|
|
58
|
-
labels: {
|
|
59
|
-
type: string;
|
|
60
|
-
items: {
|
|
61
|
-
type: string;
|
|
62
|
-
};
|
|
63
|
-
description: string;
|
|
64
|
-
};
|
|
65
|
-
};
|
|
66
|
-
required: string[];
|
|
67
|
-
};
|
|
68
|
-
};
|
|
69
|
-
export declare const handleSpawnCoder: (args: unknown, ctx?: import("../types.js").ToolContext) => import("./shared-spawn.js").SpawnHandlerResult;
|
|
70
|
-
//# sourceMappingURL=spawn-coder.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"spawn-coder.d.ts","sourceRoot":"","sources":["../../src/tools/spawn-coder.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4D1B,CAAC;AAEF,eAAO,MAAM,gBAAgB,4GAM3B,CAAC"}
|
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
import { SpawnCoderSchema, CODER_LANGUAGES } from '../utils/sanitize.js';
|
|
2
|
-
import { MODEL_IDS, DEFAULT_MODEL } from '../models.js';
|
|
3
|
-
import { createSpawnHandler } from './shared-spawn.js';
|
|
4
|
-
export const spawnCoderTool = {
|
|
5
|
-
name: 'spawn_coder',
|
|
6
|
-
description: `Spawn an autonomous coding agent. Runs isolated — your brief + context_files are its ONLY context.
|
|
7
|
-
|
|
8
|
-
**Required:** prompt (min 1000 chars) + context_files (min 1 .md file).
|
|
9
|
-
|
|
10
|
-
**Prompt must include:** OBJECTIVE (what to build), FILES TO MODIFY (absolute paths), SUCCESS CRITERIA (testable), CONSTRAINTS (what NOT to do), PATTERNS TO FOLLOW (reference files).
|
|
11
|
-
|
|
12
|
-
**Cross-reference outputs:**
|
|
13
|
-
- Planner: \`.agent-workspace/plans/[topic]/05-handoff/builder-briefing.md\`
|
|
14
|
-
- Researcher: \`.agent-workspace/researches/[topic]/HANDOFF.md\`
|
|
15
|
-
|
|
16
|
-
**Workflow:** spawn_planner → spawn_coder → spawn_tester. Use \`depends_on\` to chain.
|
|
17
|
-
Check status: \`task:///all\` or \`task:///{id}\``,
|
|
18
|
-
inputSchema: {
|
|
19
|
-
type: 'object',
|
|
20
|
-
properties: {
|
|
21
|
-
prompt: {
|
|
22
|
-
type: 'string',
|
|
23
|
-
description: `Min 1000 chars. Complete implementation brief: OBJECTIVE, FILES TO MODIFY (absolute paths), SUCCESS CRITERIA, CONSTRAINTS, PATTERNS TO FOLLOW, CONTEXT. Agent cannot see your conversation — everything must be in the prompt.`,
|
|
24
|
-
},
|
|
25
|
-
context_files: {
|
|
26
|
-
type: 'array',
|
|
27
|
-
items: {
|
|
28
|
-
type: 'object',
|
|
29
|
-
properties: {
|
|
30
|
-
path: { type: 'string', description: 'Absolute path to a .md file.' },
|
|
31
|
-
description: { type: 'string', description: 'What this file contains.' },
|
|
32
|
-
},
|
|
33
|
-
required: ['path'],
|
|
34
|
-
},
|
|
35
|
-
description: `Min 1 Markdown (.md) file required. Attach planner handoffs, specs, or your own brief. Max 20 files, 200KB each, 500KB total.`,
|
|
36
|
-
},
|
|
37
|
-
language: {
|
|
38
|
-
type: 'string',
|
|
39
|
-
enum: [...CODER_LANGUAGES],
|
|
40
|
-
description: `Language/framework specialization overlay. Languages: typescript, python, rust, go, java, ruby, swift, csharp, kotlin. Frameworks: react, nextjs, vue, supabase, tauri, triggerdev, supastarter. Default: general (infers from codebase).`,
|
|
41
|
-
},
|
|
42
|
-
model: {
|
|
43
|
-
type: 'string',
|
|
44
|
-
enum: MODEL_IDS,
|
|
45
|
-
description: `Default: ${DEFAULT_MODEL}. Use claude-haiku-4.5 for simple single-file changes.`,
|
|
46
|
-
},
|
|
47
|
-
cwd: { type: 'string', description: 'Absolute path to working directory.' },
|
|
48
|
-
timeout: { type: 'number', description: 'Max ms. Default: 1800000 (30min).' },
|
|
49
|
-
autonomous: { type: 'boolean', description: 'Default: true.' },
|
|
50
|
-
depends_on: {
|
|
51
|
-
type: 'array',
|
|
52
|
-
items: { type: 'string' },
|
|
53
|
-
description: 'Task IDs that must complete first.',
|
|
54
|
-
},
|
|
55
|
-
labels: {
|
|
56
|
-
type: 'array',
|
|
57
|
-
items: { type: 'string' },
|
|
58
|
-
description: 'Labels for grouping (max 10).',
|
|
59
|
-
},
|
|
60
|
-
},
|
|
61
|
-
required: ['prompt', 'context_files'],
|
|
62
|
-
},
|
|
63
|
-
};
|
|
64
|
-
export const handleSpawnCoder = createSpawnHandler({
|
|
65
|
-
schema: SpawnCoderSchema,
|
|
66
|
-
toolName: 'spawn_coder',
|
|
67
|
-
taskType: 'super-coder',
|
|
68
|
-
validationHint: 'Required: `prompt` (min 1000 chars) + `context_files` (min 1 .md file).',
|
|
69
|
-
getSpecialization: (parsed) => parsed.language,
|
|
70
|
-
});
|
|
71
|
-
//# sourceMappingURL=spawn-coder.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"spawn-coder.js","sourceRoot":"","sources":["../../src/tools/spawn-coder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACzE,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEvD,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,IAAI,EAAE,aAAa;IACnB,WAAW,EAAE;;;;;;;;;;;kDAWmC;IAEhD,WAAW,EAAE;QACX,IAAI,EAAE,QAAiB;QACvB,UAAU,EAAE;YACV,MAAM,EAAE;gBACN,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,gOAAgO;aAC9O;YACD,aAAa,EAAE;gBACb,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE;wBACV,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,8BAA8B,EAAE;wBACrE,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,0BAA0B,EAAE;qBACzE;oBACD,QAAQ,EAAE,CAAC,MAAM,CAAC;iBACnB;gBACD,WAAW,EAAE,+HAA+H;aAC7I;YACD,QAAQ,EAAE;gBACR,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,CAAC,GAAG,eAAe,CAAC;gBAC1B,WAAW,EAAE,2OAA2O;aACzP;YACD,KAAK,EAAE;gBACL,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,SAAS;gBACf,WAAW,EAAE,YAAY,aAAa,wDAAwD;aAC/F;YACD,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,qCAAqC,EAAE;YAC3E,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,mCAAmC,EAAE;YAC7E,UAAU,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,gBAAgB,EAAE;YAC9D,UAAU,EAAE;gBACV,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBACzB,WAAW,EAAE,oCAAoC;aAClD;YACD,MAAM,EAAE;gBACN,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBACzB,WAAW,EAAE,+BAA+B;aAC7C;SACF;QACD,QAAQ,EAAE,CAAC,QAAQ,EAAE,eAAe,CAAC;KACtC;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG,kBAAkB,CAAC;IACjD,MAAM,EAAE,gBAAgB;IACxB,QAAQ,EAAE,aAAa;IACvB,QAAQ,EAAE,aAAa;IACvB,cAAc,EAAE,yEAAyE;IACzF,iBAAiB,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ;CAC/C,CAAC,CAAC"}
|
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
export declare const spawnPlannerTool: {
|
|
2
|
-
name: string;
|
|
3
|
-
description: string;
|
|
4
|
-
inputSchema: {
|
|
5
|
-
type: "object";
|
|
6
|
-
properties: {
|
|
7
|
-
prompt: {
|
|
8
|
-
type: string;
|
|
9
|
-
description: string;
|
|
10
|
-
};
|
|
11
|
-
context_files: {
|
|
12
|
-
type: string;
|
|
13
|
-
items: {
|
|
14
|
-
type: string;
|
|
15
|
-
properties: {
|
|
16
|
-
path: {
|
|
17
|
-
type: string;
|
|
18
|
-
description: string;
|
|
19
|
-
};
|
|
20
|
-
description: {
|
|
21
|
-
type: string;
|
|
22
|
-
description: string;
|
|
23
|
-
};
|
|
24
|
-
};
|
|
25
|
-
required: string[];
|
|
26
|
-
};
|
|
27
|
-
description: string;
|
|
28
|
-
};
|
|
29
|
-
planning_type: {
|
|
30
|
-
type: string;
|
|
31
|
-
enum: ("feature" | "bugfix" | "migration" | "refactor" | "architecture")[];
|
|
32
|
-
description: string;
|
|
33
|
-
};
|
|
34
|
-
model: {
|
|
35
|
-
type: string;
|
|
36
|
-
enum: ("claude-opus-4.6" | "claude-haiku-4.5" | "claude-sonnet-4.5")[];
|
|
37
|
-
description: string;
|
|
38
|
-
};
|
|
39
|
-
cwd: {
|
|
40
|
-
type: string;
|
|
41
|
-
description: string;
|
|
42
|
-
};
|
|
43
|
-
timeout: {
|
|
44
|
-
type: string;
|
|
45
|
-
description: string;
|
|
46
|
-
};
|
|
47
|
-
autonomous: {
|
|
48
|
-
type: string;
|
|
49
|
-
description: string;
|
|
50
|
-
};
|
|
51
|
-
depends_on: {
|
|
52
|
-
type: string;
|
|
53
|
-
items: {
|
|
54
|
-
type: string;
|
|
55
|
-
};
|
|
56
|
-
description: string;
|
|
57
|
-
};
|
|
58
|
-
labels: {
|
|
59
|
-
type: string;
|
|
60
|
-
items: {
|
|
61
|
-
type: string;
|
|
62
|
-
};
|
|
63
|
-
description: string;
|
|
64
|
-
};
|
|
65
|
-
};
|
|
66
|
-
required: string[];
|
|
67
|
-
};
|
|
68
|
-
};
|
|
69
|
-
export declare const handleSpawnPlanner: (args: unknown, ctx?: import("../types.js").ToolContext) => import("./shared-spawn.js").SpawnHandlerResult;
|
|
70
|
-
//# sourceMappingURL=spawn-planner.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"spawn-planner.d.ts","sourceRoot":"","sources":["../../src/tools/spawn-planner.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2D5B,CAAC;AAEF,eAAO,MAAM,kBAAkB,4GAO7B,CAAC"}
|