@kelloggt/dsh-program-agents 0.0.0-stage → 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 (222) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +113 -2
  3. package/cordis.patch.yml +5 -0
  4. package/dist/app/agents.d.ts +50 -0
  5. package/dist/app/agents.js +70 -0
  6. package/dist/app/agents.js.map +1 -0
  7. package/dist/app/conversations.d.ts +8 -0
  8. package/dist/app/conversations.js +26 -0
  9. package/dist/app/conversations.js.map +1 -0
  10. package/dist/app/endpoints.d.ts +36 -0
  11. package/dist/app/endpoints.js +162 -0
  12. package/dist/app/endpoints.js.map +1 -0
  13. package/dist/app/inbox.d.ts +61 -0
  14. package/dist/app/inbox.js +253 -0
  15. package/dist/app/inbox.js.map +1 -0
  16. package/dist/app/index.d.ts +70 -0
  17. package/dist/app/index.js +147 -0
  18. package/dist/app/index.js.map +1 -0
  19. package/dist/app/mailbox.d.ts +63 -0
  20. package/dist/app/mailbox.js +173 -0
  21. package/dist/app/mailbox.js.map +1 -0
  22. package/dist/app/models.d.ts +32 -0
  23. package/dist/app/models.js +13 -0
  24. package/dist/app/models.js.map +1 -0
  25. package/dist/app/server.d.ts +36 -0
  26. package/dist/app/server.js +233 -0
  27. package/dist/app/server.js.map +1 -0
  28. package/dist/app/stream-server.d.ts +9 -0
  29. package/dist/app/stream-server.js +77 -0
  30. package/dist/app/stream-server.js.map +1 -0
  31. package/dist/app/stream.d.ts +4 -0
  32. package/dist/app/stream.js +93 -0
  33. package/dist/app/stream.js.map +1 -0
  34. package/dist/app/tools.d.ts +16 -0
  35. package/dist/app/tools.js +24 -0
  36. package/dist/app/tools.js.map +1 -0
  37. package/dist/client/controller.d.ts +21 -0
  38. package/dist/client/controller.js +140 -0
  39. package/dist/client/controller.js.map +1 -0
  40. package/dist/client/index.d.ts +22 -0
  41. package/dist/client/index.js +14 -0
  42. package/dist/client/index.js.map +1 -0
  43. package/dist/client/model.d.ts +66 -0
  44. package/dist/client/model.js +147 -0
  45. package/dist/client/model.js.map +1 -0
  46. package/dist/client/models.d.ts +11 -0
  47. package/dist/client/models.js +27 -0
  48. package/dist/client/models.js.map +1 -0
  49. package/dist/client/transport.d.ts +64 -0
  50. package/dist/client/transport.js +141 -0
  51. package/dist/client/transport.js.map +1 -0
  52. package/dist/client/view.d.ts +19 -0
  53. package/dist/client/view.js +69 -0
  54. package/dist/client/view.js.map +1 -0
  55. package/dist/client.js +673 -0
  56. package/dist/conversations.d.ts +92 -0
  57. package/dist/conversations.js +6 -0
  58. package/dist/conversations.js.map +1 -0
  59. package/dist/endpoints.d.ts +48 -0
  60. package/dist/endpoints.js +43 -0
  61. package/dist/endpoints.js.map +1 -0
  62. package/dist/examples/dashboard.js +42 -0
  63. package/dist/examples/dynamic-server.js +27 -0
  64. package/dist/examples/inbox-worker.js +22 -0
  65. package/dist/examples/model-slots.js +19 -0
  66. package/dist/examples/standalone-supervisor.js +20 -0
  67. package/dist/host/adapter.d.ts +195 -0
  68. package/dist/host/adapter.js +630 -0
  69. package/dist/host/adapter.js.map +1 -0
  70. package/dist/host/agents.d.ts +35 -0
  71. package/dist/host/agents.js +222 -0
  72. package/dist/host/agents.js.map +1 -0
  73. package/dist/host/audit.d.ts +14 -0
  74. package/dist/host/audit.js +39 -0
  75. package/dist/host/audit.js.map +1 -0
  76. package/dist/host/catalog.d.ts +53 -0
  77. package/dist/host/catalog.js +116 -0
  78. package/dist/host/catalog.js.map +1 -0
  79. package/dist/host/contracts.d.ts +38 -0
  80. package/dist/host/contracts.js +2 -0
  81. package/dist/host/contracts.js.map +1 -0
  82. package/dist/host/conversations.d.ts +41 -0
  83. package/dist/host/conversations.js +324 -0
  84. package/dist/host/conversations.js.map +1 -0
  85. package/dist/host/events.d.ts +12 -0
  86. package/dist/host/events.js +106 -0
  87. package/dist/host/events.js.map +1 -0
  88. package/dist/host/http.d.ts +14 -0
  89. package/dist/host/http.js +30 -0
  90. package/dist/host/http.js.map +1 -0
  91. package/dist/host/index.d.ts +23 -0
  92. package/dist/host/index.js +84 -0
  93. package/dist/host/index.js.map +1 -0
  94. package/dist/host/installed-v10.js +19797 -0
  95. package/dist/host/installed-v11.js +19797 -0
  96. package/dist/host/installed-v12.js +19797 -0
  97. package/dist/host/installed-v13.js +19797 -0
  98. package/dist/host/installed-v2.js +19797 -0
  99. package/dist/host/installed-v3.js +19797 -0
  100. package/dist/host/installed-v4.js +19797 -0
  101. package/dist/host/installed-v5.js +19797 -0
  102. package/dist/host/installed-v6.js +19797 -0
  103. package/dist/host/installed-v7.js +19797 -0
  104. package/dist/host/installed-v8.js +19797 -0
  105. package/dist/host/installed-v9.js +19797 -0
  106. package/dist/host/mcp.d.ts +11 -0
  107. package/dist/host/mcp.js +42 -0
  108. package/dist/host/mcp.js.map +1 -0
  109. package/dist/host/models.d.ts +37 -0
  110. package/dist/host/models.js +141 -0
  111. package/dist/host/models.js.map +1 -0
  112. package/dist/host/operations.d.ts +22 -0
  113. package/dist/host/operations.js +72 -0
  114. package/dist/host/operations.js.map +1 -0
  115. package/dist/host/plugin.js +19797 -0
  116. package/dist/host/policies.d.ts +36 -0
  117. package/dist/host/policies.js +73 -0
  118. package/dist/host/policies.js.map +1 -0
  119. package/dist/host/requests.d.ts +57 -0
  120. package/dist/host/requests.js +353 -0
  121. package/dist/host/requests.js.map +1 -0
  122. package/dist/host/tool-client.d.ts +19 -0
  123. package/dist/host/tool-client.js +62 -0
  124. package/dist/host/tool-client.js.map +1 -0
  125. package/dist/host/validation.d.ts +5 -0
  126. package/dist/host/validation.js +42 -0
  127. package/dist/host/validation.js.map +1 -0
  128. package/dist/mcp.d.ts +7 -0
  129. package/dist/mcp.js +2 -0
  130. package/dist/mcp.js.map +1 -0
  131. package/dist/models.d.ts +34 -0
  132. package/dist/models.js +53 -0
  133. package/dist/models.js.map +1 -0
  134. package/dist/monitoring/error-buffer.d.ts +89 -0
  135. package/dist/monitoring/error-buffer.js +355 -0
  136. package/dist/monitoring/error-buffer.js.map +1 -0
  137. package/dist/monitoring/fatal.d.ts +6 -0
  138. package/dist/monitoring/fatal.js +32 -0
  139. package/dist/monitoring/fatal.js.map +1 -0
  140. package/dist/monitoring/index.d.ts +7 -0
  141. package/dist/monitoring/index.js +8 -0
  142. package/dist/monitoring/index.js.map +1 -0
  143. package/dist/monitoring/logger.d.ts +45 -0
  144. package/dist/monitoring/logger.js +174 -0
  145. package/dist/monitoring/logger.js.map +1 -0
  146. package/dist/monitoring/schemas.d.ts +34 -0
  147. package/dist/monitoring/schemas.js +132 -0
  148. package/dist/monitoring/schemas.js.map +1 -0
  149. package/dist/monitoring/standard.d.ts +51 -0
  150. package/dist/monitoring/standard.js +140 -0
  151. package/dist/monitoring/standard.js.map +1 -0
  152. package/dist/monitoring/tailer.d.ts +41 -0
  153. package/dist/monitoring/tailer.js +210 -0
  154. package/dist/monitoring/tailer.js.map +1 -0
  155. package/dist/requests.d.ts +92 -0
  156. package/dist/requests.js +120 -0
  157. package/dist/requests.js.map +1 -0
  158. package/dist/runtime/bootstrap.d.ts +1 -0
  159. package/dist/runtime/bootstrap.js +25 -0
  160. package/dist/runtime/bootstrap.js.map +1 -0
  161. package/dist/runtime/definitions.d.ts +7 -0
  162. package/dist/runtime/definitions.js +138 -0
  163. package/dist/runtime/definitions.js.map +1 -0
  164. package/dist/runtime/index.d.ts +4 -0
  165. package/dist/runtime/index.js +4 -0
  166. package/dist/runtime/index.js.map +1 -0
  167. package/dist/runtime/log-file.d.ts +24 -0
  168. package/dist/runtime/log-file.js +124 -0
  169. package/dist/runtime/log-file.js.map +1 -0
  170. package/dist/runtime/protocol.d.ts +60 -0
  171. package/dist/runtime/protocol.js +155 -0
  172. package/dist/runtime/protocol.js.map +1 -0
  173. package/dist/runtime/registry.d.ts +8 -0
  174. package/dist/runtime/registry.js +38 -0
  175. package/dist/runtime/registry.js.map +1 -0
  176. package/dist/runtime/supervisor.d.ts +74 -0
  177. package/dist/runtime/supervisor.js +881 -0
  178. package/dist/runtime/supervisor.js.map +1 -0
  179. package/dist/sdk/connection.d.ts +33 -0
  180. package/dist/sdk/connection.js +265 -0
  181. package/dist/sdk/connection.js.map +1 -0
  182. package/dist/sdk/index.d.ts +8 -0
  183. package/dist/sdk/index.js +2 -0
  184. package/dist/sdk/index.js.map +1 -0
  185. package/dist/supervision.d.ts +22 -0
  186. package/dist/supervision.js +32 -0
  187. package/dist/supervision.js.map +1 -0
  188. package/dist/types.d.ts +170 -0
  189. package/dist/types.js +2 -0
  190. package/dist/types.js.map +1 -0
  191. package/docs/installation.md +35 -0
  192. package/docs/log-format.md +102 -0
  193. package/docs/publishing.md +45 -0
  194. package/docs/supervision.md +73 -0
  195. package/examples/dashboard.ts +31 -0
  196. package/examples/dsh-web-local.patch.yml +15 -0
  197. package/examples/dynamic-server.ts +13 -0
  198. package/examples/inbox-worker.ts +17 -0
  199. package/examples/model-slots.ts +12 -0
  200. package/examples/standalone-supervisor.ts +14 -0
  201. package/examples/watch-server.ts +12 -0
  202. package/package.json +131 -3
  203. package/schemas/dsh.http.request.v1.schema.json +14 -0
  204. package/schemas/dsh.program.error-batch.v1.schema.json +24 -0
  205. package/schemas/dsh.program.error.v1.schema.json +8 -0
  206. package/schemas/standard-log-record.v1.schema.json +26 -0
  207. package/skills/program-agents/SKILL.md +124 -0
  208. package/skills/program-agents/chat-sidebar.md +23 -0
  209. package/skills/program-agents/endpoints.md +92 -0
  210. package/skills/program-agents/inboxes.md +120 -0
  211. package/skills/program-agents/log-format.md +102 -0
  212. package/skills/program-agents/models.md +59 -0
  213. package/skills/program-agents/references/chat-sidebar/AgentSidebar.tsx +181 -0
  214. package/skills/program-agents/references/chat-sidebar/README.md +181 -0
  215. package/skills/program-agents/references/chat-sidebar/agent-sidebar.css +37 -0
  216. package/skills/program-agents/references/chat-sidebar/backend.ts +184 -0
  217. package/skills/program-agents/references/chat-sidebar/protocol.ts +214 -0
  218. package/skills/program-agents/schemas/dsh.http.request.v1.schema.json +14 -0
  219. package/skills/program-agents/schemas/dsh.program.error-batch.v1.schema.json +24 -0
  220. package/skills/program-agents/schemas/dsh.program.error.v1.schema.json +8 -0
  221. package/skills/program-agents/schemas/standard-log-record.v1.schema.json +26 -0
  222. package/skills/program-agents/ui-patterns.md +39 -0
