@telorun/kernel 0.2.4
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.
- package/LICENSE +17 -0
- package/dist/boot-context-registry.d.ts +47 -0
- package/dist/boot-context-registry.d.ts.map +1 -0
- package/dist/boot-context-registry.js +131 -0
- package/dist/boot-context-registry.js.map +1 -0
- package/dist/capabilities/capabilities/component.yaml +3 -0
- package/dist/capabilities/capabilities/executable.yaml +7 -0
- package/dist/capabilities/capabilities/handler.yaml +3 -0
- package/dist/capabilities/capabilities/listener.yaml +3 -0
- package/dist/capabilities/capabilities/provider.yaml +3 -0
- package/dist/capabilities/capabilities/template.yaml +3 -0
- package/dist/capabilities/capabilities/type.yaml +3 -0
- package/dist/capabilities/component.yaml +3 -0
- package/dist/capabilities/executable.yaml +7 -0
- package/dist/capabilities/handler.yaml +3 -0
- package/dist/capabilities/listener.yaml +3 -0
- package/dist/capabilities/provider.yaml +3 -0
- package/dist/capabilities/template.yaml +3 -0
- package/dist/capabilities/type.yaml +3 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +109 -0
- package/dist/cli.js.map +1 -0
- package/dist/controller-loader.d.ts +24 -0
- package/dist/controller-loader.d.ts.map +1 -0
- package/dist/controller-loader.js +265 -0
- package/dist/controller-loader.js.map +1 -0
- package/dist/controller-registry.d.ts +56 -0
- package/dist/controller-registry.d.ts.map +1 -0
- package/dist/controller-registry.js +169 -0
- package/dist/controller-registry.js.map +1 -0
- package/dist/controllers/capability/capability-controller.d.ts +37 -0
- package/dist/controllers/capability/capability-controller.d.ts.map +1 -0
- package/dist/controllers/capability/capability-controller.js +30 -0
- package/dist/controllers/capability/capability-controller.js.map +1 -0
- package/dist/controllers/module/module-controller.d.ts +16 -0
- package/dist/controllers/module/module-controller.d.ts.map +1 -0
- package/dist/controllers/module/module-controller.js +95 -0
- package/dist/controllers/module/module-controller.js.map +1 -0
- package/dist/controllers/module/module.json +48 -0
- package/dist/controllers/resource-definition/resource-definition-controller.d.ts +33 -0
- package/dist/controllers/resource-definition/resource-definition-controller.d.ts.map +1 -0
- package/dist/controllers/resource-definition/resource-definition-controller.js +44 -0
- package/dist/controllers/resource-definition/resource-definition-controller.js.map +1 -0
- package/dist/event-stream.d.ts +45 -0
- package/dist/event-stream.d.ts.map +1 -0
- package/dist/event-stream.js +98 -0
- package/dist/event-stream.js.map +1 -0
- package/dist/events.d.ts +13 -0
- package/dist/events.d.ts.map +1 -0
- package/dist/events.js +89 -0
- package/dist/events.js.map +1 -0
- package/dist/expressions.d.ts +20 -0
- package/dist/expressions.d.ts.map +1 -0
- package/dist/expressions.js +253 -0
- package/dist/expressions.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -0
- package/dist/kernel.d.ts +113 -0
- package/dist/kernel.d.ts.map +1 -0
- package/dist/kernel.js +558 -0
- package/dist/kernel.js.map +1 -0
- package/dist/loader.d.ts +17 -0
- package/dist/loader.d.ts.map +1 -0
- package/dist/loader.js +189 -0
- package/dist/loader.js.map +1 -0
- package/dist/manifest-adapters/http-adapter.d.ts +8 -0
- package/dist/manifest-adapters/http-adapter.d.ts.map +1 -0
- package/dist/manifest-adapters/http-adapter.js +29 -0
- package/dist/manifest-adapters/http-adapter.js.map +1 -0
- package/dist/manifest-adapters/local-file-adapter.d.ts +11 -0
- package/dist/manifest-adapters/local-file-adapter.d.ts.map +1 -0
- package/dist/manifest-adapters/local-file-adapter.js +51 -0
- package/dist/manifest-adapters/local-file-adapter.js.map +1 -0
- package/dist/manifest-adapters/manifest-adapter.d.ts +33 -0
- package/dist/manifest-adapters/manifest-adapter.d.ts.map +1 -0
- package/dist/manifest-adapters/manifest-adapter.js +2 -0
- package/dist/manifest-adapters/manifest-adapter.js.map +1 -0
- package/dist/manifest-adapters/registry-adapter.d.ts +9 -0
- package/dist/manifest-adapters/registry-adapter.d.ts.map +1 -0
- package/dist/manifest-adapters/registry-adapter.js +46 -0
- package/dist/manifest-adapters/registry-adapter.js.map +1 -0
- package/dist/manifest-schemas.d.ts +66 -0
- package/dist/manifest-schemas.d.ts.map +1 -0
- package/dist/manifest-schemas.js +55 -0
- package/dist/manifest-schemas.js.map +1 -0
- package/dist/registry.d.ts +41 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +122 -0
- package/dist/registry.js.map +1 -0
- package/dist/resource-context.d.ts +48 -0
- package/dist/resource-context.d.ts.map +1 -0
- package/dist/resource-context.js +146 -0
- package/dist/resource-context.js.map +1 -0
- package/dist/resource-uri.d.ts +80 -0
- package/dist/resource-uri.d.ts.map +1 -0
- package/dist/resource-uri.js +160 -0
- package/dist/resource-uri.js.map +1 -0
- package/dist/schema-valiator.d.ts +9 -0
- package/dist/schema-valiator.d.ts.map +1 -0
- package/dist/schema-valiator.js +43 -0
- package/dist/schema-valiator.js.map +1 -0
- package/dist/snapshot-serializer.d.ts +63 -0
- package/dist/snapshot-serializer.d.ts.map +1 -0
- package/dist/snapshot-serializer.js +164 -0
- package/dist/snapshot-serializer.js.map +1 -0
- package/dist/src/controllers/module/module.yaml +32 -0
- package/dist/template-definition.d.ts +38 -0
- package/dist/template-definition.d.ts.map +1 -0
- package/dist/template-definition.js +26 -0
- package/dist/template-definition.js.map +1 -0
- package/dist/template-expander.d.ts +19 -0
- package/dist/template-expander.d.ts.map +1 -0
- package/dist/template-expander.js +425 -0
- package/dist/template-expander.js.map +1 -0
- package/dist/types.d.ts +62 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +8 -0
- package/dist/types.js.map +1 -0
- package/package.json +42 -0
package/dist/kernel.js
ADDED
|
@@ -0,0 +1,558 @@
|
|
|
1
|
+
import { isContextProvider } from "@telorun/sdk";
|
|
2
|
+
import * as path from "path";
|
|
3
|
+
import { BootContextRegistry } from "./boot-context-registry.js";
|
|
4
|
+
import { ControllerRegistry } from "./controller-registry.js";
|
|
5
|
+
import { EventStream } from "./event-stream.js";
|
|
6
|
+
import { EventBus } from "./events.js";
|
|
7
|
+
import { evaluateCel, expandValue, resolveManifestWithContext } from "./expressions.js";
|
|
8
|
+
import { Loader } from "./loader.js";
|
|
9
|
+
import { ResourceContextImpl } from "./resource-context.js";
|
|
10
|
+
import { SchemaValidator } from "./schema-valiator.js";
|
|
11
|
+
import { RuntimeError, } from "./types.js";
|
|
12
|
+
/**
|
|
13
|
+
* Kernel: Central orchestrator managing lifecycle and message bus
|
|
14
|
+
* Handles resource loading, initialization, and execution through controllers
|
|
15
|
+
*/
|
|
16
|
+
export class Kernel {
|
|
17
|
+
constructor() {
|
|
18
|
+
this.loader = new Loader();
|
|
19
|
+
// private manifests: ManifestRegistry = new ManifestRegistry();
|
|
20
|
+
this.initializationQueue = [];
|
|
21
|
+
this.controllers = new ControllerRegistry();
|
|
22
|
+
this.eventBus = new EventBus();
|
|
23
|
+
this.eventStream = new EventStream();
|
|
24
|
+
// private snapshotSerializer: SnapshotSerializer = new SnapshotSerializer();
|
|
25
|
+
// private runtimeManifests: ResourceManifest[] | null = null;
|
|
26
|
+
this.resourceInstances = new Map();
|
|
27
|
+
this.resourceEventBuses = new Map();
|
|
28
|
+
this.resourceChildren = new Map();
|
|
29
|
+
this.holdCount = 0;
|
|
30
|
+
this.idleResolvers = [];
|
|
31
|
+
this._exitCode = 0;
|
|
32
|
+
this.bootContextRegistry = new BootContextRegistry();
|
|
33
|
+
this.sharedSchemaValidator = new SchemaValidator();
|
|
34
|
+
this.setupEventStreaming();
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Register a resource dynamically during initialization
|
|
38
|
+
*/
|
|
39
|
+
registerManifest(resource) {
|
|
40
|
+
this.initializationQueue.push(resource);
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Register a child resource and track the parent-child relationship for cascade teardown
|
|
44
|
+
*/
|
|
45
|
+
registerChildManifest(parentKey, resource) {
|
|
46
|
+
this.initializationQueue.push(resource);
|
|
47
|
+
const childKey = this.getResourceKey(resource.metadata.module, resource.kind, resource.metadata.name);
|
|
48
|
+
const children = this.resourceChildren.get(parentKey) ?? [];
|
|
49
|
+
children.push(childKey);
|
|
50
|
+
this.resourceChildren.set(parentKey, children);
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Tear down a single resource and cascade to its children first
|
|
54
|
+
*/
|
|
55
|
+
async teardownResource(module, kind, name) {
|
|
56
|
+
const key = this.getResourceKey(module, kind, name);
|
|
57
|
+
// Cascade: tear down children in reverse registration order first
|
|
58
|
+
const childKeys = this.resourceChildren.get(key) ?? [];
|
|
59
|
+
for (const childKey of [...childKeys].reverse()) {
|
|
60
|
+
const childEntry = this.resourceInstances.get(childKey);
|
|
61
|
+
if (childEntry) {
|
|
62
|
+
await this.teardownResource(childEntry.resource.metadata.module, childEntry.resource.kind, childEntry.resource.metadata.name);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
this.resourceChildren.delete(key);
|
|
66
|
+
// Tear down self
|
|
67
|
+
const entry = this.resourceInstances.get(key);
|
|
68
|
+
if (!entry)
|
|
69
|
+
return;
|
|
70
|
+
const { resource, instance } = entry;
|
|
71
|
+
if (instance.teardown) {
|
|
72
|
+
await instance.teardown();
|
|
73
|
+
}
|
|
74
|
+
await this.eventBus.emit(`${resource.metadata.module}.${resource.kind}.${resource.metadata.name}.Teardown`, { resource: { kind: resource.kind, name: resource.metadata.name } });
|
|
75
|
+
this.resourceInstances.delete(key);
|
|
76
|
+
this.resourceEventBuses.delete(key);
|
|
77
|
+
}
|
|
78
|
+
async registerController(moduleName, kindName, controllerInstance) {
|
|
79
|
+
this.controllers.registerController(`${moduleName}.${kindName}`, controllerInstance);
|
|
80
|
+
await controllerInstance.register?.(this.createControllerContext(`${moduleName}.${kindName}`));
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Register a resource definition with the controller registry
|
|
84
|
+
*/
|
|
85
|
+
registerResourceDefinition(definition) {
|
|
86
|
+
this.controllers.registerDefinition(definition);
|
|
87
|
+
}
|
|
88
|
+
registerCapability(name, schema) {
|
|
89
|
+
this.controllers.registerCapability(name, schema);
|
|
90
|
+
}
|
|
91
|
+
isCapabilityRegistered(name) {
|
|
92
|
+
return this.controllers.isCapabilityRegistered(name);
|
|
93
|
+
}
|
|
94
|
+
getCapabilitySchema(name) {
|
|
95
|
+
return this.controllers.getCapabilitySchema(name);
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Load built-in Runtime definitions (e.g., Runtime.Module)
|
|
99
|
+
*/
|
|
100
|
+
async loadBuiltinDefinitions() {
|
|
101
|
+
this.controllers.registerDefinition({
|
|
102
|
+
kind: "Runtime.Definition",
|
|
103
|
+
metadata: { name: "Definition", module: "Runtime" },
|
|
104
|
+
capabilities: ["template"],
|
|
105
|
+
schema: { type: "object" },
|
|
106
|
+
});
|
|
107
|
+
this.controllers.registerController("Runtime.Definition", await import("./controllers/resource-definition/resource-definition-controller.js"));
|
|
108
|
+
const moduleSchema = await import("./controllers/module/module.json", {
|
|
109
|
+
with: { type: "json" },
|
|
110
|
+
});
|
|
111
|
+
this.controllers.registerDefinition({
|
|
112
|
+
kind: "Runtime.Definition",
|
|
113
|
+
metadata: { name: "Module", module: "Runtime" },
|
|
114
|
+
capabilities: ["template"],
|
|
115
|
+
schema: moduleSchema,
|
|
116
|
+
});
|
|
117
|
+
this.controllers.registerController("Runtime.Module", await import("./controllers/module/module-controller.js"));
|
|
118
|
+
this.controllers.registerDefinition({
|
|
119
|
+
kind: "Runtime.Definition",
|
|
120
|
+
metadata: { name: "Capability", module: "Runtime" },
|
|
121
|
+
capabilities: ["template"],
|
|
122
|
+
schema: { type: "object" },
|
|
123
|
+
});
|
|
124
|
+
this.controllers.registerController("Runtime.Capability", await import("./controllers/capability/capability-controller.js"));
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Load from runtime configuration file
|
|
128
|
+
*/
|
|
129
|
+
async loadFromConfig(runtimeYamlPath) {
|
|
130
|
+
// Initialize built-in Runtime definitions first
|
|
131
|
+
await this.loadBuiltinDefinitions();
|
|
132
|
+
// Load built-in capability manifests before user configuration so that
|
|
133
|
+
// capability resources are available in the first initialization pass
|
|
134
|
+
const { fileURLToPath } = await import("url");
|
|
135
|
+
const capabilitiesDir = fileURLToPath(new URL("./capabilities/", import.meta.url));
|
|
136
|
+
const capabilityManifests = await this.loader.loadDirectory(capabilitiesDir);
|
|
137
|
+
// Load runtime configuration
|
|
138
|
+
const userManifests = await this.loader.loadManifest(runtimeYamlPath);
|
|
139
|
+
this.initializationQueue = [...capabilityManifests, ...userManifests];
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Phase 1: Load - Ingest files from directory and load runtime config
|
|
143
|
+
* @deprecated Use loadFromConfig instead
|
|
144
|
+
*/
|
|
145
|
+
async loadDirectory(dirPath) {
|
|
146
|
+
const configYamlPath = path.join(dirPath, "module.yaml");
|
|
147
|
+
await this.loadFromConfig(configYamlPath);
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Phase 2: Start - Initialize resources
|
|
151
|
+
*/
|
|
152
|
+
async start() {
|
|
153
|
+
// Call controller register hooks first (before any initialization)
|
|
154
|
+
for (const kind of this.controllers.getKinds()) {
|
|
155
|
+
const controller = await this.controllers.getController(kind);
|
|
156
|
+
if (controller?.register) {
|
|
157
|
+
await controller.register(this.createControllerContext(`controller:${kind}`));
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
// Initialize resources
|
|
161
|
+
try {
|
|
162
|
+
await this.initializeResources();
|
|
163
|
+
await this.eventBus.emit("Runtime.Initialized", {});
|
|
164
|
+
await this.eventBus.emit("Runtime.Starting", {});
|
|
165
|
+
await this.runInstances();
|
|
166
|
+
await this.eventBus.emit("Runtime.Started", {});
|
|
167
|
+
await this.waitForIdle();
|
|
168
|
+
}
|
|
169
|
+
finally {
|
|
170
|
+
await this.eventBus.emit("Runtime.Stopping", {});
|
|
171
|
+
await this.teardownResources();
|
|
172
|
+
await this.eventBus.emit("Runtime.Stopped", { exitCode: this._exitCode });
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
async runInstances() {
|
|
176
|
+
for (const entry of this.resourceInstances.values()) {
|
|
177
|
+
const { resource, instance } = entry;
|
|
178
|
+
if (instance.run) {
|
|
179
|
+
await instance.run();
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
async emitRuntimeEvent(event, payload) {
|
|
184
|
+
await this.eventBus.emit(event, payload);
|
|
185
|
+
}
|
|
186
|
+
get exitCode() {
|
|
187
|
+
return this._exitCode;
|
|
188
|
+
}
|
|
189
|
+
requestExit(code) {
|
|
190
|
+
this._exitCode = Math.max(this._exitCode, code);
|
|
191
|
+
}
|
|
192
|
+
acquireHold(reason) {
|
|
193
|
+
this.holdCount += 1;
|
|
194
|
+
if (this.holdCount === 1) {
|
|
195
|
+
void this.eventBus.emit("Runtime.Blocked", {
|
|
196
|
+
reason,
|
|
197
|
+
count: this.holdCount,
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
let released = false;
|
|
201
|
+
return () => {
|
|
202
|
+
if (released) {
|
|
203
|
+
return;
|
|
204
|
+
}
|
|
205
|
+
released = true;
|
|
206
|
+
this.holdCount = Math.max(0, this.holdCount - 1);
|
|
207
|
+
if (this.holdCount === 0) {
|
|
208
|
+
const resolvers = this.idleResolvers.splice(0);
|
|
209
|
+
for (const resolve of resolvers) {
|
|
210
|
+
resolve();
|
|
211
|
+
}
|
|
212
|
+
void this.eventBus.emit("Runtime.Unblocked", { count: this.holdCount });
|
|
213
|
+
}
|
|
214
|
+
};
|
|
215
|
+
}
|
|
216
|
+
waitForIdle() {
|
|
217
|
+
if (this.holdCount === 0) {
|
|
218
|
+
return Promise.resolve();
|
|
219
|
+
}
|
|
220
|
+
return new Promise((resolve) => {
|
|
221
|
+
this.idleResolvers.push(resolve);
|
|
222
|
+
});
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Force-resolve waitForIdle() regardless of active holds.
|
|
226
|
+
* Used for graceful shutdown when external signals (e.g. SIGINT) should
|
|
227
|
+
* bypass resource holds and proceed directly to teardown.
|
|
228
|
+
*/
|
|
229
|
+
shutdown() {
|
|
230
|
+
const resolvers = this.idleResolvers.splice(0);
|
|
231
|
+
for (const resolve of resolvers)
|
|
232
|
+
resolve();
|
|
233
|
+
}
|
|
234
|
+
hasEventHandlers(event) {
|
|
235
|
+
return this.eventBus.hasHandlers(event);
|
|
236
|
+
}
|
|
237
|
+
hasResourceInstances() {
|
|
238
|
+
return this.resourceInstances.size > 0;
|
|
239
|
+
}
|
|
240
|
+
async teardownResources() {
|
|
241
|
+
const keys = Array.from(this.resourceInstances.keys()).reverse();
|
|
242
|
+
for (const key of keys) {
|
|
243
|
+
const entry = this.resourceInstances.get(key);
|
|
244
|
+
if (!entry)
|
|
245
|
+
continue; // already removed by a cascade
|
|
246
|
+
await this.teardownResource(entry.resource.metadata.module, entry.resource.kind, entry.resource.metadata.name);
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
on(event, handler) {
|
|
250
|
+
this.eventBus.on(event, handler);
|
|
251
|
+
}
|
|
252
|
+
createControllerContext(kind) {
|
|
253
|
+
return {
|
|
254
|
+
on: (event, handler) => this.eventBus.on(event, handler),
|
|
255
|
+
once: (event, handler) => this.eventBus.once(event, handler),
|
|
256
|
+
off: (event, handler) => this.eventBus.off(event, handler),
|
|
257
|
+
emit: (event, payload) => {
|
|
258
|
+
const namespaced = event.includes(".") ? event : `${kind}.${event}`;
|
|
259
|
+
void this.eventBus.emit(namespaced, payload);
|
|
260
|
+
},
|
|
261
|
+
acquireHold: (reason) => this.acquireHold(reason),
|
|
262
|
+
evaluateCel: (expression, context) => evaluateCel(expression, context),
|
|
263
|
+
expandValue: (value, context) => expandValue(value, context),
|
|
264
|
+
requestExit: (code) => this.requestExit(code),
|
|
265
|
+
};
|
|
266
|
+
}
|
|
267
|
+
createResourceContext(resource) {
|
|
268
|
+
const key = this.getResourceKey(resource.metadata.module, resource.kind, resource.metadata.name);
|
|
269
|
+
return new ResourceContextImpl(this, resource.metadata, this.sharedSchemaValidator, key);
|
|
270
|
+
}
|
|
271
|
+
getResourcesByKind(kind) {
|
|
272
|
+
const resources = [];
|
|
273
|
+
for (const entry of this.resourceInstances.values()) {
|
|
274
|
+
if (entry.resource.kind === kind) {
|
|
275
|
+
resources.push(entry.instance);
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
return resources;
|
|
279
|
+
}
|
|
280
|
+
getResourceByName(module, kind, name) {
|
|
281
|
+
// const [declarationModule, knd] = kind.includes('.')
|
|
282
|
+
// ? kind.split('.', 2)
|
|
283
|
+
// : ['Runtime', kind];
|
|
284
|
+
const key = this.getResourceKey(module, kind, name);
|
|
285
|
+
const entry = this.resourceInstances.get(key);
|
|
286
|
+
if (entry) {
|
|
287
|
+
return entry.instance;
|
|
288
|
+
}
|
|
289
|
+
return null;
|
|
290
|
+
}
|
|
291
|
+
/**
|
|
292
|
+
* Returns the unique set of local file paths from which resources were loaded.
|
|
293
|
+
* HTTP/HTTPS sources are excluded — they cannot be watched on disk.
|
|
294
|
+
*/
|
|
295
|
+
getSourceFiles() {
|
|
296
|
+
const seen = new Set();
|
|
297
|
+
for (const { resource } of this.resourceInstances.values()) {
|
|
298
|
+
const src = resource.metadata.source;
|
|
299
|
+
if (src && !src.startsWith("http://") && !src.startsWith("https://")) {
|
|
300
|
+
seen.add(src);
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
return Array.from(seen);
|
|
304
|
+
}
|
|
305
|
+
/**
|
|
306
|
+
* Reload all resources that were loaded from the given source file.
|
|
307
|
+
* Safe order: parse first → if parse succeeds, tear down old → init new → run new only.
|
|
308
|
+
*/
|
|
309
|
+
async reloadSource(sourcePath) {
|
|
310
|
+
// Parse first — bail before touching running resources if the file is invalid
|
|
311
|
+
const newManifests = await this.loader.loadManifest(sourcePath);
|
|
312
|
+
// Collect keys of resources loaded from this source (in insertion order)
|
|
313
|
+
const keysFromSource = [];
|
|
314
|
+
for (const [key, { resource }] of this.resourceInstances.entries()) {
|
|
315
|
+
if (resource.metadata.source === sourcePath) {
|
|
316
|
+
keysFromSource.push(key);
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
// Tear down in reverse order (children first via cascade)
|
|
320
|
+
for (const key of [...keysFromSource].reverse()) {
|
|
321
|
+
const entry = this.resourceInstances.get(key);
|
|
322
|
+
if (!entry)
|
|
323
|
+
continue; // already removed by a cascade
|
|
324
|
+
await this.teardownResource(entry.resource.metadata.module, entry.resource.kind, entry.resource.metadata.name);
|
|
325
|
+
}
|
|
326
|
+
// Queue new manifests and initialize them
|
|
327
|
+
for (const manifest of newManifests) {
|
|
328
|
+
this.initializationQueue.push(manifest);
|
|
329
|
+
}
|
|
330
|
+
const keysBefore = new Set(this.resourceInstances.keys());
|
|
331
|
+
await this.initializeResources();
|
|
332
|
+
// Run only newly created instances (not all instances — avoids double-run)
|
|
333
|
+
const newKeys = Array.from(this.resourceInstances.keys()).filter((k) => !keysBefore.has(k));
|
|
334
|
+
for (const key of newKeys) {
|
|
335
|
+
const entry = this.resourceInstances.get(key);
|
|
336
|
+
if (entry?.instance.run) {
|
|
337
|
+
await entry.instance.run();
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
async initializeResources() {
|
|
342
|
+
/**
|
|
343
|
+
* Step 4: Multi-Pass Controller Discovery Loop (Max 10 Passes)
|
|
344
|
+
* Loop up to 10 passes to discover controllers and create resource instances.
|
|
345
|
+
* Each pass removes handled resources from the list, making subsequent passes faster.
|
|
346
|
+
*/
|
|
347
|
+
// Collect all resources from registry as a list
|
|
348
|
+
let passNumber = 1;
|
|
349
|
+
const MAX_PASSES = 10;
|
|
350
|
+
const createdResources = [];
|
|
351
|
+
let handledThisPass = [];
|
|
352
|
+
// Track latest error for each resource
|
|
353
|
+
const resourceErrors = new Map();
|
|
354
|
+
// Multi-pass loop
|
|
355
|
+
do {
|
|
356
|
+
handledThisPass = [];
|
|
357
|
+
for (const resource of this.initializationQueue) {
|
|
358
|
+
const kind = resource.kind;
|
|
359
|
+
const key = this.getResourceKey(resource.metadata.module, kind, resource.metadata.name);
|
|
360
|
+
const resourceId = `${kind}:${resource.metadata.name}`;
|
|
361
|
+
// Skip if already created
|
|
362
|
+
if (this.resourceInstances.has(key)) {
|
|
363
|
+
continue;
|
|
364
|
+
}
|
|
365
|
+
const controller = this.controllers.getControllerOrUndefined(kind);
|
|
366
|
+
if (!controller) {
|
|
367
|
+
// No controller and no definition - track error and skip for now
|
|
368
|
+
resourceErrors.set(resourceId, `No controller registered for kind: ${kind}`);
|
|
369
|
+
continue;
|
|
370
|
+
}
|
|
371
|
+
if (!controller.create) {
|
|
372
|
+
// Controller exists but has no create method, skip
|
|
373
|
+
throw new RuntimeError("ERR_CONTROLLER_INVALID", `Controller for ${kind} does not implement create method`);
|
|
374
|
+
}
|
|
375
|
+
try {
|
|
376
|
+
if (!controller.schema || !controller.schema.type) {
|
|
377
|
+
throw new Error(`No schema defined for ${kind} controller`);
|
|
378
|
+
}
|
|
379
|
+
// AOT: resolve static boot-context expressions before schema validation
|
|
380
|
+
// and controller creation. This is a no-op until at least one provider
|
|
381
|
+
// has registered its context.
|
|
382
|
+
let resolvedResource = resource;
|
|
383
|
+
if (this.bootContextRegistry.hasProviders()) {
|
|
384
|
+
const bootContext = this.bootContextRegistry.buildContext(resource.kind, resource.metadata.name, resource);
|
|
385
|
+
resolvedResource = resolveManifestWithContext(resource, bootContext);
|
|
386
|
+
}
|
|
387
|
+
this.sharedSchemaValidator.compile(controller.schema).validate(resolvedResource);
|
|
388
|
+
// Create resource instance using the resolved manifest
|
|
389
|
+
const instance = await controller.create(resolvedResource, this.createResourceContext(resolvedResource));
|
|
390
|
+
if (instance) {
|
|
391
|
+
if (instance.init) {
|
|
392
|
+
await instance.init(this.createResourceContext(resolvedResource));
|
|
393
|
+
}
|
|
394
|
+
// Register ContextProvider after init() — init may populate context state
|
|
395
|
+
if (isContextProvider(instance)) {
|
|
396
|
+
this.bootContextRegistry.register(resource.kind, resource.metadata.name, resource.metadata.module, resource.grants, instance.provideContext());
|
|
397
|
+
}
|
|
398
|
+
this.resourceInstances.set(key, { resource: resolvedResource, instance });
|
|
399
|
+
createdResources.push({ kind, resource: resolvedResource, instance });
|
|
400
|
+
handledThisPass.push({ kind, resource });
|
|
401
|
+
resourceErrors.delete(resourceId);
|
|
402
|
+
}
|
|
403
|
+
this.initializationQueue = this.initializationQueue.filter((r) => r.metadata.module !== resource.metadata.module ||
|
|
404
|
+
r.kind !== resource.kind ||
|
|
405
|
+
r.metadata.name !== resource.metadata.name);
|
|
406
|
+
}
|
|
407
|
+
catch (error) {
|
|
408
|
+
// Security violations are fatal — never retry
|
|
409
|
+
if (error instanceof RuntimeError && error.code === "ERR_VISIBILITY_DENIED") {
|
|
410
|
+
throw error;
|
|
411
|
+
}
|
|
412
|
+
// Creation failed - track latest error and retry later
|
|
413
|
+
resourceErrors.set(resourceId, error instanceof Error ? (error.stack ?? error.message) : String(error));
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
passNumber++;
|
|
417
|
+
} while (passNumber <= MAX_PASSES && handledThisPass.length > 0);
|
|
418
|
+
const unhandledResources = new Map();
|
|
419
|
+
// After loop, collect any resources that were never handled
|
|
420
|
+
for (const { kind, metadata } of this.initializationQueue) {
|
|
421
|
+
const key = this.getResourceKey(metadata.module, kind, metadata.name);
|
|
422
|
+
if (!this.resourceInstances.has(key)) {
|
|
423
|
+
const resourceId = `${kind}:${metadata.name}`;
|
|
424
|
+
const errorMessage = resourceErrors.get(resourceId) || "Unknown error";
|
|
425
|
+
unhandledResources.set(resourceId, errorMessage);
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
// After all passes complete, check for unhandled resources
|
|
429
|
+
if (unhandledResources.size > 0) {
|
|
430
|
+
const unhandledList = Array.from(unhandledResources.entries())
|
|
431
|
+
.reverse() // Most relevant errors (root causes) are last in the list, so reverse to show them first
|
|
432
|
+
.map(([resource, error]) => `- ${resource}: ${error}`)
|
|
433
|
+
.join("\n");
|
|
434
|
+
throw new RuntimeError("ERR_CONTROLLER_NOT_FOUND", `Unable to process resources:\n\n${unhandledList}`);
|
|
435
|
+
}
|
|
436
|
+
}
|
|
437
|
+
// /**
|
|
438
|
+
// * Execute - Dispatch execution request to appropriate controller
|
|
439
|
+
// */
|
|
440
|
+
// async execute(urn: string, input: any, ctx?: any): Promise<any> {
|
|
441
|
+
// const [kind, name] = this.parseUrn(urn);
|
|
442
|
+
// // Lookup resource
|
|
443
|
+
// const resource = this.manifests.get(kind, name);
|
|
444
|
+
// if (!resource) {
|
|
445
|
+
// throw new RuntimeError("ERR_RESOURCE_NOT_FOUND", `Resource not found: ${urn}`);
|
|
446
|
+
// }
|
|
447
|
+
// // Find controller for this Kind
|
|
448
|
+
// const controller = await this.controllers.getController(kind);
|
|
449
|
+
// if (!controller) {
|
|
450
|
+
// throw new RuntimeError(
|
|
451
|
+
// "ERR_CONTROLLER_NOT_FOUND",
|
|
452
|
+
// `No controller registered for Kind: ${kind}`,
|
|
453
|
+
// );
|
|
454
|
+
// }
|
|
455
|
+
// // Create execution context with recursive execute capability
|
|
456
|
+
// const execContext: ExecContext = {
|
|
457
|
+
// execute: (nestedUrn: string, nestedInput: any) => this.execute(nestedUrn, nestedInput, ctx),
|
|
458
|
+
// ...ctx,
|
|
459
|
+
// };
|
|
460
|
+
// try {
|
|
461
|
+
// await this.eventBus.emit(`${name}.ExecutionStarted`, { urn });
|
|
462
|
+
// const result = await controller.execute?.(name, input, {
|
|
463
|
+
// ...execContext,
|
|
464
|
+
// resource,
|
|
465
|
+
// });
|
|
466
|
+
// await this.eventBus.emit(`${name}.ExecutionCompleted`, { urn });
|
|
467
|
+
// return result;
|
|
468
|
+
// } catch (error) {
|
|
469
|
+
// await this.eventBus.emit(`${name}.ExecutionFailed`, {
|
|
470
|
+
// urn,
|
|
471
|
+
// error: error instanceof Error ? error.message : String(error),
|
|
472
|
+
// });
|
|
473
|
+
// throw new RuntimeError(
|
|
474
|
+
// "ERR_EXECUTION_FAILED",
|
|
475
|
+
// `Execution failed for ${urn}: ${error instanceof Error ? error.message : String(error)}`,
|
|
476
|
+
// );
|
|
477
|
+
// }
|
|
478
|
+
// }
|
|
479
|
+
// private parseUrn(urn: string): [string, string] {
|
|
480
|
+
// const separator = urn.lastIndexOf(".");
|
|
481
|
+
// if (separator <= 0 || separator === urn.length - 1) {
|
|
482
|
+
// throw new Error(
|
|
483
|
+
// `Invalid URN format: ${urn}. Expected "Kind.Name" where Kind can include dots`,
|
|
484
|
+
// );
|
|
485
|
+
// }
|
|
486
|
+
// const kind = urn.slice(0, separator);
|
|
487
|
+
// const name = urn.slice(separator + 1);
|
|
488
|
+
// return [kind, name];
|
|
489
|
+
// }
|
|
490
|
+
async invoke(module, kind, name, ...args) {
|
|
491
|
+
const instance = this.getResourceByName(module, kind, name);
|
|
492
|
+
if (!instance) {
|
|
493
|
+
throw new RuntimeError("ERR_RESOURCE_NOT_FOUND", `Resource not found for invocation: ${module}.${kind}.${name}`);
|
|
494
|
+
}
|
|
495
|
+
if (typeof instance !== "object" || typeof instance["invoke"] !== "function") {
|
|
496
|
+
throw new RuntimeError("ERR_RESOURCE_NOT_INVOKABLE", `Resource ${kind}.${name} does not have an invoke method`);
|
|
497
|
+
}
|
|
498
|
+
const outputs = await instance["invoke"](...args);
|
|
499
|
+
this.emitRuntimeEvent(`${module}.${kind}.${name}.Invoked`, {
|
|
500
|
+
outputs,
|
|
501
|
+
});
|
|
502
|
+
return outputs;
|
|
503
|
+
}
|
|
504
|
+
getResourceKey(module, kind, name) {
|
|
505
|
+
if (!kind.includes(".")) {
|
|
506
|
+
throw new Error(`Resource kind must include module prefix: ${kind}`);
|
|
507
|
+
}
|
|
508
|
+
return `${module}.${kind}.${name}`;
|
|
509
|
+
}
|
|
510
|
+
// private assertResourceEventAllowed(event: string): void {
|
|
511
|
+
// const parts = event.split(".");
|
|
512
|
+
// const leaf = parts[parts.length - 1];
|
|
513
|
+
// if (leaf === "Initialized" || leaf === "Teardown") {
|
|
514
|
+
// throw new Error(`Resource events cannot use reserved lifecycle event: ${leaf}`);
|
|
515
|
+
// }
|
|
516
|
+
// }
|
|
517
|
+
/**
|
|
518
|
+
* Enable event streaming to a file (JSONL format)
|
|
519
|
+
*/
|
|
520
|
+
async enableEventStream(filePath) {
|
|
521
|
+
await this.eventStream.enable(filePath);
|
|
522
|
+
}
|
|
523
|
+
/**
|
|
524
|
+
* Disable event streaming
|
|
525
|
+
*/
|
|
526
|
+
disableEventStream() {
|
|
527
|
+
this.eventStream.disable();
|
|
528
|
+
}
|
|
529
|
+
/**
|
|
530
|
+
* Get the event stream for testing and inspection
|
|
531
|
+
*/
|
|
532
|
+
getEventStream() {
|
|
533
|
+
return this.eventStream;
|
|
534
|
+
}
|
|
535
|
+
/**
|
|
536
|
+
* Take a snapshot of current runtime state
|
|
537
|
+
*/
|
|
538
|
+
// async takeSnapshot(filePath?: string) {
|
|
539
|
+
// return this.snapshotSerializer.takeSnapshot(
|
|
540
|
+
// this.manifests.getAll(),
|
|
541
|
+
// this.resourceInstances,
|
|
542
|
+
// filePath,
|
|
543
|
+
// );
|
|
544
|
+
// }
|
|
545
|
+
/**
|
|
546
|
+
* Setup event streaming hook to capture all events
|
|
547
|
+
*/
|
|
548
|
+
setupEventStreaming() {
|
|
549
|
+
const originalEmit = this.eventBus.emit.bind(this.eventBus);
|
|
550
|
+
this.eventBus.emit = async (event, payload) => {
|
|
551
|
+
if (this.eventStream.isEnabledStream()) {
|
|
552
|
+
await this.eventStream.log(event, payload);
|
|
553
|
+
}
|
|
554
|
+
return originalEmit(event, payload);
|
|
555
|
+
};
|
|
556
|
+
}
|
|
557
|
+
}
|
|
558
|
+
//# sourceMappingURL=kernel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kernel.js","sourceRoot":"","sources":["../src/kernel.ts"],"names":[],"mappings":"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"}
|
package/dist/loader.d.ts
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { ResourceManifest } from "./types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Loader: Ingests resolved YAML manifests from disk or remote URLs into memory
|
|
4
|
+
*/
|
|
5
|
+
export declare class Loader {
|
|
6
|
+
private static projectRoot;
|
|
7
|
+
private readonly adapters;
|
|
8
|
+
private getAdapter;
|
|
9
|
+
private static ensureProjectRoot;
|
|
10
|
+
resolvePath(base: string, relative: string): string;
|
|
11
|
+
loadDirectory(pathOrUrl: string): Promise<ResourceManifest[]>;
|
|
12
|
+
loadManifest(pathOrUrl: string): Promise<ResourceManifest[]>;
|
|
13
|
+
private processFile;
|
|
14
|
+
private normalizeResource;
|
|
15
|
+
private orderResourcesByKindDependencies;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE9C;;GAEG;AACH,qBAAa,MAAM;IACjB,OAAO,CAAC,MAAM,CAAC,WAAW,CAAuB;IAEjD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAyF;IAElH,OAAO,CAAC,UAAU;IAQlB,OAAO,CAAC,MAAM,CAAC,iBAAiB;IAMhC,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM;IAI7C,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAU7D,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;YAkCpD,WAAW;IAqCzB,OAAO,CAAC,iBAAiB;IAezB,OAAO,CAAC,gCAAgC;CAoFzC"}
|