super-subagents 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 (149) hide show
  1. package/.windsurf/plans/persist-tasks-by-cwd.md +113 -0
  2. package/CHANGELOG.md +10 -0
  3. package/CLAUDE.md +67 -0
  4. package/README.md +124 -0
  5. package/build/config/timeouts.d.ts +12 -0
  6. package/build/config/timeouts.d.ts.map +1 -0
  7. package/build/config/timeouts.js +21 -0
  8. package/build/config/timeouts.js.map +1 -0
  9. package/build/index.d.ts +3 -0
  10. package/build/index.d.ts.map +1 -0
  11. package/build/index.js +116 -0
  12. package/build/index.js.map +1 -0
  13. package/build/models.d.ts +11 -0
  14. package/build/models.d.ts.map +1 -0
  15. package/build/models.js +22 -0
  16. package/build/models.js.map +1 -0
  17. package/build/services/client-context.d.ts +31 -0
  18. package/build/services/client-context.d.ts.map +1 -0
  19. package/build/services/client-context.js +44 -0
  20. package/build/services/client-context.js.map +1 -0
  21. package/build/services/copilot-switch.d.ts +36 -0
  22. package/build/services/copilot-switch.d.ts.map +1 -0
  23. package/build/services/copilot-switch.js +226 -0
  24. package/build/services/copilot-switch.js.map +1 -0
  25. package/build/services/process-spawner.d.ts +9 -0
  26. package/build/services/process-spawner.d.ts.map +1 -0
  27. package/build/services/process-spawner.js +475 -0
  28. package/build/services/process-spawner.js.map +1 -0
  29. package/build/services/retry-queue.d.ts +35 -0
  30. package/build/services/retry-queue.d.ts.map +1 -0
  31. package/build/services/retry-queue.js +125 -0
  32. package/build/services/retry-queue.js.map +1 -0
  33. package/build/services/task-manager.d.ts +124 -0
  34. package/build/services/task-manager.d.ts.map +1 -0
  35. package/build/services/task-manager.js +584 -0
  36. package/build/services/task-manager.js.map +1 -0
  37. package/build/services/task-persistence.d.ts +29 -0
  38. package/build/services/task-persistence.d.ts.map +1 -0
  39. package/build/services/task-persistence.js +158 -0
  40. package/build/services/task-persistence.js.map +1 -0
  41. package/build/templates/index.d.ts +11 -0
  42. package/build/templates/index.d.ts.map +1 -0
  43. package/build/templates/index.js +30 -0
  44. package/build/templates/index.js.map +1 -0
  45. package/build/tools/batch-spawn.d.ts +69 -0
  46. package/build/tools/batch-spawn.d.ts.map +1 -0
  47. package/build/tools/batch-spawn.js +150 -0
  48. package/build/tools/batch-spawn.js.map +1 -0
  49. package/build/tools/cancel-task.d.ts +21 -0
  50. package/build/tools/cancel-task.d.ts.map +1 -0
  51. package/build/tools/cancel-task.js +44 -0
  52. package/build/tools/cancel-task.js.map +1 -0
  53. package/build/tools/clear-tasks.d.ts +21 -0
  54. package/build/tools/clear-tasks.d.ts.map +1 -0
  55. package/build/tools/clear-tasks.js +43 -0
  56. package/build/tools/clear-tasks.js.map +1 -0
  57. package/build/tools/force-start.d.ts +21 -0
  58. package/build/tools/force-start.d.ts.map +1 -0
  59. package/build/tools/force-start.js +38 -0
  60. package/build/tools/force-start.js.map +1 -0
  61. package/build/tools/get-status.d.ts +31 -0
  62. package/build/tools/get-status.d.ts.map +1 -0
  63. package/build/tools/get-status.js +384 -0
  64. package/build/tools/get-status.js.map +1 -0
  65. package/build/tools/list-tasks.d.ts +26 -0
  66. package/build/tools/list-tasks.d.ts.map +1 -0
  67. package/build/tools/list-tasks.js +74 -0
  68. package/build/tools/list-tasks.js.map +1 -0
  69. package/build/tools/recover-task.d.ts +29 -0
  70. package/build/tools/recover-task.d.ts.map +1 -0
  71. package/build/tools/recover-task.js +91 -0
  72. package/build/tools/recover-task.js.map +1 -0
  73. package/build/tools/resume-task.d.ts +29 -0
  74. package/build/tools/resume-task.d.ts.map +1 -0
  75. package/build/tools/resume-task.js +43 -0
  76. package/build/tools/resume-task.js.map +1 -0
  77. package/build/tools/retry-task.d.ts +21 -0
  78. package/build/tools/retry-task.d.ts.map +1 -0
  79. package/build/tools/retry-task.js +52 -0
  80. package/build/tools/retry-task.js.map +1 -0
  81. package/build/tools/simulate-rate-limit.d.ts +25 -0
  82. package/build/tools/simulate-rate-limit.d.ts.map +1 -0
  83. package/build/tools/simulate-rate-limit.js +69 -0
  84. package/build/tools/simulate-rate-limit.js.map +1 -0
  85. package/build/tools/spawn-task.d.ts +57 -0
  86. package/build/tools/spawn-task.d.ts.map +1 -0
  87. package/build/tools/spawn-task.js +113 -0
  88. package/build/tools/spawn-task.js.map +1 -0
  89. package/build/tools/stream-output.d.ts +29 -0
  90. package/build/tools/stream-output.d.ts.map +1 -0
  91. package/build/tools/stream-output.js +96 -0
  92. package/build/tools/stream-output.js.map +1 -0
  93. package/build/types.d.ts +75 -0
  94. package/build/types.d.ts.map +1 -0
  95. package/build/types.js +12 -0
  96. package/build/types.js.map +1 -0
  97. package/build/utils/format.d.ts +29 -0
  98. package/build/utils/format.d.ts.map +1 -0
  99. package/build/utils/format.js +81 -0
  100. package/build/utils/format.js.map +1 -0
  101. package/build/utils/sanitize.d.ts +63 -0
  102. package/build/utils/sanitize.d.ts.map +1 -0
  103. package/build/utils/sanitize.js +28 -0
  104. package/build/utils/sanitize.js.map +1 -0
  105. package/build/utils/task-id-generator.d.ts +10 -0
  106. package/build/utils/task-id-generator.d.ts.map +1 -0
  107. package/build/utils/task-id-generator.js +22 -0
  108. package/build/utils/task-id-generator.js.map +1 -0
  109. package/docs/timeout-durability.md +28 -0
  110. package/package.json +39 -0
  111. package/plans/timeout-durability/00-overview.md +38 -0
  112. package/plans/timeout-durability/01-analysis.md +37 -0
  113. package/plans/timeout-durability/decisions.md +22 -0
  114. package/plans/timeout-durability/resources.md +24 -0
  115. package/plans/timeout-durability/step-01-timeout-flow.md +27 -0
  116. package/plans/timeout-durability/step-02-root-cause-map.md +26 -0
  117. package/plans/timeout-durability/step-03-state-schema.md +26 -0
  118. package/plans/timeout-durability/step-04-messaging-recovery.md +27 -0
  119. package/src/config/timeouts.ts +22 -0
  120. package/src/index.ts +129 -0
  121. package/src/models.ts +23 -0
  122. package/src/services/client-context.ts +49 -0
  123. package/src/services/copilot-switch.ts +269 -0
  124. package/src/services/process-spawner.ts +548 -0
  125. package/src/services/retry-queue.ts +151 -0
  126. package/src/services/task-manager.ts +667 -0
  127. package/src/services/task-persistence.ts +175 -0
  128. package/src/templates/index.ts +35 -0
  129. package/src/templates/super-coder.mdx +519 -0
  130. package/src/templates/super-planner.mdx +558 -0
  131. package/src/templates/super-researcher.mdx +394 -0
  132. package/src/templates/super-tester.mdx +688 -0
  133. package/src/tools/batch-spawn.ts +179 -0
  134. package/src/tools/cancel-task.ts +58 -0
  135. package/src/tools/clear-tasks.ts +52 -0
  136. package/src/tools/force-start.ts +48 -0
  137. package/src/tools/get-status.ts +480 -0
  138. package/src/tools/list-tasks.ts +83 -0
  139. package/src/tools/recover-task.ts +112 -0
  140. package/src/tools/resume-task.ts +51 -0
  141. package/src/tools/retry-task.ts +72 -0
  142. package/src/tools/simulate-rate-limit.ts +84 -0
  143. package/src/tools/spawn-task.ts +135 -0
  144. package/src/tools/stream-output.ts +101 -0
  145. package/src/types.ts +86 -0
  146. package/src/utils/format.ts +83 -0
  147. package/src/utils/sanitize.ts +35 -0
  148. package/src/utils/task-id-generator.ts +25 -0
  149. package/tsconfig.json +20 -0
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Copilot account switching on rate limit.
3
+ *
4
+ * When a Copilot task hits a rate limit, this module rotates to the next
5
+ * GitHub account via `~/bin/copilot-switch next`. A file-based lock ensures
6
+ * only one switch runs at a time across all processes.
7
+ *
8
+ * 3 accounts are rotated in a 5-minute window. After all 3 are exhausted,
9
+ * the caller falls through to Claude CLI fallback.
10
+ */
11
+ export type SwitchResult = {
12
+ outcome: 'switched';
13
+ } | {
14
+ outcome: 'recentSwitch';
15
+ } | {
16
+ outcome: 'exhausted';
17
+ } | {
18
+ outcome: 'failed';
19
+ error: string;
20
+ } | {
21
+ outcome: 'disabled';
22
+ };
23
+ /**
24
+ * Check if the copilot-switch script exists on disk.
25
+ */
26
+ export declare function isSwitchAvailable(): boolean;
27
+ /**
28
+ * Try to switch to the next Copilot account.
29
+ *
30
+ * - Acquires a file lock so only one process runs the switch.
31
+ * - Other callers wait for the lock, then see `recentSwitch`.
32
+ * - Returns `exhausted` if all 3 accounts tried in the last 5 minutes.
33
+ * - Returns `disabled` if the switch script doesn't exist.
34
+ */
35
+ export declare function trySwitchAccount(): Promise<SwitchResult>;
36
+ //# sourceMappingURL=copilot-switch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"copilot-switch.d.ts","sourceRoot":"","sources":["../../src/services/copilot-switch.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AA6CH,MAAM,MAAM,YAAY,GACpB;IAAE,OAAO,EAAE,UAAU,CAAA;CAAE,GACvB;IAAE,OAAO,EAAE,cAAc,CAAA;CAAE,GAC3B;IAAE,OAAO,EAAE,WAAW,CAAA;CAAE,GACxB;IAAE,OAAO,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACpC;IAAE,OAAO,EAAE,UAAU,CAAA;CAAE,CAAC;AAI5B;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAM3C;AAED;;;;;;;GAOG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,YAAY,CAAC,CA6D9D"}
@@ -0,0 +1,226 @@
1
+ /**
2
+ * Copilot account switching on rate limit.
3
+ *
4
+ * When a Copilot task hits a rate limit, this module rotates to the next
5
+ * GitHub account via `~/bin/copilot-switch next`. A file-based lock ensures
6
+ * only one switch runs at a time across all processes.
7
+ *
8
+ * 3 accounts are rotated in a 5-minute window. After all 3 are exhausted,
9
+ * the caller falls through to Claude CLI fallback.
10
+ */
11
+ import { existsSync, readFileSync, writeFileSync, unlinkSync } from 'fs';
12
+ import { homedir } from 'os';
13
+ import { join } from 'path';
14
+ import { execa } from 'execa';
15
+ import { getStorageDir } from './task-persistence.js';
16
+ import { COPILOT_SWITCH_COMMAND_TIMEOUT_MS, COPILOT_SWITCH_LOCK_POLL_MS, COPILOT_SWITCH_LOCK_STALE_MS, COPILOT_SWITCH_LOCK_TIMEOUT_MS, } from '../config/timeouts.js';
17
+ // ── Configuration ──────────────────────────────────────────────────
18
+ const COPILOT_SWITCH_PATH = process.env.COPILOT_SWITCH_PATH || join(homedir(), 'bin', 'copilot-switch');
19
+ // File paths (inside ~/.super-agents/)
20
+ const LOCK_PATH = join(getStorageDir(), 'copilot-switch.lock');
21
+ const STATE_PATH = join(getStorageDir(), 'copilot-switch.json');
22
+ // Lock timing (switch script takes ~30-40s due to interactive expect + test prompt)
23
+ const LOCK_STALE_MS = COPILOT_SWITCH_LOCK_STALE_MS; // lock older than this is stale (must exceed command timeout)
24
+ const LOCK_POLL_MS = COPILOT_SWITCH_LOCK_POLL_MS; // poll interval when waiting for lock
25
+ const LOCK_TIMEOUT_MS = COPILOT_SWITCH_LOCK_TIMEOUT_MS; // give up waiting (must be >= LOCK_STALE_MS)
26
+ // Switch window
27
+ const SWITCH_WINDOW_MS = 5 * 60_000; // 5-minute tracking window
28
+ const MAX_SWITCHES_IN_WINDOW = 3; // 3 accounts
29
+ const RECENT_SWITCH_THRESHOLD_MS = 45_000; // 45s = "just switched, don't switch again" (script takes ~36s)
30
+ // ── Public API ─────────────────────────────────────────────────────
31
+ /**
32
+ * Check if the copilot-switch script exists on disk.
33
+ */
34
+ export function isSwitchAvailable() {
35
+ try {
36
+ return existsSync(COPILOT_SWITCH_PATH);
37
+ }
38
+ catch {
39
+ return false;
40
+ }
41
+ }
42
+ /**
43
+ * Try to switch to the next Copilot account.
44
+ *
45
+ * - Acquires a file lock so only one process runs the switch.
46
+ * - Other callers wait for the lock, then see `recentSwitch`.
47
+ * - Returns `exhausted` if all 3 accounts tried in the last 5 minutes.
48
+ * - Returns `disabled` if the switch script doesn't exist.
49
+ */
50
+ export async function trySwitchAccount() {
51
+ // Gate 1: Is the switch script available?
52
+ if (!isSwitchAvailable()) {
53
+ return { outcome: 'disabled' };
54
+ }
55
+ // Gate 2: Quick pre-check without lock (optimistic read)
56
+ const preState = readState();
57
+ if (isRecentSwitch(preState)) {
58
+ console.error('[copilot-switch] Recent switch detected (pre-check), skipping');
59
+ return { outcome: 'recentSwitch' };
60
+ }
61
+ if (isExhausted(preState)) {
62
+ console.error('[copilot-switch] All accounts exhausted (pre-check)');
63
+ return { outcome: 'exhausted' };
64
+ }
65
+ // Gate 3: Acquire lock (or wait for someone else to finish)
66
+ const locked = acquireLock() || await waitForLock();
67
+ if (!locked) {
68
+ // Could not acquire lock — check if someone else switched while we waited
69
+ const postWaitState = readState();
70
+ if (isRecentSwitch(postWaitState)) {
71
+ return { outcome: 'recentSwitch' };
72
+ }
73
+ return { outcome: 'failed', error: 'Could not acquire switch lock' };
74
+ }
75
+ try {
76
+ // Gate 4: Re-check state under lock (double-check pattern)
77
+ const state = readState();
78
+ if (isRecentSwitch(state)) {
79
+ console.error('[copilot-switch] Recent switch detected (under lock), skipping');
80
+ return { outcome: 'recentSwitch' };
81
+ }
82
+ if (isExhausted(state)) {
83
+ console.error('[copilot-switch] All accounts exhausted (under lock)');
84
+ return { outcome: 'exhausted' };
85
+ }
86
+ // Execute the switch
87
+ const success = await runSwitchCommand();
88
+ if (!success) {
89
+ return { outcome: 'failed', error: 'Switch command returned non-zero' };
90
+ }
91
+ // Update state
92
+ const now = Date.now();
93
+ const windowExpired = state.windowStart > 0 && (now - state.windowStart) > SWITCH_WINDOW_MS;
94
+ const newState = {
95
+ lastSwitchTime: now,
96
+ switchCount: windowExpired ? 1 : state.switchCount + 1,
97
+ windowStart: windowExpired ? now : (state.windowStart || now),
98
+ };
99
+ writeState(newState);
100
+ console.error(`[copilot-switch] Switch #${newState.switchCount} in window (max ${MAX_SWITCHES_IN_WINDOW})`);
101
+ return { outcome: 'switched' };
102
+ }
103
+ finally {
104
+ releaseLock();
105
+ }
106
+ }
107
+ // ── State management ───────────────────────────────────────────────
108
+ function readState() {
109
+ const defaultState = { lastSwitchTime: 0, switchCount: 0, windowStart: 0 };
110
+ try {
111
+ if (!existsSync(STATE_PATH))
112
+ return defaultState;
113
+ const data = readFileSync(STATE_PATH, 'utf-8');
114
+ const parsed = JSON.parse(data);
115
+ if (typeof parsed.lastSwitchTime !== 'number')
116
+ return defaultState;
117
+ return parsed;
118
+ }
119
+ catch {
120
+ return defaultState;
121
+ }
122
+ }
123
+ function writeState(state) {
124
+ try {
125
+ writeFileSync(STATE_PATH, JSON.stringify(state, null, 2), 'utf-8');
126
+ }
127
+ catch (err) {
128
+ console.error(`[copilot-switch] Failed to write state: ${err}`);
129
+ }
130
+ }
131
+ function isRecentSwitch(state) {
132
+ return state.lastSwitchTime > 0 && (Date.now() - state.lastSwitchTime) < RECENT_SWITCH_THRESHOLD_MS;
133
+ }
134
+ function isExhausted(state) {
135
+ // If window has expired, not exhausted (will reset on next switch)
136
+ if (state.windowStart > 0 && (Date.now() - state.windowStart) > SWITCH_WINDOW_MS) {
137
+ return false;
138
+ }
139
+ return state.switchCount >= MAX_SWITCHES_IN_WINDOW;
140
+ }
141
+ // ── Lock management ────────────────────────────────────────────────
142
+ function acquireLock() {
143
+ try {
144
+ const lockData = { pid: process.pid, timestamp: Date.now() };
145
+ // 'wx' = create exclusively, fail if exists (atomic on POSIX)
146
+ writeFileSync(LOCK_PATH, JSON.stringify(lockData), { flag: 'wx' });
147
+ return true;
148
+ }
149
+ catch {
150
+ return false; // File already exists (lock held by another process)
151
+ }
152
+ }
153
+ function releaseLock() {
154
+ try {
155
+ unlinkSync(LOCK_PATH);
156
+ }
157
+ catch {
158
+ // Ignore — lock may have been broken by another process
159
+ }
160
+ }
161
+ function isLockStale() {
162
+ try {
163
+ const content = readFileSync(LOCK_PATH, 'utf-8');
164
+ const lock = JSON.parse(content);
165
+ // Age check
166
+ if (Date.now() - lock.timestamp > LOCK_STALE_MS) {
167
+ console.error(`[copilot-switch] Stale lock detected (age: ${Date.now() - lock.timestamp}ms)`);
168
+ return true;
169
+ }
170
+ // PID liveness check
171
+ try {
172
+ process.kill(lock.pid, 0); // Signal 0 = check if process exists
173
+ return false; // PID alive, lock is valid
174
+ }
175
+ catch {
176
+ console.error(`[copilot-switch] Stale lock detected (PID ${lock.pid} is dead)`);
177
+ return true;
178
+ }
179
+ }
180
+ catch {
181
+ // Can't read/parse lock — treat as stale
182
+ return true;
183
+ }
184
+ }
185
+ async function waitForLock() {
186
+ const deadline = Date.now() + LOCK_TIMEOUT_MS;
187
+ while (Date.now() < deadline) {
188
+ // Try to acquire
189
+ if (acquireLock())
190
+ return true;
191
+ // Check if the held lock is stale
192
+ if (isLockStale()) {
193
+ console.error('[copilot-switch] Breaking stale lock');
194
+ try {
195
+ unlinkSync(LOCK_PATH);
196
+ }
197
+ catch { }
198
+ if (acquireLock())
199
+ return true;
200
+ }
201
+ await new Promise(resolve => setTimeout(resolve, LOCK_POLL_MS));
202
+ }
203
+ console.error('[copilot-switch] Lock acquisition timed out');
204
+ return false;
205
+ }
206
+ // ── Switch command execution ───────────────────────────────────────
207
+ async function runSwitchCommand() {
208
+ try {
209
+ console.error('[copilot-switch] Running account switch...');
210
+ const result = await execa(COPILOT_SWITCH_PATH, ['next'], {
211
+ timeout: COPILOT_SWITCH_COMMAND_TIMEOUT_MS, // switch command timeout
212
+ reject: false,
213
+ });
214
+ if (result.exitCode === 0) {
215
+ console.error(`[copilot-switch] Account switch successful${result.stdout ? ': ' + result.stdout.trim() : ''}`);
216
+ return true;
217
+ }
218
+ console.error(`[copilot-switch] Switch command failed (exit ${result.exitCode}): ${result.stderr}`);
219
+ return false;
220
+ }
221
+ catch (err) {
222
+ console.error(`[copilot-switch] Switch command error: ${err}`);
223
+ return false;
224
+ }
225
+ }
226
+ //# sourceMappingURL=copilot-switch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"copilot-switch.js","sourceRoot":"","sources":["../../src/services/copilot-switch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { SpawnOptions, TaskState } from '../types.js';
2
+ export declare function spawnCopilotProcess(options: SpawnOptions): Promise<string>;
3
+ /**
4
+ * Execute a waiting task (called when dependencies are satisfied)
5
+ */
6
+ export declare function executeWaitingTask(task: TaskState): Promise<void>;
7
+ export declare function checkCopilotInstalled(): boolean;
8
+ export declare function checkClaudeCliInstalled(): boolean;
9
+ //# sourceMappingURL=process-spawner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process-spawner.d.ts","sourceRoot":"","sources":["../../src/services/process-spawner.ts"],"names":[],"mappings":"AAIA,OAAO,EAAc,YAAY,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAUlE,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CA8ChF;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAuBvE;AAybD,wBAAgB,qBAAqB,IAAI,OAAO,CAM/C;AAED,wBAAgB,uBAAuB,IAAI,OAAO,CAUjD"}