vgxness 1.20.4 → 1.20.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/adapters/claude/agent-renderer.js +82 -0
- package/dist/{mcp → adapters/claude/install}/claude-code-agent-config.js +64 -9
- package/dist/{mcp → adapters/claude/install}/claude-code-config.js +28 -6
- package/dist/{mcp → adapters/claude/install}/claude-code-project-memory.js +35 -5
- package/dist/{mcp → adapters/claude/install}/claude-code-scope.js +12 -3
- package/dist/{mcp → adapters/claude/install}/claude-code-user-config.js +26 -5
- package/dist/{mcp → adapters/claude/install}/claude-code-user-memory.js +47 -7
- package/dist/{mcp → adapters/claude/install}/client-install-claude-code-contract.js +45 -8
- package/dist/{mcp → adapters/claude/install}/client-install-claude-code.js +98 -14
- package/dist/adapters/json/agent-renderer.js +104 -0
- package/dist/adapters/opencode/agent-renderer.js +113 -0
- package/dist/{mcp → adapters/opencode/install}/client-install-opencode-contract.js +2 -2
- package/dist/{mcp → adapters/opencode/install}/client-install-opencode.js +1 -1
- package/dist/{mcp → adapters/opencode/install}/opencode-default-agent-config.js +2 -2
- package/dist/{mcp → adapters/opencode/install}/opencode-handoff-preview.js +60 -7
- package/dist/{mcp → adapters/opencode/install}/opencode-visibility.js +1 -1
- package/dist/adapters/provider-renderer.js +6 -0
- package/dist/agents/agent-activation-service.js +1 -263
- package/dist/agents/agent-lookup-contexts.js +1 -28
- package/dist/agents/agent-registry-service.js +1 -81
- package/dist/agents/agent-resolver.js +1 -287
- package/dist/agents/agent-seed-service.js +1 -157
- package/dist/agents/agent-seed-upgrade-service.js +1 -231
- package/dist/agents/agent-selector-resolver.js +1 -28
- package/dist/agents/boot-upgrade.js +1 -59
- package/dist/agents/canonical-agent-manifest.js +1 -245
- package/dist/agents/canonical-agent-projection.js +1 -236
- package/dist/agents/manager-profile-overlay-service.js +1 -60
- package/dist/agents/profile-model-routing.js +1 -30
- package/dist/agents/renderers/claude-renderer.js +1 -82
- package/dist/agents/renderers/index.js +1 -14
- package/dist/agents/renderers/json-renderer.js +1 -104
- package/dist/agents/renderers/opencode-renderer.js +1 -113
- package/dist/agents/renderers/provider-adapter.js +1 -6
- package/dist/agents/repositories/agent-seed-history.js +1 -128
- package/dist/agents/repositories/agents.js +1 -200
- package/dist/agents/repositories/manager-profile-overlays.js +1 -90
- package/dist/agents/schema.js +1 -1
- package/dist/application/agents/agent-activation-service.js +261 -0
- package/dist/application/agents/agent-lookup-contexts.js +28 -0
- package/dist/application/agents/agent-registry-service.js +81 -0
- package/dist/application/agents/agent-resolver.js +287 -0
- package/dist/application/agents/agent-seed-service.js +157 -0
- package/dist/application/agents/agent-seed-upgrade-service.js +231 -0
- package/dist/application/agents/agent-selector-resolver.js +28 -0
- package/dist/application/agents/boot-upgrade.js +59 -0
- package/dist/application/agents/canonical-agent-projection.js +236 -0
- package/dist/application/agents/manager-profile-overlay-service.js +68 -0
- package/dist/application/agents/profile-model-routing.js +30 -0
- package/dist/application/agents/renderers/claude-renderer.js +1 -0
- package/dist/application/agents/renderers/index.js +14 -0
- package/dist/application/agents/renderers/json-renderer.js +1 -0
- package/dist/application/agents/renderers/opencode-renderer.js +1 -0
- package/dist/application/agents/renderers/provider-adapter.js +1 -0
- package/dist/application/memory/active-work-preview.js +75 -0
- package/dist/application/memory/agent-memory-capture-service.js +498 -0
- package/dist/application/memory/import/dry-run-planner.js +58 -0
- package/dist/application/memory/import/index.js +3 -0
- package/dist/application/memory/import/observation-writer.js +226 -0
- package/dist/application/memory/import/package.js +179 -0
- package/dist/application/memory/memory-service.js +202 -0
- package/dist/application/memory/search.js +11 -0
- package/dist/{mcp → application/provider-setup}/provider-change-plan.js +74 -13
- package/dist/{mcp → application/provider-setup}/provider-doctor.js +201 -31
- package/dist/{mcp → application/provider-setup}/provider-health-types.js +1 -1
- package/dist/{mcp → application/provider-setup}/provider-status.js +170 -33
- package/dist/application/runs/execution-planning.js +180 -0
- package/dist/application/runs/operation-execution.js +1 -0
- package/dist/application/runs/operation-retry.js +129 -0
- package/dist/application/runs/resume-after-approval-result.js +88 -0
- package/dist/application/runs/run-insights.js +270 -0
- package/dist/application/runs/run-service.js +1480 -0
- package/dist/application/runs/run-snapshot-export-service.js +31 -0
- package/dist/application/runs/sandbox-process-execution.js +244 -0
- package/dist/application/runs/sandbox-worktree-planning.js +59 -0
- package/dist/application/runs/task-scoped-command-grant-service.js +224 -0
- package/dist/application/sdd/artifact-portability-service.js +137 -0
- package/dist/application/sdd/cockpit-read-model.js +195 -0
- package/dist/application/sdd/sdd-continuation-plan.js +265 -0
- package/dist/application/sdd/sdd-workflow-service.js +892 -0
- package/dist/application/skills/boot-seed.js +42 -0
- package/dist/application/skills/personal-skills.js +41 -0
- package/dist/application/skills/skill-export-service.js +34 -0
- package/dist/application/skills/skill-index-service.js +126 -0
- package/dist/application/skills/skill-payload.js +186 -0
- package/dist/application/skills/skill-registry-service.js +648 -0
- package/dist/application/skills/skill-resolver.js +368 -0
- package/dist/application/skills/skill-seed-service.js +242 -0
- package/dist/application/skills/skill-status-service.js +147 -0
- package/dist/cli/bun-bin.js +0 -0
- package/dist/cli/cli-flags.js +1 -387
- package/dist/cli/cli-help.js +1 -173
- package/dist/cli/cli-helpers.js +1 -77
- package/dist/cli/cli-types.js +1 -1
- package/dist/cli/commands/agent-skill-dispatcher.js +1 -700
- package/dist/cli/commands/index.js +1 -9
- package/dist/cli/commands/interactive-entrypoint-dispatcher.js +1 -14
- package/dist/cli/commands/mcp-dispatcher.js +1 -232
- package/dist/cli/commands/memory-sdd-dispatcher.js +1 -367
- package/dist/cli/commands/run-permission-dispatcher.js +1 -455
- package/dist/cli/commands/setup-dispatcher.js +1 -496
- package/dist/cli/commands/status-dispatcher.js +1 -130
- package/dist/cli/commands/verification-dispatcher.js +1 -47
- package/dist/cli/commands/workflow-dispatcher.js +1 -566
- package/dist/cli/dispatcher.js +1 -247
- package/dist/cli/doctor-renderer.js +1 -26
- package/dist/cli/home-tui-app.js +1 -411
- package/dist/cli/home-tui-controller.js +1 -314
- package/dist/cli/mcp-start-path.js +1 -21
- package/dist/cli/product-resume-renderer.js +1 -32
- package/dist/cli/product-status-renderer.js +1 -81
- package/dist/cli/sdd-renderer.js +1 -247
- package/dist/cli/setup-plan-renderer.js +1 -79
- package/dist/cli/setup-status-renderer.js +1 -50
- package/dist/cli/setup-tui-app.js +1 -130
- package/dist/cli/setup-tui-controller.js +1 -89
- package/dist/cli/tui/focus-reducer.js +1 -0
- package/dist/cli/tui/focus-types.js +1 -0
- package/dist/cli/tui/ink/app-shell.js +1 -0
- package/dist/cli/tui/ink/components.js +1 -38
- package/dist/cli/tui/ink/help-overlay.js +1 -0
- package/dist/cli/tui/ink/state-components.js +1 -0
- package/dist/cli/tui/ink/theme.js +1 -36
- package/dist/cli/tui/key-intents.js +1 -0
- package/dist/cli/tui/keymap.js +1 -20
- package/dist/cli/tui/navigation.js +1 -10
- package/dist/cli/tui/screen-registry.js +1 -0
- package/dist/cli/tui/terminal-capabilities.js +1 -12
- package/dist/cli/tui/tui-types.js +1 -1
- package/dist/cli/tui/visual/badges.js +1 -19
- package/dist/cli/tui/visual/footer.js +1 -27
- package/dist/cli/tui/visual/index.js +1 -3
- package/dist/cli/tui/visual/viewport.js +1 -11
- package/dist/cli/tui-render-helpers.js +1 -200
- package/dist/cli/verification-plan-renderer.js +1 -25
- package/dist/cli/verification-report-renderer.js +1 -19
- package/dist/domain/agents/canonical-agent-manifest.js +355 -0
- package/dist/domain/agents/schema.js +1 -0
- package/dist/domain/memory/active-work-topics.js +64 -0
- package/dist/domain/memory/memory-capture-schema.js +1 -0
- package/dist/domain/memory/schema.js +1 -0
- package/dist/domain/runs/schema.js +5 -0
- package/dist/domain/sdd/cockpit-types.js +1 -0
- package/dist/domain/sdd/schema.js +111 -0
- package/dist/domain/skills/schema.js +1 -0
- package/dist/governance/risk-classifier.js +2 -0
- package/dist/interfaces/cli/bun-bin.js +46 -0
- package/dist/interfaces/cli/cli-flags.js +391 -0
- package/dist/interfaces/cli/cli-help.js +173 -0
- package/dist/interfaces/cli/cli-helpers.js +77 -0
- package/dist/interfaces/cli/cli-types.js +1 -0
- package/dist/interfaces/cli/commands/agent-skill-dispatcher.js +700 -0
- package/dist/interfaces/cli/commands/index.js +9 -0
- package/dist/interfaces/cli/commands/interactive-entrypoint-dispatcher.js +14 -0
- package/dist/interfaces/cli/commands/mcp-dispatcher.js +252 -0
- package/dist/interfaces/cli/commands/memory-sdd-dispatcher.js +367 -0
- package/dist/interfaces/cli/commands/run-permission-dispatcher.js +460 -0
- package/dist/interfaces/cli/commands/setup-dispatcher.js +496 -0
- package/dist/interfaces/cli/commands/status-dispatcher.js +130 -0
- package/dist/interfaces/cli/commands/verification-dispatcher.js +47 -0
- package/dist/interfaces/cli/commands/workflow-dispatcher.js +566 -0
- package/dist/interfaces/cli/dispatcher.js +247 -0
- package/dist/interfaces/cli/doctor-renderer.js +26 -0
- package/dist/interfaces/cli/home-tui-app.js +462 -0
- package/dist/interfaces/cli/home-tui-controller.js +341 -0
- package/dist/interfaces/cli/index.js +27 -0
- package/dist/interfaces/cli/mcp-start-path.js +21 -0
- package/dist/interfaces/cli/product-resume-renderer.js +32 -0
- package/dist/interfaces/cli/product-status-renderer.js +81 -0
- package/dist/interfaces/cli/sdd-renderer.js +247 -0
- package/dist/interfaces/cli/setup-plan-renderer.js +79 -0
- package/dist/interfaces/cli/setup-status-renderer.js +50 -0
- package/dist/interfaces/cli/setup-tui-app.js +135 -0
- package/dist/interfaces/cli/setup-tui-controller.js +89 -0
- package/dist/interfaces/cli/tui/focus-reducer.js +60 -0
- package/dist/interfaces/cli/tui/focus-types.js +10 -0
- package/dist/interfaces/cli/tui/ink/app-shell.js +16 -0
- package/dist/interfaces/cli/tui/ink/components.js +38 -0
- package/dist/interfaces/cli/tui/ink/help-overlay.js +6 -0
- package/dist/interfaces/cli/tui/ink/state-components.js +22 -0
- package/dist/interfaces/cli/tui/ink/theme.js +36 -0
- package/dist/interfaces/cli/tui/key-intents.js +33 -0
- package/dist/interfaces/cli/tui/keymap.js +20 -0
- package/dist/interfaces/cli/tui/navigation.js +10 -0
- package/dist/interfaces/cli/tui/screen-registry.js +43 -0
- package/dist/interfaces/cli/tui/terminal-capabilities.js +12 -0
- package/dist/interfaces/cli/tui/tui-types.js +1 -0
- package/dist/interfaces/cli/tui/visual/badges.js +19 -0
- package/dist/interfaces/cli/tui/visual/footer.js +27 -0
- package/dist/interfaces/cli/tui/visual/index.js +3 -0
- package/dist/interfaces/cli/tui/visual/viewport.js +11 -0
- package/dist/interfaces/cli/tui-render-helpers.js +200 -0
- package/dist/interfaces/cli/verification-plan-renderer.js +25 -0
- package/dist/interfaces/cli/verification-report-renderer.js +19 -0
- package/dist/interfaces/mcp/contracts/agents.js +1 -0
- package/dist/interfaces/mcp/contracts/context.js +1 -0
- package/dist/interfaces/mcp/contracts/governance.js +1 -0
- package/dist/interfaces/mcp/contracts/index.js +1 -0
- package/dist/interfaces/mcp/contracts/memory.js +1 -0
- package/dist/interfaces/mcp/contracts/providers.js +1 -0
- package/dist/interfaces/mcp/contracts/runs.js +1 -0
- package/dist/interfaces/mcp/contracts/sdd.js +1 -0
- package/dist/interfaces/mcp/contracts/sessions.js +1 -0
- package/dist/interfaces/mcp/contracts/skills.js +1 -0
- package/dist/interfaces/mcp/contracts/verification.js +1 -0
- package/dist/interfaces/mcp/control-plane/handlers/agents.js +38 -0
- package/dist/interfaces/mcp/control-plane/handlers/context.js +12 -0
- package/dist/interfaces/mcp/control-plane/handlers/memory.js +95 -0
- package/dist/interfaces/mcp/control-plane/handlers/providers.js +19 -0
- package/dist/interfaces/mcp/control-plane/handlers/runs.js +134 -0
- package/dist/interfaces/mcp/control-plane/handlers/sdd.js +225 -0
- package/dist/interfaces/mcp/control-plane/handlers/sessions.js +39 -0
- package/dist/interfaces/mcp/control-plane/handlers/skills.js +82 -0
- package/dist/interfaces/mcp/control-plane/handlers/verification.js +11 -0
- package/dist/interfaces/mcp/control-plane/types.js +1 -0
- package/dist/interfaces/mcp/control-plane.js +235 -0
- package/dist/interfaces/mcp/schema.js +174 -0
- package/dist/interfaces/mcp/schemas/common.js +121 -0
- package/dist/interfaces/mcp/schemas/inputs/agents.js +69 -0
- package/dist/interfaces/mcp/schemas/inputs/context.js +32 -0
- package/dist/interfaces/mcp/schemas/inputs/governance.js +23 -0
- package/dist/interfaces/mcp/schemas/inputs/index.js +10 -0
- package/dist/interfaces/mcp/schemas/inputs/memory.js +50 -0
- package/dist/interfaces/mcp/schemas/inputs/providers.js +35 -0
- package/dist/interfaces/mcp/schemas/inputs/runs.js +146 -0
- package/dist/interfaces/mcp/schemas/inputs/sdd.js +102 -0
- package/dist/interfaces/mcp/schemas/inputs/sessions.js +32 -0
- package/dist/interfaces/mcp/schemas/inputs/skills.js +231 -0
- package/dist/interfaces/mcp/schemas/inputs/verification.js +9 -0
- package/dist/interfaces/mcp/schemas/outputs/index.js +2 -0
- package/dist/interfaces/mcp/schemas/outputs/providers.js +28 -0
- package/dist/interfaces/mcp/schemas/outputs/sdd.js +166 -0
- package/dist/interfaces/mcp/stdio-server.js +116 -0
- package/dist/interfaces/mcp/validation/agents.js +189 -0
- package/dist/interfaces/mcp/validation/common.js +415 -0
- package/dist/interfaces/mcp/validation/governance.js +50 -0
- package/dist/interfaces/mcp/validation/memory.js +133 -0
- package/dist/interfaces/mcp/validation/providers.js +94 -0
- package/dist/interfaces/mcp/validation/runs.js +514 -0
- package/dist/interfaces/mcp/validation/sdd.js +247 -0
- package/dist/interfaces/mcp/validation/sessions.js +51 -0
- package/dist/interfaces/mcp/validation/skills.js +685 -0
- package/dist/interfaces/mcp/validation/verification.js +24 -0
- package/dist/interfaces/mcp/validation.js +149 -0
- package/dist/mcp/control-plane-snapshot-service.js +65 -2
- package/dist/mcp/control-plane.js +1 -646
- package/dist/mcp/doctor.js +1 -1
- package/dist/mcp/index.js +17 -17
- package/dist/mcp/schema.js +1 -1072
- package/dist/mcp/stdio-server.js +1 -116
- package/dist/mcp/validation.js +1 -2239
- package/dist/memory/active-work-preview.js +1 -75
- package/dist/memory/active-work-topics.js +1 -64
- package/dist/memory/agent-memory-capture-service.js +1 -497
- package/dist/memory/import/dry-run-planner.js +1 -58
- package/dist/memory/import/index.js +1 -3
- package/dist/memory/import/observation-writer.js +1 -226
- package/dist/memory/import/package.js +1 -179
- package/dist/memory/memory-capture-schema.js +1 -1
- package/dist/memory/memory-service.js +1 -201
- package/dist/memory/repositories/artifacts.js +1 -67
- package/dist/memory/repositories/observations.js +1 -217
- package/dist/memory/repositories/sessions.js +1 -125
- package/dist/memory/repositories/traces.js +1 -78
- package/dist/memory/schema.js +1 -1
- package/dist/memory/search.js +1 -11
- package/dist/memory/sqlite/database.js +1 -228
- package/dist/memory/storage-paths.js +1 -72
- package/dist/payload/context-budget-policy.js +10 -0
- package/dist/payload/context-budget-service.js +26 -0
- package/dist/payload/payload-diagnostics.js +50 -0
- package/dist/permissions/explicit-request-authorization.js +126 -0
- package/dist/permissions/policy-evaluator.js +54 -14
- package/dist/runs/execution-planning.js +1 -178
- package/dist/runs/operation-execution.js +1 -1
- package/dist/runs/operation-retry.js +1 -129
- package/dist/runs/repositories/runs.js +1 -676
- package/dist/runs/repositories/task-scoped-command-grants.js +1 -462
- package/dist/runs/resume-after-approval-result.js +1 -84
- package/dist/runs/run-insights.js +1 -270
- package/dist/runs/run-service.js +1 -1439
- package/dist/runs/run-snapshot-export-service.js +1 -31
- package/dist/runs/sandbox-process-execution.js +1 -240
- package/dist/runs/sandbox-worktree-planning.js +1 -59
- package/dist/runs/schema.js +1 -5
- package/dist/runs/task-scoped-command-grant-service.js +1 -216
- package/dist/sdd/artifact-portability-service.js +1 -137
- package/dist/sdd/cockpit-read-model.js +1 -195
- package/dist/sdd/cockpit-types.js +1 -1
- package/dist/sdd/schema.js +1 -111
- package/dist/sdd/sdd-continuation-plan.js +1 -265
- package/dist/sdd/sdd-workflow-service.js +1 -822
- package/dist/setup/providers/claude-setup-adapter.js +11 -4
- package/dist/setup/providers/opencode-setup-adapter.js +10 -7
- package/dist/setup/setup-plan.js +20 -7
- package/dist/skills/boot-seed.js +1 -42
- package/dist/skills/personal-skills.js +1 -41
- package/dist/skills/repositories/skill-evaluation-requests.js +1 -190
- package/dist/skills/repositories/skill-evaluation-scenarios.js +1 -305
- package/dist/skills/repositories/skill-improvement-proposals.js +1 -355
- package/dist/skills/repositories/skills.js +1 -1077
- package/dist/skills/schema.js +1 -1
- package/dist/skills/skill-export-service.js +1 -34
- package/dist/skills/skill-index-service.js +1 -126
- package/dist/skills/skill-payload.js +1 -186
- package/dist/skills/skill-registry-service.js +1 -644
- package/dist/skills/skill-resolver.js +1 -368
- package/dist/skills/skill-seed-service.js +1 -242
- package/dist/skills/skill-status-service.js +1 -147
- package/dist/storage/agents/repositories/agent-seed-history.js +128 -0
- package/dist/storage/agents/repositories/agents.js +200 -0
- package/dist/storage/agents/repositories/manager-profile-overlays.js +90 -0
- package/dist/storage/memory/repositories/artifacts.js +67 -0
- package/dist/storage/memory/repositories/observations.js +217 -0
- package/dist/storage/memory/repositories/sessions.js +125 -0
- package/dist/storage/memory/repositories/traces.js +78 -0
- package/dist/storage/memory/sqlite/database.js +228 -0
- package/dist/storage/memory/storage-paths.js +72 -0
- package/dist/storage/runs/repositories/runs.js +676 -0
- package/dist/storage/runs/repositories/task-scoped-command-grants.js +464 -0
- package/dist/storage/skills/repositories/skill-evaluation-requests.js +190 -0
- package/dist/storage/skills/repositories/skill-evaluation-scenarios.js +305 -0
- package/dist/storage/skills/repositories/skill-improvement-proposals.js +355 -0
- package/dist/storage/skills/repositories/skills.js +1084 -0
- package/docs/architecture.md +2 -2
- package/docs/glossary.md +1 -1
- package/docs/mcp.md +1 -1
- package/docs/module-boundaries.md +114 -0
- package/docs/prd.md +1 -1
- package/docs/project-health-audit-v1.10.x.md +1 -1
- package/docs/providers.md +2 -2
- package/docs/safety.md +3 -3
- package/docs/sdd/archive/2026-06-26-ambitious-structure-reorganization/apply-progress.md +122 -0
- package/docs/sdd/archive/2026-06-26-ambitious-structure-reorganization/archive-report.md +61 -0
- package/docs/sdd/archive/2026-06-26-ambitious-structure-reorganization/design.md +66 -0
- package/docs/sdd/archive/2026-06-26-ambitious-structure-reorganization/proposal.md +79 -0
- package/docs/sdd/archive/2026-06-26-ambitious-structure-reorganization/spec.md +67 -0
- package/docs/sdd/archive/2026-06-26-ambitious-structure-reorganization/tasks.md +63 -0
- package/docs/sdd/archive/2026-06-26-ambitious-structure-reorganization/verify-report.md +71 -0
- package/docs/sdd/archive/2026-06-26-legacy-facade-cleanup/apply-progress.md +68 -0
- package/docs/sdd/archive/2026-06-26-legacy-facade-cleanup/archive-report.md +61 -0
- package/docs/sdd/archive/2026-06-26-legacy-facade-cleanup/design.md +43 -0
- package/docs/sdd/archive/2026-06-26-legacy-facade-cleanup/proposal.md +61 -0
- package/docs/sdd/archive/2026-06-26-legacy-facade-cleanup/spec.md +31 -0
- package/docs/sdd/archive/2026-06-26-legacy-facade-cleanup/tasks.md +27 -0
- package/docs/sdd/archive/2026-06-26-legacy-facade-cleanup/verify-report.md +58 -0
- package/docs/sdd/archive/2026-06-26-provider-install-adapter-boundary/apply-progress.md +65 -0
- package/docs/sdd/archive/2026-06-26-provider-install-adapter-boundary/archive-report.md +53 -0
- package/docs/sdd/archive/2026-06-26-provider-install-adapter-boundary/design.md +64 -0
- package/docs/sdd/archive/2026-06-26-provider-install-adapter-boundary/proposal.md +62 -0
- package/docs/sdd/archive/2026-06-26-provider-install-adapter-boundary/spec.md +51 -0
- package/docs/sdd/archive/2026-06-26-provider-install-adapter-boundary/tasks.md +50 -0
- package/docs/sdd/archive/2026-06-26-provider-install-adapter-boundary/verify-report.md +66 -0
- package/docs/storage.md +2 -2
- package/package.json +2 -2
- /package/dist/{mcp → adapters/claude/install}/claude-code-cli.js +0 -0
- /package/dist/{memory → storage/memory}/sqlite/migrations/001_initial.sql +0 -0
- /package/dist/{memory → storage/memory}/sqlite/migrations/002_observation_revisions.sql +0 -0
- /package/dist/{memory → storage/memory}/sqlite/migrations/003_agent_registry.sql +0 -0
- /package/dist/{memory → storage/memory}/sqlite/migrations/004_run_runtime.sql +0 -0
- /package/dist/{memory → storage/memory}/sqlite/migrations/005_run_approvals.sql +0 -0
- /package/dist/{memory → storage/memory}/sqlite/migrations/006_run_operation_attempts.sql +0 -0
- /package/dist/{memory → storage/memory}/sqlite/migrations/007_abandoned_operation_attempts.sql +0 -0
- /package/dist/{memory → storage/memory}/sqlite/migrations/008_run_execution_plan_events.sql +0 -0
- /package/dist/{memory → storage/memory}/sqlite/migrations/009_multiple_operation_attempts.sql +0 -0
- /package/dist/{memory → storage/memory}/sqlite/migrations/010_skill_registry.sql +0 -0
- /package/dist/{memory → storage/memory}/sqlite/migrations/011_skill_usage_resolution_outcomes.sql +0 -0
- /package/dist/{memory → storage/memory}/sqlite/migrations/012_skill_improvement_proposals.sql +0 -0
- /package/dist/{memory → storage/memory}/sqlite/migrations/013_skill_evaluation_scenarios.sql +0 -0
- /package/dist/{memory → storage/memory}/sqlite/migrations/014_manager_profile_overlays.sql +0 -0
- /package/dist/{memory → storage/memory}/sqlite/migrations/015_artifact_metadata.sql +0 -0
- /package/dist/{memory → storage/memory}/sqlite/migrations/016_agent_seed_history.sql +0 -0
- /package/dist/{memory → storage/memory}/sqlite/migrations/017_intent_signal_skill_targets.sql +0 -0
- /package/dist/{memory → storage/memory}/sqlite/migrations/018_skill_system_v2.sql +0 -0
- /package/dist/{memory → storage/memory}/sqlite/migrations/019_task_scoped_command_grants.sql +0 -0
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { errorEnvelope, successEnvelope, } from '../../schema.js';
|
|
2
|
+
function toEnvelope(tool, result) {
|
|
3
|
+
return result.ok ? successEnvelope(tool, result.value) : errorEnvelope(result.error.code, result.error.message, tool);
|
|
4
|
+
}
|
|
5
|
+
export function agentResolveEnvelope(input, services) {
|
|
6
|
+
return toEnvelope('vgxness_agent_resolve', services.agents.resolveAgents(input));
|
|
7
|
+
}
|
|
8
|
+
export function agentActivateEnvelope(input, services) {
|
|
9
|
+
return toEnvelope('vgxness_agent_activate', services.activation.activate(input));
|
|
10
|
+
}
|
|
11
|
+
export function managerProfileGetEnvelope(input, services) {
|
|
12
|
+
if (services.managerProfiles === undefined)
|
|
13
|
+
return errorEnvelope('validation_failed', 'Manager profile service is not available', 'vgxness_manager_profile_get');
|
|
14
|
+
return toEnvelope('vgxness_manager_profile_get', services.managerProfiles.resolveEffectiveManager({
|
|
15
|
+
project: input.project,
|
|
16
|
+
scope: input.scope ?? 'project',
|
|
17
|
+
managerName: input.managerName ?? 'vgxness-manager',
|
|
18
|
+
}));
|
|
19
|
+
}
|
|
20
|
+
export function managerProfileSetEnvelope(input, services) {
|
|
21
|
+
if (services.managerProfiles === undefined)
|
|
22
|
+
return errorEnvelope('validation_failed', 'Manager profile service is not available', 'vgxness_manager_profile_set');
|
|
23
|
+
const baseline = services.managerProfiles.resolveEffectiveManager({ project: input.project, scope: input.scope, managerName: input.managerName });
|
|
24
|
+
if (!baseline.ok)
|
|
25
|
+
return errorEnvelope(baseline.error.code, baseline.error.message, 'vgxness_manager_profile_set');
|
|
26
|
+
const saved = services.managerProfiles.save(input);
|
|
27
|
+
if (!saved.ok)
|
|
28
|
+
return errorEnvelope(saved.error.code, saved.error.message, 'vgxness_manager_profile_set');
|
|
29
|
+
return toEnvelope('vgxness_manager_profile_set', services.managerProfiles.resolveEffectiveManager({ project: input.project, scope: input.scope, managerName: input.managerName }));
|
|
30
|
+
}
|
|
31
|
+
export function opencodeManagerPayloadEnvelope(input, services) {
|
|
32
|
+
return toEnvelope('vgxness_opencode_manager_payload', services.opencodeManagerPayload.build(input));
|
|
33
|
+
}
|
|
34
|
+
export function opencodeHandoffPreviewEnvelope(input, services) {
|
|
35
|
+
if (services.opencodeHandoffPreview === undefined)
|
|
36
|
+
return errorEnvelope('validation_failed', 'OpenCode handoff preview service is not available', 'vgxness_opencode_handoff_preview');
|
|
37
|
+
return toEnvelope('vgxness_opencode_handoff_preview', services.opencodeHandoffPreview.build(input));
|
|
38
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { ContextCockpitSnapshotService } from '../../../../mcp/control-plane-snapshot-service.js';
|
|
2
|
+
import { ResumeContextGateService } from '../../../../mcp/resume-context-gate-service.js';
|
|
3
|
+
import { errorEnvelope, successEnvelope } from '../../schema.js';
|
|
4
|
+
function toEnvelope(tool, result) {
|
|
5
|
+
return result.ok ? successEnvelope(tool, result.value) : errorEnvelope(result.error.code, result.error.message, tool);
|
|
6
|
+
}
|
|
7
|
+
export function contextCockpitEnvelope(input, services) {
|
|
8
|
+
return toEnvelope('vgxness_context_cockpit', new ContextCockpitSnapshotService({ memory: services.memory, sdd: services.sdd }).build(input));
|
|
9
|
+
}
|
|
10
|
+
export function resumeContextEnvelope(input, services) {
|
|
11
|
+
return toEnvelope('vgxness_resume_context', new ResumeContextGateService({ memory: services.memory, runs: services.runs }).build(input));
|
|
12
|
+
}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { AgentMemoryCaptureService } from '../../../../memory/agent-memory-capture-service.js';
|
|
2
|
+
import { errorEnvelope, successEnvelope, } from '../../schema.js';
|
|
3
|
+
function memoryContext(sessionId) {
|
|
4
|
+
const context = { actor: 'mcp-control-plane' };
|
|
5
|
+
if (sessionId !== undefined)
|
|
6
|
+
context.sessionId = sessionId;
|
|
7
|
+
return context;
|
|
8
|
+
}
|
|
9
|
+
function toEnvelope(tool, result) {
|
|
10
|
+
return result.ok ? successEnvelope(tool, result.value) : errorEnvelope(result.error.code, result.error.message, tool);
|
|
11
|
+
}
|
|
12
|
+
function auditedMemoryEnvelope(tool, result, services, audit) {
|
|
13
|
+
if (result.ok && audit.runId !== undefined) {
|
|
14
|
+
services.runs.appendEvent({
|
|
15
|
+
runId: audit.runId,
|
|
16
|
+
kind: 'timeline',
|
|
17
|
+
title: audit.title,
|
|
18
|
+
payload: audit.payload(result.value),
|
|
19
|
+
relatedType: audit.relatedType,
|
|
20
|
+
...(audit.relatedId === undefined ? {} : { relatedId: audit.relatedId }),
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
return toEnvelope(tool, result);
|
|
24
|
+
}
|
|
25
|
+
function sddSaveAuditPayload(input) {
|
|
26
|
+
return {
|
|
27
|
+
runId: input.runId,
|
|
28
|
+
title: 'Audit: sdd-artifact-saved',
|
|
29
|
+
relatedType: 'sdd-artifact',
|
|
30
|
+
relatedId: `${input.change}:${input.phase}`,
|
|
31
|
+
payload: (value) => ({
|
|
32
|
+
eventType: 'sdd-artifact-saved',
|
|
33
|
+
project: input.project,
|
|
34
|
+
change: input.change,
|
|
35
|
+
phase: input.phase,
|
|
36
|
+
topicKey: value.topicKey,
|
|
37
|
+
artifactId: value.id,
|
|
38
|
+
...(input.agentId === undefined ? {} : { agentId: input.agentId }),
|
|
39
|
+
}),
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
function isMemorySddArtifactSaveInput(input) {
|
|
43
|
+
return 'kind' in input && input.kind === 'sdd-artifact';
|
|
44
|
+
}
|
|
45
|
+
function isMemorySddArtifactGetInput(input) {
|
|
46
|
+
return 'kind' in input && input.kind === 'sdd-artifact';
|
|
47
|
+
}
|
|
48
|
+
function memoryCapturePolicyErrorEnvelope(tool, decision) {
|
|
49
|
+
return errorEnvelope('validation_failed', `Memory capture policy rejected explicit durable memory write. Reason codes: ${decision.reasonCodes.join(', ')}`, tool, {
|
|
50
|
+
policy: {
|
|
51
|
+
service: 'AgentMemoryCaptureService',
|
|
52
|
+
version: decision.version,
|
|
53
|
+
allowed: decision.allowed,
|
|
54
|
+
severity: decision.severity,
|
|
55
|
+
persisted: decision.persisted,
|
|
56
|
+
reasonCodes: decision.reasonCodes,
|
|
57
|
+
warnings: decision.warnings,
|
|
58
|
+
redactions: decision.redactions,
|
|
59
|
+
},
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
export function memorySaveEnvelope(input, services) {
|
|
63
|
+
if (isMemorySddArtifactSaveInput(input)) {
|
|
64
|
+
const { kind: _kind, ...artifactInput } = input;
|
|
65
|
+
return auditedMemoryEnvelope('vgxness_memory_save', services.sdd.saveArtifact(artifactInput), services, sddSaveAuditPayload(artifactInput));
|
|
66
|
+
}
|
|
67
|
+
const policy = new AgentMemoryCaptureService().validateExplicitMemorySave(input);
|
|
68
|
+
if (!policy.ok)
|
|
69
|
+
return errorEnvelope(policy.error.code, policy.error.message, 'vgxness_memory_save');
|
|
70
|
+
if (!policy.value.allowed)
|
|
71
|
+
return memoryCapturePolicyErrorEnvelope('vgxness_memory_save', policy.value);
|
|
72
|
+
return toEnvelope('vgxness_memory_save', services.memory.saveObservation({ ...input, scope: input.scope ?? 'project' }, memoryContext()));
|
|
73
|
+
}
|
|
74
|
+
export function memorySearchEnvelope(input, services) {
|
|
75
|
+
return toEnvelope('vgxness_memory_search', services.memory.searchObservations(input, memoryContext()));
|
|
76
|
+
}
|
|
77
|
+
export function memoryGetEnvelope(input, services) {
|
|
78
|
+
if (isMemorySddArtifactGetInput(input)) {
|
|
79
|
+
const { kind: _kind, ...artifactInput } = input;
|
|
80
|
+
return toEnvelope('vgxness_memory_get', services.sdd.getArtifact(artifactInput));
|
|
81
|
+
}
|
|
82
|
+
return toEnvelope('vgxness_memory_get', services.memory.getObservation(input.id, memoryContext()));
|
|
83
|
+
}
|
|
84
|
+
export function memoryUpdateEnvelope(input, services) {
|
|
85
|
+
if (isMemorySddArtifactSaveInput(input)) {
|
|
86
|
+
const { kind: _kind, ...artifactInput } = input;
|
|
87
|
+
return auditedMemoryEnvelope('vgxness_memory_update', services.sdd.saveArtifact(artifactInput), services, sddSaveAuditPayload(artifactInput));
|
|
88
|
+
}
|
|
89
|
+
const policy = new AgentMemoryCaptureService().validateExplicitMemoryUpdate(input);
|
|
90
|
+
if (!policy.ok)
|
|
91
|
+
return errorEnvelope(policy.error.code, policy.error.message, 'vgxness_memory_update');
|
|
92
|
+
if (!policy.value.allowed)
|
|
93
|
+
return memoryCapturePolicyErrorEnvelope('vgxness_memory_update', policy.value);
|
|
94
|
+
return toEnvelope('vgxness_memory_update', services.memory.updateObservation(input, memoryContext()));
|
|
95
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { errorEnvelope, successEnvelope, } from '../../schema.js';
|
|
2
|
+
function toEnvelope(tool, result) {
|
|
3
|
+
return result.ok ? successEnvelope(tool, result.value) : errorEnvelope(result.error.code, result.error.message, tool);
|
|
4
|
+
}
|
|
5
|
+
export function providerStatusEnvelope(input, services) {
|
|
6
|
+
if (services.providerStatus === undefined)
|
|
7
|
+
return errorEnvelope('validation_failed', 'Provider status service is not available', 'vgxness_provider_status');
|
|
8
|
+
return toEnvelope('vgxness_provider_status', services.providerStatus.getStatus(input));
|
|
9
|
+
}
|
|
10
|
+
export function providerDoctorEnvelope(input, services) {
|
|
11
|
+
if (services.providerDoctor === undefined)
|
|
12
|
+
return errorEnvelope('validation_failed', 'Provider doctor service is not available', 'vgxness_provider_doctor');
|
|
13
|
+
return toEnvelope('vgxness_provider_doctor', services.providerDoctor.getDoctor(input));
|
|
14
|
+
}
|
|
15
|
+
export function providerChangePlanEnvelope(input, services) {
|
|
16
|
+
if (services.providerChangePlan === undefined)
|
|
17
|
+
return errorEnvelope('validation_failed', 'Provider change plan service is not available', 'vgxness_provider_change_plan');
|
|
18
|
+
return toEnvelope('vgxness_provider_change_plan', services.providerChangePlan.getPlan(input));
|
|
19
|
+
}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import { AgentMemoryCaptureService } from '../../../../memory/agent-memory-capture-service.js';
|
|
2
|
+
import { errorEnvelope, successEnvelope, } from '../../schema.js';
|
|
3
|
+
function toEnvelope(tool, result) {
|
|
4
|
+
return result.ok ? successEnvelope(tool, result.value) : errorEnvelope(result.error.code, result.error.message, tool);
|
|
5
|
+
}
|
|
6
|
+
export function runListEnvelope(input, services) {
|
|
7
|
+
const { limit, ...filters } = input;
|
|
8
|
+
const result = services.runs.listRuns(filters);
|
|
9
|
+
return result.ok
|
|
10
|
+
? successEnvelope('vgxness_run_list', result.value.slice(0, limit))
|
|
11
|
+
: errorEnvelope(result.error.code, result.error.message, 'vgxness_run_list');
|
|
12
|
+
}
|
|
13
|
+
export function runGetEnvelope(input, services) {
|
|
14
|
+
return toEnvelope('vgxness_run_get', services.runs.getRun(input.id));
|
|
15
|
+
}
|
|
16
|
+
export function runPreflightEnvelope(input, services) {
|
|
17
|
+
return toEnvelope('vgxness_run_preflight', services.runs.preflightOperation(input));
|
|
18
|
+
}
|
|
19
|
+
export function runTaskGrantCreateEnvelope(input, services) {
|
|
20
|
+
if (services.runs.taskScopedCommandGrantService === undefined)
|
|
21
|
+
return errorEnvelope('validation_failed', 'Task-scoped command grant service is not available', 'vgxness_run_task_grant_create');
|
|
22
|
+
const { creationReason, approvedScopeSummary, ...grantInput } = input;
|
|
23
|
+
return toEnvelope('vgxness_run_task_grant_create', services.runs.taskScopedCommandGrantService().create({
|
|
24
|
+
...grantInput,
|
|
25
|
+
audit: { creationReason, approvedScopeSummary },
|
|
26
|
+
}));
|
|
27
|
+
}
|
|
28
|
+
export function runTaskGrantListEnvelope(input, services) {
|
|
29
|
+
if (services.runs.taskScopedCommandGrantService === undefined)
|
|
30
|
+
return errorEnvelope('validation_failed', 'Task-scoped command grant service is not available', 'vgxness_run_task_grant_list');
|
|
31
|
+
const { limit, ...filters } = input;
|
|
32
|
+
const result = services.runs.taskScopedCommandGrantService().list(filters);
|
|
33
|
+
return result.ok
|
|
34
|
+
? successEnvelope('vgxness_run_task_grant_list', limit === undefined ? result.value : result.value.slice(0, limit))
|
|
35
|
+
: errorEnvelope(result.error.code, result.error.message, 'vgxness_run_task_grant_list');
|
|
36
|
+
}
|
|
37
|
+
export function runTaskGrantGetEnvelope(input, services) {
|
|
38
|
+
if (services.runs.taskScopedCommandGrantService === undefined)
|
|
39
|
+
return errorEnvelope('validation_failed', 'Task-scoped command grant service is not available', 'vgxness_run_task_grant_get');
|
|
40
|
+
return toEnvelope('vgxness_run_task_grant_get', services.runs.taskScopedCommandGrantService().get(input.grantId));
|
|
41
|
+
}
|
|
42
|
+
export function runTaskGrantRevokeEnvelope(input, services) {
|
|
43
|
+
if (services.runs.taskScopedCommandGrantService === undefined)
|
|
44
|
+
return errorEnvelope('validation_failed', 'Task-scoped command grant service is not available', 'vgxness_run_task_grant_revoke');
|
|
45
|
+
return toEnvelope('vgxness_run_task_grant_revoke', services.runs.taskScopedCommandGrantService().revoke(input));
|
|
46
|
+
}
|
|
47
|
+
export function runTaskGrantPreviewMatchEnvelope(input, services) {
|
|
48
|
+
if (services.runs.taskScopedCommandGrantService === undefined)
|
|
49
|
+
return errorEnvelope('validation_failed', 'Task-scoped command grant service is not available', 'vgxness_run_task_grant_preview_match');
|
|
50
|
+
return toEnvelope('vgxness_run_task_grant_preview_match', services.runs.taskScopedCommandGrantService().previewMatch(input));
|
|
51
|
+
}
|
|
52
|
+
export function runStartEnvelope(input, services) {
|
|
53
|
+
return toEnvelope('vgxness_run_start', services.runs.createRun(input));
|
|
54
|
+
}
|
|
55
|
+
export function runCheckpointEnvelope(input, services) {
|
|
56
|
+
return toEnvelope('vgxness_run_checkpoint', services.runs.appendCheckpoint(input));
|
|
57
|
+
}
|
|
58
|
+
export function runFinalizeEnvelope(input, services) {
|
|
59
|
+
const finalized = services.runs.updateFinalStatus(input);
|
|
60
|
+
if (!finalized.ok)
|
|
61
|
+
return errorEnvelope(finalized.error.code, finalized.error.message, 'vgxness_run_finalize');
|
|
62
|
+
const memoryCapture = runFinalizeMemoryCapture(input, finalized.value);
|
|
63
|
+
const envelope = { ok: true, tool: 'vgxness_run_finalize', value: finalized.value };
|
|
64
|
+
if (memoryCapture !== undefined)
|
|
65
|
+
envelope.memoryCapture = memoryCapture;
|
|
66
|
+
return envelope;
|
|
67
|
+
}
|
|
68
|
+
function runFinalizeMemoryCapture(input, run) {
|
|
69
|
+
try {
|
|
70
|
+
const boundedEvidence = [
|
|
71
|
+
{ kind: 'run-finalization', ref: run.id, note: 'Derived from bounded run finalization response fields only.' },
|
|
72
|
+
];
|
|
73
|
+
if (run.latestCheckpointId !== undefined) {
|
|
74
|
+
boundedEvidence.push({ kind: 'run-checkpoint', ref: run.latestCheckpointId, note: 'Checkpoint id reference only; checkpoint state omitted.' });
|
|
75
|
+
}
|
|
76
|
+
const captureInput = {
|
|
77
|
+
project: run.project,
|
|
78
|
+
runId: run.id,
|
|
79
|
+
workflow: run.workflow,
|
|
80
|
+
phase: run.phase,
|
|
81
|
+
status: run.status,
|
|
82
|
+
outcome: run.outcome ?? input.outcome,
|
|
83
|
+
boundedEvidence,
|
|
84
|
+
};
|
|
85
|
+
const outcomeReason = run.outcomeReason ?? input.outcomeReason;
|
|
86
|
+
if (outcomeReason !== undefined)
|
|
87
|
+
captureInput.outcomeReason = outcomeReason;
|
|
88
|
+
const result = new AgentMemoryCaptureService().captureFromRunFinalize(captureInput);
|
|
89
|
+
return result.ok ? result.value : undefined;
|
|
90
|
+
}
|
|
91
|
+
catch {
|
|
92
|
+
return undefined;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
export function runResumeCandidatesEnvelope(input, services) {
|
|
96
|
+
const limit = input.limit ?? 5;
|
|
97
|
+
const result = services.runs.listRecentInterruptedRuns({ project: input.project, limit });
|
|
98
|
+
if (!result.ok)
|
|
99
|
+
return errorEnvelope(result.error.code, result.error.message, 'vgxness_run_resume_candidates');
|
|
100
|
+
return successEnvelope('vgxness_run_resume_candidates', {
|
|
101
|
+
kind: 'run-resume-candidates',
|
|
102
|
+
version: 1,
|
|
103
|
+
project: input.project,
|
|
104
|
+
statuses: ['failed', 'blocked', 'needs-human'],
|
|
105
|
+
limit,
|
|
106
|
+
candidates: result.value.map((candidate) => ({
|
|
107
|
+
...candidate,
|
|
108
|
+
recommendation: 'Inspect this interrupted run before deciding whether to continue manually.',
|
|
109
|
+
inspectTool: 'run_resume_inspect',
|
|
110
|
+
inspectInput: { runId: candidate.runId },
|
|
111
|
+
resumeCommand: `vgxness resume --project ${input.project} --run-id ${candidate.runId}`,
|
|
112
|
+
})),
|
|
113
|
+
nextStep: result.value.length === 0
|
|
114
|
+
? 'No interrupted run candidates were found for this project. Start from the current project status or a known runId.'
|
|
115
|
+
: 'Call run_resume_inspect with a candidate runId, then use run_resume_gate only when inspect returns a relevant approvalId.',
|
|
116
|
+
safety: {
|
|
117
|
+
readOnly: true,
|
|
118
|
+
runMutation: false,
|
|
119
|
+
retryAdmitted: false,
|
|
120
|
+
providerInvoked: false,
|
|
121
|
+
writesProviderConfig: false,
|
|
122
|
+
writesArtifacts: false,
|
|
123
|
+
writesOpenSpec: false,
|
|
124
|
+
createsSandbox: false,
|
|
125
|
+
createsWorktree: false,
|
|
126
|
+
},
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
export function runResumeInspectEnvelope(input, services) {
|
|
130
|
+
return toEnvelope('vgxness_run_resume_inspect', services.runs.getRunOperatorResumePlan(input.runId));
|
|
131
|
+
}
|
|
132
|
+
export function runResumeGateEnvelope(input, services) {
|
|
133
|
+
return toEnvelope('vgxness_run_resume_gate', services.runs.getRunResumeOrchestrationPlan(input));
|
|
134
|
+
}
|
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
import { GovernanceReportBuilder } from '../../../../governance/index.js';
|
|
2
|
+
import { AgentMemoryCaptureService } from '../../../../memory/agent-memory-capture-service.js';
|
|
3
|
+
import { buildSddCockpitSurfaceResponse } from '../../../../sdd/cockpit-read-model.js';
|
|
4
|
+
import { sddContinuationPlanFrom } from '../../../../sdd/sdd-continuation-plan.js';
|
|
5
|
+
import { errorEnvelope, successEnvelope, } from '../../schema.js';
|
|
6
|
+
function toEnvelope(tool, result) {
|
|
7
|
+
return result.ok ? successEnvelope(tool, result.value) : errorEnvelope(result.error.code, result.error.message, tool);
|
|
8
|
+
}
|
|
9
|
+
function auditedEnvelope(tool, result, services, audit) {
|
|
10
|
+
if (result.ok && audit.runId !== undefined) {
|
|
11
|
+
services.runs.appendEvent({
|
|
12
|
+
runId: audit.runId,
|
|
13
|
+
kind: 'timeline',
|
|
14
|
+
title: audit.title,
|
|
15
|
+
payload: audit.payload(result.value),
|
|
16
|
+
relatedType: audit.relatedType,
|
|
17
|
+
...(audit.relatedId === undefined ? {} : { relatedId: audit.relatedId }),
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
return toEnvelope(tool, result);
|
|
21
|
+
}
|
|
22
|
+
export function sddStatusEnvelope(input, services) {
|
|
23
|
+
return toEnvelope('vgxness_sdd_status', services.sdd.getStatus(input));
|
|
24
|
+
}
|
|
25
|
+
export function sddReadyEnvelope(input, services) {
|
|
26
|
+
return auditedEnvelope('vgxness_sdd_ready', services.sdd.getReady(input), services, sddReadinessAuditPayload(input));
|
|
27
|
+
}
|
|
28
|
+
export function sddGetReadinessEnvelope(input, services) {
|
|
29
|
+
return auditedEnvelope('vgxness_sdd_get_readiness', services.sdd.getReady(input), services, sddReadinessAuditPayload(input));
|
|
30
|
+
}
|
|
31
|
+
export function sddSaveArtifactEnvelope(input, services) {
|
|
32
|
+
return auditedEnvelope('vgxness_sdd_save_artifact', services.sdd.saveArtifact(input), services, sddSaveAuditPayload(input));
|
|
33
|
+
}
|
|
34
|
+
export function sddAcceptArtifactEnvelope(input, services) {
|
|
35
|
+
const accepted = auditedEnvelope('vgxness_sdd_accept_artifact', services.sdd.acceptArtifact(input), services, sddAcceptanceAuditPayload(input));
|
|
36
|
+
if (!accepted.ok)
|
|
37
|
+
return accepted;
|
|
38
|
+
const memoryCapture = sddReferenceMemoryCapture(input, accepted.value);
|
|
39
|
+
if (memoryCapture !== undefined)
|
|
40
|
+
accepted.memoryCapture = memoryCapture;
|
|
41
|
+
return accepted;
|
|
42
|
+
}
|
|
43
|
+
export function sddReopenArtifactEnvelope(input, services) {
|
|
44
|
+
return auditedEnvelope('vgxness_sdd_reopen_artifact', services.sdd.reopenArtifact(input), services, sddReopenAuditPayload(input));
|
|
45
|
+
}
|
|
46
|
+
export function sddGetArtifactEnvelope(input, services) {
|
|
47
|
+
return toEnvelope('vgxness_sdd_get_artifact', services.sdd.getArtifact(input));
|
|
48
|
+
}
|
|
49
|
+
export function sddListArtifactsEnvelope(input, services) {
|
|
50
|
+
return toEnvelope('vgxness_sdd_list_artifacts', services.sdd.listArtifacts(input));
|
|
51
|
+
}
|
|
52
|
+
export function sddNextEnvelope(input, services) {
|
|
53
|
+
return toEnvelope('vgxness_sdd_next', services.sdd.getNext(input));
|
|
54
|
+
}
|
|
55
|
+
export function sddCockpitEnvelope(input, services) {
|
|
56
|
+
return toEnvelope('vgxness_sdd_cockpit', sddCockpitSurfaceResponse(input, services));
|
|
57
|
+
}
|
|
58
|
+
export function sddContinueEnvelope(input, services) {
|
|
59
|
+
const context = services.sdd.getContinuationContext({ project: input.project, change: input.change });
|
|
60
|
+
if (!context.ok)
|
|
61
|
+
return errorEnvelope(context.error.code, context.error.message, 'vgxness_sdd_continue');
|
|
62
|
+
const relatedRun = services.runs.findRelatedInterruptedSddRun({ project: input.project, change: input.change });
|
|
63
|
+
if (!relatedRun.ok)
|
|
64
|
+
return errorEnvelope(relatedRun.error.code, relatedRun.error.message, 'vgxness_sdd_continue');
|
|
65
|
+
return successEnvelope('vgxness_sdd_continue', sddContinuationPlanFrom({
|
|
66
|
+
project: input.project,
|
|
67
|
+
next: context.value.next,
|
|
68
|
+
cockpit: context.value.cockpit,
|
|
69
|
+
...(relatedRun.value === undefined ? {} : { relatedRunContext: relatedRun.value }),
|
|
70
|
+
}));
|
|
71
|
+
}
|
|
72
|
+
export function governanceReportEnvelope(input, services) {
|
|
73
|
+
return auditedEnvelope('vgxness_governance_report', new GovernanceReportBuilder({
|
|
74
|
+
sdd: governanceSddServices(services.sdd),
|
|
75
|
+
runs: services.runs,
|
|
76
|
+
agents: services.agents,
|
|
77
|
+
...(services.managerProfiles === undefined ? {} : { managerProfiles: services.managerProfiles }),
|
|
78
|
+
}).build(input), services, governanceReportAuditPayload(input));
|
|
79
|
+
}
|
|
80
|
+
function sddReadinessAuditPayload(input) {
|
|
81
|
+
return {
|
|
82
|
+
runId: input.runId,
|
|
83
|
+
title: 'Audit: sdd-readiness-evaluated',
|
|
84
|
+
relatedType: 'sdd-readiness',
|
|
85
|
+
relatedId: `${input.change}:${input.phase}`,
|
|
86
|
+
payload: (value) => ({
|
|
87
|
+
eventType: 'sdd-readiness-evaluated',
|
|
88
|
+
project: input.project,
|
|
89
|
+
change: input.change,
|
|
90
|
+
phase: input.phase,
|
|
91
|
+
ready: value.ready,
|
|
92
|
+
satisfiedPrerequisites: [...value.satisfiedPrerequisites],
|
|
93
|
+
missingArtifactTopicKeys: [...value.missingArtifactTopicKeys],
|
|
94
|
+
blockedPrerequisites: (value.blockedPrerequisites ?? []).map((blocker) => ({ phase: blocker.phase, topicKey: blocker.topicKey, reason: blocker.reason })),
|
|
95
|
+
...(input.agentId === undefined ? {} : { agentId: input.agentId }),
|
|
96
|
+
}),
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
function sddAcceptanceAuditPayload(input) {
|
|
100
|
+
return {
|
|
101
|
+
runId: input.runId,
|
|
102
|
+
title: 'Audit: sdd-artifact-accepted',
|
|
103
|
+
relatedType: 'sdd-artifact',
|
|
104
|
+
relatedId: `${input.change}:${input.phase}`,
|
|
105
|
+
payload: (value) => ({
|
|
106
|
+
eventType: 'sdd-artifact-accepted',
|
|
107
|
+
project: input.project,
|
|
108
|
+
change: input.change,
|
|
109
|
+
phase: input.phase,
|
|
110
|
+
topicKey: value.topicKey,
|
|
111
|
+
artifactId: value.id,
|
|
112
|
+
acceptedBy: { type: 'human', id: input.acceptedBy?.id ?? 'unknown-human' },
|
|
113
|
+
...(input.agentId === undefined ? {} : { agentId: input.agentId }),
|
|
114
|
+
}),
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
function sddReopenAuditPayload(input) {
|
|
118
|
+
return {
|
|
119
|
+
runId: input.runId,
|
|
120
|
+
title: 'Audit: sdd-artifact-reopened',
|
|
121
|
+
relatedType: 'sdd-artifact',
|
|
122
|
+
relatedId: `${input.change}:${input.phase}`,
|
|
123
|
+
payload: (value) => ({
|
|
124
|
+
eventType: 'sdd-artifact-reopened',
|
|
125
|
+
project: input.project,
|
|
126
|
+
change: input.change,
|
|
127
|
+
phase: input.phase,
|
|
128
|
+
topicKey: value.topicKey,
|
|
129
|
+
artifactId: value.id,
|
|
130
|
+
reopenedBy: { type: 'human', id: input.reopenedBy.id },
|
|
131
|
+
...(input.agentId === undefined ? {} : { agentId: input.agentId }),
|
|
132
|
+
}),
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
function sddSaveAuditPayload(input) {
|
|
136
|
+
return {
|
|
137
|
+
runId: input.runId,
|
|
138
|
+
title: 'Audit: sdd-artifact-saved',
|
|
139
|
+
relatedType: 'sdd-artifact',
|
|
140
|
+
relatedId: `${input.change}:${input.phase}`,
|
|
141
|
+
payload: (value) => ({
|
|
142
|
+
eventType: 'sdd-artifact-saved',
|
|
143
|
+
project: input.project,
|
|
144
|
+
change: input.change,
|
|
145
|
+
phase: input.phase,
|
|
146
|
+
topicKey: value.topicKey,
|
|
147
|
+
artifactId: value.id,
|
|
148
|
+
...(input.agentId === undefined ? {} : { agentId: input.agentId }),
|
|
149
|
+
}),
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
function sddReferenceMemoryCapture(input, artifact) {
|
|
153
|
+
try {
|
|
154
|
+
const captureInput = {
|
|
155
|
+
source: input.phase === 'archive' ? 'sdd_archive' : 'sdd_acceptance',
|
|
156
|
+
project: artifact.project,
|
|
157
|
+
change: input.change,
|
|
158
|
+
phase: input.phase,
|
|
159
|
+
artifactId: artifact.id,
|
|
160
|
+
topicKey: artifact.topicKey,
|
|
161
|
+
artifactState: 'accepted',
|
|
162
|
+
};
|
|
163
|
+
if (input.acceptedBy?.type !== undefined && input.acceptedBy.id !== undefined) {
|
|
164
|
+
captureInput.acceptedBy = {
|
|
165
|
+
type: input.acceptedBy.type,
|
|
166
|
+
id: input.acceptedBy.id,
|
|
167
|
+
...(input.acceptedBy.displayName === undefined ? {} : { displayName: input.acceptedBy.displayName }),
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
if (input.acceptedAt !== undefined)
|
|
171
|
+
captureInput.acceptedAt = input.acceptedAt;
|
|
172
|
+
if (input.runId !== undefined)
|
|
173
|
+
captureInput.runId = input.runId;
|
|
174
|
+
if (input.agentId !== undefined)
|
|
175
|
+
captureInput.agentId = input.agentId;
|
|
176
|
+
const result = new AgentMemoryCaptureService().captureFromSddReferenceEvent(captureInput);
|
|
177
|
+
return result.ok ? result.value : undefined;
|
|
178
|
+
}
|
|
179
|
+
catch {
|
|
180
|
+
return undefined;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
function governanceReportAuditPayload(input) {
|
|
184
|
+
return {
|
|
185
|
+
runId: input.runId,
|
|
186
|
+
title: 'Audit: governance-report-generated',
|
|
187
|
+
relatedType: 'governance-report',
|
|
188
|
+
relatedId: input.change,
|
|
189
|
+
payload: (value) => ({
|
|
190
|
+
eventType: 'governance-report-generated',
|
|
191
|
+
project: value.project,
|
|
192
|
+
...(value.change === undefined ? {} : { change: value.change }),
|
|
193
|
+
...(value.runId === undefined ? {} : { runId: value.runId }),
|
|
194
|
+
...(value.workflow === undefined ? {} : { workflow: value.workflow }),
|
|
195
|
+
...(value.phase === undefined ? {} : { phase: value.phase }),
|
|
196
|
+
artifactCount: value.sdd.artifacts?.length ?? 0,
|
|
197
|
+
payloadMode: value.payloadMode,
|
|
198
|
+
readinessReady: value.sdd.readiness?.ready ?? null,
|
|
199
|
+
warningCount: value.warnings.length,
|
|
200
|
+
openCodeMode: value.openCode.mode,
|
|
201
|
+
overlayPresent: value.overlay.present,
|
|
202
|
+
...(value.overlay.source === undefined ? {} : { overlaySource: value.overlay.source }),
|
|
203
|
+
...(value.overlay.fingerprint === undefined ? {} : { overlayFingerprint: value.overlay.fingerprint }),
|
|
204
|
+
}),
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
function governanceSddServices(services) {
|
|
208
|
+
return {
|
|
209
|
+
getStatus: services.getStatus.bind(services),
|
|
210
|
+
getReady: services.getReady.bind(services),
|
|
211
|
+
listArtifacts: (input) => {
|
|
212
|
+
const result = services.listArtifacts({ ...input, payloadMode: 'verbose' });
|
|
213
|
+
return result;
|
|
214
|
+
},
|
|
215
|
+
};
|
|
216
|
+
}
|
|
217
|
+
function sddCockpitSurfaceResponse(input, services) {
|
|
218
|
+
const cockpit = services.sdd.getCockpit(input);
|
|
219
|
+
if (!cockpit.ok)
|
|
220
|
+
return cockpit;
|
|
221
|
+
const operationalEvidence = services.runs.getSddOperationalEvidence({ project: input.project, change: input.change });
|
|
222
|
+
if (!operationalEvidence.ok)
|
|
223
|
+
return { ok: true, value: buildSddCockpitSurfaceResponse(cockpit.value) };
|
|
224
|
+
return { ok: true, value: buildSddCockpitSurfaceResponse(cockpit.value, { operationalEvidenceByPhase: operationalEvidence.value }) };
|
|
225
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { AgentMemoryCaptureService } from '../../../../memory/agent-memory-capture-service.js';
|
|
2
|
+
import { errorEnvelope, successEnvelope, } from '../../schema.js';
|
|
3
|
+
function memoryContext(sessionId) {
|
|
4
|
+
const context = { actor: 'mcp-control-plane' };
|
|
5
|
+
if (sessionId !== undefined)
|
|
6
|
+
context.sessionId = sessionId;
|
|
7
|
+
return context;
|
|
8
|
+
}
|
|
9
|
+
function toEnvelope(tool, result) {
|
|
10
|
+
return result.ok ? successEnvelope(tool, result.value) : errorEnvelope(result.error.code, result.error.message, tool);
|
|
11
|
+
}
|
|
12
|
+
export function sessionStartEnvelope(input, services) {
|
|
13
|
+
return toEnvelope('vgxness_session_start', services.memory.saveSession(input, memoryContext(input.id)));
|
|
14
|
+
}
|
|
15
|
+
export function sessionAppendActivityEnvelope(input, services) {
|
|
16
|
+
return toEnvelope('vgxness_session_append_activity', services.memory.appendActivity(input, memoryContext(input.sessionId)));
|
|
17
|
+
}
|
|
18
|
+
export function sessionRestoreEnvelope(input, services) {
|
|
19
|
+
return toEnvelope('vgxness_session_restore', services.memory.restoreSession(input));
|
|
20
|
+
}
|
|
21
|
+
export function sessionCloseEnvelope(input, services) {
|
|
22
|
+
const closed = services.memory.closeSession(input, memoryContext(input.sessionId));
|
|
23
|
+
if (!closed.ok)
|
|
24
|
+
return errorEnvelope(closed.error.code, closed.error.message, 'vgxness_session_close');
|
|
25
|
+
const memoryCapture = sessionCloseMemoryCapture(input, closed.value);
|
|
26
|
+
const envelope = { ok: true, tool: 'vgxness_session_close', value: closed.value };
|
|
27
|
+
if (memoryCapture !== undefined)
|
|
28
|
+
envelope.memoryCapture = memoryCapture;
|
|
29
|
+
return envelope;
|
|
30
|
+
}
|
|
31
|
+
function sessionCloseMemoryCapture(input, session) {
|
|
32
|
+
const result = new AgentMemoryCaptureService().captureFromSessionClose({
|
|
33
|
+
project: session.project,
|
|
34
|
+
sessionId: session.id,
|
|
35
|
+
...(session.directory === undefined ? {} : { directory: session.directory }),
|
|
36
|
+
summary: input.summary,
|
|
37
|
+
});
|
|
38
|
+
return result.ok ? result.value : undefined;
|
|
39
|
+
}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { errorEnvelope, successEnvelope, } from '../../schema.js';
|
|
2
|
+
function toEnvelope(tool, result) {
|
|
3
|
+
return result.ok ? successEnvelope(tool, result.value) : errorEnvelope(result.error.code, result.error.message, tool);
|
|
4
|
+
}
|
|
5
|
+
export function skillIndexEnvelope(input, services) {
|
|
6
|
+
if (services.skillIndex === undefined)
|
|
7
|
+
return errorEnvelope('validation_failed', 'Skill index service is not available', 'vgxness_skill_index');
|
|
8
|
+
return toEnvelope('vgxness_skill_index', services.skillIndex.getIndex(input));
|
|
9
|
+
}
|
|
10
|
+
export function skillSearchEnvelope(input, services) {
|
|
11
|
+
if (services.skills.searchSkills === undefined)
|
|
12
|
+
return errorEnvelope('validation_failed', 'Skill search service is not available', 'vgxness_skill_search');
|
|
13
|
+
return toEnvelope('vgxness_skill_search', services.skills.searchSkills(input));
|
|
14
|
+
}
|
|
15
|
+
export function skillGetEnvelope(input, services) {
|
|
16
|
+
if (services.skills.getSkill === undefined)
|
|
17
|
+
return errorEnvelope('validation_failed', 'Skill get service is not available', 'vgxness_skill_get');
|
|
18
|
+
return toEnvelope('vgxness_skill_get', services.skills.getSkill(input));
|
|
19
|
+
}
|
|
20
|
+
export function skillStatusEnvelope(input, services) {
|
|
21
|
+
if (services.skillStatus === undefined)
|
|
22
|
+
return errorEnvelope('validation_failed', 'Skill status service is not available', 'vgxness_skill_status');
|
|
23
|
+
return toEnvelope('vgxness_skill_status', services.skillStatus.getStatus(input));
|
|
24
|
+
}
|
|
25
|
+
export function skillPayloadEnvelope(input, services) {
|
|
26
|
+
const seeded = services.seedBuiltInSkills?.();
|
|
27
|
+
if (seeded !== undefined && !seeded.ok)
|
|
28
|
+
return errorEnvelope(seeded.error.code, seeded.error.message, 'vgxness_skill_payload');
|
|
29
|
+
const { workspaceRoot, maxSourceBytes, mode, ...resolverInput } = input;
|
|
30
|
+
const options = { workspaceRoot, ...(maxSourceBytes === undefined ? {} : { maxSourceBytes }), ...(mode === undefined ? {} : { mode }) };
|
|
31
|
+
return toEnvelope('vgxness_skill_payload', services.skills.buildSkillPayload(resolverInput, options));
|
|
32
|
+
}
|
|
33
|
+
export function skillActivateEnvelope(input, services) {
|
|
34
|
+
if (services.skills.activateSkill === undefined)
|
|
35
|
+
return errorEnvelope('validation_failed', 'Skill activation service is not available', 'vgxness_skill_activate');
|
|
36
|
+
return toEnvelope('vgxness_skill_activate', services.skills.activateSkill(input));
|
|
37
|
+
}
|
|
38
|
+
export function skillRecordUsageEnvelope(input, services) {
|
|
39
|
+
if (services.skills.recordSkillUsage === undefined)
|
|
40
|
+
return errorEnvelope('validation_failed', 'Skill usage service is not available', 'vgxness_skill_record_usage');
|
|
41
|
+
return toEnvelope('vgxness_skill_record_usage', services.skills.recordSkillUsage(input));
|
|
42
|
+
}
|
|
43
|
+
export function skillProposeImprovementEnvelope(input, services) {
|
|
44
|
+
if (services.skills.proposeSkillImprovement === undefined)
|
|
45
|
+
return errorEnvelope('validation_failed', 'Skill improvement proposal service is not available', 'vgxness_skill_propose_improvement');
|
|
46
|
+
return toEnvelope('vgxness_skill_propose_improvement', services.skills.proposeSkillImprovement(input));
|
|
47
|
+
}
|
|
48
|
+
export function skillListImprovementProposalsEnvelope(input, services) {
|
|
49
|
+
if (services.skills.listSkillImprovementProposals === undefined)
|
|
50
|
+
return errorEnvelope('validation_failed', 'Skill improvement proposal list service is not available', 'vgxness_skill_list_improvement_proposals');
|
|
51
|
+
return toEnvelope('vgxness_skill_list_improvement_proposals', services.skills.listSkillImprovementProposals(input));
|
|
52
|
+
}
|
|
53
|
+
export function skillRequestEvaluationEnvelope(input, services) {
|
|
54
|
+
if (services.skills.requestSkillEvaluation === undefined)
|
|
55
|
+
return errorEnvelope('validation_failed', 'Skill evaluation request service is not available', 'vgxness_skill_request_evaluation');
|
|
56
|
+
return toEnvelope('vgxness_skill_request_evaluation', services.skills.requestSkillEvaluation(input));
|
|
57
|
+
}
|
|
58
|
+
export function skillListEvaluationsEnvelope(input, services) {
|
|
59
|
+
if (services.skills.listSkillEvaluations === undefined)
|
|
60
|
+
return errorEnvelope('validation_failed', 'Skill evaluation list service is not available', 'vgxness_skill_list_evaluations');
|
|
61
|
+
return toEnvelope('vgxness_skill_list_evaluations', services.skills.listSkillEvaluations(input));
|
|
62
|
+
}
|
|
63
|
+
export function skillGetEvaluationEnvelope(input, services) {
|
|
64
|
+
if (services.skills.getSkillEvaluationRequest === undefined)
|
|
65
|
+
return errorEnvelope('validation_failed', 'Skill evaluation get service is not available', 'vgxness_skill_get_evaluation');
|
|
66
|
+
return toEnvelope('vgxness_skill_get_evaluation', services.skills.getSkillEvaluationRequest(input));
|
|
67
|
+
}
|
|
68
|
+
export function skillCreateDraftEnvelope(input, services) {
|
|
69
|
+
if (services.skills.createSkillDraft === undefined)
|
|
70
|
+
return errorEnvelope('validation_failed', 'Skill draft creation service is not available', 'vgxness_skill_create_draft');
|
|
71
|
+
return toEnvelope('vgxness_skill_create_draft', services.skills.createSkillDraft(input));
|
|
72
|
+
}
|
|
73
|
+
export function skillUpdateDraftEnvelope(input, services) {
|
|
74
|
+
if (services.skills.updateSkillDraft === undefined)
|
|
75
|
+
return errorEnvelope('validation_failed', 'Skill draft update service is not available', 'vgxness_skill_update_draft');
|
|
76
|
+
return toEnvelope('vgxness_skill_update_draft', services.skills.updateSkillDraft(input));
|
|
77
|
+
}
|
|
78
|
+
export function skillPublishVersionEnvelope(input, services) {
|
|
79
|
+
if (services.skills.publishSkillVersion === undefined)
|
|
80
|
+
return errorEnvelope('validation_failed', 'Skill version publication service is not available', 'vgxness_skill_publish_version');
|
|
81
|
+
return toEnvelope('vgxness_skill_publish_version', services.skills.publishSkillVersion(input));
|
|
82
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { errorEnvelope, successEnvelope } from '../../schema.js';
|
|
2
|
+
function toEnvelope(result) {
|
|
3
|
+
return result.ok
|
|
4
|
+
? successEnvelope('vgxness_verification_plan', result.value)
|
|
5
|
+
: errorEnvelope(result.error.code, result.error.message, 'vgxness_verification_plan');
|
|
6
|
+
}
|
|
7
|
+
export function verificationPlanEnvelope(input, services) {
|
|
8
|
+
if (services.verificationPlan === undefined)
|
|
9
|
+
return errorEnvelope('validation_failed', 'Verification plan service is not available', 'vgxness_verification_plan');
|
|
10
|
+
return toEnvelope(services.verificationPlan.getPlan(input.changeType));
|
|
11
|
+
}
|