@cef-ai/testing 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (78) hide show
  1. package/README.md +132 -0
  2. package/dist/harness/clock.d.ts +26 -0
  3. package/dist/harness/clock.d.ts.map +1 -0
  4. package/dist/harness/clock.js +17 -0
  5. package/dist/harness/clock.js.map +1 -0
  6. package/dist/harness/cubby.d.ts +57 -0
  7. package/dist/harness/cubby.d.ts.map +1 -0
  8. package/dist/harness/cubby.js +94 -0
  9. package/dist/harness/cubby.js.map +1 -0
  10. package/dist/harness/dispatch.d.ts +31 -0
  11. package/dist/harness/dispatch.d.ts.map +1 -0
  12. package/dist/harness/dispatch.js +37 -0
  13. package/dist/harness/dispatch.js.map +1 -0
  14. package/dist/harness/fetch-mock.d.ts +43 -0
  15. package/dist/harness/fetch-mock.d.ts.map +1 -0
  16. package/dist/harness/fetch-mock.js +58 -0
  17. package/dist/harness/fetch-mock.js.map +1 -0
  18. package/dist/harness/lifecycle.d.ts +29 -0
  19. package/dist/harness/lifecycle.d.ts.map +1 -0
  20. package/dist/harness/lifecycle.js +37 -0
  21. package/dist/harness/lifecycle.js.map +1 -0
  22. package/dist/harness/model-mock.d.ts +49 -0
  23. package/dist/harness/model-mock.d.ts.map +1 -0
  24. package/dist/harness/model-mock.js +56 -0
  25. package/dist/harness/model-mock.js.map +1 -0
  26. package/dist/harness/publish.d.ts +29 -0
  27. package/dist/harness/publish.d.ts.map +1 -0
  28. package/dist/harness/publish.js +20 -0
  29. package/dist/harness/publish.js.map +1 -0
  30. package/dist/harness/replay.d.ts +32 -0
  31. package/dist/harness/replay.d.ts.map +1 -0
  32. package/dist/harness/replay.js +72 -0
  33. package/dist/harness/replay.js.map +1 -0
  34. package/dist/harness/snapshot.d.ts +44 -0
  35. package/dist/harness/snapshot.d.ts.map +1 -0
  36. package/dist/harness/snapshot.js +58 -0
  37. package/dist/harness/snapshot.js.map +1 -0
  38. package/dist/index.d.ts +9 -0
  39. package/dist/index.d.ts.map +1 -0
  40. package/dist/index.js +4 -0
  41. package/dist/index.js.map +1 -0
  42. package/dist/peers/from-marketplace.d.ts +19 -0
  43. package/dist/peers/from-marketplace.d.ts.map +1 -0
  44. package/dist/peers/from-marketplace.js +22 -0
  45. package/dist/peers/from-marketplace.js.map +1 -0
  46. package/dist/peers/mock-agent.d.ts +108 -0
  47. package/dist/peers/mock-agent.d.ts.map +1 -0
  48. package/dist/peers/mock-agent.js +113 -0
  49. package/dist/peers/mock-agent.js.map +1 -0
  50. package/dist/platform/event-runtime.d.ts +28 -0
  51. package/dist/platform/event-runtime.d.ts.map +1 -0
  52. package/dist/platform/event-runtime.js +38 -0
  53. package/dist/platform/event-runtime.js.map +1 -0
  54. package/dist/platform/orchestrator.d.ts +86 -0
  55. package/dist/platform/orchestrator.d.ts.map +1 -0
  56. package/dist/platform/orchestrator.js +164 -0
  57. package/dist/platform/orchestrator.js.map +1 -0
  58. package/dist/platform/runtime.d.ts +66 -0
  59. package/dist/platform/runtime.d.ts.map +1 -0
  60. package/dist/platform/runtime.js +116 -0
  61. package/dist/platform/runtime.js.map +1 -0
  62. package/dist/platform/targeting.d.ts +29 -0
  63. package/dist/platform/targeting.d.ts.map +1 -0
  64. package/dist/platform/targeting.js +64 -0
  65. package/dist/platform/targeting.js.map +1 -0
  66. package/dist/platform/vault.d.ts +185 -0
  67. package/dist/platform/vault.d.ts.map +1 -0
  68. package/dist/platform/vault.js +200 -0
  69. package/dist/platform/vault.js.map +1 -0
  70. package/dist/test-agent.d.ts +137 -0
  71. package/dist/test-agent.d.ts.map +1 -0
  72. package/dist/test-agent.js +223 -0
  73. package/dist/test-agent.js.map +1 -0
  74. package/dist/test-platform.d.ts +167 -0
  75. package/dist/test-platform.d.ts.map +1 -0
  76. package/dist/test-platform.js +352 -0
  77. package/dist/test-platform.js.map +1 -0
  78. package/package.json +28 -0
