@soleri/core 9.2.0 → 9.3.1
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 +8 -9
- package/data/flows/deliver.flow.yaml +9 -10
- package/data/flows/design.flow.yaml +3 -4
- package/data/flows/enhance.flow.yaml +5 -6
- package/data/flows/explore.flow.yaml +3 -4
- package/data/flows/fix.flow.yaml +5 -6
- package/data/flows/plan.flow.yaml +4 -5
- package/data/flows/review.flow.yaml +3 -4
- package/dist/curator/curator.d.ts.map +1 -1
- package/dist/curator/curator.js +98 -22
- package/dist/curator/curator.js.map +1 -1
- package/dist/engine/bin/soleri-engine.js.map +1 -1
- package/dist/engine/module-manifest.d.ts +2 -0
- package/dist/engine/module-manifest.d.ts.map +1 -1
- package/dist/engine/module-manifest.js +136 -1
- package/dist/engine/module-manifest.js.map +1 -1
- package/dist/engine/register-engine.d.ts.map +1 -1
- package/dist/engine/register-engine.js +25 -1
- package/dist/engine/register-engine.js.map +1 -1
- package/dist/flows/gate-evaluator.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/operator/operator-profile.d.ts.map +1 -1
- package/dist/operator/operator-profile.js +11 -5
- package/dist/operator/operator-profile.js.map +1 -1
- package/dist/operator/operator-signals.d.ts.map +1 -1
- package/dist/operator/operator-signals.js.map +1 -1
- package/dist/planning/evidence-collector.js.map +1 -1
- package/dist/planning/gap-passes.d.ts.map +1 -1
- package/dist/planning/gap-passes.js +23 -6
- package/dist/planning/gap-passes.js.map +1 -1
- package/dist/planning/gap-patterns.d.ts.map +1 -1
- package/dist/planning/gap-patterns.js +57 -11
- package/dist/planning/gap-patterns.js.map +1 -1
- package/dist/planning/github-projection.d.ts.map +1 -1
- package/dist/planning/github-projection.js +39 -20
- package/dist/planning/github-projection.js.map +1 -1
- package/dist/planning/impact-analyzer.d.ts.map +1 -1
- package/dist/planning/impact-analyzer.js +20 -18
- package/dist/planning/impact-analyzer.js.map +1 -1
- package/dist/planning/plan-lifecycle.d.ts.map +1 -1
- package/dist/planning/plan-lifecycle.js +22 -9
- package/dist/planning/plan-lifecycle.js.map +1 -1
- package/dist/planning/planner.d.ts.map +1 -1
- package/dist/planning/planner.js +60 -17
- package/dist/planning/planner.js.map +1 -1
- package/dist/planning/rationalization-detector.d.ts.map +1 -1
- package/dist/planning/rationalization-detector.js.map +1 -1
- package/dist/planning/reconciliation-engine.d.ts.map +1 -1
- package/dist/planning/reconciliation-engine.js.map +1 -1
- package/dist/planning/task-complexity-assessor.d.ts +42 -0
- package/dist/planning/task-complexity-assessor.d.ts.map +1 -0
- package/dist/planning/task-complexity-assessor.js +132 -0
- package/dist/planning/task-complexity-assessor.js.map +1 -0
- package/dist/planning/task-verifier.d.ts.map +1 -1
- package/dist/planning/task-verifier.js +14 -6
- package/dist/planning/task-verifier.js.map +1 -1
- package/dist/runtime/admin-ops.d.ts.map +1 -1
- package/dist/runtime/admin-ops.js +18 -0
- package/dist/runtime/admin-ops.js.map +1 -1
- package/dist/runtime/admin-setup-ops.d.ts.map +1 -1
- package/dist/runtime/admin-setup-ops.js +2 -1
- package/dist/runtime/admin-setup-ops.js.map +1 -1
- package/dist/runtime/branching-ops.d.ts +12 -0
- package/dist/runtime/branching-ops.d.ts.map +1 -0
- package/dist/runtime/branching-ops.js +100 -0
- package/dist/runtime/branching-ops.js.map +1 -0
- package/dist/runtime/context-health.d.ts.map +1 -1
- package/dist/runtime/context-health.js.map +1 -1
- package/dist/runtime/facades/branching-facade.d.ts +7 -0
- package/dist/runtime/facades/branching-facade.d.ts.map +1 -0
- package/dist/runtime/facades/branching-facade.js +8 -0
- package/dist/runtime/facades/branching-facade.js.map +1 -0
- package/dist/runtime/facades/chat-service-ops.d.ts.map +1 -1
- package/dist/runtime/facades/chat-service-ops.js +3 -1
- package/dist/runtime/facades/chat-service-ops.js.map +1 -1
- package/dist/runtime/facades/chat-transport-ops.d.ts.map +1 -1
- package/dist/runtime/facades/chat-transport-ops.js.map +1 -1
- package/dist/runtime/facades/index.d.ts.map +1 -1
- package/dist/runtime/facades/index.js +42 -0
- package/dist/runtime/facades/index.js.map +1 -1
- package/dist/runtime/facades/intake-facade.d.ts +9 -0
- package/dist/runtime/facades/intake-facade.d.ts.map +1 -0
- package/dist/runtime/facades/intake-facade.js +11 -0
- package/dist/runtime/facades/intake-facade.js.map +1 -0
- package/dist/runtime/facades/links-facade.d.ts +9 -0
- package/dist/runtime/facades/links-facade.d.ts.map +1 -0
- package/dist/runtime/facades/links-facade.js +10 -0
- package/dist/runtime/facades/links-facade.js.map +1 -0
- package/dist/runtime/facades/operator-facade.d.ts.map +1 -1
- package/dist/runtime/facades/operator-facade.js.map +1 -1
- package/dist/runtime/facades/plan-facade.d.ts.map +1 -1
- package/dist/runtime/facades/plan-facade.js +4 -1
- package/dist/runtime/facades/plan-facade.js.map +1 -1
- package/dist/runtime/facades/tier-facade.d.ts +7 -0
- package/dist/runtime/facades/tier-facade.d.ts.map +1 -0
- package/dist/runtime/facades/tier-facade.js +8 -0
- package/dist/runtime/facades/tier-facade.js.map +1 -0
- package/dist/runtime/facades/vault-facade.d.ts +9 -1
- package/dist/runtime/facades/vault-facade.d.ts.map +1 -1
- package/dist/runtime/facades/vault-facade.js +44 -187
- package/dist/runtime/facades/vault-facade.js.map +1 -1
- package/dist/runtime/github-integration.d.ts.map +1 -1
- package/dist/runtime/github-integration.js +11 -4
- package/dist/runtime/github-integration.js.map +1 -1
- package/dist/runtime/orchestrate-ops.d.ts.map +1 -1
- package/dist/runtime/orchestrate-ops.js +75 -42
- package/dist/runtime/orchestrate-ops.js.map +1 -1
- package/dist/runtime/planning-extra-ops.d.ts.map +1 -1
- package/dist/runtime/planning-extra-ops.js.map +1 -1
- package/dist/runtime/runtime.d.ts.map +1 -1
- package/dist/runtime/runtime.js +3 -1
- package/dist/runtime/runtime.js.map +1 -1
- package/dist/runtime/session-briefing.d.ts.map +1 -1
- package/dist/runtime/session-briefing.js +5 -1
- package/dist/runtime/session-briefing.js.map +1 -1
- package/dist/runtime/tier-ops.d.ts +13 -0
- package/dist/runtime/tier-ops.d.ts.map +1 -0
- package/dist/runtime/tier-ops.js +110 -0
- package/dist/runtime/tier-ops.js.map +1 -0
- package/dist/skills/sync-skills.d.ts.map +1 -1
- package/dist/skills/sync-skills.js +1 -1
- package/dist/skills/sync-skills.js.map +1 -1
- package/dist/vault/linking.d.ts.map +1 -1
- package/dist/vault/linking.js +41 -5
- package/dist/vault/linking.js.map +1 -1
- package/dist/vault/vault-entries.d.ts.map +1 -1
- package/dist/vault/vault-entries.js +68 -26
- package/dist/vault/vault-entries.js.map +1 -1
- package/dist/vault/vault-maintenance.d.ts.map +1 -1
- package/dist/vault/vault-maintenance.js +6 -2
- package/dist/vault/vault-maintenance.js.map +1 -1
- package/dist/vault/vault-markdown-sync.d.ts.map +1 -1
- package/dist/vault/vault-markdown-sync.js.map +1 -1
- package/dist/vault/vault-memories.d.ts.map +1 -1
- package/dist/vault/vault-memories.js +3 -1
- package/dist/vault/vault-memories.js.map +1 -1
- package/dist/vault/vault-schema.js +36 -10
- package/dist/vault/vault-schema.js.map +1 -1
- package/dist/vault/vault.d.ts.map +1 -1
- package/dist/vault/vault.js +5 -1
- package/dist/vault/vault.js.map +1 -1
- package/package.json +7 -7
- package/src/agency/agency-manager.test.ts +60 -40
- package/src/agency/default-rules.test.ts +17 -9
- package/src/capabilities/registry.test.ts +2 -12
- package/src/chat/agent-loop.test.ts +33 -43
- package/src/chat/mcp-bridge.test.ts +7 -2
- package/src/claudemd/inject.test.ts +2 -12
- package/src/context/context-engine.test.ts +96 -51
- package/src/control/intent-router.test.ts +3 -3
- package/src/curator/classifier.test.ts +14 -8
- package/src/curator/contradiction-detector.test.ts +30 -5
- package/src/curator/curator.ts +278 -56
- package/src/curator/duplicate-detector.test.ts +77 -15
- package/src/curator/quality-gate.test.ts +71 -31
- package/src/curator/tag-manager.test.ts +12 -4
- package/src/domain-packs/knowledge-installer.test.ts +2 -10
- package/src/domain-packs/token-resolver.test.ts +1 -3
- package/src/domain-packs/types.test.ts +16 -2
- package/src/enforcement/registry.test.ts +2 -8
- package/src/engine/bin/soleri-engine.ts +3 -1
- package/src/engine/module-manifest.test.ts +48 -4
- package/src/engine/module-manifest.ts +138 -1
- package/src/engine/register-engine.test.ts +6 -1
- package/src/engine/register-engine.ts +26 -3
- package/src/errors/classify.test.ts +6 -2
- package/src/errors/retry.test.ts +1 -4
- package/src/facades/facade-factory.test.ts +110 -64
- package/src/flows/epilogue.test.ts +16 -10
- package/src/flows/gate-evaluator.test.ts +12 -6
- package/src/flows/gate-evaluator.ts +1 -3
- package/src/governance/governance.test.ts +137 -21
- package/src/health/health-registry.test.ts +8 -1
- package/src/index.ts +8 -0
- package/src/intake/content-classifier.test.ts +121 -51
- package/src/intake/dedup-gate.test.ts +38 -22
- package/src/intake/intake-pipeline.test.ts +5 -3
- package/src/intake/text-ingester.test.ts +26 -20
- package/src/llm/key-pool.test.ts +1 -3
- package/src/llm/llm-client.test.ts +1 -4
- package/src/llm/oauth-discovery.test.ts +16 -16
- package/src/llm/utils.test.ts +62 -18
- package/src/logging/logger.test.ts +4 -1
- package/src/loop/loop-manager.test.ts +2 -6
- package/src/migrations/migration-runner.edge-cases.test.ts +2 -7
- package/src/operator/operator-profile-extended.test.ts +15 -5
- package/src/operator/operator-profile.test.ts +26 -8
- package/src/operator/operator-profile.ts +38 -22
- package/src/operator/operator-signals-extended.test.ts +35 -23
- package/src/operator/operator-signals.test.ts +6 -10
- package/src/operator/operator-signals.ts +2 -1
- package/src/operator/prompts/hook-precompact-operator-dispatch.md +10 -6
- package/src/operator/prompts/subagent-soft-signal-extractor.md +5 -0
- package/src/operator/prompts/subagent-synthesis-cognition.md +19 -10
- package/src/operator/prompts/subagent-synthesis-communication.md +13 -7
- package/src/operator/prompts/subagent-synthesis-technical.md +19 -9
- package/src/operator/prompts/subagent-synthesis-trust.md +27 -21
- package/src/persona/defaults.test.ts +1 -5
- package/src/planning/evidence-collector.test.ts +147 -38
- package/src/planning/evidence-collector.ts +1 -4
- package/src/planning/gap-analysis-alternatives.test.ts +41 -11
- package/src/planning/gap-passes.test.ts +215 -33
- package/src/planning/gap-passes.ts +115 -46
- package/src/planning/gap-patterns.test.ts +87 -13
- package/src/planning/gap-patterns.ts +114 -31
- package/src/planning/github-projection.test.ts +6 -1
- package/src/planning/github-projection.ts +41 -20
- package/src/planning/impact-analyzer.test.ts +10 -23
- package/src/planning/impact-analyzer.ts +33 -46
- package/src/planning/plan-lifecycle.test.ts +103 -36
- package/src/planning/plan-lifecycle.ts +49 -18
- package/src/planning/planner.test.ts +12 -2
- package/src/planning/planner.ts +198 -58
- package/src/planning/rationalization-detector.test.ts +5 -20
- package/src/planning/rationalization-detector.ts +14 -16
- package/src/planning/reconciliation-engine.test.ts +20 -3
- package/src/planning/reconciliation-engine.ts +1 -2
- package/src/planning/task-complexity-assessor.test.ts +298 -0
- package/src/planning/task-complexity-assessor.ts +183 -0
- package/src/planning/task-verifier.test.ts +59 -27
- package/src/planning/task-verifier.ts +15 -9
- package/src/playbooks/playbook-executor.test.ts +1 -3
- package/src/plugins/plugin-loader.test.ts +19 -14
- package/src/plugins/plugin-registry.test.ts +45 -33
- package/src/project/project-registry.test.ts +23 -12
- package/src/prompts/template-manager.test.ts +4 -1
- package/src/queue/job-queue.test.ts +10 -14
- package/src/runtime/admin-extra-ops.test.ts +5 -19
- package/src/runtime/admin-ops.test.ts +22 -1
- package/src/runtime/admin-ops.ts +19 -0
- package/src/runtime/admin-setup-ops.test.ts +3 -4
- package/src/runtime/admin-setup-ops.ts +9 -2
- package/src/runtime/archive-ops.test.ts +4 -1
- package/src/runtime/branching-ops.test.ts +144 -0
- package/src/runtime/branching-ops.ts +107 -0
- package/src/runtime/capture-ops.test.ts +7 -21
- package/src/runtime/chain-ops.test.ts +16 -6
- package/src/runtime/claude-md-helpers.test.ts +1 -3
- package/src/runtime/context-health.test.ts +1 -3
- package/src/runtime/context-health.ts +1 -3
- package/src/runtime/curator-extra-ops.test.ts +3 -1
- package/src/runtime/domain-ops.test.ts +46 -36
- package/src/runtime/facades/admin-facade.test.ts +1 -4
- package/src/runtime/facades/archive-facade.test.ts +21 -7
- package/src/runtime/facades/brain-facade.test.ts +176 -72
- package/src/runtime/facades/branching-facade.test.ts +43 -0
- package/src/runtime/facades/branching-facade.ts +11 -0
- package/src/runtime/facades/chat-facade.test.ts +81 -28
- package/src/runtime/facades/chat-service-ops.test.ts +178 -73
- package/src/runtime/facades/chat-service-ops.ts +3 -1
- package/src/runtime/facades/chat-session-ops.test.ts +25 -10
- package/src/runtime/facades/chat-transport-ops.test.ts +101 -34
- package/src/runtime/facades/chat-transport-ops.ts +0 -1
- package/src/runtime/facades/context-facade.test.ts +19 -4
- package/src/runtime/facades/control-facade.test.ts +3 -3
- package/src/runtime/facades/index.ts +42 -0
- package/src/runtime/facades/intake-facade.test.ts +215 -0
- package/src/runtime/facades/intake-facade.ts +14 -0
- package/src/runtime/facades/links-facade.test.ts +203 -0
- package/src/runtime/facades/links-facade.ts +13 -0
- package/src/runtime/facades/loop-facade.test.ts +22 -5
- package/src/runtime/facades/memory-facade.test.ts +19 -5
- package/src/runtime/facades/operator-facade.test.ts +17 -4
- package/src/runtime/facades/operator-facade.ts +11 -3
- package/src/runtime/facades/orchestrate-facade.test.ts +7 -1
- package/src/runtime/facades/plan-facade.test.ts +29 -12
- package/src/runtime/facades/plan-facade.ts +7 -2
- package/src/runtime/facades/tier-facade.test.ts +47 -0
- package/src/runtime/facades/tier-facade.ts +11 -0
- package/src/runtime/facades/vault-facade.test.ts +174 -242
- package/src/runtime/facades/vault-facade.ts +55 -199
- package/src/runtime/github-integration.ts +11 -8
- package/src/runtime/grading-ops.test.ts +39 -8
- package/src/runtime/intake-ops.test.ts +69 -16
- package/src/runtime/loop-ops.test.ts +16 -6
- package/src/runtime/memory-cross-project-ops.test.ts +25 -14
- package/src/runtime/orchestrate-ops.test.ts +204 -0
- package/src/runtime/orchestrate-ops.ts +103 -65
- package/src/runtime/pack-ops.test.ts +23 -6
- package/src/runtime/planning-extra-ops.test.ts +17 -7
- package/src/runtime/planning-extra-ops.ts +3 -1
- package/src/runtime/playbook-ops.test.ts +26 -3
- package/src/runtime/plugin-ops.test.ts +83 -25
- package/src/runtime/project-ops.test.ts +26 -6
- package/src/runtime/runtime.ts +3 -1
- package/src/runtime/session-briefing.test.ts +183 -54
- package/src/runtime/session-briefing.ts +8 -2
- package/src/runtime/sync-ops.test.ts +3 -12
- package/src/runtime/telemetry-ops.test.ts +31 -6
- package/src/runtime/tier-ops.test.ts +159 -0
- package/src/runtime/tier-ops.ts +119 -0
- package/src/runtime/vault-extra-ops.test.ts +32 -8
- package/src/runtime/vault-sharing-ops.test.ts +1 -4
- package/src/skills/sync-skills.ts +2 -12
- package/src/transport/ws-server.test.ts +7 -4
- package/src/vault/__tests__/vault-characterization.test.ts +492 -81
- package/src/vault/linking.test.ts +50 -17
- package/src/vault/linking.ts +48 -7
- package/src/vault/obsidian-sync.test.ts +6 -3
- package/src/vault/scope-detector.test.ts +1 -3
- package/src/vault/vault-branching.test.ts +9 -7
- package/src/vault/vault-entries.ts +209 -65
- package/src/vault/vault-maintenance.ts +7 -12
- package/src/vault/vault-manager.test.ts +10 -10
- package/src/vault/vault-markdown-sync.ts +4 -1
- package/src/vault/vault-memories.ts +7 -7
- package/src/vault/vault-scaling.test.ts +5 -5
- package/src/vault/vault-schema.ts +72 -15
- package/src/vault/vault.ts +55 -9
- package/src/brain/strength-scorer.ts +0 -404
- package/src/engine/index.ts +0 -21
- package/src/persona/index.ts +0 -9
- package/src/vault/vault-interfaces.ts +0 -56
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tier Ops — multi-vault tier and named source operations.
|
|
3
|
+
*
|
|
4
|
+
* Covers:
|
|
5
|
+
* - Connect/disconnect vault tiers (project, team)
|
|
6
|
+
* - List tiers with connection status
|
|
7
|
+
* - Search across all connected tiers
|
|
8
|
+
* - Named vault source connections with configurable priority
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import { z } from 'zod';
|
|
12
|
+
import type { OpDefinition } from '../facades/types.js';
|
|
13
|
+
import type { VaultTier } from '../vault/vault-types.js';
|
|
14
|
+
import type { AgentRuntime } from './types.js';
|
|
15
|
+
|
|
16
|
+
export function createTierOps(runtime: AgentRuntime): OpDefinition[] {
|
|
17
|
+
const { vaultManager } = runtime;
|
|
18
|
+
|
|
19
|
+
return [
|
|
20
|
+
// ─── Multi-vault ops ────────────────────────────────────────
|
|
21
|
+
{
|
|
22
|
+
name: 'vault_connect',
|
|
23
|
+
description:
|
|
24
|
+
'Connect an additional vault tier (project or team). Opens a separate SQLite database.',
|
|
25
|
+
auth: 'admin',
|
|
26
|
+
schema: z.object({
|
|
27
|
+
tier: z.enum(['project', 'team']).describe('Vault tier to connect'),
|
|
28
|
+
path: z.string().describe('Path to the SQLite database file'),
|
|
29
|
+
}),
|
|
30
|
+
handler: async (params) => {
|
|
31
|
+
const tier = params.tier as VaultTier;
|
|
32
|
+
const path = params.path as string;
|
|
33
|
+
vaultManager.open(tier, path);
|
|
34
|
+
return { connected: true, tier, path };
|
|
35
|
+
},
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
name: 'vault_disconnect',
|
|
39
|
+
description: 'Disconnect a vault tier. Cannot disconnect the agent tier.',
|
|
40
|
+
auth: 'admin',
|
|
41
|
+
schema: z.object({
|
|
42
|
+
tier: z.enum(['project', 'team']).describe('Vault tier to disconnect'),
|
|
43
|
+
}),
|
|
44
|
+
handler: async (params) => {
|
|
45
|
+
const tier = params.tier as VaultTier;
|
|
46
|
+
const removed = vaultManager.disconnect(tier);
|
|
47
|
+
return { disconnected: removed, tier };
|
|
48
|
+
},
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
name: 'vault_tiers',
|
|
52
|
+
description: 'List all vault tiers with connection status and entry counts.',
|
|
53
|
+
auth: 'read',
|
|
54
|
+
handler: async () => {
|
|
55
|
+
return { tiers: vaultManager.listTiers() };
|
|
56
|
+
},
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
name: 'vault_search_all',
|
|
60
|
+
description:
|
|
61
|
+
'Search across all connected vault tiers with priority-weighted cascading. Agent tier results ranked highest.',
|
|
62
|
+
auth: 'read',
|
|
63
|
+
schema: z.object({
|
|
64
|
+
query: z.string(),
|
|
65
|
+
limit: z.number().optional(),
|
|
66
|
+
}),
|
|
67
|
+
handler: async (params) => {
|
|
68
|
+
const results = vaultManager.search(params.query as string, (params.limit as number) ?? 20);
|
|
69
|
+
return { results, count: results.length };
|
|
70
|
+
},
|
|
71
|
+
},
|
|
72
|
+
|
|
73
|
+
// ─── Named vault connections ────────────────────────────────
|
|
74
|
+
{
|
|
75
|
+
name: 'vault_connect_source',
|
|
76
|
+
description:
|
|
77
|
+
'Connect a named vault source (e.g., shared team knowledge base) with a configurable search priority.',
|
|
78
|
+
auth: 'admin',
|
|
79
|
+
schema: z.object({
|
|
80
|
+
name: z.string().describe('Unique name for this vault connection'),
|
|
81
|
+
path: z.string().describe('Path to the SQLite database file'),
|
|
82
|
+
priority: z
|
|
83
|
+
.number()
|
|
84
|
+
.min(0)
|
|
85
|
+
.max(2)
|
|
86
|
+
.optional()
|
|
87
|
+
.describe('Search priority weight (default: 0.5)'),
|
|
88
|
+
}),
|
|
89
|
+
handler: async (params) => {
|
|
90
|
+
const name = params.name as string;
|
|
91
|
+
const path = params.path as string;
|
|
92
|
+
const priority = (params.priority as number) ?? 0.5;
|
|
93
|
+
vaultManager.connect(name, path, priority);
|
|
94
|
+
return { connected: true, name, path, priority };
|
|
95
|
+
},
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
name: 'vault_disconnect_source',
|
|
99
|
+
description: 'Disconnect a named vault source.',
|
|
100
|
+
auth: 'admin',
|
|
101
|
+
schema: z.object({
|
|
102
|
+
name: z.string().describe('Name of the vault connection to remove'),
|
|
103
|
+
}),
|
|
104
|
+
handler: async (params) => {
|
|
105
|
+
const name = params.name as string;
|
|
106
|
+
const removed = vaultManager.disconnectNamed(name);
|
|
107
|
+
return { disconnected: removed, name };
|
|
108
|
+
},
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
name: 'vault_list_sources',
|
|
112
|
+
description: 'List all dynamically connected vault sources with their priorities.',
|
|
113
|
+
auth: 'read',
|
|
114
|
+
handler: async () => {
|
|
115
|
+
return { sources: vaultManager.listConnected() };
|
|
116
|
+
},
|
|
117
|
+
},
|
|
118
|
+
];
|
|
119
|
+
}
|
|
@@ -91,12 +91,18 @@ describe('createVaultExtraOps', () => {
|
|
|
91
91
|
|
|
92
92
|
describe('vault_get', () => {
|
|
93
93
|
it('returns entry by ID', async () => {
|
|
94
|
-
const result = (await findOp(ops, 'vault_get').handler({ id: 'entry-1' })) as Record<
|
|
94
|
+
const result = (await findOp(ops, 'vault_get').handler({ id: 'entry-1' })) as Record<
|
|
95
|
+
string,
|
|
96
|
+
unknown
|
|
97
|
+
>;
|
|
95
98
|
expect(result.id).toBe('entry-1');
|
|
96
99
|
});
|
|
97
100
|
|
|
98
101
|
it('returns error for missing entry', async () => {
|
|
99
|
-
const result = (await findOp(ops, 'vault_get').handler({ id: 'missing' })) as Record<
|
|
102
|
+
const result = (await findOp(ops, 'vault_get').handler({ id: 'missing' })) as Record<
|
|
103
|
+
string,
|
|
104
|
+
unknown
|
|
105
|
+
>;
|
|
100
106
|
expect(result.error).toContain('not found');
|
|
101
107
|
});
|
|
102
108
|
});
|
|
@@ -112,7 +118,10 @@ describe('createVaultExtraOps', () => {
|
|
|
112
118
|
});
|
|
113
119
|
|
|
114
120
|
it('returns error when no fields provided', async () => {
|
|
115
|
-
const result = (await findOp(ops, 'vault_update').handler({ id: 'entry-1' })) as Record<
|
|
121
|
+
const result = (await findOp(ops, 'vault_update').handler({ id: 'entry-1' })) as Record<
|
|
122
|
+
string,
|
|
123
|
+
unknown
|
|
124
|
+
>;
|
|
116
125
|
expect(result.error).toBe('No fields to update');
|
|
117
126
|
});
|
|
118
127
|
|
|
@@ -128,7 +137,10 @@ describe('createVaultExtraOps', () => {
|
|
|
128
137
|
|
|
129
138
|
describe('vault_remove', () => {
|
|
130
139
|
it('removes entry by ID', async () => {
|
|
131
|
-
const result = (await findOp(ops, 'vault_remove').handler({ id: 'entry-1' })) as Record<
|
|
140
|
+
const result = (await findOp(ops, 'vault_remove').handler({ id: 'entry-1' })) as Record<
|
|
141
|
+
string,
|
|
142
|
+
unknown
|
|
143
|
+
>;
|
|
132
144
|
expect(result.removed).toBe(true);
|
|
133
145
|
expect(result.id).toBe('entry-1');
|
|
134
146
|
});
|
|
@@ -137,7 +149,10 @@ describe('createVaultExtraOps', () => {
|
|
|
137
149
|
describe('vault_bulk_add', () => {
|
|
138
150
|
it('seeds multiple entries', async () => {
|
|
139
151
|
const entries = [makeEntry({ id: 'a' }), makeEntry({ id: 'b' })];
|
|
140
|
-
const result = (await findOp(ops, 'vault_bulk_add').handler({ entries })) as Record<
|
|
152
|
+
const result = (await findOp(ops, 'vault_bulk_add').handler({ entries })) as Record<
|
|
153
|
+
string,
|
|
154
|
+
unknown
|
|
155
|
+
>;
|
|
141
156
|
expect(result.added).toBe(2);
|
|
142
157
|
expect(result.total).toBe(10);
|
|
143
158
|
});
|
|
@@ -186,7 +201,10 @@ describe('createVaultExtraOps', () => {
|
|
|
186
201
|
.mockReturnValueOnce({ totalEntries: 10 } as unknown)
|
|
187
202
|
.mockReturnValueOnce({ totalEntries: 12 } as unknown);
|
|
188
203
|
const entries = [makeEntry({ id: 'x' }), makeEntry({ id: 'y' })];
|
|
189
|
-
const result = (await findOp(ops, 'vault_import').handler({ entries })) as Record<
|
|
204
|
+
const result = (await findOp(ops, 'vault_import').handler({ entries })) as Record<
|
|
205
|
+
string,
|
|
206
|
+
unknown
|
|
207
|
+
>;
|
|
190
208
|
expect(result.imported).toBe(2);
|
|
191
209
|
expect(result.newEntries).toBe(2);
|
|
192
210
|
expect(result.total).toBe(12);
|
|
@@ -196,7 +214,10 @@ describe('createVaultExtraOps', () => {
|
|
|
196
214
|
describe('vault_seed', () => {
|
|
197
215
|
it('seeds entries idempotently', async () => {
|
|
198
216
|
const entries = [makeEntry()];
|
|
199
|
-
const result = (await findOp(ops, 'vault_seed').handler({ entries })) as Record<
|
|
217
|
+
const result = (await findOp(ops, 'vault_seed').handler({ entries })) as Record<
|
|
218
|
+
string,
|
|
219
|
+
unknown
|
|
220
|
+
>;
|
|
200
221
|
expect(result.seeded).toBe(1);
|
|
201
222
|
});
|
|
202
223
|
});
|
|
@@ -237,7 +258,10 @@ describe('createVaultExtraOps', () => {
|
|
|
237
258
|
|
|
238
259
|
describe('vault_dedup_status', () => {
|
|
239
260
|
it('reports dedup statistics with coverage', async () => {
|
|
240
|
-
const result = (await findOp(ops, 'vault_dedup_status').handler({})) as Record<
|
|
261
|
+
const result = (await findOp(ops, 'vault_dedup_status').handler({})) as Record<
|
|
262
|
+
string,
|
|
263
|
+
unknown
|
|
264
|
+
>;
|
|
241
265
|
expect(result.total).toBe(10);
|
|
242
266
|
expect(result.duplicates).toBe(2);
|
|
243
267
|
expect(result.coverage).toBe(90);
|
|
@@ -83,10 +83,7 @@ describe('createVaultSharingOps', () => {
|
|
|
83
83
|
it('returns error when entry not found', async () => {
|
|
84
84
|
const op = findOp(ops, 'vault_set_scope');
|
|
85
85
|
vi.mocked(rt.vault.get).mockReturnValue(undefined as never);
|
|
86
|
-
const result = (await op.handler({ id: 'missing', tier: 'team' })) as Record<
|
|
87
|
-
string,
|
|
88
|
-
unknown
|
|
89
|
-
>;
|
|
86
|
+
const result = (await op.handler({ id: 'missing', tier: 'team' })) as Record<string, unknown>;
|
|
90
87
|
expect(result.error).toContain('not found');
|
|
91
88
|
});
|
|
92
89
|
|
|
@@ -6,14 +6,7 @@
|
|
|
6
6
|
* Called automatically at engine startup and by admin_setup_global.
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
|
-
import {
|
|
10
|
-
existsSync,
|
|
11
|
-
readdirSync,
|
|
12
|
-
readFileSync,
|
|
13
|
-
writeFileSync,
|
|
14
|
-
mkdirSync,
|
|
15
|
-
statSync,
|
|
16
|
-
} from 'node:fs';
|
|
9
|
+
import { existsSync, readdirSync, readFileSync, writeFileSync, mkdirSync, statSync } from 'node:fs';
|
|
17
10
|
import { join } from 'node:path';
|
|
18
11
|
import { homedir } from 'node:os';
|
|
19
12
|
|
|
@@ -68,10 +61,7 @@ function brandSkillContent(content: string, agentName: string): string {
|
|
|
68
61
|
* - Changed skills are overwritten (compared by mtime)
|
|
69
62
|
* - Missing source skills leave target untouched (other agents may own them)
|
|
70
63
|
*/
|
|
71
|
-
export function syncSkillsToClaudeCode(
|
|
72
|
-
skillsDirs: string[],
|
|
73
|
-
agentName?: string,
|
|
74
|
-
): SyncResult {
|
|
64
|
+
export function syncSkillsToClaudeCode(skillsDirs: string[], agentName?: string): SyncResult {
|
|
75
65
|
const commandsDir = join(homedir(), '.claude', 'commands');
|
|
76
66
|
const skills = discoverSkills(skillsDirs);
|
|
77
67
|
const result: SyncResult = { installed: [], updated: [], skipped: [], failed: [] };
|
|
@@ -48,11 +48,11 @@ function encodeTextFrame(text: string, masked = true): Buffer {
|
|
|
48
48
|
if (len < 126) {
|
|
49
49
|
header = Buffer.alloc(2);
|
|
50
50
|
header[0] = 0x81; // FIN + TEXT
|
|
51
|
-
header[1] = masked ?
|
|
51
|
+
header[1] = masked ? len | 0x80 : len;
|
|
52
52
|
} else {
|
|
53
53
|
header = Buffer.alloc(4);
|
|
54
54
|
header[0] = 0x81;
|
|
55
|
-
header[1] = masked ?
|
|
55
|
+
header[1] = masked ? 126 | 0x80 : 126;
|
|
56
56
|
header.writeUInt16BE(len, 2);
|
|
57
57
|
}
|
|
58
58
|
|
|
@@ -86,7 +86,8 @@ describe('WsMcpServer', () => {
|
|
|
86
86
|
const httpServer = (server as unknown).server as Server | undefined;
|
|
87
87
|
if (httpServer) {
|
|
88
88
|
// Force immediate close of all tracked sockets
|
|
89
|
-
for (const conn of ((server as unknown).connections as Map<string, unknown>)?.values() ??
|
|
89
|
+
for (const conn of ((server as unknown).connections as Map<string, unknown>)?.values() ??
|
|
90
|
+
[]) {
|
|
90
91
|
conn.socket?.destroy();
|
|
91
92
|
}
|
|
92
93
|
((server as unknown).connections as Map<string, unknown>)?.clear();
|
|
@@ -160,7 +161,9 @@ describe('WsMcpServer', () => {
|
|
|
160
161
|
if (!addr || typeof addr === 'string') return;
|
|
161
162
|
|
|
162
163
|
const wsKey = 'dGhlIHNhbXBsZSBub25jZQ==';
|
|
163
|
-
const expectedAccept = createHash('sha1')
|
|
164
|
+
const expectedAccept = createHash('sha1')
|
|
165
|
+
.update(wsKey + WS_MAGIC)
|
|
166
|
+
.digest('base64');
|
|
164
167
|
|
|
165
168
|
const socket = connect(addr.port, '127.0.0.1');
|
|
166
169
|
await new Promise<void>((resolve) => socket.on('connect', resolve));
|