@bradygaster/squad-sdk 0.10.0 → 0.11.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.
Files changed (135) hide show
  1. package/CHANGELOG.md +344 -0
  2. package/dist/adapter/client.d.ts +1 -1
  3. package/dist/adapter/client.d.ts.map +1 -1
  4. package/dist/adapter/client.js +20 -11
  5. package/dist/adapter/client.js.map +1 -1
  6. package/dist/adapter/types.d.ts +5 -1
  7. package/dist/adapter/types.d.ts.map +1 -1
  8. package/dist/agents/charter-compiler.d.ts +6 -0
  9. package/dist/agents/charter-compiler.d.ts.map +1 -1
  10. package/dist/agents/charter-compiler.js +23 -0
  11. package/dist/agents/charter-compiler.js.map +1 -1
  12. package/dist/agents/index.d.ts +2 -0
  13. package/dist/agents/index.d.ts.map +1 -1
  14. package/dist/agents/index.js +2 -0
  15. package/dist/agents/index.js.map +1 -1
  16. package/dist/agents/lifecycle.d.ts +3 -0
  17. package/dist/agents/lifecycle.d.ts.map +1 -1
  18. package/dist/agents/lifecycle.js +16 -6
  19. package/dist/agents/lifecycle.js.map +1 -1
  20. package/dist/agents/onboarding.d.ts.map +1 -1
  21. package/dist/agents/onboarding.js +63 -18
  22. package/dist/agents/onboarding.js.map +1 -1
  23. package/dist/builders/index.d.ts.map +1 -1
  24. package/dist/builders/index.js +7 -0
  25. package/dist/builders/index.js.map +1 -1
  26. package/dist/builders/types.d.ts +5 -0
  27. package/dist/builders/types.d.ts.map +1 -1
  28. package/dist/client/event-bus.d.ts +1 -1
  29. package/dist/client/event-bus.d.ts.map +1 -1
  30. package/dist/client/event-bus.js.map +1 -1
  31. package/dist/client/index.d.ts +1 -1
  32. package/dist/config/gitignore-state.d.ts +31 -0
  33. package/dist/config/gitignore-state.d.ts.map +1 -0
  34. package/dist/config/gitignore-state.js +74 -0
  35. package/dist/config/gitignore-state.js.map +1 -0
  36. package/dist/config/index.d.ts +1 -0
  37. package/dist/config/index.d.ts.map +1 -1
  38. package/dist/config/index.js +1 -0
  39. package/dist/config/index.js.map +1 -1
  40. package/dist/config/init.d.ts +18 -0
  41. package/dist/config/init.d.ts.map +1 -1
  42. package/dist/config/init.js +184 -10
  43. package/dist/config/init.js.map +1 -1
  44. package/dist/config/models.d.ts +89 -0
  45. package/dist/config/models.d.ts.map +1 -1
  46. package/dist/config/models.js +297 -0
  47. package/dist/config/models.js.map +1 -1
  48. package/dist/config/routing.d.ts.map +1 -1
  49. package/dist/config/routing.js +24 -1
  50. package/dist/config/routing.js.map +1 -1
  51. package/dist/config/schema.d.ts +3 -0
  52. package/dist/config/schema.d.ts.map +1 -1
  53. package/dist/config/schema.js.map +1 -1
  54. package/dist/coordinator/direct-response.d.ts.map +1 -1
  55. package/dist/coordinator/direct-response.js +4 -0
  56. package/dist/coordinator/direct-response.js.map +1 -1
  57. package/dist/coordinator/fan-out.d.ts +12 -4
  58. package/dist/coordinator/fan-out.d.ts.map +1 -1
  59. package/dist/coordinator/fan-out.js +155 -15
  60. package/dist/coordinator/fan-out.js.map +1 -1
  61. package/dist/coordinator/index.d.ts +1 -0
  62. package/dist/coordinator/index.d.ts.map +1 -1
  63. package/dist/coordinator/index.js +2 -0
  64. package/dist/coordinator/index.js.map +1 -1
  65. package/dist/coordinator/spawn-backend.d.ts +181 -0
  66. package/dist/coordinator/spawn-backend.d.ts.map +1 -0
  67. package/dist/coordinator/spawn-backend.js +254 -0
  68. package/dist/coordinator/spawn-backend.js.map +1 -0
  69. package/dist/index.d.ts +2 -1
  70. package/dist/index.d.ts.map +1 -1
  71. package/dist/index.js +2 -1
  72. package/dist/index.js.map +1 -1
  73. package/dist/platform/comms-teams.d.ts +2 -1
  74. package/dist/platform/comms-teams.d.ts.map +1 -1
  75. package/dist/platform/comms-teams.js +12 -7
  76. package/dist/platform/comms-teams.js.map +1 -1
  77. package/dist/presets/index.d.ts +27 -0
  78. package/dist/presets/index.d.ts.map +1 -1
  79. package/dist/presets/index.js +309 -0
  80. package/dist/presets/index.js.map +1 -1
  81. package/dist/presets/scaffold.d.ts +27 -0
  82. package/dist/presets/scaffold.d.ts.map +1 -0
  83. package/dist/presets/scaffold.js +377 -0
  84. package/dist/presets/scaffold.js.map +1 -0
  85. package/dist/ralph/capabilities.d.ts +5 -2
  86. package/dist/ralph/capabilities.d.ts.map +1 -1
  87. package/dist/ralph/capabilities.js +10 -4
  88. package/dist/ralph/capabilities.js.map +1 -1
  89. package/dist/resolution.d.ts.map +1 -1
  90. package/dist/resolution.js +8 -0
  91. package/dist/resolution.js.map +1 -1
  92. package/dist/runtime/cross-squad.d.ts +47 -0
  93. package/dist/runtime/cross-squad.d.ts.map +1 -1
  94. package/dist/runtime/cross-squad.js +79 -2
  95. package/dist/runtime/cross-squad.js.map +1 -1
  96. package/dist/runtime/otel.js +6 -6
  97. package/dist/runtime/otel.js.map +1 -1
  98. package/dist/runtime/squad-observer.d.ts +2 -0
  99. package/dist/runtime/squad-observer.d.ts.map +1 -1
  100. package/dist/runtime/squad-observer.js +65 -4
  101. package/dist/runtime/squad-observer.js.map +1 -1
  102. package/dist/sharing/consult.d.ts +5 -1
  103. package/dist/sharing/consult.d.ts.map +1 -1
  104. package/dist/sharing/consult.js +5 -1
  105. package/dist/sharing/consult.js.map +1 -1
  106. package/dist/skills/handler-types.d.ts +1 -1
  107. package/dist/skills/handler-types.js +1 -1
  108. package/dist/tools/index.d.ts +1 -1
  109. package/dist/tools/index.d.ts.map +1 -1
  110. package/dist/tools/index.js +20 -8
  111. package/dist/tools/index.js.map +1 -1
  112. package/package.json +17 -16
  113. package/templates/casting-reference.md +18 -0
  114. package/templates/fact-checker-charter.md +83 -0
  115. package/templates/fact-checker-policy.md +104 -0
  116. package/templates/skills/cli-wiring/SKILL.md +2 -2
  117. package/templates/skills/coordinator-init-mode/SKILL.md +83 -0
  118. package/templates/skills/coordinator-response-mode/SKILL.md +97 -0
  119. package/templates/skills/coordinator-source-of-truth/SKILL.md +45 -0
  120. package/templates/skills/cross-squad/SKILL.md +66 -6
  121. package/templates/skills/cross-squad-communication/SKILL.md +399 -0
  122. package/templates/skills/init-mode/SKILL.md +4 -4
  123. package/templates/skills/personal-squad/SKILL.md +3 -2
  124. package/templates/skills/release-process/SKILL.md +2 -2
  125. package/templates/skills/squad/SKILL.md +299 -0
  126. package/templates/skills/squad-commands/SKILL.md +303 -0
  127. package/templates/skills/squad-help/SKILL.md +97 -0
  128. package/templates/skills/squad-version-check/SKILL.md +169 -0
  129. package/templates/skills/tiered-memory/SKILL.md +31 -44
  130. package/templates/spawn-reference.md +57 -2
  131. package/templates/squad.agent.md.template +204 -180
  132. package/templates/workflows/squad-heartbeat.yml +2 -5
  133. package/templates/workflows/squad-issue-assign.yml +3 -7
  134. package/templates/workflows/squad-triage.yml +3 -11
  135. package/templates/workflows/sync-squad-labels.yml +2 -7
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/coordinator/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/coordinator/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,181 @@
1
+ /**
2
+ * Spawn Backend Abstraction (Issue #1377)
3
+ *
4
+ * Defines a thin `SpawnBackend` interface with two implementations:
5
+ * - `TaskSpawnBackend` — spawns agents via `task` tool (CLI / VS Code)
6
+ * - `SessionSpawnBackend` — spawns agents as sub-sessions via `create_session` (Copilot App)
7
+ *
8
+ * The coordinator detects which backend to use at startup via `detectSpawnBackend()`.
9
+ * If App backend fails, it gracefully degrades to the task backend (fallback).
10
+ */
11
+ /** Platform environment for spawn dispatch */
12
+ export type SpawnPlatform = 'cli' | 'app' | 'vscode';
13
+ /** Configuration for spawning an agent */
14
+ export interface SpawnRequest {
15
+ /** Agent name (lowercase cast name) */
16
+ agentName: string;
17
+ /** Full prompt to send to the spawned agent */
18
+ prompt: string;
19
+ /** Human-readable description (e.g., "🔧 EECOM: Refactoring auth module") */
20
+ description: string;
21
+ /** Short name for UI display (lowercase cast name) */
22
+ name: string;
23
+ /** Model to use */
24
+ model?: string;
25
+ /** Reasoning effort override */
26
+ reasoningEffort?: string;
27
+ /** Whether the spawned work produces commits (sub-session only) */
28
+ producesCommits?: boolean;
29
+ /** Whether to run in background */
30
+ background?: boolean;
31
+ }
32
+ /** Handle to a spawned agent — allows result collection and status checks */
33
+ export interface SpawnHandle {
34
+ /** Unique identifier for the spawned agent/session */
35
+ id: string;
36
+ /** Agent name */
37
+ agentName: string;
38
+ /** Which backend was used */
39
+ platform: SpawnPlatform;
40
+ /** Whether the spawn succeeded */
41
+ success: boolean;
42
+ /** Error message if spawn failed */
43
+ error?: string;
44
+ }
45
+ /** Session object returned by the injected session factory */
46
+ export interface SpawnedSession {
47
+ /** Unique session identifier */
48
+ sessionId: string;
49
+ /** Send the initial message when kickoff is not handled by session creation */
50
+ sendMessage: (opts: {
51
+ prompt: string;
52
+ mode?: 'enqueue' | 'immediate';
53
+ }) => Promise<void>;
54
+ }
55
+ /** Session creation callback injected by SDK callers */
56
+ export type CreateSessionFn = (config: any) => Promise<SpawnedSession>;
57
+ /**
58
+ * Default timeout (ms) applied to an injected `createSession` call so a hung
59
+ * factory cannot hold a concurrency slot / pending-spawn counter forever.
60
+ */
61
+ export declare const DEFAULT_CREATE_SESSION_TIMEOUT_MS = 60000;
62
+ /** Error thrown when an injected createSession call exceeds its timeout. */
63
+ export declare class SpawnTimeoutError extends Error {
64
+ constructor(ms: number);
65
+ }
66
+ /** Options shared by all spawn backends. */
67
+ export interface SpawnBackendOptions {
68
+ /**
69
+ * Timeout (ms) for the injected `createSession` call.
70
+ * Defaults to {@link DEFAULT_CREATE_SESSION_TIMEOUT_MS}; set to 0 to disable.
71
+ */
72
+ createSessionTimeoutMs?: number;
73
+ /**
74
+ * Optional availability predicate. When provided, `isAvailable()` delegates
75
+ * to it instead of the default heuristic — letting callers gate a backend on
76
+ * real environment signals (e.g., tool-registry membership).
77
+ */
78
+ availabilityCheck?: () => boolean;
79
+ }
80
+ /** Options for sub-session creation (App mode) */
81
+ export interface SessionSpawnOptions extends SpawnBackendOptions {
82
+ /** Project ID for session creation */
83
+ projectId?: string;
84
+ /** Whether to coordinate with creator session */
85
+ coordinateWithCreator?: boolean;
86
+ /** Notification preference when session goes idle */
87
+ notifyOnIdle?: 'once' | 'always';
88
+ /** Maximum concurrent sub-sessions (default: 5) */
89
+ maxConcurrent?: number;
90
+ /** Session mode */
91
+ mode?: 'plan' | 'interactive' | 'autopilot';
92
+ }
93
+ /**
94
+ * Abstract interface for agent spawn dispatch.
95
+ * Implementations handle platform-specific spawn mechanics.
96
+ */
97
+ export interface SpawnBackend {
98
+ /** Platform this backend targets */
99
+ readonly platform: SpawnPlatform;
100
+ /**
101
+ * Spawn an agent with the given request.
102
+ * Returns a handle for tracking the spawned agent.
103
+ */
104
+ spawn(request: SpawnRequest): Promise<SpawnHandle>;
105
+ /**
106
+ * Release a previously spawned handle once the caller observes completion.
107
+ * Backends that enforce concurrency caps must decrement their tracking here.
108
+ */
109
+ release(handle: SpawnHandle): void;
110
+ /**
111
+ * Check if this backend is available in the current environment.
112
+ * Used by detectSpawnBackend() to pick the right implementation.
113
+ */
114
+ isAvailable(): boolean;
115
+ }
116
+ /**
117
+ * Spawns agents via the injected session factory for CLI / VS Code contexts.
118
+ * In prompt-only tool contexts, the coordinator LLM maps this abstraction to the `task` tool.
119
+ */
120
+ export declare class TaskSpawnBackend implements SpawnBackend {
121
+ private readonly createSession;
122
+ readonly platform: SpawnPlatform;
123
+ private options;
124
+ constructor(createSession: CreateSessionFn, options?: SpawnBackendOptions);
125
+ isAvailable(): boolean;
126
+ spawn(request: SpawnRequest): Promise<SpawnHandle>;
127
+ release(_handle: SpawnHandle): void;
128
+ }
129
+ /**
130
+ * Spawns agents as sub-sessions via the injected session factory for Copilot App contexts.
131
+ * Each agent appears as a clickable session in the left nav with real-time visibility.
132
+ *
133
+ * Design constraints:
134
+ * - Max depth: 1 (no sub-sub-sessions)
135
+ * - Concurrency cap: configurable, default 5
136
+ * - Only for commit-producing work; pure analysis uses task backend
137
+ * - Naming: "{Name} {verb}ing {noun}" (40-char max, sentence case)
138
+ */
139
+ export declare class SessionSpawnBackend implements SpawnBackend {
140
+ private readonly createSession;
141
+ readonly platform: SpawnPlatform;
142
+ private options;
143
+ private activeSessionIds;
144
+ private pendingSpawnCount;
145
+ constructor(createSession: CreateSessionFn, options?: SessionSpawnOptions);
146
+ isAvailable(): boolean;
147
+ spawn(request: SpawnRequest): Promise<SpawnHandle>;
148
+ release(handle: SpawnHandle): void;
149
+ /** Get current active session count */
150
+ getActiveCount(): number;
151
+ }
152
+ /**
153
+ * Detect which spawn backend to use based on available tools.
154
+ *
155
+ * Detection order:
156
+ * 1. `create_session` tool available → App mode (SessionSpawnBackend)
157
+ * 2. `task` tool available → CLI mode (TaskSpawnBackend)
158
+ * 3. Neither → fallback to TaskSpawnBackend
159
+ *
160
+ * @param availableTools - Set of tool names available in the current environment
161
+ * @param createSession - Injected session creation callback used by the selected backend
162
+ * @param options - Options for SessionSpawnBackend if App mode is detected
163
+ */
164
+ export declare function detectSpawnBackend(availableTools: ReadonlySet<string> | string[], createSession: CreateSessionFn, options?: SessionSpawnOptions): SpawnBackend;
165
+ /**
166
+ * Detect spawn platform from available tools (returns platform type only).
167
+ *
168
+ * @param availableTools - Set of tool names available in the current environment
169
+ */
170
+ export declare function detectSpawnPlatform(availableTools: ReadonlySet<string> | string[]): SpawnPlatform;
171
+ /**
172
+ * Truncate a session name to 40 characters (Copilot App limit).
173
+ * Prefers cutting at a word boundary.
174
+ */
175
+ export declare function truncateSessionName(name: string): string;
176
+ /**
177
+ * Build a session name following the convention: "{Name} {verb}ing {noun}"
178
+ * Example: "Flight reviewing arch", "EECOM refactoring auth"
179
+ */
180
+ export declare function buildSessionName(agentName: string, taskVerb: string, taskNoun: string): string;
181
+ //# sourceMappingURL=spawn-backend.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spawn-backend.d.ts","sourceRoot":"","sources":["../../src/coordinator/spawn-backend.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,254 @@
1
+ /**
2
+ * Spawn Backend Abstraction (Issue #1377)
3
+ *
4
+ * Defines a thin `SpawnBackend` interface with two implementations:
5
+ * - `TaskSpawnBackend` — spawns agents via `task` tool (CLI / VS Code)
6
+ * - `SessionSpawnBackend` — spawns agents as sub-sessions via `create_session` (Copilot App)
7
+ *
8
+ * The coordinator detects which backend to use at startup via `detectSpawnBackend()`.
9
+ * If App backend fails, it gracefully degrades to the task backend (fallback).
10
+ */
11
+ /**
12
+ * Default timeout (ms) applied to an injected `createSession` call so a hung
13
+ * factory cannot hold a concurrency slot / pending-spawn counter forever.
14
+ */
15
+ export const DEFAULT_CREATE_SESSION_TIMEOUT_MS = 60_000;
16
+ /** Error thrown when an injected createSession call exceeds its timeout. */
17
+ export class SpawnTimeoutError extends Error {
18
+ constructor(ms) {
19
+ super(`createSession timed out after ${ms}ms`);
20
+ this.name = 'SpawnTimeoutError';
21
+ }
22
+ }
23
+ /**
24
+ * Race a promise against a timeout. A non-positive `ms` disables the timeout.
25
+ * The timer is unref'd so it never keeps the process alive on its own.
26
+ */
27
+ async function withTimeout(promise, ms) {
28
+ if (!ms || ms <= 0)
29
+ return promise;
30
+ let timer;
31
+ const timeout = new Promise((_resolve, reject) => {
32
+ timer = setTimeout(() => reject(new SpawnTimeoutError(ms)), ms);
33
+ if (typeof timer.unref === 'function')
34
+ timer.unref();
35
+ });
36
+ try {
37
+ return await Promise.race([promise, timeout]);
38
+ }
39
+ finally {
40
+ if (timer)
41
+ clearTimeout(timer);
42
+ }
43
+ }
44
+ // --- TaskSpawnBackend (CLI) ---
45
+ /**
46
+ * Spawns agents via the injected session factory for CLI / VS Code contexts.
47
+ * In prompt-only tool contexts, the coordinator LLM maps this abstraction to the `task` tool.
48
+ */
49
+ export class TaskSpawnBackend {
50
+ createSession;
51
+ platform = 'cli';
52
+ options;
53
+ constructor(createSession, options = {}) {
54
+ this.createSession = createSession;
55
+ this.options = options;
56
+ }
57
+ isAvailable() {
58
+ if (this.options.availabilityCheck)
59
+ return this.options.availabilityCheck();
60
+ // Requires a usable session factory to map onto the `task` tool.
61
+ return typeof this.createSession === 'function';
62
+ }
63
+ async spawn(request) {
64
+ try {
65
+ const session = await withTimeout(this.createSession({
66
+ model: request.model,
67
+ clientName: `squad-agent-${request.agentName}`,
68
+ ...(request.reasoningEffort ? { reasoningEffort: request.reasoningEffort } : {}),
69
+ }), this.options.createSessionTimeoutMs ?? DEFAULT_CREATE_SESSION_TIMEOUT_MS);
70
+ await session.sendMessage({
71
+ prompt: request.prompt,
72
+ mode: 'immediate',
73
+ });
74
+ return {
75
+ id: session.sessionId,
76
+ agentName: request.agentName,
77
+ platform: 'cli',
78
+ success: true,
79
+ };
80
+ }
81
+ catch (error) {
82
+ return {
83
+ id: '',
84
+ agentName: request.agentName,
85
+ platform: 'cli',
86
+ success: false,
87
+ error: error instanceof Error ? error.message : String(error),
88
+ };
89
+ }
90
+ }
91
+ release(_handle) {
92
+ // No concurrency cap for task-backed spawns.
93
+ }
94
+ }
95
+ // --- SessionSpawnBackend (Copilot App) ---
96
+ /**
97
+ * Spawns agents as sub-sessions via the injected session factory for Copilot App contexts.
98
+ * Each agent appears as a clickable session in the left nav with real-time visibility.
99
+ *
100
+ * Design constraints:
101
+ * - Max depth: 1 (no sub-sub-sessions)
102
+ * - Concurrency cap: configurable, default 5
103
+ * - Only for commit-producing work; pure analysis uses task backend
104
+ * - Naming: "{Name} {verb}ing {noun}" (40-char max, sentence case)
105
+ */
106
+ export class SessionSpawnBackend {
107
+ createSession;
108
+ platform = 'app';
109
+ options;
110
+ activeSessionIds = new Set();
111
+ pendingSpawnCount = 0;
112
+ constructor(createSession, options = {}) {
113
+ this.createSession = createSession;
114
+ this.options = {
115
+ coordinateWithCreator: true,
116
+ notifyOnIdle: 'once',
117
+ maxConcurrent: 5,
118
+ mode: 'autopilot',
119
+ ...options,
120
+ };
121
+ }
122
+ isAvailable() {
123
+ if (this.options.availabilityCheck)
124
+ return this.options.availabilityCheck();
125
+ // Availability hinges on a usable session factory. Tool-registry gating
126
+ // (e.g. `create_session` membership) is layered on by detectSpawnBackend()
127
+ // or via an injected availabilityCheck.
128
+ return typeof this.createSession === 'function';
129
+ }
130
+ async spawn(request) {
131
+ const maxConcurrent = this.options.maxConcurrent ?? 5;
132
+ const inFlightCount = this.activeSessionIds.size + this.pendingSpawnCount;
133
+ // Enforce concurrency cap
134
+ if (inFlightCount >= maxConcurrent) {
135
+ return {
136
+ id: '',
137
+ agentName: request.agentName,
138
+ platform: 'app',
139
+ success: false,
140
+ error: `Concurrency cap reached (${maxConcurrent} active or starting sub-sessions). ` +
141
+ `Spawn rejected because no queue is configured.`,
142
+ };
143
+ }
144
+ this.pendingSpawnCount++;
145
+ try {
146
+ const session = await withTimeout(this.createSession({
147
+ name: truncateSessionName(request.description),
148
+ coordinate_with_creator: this.options.coordinateWithCreator,
149
+ notify_on_idle: this.options.notifyOnIdle,
150
+ project_id: this.options.projectId,
151
+ kickoff: {
152
+ prompt: request.prompt,
153
+ mode: this.options.mode,
154
+ model: request.model,
155
+ ...(request.reasoningEffort ? { reasoning_effort: request.reasoningEffort } : {}),
156
+ },
157
+ }), this.options.createSessionTimeoutMs ?? DEFAULT_CREATE_SESSION_TIMEOUT_MS);
158
+ this.activeSessionIds.add(session.sessionId);
159
+ return {
160
+ id: session.sessionId,
161
+ agentName: request.agentName,
162
+ platform: 'app',
163
+ success: true,
164
+ };
165
+ }
166
+ catch (error) {
167
+ return {
168
+ id: '',
169
+ agentName: request.agentName,
170
+ platform: 'app',
171
+ success: false,
172
+ error: error instanceof Error ? error.message : String(error),
173
+ };
174
+ }
175
+ finally {
176
+ this.pendingSpawnCount--;
177
+ }
178
+ }
179
+ release(handle) {
180
+ this.activeSessionIds.delete(handle.id);
181
+ }
182
+ /** Get current active session count */
183
+ getActiveCount() {
184
+ return this.activeSessionIds.size + this.pendingSpawnCount;
185
+ }
186
+ }
187
+ // --- Detection ---
188
+ /**
189
+ * Detect which spawn backend to use based on available tools.
190
+ *
191
+ * Detection order:
192
+ * 1. `create_session` tool available → App mode (SessionSpawnBackend)
193
+ * 2. `task` tool available → CLI mode (TaskSpawnBackend)
194
+ * 3. Neither → fallback to TaskSpawnBackend
195
+ *
196
+ * @param availableTools - Set of tool names available in the current environment
197
+ * @param createSession - Injected session creation callback used by the selected backend
198
+ * @param options - Options for SessionSpawnBackend if App mode is detected
199
+ */
200
+ export function detectSpawnBackend(availableTools, createSession, options) {
201
+ const tools = availableTools instanceof Set
202
+ ? availableTools
203
+ : new Set(availableTools);
204
+ if (tools.has('create_session')) {
205
+ return new SessionSpawnBackend(createSession, options);
206
+ }
207
+ return new TaskSpawnBackend(createSession, options);
208
+ }
209
+ /**
210
+ * Detect spawn platform from available tools (returns platform type only).
211
+ *
212
+ * @param availableTools - Set of tool names available in the current environment
213
+ */
214
+ export function detectSpawnPlatform(availableTools) {
215
+ const tools = availableTools instanceof Set
216
+ ? availableTools
217
+ : new Set(availableTools);
218
+ if (tools.has('create_session'))
219
+ return 'app';
220
+ if (tools.has('runSubagent'))
221
+ return 'vscode';
222
+ return 'cli';
223
+ }
224
+ // --- Helpers ---
225
+ /**
226
+ * Truncate a session name to 40 characters (Copilot App limit).
227
+ * Prefers cutting at a word boundary.
228
+ */
229
+ export function truncateSessionName(name) {
230
+ if (name.length <= 40)
231
+ return name;
232
+ // Strip emoji prefix for length calculation, then re-add
233
+ const emojiMatch = name.match(/^(\p{Emoji_Presentation}\s*)/u);
234
+ const prefix = emojiMatch?.[1] ?? '';
235
+ const rest = name.slice(prefix.length);
236
+ if (rest.length <= 40 - prefix.length)
237
+ return name;
238
+ const maxLen = 40 - prefix.length;
239
+ const truncated = rest.slice(0, maxLen);
240
+ const lastSpace = truncated.lastIndexOf(' ');
241
+ if (lastSpace > maxLen * 0.6) {
242
+ return prefix + truncated.slice(0, lastSpace);
243
+ }
244
+ return prefix + truncated;
245
+ }
246
+ /**
247
+ * Build a session name following the convention: "{Name} {verb}ing {noun}"
248
+ * Example: "Flight reviewing arch", "EECOM refactoring auth"
249
+ */
250
+ export function buildSessionName(agentName, taskVerb, taskNoun) {
251
+ const raw = `${agentName} ${taskVerb} ${taskNoun}`;
252
+ return truncateSessionName(raw);
253
+ }
254
+ //# sourceMappingURL=spawn-backend.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spawn-backend.js","sourceRoot":"","sources":["../../src/coordinator/spawn-backend.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -30,7 +30,7 @@ export * from './runtime/rework.js';
30
30
  export { getMeter, getTracer } from './runtime/otel.js';
