mcp-copilot-worker 1.0.1

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 (87) hide show
  1. package/README.md +209 -0
  2. package/bin/mcp-copilot-worker.mjs +3 -0
  3. package/dist/src/app.d.ts +71 -0
  4. package/dist/src/app.js +306 -0
  5. package/dist/src/app.js.map +1 -0
  6. package/dist/src/cli/doctor.d.ts +2 -0
  7. package/dist/src/cli/doctor.js +99 -0
  8. package/dist/src/cli/doctor.js.map +1 -0
  9. package/dist/src/config/defaults.d.ts +3 -0
  10. package/dist/src/config/defaults.js +4 -0
  11. package/dist/src/config/defaults.js.map +1 -0
  12. package/dist/src/index.d.ts +2 -0
  13. package/dist/src/index.js +98 -0
  14. package/dist/src/index.js.map +1 -0
  15. package/dist/src/mcp/system-status.d.ts +19 -0
  16. package/dist/src/mcp/system-status.js +20 -0
  17. package/dist/src/mcp/system-status.js.map +1 -0
  18. package/dist/src/mcp/task-markdown.d.ts +3 -0
  19. package/dist/src/mcp/task-markdown.js +70 -0
  20. package/dist/src/mcp/task-markdown.js.map +1 -0
  21. package/dist/src/mcp/tool-banners.d.ts +4 -0
  22. package/dist/src/mcp/tool-banners.js +26 -0
  23. package/dist/src/mcp/tool-banners.js.map +1 -0
  24. package/dist/src/mcp/tool-definitions.d.ts +111 -0
  25. package/dist/src/mcp/tool-definitions.js +134 -0
  26. package/dist/src/mcp/tool-definitions.js.map +1 -0
  27. package/dist/src/services/copilot-runtime.d.ts +35 -0
  28. package/dist/src/services/copilot-runtime.js +237 -0
  29. package/dist/src/services/copilot-runtime.js.map +1 -0
  30. package/dist/src/services/fleet-mode.d.ts +15 -0
  31. package/dist/src/services/fleet-mode.js +26 -0
  32. package/dist/src/services/fleet-mode.js.map +1 -0
  33. package/dist/src/services/model-catalog.d.ts +16 -0
  34. package/dist/src/services/model-catalog.js +95 -0
  35. package/dist/src/services/model-catalog.js.map +1 -0
  36. package/dist/src/services/output-log.d.ts +7 -0
  37. package/dist/src/services/output-log.js +59 -0
  38. package/dist/src/services/output-log.js.map +1 -0
  39. package/dist/src/services/profile-manager.d.ts +34 -0
  40. package/dist/src/services/profile-manager.js +113 -0
  41. package/dist/src/services/profile-manager.js.map +1 -0
  42. package/dist/src/services/question-registry.d.ts +29 -0
  43. package/dist/src/services/question-registry.js +115 -0
  44. package/dist/src/services/question-registry.js.map +1 -0
  45. package/dist/src/services/spawn-validation.d.ts +9 -0
  46. package/dist/src/services/spawn-validation.js +53 -0
  47. package/dist/src/services/spawn-validation.js.map +1 -0
  48. package/dist/src/services/task-manager.d.ts +34 -0
  49. package/dist/src/services/task-manager.js +107 -0
  50. package/dist/src/services/task-manager.js.map +1 -0
  51. package/dist/src/services/task-persistence.d.ts +20 -0
  52. package/dist/src/services/task-persistence.js +67 -0
  53. package/dist/src/services/task-persistence.js.map +1 -0
  54. package/dist/src/services/task-store.d.ts +12 -0
  55. package/dist/src/services/task-store.js +167 -0
  56. package/dist/src/services/task-store.js.map +1 -0
  57. package/dist/src/services/workspace-isolation.d.ts +13 -0
  58. package/dist/src/services/workspace-isolation.js +74 -0
  59. package/dist/src/services/workspace-isolation.js.map +1 -0
  60. package/dist/src/templates/agent-prompt.d.ts +6 -0
  61. package/dist/src/templates/agent-prompt.js +58 -0
  62. package/dist/src/templates/agent-prompt.js.map +1 -0
  63. package/dist/src/types/task.d.ts +79 -0
  64. package/dist/src/types/task.js +22 -0
  65. package/dist/src/types/task.js.map +1 -0
  66. package/package.json +63 -0
  67. package/src/app.ts +344 -0
  68. package/src/cli/doctor.ts +112 -0
  69. package/src/config/defaults.ts +3 -0
  70. package/src/index.ts +128 -0
  71. package/src/mcp/system-status.ts +41 -0
  72. package/src/mcp/task-markdown.ts +81 -0
  73. package/src/mcp/tool-banners.ts +32 -0
  74. package/src/mcp/tool-definitions.ts +163 -0
  75. package/src/services/copilot-runtime.ts +305 -0
  76. package/src/services/fleet-mode.ts +39 -0
  77. package/src/services/model-catalog.ts +136 -0
  78. package/src/services/output-log.ts +68 -0
  79. package/src/services/profile-manager.ts +165 -0
  80. package/src/services/question-registry.ts +169 -0
  81. package/src/services/spawn-validation.ts +75 -0
  82. package/src/services/task-manager.ts +144 -0
  83. package/src/services/task-persistence.ts +100 -0
  84. package/src/services/task-store.ts +207 -0
  85. package/src/services/workspace-isolation.ts +100 -0
  86. package/src/templates/agent-prompt.ts +71 -0
  87. package/src/types/task.ts +95 -0
