mindforge-cc 9.0.0 → 10.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.mindforge/config.json +1 -1
- package/CHANGELOG.md +15 -0
- package/LICENSE +1 -1
- package/MINDFORGE.md +13 -0
- package/README.md +7 -1
- package/bin/autonomous/audit-writer.js +90 -0
- package/bin/autonomous/auto-runner.js +209 -431
- package/bin/autonomous/state-manager.js +116 -0
- package/bin/autonomous/task-dispatcher.js +114 -0
- package/bin/autonomous/wave-executor.js +169 -0
- package/bin/browser/browser-daemon.js +31 -1
- package/bin/change-classifier.js +3 -3
- package/bin/dashboard/api-router.js +21 -22
- package/bin/dashboard/metrics-aggregator.js +44 -3
- package/bin/dashboard/server.js +54 -10
- package/bin/dashboard/sse-bridge.js +51 -5
- package/bin/engine/learning-manager.js +1 -1
- package/bin/engine/mesh-syncer.js +26 -22
- package/bin/engine/nexus-tracer.js +6 -5
- package/bin/engine/orbital-guardian.js +13 -10
- package/bin/engine/skill-evolver.js +12 -14
- package/bin/engine/temporal-hub.js +25 -1
- package/bin/governance/policy-engine.js +5 -5
- package/bin/governance/policy-gate-hardened.js +2 -2
- package/bin/governance/quantum-crypto.js +10 -2
- package/bin/memory/identity-synthesizer.js +9 -11
- package/bin/memory/knowledge-store.js +62 -6
- package/bin/memory/semantic-hub.js +26 -30
- package/bin/memory/vector-hub.js +377 -193
- package/bin/migrations/v8-sqlite-migration.js +22 -21
- package/bin/migrations/v9-unified-memory.js +1 -1
- package/bin/mindforge-cli.js +47 -11
- package/bin/models/model-broker.js +2 -0
- package/bin/revops/remediation-queue.js +16 -55
- package/bin/utils/errors.js +40 -0
- package/bin/utils/file-io.js +102 -0
- package/bin/utils/index.js +6 -0
- package/bin/utils/paths.js +33 -0
- package/docs/sdk-reference.md +374 -24
- package/docs/troubleshooting.md +4 -4
- package/examples/sdk-integration/README.md +24 -0
- package/examples/sdk-integration/index.js +24 -0
- package/examples/starter-project/MINDFORGE.md +8 -8
- package/package.json +25 -14
- package/.agent/bin/lib/commands.cjs +0 -959
- package/.agent/bin/lib/config.cjs +0 -421
- package/.agent/bin/lib/core.cjs +0 -1166
- package/.agent/bin/lib/frontmatter.cjs +0 -307
- package/.agent/bin/lib/init.cjs +0 -1336
- package/.agent/bin/lib/milestone.cjs +0 -252
- package/.agent/bin/lib/model-profiles.cjs +0 -68
- package/.agent/bin/lib/phase.cjs +0 -888
- package/.agent/bin/lib/profile-output.cjs +0 -952
- package/.agent/bin/lib/profile-pipeline.cjs +0 -539
- package/.agent/bin/lib/roadmap.cjs +0 -329
- package/.agent/bin/lib/security.cjs +0 -356
- package/.agent/bin/lib/state.cjs +0 -969
- package/.agent/bin/lib/template.cjs +0 -222
- package/.agent/bin/lib/uat.cjs +0 -189
- package/.agent/bin/lib/verify.cjs +0 -851
- package/.agent/bin/lib/workstream.cjs +0 -491
- package/.agent/bin/mindforge-tools.cjs +0 -897
- package/.agent/file-manifest.json +0 -219
- package/.agent/forge/help.md +0 -11
- package/.agent/forge/init-project.md +0 -36
- package/.agent/forge/plan-phase.md +0 -34
- package/.agent/mindforge/add-backlog.md +0 -32
- package/.agent/mindforge/agent.md +0 -31
- package/.agent/mindforge/approve.md +0 -22
- package/.agent/mindforge/audit.md +0 -34
- package/.agent/mindforge/auto.md +0 -26
- package/.agent/mindforge/benchmark.md +0 -37
- package/.agent/mindforge/browse.md +0 -30
- package/.agent/mindforge/complete-milestone.md +0 -22
- package/.agent/mindforge/costs.md +0 -15
- package/.agent/mindforge/cross-review.md +0 -21
- package/.agent/mindforge/dashboard.md +0 -102
- package/.agent/mindforge/debug.md +0 -133
- package/.agent/mindforge/discuss-phase.md +0 -142
- package/.agent/mindforge/do.md +0 -31
- package/.agent/mindforge/execute-phase.md +0 -200
- package/.agent/mindforge/health.md +0 -31
- package/.agent/mindforge/help.md +0 -33
- package/.agent/mindforge/init-org.md +0 -135
- package/.agent/mindforge/init-project.md +0 -170
- package/.agent/mindforge/install-skill.md +0 -28
- package/.agent/mindforge/learn.md +0 -147
- package/.agent/mindforge/learning.md +0 -20
- package/.agent/mindforge/map-codebase.md +0 -302
- package/.agent/mindforge/marketplace.md +0 -124
- package/.agent/mindforge/metrics.md +0 -26
- package/.agent/mindforge/migrate.md +0 -44
- package/.agent/mindforge/milestone.md +0 -16
- package/.agent/mindforge/new-runtime.md +0 -23
- package/.agent/mindforge/next.md +0 -109
- package/.agent/mindforge/note.md +0 -35
- package/.agent/mindforge/plan-phase.md +0 -131
- package/.agent/mindforge/plant-seed.md +0 -31
- package/.agent/mindforge/plugins.md +0 -44
- package/.agent/mindforge/pr-review.md +0 -45
- package/.agent/mindforge/profile-team.md +0 -27
- package/.agent/mindforge/publish-skill.md +0 -23
- package/.agent/mindforge/qa.md +0 -20
- package/.agent/mindforge/quick.md +0 -139
- package/.agent/mindforge/record-learning.md +0 -22
- package/.agent/mindforge/release.md +0 -14
- package/.agent/mindforge/remember.md +0 -30
- package/.agent/mindforge/research.md +0 -16
- package/.agent/mindforge/retrospective.md +0 -31
- package/.agent/mindforge/review-backlog.md +0 -34
- package/.agent/mindforge/review.md +0 -161
- package/.agent/mindforge/security-scan.md +0 -242
- package/.agent/mindforge/session-report.md +0 -39
- package/.agent/mindforge/ship.md +0 -111
- package/.agent/mindforge/skills.md +0 -145
- package/.agent/mindforge/status.md +0 -113
- package/.agent/mindforge/steer.md +0 -17
- package/.agent/mindforge/sync-confluence.md +0 -15
- package/.agent/mindforge/sync-jira.md +0 -16
- package/.agent/mindforge/tokens.md +0 -12
- package/.agent/mindforge/ui-phase.md +0 -34
- package/.agent/mindforge/ui-review.md +0 -36
- package/.agent/mindforge/update.md +0 -46
- package/.agent/mindforge/validate-phase.md +0 -31
- package/.agent/mindforge/verify-phase.md +0 -66
- package/.agent/mindforge/workspace.md +0 -33
- package/.agent/mindforge/workstreams.md +0 -35
- package/.agent/settings.json +0 -42
- package/.agent/skills/mindforge-add-backlog/SKILL.md +0 -72
- package/.agent/skills/mindforge-add-phase/SKILL.md +0 -39
- package/.agent/skills/mindforge-add-tests/SKILL.md +0 -28
- package/.agent/skills/mindforge-add-todo/SKILL.md +0 -42
- package/.agent/skills/mindforge-audit-milestone/SKILL.md +0 -29
- package/.agent/skills/mindforge-audit-uat/SKILL.md +0 -20
- package/.agent/skills/mindforge-autonomous/SKILL.md +0 -33
- package/.agent/skills/mindforge-brainstorming/SKILL.md +0 -164
- package/.agent/skills/mindforge-brainstorming/scripts/frame-template.html +0 -214
- package/.agent/skills/mindforge-brainstorming/scripts/helper.js +0 -88
- package/.agent/skills/mindforge-brainstorming/scripts/server.cjs +0 -354
- package/.agent/skills/mindforge-brainstorming/scripts/start-server.sh +0 -148
- package/.agent/skills/mindforge-brainstorming/scripts/stop-server.sh +0 -56
- package/.agent/skills/mindforge-brainstorming/spec-document-reviewer-prompt.md +0 -49
- package/.agent/skills/mindforge-brainstorming/visual-companion.md +0 -287
- package/.agent/skills/mindforge-check-todos/SKILL.md +0 -40
- package/.agent/skills/mindforge-cleanup/SKILL.md +0 -19
- package/.agent/skills/mindforge-complete-milestone/SKILL.md +0 -131
- package/.agent/skills/mindforge-debug/SKILL.md +0 -163
- package/.agent/skills/mindforge-debug_extended/CREATION-LOG.md +0 -119
- package/.agent/skills/mindforge-debug_extended/SKILL.md +0 -296
- package/.agent/skills/mindforge-debug_extended/condition-based-waiting-example.ts +0 -158
- package/.agent/skills/mindforge-debug_extended/condition-based-waiting.md +0 -115
- package/.agent/skills/mindforge-debug_extended/defense-in-depth.md +0 -122
- package/.agent/skills/mindforge-debug_extended/find-polluter.sh +0 -63
- package/.agent/skills/mindforge-debug_extended/root-cause-tracing.md +0 -169
- package/.agent/skills/mindforge-debug_extended/test-academic.md +0 -14
- package/.agent/skills/mindforge-debug_extended/test-pressure-1.md +0 -58
- package/.agent/skills/mindforge-debug_extended/test-pressure-2.md +0 -68
- package/.agent/skills/mindforge-debug_extended/test-pressure-3.md +0 -69
- package/.agent/skills/mindforge-discuss-phase/SKILL.md +0 -54
- package/.agent/skills/mindforge-do/SKILL.md +0 -26
- package/.agent/skills/mindforge-execute-phase/SKILL.md +0 -49
- package/.agent/skills/mindforge-execute-phase_extended/SKILL.md +0 -70
- package/.agent/skills/mindforge-fast/SKILL.md +0 -23
- package/.agent/skills/mindforge-forensics/SKILL.md +0 -49
- package/.agent/skills/mindforge-health/SKILL.md +0 -17
- package/.agent/skills/mindforge-help/SKILL.md +0 -23
- package/.agent/skills/mindforge-insert-phase/SKILL.md +0 -28
- package/.agent/skills/mindforge-join-discord/SKILL.md +0 -19
- package/.agent/skills/mindforge-list-phase-assumptions/SKILL.md +0 -41
- package/.agent/skills/mindforge-list-workspaces/SKILL.md +0 -17
- package/.agent/skills/mindforge-manager/SKILL.md +0 -32
- package/.agent/skills/mindforge-map-codebase/SKILL.md +0 -64
- package/.agent/skills/mindforge-milestone-summary/SKILL.md +0 -44
- package/.agent/skills/mindforge-neural-orchestrator/SKILL.md +0 -115
- package/.agent/skills/mindforge-neural-orchestrator/references/codex-tools.md +0 -100
- package/.agent/skills/mindforge-neural-orchestrator/references/gemini-tools.md +0 -33
- package/.agent/skills/mindforge-new-milestone/SKILL.md +0 -38
- package/.agent/skills/mindforge-new-project/SKILL.md +0 -36
- package/.agent/skills/mindforge-new-workspace/SKILL.md +0 -39
- package/.agent/skills/mindforge-next/SKILL.md +0 -19
- package/.agent/skills/mindforge-note/SKILL.md +0 -29
- package/.agent/skills/mindforge-parallel-mesh_extended/SKILL.md +0 -182
- package/.agent/skills/mindforge-pause-work/SKILL.md +0 -35
- package/.agent/skills/mindforge-plan-milestone-gaps/SKILL.md +0 -28
- package/.agent/skills/mindforge-plan-phase/SKILL.md +0 -38
- package/.agent/skills/mindforge-plan-phase_extended/SKILL.md +0 -152
- package/.agent/skills/mindforge-plan-phase_extended/plan-document-reviewer-prompt.md +0 -49
- package/.agent/skills/mindforge-plant-seed/SKILL.md +0 -22
- package/.agent/skills/mindforge-pr-branch/SKILL.md +0 -21
- package/.agent/skills/mindforge-profile-user/SKILL.md +0 -38
- package/.agent/skills/mindforge-progress/SKILL.md +0 -19
- package/.agent/skills/mindforge-quick/SKILL.md +0 -38
- package/.agent/skills/mindforge-reapply-patches/SKILL.md +0 -124
- package/.agent/skills/mindforge-remove-phase/SKILL.md +0 -26
- package/.agent/skills/mindforge-remove-workspace/SKILL.md +0 -22
- package/.agent/skills/mindforge-research-phase/SKILL.md +0 -186
- package/.agent/skills/mindforge-resume-work/SKILL.md +0 -35
- package/.agent/skills/mindforge-review/SKILL.md +0 -31
- package/.agent/skills/mindforge-review-backlog/SKILL.md +0 -58
- package/.agent/skills/mindforge-review-inbound/SKILL.md +0 -213
- package/.agent/skills/mindforge-review-request/SKILL.md +0 -105
- package/.agent/skills/mindforge-review-request/code-reviewer.md +0 -146
- package/.agent/skills/mindforge-session-report/SKILL.md +0 -16
- package/.agent/skills/mindforge-set-profile/SKILL.md +0 -9
- package/.agent/skills/mindforge-settings/SKILL.md +0 -32
- package/.agent/skills/mindforge-ship/SKILL.md +0 -16
- package/.agent/skills/mindforge-ship_extended/SKILL.md +0 -200
- package/.agent/skills/mindforge-skill-creation/SKILL.md +0 -655
- package/.agent/skills/mindforge-skill-creation/anthropic-best-practices.md +0 -1150
- package/.agent/skills/mindforge-skill-creation/examples/CLAUDE_MD_TESTING.md +0 -189
- package/.agent/skills/mindforge-skill-creation/graphviz-conventions.dot +0 -172
- package/.agent/skills/mindforge-skill-creation/persuasion-principles.md +0 -187
- package/.agent/skills/mindforge-skill-creation/render-graphs.js +0 -168
- package/.agent/skills/mindforge-skill-creation/testing-skills-with-subagents.md +0 -384
- package/.agent/skills/mindforge-stats/SKILL.md +0 -16
- package/.agent/skills/mindforge-swarm-execution/SKILL.md +0 -277
- package/.agent/skills/mindforge-swarm-execution/code-quality-reviewer-prompt.md +0 -26
- package/.agent/skills/mindforge-swarm-execution/implementer-prompt.md +0 -113
- package/.agent/skills/mindforge-swarm-execution/spec-reviewer-prompt.md +0 -61
- package/.agent/skills/mindforge-system-architecture/SKILL.md +0 -136
- package/.agent/skills/mindforge-system-architecture/examples.md +0 -120
- package/.agent/skills/mindforge-system-architecture/scaling-checklist.md +0 -76
- package/.agent/skills/mindforge-tdd/SKILL.md +0 -112
- package/.agent/skills/mindforge-tdd/deep-modules.md +0 -21
- package/.agent/skills/mindforge-tdd/interface-design.md +0 -22
- package/.agent/skills/mindforge-tdd/mocking.md +0 -24
- package/.agent/skills/mindforge-tdd/refactoring.md +0 -21
- package/.agent/skills/mindforge-tdd/tests.md +0 -28
- package/.agent/skills/mindforge-tdd_extended/SKILL.md +0 -371
- package/.agent/skills/mindforge-tdd_extended/testing-anti-patterns.md +0 -299
- package/.agent/skills/mindforge-thread/SKILL.md +0 -123
- package/.agent/skills/mindforge-ui-phase/SKILL.md +0 -24
- package/.agent/skills/mindforge-ui-review/SKILL.md +0 -24
- package/.agent/skills/mindforge-update/SKILL.md +0 -35
- package/.agent/skills/mindforge-validate-phase/SKILL.md +0 -26
- package/.agent/skills/mindforge-verify-work/SKILL.md +0 -30
- package/.agent/skills/mindforge-verify-work_extended/SKILL.md +0 -139
- package/.agent/skills/mindforge-workspace-isolated/SKILL.md +0 -218
- package/.agent/skills/mindforge-workstreams/SKILL.md +0 -65
- package/.agent/workflows/forge:help.md +0 -10
- package/.agent/workflows/forge:init-project.md +0 -35
- package/.agent/workflows/forge:plan-phase.md +0 -33
- package/.agent/workflows/mindforge-add-phase.md +0 -112
- package/.agent/workflows/mindforge-add-tests.md +0 -351
- package/.agent/workflows/mindforge-add-todo.md +0 -158
- package/.agent/workflows/mindforge-audit-milestone.md +0 -332
- package/.agent/workflows/mindforge-audit-uat.md +0 -109
- package/.agent/workflows/mindforge-autonomous.md +0 -815
- package/.agent/workflows/mindforge-check-todos.md +0 -177
- package/.agent/workflows/mindforge-cleanup.md +0 -152
- package/.agent/workflows/mindforge-complete-milestone.md +0 -766
- package/.agent/workflows/mindforge-diagnose-issues.md +0 -220
- package/.agent/workflows/mindforge-discovery-phase.md +0 -289
- package/.agent/workflows/mindforge-discuss-phase-assumptions.md +0 -645
- package/.agent/workflows/mindforge-discuss-phase.md +0 -1047
- package/.agent/workflows/mindforge-do.md +0 -104
- package/.agent/workflows/mindforge-execute-phase.md +0 -838
- package/.agent/workflows/mindforge-execute-plan.md +0 -509
- package/.agent/workflows/mindforge-fast.md +0 -105
- package/.agent/workflows/mindforge-forensics.md +0 -265
- package/.agent/workflows/mindforge-health.md +0 -181
- package/.agent/workflows/mindforge-help.md +0 -606
- package/.agent/workflows/mindforge-insert-phase.md +0 -130
- package/.agent/workflows/mindforge-list-phase-assumptions.md +0 -178
- package/.agent/workflows/mindforge-list-workspaces.md +0 -56
- package/.agent/workflows/mindforge-manager.md +0 -360
- package/.agent/workflows/mindforge-map-codebase.md +0 -370
- package/.agent/workflows/mindforge-milestone-summary.md +0 -223
- package/.agent/workflows/mindforge-new-milestone.md +0 -469
- package/.agent/workflows/mindforge-new-project.md +0 -1226
- package/.agent/workflows/mindforge-new-workspace.md +0 -237
- package/.agent/workflows/mindforge-next.md +0 -97
- package/.agent/workflows/mindforge-node-repair.md +0 -92
- package/.agent/workflows/mindforge-note.md +0 -156
- package/.agent/workflows/mindforge-pause-work.md +0 -176
- package/.agent/workflows/mindforge-plan-milestone-gaps.md +0 -273
- package/.agent/workflows/mindforge-plan-phase.md +0 -877
- package/.agent/workflows/mindforge-plant-seed.md +0 -169
- package/.agent/workflows/mindforge-pr-branch.md +0 -129
- package/.agent/workflows/mindforge-profile-user.md +0 -450
- package/.agent/workflows/mindforge-progress.md +0 -507
- package/.agent/workflows/mindforge-quick.md +0 -732
- package/.agent/workflows/mindforge-remove-phase.md +0 -155
- package/.agent/workflows/mindforge-remove-workspace.md +0 -90
- package/.agent/workflows/mindforge-research-phase.md +0 -74
- package/.agent/workflows/mindforge-resume-project.md +0 -325
- package/.agent/workflows/mindforge-review.md +0 -228
- package/.agent/workflows/mindforge-session-report.md +0 -146
- package/.agent/workflows/mindforge-settings.md +0 -283
- package/.agent/workflows/mindforge-ship.md +0 -228
- package/.agent/workflows/mindforge-stats.md +0 -60
- package/.agent/workflows/mindforge-transition.md +0 -671
- package/.agent/workflows/mindforge-ui-phase.md +0 -290
- package/.agent/workflows/mindforge-ui-review.md +0 -157
- package/.agent/workflows/mindforge-update.md +0 -323
- package/.agent/workflows/mindforge-validate-phase.md +0 -167
- package/.agent/workflows/mindforge-verify-phase.md +0 -254
- package/.agent/workflows/mindforge-verify-work.md +0 -628
- package/.agent/workflows/mindforge:add-backlog.md +0 -24
- package/.agent/workflows/mindforge:agent.md +0 -25
- package/.agent/workflows/mindforge:approve.md +0 -21
- package/.agent/workflows/mindforge:architecture.md +0 -40
- package/.agent/workflows/mindforge:audit.md +0 -33
- package/.agent/workflows/mindforge:auto.md +0 -25
- package/.agent/workflows/mindforge:benchmark.md +0 -36
- package/.agent/workflows/mindforge:brainstorming.md +0 -16
- package/.agent/workflows/mindforge:browse.md +0 -29
- package/.agent/workflows/mindforge:complete-milestone.md +0 -21
- package/.agent/workflows/mindforge:costs.md +0 -14
- package/.agent/workflows/mindforge:cross-review.md +0 -20
- package/.agent/workflows/mindforge:dashboard.md +0 -101
- package/.agent/workflows/mindforge:debug.md +0 -131
- package/.agent/workflows/mindforge:discuss-phase.md +0 -141
- package/.agent/workflows/mindforge:do.md +0 -25
- package/.agent/workflows/mindforge:execute-phase.md +0 -205
- package/.agent/workflows/mindforge:executor.md +0 -18
- package/.agent/workflows/mindforge:health.md +0 -24
- package/.agent/workflows/mindforge:help.md +0 -26
- package/.agent/workflows/mindforge:identity.md +0 -18
- package/.agent/workflows/mindforge:init-org.md +0 -134
- package/.agent/workflows/mindforge:init-project.md +0 -185
- package/.agent/workflows/mindforge:install-skill.md +0 -27
- package/.agent/workflows/mindforge:learn.md +0 -146
- package/.agent/workflows/mindforge:map-codebase.md +0 -301
- package/.agent/workflows/mindforge:marketplace.md +0 -123
- package/.agent/workflows/mindforge:memory.md +0 -18
- package/.agent/workflows/mindforge:metrics.md +0 -25
- package/.agent/workflows/mindforge:migrate.md +0 -43
- package/.agent/workflows/mindforge:milestone.md +0 -15
- package/.agent/workflows/mindforge:new-runtime.md +0 -22
- package/.agent/workflows/mindforge:next.md +0 -108
- package/.agent/workflows/mindforge:note.md +0 -27
- package/.agent/workflows/mindforge:plan-phase.md +0 -139
- package/.agent/workflows/mindforge:planner.md +0 -18
- package/.agent/workflows/mindforge:plant-seed.md +0 -24
- package/.agent/workflows/mindforge:plugins.md +0 -43
- package/.agent/workflows/mindforge:pr-review.md +0 -44
- package/.agent/workflows/mindforge:profile-team.md +0 -26
- package/.agent/workflows/mindforge:publish-skill.md +0 -22
- package/.agent/workflows/mindforge:qa.md +0 -19
- package/.agent/workflows/mindforge:quick.md +0 -138
- package/.agent/workflows/mindforge:release.md +0 -13
- package/.agent/workflows/mindforge:remember.md +0 -29
- package/.agent/workflows/mindforge:research.md +0 -15
- package/.agent/workflows/mindforge:researcher.md +0 -18
- package/.agent/workflows/mindforge:retrospective.md +0 -29
- package/.agent/workflows/mindforge:review-backlog.md +0 -26
- package/.agent/workflows/mindforge:review.md +0 -160
- package/.agent/workflows/mindforge:reviewer.md +0 -18
- package/.agent/workflows/mindforge:security-scan.md +0 -236
- package/.agent/workflows/mindforge:session-report.md +0 -31
- package/.agent/workflows/mindforge:ship.md +0 -108
- package/.agent/workflows/mindforge:skills.md +0 -144
- package/.agent/workflows/mindforge:soul.md +0 -54
- package/.agent/workflows/mindforge:status.md +0 -107
- package/.agent/workflows/mindforge:steer.md +0 -16
- package/.agent/workflows/mindforge:sync-confluence.md +0 -14
- package/.agent/workflows/mindforge:sync-jira.md +0 -15
- package/.agent/workflows/mindforge:tdd.md +0 -46
- package/.agent/workflows/mindforge:tokens.md +0 -11
- package/.agent/workflows/mindforge:tool.md +0 -18
- package/.agent/workflows/mindforge:ui-phase.md +0 -27
- package/.agent/workflows/mindforge:ui-review.md +0 -28
- package/.agent/workflows/mindforge:update.md +0 -45
- package/.agent/workflows/mindforge:validate-phase.md +0 -25
- package/.agent/workflows/mindforge:verify-phase.md +0 -65
- package/.agent/workflows/mindforge:workspace.md +0 -32
- package/.agent/workflows/mindforge:workstreams.md +0 -27
- package/.agent/workflows/publish-release.md +0 -36
- package/.claude/CLAUDE.md +0 -102
- package/.claude/commands/forge/help.md +0 -7
- package/.claude/commands/forge/init-project.md +0 -32
- package/.claude/commands/forge/plan-phase.md +0 -30
- package/.claude/commands/mindforge/add-backlog.md +0 -32
- package/.claude/commands/mindforge/agent.md +0 -31
- package/.claude/commands/mindforge/approve.md +0 -22
- package/.claude/commands/mindforge/audit.md +0 -34
- package/.claude/commands/mindforge/auto.md +0 -26
- package/.claude/commands/mindforge/benchmark.md +0 -37
- package/.claude/commands/mindforge/browse.md +0 -30
- package/.claude/commands/mindforge/complete-milestone.md +0 -22
- package/.claude/commands/mindforge/costs.md +0 -15
- package/.claude/commands/mindforge/cross-review.md +0 -21
- package/.claude/commands/mindforge/dashboard.md +0 -102
- package/.claude/commands/mindforge/debug.md +0 -133
- package/.claude/commands/mindforge/discuss-phase.md +0 -142
- package/.claude/commands/mindforge/do.md +0 -31
- package/.claude/commands/mindforge/execute-phase.md +0 -200
- package/.claude/commands/mindforge/health.md +0 -31
- package/.claude/commands/mindforge/help.md +0 -33
- package/.claude/commands/mindforge/init-org.md +0 -135
- package/.claude/commands/mindforge/init-project.md +0 -170
- package/.claude/commands/mindforge/install-skill.md +0 -28
- package/.claude/commands/mindforge/learn.md +0 -147
- package/.claude/commands/mindforge/learning.md +0 -20
- package/.claude/commands/mindforge/map-codebase.md +0 -302
- package/.claude/commands/mindforge/marketplace.md +0 -124
- package/.claude/commands/mindforge/metrics.md +0 -26
- package/.claude/commands/mindforge/migrate.md +0 -44
- package/.claude/commands/mindforge/milestone.md +0 -16
- package/.claude/commands/mindforge/new-runtime.md +0 -23
- package/.claude/commands/mindforge/next.md +0 -109
- package/.claude/commands/mindforge/note.md +0 -35
- package/.claude/commands/mindforge/plan-phase.md +0 -131
- package/.claude/commands/mindforge/plant-seed.md +0 -31
- package/.claude/commands/mindforge/plugins.md +0 -44
- package/.claude/commands/mindforge/pr-review.md +0 -45
- package/.claude/commands/mindforge/profile-team.md +0 -27
- package/.claude/commands/mindforge/publish-skill.md +0 -23
- package/.claude/commands/mindforge/qa.md +0 -20
- package/.claude/commands/mindforge/quick.md +0 -139
- package/.claude/commands/mindforge/record-learning.md +0 -22
- package/.claude/commands/mindforge/release.md +0 -14
- package/.claude/commands/mindforge/remember.md +0 -30
- package/.claude/commands/mindforge/research.md +0 -16
- package/.claude/commands/mindforge/retrospective.md +0 -31
- package/.claude/commands/mindforge/review-backlog.md +0 -34
- package/.claude/commands/mindforge/review.md +0 -161
- package/.claude/commands/mindforge/security-scan.md +0 -242
- package/.claude/commands/mindforge/session-report.md +0 -39
- package/.claude/commands/mindforge/ship.md +0 -111
- package/.claude/commands/mindforge/skills.md +0 -145
- package/.claude/commands/mindforge/status.md +0 -113
- package/.claude/commands/mindforge/steer.md +0 -17
- package/.claude/commands/mindforge/sync-confluence.md +0 -15
- package/.claude/commands/mindforge/sync-jira.md +0 -16
- package/.claude/commands/mindforge/tokens.md +0 -12
- package/.claude/commands/mindforge/ui-phase.md +0 -34
- package/.claude/commands/mindforge/ui-review.md +0 -36
- package/.claude/commands/mindforge/update.md +0 -46
- package/.claude/commands/mindforge/validate-phase.md +0 -31
- package/.claude/commands/mindforge/verify-phase.md +0 -66
- package/.claude/commands/mindforge/workspace.md +0 -33
- package/.claude/commands/mindforge/workstreams.md +0 -35
- package/.claude/settings.local.json +0 -16
- package/.mindforge/audit/AUDIT-SCHEMA.md +0 -470
- package/.mindforge/browser/daemon-protocol.md +0 -24
- package/.mindforge/browser/qa-engine.md +0 -16
- package/.mindforge/browser/session-manager.md +0 -18
- package/.mindforge/browser/visual-verify-spec.md +0 -31
- package/.mindforge/celestial.db +0 -0
- package/.mindforge/ci/ci-config-schema.md +0 -21
- package/.mindforge/ci/ci-mode.md +0 -179
- package/.mindforge/ci/github-actions-adapter.md +0 -224
- package/.mindforge/ci/gitlab-ci-adapter.md +0 -31
- package/.mindforge/ci/jenkins-adapter.md +0 -44
- package/.mindforge/dashboard/api-reference.md +0 -122
- package/.mindforge/dashboard/dashboard-spec.md +0 -96
- package/.mindforge/distribution/marketplace.md +0 -53
- package/.mindforge/distribution/registry-client.md +0 -166
- package/.mindforge/distribution/registry-schema.md +0 -96
- package/.mindforge/distribution/skill-publisher.md +0 -44
- package/.mindforge/distribution/skill-validator.md +0 -74
- package/.mindforge/governance/GOVERNANCE-CONFIG.md +0 -17
- package/.mindforge/governance/approval-workflow.md +0 -37
- package/.mindforge/governance/change-classifier.md +0 -63
- package/.mindforge/governance/compliance-gates.md +0 -31
- package/.mindforge/governance/policies/sovereign-default.json +0 -16
- package/.mindforge/integrations/confluence.md +0 -27
- package/.mindforge/integrations/connection-manager.md +0 -163
- package/.mindforge/integrations/github.md +0 -25
- package/.mindforge/integrations/gitlab.md +0 -13
- package/.mindforge/integrations/jira.md +0 -102
- package/.mindforge/integrations/slack.md +0 -41
- package/.mindforge/intelligence/antipattern-detector.md +0 -75
- package/.mindforge/intelligence/difficulty-scorer.md +0 -55
- package/.mindforge/intelligence/health-engine.md +0 -208
- package/.mindforge/intelligence/skill-gap-analyser.md +0 -40
- package/.mindforge/intelligence/smart-compaction.md +0 -71
- package/.mindforge/memory/MEMORY-SCHEMA.md +0 -155
- package/.mindforge/memory/engine/capture-protocol.md +0 -36
- package/.mindforge/memory/engine/global-sync-spec.md +0 -42
- package/.mindforge/memory/engine/retrieval-spec.md +0 -44
- package/.mindforge/memory/sync-manifest.json +0 -6
- package/.mindforge/metrics/METRICS-SCHEMA.md +0 -42
- package/.mindforge/metrics/quality-tracker.md +0 -32
- package/.mindforge/models/model-registry.md +0 -48
- package/.mindforge/models/model-router.md +0 -30
- package/.mindforge/monorepo/cross-package-planner.md +0 -114
- package/.mindforge/monorepo/dependency-graph-builder.md +0 -32
- package/.mindforge/monorepo/workspace-detector.md +0 -129
- package/.mindforge/org/CONVENTIONS.md +0 -62
- package/.mindforge/org/ORG.md +0 -51
- package/.mindforge/org/SECURITY.md +0 -50
- package/.mindforge/org/TOOLS.md +0 -53
- package/.mindforge/org/integrations/INTEGRATIONS-CONFIG.md +0 -58
- package/.mindforge/org/skills/MANIFEST.md +0 -15
- package/.mindforge/plugins/PLUGINS-MANIFEST.md +0 -23
- package/.mindforge/plugins/plugin-loader.md +0 -93
- package/.mindforge/plugins/plugin-registry.md +0 -44
- package/.mindforge/plugins/plugin-schema.md +0 -68
- package/.mindforge/pr-review/ai-reviewer.md +0 -266
- package/.mindforge/pr-review/finding-formatter.md +0 -46
- package/.mindforge/pr-review/review-prompt-templates.md +0 -44
- package/.mindforge/production/compatibility-layer.md +0 -39
- package/.mindforge/production/migration-engine.md +0 -52
- package/.mindforge/production/production-checklist.md +0 -76
- package/.mindforge/production/token-optimiser.md +0 -68
- package/.mindforge/skills-builder/auto-capture-protocol.md +0 -88
- package/.mindforge/skills-builder/learn-protocol.md +0 -161
- package/.mindforge/skills-builder/quality-scoring.md +0 -120
- package/.mindforge/team/TEAM-PROFILE.md +0 -42
- package/.mindforge/team/multi-handoff.md +0 -23
- package/.mindforge/team/profiles/README.md +0 -13
- package/.mindforge/team/session-merger.md +0 -18
- package/.planning/ARCHITECTURE.md +0 -0
- package/.planning/HANDOFF.json +0 -8
- package/.planning/PROJECT.md +0 -33
- package/.planning/RELEASE-CHECKLIST.md +0 -68
- package/.planning/REQUIREMENTS.md +0 -35
- package/.planning/ROADMAP.md +0 -12
- package/.planning/STATE.md +0 -36
- package/.planning/approvals/.gitkeep +0 -1
- package/.planning/archive/.gitkeep +0 -1
- package/.planning/audit-archive/.gitkeep +0 -1
- package/.planning/decisions/.gitkeep +0 -0
- package/.planning/jira-sync.json +0 -1
- package/.planning/milestones/.gitkeep +0 -1
- package/.planning/phases/.gitkeep +0 -0
- package/.planning/research/.gitkeep +0 -0
- package/.planning/screenshots/.gitkeep +0 -0
- package/.planning/slack-threads.json +0 -1
- package/docs/CAPABILITIES-MANIFEST.md +0 -64
- package/docs/Context/Master-Context.md +0 -731
- package/docs/INTELLIGENCE-MESH.md +0 -37
- package/docs/MIND-FORGE-REFERENCE-V6.md +0 -96
- package/docs/PERSONAS.md +0 -960
- package/docs/References/audit-events.md +0 -59
- package/docs/References/checkpoints.md +0 -778
- package/docs/References/commands.md +0 -107
- package/docs/References/config-reference.md +0 -81
- package/docs/References/continuation-format.md +0 -249
- package/docs/References/decimal-phase-calculation.md +0 -64
- package/docs/References/git-integration.md +0 -295
- package/docs/References/git-planning-commit.md +0 -38
- package/docs/References/model-profile-resolution.md +0 -36
- package/docs/References/model-profiles.md +0 -139
- package/docs/References/phase-argument-parsing.md +0 -61
- package/docs/References/planning-config.md +0 -202
- package/docs/References/questioning.md +0 -162
- package/docs/References/sdk-api.md +0 -53
- package/docs/References/skills-api.md +0 -57
- package/docs/References/tdd.md +0 -263
- package/docs/References/ui-brand.md +0 -160
- package/docs/References/user-profiling.md +0 -681
- package/docs/References/verification-patterns.md +0 -612
- package/docs/References/workstream-flag.md +0 -58
- package/docs/Templates/Agents/CLAUDE-MD.md +0 -122
- package/docs/Templates/Agents/COPILOT-INSTRUCTIONS.md +0 -7
- package/docs/Templates/Agents/DEBUGGER-PROMPT.md +0 -91
- package/docs/Templates/Agents/PLANNER-PROMPT.md +0 -117
- package/docs/Templates/Codebase/architecture.md +0 -255
- package/docs/Templates/Codebase/concerns.md +0 -310
- package/docs/Templates/Codebase/conventions.md +0 -307
- package/docs/Templates/Codebase/integrations.md +0 -280
- package/docs/Templates/Codebase/stack.md +0 -186
- package/docs/Templates/Codebase/structure.md +0 -285
- package/docs/Templates/Codebase/testing.md +0 -480
- package/docs/Templates/Execution/CONTINUE-HERE.md +0 -78
- package/docs/Templates/Execution/DISCUSSION-LOG.md +0 -63
- package/docs/Templates/Execution/PHASE-PROMPT.md +0 -610
- package/docs/Templates/Execution/STATE.md +0 -176
- package/docs/Templates/Execution/SUMMARY-COMPLEX.md +0 -59
- package/docs/Templates/Execution/SUMMARY-MINIMAL.md +0 -41
- package/docs/Templates/Execution/SUMMARY-STANDARD.md +0 -48
- package/docs/Templates/Execution/SUMMARY.md +0 -248
- package/docs/Templates/Profile/DEV-PREFERENCES.md +0 -21
- package/docs/Templates/Profile/USER-PROFILE.md +0 -146
- package/docs/Templates/Profile/USER-SETUP.md +0 -311
- package/docs/Templates/Project/AGENTS_LEARNING.md +0 -88
- package/docs/Templates/Project/DISCOVERY.md +0 -146
- package/docs/Templates/Project/MILESTONE-ARCHIVE.md +0 -123
- package/docs/Templates/Project/MILESTONE.md +0 -115
- package/docs/Templates/Project/PROJECT.md +0 -206
- package/docs/Templates/Project/REQUIREMENTS.md +0 -231
- package/docs/Templates/Project/RETROSPECTIVE.md +0 -54
- package/docs/Templates/Project/ROADMAP.md +0 -202
- package/docs/Templates/Quality/DEBUG.md +0 -164
- package/docs/Templates/Quality/UAT.md +0 -280
- package/docs/Templates/Quality/UI-SPEC.md +0 -100
- package/docs/Templates/Quality/VALIDATION.md +0 -76
- package/docs/Templates/Quality/VERIFICATION-REPORT.md +0 -322
- package/docs/Templates/Research/ARCHITECTURE.md +0 -204
- package/docs/Templates/Research/FEATURES.md +0 -147
- package/docs/Templates/Research/PITFALLS.md +0 -200
- package/docs/Templates/Research/STACK.md +0 -120
- package/docs/Templates/Research/SUMMARY.md +0 -170
- package/docs/Templates/System/CONFIG.json +0 -43
- package/docs/Templates/System/CONTEXT.md +0 -352
- package/docs/adr/ADR-024-browser-localhost-only.md +0 -17
- package/docs/adr/ADR-025-visual-verify-failure-treatment.md +0 -19
- package/docs/adr/ADR-026-session-persistence-security.md +0 -20
- package/docs/adr/ADR-042-ads-protocol.md +0 -30
- package/docs/architecture/NEXUS-DASHBOARD.md +0 -35
- package/docs/architecture/PAR-ZTS-SURVEY.md +0 -43
- package/docs/architecture/README.md +0 -78
- package/docs/architecture/V3-CORE.md +0 -52
- package/docs/architecture/V4-SWARM-MESH.md +0 -77
- package/docs/architecture/V5-ENTERPRISE.md +0 -131
- package/docs/architecture/V6-SOVEREIGN.md +0 -43
- package/docs/architecture/V8-SRE.md +0 -88
- package/docs/architecture/V9-BEDROCK.md +0 -162
- package/docs/architecture/adr-039-multi-runtime-support.md +0 -20
- package/docs/architecture/adr-040-additive-schema-migration.md +0 -21
- package/docs/architecture/adr-041-stable-runtime-interface-contract.md +0 -20
- package/docs/architecture/decision-records-index.md +0 -29
- package/docs/ci-cd-integration.md +0 -30
- package/docs/ci-cd.md +0 -92
- package/docs/ci-quickstart.md +0 -78
- package/docs/commands-skills/DISCOVERED_SKILLS.md +0 -21
- package/docs/contributing/CONTRIBUTING.md +0 -38
- package/docs/contributing/plugin-authoring.md +0 -50
- package/docs/contributing/skill-authoring.md +0 -41
- package/docs/enterprise-setup.md +0 -25
- package/docs/feature-dashboard.md +0 -63
- package/docs/governance-guide.md +0 -134
- package/docs/monorepo-guide.md +0 -26
- package/docs/persona-customisation.md +0 -56
- package/docs/publishing-guide.md +0 -43
- package/docs/quick-verify.md +0 -33
- package/docs/registry/AGENTS.md +0 -37
- package/docs/registry/COMMANDS.md +0 -87
- package/docs/registry/HOOKS.md +0 -38
- package/docs/registry/PERSONAS.md +0 -64
- package/docs/registry/README.md +0 -27
- package/docs/registry/SKILLS.md +0 -142
- package/docs/registry/WORKFLOWS.md +0 -72
- package/docs/release-checklist-guide.md +0 -37
- package/docs/requirements.md +0 -29
- package/docs/security/SECURITY.md +0 -55
- package/docs/security/ZTAI-OVERVIEW.md +0 -37
- package/docs/security/penetration-test-results.md +0 -31
- package/docs/security/threat-model.md +0 -142
- package/docs/skills-authoring-guide.md +0 -176
- package/docs/skills-publishing-guide.md +0 -22
- package/docs/team-setup-guide.md +0 -21
- package/docs/testing-current-version.md +0 -130
- package/docs/tutorial.md +0 -162
- package/docs/upgrade.md +0 -58
- package/docs/usp-features.md +0 -102
- package/docs/workflow-atlas.md +0 -57
package/bin/dashboard/server.js
CHANGED
|
@@ -8,13 +8,15 @@
|
|
|
8
8
|
* /mindforge:dashboard [--port 7339] [--open] [--stop]
|
|
9
9
|
*
|
|
10
10
|
* Security: binds to 127.0.0.1 only (ADR-017 policy).
|
|
11
|
-
*
|
|
11
|
+
* Bearer token auth on all mutating endpoints (POST/PUT/DELETE).
|
|
12
|
+
* Token printed to console at startup and written to .mindforge/.dashboard-token.
|
|
12
13
|
*/
|
|
13
14
|
'use strict';
|
|
14
15
|
|
|
15
16
|
const http = require('http');
|
|
16
17
|
const path = require('path');
|
|
17
18
|
const fs = require('fs');
|
|
19
|
+
const crypto = require('crypto');
|
|
18
20
|
const ARGS = process.argv.slice(2);
|
|
19
21
|
|
|
20
22
|
const PORT = parseInt(ARGS.find((_, i, a) => a[i-1] === '--port') || '7339', 10);
|
|
@@ -39,6 +41,39 @@ const RevOpsAPI = require('./revops-api');
|
|
|
39
41
|
// ── Express app ───────────────────────────────────────────────────────────────
|
|
40
42
|
const app = express();
|
|
41
43
|
|
|
44
|
+
// ── Bearer token authentication ──────────────────────────────────────────────
|
|
45
|
+
const DASHBOARD_TOKEN = crypto.randomBytes(32).toString('hex');
|
|
46
|
+
const TOKEN_FILE = path.join(process.cwd(), '.mindforge', '.dashboard-token');
|
|
47
|
+
|
|
48
|
+
// Write token to file with restrictive permissions (owner-only read/write)
|
|
49
|
+
fs.mkdirSync(path.dirname(TOKEN_FILE), { recursive: true });
|
|
50
|
+
fs.writeFileSync(TOKEN_FILE, DASHBOARD_TOKEN, { mode: 0o600 });
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* requireAuth — Validates Bearer token on mutating requests (POST/PUT/DELETE).
|
|
54
|
+
* GET requests pass through unguarded for the dashboard UI.
|
|
55
|
+
*/
|
|
56
|
+
function requireAuth(req, res, next) {
|
|
57
|
+
if (req.method === 'GET' || req.method === 'OPTIONS') return next();
|
|
58
|
+
|
|
59
|
+
const authHeader = req.headers.authorization;
|
|
60
|
+
if (!authHeader || !authHeader.startsWith('Bearer ')) {
|
|
61
|
+
return res.status(401).json({
|
|
62
|
+
error: 'Authentication required. Use the token printed at dashboard startup.'
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
const provided = authHeader.slice(7);
|
|
67
|
+
// Constant-time comparison to prevent timing attacks
|
|
68
|
+
if (!crypto.timingSafeEqual(Buffer.from(provided), Buffer.from(DASHBOARD_TOKEN))) {
|
|
69
|
+
return res.status(401).json({
|
|
70
|
+
error: 'Authentication required. Use the token printed at dashboard startup.'
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
next();
|
|
75
|
+
}
|
|
76
|
+
|
|
42
77
|
// Security middleware
|
|
43
78
|
app.use((req, res, next) => {
|
|
44
79
|
const addr = req.socket.remoteAddress;
|
|
@@ -49,19 +84,18 @@ app.use((req, res, next) => {
|
|
|
49
84
|
next();
|
|
50
85
|
});
|
|
51
86
|
|
|
52
|
-
// CORS —
|
|
87
|
+
// CORS — restrict to dashboard's own origin only (prevent cross-origin attacks)
|
|
88
|
+
const DASHBOARD_ORIGIN = `http://127.0.0.1:${PORT}`;
|
|
53
89
|
app.use((req, res, next) => {
|
|
54
90
|
const origin = req.headers.origin;
|
|
55
91
|
|
|
56
|
-
if (origin
|
|
57
|
-
|
|
58
|
-
res.setHeader('Access-Control-Allow-Origin', origin);
|
|
92
|
+
if (origin === DASHBOARD_ORIGIN) {
|
|
93
|
+
res.setHeader('Access-Control-Allow-Origin', DASHBOARD_ORIGIN);
|
|
59
94
|
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS');
|
|
60
|
-
res.setHeader('Access-Control-Allow-Headers', 'Content-Type');
|
|
61
|
-
res.setHeader('Vary', 'Origin');
|
|
95
|
+
res.setHeader('Access-Control-Allow-Headers', 'Content-Type, Authorization');
|
|
96
|
+
res.setHeader('Vary', 'Origin');
|
|
62
97
|
}
|
|
63
|
-
//
|
|
64
|
-
// This is correct — same-origin requests don't need CORS headers
|
|
98
|
+
// Reject cross-origin requests from other localhost ports/origins
|
|
65
99
|
if (req.method === 'OPTIONS') return res.status(204).end();
|
|
66
100
|
next();
|
|
67
101
|
});
|
|
@@ -71,11 +105,17 @@ app.use(express.json({ limit: '64kb' })); // Limit request body size
|
|
|
71
105
|
// Security headers
|
|
72
106
|
app.use((req, res, next) => {
|
|
73
107
|
res.setHeader('X-Content-Type-Options', 'nosniff');
|
|
74
|
-
res.setHeader('X-Frame-Options', '
|
|
108
|
+
res.setHeader('X-Frame-Options', 'DENY');
|
|
75
109
|
res.setHeader('Cache-Control', 'no-store'); // Never cache dashboard responses
|
|
110
|
+
res.setHeader('Content-Security-Policy', "default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; connect-src 'self'");
|
|
111
|
+
res.setHeader('X-XSS-Protection', '1; mode=block');
|
|
112
|
+
res.setHeader('Referrer-Policy', 'strict-origin-when-cross-origin');
|
|
76
113
|
next();
|
|
77
114
|
});
|
|
78
115
|
|
|
116
|
+
// ── Apply requireAuth to mutating API routes ─────────────────────────────────
|
|
117
|
+
app.use('/api', requireAuth);
|
|
118
|
+
|
|
79
119
|
// ── Static frontend ───────────────────────────────────────────────────────────
|
|
80
120
|
app.get('/', (req, res) => {
|
|
81
121
|
if (!fs.existsSync(FRONTEND)) {
|
|
@@ -103,6 +143,8 @@ server.listen(PORT, '127.0.0.1', () => {
|
|
|
103
143
|
console.log(` Status: http://localhost:${PORT}/api/status`);
|
|
104
144
|
console.log(` Events: http://localhost:${PORT}/events`);
|
|
105
145
|
console.log(` PID: ${process.pid}`);
|
|
146
|
+
console.log(`[Dashboard] Auth token: ${DASHBOARD_TOKEN}`);
|
|
147
|
+
console.log(` Token file: ${TOKEN_FILE}`);
|
|
106
148
|
console.log('\n Press CTRL+C to stop\n');
|
|
107
149
|
|
|
108
150
|
if (OPEN_BROWSER) {
|
|
@@ -127,6 +169,8 @@ server.on('error', err => {
|
|
|
127
169
|
function shutdown(signal) {
|
|
128
170
|
console.log(`\n[dashboard] ${signal} received — shutting down`);
|
|
129
171
|
SSE.stop();
|
|
172
|
+
// Remove sensitive token file on shutdown
|
|
173
|
+
if (fs.existsSync(TOKEN_FILE)) fs.unlinkSync(TOKEN_FILE);
|
|
130
174
|
server.close(() => {
|
|
131
175
|
if (fs.existsSync(PID_FILE)) fs.unlinkSync(PID_FILE);
|
|
132
176
|
process.exit(0);
|
|
@@ -25,12 +25,19 @@ let _auditInode = 0; // Track file inode for rotation detection
|
|
|
25
25
|
let _lastAutoState = '';
|
|
26
26
|
let _lastApprovals = '';
|
|
27
27
|
|
|
28
|
+
// ── Smart polling: mtime tracking ────────────────────────────────────────────
|
|
29
|
+
const _lastMtimes = Object.create(null);
|
|
30
|
+
|
|
28
31
|
// ── Client management ─────────────────────────────────────────────────────────
|
|
29
32
|
|
|
30
33
|
function addClient(res) {
|
|
34
|
+
const wasEmpty = clients.size === 0;
|
|
31
35
|
clients.add(res);
|
|
36
|
+
if (wasEmpty) startPolling();
|
|
37
|
+
|
|
32
38
|
res.on('close', () => {
|
|
33
39
|
clients.delete(res);
|
|
40
|
+
if (clients.size === 0) stopPolling();
|
|
34
41
|
});
|
|
35
42
|
}
|
|
36
43
|
|
|
@@ -106,6 +113,10 @@ function pollAutoState() {
|
|
|
106
113
|
if (!fs.existsSync(AUTO_STATE_PATH)) return;
|
|
107
114
|
|
|
108
115
|
try {
|
|
116
|
+
const mtime = fs.statSync(AUTO_STATE_PATH).mtimeMs;
|
|
117
|
+
if (mtime === _lastMtimes[AUTO_STATE_PATH]) return; // unchanged
|
|
118
|
+
_lastMtimes[AUTO_STATE_PATH] = mtime;
|
|
119
|
+
|
|
109
120
|
const raw = fs.readFileSync(AUTO_STATE_PATH, 'utf8');
|
|
110
121
|
if (raw === _lastAutoState) return;
|
|
111
122
|
_lastAutoState = raw;
|
|
@@ -120,6 +131,10 @@ function pollApprovals() {
|
|
|
120
131
|
if (!fs.existsSync(APPROVAL_DIR)) return;
|
|
121
132
|
|
|
122
133
|
try {
|
|
134
|
+
const mtime = fs.statSync(APPROVAL_DIR).mtimeMs;
|
|
135
|
+
if (mtime === _lastMtimes[APPROVAL_DIR]) return; // unchanged
|
|
136
|
+
_lastMtimes[APPROVAL_DIR] = mtime;
|
|
137
|
+
|
|
123
138
|
const files = fs.readdirSync(APPROVAL_DIR)
|
|
124
139
|
.filter(f => f.startsWith('APPROVAL-') && f.endsWith('.json'))
|
|
125
140
|
.sort();
|
|
@@ -139,17 +154,25 @@ function pollApprovals() {
|
|
|
139
154
|
} catch { /* ignore */ }
|
|
140
155
|
}
|
|
141
156
|
|
|
142
|
-
// ──
|
|
157
|
+
// ── Polling lifecycle (idle-aware) ────────────────────────────────────────────
|
|
143
158
|
|
|
144
159
|
let _pollInterval = null;
|
|
145
160
|
let _pingInterval = null;
|
|
161
|
+
let _initialized = false;
|
|
146
162
|
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
163
|
+
/**
|
|
164
|
+
* Start polling only when at least one client is connected.
|
|
165
|
+
* Idempotent — calling when already polling is a no-op.
|
|
166
|
+
*/
|
|
167
|
+
function startPolling() {
|
|
168
|
+
if (_pollInterval) return; // Already polling
|
|
169
|
+
|
|
170
|
+
// Initialize AUDIT position on first start
|
|
171
|
+
if (!_initialized && fs.existsSync(AUDIT_PATH)) {
|
|
150
172
|
const stat = fs.statSync(AUDIT_PATH);
|
|
151
173
|
_lastAuditSize = stat.size;
|
|
152
174
|
_auditInode = stat.ino;
|
|
175
|
+
_initialized = true;
|
|
153
176
|
}
|
|
154
177
|
|
|
155
178
|
// Poll every 2 seconds
|
|
@@ -168,11 +191,34 @@ function start() {
|
|
|
168
191
|
_pingInterval.unref();
|
|
169
192
|
}
|
|
170
193
|
|
|
171
|
-
|
|
194
|
+
/**
|
|
195
|
+
* Stop polling when zero clients are connected.
|
|
196
|
+
* Idempotent — calling when already stopped is a no-op.
|
|
197
|
+
*/
|
|
198
|
+
function stopPolling() {
|
|
172
199
|
if (_pollInterval) { clearInterval(_pollInterval); _pollInterval = null; }
|
|
173
200
|
if (_pingInterval) { clearInterval(_pingInterval); _pingInterval = null; }
|
|
174
201
|
}
|
|
175
202
|
|
|
203
|
+
/**
|
|
204
|
+
* Public start — initializes the bridge (legacy compat).
|
|
205
|
+
* Actual polling begins only when the first client connects.
|
|
206
|
+
*/
|
|
207
|
+
function start() {
|
|
208
|
+
// Pre-initialize AUDIT position so first client gets instant data
|
|
209
|
+
if (!_initialized && fs.existsSync(AUDIT_PATH)) {
|
|
210
|
+
const stat = fs.statSync(AUDIT_PATH);
|
|
211
|
+
_lastAuditSize = stat.size;
|
|
212
|
+
_auditInode = stat.ino;
|
|
213
|
+
_initialized = true;
|
|
214
|
+
}
|
|
215
|
+
// Polling starts lazily when addClient() is called
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
function stop() {
|
|
219
|
+
stopPolling();
|
|
220
|
+
}
|
|
221
|
+
|
|
176
222
|
function getClientCount() { return clients.size; }
|
|
177
223
|
|
|
178
224
|
module.exports = { addClient, broadcast, start, stop, getClientCount };
|
|
@@ -169,7 +169,7 @@ if (require.main === module) {
|
|
|
169
169
|
context: 'CLI Manual Test',
|
|
170
170
|
category: 'Architecture'
|
|
171
171
|
});
|
|
172
|
-
console.log(
|
|
172
|
+
console.log(' │ 🛡️ SOVEREIGN INTELLIGENCE v8.2.0 — PQAS & Proactive Homing Enabled');
|
|
173
173
|
const status = await manager.getStatus();
|
|
174
174
|
console.log('📊 Learning System Status:', status);
|
|
175
175
|
} else {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* MindForge v8 — Federated Mesh Synthesis (FMS)
|
|
3
3
|
* Component: Mesh Syncer (Pillar XVI)
|
|
4
|
-
*
|
|
4
|
+
*
|
|
5
5
|
* Facilitates secure, signed knowledge handoffs between MindForge nodes.
|
|
6
6
|
*/
|
|
7
7
|
'use strict';
|
|
@@ -15,10 +15,13 @@ const configManager = require('../governance/config-manager');
|
|
|
15
15
|
|
|
16
16
|
class MeshSyncer {
|
|
17
17
|
constructor() {
|
|
18
|
-
this.nodeId = configManager.get('mesh.node_id', 'unknown-node');
|
|
19
18
|
this.vhInitialized = false;
|
|
20
19
|
}
|
|
21
20
|
|
|
21
|
+
get nodeId() {
|
|
22
|
+
return configManager.get('mesh.node_id', 'unknown-node');
|
|
23
|
+
}
|
|
24
|
+
|
|
22
25
|
async ensureInit() {
|
|
23
26
|
if (!this.vhInitialized) {
|
|
24
27
|
await vectorHub.init();
|
|
@@ -36,14 +39,18 @@ class MeshSyncer {
|
|
|
36
39
|
console.log(`[MeshSyncer] Exporting bundle from ${this.nodeId}...`);
|
|
37
40
|
|
|
38
41
|
// 1. Fetch Traces (Golden ones or since date)
|
|
39
|
-
let
|
|
42
|
+
let traces;
|
|
40
43
|
if (options.since) {
|
|
41
|
-
|
|
44
|
+
traces = vectorHub.query(
|
|
45
|
+
'SELECT * FROM traces WHERE timestamp > ? LIMIT 100',
|
|
46
|
+
[options.since]
|
|
47
|
+
);
|
|
48
|
+
} else {
|
|
49
|
+
traces = vectorHub.query('SELECT * FROM traces LIMIT 100');
|
|
42
50
|
}
|
|
43
|
-
const traces = await traceQuery.limit(100).execute();
|
|
44
51
|
|
|
45
52
|
// 2. Fetch Skills
|
|
46
|
-
const skills =
|
|
53
|
+
const skills = vectorHub.query('SELECT * FROM skills');
|
|
47
54
|
|
|
48
55
|
const payload = {
|
|
49
56
|
version: '1.0.0',
|
|
@@ -53,14 +60,13 @@ class MeshSyncer {
|
|
|
53
60
|
};
|
|
54
61
|
|
|
55
62
|
// 3. Sign the bundle using ZTAI
|
|
56
|
-
// Note: In v8, we sign the entire payload string to ensure integrity.
|
|
57
63
|
const did = configManager.get('governance.active_did');
|
|
58
64
|
if (!did) {
|
|
59
65
|
throw new Error('[MeshSyncer] No active DID found for signing. Secure identity required.');
|
|
60
66
|
}
|
|
61
67
|
|
|
62
68
|
const signature = await ztaiManager.signData(did, JSON.stringify(payload));
|
|
63
|
-
|
|
69
|
+
|
|
64
70
|
const bundle = {
|
|
65
71
|
payload,
|
|
66
72
|
signature,
|
|
@@ -105,20 +111,18 @@ class MeshSyncer {
|
|
|
105
111
|
// 3. Merge Skills
|
|
106
112
|
const skills = payload.data.skills || [];
|
|
107
113
|
for (const skill of skills) {
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
}))
|
|
121
|
-
.execute();
|
|
114
|
+
vectorHub.run(
|
|
115
|
+
`INSERT OR REPLACE INTO skills (skill_id, name, description, path, success_rate, last_verified)
|
|
116
|
+
VALUES (?, ?, ?, ?, ?, ?)`,
|
|
117
|
+
[
|
|
118
|
+
skill.skill_id,
|
|
119
|
+
skill.name,
|
|
120
|
+
skill.description,
|
|
121
|
+
skill.path,
|
|
122
|
+
Math.max(skill.success_rate || 0, 0.5),
|
|
123
|
+
new Date().toISOString()
|
|
124
|
+
]
|
|
125
|
+
);
|
|
122
126
|
}
|
|
123
127
|
|
|
124
128
|
console.log(`[MeshSyncer] Successfully imported ${traces.length} external traces and ${skills.length} skills.`);
|
|
@@ -15,6 +15,7 @@ const driftDetector = require('./logic-drift-detector'); // v6.1 Pillar X
|
|
|
15
15
|
const remediationEngine = require('./remediation-engine'); // v6.1 Pillar X
|
|
16
16
|
const logicValidator = require('./logic-validator'); // v7 Pillar X
|
|
17
17
|
const vectorHub = require('../memory/vector-hub'); // v8 Pillar XV
|
|
18
|
+
const { AuditWriter } = require('../utils/file-io');
|
|
18
19
|
|
|
19
20
|
class NexusTracer {
|
|
20
21
|
constructor(config = {}) {
|
|
@@ -31,8 +32,11 @@ class NexusTracer {
|
|
|
31
32
|
this.RES_THRESHOLD = configManager.get('governance.res_threshold', 0.8);
|
|
32
33
|
this.entropyCache = new Map();
|
|
33
34
|
|
|
35
|
+
// v9: Async Audit Writer (replaces sync appendFileSync)
|
|
36
|
+
this._auditWriter = new AuditWriter(this.auditPath);
|
|
37
|
+
|
|
34
38
|
// v6.1: Neural Drift Remediation (NDR)
|
|
35
|
-
this.DRIFT_SAMPLE_RATE = 1.0;
|
|
39
|
+
this.DRIFT_SAMPLE_RATE = 1.0;
|
|
36
40
|
|
|
37
41
|
// v7: Agentic SBOM with Arbitrage
|
|
38
42
|
this.sbom = {
|
|
@@ -292,10 +296,7 @@ class NexusTracer {
|
|
|
292
296
|
}
|
|
293
297
|
|
|
294
298
|
try {
|
|
295
|
-
|
|
296
|
-
fs.mkdirSync(path.dirname(this.auditPath), { recursive: true });
|
|
297
|
-
}
|
|
298
|
-
fs.appendFileSync(this.auditPath, JSON.stringify(entry) + '\n');
|
|
299
|
+
await this._auditWriter.write(entry);
|
|
299
300
|
} catch (err) {
|
|
300
301
|
console.error(`[NexusTracer] Failed to write audit entry: ${err.message}`);
|
|
301
302
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* MindForge v8 — Orbital Governance
|
|
3
3
|
* Component: Orbital Guardian (Pillar XVIII)
|
|
4
|
-
*
|
|
4
|
+
*
|
|
5
5
|
* Manages hardware-bound/biometric attestations for high-blast-radius actions.
|
|
6
6
|
*/
|
|
7
7
|
'use strict';
|
|
@@ -51,9 +51,11 @@ class OrbitalGuardian {
|
|
|
51
51
|
};
|
|
52
52
|
|
|
53
53
|
// 2. Persist to SQLite (Source of truth for v8 Governance Dashboard)
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
54
|
+
vectorHub.run(
|
|
55
|
+
`INSERT INTO attestations (id, request_id, status, attestation_payload, timestamp)
|
|
56
|
+
VALUES (?, ?, ?, ?, ?)`,
|
|
57
|
+
[attestation.id, attestation.request_id, attestation.status, attestation.attestation_payload, attestation.timestamp]
|
|
58
|
+
);
|
|
57
59
|
|
|
58
60
|
console.log(`[ORBITAL-GUARDIAN] Attestation SUCCESS: ${attestation.id}`);
|
|
59
61
|
return attestation;
|
|
@@ -63,14 +65,15 @@ class OrbitalGuardian {
|
|
|
63
65
|
* Verifies if a request has a valid hardware bypass.
|
|
64
66
|
*/
|
|
65
67
|
async verify(requestId) {
|
|
68
|
+
if (!requestId) return { verified: false };
|
|
66
69
|
await this.ensureInit();
|
|
67
|
-
|
|
68
|
-
const record = await vectorHub.db.selectFrom('attestations')
|
|
69
|
-
.selectAll()
|
|
70
|
-
.where('request_id', '=', requestId)
|
|
71
|
-
.where('status', '=', 'APPROVED')
|
|
72
|
-
.executeTakeFirst();
|
|
73
70
|
|
|
71
|
+
const results = vectorHub.query(
|
|
72
|
+
'SELECT * FROM attestations WHERE request_id = ? AND status = ? LIMIT 1',
|
|
73
|
+
[requestId, 'APPROVED']
|
|
74
|
+
);
|
|
75
|
+
|
|
76
|
+
const record = results[0];
|
|
74
77
|
if (!record) return { verified: false };
|
|
75
78
|
|
|
76
79
|
return {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* MindForge v8 — Autonomous Skill Evolution (ASE)
|
|
3
3
|
* Component: Skill Evolver (Pillar XVII)
|
|
4
|
-
*
|
|
4
|
+
*
|
|
5
5
|
* Mines successful reasoning patterns to synthesize new reusable skills.
|
|
6
6
|
*/
|
|
7
7
|
'use strict';
|
|
@@ -32,12 +32,11 @@ class SkillEvolver {
|
|
|
32
32
|
await this.ensureInit();
|
|
33
33
|
console.log('[ASE] Starting skill evolution cycle...');
|
|
34
34
|
|
|
35
|
-
// 1. Mine Golden Traces (Drift <
|
|
36
|
-
const goldenTraces =
|
|
37
|
-
|
|
38
|
-
.
|
|
39
|
-
|
|
40
|
-
.execute();
|
|
35
|
+
// 1. Mine Golden Traces (Drift < threshold)
|
|
36
|
+
const goldenTraces = vectorHub.query(
|
|
37
|
+
'SELECT * FROM traces WHERE drift_score < ? AND event = ?',
|
|
38
|
+
[this.threshold, 'reasoning_trace']
|
|
39
|
+
);
|
|
41
40
|
|
|
42
41
|
if (goldenTraces.length < this.minCount) {
|
|
43
42
|
console.log(`[ASE] Only ${goldenTraces.length} golden traces found. Threshold is ${this.minCount}. Evolution deferred.`);
|
|
@@ -67,12 +66,12 @@ class SkillEvolver {
|
|
|
67
66
|
const clusters = new Map();
|
|
68
67
|
|
|
69
68
|
for (const t of traces) {
|
|
70
|
-
const metadata = JSON.parse(t.metadata || '{}');
|
|
71
69
|
// Group by agent and the first 20 chars of thought as a simple proxy for 'intent'
|
|
72
|
-
const
|
|
73
|
-
|
|
70
|
+
const content = t.content || '';
|
|
71
|
+
const key = `${t.agent || 'unknown'}:${content.substring(0, 20)}`;
|
|
72
|
+
|
|
74
73
|
if (!clusters.has(key)) {
|
|
75
|
-
clusters.set(key, { traces: [], agent: t.agent, intent:
|
|
74
|
+
clusters.set(key, { traces: [], agent: t.agent, intent: content.substring(0, 50) });
|
|
76
75
|
}
|
|
77
76
|
clusters.get(key).traces.push(t);
|
|
78
77
|
}
|
|
@@ -85,11 +84,10 @@ class SkillEvolver {
|
|
|
85
84
|
*/
|
|
86
85
|
async _synthesize(cluster) {
|
|
87
86
|
const id = `ev_${crypto.randomBytes(4).toString('hex')}`;
|
|
88
|
-
|
|
89
|
-
|
|
87
|
+
|
|
90
88
|
// Abstract the strategy from the trace content
|
|
91
89
|
const summary = cluster.traces.map(t => `- ${t.content}`).join('\n');
|
|
92
|
-
|
|
90
|
+
|
|
93
91
|
return {
|
|
94
92
|
id,
|
|
95
93
|
name: `Synthesized Skill (${cluster.agent}) - ${id}`,
|
|
@@ -23,9 +23,15 @@ class TemporalHub {
|
|
|
23
23
|
* @param {object} metadata - Optional context (task_name, session_id)
|
|
24
24
|
*/
|
|
25
25
|
static captureState(auditId, metadata = {}) {
|
|
26
|
+
if (!/^[a-f0-9-]{8,40}$/.test(auditId)) {
|
|
27
|
+
throw new Error('Invalid audit ID format');
|
|
28
|
+
}
|
|
26
29
|
if (!fs.existsSync(PLANNING_DIR)) return null;
|
|
27
|
-
|
|
30
|
+
|
|
28
31
|
const snapshotDir = path.join(HISTORY_DIR, auditId);
|
|
32
|
+
if (!path.resolve(snapshotDir).startsWith(path.resolve(HISTORY_DIR))) {
|
|
33
|
+
throw new Error('Path traversal detected in audit ID');
|
|
34
|
+
}
|
|
29
35
|
if (!fs.existsSync(snapshotDir)) {
|
|
30
36
|
fs.mkdirSync(snapshotDir, { recursive: true });
|
|
31
37
|
}
|
|
@@ -69,7 +75,13 @@ class TemporalHub {
|
|
|
69
75
|
* @param {string} auditId
|
|
70
76
|
*/
|
|
71
77
|
static rollbackTo(auditId) {
|
|
78
|
+
if (!/^[a-f0-9-]{8,40}$/.test(auditId)) {
|
|
79
|
+
throw new Error('Invalid audit ID format');
|
|
80
|
+
}
|
|
72
81
|
const snapshotDir = path.join(HISTORY_DIR, auditId);
|
|
82
|
+
if (!path.resolve(snapshotDir).startsWith(path.resolve(HISTORY_DIR))) {
|
|
83
|
+
throw new Error('Path traversal detected in audit ID');
|
|
84
|
+
}
|
|
73
85
|
if (!fs.existsSync(snapshotDir)) {
|
|
74
86
|
throw new Error(`Snapshot ${auditId} not found in history.`);
|
|
75
87
|
}
|
|
@@ -116,7 +128,13 @@ class TemporalHub {
|
|
|
116
128
|
* Read a file from a specific historical snapshot.
|
|
117
129
|
*/
|
|
118
130
|
static getSnapshotFile(auditId, filePath) {
|
|
131
|
+
if (!/^[a-f0-9-]{8,40}$/.test(auditId)) {
|
|
132
|
+
throw new Error('Invalid audit ID format');
|
|
133
|
+
}
|
|
119
134
|
const snapPath = path.join(HISTORY_DIR, auditId, path.basename(filePath));
|
|
135
|
+
if (!path.resolve(snapPath).startsWith(path.resolve(HISTORY_DIR))) {
|
|
136
|
+
throw new Error('Path traversal detected in audit ID');
|
|
137
|
+
}
|
|
120
138
|
if (fs.existsSync(snapPath)) {
|
|
121
139
|
return fs.readFileSync(snapPath, 'utf8');
|
|
122
140
|
}
|
|
@@ -127,7 +145,13 @@ class TemporalHub {
|
|
|
127
145
|
* Capture terminal output for a command and associate with audit point.
|
|
128
146
|
*/
|
|
129
147
|
static captureTerminal(auditId, stdout, stderr) {
|
|
148
|
+
if (!/^[a-f0-9-]{8,40}$/.test(auditId)) {
|
|
149
|
+
throw new Error('Invalid audit ID format');
|
|
150
|
+
}
|
|
130
151
|
const logDir = path.join(HISTORY_DIR, auditId, 'logs');
|
|
152
|
+
if (!path.resolve(logDir).startsWith(path.resolve(HISTORY_DIR))) {
|
|
153
|
+
throw new Error('Path traversal detected in audit ID');
|
|
154
|
+
}
|
|
131
155
|
if (!fs.existsSync(logDir)) fs.mkdirSync(logDir, { recursive: true });
|
|
132
156
|
|
|
133
157
|
if (stdout) fs.writeFileSync(path.join(logDir, 'stdout.log'), stdout);
|
|
@@ -8,12 +8,14 @@ const fs = require('node:fs');
|
|
|
8
8
|
const path = require('node:path');
|
|
9
9
|
const ImpactAnalyzer = require('./impact-analyzer');
|
|
10
10
|
const policyGate = require('./policy-gate-hardened');
|
|
11
|
+
const { AuditWriter } = require('../utils/file-io');
|
|
11
12
|
|
|
12
13
|
class PolicyEngine {
|
|
13
14
|
constructor(config = {}) {
|
|
14
15
|
this.policiesDir = config.policiesDir || path.join(__dirname, 'policies');
|
|
15
16
|
this.planningDir = config.planningDir || path.join(process.cwd(), '.planning');
|
|
16
17
|
this.auditLogPath = path.join(this.planningDir, 'RISK-AUDIT.jsonl');
|
|
18
|
+
this._auditWriter = new AuditWriter(this.auditLogPath);
|
|
17
19
|
this.ensurePoliciesDir();
|
|
18
20
|
}
|
|
19
21
|
|
|
@@ -73,7 +75,7 @@ class PolicyEngine {
|
|
|
73
75
|
// [PQAS] v7: Hardened Biometric Bypass for Risk > 95
|
|
74
76
|
if (impactScore > 95) {
|
|
75
77
|
const gateResult = await policyGate.evaluateBypass(intent, impactScore);
|
|
76
|
-
if (gateResult.status === 'WAIT_FOR_BIOMETRIC') {
|
|
78
|
+
if (gateResult.status === 'WAIT_FOR_BIOMETRIC' || gateResult.status === 'WAIT_FOR_ORBITAL') {
|
|
77
79
|
verdict = {
|
|
78
80
|
verdict: 'DENY',
|
|
79
81
|
reason: gateResult.reason,
|
|
@@ -143,7 +145,7 @@ class PolicyEngine {
|
|
|
143
145
|
}
|
|
144
146
|
|
|
145
147
|
logAudit(intent, impactScore, verdict) {
|
|
146
|
-
|
|
148
|
+
this._auditWriter.write({
|
|
147
149
|
timestamp: new Date().toISOString(),
|
|
148
150
|
requestId: verdict.requestId,
|
|
149
151
|
did: intent.did,
|
|
@@ -153,9 +155,7 @@ class PolicyEngine {
|
|
|
153
155
|
impactScore,
|
|
154
156
|
verdict: verdict.verdict,
|
|
155
157
|
reason: verdict.reason
|
|
156
|
-
})
|
|
157
|
-
|
|
158
|
-
fs.appendFileSync(this.auditLogPath, entry);
|
|
158
|
+
});
|
|
159
159
|
}
|
|
160
160
|
|
|
161
161
|
loadPolicies() {
|
|
@@ -38,8 +38,8 @@ class PolicyGateHardened {
|
|
|
38
38
|
}
|
|
39
39
|
|
|
40
40
|
// 2. Trigger Orbital Challenge
|
|
41
|
-
return {
|
|
42
|
-
status: 'WAIT_FOR_ORBITAL',
|
|
41
|
+
return {
|
|
42
|
+
status: 'WAIT_FOR_ORBITAL',
|
|
43
43
|
reason: 'Hardware/Biometric attestation required for orbital-tier mutation',
|
|
44
44
|
challenge_id: `orb_${Math.random().toString(36).substr(2, 6)}`,
|
|
45
45
|
impact: impactScore
|
|
@@ -103,8 +103,16 @@ class QuantumCrypto {
|
|
|
103
103
|
|
|
104
104
|
verifyZKProof(proof, intentId) {
|
|
105
105
|
if (!proof.startsWith('zkp_v1_')) return false;
|
|
106
|
-
// Real verification
|
|
107
|
-
|
|
106
|
+
// SECURITY: Real ZK verification is not yet implemented.
|
|
107
|
+
// Governance gate MUST block by default — fail-closed.
|
|
108
|
+
console.warn(
|
|
109
|
+
`[SECURITY][quantum-crypto] verifyZKProof is a STUB — real ZK verification not yet implemented. ` +
|
|
110
|
+
`Blocking proof for intent="${intentId}". All governance checks will fail until a real verifier is integrated.`
|
|
111
|
+
);
|
|
112
|
+
throw new Error(
|
|
113
|
+
'ZK proof verification is not implemented. Governance gate denies by default. ' +
|
|
114
|
+
'Integrate a real ZK verifier (e.g., snarkjs/circom) before enabling this path.'
|
|
115
|
+
);
|
|
108
116
|
}
|
|
109
117
|
}
|
|
110
118
|
|
|
@@ -18,7 +18,7 @@ class IdentitySynthesizer {
|
|
|
18
18
|
*/
|
|
19
19
|
async bootstrap(answers = {}) {
|
|
20
20
|
const blueprint = this.getGrandBlueprint();
|
|
21
|
-
|
|
21
|
+
|
|
22
22
|
// Inject initialization metadata into the blueprint
|
|
23
23
|
let soulContent = blueprint
|
|
24
24
|
.replace(/{USER_CONTEXT}/g, answers.user || 'Sovereign Agent User')
|
|
@@ -33,14 +33,12 @@ class IdentitySynthesizer {
|
|
|
33
33
|
*/
|
|
34
34
|
async evolve() {
|
|
35
35
|
await vectorHub.init();
|
|
36
|
-
|
|
36
|
+
|
|
37
37
|
// 1. Mine recent traces (Golden & Ghost)
|
|
38
|
-
const traces =
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
.limit(100)
|
|
43
|
-
.execute();
|
|
38
|
+
const traces = vectorHub.query(
|
|
39
|
+
'SELECT * FROM traces WHERE event = ? ORDER BY timestamp DESC LIMIT 100',
|
|
40
|
+
['reasoning_trace']
|
|
41
|
+
);
|
|
44
42
|
|
|
45
43
|
if (traces.length === 0) {
|
|
46
44
|
console.log(`[IDENTITY] No execution traces found in celestial.db. Evolution skipped.`);
|
|
@@ -49,7 +47,7 @@ class IdentitySynthesizer {
|
|
|
49
47
|
|
|
50
48
|
// 2. Extract Decision Heuristics
|
|
51
49
|
const heuristics = this._extractHeuristics(traces);
|
|
52
|
-
|
|
50
|
+
|
|
53
51
|
// 3. Update SOUL.md sections (v8.1 Intelligence Mirroring)
|
|
54
52
|
await this._applyMirroring(heuristics);
|
|
55
53
|
}
|
|
@@ -76,11 +74,11 @@ class IdentitySynthesizer {
|
|
|
76
74
|
|
|
77
75
|
async _applyMirroring(heuristics) {
|
|
78
76
|
let content = await fs.readFile(this.soulPath, 'utf8');
|
|
79
|
-
|
|
77
|
+
|
|
80
78
|
// Update the Decision Engine section with derived heuristics
|
|
81
79
|
const heuristicMarker = `Decision Mode = ${heuristics.mode} (Derived from traces)`;
|
|
82
80
|
content = content.replace(/Decision Mode = .*/, heuristicMarker);
|
|
83
|
-
|
|
81
|
+
|
|
84
82
|
await fs.writeFile(this.soulPath, content);
|
|
85
83
|
console.log(`[IDENTITY] SOUL.md evolved: Mode shifted to ${heuristics.mode}.`);
|
|
86
84
|
}
|