31
31
  export { safeTimestamp } from './utils/safe-timestamp.js';
32
32
  export { EventBus as RuntimeEventBus } from './runtime/event-bus.js';
33
- export { type SquadManifest, type SquadContact, type AcceptedWorkType, type DiscoveredSquad, type CrossSquadIssueOptions, type CrossSquadIssueResult, type CrossSquadWorkStatus, validateManifest, readManifest, discoverSquads, discoverFromUpstreams, discoverFromRegistry, buildDelegationArgs, buildStatusCheckArgs, parseIssueStatus, formatDiscoveryTable, findSquadByName, } from './runtime/cross-squad.js';
33
+ export { type SquadManifest, type SquadContact, type AcceptedWorkType, type DiscoveredSquad, type CrossSquadIssueOptions, type CrossSquadIssueResult, type CrossSquadWorkStatus, type RegistryEntry, type AddRegistryEntryResult, validateManifest, readManifest, discoverSquads, discoverFromUpstreams, discoverFromRegistry, readSquadRegistry, writeSquadRegistry, addRegistryEntry, removeRegistryEntry, buildDelegationArgs, buildStatusCheckArgs, parseIssueStatus, formatDiscoveryTable, findSquadByName, } from './runtime/cross-squad.js';
34
34
  export * from './marketplace/index.js';