@@ -0,0 +1,167 @@
1
+ import { uniqueNamesGenerator, adjectives, animals, NumberDictionary } from 'unique-names-generator';
2
+ import { TaskStatus, isTerminalStatus } from '../types/task.js';
3
+ const numberDictionary = NumberDictionary.generate({ min: 1, max: 9999 });
4
+ const VALID_TRANSITIONS = {
5
+ [TaskStatus.PENDING]: new Set([TaskStatus.RUNNING, TaskStatus.WAITING, TaskStatus.WAITING_ANSWER, TaskStatus.COMPLETED, TaskStatus.CANCELLED, TaskStatus.FAILED, TaskStatus.TIMED_OUT]),
6
+ [TaskStatus.WAITING]: new Set([TaskStatus.PENDING, TaskStatus.WAITING_ANSWER, TaskStatus.COMPLETED, TaskStatus.CANCELLED, TaskStatus.FAILED, TaskStatus.TIMED_OUT]),
7
+ [TaskStatus.RUNNING]: new Set([TaskStatus.COMPLETED, TaskStatus.FAILED, TaskStatus.CANCELLED, TaskStatus.RATE_LIMITED, TaskStatus.WAITING_ANSWER, TaskStatus.TIMED_OUT]),
8
+ [TaskStatus.WAITING_ANSWER]: new Set([TaskStatus.RUNNING, TaskStatus.FAILED, TaskStatus.CANCELLED, TaskStatus.TIMED_OUT]),
9
+ [TaskStatus.COMPLETED]: new Set(),
10
+ [TaskStatus.FAILED]: new Set(),
11
+ [TaskStatus.CANCELLED]: new Set(),
12
+ [TaskStatus.RATE_LIMITED]: new Set([TaskStatus.RUNNING, TaskStatus.FAILED, TaskStatus.CANCELLED, TaskStatus.TIMED_OUT]),
13
+ [TaskStatus.TIMED_OUT]: new Set(),
14
+ };
15
+ function generateTaskId(existingIds) {
16
+ let next = uniqueNamesGenerator({
17
+ dictionaries: [adjectives, animals, numberDictionary],
18
+ separator: '-',
19
+ style: 'lowerCase',
20
+ });
21
+ while (existingIds.has(next)) {
22
+ next = uniqueNamesGenerator({
23
+ dictionaries: [adjectives, animals, numberDictionary],
24
+ separator: '-',
25
+ style: 'lowerCase',
26
+ });
27
+ }
28
+ return next;
29
+ }
30
+ function dependenciesSatisfied(task, tasks) {
31
+ return (task.dependsOn ?? []).every((dependencyId) => tasks.get(dependencyId)?.status === TaskStatus.COMPLETED);
32
+ }
33
+ function circularDependencyPath(tasks, startId, newDependsOn) {
34
+ const visiting = new Set();
35
+ const visited = new Set();
36
+ const trail = [];
37
+ const visit = (taskId) => {
38
+ if (visiting.has(taskId)) {
39
+ const index = trail.indexOf(taskId);
40
+ return [...trail.slice(index), taskId];
41
+ }
42
+ if (visited.has(taskId)) {
43
+ return null;
44
+ }
45
+ visiting.add(taskId);
46
+ trail.push(taskId);
47
+ const dependsOn = taskId === startId && newDependsOn !== undefined
48
+ ? newDependsOn
49
+ : tasks.get(taskId)?.dependsOn ?? [];
50
+ for (const dependencyId of dependsOn) {
51
+ const cycle = visit(dependencyId);
52
+ if (cycle) {
53
+ return cycle;
54
+ }
55
+ }
56
+ trail.pop();
57
+ visiting.delete(taskId);
58
+ visited.add(taskId);
59
+ return null;
60
+ };
61
+ return visit(startId);
62
+ }
63
+ export class TaskStore {
64
+ tasks = new Map();
65
+ createTask(input) {
66
+ const id = generateTaskId(new Set(this.tasks.keys()));
67
+ const dependencyError = this.validateDependencies(input.dependsOn ?? [], id);
68
+ if (dependencyError) {
69
+ throw new Error(dependencyError);
70
+ }
71
+ const now = new Date().toISOString();
72
+ const task = {
73
+ id,
74
+ status: (input.dependsOn?.length ?? 0) > 0 ? TaskStatus.WAITING : TaskStatus.PENDING,
75
+ prompt: input.prompt,
76
+ cwd: input.cwd,
77
+ model: input.model,
78
+ agentType: input.agentType,
79
+ output: [],
80
+ startTime: now,
81
+ createdAt: now,
82
+ updatedAt: now,
83
+ labels: input.labels ?? [],
84
+ contextFiles: input.contextFiles ?? [],
85
+ dependsOn: input.dependsOn?.length ? [...input.dependsOn] : undefined,
86
+ timeoutMs: input.timeoutMs,
87
+ sessionId: input.sessionId,
88
+ parentTaskId: input.parentTaskId,
89
+ profileId: input.profileId,
90
+ profileConfigDir: input.profileConfigDir,
91
+ isolationMode: input.isolationMode,
92
+ baseCwd: input.baseCwd,
93
+ };
94
+ if (task.status === TaskStatus.WAITING && dependenciesSatisfied(task, this.tasks)) {
95
+ task.status = TaskStatus.PENDING;
96
+ }
97
+ this.tasks.set(task.id, task);
98
+ return task;
99
+ }
100
+ getTask(taskId) {
101
+ return this.tasks.get(taskId);
102
+ }
103
+ getAllTasks() {
104
+ return [...this.tasks.values()];
105
+ }
106
+ importTask(task) {
107
+ this.tasks.set(task.id, task);
108
+ }
109
+ validateDependencies(dependsOn, newTaskId) {
110
+ if (dependsOn.length === 0) {
111
+ return null;
112
+ }
113
+ if (new Set(dependsOn).size !== dependsOn.length) {
114
+ return 'Duplicate dependency IDs are not allowed';
115
+ }
116
+ if (newTaskId && dependsOn.includes(newTaskId)) {
117
+ return `Task '${newTaskId}' cannot depend on itself`;
118
+ }
119
+ for (const dependencyId of dependsOn) {
120
+ if (!this.tasks.has(dependencyId)) {
121
+ return `Dependency task '${dependencyId}' not found`;
122
+ }
123
+ }
124
+ if (newTaskId) {
125
+ const cycle = circularDependencyPath(this.tasks, newTaskId, dependsOn);
126
+ if (cycle) {
127
+ return `Circular dependency detected: ${cycle.join(' -> ')}`;
128
+ }
129
+ }
130
+ return null;
131
+ }
132
+ updateTask(taskId, updates) {
133
+ const task = this.tasks.get(taskId);
134
+ if (!task) {
135
+ return undefined;
136
+ }
137
+ if (updates.status && updates.status !== task.status) {
138
+ if (isTerminalStatus(task.status)) {
139
+ return task;
140
+ }
141
+ const allowed = VALID_TRANSITIONS[task.status];
142
+ if (!allowed.has(updates.status)) {
143
+ return task;
144
+ }
145
+ }
146
+ Object.assign(task, updates, { updatedAt: new Date().toISOString() });
147
+ return task;
148
+ }
149
+ releaseReadyTasks() {
150
+ const released = [];
151
+ for (const task of this.tasks.values()) {
152
+ if (task.status !== TaskStatus.WAITING) {
153
+ continue;
154
+ }
155
+ if (dependenciesSatisfied(task, this.tasks)) {
156
+ task.status = TaskStatus.PENDING;
157
+ task.updatedAt = new Date().toISOString();
158
+ released.push(task);
159
+ }
160
+ }
161
+ return released;
162
+ }
163
+ clear() {
164
+ this.tasks.clear();
165
+ }
166
+ }
167
+ //# sourceMappingURL=task-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-store.js","sourceRoot":"","sources":["../../../src/services/task-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ export type IsolationMode = 'shared' | 'isolated';
2
+ export interface PreparedWorkspace {
3
+ cwd: string;
4
+ cleanupRequired: boolean;
5
+ mode: 'shared' | 'copy' | 'worktree';
6
+ }
7
+ export interface PrepareTaskWorkspaceInput {
8
+ baseCwd: string;
9
+ taskId: string;
10
+ isolationMode: IsolationMode;
11
+ }
12
+ export declare function prepareTaskWorkspace(input: PrepareTaskWorkspaceInput): Promise<PreparedWorkspace>;
13
+ export declare function cleanupPreparedWorkspace(workspace: PreparedWorkspace): Promise<void>;
@@ -0,0 +1,74 @@
1
+ import { cp, mkdir, readdir, rm } from 'node:fs/promises';
2
+ import { dirname, join } from 'node:path';
3
+ import { execFile } from 'node:child_process';
4
+ import { promisify } from 'node:util';
5
+ const execFileAsync = promisify(execFile);
6
+ const SKIP_NAMES = new Set(['.git', 'node_modules', '.super-agents', '.worktrees', 'worktrees', 'dist']);
7
+ export async function prepareTaskWorkspace(input) {
8
+ if (input.isolationMode === 'shared') {
9
+ return {
10
+ cwd: input.baseCwd,
11
+ cleanupRequired: false,
12
+ mode: 'shared',
13
+ };
14
+ }
15
+ const worktree = await tryCreateGitWorktree(input);
16
+ if (worktree) {
17
+ return worktree;
18
+ }
19
+ const copyRoot = join(input.baseCwd, '.super-agents', 'workspaces', input.taskId);
20
+ await mkdir(dirname(copyRoot), { recursive: true });
21
+ await rm(copyRoot, { recursive: true, force: true });
22
+ await mkdir(copyRoot, { recursive: true });
23
+ const topLevelEntries = await readdir(input.baseCwd);
24
+ for (const entry of topLevelEntries) {
25
+ if (SKIP_NAMES.has(entry)) {
26
+ continue;
27
+ }
28
+ await cp(join(input.baseCwd, entry), join(copyRoot, entry), {
29
+ recursive: true,
30
+ filter(source) {
31
+ return !SKIP_NAMES.has(source.split('/').pop() ?? '');
32
+ },
33
+ });
34
+ }
35
+ return {
36
+ cwd: copyRoot,
37
+ cleanupRequired: true,
38
+ mode: 'copy',
39
+ };
40
+ }
41
+ export async function cleanupPreparedWorkspace(workspace) {
42
+ if (!workspace.cleanupRequired || workspace.mode === 'shared') {
43
+ return;
44
+ }
45
+ await rm(workspace.cwd, { recursive: true, force: true });
46
+ }
47
+ async function tryCreateGitWorktree(input) {
48
+ try {
49
+ const { stdout: rootStdout } = await execFileAsync('git', ['rev-parse', '--show-toplevel'], {
50
+ cwd: input.baseCwd,
51
+ });
52
+ const gitRoot = rootStdout.trim();
53
+ if (!gitRoot) {
54
+ return null;
55
+ }
56
+ await execFileAsync('git', ['rev-parse', '--verify', 'HEAD'], {
57
+ cwd: gitRoot,
58
+ });
59
+ const worktreePath = join(gitRoot, '.worktrees', input.taskId);
60
+ await mkdir(dirname(worktreePath), { recursive: true });
61
+ await execFileAsync('git', ['worktree', 'add', '--detach', worktreePath, 'HEAD'], {
62
+ cwd: gitRoot,
63
+ });
64
+ return {
65
+ cwd: worktreePath,
66
+ cleanupRequired: true,
67
+ mode: 'worktree',
68
+ };
69
+ }
70
+ catch {
71
+ return null;
72
+ }
73
+ }
74
+ //# sourceMappingURL=workspace-isolation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace-isolation.js","sourceRoot":"","sources":["../../../src/services/workspace-isolation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { AgentType, ContextFile } from '../types/task.js';
2
+ export declare function buildAgentPrompt(input: {
3
+ agentType: AgentType;
4
+ prompt: string;
5
+ contextFiles: ContextFile[];
6
+ }): Promise<string>;
@@ -0,0 +1,58 @@
1
+ import { readFile } from 'node:fs/promises';
2
+ const ROLE_TEMPLATES = {
3
+ coder: [
4
+ 'You are the implementation agent.',
5
+ 'Work carefully, change as little as needed, and verify the requested behavior.',
6
+ 'Prefer deterministic edits over speculative refactors.',
7
+ ].join(' '),
8
+ planner: [
9
+ 'You are the planning agent.',
10
+ 'Clarify scope, constraints, risks, and the concrete implementation path.',
11
+ 'Produce actionable implementation guidance instead of vague advice.',
12
+ ].join(' '),
13
+ researcher: [
14
+ 'You are the research agent.',
15
+ 'Investigate the code and runtime behavior before proposing conclusions.',
16
+ 'Surface the facts that a downstream implementer needs.',
17
+ ].join(' '),
18
+ tester: [
19
+ 'You are the testing agent.',
20
+ 'Exercise the real behavior, collect evidence, and describe failures concretely.',
21
+ 'Prefer end-to-end verification when possible.',
22
+ ].join(' '),
23
+ general: [
24
+ 'You are a general-purpose autonomous agent.',
25
+ 'Stay focused on the requested deliverable and keep your output concrete.',
26
+ ].join(' '),
27
+ };
28
+ async function renderContextFiles(contextFiles) {
29
+ if (contextFiles.length === 0) {
30
+ return '';
31
+ }
32
+ const sections = await Promise.all(contextFiles.map(async (contextFile) => {
33
+ const content = await readFile(contextFile.path, 'utf8');
34
+ return [
35
+ `## Context File: ${contextFile.path}`,
36
+ contextFile.description ? `Description: ${contextFile.description}` : null,
37
+ '',
38
+ '```text',
39
+ content,
40
+ '```',
41
+ ].filter(Boolean).join('\n');
42
+ }));
43
+ return sections.join('\n\n');
44
+ }
45
+ export async function buildAgentPrompt(input) {
46
+ const context = await renderContextFiles(input.contextFiles);
47
+ return [
48
+ ROLE_TEMPLATES[input.agentType],
49
+ '',
50
+ 'Treat the task as stateful background work. If you need user input, ask a concise question.',
51
+ '',
52
+ '## Assignment',
53
+ input.prompt,
54
+ context ? '' : null,
55
+ context || null,
56
+ ].filter(Boolean).join('\n');
57
+ }
58
+ //# sourceMappingURL=agent-prompt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-prompt.js","sourceRoot":"","sources":["../../../src/templates/agent-prompt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAI5C,MAAM,cAAc,GAA8B;IAChD,KAAK,EAAE;QACL,mCAAmC;QACnC,gFAAgF;QAChF,wDAAwD;KACzD,CAAC,IAAI,CAAC,GAAG,CAAC;IACX,OAAO,EAAE;QACP,6BAA6B;QAC7B,0EAA0E;QAC1E,qEAAqE;KACtE,CAAC,IAAI,CAAC,GAAG,CAAC;IACX,UAAU,EAAE;QACV,6BAA6B;QAC7B,yEAAyE;QACzE,wDAAwD;KACzD,CAAC,IAAI,CAAC,GAAG,CAAC;IACX,MAAM,EAAE;QACN,4BAA4B;QAC5B,iFAAiF;QACjF,+CAA+C;KAChD,CAAC,IAAI,CAAC,GAAG,CAAC;IACX,OAAO,EAAE;QACP,6CAA6C;QAC7C,0EAA0E;KAC3E,CAAC,IAAI,CAAC,GAAG,CAAC;CACZ,CAAC;AAEF,KAAK,UAAU,kBAAkB,CAAC,YAA2B;IAC3D,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9B,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,GAAG,CAChC,YAAY,CAAC,GAAG,CAAC,KAAK,EAAE,WAAW,EAAE,EAAE;QACrC,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACzD,OAAO;YACL,oBAAoB,WAAW,CAAC,IAAI,EAAE;YACtC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC,gBAAgB,WAAW,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI;YAC1E,EAAE;YACF,SAAS;YACT,OAAO;YACP,KAAK;SACN,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC,CAAC,CACH,CAAC;IAEF,OAAO,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC/B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,KAItC;IACC,MAAM,OAAO,GAAG,MAAM,kBAAkB,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IAE7D,OAAO;QACL,cAAc,CAAC,KAAK,CAAC,SAAS,CAAC;QAC/B,EAAE;QACF,6FAA6F;QAC7F,EAAE;QACF,eAAe;QACf,KAAK,CAAC,MAAM;QACZ,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI;QACnB,OAAO,IAAI,IAAI;KAChB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC/B,CAAC"}
@@ -0,0 +1,79 @@
1
+ export type AgentType = 'coder' | 'planner' | 'researcher' | 'tester' | 'general';
2
+ export interface ContextFile {
3
+ path: string;
4
+ description?: string | undefined;
5
+ }
6
+ export interface PendingQuestion {
7
+ question: string;
8
+ choices?: string[] | undefined;
9
+ allowFreeform: boolean;
10
+ askedAt: string;
11
+ sessionId: string;
12
+ }
13
+ export declare enum TaskStatus {
14
+ PENDING = "pending",
15
+ WAITING = "waiting",
16
+ RUNNING = "running",
17
+ WAITING_ANSWER = "waiting_answer",
18
+ COMPLETED = "completed",
19
+ FAILED = "failed",
20
+ CANCELLED = "cancelled",
21
+ RATE_LIMITED = "rate_limited",
22
+ TIMED_OUT = "timed_out"
23
+ }
24
+ export declare const TERMINAL_STATUSES: Set<TaskStatus>;
25
+ export declare function isTerminalStatus(status: TaskStatus): boolean;
26
+ export interface TaskRecord {
27
+ id: string;
28
+ status: TaskStatus;
29
+ prompt: string;
30
+ cwd: string;
31
+ model: string;
32
+ agentType: AgentType;
33
+ output: string[];
34
+ startTime: string;
35
+ createdAt: string;
36
+ updatedAt: string;
37
+ labels: string[];
38
+ contextFiles: ContextFile[];
39
+ dependsOn?: string[] | undefined;
40
+ error?: string | undefined;
41
+ endTime?: string | undefined;
42
+ outputFilePath?: string | undefined;
43
+ timeoutMs?: number | undefined;
44
+ sessionId?: string | undefined;
45
+ parentTaskId?: string | undefined;
46
+ pendingQuestion?: PendingQuestion | undefined;
47
+ profileId?: string | undefined;
48
+ profileConfigDir?: string | undefined;
49
+ isolationMode?: 'shared' | 'isolated' | undefined;
50
+ baseCwd?: string | undefined;
51
+ }
52
+ export interface CreateTaskInput {
53
+ prompt: string;
54
+ cwd: string;
55
+ model: string;
56
+ agentType: AgentType;
57
+ labels?: string[] | undefined;
58
+ contextFiles?: ContextFile[] | undefined;
59
+ dependsOn?: string[] | undefined;
60
+ timeoutMs?: number | undefined;
61
+ sessionId?: string | undefined;
62
+ parentTaskId?: string | undefined;
63
+ profileId?: string | undefined;
64
+ profileConfigDir?: string | undefined;
65
+ isolationMode?: 'shared' | 'isolated' | undefined;
66
+ baseCwd?: string | undefined;
67
+ }
68
+ export interface PersistedWorkspaceState {
69
+ version: 1;
70
+ tasks: TaskRecord[];
71
+ profiles: PersistedProfileState[];
72
+ }
73
+ export interface PersistedProfileState {
74
+ id: string;
75
+ configDir: string;
76
+ cooldownUntil?: number | undefined;
77
+ failureCount: number;
78
+ lastFailureReason?: string | undefined;
79
+ }
@@ -0,0 +1,22 @@
1
+ export var TaskStatus;
2
+ (function (TaskStatus) {
3
+ TaskStatus["PENDING"] = "pending";
4
+ TaskStatus["WAITING"] = "waiting";
5
+ TaskStatus["RUNNING"] = "running";
6
+ TaskStatus["WAITING_ANSWER"] = "waiting_answer";
7
+ TaskStatus["COMPLETED"] = "completed";
8
+ TaskStatus["FAILED"] = "failed";
9
+ TaskStatus["CANCELLED"] = "cancelled";
10
+ TaskStatus["RATE_LIMITED"] = "rate_limited";
11
+ TaskStatus["TIMED_OUT"] = "timed_out";
12
+ })(TaskStatus || (TaskStatus = {}));
13
+ export const TERMINAL_STATUSES = new Set([
14
+ TaskStatus.COMPLETED,
15
+ TaskStatus.FAILED,
16
+ TaskStatus.CANCELLED,
17
+ TaskStatus.TIMED_OUT,
18
+ ]);
19
+ export function isTerminalStatus(status) {
20
+ return TERMINAL_STATUSES.has(status);
21
+ }
22
+ //# sourceMappingURL=task.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task.js","sourceRoot":"","sources":["../../../src/types/task.ts"],"names":[],"mappings":"AAeA,MAAM,CAAN,IAAY,UAUX;AAVD,WAAY,UAAU;IACpB,iCAAmB,CAAA;IACnB,iCAAmB,CAAA;IACnB,iCAAmB,CAAA;IACnB,+CAAiC,CAAA;IACjC,qCAAuB,CAAA;IACvB,+BAAiB,CAAA;IACjB,qCAAuB,CAAA;IACvB,2CAA6B,CAAA;IAC7B,qCAAuB,CAAA;AACzB,CAAC,EAVW,UAAU,KAAV,UAAU,QAUrB;AAED,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAa;IACnD,UAAU,CAAC,SAAS;IACpB,UAAU,CAAC,MAAM;IACjB,UAAU,CAAC,SAAS;IACpB,UAAU,CAAC,SAAS;CACrB,CAAC,CAAC;AAEH,MAAM,UAAU,gBAAgB,CAAC,MAAkB;IACjD,OAAO,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AACvC,CAAC"}
package/package.json ADDED
@@ -0,0 +1,63 @@
1
+ {
2
+ "name": "mcp-copilot-worker",
3
+ "version": "1.0.1",
4
+ "description": "Copilot-only MCP worker with resumable background agents",
5
+ "type": "module",
6
+ "main": "dist/src/index.js",
7
+ "bin": {
8
+ "mcp-copilot-worker": "bin/mcp-copilot-worker.mjs"
9
+ },
10
+ "files": [
11
+ "bin",
12
+ "dist/src",
13
+ "src"
14
+ ],
15
+ "directories": {
16
+ "test": "test"
17
+ },
18
+ "scripts": {
19
+ "build": "tsc -p tsconfig.json",
20
+ "clean": "rm -rf dist",
21
+ "dev": "tsx watch src/index.ts",
22
+ "serve": "node --import tsx src/index.ts",
23
+ "doctor": "node --import tsx src/cli/doctor.ts",
24
+ "prepack": "npm run build",
25
+ "smoke": "node --import tsx scripts/smoke.ts",
26
+ "test": "npm run test:unit",
27
+ "test:unit": "node --import tsx --test test/**/*.test.ts",
28
+ "test:smoke": "node --import tsx scripts/smoke.ts"
29
+ },
30
+ "keywords": [
31
+ "mcp",
32
+ "copilot",
33
+ "agent",
34
+ "sdk"
35
+ ],
36
+ "author": "Yigit Konur",
37
+ "license": "MIT",
38
+ "repository": {
39
+ "type": "git",
40
+ "url": "git+https://github.com/yigitkonur/mcp-copilot-worker.git"
41
+ },
42
+ "bugs": {
43
+ "url": "https://github.com/yigitkonur/mcp-copilot-worker/issues"
44
+ },
45
+ "homepage": "https://github.com/yigitkonur/mcp-copilot-worker#readme",
46
+ "publishConfig": {
47
+ "access": "public"
48
+ },
49
+ "engines": {
50
+ "node": ">=22.0.0"
51
+ },
52
+ "dependencies": {
53
+ "@github/copilot-sdk": "^0.1.30",
54
+ "@modelcontextprotocol/sdk": "^1.0.0",
55
+ "tsx": "^4.19.2",
56
+ "unique-names-generator": "^4.7.1",
57
+ "zod": "^3.24.1"
58
+ },
59
+ "devDependencies": {
60
+ "@types/node": "^22.10.5",
61
+ "typescript": "^5.7.2"
62
+ }
63
+ }