@pickle-pee/runtime 0.0.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 (149) hide show
  1. package/README.md +99 -0
  2. package/dist/adapters/index.d.ts +3 -0
  3. package/dist/adapters/index.js +10 -0
  4. package/dist/adapters/index.js.map +1 -0
  5. package/dist/adapters/kernel-session-adapter.d.ts +73 -0
  6. package/dist/adapters/kernel-session-adapter.js +10 -0
  7. package/dist/adapters/kernel-session-adapter.js.map +1 -0
  8. package/dist/adapters/pi-mono-event-bridge.d.ts +54 -0
  9. package/dist/adapters/pi-mono-event-bridge.js +159 -0
  10. package/dist/adapters/pi-mono-event-bridge.js.map +1 -0
  11. package/dist/adapters/pi-mono-session-adapter.d.ts +75 -0
  12. package/dist/adapters/pi-mono-session-adapter.js +490 -0
  13. package/dist/adapters/pi-mono-session-adapter.js.map +1 -0
  14. package/dist/create-app-runtime.d.ts +52 -0
  15. package/dist/create-app-runtime.js +163 -0
  16. package/dist/create-app-runtime.js.map +1 -0
  17. package/dist/domain/index.d.ts +1 -0
  18. package/dist/domain/index.js +5 -0
  19. package/dist/domain/index.js.map +1 -0
  20. package/dist/events/event-bus.d.ts +23 -0
  21. package/dist/events/event-bus.js +85 -0
  22. package/dist/events/event-bus.js.map +1 -0
  23. package/dist/events/index.d.ts +3 -0
  24. package/dist/events/index.js +6 -0
  25. package/dist/events/index.js.map +1 -0
  26. package/dist/events/runtime-event.d.ts +158 -0
  27. package/dist/events/runtime-event.js +13 -0
  28. package/dist/events/runtime-event.js.map +1 -0
  29. package/dist/governance/tool-governor.d.ts +63 -0
  30. package/dist/governance/tool-governor.js +639 -0
  31. package/dist/governance/tool-governor.js.map +1 -0
  32. package/dist/index.d.ts +33 -0
  33. package/dist/index.js +76 -0
  34. package/dist/index.js.map +1 -0
  35. package/dist/planning/index.d.ts +6 -0
  36. package/dist/planning/index.js +16 -0
  37. package/dist/planning/index.js.map +1 -0
  38. package/dist/planning/plan-engine.d.ts +49 -0
  39. package/dist/planning/plan-engine.js +174 -0
  40. package/dist/planning/plan-engine.js.map +1 -0
  41. package/dist/planning/plan-events.d.ts +14 -0
  42. package/dist/planning/plan-events.js +94 -0
  43. package/dist/planning/plan-events.js.map +1 -0
  44. package/dist/planning/plan-orchestrator.d.ts +56 -0
  45. package/dist/planning/plan-orchestrator.js +167 -0
  46. package/dist/planning/plan-orchestrator.js.map +1 -0
  47. package/dist/planning/plan-types.d.ts +36 -0
  48. package/dist/planning/plan-types.js +9 -0
  49. package/dist/planning/plan-types.js.map +1 -0
  50. package/dist/runtime-context.d.ts +21 -0
  51. package/dist/runtime-context.js +37 -0
  52. package/dist/runtime-context.js.map +1 -0
  53. package/dist/services/event-normalizer.d.ts +22 -0
  54. package/dist/services/event-normalizer.js +162 -0
  55. package/dist/services/event-normalizer.js.map +1 -0
  56. package/dist/services/index.d.ts +1 -0
  57. package/dist/services/index.js +7 -0
  58. package/dist/services/index.js.map +1 -0
  59. package/dist/session/session-events.d.ts +11 -0
  60. package/dist/session/session-events.js +52 -0
  61. package/dist/session/session-events.js.map +1 -0
  62. package/dist/session/session-facade.d.ts +88 -0
  63. package/dist/session/session-facade.js +439 -0
  64. package/dist/session/session-facade.js.map +1 -0
  65. package/dist/session/session-state.d.ts +14 -0
  66. package/dist/session/session-state.js +75 -0
  67. package/dist/session/session-state.js.map +1 -0
  68. package/dist/subagent/aggregation.d.ts +25 -0
  69. package/dist/subagent/aggregation.js +124 -0
  70. package/dist/subagent/aggregation.js.map +1 -0
  71. package/dist/subagent/index.d.ts +10 -0
  72. package/dist/subagent/index.js +29 -0
  73. package/dist/subagent/index.js.map +1 -0
  74. package/dist/subagent/path-scope.d.ts +24 -0
  75. package/dist/subagent/path-scope.js +86 -0
  76. package/dist/subagent/path-scope.js.map +1 -0
  77. package/dist/subagent/result-types.d.ts +61 -0
  78. package/dist/subagent/result-types.js +9 -0
  79. package/dist/subagent/result-types.js.map +1 -0
  80. package/dist/subagent/stop-condition.d.ts +34 -0
  81. package/dist/subagent/stop-condition.js +76 -0
  82. package/dist/subagent/stop-condition.js.map +1 -0
  83. package/dist/subagent/task-types.d.ts +48 -0
  84. package/dist/subagent/task-types.js +10 -0
  85. package/dist/subagent/task-types.js.map +1 -0
  86. package/dist/subagent/task-validator.d.ts +22 -0
  87. package/dist/subagent/task-validator.js +79 -0
  88. package/dist/subagent/task-validator.js.map +1 -0
  89. package/dist/subagent/verification.d.ts +22 -0
  90. package/dist/subagent/verification.js +55 -0
  91. package/dist/subagent/verification.js.map +1 -0
  92. package/dist/test/aggregation.test.d.ts +1 -0
  93. package/dist/test/aggregation.test.js +201 -0
  94. package/dist/test/aggregation.test.js.map +1 -0
  95. package/dist/test/create-app-runtime.test.d.ts +1 -0
  96. package/dist/test/create-app-runtime.test.js +286 -0
  97. package/dist/test/create-app-runtime.test.js.map +1 -0
  98. package/dist/test/event-bus.test.d.ts +1 -0
  99. package/dist/test/event-bus.test.js +81 -0
  100. package/dist/test/event-bus.test.js.map +1 -0
  101. package/dist/test/event-normalizer.test.d.ts +1 -0
  102. package/dist/test/event-normalizer.test.js +143 -0
  103. package/dist/test/event-normalizer.test.js.map +1 -0
  104. package/dist/test/path-scope.test.d.ts +1 -0
  105. package/dist/test/path-scope.test.js +71 -0
  106. package/dist/test/path-scope.test.js.map +1 -0
  107. package/dist/test/pi-mono-event-bridge.test.d.ts +1 -0
  108. package/dist/test/pi-mono-event-bridge.test.js +125 -0
  109. package/dist/test/pi-mono-event-bridge.test.js.map +1 -0
  110. package/dist/test/pi-mono-live.test.d.ts +1 -0
  111. package/dist/test/pi-mono-live.test.js +289 -0
  112. package/dist/test/pi-mono-live.test.js.map +1 -0
  113. package/dist/test/pi-mono-session-adapter.test.d.ts +1 -0
  114. package/dist/test/pi-mono-session-adapter.test.js +260 -0
  115. package/dist/test/pi-mono-session-adapter.test.js.map +1 -0
  116. package/dist/test/plan-engine.test.d.ts +1 -0
  117. package/dist/test/plan-engine.test.js +235 -0
  118. package/dist/test/plan-engine.test.js.map +1 -0
  119. package/dist/test/plan-events.test.d.ts +1 -0
  120. package/dist/test/plan-events.test.js +81 -0
  121. package/dist/test/plan-events.test.js.map +1 -0
  122. package/dist/test/plan-orchestrator.test.d.ts +1 -0
  123. package/dist/test/plan-orchestrator.test.js +324 -0
  124. package/dist/test/plan-orchestrator.test.js.map +1 -0
  125. package/dist/test/runtime-context.test.d.ts +1 -0
  126. package/dist/test/runtime-context.test.js +70 -0
  127. package/dist/test/runtime-context.test.js.map +1 -0
  128. package/dist/test/session-facade.test.d.ts +1 -0
  129. package/dist/test/session-facade.test.js +1011 -0
  130. package/dist/test/session-facade.test.js.map +1 -0
  131. package/dist/test/session-state.test.d.ts +1 -0
  132. package/dist/test/session-state.test.js +118 -0
  133. package/dist/test/session-state.test.js.map +1 -0
  134. package/dist/test/stop-condition.test.d.ts +1 -0
  135. package/dist/test/stop-condition.test.js +105 -0
  136. package/dist/test/stop-condition.test.js.map +1 -0
  137. package/dist/test/stubs/stub-kernel-session-adapter.d.ts +45 -0
  138. package/dist/test/stubs/stub-kernel-session-adapter.js +186 -0
  139. package/dist/test/stubs/stub-kernel-session-adapter.js.map +1 -0
  140. package/dist/test/task-validator.test.d.ts +1 -0
  141. package/dist/test/task-validator.test.js +97 -0
  142. package/dist/test/task-validator.test.js.map +1 -0
  143. package/dist/test/tool-governor.test.d.ts +1 -0
  144. package/dist/test/tool-governor.test.js +379 -0
  145. package/dist/test/tool-governor.test.js.map +1 -0
  146. package/dist/types/index.d.ts +77 -0
  147. package/dist/types/index.js +9 -0
  148. package/dist/types/index.js.map +1 -0
  149. package/package.json +28 -0
