@astrale-os/kernel-server 0.4.13 → 0.4.14

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 (71) hide show
  1. package/dist/app/create.d.ts +3 -3
  2. package/dist/app/create.d.ts.map +1 -1
  3. package/dist/app/create.js +8 -7
  4. package/dist/app/create.js.map +1 -1
  5. package/dist/app/index.d.ts +1 -1
  6. package/dist/app/index.d.ts.map +1 -1
  7. package/dist/app/multiplexed.d.ts +11 -11
  8. package/dist/app/multiplexed.d.ts.map +1 -1
  9. package/dist/app/multiplexed.js +16 -15
  10. package/dist/app/multiplexed.js.map +1 -1
  11. package/dist/app/ws-upgrade.d.ts +7 -8
  12. package/dist/app/ws-upgrade.d.ts.map +1 -1
  13. package/dist/app/ws-upgrade.js +10 -9
  14. package/dist/app/ws-upgrade.js.map +1 -1
  15. package/dist/capabilities/contract.d.ts +8 -0
  16. package/dist/capabilities/contract.d.ts.map +1 -0
  17. package/dist/capabilities/contract.js +2 -0
  18. package/dist/capabilities/contract.js.map +1 -0
  19. package/dist/capabilities/defer.d.ts +4 -0
  20. package/dist/capabilities/defer.d.ts.map +1 -0
  21. package/dist/capabilities/defer.js +2 -0
  22. package/dist/capabilities/defer.js.map +1 -0
  23. package/dist/capabilities/hono.d.ts +8 -0
  24. package/dist/capabilities/hono.d.ts.map +1 -0
  25. package/dist/capabilities/hono.js +13 -0
  26. package/dist/capabilities/hono.js.map +1 -0
  27. package/dist/capabilities/index.d.ts +6 -0
  28. package/dist/capabilities/index.d.ts.map +1 -0
  29. package/dist/capabilities/index.js +3 -0
  30. package/dist/capabilities/index.js.map +1 -0
  31. package/dist/capabilities/lifecycle.d.ts +17 -0
  32. package/dist/capabilities/lifecycle.d.ts.map +1 -0
  33. package/dist/capabilities/lifecycle.js +37 -0
  34. package/dist/capabilities/lifecycle.js.map +1 -0
  35. package/dist/capabilities/sleep.d.ts +4 -0
  36. package/dist/capabilities/sleep.d.ts.map +1 -0
  37. package/dist/capabilities/sleep.js +8 -0
  38. package/dist/capabilities/sleep.js.map +1 -0
  39. package/dist/envelope/batch.d.ts +3 -2
  40. package/dist/envelope/batch.d.ts.map +1 -1
  41. package/dist/envelope/batch.js +9 -3
  42. package/dist/envelope/batch.js.map +1 -1
  43. package/dist/envelope/http.d.ts +7 -6
  44. package/dist/envelope/http.d.ts.map +1 -1
  45. package/dist/envelope/http.js +17 -13
  46. package/dist/envelope/http.js.map +1 -1
  47. package/dist/envelope/ws.d.ts +6 -3
  48. package/dist/envelope/ws.d.ts.map +1 -1
  49. package/dist/envelope/ws.js +15 -9
  50. package/dist/envelope/ws.js.map +1 -1
  51. package/dist/index.d.ts +4 -3
  52. package/dist/index.d.ts.map +1 -1
  53. package/dist/index.js +3 -1
  54. package/dist/index.js.map +1 -1
  55. package/dist/invocation/dispatch.d.ts +32 -0
  56. package/dist/invocation/dispatch.d.ts.map +1 -0
  57. package/dist/invocation/dispatch.js +68 -0
  58. package/dist/invocation/dispatch.js.map +1 -0
  59. package/dist/invocation/dispatcher.d.ts +19 -0
  60. package/dist/invocation/dispatcher.d.ts.map +1 -0
  61. package/dist/invocation/dispatcher.js +9 -0
  62. package/dist/invocation/dispatcher.js.map +1 -0
  63. package/dist/invocation/index.d.ts +3 -0
  64. package/dist/invocation/index.d.ts.map +1 -0
  65. package/dist/invocation/index.js +3 -0
  66. package/dist/invocation/index.js.map +1 -0
  67. package/dist/routed/handler.d.ts +5 -3
  68. package/dist/routed/handler.d.ts.map +1 -1
  69. package/dist/routed/handler.js +11 -7
  70. package/dist/routed/handler.js.map +1 -1
  71. package/package.json +2 -2
@@ -10,17 +10,17 @@
10
10
  * fixed to the Authorization header; route bindings can override via
11
11
  * `route.credential`.
12
12
  */
13
- import type { KernelAPI } from '@astrale-os/kernel-api';
14
13
  import type { MountableContract } from '@astrale-os/kernel-api/routed';
15
14
  import type { Hono } from 'hono';
16
15
  import type { CorsConfig } from '../cors.js';
16
+ import type { Dispatcher } from '../invocation/index.js';
17
17
  import type { JwksKeys } from '../jwks/index.js';
18
18
  import type { MountPlan, ServerHost } from '../plan/index.js';
19
19
  import { type WsAdapter } from './ws-upgrade.js';
20
20
  export type { WsAdapter };
