pilotswarm-sdk 0.1.3

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 (183) hide show
  1. package/dist/agent-loader.d.ts +61 -0
  2. package/dist/agent-loader.d.ts.map +1 -0
  3. package/dist/agent-loader.js +212 -0
  4. package/dist/agent-loader.js.map +1 -0
  5. package/dist/artifact-tools.d.ts +31 -0
  6. package/dist/artifact-tools.d.ts.map +1 -0
  7. package/dist/artifact-tools.js +190 -0
  8. package/dist/artifact-tools.js.map +1 -0
  9. package/dist/blob-store.d.ts +73 -0
  10. package/dist/blob-store.d.ts.map +1 -0
  11. package/dist/blob-store.js +220 -0
  12. package/dist/blob-store.js.map +1 -0
  13. package/dist/client.d.ts +159 -0
  14. package/dist/client.d.ts.map +1 -0
  15. package/dist/client.js +676 -0
  16. package/dist/client.js.map +1 -0
  17. package/dist/cms.d.ts +129 -0
  18. package/dist/cms.d.ts.map +1 -0
  19. package/dist/cms.js +313 -0
  20. package/dist/cms.js.map +1 -0
  21. package/dist/index.d.ts +44 -0
  22. package/dist/index.d.ts.map +1 -0
  23. package/dist/index.js +42 -0
  24. package/dist/index.js.map +1 -0
  25. package/dist/managed-session.d.ts +70 -0
  26. package/dist/managed-session.d.ts.map +1 -0
  27. package/dist/managed-session.js +717 -0
  28. package/dist/managed-session.js.map +1 -0
  29. package/dist/management-client.d.ts +171 -0
  30. package/dist/management-client.d.ts.map +1 -0
  31. package/dist/management-client.js +401 -0
  32. package/dist/management-client.js.map +1 -0
  33. package/dist/mcp-loader.d.ts +50 -0
  34. package/dist/mcp-loader.d.ts.map +1 -0
  35. package/dist/mcp-loader.js +83 -0
  36. package/dist/mcp-loader.js.map +1 -0
  37. package/dist/model-providers.d.ts +143 -0
  38. package/dist/model-providers.d.ts.map +1 -0
  39. package/dist/model-providers.js +228 -0
  40. package/dist/model-providers.js.map +1 -0
  41. package/dist/orchestration-registry.d.ts +7 -0
  42. package/dist/orchestration-registry.d.ts.map +1 -0
  43. package/dist/orchestration-registry.js +49 -0
  44. package/dist/orchestration-registry.js.map +1 -0
  45. package/dist/orchestration.d.ts +36 -0
  46. package/dist/orchestration.d.ts.map +1 -0
  47. package/dist/orchestration.js +1357 -0
  48. package/dist/orchestration.js.map +1 -0
  49. package/dist/orchestration_1_0_0.d.ts +20 -0
  50. package/dist/orchestration_1_0_0.d.ts.map +1 -0
  51. package/dist/orchestration_1_0_0.js +497 -0
  52. package/dist/orchestration_1_0_0.js.map +1 -0
  53. package/dist/orchestration_1_0_1.d.ts +19 -0
  54. package/dist/orchestration_1_0_1.d.ts.map +1 -0
  55. package/dist/orchestration_1_0_1.js +546 -0
  56. package/dist/orchestration_1_0_1.js.map +1 -0
  57. package/dist/orchestration_1_0_10.d.ts +36 -0
  58. package/dist/orchestration_1_0_10.d.ts.map +1 -0
  59. package/dist/orchestration_1_0_10.js +1253 -0
  60. package/dist/orchestration_1_0_10.js.map +1 -0
  61. package/dist/orchestration_1_0_11.d.ts +36 -0
  62. package/dist/orchestration_1_0_11.d.ts.map +1 -0
  63. package/dist/orchestration_1_0_11.js +1255 -0
  64. package/dist/orchestration_1_0_11.js.map +1 -0
  65. package/dist/orchestration_1_0_12.d.ts +36 -0
  66. package/dist/orchestration_1_0_12.d.ts.map +1 -0
  67. package/dist/orchestration_1_0_12.js +1250 -0
  68. package/dist/orchestration_1_0_12.js.map +1 -0
  69. package/dist/orchestration_1_0_13.d.ts +36 -0
  70. package/dist/orchestration_1_0_13.d.ts.map +1 -0
  71. package/dist/orchestration_1_0_13.js +1260 -0
  72. package/dist/orchestration_1_0_13.js.map +1 -0
  73. package/dist/orchestration_1_0_14.d.ts +36 -0
  74. package/dist/orchestration_1_0_14.d.ts.map +1 -0
  75. package/dist/orchestration_1_0_14.js +1258 -0
  76. package/dist/orchestration_1_0_14.js.map +1 -0
  77. package/dist/orchestration_1_0_15.d.ts +36 -0
  78. package/dist/orchestration_1_0_15.d.ts.map +1 -0
  79. package/dist/orchestration_1_0_15.js +1266 -0
  80. package/dist/orchestration_1_0_15.js.map +1 -0
  81. package/dist/orchestration_1_0_16.d.ts +36 -0
  82. package/dist/orchestration_1_0_16.d.ts.map +1 -0
  83. package/dist/orchestration_1_0_16.js +1275 -0
  84. package/dist/orchestration_1_0_16.js.map +1 -0
  85. package/dist/orchestration_1_0_17.d.ts +36 -0
  86. package/dist/orchestration_1_0_17.d.ts.map +1 -0
  87. package/dist/orchestration_1_0_17.js +1314 -0
  88. package/dist/orchestration_1_0_17.js.map +1 -0
  89. package/dist/orchestration_1_0_18.d.ts +36 -0
  90. package/dist/orchestration_1_0_18.d.ts.map +1 -0
  91. package/dist/orchestration_1_0_18.js +1328 -0
  92. package/dist/orchestration_1_0_18.js.map +1 -0
  93. package/dist/orchestration_1_0_19.d.ts +36 -0
  94. package/dist/orchestration_1_0_19.d.ts.map +1 -0
  95. package/dist/orchestration_1_0_19.js +1324 -0
  96. package/dist/orchestration_1_0_19.js.map +1 -0
  97. package/dist/orchestration_1_0_2.d.ts +19 -0
  98. package/dist/orchestration_1_0_2.d.ts.map +1 -0
  99. package/dist/orchestration_1_0_2.js +749 -0
  100. package/dist/orchestration_1_0_2.js.map +1 -0
  101. package/dist/orchestration_1_0_20.d.ts +36 -0
  102. package/dist/orchestration_1_0_20.d.ts.map +1 -0
  103. package/dist/orchestration_1_0_20.js +1347 -0
  104. package/dist/orchestration_1_0_20.js.map +1 -0
  105. package/dist/orchestration_1_0_3.d.ts +19 -0
  106. package/dist/orchestration_1_0_3.d.ts.map +1 -0
  107. package/dist/orchestration_1_0_3.js +826 -0
  108. package/dist/orchestration_1_0_3.js.map +1 -0
  109. package/dist/orchestration_1_0_4.d.ts +19 -0
  110. package/dist/orchestration_1_0_4.d.ts.map +1 -0
  111. package/dist/orchestration_1_0_4.js +1020 -0
  112. package/dist/orchestration_1_0_4.js.map +1 -0
  113. package/dist/orchestration_1_0_5.d.ts +19 -0
  114. package/dist/orchestration_1_0_5.d.ts.map +1 -0
  115. package/dist/orchestration_1_0_5.js +1027 -0
  116. package/dist/orchestration_1_0_5.js.map +1 -0
  117. package/dist/orchestration_1_0_6.d.ts +19 -0
  118. package/dist/orchestration_1_0_6.d.ts.map +1 -0
  119. package/dist/orchestration_1_0_6.js +1034 -0
  120. package/dist/orchestration_1_0_6.js.map +1 -0
  121. package/dist/orchestration_1_0_7.d.ts +19 -0
  122. package/dist/orchestration_1_0_7.d.ts.map +1 -0
  123. package/dist/orchestration_1_0_7.js +1085 -0
  124. package/dist/orchestration_1_0_7.js.map +1 -0
  125. package/dist/orchestration_1_0_8.d.ts +36 -0
  126. package/dist/orchestration_1_0_8.d.ts.map +1 -0
  127. package/dist/orchestration_1_0_8.js +1106 -0
  128. package/dist/orchestration_1_0_8.js.map +1 -0
  129. package/dist/orchestration_1_0_9.d.ts +36 -0
  130. package/dist/orchestration_1_0_9.d.ts.map +1 -0
  131. package/dist/orchestration_1_0_9.js +1207 -0
  132. package/dist/orchestration_1_0_9.js.map +1 -0
  133. package/dist/prompt-layering.d.ts +16 -0
  134. package/dist/prompt-layering.d.ts.map +1 -0
  135. package/dist/prompt-layering.js +60 -0
  136. package/dist/prompt-layering.js.map +1 -0
  137. package/dist/resourcemgr-tools.d.ts +27 -0
  138. package/dist/resourcemgr-tools.d.ts.map +1 -0
  139. package/dist/resourcemgr-tools.js +638 -0
  140. package/dist/resourcemgr-tools.js.map +1 -0
  141. package/dist/session-dumper.d.ts +26 -0
  142. package/dist/session-dumper.d.ts.map +1 -0
  143. package/dist/session-dumper.js +272 -0
  144. package/dist/session-dumper.js.map +1 -0
  145. package/dist/session-manager.d.ts +152 -0
  146. package/dist/session-manager.d.ts.map +1 -0
  147. package/dist/session-manager.js +493 -0
  148. package/dist/session-manager.js.map +1 -0
  149. package/dist/session-proxy.d.ts +68 -0
  150. package/dist/session-proxy.d.ts.map +1 -0
  151. package/dist/session-proxy.js +665 -0
  152. package/dist/session-proxy.js.map +1 -0
  153. package/dist/session-store.d.ts +35 -0
  154. package/dist/session-store.d.ts.map +1 -0
  155. package/dist/session-store.js +88 -0
  156. package/dist/session-store.js.map +1 -0
  157. package/dist/skills.d.ts +31 -0
  158. package/dist/skills.d.ts.map +1 -0
  159. package/dist/skills.js +93 -0
  160. package/dist/skills.js.map +1 -0
  161. package/dist/sweeper-tools.d.ts +28 -0
  162. package/dist/sweeper-tools.d.ts.map +1 -0
  163. package/dist/sweeper-tools.js +332 -0
  164. package/dist/sweeper-tools.js.map +1 -0
  165. package/dist/types.d.ts +498 -0
  166. package/dist/types.d.ts.map +1 -0
  167. package/dist/types.js +9 -0
  168. package/dist/types.js.map +1 -0
  169. package/dist/worker.d.ts +128 -0
  170. package/dist/worker.d.ts.map +1 -0
  171. package/dist/worker.js +562 -0
  172. package/dist/worker.js.map +1 -0
  173. package/package.json +74 -0
  174. package/plugins/mgmt/agents/pilotswarm.agent.md +59 -0
  175. package/plugins/mgmt/agents/resourcemgr.agent.md +111 -0
  176. package/plugins/mgmt/agents/sweeper.agent.md +67 -0
  177. package/plugins/mgmt/skills/resourcemgr/SKILL.md +41 -0
  178. package/plugins/mgmt/skills/resourcemgr/tools.json +1 -0
  179. package/plugins/mgmt/skills/sweeper/SKILL.md +44 -0
  180. package/plugins/mgmt/skills/sweeper/tools.json +1 -0
  181. package/plugins/system/agents/default.agent.md +58 -0
  182. package/plugins/system/skills/durable-timers/SKILL.md +39 -0
  183. package/plugins/system/skills/sub-agents/SKILL.md +75 -0
