@almadar/runtime 6.28.0 → 6.30.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.
- package/dist/{OrbitalServerRuntime-DCkk0alk.d.ts → OrbitalServerRuntime-BkaBvI6-.d.ts} +6 -6
- package/dist/OrbitalServerRuntime.d.ts +2 -2
- package/dist/OrbitalServerRuntime.js +3 -3
- package/dist/ServerBridge.d.ts +1 -1
- package/dist/{chunk-FWBY567U.js → chunk-TGL6XC6E.js} +121 -65
- package/dist/chunk-TGL6XC6E.js.map +1 -0
- package/dist/{createAgentSubstrateHandlers-4JMLGDZQ.js → createAgentSubstrateHandlers-RUX4RFC6.js} +8 -20
- package/dist/createAgentSubstrateHandlers-RUX4RFC6.js.map +1 -0
- package/dist/createOsHandlers.d.ts +1 -1
- package/dist/{external-loader-YF6A3256.js → external-loader-C2LO5XG3.js} +56 -2
- package/dist/external-loader-C2LO5XG3.js.map +1 -0
- package/dist/index.d.ts +19 -4
- package/dist/index.js +2 -2
- package/dist/{types-CguyGOms.d.ts → types-D-9feVsj.d.ts} +8 -8
- package/package.json +1 -1
- package/dist/chunk-FWBY567U.js.map +0 -1
- package/dist/createAgentSubstrateHandlers-4JMLGDZQ.js.map +0 -1
- package/dist/external-loader-YF6A3256.js.map +0 -1
package/dist/{createAgentSubstrateHandlers-4JMLGDZQ.js → createAgentSubstrateHandlers-RUX4RFC6.js}
RENAMED
|
@@ -9,54 +9,42 @@ function createAgentSubstrateHandlers(ctx) {
|
|
|
9
9
|
log.warn("compose-all service not registered");
|
|
10
10
|
return null;
|
|
11
11
|
}
|
|
12
|
-
|
|
13
|
-
ctx.emitEvent("COMPOSED_ALL", { appName: config.appName, orbitalCount: config.orbitals.length });
|
|
14
|
-
return result;
|
|
12
|
+
return ctx.services.composeAll(config);
|
|
15
13
|
},
|
|
16
14
|
substrateComposeChildren: async (parentName, children) => {
|
|
17
15
|
if (!ctx.services.composeChildren) {
|
|
18
16
|
log.warn("compose-children service not registered");
|
|
19
17
|
return null;
|
|
20
18
|
}
|
|
21
|
-
|
|
22
|
-
ctx.emitEvent("COMPOSED_CHILDREN", { parentName, childCount: children.length });
|
|
23
|
-
return result;
|
|
19
|
+
return ctx.services.composeChildren(parentName, children);
|
|
24
20
|
},
|
|
25
21
|
substrateInstantiate: async (parentName, behavior, params) => {
|
|
26
22
|
if (!ctx.services.instantiate) {
|
|
27
23
|
log.warn("instantiate service not registered");
|
|
28
24
|
return null;
|
|
29
25
|
}
|
|
30
|
-
|
|
31
|
-
ctx.emitEvent("BEHAVIOR_INSTANTIATED", { parentName, behavior });
|
|
32
|
-
return result;
|
|
26
|
+
return ctx.services.instantiate(parentName, behavior, params);
|
|
33
27
|
},
|
|
34
28
|
substrateCall: async (behavior, method) => {
|
|
35
29
|
if (!ctx.services.call) {
|
|
36
30
|
log.warn("call service not registered");
|
|
37
31
|
return null;
|
|
38
32
|
}
|
|
39
|
-
|
|
40
|
-
ctx.emitEvent("BEHAVIOR_CALLED", { behavior, method });
|
|
41
|
-
return result;
|
|
33
|
+
return ctx.services.call(behavior, method);
|
|
42
34
|
},
|
|
43
35
|
substrateValidate: async (orbitalName) => {
|
|
44
36
|
if (!ctx.services.validate) {
|
|
45
37
|
log.warn("validate service not registered");
|
|
46
38
|
return null;
|
|
47
39
|
}
|
|
48
|
-
|
|
49
|
-
ctx.emitEvent("VALIDATED", { orbitalName });
|
|
50
|
-
return result;
|
|
40
|
+
return ctx.services.validate(orbitalName);
|
|
51
41
|
},
|
|
52
42
|
substrateEmitBody: async (orbitalName) => {
|
|
53
43
|
if (!ctx.services.emitBody) {
|
|
54
44
|
log.warn("emit-body service not registered");
|
|
55
45
|
return null;
|
|
56
46
|
}
|
|
57
|
-
|
|
58
|
-
ctx.emitEvent("LOLO_EMITTED", { orbitalName });
|
|
59
|
-
return result;
|
|
47
|
+
return ctx.services.emitBody(orbitalName, "");
|
|
60
48
|
}
|
|
61
49
|
};
|
|
62
50
|
return {
|
|
@@ -67,5 +55,5 @@ function createAgentSubstrateHandlers(ctx) {
|
|
|
67
55
|
}
|
|
68
56
|
|
|
69
57
|
export { createAgentSubstrateHandlers };
|
|
70
|
-
//# sourceMappingURL=createAgentSubstrateHandlers-
|
|
71
|
-
//# sourceMappingURL=createAgentSubstrateHandlers-
|
|
58
|
+
//# sourceMappingURL=createAgentSubstrateHandlers-RUX4RFC6.js.map
|
|
59
|
+
//# sourceMappingURL=createAgentSubstrateHandlers-RUX4RFC6.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/createAgentSubstrateHandlers.ts"],"names":[],"mappings":";;;AAyBA,IAAM,GAAA,GAAM,aAAa,oCAAoC,CAAA;AAqBtD,SAAS,6BAA6B,GAAA,EAAgE;AACzG,EAAA,MAAM,QAAA,GAAoC;AAAA,IACtC,mBAAA,EAAqB,OAAO,MAAA,KAAW;AACnC,MAAA,IAAI,CAAC,GAAA,CAAI,QAAA,CAAS,UAAA,EAAY;AAC1B,QAAA,GAAA,CAAI,KAAK,oCAAoC,CAAA;AAC7C,QAAA,OAAO,IAAA;AAAA,MACX;AAIA,MAAA,OAAO,GAAA,CAAI,QAAA,CAAS,UAAA,CAAW,MAAM,CAAA;AAAA,IACzC,CAAA;AAAA,IAEA,wBAAA,EAA0B,OAAO,UAAA,EAAY,QAAA,KAAa;AACtD,MAAA,IAAI,CAAC,GAAA,CAAI,QAAA,CAAS,eAAA,EAAiB;AAC/B,QAAA,GAAA,CAAI,KAAK,yCAAyC,CAAA;AAClD,QAAA,OAAO,IAAA;AAAA,MACX;AACA,MAAA,OAAO,GAAA,CAAI,QAAA,CAAS,eAAA,CAAgB,UAAA,EAAY,QAAQ,CAAA;AAAA,IAC5D,CAAA;AAAA,IAEA,oBAAA,EAAsB,OAAO,UAAA,EAAY,QAAA,EAAU,MAAA,KAAW;AAC1D,MAAA,IAAI,CAAC,GAAA,CAAI,QAAA,CAAS,WAAA,EAAa;AAC3B,QAAA,GAAA,CAAI,KAAK,oCAAoC,CAAA;AAC7C,QAAA,OAAO,IAAA;AAAA,MACX;AACA,MAAA,OAAO,GAAA,CAAI,QAAA,CAAS,WAAA,CAAY,UAAA,EAAY,UAAU,MAAM,CAAA;AAAA,IAChE,CAAA;AAAA,IAEA,aAAA,EAAe,OAAO,QAAA,EAAU,MAAA,KAAW;AACvC,MAAA,IAAI,CAAC,GAAA,CAAI,QAAA,CAAS,IAAA,EAAM;AACpB,QAAA,GAAA,CAAI,KAAK,6BAA6B,CAAA;AACtC,QAAA,OAAO,IAAA;AAAA,MACX;AACA,MAAA,OAAO,GAAA,CAAI,QAAA,CAAS,IAAA,CAAK,QAAA,EAAU,MAAM,CAAA;AAAA,IAC7C,CAAA;AAAA,IAEA,iBAAA,EAAmB,OAAO,WAAA,KAAgB;AACtC,MAAA,IAAI,CAAC,GAAA,CAAI,QAAA,CAAS,QAAA,EAAU;AACxB,QAAA,GAAA,CAAI,KAAK,iCAAiC,CAAA;AAC1C,QAAA,OAAO,IAAA;AAAA,MACX;AACA,MAAA,OAAO,GAAA,CAAI,QAAA,CAAS,QAAA,CAAS,WAAW,CAAA;AAAA,IAC5C,CAAA;AAAA,IAEA,iBAAA,EAAmB,OAAO,WAAA,KAAgB;AACtC,MAAA,IAAI,CAAC,GAAA,CAAI,QAAA,CAAS,QAAA,EAAU;AACxB,QAAA,GAAA,CAAI,KAAK,kCAAkC,CAAA;AAC3C,QAAA,OAAO,IAAA;AAAA,MACX;AACA,MAAA,OAAO,GAAA,CAAI,QAAA,CAAS,QAAA,CAAS,WAAA,EAAa,EAAE,CAAA;AAAA,IAChD;AAAA,GACJ;AAEA,EAAA,OAAO;AAAA,IACH,QAAA;AAAA,IACA,SAAS,MAAM;AAAA,IAAC;AAAA,GACpB;AACJ","file":"createAgentSubstrateHandlers-RUX4RFC6.js","sourcesContent":["/**\n * Agent Substrate Handlers — Server-Side Only\n *\n * Provides implementations for the effect-position substrate operators:\n * compose/compose-all, compose/compose-children, behavior/instantiate,\n * behavior/call, validate/validate, lolo/emit-body.\n *\n * Used by OrbitalServerRuntime (interpreted path). Wired alongside\n * createOsHandlers — same lazy-import + merge-under-user-handlers pattern.\n *\n * The actual service invocations are injected via the `services` field of\n * AgentSubstrateHandlerContext. @almadar-io/rabit supplies these at runtime;\n * tests can inject mocks. When a service is absent, the handler logs a\n * warning and returns a safe default.\n *\n * NOT exported from the main index.ts because it references Node-only types.\n * Import directly: import { createAgentSubstrateHandlers } from '@almadar/runtime/createAgentSubstrateHandlers';\n *\n * @packageDocumentation\n */\n\nimport { createLogger } from '@almadar/logger';\nimport type { EventPayload, EffectHandlers } from './types.js';\nimport type { ServiceCallResult, Orbital, TraitConfig } from '@almadar/core';\n\nconst log = createLogger('almadar:runtime:substrate-handlers');\n\nexport interface SubstrateServices {\n composeAll?: (config: { appName: string; orbitals: Orbital[]; layoutStrategy?: string }) => Promise<ServiceCallResult>;\n composeChildren?: (parentName: string, children: Orbital[]) => Promise<ServiceCallResult>;\n instantiate?: (parentName: string, behavior: string, params?: TraitConfig) => Promise<ServiceCallResult>;\n call?: (behavior: string, method: string, params?: TraitConfig) => Promise<ServiceCallResult>;\n validate?: (orbitalName: string) => Promise<ServiceCallResult>;\n emitBody?: (orbitalName: string, loloSource: string) => Promise<ServiceCallResult>;\n}\n\nexport interface AgentSubstrateHandlerContext {\n emitEvent: (type: string, payload: EventPayload) => void;\n services: SubstrateServices;\n}\n\nexport interface AgentSubstrateHandlerResult {\n handlers: Partial<EffectHandlers>;\n cleanup: () => void;\n}\n\nexport function createAgentSubstrateHandlers(ctx: AgentSubstrateHandlerContext): AgentSubstrateHandlerResult {\n const handlers: Partial<EffectHandlers> = {\n substrateComposeAll: async (config) => {\n if (!ctx.services.composeAll) {\n log.warn('compose-all service not registered');\n return null;\n }\n // Success/failure events are dispatched by EffectExecutor via the\n // author's `emit:` config (uniform `{ result }` payload); this\n // handler only performs the invocation and returns the value.\n return ctx.services.composeAll(config);\n },\n\n substrateComposeChildren: async (parentName, children) => {\n if (!ctx.services.composeChildren) {\n log.warn('compose-children service not registered');\n return null;\n }\n return ctx.services.composeChildren(parentName, children);\n },\n\n substrateInstantiate: async (parentName, behavior, params) => {\n if (!ctx.services.instantiate) {\n log.warn('instantiate service not registered');\n return null;\n }\n return ctx.services.instantiate(parentName, behavior, params);\n },\n\n substrateCall: async (behavior, method) => {\n if (!ctx.services.call) {\n log.warn('call service not registered');\n return null;\n }\n return ctx.services.call(behavior, method);\n },\n\n substrateValidate: async (orbitalName) => {\n if (!ctx.services.validate) {\n log.warn('validate service not registered');\n return null;\n }\n return ctx.services.validate(orbitalName);\n },\n\n substrateEmitBody: async (orbitalName) => {\n if (!ctx.services.emitBody) {\n log.warn('emit-body service not registered');\n return null;\n }\n return ctx.services.emitBody(orbitalName, '');\n },\n };\n\n return {\n handlers,\n cleanup: () => {},\n };\n}\n"]}
|
|
@@ -165,8 +165,62 @@ var ExternalOrbitalLoader = class {
|
|
|
165
165
|
}
|
|
166
166
|
return { success: true, data: importPath };
|
|
167
167
|
}
|
|
168
|
+
if (importPath.includes("/") && !importPath.startsWith("./") && !importPath.startsWith("../") && !importPath.startsWith("@") && !importPath.startsWith("std/")) {
|
|
169
|
+
const name = importPath.slice(importPath.lastIndexOf("/") + 1).replace(/\.orb$/, "");
|
|
170
|
+
const result = this.resolveBehaviorInRegistries(name);
|
|
171
|
+
if (result.success) {
|
|
172
|
+
return result;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
168
175
|
return this.resolveRelativePath(`./${importPath}`, fromPath);
|
|
169
176
|
}
|
|
177
|
+
/**
|
|
178
|
+
* Resolve a bare behavior name by recursively searching each configured
|
|
179
|
+
* registry root (`stdLibPath` + `behaviorsLibPaths`) for a file named
|
|
180
|
+
* `<name>.orb` anywhere under `<root>/behaviors/registry/`. Each candidate
|
|
181
|
+
* is path-traversal-guarded against its root.
|
|
182
|
+
*/
|
|
183
|
+
resolveBehaviorInRegistries(name) {
|
|
184
|
+
const roots = [];
|
|
185
|
+
if (this.options.stdLibPath) roots.push(path.normalize(this.options.stdLibPath));
|
|
186
|
+
for (const p of this.options.behaviorsLibPaths) {
|
|
187
|
+
const norm = path.normalize(p);
|
|
188
|
+
if (!roots.includes(norm)) roots.push(norm);
|
|
189
|
+
}
|
|
190
|
+
const target = `${name}.orb`;
|
|
191
|
+
for (const root of roots) {
|
|
192
|
+
const registryRoot = path.join(root, "behaviors", "registry");
|
|
193
|
+
if (!fs.existsSync(registryRoot)) continue;
|
|
194
|
+
const found = this.findFileRecursive(registryRoot, target, root);
|
|
195
|
+
if (found) return { success: true, data: found };
|
|
196
|
+
}
|
|
197
|
+
return {
|
|
198
|
+
success: false,
|
|
199
|
+
error: `Behavior not found in registries: ${name} (searched ${roots.length} root(s): ${roots.join(", ")})`
|
|
200
|
+
};
|
|
201
|
+
}
|
|
202
|
+
/** Depth-first recursive search for `target` filename under `dir`, guarded
|
|
203
|
+
* to stay within `root`. Returns the normalized absolute path on hit. */
|
|
204
|
+
findFileRecursive(dir, target, root) {
|
|
205
|
+
let entries;
|
|
206
|
+
try {
|
|
207
|
+
entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
208
|
+
} catch {
|
|
209
|
+
return void 0;
|
|
210
|
+
}
|
|
211
|
+
for (const entry of entries) {
|
|
212
|
+
const full = path.join(dir, entry.name);
|
|
213
|
+
const normalized = path.normalize(full);
|
|
214
|
+
if (!normalized.startsWith(root)) continue;
|
|
215
|
+
if (entry.isDirectory()) {
|
|
216
|
+
const hit = this.findFileRecursive(full, target, root);
|
|
217
|
+
if (hit) return hit;
|
|
218
|
+
} else if (entry.name === target) {
|
|
219
|
+
return normalized;
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
return void 0;
|
|
223
|
+
}
|
|
170
224
|
/**
|
|
171
225
|
* Resolve a standard library path.
|
|
172
226
|
*
|
|
@@ -385,5 +439,5 @@ function autoDetectBehaviorsLibPaths(stdLibPath) {
|
|
|
385
439
|
}
|
|
386
440
|
|
|
387
441
|
export { ExternalOrbitalLoader, ImportChain, LoaderCache, createLoader, parseImportPath };
|
|
388
|
-
//# sourceMappingURL=external-loader-
|
|
389
|
-
//# sourceMappingURL=external-loader-
|
|
442
|
+
//# sourceMappingURL=external-loader-C2LO5XG3.js.map
|
|
443
|
+
//# sourceMappingURL=external-loader-C2LO5XG3.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/loader/external-loader.ts"],"names":[],"mappings":"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","file":"external-loader-C2LO5XG3.js","sourcesContent":["/**\n * External Orbital Loader\n *\n * Loads external .orb files from various sources:\n * - Local filesystem (relative paths)\n * - Standard library (std/...)\n * - Scoped packages (@name/...)\n *\n * @packageDocumentation\n */\n\nimport * as fs from \"fs\";\nimport * as path from \"path\";\nimport type { Orbital, OrbitalSchema } from \"@almadar/core\";\nimport { OrbitalSchemaSchema } from \"@almadar/core\";\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/**\n * Result of loading an orbital.\n */\nexport interface LoadedOrbital {\n /** The loaded orbital */\n orbital: Orbital;\n\n /** Source path (resolved absolute path) */\n sourcePath: string;\n\n /** Original import path */\n importPath: string;\n}\n\n/**\n * Result of loading an orbital schema (may contain multiple orbitals).\n */\nexport interface LoadedSchema {\n /** The loaded schema */\n schema: OrbitalSchema;\n\n /** Source path (resolved absolute path) */\n sourcePath: string;\n\n /** Original import path */\n importPath: string;\n}\n\n/**\n * Loader options.\n */\nexport interface LoaderOptions {\n /** Base directory for resolving relative imports */\n basePath: string;\n\n /** Standard library root path */\n stdLibPath?: string;\n\n /**\n * Additional roots searched for `std/behaviors/*` imports after `stdLibPath`.\n * After the v16.0.0 package split, domain behaviors (app/, game/, marketing/,\n * probes/, service/) moved from `@almadar/std` to `@almadar-io/behaviors`.\n * Callers can pass that package's root here so cross-package `uses` resolve.\n *\n * If omitted, the loader auto-detects a sibling `@almadar-io/behaviors`\n * next to `stdLibPath` in node_modules at construction time.\n */\n behaviorsLibPaths?: string[];\n\n /** Scoped package roots (e.g., { \"@game-lib\": \"/path/to/lib\" }) */\n scopedPaths?: Record<string, string>;\n\n /** Whether to allow paths outside basePath (security) */\n allowOutsideBasePath?: boolean;\n}\n\n/**\n * Loader result with error handling.\n */\nexport type LoadResult<T> =\n | { success: true; data: T }\n | { success: false; error: string };\n\n// ============================================================================\n// Circular Import Detection\n// ============================================================================\n\n/**\n * Tracks import chains to detect circular imports.\n */\nexport class ImportChain {\n private chain: string[] = [];\n\n /**\n * Try to add a path to the chain.\n * @returns Error message if circular, null if OK\n */\n push(absolutePath: string): string | null {\n if (this.chain.includes(absolutePath)) {\n const cycle = [...this.chain.slice(this.chain.indexOf(absolutePath)), absolutePath];\n return `Circular import detected: ${cycle.join(\" -> \")}`;\n }\n this.chain.push(absolutePath);\n return null;\n }\n\n /**\n * Remove the last path from the chain.\n */\n pop(): void {\n this.chain.pop();\n }\n\n /**\n * Clone the chain for nested loading.\n */\n clone(): ImportChain {\n const newChain = new ImportChain();\n newChain.chain = [...this.chain];\n return newChain;\n }\n}\n\n// ============================================================================\n// Cache\n// ============================================================================\n\n/**\n * Cache for loaded schemas to avoid re-loading.\n */\nexport class LoaderCache {\n private cache = new Map<string, LoadedSchema>();\n\n get(absolutePath: string): LoadedSchema | undefined {\n return this.cache.get(absolutePath);\n }\n\n set(absolutePath: string, schema: LoadedSchema): void {\n this.cache.set(absolutePath, schema);\n }\n\n has(absolutePath: string): boolean {\n return this.cache.has(absolutePath);\n }\n\n clear(): void {\n this.cache.clear();\n }\n\n get size(): number {\n return this.cache.size;\n }\n}\n\n// ============================================================================\n// External Orbital Loader\n// ============================================================================\n\n/**\n * ExternalOrbitalLoader - Loads external .orb files with security and caching.\n *\n * Security Model:\n * - By default, only allows loading from within basePath\n * - std library has its own allowed path\n * - Scoped packages have their own allowed paths\n * - No path traversal outside allowed directories\n *\n * @example\n * ```typescript\n * const loader = new ExternalOrbitalLoader({\n * basePath: \"/project/schemas\",\n * stdLibPath: \"/project/std\",\n * });\n *\n * // Load relative .orb file\n * const result = await loader.load(\"./shared/health.orb\");\n *\n * // Load from std library\n * const stdResult = await loader.load(\"std/behaviors/game-core\");\n * ```\n */\nexport class ExternalOrbitalLoader {\n private options: Required<LoaderOptions>;\n private cache: LoaderCache;\n\n constructor(options: LoaderOptions) {\n this.options = {\n stdLibPath: options.stdLibPath ?? \"\",\n behaviorsLibPaths: options.behaviorsLibPaths ?? autoDetectBehaviorsLibPaths(options.stdLibPath),\n scopedPaths: options.scopedPaths ?? {},\n allowOutsideBasePath: options.allowOutsideBasePath ?? false,\n ...options,\n };\n this.cache = new LoaderCache();\n }\n\n /**\n * Load a schema from an import path.\n *\n * @param importPath - The import path (e.g., \"./health.orb\", \"std/behaviors/game-core\")\n * @param fromPath - The path of the file doing the import (for relative resolution)\n * @param chain - Import chain for circular detection\n */\n async load(\n importPath: string,\n fromPath?: string,\n chain?: ImportChain\n ): Promise<LoadResult<LoadedSchema>> {\n const importChain = chain ?? new ImportChain();\n\n // Resolve the absolute path\n const resolveResult = this.resolvePath(importPath, fromPath);\n if (!resolveResult.success) {\n return resolveResult;\n }\n const absolutePath = resolveResult.data;\n\n // Check for circular imports\n const circularError = importChain.push(absolutePath);\n if (circularError) {\n return { success: false, error: circularError };\n }\n\n try {\n // Check cache\n const cached = this.cache.get(absolutePath);\n if (cached) {\n return { success: true, data: cached };\n }\n\n // Load and parse the file\n const loadResult = await this.loadFile(absolutePath);\n if (!loadResult.success) {\n return loadResult;\n }\n\n const loaded: LoadedSchema = {\n schema: loadResult.data,\n sourcePath: absolutePath,\n importPath,\n };\n\n // Cache the result\n this.cache.set(absolutePath, loaded);\n\n return { success: true, data: loaded };\n } finally {\n importChain.pop();\n }\n }\n\n /**\n * Load a specific orbital from a schema by name.\n *\n * @param importPath - The import path\n * @param orbitalName - The orbital name (optional, defaults to first orbital)\n * @param fromPath - The path of the file doing the import\n * @param chain - Import chain for circular detection\n */\n async loadOrbital(\n importPath: string,\n orbitalName?: string,\n fromPath?: string,\n chain?: ImportChain\n ): Promise<LoadResult<LoadedOrbital>> {\n const schemaResult = await this.load(importPath, fromPath, chain);\n if (!schemaResult.success) {\n return schemaResult;\n }\n\n const schema = schemaResult.data.schema;\n let orbital: Orbital;\n\n if (orbitalName) {\n const found = schema.orbitals.find((o: Orbital) => o.name === orbitalName);\n if (!found) {\n return {\n success: false,\n error: `Orbital \"${orbitalName}\" not found in ${importPath}. Available: ${schema.orbitals.map((o: Orbital) => o.name).join(\", \")}`,\n };\n }\n orbital = found;\n } else {\n // Default to first orbital\n if (schema.orbitals.length === 0) {\n return {\n success: false,\n error: `No orbitals found in ${importPath}`,\n };\n }\n orbital = schema.orbitals[0];\n }\n\n return {\n success: true,\n data: {\n orbital,\n sourcePath: schemaResult.data.sourcePath,\n importPath,\n },\n };\n }\n\n /**\n * Resolve an import path to an absolute filesystem path.\n */\n resolvePath(importPath: string, fromPath?: string): LoadResult<string> {\n // Standard library\n if (importPath.startsWith(\"std/\")) {\n return this.resolveStdPath(importPath);\n }\n\n // Scoped packages\n if (importPath.startsWith(\"@\")) {\n return this.resolveScopedPath(importPath);\n }\n\n // Relative paths\n if (importPath.startsWith(\"./\") || importPath.startsWith(\"../\")) {\n return this.resolveRelativePath(importPath, fromPath);\n }\n\n // Absolute paths (only if allowed)\n if (path.isAbsolute(importPath)) {\n if (!this.options.allowOutsideBasePath) {\n return {\n success: false,\n error: `Absolute paths not allowed: ${importPath}`,\n };\n }\n return { success: true, data: importPath };\n }\n\n // Behavior-package registry: a bare `<package>/<behavior-name>` import\n // (e.g. `almadar-behaviors/rpg-hero`) resolves to the emitted\n // `<root>/behaviors/registry/.../<name>.orb`. Mirrors the compiled-path\n // loader; std stays handled above.\n if (\n importPath.includes(\"/\") &&\n !importPath.startsWith(\"./\") &&\n !importPath.startsWith(\"../\") &&\n !importPath.startsWith(\"@\") &&\n !importPath.startsWith(\"std/\")\n ) {\n const name = importPath\n .slice(importPath.lastIndexOf(\"/\") + 1)\n .replace(/\\.orb$/, \"\");\n const result = this.resolveBehaviorInRegistries(name);\n if (result.success) {\n return result;\n }\n }\n\n // Default: treat as relative to base path\n return this.resolveRelativePath(`./${importPath}`, fromPath);\n }\n\n /**\n * Resolve a bare behavior name by recursively searching each configured\n * registry root (`stdLibPath` + `behaviorsLibPaths`) for a file named\n * `<name>.orb` anywhere under `<root>/behaviors/registry/`. Each candidate\n * is path-traversal-guarded against its root.\n */\n private resolveBehaviorInRegistries(name: string): LoadResult<string> {\n const roots: string[] = [];\n if (this.options.stdLibPath) roots.push(path.normalize(this.options.stdLibPath));\n for (const p of this.options.behaviorsLibPaths) {\n const norm = path.normalize(p);\n if (!roots.includes(norm)) roots.push(norm);\n }\n const target = `${name}.orb`;\n for (const root of roots) {\n const registryRoot = path.join(root, \"behaviors\", \"registry\");\n if (!fs.existsSync(registryRoot)) continue;\n const found = this.findFileRecursive(registryRoot, target, root);\n if (found) return { success: true, data: found };\n }\n return {\n success: false,\n error: `Behavior not found in registries: ${name} (searched ${roots.length} root(s): ${roots.join(\", \")})`,\n };\n }\n\n /** Depth-first recursive search for `target` filename under `dir`, guarded\n * to stay within `root`. Returns the normalized absolute path on hit. */\n private findFileRecursive(\n dir: string,\n target: string,\n root: string\n ): string | undefined {\n let entries: fs.Dirent[];\n try {\n entries = fs.readdirSync(dir, { withFileTypes: true });\n } catch {\n return undefined;\n }\n for (const entry of entries) {\n const full = path.join(dir, entry.name);\n const normalized = path.normalize(full);\n if (!normalized.startsWith(root)) continue;\n if (entry.isDirectory()) {\n const hit = this.findFileRecursive(full, target, root);\n if (hit) return hit;\n } else if (entry.name === target) {\n return normalized;\n }\n }\n return undefined;\n }\n\n /**\n * Resolve a standard library path.\n *\n * The std registry uses a topic/tier layout under\n * `<stdLibPath>/behaviors/registry/<topic>/{atoms,molecules,organisms}/<name>.orb`\n * (topic ∈ core|agent|game|service|app|probes). For `std/behaviors/<name>`\n * imports, try each (topic × tier) combination in order and return the first\n * one that exists on disk. Falls back to the pre-topic flat-tier layout and\n * the very old flat layout for back-compat. This matches how the Rust\n * compiler's `embedded.rs` resolves std paths.\n */\n private resolveStdPath(importPath: string): LoadResult<string> {\n if (!this.options.stdLibPath && this.options.behaviorsLibPaths.length === 0) {\n return {\n success: false,\n error: `Standard library path not configured. Cannot load: ${importPath}`,\n };\n }\n\n // std/behaviors/<name> → extract <name>.\n const relativePath = importPath.slice(4); // strip \"std/\"\n const name = relativePath\n .replace(/^behaviors\\//, \"\")\n .replace(/\\.orb$/, \"\");\n\n const topics = [\"core\", \"core-variations\", \"agent\", \"game\", \"service\", \"app\", \"probes\", \"marketing\"] as const;\n const tiers = [\"atoms\", \"molecules\", \"organisms\"] as const;\n\n // Build candidate list across all configured roots: std first, then any\n // companion package (@almadar-io/behaviors). For each root we try the\n // canonical topic/tier layout, plus two legacy fallbacks for very old\n // std layouts. Each (root, candidate) pair is path-traversal-guarded.\n const roots: string[] = [];\n if (this.options.stdLibPath) roots.push(path.normalize(this.options.stdLibPath));\n for (const p of this.options.behaviorsLibPaths) {\n const norm = path.normalize(p);\n if (!roots.includes(norm)) roots.push(norm);\n }\n\n let totalCandidates = 0;\n for (const root of roots) {\n const candidates: string[] = [];\n for (const topic of topics) {\n for (const tier of tiers) {\n candidates.push(path.join(root, \"behaviors\", \"registry\", topic, tier, `${name}.orb`));\n }\n }\n // UI family layout: behaviors/registry/ui/<family>/{atoms,molecules,organisms}/<name>.orb\n const uiRoot = path.join(root, \"behaviors\", \"registry\", \"ui\");\n if (fs.existsSync(uiRoot)) {\n const families = fs.readdirSync(uiRoot, { withFileTypes: true })\n .filter((entry) => entry.isDirectory())\n .map((entry) => entry.name);\n for (const family of families) {\n for (const tier of tiers) {\n candidates.push(path.join(uiRoot, family, tier, `${name}.orb`));\n }\n }\n }\n // Back-compat: pre-topic flat-tier layout (std 6.1–7.10).\n for (const tier of tiers) {\n candidates.push(path.join(root, \"behaviors\", \"registry\", tier, `${name}.orb`));\n }\n // Oldest back-compat: flat `<root>/behaviors/<name>.orb`.\n candidates.push(path.join(root, relativePath.endsWith(\".orb\") ? relativePath : `${relativePath}.orb`));\n totalCandidates += candidates.length;\n\n for (const candidate of candidates) {\n const normalized = path.normalize(candidate);\n // Path-traversal guard: each candidate must stay within its own root\n if (!normalized.startsWith(root)) continue;\n if (fs.existsSync(normalized)) {\n return { success: true, data: normalized };\n }\n }\n }\n\n return {\n success: false,\n error: `std behavior not found in registry: ${importPath} (tried ${totalCandidates} locations across ${roots.length} root(s): ${roots.join(\", \")})`,\n };\n }\n\n /**\n * Resolve a scoped package path.\n */\n private resolveScopedPath(importPath: string): LoadResult<string> {\n // Extract scope: @game-lib/enemies.orb -> @game-lib\n const match = importPath.match(/^(@[^/]+)/);\n if (!match) {\n return {\n success: false,\n error: `Invalid scoped package path: ${importPath}`,\n };\n }\n\n const scope = match[1];\n const scopeRoot = this.options.scopedPaths[scope];\n if (!scopeRoot) {\n return {\n success: false,\n error: `Scoped package \"${scope}\" not configured. Available: ${Object.keys(this.options.scopedPaths).join(\", \") || \"none\"}`,\n };\n }\n\n // @game-lib/enemies.orb -> scopeRoot/enemies.orb\n const relativePath = importPath.slice(scope.length + 1); // Remove \"@scope/\"\n let absolutePath = path.join(scopeRoot, relativePath);\n\n // Add .orb extension if not present\n if (!absolutePath.endsWith(\".orb\")) {\n absolutePath += \".orb\";\n }\n\n // Validate it's within scope root\n const normalizedPath = path.normalize(absolutePath);\n const normalizedRoot = path.normalize(scopeRoot);\n if (!normalizedPath.startsWith(normalizedRoot)) {\n return {\n success: false,\n error: `Path traversal outside scoped package: ${importPath}`,\n };\n }\n\n return { success: true, data: absolutePath };\n }\n\n /**\n * Resolve a relative path.\n */\n private resolveRelativePath(\n importPath: string,\n fromPath?: string\n ): LoadResult<string> {\n const baseDir = fromPath\n ? path.dirname(fromPath)\n : this.options.basePath;\n\n let absolutePath = path.resolve(baseDir, importPath);\n\n // Add .orb extension if not present\n if (!absolutePath.endsWith(\".orb\")) {\n absolutePath += \".orb\";\n }\n\n // Security check: ensure within base path\n if (!this.options.allowOutsideBasePath) {\n const normalizedPath = path.normalize(absolutePath);\n const normalizedBase = path.normalize(this.options.basePath);\n if (!normalizedPath.startsWith(normalizedBase)) {\n return {\n success: false,\n error: `Path traversal outside base path: ${importPath}. Base: ${this.options.basePath}`,\n };\n }\n }\n\n return { success: true, data: absolutePath };\n }\n\n /**\n * Load and parse an .orb file.\n */\n private async loadFile(absolutePath: string): Promise<LoadResult<OrbitalSchema>> {\n try {\n // Check file exists\n if (!fs.existsSync(absolutePath)) {\n return {\n success: false,\n error: `File not found: ${absolutePath}`,\n };\n }\n\n // Read file\n const content = await fs.promises.readFile(absolutePath, \"utf-8\");\n\n // Parse JSON\n let data: unknown;\n try {\n data = JSON.parse(content);\n } catch (e) {\n return {\n success: false,\n error: `Invalid JSON in ${absolutePath}: ${e instanceof Error ? e.message : String(e)}`,\n };\n }\n\n // Validate with Zod\n const parseResult = OrbitalSchemaSchema.safeParse(data);\n if (!parseResult.success) {\n const errors = parseResult.error.errors\n .map((e) => ` - ${e.path.join(\".\")}: ${e.message}`)\n .join(\"\\n\");\n return {\n success: false,\n error: `Invalid schema in ${absolutePath}:\\n${errors}`,\n };\n }\n\n return { success: true, data: parseResult.data as OrbitalSchema };\n } catch (e) {\n return {\n success: false,\n error: `Failed to load ${absolutePath}: ${e instanceof Error ? e.message : String(e)}`,\n };\n }\n }\n\n /**\n * Clear the cache.\n */\n clearCache(): void {\n this.cache.clear();\n }\n\n /**\n * Get cache statistics.\n */\n getCacheStats(): { size: number } {\n return { size: this.cache.size };\n }\n}\n\n// ============================================================================\n// Factory Function\n// ============================================================================\n\n/**\n * Create a loader with sensible defaults.\n */\nexport function createLoader(basePath: string, options?: Partial<LoaderOptions>): ExternalOrbitalLoader {\n return new ExternalOrbitalLoader({\n basePath,\n ...options,\n });\n}\n\n// ============================================================================\n// Utility Functions\n// ============================================================================\n\n/**\n * Parse an import path with optional fragment.\n *\n * @example\n * parseImportPath(\"./health.orb\") // { path: \"./health.orb\", fragment: undefined }\n * parseImportPath(\"./game.orb#Player\") // { path: \"./game.orb\", fragment: \"Player\" }\n */\nexport function parseImportPath(importPath: string): { path: string; fragment?: string } {\n const hashIndex = importPath.indexOf(\"#\");\n if (hashIndex === -1) {\n return { path: importPath };\n }\n return {\n path: importPath.slice(0, hashIndex),\n fragment: importPath.slice(hashIndex + 1),\n };\n}\n\n/**\n * Auto-detect a sibling `@almadar-io/behaviors` next to `@almadar/std`.\n *\n * After the v16.0.0 split, domain behaviors live in a companion package.\n * When a caller passes `stdLibPath` pointing at an installed `@almadar/std`,\n * the io package is usually a sibling in the same node_modules layout:\n *\n * <pkg>/node_modules/.pnpm/@almadar+std@x.y.z/node_modules/@almadar/std\n * <pkg>/node_modules/.pnpm/@almadar-io+behaviors@a.b.c/node_modules/@almadar-io/behaviors\n *\n * or the simpler hoisted form:\n *\n * <pkg>/node_modules/@almadar/std\n * <pkg>/node_modules/@almadar-io/behaviors\n *\n * We walk up from `stdLibPath` looking for either layout and return every\n * `behaviors/registry/` directory we find. Callers can override by passing\n * `behaviorsLibPaths` explicitly.\n */\nfunction autoDetectBehaviorsLibPaths(stdLibPath: string | undefined): string[] {\n if (!stdLibPath) return [];\n const found: string[] = [];\n try {\n // Walk up to the nearest `node_modules` ancestor\n let dir = path.normalize(stdLibPath);\n for (let i = 0; i < 10; i++) {\n const parent = path.dirname(dir);\n if (parent === dir) break;\n // Hoisted layout: <…>/node_modules/@almadar/std → check sibling\n if (path.basename(parent) === \"@almadar\" && path.basename(path.dirname(parent)) === \"node_modules\") {\n const nm = path.dirname(parent);\n const ioPath = path.join(nm, \"@almadar-io\", \"behaviors\");\n if (fs.existsSync(path.join(ioPath, \"behaviors\", \"registry\"))) found.push(ioPath);\n }\n // pnpm layout: <…>/.pnpm/@almadar+std@x.y.z/node_modules/@almadar/std\n if (path.basename(parent) === \".pnpm\") {\n const pnpmRoot = parent;\n try {\n for (const entry of fs.readdirSync(pnpmRoot)) {\n if (!entry.startsWith(\"@almadar-io+behaviors@\")) continue;\n const ioPath = path.join(pnpmRoot, entry, \"node_modules\", \"@almadar-io\", \"behaviors\");\n if (fs.existsSync(path.join(ioPath, \"behaviors\", \"registry\"))) found.push(ioPath);\n }\n } catch {\n // unreadable .pnpm dir — skip\n }\n break;\n }\n dir = parent;\n }\n } catch {\n // Filesystem access failed (read-only mount, missing perms) — return what\n // we have. Explicit `behaviorsLibPaths` override remains available.\n }\n return found;\n}\n"]}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { B as BindingContext, E as EvaluationContextExtensions, P as PatternProps, a as EffectHandlers, b as EffectContext, c as ExecutionEnvironment, d as EffectResult, T as TraitDefinition } from './types-
|
|
2
|
-
export { e as Effect, f as EventListener, H as HANDLER_MANIFEST, I as IEventBus, R as RuntimeConfig, g as RuntimeEvent, h as TraitState, i as TransitionObserver, j as TransitionResult, U as Unsubscribe } from './types-
|
|
3
|
-
import { U as UnifiedLoaderOptions, S as SchemaLoader, I as ImportChainLike, L as LoadResult, a as LoadedSchema, b as LoadedOrbital, P as PersistenceAdapter } from './OrbitalServerRuntime-
|
|
4
|
-
export { E as EntitySharingMap, c as EventBus, d as EventNamespaceMap, e as InMemoryPersistence, O as OrbitalEventRequest, f as OrbitalEventResponse, g as OrbitalServerRuntimeConfig, h as PreprocessOptions, i as PreprocessResult, j as PreprocessedSchema, k as ProcessEventOptions, R as RegisteredOrbital, l as RuntimeOrbital, m as RuntimeOrbitalSchema, n as RuntimeTrait, o as StateMachineManager, p as collectDeclaredConfigDefaults, q as collectDeclaredEntityDefaults, r as createInitialTraitState, s as findInitialState, t as findTransition, u as getIsolatedCollectionName, v as getNamespacedEvent, w as isBrowser, x as isElectron, y as isNamespacedEvent, z as isNode, A as normalizeEventKey, B as parseNamespacedEvent, C as preprocessSchema, D as processEvent } from './OrbitalServerRuntime-
|
|
1
|
+
import { B as BindingContext, E as EvaluationContextExtensions, P as PatternProps, a as EffectHandlers, b as EffectContext, c as ExecutionEnvironment, d as EffectResult, T as TraitDefinition } from './types-D-9feVsj.js';
|
|
2
|
+
export { e as Effect, f as EventListener, H as HANDLER_MANIFEST, I as IEventBus, R as RuntimeConfig, g as RuntimeEvent, h as TraitState, i as TransitionObserver, j as TransitionResult, U as Unsubscribe } from './types-D-9feVsj.js';
|
|
3
|
+
import { U as UnifiedLoaderOptions, S as SchemaLoader, I as ImportChainLike, L as LoadResult, a as LoadedSchema, b as LoadedOrbital, P as PersistenceAdapter } from './OrbitalServerRuntime-BkaBvI6-.js';
|
|
4
|
+
export { E as EntitySharingMap, c as EventBus, d as EventNamespaceMap, e as InMemoryPersistence, O as OrbitalEventRequest, f as OrbitalEventResponse, g as OrbitalServerRuntimeConfig, h as PreprocessOptions, i as PreprocessResult, j as PreprocessedSchema, k as ProcessEventOptions, R as RegisteredOrbital, l as RuntimeOrbital, m as RuntimeOrbitalSchema, n as RuntimeTrait, o as StateMachineManager, p as collectDeclaredConfigDefaults, q as collectDeclaredEntityDefaults, r as createInitialTraitState, s as findInitialState, t as findTransition, u as getIsolatedCollectionName, v as getNamespacedEvent, w as isBrowser, x as isElectron, y as isNamespacedEvent, z as isNode, A as normalizeEventKey, B as parseNamespacedEvent, C as preprocessSchema, D as processEvent } from './OrbitalServerRuntime-BkaBvI6-.js';
|
|
5
5
|
import { EvaluationContext, SExpressionEvaluator } from '@almadar/evaluator';
|
|
6
6
|
export { EvaluationContext, createMinimalContext } from '@almadar/evaluator';
|
|
7
7
|
import { EventPayload, EntityField, EntityRow, ServiceParams, PayloadField, OrbitalDefinition, OrbitalSchema } from '@almadar/core';
|
|
@@ -404,6 +404,21 @@ declare class EffectExecutor {
|
|
|
404
404
|
* with a single `if (emit)` guard.
|
|
405
405
|
*/
|
|
406
406
|
private osEmit;
|
|
407
|
+
/**
|
|
408
|
+
* Run a substrate (async) effect and dispatch the author's `emit.success`
|
|
409
|
+
* / `emit.failure` bus event when configured. Mirrors the compiled-path
|
|
410
|
+
* generic substrate dispatch (server.rs): uniform `{ result }` payload on
|
|
411
|
+
* success, `{ error }` on failure.
|
|
412
|
+
*
|
|
413
|
+
* When no `emit` config is present (fire-and-forget call) the op still runs
|
|
414
|
+
* but no event is dispatched and errors propagate (legacy behavior).
|
|
415
|
+
*/
|
|
416
|
+
private runSubstrate;
|
|
417
|
+
/**
|
|
418
|
+
* Separate a trailing `{ emit: {...} }` options object from positional
|
|
419
|
+
* substrate-op args. Returns `[positionalArgs, emitConfig]`.
|
|
420
|
+
*/
|
|
421
|
+
private splitSubstrateEmit;
|
|
407
422
|
private dispatch;
|
|
408
423
|
private logUnsupported;
|
|
409
424
|
}
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { EffectExecutor, createContextFromBindings } from './chunk-
|
|
2
|
-
export { EffectExecutor, EventBus, HANDLER_MANIFEST, InMemoryPersistence, MockPersistenceAdapter, StateMachineManager, TickScheduler, buildEmitsFromTraits, collectDeclaredConfigDefaults, collectDeclaredEntityDefaults, containsBindings, createContextFromBindings, createInitialTraitState, createMinimalContext, createMockPersistence, createTestExecutor, createTickScheduler, createUnifiedLoader, extractBindings, findInitialState, findTransition, formatPayloadValidationError, getIsolatedCollectionName, getNamespacedEvent, interpolateProps, interpolateValue, isBrowser, isElectron, isNamespacedEvent, isNode, isValidDurationString, normalizeEventKey, parseDurationString, parseNamespacedEvent, preprocessSchema, processEvent, validateEventPayload, validatePayloadShapes } from './chunk-
|
|
1
|
+
import { EffectExecutor, createContextFromBindings } from './chunk-TGL6XC6E.js';
|
|
2
|
+
export { EffectExecutor, EventBus, HANDLER_MANIFEST, InMemoryPersistence, MockPersistenceAdapter, StateMachineManager, TickScheduler, buildEmitsFromTraits, collectDeclaredConfigDefaults, collectDeclaredEntityDefaults, containsBindings, createContextFromBindings, createInitialTraitState, createMinimalContext, createMockPersistence, createTestExecutor, createTickScheduler, createUnifiedLoader, extractBindings, findInitialState, findTransition, formatPayloadValidationError, getIsolatedCollectionName, getNamespacedEvent, interpolateProps, interpolateValue, isBrowser, isElectron, isNamespacedEvent, isNode, isValidDurationString, normalizeEventKey, parseDurationString, parseNamespacedEvent, preprocessSchema, processEvent, validateEventPayload, validatePayloadShapes } from './chunk-TGL6XC6E.js';
|
|
3
3
|
export { cronMatches, cronMinuteKey, isValidCronExpression, parseCron, parseCronField } from './chunk-U4PL237A.js';
|
|
4
4
|
import { __export } from './chunk-PZ5AY32C.js';
|
|
5
5
|
import { createLogger } from '@almadar/logger';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as _almadar_core from '@almadar/core';
|
|
2
|
-
import { SExpr, EventPayload, AgentContext, LlmContext, WorkspaceContext, SessionContext, MemoryContext, TraceContext, IntegrationContext, TraitConfig, BusEvent, EntityRow, FieldValue, ServiceParams, FetchResult, PatternConfig, ResolvedPatternProps, BusEventSource, BusEventListener, Unsubscribe as Unsubscribe$1 } from '@almadar/core';
|
|
2
|
+
import { SExpr, EventPayload, AgentContext, LlmContext, WorkspaceContext, SessionContext, MemoryContext, TraceContext, IntegrationContext, TraitConfig, BusEvent, EntityRow, FieldValue, ServiceParams, FetchResult, PatternConfig, ResolvedPatternProps, Orbital, ServiceCallResult, BusEventSource, BusEventListener, Unsubscribe as Unsubscribe$1 } from '@almadar/core';
|
|
3
3
|
|
|
4
4
|
/** Alias for ResolvedPatternProps to avoid breaking internal consumers */
|
|
5
5
|
type PatternProps = ResolvedPatternProps;
|
|
@@ -224,19 +224,19 @@ interface EffectHandlers {
|
|
|
224
224
|
/** compose/compose-all — compose multiple orbitals into one schema */
|
|
225
225
|
substrateComposeAll?: (config: {
|
|
226
226
|
appName: string;
|
|
227
|
-
orbitals:
|
|
227
|
+
orbitals: Orbital[];
|
|
228
228
|
layoutStrategy?: string;
|
|
229
|
-
}) => Promise<
|
|
229
|
+
}) => Promise<ServiceCallResult | null>;
|
|
230
230
|
/** compose/compose-children — compose children under a parent */
|
|
231
|
-
substrateComposeChildren?: (parentName: string, children:
|
|
231
|
+
substrateComposeChildren?: (parentName: string, children: Orbital[]) => Promise<ServiceCallResult | null>;
|
|
232
232
|
/** behavior/instantiate — instantiate a behavior at runtime (meta `uses`) */
|
|
233
|
-
substrateInstantiate?: (parentName: string, behavior: string, params?:
|
|
233
|
+
substrateInstantiate?: (parentName: string, behavior: string, params?: TraitConfig) => Promise<ServiceCallResult | null>;
|
|
234
234
|
/** behavior/call — call a method on an instantiated behavior */
|
|
235
|
-
substrateCall?: (behavior: string, method: string, params?:
|
|
235
|
+
substrateCall?: (behavior: string, method: string, params?: TraitConfig) => Promise<ServiceCallResult | null>;
|
|
236
236
|
/** validate/validate — validate an orbital, fires VALIDATED_OK/ERROR */
|
|
237
|
-
substrateValidate?: (orbitalName: string) => Promise<
|
|
237
|
+
substrateValidate?: (orbitalName: string) => Promise<ServiceCallResult | null>;
|
|
238
238
|
/** lolo/emit-body — emit lolo source for an orbital */
|
|
239
|
-
substrateEmitBody?: (orbitalName: string, loloSource: string) => Promise<
|
|
239
|
+
substrateEmitBody?: (orbitalName: string, loloSource: string) => Promise<ServiceCallResult | null>;
|
|
240
240
|
}
|
|
241
241
|
/**
|
|
242
242
|
* Author-configured `emit:` block threaded into `os/watch-*` handlers.
|