@soleri/core 9.0.4 → 9.3.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 +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/brain/intelligence.d.ts +27 -0
- package/dist/brain/intelligence.d.ts.map +1 -1
- package/dist/brain/intelligence.js +160 -14
- package/dist/brain/intelligence.js.map +1 -1
- package/dist/brain/learning-radar.d.ts +4 -0
- package/dist/brain/learning-radar.d.ts.map +1 -1
- package/dist/brain/learning-radar.js +20 -1
- package/dist/brain/learning-radar.js.map +1 -1
- package/dist/brain/strength-scorer.d.ts +31 -0
- package/dist/brain/strength-scorer.d.ts.map +1 -0
- package/dist/brain/strength-scorer.js +264 -0
- package/dist/brain/strength-scorer.js.map +1 -0
- package/dist/chat/agent-loop.d.ts.map +1 -1
- package/dist/chat/agent-loop.js +2 -0
- package/dist/chat/agent-loop.js.map +1 -1
- package/dist/chat/notifications.d.ts.map +1 -1
- package/dist/chat/notifications.js +2 -0
- package/dist/chat/notifications.js.map +1 -1
- package/dist/claudemd/compose.js +1 -1
- package/dist/claudemd/compose.js.map +1 -1
- package/dist/control/intent-router.d.ts.map +1 -1
- package/dist/control/intent-router.js +12 -4
- package/dist/control/intent-router.js.map +1 -1
- package/dist/curator/contradiction-detector.d.ts +27 -0
- package/dist/curator/contradiction-detector.d.ts.map +1 -0
- package/dist/curator/contradiction-detector.js +62 -0
- package/dist/curator/contradiction-detector.js.map +1 -0
- package/dist/curator/curator.d.ts +3 -4
- package/dist/curator/curator.d.ts.map +1 -1
- package/dist/curator/curator.js +94 -453
- package/dist/curator/curator.js.map +1 -1
- package/dist/curator/duplicate-detector.d.ts +14 -0
- package/dist/curator/duplicate-detector.d.ts.map +1 -0
- package/dist/curator/duplicate-detector.js +77 -0
- package/dist/curator/duplicate-detector.js.map +1 -0
- package/dist/curator/health-audit.d.ts +15 -0
- package/dist/curator/health-audit.d.ts.map +1 -0
- package/dist/curator/health-audit.js +97 -0
- package/dist/curator/health-audit.js.map +1 -0
- package/dist/curator/metadata-enricher.d.ts +17 -0
- package/dist/curator/metadata-enricher.d.ts.map +1 -0
- package/dist/curator/metadata-enricher.js +60 -0
- package/dist/curator/metadata-enricher.js.map +1 -0
- package/dist/curator/schema.d.ts +7 -0
- package/dist/curator/schema.d.ts.map +1 -0
- package/dist/curator/schema.js +62 -0
- package/dist/curator/schema.js.map +1 -0
- package/dist/curator/tag-manager.d.ts +36 -0
- package/dist/curator/tag-manager.d.ts.map +1 -0
- package/dist/curator/tag-manager.js +78 -0
- package/dist/curator/tag-manager.js.map +1 -0
- package/dist/engine/bin/soleri-engine.js +24 -3
- package/dist/engine/bin/soleri-engine.js.map +1 -1
- package/dist/engine/core-ops.d.ts.map +1 -1
- package/dist/engine/core-ops.js +23 -8
- package/dist/engine/core-ops.js.map +1 -1
- package/dist/engine/module-manifest.d.ts.map +1 -1
- package/dist/engine/module-manifest.js +42 -2
- 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 +50 -2
- package/dist/engine/register-engine.js.map +1 -1
- package/dist/errors/retry.d.ts.map +1 -1
- package/dist/errors/retry.js +2 -0
- package/dist/errors/retry.js.map +1 -1
- package/dist/facades/types.d.ts +1 -1
- package/dist/flows/chain-types.d.ts +18 -18
- package/dist/flows/gate-evaluator.d.ts.map +1 -1
- package/dist/flows/gate-evaluator.js +22 -0
- package/dist/flows/gate-evaluator.js.map +1 -1
- package/dist/flows/types.d.ts +157 -28
- package/dist/flows/types.d.ts.map +1 -1
- package/dist/flows/types.js +4 -0
- package/dist/flows/types.js.map +1 -1
- package/dist/index.d.ts +10 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -1
- package/dist/index.js.map +1 -1
- package/dist/intake/intake-pipeline.d.ts.map +1 -1
- package/dist/intake/intake-pipeline.js +1 -0
- package/dist/intake/intake-pipeline.js.map +1 -1
- package/dist/intake/text-ingester.d.ts.map +1 -1
- package/dist/intake/text-ingester.js +2 -0
- package/dist/intake/text-ingester.js.map +1 -1
- package/dist/llm/key-pool.d.ts +1 -1
- package/dist/llm/key-pool.d.ts.map +1 -1
- package/dist/llm/key-pool.js +3 -4
- package/dist/llm/key-pool.js.map +1 -1
- package/dist/llm/utils.d.ts.map +1 -1
- package/dist/llm/utils.js +2 -0
- package/dist/llm/utils.js.map +1 -1
- package/dist/migrations/migration-runner.test-helpers.d.ts +13 -0
- package/dist/migrations/migration-runner.test-helpers.d.ts.map +1 -0
- package/dist/migrations/migration-runner.test-helpers.js +47 -0
- package/dist/migrations/migration-runner.test-helpers.js.map +1 -0
- package/dist/operator/operator-profile.d.ts +44 -0
- package/dist/operator/operator-profile.d.ts.map +1 -0
- package/dist/operator/operator-profile.js +383 -0
- package/dist/operator/operator-profile.js.map +1 -0
- package/dist/operator/operator-signals.d.ts +45 -0
- package/dist/operator/operator-signals.d.ts.map +1 -0
- package/dist/operator/operator-signals.js +228 -0
- package/dist/operator/operator-signals.js.map +1 -0
- package/dist/operator/operator-types.d.ts +360 -0
- package/dist/operator/operator-types.d.ts.map +1 -0
- package/dist/operator/operator-types.js +24 -0
- package/dist/operator/operator-types.js.map +1 -0
- package/dist/packs/types.d.ts +27 -27
- package/dist/paths.d.ts +40 -0
- package/dist/paths.d.ts.map +1 -0
- package/dist/paths.js +98 -0
- package/dist/paths.js.map +1 -0
- package/dist/persistence/index.d.ts +1 -1
- package/dist/persistence/index.d.ts.map +1 -1
- package/dist/persistence/index.js +1 -1
- package/dist/persistence/index.js.map +1 -1
- package/dist/persistence/sqlite-provider.d.ts +2 -0
- package/dist/persistence/sqlite-provider.d.ts.map +1 -1
- package/dist/persistence/sqlite-provider.js +8 -5
- package/dist/persistence/sqlite-provider.js.map +1 -1
- package/dist/planning/evidence-collector.d.ts +13 -1
- package/dist/planning/evidence-collector.d.ts.map +1 -1
- package/dist/planning/evidence-collector.js +33 -0
- package/dist/planning/evidence-collector.js.map +1 -1
- package/dist/planning/gap-analysis.d.ts +5 -4
- package/dist/planning/gap-analysis.d.ts.map +1 -1
- package/dist/planning/gap-analysis.js +7 -341
- package/dist/planning/gap-analysis.js.map +1 -1
- package/dist/planning/gap-passes.d.ts +19 -0
- package/dist/planning/gap-passes.d.ts.map +1 -0
- package/dist/planning/gap-passes.js +174 -0
- package/dist/planning/gap-passes.js.map +1 -0
- package/dist/planning/gap-patterns.d.ts +29 -0
- package/dist/planning/gap-patterns.d.ts.map +1 -0
- package/dist/planning/gap-patterns.js +175 -0
- package/dist/planning/gap-patterns.js.map +1 -0
- package/dist/planning/gap-types.d.ts +1 -1
- package/dist/planning/gap-types.d.ts.map +1 -1
- package/dist/planning/gap-types.js +1 -0
- package/dist/planning/gap-types.js.map +1 -1
- package/dist/planning/github-projection.d.ts +122 -0
- package/dist/planning/github-projection.d.ts.map +1 -0
- package/dist/planning/github-projection.js +313 -0
- package/dist/planning/github-projection.js.map +1 -0
- package/dist/planning/impact-analyzer.d.ts +26 -0
- package/dist/planning/impact-analyzer.d.ts.map +1 -0
- package/dist/planning/impact-analyzer.js +201 -0
- package/dist/planning/impact-analyzer.js.map +1 -0
- package/dist/planning/plan-lifecycle.d.ts +136 -0
- package/dist/planning/plan-lifecycle.d.ts.map +1 -0
- package/dist/planning/plan-lifecycle.js +309 -0
- package/dist/planning/plan-lifecycle.js.map +1 -0
- package/dist/planning/planner-types.d.ts +202 -0
- package/dist/planning/planner-types.d.ts.map +1 -0
- package/dist/planning/planner-types.js +6 -0
- package/dist/planning/planner-types.js.map +1 -0
- package/dist/planning/planner.d.ts +31 -383
- package/dist/planning/planner.d.ts.map +1 -1
- package/dist/planning/planner.js +151 -832
- package/dist/planning/planner.js.map +1 -1
- package/dist/planning/rationalization-detector.d.ts +32 -0
- package/dist/planning/rationalization-detector.d.ts.map +1 -0
- package/dist/planning/rationalization-detector.js +89 -0
- package/dist/planning/rationalization-detector.js.map +1 -0
- package/dist/planning/reconciliation-engine.d.ts +47 -0
- package/dist/planning/reconciliation-engine.d.ts.map +1 -0
- package/dist/planning/reconciliation-engine.js +128 -0
- package/dist/planning/reconciliation-engine.js.map +1 -0
- package/dist/planning/task-verifier.d.ts +85 -0
- package/dist/planning/task-verifier.d.ts.map +1 -0
- package/dist/planning/task-verifier.js +235 -0
- package/dist/planning/task-verifier.js.map +1 -0
- package/dist/plugins/types.d.ts +4 -4
- package/dist/runtime/admin-ops.d.ts +2 -2
- package/dist/runtime/admin-ops.d.ts.map +1 -1
- package/dist/runtime/admin-ops.js +44 -17
- 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 +22 -46
- package/dist/runtime/admin-setup-ops.js.map +1 -1
- package/dist/runtime/archive-ops.d.ts +10 -0
- package/dist/runtime/archive-ops.d.ts.map +1 -0
- package/dist/runtime/archive-ops.js +310 -0
- package/dist/runtime/archive-ops.js.map +1 -0
- 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/capture-ops.d.ts.map +1 -1
- package/dist/runtime/capture-ops.js +42 -7
- package/dist/runtime/capture-ops.js.map +1 -1
- package/dist/runtime/claude-md-helpers.js +1 -1
- package/dist/runtime/claude-md-helpers.js.map +1 -1
- package/dist/runtime/context-health.d.ts +31 -0
- package/dist/runtime/context-health.d.ts.map +1 -0
- package/dist/runtime/context-health.js +57 -0
- package/dist/runtime/context-health.js.map +1 -0
- package/dist/runtime/facades/archive-facade.d.ts +10 -0
- package/dist/runtime/facades/archive-facade.d.ts.map +1 -0
- package/dist/runtime/facades/archive-facade.js +11 -0
- package/dist/runtime/facades/archive-facade.js.map +1 -0
- package/dist/runtime/facades/brain-facade.d.ts.map +1 -1
- package/dist/runtime/facades/brain-facade.js +2 -0
- package/dist/runtime/facades/brain-facade.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-facade.d.ts +7 -0
- package/dist/runtime/facades/chat-facade.d.ts.map +1 -1
- package/dist/runtime/facades/chat-facade.js +15 -800
- package/dist/runtime/facades/chat-facade.js.map +1 -1
- package/dist/runtime/facades/chat-service-ops.d.ts +9 -0
- package/dist/runtime/facades/chat-service-ops.d.ts.map +1 -0
- package/dist/runtime/facades/chat-service-ops.js +332 -0
- package/dist/runtime/facades/chat-service-ops.js.map +1 -0
- package/dist/runtime/facades/chat-session-ops.d.ts +8 -0
- package/dist/runtime/facades/chat-session-ops.d.ts.map +1 -0
- package/dist/runtime/facades/chat-session-ops.js +136 -0
- package/dist/runtime/facades/chat-session-ops.js.map +1 -0
- package/dist/runtime/facades/chat-state.d.ts +31 -0
- package/dist/runtime/facades/chat-state.d.ts.map +1 -0
- package/dist/runtime/facades/chat-state.js +32 -0
- package/dist/runtime/facades/chat-state.js.map +1 -0
- package/dist/runtime/facades/chat-transport-ops.d.ts +9 -0
- package/dist/runtime/facades/chat-transport-ops.d.ts.map +1 -0
- package/dist/runtime/facades/chat-transport-ops.js +337 -0
- package/dist/runtime/facades/chat-transport-ops.js.map +1 -0
- package/dist/runtime/facades/control-facade.d.ts.map +1 -1
- package/dist/runtime/facades/control-facade.js +4 -1
- package/dist/runtime/facades/control-facade.js.map +1 -1
- package/dist/runtime/facades/index.d.ts.map +1 -1
- package/dist/runtime/facades/index.js +48 -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/memory-facade.d.ts.map +1 -1
- package/dist/runtime/facades/memory-facade.js +75 -6
- package/dist/runtime/facades/memory-facade.js.map +1 -1
- package/dist/runtime/facades/operator-facade.d.ts +8 -0
- package/dist/runtime/facades/operator-facade.d.ts.map +1 -0
- package/dist/runtime/facades/operator-facade.js +220 -0
- package/dist/runtime/facades/operator-facade.js.map +1 -0
- package/dist/runtime/facades/orchestrate-facade.js +3 -3
- package/dist/runtime/facades/orchestrate-facade.js.map +1 -1
- package/dist/runtime/facades/plan-facade.d.ts.map +1 -1
- package/dist/runtime/facades/plan-facade.js +42 -6
- package/dist/runtime/facades/plan-facade.js.map +1 -1
- package/dist/runtime/facades/review-facade.d.ts +7 -0
- package/dist/runtime/facades/review-facade.d.ts.map +1 -0
- package/dist/runtime/facades/review-facade.js +8 -0
- package/dist/runtime/facades/review-facade.js.map +1 -0
- package/dist/runtime/facades/sync-facade.d.ts +7 -0
- package/dist/runtime/facades/sync-facade.d.ts.map +1 -0
- package/dist/runtime/facades/sync-facade.js +8 -0
- package/dist/runtime/facades/sync-facade.js.map +1 -0
- 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 +12 -1
- package/dist/runtime/facades/vault-facade.d.ts.map +1 -1
- package/dist/runtime/facades/vault-facade.js +55 -251
- package/dist/runtime/facades/vault-facade.js.map +1 -1
- package/dist/runtime/github-integration.d.ts +49 -0
- package/dist/runtime/github-integration.d.ts.map +1 -0
- package/dist/runtime/github-integration.js +120 -0
- package/dist/runtime/github-integration.js.map +1 -0
- package/dist/runtime/grading-ops.js +1 -1
- package/dist/runtime/grading-ops.js.map +1 -1
- package/dist/runtime/memory-extra-ops.d.ts.map +1 -1
- package/dist/runtime/memory-extra-ops.js +6 -2
- package/dist/runtime/memory-extra-ops.js.map +1 -1
- package/dist/runtime/orchestrate-ops.d.ts.map +1 -1
- package/dist/runtime/orchestrate-ops.js +386 -37
- 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 +69 -4
- package/dist/runtime/planning-extra-ops.js.map +1 -1
- package/dist/runtime/review-ops.d.ts +10 -0
- package/dist/runtime/review-ops.d.ts.map +1 -0
- package/dist/runtime/review-ops.js +97 -0
- package/dist/runtime/review-ops.js.map +1 -0
- package/dist/runtime/runtime.d.ts.map +1 -1
- package/dist/runtime/runtime.js +29 -12
- package/dist/runtime/runtime.js.map +1 -1
- package/dist/runtime/session-briefing.d.ts +3 -0
- package/dist/runtime/session-briefing.d.ts.map +1 -1
- package/dist/runtime/session-briefing.js +72 -1
- package/dist/runtime/session-briefing.js.map +1 -1
- package/dist/runtime/sync-ops.d.ts +12 -0
- package/dist/runtime/sync-ops.d.ts.map +1 -0
- package/dist/runtime/sync-ops.js +288 -0
- package/dist/runtime/sync-ops.js.map +1 -0
- 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/runtime/types.d.ts +10 -4
- package/dist/runtime/types.d.ts.map +1 -1
- package/dist/runtime/vault-extra-ops.d.ts +5 -4
- package/dist/runtime/vault-extra-ops.d.ts.map +1 -1
- package/dist/runtime/vault-extra-ops.js +5 -300
- package/dist/runtime/vault-extra-ops.js.map +1 -1
- package/dist/runtime/vault-sharing-ops.d.ts +4 -4
- package/dist/runtime/vault-sharing-ops.d.ts.map +1 -1
- package/dist/runtime/vault-sharing-ops.js +5 -300
- package/dist/runtime/vault-sharing-ops.js.map +1 -1
- package/dist/skills/sync-skills.d.ts +27 -0
- package/dist/skills/sync-skills.d.ts.map +1 -0
- package/dist/skills/sync-skills.js +81 -0
- package/dist/skills/sync-skills.js.map +1 -0
- package/dist/update-check.d.ts +14 -0
- package/dist/update-check.d.ts.map +1 -0
- package/dist/update-check.js +96 -0
- package/dist/update-check.js.map +1 -0
- package/dist/vault/linking.d.ts +10 -12
- package/dist/vault/linking.d.ts.map +1 -1
- package/dist/vault/linking.js +140 -161
- package/dist/vault/linking.js.map +1 -1
- package/dist/vault/vault-entries.d.ts +69 -0
- package/dist/vault/vault-entries.d.ts.map +1 -0
- package/dist/vault/vault-entries.js +299 -0
- package/dist/vault/vault-entries.js.map +1 -0
- package/dist/vault/vault-interfaces.d.ts +153 -0
- package/dist/vault/vault-interfaces.d.ts.map +1 -0
- package/dist/vault/vault-interfaces.js +2 -0
- package/dist/vault/vault-interfaces.js.map +1 -0
- package/dist/vault/vault-maintenance.d.ts +40 -0
- package/dist/vault/vault-maintenance.d.ts.map +1 -0
- package/dist/vault/vault-maintenance.js +146 -0
- package/dist/vault/vault-maintenance.js.map +1 -0
- package/dist/vault/vault-markdown-sync.d.ts +22 -0
- package/dist/vault/vault-markdown-sync.d.ts.map +1 -0
- package/dist/vault/vault-markdown-sync.js +143 -0
- package/dist/vault/vault-markdown-sync.js.map +1 -0
- package/dist/vault/vault-memories.d.ts +61 -0
- package/dist/vault/vault-memories.d.ts.map +1 -0
- package/dist/vault/vault-memories.js +242 -0
- package/dist/vault/vault-memories.js.map +1 -0
- package/dist/vault/vault-schema.d.ts +9 -0
- package/dist/vault/vault-schema.d.ts.map +1 -0
- package/dist/vault/vault-schema.js +205 -0
- package/dist/vault/vault-schema.js.map +1 -0
- package/dist/vault/vault.d.ts +29 -81
- package/dist/vault/vault.d.ts.map +1 -1
- package/dist/vault/vault.js +82 -931
- package/dist/vault/vault.js.map +1 -1
- package/package.json +7 -7
- package/src/agency/agency-manager.test.ts +620 -0
- package/src/agency/default-rules.test.ts +236 -0
- package/src/{__tests__ → brain}/brain-intelligence.test.ts +37 -14
- package/src/{__tests__ → brain}/brain.test.ts +1 -1
- package/src/brain/intelligence.ts +196 -15
- package/src/brain/learning-radar.ts +22 -1
- package/src/{__tests__ → brain}/second-brain-features.test.ts +4 -4
- package/src/{__tests__ → brain}/session-lifecycle.test.ts +2 -2
- package/src/capabilities/chain-mapping.test.ts +66 -0
- package/src/capabilities/registry.test.ts +359 -0
- package/src/chat/agent-loop.test.ts +384 -0
- package/src/chat/agent-loop.ts +2 -0
- package/src/{__tests__ → chat}/chat-differentiators.test.ts +3 -3
- package/src/{__tests__ → chat}/chat-enhanced.test.ts +4 -4
- package/src/{__tests__ → chat}/chat-transport.test.ts +6 -6
- package/src/chat/mcp-bridge.test.ts +178 -0
- package/src/chat/notifications.ts +2 -0
- package/src/chat/output-compressor.test.ts +164 -0
- package/src/claudemd/compose.test.ts +178 -0
- package/src/claudemd/compose.ts +1 -1
- package/src/claudemd/inject.test.ts +201 -0
- package/src/context/context-engine.test.ts +506 -0
- package/src/control/identity-manager.test.ts +305 -0
- package/src/control/intent-router.test.ts +360 -0
- package/src/control/intent-router.ts +13 -4
- package/src/curator/classifier.test.ts +110 -0
- package/src/curator/contradiction-detector.test.ts +205 -0
- package/src/curator/contradiction-detector.ts +87 -0
- package/src/{__tests__ → curator}/curator-pipeline-e2e.test.ts +10 -10
- package/src/{__tests__ → curator}/curator.test.ts +77 -1
- package/src/curator/curator.ts +160 -600
- package/src/curator/duplicate-detector.test.ts +245 -0
- package/src/curator/duplicate-detector.ts +103 -0
- package/src/curator/health-audit.ts +126 -0
- package/src/curator/metadata-enricher.ts +84 -0
- package/src/curator/quality-gate.test.ts +175 -0
- package/src/curator/schema.ts +65 -0
- package/src/curator/tag-manager.test.ts +173 -0
- package/src/curator/tag-manager.ts +109 -0
- package/src/domain-packs/inject-rules.test.ts +117 -0
- package/src/domain-packs/knowledge-installer.test.ts +163 -0
- package/src/domain-packs/loader.test.ts +86 -0
- package/src/domain-packs/pack-runtime.test.ts +140 -0
- package/src/domain-packs/skills-installer.test.ts +135 -0
- package/src/domain-packs/token-resolver.test.ts +148 -0
- package/src/domain-packs/types.test.ts +144 -0
- package/src/enforcement/adapters/claude-code.test.ts +216 -0
- package/src/enforcement/registry.test.ts +258 -0
- package/src/engine/bin/soleri-engine.ts +30 -4
- package/src/engine/core-ops.test.ts +254 -0
- package/src/engine/core-ops.ts +25 -8
- package/src/engine/module-manifest.test.ts +125 -0
- package/src/engine/module-manifest.ts +42 -2
- package/src/engine/register-engine.test.ts +235 -0
- package/src/engine/register-engine.ts +50 -3
- package/src/errors/classify.test.ts +203 -0
- package/src/errors/retry.test.ts +153 -0
- package/src/errors/retry.ts +2 -0
- package/src/errors/types.test.ts +108 -0
- package/src/events/event-bus.test.ts +149 -0
- package/src/extensions/middleware.test.ts +234 -0
- package/src/facades/facade-factory.test.ts +470 -0
- package/src/flows/chain-runner.test.ts +273 -0
- package/src/flows/context-router.test.ts +52 -0
- package/src/flows/dispatch-registry.test.ts +128 -0
- package/src/flows/epilogue.test.ts +113 -0
- package/src/flows/executor.test.ts +263 -0
- package/src/flows/gate-evaluator.test.ts +200 -0
- package/src/flows/gate-evaluator.ts +23 -0
- package/src/flows/types.ts +4 -0
- package/src/governance/governance.test.ts +842 -0
- package/src/{__tests__ → health}/health-registry.test.ts +75 -55
- package/src/health/vault-integrity.test.ts +110 -0
- package/src/index.ts +92 -0
- package/src/intake/content-classifier.test.ts +279 -0
- package/src/intake/dedup-gate.test.ts +147 -0
- package/src/intake/intake-pipeline.test.ts +508 -0
- package/src/intake/intake-pipeline.ts +1 -0
- package/src/intake/text-ingester.test.ts +200 -0
- package/src/intake/text-ingester.ts +2 -0
- package/src/llm/key-pool.test.ts +234 -0
- package/src/llm/key-pool.ts +3 -4
- package/src/llm/llm-client.test.ts +342 -0
- package/src/llm/oauth-discovery.test.ts +180 -0
- package/src/llm/utils.test.ts +371 -0
- package/src/llm/utils.ts +2 -0
- package/src/{__tests__ → logging}/logger.test.ts +44 -62
- package/src/loop/loop-manager.test.ts +515 -0
- package/src/migrations/migration-runner.edge-cases.test.ts +314 -0
- package/src/migrations/migration-runner.test-helpers.ts +64 -0
- package/src/migrations/migration-runner.test.ts +385 -0
- package/src/operator/auto-signal-pipeline.test.ts +207 -0
- package/src/operator/operator-profile-extended.test.ts +330 -0
- package/src/operator/operator-profile.test.ts +332 -0
- package/src/operator/operator-profile.ts +485 -0
- package/src/operator/operator-signals-extended.test.ts +257 -0
- package/src/operator/operator-signals.test.ts +277 -0
- package/src/operator/operator-signals.ts +262 -0
- package/src/operator/operator-types.ts +444 -0
- package/src/operator/prompts/hook-precompact-operator-dispatch.md +98 -0
- package/src/operator/prompts/subagent-soft-signal-extractor.md +130 -0
- package/src/operator/prompts/subagent-synthesis-cognition.md +190 -0
- package/src/operator/prompts/subagent-synthesis-communication.md +146 -0
- package/src/operator/prompts/subagent-synthesis-technical.md +170 -0
- package/src/operator/prompts/subagent-synthesis-trust.md +149 -0
- package/src/{__tests__ → packs}/pack-lockfile.test.ts +3 -3
- package/src/{__tests__ → packs}/pack-system.test.ts +2 -2
- package/src/paths.ts +115 -0
- package/src/persistence/index.ts +1 -1
- package/src/persistence/sqlite-provider.test.ts +540 -0
- package/src/persistence/sqlite-provider.ts +8 -5
- package/src/persona/defaults.test.ts +55 -0
- package/src/persona/loader.test.ts +67 -0
- package/src/persona/prompt-generator.test.ts +127 -0
- package/src/planning/evidence-collector.test.ts +515 -0
- package/src/planning/evidence-collector.ts +47 -0
- package/src/planning/gap-analysis-alternatives.test.ts +199 -0
- package/src/planning/gap-analysis.ts +21 -636
- package/src/planning/gap-passes.test.ts +554 -0
- package/src/planning/gap-passes.ts +367 -0
- package/src/planning/gap-patterns.test.ts +394 -0
- package/src/planning/gap-patterns.ts +317 -0
- package/src/planning/gap-types.ts +4 -1
- package/src/planning/github-projection.test.ts +182 -0
- package/src/planning/github-projection.ts +446 -0
- package/src/planning/impact-analyzer.test.ts +167 -0
- package/src/planning/impact-analyzer.ts +251 -0
- package/src/planning/plan-lifecycle.test.ts +379 -0
- package/src/planning/plan-lifecycle.ts +377 -0
- package/src/planning/planner-types.ts +215 -0
- package/src/{__tests__ → planning}/planner.test.ts +179 -15
- package/src/planning/planner.ts +221 -1112
- package/src/planning/rationalization-detector.test.ts +156 -0
- package/src/planning/rationalization-detector.ts +136 -0
- package/src/planning/reconciliation-engine.test.ts +158 -0
- package/src/planning/reconciliation-engine.ts +161 -0
- package/src/planning/task-verifier.test.ts +267 -0
- package/src/planning/task-verifier.ts +309 -0
- package/src/planning/verification-protocol.test.ts +201 -0
- package/src/playbooks/generic/generic-playbooks.test.ts +438 -0
- package/src/playbooks/index.test.ts +77 -0
- package/src/playbooks/playbook-executor.test.ts +253 -0
- package/src/playbooks/playbook-registry.test.ts +232 -0
- package/src/playbooks/playbook-seeder.test.ts +153 -0
- package/src/plugins/plugin-loader.test.ts +217 -0
- package/src/plugins/plugin-registry.test.ts +284 -0
- package/src/project/project-registry.test.ts +439 -0
- package/src/prompts/parser.test.ts +100 -0
- package/src/prompts/template-manager.test.ts +112 -0
- package/src/{__tests__ → queue}/async-infrastructure.test.ts +3 -3
- package/src/queue/job-queue.test.ts +327 -0
- package/src/queue/pipeline-runner.test.ts +209 -0
- package/src/runtime/admin-extra-ops.test.ts +513 -0
- package/src/runtime/admin-ops.test.ts +255 -0
- package/src/runtime/admin-ops.ts +45 -17
- package/src/runtime/admin-setup-ops.test.ts +327 -0
- package/src/runtime/admin-setup-ops.ts +26 -42
- package/src/runtime/archive-ops.test.ts +272 -0
- package/src/runtime/archive-ops.ts +347 -0
- package/src/runtime/branching-ops.test.ts +144 -0
- package/src/runtime/branching-ops.ts +107 -0
- package/src/runtime/capture-ops.test.ts +419 -0
- package/src/runtime/capture-ops.ts +50 -8
- package/src/runtime/chain-ops.test.ts +159 -0
- package/src/runtime/claude-md-helpers.test.ts +189 -0
- package/src/runtime/claude-md-helpers.ts +1 -1
- package/src/runtime/context-health.test.ts +76 -0
- package/src/runtime/context-health.ts +83 -0
- package/src/runtime/curator-extra-ops.test.ts +204 -0
- package/src/runtime/deprecation.test.ts +98 -0
- package/src/runtime/domain-ops.test.ts +278 -0
- package/src/runtime/facades/admin-facade.test.ts +330 -0
- package/src/runtime/facades/agency-facade.test.ts +278 -0
- package/src/runtime/facades/archive-facade.test.ts +308 -0
- package/src/runtime/facades/archive-facade.ts +14 -0
- package/src/runtime/facades/brain-facade.test.ts +818 -0
- package/src/runtime/facades/brain-facade.ts +2 -0
- 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 +219 -0
- package/src/runtime/facades/chat-facade.ts +15 -906
- package/src/runtime/facades/chat-service-ops.test.ts +381 -0
- package/src/runtime/facades/chat-service-ops.ts +376 -0
- package/src/runtime/facades/chat-session-ops.test.ts +212 -0
- package/src/runtime/facades/chat-session-ops.ts +146 -0
- package/src/runtime/facades/chat-state.ts +60 -0
- package/src/runtime/facades/chat-transport-ops.test.ts +336 -0
- package/src/runtime/facades/chat-transport-ops.ts +379 -0
- package/src/runtime/facades/context-facade.test.ts +123 -0
- package/src/runtime/facades/control-facade.test.ts +436 -0
- package/src/runtime/facades/control-facade.ts +6 -1
- package/src/runtime/facades/curator-facade.test.ts +303 -0
- package/src/runtime/facades/index.ts +48 -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 +262 -0
- package/src/runtime/facades/memory-facade.test.ts +283 -0
- package/src/runtime/facades/memory-facade.ts +78 -6
- package/src/runtime/facades/operator-facade.test.ts +221 -0
- package/src/runtime/facades/operator-facade.ts +244 -0
- package/src/runtime/facades/orchestrate-facade.test.ts +191 -0
- package/src/runtime/facades/orchestrate-facade.ts +3 -3
- package/src/runtime/facades/plan-facade.test.ts +283 -0
- package/src/runtime/facades/plan-facade.ts +47 -6
- package/src/runtime/facades/review-facade.test.ts +82 -0
- package/src/runtime/facades/review-facade.ts +11 -0
- package/src/runtime/facades/sync-facade.test.ts +113 -0
- package/src/runtime/facades/sync-facade.ts +11 -0
- 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 +563 -0
- package/src/runtime/facades/vault-facade.ts +66 -265
- package/src/runtime/feature-flags.test.ts +140 -0
- package/src/runtime/github-integration.test.ts +89 -0
- package/src/runtime/github-integration.ts +162 -0
- package/src/runtime/grading-ops.test.ts +172 -0
- package/src/runtime/grading-ops.ts +1 -1
- package/src/runtime/intake-ops.test.ts +261 -0
- package/src/runtime/loop-ops.test.ts +248 -0
- package/src/runtime/memory-cross-project-ops.test.ts +188 -0
- package/src/runtime/memory-extra-ops.test.ts +453 -0
- package/src/runtime/memory-extra-ops.ts +6 -2
- package/src/runtime/orchestrate-ops.test.ts +302 -0
- package/src/runtime/orchestrate-ops.ts +461 -45
- package/src/runtime/pack-ops.test.ts +175 -0
- package/src/runtime/planning-extra-ops.test.ts +593 -0
- package/src/runtime/planning-extra-ops.ts +74 -4
- package/src/{__tests__ → runtime}/playbook-ops-execution.test.ts +3 -3
- package/src/runtime/playbook-ops.test.ts +285 -0
- package/src/runtime/plugin-ops.test.ts +259 -0
- package/src/runtime/project-ops.test.ts +255 -0
- package/src/runtime/review-ops.test.ts +142 -0
- package/src/runtime/review-ops.ts +99 -0
- package/src/runtime/runtime.test.ts +363 -0
- package/src/runtime/runtime.ts +41 -12
- package/src/runtime/session-briefing.test.ts +431 -0
- package/src/runtime/session-briefing.ts +86 -1
- package/src/runtime/sync-ops.test.ts +212 -0
- package/src/runtime/sync-ops.ts +325 -0
- package/src/runtime/telemetry-ops.test.ts +157 -0
- package/src/runtime/tier-ops.test.ts +159 -0
- package/src/runtime/tier-ops.ts +119 -0
- package/src/runtime/types.ts +10 -4
- package/src/runtime/vault-extra-ops.test.ts +270 -0
- package/src/runtime/vault-extra-ops.ts +5 -332
- package/src/runtime/vault-linking-ops.test.ts +237 -0
- package/src/runtime/vault-sharing-ops.test.ts +127 -0
- package/src/runtime/vault-sharing-ops.ts +5 -329
- package/src/skills/sync-skills.ts +98 -0
- package/src/streams/normalize.test.ts +95 -0
- package/src/streams/replayable-stream.test.ts +166 -0
- package/src/telemetry/telemetry.test.ts +143 -0
- package/src/transport/http-server.test.ts +394 -0
- package/src/transport/lsp-server.test.ts +458 -0
- package/src/transport/rate-limiter.test.ts +126 -0
- package/src/transport/session-manager.test.ts +133 -0
- package/src/transport/token-auth.test.ts +136 -0
- package/src/transport/ws-server.test.ts +297 -0
- package/src/update-check.ts +111 -0
- package/src/vault/__tests__/vault-characterization.test.ts +579 -0
- package/src/vault/content-hash.test.ts +78 -0
- package/src/vault/git-vault-sync.test.ts +234 -0
- package/src/vault/knowledge-review.test.ts +269 -0
- package/src/vault/linking.test.ts +391 -0
- package/src/vault/linking.ts +188 -181
- package/src/vault/obsidian-sync.test.ts +345 -0
- package/src/vault/playbook.test.ts +152 -0
- package/src/vault/scope-detector.test.ts +185 -0
- package/src/vault/vault-branching.test.ts +252 -0
- package/src/{__tests__ → vault}/vault-connect.test.ts +1 -1
- package/src/vault/vault-entries.ts +426 -0
- package/src/vault/vault-maintenance.ts +200 -0
- package/src/vault/vault-manager.test.ts +206 -0
- package/src/vault/vault-markdown-sync.test.ts +203 -0
- package/src/vault/vault-markdown-sync.ts +163 -0
- package/src/vault/vault-memories.ts +339 -0
- package/src/{__tests__ → vault}/vault-scaling.test.ts +1 -1
- package/src/vault/vault-schema.ts +238 -0
- package/src/{__tests__ → vault}/vault-sharing.test.ts +4 -4
- package/src/{__tests__ → vault}/vault.test.ts +2 -2
- package/src/vault/vault.ts +87 -1123
- package/dist/cognee/client.d.ts +0 -43
- package/dist/cognee/client.d.ts.map +0 -1
- package/dist/cognee/client.js +0 -375
- package/dist/cognee/client.js.map +0 -1
- package/dist/cognee/sync-manager.d.ts +0 -153
- package/dist/cognee/sync-manager.d.ts.map +0 -1
- package/dist/cognee/sync-manager.js +0 -390
- package/dist/cognee/sync-manager.js.map +0 -1
- package/dist/cognee/types.d.ts +0 -62
- package/dist/cognee/types.d.ts.map +0 -1
- package/dist/cognee/types.js +0 -3
- package/dist/cognee/types.js.map +0 -1
- package/dist/governance/index.d.ts +0 -3
- package/dist/governance/index.d.ts.map +0 -1
- package/dist/governance/index.js +0 -2
- package/dist/governance/index.js.map +0 -1
- package/dist/health/doctor-checks.d.ts +0 -15
- package/dist/health/doctor-checks.d.ts.map +0 -1
- package/dist/health/doctor-checks.js +0 -98
- package/dist/health/doctor-checks.js.map +0 -1
- package/dist/persistence/postgres-provider.d.ts +0 -81
- package/dist/persistence/postgres-provider.d.ts.map +0 -1
- package/dist/persistence/postgres-provider.js +0 -256
- package/dist/persistence/postgres-provider.js.map +0 -1
- package/dist/runtime/cognee-sync-ops.d.ts +0 -12
- package/dist/runtime/cognee-sync-ops.d.ts.map +0 -1
- package/dist/runtime/cognee-sync-ops.js +0 -93
- package/dist/runtime/cognee-sync-ops.js.map +0 -1
- package/dist/runtime/core-ops.d.ts +0 -23
- package/dist/runtime/core-ops.d.ts.map +0 -1
- package/dist/runtime/core-ops.js +0 -1296
- package/dist/runtime/core-ops.js.map +0 -1
- package/dist/runtime/facades/cognee-facade.d.ts +0 -8
- package/dist/runtime/facades/cognee-facade.d.ts.map +0 -1
- package/dist/runtime/facades/cognee-facade.js +0 -156
- package/dist/runtime/facades/cognee-facade.js.map +0 -1
- package/src/__tests__/admin-extra-ops.test.ts +0 -484
- package/src/__tests__/admin-ops.test.ts +0 -268
- package/src/__tests__/admin-setup-ops.test.ts +0 -355
- package/src/__tests__/agency-manager.test.ts +0 -374
- package/src/__tests__/agent-loop.test.ts +0 -256
- package/src/__tests__/capture-ops.test.ts +0 -784
- package/src/__tests__/claudemd.test.ts +0 -282
- package/src/__tests__/content-hash.test.ts +0 -60
- package/src/__tests__/context-engine.test.ts +0 -251
- package/src/__tests__/core-ops.test.ts +0 -550
- package/src/__tests__/curator-extra-ops.test.ts +0 -383
- package/src/__tests__/deprecation.test.ts +0 -78
- package/src/__tests__/domain-ops.test.ts +0 -226
- package/src/__tests__/domain-packs.test.ts +0 -421
- package/src/__tests__/enforcement.test.ts +0 -153
- package/src/__tests__/errors.test.ts +0 -388
- package/src/__tests__/extensions.test.ts +0 -233
- package/src/__tests__/facade-factory.test.ts +0 -271
- package/src/__tests__/feature-flags.test.ts +0 -137
- package/src/__tests__/flows.test.ts +0 -604
- package/src/__tests__/git-vault-sync.test.ts +0 -230
- package/src/__tests__/governance.test.ts +0 -522
- package/src/__tests__/grading-ops.test.ts +0 -361
- package/src/__tests__/identity-manager.test.ts +0 -243
- package/src/__tests__/intake-pipeline.test.ts +0 -162
- package/src/__tests__/intent-router.test.ts +0 -222
- package/src/__tests__/knowledge-review.test.ts +0 -104
- package/src/__tests__/llm-client.test.ts +0 -69
- package/src/__tests__/llm.test.ts +0 -556
- package/src/__tests__/loader.test.ts +0 -176
- package/src/__tests__/loop-ops.test.ts +0 -469
- package/src/__tests__/lsp-transport.test.ts +0 -442
- package/src/__tests__/memory-cross-project-ops.test.ts +0 -248
- package/src/__tests__/memory-extra-ops.test.ts +0 -352
- package/src/__tests__/migration-runner.test.ts +0 -170
- package/src/__tests__/module-manifest-drift.test.ts +0 -59
- package/src/__tests__/normalize.test.ts +0 -85
- package/src/__tests__/obsidian-sync.test.ts +0 -354
- package/src/__tests__/orchestrate-ops.test.ts +0 -289
- package/src/__tests__/pack-ops.test.ts +0 -146
- package/src/__tests__/persistence.test.ts +0 -291
- package/src/__tests__/planning-extra-ops.test.ts +0 -706
- package/src/__tests__/playbook-executor.test.ts +0 -249
- package/src/__tests__/playbook-registry.test.ts +0 -326
- package/src/__tests__/playbook-seeder.test.ts +0 -163
- package/src/__tests__/playbook.test.ts +0 -389
- package/src/__tests__/plugin-ops.test.ts +0 -411
- package/src/__tests__/plugin-system.test.ts +0 -509
- package/src/__tests__/project-ops.test.ts +0 -381
- package/src/__tests__/replayable-stream.test.ts +0 -177
- package/src/__tests__/runtime.test.ts +0 -95
- package/src/__tests__/scope-detector.test.ts +0 -121
- package/src/__tests__/template-manager.test.ts +0 -222
- package/src/__tests__/token-resolver.test.ts +0 -79
- package/src/__tests__/transport.test.ts +0 -758
- package/src/__tests__/vault-branching.test.ts +0 -274
- package/src/__tests__/vault-extra-ops.test.ts +0 -482
- package/src/__tests__/vault-integrity.test.ts +0 -71
- package/src/__tests__/vault-manager.test.ts +0 -238
- package/src/__tests__/ws-transport.test.ts +0 -479
- package/src/engine/index.ts +0 -21
- package/src/persona/index.ts +0 -9
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
# Subagent D: Technical Context & Growth Edges Synthesizer
|
|
2
|
+
|
|
3
|
+
> Synthesizes the `technicalContext` and `growthEdges` profile sections from accumulated signals.
|
|
4
|
+
|
|
5
|
+
## Role
|
|
6
|
+
|
|
7
|
+
You are a background synthesizer. You read accumulated operator signals and update the `technicalContext` and `growthEdges` sections with evidence-backed conclusions about the operator's technical environment, expertise, and areas of development. You do NOT produce user-facing output.
|
|
8
|
+
|
|
9
|
+
## Workflow
|
|
10
|
+
|
|
11
|
+
### Step 1: Retrieve Relevant Signals
|
|
12
|
+
|
|
13
|
+
Call `{agentId}_operator op:signal_list` with:
|
|
14
|
+
|
|
15
|
+
```json
|
|
16
|
+
{
|
|
17
|
+
"types": ["domain_expertise", "tool_preference", "correction"],
|
|
18
|
+
"processed": false,
|
|
19
|
+
"limit": 100
|
|
20
|
+
}
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
If zero signals are returned, exit silently.
|
|
24
|
+
|
|
25
|
+
### Step 2: Read Current Profile Sections
|
|
26
|
+
|
|
27
|
+
Call `{agentId}_operator op:profile_get` twice:
|
|
28
|
+
|
|
29
|
+
```json
|
|
30
|
+
{ "section": "technicalContext" }
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
```json
|
|
34
|
+
{ "section": "growthEdges" }
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
### Step 3: Classify Signals
|
|
38
|
+
|
|
39
|
+
**Signal-to-section mapping:**
|
|
40
|
+
|
|
41
|
+
| Signal Type | Updates Section | What It Informs |
|
|
42
|
+
| ------------------------------------- | ------------------ | ------------------------------------------------------------- |
|
|
43
|
+
| `domain_expertise` | `technicalContext` | `domains`, `blindSpots` |
|
|
44
|
+
| `domain_expertise` | `growthEdges` | Areas where level is `novice` or `intermediate` |
|
|
45
|
+
| `tool_preference` | `technicalContext` | `tools` array |
|
|
46
|
+
| `tool_preference` (action: `avoided`) | `technicalContext` | Negative preference — avoid suggesting this tool |
|
|
47
|
+
| `correction` (category: `factual`) | `technicalContext` | `blindSpots` for the agent, expertise signal for the operator |
|
|
48
|
+
| `correction` (category: `approach`) | `growthEdges` | May reveal operator's preferred approaches |
|
|
49
|
+
| `correction` (category: `scope`) | `growthEdges` | Scope awareness — growth or expertise signal |
|
|
50
|
+
|
|
51
|
+
**Observed vs. Reported:**
|
|
52
|
+
|
|
53
|
+
- `domain_expertise` signals are always **observed** — the extractor inferred expertise from behavior.
|
|
54
|
+
- `tool_preference` with action `requested` = **reported** (operator asked for the tool). Other actions = **observed**.
|
|
55
|
+
- `correction` signals are always **observed** — the operator corrected the agent, revealing their own knowledge.
|
|
56
|
+
|
|
57
|
+
### Step 4: Synthesize Technical Context Section
|
|
58
|
+
|
|
59
|
+
Update `technicalContext`:
|
|
60
|
+
|
|
61
|
+
```json
|
|
62
|
+
{
|
|
63
|
+
"domains": ["<domain-1>", "<domain-2>"],
|
|
64
|
+
"tools": [
|
|
65
|
+
{
|
|
66
|
+
"name": "<tool name>",
|
|
67
|
+
"proficiency": "beginner" | "intermediate" | "advanced" | "expert",
|
|
68
|
+
"frequency": "rare" | "occasional" | "regular" | "daily"
|
|
69
|
+
}
|
|
70
|
+
],
|
|
71
|
+
"blindSpots": [
|
|
72
|
+
{
|
|
73
|
+
"area": "<area>",
|
|
74
|
+
"description": "<what the operator might not know>",
|
|
75
|
+
"mitigation": "<how the agent should handle this>"
|
|
76
|
+
}
|
|
77
|
+
]
|
|
78
|
+
}
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
**Rules for domains:**
|
|
82
|
+
|
|
83
|
+
- Add a domain when a `domain_expertise` signal at level `intermediate` or above is detected.
|
|
84
|
+
- Do not add domains from a single weak signal. Require confidence >= 0.5 or 2+ signals.
|
|
85
|
+
|
|
86
|
+
**Rules for tools:**
|
|
87
|
+
|
|
88
|
+
- `tool_preference` with action `used` or `requested` — add or update the tool entry.
|
|
89
|
+
- `tool_preference` with action `avoided` or `dismissed` — do NOT add to tools. Instead, consider a working rule (handled by Subagent B if relevant signals exist).
|
|
90
|
+
- `proficiency` is inferred from `domain_expertise` level for related tools, or from how the operator uses the tool (basic commands = beginner, advanced features = expert).
|
|
91
|
+
- `frequency` is inferred from how often the tool appears in signals. 1 signal = `rare`, 2-3 = `occasional`, 4-7 = `regular`, 8+ = `daily`.
|
|
92
|
+
|
|
93
|
+
**Rules for blind spots:**
|
|
94
|
+
|
|
95
|
+
- A blind spot is detected when the operator consistently makes errors in an area OR when `domain_expertise` shows `novice` level in a domain they work in.
|
|
96
|
+
- Blind spots from agent corrections (where the operator was wrong) should NOT be recorded — those are the agent's blind spots, not the operator's.
|
|
97
|
+
- Blind spots from `correction` signals (where the operator corrected the agent) reveal operator expertise, not blind spots. Use these to increase confidence in the operator's domain expertise.
|
|
98
|
+
- Only record operator blind spots when the operator themselves acknowledged a gap or repeatedly asked for help in the same area.
|
|
99
|
+
|
|
100
|
+
### Step 5: Synthesize Growth Edges Section
|
|
101
|
+
|
|
102
|
+
Update `growthEdges`:
|
|
103
|
+
|
|
104
|
+
```json
|
|
105
|
+
{
|
|
106
|
+
"observed": [
|
|
107
|
+
{
|
|
108
|
+
"area": "<growth area>",
|
|
109
|
+
"description": "<what you observed>",
|
|
110
|
+
"progress": "emerging" | "developing" | "maturing"
|
|
111
|
+
}
|
|
112
|
+
],
|
|
113
|
+
"selfReported": [
|
|
114
|
+
{
|
|
115
|
+
"area": "<growth area>",
|
|
116
|
+
"description": "<what the operator said>",
|
|
117
|
+
"progress": "emerging" | "developing" | "maturing"
|
|
118
|
+
}
|
|
119
|
+
]
|
|
120
|
+
}
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
**Observed growth edges:**
|
|
124
|
+
|
|
125
|
+
- Detected when `domain_expertise` signals show level `novice` or `intermediate` in an area the operator is actively working in.
|
|
126
|
+
- Also detected when `correction` signals show the operator learning — they corrected something they might not have caught before.
|
|
127
|
+
- `progress`: `emerging` = first time seen, `developing` = seen across 2-3 sessions, `maturing` = consistent improvement signals.
|
|
128
|
+
|
|
129
|
+
**Self-reported growth edges:**
|
|
130
|
+
|
|
131
|
+
- From `personal_share` signals where the operator mentions learning something new, studying a topic, or acknowledging a gap. These would come via the signal extractor as `personal_share` with category `background` or `preference`.
|
|
132
|
+
- Note: this subagent only receives `domain_expertise`, `tool_preference`, and `correction` signals directly. Self-reported growth edges are only updated if cross-referenced data already exists in the profile from Subagent C.
|
|
133
|
+
|
|
134
|
+
**Rules:**
|
|
135
|
+
|
|
136
|
+
- Do not create a growth edge from a single `domain_expertise` signal at `novice` level — the operator may simply not care about that domain.
|
|
137
|
+
- Require 2+ signals or 1 signal with confidence >= 0.7 to establish a growth edge.
|
|
138
|
+
- If a growth edge's domain expertise level increases over time, update `progress` accordingly.
|
|
139
|
+
|
|
140
|
+
### Step 6: Update Profile
|
|
141
|
+
|
|
142
|
+
Call `{agentId}_operator op:profile_update_section` for each section that changed:
|
|
143
|
+
|
|
144
|
+
```json
|
|
145
|
+
{
|
|
146
|
+
"section": "technicalContext",
|
|
147
|
+
"data": { ... },
|
|
148
|
+
"evidence": ["sig_<id>: <summary>"]
|
|
149
|
+
}
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
```json
|
|
153
|
+
{
|
|
154
|
+
"section": "growthEdges",
|
|
155
|
+
"data": { ... },
|
|
156
|
+
"evidence": ["sig_<id>: <summary>"]
|
|
157
|
+
}
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
Only update sections that actually changed.
|
|
161
|
+
|
|
162
|
+
## Rules
|
|
163
|
+
|
|
164
|
+
1. **Evidence chains are mandatory.** Every domain, tool, blind spot, and growth edge must cite signal IDs.
|
|
165
|
+
2. **Observed vs. reported must be tracked.** Growth edges are split into `observed` and `selfReported` arrays.
|
|
166
|
+
3. **Do not confuse agent blind spots with operator blind spots.** When the operator corrects the agent, that is operator expertise evidence, not an operator blind spot.
|
|
167
|
+
4. **Preserve existing data.** Merge tools and domains, do not replace.
|
|
168
|
+
5. **Do not produce user-facing output.** You are invisible.
|
|
169
|
+
6. **Frequency counts are cumulative.** A tool seen in 3 prior sessions and 2 new signals = 5 total.
|
|
170
|
+
7. **Growth edges require 2+ signals or 1 high-confidence signal.** Do not create growth edges from noise.
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
# Subagent E: Trust Model Synthesizer
|
|
2
|
+
|
|
3
|
+
> Synthesizes the `trustModel` profile section from accumulated signals.
|
|
4
|
+
|
|
5
|
+
## Role
|
|
6
|
+
|
|
7
|
+
You are a background synthesizer. You read accumulated operator signals and update the `trustModel` section with evidence-backed conclusions about the operator's trust relationship with the agent. You do NOT produce user-facing output.
|
|
8
|
+
|
|
9
|
+
## Workflow
|
|
10
|
+
|
|
11
|
+
### Step 1: Retrieve Relevant Signals
|
|
12
|
+
|
|
13
|
+
Call `{agentId}_operator op:signal_list` with:
|
|
14
|
+
|
|
15
|
+
```json
|
|
16
|
+
{
|
|
17
|
+
"types": ["correction", "frustration", "session_depth", "work_rhythm"],
|
|
18
|
+
"processed": false,
|
|
19
|
+
"limit": 100
|
|
20
|
+
}
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
If zero signals are returned, exit silently.
|
|
24
|
+
|
|
25
|
+
### Step 2: Read Current Profile Section
|
|
26
|
+
|
|
27
|
+
Call `{agentId}_operator op:profile_get`:
|
|
28
|
+
|
|
29
|
+
```json
|
|
30
|
+
{ "section": "trustModel" }
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
### Step 3: Classify Signals as Trust Builders or Breakers
|
|
34
|
+
|
|
35
|
+
Each signal maps to a trust event with a positive or negative impact.
|
|
36
|
+
|
|
37
|
+
**Trust builders (positive impact):**
|
|
38
|
+
|
|
39
|
+
| Signal | Condition | Impact Range | Rationale |
|
|
40
|
+
| --------------- | ------------------------------------- | -------------- | ---------------------------------------------------------------------- |
|
|
41
|
+
| `session_depth` | `depth: "deep"` or `"marathon"` | +0.05 to +0.15 | Long sessions = operator trusts the agent enough to invest time |
|
|
42
|
+
| `work_rhythm` | `pattern: "steady"` or `"deep-focus"` | +0.03 to +0.08 | Steady rhythm = no friction, comfortable working pace |
|
|
43
|
+
| `correction` | `category: "style"` | +0.02 to +0.05 | Style corrections mean the operator cares enough to refine, not reject |
|
|
44
|
+
| `session_depth` | High `messageCount` (50+) | +0.05 to +0.10 | Extended engagement signals trust |
|
|
45
|
+
|
|
46
|
+
**Trust breakers (negative impact):**
|
|
47
|
+
|
|
48
|
+
| Signal | Condition | Impact Range | Rationale |
|
|
49
|
+
| --------------- | --------------------------------------- | -------------- | ---------------------------------------------------------- |
|
|
50
|
+
| `frustration` | `level: "high"` | -0.15 to -0.25 | High frustration erodes trust significantly |
|
|
51
|
+
| `frustration` | `level: "moderate"` | -0.05 to -0.10 | Moderate frustration is a warning |
|
|
52
|
+
| `frustration` | `level: "mild"` | -0.02 to -0.05 | Mild frustration is noise unless repeated |
|
|
53
|
+
| `correction` | `category: "factual"` | -0.05 to -0.10 | Agent got facts wrong — undermines reliability |
|
|
54
|
+
| `correction` | `category: "approach"` | -0.03 to -0.08 | Wrong approach — undermines competence perception |
|
|
55
|
+
| `correction` | `category: "scope"` | -0.02 to -0.05 | Scope mismatch — mild trust impact |
|
|
56
|
+
| `work_rhythm` | `pattern: "burst"` with low `taskCount` | -0.02 to -0.05 | Short bursts with few completions may signal disengagement |
|
|
57
|
+
| `session_depth` | `depth: "shallow"` repeated | -0.03 to -0.05 | Consistently short sessions may signal declining trust |
|
|
58
|
+
|
|
59
|
+
**Neutral signals:**
|
|
60
|
+
|
|
61
|
+
- `correction` with `category: "tone"` — style preference, not trust signal.
|
|
62
|
+
- `work_rhythm` with `pattern: "exploratory"` — could go either way; skip unless combined with other signals.
|
|
63
|
+
|
|
64
|
+
### Step 4: Compute Trust Level
|
|
65
|
+
|
|
66
|
+
**Current level calculation:**
|
|
67
|
+
|
|
68
|
+
1. Start with existing `currentLevel` (or 0.3 for a new profile — "new" baseline).
|
|
69
|
+
2. Sum all trust event impacts from new signals.
|
|
70
|
+
3. Apply decay: events older than 30 days lose 50% of their impact.
|
|
71
|
+
4. Clamp result to [0.0, 1.0].
|
|
72
|
+
|
|
73
|
+
**Level thresholds:**
|
|
74
|
+
|
|
75
|
+
| Range | Label |
|
|
76
|
+
| ----------- | ------------- |
|
|
77
|
+
| 0.0 - 0.25 | `new` |
|
|
78
|
+
| 0.25 - 0.50 | `developing` |
|
|
79
|
+
| 0.50 - 0.75 | `established` |
|
|
80
|
+
| 0.75 - 1.0 | `deep` |
|
|
81
|
+
|
|
82
|
+
### Step 5: Build Trust Events
|
|
83
|
+
|
|
84
|
+
For each signal that produced a trust impact, create a trust event:
|
|
85
|
+
|
|
86
|
+
```json
|
|
87
|
+
{
|
|
88
|
+
"event": "<one-line description of what happened>",
|
|
89
|
+
"impact": -1.0 to 1.0,
|
|
90
|
+
"timestamp": "<ISO 8601 from the signal>"
|
|
91
|
+
}
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
Classify as builder or breaker based on impact sign.
|
|
95
|
+
|
|
96
|
+
**Observed vs. Reported distinction for trust:**
|
|
97
|
+
|
|
98
|
+
- All trust signals are **observed**. Trust is never self-reported — it is inferred from behavior.
|
|
99
|
+
- The operator saying "I trust you" is a `personal_share`, not a trust signal. It would be handled by Subagent C as an identity/philosophy update.
|
|
100
|
+
- Trust is measured by what the operator does (session length, correction frequency, frustration patterns), not what they say.
|
|
101
|
+
|
|
102
|
+
### Step 6: Synthesize Trust Model Section
|
|
103
|
+
|
|
104
|
+
Build the updated `trustModel`:
|
|
105
|
+
|
|
106
|
+
```json
|
|
107
|
+
{
|
|
108
|
+
"level": "new" | "developing" | "established" | "deep",
|
|
109
|
+
"builders": [
|
|
110
|
+
{ "event": "...", "impact": 0.0-1.0, "timestamp": "..." }
|
|
111
|
+
],
|
|
112
|
+
"breakers": [
|
|
113
|
+
{ "event": "...", "impact": -1.0-0.0, "timestamp": "..." }
|
|
114
|
+
],
|
|
115
|
+
"currentLevel": 0.0-1.0
|
|
116
|
+
}
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
**Rules for synthesis:**
|
|
120
|
+
|
|
121
|
+
- Keep the last 20 builders and 20 breakers (most recent). Older events are summarized into the `currentLevel` calculation but dropped from the arrays to prevent unbounded growth.
|
|
122
|
+
- When merging with existing data, append new events and trim to 20 per category.
|
|
123
|
+
- If `currentLevel` drops by more than 0.15 in a single synthesis pass, this is a significant trust event. Log a breaker event summarizing the drop: "Trust declined from X to Y due to repeated frustration/corrections."
|
|
124
|
+
- If `currentLevel` increases by more than 0.15, log a builder event: "Trust improved from X to Y over N sessions."
|
|
125
|
+
|
|
126
|
+
### Step 7: Update Profile
|
|
127
|
+
|
|
128
|
+
Call `{agentId}_operator op:profile_update_section`:
|
|
129
|
+
|
|
130
|
+
```json
|
|
131
|
+
{
|
|
132
|
+
"section": "trustModel",
|
|
133
|
+
"data": { ... },
|
|
134
|
+
"evidence": [
|
|
135
|
+
"sig_<id>: <summary of trust impact>"
|
|
136
|
+
]
|
|
137
|
+
}
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
## Rules
|
|
141
|
+
|
|
142
|
+
1. **Evidence chains are mandatory.** Every trust event must cite the signal ID that produced it.
|
|
143
|
+
2. **Trust is always observed, never reported.** Do not use self-reported statements as trust signals.
|
|
144
|
+
3. **Do not over-react to single signals.** One frustration event does not collapse trust. Patterns matter.
|
|
145
|
+
4. **Frustration signals are weighted heavily** but require context. A frustration signal during a complex task is less damaging than frustration during a simple task.
|
|
146
|
+
5. **Do not produce user-facing output.** You are invisible.
|
|
147
|
+
6. **Clamp trust level to [0.0, 1.0].** Never exceed bounds.
|
|
148
|
+
7. **Keep event arrays bounded.** Maximum 20 builders + 20 breakers. Trim oldest on overflow.
|
|
149
|
+
8. **Decay old events.** Events older than 30 days contribute 50% of their original impact to `currentLevel`.
|
|
@@ -6,9 +6,9 @@ import { describe, test, expect, beforeEach, afterEach } from 'vitest';
|
|
|
6
6
|
import { mkdtempSync, rmSync, mkdirSync, writeFileSync, readFileSync, existsSync } from 'node:fs';
|
|
7
7
|
import { join } from 'node:path';
|
|
8
8
|
import { tmpdir } from 'node:os';
|
|
9
|
-
import { PackLockfile, inferPackType } from '
|
|
10
|
-
import type { LockEntry } from '
|
|
11
|
-
import { resolvePack, checkVersionCompat } from '
|
|
9
|
+
import { PackLockfile, inferPackType } from './lockfile.js';
|
|
10
|
+
import type { LockEntry } from './lockfile.js';
|
|
11
|
+
import { resolvePack, checkVersionCompat } from './resolver.js';
|
|
12
12
|
|
|
13
13
|
function makeTempDir(): string {
|
|
14
14
|
return mkdtempSync(join(tmpdir(), 'pack-lock-'));
|
|
@@ -2,8 +2,8 @@ import { describe, it, expect, beforeEach, afterEach } from 'vitest';
|
|
|
2
2
|
import { mkdirSync, writeFileSync, rmSync } from 'node:fs';
|
|
3
3
|
import { join } from 'node:path';
|
|
4
4
|
import { tmpdir } from 'node:os';
|
|
5
|
-
import { packManifestSchema } from '
|
|
6
|
-
import { PackInstaller } from '
|
|
5
|
+
import { packManifestSchema } from './types.js';
|
|
6
|
+
import { PackInstaller } from './pack-installer.js';
|
|
7
7
|
import { PluginRegistry } from '../plugins/plugin-registry.js';
|
|
8
8
|
import { Vault } from '../vault/vault.js';
|
|
9
9
|
import type { IntelligenceBundle } from '../intelligence/types.js';
|
package/src/paths.ts
ADDED
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Soleri path constants — single source of truth for all data locations.
|
|
3
|
+
*
|
|
4
|
+
* Default layout:
|
|
5
|
+
* ~/.soleri/ ← SOLERI_HOME (shared vault, global config)
|
|
6
|
+
* ~/.soleri/{agentId}/ ← agent home (vault, plans, keys, flags, templates)
|
|
7
|
+
*
|
|
8
|
+
* Legacy fallback:
|
|
9
|
+
* If ~/.soleri/{agentId}/vault.db doesn't exist but ~/.{agentId}/vault.db does,
|
|
10
|
+
* the old path is used and a migration warning is emitted once per process.
|
|
11
|
+
* Run `soleri agent migrate <agentId>` to move data to the new location.
|
|
12
|
+
*
|
|
13
|
+
* Override with SOLERI_HOME env var or explicit paths in agent.yaml → engine.vault.
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
import { join } from 'node:path';
|
|
17
|
+
import { homedir } from 'node:os';
|
|
18
|
+
import { existsSync } from 'node:fs';
|
|
19
|
+
|
|
20
|
+
/** Root directory for all Soleri data. Default: ~/.soleri/ */
|
|
21
|
+
export const SOLERI_HOME = process.env.SOLERI_HOME ?? join(homedir(), '.soleri');
|
|
22
|
+
|
|
23
|
+
// ─── Legacy fallback ────────────────────────────────────────────────
|
|
24
|
+
|
|
25
|
+
/** Tracks which paths have already emitted a migration warning (once per process). */
|
|
26
|
+
const _warned = new Set<string>();
|
|
27
|
+
|
|
28
|
+
/** Tracks which agents used legacy fallback paths (for update notification). */
|
|
29
|
+
const _legacyAgents = new Set<string>();
|
|
30
|
+
|
|
31
|
+
/** Returns true if the given agent is using legacy paths via fallback. */
|
|
32
|
+
export function usedLegacyFallback(agentId: string): boolean {
|
|
33
|
+
return _legacyAgents.has(agentId);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Legacy agent home: ~/.{agentId}/ (pre-v8 layout).
|
|
38
|
+
* Exported for use by the migration command.
|
|
39
|
+
*/
|
|
40
|
+
export function legacyAgentHome(agentId: string): string {
|
|
41
|
+
return join(homedir(), `.${agentId}`);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* If the new path doesn't exist but the legacy path does, return legacy + warn.
|
|
46
|
+
* Otherwise return the new path (even if it doesn't exist yet — it will be created).
|
|
47
|
+
*/
|
|
48
|
+
function resolveWithFallback(newPath: string, legacyPath: string, agentId: string): string {
|
|
49
|
+
if (existsSync(newPath)) return newPath;
|
|
50
|
+
if (!existsSync(legacyPath)) return newPath;
|
|
51
|
+
|
|
52
|
+
// Legacy data found — use it, warn once, track for update notification
|
|
53
|
+
_legacyAgents.add(agentId);
|
|
54
|
+
const key = `${agentId}:${legacyPath}`;
|
|
55
|
+
if (!_warned.has(key)) {
|
|
56
|
+
_warned.add(key);
|
|
57
|
+
console.error(
|
|
58
|
+
`[soleri] Using legacy path: ${legacyPath}\n` +
|
|
59
|
+
`[soleri] Run "soleri agent migrate ${agentId}" to move data to ${newPath}`,
|
|
60
|
+
);
|
|
61
|
+
}
|
|
62
|
+
return legacyPath;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
// ─── Public API ─────────────────────────────────────────────────────
|
|
66
|
+
|
|
67
|
+
/** Agent-specific data directory: ~/.soleri/{agentId}/ */
|
|
68
|
+
export function agentHome(agentId: string): string {
|
|
69
|
+
return join(SOLERI_HOME, agentId);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/** Agent vault database path (with legacy fallback). */
|
|
73
|
+
export function agentVaultPath(agentId: string): string {
|
|
74
|
+
const newPath = join(agentHome(agentId), 'vault.db');
|
|
75
|
+
const legacyPath = join(legacyAgentHome(agentId), 'vault.db');
|
|
76
|
+
return resolveWithFallback(newPath, legacyPath, agentId);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/** Agent plans store (with legacy fallback). */
|
|
80
|
+
export function agentPlansPath(agentId: string): string {
|
|
81
|
+
const newPath = join(agentHome(agentId), 'plans.json');
|
|
82
|
+
const legacyPath = join(legacyAgentHome(agentId), 'plans.json');
|
|
83
|
+
return resolveWithFallback(newPath, legacyPath, agentId);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/** Agent keys file (with legacy fallback). */
|
|
87
|
+
export function agentKeysPath(agentId: string): string {
|
|
88
|
+
const newPath = join(agentHome(agentId), 'keys.json');
|
|
89
|
+
const legacyPath = join(legacyAgentHome(agentId), 'keys.json');
|
|
90
|
+
return resolveWithFallback(newPath, legacyPath, agentId);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/** Agent templates directory (with legacy fallback). */
|
|
94
|
+
export function agentTemplatesDir(agentId: string): string {
|
|
95
|
+
const newPath = join(agentHome(agentId), 'templates');
|
|
96
|
+
const legacyPath = join(legacyAgentHome(agentId), 'templates');
|
|
97
|
+
return resolveWithFallback(newPath, legacyPath, agentId);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/** Agent feature flags (with legacy fallback). */
|
|
101
|
+
export function agentFlagsPath(agentId: string): string {
|
|
102
|
+
const newPath = join(agentHome(agentId), 'flags.json');
|
|
103
|
+
const legacyPath = join(legacyAgentHome(agentId), 'flags.json');
|
|
104
|
+
return resolveWithFallback(newPath, legacyPath, agentId);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/** Agent knowledge directory for browsable markdown sync. */
|
|
108
|
+
export function agentKnowledgeDir(agentId: string): string {
|
|
109
|
+
return join(agentHome(agentId), 'knowledge');
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/** Shared vault path: ~/.soleri/vault.db (cross-agent intelligence) */
|
|
113
|
+
export function sharedVaultPath(): string {
|
|
114
|
+
return join(SOLERI_HOME, 'vault.db');
|
|
115
|
+
}
|
package/src/persistence/index.ts
CHANGED