@@ -0,0 +1,220 @@
1
+ import { BlobServiceClient, StorageSharedKeyCredential, generateBlobSASQueryParameters, BlobSASPermissions, SASProtocol, } from "@azure/storage-blob";
2
+ import fs from "node:fs";
3
+ import os from "node:os";
4
+ import path from "node:path";
5
+ import { DEFAULT_SESSION_STATE_DIR, archiveSessionDir, buildMetadata, extractSessionArchive, } from "./session-store.js";
6
+ /**
7
+ * Manages session state in Azure Blob Storage.
8
+ *
9
+ * - `dehydrate()` — tar + upload session dir, remove local files
10
+ * - `hydrate()` — download + untar session dir
11
+ * - `checkpoint()` — tar + upload without removing local files
12
+ * - `exists()` / `delete()` — blob lifecycle
13
+ *
14
+ * @internal
15
+ */
16
+ export class SessionBlobStore {
17
+ containerClient;
18
+ connectionString;
19
+ containerName;
20
+ credential = null;
21
+ sessionStateDir;
22
+ constructor(connectionString, containerName = "copilot-sessions", sessionStateDir) {
23
+ this.connectionString = connectionString;
24
+ this.containerName = containerName;
25
+ this.sessionStateDir = sessionStateDir ?? DEFAULT_SESSION_STATE_DIR;
26
+ const blobService = BlobServiceClient.fromConnectionString(connectionString);
27
+ this.containerClient = blobService.getContainerClient(containerName);
28
+ // Parse account name + key from connection string for SAS generation
29
+ const accountMatch = connectionString.match(/AccountName=([^;]+)/i);
30
+ const keyMatch = connectionString.match(/AccountKey=([^;]+)/i);
31
+ if (accountMatch && keyMatch) {
32
+ this.credential = new StorageSharedKeyCredential(accountMatch[1], keyMatch[1]);
33
+ }
34
+ }
35
+ /**
36
+ * Dehydrate a session: tar, upload, remove local files.
37
+ * Frees the worker slot for another session.
38
+ */
39
+ async dehydrate(sessionId, meta) {
40
+ const sessionDir = path.join(this.sessionStateDir, sessionId);
41
+ if (!fs.existsSync(sessionDir))
42
+ return;
43
+ const tarPath = path.join(os.tmpdir(), `${sessionId}.tar.gz`);
44
+ try {
45
+ archiveSessionDir(this.sessionStateDir, sessionId, tarPath);
46
+ // Upload tar
47
+ const tarBlob = this.containerClient.getBlockBlobClient(`${sessionId}.tar.gz`);
48
+ await tarBlob.uploadFile(tarPath);
49
+ // Upload metadata
50
+ const metadata = buildMetadata(tarPath, sessionId, meta);
51
+ const metaBlob = this.containerClient.getBlockBlobClient(`${sessionId}.meta.json`);
52
+ const metaJson = JSON.stringify(metadata);
53
+ await metaBlob.upload(metaJson, metaJson.length);
54
+ // Remove local files
55
+ fs.rmSync(sessionDir, { recursive: true, force: true });
56
+ }
57
+ finally {
58
+ // Always clean up temp tar
59
+ try {
60
+ fs.unlinkSync(tarPath);
61
+ }
62
+ catch { }
63
+ }
64
+ }
65
+ /**
66
+ * Hydrate a session: download tar from blob, extract to local disk.
67
+ * No-op if local session files already exist.
68
+ */
69
+ async hydrate(sessionId) {
70
+ const sessionDir = path.join(this.sessionStateDir, sessionId);
71
+ // Always download from blob — overwrite any stale local files
72
+ if (fs.existsSync(sessionDir)) {
73
+ fs.rmSync(sessionDir, { recursive: true, force: true });
74
+ }
75
+ const tarBlob = this.containerClient.getBlockBlobClient(`${sessionId}.tar.gz`);
76
+ const tarPath = path.join(os.tmpdir(), `${sessionId}.tar.gz`);
77
+ try {
78
+ await tarBlob.downloadToFile(tarPath);
79
+ extractSessionArchive(this.sessionStateDir, tarPath);
80
+ }
81
+ finally {
82
+ try {
83
+ fs.unlinkSync(tarPath);
84
+ }
85
+ catch { }
86
+ }
87
+ }
88
+ /**
89
+ * Checkpoint: upload current session state to blob without removing local files.
90
+ * Used for crash resilience — the session stays warm in memory.
91
+ */
92
+ async checkpoint(sessionId) {
93
+ const sessionDir = path.join(this.sessionStateDir, sessionId);
94
+ if (!fs.existsSync(sessionDir))
95
+ return;
96
+ const tarPath = path.join(os.tmpdir(), `${sessionId}.tar.gz`);
97
+ try {
98
+ archiveSessionDir(this.sessionStateDir, sessionId, tarPath);
99
+ const tarBlob = this.containerClient.getBlockBlobClient(`${sessionId}.tar.gz`);
100
+ await tarBlob.uploadFile(tarPath);
101
+ // Update metadata to reflect checkpoint (not full dehydration)
102
+ const metadata = buildMetadata(tarPath, sessionId, { reason: "checkpoint" });
103
+ const metaBlob = this.containerClient.getBlockBlobClient(`${sessionId}.meta.json`);
104
+ const metaJson = JSON.stringify(metadata);
105
+ await metaBlob.upload(metaJson, metaJson.length);
106
+ }
107
+ finally {
108
+ try {
109
+ fs.unlinkSync(tarPath);
110
+ }
111
+ catch { }
112
+ }
113
+ }
114
+ /** Check if a dehydrated session exists in blob storage. */
115
+ async exists(sessionId) {
116
+ const tarBlob = this.containerClient.getBlockBlobClient(`${sessionId}.tar.gz`);
117
+ return tarBlob.exists();
118
+ }
119
+ /** Delete a dehydrated session from blob storage. */
120
+ async delete(sessionId) {
121
+ await this.containerClient.getBlockBlobClient(`${sessionId}.tar.gz`).deleteIfExists();
122
+ await this.containerClient.getBlockBlobClient(`${sessionId}.meta.json`).deleteIfExists();
123
+ }
124
+ // ─── Artifact Storage ────────────────────────────────────
125
+ artifactBlobPath(sessionId, filename) {
126
+ // Sanitize filename — strip path separators
127
+ const safe = filename.replace(/[/\\]/g, "_");
128
+ return `artifacts/${sessionId}/${safe}`;
129
+ }
130
+ /**
131
+ * Upload an artifact file (e.g. .md) to blob storage.
132
+ * Max 1MB content.
133
+ */
134
+ async uploadArtifact(sessionId, filename, content, contentType = "text/markdown") {
135
+ const MAX_SIZE = 1_048_576; // 1MB
136
+ if (content.length > MAX_SIZE) {
137
+ throw new Error(`Artifact too large: ${content.length} bytes (max ${MAX_SIZE})`);
138
+ }
139
+ const blobPath = this.artifactBlobPath(sessionId, filename);
140
+ const blob = this.containerClient.getBlockBlobClient(blobPath);
141
+ await blob.upload(content, content.length, {
142
+ blobHTTPHeaders: { blobContentType: contentType },
143
+ });
144
+ return blobPath;
145
+ }
146
+ /**
147
+ * Download an artifact file from blob storage.
148
+ * Returns the file content as a string.
149
+ */
150
+ async downloadArtifact(sessionId, filename) {
151
+ const blobPath = this.artifactBlobPath(sessionId, filename);
152
+ const blob = this.containerClient.getBlockBlobClient(blobPath);
153
+ const response = await blob.download(0);
154
+ const chunks = [];
155
+ for await (const chunk of response.readableStreamBody) {
156
+ chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));
157
+ }
158
+ return Buffer.concat(chunks).toString("utf-8");
159
+ }
160
+ /**
161
+ * List artifact files for a session.
162
+ * Returns filenames (not full blob paths).
163
+ */
164
+ async listArtifacts(sessionId) {
165
+ const prefix = `artifacts/${sessionId}/`;
166
+ const files = [];
167
+ for await (const blob of this.containerClient.listBlobsFlat({ prefix })) {
168
+ // Strip the prefix to get just the filename
169
+ files.push(blob.name.slice(prefix.length));
170
+ }
171
+ return files;
172
+ }
173
+ /**
174
+ * Check if an artifact exists.
175
+ */
176
+ async artifactExists(sessionId, filename) {
177
+ const blobPath = this.artifactBlobPath(sessionId, filename);
178
+ return this.containerClient.getBlockBlobClient(blobPath).exists();
179
+ }
180
+ /**
181
+ * Generate a short-lived read-only SAS URL for an artifact.
182
+ * The TUI uses this to download files without needing blob credentials.
183
+ *
184
+ * @param sessionId Session that owns the artifact
185
+ * @param filename Artifact filename
186
+ * @param expiryMinutes How long the URL is valid (default: 1 minute)
187
+ * @returns Full SAS URL string
188
+ */
189
+ generateArtifactSasUrl(sessionId, filename, expiryMinutes = 1) {
190
+ if (!this.credential) {
191
+ throw new Error("Cannot generate SAS URL: connection string has no AccountKey");
192
+ }
193
+ const blobPath = this.artifactBlobPath(sessionId, filename);
194
+ const now = new Date();
195
+ const expiresOn = new Date(now.getTime() + expiryMinutes * 60_000);
196
+ const sas = generateBlobSASQueryParameters({
197
+ containerName: this.containerName,
198
+ blobName: blobPath,
199
+ permissions: BlobSASPermissions.parse("r"),
200
+ startsOn: now,
201
+ expiresOn,
202
+ protocol: SASProtocol.Https,
203
+ }, this.credential);
204
+ const blob = this.containerClient.getBlockBlobClient(blobPath);
205
+ return `${blob.url}?${sas.toString()}`;
206
+ }
207
+ /**
208
+ * Delete all artifacts for a session.
209
+ */
210
+ async deleteArtifacts(sessionId) {
211
+ const prefix = `artifacts/${sessionId}/`;
212
+ let count = 0;
213
+ for await (const blob of this.containerClient.listBlobsFlat({ prefix })) {
214
+ await this.containerClient.getBlockBlobClient(blob.name).deleteIfExists();
215
+ count++;
216
+ }
217
+ return count;
218
+ }
219
+ }
220
+ //# sourceMappingURL=blob-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blob-store.js","sourceRoot":"","sources":["../src/blob-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,159 @@
1
+ import type { PilotSwarmClientOptions, ManagedSessionConfig, PilotSwarmSessionInfo, UserInputHandler } from "./types.js";
2
+ import type { SessionCatalogProvider, SessionEvent } from "./cms.js";
3
+ /**
4
+ * PilotSwarmClient — pure client-side session handle.
5
+ *
6
+ * Talks to duroxide only through the Client API (startOrchestration,
7
+ * enqueueEvent, waitForStatusChange, getStatus). Does NOT own
8
+ * SessionManager, Runtime, or CopilotSession.
9
+ *
10
+ * Creates its own duroxide Client and CMS catalog from the store URL.
11
+ * Completely independent of PilotSwarmWorker.
12
+ */
13
+ export declare class PilotSwarmClient {
14
+ private config;
15
+ private _catalog;
16
+ private duroxideClient;
17
+ private sessionConfigs;
18
+ /** parentSessionId for sub-agent sessions. */
19
+ private parentSessionIds;
20
+ /** nestingLevel for sub-agent sessions. */
21
+ private nestingLevels;
22
+ /** System session flag. */
23
+ systemSessions: Set<string>;
24
+ private activeOrchestrations;
25
+ private lastSeenStatusVersion;
26
+ private lastSeenIteration;
27
+ private lastSeenResponseVersion;
28
+ private started;
29
+ /** Tracks agentId bound to each session (for policy and title prefixing). */
30
+ private sessionAgentIds;
31
+ /** Effective session policy (set via config from worker). */
32
+ private get _sessionPolicy();
33
+ /** Allowed agent names (set via config from worker). */
34
+ private get _allowedAgentNames();
35
+ constructor(options: PilotSwarmClientOptions);
36
+ createSession(config?: ManagedSessionConfig & {
37
+ sessionId?: string;
38
+ onUserInputRequest?: UserInputHandler;
39
+ /** Names of tools registered on the worker via worker.registerTools(). */
40
+ toolNames?: string[];
41
+ /** If this session is a sub-agent, the parent session ID. */
42
+ parentSessionId?: string;
43
+ /** Nesting level for sub-agent depth tracking. */
44
+ nestingLevel?: number;
45
+ /** Agent ID to bind this session to (for policy validation and title prefixing). */
46
+ agentId?: string;
47
+ }): Promise<PilotSwarmSession>;
48
+ /**
49
+ * Create a session bound to a named agent.
50
+ *
51
+ * Validates that the agent exists in the loaded (non-system) agent list.
52
+ * Sets the agentId on the session and applies a prefixed title:
53
+ * `"Agent Title: <shortId>"`.
54
+ *
55
+ * @throws If the agent is not found, is a system agent, or policy rejects it.
56
+ */
57
+ createSessionForAgent(agentName: string, opts?: {
58
+ model?: string;
59
+ onUserInputRequest?: UserInputHandler;
60
+ toolNames?: string[];
61
+ title?: string;
62
+ splash?: string;
63
+ initialPrompt?: string;
64
+ }): Promise<PilotSwarmSession>;
65
+ /**
66
+ * Create a system session (e.g. Sweeper Agent).
67
+ *
68
+ * System sessions are protected from deletion and appear with distinct
69
+ * styling in the TUI. They use the same orchestration as regular sessions.
70
+ * Idempotent: if a system session already exists, it is resumed.
71
+ */
72
+ createSystemSession(config: {
73
+ model?: string;
74
+ systemMessage?: string;
75
+ toolNames?: string[];
76
+ title?: string;
77
+ onUserInputRequest?: UserInputHandler;
78
+ }): Promise<PilotSwarmSession>;
79
+ resumeSession(sessionId: string, config?: ManagedSessionConfig & {
80
+ onUserInputRequest?: UserInputHandler;
81
+ }): Promise<PilotSwarmSession>;
82
+ listSessions(): Promise<PilotSwarmSessionInfo[]>;
83
+ deleteSession(sessionId: string): Promise<void>;
84
+ start(): Promise<void>;
85
+ stop(): Promise<void>;
86
+ private get _blobEnabled();
87
+ /** @internal — ensure orchestration exists, update CMS, enqueue prompt. */
88
+ private _ensureOrchestrationAndSend;
89
+ /** @internal */
90
+ _startAndWait(sessionId: string, prompt: string, onUserInput: UserInputHandler | undefined, timeout?: number, onIntermediateContent?: (content: string) => void, opts?: {
91
+ bootstrap?: boolean;
92
+ }): Promise<string | undefined>;
93
+ /** @internal */
94
+ _startTurn(sessionId: string, prompt: string, opts?: {
95
+ bootstrap?: boolean;
96
+ }): Promise<string>;
97
+ /** @internal */
98
+ _getDuroxideClient(): any;
99
+ /** @internal */
100
+ _getCatalog(): SessionCatalogProvider;
101
+ /** @internal — exposed for PilotSwarmSession.wait() */
102
+ _waitForTurnResult_external(orchestrationId: string, sessionId: string, onUserInput: UserInputHandler | undefined, timeout: number): Promise<string | undefined>;
103
+ /** @internal */
104
+ private _getLatestResponse;
105
+ /** @internal */
106
+ _getSessionInfo(sessionId: string): Promise<PilotSwarmSessionInfo>;
107
+ /** @internal */
108
+ private _waitForTurnResult;
109
+ }
110
+ /**
111
+ * PilotSwarmSession — session handle.
112
+ * Mirrors CopilotSession API, routes through duroxide orchestration.
113
+ *
114
+ * Event delivery:
115
+ * on(eventType, handler) — polls CMS session_events table for new events.
116
+ * on(handler) — catch-all, receives every event type.
117
+ * Returns unsubscribe function. Polling starts on first subscription.
118
+ */
119
+ export type SessionEventHandler = (event: SessionEvent) => void;
120
+ export declare class PilotSwarmSession {
121
+ readonly sessionId: string;
122
+ private client;
123
+ private onUserInput?;
124
+ lastOrchestrationId?: string;
125
+ private handlers;
126
+ private lastSeenSeq;
127
+ private pollTimer;
128
+ private polling;
129
+ private static POLL_INTERVAL;
130
+ /** @internal */
131
+ constructor(sessionId: string, client: PilotSwarmClient, onUserInput?: UserInputHandler);
132
+ sendAndWait(prompt: string, timeout?: number, onIntermediateContent?: (content: string) => void): Promise<string | undefined>;
133
+ send(prompt: string, opts?: {
134
+ bootstrap?: boolean;
135
+ }): Promise<void>;
136
+ wait(timeout?: number): Promise<string | undefined>;
137
+ /**
138
+ * Subscribe to session events.
139
+ *
140
+ * Overloads:
141
+ * on(eventType, handler) — typed subscription (e.g. "assistant.message")
142
+ * on(handler) — catch-all subscription
143
+ *
144
+ * Returns an unsubscribe function. Polling starts automatically.
145
+ */
146
+ on(eventType: string, handler: SessionEventHandler): () => void;
147
+ on(handler: SessionEventHandler): () => void;
148
+ sendEvent(eventName: string, data: unknown): Promise<void>;
149
+ abort(): Promise<void>;
150
+ destroy(): Promise<void>;
151
+ /** Get all persisted events for this session from CMS. */
152
+ getMessages(limit?: number): Promise<SessionEvent[]>;
153
+ getInfo(): Promise<PilotSwarmSessionInfo>;
154
+ private _startPolling;
155
+ private _stopPolling;
156
+ private _poll;
157
+ private _dispatch;
158
+ }
159
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}