@soleri/core 7.0.0 → 8.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agency/agency-manager.d.ts +27 -1
- package/dist/agency/agency-manager.d.ts.map +1 -1
- package/dist/agency/agency-manager.js +180 -9
- package/dist/agency/agency-manager.js.map +1 -1
- package/dist/agency/default-rules.d.ts +7 -0
- package/dist/agency/default-rules.d.ts.map +1 -0
- package/dist/agency/default-rules.js +79 -0
- package/dist/agency/default-rules.js.map +1 -0
- package/dist/agency/types.d.ts +48 -0
- package/dist/agency/types.d.ts.map +1 -1
- package/dist/brain/brain.d.ts +17 -2
- package/dist/brain/brain.d.ts.map +1 -1
- package/dist/brain/brain.js +118 -8
- package/dist/brain/brain.js.map +1 -1
- package/dist/brain/knowledge-synthesizer.d.ts +37 -0
- package/dist/brain/knowledge-synthesizer.d.ts.map +1 -0
- package/dist/brain/knowledge-synthesizer.js +159 -0
- package/dist/brain/knowledge-synthesizer.js.map +1 -0
- package/dist/brain/learning-radar.d.ts +96 -0
- package/dist/brain/learning-radar.d.ts.map +1 -0
- package/dist/brain/learning-radar.js +202 -0
- package/dist/brain/learning-radar.js.map +1 -0
- package/dist/brain/types.d.ts +15 -0
- package/dist/brain/types.d.ts.map +1 -1
- package/dist/context/context-engine.d.ts.map +1 -1
- package/dist/context/context-engine.js +82 -17
- package/dist/context/context-engine.js.map +1 -1
- package/dist/context/types.d.ts +5 -0
- package/dist/context/types.d.ts.map +1 -1
- package/dist/control/intent-router.d.ts +12 -1
- package/dist/control/intent-router.d.ts.map +1 -1
- package/dist/control/intent-router.js +68 -0
- package/dist/control/intent-router.js.map +1 -1
- package/dist/control/types.d.ts +17 -0
- package/dist/control/types.d.ts.map +1 -1
- package/dist/curator/classifier.d.ts +18 -0
- package/dist/curator/classifier.d.ts.map +1 -0
- package/dist/curator/classifier.js +59 -0
- package/dist/curator/classifier.js.map +1 -0
- package/dist/curator/quality-gate.d.ts +29 -0
- package/dist/curator/quality-gate.d.ts.map +1 -0
- package/dist/curator/quality-gate.js +86 -0
- package/dist/curator/quality-gate.js.map +1 -0
- package/dist/domain-packs/index.d.ts +0 -3
- package/dist/domain-packs/index.d.ts.map +1 -1
- package/dist/domain-packs/index.js +0 -3
- package/dist/domain-packs/index.js.map +1 -1
- package/dist/domain-packs/loader.d.ts.map +1 -1
- package/dist/domain-packs/loader.js +20 -4
- package/dist/domain-packs/loader.js.map +1 -1
- package/dist/domain-packs/pack-runtime.d.ts +5 -5
- package/dist/domain-packs/pack-runtime.d.ts.map +1 -1
- package/dist/domain-packs/pack-runtime.js +2 -2
- package/dist/domain-packs/pack-runtime.js.map +1 -1
- package/dist/domain-packs/types.d.ts +8 -2
- package/dist/domain-packs/types.d.ts.map +1 -1
- package/dist/domain-packs/types.js.map +1 -1
- package/dist/engine/bin/soleri-engine.js +13 -2
- package/dist/engine/bin/soleri-engine.js.map +1 -1
- package/dist/engine/index.d.ts +2 -0
- package/dist/engine/index.d.ts.map +1 -1
- package/dist/engine/index.js +1 -0
- package/dist/engine/index.js.map +1 -1
- package/dist/engine/module-manifest.d.ts +28 -0
- package/dist/engine/module-manifest.d.ts.map +1 -0
- package/dist/engine/module-manifest.js +85 -0
- package/dist/engine/module-manifest.js.map +1 -0
- package/dist/engine/register-engine.d.ts +19 -0
- package/dist/engine/register-engine.d.ts.map +1 -1
- package/dist/engine/register-engine.js +15 -2
- package/dist/engine/register-engine.js.map +1 -1
- package/dist/events/event-bus.d.ts +30 -0
- package/dist/events/event-bus.d.ts.map +1 -0
- package/dist/events/event-bus.js +51 -0
- package/dist/events/event-bus.js.map +1 -0
- package/dist/flows/chain-runner.d.ts +46 -0
- package/dist/flows/chain-runner.d.ts.map +1 -0
- package/dist/flows/chain-runner.js +271 -0
- package/dist/flows/chain-runner.js.map +1 -0
- package/dist/flows/chain-types.d.ts +103 -0
- package/dist/flows/chain-types.d.ts.map +1 -0
- package/dist/flows/chain-types.js +23 -0
- package/dist/flows/chain-types.js.map +1 -0
- package/dist/health/doctor-checks.d.ts +15 -0
- package/dist/health/doctor-checks.d.ts.map +1 -0
- package/dist/health/doctor-checks.js +98 -0
- package/dist/health/doctor-checks.js.map +1 -0
- package/dist/index.d.ts +0 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -1
- package/dist/index.js.map +1 -1
- package/dist/intake/content-classifier.d.ts.map +1 -1
- package/dist/intake/content-classifier.js +0 -2
- package/dist/intake/content-classifier.js.map +1 -1
- package/dist/intake/text-ingester.d.ts +52 -0
- package/dist/intake/text-ingester.d.ts.map +1 -0
- package/dist/intake/text-ingester.js +181 -0
- package/dist/intake/text-ingester.js.map +1 -0
- package/dist/llm/llm-client.d.ts.map +1 -1
- package/dist/llm/llm-client.js +45 -5
- package/dist/llm/llm-client.js.map +1 -1
- package/dist/llm/oauth-discovery.d.ts +18 -0
- package/dist/llm/oauth-discovery.d.ts.map +1 -0
- package/dist/llm/oauth-discovery.js +130 -0
- package/dist/llm/oauth-discovery.js.map +1 -0
- package/dist/llm/types.d.ts +4 -2
- package/dist/llm/types.d.ts.map +1 -1
- package/dist/packs/pack-installer.d.ts +2 -1
- package/dist/packs/pack-installer.d.ts.map +1 -1
- package/dist/packs/pack-installer.js +10 -1
- package/dist/packs/pack-installer.js.map +1 -1
- package/dist/persistence/index.d.ts +0 -1
- package/dist/persistence/index.d.ts.map +1 -1
- package/dist/persistence/index.js +0 -1
- package/dist/persistence/index.js.map +1 -1
- package/dist/persistence/types.d.ts +2 -6
- package/dist/persistence/types.d.ts.map +1 -1
- package/dist/planning/evidence-collector.d.ts +41 -0
- package/dist/planning/evidence-collector.d.ts.map +1 -0
- package/dist/planning/evidence-collector.js +194 -0
- package/dist/planning/evidence-collector.js.map +1 -0
- package/dist/planning/planner.d.ts +4 -0
- package/dist/planning/planner.d.ts.map +1 -1
- package/dist/planning/planner.js +11 -0
- package/dist/planning/planner.js.map +1 -1
- package/dist/plugins/index.d.ts +4 -0
- package/dist/plugins/index.d.ts.map +1 -1
- package/dist/plugins/index.js +4 -0
- package/dist/plugins/index.js.map +1 -1
- package/dist/plugins/plugin-registry.d.ts +4 -0
- package/dist/plugins/plugin-registry.d.ts.map +1 -1
- package/dist/plugins/plugin-registry.js +4 -0
- package/dist/plugins/plugin-registry.js.map +1 -1
- package/dist/plugins/types.d.ts +32 -27
- package/dist/plugins/types.d.ts.map +1 -1
- package/dist/plugins/types.js +6 -3
- package/dist/plugins/types.js.map +1 -1
- package/dist/queue/job-queue.d.ts +92 -0
- package/dist/queue/job-queue.d.ts.map +1 -0
- package/dist/queue/job-queue.js +180 -0
- package/dist/queue/job-queue.js.map +1 -0
- package/dist/queue/pipeline-runner.d.ts +62 -0
- package/dist/queue/pipeline-runner.d.ts.map +1 -0
- package/dist/queue/pipeline-runner.js +126 -0
- package/dist/queue/pipeline-runner.js.map +1 -0
- package/dist/runtime/admin-setup-ops.d.ts +20 -0
- package/dist/runtime/admin-setup-ops.d.ts.map +1 -0
- package/dist/runtime/admin-setup-ops.js +583 -0
- package/dist/runtime/admin-setup-ops.js.map +1 -0
- package/dist/runtime/chain-ops.d.ts +9 -0
- package/dist/runtime/chain-ops.d.ts.map +1 -0
- package/dist/runtime/chain-ops.js +107 -0
- package/dist/runtime/chain-ops.js.map +1 -0
- package/dist/runtime/claude-md-helpers.d.ts +56 -0
- package/dist/runtime/claude-md-helpers.d.ts.map +1 -0
- package/dist/runtime/claude-md-helpers.js +160 -0
- package/dist/runtime/claude-md-helpers.js.map +1 -0
- package/dist/runtime/curator-extra-ops.d.ts +3 -2
- package/dist/runtime/curator-extra-ops.d.ts.map +1 -1
- package/dist/runtime/curator-extra-ops.js +81 -3
- package/dist/runtime/curator-extra-ops.js.map +1 -1
- package/dist/runtime/facades/admin-facade.d.ts.map +1 -1
- package/dist/runtime/facades/admin-facade.js +5 -2
- package/dist/runtime/facades/admin-facade.js.map +1 -1
- package/dist/runtime/facades/agency-facade.d.ts.map +1 -1
- package/dist/runtime/facades/agency-facade.js +64 -0
- package/dist/runtime/facades/agency-facade.js.map +1 -1
- package/dist/runtime/facades/brain-facade.d.ts.map +1 -1
- package/dist/runtime/facades/brain-facade.js +122 -1
- package/dist/runtime/facades/brain-facade.js.map +1 -1
- package/dist/runtime/facades/control-facade.d.ts.map +1 -1
- package/dist/runtime/facades/control-facade.js +42 -0
- package/dist/runtime/facades/control-facade.js.map +1 -1
- package/dist/runtime/facades/memory-facade.d.ts.map +1 -1
- package/dist/runtime/facades/memory-facade.js +20 -2
- package/dist/runtime/facades/memory-facade.js.map +1 -1
- package/dist/runtime/facades/plan-facade.d.ts.map +1 -1
- package/dist/runtime/facades/plan-facade.js +2 -0
- package/dist/runtime/facades/plan-facade.js.map +1 -1
- package/dist/runtime/facades/vault-facade.d.ts.map +1 -1
- package/dist/runtime/facades/vault-facade.js +25 -5
- package/dist/runtime/facades/vault-facade.js.map +1 -1
- package/dist/runtime/intake-ops.d.ts +7 -5
- package/dist/runtime/intake-ops.d.ts.map +1 -1
- package/dist/runtime/intake-ops.js +98 -5
- package/dist/runtime/intake-ops.js.map +1 -1
- package/dist/runtime/memory-extra-ops.d.ts +6 -3
- package/dist/runtime/memory-extra-ops.d.ts.map +1 -1
- package/dist/runtime/memory-extra-ops.js +292 -4
- package/dist/runtime/memory-extra-ops.js.map +1 -1
- package/dist/runtime/pack-ops.d.ts +3 -0
- package/dist/runtime/pack-ops.d.ts.map +1 -1
- package/dist/runtime/pack-ops.js +18 -1
- package/dist/runtime/pack-ops.js.map +1 -1
- package/dist/runtime/planning-extra-ops.d.ts.map +1 -1
- package/dist/runtime/planning-extra-ops.js +85 -0
- package/dist/runtime/planning-extra-ops.js.map +1 -1
- package/dist/runtime/playbook-ops.js +1 -1
- package/dist/runtime/playbook-ops.js.map +1 -1
- package/dist/runtime/plugin-ops.d.ts.map +1 -1
- package/dist/runtime/plugin-ops.js +3 -0
- package/dist/runtime/plugin-ops.js.map +1 -1
- package/dist/runtime/runtime.d.ts.map +1 -1
- package/dist/runtime/runtime.js +143 -2
- package/dist/runtime/runtime.js.map +1 -1
- package/dist/runtime/session-briefing.d.ts +23 -0
- package/dist/runtime/session-briefing.d.ts.map +1 -0
- package/dist/runtime/session-briefing.js +154 -0
- package/dist/runtime/session-briefing.js.map +1 -0
- package/dist/runtime/types.d.ts +23 -0
- package/dist/runtime/types.d.ts.map +1 -1
- package/dist/runtime/vault-linking-ops.d.ts.map +1 -1
- package/dist/runtime/vault-linking-ops.js +3 -7
- package/dist/runtime/vault-linking-ops.js.map +1 -1
- package/dist/vault/vault.d.ts +34 -0
- package/dist/vault/vault.d.ts.map +1 -1
- package/dist/vault/vault.js +89 -3
- package/dist/vault/vault.js.map +1 -1
- package/package.json +6 -4
- package/src/__tests__/admin-setup-ops.test.ts +355 -0
- package/src/__tests__/async-infrastructure.test.ts +307 -0
- package/src/__tests__/cognee-client-gaps.test.ts +6 -2
- package/src/__tests__/cognee-hybrid-search.test.ts +49 -35
- package/src/__tests__/cognee-sync-manager-deep.test.ts +89 -65
- package/src/__tests__/curator-extra-ops.test.ts +6 -2
- package/src/__tests__/curator-pipeline-e2e.test.ts +545 -0
- package/src/__tests__/memory-extra-ops.test.ts +2 -2
- package/src/__tests__/module-manifest-drift.test.ts +59 -0
- package/src/__tests__/planning-extra-ops.test.ts +2 -2
- package/src/__tests__/second-brain-features.test.ts +583 -0
- package/src/agency/agency-manager.ts +217 -9
- package/src/agency/default-rules.ts +83 -0
- package/src/agency/types.ts +61 -0
- package/src/brain/brain.ts +110 -8
- package/src/brain/knowledge-synthesizer.ts +216 -0
- package/src/brain/learning-radar.ts +340 -0
- package/src/brain/types.ts +16 -0
- package/src/context/context-engine.ts +114 -15
- package/src/context/types.ts +5 -0
- package/src/control/intent-router.ts +107 -0
- package/src/control/types.ts +10 -0
- package/src/curator/classifier.ts +86 -0
- package/src/curator/quality-gate.ts +127 -0
- package/src/domain-packs/index.ts +0 -6
- package/src/domain-packs/loader.ts +25 -5
- package/src/domain-packs/pack-runtime.ts +6 -6
- package/src/domain-packs/types.ts +8 -2
- package/src/engine/bin/soleri-engine.ts +18 -2
- package/src/engine/index.ts +2 -0
- package/src/engine/module-manifest.ts +99 -0
- package/src/engine/register-engine.ts +21 -2
- package/src/events/event-bus.ts +58 -0
- package/src/flows/chain-runner.ts +369 -0
- package/src/flows/chain-types.ts +57 -0
- package/src/index.ts +0 -1
- package/src/intake/content-classifier.ts +0 -2
- package/src/intake/text-ingester.ts +234 -0
- package/src/llm/llm-client.ts +50 -7
- package/src/llm/oauth-discovery.ts +151 -0
- package/src/llm/types.ts +4 -2
- package/src/packs/pack-installer.ts +16 -1
- package/src/persistence/index.ts +0 -1
- package/src/persistence/types.ts +2 -6
- package/src/planning/evidence-collector.ts +247 -0
- package/src/planning/planner.ts +11 -0
- package/src/plugins/index.ts +4 -0
- package/src/plugins/plugin-registry.ts +6 -1
- package/src/plugins/types.ts +10 -5
- package/src/queue/job-queue.ts +281 -0
- package/src/queue/pipeline-runner.ts +149 -0
- package/src/runtime/admin-setup-ops.ts +664 -0
- package/src/runtime/chain-ops.ts +121 -0
- package/src/runtime/claude-md-helpers.ts +218 -0
- package/src/runtime/curator-extra-ops.ts +86 -3
- package/src/runtime/facades/admin-facade.ts +5 -2
- package/src/runtime/facades/agency-facade.ts +68 -0
- package/src/runtime/facades/brain-facade.ts +142 -1
- package/src/runtime/facades/control-facade.ts +45 -0
- package/src/runtime/facades/memory-facade.ts +20 -2
- package/src/runtime/facades/plan-facade.ts +2 -0
- package/src/runtime/facades/vault-facade.ts +28 -5
- package/src/runtime/intake-ops.ts +107 -5
- package/src/runtime/memory-extra-ops.ts +312 -4
- package/src/runtime/pack-ops.ts +26 -1
- package/src/runtime/planning-extra-ops.ts +94 -0
- package/src/runtime/playbook-ops.ts +1 -1
- package/src/runtime/plugin-ops.ts +3 -0
- package/src/runtime/runtime.ts +138 -2
- package/src/runtime/session-briefing.ts +175 -0
- package/src/runtime/types.ts +23 -0
- package/src/runtime/vault-linking-ops.ts +3 -7
- package/src/vault/vault.ts +105 -4
- package/src/__tests__/postgres-provider.test.ts +0 -116
- package/src/persistence/postgres-provider.ts +0 -310
package/dist/engine/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/engine/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/engine/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE9C,OAAO,EAAE,sBAAsB,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Soleri Engine Module Manifest
|
|
3
|
+
*
|
|
4
|
+
* Single source of truth for engine module names, descriptions, and key ops.
|
|
5
|
+
* Used by register-engine.ts at runtime and by @soleri/forge for template generation.
|
|
6
|
+
*
|
|
7
|
+
* This file is intentionally dependency-free so it can be imported by any package.
|
|
8
|
+
*/
|
|
9
|
+
export interface ModuleManifestEntry {
|
|
10
|
+
/** Suffix for tool name: {agentId}_{suffix} */
|
|
11
|
+
suffix: string;
|
|
12
|
+
/** Human-readable description */
|
|
13
|
+
description: string;
|
|
14
|
+
/** Representative ops shown in placeholder tables (max 4) */
|
|
15
|
+
keyOps: string[];
|
|
16
|
+
/** If true, module requires a runtime condition to register */
|
|
17
|
+
conditional?: boolean;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Canonical list of engine modules.
|
|
21
|
+
* Order here determines order in generated tool tables.
|
|
22
|
+
*/
|
|
23
|
+
export declare const ENGINE_MODULE_MANIFEST: ModuleManifestEntry[];
|
|
24
|
+
/** Core facade ops (always present, not in ENGINE_MODULES) */
|
|
25
|
+
export declare const CORE_KEY_OPS: string[];
|
|
26
|
+
/** Engine major version — used for compatibility checks against domain packs. */
|
|
27
|
+
export declare const ENGINE_MAJOR_VERSION = 8;
|
|
28
|
+
//# sourceMappingURL=module-manifest.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"module-manifest.d.ts","sourceRoot":"","sources":["../../src/engine/module-manifest.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,WAAW,mBAAmB;IAClC,+CAA+C;IAC/C,MAAM,EAAE,MAAM,CAAC;IACf,iCAAiC;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,6DAA6D;IAC7D,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,+DAA+D;IAC/D,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED;;;GAGG;AACH,eAAO,MAAM,sBAAsB,EAAE,mBAAmB,EAoEvD,CAAC;AAEF,8DAA8D;AAC9D,eAAO,MAAM,YAAY,UAAiD,CAAC;AAE3E,iFAAiF;AACjF,eAAO,MAAM,oBAAoB,IAAI,CAAC"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Soleri Engine Module Manifest
|
|
3
|
+
*
|
|
4
|
+
* Single source of truth for engine module names, descriptions, and key ops.
|
|
5
|
+
* Used by register-engine.ts at runtime and by @soleri/forge for template generation.
|
|
6
|
+
*
|
|
7
|
+
* This file is intentionally dependency-free so it can be imported by any package.
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Canonical list of engine modules.
|
|
11
|
+
* Order here determines order in generated tool tables.
|
|
12
|
+
*/
|
|
13
|
+
export const ENGINE_MODULE_MANIFEST = [
|
|
14
|
+
{
|
|
15
|
+
suffix: 'vault',
|
|
16
|
+
description: 'Knowledge management — search, CRUD, import/export, intake, archival.',
|
|
17
|
+
keyOps: ['search_intelligent', 'capture_knowledge', 'capture_quick'],
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
suffix: 'plan',
|
|
21
|
+
description: 'Plan lifecycle — create, approve, execute, reconcile, complete, grading.',
|
|
22
|
+
keyOps: ['create_plan', 'approve_plan', 'plan_split', 'plan_reconcile'],
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
suffix: 'brain',
|
|
26
|
+
description: 'Learning system — intelligence pipeline, strengths, feedback, sessions.',
|
|
27
|
+
keyOps: ['recommend', 'strengths', 'feedback'],
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
suffix: 'memory',
|
|
31
|
+
description: 'Session & cross-project memory — capture, search, dedup, promote.',
|
|
32
|
+
keyOps: ['memory_search', 'memory_capture', 'session_capture'],
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
suffix: 'admin',
|
|
36
|
+
description: 'Infrastructure — health, config, telemetry, tokens, LLM, prompts.',
|
|
37
|
+
keyOps: ['admin_health', 'admin_tool_list', 'admin_diagnostic'],
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
suffix: 'curator',
|
|
41
|
+
description: 'Quality — duplicate detection, contradictions, grooming, health audit.',
|
|
42
|
+
keyOps: ['curator_groom', 'curator_status', 'curator_health'],
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
suffix: 'loop',
|
|
46
|
+
description: 'Iterative validation loops — start, iterate, cancel, complete, history.',
|
|
47
|
+
keyOps: ['loop_start', 'loop_status', 'loop_cancel'],
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
suffix: 'orchestrate',
|
|
51
|
+
description: 'Execution orchestration — project registration, playbooks, plan/execute/complete.',
|
|
52
|
+
keyOps: ['orchestrate_plan', 'orchestrate_execute', 'orchestrate_complete'],
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
suffix: 'control',
|
|
56
|
+
description: 'Agent behavior — identity, intent routing, morphing, guidelines, governance.',
|
|
57
|
+
keyOps: ['route_intent', 'morph', 'get_behavior_rules'],
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
suffix: 'context',
|
|
61
|
+
description: 'Context analysis — entity extraction, knowledge retrieval, confidence scoring.',
|
|
62
|
+
keyOps: ['context_extract_entities', 'context_retrieve_knowledge', 'context_analyze'],
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
suffix: 'agency',
|
|
66
|
+
description: 'Proactive intelligence — file watching, pattern surfacing, warnings.',
|
|
67
|
+
keyOps: ['agency_scan_file', 'agency_surface_patterns', 'agency_warnings'],
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
suffix: 'chat',
|
|
71
|
+
description: 'Chat transport — session management, response chunking, authentication.',
|
|
72
|
+
keyOps: ['chat_send', 'chat_history', 'chat_session'],
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
suffix: 'cognee',
|
|
76
|
+
description: 'Knowledge graph — Cognee search, sync, export, graph stats.',
|
|
77
|
+
keyOps: ['cognee_search', 'cognee_add', 'cognee_cognify'],
|
|
78
|
+
conditional: true,
|
|
79
|
+
},
|
|
80
|
+
];
|
|
81
|
+
/** Core facade ops (always present, not in ENGINE_MODULES) */
|
|
82
|
+
export const CORE_KEY_OPS = ['health', 'identity', 'register', 'activate'];
|
|
83
|
+
/** Engine major version — used for compatibility checks against domain packs. */
|
|
84
|
+
export const ENGINE_MAJOR_VERSION = 8;
|
|
85
|
+
//# sourceMappingURL=module-manifest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"module-manifest.js","sourceRoot":"","sources":["../../src/engine/module-manifest.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAaH;;;GAGG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAA0B;IAC3D;QACE,MAAM,EAAE,OAAO;QACf,WAAW,EAAE,uEAAuE;QACpF,MAAM,EAAE,CAAC,oBAAoB,EAAE,mBAAmB,EAAE,eAAe,CAAC;KACrE;IACD;QACE,MAAM,EAAE,MAAM;QACd,WAAW,EAAE,0EAA0E;QACvF,MAAM,EAAE,CAAC,aAAa,EAAE,cAAc,EAAE,YAAY,EAAE,gBAAgB,CAAC;KACxE;IACD;QACE,MAAM,EAAE,OAAO;QACf,WAAW,EAAE,yEAAyE;QACtF,MAAM,EAAE,CAAC,WAAW,EAAE,WAAW,EAAE,UAAU,CAAC;KAC/C;IACD;QACE,MAAM,EAAE,QAAQ;QAChB,WAAW,EAAE,mEAAmE;QAChF,MAAM,EAAE,CAAC,eAAe,EAAE,gBAAgB,EAAE,iBAAiB,CAAC;KAC/D;IACD;QACE,MAAM,EAAE,OAAO;QACf,WAAW,EAAE,mEAAmE;QAChF,MAAM,EAAE,CAAC,cAAc,EAAE,iBAAiB,EAAE,kBAAkB,CAAC;KAChE;IACD;QACE,MAAM,EAAE,SAAS;QACjB,WAAW,EAAE,wEAAwE;QACrF,MAAM,EAAE,CAAC,eAAe,EAAE,gBAAgB,EAAE,gBAAgB,CAAC;KAC9D;IACD;QACE,MAAM,EAAE,MAAM;QACd,WAAW,EAAE,yEAAyE;QACtF,MAAM,EAAE,CAAC,YAAY,EAAE,aAAa,EAAE,aAAa,CAAC;KACrD;IACD;QACE,MAAM,EAAE,aAAa;QACrB,WAAW,EACT,mFAAmF;QACrF,MAAM,EAAE,CAAC,kBAAkB,EAAE,qBAAqB,EAAE,sBAAsB,CAAC;KAC5E;IACD;QACE,MAAM,EAAE,SAAS;QACjB,WAAW,EAAE,8EAA8E;QAC3F,MAAM,EAAE,CAAC,cAAc,EAAE,OAAO,EAAE,oBAAoB,CAAC;KACxD;IACD;QACE,MAAM,EAAE,SAAS;QACjB,WAAW,EAAE,gFAAgF;QAC7F,MAAM,EAAE,CAAC,0BAA0B,EAAE,4BAA4B,EAAE,iBAAiB,CAAC;KACtF;IACD;QACE,MAAM,EAAE,QAAQ;QAChB,WAAW,EAAE,sEAAsE;QACnF,MAAM,EAAE,CAAC,kBAAkB,EAAE,yBAAyB,EAAE,iBAAiB,CAAC;KAC3E;IACD;QACE,MAAM,EAAE,MAAM;QACd,WAAW,EAAE,yEAAyE;QACtF,MAAM,EAAE,CAAC,WAAW,EAAE,cAAc,EAAE,cAAc,CAAC;KACtD;IACD;QACE,MAAM,EAAE,QAAQ;QAChB,WAAW,EAAE,6DAA6D;QAC1E,MAAM,EAAE,CAAC,eAAe,EAAE,YAAY,EAAE,gBAAgB,CAAC;QACzD,WAAW,EAAE,IAAI;KAClB;CACF,CAAC;AAEF,8DAA8D;AAC9D,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;AAE3E,iFAAiF;AACjF,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC"}
|
|
@@ -43,7 +43,25 @@ export interface EngineRegistrationResult {
|
|
|
43
43
|
tools: string[];
|
|
44
44
|
/** Total op count across all tools */
|
|
45
45
|
totalOps: number;
|
|
46
|
+
/**
|
|
47
|
+
* Register a new MCP tool at runtime (hot reload).
|
|
48
|
+
* Call this after installing a pack or activating a plugin post-boot.
|
|
49
|
+
* Automatically notifies connected clients via sendToolListChanged().
|
|
50
|
+
*/
|
|
51
|
+
registerTool: (toolName: string, description: string, ops: OpDefinition[]) => void;
|
|
46
52
|
}
|
|
53
|
+
interface ModuleDef {
|
|
54
|
+
/** Suffix for tool name: {agentId}_{suffix} */
|
|
55
|
+
suffix: string;
|
|
56
|
+
/** Tool description */
|
|
57
|
+
description: string;
|
|
58
|
+
/** Op creator function */
|
|
59
|
+
createOps: (runtime: AgentRuntime) => OpDefinition[];
|
|
60
|
+
/** Only register if this condition is true (default: always) */
|
|
61
|
+
condition?: (runtime: AgentRuntime) => boolean;
|
|
62
|
+
}
|
|
63
|
+
/** @internal Exported for drift testing — do not use outside engine */
|
|
64
|
+
export declare const ENGINE_MODULES: ModuleDef[];
|
|
47
65
|
/**
|
|
48
66
|
* Register all engine modules as MCP tools on the given server.
|
|
49
67
|
*
|
|
@@ -51,4 +69,5 @@ export interface EngineRegistrationResult {
|
|
|
51
69
|
* Dispatch is a direct switch on op name — no generic factory, no FacadeConfig type.
|
|
52
70
|
*/
|
|
53
71
|
export declare function registerEngine(server: McpServer, runtime: AgentRuntime, options: EngineRegistrationOptions): EngineRegistrationResult;
|
|
72
|
+
export {};
|
|
54
73
|
//# sourceMappingURL=register-engine.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"register-engine.d.ts","sourceRoot":"","sources":["../../src/engine/register-engine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAqBpE,MAAM,WAAW,yBAAyB;IACxC,0EAA0E;IAC1E,OAAO,EAAE,MAAM,CAAC;IAChB,8DAA8D;IAC9D,UAAU,CAAC,EAAE,MAAM,UAAU,CAAC;IAC9B,0FAA0F;IAC1F,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;IACzB,oDAAoD;IACpD,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,2CAA2C;IAC3C,WAAW,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,GAAG,EAAE,YAAY,EAAE,CAAA;SAAE,CAAC,CAAA;KAAE,CAAC,CAAC;IAC9F,kEAAkE;IAClE,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,wBAAwB;IACvC,oCAAoC;IACpC,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,sCAAsC;IACtC,QAAQ,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"register-engine.d.ts","sourceRoot":"","sources":["../../src/engine/register-engine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAqBpE,MAAM,WAAW,yBAAyB;IACxC,0EAA0E;IAC1E,OAAO,EAAE,MAAM,CAAC;IAChB,8DAA8D;IAC9D,UAAU,CAAC,EAAE,MAAM,UAAU,CAAC;IAC9B,0FAA0F;IAC1F,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;IACzB,oDAAoD;IACpD,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,2CAA2C;IAC3C,WAAW,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,GAAG,EAAE,YAAY,EAAE,CAAA;SAAE,CAAC,CAAA;KAAE,CAAC,CAAC;IAC9F,kEAAkE;IAClE,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,wBAAwB;IACvC,oCAAoC;IACpC,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,sCAAsC;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB;;;;OAIG;IACH,YAAY,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,YAAY,EAAE,KAAK,IAAI,CAAC;CACpF;AAID,UAAU,SAAS;IACjB,+CAA+C;IAC/C,MAAM,EAAE,MAAM,CAAC;IACf,uBAAuB;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,0BAA0B;IAC1B,SAAS,EAAE,CAAC,OAAO,EAAE,YAAY,KAAK,YAAY,EAAE,CAAC;IACrD,gEAAgE;IAChE,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,YAAY,KAAK,OAAO,CAAC;CAChD;AAED,uEAAuE;AACvE,eAAO,MAAM,cAAc,EAAE,SAAS,EAoErC,CAAC;AAIF;;;;;GAKG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,YAAY,EACrB,OAAO,EAAE,yBAAyB,GACjC,wBAAwB,CAyF1B"}
|
|
@@ -32,7 +32,8 @@ import { createContextFacadeOps } from '../runtime/facades/context-facade.js';
|
|
|
32
32
|
import { createAgencyFacadeOps } from '../runtime/facades/agency-facade.js';
|
|
33
33
|
import { createChatFacadeOps } from '../runtime/facades/chat-facade.js';
|
|
34
34
|
import { createDomainFacade } from '../runtime/domain-ops.js';
|
|
35
|
-
|
|
35
|
+
/** @internal Exported for drift testing — do not use outside engine */
|
|
36
|
+
export const ENGINE_MODULES = [
|
|
36
37
|
{
|
|
37
38
|
suffix: 'vault',
|
|
38
39
|
description: 'Knowledge management — search, CRUD, import/export, intake, archival.',
|
|
@@ -158,7 +159,19 @@ export function registerEngine(server, runtime, options) {
|
|
|
158
159
|
}
|
|
159
160
|
}
|
|
160
161
|
}
|
|
161
|
-
|
|
162
|
+
const registerTool = (toolName, description, ops) => {
|
|
163
|
+
registerModuleTool(server, toolName, description, ops, authPolicy);
|
|
164
|
+
registeredTools.push(toolName);
|
|
165
|
+
totalOps += ops.length;
|
|
166
|
+
// Notify connected clients that tool list changed
|
|
167
|
+
try {
|
|
168
|
+
server.sendToolListChanged?.();
|
|
169
|
+
}
|
|
170
|
+
catch {
|
|
171
|
+
// Server may not support notifications yet — safe to ignore
|
|
172
|
+
}
|
|
173
|
+
};
|
|
174
|
+
return { tools: registeredTools, totalOps, registerTool };
|
|
162
175
|
}
|
|
163
176
|
// ─── Tool Registration (No Factory) ──────────────────────────────────
|
|
164
177
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"register-engine.js","sourceRoot":"","sources":["../../src/engine/register-engine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD,2EAA2E;AAC3E,OAAO,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAC1E,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAC1E,OAAO,EAAE,qBAAqB,EAAE,MAAM,qCAAqC,CAAC;AAC5E,OAAO,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAC1E,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAC9E,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,EAAE,0BAA0B,EAAE,MAAM,0CAA0C,CAAC;AACtF,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAC9E,OAAO,EAAE,qBAAqB,EAAE,MAAM,qCAAqC,CAAC;AAC5E,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAC9E,OAAO,EAAE,qBAAqB,EAAE,MAAM,qCAAqC,CAAC;AAC5E,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"register-engine.js","sourceRoot":"","sources":["../../src/engine/register-engine.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Typed Event Bus — generic event emitter for decoupled subsystem communication.
|
|
3
|
+
*
|
|
4
|
+
* Wraps Node EventEmitter with type-safe emit/subscribe.
|
|
5
|
+
* Any module can define its own event map and create a bus.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Create a typed event bus.
|
|
9
|
+
*
|
|
10
|
+
* Usage:
|
|
11
|
+
* ```ts
|
|
12
|
+
* type MyEvents = {
|
|
13
|
+
* 'entry:created': { id: string; title: string };
|
|
14
|
+
* 'entry:deleted': { id: string };
|
|
15
|
+
* };
|
|
16
|
+
* const bus = new TypedEventBus<MyEvents>();
|
|
17
|
+
* bus.on('entry:created', (payload) => console.log(payload.title));
|
|
18
|
+
* bus.emit('entry:created', { id: '1', title: 'Hello' });
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
export declare class TypedEventBus<TEvents extends Record<string, unknown>> {
|
|
22
|
+
private emitter;
|
|
23
|
+
on<E extends keyof TEvents & string>(event: E, listener: (payload: TEvents[E]) => void): this;
|
|
24
|
+
once<E extends keyof TEvents & string>(event: E, listener: (payload: TEvents[E]) => void): this;
|
|
25
|
+
off<E extends keyof TEvents & string>(event: E, listener: (payload: TEvents[E]) => void): this;
|
|
26
|
+
emit<E extends keyof TEvents & string>(event: E, payload: TEvents[E]): boolean;
|
|
27
|
+
listenerCount(): number;
|
|
28
|
+
removeAllListeners(): this;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=event-bus.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-bus.d.ts","sourceRoot":"","sources":["../../src/events/event-bus.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH;;;;;;;;;;;;;GAaG;AACH,qBAAa,aAAa,CAAC,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAChE,OAAO,CAAC,OAAO,CAAsB;IAErC,EAAE,CAAC,CAAC,SAAS,MAAM,OAAO,GAAG,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,IAAI;IAK7F,IAAI,CAAC,CAAC,SAAS,MAAM,OAAO,GAAG,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,IAAI;IAK/F,GAAG,CAAC,CAAC,SAAS,MAAM,OAAO,GAAG,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,IAAI;IAK9F,IAAI,CAAC,CAAC,SAAS,MAAM,OAAO,GAAG,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO;IAI9E,aAAa,IAAI,MAAM;IAQvB,kBAAkB,IAAI,IAAI;CAI3B"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Typed Event Bus — generic event emitter for decoupled subsystem communication.
|
|
3
|
+
*
|
|
4
|
+
* Wraps Node EventEmitter with type-safe emit/subscribe.
|
|
5
|
+
* Any module can define its own event map and create a bus.
|
|
6
|
+
*/
|
|
7
|
+
import { EventEmitter } from 'node:events';
|
|
8
|
+
/**
|
|
9
|
+
* Create a typed event bus.
|
|
10
|
+
*
|
|
11
|
+
* Usage:
|
|
12
|
+
* ```ts
|
|
13
|
+
* type MyEvents = {
|
|
14
|
+
* 'entry:created': { id: string; title: string };
|
|
15
|
+
* 'entry:deleted': { id: string };
|
|
16
|
+
* };
|
|
17
|
+
* const bus = new TypedEventBus<MyEvents>();
|
|
18
|
+
* bus.on('entry:created', (payload) => console.log(payload.title));
|
|
19
|
+
* bus.emit('entry:created', { id: '1', title: 'Hello' });
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
export class TypedEventBus {
|
|
23
|
+
emitter = new EventEmitter();
|
|
24
|
+
on(event, listener) {
|
|
25
|
+
this.emitter.on(event, listener);
|
|
26
|
+
return this;
|
|
27
|
+
}
|
|
28
|
+
once(event, listener) {
|
|
29
|
+
this.emitter.once(event, listener);
|
|
30
|
+
return this;
|
|
31
|
+
}
|
|
32
|
+
off(event, listener) {
|
|
33
|
+
this.emitter.off(event, listener);
|
|
34
|
+
return this;
|
|
35
|
+
}
|
|
36
|
+
emit(event, payload) {
|
|
37
|
+
return this.emitter.emit(event, payload);
|
|
38
|
+
}
|
|
39
|
+
listenerCount() {
|
|
40
|
+
let total = 0;
|
|
41
|
+
for (const name of this.emitter.eventNames()) {
|
|
42
|
+
total += this.emitter.listenerCount(name);
|
|
43
|
+
}
|
|
44
|
+
return total;
|
|
45
|
+
}
|
|
46
|
+
removeAllListeners() {
|
|
47
|
+
this.emitter.removeAllListeners();
|
|
48
|
+
return this;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=event-bus.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-bus.js","sourceRoot":"","sources":["../../src/events/event-bus.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C;;;;;;;;;;;;;GAaG;AACH,MAAM,OAAO,aAAa;IAChB,OAAO,GAAG,IAAI,YAAY,EAAE,CAAC;IAErC,EAAE,CAAmC,KAAQ,EAAE,QAAuC;QACpF,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,QAAwC,CAAC,CAAC;QACjE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAmC,KAAQ,EAAE,QAAuC;QACtF,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,QAAwC,CAAC,CAAC;QACnE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,GAAG,CAAmC,KAAQ,EAAE,QAAuC;QACrF,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,QAAwC,CAAC,CAAC;QAClE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAmC,KAAQ,EAAE,OAAmB;QAClE,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC3C,CAAC;IAED,aAAa;QACX,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;YAC7C,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAC5C,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,kBAAkB;QAChB,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,CAAC;QAClC,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Chain Runner — executes multi-step workflows with data flow between steps.
|
|
3
|
+
*
|
|
4
|
+
* Steps call facade ops via a dispatch function. Each step's output is stored
|
|
5
|
+
* in a context object and can be referenced by subsequent steps via $variable syntax.
|
|
6
|
+
*
|
|
7
|
+
* Gates pause execution. Resume via approve(). State persists to SQLite.
|
|
8
|
+
*/
|
|
9
|
+
import type { PersistenceProvider } from '../persistence/types.js';
|
|
10
|
+
import type { ChainDef, ChainInstance } from './chain-types.js';
|
|
11
|
+
export type DispatchFn = (op: string, params: Record<string, unknown>) => Promise<unknown>;
|
|
12
|
+
type GateCheckFn = (gate: string, stepId: string, stepResult: unknown) => Promise<{
|
|
13
|
+
passed: boolean;
|
|
14
|
+
message?: string;
|
|
15
|
+
}>;
|
|
16
|
+
export declare class ChainRunner {
|
|
17
|
+
private provider;
|
|
18
|
+
constructor(provider: PersistenceProvider);
|
|
19
|
+
private initializeTable;
|
|
20
|
+
/**
|
|
21
|
+
* Execute a chain from the beginning (or a specific step).
|
|
22
|
+
*/
|
|
23
|
+
execute(chainDef: ChainDef, input: Record<string, unknown>, dispatch: DispatchFn, gateCheck?: GateCheckFn, startFromStep?: string): Promise<ChainInstance>;
|
|
24
|
+
/**
|
|
25
|
+
* Resume a paused chain from where it left off.
|
|
26
|
+
*/
|
|
27
|
+
resume(instanceId: string, chainDef: ChainDef, dispatch: DispatchFn, gateCheck?: GateCheckFn): Promise<ChainInstance>;
|
|
28
|
+
/**
|
|
29
|
+
* Approve a gate-paused step and resume the chain.
|
|
30
|
+
*/
|
|
31
|
+
approve(instanceId: string, chainDef: ChainDef, dispatch: DispatchFn, gateCheck?: GateCheckFn): Promise<ChainInstance>;
|
|
32
|
+
/**
|
|
33
|
+
* Get chain instance status.
|
|
34
|
+
*/
|
|
35
|
+
getInstance(instanceId: string): ChainInstance | null;
|
|
36
|
+
/**
|
|
37
|
+
* List all chain instances.
|
|
38
|
+
*/
|
|
39
|
+
list(limit?: number): ChainInstance[];
|
|
40
|
+
private runSteps;
|
|
41
|
+
private runStep;
|
|
42
|
+
private evaluateChainGate;
|
|
43
|
+
private persist;
|
|
44
|
+
}
|
|
45
|
+
export {};
|
|
46
|
+
//# sourceMappingURL=chain-runner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chain-runner.d.ts","sourceRoot":"","sources":["../../src/flows/chain-runner.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAc,MAAM,kBAAkB,CAAC;AAI5E,MAAM,MAAM,UAAU,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;AAE3F,KAAK,WAAW,GAAG,CACjB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,OAAO,KAChB,OAAO,CAAC;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAIpD,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAsB;gBAE1B,QAAQ,EAAE,mBAAmB;IAKzC,OAAO,CAAC,eAAe;IAoBvB;;OAEG;IACG,OAAO,CACX,QAAQ,EAAE,QAAQ,EAClB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,QAAQ,EAAE,UAAU,EACpB,SAAS,CAAC,EAAE,WAAW,EACvB,aAAa,CAAC,EAAE,MAAM,GACrB,OAAO,CAAC,aAAa,CAAC;IA8BzB;;OAEG;IACG,MAAM,CACV,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,UAAU,EACpB,SAAS,CAAC,EAAE,WAAW,GACtB,OAAO,CAAC,aAAa,CAAC;IAoBzB;;OAEG;IACG,OAAO,CACX,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,UAAU,EACpB,SAAS,CAAC,EAAE,WAAW,GACtB,OAAO,CAAC,aAAa,CAAC;IAIzB;;OAEG;IACH,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI;IAOrD;;OAEG;IACH,IAAI,CAAC,KAAK,GAAE,MAAW,GAAG,aAAa,EAAE;YAU3B,QAAQ;YAYR,OAAO;YAsEP,iBAAiB;IA6B/B,OAAO,CAAC,OAAO;CAuBhB"}
|
|
@@ -0,0 +1,271 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Chain Runner — executes multi-step workflows with data flow between steps.
|
|
3
|
+
*
|
|
4
|
+
* Steps call facade ops via a dispatch function. Each step's output is stored
|
|
5
|
+
* in a context object and can be referenced by subsequent steps via $variable syntax.
|
|
6
|
+
*
|
|
7
|
+
* Gates pause execution. Resume via approve(). State persists to SQLite.
|
|
8
|
+
*/
|
|
9
|
+
import { randomUUID } from 'node:crypto';
|
|
10
|
+
// ─── Class ───────────────────────────────────────────────────────────
|
|
11
|
+
export class ChainRunner {
|
|
12
|
+
provider;
|
|
13
|
+
constructor(provider) {
|
|
14
|
+
this.provider = provider;
|
|
15
|
+
this.initializeTable();
|
|
16
|
+
}
|
|
17
|
+
initializeTable() {
|
|
18
|
+
this.provider.execSql(`
|
|
19
|
+
CREATE TABLE IF NOT EXISTS chain_instances (
|
|
20
|
+
id TEXT PRIMARY KEY,
|
|
21
|
+
chain_id TEXT NOT NULL,
|
|
22
|
+
chain_name TEXT NOT NULL DEFAULT '',
|
|
23
|
+
status TEXT NOT NULL DEFAULT 'running',
|
|
24
|
+
current_step TEXT,
|
|
25
|
+
paused_at_gate TEXT,
|
|
26
|
+
input TEXT NOT NULL DEFAULT '{}',
|
|
27
|
+
context TEXT NOT NULL DEFAULT '{}',
|
|
28
|
+
step_outputs TEXT NOT NULL DEFAULT '[]',
|
|
29
|
+
steps_completed INTEGER NOT NULL DEFAULT 0,
|
|
30
|
+
total_steps INTEGER NOT NULL DEFAULT 0,
|
|
31
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
32
|
+
updated_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
33
|
+
);
|
|
34
|
+
`);
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Execute a chain from the beginning (or a specific step).
|
|
38
|
+
*/
|
|
39
|
+
async execute(chainDef, input, dispatch, gateCheck, startFromStep) {
|
|
40
|
+
const instanceId = randomUUID().slice(0, 12);
|
|
41
|
+
const instance = {
|
|
42
|
+
id: instanceId,
|
|
43
|
+
chainId: chainDef.id,
|
|
44
|
+
chainName: chainDef.name ?? chainDef.id,
|
|
45
|
+
status: 'running',
|
|
46
|
+
currentStep: null,
|
|
47
|
+
pausedAtGate: null,
|
|
48
|
+
input,
|
|
49
|
+
context: { input },
|
|
50
|
+
stepOutputs: [],
|
|
51
|
+
stepsCompleted: 0,
|
|
52
|
+
totalSteps: chainDef.steps.length,
|
|
53
|
+
createdAt: new Date().toISOString(),
|
|
54
|
+
updatedAt: new Date().toISOString(),
|
|
55
|
+
};
|
|
56
|
+
this.persist(instance);
|
|
57
|
+
// Find start index
|
|
58
|
+
let startIdx = 0;
|
|
59
|
+
if (startFromStep) {
|
|
60
|
+
const idx = chainDef.steps.findIndex((s) => s.id === startFromStep);
|
|
61
|
+
if (idx >= 0)
|
|
62
|
+
startIdx = idx;
|
|
63
|
+
}
|
|
64
|
+
return this.runSteps(chainDef, instance, dispatch, gateCheck, startIdx);
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Resume a paused chain from where it left off.
|
|
68
|
+
*/
|
|
69
|
+
async resume(instanceId, chainDef, dispatch, gateCheck) {
|
|
70
|
+
const instance = this.getInstance(instanceId);
|
|
71
|
+
if (!instance)
|
|
72
|
+
throw new Error(`Chain instance not found: ${instanceId}`);
|
|
73
|
+
if (instance.status !== 'paused')
|
|
74
|
+
throw new Error(`Chain is ${instance.status}, not paused`);
|
|
75
|
+
// Find the step after the paused gate
|
|
76
|
+
const pausedStep = instance.pausedAtGate;
|
|
77
|
+
if (!pausedStep)
|
|
78
|
+
throw new Error('No paused gate to resume from');
|
|
79
|
+
const stepIdx = chainDef.steps.findIndex((s) => s.id === pausedStep);
|
|
80
|
+
if (stepIdx < 0)
|
|
81
|
+
throw new Error(`Paused step ${pausedStep} not found in chain def`);
|
|
82
|
+
// Mark step as approved, move to next
|
|
83
|
+
instance.status = 'running';
|
|
84
|
+
instance.pausedAtGate = null;
|
|
85
|
+
this.persist(instance);
|
|
86
|
+
return this.runSteps(chainDef, instance, dispatch, gateCheck, stepIdx + 1);
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Approve a gate-paused step and resume the chain.
|
|
90
|
+
*/
|
|
91
|
+
async approve(instanceId, chainDef, dispatch, gateCheck) {
|
|
92
|
+
return this.resume(instanceId, chainDef, dispatch, gateCheck);
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Get chain instance status.
|
|
96
|
+
*/
|
|
97
|
+
getInstance(instanceId) {
|
|
98
|
+
const row = this.provider.get('SELECT * FROM chain_instances WHERE id = ?', [
|
|
99
|
+
instanceId,
|
|
100
|
+
]);
|
|
101
|
+
return row ? rowToInstance(row) : null;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* List all chain instances.
|
|
105
|
+
*/
|
|
106
|
+
list(limit = 20) {
|
|
107
|
+
const rows = this.provider.all('SELECT * FROM chain_instances ORDER BY updated_at DESC LIMIT ?', [limit]);
|
|
108
|
+
return rows.map(rowToInstance);
|
|
109
|
+
}
|
|
110
|
+
// ─── Core Execution Loop ──────────────────────────────────────────
|
|
111
|
+
async runSteps(chainDef, instance, dispatch, gateCheck, startIdx) {
|
|
112
|
+
// Steps MUST run sequentially — step N output feeds step N+1 input.
|
|
113
|
+
// Using recursive approach to satisfy no-await-in-loop lint rule.
|
|
114
|
+
return this.runStep(chainDef, instance, dispatch, gateCheck, startIdx);
|
|
115
|
+
}
|
|
116
|
+
async runStep(chainDef, instance, dispatch, gateCheck, idx) {
|
|
117
|
+
if (idx >= chainDef.steps.length) {
|
|
118
|
+
instance.status = 'completed';
|
|
119
|
+
instance.currentStep = null;
|
|
120
|
+
this.persist(instance);
|
|
121
|
+
return instance;
|
|
122
|
+
}
|
|
123
|
+
const step = chainDef.steps[idx];
|
|
124
|
+
instance.currentStep = step.id;
|
|
125
|
+
this.persist(instance);
|
|
126
|
+
const resolvedParams = resolveParams(step.params ?? {}, instance.context);
|
|
127
|
+
const stepStart = Date.now();
|
|
128
|
+
let result;
|
|
129
|
+
let stepStatus = 'completed';
|
|
130
|
+
try {
|
|
131
|
+
result = await dispatch(step.op, resolvedParams);
|
|
132
|
+
}
|
|
133
|
+
catch (err) {
|
|
134
|
+
result = { error: err.message };
|
|
135
|
+
stepStatus = 'failed';
|
|
136
|
+
}
|
|
137
|
+
const output = {
|
|
138
|
+
stepId: step.id,
|
|
139
|
+
op: step.op,
|
|
140
|
+
result,
|
|
141
|
+
status: stepStatus,
|
|
142
|
+
durationMs: Date.now() - stepStart,
|
|
143
|
+
};
|
|
144
|
+
instance.stepOutputs.push(output);
|
|
145
|
+
instance.context[step.id] = result;
|
|
146
|
+
if (step.output)
|
|
147
|
+
instance.context[step.output] = result;
|
|
148
|
+
if (stepStatus === 'completed')
|
|
149
|
+
instance.stepsCompleted++;
|
|
150
|
+
// Check gate
|
|
151
|
+
if (step.gate && step.gate !== 'none' && stepStatus === 'completed') {
|
|
152
|
+
const gateResult = await this.evaluateChainGate(step.gate, step.id, result, gateCheck);
|
|
153
|
+
if (!gateResult.passed) {
|
|
154
|
+
if (step.gate === 'user-approval') {
|
|
155
|
+
instance.status = 'paused';
|
|
156
|
+
instance.pausedAtGate = step.id;
|
|
157
|
+
this.persist(instance);
|
|
158
|
+
return instance;
|
|
159
|
+
}
|
|
160
|
+
instance.status = 'failed';
|
|
161
|
+
this.persist(instance);
|
|
162
|
+
return instance;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
if (stepStatus === 'failed') {
|
|
166
|
+
instance.status = 'failed';
|
|
167
|
+
this.persist(instance);
|
|
168
|
+
return instance;
|
|
169
|
+
}
|
|
170
|
+
this.persist(instance);
|
|
171
|
+
return this.runStep(chainDef, instance, dispatch, gateCheck, idx + 1);
|
|
172
|
+
}
|
|
173
|
+
async evaluateChainGate(gate, stepId, stepResult, gateCheck) {
|
|
174
|
+
switch (gate) {
|
|
175
|
+
case 'user-approval':
|
|
176
|
+
return { passed: false, message: 'Awaiting user approval' };
|
|
177
|
+
case 'auto-test': {
|
|
178
|
+
const result = stepResult;
|
|
179
|
+
if (!result)
|
|
180
|
+
return { passed: false, message: 'Step returned no result' };
|
|
181
|
+
if (result.error)
|
|
182
|
+
return { passed: false, message: `Step error: ${result.error}` };
|
|
183
|
+
return { passed: true };
|
|
184
|
+
}
|
|
185
|
+
case 'vault-check': {
|
|
186
|
+
if (gateCheck)
|
|
187
|
+
return gateCheck(gate, stepId, stepResult);
|
|
188
|
+
return { passed: true };
|
|
189
|
+
}
|
|
190
|
+
default:
|
|
191
|
+
return { passed: true };
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
// ─── Persistence ──────────────────────────────────────────────────
|
|
195
|
+
persist(instance) {
|
|
196
|
+
instance.updatedAt = new Date().toISOString();
|
|
197
|
+
this.provider.run(`INSERT OR REPLACE INTO chain_instances
|
|
198
|
+
(id, chain_id, chain_name, status, current_step, paused_at_gate, input, context, step_outputs, steps_completed, total_steps, created_at, updated_at)
|
|
199
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`, [
|
|
200
|
+
instance.id,
|
|
201
|
+
instance.chainId,
|
|
202
|
+
instance.chainName,
|
|
203
|
+
instance.status,
|
|
204
|
+
instance.currentStep,
|
|
205
|
+
instance.pausedAtGate,
|
|
206
|
+
JSON.stringify(instance.input),
|
|
207
|
+
JSON.stringify(instance.context),
|
|
208
|
+
JSON.stringify(instance.stepOutputs),
|
|
209
|
+
instance.stepsCompleted,
|
|
210
|
+
instance.totalSteps,
|
|
211
|
+
instance.createdAt,
|
|
212
|
+
instance.updatedAt,
|
|
213
|
+
]);
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
// ─── Variable Resolution ─────────────────────────────────────────────
|
|
217
|
+
/**
|
|
218
|
+
* Resolve $variable references in params.
|
|
219
|
+
* $input.url → context.input.url
|
|
220
|
+
* $research.title → context.research.title
|
|
221
|
+
* $stepId → context.stepId (whole object)
|
|
222
|
+
*/
|
|
223
|
+
function resolveParams(params, context) {
|
|
224
|
+
const resolved = {};
|
|
225
|
+
for (const [key, value] of Object.entries(params)) {
|
|
226
|
+
resolved[key] = resolveValue(value, context);
|
|
227
|
+
}
|
|
228
|
+
return resolved;
|
|
229
|
+
}
|
|
230
|
+
function resolveValue(value, context) {
|
|
231
|
+
if (typeof value === 'string' && value.startsWith('$')) {
|
|
232
|
+
return resolveReference(value.slice(1), context);
|
|
233
|
+
}
|
|
234
|
+
if (Array.isArray(value)) {
|
|
235
|
+
return value.map((v) => resolveValue(v, context));
|
|
236
|
+
}
|
|
237
|
+
if (value !== null && typeof value === 'object') {
|
|
238
|
+
return resolveParams(value, context);
|
|
239
|
+
}
|
|
240
|
+
return value;
|
|
241
|
+
}
|
|
242
|
+
function resolveReference(path, context) {
|
|
243
|
+
const parts = path.split('.');
|
|
244
|
+
let current = context;
|
|
245
|
+
for (const part of parts) {
|
|
246
|
+
if (current === null || current === undefined)
|
|
247
|
+
return undefined;
|
|
248
|
+
if (typeof current !== 'object')
|
|
249
|
+
return undefined;
|
|
250
|
+
current = current[part];
|
|
251
|
+
}
|
|
252
|
+
return current;
|
|
253
|
+
}
|
|
254
|
+
function rowToInstance(row) {
|
|
255
|
+
return {
|
|
256
|
+
id: row.id,
|
|
257
|
+
chainId: row.chain_id,
|
|
258
|
+
chainName: row.chain_name,
|
|
259
|
+
status: row.status,
|
|
260
|
+
currentStep: row.current_step,
|
|
261
|
+
pausedAtGate: row.paused_at_gate,
|
|
262
|
+
input: JSON.parse(row.input),
|
|
263
|
+
context: JSON.parse(row.context),
|
|
264
|
+
stepOutputs: JSON.parse(row.step_outputs),
|
|
265
|
+
stepsCompleted: row.steps_completed,
|
|
266
|
+
totalSteps: row.total_steps,
|
|
267
|
+
createdAt: row.created_at,
|
|
268
|
+
updatedAt: row.updated_at,
|
|
269
|
+
};
|
|
270
|
+
}
|
|
271
|
+
//# sourceMappingURL=chain-runner.js.map
|