@soleri/core 2.11.0 → 7.0.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/data/flows/build.flow.yaml +128 -0
- package/data/flows/deliver.flow.yaml +110 -0
- package/data/flows/design.flow.yaml +108 -0
- package/data/flows/enhance.flow.yaml +90 -0
- package/data/flows/explore.flow.yaml +84 -0
- package/data/flows/fix.flow.yaml +90 -0
- package/data/flows/plan.flow.yaml +87 -0
- package/data/flows/review.flow.yaml +90 -0
- package/dist/brain/brain.d.ts.map +1 -1
- package/dist/brain/brain.js +10 -0
- package/dist/brain/brain.js.map +1 -1
- package/dist/brain/intelligence.d.ts.map +1 -1
- package/dist/brain/intelligence.js +16 -2
- package/dist/brain/intelligence.js.map +1 -1
- package/dist/capabilities/chain-mapping.d.ts +21 -0
- package/dist/capabilities/chain-mapping.d.ts.map +1 -0
- package/dist/capabilities/chain-mapping.js +86 -0
- package/dist/capabilities/chain-mapping.js.map +1 -0
- package/dist/capabilities/index.d.ts +10 -0
- package/dist/capabilities/index.d.ts.map +1 -0
- package/dist/capabilities/index.js +8 -0
- package/dist/capabilities/index.js.map +1 -0
- package/dist/capabilities/registry.d.ts +95 -0
- package/dist/capabilities/registry.d.ts.map +1 -0
- package/dist/capabilities/registry.js +227 -0
- package/dist/capabilities/registry.js.map +1 -0
- package/dist/capabilities/types.d.ts +106 -0
- package/dist/capabilities/types.d.ts.map +1 -0
- package/dist/capabilities/types.js +12 -0
- package/dist/capabilities/types.js.map +1 -0
- package/dist/control/intent-router.d.ts.map +1 -1
- package/dist/control/intent-router.js +58 -2
- package/dist/control/intent-router.js.map +1 -1
- package/dist/domain-packs/index.d.ts +8 -0
- package/dist/domain-packs/index.d.ts.map +1 -0
- package/dist/domain-packs/index.js +8 -0
- package/dist/domain-packs/index.js.map +1 -0
- package/dist/domain-packs/inject-rules.d.ts +24 -0
- package/dist/domain-packs/inject-rules.d.ts.map +1 -0
- package/dist/domain-packs/inject-rules.js +65 -0
- package/dist/domain-packs/inject-rules.js.map +1 -0
- package/dist/domain-packs/knowledge-installer.d.ts +27 -0
- package/dist/domain-packs/knowledge-installer.d.ts.map +1 -0
- package/dist/domain-packs/knowledge-installer.js +89 -0
- package/dist/domain-packs/knowledge-installer.js.map +1 -0
- package/dist/domain-packs/loader.d.ts +28 -0
- package/dist/domain-packs/loader.d.ts.map +1 -0
- package/dist/domain-packs/loader.js +105 -0
- package/dist/domain-packs/loader.js.map +1 -0
- package/dist/domain-packs/pack-runtime.d.ts +80 -0
- package/dist/domain-packs/pack-runtime.d.ts.map +1 -0
- package/dist/domain-packs/pack-runtime.js +36 -0
- package/dist/domain-packs/pack-runtime.js.map +1 -0
- package/dist/domain-packs/skills-installer.d.ts +21 -0
- package/dist/domain-packs/skills-installer.d.ts.map +1 -0
- package/dist/domain-packs/skills-installer.js +38 -0
- package/dist/domain-packs/skills-installer.js.map +1 -0
- package/dist/domain-packs/token-resolver.d.ts +37 -0
- package/dist/domain-packs/token-resolver.d.ts.map +1 -0
- package/dist/domain-packs/token-resolver.js +109 -0
- package/dist/domain-packs/token-resolver.js.map +1 -0
- package/dist/domain-packs/types.d.ts +91 -0
- package/dist/domain-packs/types.d.ts.map +1 -0
- package/dist/domain-packs/types.js +122 -0
- package/dist/domain-packs/types.js.map +1 -0
- package/dist/engine/bin/soleri-engine.d.ts +12 -0
- package/dist/engine/bin/soleri-engine.d.ts.map +1 -0
- package/dist/engine/bin/soleri-engine.js +183 -0
- package/dist/engine/bin/soleri-engine.js.map +1 -0
- package/dist/engine/core-ops.d.ts +27 -0
- package/dist/engine/core-ops.d.ts.map +1 -0
- package/dist/engine/core-ops.js +159 -0
- package/dist/engine/core-ops.js.map +1 -0
- package/dist/engine/index.d.ts +19 -0
- package/dist/engine/index.d.ts.map +1 -0
- package/dist/engine/index.js +17 -0
- package/dist/engine/index.js.map +1 -0
- package/dist/engine/register-engine.d.ts +54 -0
- package/dist/engine/register-engine.d.ts.map +1 -0
- package/dist/engine/register-engine.js +270 -0
- package/dist/engine/register-engine.js.map +1 -0
- package/dist/engine/test-helpers.d.ts +30 -0
- package/dist/engine/test-helpers.d.ts.map +1 -0
- package/dist/engine/test-helpers.js +59 -0
- package/dist/engine/test-helpers.js.map +1 -0
- package/dist/flows/context-router.d.ts +39 -0
- package/dist/flows/context-router.d.ts.map +1 -0
- package/dist/flows/context-router.js +206 -0
- package/dist/flows/context-router.js.map +1 -0
- package/dist/flows/dispatch-registry.d.ts +24 -0
- package/dist/flows/dispatch-registry.d.ts.map +1 -0
- package/dist/flows/dispatch-registry.js +70 -0
- package/dist/flows/dispatch-registry.js.map +1 -0
- package/dist/flows/epilogue.d.ts +24 -0
- package/dist/flows/epilogue.d.ts.map +1 -0
- package/dist/flows/epilogue.js +52 -0
- package/dist/flows/epilogue.js.map +1 -0
- package/dist/flows/executor.d.ts +25 -0
- package/dist/flows/executor.d.ts.map +1 -0
- package/dist/flows/executor.js +153 -0
- package/dist/flows/executor.js.map +1 -0
- package/dist/flows/gate-evaluator.d.ts +26 -0
- package/dist/flows/gate-evaluator.d.ts.map +1 -0
- package/dist/flows/gate-evaluator.js +162 -0
- package/dist/flows/gate-evaluator.js.map +1 -0
- package/dist/flows/index.d.ts +14 -0
- package/dist/flows/index.d.ts.map +1 -0
- package/dist/flows/index.js +20 -0
- package/dist/flows/index.js.map +1 -0
- package/dist/flows/loader.d.ts +17 -0
- package/dist/flows/loader.d.ts.map +1 -0
- package/dist/flows/loader.js +61 -0
- package/dist/flows/loader.js.map +1 -0
- package/dist/flows/plan-builder.d.ts +40 -0
- package/dist/flows/plan-builder.d.ts.map +1 -0
- package/dist/flows/plan-builder.js +213 -0
- package/dist/flows/plan-builder.js.map +1 -0
- package/dist/flows/probes.d.ts +11 -0
- package/dist/flows/probes.d.ts.map +1 -0
- package/dist/flows/probes.js +62 -0
- package/dist/flows/probes.js.map +1 -0
- package/dist/flows/types.d.ts +950 -0
- package/dist/flows/types.d.ts.map +1 -0
- package/dist/flows/types.js +105 -0
- package/dist/flows/types.js.map +1 -0
- package/dist/index.d.ts +11 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -1
- package/dist/index.js.map +1 -1
- package/dist/intelligence/loader.d.ts +19 -0
- package/dist/intelligence/loader.d.ts.map +1 -1
- package/dist/intelligence/loader.js +86 -5
- package/dist/intelligence/loader.js.map +1 -1
- package/dist/intelligence/types.d.ts +1 -0
- package/dist/intelligence/types.d.ts.map +1 -1
- package/dist/packs/types.d.ts +58 -19
- package/dist/packs/types.d.ts.map +1 -1
- package/dist/packs/types.js +14 -0
- package/dist/packs/types.js.map +1 -1
- package/dist/playbooks/generic/onboarding.d.ts +9 -0
- package/dist/playbooks/generic/onboarding.d.ts.map +1 -0
- package/dist/playbooks/generic/onboarding.js +74 -0
- package/dist/playbooks/generic/onboarding.js.map +1 -0
- package/dist/playbooks/playbook-registry.d.ts.map +1 -1
- package/dist/playbooks/playbook-registry.js +2 -0
- package/dist/playbooks/playbook-registry.js.map +1 -1
- package/dist/runtime/admin-extra-ops.d.ts.map +1 -1
- package/dist/runtime/admin-extra-ops.js +15 -9
- package/dist/runtime/admin-extra-ops.js.map +1 -1
- package/dist/runtime/admin-ops.js +4 -4
- package/dist/runtime/admin-ops.js.map +1 -1
- package/dist/runtime/capture-ops.d.ts.map +1 -1
- package/dist/runtime/capture-ops.js +33 -1
- package/dist/runtime/capture-ops.js.map +1 -1
- package/dist/runtime/domain-ops.d.ts +21 -5
- package/dist/runtime/domain-ops.d.ts.map +1 -1
- package/dist/runtime/domain-ops.js +85 -8
- package/dist/runtime/domain-ops.js.map +1 -1
- package/dist/runtime/facades/cognee-facade.d.ts.map +1 -1
- package/dist/runtime/facades/cognee-facade.js +3 -1
- package/dist/runtime/facades/cognee-facade.js.map +1 -1
- package/dist/runtime/facades/index.d.ts.map +1 -1
- package/dist/runtime/facades/index.js +10 -6
- package/dist/runtime/facades/index.js.map +1 -1
- package/dist/runtime/facades/vault-facade.d.ts.map +1 -1
- package/dist/runtime/facades/vault-facade.js +2 -0
- package/dist/runtime/facades/vault-facade.js.map +1 -1
- package/dist/runtime/orchestrate-ops.d.ts +8 -7
- package/dist/runtime/orchestrate-ops.d.ts.map +1 -1
- package/dist/runtime/orchestrate-ops.js +227 -58
- package/dist/runtime/orchestrate-ops.js.map +1 -1
- package/dist/runtime/runtime.d.ts.map +1 -1
- package/dist/runtime/runtime.js +23 -17
- package/dist/runtime/runtime.js.map +1 -1
- package/dist/runtime/types.d.ts +6 -2
- package/dist/runtime/types.d.ts.map +1 -1
- package/dist/runtime/vault-linking-ops.d.ts +13 -0
- package/dist/runtime/vault-linking-ops.d.ts.map +1 -0
- package/dist/runtime/vault-linking-ops.js +367 -0
- package/dist/runtime/vault-linking-ops.js.map +1 -0
- package/dist/vault/linking.d.ts +46 -0
- package/dist/vault/linking.d.ts.map +1 -0
- package/dist/vault/linking.js +275 -0
- package/dist/vault/linking.js.map +1 -0
- package/dist/vault/vault-types.d.ts +37 -0
- package/dist/vault/vault-types.d.ts.map +1 -1
- package/dist/vault/vault.d.ts +12 -0
- package/dist/vault/vault.d.ts.map +1 -1
- package/dist/vault/vault.js +85 -6
- package/dist/vault/vault.js.map +1 -1
- package/package.json +4 -1
- package/src/__tests__/admin-extra-ops.test.ts +1 -1
- package/src/__tests__/admin-ops.test.ts +2 -1
- package/src/__tests__/cognee-client-gaps.test.ts +470 -0
- package/src/__tests__/cognee-hybrid-search.test.ts +478 -0
- package/src/__tests__/cognee-sync-manager-deep.test.ts +630 -0
- package/src/__tests__/cognee-sync-manager.test.ts +1 -0
- package/src/__tests__/core-ops.test.ts +9 -61
- package/src/__tests__/domain-packs.test.ts +421 -0
- package/src/__tests__/flows.test.ts +604 -0
- package/src/__tests__/playbook-registry.test.ts +2 -2
- package/src/__tests__/playbook-seeder.test.ts +8 -8
- package/src/__tests__/playbook.test.ts +5 -5
- package/src/__tests__/token-resolver.test.ts +79 -0
- package/src/brain/brain.ts +12 -0
- package/src/brain/intelligence.ts +21 -2
- package/src/capabilities/chain-mapping.ts +93 -0
- package/src/capabilities/index.ts +21 -0
- package/src/capabilities/registry.ts +290 -0
- package/src/capabilities/types.ts +143 -0
- package/src/control/intent-router.ts +46 -2
- package/src/domain-packs/index.ts +27 -0
- package/src/domain-packs/inject-rules.ts +74 -0
- package/src/domain-packs/knowledge-installer.ts +116 -0
- package/src/domain-packs/loader.ts +124 -0
- package/src/domain-packs/pack-runtime.ts +99 -0
- package/src/domain-packs/skills-installer.ts +56 -0
- package/src/domain-packs/token-resolver.ts +126 -0
- package/src/domain-packs/types.ts +229 -0
- package/src/engine/__tests__/register-engine.test.ts +104 -0
- package/src/engine/bin/soleri-engine.ts +217 -0
- package/src/engine/core-ops.ts +178 -0
- package/src/engine/index.ts +19 -0
- package/src/engine/register-engine.ts +385 -0
- package/src/engine/test-helpers.ts +83 -0
- package/src/flows/context-router.ts +257 -0
- package/src/flows/dispatch-registry.ts +80 -0
- package/src/flows/epilogue.ts +65 -0
- package/src/flows/executor.ts +182 -0
- package/src/flows/gate-evaluator.ts +171 -0
- package/src/flows/index.ts +52 -0
- package/src/flows/loader.ts +63 -0
- package/src/flows/plan-builder.ts +250 -0
- package/src/flows/probes.ts +70 -0
- package/src/flows/types.ts +217 -0
- package/src/index.ts +68 -1
- package/src/intelligence/loader.ts +96 -5
- package/src/intelligence/types.ts +1 -0
- package/src/packs/types.ts +19 -0
- package/src/playbooks/generic/onboarding.ts +79 -0
- package/src/playbooks/playbook-registry.ts +2 -0
- package/src/runtime/admin-extra-ops.ts +14 -8
- package/src/runtime/admin-ops.ts +4 -4
- package/src/runtime/capture-ops.ts +40 -1
- package/src/runtime/domain-ops.ts +92 -7
- package/src/runtime/facades/cognee-facade.ts +3 -1
- package/src/runtime/facades/index.ts +12 -6
- package/src/runtime/facades/vault-facade.ts +2 -0
- package/src/runtime/orchestrate-ops.ts +271 -62
- package/src/runtime/runtime.ts +27 -18
- package/src/runtime/types.ts +6 -2
- package/src/runtime/vault-linking-ops.ts +454 -0
- package/src/vault/linking.ts +333 -0
- package/src/vault/vault-types.ts +46 -0
- package/src/vault/vault.ts +94 -7
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Soleri v7 — Agent Core Ops
|
|
3
|
+
*
|
|
4
|
+
* Generates the agent-specific ops (health, identity, activate, setup)
|
|
5
|
+
* from agent.yaml config, without generated TypeScript.
|
|
6
|
+
*
|
|
7
|
+
* These ops were previously hardcoded in the Forge entry-point template.
|
|
8
|
+
* Now they're created dynamically by the engine at startup.
|
|
9
|
+
*/
|
|
10
|
+
import { z } from 'zod';
|
|
11
|
+
/**
|
|
12
|
+
* Create agent-specific core ops from identity config.
|
|
13
|
+
* These are registered under `{agentId}_core`.
|
|
14
|
+
*/
|
|
15
|
+
export function createCoreOps(runtime, identity) {
|
|
16
|
+
return [
|
|
17
|
+
{
|
|
18
|
+
name: 'health',
|
|
19
|
+
description: 'Health check — vault status and agent info.',
|
|
20
|
+
auth: 'read',
|
|
21
|
+
handler: async () => {
|
|
22
|
+
const s = runtime.vault.stats();
|
|
23
|
+
return {
|
|
24
|
+
status: 'ok',
|
|
25
|
+
agent: { name: identity.name, role: identity.role, format: 'filetree' },
|
|
26
|
+
vault: { entries: s.totalEntries, domains: Object.keys(s.byDomain) },
|
|
27
|
+
};
|
|
28
|
+
},
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
name: 'identity',
|
|
32
|
+
description: 'Get agent identity — name, role, principles.',
|
|
33
|
+
auth: 'read',
|
|
34
|
+
handler: async () => {
|
|
35
|
+
// Check IdentityManager first (may have evolved via updates)
|
|
36
|
+
const managed = runtime.identityManager?.getIdentity(identity.id);
|
|
37
|
+
if (managed)
|
|
38
|
+
return managed;
|
|
39
|
+
return {
|
|
40
|
+
name: identity.name,
|
|
41
|
+
role: identity.role,
|
|
42
|
+
description: identity.description,
|
|
43
|
+
domains: identity.domains,
|
|
44
|
+
principles: identity.principles,
|
|
45
|
+
tone: identity.tone,
|
|
46
|
+
};
|
|
47
|
+
},
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
name: 'activate',
|
|
51
|
+
description: `Activate agent persona. Say "Hello, ${identity.name}!" to trigger.`,
|
|
52
|
+
auth: 'read',
|
|
53
|
+
schema: z.object({
|
|
54
|
+
projectPath: z.string().optional().default('.'),
|
|
55
|
+
deactivate: z.boolean().optional(),
|
|
56
|
+
}),
|
|
57
|
+
handler: async (params) => {
|
|
58
|
+
if (params.deactivate) {
|
|
59
|
+
return { deactivated: true, agent: identity.id };
|
|
60
|
+
}
|
|
61
|
+
// Seed identity on first activation
|
|
62
|
+
if (runtime.identityManager && !runtime.identityManager.getIdentity(identity.id)) {
|
|
63
|
+
runtime.identityManager.setIdentity(identity.id, {
|
|
64
|
+
name: identity.name,
|
|
65
|
+
role: identity.role,
|
|
66
|
+
description: identity.description,
|
|
67
|
+
personality: identity.principles,
|
|
68
|
+
changedBy: 'system',
|
|
69
|
+
changeReason: 'Initial identity seeded from agent.yaml',
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
// Register project if project registry available
|
|
73
|
+
const projectPath = params.projectPath ?? '.';
|
|
74
|
+
if (runtime.projectRegistry) {
|
|
75
|
+
try {
|
|
76
|
+
runtime.projectRegistry.register(projectPath);
|
|
77
|
+
}
|
|
78
|
+
catch {
|
|
79
|
+
// Project may already be registered
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
// Build activation context
|
|
83
|
+
const s = runtime.vault.stats();
|
|
84
|
+
return {
|
|
85
|
+
activated: true,
|
|
86
|
+
agent: {
|
|
87
|
+
id: identity.id,
|
|
88
|
+
name: identity.name,
|
|
89
|
+
role: identity.role,
|
|
90
|
+
description: identity.description,
|
|
91
|
+
format: 'filetree',
|
|
92
|
+
},
|
|
93
|
+
persona: {
|
|
94
|
+
tone: identity.tone,
|
|
95
|
+
principles: identity.principles,
|
|
96
|
+
greeting: identity.greeting ?? `Hello! I am ${identity.name}.`,
|
|
97
|
+
},
|
|
98
|
+
vault: {
|
|
99
|
+
connected: true,
|
|
100
|
+
entries: s.totalEntries,
|
|
101
|
+
domains: Object.keys(s.byDomain),
|
|
102
|
+
},
|
|
103
|
+
domains: identity.domains,
|
|
104
|
+
};
|
|
105
|
+
},
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
name: 'register',
|
|
109
|
+
description: 'Register a project for context tracking.',
|
|
110
|
+
auth: 'write',
|
|
111
|
+
schema: z.object({
|
|
112
|
+
projectPath: z.string().default('.'),
|
|
113
|
+
}),
|
|
114
|
+
handler: async (params) => {
|
|
115
|
+
const projectPath = params.projectPath ?? '.';
|
|
116
|
+
if (runtime.projectRegistry) {
|
|
117
|
+
try {
|
|
118
|
+
const project = runtime.projectRegistry.register(projectPath);
|
|
119
|
+
return { registered: true, project };
|
|
120
|
+
}
|
|
121
|
+
catch {
|
|
122
|
+
return { registered: false, reason: 'Already registered or error' };
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
return { registered: false, reason: 'Project registry not available' };
|
|
126
|
+
},
|
|
127
|
+
},
|
|
128
|
+
{
|
|
129
|
+
name: 'setup',
|
|
130
|
+
description: 'Check setup status — vault entries, engine health, domain packs.',
|
|
131
|
+
auth: 'read',
|
|
132
|
+
handler: async () => {
|
|
133
|
+
const s = runtime.vault.stats();
|
|
134
|
+
return {
|
|
135
|
+
agent: {
|
|
136
|
+
id: identity.id,
|
|
137
|
+
name: identity.name,
|
|
138
|
+
format: 'filetree',
|
|
139
|
+
},
|
|
140
|
+
vault: {
|
|
141
|
+
entries: s.totalEntries,
|
|
142
|
+
domains: Object.keys(s.byDomain),
|
|
143
|
+
byType: s.byType,
|
|
144
|
+
},
|
|
145
|
+
engine: {
|
|
146
|
+
cognee: runtime.cognee !== null && runtime.cognee !== undefined,
|
|
147
|
+
brain: true,
|
|
148
|
+
curator: true,
|
|
149
|
+
planner: true,
|
|
150
|
+
},
|
|
151
|
+
recommendations: s.totalEntries === 0
|
|
152
|
+
? ['Vault is empty — capture knowledge to start building intelligence']
|
|
153
|
+
: [],
|
|
154
|
+
};
|
|
155
|
+
},
|
|
156
|
+
},
|
|
157
|
+
];
|
|
158
|
+
}
|
|
159
|
+
//# sourceMappingURL=core-ops.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"core-ops.js","sourceRoot":"","sources":["../../src/engine/core-ops.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Soleri Knowledge Engine — MCP Server Entry Point
|
|
3
|
+
*
|
|
4
|
+
* This is the standalone knowledge engine that file-tree agents connect to.
|
|
5
|
+
* It reads agent.yaml, initializes the runtime, and registers all tools.
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* npx @soleri/engine --agent ./agent.yaml
|
|
9
|
+
*
|
|
10
|
+
* Or in .mcp.json:
|
|
11
|
+
* { "command": "npx", "args": ["@soleri/engine", "--agent", "./agent.yaml"] }
|
|
12
|
+
*
|
|
13
|
+
* Binary entry point: ./bin/soleri-engine.ts
|
|
14
|
+
*/
|
|
15
|
+
export { registerEngine } from './register-engine.js';
|
|
16
|
+
export type { EngineRegistrationOptions, EngineRegistrationResult } from './register-engine.js';
|
|
17
|
+
export { createCoreOps } from './core-ops.js';
|
|
18
|
+
export type { AgentIdentityConfig } from './core-ops.js';
|
|
19
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/engine/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,YAAY,EAAE,yBAAyB,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAChG,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,YAAY,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Soleri Knowledge Engine — MCP Server Entry Point
|
|
3
|
+
*
|
|
4
|
+
* This is the standalone knowledge engine that file-tree agents connect to.
|
|
5
|
+
* It reads agent.yaml, initializes the runtime, and registers all tools.
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* npx @soleri/engine --agent ./agent.yaml
|
|
9
|
+
*
|
|
10
|
+
* Or in .mcp.json:
|
|
11
|
+
* { "command": "npx", "args": ["@soleri/engine", "--agent", "./agent.yaml"] }
|
|
12
|
+
*
|
|
13
|
+
* Binary entry point: ./bin/soleri-engine.ts
|
|
14
|
+
*/
|
|
15
|
+
export { registerEngine } from './register-engine.js';
|
|
16
|
+
export { createCoreOps } from './core-ops.js';
|
|
17
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Soleri v7 — Direct Engine Registration
|
|
3
|
+
*
|
|
4
|
+
* Registers all engine modules as MCP tools without the facade factory.
|
|
5
|
+
* Each module gets a single MCP tool with op-based dispatch.
|
|
6
|
+
*
|
|
7
|
+
* This replaces:
|
|
8
|
+
* - facade-factory.ts (generic dispatch layer)
|
|
9
|
+
* - registerAllFacades() + registerFacade() + dispatchOp()
|
|
10
|
+
* - FacadeConfig type (no longer needed)
|
|
11
|
+
*
|
|
12
|
+
* What stays:
|
|
13
|
+
* - createVaultFacadeOps(), createBrainFacadeOps(), etc. (op definitions)
|
|
14
|
+
* - createAgentRuntime() (module initialization)
|
|
15
|
+
* - OpDefinition type (handler + schema + auth)
|
|
16
|
+
* - Auth checking (same logic, inlined)
|
|
17
|
+
*/
|
|
18
|
+
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
19
|
+
import type { AgentRuntime } from '../runtime/types.js';
|
|
20
|
+
import type { OpDefinition, AuthPolicy } from '../facades/types.js';
|
|
21
|
+
export interface EngineRegistrationOptions {
|
|
22
|
+
/** Agent ID — used as tool name prefix (e.g., "gaudi" → "gaudi_vault") */
|
|
23
|
+
agentId: string;
|
|
24
|
+
/** Auth policy factory (optional — defaults to permissive) */
|
|
25
|
+
authPolicy?: () => AuthPolicy;
|
|
26
|
+
/** Additional ops to add to the core facade (agent-specific ops like health, activate) */
|
|
27
|
+
coreOps?: OpDefinition[];
|
|
28
|
+
/** Knowledge domains for domain-specific facades */
|
|
29
|
+
domains?: string[];
|
|
30
|
+
/** Domain packs (from @soleri/domain-*) */
|
|
31
|
+
domainPacks?: Array<{
|
|
32
|
+
name: string;
|
|
33
|
+
facades?: Array<{
|
|
34
|
+
name: string;
|
|
35
|
+
ops: OpDefinition[];
|
|
36
|
+
}>;
|
|
37
|
+
}>;
|
|
38
|
+
/** Op names to ALSO register as standalone MCP tools (hot ops) */
|
|
39
|
+
hotOps?: string[];
|
|
40
|
+
}
|
|
41
|
+
export interface EngineRegistrationResult {
|
|
42
|
+
/** All registered MCP tool names */
|
|
43
|
+
tools: string[];
|
|
44
|
+
/** Total op count across all tools */
|
|
45
|
+
totalOps: number;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Register all engine modules as MCP tools on the given server.
|
|
49
|
+
*
|
|
50
|
+
* Each module becomes one MCP tool: `{agentId}_{module}` with `op` + `params` arguments.
|
|
51
|
+
* Dispatch is a direct switch on op name — no generic factory, no FacadeConfig type.
|
|
52
|
+
*/
|
|
53
|
+
export declare function registerEngine(server: McpServer, runtime: AgentRuntime, options: EngineRegistrationOptions): EngineRegistrationResult;
|
|
54
|
+
//# sourceMappingURL=register-engine.d.ts.map
|
|
@@ -0,0 +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;CAClB;AAuFD;;;;;GAKG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,YAAY,EACrB,OAAO,EAAE,yBAAyB,GACjC,wBAAwB,CA6E1B"}
|
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Soleri v7 — Direct Engine Registration
|
|
3
|
+
*
|
|
4
|
+
* Registers all engine modules as MCP tools without the facade factory.
|
|
5
|
+
* Each module gets a single MCP tool with op-based dispatch.
|
|
6
|
+
*
|
|
7
|
+
* This replaces:
|
|
8
|
+
* - facade-factory.ts (generic dispatch layer)
|
|
9
|
+
* - registerAllFacades() + registerFacade() + dispatchOp()
|
|
10
|
+
* - FacadeConfig type (no longer needed)
|
|
11
|
+
*
|
|
12
|
+
* What stays:
|
|
13
|
+
* - createVaultFacadeOps(), createBrainFacadeOps(), etc. (op definitions)
|
|
14
|
+
* - createAgentRuntime() (module initialization)
|
|
15
|
+
* - OpDefinition type (handler + schema + auth)
|
|
16
|
+
* - Auth checking (same logic, inlined)
|
|
17
|
+
*/
|
|
18
|
+
import { z } from 'zod';
|
|
19
|
+
import { AUTH_LEVEL_RANK } from '../facades/types.js';
|
|
20
|
+
// Re-export op creators (these are the source of truth for op definitions)
|
|
21
|
+
import { createVaultFacadeOps } from '../runtime/facades/vault-facade.js';
|
|
22
|
+
import { createPlanFacadeOps } from '../runtime/facades/plan-facade.js';
|
|
23
|
+
import { createBrainFacadeOps } from '../runtime/facades/brain-facade.js';
|
|
24
|
+
import { createMemoryFacadeOps } from '../runtime/facades/memory-facade.js';
|
|
25
|
+
import { createAdminFacadeOps } from '../runtime/facades/admin-facade.js';
|
|
26
|
+
import { createCuratorFacadeOps } from '../runtime/facades/curator-facade.js';
|
|
27
|
+
import { createLoopFacadeOps } from '../runtime/facades/loop-facade.js';
|
|
28
|
+
import { createOrchestrateFacadeOps } from '../runtime/facades/orchestrate-facade.js';
|
|
29
|
+
import { createControlFacadeOps } from '../runtime/facades/control-facade.js';
|
|
30
|
+
import { createCogneeFacadeOps } from '../runtime/facades/cognee-facade.js';
|
|
31
|
+
import { createContextFacadeOps } from '../runtime/facades/context-facade.js';
|
|
32
|
+
import { createAgencyFacadeOps } from '../runtime/facades/agency-facade.js';
|
|
33
|
+
import { createChatFacadeOps } from '../runtime/facades/chat-facade.js';
|
|
34
|
+
import { createDomainFacade } from '../runtime/domain-ops.js';
|
|
35
|
+
const ENGINE_MODULES = [
|
|
36
|
+
{
|
|
37
|
+
suffix: 'vault',
|
|
38
|
+
description: 'Knowledge management — search, CRUD, import/export, intake, archival.',
|
|
39
|
+
createOps: createVaultFacadeOps,
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
suffix: 'plan',
|
|
43
|
+
description: 'Plan lifecycle — create, approve, execute, reconcile, complete, grading.',
|
|
44
|
+
createOps: createPlanFacadeOps,
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
suffix: 'brain',
|
|
48
|
+
description: 'Learning system — intelligence pipeline, strengths, feedback, sessions.',
|
|
49
|
+
createOps: createBrainFacadeOps,
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
suffix: 'memory',
|
|
53
|
+
description: 'Session & cross-project memory — capture, search, dedup, promote.',
|
|
54
|
+
createOps: createMemoryFacadeOps,
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
suffix: 'admin',
|
|
58
|
+
description: 'Infrastructure — health, config, telemetry, tokens, LLM, prompts.',
|
|
59
|
+
createOps: createAdminFacadeOps,
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
suffix: 'curator',
|
|
63
|
+
description: 'Quality — duplicate detection, contradictions, grooming, health audit.',
|
|
64
|
+
createOps: createCuratorFacadeOps,
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
suffix: 'loop',
|
|
68
|
+
description: 'Iterative validation loops — start, iterate, cancel, complete, history.',
|
|
69
|
+
createOps: createLoopFacadeOps,
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
suffix: 'orchestrate',
|
|
73
|
+
description: 'Execution orchestration — project registration, playbooks, plan/execute/complete.',
|
|
74
|
+
createOps: createOrchestrateFacadeOps,
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
suffix: 'control',
|
|
78
|
+
description: 'Agent behavior — identity, intent routing, morphing, guidelines, governance.',
|
|
79
|
+
createOps: createControlFacadeOps,
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
suffix: 'context',
|
|
83
|
+
description: 'Context analysis — entity extraction, knowledge retrieval, confidence scoring.',
|
|
84
|
+
createOps: createContextFacadeOps,
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
suffix: 'agency',
|
|
88
|
+
description: 'Proactive intelligence — file watching, pattern surfacing, warnings.',
|
|
89
|
+
createOps: createAgencyFacadeOps,
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
suffix: 'chat',
|
|
93
|
+
description: 'Chat transport — session management, response chunking, authentication.',
|
|
94
|
+
createOps: createChatFacadeOps,
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
suffix: 'cognee',
|
|
98
|
+
description: 'Knowledge graph — Cognee search, sync, export, graph stats.',
|
|
99
|
+
createOps: createCogneeFacadeOps,
|
|
100
|
+
condition: (rt) => rt.cognee !== null && rt.cognee !== undefined,
|
|
101
|
+
},
|
|
102
|
+
];
|
|
103
|
+
// ─── Core Registration ────────────────────────────────────────────────
|
|
104
|
+
/**
|
|
105
|
+
* Register all engine modules as MCP tools on the given server.
|
|
106
|
+
*
|
|
107
|
+
* Each module becomes one MCP tool: `{agentId}_{module}` with `op` + `params` arguments.
|
|
108
|
+
* Dispatch is a direct switch on op name — no generic factory, no FacadeConfig type.
|
|
109
|
+
*/
|
|
110
|
+
export function registerEngine(server, runtime, options) {
|
|
111
|
+
const { agentId, authPolicy, coreOps, domains, domainPacks, hotOps } = options;
|
|
112
|
+
const hotSet = new Set(hotOps ?? []);
|
|
113
|
+
const registeredTools = [];
|
|
114
|
+
let totalOps = 0;
|
|
115
|
+
// 1. Register semantic module tools
|
|
116
|
+
for (const mod of ENGINE_MODULES) {
|
|
117
|
+
if (mod.condition && !mod.condition(runtime))
|
|
118
|
+
continue;
|
|
119
|
+
const ops = mod.createOps(runtime);
|
|
120
|
+
const toolName = `${agentId}_${mod.suffix}`;
|
|
121
|
+
registerModuleTool(server, toolName, mod.description, ops, authPolicy);
|
|
122
|
+
registeredTools.push(toolName);
|
|
123
|
+
totalOps += ops.length;
|
|
124
|
+
// Hot ops: also register as standalone tools
|
|
125
|
+
for (const op of ops) {
|
|
126
|
+
if (op.hot || hotSet.has(op.name)) {
|
|
127
|
+
registerStandaloneTool(server, agentId, toolName, op, authPolicy);
|
|
128
|
+
registeredTools.push(`${agentId}_${op.name}`);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
// 2. Register core facade (agent-specific ops: health, identity, activate, etc.)
|
|
133
|
+
if (coreOps && coreOps.length > 0) {
|
|
134
|
+
const coreName = `${agentId}_core`;
|
|
135
|
+
registerModuleTool(server, coreName, 'Agent-specific operations — health, identity, activation.', coreOps, authPolicy);
|
|
136
|
+
registeredTools.push(coreName);
|
|
137
|
+
totalOps += coreOps.length;
|
|
138
|
+
}
|
|
139
|
+
// 3. Register domain facades
|
|
140
|
+
if (domains) {
|
|
141
|
+
for (const domain of domains) {
|
|
142
|
+
const domainConfig = createDomainFacade(runtime, agentId, domain);
|
|
143
|
+
registerModuleTool(server, domainConfig.name, domainConfig.description, domainConfig.ops, authPolicy);
|
|
144
|
+
registeredTools.push(domainConfig.name);
|
|
145
|
+
totalOps += domainConfig.ops.length;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
// 4. Register domain pack facades
|
|
149
|
+
if (domainPacks) {
|
|
150
|
+
for (const pack of domainPacks) {
|
|
151
|
+
if (pack.facades) {
|
|
152
|
+
for (const facade of pack.facades) {
|
|
153
|
+
const packToolName = `${agentId}_${facade.name}`;
|
|
154
|
+
registerModuleTool(server, packToolName, `Domain pack: ${pack.name}`, facade.ops, authPolicy);
|
|
155
|
+
registeredTools.push(packToolName);
|
|
156
|
+
totalOps += facade.ops.length;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
return { tools: registeredTools, totalOps };
|
|
162
|
+
}
|
|
163
|
+
// ─── Tool Registration (No Factory) ──────────────────────────────────
|
|
164
|
+
/**
|
|
165
|
+
* Register a single grouped tool with op dispatch.
|
|
166
|
+
* This is the replacement for registerFacade() — same behavior, no FacadeConfig type.
|
|
167
|
+
*/
|
|
168
|
+
function registerModuleTool(server, toolName, description, ops, authPolicy) {
|
|
169
|
+
const opNames = ops.map((o) => o.name);
|
|
170
|
+
const opMap = new Map(ops.map((o) => [o.name, o]));
|
|
171
|
+
server.tool(toolName, description, {
|
|
172
|
+
op: z.string().describe(`Operation: ${opNames.join(' | ')}`),
|
|
173
|
+
params: z.record(z.unknown()).optional().default({}).describe('Operation parameters'),
|
|
174
|
+
}, async ({ op: opName, params }) => {
|
|
175
|
+
const op = opMap.get(opName);
|
|
176
|
+
if (!op) {
|
|
177
|
+
return jsonResponse({
|
|
178
|
+
success: false,
|
|
179
|
+
error: `Unknown operation "${opName}" on ${toolName}. Available: ${opNames.join(', ')}`,
|
|
180
|
+
op: opName,
|
|
181
|
+
facade: toolName,
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
// Auth check
|
|
185
|
+
const policy = authPolicy?.();
|
|
186
|
+
const authErr = checkAuth(opName, op.auth, toolName, policy);
|
|
187
|
+
if (authErr)
|
|
188
|
+
return jsonResponse(authErr);
|
|
189
|
+
// Validate + execute
|
|
190
|
+
try {
|
|
191
|
+
let validatedParams = params;
|
|
192
|
+
if (op.schema) {
|
|
193
|
+
const result = op.schema.safeParse(params);
|
|
194
|
+
if (!result.success) {
|
|
195
|
+
return jsonResponse({
|
|
196
|
+
success: false,
|
|
197
|
+
error: `Invalid params for ${opName}: ${result.error.message}`,
|
|
198
|
+
op: opName,
|
|
199
|
+
facade: toolName,
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
validatedParams = result.data;
|
|
203
|
+
}
|
|
204
|
+
const data = await op.handler(validatedParams);
|
|
205
|
+
return jsonResponse({ success: true, data, op: opName, facade: toolName });
|
|
206
|
+
}
|
|
207
|
+
catch (err) {
|
|
208
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
209
|
+
return jsonResponse({ success: false, error: message, op: opName, facade: toolName });
|
|
210
|
+
}
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Register a single op as a standalone MCP tool (hot op).
|
|
215
|
+
*/
|
|
216
|
+
function registerStandaloneTool(server, agentId, parentTool, op, authPolicy) {
|
|
217
|
+
const toolName = `${agentId}_${op.name}`;
|
|
218
|
+
const schema = op.schema
|
|
219
|
+
? op.schema.shape
|
|
220
|
+
? op.schema
|
|
221
|
+
: z.object({ params: op.schema })
|
|
222
|
+
: z.object({});
|
|
223
|
+
server.tool(toolName, op.description, schema instanceof z.ZodObject ? schema.shape : {}, async (params) => {
|
|
224
|
+
const policy = authPolicy?.();
|
|
225
|
+
const authErr = checkAuth(op.name, op.auth, parentTool, policy);
|
|
226
|
+
if (authErr)
|
|
227
|
+
return jsonResponse(authErr);
|
|
228
|
+
try {
|
|
229
|
+
let validatedParams = params;
|
|
230
|
+
if (op.schema) {
|
|
231
|
+
const result = op.schema.safeParse(params);
|
|
232
|
+
if (!result.success) {
|
|
233
|
+
return jsonResponse({
|
|
234
|
+
success: false,
|
|
235
|
+
error: `Invalid params: ${result.error.message}`,
|
|
236
|
+
op: op.name,
|
|
237
|
+
facade: parentTool,
|
|
238
|
+
});
|
|
239
|
+
}
|
|
240
|
+
validatedParams = result.data;
|
|
241
|
+
}
|
|
242
|
+
const data = await op.handler(validatedParams);
|
|
243
|
+
return jsonResponse({ success: true, data, op: op.name, facade: parentTool });
|
|
244
|
+
}
|
|
245
|
+
catch (err) {
|
|
246
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
247
|
+
return jsonResponse({ success: false, error: message, op: op.name, facade: parentTool });
|
|
248
|
+
}
|
|
249
|
+
});
|
|
250
|
+
}
|
|
251
|
+
// ─── Helpers ──────────────────────────────────────────────────────────
|
|
252
|
+
function checkAuth(opName, opAuth, toolName, policy) {
|
|
253
|
+
if (!policy || policy.mode === 'permissive')
|
|
254
|
+
return null;
|
|
255
|
+
const requiredLevel = policy.overrides?.[opName] ?? opAuth;
|
|
256
|
+
const callerRank = AUTH_LEVEL_RANK[policy.callerLevel] ?? 0;
|
|
257
|
+
const requiredRank = AUTH_LEVEL_RANK[requiredLevel] ?? 0;
|
|
258
|
+
if (callerRank >= requiredRank)
|
|
259
|
+
return null;
|
|
260
|
+
const message = `Auth denied: "${opName}" requires ${requiredLevel}, caller has ${policy.callerLevel}`;
|
|
261
|
+
if (policy.mode === 'warn') {
|
|
262
|
+
console.error(`[auth-warn] ${message}`);
|
|
263
|
+
return null;
|
|
264
|
+
}
|
|
265
|
+
return { success: false, error: message, op: opName, facade: toolName };
|
|
266
|
+
}
|
|
267
|
+
function jsonResponse(data) {
|
|
268
|
+
return { content: [{ type: 'text', text: JSON.stringify(data, null, 2) }] };
|
|
269
|
+
}
|
|
270
|
+
//# sourceMappingURL=register-engine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
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
|
+
* Test helpers for the engine registration.
|
|
3
|
+
*
|
|
4
|
+
* Provides captureOps() — equivalent to the old captureHandler() pattern
|
|
5
|
+
* used across 18+ E2E tests — but for the new direct registration.
|
|
6
|
+
*/
|
|
7
|
+
import type { OpDefinition } from '../facades/types.js';
|
|
8
|
+
export interface CapturedOp {
|
|
9
|
+
name: string;
|
|
10
|
+
handler: (params: Record<string, unknown>) => Promise<unknown>;
|
|
11
|
+
schema?: unknown;
|
|
12
|
+
auth: string;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Capture all op handlers from an op creator function for direct testing.
|
|
16
|
+
* Replaces the old pattern of mocking McpServer + registerFacade + captureHandler.
|
|
17
|
+
*/
|
|
18
|
+
export declare function captureOps(ops: OpDefinition[]): Map<string, CapturedOp>;
|
|
19
|
+
/**
|
|
20
|
+
* Execute an op by name against captured ops, with response envelope.
|
|
21
|
+
* Matches the old dispatchOp() behavior for test compatibility.
|
|
22
|
+
*/
|
|
23
|
+
export declare function executeOp(ops: Map<string, CapturedOp>, opName: string, params?: Record<string, unknown>, facadeName?: string): Promise<{
|
|
24
|
+
success: boolean;
|
|
25
|
+
data?: unknown;
|
|
26
|
+
error?: string;
|
|
27
|
+
op: string;
|
|
28
|
+
facade: string;
|
|
29
|
+
}>;
|
|
30
|
+
//# sourceMappingURL=test-helpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-helpers.d.ts","sourceRoot":"","sources":["../../src/engine/test-helpers.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAExD,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC/D,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,YAAY,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAWvE;AAED;;;GAGG;AACH,wBAAsB,SAAS,CAC7B,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,EAC5B,MAAM,EAAE,MAAM,EACd,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,EACpC,UAAU,SAAS,GAClB,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAwC3F"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Test helpers for the engine registration.
|
|
3
|
+
*
|
|
4
|
+
* Provides captureOps() — equivalent to the old captureHandler() pattern
|
|
5
|
+
* used across 18+ E2E tests — but for the new direct registration.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Capture all op handlers from an op creator function for direct testing.
|
|
9
|
+
* Replaces the old pattern of mocking McpServer + registerFacade + captureHandler.
|
|
10
|
+
*/
|
|
11
|
+
export function captureOps(ops) {
|
|
12
|
+
const map = new Map();
|
|
13
|
+
for (const op of ops) {
|
|
14
|
+
map.set(op.name, {
|
|
15
|
+
name: op.name,
|
|
16
|
+
handler: op.handler,
|
|
17
|
+
schema: op.schema,
|
|
18
|
+
auth: op.auth,
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
return map;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Execute an op by name against captured ops, with response envelope.
|
|
25
|
+
* Matches the old dispatchOp() behavior for test compatibility.
|
|
26
|
+
*/
|
|
27
|
+
export async function executeOp(ops, opName, params = {}, facadeName = 'test') {
|
|
28
|
+
const op = ops.get(opName);
|
|
29
|
+
if (!op) {
|
|
30
|
+
return {
|
|
31
|
+
success: false,
|
|
32
|
+
error: `Unknown operation "${opName}". Available: ${[...ops.keys()].join(', ')}`,
|
|
33
|
+
op: opName,
|
|
34
|
+
facade: facadeName,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
try {
|
|
38
|
+
let validatedParams = params;
|
|
39
|
+
if (op.schema && typeof op.schema.safeParse === 'function') {
|
|
40
|
+
const result = op.schema.safeParse(params);
|
|
41
|
+
if (!result.success) {
|
|
42
|
+
return {
|
|
43
|
+
success: false,
|
|
44
|
+
error: `Invalid params for ${opName}: ${result.error?.message}`,
|
|
45
|
+
op: opName,
|
|
46
|
+
facade: facadeName,
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
validatedParams = result.data;
|
|
50
|
+
}
|
|
51
|
+
const data = await op.handler(validatedParams);
|
|
52
|
+
return { success: true, data, op: opName, facade: facadeName };
|
|
53
|
+
}
|
|
54
|
+
catch (err) {
|
|
55
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
56
|
+
return { success: false, error: message, op: opName, facade: facadeName };
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=test-helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-helpers.js","sourceRoot":"","sources":["../../src/engine/test-helpers.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAWH;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,GAAmB;IAC5C,MAAM,GAAG,GAAG,IAAI,GAAG,EAAsB,CAAC;IAC1C,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;QACrB,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE;YACf,IAAI,EAAE,EAAE,CAAC,IAAI;YACb,OAAO,EAAE,EAAE,CAAC,OAAO;YACnB,MAAM,EAAE,EAAE,CAAC,MAAM;YACjB,IAAI,EAAE,EAAE,CAAC,IAAI;SACd,CAAC,CAAC;IACL,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,GAA4B,EAC5B,MAAc,EACd,SAAkC,EAAE,EACpC,UAAU,GAAG,MAAM;IAEnB,MAAM,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC3B,IAAI,CAAC,EAAE,EAAE,CAAC;QACR,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,sBAAsB,MAAM,iBAAiB,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YAChF,EAAE,EAAE,MAAM;YACV,MAAM,EAAE,UAAU;SACnB,CAAC;IACJ,CAAC;IAED,IAAI,CAAC;QACH,IAAI,eAAe,GAAG,MAAM,CAAC;QAC7B,IAAI,EAAE,CAAC,MAAM,IAAI,OAAQ,EAAE,CAAC,MAAkC,CAAC,SAAS,KAAK,UAAU,EAAE,CAAC;YACxF,MAAM,MAAM,GACV,EAAE,CAAC,MAOJ,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YACpB,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBACpB,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,sBAAsB,MAAM,KAAK,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE;oBAC/D,EAAE,EAAE,MAAM;oBACV,MAAM,EAAE,UAAU;iBACnB,CAAC;YACJ,CAAC;YACD,eAAe,GAAG,MAAM,CAAC,IAA+B,CAAC;QAC3D,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;QAC/C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;IACjE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;IAC5E,CAAC;AACH,CAAC"}
|