@@ -0,0 +1,352 @@
1
+ /**
2
+ * `testPlatform({...})` — multi-agent + vault simulator harness.
3
+ *
4
+ * Wires the `./platform/*` pieces together so a test can:
5
+ * - spin up multiple peer agents (typed `Agent` classes or `mockAgent({...})`);
6
+ * - publish to a shared in-memory vault and watch events route between agents;
7
+ * - inspect jobs / activities created by the orchestrator;
8
+ * - run cubby-level assertions per agent via {@link TestPlatform.runInCubby}.
9
+ *
10
+ * Per ADR-019 H4 the simulator is engagement-aware: each registered agent has
11
+ * one or more engagements; targeting picks one at Job creation; the chosen
12
+ * engagement is pinned for the Job's life. Single-class registrations remain
13
+ * equivalent to one engagement with id `"default"` for back-compat.
14
+ *
15
+ * Public surface mirrors `agent-sdk.md` §10 and the contract docs so app-side
16
+ * test code uses the same vault API it would in production.
17
+ */
18
+ import { ENGAGEMENT_METADATA, } from "@cef-ai/agent-sdk";
19
+ import { createClock } from "./harness/clock.js";
20
+ import { createCubby } from "./harness/cubby.js";
21
+ import { createFetchMock } from "./harness/fetch-mock.js";
22
+ import { isModelHandle } from "./harness/model-mock.js";
23
+ import { isMockAgentDescriptor, } from "./peers/mock-agent.js";
24
+ import { createEventRuntime } from "./platform/event-runtime.js";
25
+ import { createOrchestrator, } from "./platform/orchestrator.js";
26
+ import { createRuntime } from "./platform/runtime.js";
27
+ import { createVault, } from "./platform/vault.js";
28
+ /**
29
+ * Convenience wallet stub — `testWallet("alice")` produces a deterministic
30
+ * `{ publicKey: "wallet-alice" }`. The simulator does not verify signatures.
31
+ */
32
+ export function testWallet(id) {
33
+ return { publicKey: `wallet-${id}` };
34
+ }
35
+ export function testPlatform(opts) {
36
+ const defaultContext = opts.context ?? "default";
37
+ const clock = createClock(opts.clock?.now);
38
+ const fetchMock = createFetchMock();
39
+ // ---- Resolve user ids ----------------------------------------------------
40
+ // ADR-019 H5: explicit `users` map declares the user set. With 0 declared
41
+ // users, we synthesise a single implicit user so legacy testPlatform
42
+ // fixtures (no `users` field) keep working unchanged. The implicit id
43
+ // honours `vaultId` for v0.1.0 compatibility.
44
+ const declaredUsers = Object.keys(opts.users ?? {});
45
+ const userIds = declaredUsers.length > 0 ? declaredUsers : [opts.vaultId ?? "default"];
46
+ // ---- Shared model handles -----------------------------------------------
47
+ const models = {};
48
+ for (const [alias, handle] of Object.entries(opts.models ?? {})) {
49
+ if (!isModelHandle(handle)) {
50
+ throw new Error(`[testPlatform] models["${alias}"] is not a ModelHandle (missing infer())`);
51
+ }
52
+ models[alias] = handle;
53
+ }
54
+ // ---- Resolve every registered agent up front -----------------------------
55
+ // We instantiate classes once (per engagement) and synthesise manifests for
56
+ // mocks. The resulting record drives both the vault's `connect` resolution
57
+ // and the platform's cubby/runInCubby plumbing.
58
+ const registrations = new Map();
59
+ for (const [agentId, raw] of Object.entries(opts.agents)) {
60
+ registrations.set(agentId, materialise(agentId, raw));
61
+ }
62
+ // ---- Provision cubbies per (user, agent) --------------------------------
63
+ // ADR-019 H5: cubby state is partitioned by user (per the contract's
64
+ // instanceID derivation `sha256(vaultId + "/" + scope + "/" + agentId
65
+ // + "/" + alias)`). Each declared user gets its own fresh in-memory
66
+ // SQLite per alias.
67
+ const cubbiesByUser = new Map();
68
+ for (const userId of userIds) {
69
+ const perAgent = new Map();
70
+ for (const [agentId, { registration }] of registrations) {
71
+ const map = new Map();
72
+ const cubbies = "source" in registration
73
+ ? registration.cubbies
74
+ : registration.cubbies;
75
+ for (const spec of cubbies ?? []) {
76
+ const s = typeof spec === "string" ? { alias: spec } : spec;
77
+ if (map.has(s.alias)) {
78
+ throw new Error(`[testPlatform] duplicate cubby alias "${s.alias}" for agent "${agentId}"`);
79
+ }
80
+ map.set(s.alias, createCubby(s.alias, s.migrations));
81
+ }
82
+ perAgent.set(agentId, map);
83
+ }
84
+ cubbiesByUser.set(userId, perAgent);
85
+ }
86
+ // ---- Build runtime → orchestrator → event-runtime → per-user vaults -----
87
+ // The runtime closes over the per-user vault map for `ctx.publish`, so we
88
+ // use a mutable holder and patch it after vault construction. A single
89
+ // shared event log + shared orchestrator back every user's vault — but
90
+ // events are stamped with vaultId so per-user `stream()` filters work.
91
+ const userVaults = new Map();
92
+ const runtime = createRuntime({
93
+ vault: (vaultId) => {
94
+ const v = userVaults.get(vaultId);
95
+ if (!v) {
96
+ throw new Error(`[testPlatform] no vault for user "${vaultId}" — declare it via testPlatform({ users })`);
97
+ }
98
+ return v;
99
+ },
100
+ cubbies: cubbiesByUser,
101
+ fetchMock,
102
+ models,
103
+ clock: clock.now,
104
+ });
105
+ const orchestrator = createOrchestrator({
106
+ clock: clock.now,
107
+ runtime,
108
+ });
109
+ const eventRuntime = createEventRuntime({ orchestrator });
110
+ // Shared event log across every per-user vault. Each vault's `publish()`
111
+ // appends to it; each vault's `stream(ctx).events.list()` filters to
112
+ // events tagged with that vault's `vaultId`.
113
+ const sharedEvents = [];
114
+ for (const userId of userIds) {
115
+ const v = createVault({
116
+ vaultId: userId,
117
+ defaultScope: opts.scope ?? "default",
118
+ defaultContext,
119
+ eventRuntime,
120
+ orchestrator,
121
+ clock: clock.now,
122
+ resolveAgent(agentId) {
123
+ const reg = registrations.get(agentId);
124
+ if (!reg)
125
+ return undefined;
126
+ return {
127
+ manifest: reg.manifest,
128
+ engagementInstances: reg.engagementInstances,
129
+ };
130
+ },
131
+ cubbies: cubbiesByUser.get(userId),
132
+ events: sharedEvents,
133
+ });
134
+ userVaults.set(userId, v);
135
+ }
136
+ function userAccessor(id) {
137
+ const v = userVaults.get(id);
138
+ if (!v) {
139
+ throw new Error(`[testPlatform] unknown user "${id}" — declare it via testPlatform({ users })`);
140
+ }
141
+ return { vault: v };
142
+ }
143
+ return {
144
+ get vault() {
145
+ // ADR-019 H5: top-level `platform.vault` is a back-compat shorthand
146
+ // that resolves to the single declared user. With 2+ users it's
147
+ // ambiguous and callers must use `platform.user(id).vault`.
148
+ if (userIds.length > 1) {
149
+ throw new Error(`[testPlatform] platform.vault is ambiguous with ${userIds.length} users declared — use platform.user(id).vault`);
150
+ }
151
+ return userVaults.get(userIds[0]);
152
+ },
153
+ user: userAccessor,
154
+ orchestrator: {
155
+ jobs: orchestrator.jobs,
156
+ list: (f) => orchestrator.list(f),
157
+ get: (id) => orchestrator.get(id),
158
+ },
159
+ clock,
160
+ fetchMock: () => fetchMock,
161
+ models,
162
+ async runInCubby(agentId, alias, fn, userId) {
163
+ let resolvedUserId;
164
+ if (userId !== undefined) {
165
+ resolvedUserId = userId;
166
+ }
167
+ else if (userIds.length === 1) {
168
+ resolvedUserId = userIds[0];
169
+ }
170
+ else {
171
+ throw new Error(`[testPlatform] runInCubby requires an explicit userId with ${userIds.length} users declared`);
172
+ }
173
+ const userMap = cubbiesByUser.get(resolvedUserId);
174
+ if (!userMap) {
175
+ throw new Error(`[testPlatform] unknown user "${resolvedUserId}" — declare it via testPlatform({ users })`);
176
+ }
177
+ const map = userMap.get(agentId);
178
+ if (!map) {
179
+ throw new Error(`[testPlatform] unknown agentId "${agentId}" — register it via opts.agents`);
180
+ }
181
+ const c = map.get(alias);
182
+ if (!c) {
183
+ throw new Error(`[testPlatform] cubby "${alias}" not declared for agent "${agentId}"`);
184
+ }
185
+ return await fn({ query: c.query.bind(c), exec: c.exec.bind(c) }, c.raw);
186
+ },
187
+ dispose() {
188
+ for (const perAgent of cubbiesByUser.values()) {
189
+ for (const map of perAgent.values()) {
190
+ for (const c of map.values())
191
+ c.close();
192
+ }
193
+ }
194
+ },
195
+ };
196
+ }
197
+ /* -------------------------------------------------------------------------- */
198
+ /* Helpers */
199
+ /* -------------------------------------------------------------------------- */
200
+ /** Discriminator for the multi-engagement registration form. */
201
+ function isMultiEngagementSpec(reg) {
202
+ return (typeof reg === "object" &&
203
+ reg !== null &&
204
+ !isMockAgentDescriptor(reg) &&
205
+ Array.isArray(reg.engagements));
206
+ }
207
+ /** Discriminator for the long-form single-class/mock registration. */
208
+ function isSingleAgentRegistration(reg) {
209
+ return (typeof reg === "object" &&
210
+ reg !== null &&
211
+ !isMockAgentDescriptor(reg) &&
212
+ !Array.isArray(reg.engagements) &&
213
+ "source" in reg);
214
+ }
215
+ /**
216
+ * Read `ENGAGEMENT_METADATA` off a class. Throws with an actionable message
217
+ * naming the agent so multi-engagement misconfiguration surfaces clearly.
218
+ */
219
+ function readClassMeta(agentId, engagementId, ctor) {
220
+ const meta = ctor[ENGAGEMENT_METADATA];
221
+ if (!meta) {
222
+ const where = engagementId
223
+ ? `engagement "${engagementId}" of agent "${agentId}"`
224
+ : `agent "${agentId}"`;
225
+ throw new Error(`[testPlatform] ${where} class has no @OnEvent/@OnStart/@OnClose decorators (missing ENGAGEMENT_METADATA)`);
226
+ }
227
+ return meta;
228
+ }
229
+ /**
230
+ * Turn a registration into a `(manifest, engagementInstances)` pair plus the
231
+ * normalised SingleAgentRegistration / MultiEngagementSpec for cubby
232
+ * resolution.
233
+ *
234
+ * For mocks we use the descriptor's already-normalised engagements; for
235
+ * single-class shorthand we synthesise a one-engagement manifest with id
236
+ * `"default"`; for multi-engagement source-class specs we instantiate each
237
+ * class and assemble the manifest.
238
+ */
239
+ function materialise(agentId, raw) {
240
+ // Mock peer: descriptor already has normalised engagements + targeting.
241
+ if (isMockAgentDescriptor(raw)) {
242
+ const manifest = {
243
+ engagements: raw.engagements.map((e) => ({
244
+ id: e.id,
245
+ goal: e.goal,
246
+ events: e.meta.events,
247
+ lifecycle: e.meta.lifecycle,
248
+ })),
249
+ targeting: raw.targeting,
250
+ };
251
+ const engagementInstances = {};
252
+ for (const e of raw.engagements) {
253
+ engagementInstances[e.id] = e.instance;
254
+ }
255
+ return {
256
+ manifest,
257
+ engagementInstances,
258
+ registration: { source: raw },
259
+ };
260
+ }
261
+ // Multi-engagement source-class form.
262
+ if (isMultiEngagementSpec(raw)) {
263
+ if (raw.engagements.length === 0) {
264
+ throw new Error(`[testPlatform] agent "${agentId}" has empty engagements[]`);
265
+ }
266
+ const seen = new Set();
267
+ const manifestEngagements = [];
268
+ const engagementInstances = {};
269
+ for (const e of raw.engagements) {
270
+ if (!e.id) {
271
+ throw new Error(`[testPlatform] agent "${agentId}" has an engagement with no id`);
272
+ }
273
+ if (seen.has(e.id)) {
274
+ throw new Error(`[testPlatform] agent "${agentId}" has duplicate engagement id "${e.id}"`);
275
+ }
276
+ seen.add(e.id);
277
+ const meta = readClassMeta(agentId, e.id, e.source);
278
+ manifestEngagements.push({
279
+ id: e.id,
280
+ // Prefer explicit goal, else fall back to whatever `@Engagement` set.
281
+ goal: e.goal ?? meta.goal,
282
+ events: meta.events,
283
+ lifecycle: meta.lifecycle,
284
+ });
285
+ engagementInstances[e.id] = new e.source();
286
+ }
287
+ const targeting = raw.targeting ?? {
288
+ engagements: [{ id: manifestEngagements[0].id, rules: [] }],
289
+ };
290
+ for (const entry of targeting.engagements) {
291
+ if (!seen.has(entry.id)) {
292
+ throw new Error(`[testPlatform] agent "${agentId}" targeting references unknown engagement "${entry.id}"`);
293
+ }
294
+ }
295
+ return {
296
+ manifest: { engagements: manifestEngagements, targeting },
297
+ engagementInstances,
298
+ registration: raw,
299
+ };
300
+ }
301
+ // Long-form single-class registration (`{ source, cubbies?, settings? }`).
302
+ if (isSingleAgentRegistration(raw)) {
303
+ return materialiseSingle(agentId, raw);
304
+ }
305
+ // Bare class shorthand.
306
+ if (typeof raw === "function") {
307
+ return materialiseSingle(agentId, { source: raw });
308
+ }
309
+ throw new Error(`[testPlatform] agent "${agentId}" has an unrecognised registration shape`);
310
+ }
311
+ /**
312
+ * Materialise a single-class (or single-mock — but mocks are handled above)
313
+ * registration into the engagement-aware shape with one engagement of id
314
+ * `"default"`.
315
+ */
316
+ function materialiseSingle(agentId, reg) {
317
+ const source = reg.source;
318
+ if (isMockAgentDescriptor(source)) {
319
+ // {source: mockAgent({...}), cubbies?, settings?} — delegate to mock path.
320
+ const inner = materialise(agentId, source);
321
+ return { ...inner, registration: reg };
322
+ }
323
+ if (typeof source !== "function") {
324
+ throw new Error(`[testPlatform] agent "${agentId}" registration.source is not a class or mock descriptor`);
325
+ }
326
+ const meta = readClassMeta(agentId, undefined, source);
327
+ // Use the class's own engagement id when present (`@Engagement({id})`),
328
+ // else fall back to the harness default of "default" so single-class
329
+ // registrations stay equivalent to one engagement with that id.
330
+ const engagementId = meta.id ?? "default";
331
+ const manifest = {
332
+ engagements: [
333
+ {
334
+ id: engagementId,
335
+ goal: meta.goal,
336
+ events: meta.events,
337
+ lifecycle: meta.lifecycle,
338
+ },
339
+ ],
340
+ targeting: { engagements: [{ id: engagementId, rules: [] }] },
341
+ };
342
+ const engagementInstances = {
343
+ [engagementId]: new source(),
344
+ };
345
+ return { manifest, engagementInstances, registration: reg };
346
+ }
347
+ /* -------------------------------------------------------------------------- */
348
+ /* Re-exports */
349
+ /* -------------------------------------------------------------------------- */
350
+ export { mockAgent } from "./peers/mock-agent.js";
351
+ export { fromMarketplace } from "./peers/from-marketplace.js";
352
+ //# sourceMappingURL=test-platform.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-platform.js","sourceRoot":"","sources":["../src/test-platform.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,28 @@
1
+ {
2
+ "name": "@cef-ai/testing",
3
+ "version": "0.1.0",
4
+ "type": "module",
5
+ "main": "./dist/index.js",
6
+ "types": "./dist/index.d.ts",
7
+ "files": [
8
+ "dist"
9
+ ],
10
+ "publishConfig": {
11
+ "access": "public"
12
+ },
13
+ "dependencies": {
14
+ "better-sqlite3": "^11.0.0",
15
+ "@cef-ai/agent-sdk": "0.1.0"
16
+ },
17
+ "devDependencies": {
18
+ "@types/better-sqlite3": "^7.6.0",
19
+ "@types/node": "^20.11.0",
20
+ "typescript": "^5.4.0",
21
+ "vitest": "^1.5.0"
22
+ },
23
+ "scripts": {
24
+ "build": "tsc -b",
25
+ "test": "vitest run",
26
+ "lint": "eslint src"
27
+ }
28
+ }