copilot-hub 0.1.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 (128) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +215 -0
  3. package/apps/agent-engine/.env.example +41 -0
  4. package/apps/agent-engine/LICENSE +21 -0
  5. package/apps/agent-engine/README.md +57 -0
  6. package/apps/agent-engine/bot-registry.example.json +28 -0
  7. package/apps/agent-engine/capabilities/example/index.js +3 -0
  8. package/apps/agent-engine/capabilities/example/manifest.json +14 -0
  9. package/apps/agent-engine/dist/agent-worker.js +241 -0
  10. package/apps/agent-engine/dist/config.js +225 -0
  11. package/apps/agent-engine/dist/index.js +352 -0
  12. package/apps/agent-engine/dist/test/project-fingerprint.test.js +40 -0
  13. package/apps/agent-engine/dist/test/thread-id.test.js +12 -0
  14. package/apps/agent-engine/package.json +28 -0
  15. package/apps/control-plane/.env.example +25 -0
  16. package/apps/control-plane/README.md +35 -0
  17. package/apps/control-plane/bot-registry.example.json +40 -0
  18. package/apps/control-plane/capabilities/example/index.js +3 -0
  19. package/apps/control-plane/capabilities/example/manifest.json +14 -0
  20. package/apps/control-plane/dist/agent-worker.js +243 -0
  21. package/apps/control-plane/dist/channels/channel-factory.js +21 -0
  22. package/apps/control-plane/dist/channels/hub-ops-commands.js +752 -0
  23. package/apps/control-plane/dist/channels/telegram-channel.js +743 -0
  24. package/apps/control-plane/dist/channels/whatsapp-channel.js +35 -0
  25. package/apps/control-plane/dist/config.js +230 -0
  26. package/apps/control-plane/dist/copilot-hub.js +138 -0
  27. package/apps/control-plane/dist/index.js +349 -0
  28. package/apps/control-plane/dist/kernel/admin-contract.js +51 -0
  29. package/apps/control-plane/dist/test/project-fingerprint.test.js +40 -0
  30. package/apps/control-plane/dist/test/thread-id.test.js +12 -0
  31. package/apps/control-plane/package.json +27 -0
  32. package/package.json +89 -0
  33. package/packages/contracts/README.md +10 -0
  34. package/packages/contracts/dist/control-plane.d.ts +24 -0
  35. package/packages/contracts/dist/control-plane.js +37 -0
  36. package/packages/contracts/dist/control-plane.js.map +1 -0
  37. package/packages/contracts/dist/index.d.ts +1 -0
  38. package/packages/contracts/dist/index.js +2 -0
  39. package/packages/contracts/dist/index.js.map +1 -0
  40. package/packages/contracts/package.json +27 -0
  41. package/packages/core/README.md +33 -0
  42. package/packages/core/dist/agent-supervisor.d.ts +39 -0
  43. package/packages/core/dist/agent-supervisor.js +552 -0
  44. package/packages/core/dist/agent-supervisor.js.map +1 -0
  45. package/packages/core/dist/bot-manager.d.ts +66 -0
  46. package/packages/core/dist/bot-manager.js +333 -0
  47. package/packages/core/dist/bot-manager.js.map +1 -0
  48. package/packages/core/dist/bot-registry.d.ts +60 -0
  49. package/packages/core/dist/bot-registry.js +381 -0
  50. package/packages/core/dist/bot-registry.js.map +1 -0
  51. package/packages/core/dist/bot-runtime.d.ts +135 -0
  52. package/packages/core/dist/bot-runtime.js +349 -0
  53. package/packages/core/dist/bot-runtime.js.map +1 -0
  54. package/packages/core/dist/bridge-service.d.ts +39 -0
  55. package/packages/core/dist/bridge-service.js +272 -0
  56. package/packages/core/dist/bridge-service.js.map +1 -0
  57. package/packages/core/dist/capability-manager.d.ts +18 -0
  58. package/packages/core/dist/capability-manager.js +335 -0
  59. package/packages/core/dist/capability-manager.js.map +1 -0
  60. package/packages/core/dist/capability-scaffold.d.ts +26 -0
  61. package/packages/core/dist/capability-scaffold.js +118 -0
  62. package/packages/core/dist/capability-scaffold.js.map +1 -0
  63. package/packages/core/dist/channel-factory.d.ts +6 -0
  64. package/packages/core/dist/channel-factory.js +22 -0
  65. package/packages/core/dist/channel-factory.js.map +1 -0
  66. package/packages/core/dist/codex-app-client.d.ts +56 -0
  67. package/packages/core/dist/codex-app-client.js +762 -0
  68. package/packages/core/dist/codex-app-client.js.map +1 -0
  69. package/packages/core/dist/codex-provider.d.ts +31 -0
  70. package/packages/core/dist/codex-provider.js +64 -0
  71. package/packages/core/dist/codex-provider.js.map +1 -0
  72. package/packages/core/dist/control-permission.d.ts +19 -0
  73. package/packages/core/dist/control-permission.js +106 -0
  74. package/packages/core/dist/control-permission.js.map +1 -0
  75. package/packages/core/dist/control-plane-actions.d.ts +1 -0
  76. package/packages/core/dist/control-plane-actions.js +2 -0
  77. package/packages/core/dist/control-plane-actions.js.map +1 -0
  78. package/packages/core/dist/example-capability.d.ts +17 -0
  79. package/packages/core/dist/example-capability.js +22 -0
  80. package/packages/core/dist/example-capability.js.map +1 -0
  81. package/packages/core/dist/extension-contract.d.ts +22 -0
  82. package/packages/core/dist/extension-contract.js +28 -0
  83. package/packages/core/dist/extension-contract.js.map +1 -0
  84. package/packages/core/dist/index.d.ts +26 -0
  85. package/packages/core/dist/index.js +27 -0
  86. package/packages/core/dist/index.js.map +1 -0
  87. package/packages/core/dist/instance-lock.d.ts +9 -0
  88. package/packages/core/dist/instance-lock.js +74 -0
  89. package/packages/core/dist/instance-lock.js.map +1 -0
  90. package/packages/core/dist/kernel-control-plane.d.ts +16 -0
  91. package/packages/core/dist/kernel-control-plane.js +500 -0
  92. package/packages/core/dist/kernel-control-plane.js.map +1 -0
  93. package/packages/core/dist/kernel-version.d.ts +1 -0
  94. package/packages/core/dist/kernel-version.js +2 -0
  95. package/packages/core/dist/kernel-version.js.map +1 -0
  96. package/packages/core/dist/project-fingerprint.d.ts +11 -0
  97. package/packages/core/dist/project-fingerprint.js +33 -0
  98. package/packages/core/dist/project-fingerprint.js.map +1 -0
  99. package/packages/core/dist/provider-factory.d.ts +7 -0
  100. package/packages/core/dist/provider-factory.js +21 -0
  101. package/packages/core/dist/provider-factory.js.map +1 -0
  102. package/packages/core/dist/secret-store.d.ts +18 -0
  103. package/packages/core/dist/secret-store.js +110 -0
  104. package/packages/core/dist/secret-store.js.map +1 -0
  105. package/packages/core/dist/state-store.d.ts +50 -0
  106. package/packages/core/dist/state-store.js +324 -0
  107. package/packages/core/dist/state-store.js.map +1 -0
  108. package/packages/core/dist/telegram-channel.d.ts +27 -0
  109. package/packages/core/dist/telegram-channel.js +951 -0
  110. package/packages/core/dist/telegram-channel.js.map +1 -0
  111. package/packages/core/dist/thread-id.d.ts +1 -0
  112. package/packages/core/dist/thread-id.js +12 -0
  113. package/packages/core/dist/thread-id.js.map +1 -0
  114. package/packages/core/dist/whatsapp-channel.d.ts +26 -0
  115. package/packages/core/dist/whatsapp-channel.js +36 -0
  116. package/packages/core/dist/whatsapp-channel.js.map +1 -0
  117. package/packages/core/dist/workspace-paths.d.ts +5 -0
  118. package/packages/core/dist/workspace-paths.js +77 -0
  119. package/packages/core/dist/workspace-paths.js.map +1 -0
  120. package/packages/core/dist/workspace-policy.d.ts +30 -0
  121. package/packages/core/dist/workspace-policy.js +104 -0
  122. package/packages/core/dist/workspace-policy.js.map +1 -0
  123. package/packages/core/package.json +126 -0
  124. package/scripts/cli.mjs +537 -0
  125. package/scripts/configure.mjs +254 -0
  126. package/scripts/ensure-shared-build.mjs +96 -0
  127. package/scripts/run-node-tests.mjs +52 -0
  128. package/scripts/supervisor.mjs +332 -0