@@ -0,0 +1,286 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const vitest_1 = require("vitest");
4
+ const create_app_runtime_js_1 = require("../create-app-runtime.js");
5
+ const stub_kernel_session_adapter_js_1 = require("./stubs/stub-kernel-session-adapter.js");
6
+ const stubModel = { id: "test-model", provider: "test" };
7
+ (0, vitest_1.describe)("createAppRuntime", () => {
8
+ (0, vitest_1.it)("creates a runtime with an event bus", () => {
9
+ const adapter = new stub_kernel_session_adapter_js_1.StubKernelSessionAdapter();
10
+ const runtime = (0, create_app_runtime_js_1.createAppRuntime)({
11
+ workingDirectory: "/tmp",
12
+ mode: "print",
13
+ model: stubModel,
14
+ adapter,
15
+ });
16
+ (0, vitest_1.expect)(runtime.events).toBeDefined();
17
+ });
18
+ (0, vitest_1.it)("createSession returns an active SessionFacade", () => {
19
+ const adapter = new stub_kernel_session_adapter_js_1.StubKernelSessionAdapter();
20
+ const runtime = (0, create_app_runtime_js_1.createAppRuntime)({
21
+ workingDirectory: "/tmp",
22
+ mode: "print",
23
+ model: stubModel,
24
+ adapter,
25
+ });
26
+ const session = runtime.createSession();
27
+ (0, vitest_1.expect)(session.state.status).toBe("active");
28
+ (0, vitest_1.expect)(session.id.value).toBeTruthy();
29
+ (0, vitest_1.expect)(session.context.mode).toBe("print");
30
+ (0, vitest_1.expect)(session.context.workingDirectory).toBe("/tmp");
31
+ (0, vitest_1.expect)(session.context.model).toEqual(stubModel);
32
+ });
33
+ (0, vitest_1.it)("createSession emits session_created on global bus", () => {
34
+ const adapter = new stub_kernel_session_adapter_js_1.StubKernelSessionAdapter();
35
+ const runtime = (0, create_app_runtime_js_1.createAppRuntime)({
36
+ workingDirectory: "/tmp",
37
+ mode: "json",
38
+ model: stubModel,
39
+ adapter,
40
+ });
41
+ const events = [];
42
+ runtime.events.on("session_created", (e) => events.push(e));
43
+ runtime.createSession();
44
+ (0, vitest_1.expect)(events).toHaveLength(1);
45
+ (0, vitest_1.expect)(events[0].category).toBe("session");
46
+ if (events[0].type === "session_created") {
47
+ (0, vitest_1.expect)(events[0].model).toEqual(stubModel);
48
+ }
49
+ });
50
+ (0, vitest_1.it)("recoverSession restores state and emits session_resumed", () => {
51
+ const adapter = new stub_kernel_session_adapter_js_1.StubKernelSessionAdapter();
52
+ const runtime = (0, create_app_runtime_js_1.createAppRuntime)({
53
+ workingDirectory: "/tmp",
54
+ mode: "rpc",
55
+ model: stubModel,
56
+ adapter,
57
+ });
58
+ // Create, then serialize for recovery
59
+ const session = runtime.createSession();
60
+ const recoveryData = {
61
+ sessionId: session.id,
62
+ model: stubModel,
63
+ toolSet: ["read", "edit"],
64
+ planSummary: null,
65
+ compactionSummary: null,
66
+ taskState: { status: "idle", currentTaskId: null, startedAt: null },
67
+ };
68
+ // Create a fresh runtime for recovery
69
+ const adapter2 = new stub_kernel_session_adapter_js_1.StubKernelSessionAdapter();
70
+ const runtime2 = (0, create_app_runtime_js_1.createAppRuntime)({
71
+ workingDirectory: "/tmp",
72
+ mode: "rpc",
73
+ model: stubModel,
74
+ adapter: adapter2,
75
+ });
76
+ const events = [];
77
+ runtime2.events.on("session_resumed", (e) => events.push(e));
78
+ const recovered = runtime2.recoverSession(recoveryData);
79
+ (0, vitest_1.expect)(recovered.state.status).toBe("active");
80
+ (0, vitest_1.expect)(recovered.id).toEqual(session.id);
81
+ (0, vitest_1.expect)(events).toHaveLength(1);
82
+ if (events[0].type === "session_resumed") {
83
+ (0, vitest_1.expect)(events[0].recoveryData.model).toEqual(stubModel);
84
+ }
85
+ });
86
+ // --- Fix 1: adapter.resume() is called during recovery ---
87
+ (0, vitest_1.it)("recoverSession calls adapter.resume with recovery data", () => {
88
+ const adapter = new stub_kernel_session_adapter_js_1.StubKernelSessionAdapter();
89
+ const runtime = (0, create_app_runtime_js_1.createAppRuntime)({
90
+ workingDirectory: "/tmp",
91
+ mode: "rpc",
92
+ model: stubModel,
93
+ adapter,
94
+ });
95
+ const recoveryData = {
96
+ sessionId: { value: "test-recovery-id" },
97
+ model: stubModel,
98
+ toolSet: ["read", "edit"],
99
+ planSummary: null,
100
+ compactionSummary: null,
101
+ taskState: { status: "idle", currentTaskId: null, startedAt: null },
102
+ };
103
+ runtime.recoverSession(recoveryData);
104
+ (0, vitest_1.expect)(adapter.resumeCalled).toBe(true);
105
+ (0, vitest_1.expect)(adapter.lastResumeData).toEqual(recoveryData);
106
+ });
107
+ (0, vitest_1.it)("createAdapter provisions a fresh adapter per session", async () => {
108
+ const adapters = [];
109
+ const runtime = (0, create_app_runtime_js_1.createAppRuntime)({
110
+ workingDirectory: "/tmp",
111
+ mode: "print",
112
+ model: stubModel,
113
+ createAdapter: () => {
114
+ const adapter = new stub_kernel_session_adapter_js_1.StubKernelSessionAdapter();
115
+ adapters.push(adapter);
116
+ return adapter;
117
+ },
118
+ });
119
+ const s1 = runtime.createSession();
120
+ const s2 = runtime.createSession();
121
+ adapters[0].enqueueDefaultEvents([{ type: "message_update", timestamp: 1000, payload: { content: "one" } }]);
122
+ adapters[1].enqueueDefaultEvents([{ type: "message_update", timestamp: 2000, payload: { content: "two" } }]);
123
+ await s1.prompt("first");
124
+ await s2.prompt("second");
125
+ (0, vitest_1.expect)(adapters).toHaveLength(2);
126
+ (0, vitest_1.expect)(adapters[0].lastInput).toBe("first");
127
+ (0, vitest_1.expect)(adapters[1].lastInput).toBe("second");
128
+ await s1.close();
129
+ (0, vitest_1.expect)(adapters[0].closed).toBe(true);
130
+ (0, vitest_1.expect)(adapters[1].closed).toBe(false);
131
+ });
132
+ (0, vitest_1.it)("rejects a second session when only a single static adapter is provided", () => {
133
+ const runtime = (0, create_app_runtime_js_1.createAppRuntime)({
134
+ workingDirectory: "/tmp",
135
+ mode: "print",
136
+ model: stubModel,
137
+ adapter: new stub_kernel_session_adapter_js_1.StubKernelSessionAdapter(),
138
+ });
139
+ runtime.createSession();
140
+ (0, vitest_1.expect)(() => runtime.createSession()).toThrow("createAdapter");
141
+ });
142
+ (0, vitest_1.it)("throws if no adapter is provided", () => {
143
+ const runtime = (0, create_app_runtime_js_1.createAppRuntime)({
144
+ workingDirectory: "/tmp",
145
+ mode: "print",
146
+ model: stubModel,
147
+ });
148
+ (0, vitest_1.expect)(() => runtime.createSession()).toThrow("No KernelSessionAdapter provided");
149
+ });
150
+ (0, vitest_1.it)("shutdown closes all sessions", async () => {
151
+ const adapters = [];
152
+ const runtime = (0, create_app_runtime_js_1.createAppRuntime)({
153
+ workingDirectory: "/tmp",
154
+ mode: "print",
155
+ model: stubModel,
156
+ createAdapter: () => {
157
+ const adapter = new stub_kernel_session_adapter_js_1.StubKernelSessionAdapter();
158
+ adapters.push(adapter);
159
+ return adapter;
160
+ },
161
+ });
162
+ const s1 = runtime.createSession();
163
+ const s2 = runtime.createSession();
164
+ await runtime.shutdown();
165
+ (0, vitest_1.expect)(s1.state.status).toBe("closed");
166
+ (0, vitest_1.expect)(s2.state.status).toBe("closed");
167
+ (0, vitest_1.expect)(adapters).toHaveLength(2);
168
+ (0, vitest_1.expect)(adapters.every((adapter) => adapter.closed)).toBe(true);
169
+ });
170
+ (0, vitest_1.it)("exposes governor with governance components", () => {
171
+ const adapter = new stub_kernel_session_adapter_js_1.StubKernelSessionAdapter();
172
+ const runtime = (0, create_app_runtime_js_1.createAppRuntime)({
173
+ workingDirectory: "/tmp",
174
+ mode: "print",
175
+ model: stubModel,
176
+ adapter,
177
+ });
178
+ (0, vitest_1.expect)(runtime.governor).toBeDefined();
179
+ (0, vitest_1.expect)(runtime.governor.catalog).toBeDefined();
180
+ (0, vitest_1.expect)(runtime.governor.permissions).toBeDefined();
181
+ (0, vitest_1.expect)(runtime.governor.mutations).toBeDefined();
182
+ (0, vitest_1.expect)(runtime.governor.audit).toBeDefined();
183
+ });
184
+ (0, vitest_1.it)("registers builtin tool definitions for the configured tool set", () => {
185
+ const runtime = (0, create_app_runtime_js_1.createAppRuntime)({
186
+ workingDirectory: "/tmp",
187
+ mode: "interactive",
188
+ model: stubModel,
189
+ adapter: new stub_kernel_session_adapter_js_1.StubKernelSessionAdapter(),
190
+ toolSet: ["read", "bash", "write"],
191
+ });
192
+ (0, vitest_1.expect)(runtime.governor.catalog.has("read")).toBe(true);
193
+ (0, vitest_1.expect)(runtime.governor.catalog.has("bash")).toBe(true);
194
+ (0, vitest_1.expect)(runtime.governor.catalog.has("write")).toBe(true);
195
+ });
196
+ (0, vitest_1.it)("routes registered bash tools through permission flow instead of catalog denial", async () => {
197
+ const adapter = new stub_kernel_session_adapter_js_1.StubKernelSessionAdapter();
198
+ adapter.enqueueDefaultEvents([
199
+ {
200
+ type: "tool_execution_start",
201
+ timestamp: 1000,
202
+ payload: {
203
+ toolName: "bash",
204
+ toolCallId: "bash_1",
205
+ parameters: { command: "pwd" },
206
+ },
207
+ },
208
+ {
209
+ type: "tool_execution_end",
210
+ timestamp: 2000,
211
+ payload: {
212
+ toolName: "bash",
213
+ toolCallId: "bash_1",
214
+ status: "success",
215
+ result: "/tmp",
216
+ durationMs: 20,
217
+ },
218
+ },
219
+ ]);
220
+ const runtime = (0, create_app_runtime_js_1.createAppRuntime)({
221
+ workingDirectory: "/tmp",
222
+ mode: "interactive",
223
+ model: stubModel,
224
+ adapter,
225
+ toolSet: ["bash"],
226
+ });
227
+ const session = runtime.createSession();
228
+ const events = [];
229
+ session.events.onAny((event) => events.push(event));
230
+ const pending = session.prompt("run pwd");
231
+ await new Promise((resolve) => setTimeout(resolve, 0));
232
+ (0, vitest_1.expect)(events.map((event) => event.type)).toContain("permission_requested");
233
+ await session.resolvePermission("bash_1", "allow_once");
234
+ await pending;
235
+ (0, vitest_1.expect)(events.map((event) => event.type)).toContain("tool_started");
236
+ (0, vitest_1.expect)(events.map((event) => event.type)).toContain("tool_completed");
237
+ });
238
+ (0, vitest_1.it)("exposes planEngine that can create plans", () => {
239
+ const adapter = new stub_kernel_session_adapter_js_1.StubKernelSessionAdapter();
240
+ const runtime = (0, create_app_runtime_js_1.createAppRuntime)({
241
+ workingDirectory: "/tmp",
242
+ mode: "print",
243
+ model: stubModel,
244
+ adapter,
245
+ });
246
+ (0, vitest_1.expect)(runtime.planEngine).toBeDefined();
247
+ const draft = runtime.planEngine.createDraft("p1", "Goal", ["Step A"]);
248
+ (0, vitest_1.expect)(draft.status).toBe("draft");
249
+ (0, vitest_1.expect)(draft.steps).toHaveLength(1);
250
+ });
251
+ (0, vitest_1.it)("session facade exposes plan orchestrator when planEngine available", () => {
252
+ const adapter = new stub_kernel_session_adapter_js_1.StubKernelSessionAdapter();
253
+ const runtime = (0, create_app_runtime_js_1.createAppRuntime)({
254
+ workingDirectory: "/tmp",
255
+ mode: "print",
256
+ model: stubModel,
257
+ adapter,
258
+ });
259
+ const session = runtime.createSession();
260
+ (0, vitest_1.expect)(session.plan).toBeDefined();
261
+ (0, vitest_1.expect)(session.plan).not.toBeNull();
262
+ });
263
+ (0, vitest_1.it)("same runtime can drive multiple modes (print + json)", () => {
264
+ const adapter = new stub_kernel_session_adapter_js_1.StubKernelSessionAdapter();
265
+ const printRuntime = (0, create_app_runtime_js_1.createAppRuntime)({
266
+ workingDirectory: "/tmp",
267
+ mode: "print",
268
+ model: stubModel,
269
+ adapter,
270
+ });
271
+ const jsonRuntime = (0, create_app_runtime_js_1.createAppRuntime)({
272
+ workingDirectory: "/tmp",
273
+ mode: "json",
274
+ model: stubModel,
275
+ adapter,
276
+ });
277
+ const printSession = printRuntime.createSession();
278
+ const jsonSession = jsonRuntime.createSession();
279
+ // Both share the same runtime design — different modes but same API
280
+ (0, vitest_1.expect)(printSession.context.mode).toBe("print");
281
+ (0, vitest_1.expect)(jsonSession.context.mode).toBe("json");
282
+ (0, vitest_1.expect)(printSession.state.status).toBe("active");
283
+ (0, vitest_1.expect)(jsonSession.state.status).toBe("active");
284
+ });
285
+ });
286
+ //# sourceMappingURL=create-app-runtime.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-app-runtime.test.js","sourceRoot":"","sources":["../../src/test/create-app-runtime.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const vitest_1 = require("vitest");
4
+ const event_bus_js_1 = require("../events/event-bus.js");
5
+ const stubSessionId = { value: "test-session" };
6
+ function makeEvent(overrides = {}) {
7
+ return {
8
+ id: "evt-1",
9
+ timestamp: Date.now(),
10
+ sessionId: stubSessionId,
11
+ category: "session",
12
+ type: "session_created",
13
+ model: { id: "test", provider: "test" },
14
+ toolSet: [],
15
+ ...overrides,
16
+ };
17
+ }
18
+ (0, vitest_1.describe)("EventBus", () => {
19
+ (0, vitest_1.it)("emits events to type-level listeners", () => {
20
+ const bus = (0, event_bus_js_1.createEventBus)();
21
+ const received = [];
22
+ bus.on("session_created", (event) => received.push(event));
23
+ const event = makeEvent();
24
+ bus.emit(event);
25
+ (0, vitest_1.expect)(received).toHaveLength(1);
26
+ (0, vitest_1.expect)(received[0]).toEqual(event);
27
+ });
28
+ (0, vitest_1.it)("emits events to category-level listeners", () => {
29
+ const bus = (0, event_bus_js_1.createEventBus)();
30
+ const received = [];
31
+ bus.onCategory("session", (event) => received.push(event));
32
+ bus.emit(makeEvent());
33
+ (0, vitest_1.expect)(received).toHaveLength(1);
34
+ });
35
+ (0, vitest_1.it)("does not deliver to wrong type listeners", () => {
36
+ const bus = (0, event_bus_js_1.createEventBus)();
37
+ const received = [];
38
+ bus.on("tool_started", (event) => received.push(event));
39
+ bus.emit(makeEvent());
40
+ (0, vitest_1.expect)(received).toHaveLength(0);
41
+ });
42
+ (0, vitest_1.it)("unsubscribe stops future deliveries", () => {
43
+ const bus = (0, event_bus_js_1.createEventBus)();
44
+ const received = [];
45
+ const unsub = bus.on("session_created", (event) => received.push(event));
46
+ unsub();
47
+ bus.emit(makeEvent());
48
+ (0, vitest_1.expect)(received).toHaveLength(0);
49
+ });
50
+ (0, vitest_1.it)("off removes a specific listener", () => {
51
+ const bus = (0, event_bus_js_1.createEventBus)();
52
+ const received = [];
53
+ const listener = (event) => received.push(event);
54
+ bus.on("session_created", listener);
55
+ bus.off("session_created", listener);
56
+ bus.emit(makeEvent());
57
+ (0, vitest_1.expect)(received).toHaveLength(0);
58
+ });
59
+ (0, vitest_1.it)("removeAllListeners clears everything", () => {
60
+ const bus = (0, event_bus_js_1.createEventBus)();
61
+ const typeReceived = [];
62
+ const catReceived = [];
63
+ bus.on("session_created", (event) => typeReceived.push(event));
64
+ bus.onCategory("session", (event) => catReceived.push(event));
65
+ bus.removeAllListeners();
66
+ bus.emit(makeEvent());
67
+ (0, vitest_1.expect)(typeReceived).toHaveLength(0);
68
+ (0, vitest_1.expect)(catReceived).toHaveLength(0);
69
+ });
70
+ (0, vitest_1.it)("delivers to both type and category listeners for the same event", () => {
71
+ const bus = (0, event_bus_js_1.createEventBus)();
72
+ const typeReceived = [];
73
+ const catReceived = [];
74
+ bus.on("session_created", (event) => typeReceived.push(event));
75
+ bus.onCategory("session", (event) => catReceived.push(event));
76
+ bus.emit(makeEvent());
77
+ (0, vitest_1.expect)(typeReceived).toHaveLength(1);
78
+ (0, vitest_1.expect)(catReceived).toHaveLength(1);
79
+ });
80
+ });
81
+ //# sourceMappingURL=event-bus.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-bus.test.js","sourceRoot":"","sources":["../../src/test/event-bus.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,143 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const vitest_1 = require("vitest");
4
+ const event_normalizer_js_1 = require("../services/event-normalizer.js");
5
+ const stubSessionId = { value: "norm-test" };
6
+ (0, vitest_1.describe)("EventNormalizer", () => {
7
+ const normalizer = new event_normalizer_js_1.EventNormalizer(stubSessionId);
8
+ (0, vitest_1.it)("maps agent_start to session_created", () => {
9
+ const raw = {
10
+ type: "agent_start",
11
+ timestamp: 1000,
12
+ payload: {
13
+ model: { id: "reference-model", provider: "reference" },
14
+ toolSet: ["read", "edit"],
15
+ },
16
+ };
17
+ const result = normalizer.normalize(raw);
18
+ (0, vitest_1.expect)(result).not.toBeNull();
19
+ (0, vitest_1.expect)(result.category).toBe("session");
20
+ (0, vitest_1.expect)(result.type).toBe("session_created");
21
+ (0, vitest_1.expect)(result.sessionId).toBe(stubSessionId);
22
+ });
23
+ (0, vitest_1.it)("maps agent_end to session_closed", () => {
24
+ const raw = { type: "agent_end", timestamp: 2000 };
25
+ const result = normalizer.normalize(raw);
26
+ (0, vitest_1.expect)(result).not.toBeNull();
27
+ (0, vitest_1.expect)(result.category).toBe("session");
28
+ (0, vitest_1.expect)(result.type).toBe("session_closed");
29
+ });
30
+ (0, vitest_1.it)("maps tool_execution_start to tool_started", () => {
31
+ const raw = {
32
+ type: "tool_execution_start",
33
+ timestamp: 3000,
34
+ payload: {
35
+ toolName: "read",
36
+ toolCallId: "call-1",
37
+ parameters: { path: "/tmp/test.ts" },
38
+ },
39
+ };
40
+ const result = normalizer.normalize(raw);
41
+ (0, vitest_1.expect)(result).not.toBeNull();
42
+ (0, vitest_1.expect)(result.category).toBe("tool");
43
+ (0, vitest_1.expect)(result.type).toBe("tool_started");
44
+ if (result.type === "tool_started") {
45
+ (0, vitest_1.expect)(result.toolName).toBe("read");
46
+ (0, vitest_1.expect)(result.toolCallId).toBe("call-1");
47
+ (0, vitest_1.expect)(result.parameters).toEqual({ path: "/tmp/test.ts" });
48
+ }
49
+ });
50
+ (0, vitest_1.it)("maps tool_execution_end to tool_completed", () => {
51
+ const raw = {
52
+ type: "tool_execution_end",
53
+ timestamp: 4000,
54
+ payload: {
55
+ toolName: "edit",
56
+ toolCallId: "call-2",
57
+ status: "success",
58
+ result: "File edited",
59
+ durationMs: 150,
60
+ },
61
+ };
62
+ const result = normalizer.normalize(raw);
63
+ (0, vitest_1.expect)(result).not.toBeNull();
64
+ (0, vitest_1.expect)(result.type).toBe("tool_completed");
65
+ if (result.type === "tool_completed") {
66
+ (0, vitest_1.expect)(result.status).toBe("success");
67
+ (0, vitest_1.expect)(result.durationMs).toBe(150);
68
+ }
69
+ });
70
+ (0, vitest_1.it)("maps tool_execution_denied to tool_denied", () => {
71
+ const raw = {
72
+ type: "tool_execution_denied",
73
+ timestamp: 4500,
74
+ payload: {
75
+ toolName: "bash",
76
+ toolCallId: "call-3",
77
+ reason: "Permission denied",
78
+ },
79
+ };
80
+ const result = normalizer.normalize(raw);
81
+ (0, vitest_1.expect)(result).not.toBeNull();
82
+ (0, vitest_1.expect)(result.type).toBe("tool_denied");
83
+ if (result.type === "tool_denied") {
84
+ (0, vitest_1.expect)(result.toolName).toBe("bash");
85
+ (0, vitest_1.expect)(result.reason).toBe("Permission denied");
86
+ }
87
+ });
88
+ (0, vitest_1.it)("maps compaction_start/end to compaction events", () => {
89
+ const startRaw = { type: "compaction_start", timestamp: 5000 };
90
+ const startResult = normalizer.normalize(startRaw);
91
+ (0, vitest_1.expect)(startResult.type).toBe("compaction_started");
92
+ const endRaw = {
93
+ type: "compaction_end",
94
+ timestamp: 6000,
95
+ payload: {
96
+ originalMessageCount: 20,
97
+ retainedMessageCount: 5,
98
+ estimatedTokensSaved: 10000,
99
+ },
100
+ };
101
+ const endResult = normalizer.normalize(endRaw);
102
+ (0, vitest_1.expect)(endResult.type).toBe("compaction_completed");
103
+ if (endResult.type === "compaction_completed") {
104
+ (0, vitest_1.expect)(endResult.summary.originalMessageCount).toBe(20);
105
+ }
106
+ });
107
+ (0, vitest_1.it)("maps message_update with text to text_delta", () => {
108
+ const raw = {
109
+ type: "message_update",
110
+ timestamp: 7000,
111
+ payload: { content: "Hello world" },
112
+ };
113
+ const result = normalizer.normalize(raw);
114
+ (0, vitest_1.expect)(result.type).toBe("text_delta");
115
+ if (result.type === "text_delta") {
116
+ (0, vitest_1.expect)(result.content).toBe("Hello world");
117
+ }
118
+ });
119
+ (0, vitest_1.it)("maps message_update with thinking to thinking_delta", () => {
120
+ const raw = {
121
+ type: "message_update",
122
+ timestamp: 8000,
123
+ payload: { kind: "thinking", content: "Let me think..." },
124
+ };
125
+ const result = normalizer.normalize(raw);
126
+ (0, vitest_1.expect)(result.type).toBe("thinking_delta");
127
+ if (result.type === "thinking_delta") {
128
+ (0, vitest_1.expect)(result.content).toBe("Let me think...");
129
+ }
130
+ });
131
+ (0, vitest_1.it)("returns null for unrecognized events", () => {
132
+ const raw = { type: "unknown_event_type", timestamp: 9000 };
133
+ const result = normalizer.normalize(raw);
134
+ (0, vitest_1.expect)(result).toBeNull();
135
+ });
136
+ (0, vitest_1.it)("assigns unique event IDs", () => {
137
+ const raw = { type: "agent_end", timestamp: 1000 };
138
+ const r1 = normalizer.normalize(raw);
139
+ const r2 = normalizer.normalize(raw);
140
+ (0, vitest_1.expect)(r1.id).not.toBe(r2.id);
141
+ });
142
+ });
143
+ //# sourceMappingURL=event-normalizer.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-normalizer.test.js","sourceRoot":"","sources":["../../src/test/event-normalizer.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,71 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const vitest_1 = require("vitest");
4
+ const path_scope_js_1 = require("../subagent/path-scope.js");
5
+ // ---------------------------------------------------------------------------
6
+ // Helpers
7
+ // ---------------------------------------------------------------------------
8
+ const scope = {
9
+ allowedPaths: ["packages/app-runtime/**", "packages/app-tools/**"],
10
+ forbiddenPaths: ["packages/app-runtime/src/test/**", "packages/app-ui/**"],
11
+ };
12
+ // ---------------------------------------------------------------------------
13
+ // Tests
14
+ // ---------------------------------------------------------------------------
15
+ (0, vitest_1.describe)("PathScope", () => {
16
+ (0, vitest_1.describe)("isPathAllowed", () => {
17
+ (0, vitest_1.it)("returns true for path under allowed prefix", () => {
18
+ (0, vitest_1.expect)((0, path_scope_js_1.isPathAllowed)(scope, "packages/app-runtime/src/session.ts")).toBe(true);
19
+ });
20
+ (0, vitest_1.it)("returns true for exact match with allowed path", () => {
21
+ (0, vitest_1.expect)((0, path_scope_js_1.isPathAllowed)(scope, "packages/app-runtime/**")).toBe(true);
22
+ });
23
+ (0, vitest_1.it)("returns false for path outside all allowed paths", () => {
24
+ (0, vitest_1.expect)((0, path_scope_js_1.isPathAllowed)(scope, "packages/app-cli/src/index.ts")).toBe(false);
25
+ });
26
+ (0, vitest_1.it)("handles dot segments via normalization", () => {
27
+ (0, vitest_1.expect)((0, path_scope_js_1.isPathAllowed)(scope, "packages/./app-runtime/src/x.ts")).toBe(true);
28
+ });
29
+ });
30
+ (0, vitest_1.describe)("isPathForbidden", () => {
31
+ (0, vitest_1.it)("returns true for explicitly forbidden path", () => {
32
+ (0, vitest_1.expect)((0, path_scope_js_1.isPathForbidden)(scope, "packages/app-runtime/src/test/foo.test.ts")).toBe(true);
33
+ });
34
+ (0, vitest_1.it)("returns true for child of forbidden path", () => {
35
+ (0, vitest_1.expect)((0, path_scope_js_1.isPathForbidden)(scope, "packages/app-ui/src/index.ts")).toBe(true);
36
+ });
37
+ (0, vitest_1.it)("returns false for non-forbidden path", () => {
38
+ (0, vitest_1.expect)((0, path_scope_js_1.isPathForbidden)(scope, "packages/app-runtime/src/session.ts")).toBe(false);
39
+ });
40
+ });
41
+ (0, vitest_1.describe)("wouldViolateBoundary", () => {
42
+ (0, vitest_1.it)("returns false for allowed non-forbidden path", () => {
43
+ (0, vitest_1.expect)((0, path_scope_js_1.wouldViolateBoundary)(scope, "packages/app-runtime/src/engine.ts")).toBe(false);
44
+ });
45
+ (0, vitest_1.it)("returns true for path outside allowed scope", () => {
46
+ (0, vitest_1.expect)((0, path_scope_js_1.wouldViolateBoundary)(scope, "packages/app-cli/src/index.ts")).toBe(true);
47
+ });
48
+ (0, vitest_1.it)("returns true for forbidden path within allowed scope", () => {
49
+ // Path is under allowedPaths but also under forbiddenPaths
50
+ (0, vitest_1.expect)((0, path_scope_js_1.wouldViolateBoundary)(scope, "packages/app-runtime/src/test/x.test.ts")).toBe(true);
51
+ });
52
+ });
53
+ (0, vitest_1.describe)("scopesOverlap", () => {
54
+ (0, vitest_1.it)("returns true when allowed paths overlap", () => {
55
+ const a = { allowedPaths: ["packages/a/**"], forbiddenPaths: [] };
56
+ const b = { allowedPaths: ["packages/a/**"], forbiddenPaths: [] };
57
+ (0, vitest_1.expect)((0, path_scope_js_1.scopesOverlap)(a, b)).toBe(true);
58
+ });
59
+ (0, vitest_1.it)("returns true for nested paths", () => {
60
+ const a = { allowedPaths: ["packages/**"], forbiddenPaths: [] };
61
+ const b = { allowedPaths: ["packages/a/**"], forbiddenPaths: [] };
62
+ (0, vitest_1.expect)((0, path_scope_js_1.scopesOverlap)(a, b)).toBe(true);
63
+ });
64
+ (0, vitest_1.it)("returns false for disjoint scopes", () => {
65
+ const a = { allowedPaths: ["packages/a/**"], forbiddenPaths: [] };
66
+ const b = { allowedPaths: ["packages/b/**"], forbiddenPaths: [] };
67
+ (0, vitest_1.expect)((0, path_scope_js_1.scopesOverlap)(a, b)).toBe(false);
68
+ });
69
+ });
70
+ });
71
+ //# sourceMappingURL=path-scope.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"path-scope.test.js","sourceRoot":"","sources":["../../src/test/path-scope.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};