@@ -0,0 +1,30 @@
1
+ import { object, exactKeys } from './validation.js';
2
+ /** Connection exact Fetch routes enforce existing Host/Origin + owner authentication
3
+ * before invoking this bridge. Do not register it as an unprotected web route.
4
+ */
5
+ export function programFetch(method, handler) {
6
+ return async (request) => {
7
+ const type = request.headers.get('content-type')?.split(';', 1)[0]?.trim();
8
+ if (type !== 'application/json')
9
+ return new Response('Expected application/json', { status: 415 });
10
+ const raw = await request.text();
11
+ if (Buffer.byteLength(raw) > 131072)
12
+ return new Response('Request too large', { status: 413 });
13
+ let rpcId = 'invalid';
14
+ try {
15
+ const envelope = object(JSON.parse(raw));
16
+ exactKeys(envelope, ['type', 'rpcId', 'method', 'payload']);
17
+ if (typeof envelope.rpcId !== 'string' || envelope.rpcId.length > 256)
18
+ throw Error('Invalid rpcId');
19
+ rpcId = envelope.rpcId;
20
+ if (envelope.type !== 'client-request' || envelope.method !== `programAgents/${method}`)
21
+ throw Error('Invalid endpoint envelope');
22
+ const result = await handler(method, envelope.payload, request.signal);
23
+ return Response.json({ type: 'server-response', rpcId, result });
24
+ }
25
+ catch (error) {
26
+ return Response.json({ type: 'server-response', rpcId, result: { ok: false, error: { code: 'program-agents/rejected', message: error instanceof Error ? error.message : 'Invalid request', details: {} } } });
27
+ }
28
+ };
29
+ }
30
+ //# sourceMappingURL=http.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/host/http.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAC,SAAS,EAAC,MAAM,iBAAiB,CAAC;AAGjD;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,MAAa,EAAC,OAAyB;IACnE,OAAO,KAAK,EAAC,OAAO,EAAC,EAAE;QACtB,MAAM,IAAI,GAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,KAAK,CAAC,GAAG,EAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;QACxE,IAAG,IAAI,KAAG,kBAAkB;YAAC,OAAO,IAAI,QAAQ,CAAC,2BAA2B,EAAC,EAAC,MAAM,EAAC,GAAG,EAAC,CAAC,CAAC;QAC3F,MAAM,GAAG,GAAC,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;QAAA,IAAG,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,GAAC,MAAM;YAAC,OAAO,IAAI,QAAQ,CAAC,mBAAmB,EAAC,EAAC,MAAM,EAAC,GAAG,EAAC,CAAC,CAAC;QACtH,IAAI,KAAK,GAAC,SAAS,CAAC;QACpB,IAAG,CAAC;YACH,MAAM,QAAQ,GAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;YAAA,SAAS,CAAC,QAAQ,EAAC,CAAC,MAAM,EAAC,OAAO,EAAC,QAAQ,EAAC,SAAS,CAAC,CAAC,CAAC;YAC/F,IAAG,OAAO,QAAQ,CAAC,KAAK,KAAG,QAAQ,IAAE,QAAQ,CAAC,KAAK,CAAC,MAAM,GAAC,GAAG;gBAAC,MAAM,KAAK,CAAC,eAAe,CAAC,CAAC;YAAA,KAAK,GAAC,QAAQ,CAAC,KAAK,CAAC;YACjH,IAAG,QAAQ,CAAC,IAAI,KAAG,gBAAgB,IAAE,QAAQ,CAAC,MAAM,KAAG,iBAAiB,MAAM,EAAE;gBAAC,MAAM,KAAK,CAAC,2BAA2B,CAAC,CAAC;YAC1H,MAAM,MAAM,GAAC,MAAM,OAAO,CAAC,MAAM,EAAC,QAAQ,CAAC,OAAO,EAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YACnE,OAAO,QAAQ,CAAC,IAAI,CAAC,EAAC,IAAI,EAAC,iBAAiB,EAAC,KAAK,EAAC,MAAM,EAAC,CAAC,CAAC;QAC7D,CAAC;QAAA,OAAM,KAAK,EAAC,CAAC;YAAA,OAAO,QAAQ,CAAC,IAAI,CAAC,EAAC,IAAI,EAAC,iBAAiB,EAAC,KAAK,EAAC,MAAM,EAAC,EAAC,EAAE,EAAC,KAAK,EAAC,KAAK,EAAC,EAAC,IAAI,EAAC,yBAAyB,EAAC,OAAO,EAAC,KAAK,YAAY,KAAK,CAAA,CAAC,CAAA,KAAK,CAAC,OAAO,CAAA,CAAC,CAAA,iBAAiB,EAAC,OAAO,EAAC,EAAE,EAAC,EAAC,EAAC,CAAC,CAAC;QAAA,CAAC;IACxM,CAAC,CAAC;AACH,CAAC"}
@@ -0,0 +1,23 @@
1
+ import { Service, type Context } from '@deepseek-ai/cordis';
2
+ import z from '@deepseek-ai/schemastery';
3
+ import type { PluginConfig } from './contracts.js';
4
+ import { DshProgramAdapter } from './adapter.js';
5
+ import type { ProgramSnapshot } from '../types.js';
6
+ export type { PluginConfig, ProgramGrant } from './contracts.js';
7
+ export { DshProgramAdapter } from './adapter.js';
8
+ export declare const name = "program-agents";
9
+ export declare const inject: string[];
10
+ export declare const Config: z<PluginConfig>;
11
+ declare module '@deepseek-ai/cordis' {
12
+ interface Context {
13
+ programAgents: ProgramAgentsService;
14
+ }
15
+ }
16
+ export declare class ProgramAgentsService extends Service {
17
+ readonly adapter: DshProgramAdapter;
18
+ constructor(ctx: Context, config: PluginConfig);
19
+ get supervisor(): import("../runtime/supervisor.js").ProgramSupervisor;
20
+ get capabilities(): import("../runtime/registry.js").CapabilityRegistry;
21
+ }
22
+ export declare function apply(ctx: Context, config?: PluginConfig): ProgramAgentsService;
23
+ export declare function fence(run: ProgramSnapshot, generation: unknown): void;
@@ -0,0 +1,84 @@
1
+ import { Service } from '@deepseek-ai/cordis';
2
+ import z from '@deepseek-ai/schemastery';
3
+ import { defineTool } from '@deepseek-ai/dsh-tools';
4
+ import { DshProgramAdapter } from './adapter.js';
5
+ import { object, text, json, exactKeys } from './validation.js';
6
+ import { programFetch } from './http.js';
7
+ export { DshProgramAdapter } from './adapter.js';
8
+ export const name = 'program-agents';
9
+ export const inject = ['tools', 'agents', 'llm'];
10
+ const supervision = z.any();
11
+ const resource = z.union([
12
+ z.object({ id: z.string().required(), title: z.string().required(), type: z.union(['ui', 'api', 'docs']).required(), url: z.string().required(), docs: z.string() }),
13
+ z.object({ id: z.string().required(), title: z.string().required(), type: z.union(['ui', 'api', 'docs']).required(), endpoint: z.string().required(), path: z.string(), docs: z.string() })
14
+ ]);
15
+ export const Config = z.object({
16
+ auditDirectory: z.string(), catalogDirectory: z.string(), logDirectory: z.string(),
17
+ networking: z.object({ bindHost: z.string(), publicHost: z.string(), protocol: z.union(['http', 'https']) }),
18
+ programs: z.dict(z.object({ entry: z.string(), command: z.array(z.string()), name: z.string(), description: z.string(), urls: z.array(resource), endpoints: z.dict(z.object({ port: z.union([z.const('dynamic'), z.number().min(1).max(65535).step(1)]).required() })), logsPath: z.string(), cwd: z.string(), args: z.array(z.string()), env: z.dict(z.string()).role('secret'), allowedCapabilities: z.array(z.string()), supervision, mcp: z.array(z.object({ server: z.string(), tools: z.array(z.string()) })), messaging: z.boolean(), models: z.array(z.object({ provider: z.string().required(), model: z.string().required() })), tools: z.array(z.string()), maxModelOutputTokens: z.number().min(1).step(1) })).default({}),
19
+ maxRuns: z.number().min(1).max(64).step(1).default(8), maxHistory: z.number().min(1).max(256).step(1).default(64),
20
+ startupTimeoutMs: z.number().min(100).default(10000), stopTimeoutMs: z.number().min(100).default(3000), callTimeoutMs: z.number().min(100).default(120000)
21
+ });
22
+ export class ProgramAgentsService extends Service {
23
+ adapter;
24
+ constructor(ctx, config) { super(ctx, 'programAgents'); this.adapter = new DshProgramAdapter(ctx, config); }
25
+ get supervisor() { return this.adapter.supervisor; }
26
+ get capabilities() { return this.adapter.capabilities; }
27
+ }
28
+ function caller(exec) { if (!exec.agent)
29
+ throw new Error('A live parent Agent is required'); return exec.agent; }
30
+ const output = { schema: { type: 'json' }, render: (_args, value) => [{ type: 'text', text: JSON.stringify(value) }] };
31
+ export function apply(ctx, config = {}) {
32
+ const service = new ProgramAgentsService(ctx, config), a = service.adapter;
33
+ ctx.effect(() => () => a.dispose());
34
+ ctx.inject(['workspaceRegistry', 'sessionController'], c => { void a.restoreStartup().catch(error => c.logger.warn('Program startup restore failed: ' + String(error))); });
35
+ ctx.on('agent/created', async ({ agent }) => { await a.sessionCreated(agent).catch(error => ctx.logger.warn('Program Session startup failed: ' + String(error))); return undefined; }, { global: true });
36
+ ctx.on('workspace/session-activity', async ({ sessionId }, next) => { const runs = a.supervisor.list(String(sessionId)).filter(r => ['starting', 'running', 'blocked', 'stopping'].includes(r.state)); const rest = await next(); return runs.length ? [{ kind: 'program-agent', items: runs.map(r => ({ id: r.id, label: r.name ?? r.label })) }, ...rest] : rest; });
37
+ ctx.on('workspace/session-stop', ({ sessionId }) => a.stopSession(String(sessionId)));
38
+ ctx.on('agent/disposed', ({ agent }) => a.ownerDisposed(agent));
39
+ ctx.tools.register(defineTool({ name: 'program_register', description: 'Register a parent-owned program: name, description, argv start command, typed URLs (ui/api/docs), optional endpoints and log path. Prefer persisted endpoints:{web:{port:"dynamic"}} and URLs {id,title,type,endpoint:"web",path:"/api"} instead of a previous run URL. Apps bind/report actual ports through connectProgram().endpoints.listen; public hostname comes from harness/browser, bind interface from trusted harness config. Prefer TypeScript + Hono, SQLite for app state or DuckDB for analytics, and a watch/reload start command. Registration does not launch it; program_start or its composer Start button does, in this exact parent context. Trusted local code, not a sandbox.', parameters: { name: { type: 'string', required: true }, description: { type: 'string', required: true }, command: { type: 'json', required: true }, cwd: { type: 'string' }, urls: { type: 'json' }, endpoints: { type: 'json' }, logsPath: { type: 'string' }, supervision: { type: 'json' }, access: { type: 'json' } }, output, execute: async (args, exec) => json(await a.register(caller(exec), args, exec.signal), 131072) }));
40
+ ctx.tools.register(defineTool({ name: 'program_reply', description: 'Settle one pending program agents.ask request with a schema-valid response. Use the supplied parent_id, program and request_id. Only the specifically assigned Agent can reply. The first valid response is accepted durably; conflicting, late or wrong-Agent replies are rejected. A normal chat answer does not settle the request.', parameters: { parent_id: { type: 'string', required: true }, program: { type: 'string', required: true }, request_id: { type: 'string', required: true }, body: { type: 'json', required: true } }, output, execute: async (args, exec) => json(await a.replyToRequest(caller(exec), args.parent_id, args.program, args.request_id, json(args.body))) }));
41
+ ctx.tools.register(defineTool({ name: 'program_inbox_send', description: 'Deliver structured data to a program inbox. Accepted is not processed: the app claims a lease, performs idempotent work, then acknowledges. A supervisor child may reply using its parent_id and program key.', parameters: { program: { type: 'string', required: true }, body: { type: 'json', required: true }, parent_id: { type: 'string' }, correlation_id: { type: 'string' } }, output, execute: async (args, exec) => { const agent = caller(exec); return json(await a.sendInbox(agent, args.parent_id ?? String(agent.id), args.program, json(args.body), args.correlation_id)); } }));
42
+ ctx.tools.register(defineTool({ name: 'program_start', description: 'Start a registered or configured program as a supervised child of this parent Agent. Use program_register first for a new command. Prefer watch/reload to repeated manual restarts. No automatic effect retries or application-state durability.', parameters: { program: { type: 'string', required: true }, input: { type: 'json' }, label: { type: 'string' } }, output, execute: async (args, exec) => json(await a.start(caller(exec), args.program, args.input ?? null, args.label, exec.signal), 1048576) }));
43
+ ctx.tools.register(defineTool({ name: 'program_list', description: 'Inspect this parent’s program launch descriptions, typed URLs/docs, log paths and current runs. Background parent notifications are handled internally; no user message UI is needed.', parameters: {}, output, execute: async (_args, exec) => { const owner = String(caller(exec).id); return json({ programs: a.catalog.list(owner), runs: a.supervisor.list(owner) }, 4 * 1048576); } }));
44
+ ctx.tools.register(defineTool({ name: 'program_send', description: 'Internal parent-to-SDK-program input, not a user chat channel. Ordinary command programs do not have an SDK inbox. Delivery is in-memory, not durable processing.', parameters: { id: { type: 'string', required: true }, generation: { type: 'integer', required: true }, body: { type: 'json', required: true } }, output, execute: async (args, exec) => { const owner = String(caller(exec).id); a.owner(owner); fence(a.supervisor.get(args.id, owner), args.generation); await a.supervisor.send(args.id, owner, args.body); return { accepted: true }; } }));
45
+ for (const action of ['stop', 'restart'])
46
+ ctx.tools.register(defineTool({ name: `program_${action}`, description: action === 'stop' ? 'Stop this parent’s program and its process group; require proven cleanup.' : 'Explicitly restart this parent’s program after proven process-group closure. Prefer watch/reload for source edits.', parameters: { id: { type: 'string', required: true }, generation: { type: 'integer', required: true } }, output, execute: async (args, exec) => { const owner = String(caller(exec).id); a.owner(owner); fence(a.supervisor.get(args.id, owner), args.generation); return json(await a[action](args.id, owner), 1048576); } }));
47
+ ctx.inject(['connection'], c => {
48
+ const connection = c.connection;
49
+ const handler = async (endpoint, payload, signal) => {
50
+ try {
51
+ signal.throwIfAborted();
52
+ if (!['list', 'start', 'stop', 'restart', 'models', 'modelSet'].includes(endpoint))
53
+ throw Error('Unknown program endpoint');
54
+ const p = object(payload);
55
+ exactKeys(p, endpoint === 'list' ? ['sessionId'] : ['start', 'models'].includes(endpoint) ? ['sessionId', 'program'] : endpoint === 'modelSet' ? ['sessionId', 'program', 'slot', 'selection', 'revision'] : ['sessionId', 'id', 'generation']);
56
+ const owner = text(p.sessionId, 'sessionId');
57
+ if (endpoint === 'list')
58
+ return { ok: true, value: a.view(owner) };
59
+ if (endpoint === 'models')
60
+ return { ok: true, value: await a.modelConfiguration(owner, text(p.program, 'program')) };
61
+ if (endpoint === 'modelSet')
62
+ return { ok: true, value: await a.setModelConfiguration(owner, text(p.program, 'program'), text(p.slot, 'slot'), p.selection, Number(p.revision), signal) };
63
+ if (endpoint === 'start')
64
+ return { ok: true, value: await a.startFromUi(owner, text(p.program, 'program'), signal) };
65
+ // Existing runs retain their captured live parent; the browser cannot choose
66
+ // a different Agent or supply commands/environment to these controls.
67
+ const agent = a.owner(owner), id = text(p.id, 'id');
68
+ fence(a.supervisor.get(id, owner), p.generation);
69
+ return { ok: true, value: await a.controlFromUi(agent, endpoint, { id, generation: Number(p.generation) }, signal) };
70
+ }
71
+ catch (error) {
72
+ return { ok: false, error: { code: 'program-agents/rejected', message: error instanceof Error ? error.message : 'Program operation failed', details: {} } };
73
+ }
74
+ };
75
+ for (const method of ['list', 'start', 'stop', 'restart', 'models', 'modelSet'])
76
+ c.effect(() => connection.fetch.register({ path: `/api/programAgents/${method}`, methods: ['POST'], requestBody: 'buffered', fetch: programFetch(method, handler) }));
77
+ c.effect(() => connection.fetch.register({ path: '/api/programAgents/events', methods: ['POST'], requestBody: 'buffered', fetch: request => a.events.fetch(request) }));
78
+ a.journal.append({ kind: 'web-routes-registered', prefix: '/api/programAgents', updates: 'SSE' });
79
+ });
80
+ return service;
81
+ }
82
+ export function fence(run, generation) { if (!Number.isSafeInteger(generation) || run.generation !== generation)
83
+ throw Error('Stale program generation; wait for the latest state'); }
84
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/host/index.ts"],"names":[],"mappings":"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"}