35
35
  export * from './build/index.js';
36
36
  export * from './sharing/index.js';
@@ -46,6 +46,7 @@ export * from './memory/index.js';
46
46
  export type { StateBackend, StateBackendType, StateBackendConfig } from './state-backend.js';
47
47
  export { WorktreeBackend, GitNotesBackend, OrphanBranchBackend, TwoLayerBackend, CircuitBreaker, GitExecError, resolveStateBackend, validateStateKey, StateBackendStorageAdapter, verifyStateBackend } from './state-backend.js';
48
48
  export type { PromoteNotesResult } from './state-backend.js';
49
+ export { addSquadStateGitignoreBlock, removeSquadStateGitignoreBlock, SQUAD_STATE_GITIGNORE_OPEN_MARKER, SQUAD_STATE_GITIGNORE_CLOSE_MARKER } from './config/gitignore-state.js';
49
50
  export { StateError, NotFoundError, ParseError, WriteConflictError, ProviderError, COLLECTION_PATHS, resolveCollectionPath, createAgentHandle, AgentsCollection, ConfigCollection, DecisionsCollection, LogCollection, RoutingCollection, SkillsCollection, TeamCollection, TemplatesCollection, SquadState, } from './state/index.js';
50
51
  export type { ConfigFileData } from './state/index.js';
