@makaio/framework 1.0.0-dev-1790165101280 → 1.0.0-dev-1790175294701

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 (96) hide show
  1. package/dist/.makaio-build.json +2 -2
  2. package/dist/bridge/pty-bridge.cjs +222 -0
  3. package/dist/bus/index.d.mts +1 -1
  4. package/dist/bus/index.mjs +1 -1
  5. package/dist/{bus-D4DBDaoS.mjs → bus-30AlabEz.mjs} +1 -1
  6. package/dist/contracts/adapter/index.d.mts +2 -2
  7. package/dist/contracts/adapter/schemas/session-lineage.d.mts +1 -1
  8. package/dist/contracts/artifact/index.d.mts +2 -2
  9. package/dist/contracts/automation-trigger/index.d.mts +1 -1
  10. package/dist/contracts/capabilities/index.d.mts +1 -1
  11. package/dist/contracts/client/index.d.mts +2 -2
  12. package/dist/contracts/extension/index.d.mts +4 -4
  13. package/dist/contracts/harness/index.d.mts +1 -1
  14. package/dist/contracts/index.d.mts +86 -86
  15. package/dist/contracts/index.mjs +1 -1
  16. package/dist/contracts/materialization/index.d.mts +2 -2
  17. package/dist/contracts/native-session-supervisor/index.d.mts +1 -1
  18. package/dist/contracts/reaction/index.d.mts +1 -1
  19. package/dist/contracts/reaction/index.mjs +1 -1
  20. package/dist/contracts/session/index.d.mts +2 -2
  21. package/dist/contracts/skill/index.d.mts +1 -1
  22. package/dist/contracts/worker/index.d.mts +1 -1
  23. package/dist/contracts/workflow/index.d.mts +2 -2
  24. package/dist/{contribution-kpR61mnG.d.mts → contribution-DTb65rRN.d.mts} +1 -1
  25. package/dist/{extension-context-CmhBCbbq.d.mts → extension-context-DH84KOm9.d.mts} +3 -3
  26. package/dist/framework-packages-mquh5_Yw.mjs +1 -0
  27. package/dist/{hook-responses-C3nUIm-6.d.mts → hook-responses-OETFKaAL.d.mts} +1 -1
  28. package/dist/{index-C9Dz8UoK2.d.mts → index-2YW8DTb62.d.mts} +6 -6
  29. package/dist/{index-04uTOEVU.d.mts → index-7pt_bh4z.d.mts} +6 -6
  30. package/dist/{index-D5Lw1UsO.d.mts → index-B1iXL1pW.d.mts} +8 -8
  31. package/dist/{index-CRjWqvy02.d.mts → index-BMr77str2.d.mts} +8 -8
  32. package/dist/{index-xad0YUyF.d.mts → index-BRXETFym.d.mts} +10 -2
  33. package/dist/{index-8HtSFrzb.d.mts → index-BVN64wQx.d.mts} +16 -16
  34. package/dist/{index-D5BLD2Pw.d.mts → index-BgkQiruC.d.mts} +7 -7
  35. package/dist/{index-J6C4thLY.d.mts → index-Bgz81LHZ.d.mts} +1 -1
  36. package/dist/{index-ul45YFff.d.mts → index-BusmMFMN.d.mts} +4 -4
  37. package/dist/{index-BM53WQaQ.d.mts → index-CVRQS5jk.d.mts} +1 -1
  38. package/dist/{index-CFMaXW-s.d.mts → index-Cu8k2ZGe.d.mts} +42 -42
  39. package/dist/{index-BYwt4CNf.d.mts → index-D8V1DhrY.d.mts} +79 -79
  40. package/dist/{index-LCumcYK12.d.mts → index-DIEnLLhi2.d.mts} +37 -37
  41. package/dist/{index-DVo_rb2w2.d.mts → index-DPsQ_cFG2.d.mts} +11 -11
  42. package/dist/{index-BTLbhl35.d.mts → index-DWKSiTxX.d.mts} +27 -27
  43. package/dist/{index-CLwnkYRD.d.mts → index-DxtUM-qd.d.mts} +1 -1
  44. package/dist/{index-CpGWwlRN.d.mts → index-Mk478DlF.d.mts} +8 -8
  45. package/dist/{index-CkE9MwNX.d.mts → index-oE2q0pTG.d.mts} +1 -1
  46. package/dist/{index-aAo9ugCm.d.mts → index-wGlFWRXg.d.mts} +4 -4
  47. package/dist/kernel/extension/index.d.mts +2 -2
  48. package/dist/kernel/index.d.mts +2 -2
  49. package/dist/kernel/observability/index.d.mts +1 -1
  50. package/dist/{namespace-C5tKjqgb.d.mts → namespace-B9iQN3FQ.d.mts} +4 -4
  51. package/dist/{namespace-BEi98VfQ.d.mts → namespace-Bz0ZDWhE.d.mts} +18 -18
  52. package/dist/{namespace-B1FBjHfn.d.mts → namespace-C1-ZAKEG.d.mts} +6 -6
  53. package/dist/{namespace-D6W4Erwp.d.mts → namespace-DAzOxaux.d.mts} +2 -2
  54. package/dist/{namespace-CHSwZhH7.d.mts → namespace-h7gq_v5U.d.mts} +2 -2
  55. package/dist/package.json +1 -1
  56. package/dist/reaction-DVa5lwm5.mjs +1 -0
  57. package/dist/{schemas-BXkSHQaF.d.mts → schemas-BTJvvq9Y.d.mts} +2 -2
  58. package/dist/{schemas-Cb9OJ9va.d.mts → schemas-CBDNnyz4.d.mts} +1 -1
  59. package/dist/{schemas-Bv7ecHxV.d.mts → schemas-Dec5VtBU.d.mts} +8 -8
  60. package/dist/{schemas-BzSB9u68.d.mts → schemas-Dyp3rHZ7.d.mts} +4 -4
  61. package/dist/services/adapter-runtime/index.d.mts +3 -3
  62. package/dist/services/adapter-runtime/namespace.d.mts +1 -1
  63. package/dist/services/adapter-runtime/schemas.d.mts +1 -1
  64. package/dist/services/adapter-subsystem/index.d.mts +2 -2
  65. package/dist/services/adapter-subsystem/namespace.d.mts +1 -1
  66. package/dist/services/context-rules/index.d.mts +3 -3
  67. package/dist/services/execution-target/index.d.mts +2 -2
  68. package/dist/services/execution-target/namespace.d.mts +1 -1
  69. package/dist/services/execution-target/schemas.d.mts +1 -1
  70. package/dist/services/filesystem/namespace.d.mts +12 -12
  71. package/dist/services/filesystem/schemas.d.mts +6 -6
  72. package/dist/services/harness/index.d.mts +3 -3
  73. package/dist/services/index.d.mts +64 -31
  74. package/dist/services/index.mjs +1 -1
  75. package/dist/services/provider-context/index.d.mts +1 -1
  76. package/dist/services/session/handlers/index.d.mts +1 -1
  77. package/dist/services/session/index.d.mts +5 -5
  78. package/dist/services/session/messages/namespace.d.mts +1 -1
  79. package/dist/services/session/session-events/namespace.d.mts +1 -1
  80. package/dist/services/settings/namespace.d.mts +8 -8
  81. package/dist/services/settings/storage/extension-configs/namespace.d.mts +3 -3
  82. package/dist/services/subagent-template/index.d.mts +1 -1
  83. package/dist/services/subagent-template/schemas.d.mts +1 -1
  84. package/dist/services/tools/index.mjs +1 -1
  85. package/dist/services/workflow-transitions/index.mjs +1 -1
  86. package/dist/{session-lineage-CmP7L5g2.d.mts → session-lineage-BQ9NWlt6.d.mts} +1 -1
  87. package/dist/{tools-ByDy0ueE.mjs → tools-K3DWA4Jr.mjs} +1 -1
  88. package/dist/{transition-B0qsutdE.d.mts → transition-CSN6QoMp.d.mts} +1 -1
  89. package/dist/{types-BP_P1izV.d.mts → types-DTpwvvY9.d.mts} +15 -15
  90. package/dist/{view-builder-nKz9DKfE.d.mts → view-builder-cjQZJmTY.d.mts} +7 -7
  91. package/dist/workflow-engine/index.d.mts +16 -16
  92. package/dist/{workflow-transitions-UOXY-VZa.mjs → workflow-transitions-C2BLDE5N.mjs} +1 -1
  93. package/package.json +1 -1
  94. package/dist/framework-packages-C2tvdFmP.mjs +0 -1
  95. package/dist/reaction-C8WbJqLk.mjs +0 -1
  96. package/dist/{schemas-rliUGyrt.d.mts → schemas-CU2NE5Lg.d.mts} +1 -1
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 1,
3
- "fingerprint": "04c3f11f84bf950ee5c63757f56782f5276a7c582f14cb8a3867509a6c463ad0",
4
- "builtAt": "2026-09-23T12:06:14.859Z",
3
+ "fingerprint": "f56ac43695e3b3616e7286d6e05800202cbafd667e9eba1e3561a5f8ed882c41",
4
+ "builtAt": "2026-09-23T14:55:42.168Z",
5
5
  "declarations": true,
