@goondan/runtime 0.0.3-alpha4 → 0.0.3-alpha5

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.
@@ -1,97 +0,0 @@
1
- import { describe, it, expect, beforeEach } from "bun:test";
2
- import { ExtensionApiImpl } from "./api-impl.js";
3
- import { PipelineRegistryImpl } from "../pipeline/registry.js";
4
- import { ToolRegistryImpl } from "../tools/registry.js";
5
- import { ExtensionStateManagerImpl } from "./state-manager.js";
6
- import { EventEmitter } from "node:events";
7
- import { FileWorkspaceStorage } from "../workspace/storage.js";
8
- import { WorkspacePaths } from "../workspace/paths.js";
9
- import * as fs from "node:fs/promises";
10
- import * as path from "node:path";
11
- import * as os from "node:os";
12
- describe("ExtensionApiImpl", () => {
13
- let tempDir;
14
- let api;
15
- let pipelineRegistry;
16
- let toolRegistry;
17
- let stateManager;
18
- let eventBus;
19
- let logger;
20
- beforeEach(async () => {
21
- tempDir = await fs.mkdtemp(path.join(os.tmpdir(), "ext-api-test-"));
22
- const paths = new WorkspacePaths({
23
- stateRoot: tempDir,
24
- projectRoot: tempDir,
25
- });
26
- const storage = new FileWorkspaceStorage(paths);
27
- await storage.initializeSystemRoot();
28
- await storage.initializeInstanceState("test-instance", "test-agent");
29
- pipelineRegistry = new PipelineRegistryImpl();
30
- toolRegistry = new ToolRegistryImpl();
31
- stateManager = new ExtensionStateManagerImpl(storage, "test-instance", ["test-ext"]);
32
- eventBus = new EventEmitter();
33
- logger = console;
34
- api = new ExtensionApiImpl("test-ext", pipelineRegistry, toolRegistry, stateManager, eventBus, logger);
35
- });
36
- it("should provide pipeline registry", () => {
37
- expect(api.pipeline).toBe(pipelineRegistry);
38
- });
39
- it("should register tools via tools API", () => {
40
- api.tools.register({
41
- name: "test-ext__action",
42
- description: "Test action",
43
- parameters: { type: "object", properties: {} },
44
- }, async () => ({ ok: true }));
45
- const catalog = toolRegistry.getCatalog();
46
- expect(catalog).toHaveLength(1);
47
- expect(catalog[0]?.name).toBe("test-ext__action");
48
- });
49
- it("should get and set extension state", async () => {
50
- await stateManager.loadAll();
51
- await api.state.set({ count: 42 });
52
- const state = await api.state.get();
53
- expect(state).toEqual({ count: 42 });
54
- });
55
- it("should return null for uninitialized state", async () => {
56
- await stateManager.loadAll();
57
- const state = await api.state.get();
58
- expect(state).toBeNull();
59
- });
60
- it("should subscribe to events", async () => {
61
- const events = [];
62
- const unsubscribe = api.events.on("test-event", (data) => {
63
- events.push(data);
64
- });
65
- await api.events.emit("test-event", "payload1");
66
- await api.events.emit("test-event", "payload2");
67
- expect(events).toEqual(["payload1", "payload2"]);
68
- unsubscribe();
69
- await api.events.emit("test-event", "payload3");
70
- expect(events).toEqual(["payload1", "payload2"]);
71
- });
72
- it("should provide logger API", () => {
73
- expect(api.logger.debug).toBeDefined();
74
- expect(api.logger.info).toBeDefined();
75
- expect(api.logger.warn).toBeDefined();
76
- expect(api.logger.error).toBeDefined();
77
- });
78
- it("should isolate state between extensions", async () => {
79
- const storage = new FileWorkspaceStorage(new WorkspacePaths({
80
- stateRoot: tempDir,
81
- projectRoot: tempDir,
82
- }));
83
- const stateManager1 = new ExtensionStateManagerImpl(storage, "test-instance", ["ext1"]);
84
- const stateManager2 = new ExtensionStateManagerImpl(storage, "test-instance", ["ext2"]);
85
- await stateManager1.loadAll();
86
- await stateManager2.loadAll();
87
- const api1 = new ExtensionApiImpl("ext1", pipelineRegistry, toolRegistry, stateManager1, eventBus, logger);
88
- const api2 = new ExtensionApiImpl("ext2", pipelineRegistry, toolRegistry, stateManager2, eventBus, logger);
89
- await api1.state.set({ ext1Data: true });
90
- await api2.state.set({ ext2Data: true });
91
- const state1 = await api1.state.get();
92
- const state2 = await api2.state.get();
93
- expect(state1).toEqual({ ext1Data: true });
94
- expect(state2).toEqual({ ext2Data: true });
95
- });
96
- });
97
- //# sourceMappingURL=api-impl.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"api-impl.test.js","sourceRoot":"","sources":["../../src/extension/api-impl.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=integration.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"integration.test.d.ts","sourceRoot":"","sources":["../../src/extension/integration.test.ts"],"names":[],"mappings":""}
@@ -1,224 +0,0 @@
1
- import { describe, it, expect, beforeEach } from "bun:test";
2
- import { loadExtensions } from "./loader.js";
3
- import { PipelineRegistryImpl } from "../pipeline/registry.js";
4
- import { ToolRegistryImpl } from "../tools/registry.js";
5
- import { ExtensionStateManagerImpl } from "./state-manager.js";
6
- import { ExtensionApiImpl } from "./api-impl.js";
7
- import { FileWorkspaceStorage } from "../workspace/storage.js";
8
- import { WorkspacePaths } from "../workspace/paths.js";
9
- import { RuntimeEventBusImpl } from "../events/runtime-events.js";
10
- import { EventEmitter } from "node:events";
11
- import * as fs from "node:fs/promises";
12
- import * as path from "node:path";
13
- import * as os from "node:os";
14
- describe("Extension Integration", () => {
15
- let tempDir;
16
- let storage;
17
- let pipelineRegistry;
18
- let toolRegistry;
19
- let eventBus;
20
- let runtimeEventBus;
21
- beforeEach(async () => {
22
- tempDir = await fs.mkdtemp(path.join(os.tmpdir(), "ext-integration-test-"));
23
- const paths = new WorkspacePaths({
24
- stateRoot: tempDir,
25
- projectRoot: tempDir,
26
- });
27
- storage = new FileWorkspaceStorage(paths);
28
- await storage.initializeSystemRoot();
29
- await storage.initializeInstanceState("test-instance", "test-agent");
30
- runtimeEventBus = new RuntimeEventBusImpl();
31
- pipelineRegistry = new PipelineRegistryImpl(runtimeEventBus);
32
- toolRegistry = new ToolRegistryImpl();
33
- eventBus = new EventEmitter();
34
- });
35
- it("should load logging extension from base package", async () => {
36
- const baseExtensionPath = path.resolve(path.dirname(import.meta.url.replace("file://", "")), "../../../base/src/extensions/logging.ts");
37
- const extensionExists = await fs
38
- .access(baseExtensionPath)
39
- .then(() => true)
40
- .catch(() => false);
41
- if (!extensionExists) {
42
- console.warn("Skipping test: base logging extension not found");
43
- return;
44
- }
45
- const resources = [
46
- {
47
- apiVersion: "goondan.ai/v1",
48
- kind: "Extension",
49
- metadata: { name: "logging" },
50
- spec: {
51
- entry: baseExtensionPath,
52
- config: {
53
- level: "info",
54
- includeToolArgs: true,
55
- },
56
- },
57
- __file: "test.yaml",
58
- __docIndex: 0,
59
- },
60
- ];
61
- const apiFactory = (name) => {
62
- const stateManager = new ExtensionStateManagerImpl(storage, "test-instance", [name]);
63
- return new ExtensionApiImpl(name, pipelineRegistry, toolRegistry, stateManager, eventBus, console);
64
- };
65
- await loadExtensions(resources, apiFactory, tempDir, console);
66
- });
67
- it("should run middleware registered by extension", async () => {
68
- const extDir = path.join(tempDir, "extensions");
69
- await fs.mkdir(extDir, { recursive: true });
70
- const extPath = path.join(extDir, "test-middleware.ts");
71
- await fs.writeFile(extPath, `
72
- export function register(api) {
73
- api.pipeline.register('turn', async (ctx) => {
74
- ctx.metadata.extensionRan = true;
75
- return ctx.next();
76
- });
77
- }
78
- `, "utf8");
79
- const resources = [
80
- {
81
- apiVersion: "goondan.ai/v1",
82
- kind: "Extension",
83
- metadata: { name: "test-middleware" },
84
- spec: { entry: "./test-middleware.ts" },
85
- __file: "test.yaml",
86
- __docIndex: 0,
87
- __rootDir: extDir,
88
- },
89
- ];
90
- const apiFactory = (name) => {
91
- const stateManager = new ExtensionStateManagerImpl(storage, "test-instance", [name]);
92
- return new ExtensionApiImpl(name, pipelineRegistry, toolRegistry, stateManager, eventBus, console);
93
- };
94
- await loadExtensions(resources, apiFactory, tempDir, console);
95
- const metadata = {};
96
- const conversationState = await storage.createConversationState("test-instance");
97
- await pipelineRegistry.runTurn({
98
- agentName: "test-agent",
99
- instanceKey: "test-instance",
100
- turnId: "turn-1",
101
- traceId: "trace-1",
102
- inputEvent: {
103
- id: "evt-1",
104
- type: "user.input",
105
- input: "hello",
106
- source: { kind: "connector", name: "cli" },
107
- createdAt: new Date(),
108
- },
109
- conversationState,
110
- emitMessageEvent: () => { },
111
- metadata,
112
- }, async () => {
113
- return {
114
- turnId: "turn-1",
115
- finishReason: "text_response",
116
- };
117
- });
118
- expect(metadata.extensionRan).toBe(true);
119
- });
120
- it("should emit runtime events through pipeline", async () => {
121
- const events = [];
122
- runtimeEventBus.on("turn.started", (event) => {
123
- events.push(`turn.started:${event.turnId}`);
124
- });
125
- runtimeEventBus.on("turn.completed", (event) => {
126
- events.push(`turn.completed:${event.turnId}`);
127
- });
128
- const conversationState = await storage.createConversationState("test-instance");
129
- await pipelineRegistry.runTurn({
130
- agentName: "test-agent",
131
- instanceKey: "test-instance",
132
- turnId: "turn-1",
133
- traceId: "trace-1",
134
- inputEvent: {
135
- id: "evt-1",
136
- type: "user.input",
137
- input: "hello",
138
- source: { kind: "connector", name: "cli" },
139
- createdAt: new Date(),
140
- },
141
- conversationState,
142
- emitMessageEvent: () => { },
143
- metadata: {},
144
- }, async () => {
145
- return {
146
- turnId: "turn-1",
147
- finishReason: "text_response",
148
- };
149
- });
150
- expect(events).toEqual(["turn.started:turn-1", "turn.completed:turn-1"]);
151
- });
152
- it("should persist extension state across turns", async () => {
153
- const extDir = path.join(tempDir, "extensions");
154
- await fs.mkdir(extDir, { recursive: true });
155
- const extPath = path.join(extDir, "stateful-ext.ts");
156
- await fs.writeFile(extPath, `
157
- export function register(api) {
158
- api.pipeline.register('turn', async (ctx) => {
159
- const state = await api.state.get() ?? { count: 0 };
160
- const newCount = state.count + 1;
161
- await api.state.set({ count: newCount });
162
- ctx.metadata.turnCount = newCount;
163
- return ctx.next();
164
- });
165
- }
166
- `, "utf8");
167
- const resources = [
168
- {
169
- apiVersion: "goondan.ai/v1",
170
- kind: "Extension",
171
- metadata: { name: "stateful-ext" },
172
- spec: { entry: "./stateful-ext.ts" },
173
- __file: "test.yaml",
174
- __docIndex: 0,
175
- __rootDir: extDir,
176
- },
177
- ];
178
- const stateManager = new ExtensionStateManagerImpl(storage, "test-instance", ["stateful-ext"]);
179
- await stateManager.loadAll();
180
- const apiFactory = (name) => {
181
- return new ExtensionApiImpl(name, pipelineRegistry, toolRegistry, stateManager, eventBus, console);
182
- };
183
- await loadExtensions(resources, apiFactory, tempDir, console);
184
- const conversationState = await storage.createConversationState("test-instance");
185
- const metadata1 = {};
186
- await pipelineRegistry.runTurn({
187
- agentName: "test-agent",
188
- instanceKey: "test-instance",
189
- turnId: "turn-1",
190
- traceId: "trace-1",
191
- inputEvent: {
192
- id: "evt-1",
193
- type: "user.input",
194
- input: "hello",
195
- source: { kind: "connector", name: "cli" },
196
- createdAt: new Date(),
197
- },
198
- conversationState,
199
- emitMessageEvent: () => { },
200
- metadata: metadata1,
201
- }, async () => ({ turnId: "turn-1", finishReason: "text_response" }));
202
- await stateManager.saveAll();
203
- const metadata2 = {};
204
- await pipelineRegistry.runTurn({
205
- agentName: "test-agent",
206
- instanceKey: "test-instance",
207
- turnId: "turn-2",
208
- traceId: "trace-2",
209
- inputEvent: {
210
- id: "evt-2",
211
- type: "user.input",
212
- input: "hello again",
213
- source: { kind: "connector", name: "cli" },
214
- createdAt: new Date(),
215
- },
216
- conversationState,
217
- emitMessageEvent: () => { },
218
- metadata: metadata2,
219
- }, async () => ({ turnId: "turn-2", finishReason: "text_response" }));
220
- expect(metadata1.turnCount).toBe(1);
221
- expect(metadata2.turnCount).toBe(2);
222
- });
223
- });
224
- //# sourceMappingURL=integration.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"integration.test.js","sourceRoot":"","sources":["../../src/extension/integration.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=loader.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"loader.test.d.ts","sourceRoot":"","sources":["../../src/extension/loader.test.ts"],"names":[],"mappings":""}
@@ -1,180 +0,0 @@
1
- import { describe, it, expect, beforeEach } from "bun:test";
2
- import { loadExtensions, ExtensionLoadError } from "./loader.js";
3
- import { PipelineRegistryImpl } from "../pipeline/registry.js";
4
- import { ToolRegistryImpl } from "../tools/registry.js";
5
- import { ExtensionStateManagerImpl } from "./state-manager.js";
6
- import { ExtensionApiImpl } from "./api-impl.js";
7
- import { FileWorkspaceStorage } from "../workspace/storage.js";
8
- import { WorkspacePaths } from "../workspace/paths.js";
9
- import { EventEmitter } from "node:events";
10
- import * as fs from "node:fs/promises";
11
- import * as path from "node:path";
12
- import * as os from "node:os";
13
- describe("loadExtensions", () => {
14
- let tempDir;
15
- let bundleDir;
16
- let apiFactory;
17
- let logger;
18
- beforeEach(async () => {
19
- tempDir = await fs.mkdtemp(path.join(os.tmpdir(), "ext-loader-test-"));
20
- bundleDir = path.join(tempDir, "bundle");
21
- await fs.mkdir(bundleDir, { recursive: true });
22
- const paths = new WorkspacePaths({
23
- stateRoot: tempDir,
24
- projectRoot: tempDir,
25
- });
26
- const storage = new FileWorkspaceStorage(paths);
27
- await storage.initializeSystemRoot();
28
- await storage.initializeInstanceState("test-instance", "test-agent");
29
- const pipelineRegistry = new PipelineRegistryImpl();
30
- const toolRegistry = new ToolRegistryImpl();
31
- const eventBus = new EventEmitter();
32
- apiFactory = (name) => {
33
- const stateManager = new ExtensionStateManagerImpl(storage, "test-instance", [name]);
34
- return new ExtensionApiImpl(name, pipelineRegistry, toolRegistry, stateManager, eventBus, console);
35
- };
36
- logger = console;
37
- });
38
- it("should load and register extension successfully", async () => {
39
- const extPath = path.join(bundleDir, "test-ext.ts");
40
- await fs.writeFile(extPath, `
41
- export function register(api) {
42
- api.tools.register(
43
- { name: 'test-ext__hello', description: 'Test', parameters: { type: 'object', properties: {} } },
44
- async () => ({ message: 'Hello' })
45
- );
46
- }
47
- `, "utf8");
48
- const resources = [
49
- {
50
- apiVersion: "goondan.ai/v1",
51
- kind: "Extension",
52
- metadata: { name: "test-ext" },
53
- spec: { entry: "./test-ext.ts" },
54
- __file: "test.yaml",
55
- __docIndex: 0,
56
- __rootDir: bundleDir,
57
- },
58
- ];
59
- await loadExtensions(resources, apiFactory, bundleDir, logger);
60
- });
61
- it("should load multiple extensions in order", async () => {
62
- const ext1Path = path.join(bundleDir, "ext1.ts");
63
- const ext2Path = path.join(bundleDir, "ext2.ts");
64
- await fs.writeFile(ext1Path, `
65
- export function register(api) {
66
- api.logger.info('ext1 registered');
67
- }
68
- `, "utf8");
69
- await fs.writeFile(ext2Path, `
70
- export function register(api) {
71
- api.logger.info('ext2 registered');
72
- }
73
- `, "utf8");
74
- const resources = [
75
- {
76
- apiVersion: "goondan.ai/v1",
77
- kind: "Extension",
78
- metadata: { name: "ext1" },
79
- spec: { entry: "./ext1.ts" },
80
- __file: "test.yaml",
81
- __docIndex: 0,
82
- __rootDir: bundleDir,
83
- },
84
- {
85
- apiVersion: "goondan.ai/v1",
86
- kind: "Extension",
87
- metadata: { name: "ext2" },
88
- spec: { entry: "./ext2.ts" },
89
- __file: "test.yaml",
90
- __docIndex: 1,
91
- __rootDir: bundleDir,
92
- },
93
- ];
94
- await loadExtensions(resources, apiFactory, bundleDir, logger);
95
- });
96
- it("should throw ExtensionLoadError if register function is missing", async () => {
97
- const extPath = path.join(bundleDir, "bad-ext.ts");
98
- await fs.writeFile(extPath, `
99
- export const notRegister = () => {};
100
- `, "utf8");
101
- const resources = [
102
- {
103
- apiVersion: "goondan.ai/v1",
104
- kind: "Extension",
105
- metadata: { name: "bad-ext" },
106
- spec: { entry: "./bad-ext.ts" },
107
- __file: "test.yaml",
108
- __docIndex: 0,
109
- __rootDir: bundleDir,
110
- },
111
- ];
112
- await expect(loadExtensions(resources, apiFactory, bundleDir, logger)).rejects.toThrow(ExtensionLoadError);
113
- });
114
- it("should throw ExtensionLoadError if register throws", async () => {
115
- const extPath = path.join(bundleDir, "error-ext.ts");
116
- await fs.writeFile(extPath, `
117
- export function register(api) {
118
- throw new Error('Extension init failed');
119
- }
120
- `, "utf8");
121
- const resources = [
122
- {
123
- apiVersion: "goondan.ai/v1",
124
- kind: "Extension",
125
- metadata: { name: "error-ext" },
126
- spec: { entry: "./error-ext.ts" },
127
- __file: "test.yaml",
128
- __docIndex: 0,
129
- __rootDir: bundleDir,
130
- },
131
- ];
132
- await expect(loadExtensions(resources, apiFactory, bundleDir, logger)).rejects.toThrow(/Extension init failed/);
133
- });
134
- it("should support async register function", async () => {
135
- const extPath = path.join(bundleDir, "async-ext.ts");
136
- await fs.writeFile(extPath, `
137
- export async function register(api) {
138
- await new Promise(resolve => setTimeout(resolve, 10));
139
- api.logger.info('async registered');
140
- }
141
- `, "utf8");
142
- const resources = [
143
- {
144
- apiVersion: "goondan.ai/v1",
145
- kind: "Extension",
146
- metadata: { name: "async-ext" },
147
- spec: { entry: "./async-ext.ts" },
148
- __file: "test.yaml",
149
- __docIndex: 0,
150
- __rootDir: bundleDir,
151
- },
152
- ];
153
- await loadExtensions(resources, apiFactory, bundleDir, logger);
154
- });
155
- it("should include error details in ExtensionLoadError", async () => {
156
- const resources = [
157
- {
158
- apiVersion: "goondan.ai/v1",
159
- kind: "Extension",
160
- metadata: { name: "missing-ext" },
161
- spec: { entry: "./missing-ext.ts" },
162
- __file: "test.yaml",
163
- __docIndex: 0,
164
- __rootDir: bundleDir,
165
- },
166
- ];
167
- try {
168
- await loadExtensions(resources, apiFactory, bundleDir, logger);
169
- expect(true).toBe(false);
170
- }
171
- catch (error) {
172
- expect(error).toBeInstanceOf(ExtensionLoadError);
173
- if (error instanceof ExtensionLoadError) {
174
- expect(error.extensionName).toBe("missing-ext");
175
- expect(error.code).toBe("E_EXT_INIT");
176
- }
177
- }
178
- });
179
- });
180
- //# sourceMappingURL=loader.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"loader.test.js","sourceRoot":"","sources":["../../src/extension/loader.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=state-manager.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"state-manager.test.d.ts","sourceRoot":"","sources":["../../src/extension/state-manager.test.ts"],"names":[],"mappings":""}