51
52
  export type { Agent, Decision, LogEntry, RoutingConfigRule, SquadStateConfig, StateErrorKind, TeamMember, Template, CollectionEntityMap, CollectionName, AgentHandle, CollectionPathResolver, } from './state/index.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -29,7 +29,7 @@ export * from './runtime/rework.js';
29
29
  export { getMeter, getTracer } from './runtime/otel.js';
30
30
  export { safeTimestamp } from './utils/safe-timestamp.js';
31
31
  export { EventBus as RuntimeEventBus } from './runtime/event-bus.js';
32
- export { validateManifest, readManifest, discoverSquads, discoverFromUpstreams, discoverFromRegistry, buildDelegationArgs, buildStatusCheckArgs, parseIssueStatus, formatDiscoveryTable, findSquadByName, } from './runtime/cross-squad.js';
32
+ export { validateManifest, readManifest, discoverSquads, discoverFromUpstreams, discoverFromRegistry, readSquadRegistry, writeSquadRegistry, addRegistryEntry, removeRegistryEntry, buildDelegationArgs, buildStatusCheckArgs, parseIssueStatus, formatDiscoveryTable, findSquadByName, } from './runtime/cross-squad.js';
33
33
  export * from './marketplace/index.js';
34
34
  export * from './build/index.js';