6
6
  "declarationBackend": "tsc"
7
7
  }
@@ -0,0 +1,222 @@
1
+ /**
2
+ * PTY Bridge — Node.js subprocess
3
+ *
4
+ * Runs under plain Node.js (not Bun) so it can load the node-pty native addon.
5
+ * Speaks newline-delimited JSON-RPC over stdin/stdout, multiplexing any number
6
+ * of PTY sessions for the Bun host process.
7
+ *
8
+ * Protocol (stdin, Bun → bridge):
9
+ * { "id": <number>, "cmd": "spawn", "file": <string>, "args": <string[]>,
10
+ * "options": { "cwd"?: <string>, "name"?: <string>, "cols"?: <number>,
11
+ * "rows"?: <number>, "env"?: <Record<string,string>>,
12
+ * "inheritEnvironment"?: <boolean> } }
13
+ * { "id": <number>, "cmd": "input", "ptyId": <number>, "data": <UTF-8 base64> }
14
+ * { "id": <number>, "cmd": "resize", "ptyId": <number>, "cols": <number>, "rows": <number> }
15
+ * { "id": <number>, "cmd": "kill", "ptyId": <number>, "signal"?: <string> }
16
+ *
17
+ * Protocol (stdout, bridge → Bun):
18
+ * { "id": <number>, "ptyId": <number>, "event": "spawned", "pid": <number>, "process": <string> }
19
+ * { "ptyId": <number>, "event": "data", "data": <UTF-8 base64> }
20
+ * { "ptyId": <number>, "event": "exit", "exitCode": <number>, "signal": <number> }
21
+ * { "id": <number>, "event": "error", "message": <string> }
22
+ */
23
+
24
+ 'use strict';
25
+
26
+ const pty = require('node-pty');
27
+ const readline = require('readline');
28
+
29
+ /** @type {Map<number, import('node-pty').IPty>} */
30
+ const sessions = new Map();
31
+
32
+ let nextPtyId = 1;
33
+
34
+ /**
35
+ * Emit a JSON-RPC event to the Bun host via stdout.
36
+ * @param {Record<string, unknown>} payload
37
+ * @example
38
+ */
39
+ function emit(payload) {
40
+ process.stdout.write(JSON.stringify(payload) + '\n');
41
+ }
42
+
43
+ /**
44
+ * Log a debug message to stderr (never interferes with the JSON-RPC protocol).
45
+ * @param {string} message
46
+ * @example
47
+ */
48
+ function debug(message) {
49
+ process.stderr.write(`[pty-bridge] ${message}\n`);
50
+ }
51
+
52
+ /**
53
+ * Kill and delete all active PTY sessions.
54
+ * @example
55
+ */
56
+ function disposeAll() {
57
+ for (const [id, proc] of sessions) {
58
+ try {
59
+ proc.kill();
60
+ } catch {
61
+ // Ignore — process may have already exited.
62
+ }
63
+ sessions.delete(id);
64
+ }
65
+ }
66
+
67
+ /**
68
+ * Handle a "spawn" command.
69
+ * @param {{ id: number; file: string; args: string[]; options: Record<string, unknown> }} cmd
70
+ * @example
71
+ */
72
+ function handleSpawn(cmd) {
73
+ const ptyId = nextPtyId++;
74
+ const { id, file, args, options } = cmd;
75
+ const env =
76
+ options.env !== null && typeof options.env === 'object' && !Array.isArray(options.env)
77
+ ? /** @type {Record<string, string>} */ (options.env)
78
+ : undefined;
79
+
80
+ /** @type {import('node-pty').IWindowsPtyForkOptions | import('node-pty').IPtyForkOptions} */
81
+ const spawnOptions = {
82
+ name: typeof options.name === 'string' ? options.name : 'xterm-256color',
83
+ cols: typeof options.cols === 'number' ? options.cols : 80,
84
+ rows: typeof options.rows === 'number' ? options.rows : 24,
85
+ cwd: typeof options.cwd === 'string' ? options.cwd : undefined,
86
+ env: options.inheritEnvironment === true && env !== undefined ? { ...process.env, ...env } : env,
87
+ };
88
+
89
+ let proc;
90
+ try {
91
+ proc = pty.spawn(file, args, spawnOptions);
92
+ } catch (err) {
93
+ emit({ id, event: 'error', message: err instanceof Error ? err.message : String(err) });
94
+ return;
95
+ }
96
+
97
+ sessions.set(ptyId, proc);
98
+ debug(`spawned ptyId=${ptyId} pid=${proc.pid} file=${file}`);
99
+
100
+ emit({ id, ptyId, event: 'spawned', pid: proc.pid, process: proc.process });
101
+
102
+ proc.onData((data) => {
103
+ // The backend contract carries terminal output as JavaScript text strings.
104
+ emit({ ptyId, event: 'data', data: Buffer.from(data, 'utf8').toString('base64') });
105
+ });
106
+
107
+ proc.onExit(({ exitCode, signal }) => {
108
+ debug(`ptyId=${ptyId} exited exitCode=${exitCode} signal=${signal}`);
109
+ sessions.delete(ptyId);
110
+ emit({ ptyId, event: 'exit', exitCode, signal: signal ?? 0 });
111
+ });
112
+ }
113
+
114
+ /**
115
+ * Handle an "input" command — write base64-decoded data to the PTY.
116
+ * @param {{ id: number; ptyId: number; data: string }} cmd
117
+ * @example
118
+ */
119
+ function handleInput(cmd) {
120
+ const proc = sessions.get(cmd.ptyId);
121
+ if (!proc) {
122
+ emit({ id: cmd.id, event: 'error', message: `unknown ptyId: ${cmd.ptyId}` });
123
+ return;
124
+ }
125
+ // Input originates as a JavaScript string, encoded as UTF-8 before base64 transport.
126
+ const decoded = Buffer.from(cmd.data, 'base64').toString('utf8');
127
+ proc.write(decoded);
128
+ }
129
+
130
+ /**
131
+ * Handle a "resize" command.
132
+ * @param {{ id: number; ptyId: number; cols: number; rows: number }} cmd
133
+ * @example
134
+ */
135
+ function handleResize(cmd) {
136
+ const proc = sessions.get(cmd.ptyId);
137
+ if (!proc) {
138
+ emit({ id: cmd.id, event: 'error', message: `unknown ptyId: ${cmd.ptyId}` });
139
+ return;
140
+ }
141
+ proc.resize(cmd.cols, cmd.rows);
142
+ }
143
+
144
+ /**
145
+ * Handle a "kill" command.
146
+ * @param {{ id: number; ptyId: number; signal?: string }} cmd
147
+ * @example
148
+ */
149
+ function handleKill(cmd) {
150
+ const proc = sessions.get(cmd.ptyId);
151
+ if (!proc) {
152
+ emit({ id: cmd.id, event: 'error', message: `unknown ptyId: ${cmd.ptyId}` });
153
+ return;
154
+ }
155
+ proc.kill(cmd.signal ?? 'SIGHUP');
156
+ }
157
+
158
+ // ── Stdin / readline setup ───────────────────────────────────────────────────
159
+
160
+ const rl = readline.createInterface({ input: process.stdin, crlfDelay: Infinity });
161
+
162
+ rl.on('line', (line) => {
163
+ const trimmed = line.trim();
164
+ if (!trimmed) return;
165
+
166
+ /** @type {Record<string, unknown>} */
167
+ let cmd;
168
+ try {
169
+ cmd = JSON.parse(trimmed);
170
+ } catch (err) {
171
+ debug(`malformed JSON: ${trimmed}`);
172
+ return;
173
+ }
174
+
175
+ try {
176
+ switch (cmd.cmd) {
177
+ case 'spawn':
178
+ handleSpawn(/** @type {Parameters<typeof handleSpawn>[0]} */ (cmd));
179
+ break;
180
+ case 'input':
181
+ handleInput(/** @type {Parameters<typeof handleInput>[0]} */ (cmd));
182
+ break;
183
+ case 'resize':
184
+ handleResize(/** @type {Parameters<typeof handleResize>[0]} */ (cmd));
185
+ break;
186
+ case 'kill':
187
+ handleKill(/** @type {Parameters<typeof handleKill>[0]} */ (cmd));
188
+ break;
189
+ default:
190
+ debug(`unknown command: ${String(cmd.cmd)}`);
191
+ }
192
+ } catch (err) {
193
+ const message = err instanceof Error ? err.message : String(err);
194
+ debug(`error handling command: ${message}`);
195
+ if (cmd && cmd.id != null) {
196
+ emit({ id: cmd.id, event: 'error', message });
197
+ }
198
+ }
199
+ });
200
+
201
+ // When the host closes stdin the bridge shuts down cleanly.
202
+ rl.on('close', () => {
203
+ debug('stdin closed — shutting down');
204
+ disposeAll();
205
+ process.exit(0);
206
+ });
207
+
208
+ // ── Signal handling ──────────────────────────────────────────────────────────
209
+
210
+ /**
211
+ *
212
+ * @param signal
213
+ * @example
214
+ */
215
+ function shutdown(signal) {
216
+ debug(`received ${signal} — shutting down`);
217
+ disposeAll();
218
+ process.exit(0);
219
+ }
220
+
221
+ process.on('SIGTERM', () => shutdown('SIGTERM'));
222
+ process.on('SIGINT', () => shutdown('SIGINT'));
@@ -4055,8 +4055,8 @@ declare module '@makaio/contracts' {
4055
4055
  //#region core/contracts/src/skill/schemas.d.ts
4056
4056
  /** Trigger that activated or reinjected a skill. */
4057
4057
  declare const SkillActivationTriggerSchema: z.ZodEnum<{
4058
- auto: "auto";
4059
4058
  user: "user";
4059
+ auto: "auto";
4060
4060
  model: "model";
4061
4061
  reinjection: "reinjection";
4062
4062
  }>;
@@ -1 +1 @@
1
- import{$ as e,A as t,B as n,C as r,D as i,E as a,F as o,G as s,H as c,I as l,J as u,K as d,L as ee,M as te,N as f,O as ne,P as re,Q as p,R as m,S as h,T as ie,U as ae,V as g,W as oe,X as se,Y as ce,Z as le,_ as ue,a as de,at as fe,b as pe,d as _,et as me,f as he,g as v,h as y,i as ge,it as b,j as x,k as S,l as C,m as w,nt as T,o as E,p as D,q as O,r as k,rt as A,s as j,t as M,tt as N,u as P,v as F,w as I,x as L,y as _e,z as ve}from"../bus-D4DBDaoS.mjs";import{z as R}from"zod";const z={"channel.open":{request:R.object({endpoint:R.string(),token:R.string(),clientPubKey:R.string(),transports:R.array(R.string())}),response:R.object({channelId:R.string(),endpointPubKey:R.string()})}};function B(e){let t=e instanceof Uint8Array?e:new Uint8Array(e),n=Array(t.length);for(let e=0;e<t.length;e++)n[e]=String.fromCharCode(t[e]);return btoa(n.join(``))}function V(e){let t=atob(e),n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e);return n.buffer}async function H(){return globalThis.crypto.subtle.generateKey({name:`ECDH`,namedCurve:`P-256`},!1,[`deriveKey`])}async function U(e){return B(await globalThis.crypto.subtle.exportKey(`raw`,e))}async function W(e){let t=V(e);return globalThis.crypto.subtle.importKey(`raw`,t,{name:`ECDH`,namedCurve:`P-256`},!1,[])}async function G(e,t){return globalThis.crypto.subtle.deriveKey({name:`ECDH`,public:t},e,{name:`AES-GCM`,length:256},!1,[`encrypt`,`decrypt`])}async function K(e,t,n){let r=globalThis.crypto.getRandomValues(new Uint8Array(12)),i=new TextEncoder().encode(t),a={name:`AES-GCM`,iv:r};n!==void 0&&(a.additionalData=new TextEncoder().encode(n));let o=await globalThis.crypto.subtle.encrypt(a,e,i);return{iv:B(r),data:B(o)}}async function q(e,t,n){let r=V(t.iv),i=V(t.data),a={name:`AES-GCM`,iv:r};n!==void 0&&(a.additionalData=new TextEncoder().encode(n));let o=await globalThis.crypto.subtle.decrypt(a,e,i);return new TextDecoder().decode(o)}function J(e,t){return{subject:t,$meta:{namespace:`channel:${e}`,isRequest:!1,payload:{},local:!1,channel:!1}}}function Y(e,t){return{subject:t,$meta:{namespace:`channel:${e}`,isRequest:!0,payload:{},local:!1,channel:!1}}}var X=class{channelId;sharedKey;context;transportNames;cleanups=[];pendingRequests=new Set;closed=!1;constructor(e,t,n,r){this.channelId=e,this.sharedKey=t,this.context=n,this.transportNames=r;let i=J(e,`$close`);this.cleanups.push(this.registerEventHandler(i,t,e=>{this.handlePeerClose()}))}on(e,t,n){this.assertOpen();let r=this.requireKey(),i=e.$meta.isRequest?this.registerRequestHandler(e,r,t,n):this.registerEventHandler(e,r,t,n);return this.cleanups.push(i),()=>{i();let e=this.cleanups.indexOf(i);e!==-1&&this.cleanups.splice(e,1)}}once(e,t){this.assertOpen();let n=this.requireKey(),r=null,i=(e=>{let n=r;if(r=null,n){let e=this.cleanups.indexOf(n);e!==-1&&this.cleanups.splice(e,1)}return n?.(),t(e)});return r=e.$meta.isRequest?this.registerRequestHandler(e,n,i):this.registerEventHandler(e,n,i),this.cleanups.push(r),()=>{if(r){let e=r;r=null;let t=this.cleanups.indexOf(e);t!==-1&&this.cleanups.splice(t,1),e()}}}async emit(e,t){this.assertOpen();let n=this.requireKey(),r=J(this.channelId,e.subject),i=await K(n,JSON.stringify(t),`${this.channelId}:${e.subject}:evt`);await w(this.context,r,i,{...this.transportNames?{transports:[...this.transportNames]}:{}})}async request(e,t,n){this.assertOpen();let r=this.requireKey(),i=new AbortController;this.pendingRequests.add(i);try{let a=Y(this.channelId,e.subject),o=await K(r,JSON.stringify(t),`${this.channelId}:${e.subject}:req`),s=await q(r,await _(this.context,a,o,{signal:i.signal,...n?.timeout===void 0?{}:{timeout:n.timeout},...this.transportNames?{transports:[...this.transportNames]}:{}}),`${this.channelId}:${e.subject}:res`);return JSON.parse(s)}finally{this.pendingRequests.delete(i)}}async requestOptional(e,t,n){try{return{handled:!0,data:await this.request(e,t,n)}}catch(e){if(e instanceof l)return{handled:!1};throw e}}close(){if(this.closed)return;this.closed=!0;let e=this.sharedKey;if(e){let t=J(this.channelId,`$close`);K(e,JSON.stringify({}),`${this.channelId}:$close:evt`).then(e=>w(this.context,t,e,{...this.transportNames?{transports:[...this.transportNames]}:{}})).catch(()=>{})}this.abortPendingRequests(),this.runCleanups(),this.sharedKey=null}assertOpen(){if(this.closed)throw new g(this.channelId)}requireKey(){return this.sharedKey}registerEventHandler(e,t,n,r){let i=J(this.channelId,e.subject),a=`${this.channelId}:${e.subject}:evt`;return v(this.context,i,async e=>{let r=await q(t,e.payload,a),i=JSON.parse(r);return n({...e,payload:i})},r)}registerRequestHandler(e,t,n,r){let i=Y(this.channelId,e.subject),a=`${this.channelId}:${e.subject}:req`,o=`${this.channelId}:${e.subject}:res`;return v(this.context,i,async e=>{let r=await q(t,e.payload,a),i=JSON.parse(r),s,c=e=>{s={value:e}},l=e=>{s={value:{...s?.value??{},...e}}},u=async()=>{let n=s;if(await e.next(),n!==void 0){s=n;return}let r=e.result;if(r!==void 0){let e=await q(t,r,o);s={value:JSON.parse(e)}}};if(await n({...e,payload:i,get result(){return s?.value},setResult:c,extendResult:l,next:u}),s!==void 0){let n=await K(t,JSON.stringify(s.value),o);e.setResult(n)}},r)}handlePeerClose(){this.closed||(this.closed=!0,this.abortPendingRequests(),this.runCleanups(),this.sharedKey=null)}abortPendingRequests(){let e=new g(this.channelId);for(let t of this.pendingRequests)t.abort(e);this.pendingRequests.clear()}runCleanups(){for(let e of this.cleanups)try{e()}catch{}this.cleanups.length=0}};function Z(e){return e.namespaceRegistry.registerNamespace(p(`system`,z)).subjects.channel.open}function ye(e,t,n,r){let i=v(e,Z(e),async i=>{if(i.payload.endpoint!==t){await i.next();return}if(i.payload.token!==r.token)throw new c(t);let{publicKey:a,privateKey:o}=await H(),s=await G(o,await W(i.payload.clientPubKey)),l=globalThis.crypto.randomUUID(),u=new Set(e.transportRegistry.names()),d=new X(l,s,e,(i.payload.transports??[]).filter(e=>u.has(e)));try{n(d),i.setResult({channelId:l,endpointPubKey:await U(a)})}catch(e){throw d.close(),e}});return{name:t,token:r.token,close:i}}async function be(e,t,n){let r=Z(e),{publicKey:i,privateKey:a}=await H(),o=await U(i),s=n.transports!==void 0,c=s?[...n.transports]:[...e.transportRegistry.names()],l=s?{transports:c}:void 0,u=await _(e,r,{endpoint:t,token:n.token,clientPubKey:o,transports:c},l),d=await G(a,await W(u.endpointPubKey));return new X(u.channelId,d,e,c)}var xe=class{pending;constructor(){this.pending=new Map}track(e,t,n){return new Promise((r,i)=>{if(n?.aborted){i(s(n.reason));return}let a=t===0?void 0:setTimeout(()=>{let n=this.pending.get(e);n!==void 0&&(clearTimeout(n.timeoutId),n.removeAbortListener?.(),this.pending.delete(e),n.reject(new f(e,t)))},t);if(this.pending.set(e,{resolve:r,reject:i,timeoutId:a,removeAbortListener:void 0}),n){let t=()=>{this.reject(e,s(n.reason))};n.addEventListener(`abort`,t,{once:!0});let r=()=>{n.removeEventListener(`abort`,t)},i=this.pending.get(e);i&&(i.removeAbortListener=r)}n?.aborted&&this.reject(e,s(n.reason))})}resolve(e,t){let n=this.pending.get(e);n&&(clearTimeout(n.timeoutId),n.removeAbortListener?.(),this.pending.delete(e),n.resolve(t))}reject(e,t){let n=this.pending.get(e);n&&(clearTimeout(n.timeoutId),n.removeAbortListener?.(),this.pending.delete(e),n.reject(t))}cancel(e,t){this.reject(e,t??s(void 0))}rejectAll(e){for(let[t,n]of this.pending.entries())clearTimeout(n.timeoutId),n.removeAbortListener?.(),n.reject(e);this.pending.clear()}cleanup(){this.rejectAll(Error(`Transport disconnected`))}};const Se=p(`bus:lifecycle`,de).subjects;function Ce(e,t){let n={},r={},i={};for(let[t,a]of e)n[t]=a.priorities,r[t]=a.deliveryClass??`relayable`,a.filter!==void 0&&(i[t]=a.filter);return{type:`subscribe`,...t===void 0?{}:{ackId:t},subjects:n,deliveryClasses:r,...Object.keys(i).length>0&&{filters:i}}}function we(e,t){return{type:`unsubscribe`,...t===void 0?{}:{ackId:t},subjects:e}}function Q(e,t){let n=e.trim();if(n.length===0||n.startsWith(`extension:`))throw Error(`Invalid extensionName: expected a non-empty extension name without the "extension:" prefix.`);let r=n;return{...p(`extension:${r}`,t.schemas),domain:r,extensions:t.extensions??{}}}function $(e,t){return`${e}.${t}`}function Te(){let e=new Map;return{register(t){let n=$(t.namespace,t.subject);return e.set(n,t),()=>{e.get(n)===t&&e.delete(n)}},get(t,n){return e.get($(t,n))}}}const Ee=x.fact.$meta.namespace,De=x.fact.subject;function Oe(e){return e.type===`event`||e.type===`request`||e.type===`broadcast`}async function ke(e,t,n,r,i,a){let o=y({message:t,direction:`outbound`,observedAt:a(),machineId:i,namespaceRegistry:n,projectorRegistry:r});for(let n of o)await e.send({type:`event`,namespace:Ee,subject:De,payload:n,messageId:`${t.messageId}:telemetry:${n.factId}`,correlationId:t.correlationId})}function Ae(e,t,n,r,i){return async function(a,o){if(!Oe(a))return!0;if(await ke(e,a,t,n,r,i),a.type===`request`)throw Error(`Projected telemetry transport cannot satisfy request responses; exclude it from request routing.`);return a.type===`broadcast`?[]:!0}}function je(e){let{inner:t,namespaceRegistry:n,projectorRegistry:r,machineId:i,now:a=Date.now}=e,o={name:e.name,send:Ae(t,n,r,i,a),onReceive(e){return t.onReceive(async()=>{})},connect(){return t.connect()},disconnect(){return t.disconnect()},subscribe(){return Promise.resolve()},unsubscribe(){return Promise.resolve()},get ready(){return t.ready},get onNewReadySession(){return t.onNewReadySession},set onNewReadySession(e){t.onNewReadySession=e},get onConnected(){return t.onConnected},set onConnected(e){t.onConnected=e},get onDisconnected(){return t.onDisconnected},set onDisconnected(e){t.onDisconnected=e},isReady(){return t.isReady?.()??!0},cancelRequest(e,n){t.cancelRequest?.(e,n)},onBroadcastResults(e,n,r){t.onBroadcastResults?.(e,n,r)}};return t.reconnect&&(o.reconnect=()=>t.reconnect()),o}export{ae as BusAbortError,d as BusError,Se as BusLifecycle,m as CONNECTION_LOST_ERROR_CODE,c as ChannelAuthError,g as ChannelClosedError,n as ChannelOnlyError,ve as ConnectionLostError,xe as CorrelationTracker,he as DEFAULT_READINESS_TIMEOUT_MS,D as DEFAULT_REQUEST_TIMEOUT_MS,pe as LOCAL_ORIGIN,ee as LocalSubjectError,M as MakaioBus,o as NO_HANDLER_ERROR_CODE,l as NoHandlerError,P as OnceAbortError,L as REMOTE_ORIGIN,re as RequestError,z as SystemChannelSchemas,f as TimeoutError,te as ValidationError,F as __resetWarnedSubjects,Ce as buildSubscribeMessage,we as buildUnsubscribeMessage,b as channelSubject,me as collectorOnlySubject,k as createBusContext,ge as createBusInstance,ye as createChannelEndpoint,Q as createExtensionNamespace,C as createFilteredBus,je as createProjectedTelemetryTransport,Te as createSubjectTelemetryProjectorRegistry,N as defaultTransports,E as defineSubjectExtension,a as deserializeTransportError,j as extendSubject,i as findInErrorChain,e as getFullSubjectForSubjectDefinition,O as getPath,ne as getSubjectFromBusMessage,h as handleCorrelationResponse,T as hostLocalRequest,S as isNoHandlerErrorForSubject,oe as isRequestCancellation,fe as isRequestSchema,A as localSubject,se as matchesAnySubscription,u as matchesFilter,le as matchesSubscription,ce as mergeFilters,be as openChannel,_e as parseBusUrl,y as projectSubjectTelemetryFacts,r as serializeTransportError,I as shouldReceiveMessage,ie as trackMessageCorrelation,t as transportErrorData,ue as waitForSubscriptionPropagation};
1
+ import{$ as e,A as t,B as n,C as r,D as i,E as a,F as o,G as s,H as c,I as l,J as u,K as d,L as ee,M as te,N as f,O as ne,P as re,Q as p,R as m,S as h,T as ie,U as ae,V as g,W as oe,X as se,Y as ce,Z as le,_ as ue,a as de,at as fe,b as pe,d as _,et as me,f as he,g as v,h as y,i as ge,it as b,j as x,k as S,l as C,m as w,nt as T,o as E,p as D,q as O,r as k,rt as A,s as j,t as M,tt as N,u as P,v as F,w as I,x as L,y as _e,z as ve}from"../bus-30AlabEz.mjs";import{z as R}from"zod";const z={"channel.open":{request:R.object({endpoint:R.string(),token:R.string(),clientPubKey:R.string(),transports:R.array(R.string())}),response:R.object({channelId:R.string(),endpointPubKey:R.string()})}};function B(e){let t=e instanceof Uint8Array?e:new Uint8Array(e),n=Array(t.length);for(let e=0;e<t.length;e++)n[e]=String.fromCharCode(t[e]);return btoa(n.join(``))}function V(e){let t=atob(e),n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e);return n.buffer}async function H(){return globalThis.crypto.subtle.generateKey({name:`ECDH`,namedCurve:`P-256`},!1,[`deriveKey`])}async function U(e){return B(await globalThis.crypto.subtle.exportKey(`raw`,e))}async function W(e){let t=V(e);return globalThis.crypto.subtle.importKey(`raw`,t,{name:`ECDH`,namedCurve:`P-256`},!1,[])}async function G(e,t){return globalThis.crypto.subtle.deriveKey({name:`ECDH`,public:t},e,{name:`AES-GCM`,length:256},!1,[`encrypt`,`decrypt`])}async function K(e,t,n){let r=globalThis.crypto.getRandomValues(new Uint8Array(12)),i=new TextEncoder().encode(t),a={name:`AES-GCM`,iv:r};n!==void 0&&(a.additionalData=new TextEncoder().encode(n));let o=await globalThis.crypto.subtle.encrypt(a,e,i);return{iv:B(r),data:B(o)}}async function q(e,t,n){let r=V(t.iv),i=V(t.data),a={name:`AES-GCM`,iv:r};n!==void 0&&(a.additionalData=new TextEncoder().encode(n));let o=await globalThis.crypto.subtle.decrypt(a,e,i);return new TextDecoder().decode(o)}function J(e,t){return{subject:t,$meta:{namespace:`channel:${e}`,isRequest:!1,payload:{},local:!1,channel:!1}}}function Y(e,t){return{subject:t,$meta:{namespace:`channel:${e}`,isRequest:!0,payload:{},local:!1,channel:!1}}}var X=class{channelId;sharedKey;context;transportNames;cleanups=[];pendingRequests=new Set;closed=!1;constructor(e,t,n,r){this.channelId=e,this.sharedKey=t,this.context=n,this.transportNames=r;let i=J(e,`$close`);this.cleanups.push(this.registerEventHandler(i,t,e=>{this.handlePeerClose()}))}on(e,t,n){this.assertOpen();let r=this.requireKey(),i=e.$meta.isRequest?this.registerRequestHandler(e,r,t,n):this.registerEventHandler(e,r,t,n);return this.cleanups.push(i),()=>{i();let e=this.cleanups.indexOf(i);e!==-1&&this.cleanups.splice(e,1)}}once(e,t){this.assertOpen();let n=this.requireKey(),r=null,i=(e=>{let n=r;if(r=null,n){let e=this.cleanups.indexOf(n);e!==-1&&this.cleanups.splice(e,1)}return n?.(),t(e)});return r=e.$meta.isRequest?this.registerRequestHandler(e,n,i):this.registerEventHandler(e,n,i),this.cleanups.push(r),()=>{if(r){let e=r;r=null;let t=this.cleanups.indexOf(e);t!==-1&&this.cleanups.splice(t,1),e()}}}async emit(e,t){this.assertOpen();let n=this.requireKey(),r=J(this.channelId,e.subject),i=await K(n,JSON.stringify(t),`${this.channelId}:${e.subject}:evt`);await w(this.context,r,i,{...this.transportNames?{transports:[...this.transportNames]}:{}})}async request(e,t,n){this.assertOpen();let r=this.requireKey(),i=new AbortController;this.pendingRequests.add(i);try{let a=Y(this.channelId,e.subject),o=await K(r,JSON.stringify(t),`${this.channelId}:${e.subject}:req`),s=await q(r,await _(this.context,a,o,{signal:i.signal,...n?.timeout===void 0?{}:{timeout:n.timeout},...this.transportNames?{transports:[...this.transportNames]}:{}}),`${this.channelId}:${e.subject}:res`);return JSON.parse(s)}finally{this.pendingRequests.delete(i)}}async requestOptional(e,t,n){try{return{handled:!0,data:await this.request(e,t,n)}}catch(e){if(e instanceof l)return{handled:!1};throw e}}close(){if(this.closed)return;this.closed=!0;let e=this.sharedKey;if(e){let t=J(this.channelId,`$close`);K(e,JSON.stringify({}),`${this.channelId}:$close:evt`).then(e=>w(this.context,t,e,{...this.transportNames?{transports:[...this.transportNames]}:{}})).catch(()=>{})}this.abortPendingRequests(),this.runCleanups(),this.sharedKey=null}assertOpen(){if(this.closed)throw new g(this.channelId)}requireKey(){return this.sharedKey}registerEventHandler(e,t,n,r){let i=J(this.channelId,e.subject),a=`${this.channelId}:${e.subject}:evt`;return v(this.context,i,async e=>{let r=await q(t,e.payload,a),i=JSON.parse(r);return n({...e,payload:i})},r)}registerRequestHandler(e,t,n,r){let i=Y(this.channelId,e.subject),a=`${this.channelId}:${e.subject}:req`,o=`${this.channelId}:${e.subject}:res`;return v(this.context,i,async e=>{let r=await q(t,e.payload,a),i=JSON.parse(r),s,c=e=>{s={value:e}},l=e=>{s={value:{...s?.value??{},...e}}},u=async()=>{let n=s;if(await e.next(),n!==void 0){s=n;return}let r=e.result;if(r!==void 0){let e=await q(t,r,o);s={value:JSON.parse(e)}}};if(await n({...e,payload:i,get result(){return s?.value},setResult:c,extendResult:l,next:u}),s!==void 0){let n=await K(t,JSON.stringify(s.value),o);e.setResult(n)}},r)}handlePeerClose(){this.closed||(this.closed=!0,this.abortPendingRequests(),this.runCleanups(),this.sharedKey=null)}abortPendingRequests(){let e=new g(this.channelId);for(let t of this.pendingRequests)t.abort(e);this.pendingRequests.clear()}runCleanups(){for(let e of this.cleanups)try{e()}catch{}this.cleanups.length=0}};function Z(e){return e.namespaceRegistry.registerNamespace(p(`system`,z)).subjects.channel.open}function ye(e,t,n,r){let i=v(e,Z(e),async i=>{if(i.payload.endpoint!==t){await i.next();return}if(i.payload.token!==r.token)throw new c(t);let{publicKey:a,privateKey:o}=await H(),s=await G(o,await W(i.payload.clientPubKey)),l=globalThis.crypto.randomUUID(),u=new Set(e.transportRegistry.names()),d=new X(l,s,e,(i.payload.transports??[]).filter(e=>u.has(e)));try{n(d),i.setResult({channelId:l,endpointPubKey:await U(a)})}catch(e){throw d.close(),e}});return{name:t,token:r.token,close:i}}async function be(e,t,n){let r=Z(e),{publicKey:i,privateKey:a}=await H(),o=await U(i),s=n.transports!==void 0,c=s?[...n.transports]:[...e.transportRegistry.names()],l=s?{transports:c}:void 0,u=await _(e,r,{endpoint:t,token:n.token,clientPubKey:o,transports:c},l),d=await G(a,await W(u.endpointPubKey));return new X(u.channelId,d,e,c)}var xe=class{pending;constructor(){this.pending=new Map}track(e,t,n){return new Promise((r,i)=>{if(n?.aborted){i(s(n.reason));return}let a=t===0?void 0:setTimeout(()=>{let n=this.pending.get(e);n!==void 0&&(clearTimeout(n.timeoutId),n.removeAbortListener?.(),this.pending.delete(e),n.reject(new f(e,t)))},t);if(this.pending.set(e,{resolve:r,reject:i,timeoutId:a,removeAbortListener:void 0}),n){let t=()=>{this.reject(e,s(n.reason))};n.addEventListener(`abort`,t,{once:!0});let r=()=>{n.removeEventListener(`abort`,t)},i=this.pending.get(e);i&&(i.removeAbortListener=r)}n?.aborted&&this.reject(e,s(n.reason))})}resolve(e,t){let n=this.pending.get(e);n&&(clearTimeout(n.timeoutId),n.removeAbortListener?.(),this.pending.delete(e),n.resolve(t))}reject(e,t){let n=this.pending.get(e);n&&(clearTimeout(n.timeoutId),n.removeAbortListener?.(),this.pending.delete(e),n.reject(t))}cancel(e,t){this.reject(e,t??s(void 0))}rejectAll(e){for(let[t,n]of this.pending.entries())clearTimeout(n.timeoutId),n.removeAbortListener?.(),n.reject(e);this.pending.clear()}cleanup(){this.rejectAll(Error(`Transport disconnected`))}};const Se=p(`bus:lifecycle`,de).subjects;function Ce(e,t){let n={},r={},i={};for(let[t,a]of e)n[t]=a.priorities,r[t]=a.deliveryClass??`relayable`,a.filter!==void 0&&(i[t]=a.filter);return{type:`subscribe`,...t===void 0?{}:{ackId:t},subjects:n,deliveryClasses:r,...Object.keys(i).length>0&&{filters:i}}}function we(e,t){return{type:`unsubscribe`,...t===void 0?{}:{ackId:t},subjects:e}}function Q(e,t){let n=e.trim();if(n.length===0||n.startsWith(`extension:`))throw Error(`Invalid extensionName: expected a non-empty extension name without the "extension:" prefix.`);let r=n;return{...p(`extension:${r}`,t.schemas),domain:r,extensions:t.extensions??{}}}function $(e,t){return`${e}.${t}`}function Te(){let e=new Map;return{register(t){let n=$(t.namespace,t.subject);return e.set(n,t),()=>{e.get(n)===t&&e.delete(n)}},get(t,n){return e.get($(t,n))}}}const Ee=x.fact.$meta.namespace,De=x.fact.subject;function Oe(e){return e.type===`event`||e.type===`request`||e.type===`broadcast`}async function ke(e,t,n,r,i,a){let o=y({message:t,direction:`outbound`,observedAt:a(),machineId:i,namespaceRegistry:n,projectorRegistry:r});for(let n of o)await e.send({type:`event`,namespace:Ee,subject:De,payload:n,messageId:`${t.messageId}:telemetry:${n.factId}`,correlationId:t.correlationId})}function Ae(e,t,n,r,i){return async function(a,o){if(!Oe(a))return!0;if(await ke(e,a,t,n,r,i),a.type===`request`)throw Error(`Projected telemetry transport cannot satisfy request responses; exclude it from request routing.`);return a.type===`broadcast`?[]:!0}}function je(e){let{inner:t,namespaceRegistry:n,projectorRegistry:r,machineId:i,now:a=Date.now}=e,o={name:e.name,send:Ae(t,n,r,i,a),onReceive(e){return t.onReceive(async()=>{})},connect(){return t.connect()},disconnect(){return t.disconnect()},subscribe(){return Promise.resolve()},unsubscribe(){return Promise.resolve()},get ready(){return t.ready},get onNewReadySession(){return t.onNewReadySession},set onNewReadySession(e){t.onNewReadySession=e},get onConnected(){return t.onConnected},set onConnected(e){t.onConnected=e},get onDisconnected(){return t.onDisconnected},set onDisconnected(e){t.onDisconnected=e},isReady(){return t.isReady?.()??!0},cancelRequest(e,n){t.cancelRequest?.(e,n)},onBroadcastResults(e,n,r){t.onBroadcastResults?.(e,n,r)}};return t.reconnect&&(o.reconnect=()=>t.reconnect()),o}export{ae as BusAbortError,d as BusError,Se as BusLifecycle,m as CONNECTION_LOST_ERROR_CODE,c as ChannelAuthError,g as ChannelClosedError,n as ChannelOnlyError,ve as ConnectionLostError,xe as CorrelationTracker,he as DEFAULT_READINESS_TIMEOUT_MS,D as DEFAULT_REQUEST_TIMEOUT_MS,pe as LOCAL_ORIGIN,ee as LocalSubjectError,M as MakaioBus,o as NO_HANDLER_ERROR_CODE,l as NoHandlerError,P as OnceAbortError,L as REMOTE_ORIGIN,re as RequestError,z as SystemChannelSchemas,f as TimeoutError,te as ValidationError,F as __resetWarnedSubjects,Ce as buildSubscribeMessage,we as buildUnsubscribeMessage,b as channelSubject,me as collectorOnlySubject,k as createBusContext,ge as createBusInstance,ye as createChannelEndpoint,Q as createExtensionNamespace,C as createFilteredBus,je as createProjectedTelemetryTransport,Te as createSubjectTelemetryProjectorRegistry,N as defaultTransports,E as defineSubjectExtension,a as deserializeTransportError,j as extendSubject,i as findInErrorChain,e as getFullSubjectForSubjectDefinition,O as getPath,ne as getSubjectFromBusMessage,h as handleCorrelationResponse,T as hostLocalRequest,S as isNoHandlerErrorForSubject,oe as isRequestCancellation,fe as isRequestSchema,A as localSubject,se as matchesAnySubscription,u as matchesFilter,le as matchesSubscription,ce as mergeFilters,be as openChannel,_e as parseBusUrl,y as projectSubjectTelemetryFacts,r as serializeTransportError,I as shouldReceiveMessage,ie as trackMessageCorrelation,t as transportErrorData,ue as waitForSubscriptionPropagation};