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
package/dist/worker.js ADDED
@@ -0,0 +1,562 @@
1
+ import { SessionManager } from "./session-manager.js";
2
+ import { SessionBlobStore } from "./blob-store.js";
3
+ import { FilesystemSessionStore } from "./session-store.js";
4
+ import { registerActivities } from "./session-proxy.js";
5
+ import { DURABLE_SESSION_LATEST_VERSION, DURABLE_SESSION_ORCHESTRATION_NAME, DURABLE_SESSION_ORCHESTRATION_REGISTRY, } from "./orchestration-registry.js";
6
+ import { PgSessionCatalogProvider } from "./cms.js";
7
+ import { loadAgentFiles, systemAgentUUID } from "./agent-loader.js";
8
+ import { loadMcpConfig } from "./mcp-loader.js";
9
+ import { loadModelProviders } from "./model-providers.js";
10
+ import { createArtifactTools } from "./artifact-tools.js";
11
+ import { createSweeperTools } from "./sweeper-tools.js";
12
+ import { createResourceManagerTools } from "./resourcemgr-tools.js";
13
+ import { composeSystemPrompt, mergePromptSections } from "./prompt-layering.js";
14
+ import { defineTool } from "@github/copilot-sdk";
15
+ import fs from "node:fs";
16
+ import path from "node:path";
17
+ import { fileURLToPath } from "node:url";
18
+ // duroxide is CommonJS — use createRequire for ESM compatibility
19
+ import { createRequire } from "node:module";
20
+ const __sdkDir = path.dirname(fileURLToPath(import.meta.url));
21
+ const require = createRequire(import.meta.url);
22
+ const { SqliteProvider, PostgresProvider, Runtime, Client } = require("duroxide");
23
+ const DEFAULT_DUROXIDE_SCHEMA = "duroxide";
24
+ /**
25
+ * PilotSwarmWorker — runs activities and orchestrations.
26
+ *
27
+ * Owns:
28
+ * - SessionManager (creates/resumes CopilotSessions, holds tools/hooks)
29
+ * - duroxide Runtime (dispatches activities + orchestrations)
30
+ * - Session state store (optional, for session dehydration/hydration)
31
+ *
32
+ * In single-process mode, pass this worker to PilotSwarmClient's
33
+ * constructor so they share the database provider and the client can
34
+ * forward tool/hook registrations.
35
+ */
36
+ export class PilotSwarmWorker {
37
+ config;
38
+ sessionManager;
39
+ sessionStore = null;
40
+ blobStore = null;
41
+ runtime = null;
42
+ _provider = null;
43
+ _catalog = null;
44
+ _started = false;
45
+ /** Worker-level tool registry — name → Tool. */
46
+ toolRegistry = new Map();
47
+ /** Loaded skill directories from plugins + direct config. */
48
+ _loadedSkillDirs = [];
49
+ /** Raw loaded user-creatable agent configs from plugins + direct config. */
50
+ _rawLoadedAgents = [];
51
+ /** Loaded agent configs from plugins + direct config, composed for SDK customAgents. */
52
+ _loadedAgents = [];
53
+ /** Loaded MCP server configs from plugins + direct config. */
54
+ _loadedMcpServers = {};
55
+ /** Model provider registry — multi-provider LLM config. */
56
+ _modelProviders = null;
57
+ /** Embedded PilotSwarm framework prompt. */
58
+ _frameworkBasePrompt = null;
59
+ /** App-level default prompt overlay from app pluginDirs and inline worker config. */
60
+ _appDefaultPrompt = null;
61
+ /** System agents loaded from plugins — started automatically on worker start. */
62
+ _loadedSystemAgents = [];
63
+ /** Prompt lookup used for direct named/system sessions. */
64
+ _agentPromptLookup = {};
65
+ /** Session creation policy loaded from session-policy.json. */
66
+ _sessionPolicy = null;
67
+ constructor(options) {
68
+ this.config = {
69
+ ...options,
70
+ waitThreshold: options.waitThreshold ?? 30,
71
+ };
72
+ if (options.blobConnectionString) {
73
+ this.blobStore = new SessionBlobStore(options.blobConnectionString, options.blobContainer ?? "copilot-sessions", options.sessionStateDir);
74
+ }
75
+ let defaultSessionStore = this.blobStore;
76
+ if (!defaultSessionStore && options.sessionStateDir) {
77
+ const storeDir = path.join(path.dirname(options.sessionStateDir), "session-store");
78
+ defaultSessionStore = new FilesystemSessionStore(storeDir, options.sessionStateDir);
79
+ }
80
+ this.sessionStore = options.sessionStore ?? defaultSessionStore;
81
+ // Load plugins and merge with direct config — must happen before SessionManager init
82
+ this._loadPlugins();
83
+ // Load model providers: explicit file path > auto-discover > env vars fallback
84
+ this._modelProviders = loadModelProviders(options.modelProvidersPath);
85
+ this.sessionManager = new SessionManager(options.githubToken, this.sessionStore, {
86
+ frameworkBasePrompt: this._frameworkBasePrompt ?? undefined,
87
+ appDefaultPrompt: this._appDefaultPrompt ?? undefined,
88
+ systemMessage: this._frameworkBasePrompt ?? undefined,
89
+ agentPromptLookup: this._agentPromptLookup,
90
+ skillDirectories: this._loadedSkillDirs,
91
+ customAgents: this._loadedAgents,
92
+ mcpServers: this._loadedMcpServers,
93
+ provider: options.provider,
94
+ modelProviders: this._modelProviders ?? undefined,
95
+ turnTimeoutMs: options.turnTimeoutMs,
96
+ }, options.sessionStateDir);
97
+ }
98
+ // ─── Public API ──────────────────────────────────────────
99
+ /**
100
+ * Register tools at the worker level.
101
+ *
102
+ * These tools are available to ALL sessions on this worker.
103
+ * Clients can reference them by name in createSession() via
104
+ * `toolNames: ["tool_name_1", "tool_name_2"]` — the names travel
105
+ * through duroxide as serializable strings, and the worker
106
+ * resolves them to the actual Tool objects at execution time.
107
+ *
108
+ * This is the primary mechanism for custom tools in remote/
109
+ * separate-process mode where client and worker run on
110
+ * different machines.
111
+ */
112
+ registerTools(tools) {
113
+ for (const tool of tools) {
114
+ this.toolRegistry.set(tool.name, tool);
115
+ }
116
+ this.sessionManager.setToolRegistry(this.toolRegistry);
117
+ }
118
+ /** Store full config (with tools/hooks) for a session. */
119
+ setSessionConfig(sessionId, config) {
120
+ this.sessionManager.setConfig(sessionId, config);
121
+ }
122
+ /** Whether a durable session store is configured. */
123
+ get blobEnabled() {
124
+ return this.sessionStore !== null;
125
+ }
126
+ /** Whether the worker runtime is running. */
127
+ get isStarted() {
128
+ return this._started;
129
+ }
130
+ /** @internal — shared with co-located PilotSwarmClient. */
131
+ get provider() {
132
+ return this._provider;
133
+ }
134
+ /** Session catalog (CMS) — available when store is PostgreSQL. */
135
+ get catalog() {
136
+ return this._catalog;
137
+ }
138
+ /** Loaded skill directories. */
139
+ get loadedSkillDirs() {
140
+ return this._loadedSkillDirs;
141
+ }
142
+ /** Loaded agent configs. */
143
+ get loadedAgents() {
144
+ return this._loadedAgents;
145
+ }
146
+ /** Loaded MCP server configs. */
147
+ get loadedMcpServers() {
148
+ return this._loadedMcpServers;
149
+ }
150
+ /** Model provider registry (null if no providers configured). */
151
+ get modelProviders() {
152
+ return this._modelProviders;
153
+ }
154
+ /** System agents loaded from plugins. */
155
+ get systemAgents() {
156
+ return this._loadedSystemAgents;
157
+ }
158
+ /** Session creation policy (null if no session-policy.json found). */
159
+ get sessionPolicy() {
160
+ return this._sessionPolicy;
161
+ }
162
+ /** Names of loaded non-system agents that can be created as top-level sessions. */
163
+ get allowedAgentNames() {
164
+ return this._loadedAgents.map(a => a.name);
165
+ }
166
+ // ─── Lifecycle ───────────────────────────────────────────
167
+ async start() {
168
+ if (this._started)
169
+ return;
170
+ this._provider = await this._createProvider();
171
+ // Initialize CMS catalog for PostgreSQL stores
172
+ const store = this.config.store;
173
+ if (store.startsWith("postgres://") || store.startsWith("postgresql://")) {
174
+ try {
175
+ this._catalog = await PgSessionCatalogProvider.create(store, this.config.cmsSchema);
176
+ await this._catalog.initialize();
177
+ }
178
+ catch (err) {
179
+ console.error("[PilotSwarmWorker] CMS initialization failed:", err);
180
+ this._catalog = null;
181
+ }
182
+ }
183
+ this.runtime = new Runtime(this._provider, {
184
+ dispatcherPollIntervalMs: 10,
185
+ workerLockTimeoutMs: 10_000,
186
+ logLevel: this.config.logLevel ?? "error",
187
+ maxSessionsPerRuntime: this.config.maxSessionsPerRuntime ?? 50,
188
+ sessionIdleTimeoutMs: this.config.sessionIdleTimeoutMs ?? 3_600_000,
189
+ workerNodeId: this.config.workerNodeId,
190
+ });
191
+ registerActivities(this.runtime, this.sessionManager, this.sessionStore, this.config.githubToken, this._catalog, this._provider, store, this.config.cmsSchema, {
192
+ blobEnabled: this.blobEnabled,
193
+ duroxideSchema: this.config.duroxideSchema,
194
+ }, this._loadedSystemAgents, this._sessionPolicy, this.allowedAgentNames, this._rawLoadedAgents);
195
+ for (const registration of DURABLE_SESSION_ORCHESTRATION_REGISTRY) {
196
+ this.runtime.registerOrchestrationVersioned(DURABLE_SESSION_ORCHESTRATION_NAME, registration.version, registration.handler);
197
+ }
198
+ // Auto-register sweeper tools if CMS is available
199
+ if (this._catalog) {
200
+ const sweeperClient = new Client(this._provider);
201
+ const sweeperTools = createSweeperTools({
202
+ catalog: this._catalog,
203
+ duroxideClient: sweeperClient,
204
+ duroxideSchema: this.config.duroxideSchema,
205
+ storeUrl: this.config.store,
206
+ });
207
+ this.registerTools(sweeperTools);
208
+ }
209
+ // Auto-register artifact tools if blob storage is available
210
+ if (this.blobStore) {
211
+ const artifactTools = createArtifactTools({ blobStore: this.blobStore });
212
+ this.registerTools(artifactTools);
213
+ }
214
+ // Auto-register resource manager tools
215
+ if (this._catalog) {
216
+ const rmClient = new Client(this._provider);
217
+ const rmTools = createResourceManagerTools({
218
+ catalog: this._catalog,
219
+ duroxideClient: rmClient,
220
+ blobStore: this.blobStore,
221
+ duroxideSchema: this.config.duroxideSchema,
222
+ cmsSchema: this.config.cmsSchema,
223
+ });
224
+ this.registerTools(rmTools);
225
+ }
226
+ // list_agents tool — exposes loaded agents to the PilotSwarm Agent
227
+ const listAgentsTool = defineTool("list_agents", {
228
+ description: "List all loaded agents in the PilotSwarm cluster. Returns both user-invocable agents and system agents " +
229
+ "with their name, namespace, qualifiedName, description, tools, system flag, and parent relationship. " +
230
+ "Use creatableOnly=true to get only agents that users can create as top-level sessions.",
231
+ parameters: {
232
+ type: "object",
233
+ properties: {
234
+ systemOnly: {
235
+ type: "boolean",
236
+ description: "If true, only return system agents. Default: false",
237
+ },
238
+ creatableOnly: {
239
+ type: "boolean",
240
+ description: "If true, only return user-creatable (non-system) agents. Default: false",
241
+ },
242
+ },
243
+ },
244
+ handler: async (args) => {
245
+ const allAgents = [
246
+ ...this._loadedAgents.map(a => ({
247
+ name: a.name,
248
+ namespace: a.namespace || "custom",
249
+ qualifiedName: `${a.namespace || "custom"}:${a.name}`,
250
+ description: a.description || null,
251
+ tools: a.tools || [],
252
+ system: false,
253
+ id: null,
254
+ parent: null,
255
+ })),
256
+ ...this._loadedSystemAgents.map(a => ({
257
+ name: a.name,
258
+ namespace: a.namespace || "pilotswarm",
259
+ qualifiedName: `${a.namespace || "pilotswarm"}:${a.name}`,
260
+ description: a.description || null,
261
+ tools: a.tools || [],
262
+ system: true,
263
+ id: a.id || null,
264
+ parent: a.parent || null,
265
+ })),
266
+ ];
267
+ let filtered = allAgents;
268
+ if (args.systemOnly) {
269
+ filtered = allAgents.filter(a => a.system);
270
+ }
271
+ else if (args.creatableOnly) {
272
+ filtered = allAgents.filter(a => !a.system);
273
+ }
274
+ return JSON.stringify({ agents: filtered, total: filtered.length }, null, 2);
275
+ },
276
+ });
277
+ this.registerTools([listAgentsTool]);
278
+ this.runtime.start().catch((err) => {
279
+ console.error("[PilotSwarmWorker] Runtime error:", err);
280
+ });
281
+ this._started = true;
282
+ await new Promise(r => setTimeout(r, 200));
283
+ // Auto-start system agents defined in plugins (idempotent)
284
+ await this._startSystemAgents();
285
+ }
286
+ async stop() {
287
+ if (this.runtime) {
288
+ await this.runtime.shutdown(5000);
289
+ this.runtime = null;
290
+ }
291
+ await this.sessionManager.shutdown();
292
+ if (this._catalog) {
293
+ try {
294
+ await this._catalog.close();
295
+ }
296
+ catch { }
297
+ this._catalog = null;
298
+ }
299
+ this._provider = null;
300
+ this._started = false;
301
+ }
302
+ /** Dehydrate all active sessions, then stop. */
303
+ async gracefulShutdown() {
304
+ if (this.sessionStore) {
305
+ const ids = this.sessionManager.activeSessionIds();
306
+ if (ids.length > 0) {
307
+ console.error(`[PilotSwarmWorker] Dehydrating ${ids.length} sessions...`);
308
+ await Promise.allSettled(ids.map(id => this.sessionManager.dehydrate(id, "shutdown").catch(() => { })));
309
+ }
310
+ }
311
+ await this.stop();
312
+ }
313
+ /** Destroy a session on this worker. */
314
+ async destroySession(sessionId) {
315
+ await this.sessionManager.destroySession(sessionId);
316
+ }
317
+ // ─── Internal ────────────────────────────────────────────
318
+ /**
319
+ * Load plugin contents from SDK bundled plugins + app plugin directories.
320
+ *
321
+ * Three-tier loading order:
322
+ * 1. system/ — SDK core (always loaded: base system prompt, durable-timers, sub-agents)
323
+ * 2. mgmt/ — SDK management agents (loaded unless disableManagementAgents is true)
324
+ * 3. app — Consumer-provided plugin dirs (from pluginDirs option)
325
+ * 4. direct — Inline config (skillDirectories, customAgents, mcpServers options)
326
+ *
327
+ * Agents merge by name (later tiers override earlier).
328
+ * Skills merge additively (all dirs combined).
329
+ * MCP servers merge by name (later tiers override earlier).
330
+ */
331
+ _loadPlugins() {
332
+ // ── Tier 1: SDK system plugins (always loaded) ───────────────
333
+ const sdkPluginsDir = path.resolve(__sdkDir, "..", "plugins");
334
+ const systemDir = path.join(sdkPluginsDir, "system");
335
+ this._loadPluginDir(systemDir, "system");
336
+ // ── Tier 2: SDK management plugins (opt-out) ─────────────────
337
+ if (!this.config.disableManagementAgents) {
338
+ const mgmtDir = path.join(sdkPluginsDir, "mgmt");
339
+ this._loadPluginDir(mgmtDir, "management");
340
+ }
341
+ // ── Tier 3: App plugins (from pluginDirs option) ─────────────
342
+ const pluginDirs = this.config.pluginDirs ?? [];
343
+ for (const pluginDir of pluginDirs) {
344
+ const absDir = path.resolve(pluginDir);
345
+ if (!fs.existsSync(absDir)) {
346
+ console.warn(`[PilotSwarmWorker] Plugin dir not found: ${absDir}`);
347
+ continue;
348
+ }
349
+ this._loadPluginDir(absDir, "app");
350
+ }
351
+ // ── Tier 4: Direct config (inline options override all) ──────
352
+ if (this.config.skillDirectories?.length) {
353
+ this._loadedSkillDirs.push(...this.config.skillDirectories);
354
+ }
355
+ if (this.config.customAgents?.length) {
356
+ for (const agent of this.config.customAgents) {
357
+ this._rawLoadedAgents.push({ ...agent, promptLayerKind: "app-agent" });
358
+ this._agentPromptLookup[agent.name] = {
359
+ prompt: agent.prompt,
360
+ kind: "app-agent",
361
+ };
362
+ }
363
+ }
364
+ if (this.config.mcpServers) {
365
+ Object.assign(this._loadedMcpServers, this.config.mcpServers);
366
+ }
367
+ this._appDefaultPrompt = mergePromptSections([
368
+ this._appDefaultPrompt,
369
+ this.config.systemMessage,
370
+ ]) ?? null;
371
+ this._loadedAgents = this._rawLoadedAgents.map((agent) => ({
372
+ ...agent,
373
+ prompt: composeSystemPrompt({
374
+ frameworkBase: this._frameworkBasePrompt,
375
+ appDefault: this._appDefaultPrompt,
376
+ activeAgentPrompt: agent.prompt,
377
+ }) ?? agent.prompt,
378
+ }));
379
+ // ── Log summary ──────────────────────────────────────────────
380
+ const parts = [];
381
+ if (this._frameworkBasePrompt)
382
+ parts.push(`framework base prompt`);
383
+ if (this._appDefaultPrompt)
384
+ parts.push(`app default prompt overlay`);
385
+ if (this._loadedSkillDirs.length > 0)
386
+ parts.push(`${this._loadedSkillDirs.length} skill dir(s)`);
387
+ if (this._loadedAgents.length > 0)
388
+ parts.push(`${this._loadedAgents.length} agent(s): ${this._loadedAgents.map(a => a.name).join(", ")}`);
389
+ if (this._loadedSystemAgents.length > 0)
390
+ parts.push(`${this._loadedSystemAgents.length} system agent(s): ${this._loadedSystemAgents.map(a => a.name).join(", ")}`);
391
+ const mcpCount = Object.keys(this._loadedMcpServers).length;
392
+ if (mcpCount > 0)
393
+ parts.push(`${mcpCount} MCP server(s): ${Object.keys(this._loadedMcpServers).join(", ")}`);
394
+ if (parts.length > 0) {
395
+ console.log(`[PilotSwarmWorker] Loaded: ${parts.join("; ")}`);
396
+ }
397
+ }
398
+ /**
399
+ * Load agents, skills, MCP config, and session policy from a single plugin directory.
400
+ */
401
+ _loadPluginDir(absDir, layer) {
402
+ if (!fs.existsSync(absDir))
403
+ return;
404
+ // Determine namespace from plugin.json name or directory basename
405
+ let namespace = path.basename(absDir);
406
+ const pluginJsonPath = path.join(absDir, "plugin.json");
407
+ if (fs.existsSync(pluginJsonPath)) {
408
+ try {
409
+ const pluginJson = JSON.parse(fs.readFileSync(pluginJsonPath, "utf-8"));
410
+ if (pluginJson.name)
411
+ namespace = pluginJson.name;
412
+ }
413
+ catch { }
414
+ }
415
+ // Skills
416
+ const skillsDir = path.join(absDir, "skills");
417
+ if (fs.existsSync(skillsDir)) {
418
+ this._loadedSkillDirs.push(skillsDir);
419
+ }
420
+ // Agents — tag each with namespace
421
+ const agentsDir = path.join(absDir, "agents");
422
+ if (fs.existsSync(agentsDir)) {
423
+ const agents = loadAgentFiles(agentsDir);
424
+ for (const agent of agents) {
425
+ agent.namespace = namespace;
426
+ if (agent.name === "default") {
427
+ if (layer === "system") {
428
+ this._frameworkBasePrompt = agent.prompt;
429
+ }
430
+ else if (layer === "app") {
431
+ this._appDefaultPrompt = agent.prompt;
432
+ }
433
+ }
434
+ else if (agent.system) {
435
+ agent.promptLayerKind = layer === "management" ? "pilotswarm-system-agent" : "app-system-agent";
436
+ this._agentPromptLookup[agent.name] = {
437
+ prompt: agent.prompt,
438
+ kind: agent.promptLayerKind,
439
+ };
440
+ this._loadedSystemAgents.push(agent);
441
+ }
442
+ else {
443
+ agent.promptLayerKind = "app-agent";
444
+ this._agentPromptLookup[agent.name] = {
445
+ prompt: agent.prompt,
446
+ kind: "app-agent",
447
+ };
448
+ this._rawLoadedAgents.push(agent);
449
+ }
450
+ }
451
+ }
452
+ // MCP
453
+ const mcpConfig = loadMcpConfig(absDir);
454
+ Object.assign(this._loadedMcpServers, mcpConfig);
455
+ // Session policy — last one wins
456
+ const policyPath = path.join(absDir, "session-policy.json");
457
+ if (fs.existsSync(policyPath)) {
458
+ try {
459
+ this._sessionPolicy = JSON.parse(fs.readFileSync(policyPath, "utf-8"));
460
+ }
461
+ catch (err) {
462
+ console.warn(`[PilotSwarmWorker] Failed to parse session-policy.json: ${err.message}`);
463
+ }
464
+ }
465
+ }
466
+ /**
467
+ * Auto-start system agents defined in plugins.
468
+ *
469
+ * Each system agent has a deterministic session UUID derived from its `id` slug.
470
+ * Multiple workers calling this concurrently is safe — CMS upsert and
471
+ * duroxide startOrchestrationVersioned are both idempotent.
472
+ */
473
+ async _startSystemAgents() {
474
+ if (!this._catalog)
475
+ return; // No CMS = no system agents
476
+ if (this._loadedSystemAgents.length === 0)
477
+ return;
478
+ const duroxideClient = new Client(this._provider);
479
+ // Only start root agents (no parent field) — child system agents are
480
+ // spawned by the parent agent at runtime via spawn_agent with agent_name.
481
+ const rootAgents = this._loadedSystemAgents.filter(a => !a.parent);
482
+ for (const agent of rootAgents) {
483
+ if (!agent.id)
484
+ continue;
485
+ const sessionId = systemAgentUUID(agent.id);
486
+ const orchestrationId = `session-${sessionId}`;
487
+ try {
488
+ // Check if this system agent's session already exists in CMS
489
+ let existing = false;
490
+ try {
491
+ const row = await this._catalog.getSession(sessionId);
492
+ if (row)
493
+ existing = true;
494
+ }
495
+ catch { /* not found */ }
496
+ if (existing) {
497
+ // Already created — nothing to do. The orchestration is either
498
+ // running or will be picked up by the runtime.
499
+ continue;
500
+ }
501
+ const serializableConfig = {
502
+ boundAgentName: agent.name,
503
+ promptLayering: {
504
+ kind: agent.promptLayerKind ?? (agent.namespace === "pilotswarm" ? "pilotswarm-system-agent" : "app-system-agent"),
505
+ },
506
+ toolNames: agent.tools ?? undefined,
507
+ };
508
+ // Create CMS entry (root agents have no parent)
509
+ await this._catalog.createSession(sessionId, {
510
+ isSystem: true,
511
+ agentId: agent.id,
512
+ splash: agent.splash ?? undefined,
513
+ });
514
+ // Set title immediately — prefer explicit title, fallback to capitalized name + "Agent"
515
+ const title = agent.title ?? (agent.name.charAt(0).toUpperCase() + agent.name.slice(1) + " Agent");
516
+ await this._catalog.updateSession(sessionId, { title });
517
+ // Start the duroxide orchestration
518
+ const input = {
519
+ sessionId,
520
+ config: serializableConfig,
521
+ iteration: 0,
522
+ blobEnabled: this.blobEnabled,
523
+ dehydrateThreshold: this.config.waitThreshold,
524
+ idleTimeout: -1, // system agents never idle-dehydrate
525
+ inputGracePeriod: -1,
526
+ isSystem: true,
527
+ };
528
+ await duroxideClient.startOrchestrationVersioned(orchestrationId, DURABLE_SESSION_ORCHESTRATION_NAME, input, DURABLE_SESSION_LATEST_VERSION);
529
+ // Update CMS with orchestration ID
530
+ await this._catalog.updateSession(sessionId, {
531
+ orchestrationId,
532
+ state: "running",
533
+ lastActiveAt: new Date(),
534
+ });
535
+ // Send the initial prompt to kick off the agent
536
+ if (agent.initialPrompt) {
537
+ await duroxideClient.enqueueEvent(orchestrationId, "messages", JSON.stringify({ prompt: agent.initialPrompt, bootstrap: true }));
538
+ }
539
+ console.log(`[PilotSwarmWorker] System agent started: ${agent.name} (${sessionId.slice(0, 8)})`);
540
+ }
541
+ catch (err) {
542
+ // Likely already exists (race with another worker) — not an error
543
+ if (err.message?.includes("already exists") || err.message?.includes("duplicate")) {
544
+ continue;
545
+ }
546
+ console.warn(`[PilotSwarmWorker] System agent ${agent.name} start failed: ${err.message}`);
547
+ }
548
+ }
549
+ }
550
+ async _createProvider() {
551
+ const store = this.config.store;
552
+ if (store === "sqlite::memory:")
553
+ return SqliteProvider.inMemory();
554
+ if (store.startsWith("sqlite://"))
555
+ return SqliteProvider.open(store);
556
+ if (store.startsWith("postgres://") || store.startsWith("postgresql://")) {
557
+ return PostgresProvider.connectWithSchema(store, this.config.duroxideSchema ?? DEFAULT_DUROXIDE_SCHEMA);
558
+ }
559
+ throw new Error(`Unsupported store URL: ${store}`);
560
+ }
561
+ }
562
+ //# sourceMappingURL=worker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker.js","sourceRoot":"","sources":["../src/worker.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,74 @@
1
+ {
2
+ "name": "pilotswarm-sdk",
3
+ "version": "0.1.3",
4
+ "description": "A durable execution runtime for GitHub Copilot SDK agents. Crash recovery, durable timers, session dehydration, and multi-node scaling — powered by duroxide.",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "import": "./dist/index.js",
11
+ "types": "./dist/index.d.ts"
12
+ }
13
+ },
14
+ "scripts": {
15
+ "build": "tsc",
16
+ "dev": "tsc --watch",
17
+ "test": "node --env-file=../../.env test/sdk.test.js",
18
+ "test:local:smoke": "vitest run --testPathPattern smoke",
19
+ "test:local:durability": "vitest run --testPathPattern durability",
20
+ "test:local:multi-worker": "vitest run --testPathPattern multi-worker",
21
+ "test:local:commands": "vitest run --testPathPattern commands",
22
+ "test:local:management": "vitest run --testPathPattern management",
23
+ "test:local:sub-agents": "vitest run --testPathPattern sub-agents",
24
+ "test:local:kv-transport": "vitest run --testPathPattern kv-transport",
25
+ "test:local:cms": "vitest run --testPathPattern cms-",
26
+ "test:local:contracts": "vitest run --testPathPattern contracts",
27
+ "test:local:chaos": "vitest run --testPathPattern chaos",
28
+ "test:local:system-agents": "vitest run --testPathPattern system-agents",
29
+ "test:local:session-policy": "vitest run --testPathPattern session-policy",
30
+ "test:local:reliability": "vitest run --testPathPattern reliability",
31
+ "test:local": "vitest run",
32
+ "lint": "tsc --noEmit",
33
+ "clean": "rm -rf dist"
34
+ },
35
+ "keywords": [
36
+ "copilot",
37
+ "durable",
38
+ "duroxide",
39
+ "agent",
40
+ "orchestration",
41
+ "async"
42
+ ],
43
+ "author": "Affan Dar",
44
+ "license": "MIT",
45
+ "repository": {
46
+ "type": "git",
47
+ "url": "https://github.com/affandar/PilotSwarm"
48
+ },
49
+ "homepage": "https://github.com/affandar/PilotSwarm",
50
+ "bugs": {
51
+ "url": "https://github.com/affandar/PilotSwarm/issues"
52
+ },
53
+ "dependencies": {
54
+ "@azure/storage-blob": "^12.31.0",
55
+ "@github/copilot": "^1.0.2",
56
+ "@github/copilot-sdk": "^0.1.32",
57
+ "duroxide": "^0.1.17",
58
+ "pg": "^8.18.0"
59
+ },
60
+ "devDependencies": {
61
+ "@types/node": "^22.0.0",
62
+ "@types/pg": "^8.16.0",
63
+ "typescript": "^5.0.0",
64
+ "vitest": "^4.1.0"
65
+ },
66
+ "engines": {
67
+ "node": ">=24.0.0"
68
+ },
69
+ "files": [
70
+ "dist/**/*",
71
+ "plugins/**/*",
72
+ "README.md"
73
+ ]
74
+ }