35
35
  export * from './sharing/index.js';
@@ -44,6 +44,7 @@ export * from './platform/index.js';
44
44
  export * from './storage/index.js';
45
45
  export * from './memory/index.js';
46
46
  export { WorktreeBackend, GitNotesBackend, OrphanBranchBackend, TwoLayerBackend, CircuitBreaker, GitExecError, resolveStateBackend, validateStateKey, StateBackendStorageAdapter, verifyStateBackend } from './state-backend.js';
47
+ export { addSquadStateGitignoreBlock, removeSquadStateGitignoreBlock, SQUAD_STATE_GITIGNORE_OPEN_MARKER, SQUAD_STATE_GITIGNORE_CLOSE_MARKER } from './config/gitignore-state.js';
47
48
  // State facade (Phase 2) — namespaced to avoid conflicts with existing config/sharing exports
48
49
  export {
49
50
  // Error classes
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -4,7 +4,8 @@
4
4
  * Auth priority: cached token → refresh → browser PKCE → device code fallback.
5
5
  * Uses the Microsoft Graph PowerShell first-party client ID by default (works
6
6
  * in every Microsoft tenant with no custom Entra registration required).
7
- * Tokens stored per-identity in ~/.squad/teams-tokens-{hash(tenantId:clientId)}.json.
7
+ * Tokens stored per-identity in <squad-home>/teams-tokens-{hash(tenantId:clientId)}.json
8
+ * (squad-home defaults to ~/.squad/ but respects the SQUAD_HOME env var).
8
9
  *
9
10
  * @module platform/comms-teams
10
11
  */
@@ -1 +1 @@
1
- {"version":3,"file":"comms-teams.d.ts","sourceRoot":"","sources":["../../src/platform/comms-teams.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"comms-teams.d.ts","sourceRoot":"","sources":["../../src/platform/comms-teams.ts"],"names":[],"mappings":"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"}
@@ -4,7 +4,8 @@
4
4
  * Auth priority: cached token → refresh → browser PKCE → device code fallback.
5
5
  * Uses the Microsoft Graph PowerShell first-party client ID by default (works
6
6
  * in every Microsoft tenant with no custom Entra registration required).
7
- * Tokens stored per-identity in ~/.squad/teams-tokens-{hash(tenantId:clientId)}.json.
7
+ * Tokens stored per-identity in <squad-home>/teams-tokens-{hash(tenantId:clientId)}.json
8
+ * (squad-home defaults to ~/.squad/ but respects the SQUAD_HOME env var).
8
9
  *
9
10
  * @module platform/comms-teams
10
11
  */
@@ -14,14 +15,17 @@ import { existsSync, readFileSync, writeFileSync, mkdirSync, chmodSync, unlinkSy
14
15
  import { createServer } from 'node:http';
15
16
  import { randomBytes, createHash } from 'node:crypto';
16
17
  import { execFile } from 'node:child_process';
18
+ import { resolveSquadHome } from '../resolution.js';
17
19
  // ─── Defaults ────────────────────────────────────────────────────────
18
20
  /** Microsoft Graph PowerShell — first-party, present in every tenant */
19
21
  const DEFAULT_CLIENT_ID = '14d82eec-204b-4c2f-b7e8-296a70dab67e';
20
22
  /** Multi-tenant "organizations" endpoint — works for any Entra org */
21
23
  const DEFAULT_TENANT_ID = 'organizations';
22
- const SQUAD_DIR = join(homedir(), '.squad');
24
+ function getSquadDir() {
25
+ return resolveSquadHome(true) ?? join(homedir(), '.squad');
26
+ }
23
27
  /** Legacy single-file path (pre-tenant-scoped) — migrated away on first use */
24
- const LEGACY_TOKEN_PATH = join(SQUAD_DIR, 'teams-tokens.json');
28
+ const LEGACY_TOKEN_PATH = join(homedir(), '.squad', 'teams-tokens.json');
25
29
  /**
26
30
  * Derive a safe, collision-resistant filename for a token cache entry.
27
31
  * Uses SHA-256 hash of `tenantId + clientId` to avoid path traversal,
@@ -29,7 +33,7 @@ const LEGACY_TOKEN_PATH = join(SQUAD_DIR, 'teams-tokens.json');
29
33
  */
30
34
  function getTokenPath(tenantId, clientId) {
31
35
  const hash = createHash('sha256').update(`${tenantId}:${clientId}`).digest('hex').slice(0, 16);
32
- return join(SQUAD_DIR, `teams-tokens-${hash}.json`);
36
+ return join(getSquadDir(), `teams-tokens-${hash}.json`);
33
37
  }
34
38
  function loadTokens(tenantId, clientId) {
35
39
  const tokenPath = getTokenPath(tenantId, clientId);
@@ -55,8 +59,9 @@ function loadTokens(tenantId, clientId) {
55
59
  // Security: tokens stored with 0o600 permissions (owner-only read/write).
56
60
  function saveTokens(tenantId, clientId, tokens) {
57
61
  const tokenPath = getTokenPath(tenantId, clientId);
58
- if (!existsSync(SQUAD_DIR)) {
59
- mkdirSync(SQUAD_DIR, { recursive: true, mode: 0o700 });
62
+ const squadDir = getSquadDir();
63
+ if (!existsSync(squadDir)) {
64
+ mkdirSync(squadDir, { recursive: true, mode: 0o700 });
60
65
  }
61
66
  const jwtClaims = extractJwtClaims(tokens.accessToken);
62
67
  const withMeta = {
@@ -75,7 +80,7 @@ function saveTokens(tenantId, clientId, tokens) {
75
80
  });
76
81
  }
77
82
  else {
78
- chmodSync(SQUAD_DIR, 0o700);
83
+ chmodSync(squadDir, 0o700);
79
84
  chmodSync(tokenPath, 0o600);
80
85
  }
81
86
  }