@@ -0,0 +1,500 @@
1
+ // @ts-nocheck
2
+ import fs from "node:fs/promises";
3
+ import path from "node:path";
4
+ import { loadBotRegistry } from "./bot-registry.js";
5
+ import { scaffoldCapabilityInWorkspace, normalizeCapabilityId, normalizeCapabilityName, } from "./capability-scaffold.js";
6
+ import { CONTROL_ACTIONS, requireControlAction } from "./control-plane-actions.js";
7
+ import { getExtensionContract } from "./extension-contract.js";
8
+ import { assertControlPermission } from "./control-permission.js";
9
+ export class KernelControlPlane {
10
+ constructor({ botManager, registryFilePath, registryLoadOptions, secretStore = null }) {
11
+ this.botManager = botManager;
12
+ this.registryFilePath = path.resolve(String(registryFilePath));
13
+ this.registryLoadOptions =
14
+ registryLoadOptions && typeof registryLoadOptions === "object" ? registryLoadOptions : {};
15
+ this.secretStore = secretStore;
16
+ }
17
+ async handleAgentAction({ actorBotId, action, payload, context }) {
18
+ const normalizedAction = requireControlAction(action);
19
+ const supervisor = this.botManager.getBot(actorBotId);
20
+ assertControlPermission({
21
+ supervisor,
22
+ action: normalizedAction,
23
+ source: context?.source,
24
+ metadata: context?.metadata,
25
+ });
26
+ return this.#executeAction({
27
+ action: normalizedAction,
28
+ payload,
29
+ actorBotId,
30
+ });
31
+ }
32
+ async runSystemAction(action, payload) {
33
+ const normalizedAction = requireControlAction(action);
34
+ return this.#executeAction({
35
+ action: normalizedAction,
36
+ payload,
37
+ actorBotId: null,
38
+ });
39
+ }
40
+ async #executeAction({ action, payload, actorBotId }) {
41
+ const safePayload = payload && typeof payload === "object" ? payload : {};
42
+ switch (action) {
43
+ case CONTROL_ACTIONS.BOTS_LIST: {
44
+ const bots = await this.botManager.listBotsLive();
45
+ return { bots };
46
+ }
47
+ case CONTROL_ACTIONS.BOTS_STATUS: {
48
+ const botId = requireNonEmptyString(safePayload.botId, "payload.botId");
49
+ const bot = await this.botManager.getBotStatus(botId);
50
+ return { bot };
51
+ }
52
+ case CONTROL_ACTIONS.BOTS_START: {
53
+ const botId = requireNonEmptyString(safePayload.botId, "payload.botId");
54
+ const bot = await this.botManager.startBot(botId);
55
+ return { bot };
56
+ }
57
+ case CONTROL_ACTIONS.BOTS_STOP: {
58
+ const botId = requireNonEmptyString(safePayload.botId, "payload.botId");
59
+ const bot = await this.botManager.stopBot(botId);
60
+ return { bot };
61
+ }
62
+ case CONTROL_ACTIONS.BOTS_CREATE: {
63
+ const agent = safePayload.agent;
64
+ if (!agent || typeof agent !== "object") {
65
+ throw new Error("payload.agent is required.");
66
+ }
67
+ const startIfEnabled = safePayload.startIfEnabled !== false;
68
+ const created = await this.#createBot({
69
+ rawAgent: agent,
70
+ startIfEnabled,
71
+ });
72
+ return created;
73
+ }
74
+ case CONTROL_ACTIONS.BOTS_DELETE: {
75
+ const botId = requireNonEmptyString(safePayload.botId, "payload.botId");
76
+ if (actorBotId && botId === actorBotId) {
77
+ throw new Error("An active agent cannot delete itself while it is active.");
78
+ }
79
+ const deleteMode = parseDeleteMode(safePayload);
80
+ const purgeData = deleteMode === "purge_data" || deleteMode === "purge_all";
81
+ const purgeWorkspace = deleteMode === "purge_all";
82
+ if (purgeWorkspace) {
83
+ ensureSecretStore(this.secretStore);
84
+ }
85
+ const deleted = await this.#deleteBot({
86
+ botId,
87
+ deleteMode,
88
+ purgeData,
89
+ purgeWorkspace,
90
+ });
91
+ return {
92
+ deleted: true,
93
+ ...deleted,
94
+ };
95
+ }
96
+ case CONTROL_ACTIONS.BOTS_SET_PROJECT: {
97
+ const botId = requireNonEmptyString(safePayload.botId, "payload.botId");
98
+ const projectName = requireNonEmptyString(safePayload.projectName, "payload.projectName");
99
+ const bot = await this.botManager.setBotProject(botId, projectName);
100
+ return { bot };
101
+ }
102
+ case CONTROL_ACTIONS.PROJECTS_LIST: {
103
+ return this.botManager.listProjects();
104
+ }
105
+ case CONTROL_ACTIONS.PROJECTS_CREATE: {
106
+ const name = requireNonEmptyString(safePayload.name, "payload.name");
107
+ const project = await this.botManager.createProject(name);
108
+ return { project };
109
+ }
110
+ case CONTROL_ACTIONS.BOTS_SET_POLICY: {
111
+ const botId = requireNonEmptyString(safePayload.botId, "payload.botId");
112
+ const sandboxMode = requireSandboxMode(safePayload.sandboxMode);
113
+ const approvalPolicy = requireApprovalPolicy(safePayload.approvalPolicy);
114
+ return this.#setBotPolicy({
115
+ botId,
116
+ sandboxMode,
117
+ approvalPolicy,
118
+ });
119
+ }
120
+ case CONTROL_ACTIONS.BOTS_CAPABILITIES_LIST: {
121
+ const botId = requireNonEmptyString(safePayload.botId, "payload.botId");
122
+ const capabilities = await this.botManager.listBotCapabilities(botId);
123
+ return {
124
+ botId,
125
+ capabilities,
126
+ };
127
+ }
128
+ case CONTROL_ACTIONS.BOTS_CAPABILITIES_RELOAD: {
129
+ const botId = requireNonEmptyString(safePayload.botId, "payload.botId");
130
+ const bot = await this.botManager.reloadBotCapabilities(botId);
131
+ return { bot };
132
+ }
133
+ case CONTROL_ACTIONS.BOTS_CAPABILITIES_SCAFFOLD: {
134
+ const botId = requireNonEmptyString(safePayload.botId, "payload.botId");
135
+ const capabilityId = normalizeCapabilityId(safePayload.capabilityId);
136
+ const capabilityName = normalizeCapabilityName(safePayload.capabilityName, capabilityId);
137
+ const result = await this.#scaffoldCapability({
138
+ botId,
139
+ capabilityId,
140
+ capabilityName,
141
+ });
142
+ return result;
143
+ }
144
+ case CONTROL_ACTIONS.SECRETS_LIST: {
145
+ ensureSecretStore(this.secretStore);
146
+ return {
147
+ secrets: this.secretStore.listSecretNames(),
148
+ };
149
+ }
150
+ case CONTROL_ACTIONS.SECRETS_SET: {
151
+ ensureSecretStore(this.secretStore);
152
+ const name = requireNonEmptyString(safePayload.name, "payload.name");
153
+ const value = requireNonEmptyString(safePayload.value, "payload.value");
154
+ const secret = await this.secretStore.setSecret(name, value);
155
+ return { secret };
156
+ }
157
+ case CONTROL_ACTIONS.SECRETS_DELETE: {
158
+ ensureSecretStore(this.secretStore);
159
+ const name = requireNonEmptyString(safePayload.name, "payload.name");
160
+ const secret = await this.secretStore.deleteSecret(name);
161
+ return { secret };
162
+ }
163
+ case CONTROL_ACTIONS.EXTENSIONS_CONTRACT_GET: {
164
+ return getExtensionContract();
165
+ }
166
+ default: {
167
+ throw new Error(`Unsupported control action '${action}'.`);
168
+ }
169
+ }
170
+ }
171
+ async #createBot({ rawAgent, startIfEnabled }) {
172
+ const requestedId = requireNonEmptyString(rawAgent.id, "agent.id");
173
+ const previousRegistryText = await fs.readFile(this.registryFilePath, "utf8");
174
+ const previousRegistry = parseRegistryJson(previousRegistryText, this.registryFilePath);
175
+ if (previousRegistry.agents.some((entry) => String(entry?.id ?? "").trim() === requestedId)) {
176
+ throw new Error(`Bot '${requestedId}' already exists.`);
177
+ }
178
+ const nextRegistry = {
179
+ ...previousRegistry,
180
+ version: Number(previousRegistry.version) || 3,
181
+ agents: [...previousRegistry.agents, rawAgent],
182
+ };
183
+ await this.#writeRegistry(nextRegistry);
184
+ try {
185
+ const normalized = await this.#loadNormalizedBot(requestedId);
186
+ const paths = await this.#ensureBotDirectories(normalized);
187
+ const bot = await this.botManager.registerBot(normalized, { startIfEnabled });
188
+ return { bot, paths };
189
+ }
190
+ catch (error) {
191
+ await fs.writeFile(this.registryFilePath, previousRegistryText, "utf8").catch(() => {
192
+ // Best effort rollback only.
193
+ });
194
+ throw error;
195
+ }
196
+ }
197
+ async #deleteBot({ botId, deleteMode, purgeData, purgeWorkspace }) {
198
+ const previousRegistryText = await fs.readFile(this.registryFilePath, "utf8");
199
+ const previousRegistry = parseRegistryJson(previousRegistryText, this.registryFilePath);
200
+ const targetAgent = previousRegistry.agents.find((entry) => String(entry?.id ?? "").trim() === botId) ?? null;
201
+ if (!targetAgent) {
202
+ throw new Error(`Bot '${botId}' does not exist.`);
203
+ }
204
+ const tokenSecretRefs = collectChannelTokenSecretRefs(targetAgent);
205
+ const nextRegistry = {
206
+ ...previousRegistry,
207
+ version: Number(previousRegistry.version) || 3,
208
+ agents: previousRegistry.agents.filter((entry) => String(entry?.id ?? "").trim() !== botId),
209
+ };
210
+ await this.#writeRegistry(nextRegistry);
211
+ try {
212
+ const removed = await this.botManager.removeBot(botId, {
213
+ purgeData,
214
+ purgeWorkspace,
215
+ });
216
+ let secretsDeleted = [];
217
+ if (purgeWorkspace && tokenSecretRefs.length > 0) {
218
+ secretsDeleted = await this.#deleteSecretsBestEffort(tokenSecretRefs);
219
+ }
220
+ return {
221
+ botId,
222
+ deleteMode,
223
+ purgeData: removed.purgeData === true,
224
+ purgeWorkspace: removed.purgeWorkspace === true,
225
+ tokenSecretRefs,
226
+ secretsDeleted,
227
+ };
228
+ }
229
+ catch (error) {
230
+ await fs.writeFile(this.registryFilePath, previousRegistryText, "utf8").catch(() => {
231
+ // Best effort rollback only.
232
+ });
233
+ throw error;
234
+ }
235
+ }
236
+ async #setBotPolicy({ botId, sandboxMode, approvalPolicy }) {
237
+ const previousRegistryText = await fs.readFile(this.registryFilePath, "utf8");
238
+ const previousRegistry = parseRegistryJson(previousRegistryText, this.registryFilePath);
239
+ const targetIndex = previousRegistry.agents.findIndex((entry) => String(entry?.id ?? "").trim() === botId);
240
+ if (targetIndex < 0) {
241
+ throw new Error(`Bot '${botId}' does not exist.`);
242
+ }
243
+ const targetAgent = previousRegistry.agents[targetIndex];
244
+ const currentProvider = targetAgent?.provider && typeof targetAgent.provider === "object"
245
+ ? targetAgent.provider
246
+ : { kind: "codex", options: {} };
247
+ const nextProvider = {
248
+ ...currentProvider,
249
+ kind: String(currentProvider.kind ?? "codex").trim() || "codex",
250
+ options: {
251
+ ...(currentProvider.options && typeof currentProvider.options === "object"
252
+ ? currentProvider.options
253
+ : {}),
254
+ sandboxMode,
255
+ approvalPolicy,
256
+ },
257
+ };
258
+ const nextAgents = [...previousRegistry.agents];
259
+ nextAgents[targetIndex] = {
260
+ ...targetAgent,
261
+ provider: nextProvider,
262
+ };
263
+ const nextRegistry = {
264
+ ...previousRegistry,
265
+ version: Number(previousRegistry.version) || 3,
266
+ agents: nextAgents,
267
+ };
268
+ await this.#writeRegistry(nextRegistry);
269
+ try {
270
+ const bot = await this.botManager.setBotProviderOptions(botId, {
271
+ sandboxMode,
272
+ approvalPolicy,
273
+ });
274
+ return {
275
+ bot,
276
+ policy: {
277
+ sandboxMode,
278
+ approvalPolicy,
279
+ },
280
+ };
281
+ }
282
+ catch (error) {
283
+ await fs.writeFile(this.registryFilePath, previousRegistryText, "utf8").catch(() => {
284
+ // Best effort rollback only.
285
+ });
286
+ throw error;
287
+ }
288
+ }
289
+ async #deleteSecretsBestEffort(secretNames) {
290
+ const names = Array.isArray(secretNames) ? secretNames : [];
291
+ if (!this.secretStore || names.length === 0) {
292
+ return [];
293
+ }
294
+ const deleted = [];
295
+ for (const name of names) {
296
+ try {
297
+ const result = await this.secretStore.deleteSecret(name);
298
+ deleted.push({
299
+ name,
300
+ deleted: result?.deleted === true,
301
+ });
302
+ }
303
+ catch (error) {
304
+ deleted.push({
305
+ name,
306
+ deleted: false,
307
+ error: sanitizeError(error),
308
+ });
309
+ }
310
+ }
311
+ return deleted;
312
+ }
313
+ async #scaffoldCapability({ botId, capabilityId, capabilityName }) {
314
+ const previousRegistryText = await fs.readFile(this.registryFilePath, "utf8");
315
+ const previousRegistry = parseRegistryJson(previousRegistryText, this.registryFilePath);
316
+ const targetIndex = previousRegistry.agents.findIndex((entry) => String(entry?.id ?? "").trim() === botId);
317
+ if (targetIndex < 0) {
318
+ throw new Error(`Bot '${botId}' does not exist.`);
319
+ }
320
+ const targetAgent = previousRegistry.agents[targetIndex];
321
+ const existingCapabilities = Array.isArray(targetAgent?.capabilities)
322
+ ? targetAgent.capabilities
323
+ : [];
324
+ const alreadyDeclared = existingCapabilities.some((entry) => entry && typeof entry === "object" && String(entry.id ?? "").trim() === capabilityId);
325
+ if (alreadyDeclared) {
326
+ throw new Error(`Capability '${capabilityId}' already exists for bot '${botId}'.`);
327
+ }
328
+ const normalizedBefore = await this.#loadNormalizedBot(botId);
329
+ const previousLoadedCapabilities = Array.isArray(normalizedBefore.capabilities)
330
+ ? normalizedBefore.capabilities
331
+ : [];
332
+ const scaffold = await scaffoldCapabilityInWorkspace({
333
+ workspaceRoot: normalizedBefore.workspaceRoot,
334
+ capabilityId,
335
+ capabilityName,
336
+ });
337
+ const appendedCapability = {
338
+ id: capabilityId,
339
+ enabled: true,
340
+ manifestPath: scaffold.manifestPathForRegistry,
341
+ options: {},
342
+ };
343
+ const nextAgents = [...previousRegistry.agents];
344
+ const nextAgent = {
345
+ ...targetAgent,
346
+ capabilities: [...existingCapabilities, appendedCapability],
347
+ };
348
+ nextAgents[targetIndex] = nextAgent;
349
+ const nextRegistry = {
350
+ ...previousRegistry,
351
+ version: Number(previousRegistry.version) || 3,
352
+ agents: nextAgents,
353
+ };
354
+ await this.#writeRegistry(nextRegistry);
355
+ try {
356
+ const normalizedAfter = await this.#loadNormalizedBot(botId);
357
+ this.botManager.setBotCapabilities(botId, normalizedAfter.capabilities);
358
+ const bot = await this.botManager.reloadBotCapabilities(botId, normalizedAfter.capabilities);
359
+ return {
360
+ bot,
361
+ capability: appendedCapability,
362
+ scaffold,
363
+ };
364
+ }
365
+ catch (error) {
366
+ await fs.writeFile(this.registryFilePath, previousRegistryText, "utf8").catch(() => {
367
+ // Best effort rollback only.
368
+ });
369
+ try {
370
+ this.botManager.setBotCapabilities(botId, previousLoadedCapabilities);
371
+ await this.botManager.reloadBotCapabilities(botId, previousLoadedCapabilities);
372
+ }
373
+ catch {
374
+ // Best effort runtime rollback only.
375
+ }
376
+ throw error;
377
+ }
378
+ }
379
+ async #loadNormalizedBot(botId) {
380
+ const registry = await loadBotRegistry({
381
+ filePath: this.registryFilePath,
382
+ resolveSecret: (name) => this.secretStore?.getSecret(name) ?? null,
383
+ ...this.registryLoadOptions,
384
+ });
385
+ const normalized = registry.bots.find((entry) => entry.id === botId);
386
+ if (!normalized) {
387
+ throw new Error(`Could not normalize bot '${botId}' from registry.`);
388
+ }
389
+ return normalized;
390
+ }
391
+ async #ensureBotDirectories(botDefinition) {
392
+ const workspacePath = path.resolve(String(botDefinition.workspaceRoot));
393
+ const dataDirPath = path.resolve(String(botDefinition.dataDir));
394
+ const workspaceExisted = await directoryExists(workspacePath);
395
+ const dataDirExisted = await directoryExists(dataDirPath);
396
+ await fs.mkdir(workspacePath, { recursive: true });
397
+ await fs.mkdir(dataDirPath, { recursive: true });
398
+ return {
399
+ workspaceRoot: {
400
+ path: workspacePath,
401
+ existed: workspaceExisted,
402
+ },
403
+ dataDir: {
404
+ path: dataDirPath,
405
+ existed: dataDirExisted,
406
+ },
407
+ };
408
+ }
409
+ async #writeRegistry(value) {
410
+ await fs.writeFile(this.registryFilePath, `${JSON.stringify(value, null, 2)}\n`, "utf8");
411
+ }
412
+ }
413
+ function ensureSecretStore(secretStore) {
414
+ if (!secretStore) {
415
+ throw new Error("Secret store is not configured in kernel.");
416
+ }
417
+ }
418
+ function requireNonEmptyString(value, label) {
419
+ const normalized = String(value ?? "").trim();
420
+ if (!normalized) {
421
+ throw new Error(`${label} is required.`);
422
+ }
423
+ return normalized;
424
+ }
425
+ function parseRegistryJson(text, filePath) {
426
+ let parsed;
427
+ try {
428
+ parsed = JSON.parse(stripBom(String(text ?? "")));
429
+ }
430
+ catch {
431
+ throw new Error(`Registry file '${filePath}' is not valid JSON.`);
432
+ }
433
+ if (!parsed || typeof parsed !== "object") {
434
+ throw new Error(`Registry file '${filePath}' must contain an object.`);
435
+ }
436
+ if (!Array.isArray(parsed.agents)) {
437
+ throw new Error(`Registry file '${filePath}' must contain an agents array.`);
438
+ }
439
+ return parsed;
440
+ }
441
+ function stripBom(value) {
442
+ if (value.charCodeAt(0) === 0xfeff) {
443
+ return value.slice(1);
444
+ }
445
+ return value;
446
+ }
447
+ async function directoryExists(candidatePath) {
448
+ try {
449
+ const stat = await fs.stat(candidatePath);
450
+ return stat.isDirectory();
451
+ }
452
+ catch {
453
+ return false;
454
+ }
455
+ }
456
+ function parseDeleteMode(payload) {
457
+ const value = String(payload?.deleteMode ?? "")
458
+ .trim()
459
+ .toLowerCase();
460
+ if (value === "soft" || value === "purge_data" || value === "purge_all") {
461
+ return value;
462
+ }
463
+ return "soft";
464
+ }
465
+ const ALLOWED_SANDBOX_MODES = new Set(["read-only", "workspace-write", "danger-full-access"]);
466
+ const ALLOWED_APPROVAL_POLICIES = new Set(["on-request", "on-failure", "never"]);
467
+ function requireSandboxMode(value) {
468
+ const normalized = String(value ?? "")
469
+ .trim()
470
+ .toLowerCase();
471
+ if (!ALLOWED_SANDBOX_MODES.has(normalized)) {
472
+ throw new Error(`Unsupported sandboxMode '${normalized || "<empty>"}'.`);
473
+ }
474
+ return normalized;
475
+ }
476
+ function requireApprovalPolicy(value) {
477
+ const normalized = String(value ?? "")
478
+ .trim()
479
+ .toLowerCase();
480
+ if (!ALLOWED_APPROVAL_POLICIES.has(normalized)) {
481
+ throw new Error(`Unsupported approvalPolicy '${normalized || "<empty>"}'.`);
482
+ }
483
+ return normalized;
484
+ }
485
+ function collectChannelTokenSecretRefs(agent) {
486
+ const channels = Array.isArray(agent?.channels) ? agent.channels : [];
487
+ const refs = [];
488
+ for (const channel of channels) {
489
+ const raw = String(channel?.tokenSecretRef ?? "").trim();
490
+ if (raw) {
491
+ refs.push(raw);
492
+ }
493
+ }
494
+ return [...new Set(refs)];
495
+ }
496
+ function sanitizeError(error) {
497
+ const raw = error instanceof Error ? error.message : String(error);
498
+ return raw.split(/\r?\n/).slice(0, 12).join("\n");
499
+ }
500
+ //# sourceMappingURL=kernel-control-plane.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kernel-control-plane.js","sourceRoot":"","sources":["../src/kernel-control-plane.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare const KERNEL_VERSION = "1.0.0";
@@ -0,0 +1,2 @@
1
+ export const KERNEL_VERSION = "1.0.0";
2
+ //# sourceMappingURL=kernel-version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kernel-version.js","sourceRoot":"","sources":["../src/kernel-version.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,cAAc,GAAG,OAAO,CAAC"}
@@ -0,0 +1,11 @@
1
+ export interface FingerprintChannel {
2
+ kind?: unknown;
3
+ id?: unknown;
4
+ }
5
+ export interface CreateProjectFingerprintOptions {
6
+ runtimeId?: unknown;
7
+ workspaceRoot?: unknown;
8
+ providerKind?: unknown;
9
+ channels?: FingerprintChannel[] | null;
10
+ }
11
+ export declare function createProjectFingerprint({ runtimeId, workspaceRoot, providerKind, channels, }: CreateProjectFingerprintOptions): string;
@@ -0,0 +1,33 @@
1
+ import crypto from "node:crypto";
2
+ import path from "node:path";
3
+ export function createProjectFingerprint({ runtimeId, workspaceRoot, providerKind, channels, }) {
4
+ const stable = {
5
+ runtimeId: String(runtimeId ?? "").trim(),
6
+ workspaceRoot: normalizePath(workspaceRoot),
7
+ providerKind: String(providerKind ?? "")
8
+ .trim()
9
+ .toLowerCase(),
10
+ channels: normalizeChannels(channels),
11
+ };
12
+ return crypto.createHash("sha256").update(JSON.stringify(stable)).digest("hex").slice(0, 24);
13
+ }
14
+ function normalizePath(value) {
15
+ const resolved = path.resolve(String(value ?? ""));
16
+ return process.platform === "win32" ? resolved.toLowerCase() : resolved;
17
+ }
18
+ function normalizeChannels(channels) {
19
+ if (!Array.isArray(channels)) {
20
+ return [];
21
+ }
22
+ return channels
23
+ .map((channel) => ({
24
+ kind: String(channel?.kind ?? "")
25
+ .trim()
26
+ .toLowerCase(),
27
+ id: String(channel?.id ?? "")
28
+ .trim()
29
+ .toLowerCase(),
30
+ }))
31
+ .sort((a, b) => `${a.kind}:${a.id}`.localeCompare(`${b.kind}:${b.id}`));
32
+ }
33
+ //# sourceMappingURL=project-fingerprint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-fingerprint.js","sourceRoot":"","sources":["../src/project-fingerprint.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,IAAI,MAAM,WAAW,CAAC;AAc7B,MAAM,UAAU,wBAAwB,CAAC,EACvC,SAAS,EACT,aAAa,EACb,YAAY,EACZ,QAAQ,GACwB;IAChC,MAAM,MAAM,GAAG;QACb,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;QACzC,aAAa,EAAE,aAAa,CAAC,aAAa,CAAC;QAC3C,YAAY,EAAE,MAAM,CAAC,YAAY,IAAI,EAAE,CAAC;aACrC,IAAI,EAAE;aACN,WAAW,EAAE;QAChB,QAAQ,EAAE,iBAAiB,CAAC,QAAQ,CAAC;KACtC,CAAC;IAEF,OAAO,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAC/F,CAAC;AAED,SAAS,aAAa,CAAC,KAAc;IACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC;IACnD,OAAO,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;AAC1E,CAAC;AAED,SAAS,iBAAiB,CAAC,QAAiD;IAC1E,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,QAAQ;SACZ,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QACjB,IAAI,EAAE,MAAM,CAAC,OAAO,EAAE,IAAI,IAAI,EAAE,CAAC;aAC9B,IAAI,EAAE;aACN,WAAW,EAAE;QAChB,EAAE,EAAE,MAAM,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC;aAC1B,IAAI,EAAE;aACN,WAAW,EAAE;KACjB,CAAC,CAAC;SACF,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;AAC5E,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { CodexProvider } from "./codex-provider.js";
2
+ export declare function createAssistantProvider({ providerConfig, providerDefaults, workspaceRoot, turnActivityTimeoutMs, }: {
3
+ providerConfig: any;
4
+ providerDefaults: any;
5
+ workspaceRoot: any;
6
+ turnActivityTimeoutMs: any;
7
+ }): CodexProvider;
@@ -0,0 +1,21 @@
1
+ // @ts-nocheck
2
+ import { CodexProvider } from "./codex-provider.js";
3
+ export function createAssistantProvider({ providerConfig, providerDefaults, workspaceRoot, turnActivityTimeoutMs, }) {
4
+ const defaults = providerDefaults ?? {};
5
+ const kind = String(providerConfig?.kind ?? defaults.defaultKind ?? "codex")
6
+ .trim()
7
+ .toLowerCase();
8
+ const options = providerConfig?.options ?? {};
9
+ if (kind === "codex") {
10
+ return new CodexProvider({
11
+ codexBin: String(options.codexBin ?? defaults.codexBin ?? "codex"),
12
+ codexHomeDir: options.codexHomeDir ?? defaults.codexHomeDir ?? null,
13
+ sandboxMode: String(options.sandboxMode ?? defaults.codexSandbox ?? "danger-full-access"),
14
+ approvalPolicy: String(options.approvalPolicy ?? defaults.codexApprovalPolicy ?? "never"),
15
+ workspaceRoot,
16
+ turnActivityTimeoutMs,
17
+ });
18
+ }
19
+ throw new Error(`Unknown assistant provider kind '${kind}'.`);
20
+ }
21
+ //# sourceMappingURL=provider-factory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-factory.js","sourceRoot":"","sources":["../src/provider-factory.ts"],"names":[],"mappings":"AAAA,cAAc;AACd,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,MAAM,UAAU,uBAAuB,CAAC,EACtC,cAAc,EACd,gBAAgB,EAChB,aAAa,EACb,qBAAqB,GACtB;IACC,MAAM,QAAQ,GAAG,gBAAgB,IAAI,EAAE,CAAC;IACxC,MAAM,IAAI,GAAG,MAAM,CAAC,cAAc,EAAE,IAAI,IAAI,QAAQ,CAAC,WAAW,IAAI,OAAO,CAAC;SACzE,IAAI,EAAE;SACN,WAAW,EAAE,CAAC;IACjB,MAAM,OAAO,GAAG,cAAc,EAAE,OAAO,IAAI,EAAE,CAAC;IAE9C,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;QACrB,OAAO,IAAI,aAAa,CAAC;YACvB,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,QAAQ,IAAI,QAAQ,CAAC,QAAQ,IAAI,OAAO,CAAC;YAClE,YAAY,EAAE,OAAO,CAAC,YAAY,IAAI,QAAQ,CAAC,YAAY,IAAI,IAAI;YACnE,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC,WAAW,IAAI,QAAQ,CAAC,YAAY,IAAI,oBAAoB,CAAC;YACzF,cAAc,EAAE,MAAM,CAAC,OAAO,CAAC,cAAc,IAAI,QAAQ,CAAC,mBAAmB,IAAI,OAAO,CAAC;YACzF,aAAa;YACb,qBAAqB;SACtB,CAAC,CAAC;IACL,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,oCAAoC,IAAI,IAAI,CAAC,CAAC;AAChE,CAAC"}
@@ -0,0 +1,18 @@
1
+ export declare class KernelSecretStore {
2
+ filePath: string;
3
+ secrets: Map<string, string>;
4
+ initialized: boolean;
5
+ constructor(filePath: unknown);
6
+ init(): Promise<void>;
7
+ getSecret(name: unknown): string | null;
8
+ listSecretNames(): string[];
9
+ setSecret(name: unknown, value: unknown): Promise<{
10
+ name: string;
11
+ }>;
12
+ deleteSecret(name: unknown): Promise<{
13
+ name: string;
14
+ deleted: boolean;
15
+ }>;
16
+ private loadFromParsed;
17
+ private flush;
18
+ }