21
21
  export type KernelAppConfig = {
22
- /** The kernel runtime handling dispatch. */
23
- kernel: KernelAPI;
22
+ /** The dispatcher handling hosted invocations. */
23
+ dispatcher: Dispatcher;
24
24
  /** The domain's mountable contracts — produced by defineMethods(schema, methods). */
25
25
  domain: MountableContract[];
26
26
  /** Server host URL. Functions anchor against this (ambient functions mount here). */
@@ -1 +1 @@
1
- {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../app/create.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AACvD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAA;AACtE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAIhC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAC5C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAChD,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAM7D,OAAO,EAAiB,KAAK,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAE/D,YAAY,EAAE,SAAS,EAAE,CAAA;AAIzB,MAAM,MAAM,eAAe,GAAG;IAC5B,4CAA4C;IAC5C,MAAM,EAAE,SAAS,CAAA;IACjB,qFAAqF;IACrF,MAAM,EAAE,iBAAiB,EAAE,CAAA;IAC3B,qFAAqF;IACrF,IAAI,EAAE,UAAU,CAAA;IAChB,4DAA4D;IAC5D,IAAI,EAAE,QAAQ,CAAA;IACd,+DAA+D;IAC/D,UAAU,CAAC,EAAE,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,CAAA;IACvC,uDAAuD;IACvD,IAAI,CAAC,EAAE,UAAU,CAAA;IACjB,6EAA6E;IAC7E,MAAM,CAAC,EAAE,MAAM,GAAG,KAAK,CAAA;IACvB,+DAA+D;IAC/D,GAAG,CAAC,EAAE,IAAI,CAAA;IACV;;;OAGG;IACH,EAAE,CAAC,EAAE,SAAS,CAAA;CACf,CAAA;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,eAAe,GAAG;IAAE,GAAG,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,SAAS,CAAA;CAAE,CA2FvF"}
1
+ {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../app/create.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAA;AACtE,OAAO,KAAK,EAAW,IAAI,EAAE,MAAM,MAAM,CAAA;AAIzC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAC5C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AACxD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAChD,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAO7D,OAAO,EAAiB,KAAK,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAE/D,YAAY,EAAE,SAAS,EAAE,CAAA;AAIzB,MAAM,MAAM,eAAe,GAAG;IAC5B,kDAAkD;IAClD,UAAU,EAAE,UAAU,CAAA;IACtB,qFAAqF;IACrF,MAAM,EAAE,iBAAiB,EAAE,CAAA;IAC3B,qFAAqF;IACrF,IAAI,EAAE,UAAU,CAAA;IAChB,4DAA4D;IAC5D,IAAI,EAAE,QAAQ,CAAA;IACd,+DAA+D;IAC/D,UAAU,CAAC,EAAE,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,CAAA;IACvC,uDAAuD;IACvD,IAAI,CAAC,EAAE,UAAU,CAAA;IACjB,6EAA6E;IAC7E,MAAM,CAAC,EAAE,MAAM,GAAG,KAAK,CAAA;IACvB,+DAA+D;IAC/D,GAAG,CAAC,EAAE,IAAI,CAAA;IACV;;;OAGG;IACH,EAAE,CAAC,EAAE,SAAS,CAAA;CACf,CAAA;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,eAAe,GAAG;IAAE,GAAG,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,SAAS,CAAA;CAAE,CAyFvF"}
@@ -11,6 +11,7 @@
11
11
  * `route.credential`.
12
12
  */
13
13
  import { Hono as HonoCtor } from 'hono';
14
+ import { honoCapabilityHost } from '../capabilities/index.js';
14
15
  import { createKernelDispatcher } from '../envelope/http.js';
15
16
  import { mountJwks } from '../jwks/keys.js';
16
17
  import { extractHostParams, walkDomain } from '../plan/index.js';
@@ -40,7 +41,7 @@ export function createKernelApp(config) {
40
41
  const hostParams = plan.hostMatcher
41
42
  ? (req) => extractHostParams(plan.hostMatcher, req)
42
43
  : undefined;
43
- const dispatcher = createKernelDispatcher(cors, { hostParams });
44
+ const envelope = createKernelDispatcher(cors, { hostParams });
44
45
  const basePaths = new Set();
45
46
  for (const basePath of plan.kernelMounts.keys()) {
46
47
  basePaths.add(basePath === '' ? '/' : basePath);
@@ -55,13 +56,13 @@ export function createKernelApp(config) {
55
56
  `(hono/bun, @hono/node-ws, hono/deno).`);
56
57
  }
57
58
  for (const wsPath of basePaths) {
58
- mountKernelWs(app, wsPath, config.ws, config.kernel);
59
+ mountKernelWs(app, wsPath, config.ws, config.dispatcher);
59
60
  }
60
61
  }
61
62
  // 4b. HTTP POST envelope + OPTIONS preflight for each base path.
62
63
  for (const path of basePaths) {
63
- app.post(path, (c) => dispatcher(c.req.raw, config.kernel));
64
- app.options(path, (c) => dispatcher(c.req.raw, config.kernel));
64
+ app.post(path, (c) => envelope(c.req.raw, config.dispatcher, honoCapabilityHost(c)));
65
+ app.options(path, (c) => envelope(c.req.raw, config.dispatcher, honoCapabilityHost(c)));
65
66
  }
66
67
  // 6. Route bindings — one Hono handler per mounted route.
67
68
  for (const mountedRoute of plan.routes) {
@@ -70,7 +71,7 @@ export function createKernelApp(config) {
70
71
  const handler = createRouteHandler({
71
72
  method: mountedRoute.contract.ref,
72
73
  route,
73
- kernel: config.kernel,
74
+ dispatcher: config.dispatcher,
74
75
  cors,
75
76
  hostParams,
76
77
  auth: mountedRoute.contract.binding?.auth,
@@ -83,7 +84,7 @@ export function createKernelApp(config) {
83
84
  if (value !== undefined)
84
85
  pathParams[name] = decodeURIComponent(value);
85
86
  }
86
- return handler(c.req.raw, pathParams);
87
+ return handler(c.req.raw, pathParams, honoCapabilityHost(c));
87
88
  };
88
89
  if (route.method === '*') {
89
90
  app.all(honoPath, mountHandler);
@@ -93,7 +94,7 @@ export function createKernelApp(config) {
93
94
  app[verb](honoPath, mountHandler);
94
95
  }
95
96
  // Always allow CORS preflight on routes.
96
- app.options(honoPath, (c) => handler(c.req.raw, {}));
97
+ app.options(honoPath, (c) => handler(c.req.raw, {}, honoCapabilityHost(c)));
97
98
  }
98
99
  return { app, plan };
99
100
  }
@@ -1 +1 @@
1
- {"version":3,"file":"create.js","sourceRoot":"","sources":["../../app/create.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"create.js","sourceRoot":"","sources":["../../app/create.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
1
  export { createKernelApp, type KernelAppConfig, type WsAdapter } from './create.js';
2
- export { createMultiplexedKernelApp, type MultiplexedKernelAppConfig, type KernelResolver, } from './multiplexed.js';
2
+ export { createMultiplexedKernelApp, type MultiplexedKernelAppConfig, type DispatcherResolver, } from './multiplexed.js';
3
3
  export { mountKernelWs } from './ws-upgrade.js';
4
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../app/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,KAAK,eAAe,EAAE,KAAK,SAAS,EAAE,MAAM,aAAa,CAAA;AACnF,OAAO,EACL,0BAA0B,EAC1B,KAAK,0BAA0B,EAC/B,KAAK,cAAc,GACpB,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../app/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,KAAK,eAAe,EAAE,KAAK,SAAS,EAAE,MAAM,aAAa,CAAA;AACnF,OAAO,EACL,0BAA0B,EAC1B,KAAK,0BAA0B,EAC/B,KAAK,kBAAkB,GACxB,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA"}
@@ -2,34 +2,34 @@
2
2
  * createMultiplexedKernelApp — Hono app for multi-instance kernel hosting.
3
3
  *
4
4
  * One HTTP server hosts many kernel instances under `/{id}/...` paths. Each
5
- * incoming request is resolved to a kernel via the supplied `resolve()`
5
+ * incoming request is resolved to a dispatcher via `resolve()`
6
6
  * function. The manager kernel (if any) is mounted at its own static prefix.
7
7
  *
8
8
  * Both the envelope HTTP dispatcher and the WS upgrade handler are built
9
- * once at startup. The dispatcher takes `(req, kernel)` per request; the WS
10
- * handler resolves its kernel once at upgrade time and pins it to the
9
+ * once at startup. The HTTP handler takes `(req, dispatcher)` per request; the WS
10
+ * handler resolves its dispatcher once at upgrade time and pins it to the
11
11
  * connection for its entire lifetime.
12
12
  *
13
13
  * Note: this skips per-instance domain mount-walking (no `domain` argument
14
14
  * per request) — multiplexed servers dispatch all calls to the kernel layer
15
15
  * regardless of binding. Anchored functions still work, since the binding is
16
- * carried by the contract registered in the runtime.
16
+ * carried by the contract registered in the kernel.
17
17
  */
18
- import type { KernelAPI } from '@astrale-os/kernel-api';
19
18
  import type { Hono } from 'hono';
20
19
  import type { CorsConfig } from '../cors.js';
20
+ import type { Dispatcher } from '../invocation/index.js';
21
21
  import type { JwksKeys, MultiplexedJwks } from '../jwks/index.js';
22
22
  import { type WsAdapter } from './ws-upgrade.js';
23
23
  /**
24
- * Resolves a KernelAPI from an incoming request (multi-instance servers).
24
+ * Resolves a dispatcher from an incoming request.
25
25
  */
26
- export type KernelResolver = (req: Request) => KernelAPI | null | Promise<KernelAPI | null>;
26
+ export type DispatcherResolver = (req: Request) => Dispatcher | null | Promise<Dispatcher | null>;
27
27
  export type MultiplexedKernelAppConfig = {
28
- /** Per-request kernel resolver (direct access — instance handles its own auth). */
29
- resolve: KernelResolver;
30
- /** Optional manager kernel hosted at a static prefix. */
28
+ /** Per-request dispatcher resolver (the selected instance handles its own auth). */
29
+ resolve: DispatcherResolver;
30
+ /** Optional manager dispatcher hosted at a static prefix. */
31
31
  manager?: {
32
- kernel: KernelAPI;
32
+ dispatcher: Dispatcher;
33
33
  prefix: string;
34
34
  jwks: JwksKeys;
35
35
  };
@@ -1 +1 @@
1
- {"version":3,"file":"multiplexed.d.ts","sourceRoot":"","sources":["../../app/multiplexed.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AACvD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAIhC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAC5C,OAAO,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAIjE,OAAO,EAAiB,KAAK,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAI/D;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,GAAG,EAAE,OAAO,KAAK,SAAS,GAAG,IAAI,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAAA;AAE3F,MAAM,MAAM,0BAA0B,GAAG;IACvC,mFAAmF;IACnF,OAAO,EAAE,cAAc,CAAA;IACvB,yDAAyD;IACzD,OAAO,CAAC,EAAE;QAAE,MAAM,EAAE,SAAS,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,QAAQ,CAAA;KAAE,CAAA;IAC/D,2DAA2D;IAC3D,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,gCAAgC;IAChC,IAAI,EAAE,eAAe,CAAA;IACrB,IAAI,CAAC,EAAE,UAAU,CAAA;IACjB,MAAM,CAAC,EAAE,MAAM,GAAG,KAAK,CAAA;IACvB,GAAG,CAAC,EAAE,IAAI,CAAA;IACV;;;;OAIG;IACH,EAAE,CAAC,EAAE,SAAS,CAAA;CACf,CAAA;AAED,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,0BAA0B,GAAG;IAAE,GAAG,EAAE,IAAI,CAAA;CAAE,CA+C5F"}
1
+ {"version":3,"file":"multiplexed.d.ts","sourceRoot":"","sources":["../../app/multiplexed.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAW,IAAI,EAAE,MAAM,MAAM,CAAA;AAIzC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAC5C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AACxD,OAAO,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAKjE,OAAO,EAAiB,KAAK,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAI/D;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,CAAC,GAAG,EAAE,OAAO,KAAK,UAAU,GAAG,IAAI,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAAA;AAEjG,MAAM,MAAM,0BAA0B,GAAG;IACvC,oFAAoF;IACpF,OAAO,EAAE,kBAAkB,CAAA;IAC3B,6DAA6D;IAC7D,OAAO,CAAC,EAAE;QAAE,UAAU,EAAE,UAAU,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,QAAQ,CAAA;KAAE,CAAA;IACpE,2DAA2D;IAC3D,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,gCAAgC;IAChC,IAAI,EAAE,eAAe,CAAA;IACrB,IAAI,CAAC,EAAE,UAAU,CAAA;IACjB,MAAM,CAAC,EAAE,MAAM,GAAG,KAAK,CAAA;IACvB,GAAG,CAAC,EAAE,IAAI,CAAA;IACV;;;;OAIG;IACH,EAAE,CAAC,EAAE,SAAS,CAAA;CACf,CAAA;AAED,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,0BAA0B,GAAG;IAAE,GAAG,EAAE,IAAI,CAAA;CAAE,CA+C5F"}
@@ -2,20 +2,21 @@
2
2
  * createMultiplexedKernelApp — Hono app for multi-instance kernel hosting.
3
3
  *
4
4
  * One HTTP server hosts many kernel instances under `/{id}/...` paths. Each
5
- * incoming request is resolved to a kernel via the supplied `resolve()`
5
+ * incoming request is resolved to a dispatcher via `resolve()`
6
6
  * function. The manager kernel (if any) is mounted at its own static prefix.
7
7
  *
8
8
  * Both the envelope HTTP dispatcher and the WS upgrade handler are built
9
- * once at startup. The dispatcher takes `(req, kernel)` per request; the WS
10
- * handler resolves its kernel once at upgrade time and pins it to the
9
+ * once at startup. The HTTP handler takes `(req, dispatcher)` per request; the WS
10
+ * handler resolves its dispatcher once at upgrade time and pins it to the
11
11
  * connection for its entire lifetime.
12
12
  *
13
13
  * Note: this skips per-instance domain mount-walking (no `domain` argument
14
14
  * per request) — multiplexed servers dispatch all calls to the kernel layer
15
15
  * regardless of binding. Anchored functions still work, since the binding is
16
- * carried by the contract registered in the runtime.
16
+ * carried by the contract registered in the kernel.
17
17
  */
18
18
  import { Hono as HonoCtor } from 'hono';
19
+ import { honoCapabilityHost } from '../capabilities/index.js';
19
20
  import { createKernelDispatcher } from '../envelope/http.js';
20
21
  import { mountInstanceJwks, mountJwks } from '../jwks/keys.js';
21
22
  import { mountKernelWs } from './ws-upgrade.js';
@@ -27,34 +28,34 @@ export function createMultiplexedKernelApp(config) {
27
28
  if (config.health !== false) {
28
29
  app.get(typeof config.health === 'string' ? config.health : '/health', (c) => c.json({ status: 'ok' }));
29
30
  }
30
- // Single dispatcher, reused across manager + all instance kernels.
31
- const dispatcher = createKernelDispatcher(cors);
31
+ // Single HTTP handler, reused across manager + all instance dispatchers.
32
+ const envelope = createKernelDispatcher(cors);
32
33
  // Manager kernel (if any) — static prefix, fixed kernel.
33
34
  // POST + OPTIONS handle HTTP dispatch; GET is reserved for WS upgrade
34
35
  // (matches createKernelApp's mount layout).
35
36
  if (config.manager) {
36
- const managerKernel = config.manager.kernel;
37
+ const managerDispatcher = config.manager.dispatcher;
37
38
  const managerPath = `${config.manager.prefix}/`;
38
- app.post(managerPath, (c) => dispatcher(c.req.raw, managerKernel));
39
- app.options(managerPath, (c) => dispatcher(c.req.raw, managerKernel));
39
+ app.post(managerPath, (c) => envelope(c.req.raw, managerDispatcher, honoCapabilityHost(c)));
40
+ app.options(managerPath, (c) => envelope(c.req.raw, managerDispatcher, honoCapabilityHost(c)));
40
41
  mountJwks(app, { ...config.manager.jwks, cors });
41
42
  if (config.ws) {
42
- mountKernelWs(app, managerPath, config.ws, managerKernel);
43
+ mountKernelWs(app, managerPath, config.ws, managerDispatcher);
43
44
  }
44
45
  }
45
46
  // Per-instance JWKS
46
47
  mountInstanceJwks(app, instancePrefix, { ...config.jwks, cors });
47
- // Per-instance kernel envelope — kernel resolved per request.
48
+ // Per-instance kernel envelope — dispatcher resolved per request.
48
49
  const instancePath = `${instancePrefix}/`;
49
50
  const httpDispatch = async (c) => {
50
- const kernel = await config.resolve(c.req.raw);
51
- if (!kernel)
51
+ const dispatcher = await config.resolve(c.req.raw);
52
+ if (!dispatcher)
52
53
  return new Response('Instance not found', { status: 404 });
53
- return dispatcher(c.req.raw, kernel);
54
+ return envelope(c.req.raw, dispatcher, honoCapabilityHost(c));
54
55
  };
55
56
  app.post(instancePath, httpDispatch);
56
57
  app.options(instancePath, httpDispatch);
57
- // Per-instance WS upgrade — kernel resolved at upgrade time and pinned.
58
+ // Per-instance WS upgrade — dispatcher resolved at upgrade time and pinned.
58
59
  if (config.ws) {
59
60
  mountKernelWs(app, instancePath, config.ws, config.resolve);
60
61
  }
@@ -1 +1 @@
1
- {"version":3,"file":"multiplexed.js","sourceRoot":"","sources":["../../app/multiplexed.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"multiplexed.js","sourceRoot":"","sources":["../../app/multiplexed.ts"],"names":[],"mappings":"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"}
@@ -5,22 +5,21 @@
5
5
  * The adapter is supplied by the caller (`hono/bun`, `@hono/node-ws`,
6
6
  * `hono/deno`) so that this module remains free of runtime imports.
7
7
  *
8
- * The kernel can be either a fixed `KernelAPI` (single-kernel servers) or a
9
- * resolver called at upgrade time with the upgrade request (multi-instance
10
- * servers). Once resolved, the kernel is pinned to the WS connection for its
11
- * entire lifetime.
8
+ * The dispatcher can be either fixed or resolved per request by a resolver
9
+ * called at upgrade time with the upgrade request. Once resolved, it is pinned
10
+ * to the WS connection.
12
11
  */
13
- import type { KernelAPI } from '@astrale-os/kernel-api';
14
12
  import type { Hono } from 'hono';
15
13
  import type { UpgradeWebSocket } from 'hono/ws';
14
+ import type { Dispatcher } from '../invocation/index.js';
16
15
  export type WsAdapter = {
17
16
  upgradeWebSocket: UpgradeWebSocket;
18
17
  };
19
18
  /**
20
- * Kernel source for a WS mount — either a fixed kernel or a per-request
19
+ * Invocation source for a WS mount — either a fixed dispatcher or a per-request
21
20
  * resolver. Resolvers may be async and return `null` to reject the upgrade.
22
21
  */
23
- export type WsKernelSource = KernelAPI | ((req: Request) => KernelAPI | null | Promise<KernelAPI | null>);
22
+ export type WsInvocationSource = Dispatcher | ((req: Request) => Dispatcher | null | Promise<Dispatcher | null>);
24
23
  /**
25
24
  * Mount the kernel WS handler at `path` on the Hono app.
26
25
  *
@@ -31,5 +30,5 @@ export type WsKernelSource = KernelAPI | ((req: Request) => KernelAPI | null | P
31
30
  * result closes the socket with code 4004 (instance not found) before any
32
31
  * messages are exchanged.
33
32
  */
34
- export declare function mountKernelWs(app: Hono, path: string, ws: WsAdapter, source: WsKernelSource): void;
33
+ export declare function mountKernelWs(app: Hono, path: string, ws: WsAdapter, source: WsInvocationSource): void;
35
34
  //# sourceMappingURL=ws-upgrade.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ws-upgrade.d.ts","sourceRoot":"","sources":["../../app/ws-upgrade.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AACvD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAChC,OAAO,KAAK,EAAE,gBAAgB,EAAa,MAAM,SAAS,CAAA;AAK1D,MAAM,MAAM,SAAS,GAAG;IACtB,gBAAgB,EAAE,gBAAgB,CAAA;CACnC,CAAA;AAED;;;GAGG;AACH,MAAM,MAAM,cAAc,GACtB,SAAS,GACT,CAAC,CAAC,GAAG,EAAE,OAAO,KAAK,SAAS,GAAG,IAAI,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC,CAAA;AAuBpE;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAC3B,GAAG,EAAE,IAAI,EACT,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,SAAS,EACb,MAAM,EAAE,cAAc,GACrB,IAAI,CAkDN"}
1
+ {"version":3,"file":"ws-upgrade.d.ts","sourceRoot":"","sources":["../../app/ws-upgrade.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAChC,OAAO,KAAK,EAAE,gBAAgB,EAAa,MAAM,SAAS,CAAA;AAE1D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AAMxD,MAAM,MAAM,SAAS,GAAG;IACtB,gBAAgB,EAAE,gBAAgB,CAAA;CACnC,CAAA;AAED;;;GAGG;AACH,MAAM,MAAM,kBAAkB,GAC1B,UAAU,GACV,CAAC,CAAC,GAAG,EAAE,OAAO,KAAK,UAAU,GAAG,IAAI,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC,CAAA;AAuBtE;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAC3B,GAAG,EAAE,IAAI,EACT,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,SAAS,EACb,MAAM,EAAE,kBAAkB,GACzB,IAAI,CAmDN"}
@@ -5,11 +5,11 @@
5
5
  * The adapter is supplied by the caller (`hono/bun`, `@hono/node-ws`,
6
6
  * `hono/deno`) so that this module remains free of runtime imports.
7
7
  *
8
- * The kernel can be either a fixed `KernelAPI` (single-kernel servers) or a
9
- * resolver called at upgrade time with the upgrade request (multi-instance
10
- * servers). Once resolved, the kernel is pinned to the WS connection for its
11
- * entire lifetime.
8
+ * The dispatcher can be either fixed or resolved per request by a resolver
9
+ * called at upgrade time with the upgrade request. Once resolved, it is pinned
10
+ * to the WS connection.
12
11
  */
12
+ import { honoCapabilityHost } from '../capabilities/index.js';
13
13
  import { negotiateWsCodec } from '../envelope/codec.js';
14
14
  import { KernelWsConnection } from '../envelope/ws.js';
15
15
  function adaptHonoWs(ws) {
@@ -42,6 +42,7 @@ function isResolver(source) {
42
42
  export function mountKernelWs(app, path, ws, source) {
43
43
  const route = ws.upgradeWebSocket((c) => {
44
44
  const upgradeRequest = c.req.raw;
45
+ const capabilityHost = honoCapabilityHost(c);
45
46
  const codec = negotiateWsCodec(upgradeRequest);
46
47
  let conn = null;
47
48
  return {
@@ -50,9 +51,9 @@ export function mountKernelWs(app, path, ws, source) {
50
51
  wsCtx.close(4000, 'Unsupported codec');
51
52
  return;
52
53
  }
53
- let kernel;
54
+ let dispatcher;
54
55
  try {
55
- kernel = isResolver(source) ? await source(upgradeRequest) : source;
56
+ dispatcher = isResolver(source) ? await source(upgradeRequest) : source;
56
57
  }
57
58
  catch (err) {
58
59
  // A mount-time failure (e.g. a child kernel boot throwing) must not
@@ -63,16 +64,16 @@ export function mountKernelWs(app, path, ws, source) {
63
64
  // log the error so a programmer bug (e.g. an unrelated TypeError
64
65
  // bubbling up from the resolver) isn't silently masked as a benign
65
66
  // mount fail.
66
- // eslint-disable-next-line no-console -- diagnostic from boundary handler
67
+ // oxlint-disable-next-line no-console
67
68
  console.error('[ws-upgrade] mount failed (socket closed 4005):', err);
68
69
  wsCtx.close(4005, 'mount failed');
69
70
  return;
70
71
  }
71
- if (!kernel) {
72
+ if (!dispatcher) {
72
73
  wsCtx.close(4004, 'Instance not found');
73
74
  return;
74
75
  }
75
- conn = new KernelWsConnection(adaptHonoWs(wsCtx), codec, kernel);
76
+ conn = new KernelWsConnection(adaptHonoWs(wsCtx), codec, dispatcher, capabilityHost);
76
77
  conn.start();
77
78
  },
78
79
  onMessage(evt) {
@@ -1 +1 @@
1
- {"version":3,"file":"ws-upgrade.js","sourceRoot":"","sources":["../../app/ws-upgrade.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAMH,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AACvD,OAAO,EAAE,kBAAkB,EAAsB,MAAM,mBAAmB,CAAA;AAc1E,SAAS,WAAW,CAAC,EAAa;IAChC,MAAM,GAAG,GAAG,EAAE,CAAC,GAAyC,CAAA;IACxD,OAAO;QACL,IAAI,CAAC,IAAyB;YAC5B,EAAE,CAAC,IAAI,CAAC,IAAsD,CAAC,CAAA;QACjE,CAAC;QACD,KAAK,CAAC,IAAa,EAAE,MAAe;YAClC,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;QACxB,CAAC;QACD,IAAI,UAAU;YACZ,OAAO,GAAG,EAAE,UAAU,IAAI,EAAE,CAAC,UAAU,CAAA;QACzC,CAAC;KACF,CAAA;AACH,CAAC;AAED,SAAS,UAAU,CACjB,MAAsB;IAEtB,OAAO,OAAO,MAAM,KAAK,UAAU,CAAA;AACrC,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,aAAa,CAC3B,GAAS,EACT,IAAY,EACZ,EAAa,EACb,MAAsB;IAEtB,MAAM,KAAK,GAAG,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,EAAE;QACtC,MAAM,cAAc,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAA;QAChC,MAAM,KAAK,GAAG,gBAAgB,CAAC,cAAc,CAAC,CAAA;QAC9C,IAAI,IAAI,GAA8B,IAAI,CAAA;QAE1C,OAAO;YACL,KAAK,CAAC,MAAM,CAAC,IAAW,EAAE,KAAgB;gBACxC,IAAI,CAAC,KAAK,EAAE,CAAC;oBACX,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,mBAAmB,CAAC,CAAA;oBACtC,OAAM;gBACR,CAAC;gBACD,IAAI,MAAwB,CAAA;gBAC5B,IAAI,CAAC;oBACH,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,MAAM,CAAA;gBACrE,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,oEAAoE;oBACpE,qEAAqE;oBACrE,oEAAoE;oBACpE,gEAAgE;oBAChE,oEAAoE;oBACpE,iEAAiE;oBACjE,mEAAmE;oBACnE,cAAc;oBACd,0EAA0E;oBAC1E,OAAO,CAAC,KAAK,CAAC,iDAAiD,EAAE,GAAG,CAAC,CAAA;oBACrE,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,cAAc,CAAC,CAAA;oBACjC,OAAM;gBACR,CAAC;gBACD,IAAI,CAAC,MAAM,EAAE,CAAC;oBACZ,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,oBAAoB,CAAC,CAAA;oBACvC,OAAM;gBACR,CAAC;gBACD,IAAI,GAAG,IAAI,kBAAkB,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAA;gBAChE,IAAI,CAAC,KAAK,EAAE,CAAA;YACd,CAAC;YACD,SAAS,CAAC,GAAiB;gBACzB,IAAI,EAAE,aAAa,CAAC,GAAG,CAAC,IAAyC,CAAC,CAAA;YACpE,CAAC;YACD,OAAO;gBACL,IAAI,EAAE,WAAW,EAAE,CAAA;gBACnB,IAAI,GAAG,IAAI,CAAA;YACb,CAAC;YACD,OAAO,CAAC,GAAU;gBAChB,MAAM,GAAG,GAAG,GAAG,YAAY,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,oBAAoB,GAAG,CAAC,IAAI,EAAE,CAAA;gBACpF,IAAI,EAAE,WAAW,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,CAAA;YACnC,CAAC;SACF,CAAA;IACH,CAAC,CAAC,CAAA;IACF,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;AACtB,CAAC"}
1
+ {"version":3,"file":"ws-upgrade.js","sourceRoot":"","sources":["../../app/ws-upgrade.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { Defer } from './defer.js';
2
+ import type { Sleep } from './sleep.js';
3
+ /** Host-provided capabilities available while an invocation is executing. */
4
+ export type Capabilities = {
5
+ defer: Defer;
6
+ sleep: Sleep;
7
+ };
8
+ //# sourceMappingURL=contract.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../../capabilities/contract.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AACvC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAEvC,6EAA6E;AAC7E,MAAM,MAAM,YAAY,GAAG;IACzB,KAAK,EAAE,KAAK,CAAA;IACZ,KAAK,EAAE,KAAK,CAAA;CACb,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=contract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contract.js","sourceRoot":"","sources":["../../capabilities/contract.ts"],"names":[],"mappings":""}
@@ -0,0 +1,4 @@
1
+ /** Work detached from an invocation's immediate result. */
2
+ export type DeferredTask = () => void | PromiseLike<unknown>;
3
+ export type Defer = (task: DeferredTask) => void;
4
+ //# sourceMappingURL=defer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defer.d.ts","sourceRoot":"","sources":["../../capabilities/defer.ts"],"names":[],"mappings":"AAAA,2DAA2D;AAC3D,MAAM,MAAM,YAAY,GAAG,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,CAAC,CAAA;AAE5D,MAAM,MAAM,KAAK,GAAG,CAAC,IAAI,EAAE,YAAY,KAAK,IAAI,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=defer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defer.js","sourceRoot":"","sources":["../../capabilities/defer.ts"],"names":[],"mappings":""}
@@ -0,0 +1,8 @@
1
+ import type { CapabilityHost } from './lifecycle.js';
2
+ /** Adapt Hono's optional request context to the generic execution host. */
3
+ export declare function honoCapabilityHost(c: {
4
+ readonly executionCtx?: {
5
+ waitUntil(promise: Promise<unknown>): void;
6
+ };
7
+ }): CapabilityHost | undefined;
8
+ //# sourceMappingURL=hono.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hono.d.ts","sourceRoot":"","sources":["../../capabilities/hono.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAEpD,2EAA2E;AAC3E,wBAAgB,kBAAkB,CAAC,CAAC,EAAE;IACpC,QAAQ,CAAC,YAAY,CAAC,EAAE;QAAE,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI,CAAA;KAAE,CAAA;CACvE,GAAG,cAAc,GAAG,SAAS,CAQ7B"}
@@ -0,0 +1,13 @@
1
+ /** Adapt Hono's optional request context to the generic execution host. */
2
+ export function honoCapabilityHost(c) {
3
+ try {
4
+ const execution = c.executionCtx;
5
+ if (!execution)
6
+ return undefined;
7
+ return { register: (promise) => execution.waitUntil(promise) };
8
+ }
9
+ catch {
10
+ return undefined;
11
+ }
12
+ }
13
+ //# sourceMappingURL=hono.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hono.js","sourceRoot":"","sources":["../../capabilities/hono.ts"],"names":[],"mappings":"AAEA,2EAA2E;AAC3E,MAAM,UAAU,kBAAkB,CAAC,CAElC;IACC,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,CAAC,CAAC,YAAY,CAAA;QAChC,IAAI,CAAC,SAAS;YAAE,OAAO,SAAS,CAAA;QAChC,OAAO,EAAE,QAAQ,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAA;IAChE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAA;IAClB,CAAC;AACH,CAAC"}
@@ -0,0 +1,6 @@
1
+ export { honoCapabilityHost } from './hono.js';
2
+ export { createCapabilityLifecycle, type CapabilityHost, type CapabilityLifecycle, } from './lifecycle.js';
3
+ export type { Defer, DeferredTask } from './defer.js';
4
+ export type { Capabilities } from './contract.js';
5
+ export type { Sleep } from './sleep.js';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../capabilities/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAA;AAC9C,OAAO,EACL,yBAAyB,EACzB,KAAK,cAAc,EACnB,KAAK,mBAAmB,GACzB,MAAM,gBAAgB,CAAA;AACvB,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AACrD,YAAY,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AACjD,YAAY,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA"}
@@ -0,0 +1,3 @@
1
+ export { honoCapabilityHost } from './hono.js';
2
+ export { createCapabilityLifecycle, } from './lifecycle.js';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../capabilities/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAA;AAC9C,OAAO,EACL,yBAAyB,GAG1B,MAAM,gBAAgB,CAAA"}
@@ -0,0 +1,17 @@
1
+ import type { Capabilities } from './contract.js';
2
+ import type { Sleep } from './sleep.js';
3
+ /** Host adapter that keeps a promise alive after the response is returned. */
4
+ export type CapabilityHost = {
5
+ register(promise: Promise<unknown>): void;
6
+ sleep?: Sleep;
7
+ };
8
+ export type CapabilityLifecycle = {
9
+ capabilities: Capabilities;
10
+ settle(): Promise<void>;
11
+ };
12
+ /**
13
+ * Create one capability lifecycle. Hosts retain deferred promises; callers without
14
+ * a retention host drain them before completing so work is never abandoned.
15
+ */
16
+ export declare function createCapabilityLifecycle(host?: CapabilityHost): CapabilityLifecycle;
17
+ //# sourceMappingURL=lifecycle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lifecycle.d.ts","sourceRoot":"","sources":["../../capabilities/lifecycle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AACjD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAIvC,8EAA8E;AAC9E,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI,CAAA;IACzC,KAAK,CAAC,EAAE,KAAK,CAAA;CACd,CAAA;AAED,MAAM,MAAM,mBAAmB,GAAG;IAChC,YAAY,EAAE,YAAY,CAAA;IAC1B,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CACxB,CAAA;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,CAAC,EAAE,cAAc,GAAG,mBAAmB,CA6BpF"}
@@ -0,0 +1,37 @@
1
+ import { sleep } from './sleep.js';
2
+ /**
3
+ * Create one capability lifecycle. Hosts retain deferred promises; callers without
4
+ * a retention host drain them before completing so work is never abandoned.
5
+ */
6
+ export function createCapabilityLifecycle(host) {
7
+ const pending = [];
8
+ return {
9
+ capabilities: {
10
+ defer(task) {
11
+ const promise = Promise.resolve().then(task);
12
+ if (host)
13
+ host.register(promise);
14
+ else
15
+ pending.push(promise);
16
+ },
17
+ sleep: host?.sleep ?? sleep,
18
+ },
19
+ async settle() {
20
+ if (host || pending.length === 0)
21
+ return;
22
+ let cursor = 0;
23
+ while (cursor < pending.length) {
24
+ const batch = pending.slice(cursor);
25
+ cursor = pending.length;
26
+ const results = await Promise.allSettled(batch);
27
+ for (const result of results) {
28
+ if (result.status === 'rejected') {
29
+ // oxlint-disable-next-line no-console
30
+ console.error('[capabilities] deferred task failed:', result.reason);
31
+ }
32
+ }
33
+ }
34
+ },
35
+ };
36
+ }
37
+ //# sourceMappingURL=lifecycle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../../capabilities/lifecycle.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAalC;;;GAGG;AACH,MAAM,UAAU,yBAAyB,CAAC,IAAqB;IAC7D,MAAM,OAAO,GAAuB,EAAE,CAAA;IAEtC,OAAO;QACL,YAAY,EAAE;YACZ,KAAK,CAAC,IAAI;gBACR,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;gBAC5C,IAAI,IAAI;oBAAE,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;;oBAC3B,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;YAC5B,CAAC;YACD,KAAK,EAAE,IAAI,EAAE,KAAK,IAAI,KAAK;SAC5B;QACD,KAAK,CAAC,MAAM;YACV,IAAI,IAAI,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAM;YAExC,IAAI,MAAM,GAAG,CAAC,CAAA;YACd,OAAO,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;gBAC/B,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;gBACnC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAA;gBACvB,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAA;gBAC/C,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;oBAC7B,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;wBACjC,sCAAsC;wBACtC,OAAO,CAAC,KAAK,CAAC,sCAAsC,EAAE,MAAM,CAAC,MAAM,CAAC,CAAA;oBACtE,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;KACF,CAAA;AACH,CAAC"}
@@ -0,0 +1,4 @@
1
+ export type Sleep = (durationMs: number) => Promise<void>;
2
+ /** Default non-durable sleep used when the host does not provide one. */
3
+ export declare function sleep(durationMs: number): Promise<void>;
4
+ //# sourceMappingURL=sleep.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sleep.d.ts","sourceRoot":"","sources":["../../capabilities/sleep.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,KAAK,GAAG,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;AAEzD,yEAAyE;AACzE,wBAAsB,KAAK,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAM7D"}
@@ -0,0 +1,8 @@
1
+ /** Default non-durable sleep used when the host does not provide one. */
2
+ export async function sleep(durationMs) {
3
+ if (!Number.isFinite(durationMs) || durationMs < 0) {
4
+ throw new RangeError('Sleep duration must be a finite, non-negative number');
5
+ }
6
+ await new Promise((resolve) => setTimeout(resolve, durationMs));
7
+ }
8
+ //# sourceMappingURL=sleep.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sleep.js","sourceRoot":"","sources":["../../capabilities/sleep.ts"],"names":[],"mappings":"AAEA,yEAAyE;AACzE,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,UAAkB;IAC5C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;QACnD,MAAM,IAAI,UAAU,CAAC,sDAAsD,CAAC,CAAA;IAC9E,CAAC;IAED,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,CAAA;AACvE,CAAC"}
@@ -6,7 +6,8 @@
6
6
  * collected into an array. Notifications are dropped from the response;
7
7
  * streams and binary results are rejected (those need their own connection).
8
8
  */
9
- import type { KernelAPI } from '@astrale-os/kernel-api';
9
+ import type { CapabilityHost } from '../capabilities/index.js';
10
+ import type { Dispatcher } from '../invocation/index.js';
10
11
  import { type CodecEntry } from './codec.js';
11
- export declare function handleBatch(raw: unknown[], kernel: KernelAPI, codecEntry: CodecEntry, req: Request, corsHeaders: Record<string, string>): Promise<Response>;
12
+ export declare function handleBatch(raw: unknown[], dispatcher: Dispatcher, codecEntry: CodecEntry, req: Request, corsHeaders: Record<string, string>, host?: CapabilityHost): Promise<Response>;
12
13
  //# sourceMappingURL=batch.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"batch.d.ts","sourceRoot":"","sources":["../../envelope/batch.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAsB,MAAM,wBAAwB,CAAA;AAa3E,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,YAAY,CAAA;AAG5C,wBAAsB,WAAW,CAC/B,GAAG,EAAE,OAAO,EAAE,EACd,MAAM,EAAE,SAAS,EACjB,UAAU,EAAE,UAAU,EACtB,GAAG,EAAE,OAAO,EACZ,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAClC,OAAO,CAAC,QAAQ,CAAC,CAmFnB"}
1
+ {"version":3,"file":"batch.d.ts","sourceRoot":"","sources":["../../envelope/batch.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAaH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AAC9D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AAIxD,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,YAAY,CAAA;AAG5C,wBAAsB,WAAW,CAC/B,GAAG,EAAE,OAAO,EAAE,EACd,UAAU,EAAE,UAAU,EACtB,UAAU,EAAE,UAAU,EACtB,GAAG,EAAE,OAAO,EACZ,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACnC,IAAI,CAAC,EAAE,cAAc,GACpB,OAAO,CAAC,QAAQ,CAAC,CAuFnB"}