@event4u/agent-config 9.8.0 → 9.9.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/.claude-plugin/marketplace.json +1 -1
- package/CHANGELOG.md +278 -298
- package/CONTRIBUTING.md +23 -7
- package/MIGRATION.md +20 -0
- package/README.md +55 -9
- package/dist/agent-src/commands/agents/audit.md +1 -1
- package/dist/agent-src/commands/agents/optimize.md +2 -2
- package/dist/agent-src/commands/agents/user.md +1 -1
- package/dist/agent-src/commands/agents.md +1 -1
- package/dist/agent-src/commands/check-current-md.md +3 -3
- package/dist/agent-src/commands/fix/portability.md +2 -2
- package/dist/agent-src/commands/fix/pr-comments-loop.md +136 -0
- package/dist/agent-src/commands/fix/refs.md +2 -2
- package/dist/agent-src/commands/fix/route.md +4 -3
- package/dist/agent-src/commands/fix.md +9 -6
- package/dist/agent-src/commands/ghostwriter.md +1 -1
- package/dist/agent-src/commands/image.md +1 -1
- package/dist/agent-src/commands/optimize/augmentignore.md +1 -1
- package/dist/agent-src/commands/optimize/skills.md +2 -2
- package/dist/agent-src/commands/post-as.md +1 -1
- package/dist/agent-src/commands/research.md +1 -1
- package/dist/agent-src/commands/roadmap/ai-council.md +1 -1
- package/dist/agent-src/commands/security-audit-config.md +1 -1
- package/dist/agent-src/commands/team/delegate.md +4 -0
- package/dist/agent-src/commands/video.md +1 -1
- package/dist/agent-src/contexts/authority/kernel-rule-edits.md +1 -1
- package/dist/agent-src/contexts/contracts/emergency-triage-block.md +2 -2
- package/dist/agent-src/contexts/execution/auto-dispatch-classification.md +48 -2
- package/dist/agent-src/contexts/execution/orchestration-telemetry.md +10 -0
- package/dist/agent-src/contexts/execution/subagent-modes-detail.md +109 -8
- package/dist/agent-src/contexts/execution/subagent-response-contract.md +20 -0
- package/dist/agent-src/contexts/execution/subagent-spawn-contract.md +53 -3
- package/dist/agent-src/rules/code-provenance.md +112 -0
- package/dist/agent-src/rules/external-code-graph-interop.md +4 -4
- package/dist/agent-src/rules/history-discipline.md +80 -0
- package/dist/agent-src/rules/no-roadmap-references.md +1 -1
- package/dist/agent-src/rules/php-coding.md +1 -0
- package/dist/agent-src/rules/reviewer-awareness.md +1 -0
- package/dist/agent-src/rules/roadmap-ci-steps-policy.md +1 -0
- package/dist/agent-src/rules/roadmap-progress-sync.md +7 -0
- package/dist/agent-src/rules/scale-discipline.md +92 -0
- package/dist/agent-src/rules/security-sensitive-stop.md +10 -0
- package/dist/agent-src/rules/session-canary.md +77 -0
- package/dist/agent-src/rules/token-optimizer-maintenance.md +1 -1
- package/dist/agent-src/rules/tool-safety.md +3 -1
- package/dist/agent-src/rules/untrusted-input-defense.md +10 -0
- package/dist/agent-src/skills/agent-security-review/SKILL.md +1 -1
- package/dist/agent-src/skills/code-intelligence/SKILL.md +17 -14
- package/dist/agent-src/skills/condense-memory/SKILL.md +1 -1
- package/dist/agent-src/skills/corpus-grounding/SKILL.md +0 -3
- package/dist/agent-src/skills/description-assist/SKILL.md +1 -1
- package/dist/agent-src/skills/design-review/SKILL.md +5 -6
- package/dist/agent-src/skills/design-tokens/SKILL.md +0 -1
- package/dist/agent-src/skills/history-design/SKILL.md +101 -0
- package/dist/agent-src/skills/history-design/evals/triggers.json +17 -0
- package/dist/agent-src/skills/humanizer/SKILL.md +3 -3
- package/dist/agent-src/skills/image-editing/SKILL.md +1 -1
- package/dist/agent-src/skills/image-generation/SKILL.md +2 -1
- package/dist/agent-src/skills/image-provider-routing/SKILL.md +2 -2
- package/dist/agent-src/skills/launch-readiness/SKILL.md +1 -1
- package/dist/agent-src/skills/license-compliance-audit/SKILL.md +161 -0
- package/dist/agent-src/skills/license-compliance-audit/evals/triggers.json +52 -0
- package/dist/agent-src/skills/license-compliance-borrow-check/SKILL.md +145 -0
- package/dist/agent-src/skills/license-compliance-borrow-check/evals/triggers.json +52 -0
- package/dist/agent-src/skills/license-compliance-credits/SKILL.md +97 -0
- package/dist/agent-src/skills/license-compliance-credits/evals/triggers.json +52 -0
- package/dist/agent-src/skills/md-language-check/SKILL.md +1 -1
- package/dist/agent-src/skills/override-management/SKILL.md +1 -1
- package/dist/agent-src/skills/prediction-pool-optimizer/SKILL.md +7 -7
- package/dist/agent-src/skills/project-analysis-core/SKILL.md +1 -1
- package/dist/agent-src/skills/prompt-engineering-image/SKILL.md +3 -2
- package/dist/agent-src/skills/react-shadcn-ui/SKILL.md +2 -2
- package/dist/agent-src/skills/recursive-verification/SKILL.md +6 -0
- package/dist/agent-src/skills/refine-ticket/SKILL.md +3 -3
- package/dist/agent-src/skills/roadmap-writing/SKILL.md +4 -0
- package/dist/agent-src/skills/rtk-output-filtering/SKILL.md +31 -12
- package/dist/agent-src/skills/rule-refactor/SKILL.md +3 -3
- package/dist/agent-src/skills/schema-review/SKILL.md +92 -0
- package/dist/agent-src/skills/schema-review/evals/triggers.json +17 -0
- package/dist/agent-src/skills/secrets-management/SKILL.md +3 -4
- package/dist/agent-src/skills/security-audit/SKILL.md +1 -1
- package/dist/agent-src/skills/security-maturity-assessment/SKILL.md +1 -1
- package/dist/agent-src/skills/skill-improvement-pipeline/SKILL.md +3 -3
- package/dist/agent-src/skills/skill-writing/SKILL.md +2 -2
- package/dist/agent-src/skills/source-discovery/SKILL.md +5 -5
- package/dist/agent-src/skills/subagent-orchestration/SKILL.md +45 -85
- package/dist/agent-src/skills/subagent-orchestration/prompts/README.md +5 -4
- package/dist/agent-src/skills/systematic-debugging/SKILL.md +2 -2
- package/dist/agent-src/skills/tailwind-engineer/SKILL.md +2 -3
- package/dist/agent-src/skills/token-optimizer/SKILL.md +4 -4
- package/dist/agent-src/skills/verify-repair-loop/SKILL.md +1 -1
- package/dist/agent-src/skills/worktree-lifecycle/SKILL.md +2 -3
- package/dist/agent-src/templates/AGENTS.md +1 -1
- package/dist/agent-src/templates/agents/.gitattributes.fragment +25 -6
- package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
- package/dist/agent-src/templates/command.md +3 -3
- package/dist/agent-src/templates/persona.md +2 -2
- package/dist/agent-src/templates/rule.md +2 -2
- package/dist/agent-src/templates/scripts/telemetry/engagement.ts +77 -0
- package/dist/agent-src/templates/scripts/telemetry_record.ts +33 -1
- package/dist/cli/commands/doctorShell.js +20 -0
- package/dist/cli/commands/doctorShell.js.map +1 -1
- package/dist/cli/commands/rtkDetect.js +58 -0
- package/dist/cli/commands/rtkDetect.js.map +1 -0
- package/dist/cli/firstRunNotice.js +70 -0
- package/dist/cli/firstRunNotice.js.map +1 -0
- package/dist/cli/main.js +35 -3
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/registry.js +7 -1
- package/dist/cli/registry.js.map +1 -1
- package/dist/discovery/deprecation-report.md +1 -1
- package/dist/discovery/discovery-manifest.json +362 -78
- package/dist/discovery/discovery-manifest.json.sha256 +1 -1
- package/dist/discovery/discovery-manifest.summary.md +6 -4
- package/dist/discovery/orphan-report.md +1 -1
- package/dist/discovery/packs.json +90 -8
- package/dist/discovery/trust-report.md +11 -11
- package/dist/discovery/workspaces.json +31 -7
- package/dist/hooks/dispatch.js +19475 -0
- package/dist/install/agentSwitchDetection.js +75 -0
- package/dist/install/agentSwitchDetection.js.map +1 -0
- package/dist/install/agentSwitchProfile.js +117 -0
- package/dist/install/agentSwitchProfile.js.map +1 -0
- package/dist/install/atomic.js +1 -1
- package/dist/install/detect.js +1 -1
- package/dist/install/install.mjs +775 -486
- package/dist/install/rtkDetection.js +213 -0
- package/dist/install/rtkDetection.js.map +1 -0
- package/dist/install/rule_scope.js +2 -1
- package/dist/install/rule_scope.js.map +1 -1
- package/dist/install/types.js +2 -2
- package/dist/install/wizard-plan.js +1 -1
- package/dist/install/wizardDismissals.js +58 -0
- package/dist/install/wizardDismissals.js.map +1 -0
- package/dist/mcp/awesome-mcp-servers.row.md +1 -1
- package/dist/mcp/mcp-cloudflare-catalogue.json +1 -1
- package/dist/mcp/registry-manifest.json +15 -4
- package/dist/mcp/server.json +20 -0
- package/dist/mcp/server.mjs +44292 -0
- package/dist/router.json +1 -1
- package/dist/scripts/condense.js +14 -7
- package/dist/scripts/condense.js.map +1 -1
- package/dist/server/app.js +4 -2
- package/dist/server/app.js.map +1 -1
- package/dist/server/io/sharedWriteCheck.js +101 -0
- package/dist/server/io/sharedWriteCheck.js.map +1 -0
- package/dist/server/routes/ping.js +14 -0
- package/dist/server/routes/ping.js.map +1 -1
- package/dist/server/routes/settings.js +21 -4
- package/dist/server/routes/settings.js.map +1 -1
- package/dist/server/routes/userMd.js +21 -4
- package/dist/server/routes/userMd.js.map +1 -1
- package/dist/server/routes/wizard.js +68 -25
- package/dist/server/routes/wizard.js.map +1 -1
- package/dist/server/schemas/settings.js +4 -2
- package/dist/server/schemas/settings.js.map +1 -1
- package/dist/ui/assets/index-BpSQt5vm.js +40 -0
- package/dist/ui/assets/index-BpSQt5vm.js.map +1 -0
- package/dist/ui/assets/index-jSfMW8_t.css +1 -0
- package/dist/ui/index.html +2 -2
- package/docs/MIGRATION.md +16 -0
- package/docs/guidelines/component-oriented-and-oop-development.md +4 -2
- package/package.json +21 -11
- package/src/agent-src/templates/AGENTS.md +1 -1
- package/src/agent-src/templates/scripts/telemetry/engagement.ts +77 -0
- package/src/agent-src/templates/scripts/telemetry_record.ts +33 -1
- package/src/config/agent-settings.template.yml +52 -14
- package/src/config/discovery/packs.yml +22 -0
- package/src/config/discovery/workspaces.yml +1 -1
- package/src/config/evaluator-budgets.json +47 -0
- package/src/config/hook-latency-budget.json +20 -0
- package/src/install/agentSwitchDetection.ts +90 -0
- package/src/install/agentSwitchProfile.ts +131 -0
- package/src/install/atomic.ts +1 -1
- package/src/install/detect.ts +1 -1
- package/src/install/rtkDetection.ts +274 -0
- package/src/install/rule_scope.ts +9 -2
- package/src/install/types.ts +2 -2
- package/src/install/wizard-plan.ts +1 -1
- package/src/install/wizardDismissals.ts +60 -0
- package/src/scripts/_cli/cmd_doctor.ts +62 -1
- package/src/scripts/_cli/cmd_memory_get.ts +197 -0
- package/src/scripts/_cli/cmd_refresh.ts +30 -0
- package/src/scripts/_dispatch.bash +81 -0
- package/src/scripts/_lib/auto_dispatch.corpus.test.ts +64 -1
- package/src/scripts/_lib/auto_dispatch.ts +76 -0
- package/src/scripts/_lib/detect_target_license.ts +714 -0
- package/src/scripts/_lib/fixtures/secret-detector/negatives.txt +5 -0
- package/src/scripts/_lib/fixtures/secret-detector/positives.txt +4 -0
- package/src/scripts/_lib/install_drift.ts +194 -0
- package/src/scripts/_lib/memory_fts_index.ts +390 -0
- package/src/scripts/_lib/orchestration_record.ts +91 -2
- package/src/scripts/_lib/persistence/adapter_raw_sql.ts +443 -0
- package/src/scripts/_lib/persistence/detect_audit_coverage.ts +423 -0
- package/src/scripts/_lib/persistence/detect_bounded_reads.ts +154 -0
- package/src/scripts/_lib/persistence/detect_index_parity.ts +576 -0
- package/src/scripts/_lib/persistence/detect_n1_eloquent.ts +226 -0
- package/src/scripts/_lib/persistence/detect_offload.ts +441 -0
- package/src/scripts/_lib/persistence/detect_prisma_growth.ts +74 -0
- package/src/scripts/_lib/persistence/offload_catalog.ts +73 -0
- package/src/scripts/_lib/persistence/types.ts +109 -0
- package/src/scripts/_lib/rtk_allowlist.ts +44 -0
- package/src/scripts/_lib/secret_detector.test.ts +5 -0
- package/src/scripts/_lib/secret_detector.ts +9 -0
- package/src/scripts/_lib/secret_detector_adversarial.test.ts +116 -0
- package/src/scripts/_lib/spawn_env.ts +7 -0
- package/src/scripts/_lib/sqlite_guard.ts +191 -0
- package/src/scripts/_lib/subagent_spawn.ts +53 -0
- package/src/scripts/_lib/worker_budget.ts +107 -0
- package/src/scripts/ai_council/blind_review.ts +0 -0
- package/src/scripts/ai_council/config.ts +12 -6
- package/src/scripts/ai_council/orchestrator.ts +73 -3
- package/src/scripts/ai_team/review_gate.ts +8 -10
- package/src/scripts/ai_team/team_dispatch.ts +48 -0
- package/src/scripts/audit_initial_context.ts +1 -1
- package/src/scripts/bench_cross_source_eval.ts +400 -0
- package/src/scripts/bench_honesty_score.ts +1093 -0
- package/src/scripts/bench_hook_latency.ts +218 -0
- package/src/scripts/build_mcp_catalog.ts +275 -0
- package/src/scripts/build_mcp_registry_manifest.ts +46 -0
- package/src/scripts/build_proof.ts +45 -0
- package/src/scripts/chat_history.ts +8 -5
- package/src/scripts/check_backstop_debt.ts +23 -13
- package/src/scripts/check_bundle_path_leakage.ts +343 -0
- package/src/scripts/check_evaluator_budgets.ts +99 -0
- package/src/scripts/check_knowledge_sharing.ts +12 -1
- package/src/scripts/check_no_external_sources.ts +2 -2
- package/src/scripts/check_source_pointer_freshness.ts +28 -3
- package/src/scripts/code_graph/build.ts +0 -0
- package/src/scripts/code_graph/cli.ts +181 -9
- package/src/scripts/code_graph/detect.ts +52 -0
- package/src/scripts/code_graph/intent.ts +45 -0
- package/src/scripts/code_graph/query.ts +143 -29
- package/src/scripts/code_graph/sqlite_store.ts +174 -0
- package/src/scripts/condense.ts +14 -6
- package/src/scripts/context_hygiene_hook.ts +8 -5
- package/src/scripts/council_cli.ts +126 -12
- package/src/scripts/detect_target_license.ts +203 -0
- package/src/scripts/evaluator_umbrella.sh +145 -0
- package/src/scripts/external_sources_denylist.json +5 -3
- package/src/scripts/first_run_gate_hook.ts +9 -5
- package/src/scripts/hermetic-install.sh +3 -3
- package/src/scripts/hook_manifest.yaml +55 -16
- package/src/scripts/hooks/block_kernel_rule_writes.ts +212 -0
- package/src/scripts/hooks/block_no_verify.ts +9 -9
- package/src/scripts/hooks/code_graph_nudge_hook.ts +11 -4
- package/src/scripts/hooks/concern_registry.ts +75 -0
- package/src/scripts/hooks/design_slop_hook.ts +8 -5
- package/src/scripts/hooks/dispatch_entry.ts +37 -0
- package/src/scripts/hooks/dispatch_hook.ts +176 -3
- package/src/scripts/hooks/hook_stdin.ts +42 -0
- package/src/scripts/hooks/rtk_wrap_hook.ts +26 -12
- package/src/scripts/hot_context_hook.ts +7 -6
- package/src/scripts/injection_scan_hook.ts +9 -1
- package/src/scripts/install +6 -6
- package/src/scripts/install-hooks.sh +4 -4
- package/src/scripts/install.sh +5 -4
- package/src/scripts/install.ts +264 -23
- package/src/scripts/learning_sidecar.ts +0 -0
- package/src/scripts/lint_budget_ownership.ts +89 -0
- package/src/scripts/lint_command_routing.ts +35 -5
- package/src/scripts/lint_command_verbs.ts +42 -9
- package/src/scripts/lint_consumer_internal_refs.ts +211 -0
- package/src/scripts/lint_discovery_vocabulary.ts +2 -0
- package/src/scripts/lint_documented_commands.ts +670 -0
- package/src/scripts/lint_framework_leakage.ts +17 -3
- package/src/scripts/lint_framework_leakage_allowlist.json +32 -0
- package/src/scripts/lint_governed_writes.ts +335 -0
- package/src/scripts/lint_hidden_unicode.ts +6 -0
- package/src/scripts/lint_mcp_registry_manifest.ts +26 -1
- package/src/scripts/lint_memory_tripwire.ts +186 -0
- package/src/scripts/lint_override_kernel_guard.ts +74 -26
- package/src/scripts/lint_persistence.ts +171 -0
- package/src/scripts/lint_pre_migration_refs.ts +106 -0
- package/src/scripts/lint_provenance.ts +547 -0
- package/src/scripts/lint_provenance_vocabulary.ts +437 -0
- package/src/scripts/lint_spawn_payload.ts +283 -0
- package/src/scripts/lint_store_boundary.ts +152 -0
- package/src/scripts/lint_versioned_cache.ts +7 -1
- package/src/scripts/mcp_server/__main__.ts +7 -2
- package/src/scripts/mcp_server/catalog.ts +23 -1
- package/src/scripts/mcp_server/consumer_tool_catalog.json +563 -193
- package/src/scripts/mcp_server/prompts.ts +6 -0
- package/src/scripts/mcp_server/tool_catalog_source.ts +332 -0
- package/src/scripts/mcp_server/tools.ts +56 -5
- package/src/scripts/mcp_telemetry_query.ts +2 -33
- package/src/scripts/mcp_telemetry_store.ts +64 -34
- package/src/scripts/memory_learn_hook.ts +126 -0
- package/src/scripts/memory_lookup.ts +0 -0
- package/src/scripts/memory_replay_24.ts +312 -0
- package/src/scripts/memory_report.ts +16 -3
- package/src/scripts/memory_signal.ts +48 -0
- package/src/scripts/memory_status.ts +6 -0
- package/src/scripts/minimal_safe_diff_hook.ts +8 -5
- package/src/scripts/onboarding_gate_hook.ts +8 -5
- package/src/scripts/orchestration_record.ts +16 -0
- package/src/scripts/pr_url_reminder_hook.ts +8 -1
- package/src/scripts/prepack-check.mjs +17 -0
- package/src/scripts/prepack_lifecycle_check.d.mts +8 -0
- package/src/scripts/prepack_lifecycle_check.mjs +82 -0
- package/src/scripts/profile_staleness_hook.ts +8 -7
- package/src/scripts/report_install_drift.ts +109 -0
- package/src/scripts/roadmap_progress_hook.ts +8 -5
- package/src/scripts/schemas/license-policy.schema.json +89 -0
- package/src/scripts/schemas/provenance-borrow.schema.json +46 -0
- package/src/scripts/schemas/rule.schema.json +10 -0
- package/src/scripts/self_review_gate.test.ts +173 -1
- package/src/scripts/self_review_gate.ts +155 -15
- package/src/scripts/session_canary_hook.ts +182 -0
- package/src/scripts/smoke_quickstart.ts +2 -2
- package/src/scripts/surface_probe_hook.ts +8 -7
- package/src/scripts/sync_gitattributes.ts +310 -0
- package/src/scripts/team_review_gate_hook.ts +13 -16
- package/src/scripts/verify_before_complete_hook.ts +8 -5
- package/src/scripts/wrapper_freshness_hook.ts +8 -7
- package/src/server/schemas/settings.ts +8 -2
- package/dist/ui/assets/index-BPFMZWUs.css +0 -1
- package/dist/ui/assets/index-CrmZ34Rg.js +0 -40
- package/dist/ui/assets/index-CrmZ34Rg.js.map +0 -1
- package/docs/CLAIMS.md +0 -286
- package/docs/DISTRIBUTION_CHECKLIST.md +0 -170
- package/docs/RELEASE_STORY_TEMPLATE.md +0 -37
- package/docs/SKILL_CENSUS.md +0 -352
- package/docs/adrs/cost/0001-hard-stop-hook.md +0 -114
- package/docs/adrs/cost/README.md +0 -9
- package/docs/adrs/memory/0001-consumer-side-snapshot.md +0 -119
- package/docs/adrs/memory/README.md +0 -10
- package/docs/adrs/router/0001-three-tier-routing.md +0 -119
- package/docs/adrs/router/README.md +0 -9
- package/docs/adrs/schema/0001-json-schema-frontmatter.md +0 -102
- package/docs/adrs/schema/README.md +0 -9
- package/docs/adrs/smoke/0001-per-tier-smoke-scripts.md +0 -99
- package/docs/adrs/smoke/README.md +0 -9
- package/docs/adrs/telegraph/0001-default-off-until-bench.md +0 -93
- package/docs/adrs/telegraph/README.md +0 -9
- package/docs/announcements/2026-05-non-dev-launch.md +0 -79
- package/docs/announcements/2026-07-honest-cost-sweep-launch.md +0 -84
- package/docs/anti-reskin-gate.md +0 -60
- package/docs/architecture/augment-projection.md +0 -70
- package/docs/architecture/claude-bundle.md +0 -77
- package/docs/architecture/current-onboard-baseline.md +0 -126
- package/docs/architecture/current-safety-behavior.md +0 -137
- package/docs/architecture/multi-tool-projection.md +0 -125
- package/docs/architecture/setup-vs-settings-shared-surface.md +0 -114
- package/docs/architecture/source-projection.md +0 -85
- package/docs/architecture.md +0 -390
- package/docs/archive/CHANGELOG-6.0.0-overview.md +0 -953
- package/docs/archive/CHANGELOG-7.0.0.md +0 -419
- package/docs/archive/CHANGELOG-pre-2.11.0.md +0 -141
- package/docs/archive/CHANGELOG-pre-2.15.0.md +0 -244
- package/docs/archive/CHANGELOG-pre-2.16.0.md +0 -48
- package/docs/archive/CHANGELOG-pre-2.17.0.md +0 -63
- package/docs/archive/CHANGELOG-pre-2.2.0.md +0 -2138
- package/docs/archive/CHANGELOG-pre-2.20.0.md +0 -159
- package/docs/archive/CHANGELOG-pre-2.25.0.md +0 -191
- package/docs/archive/CHANGELOG-pre-2.7.0.md +0 -185
- package/docs/archive/CHANGELOG-pre-3.0.0.md +0 -130
- package/docs/archive/CHANGELOG-pre-3.1.0.md +0 -167
- package/docs/archive/CHANGELOG-pre-3.2.0.md +0 -268
- package/docs/archive/CHANGELOG-pre-4.0.0.md +0 -80
- package/docs/archive/CHANGELOG-pre-4.5.0.md +0 -289
- package/docs/archive/CHANGELOG-pre-5.4.0.md +0 -260
- package/docs/archive/CHANGELOG-pre-5.9.0.md +0 -270
- package/docs/archive/CHANGELOG-pre-6.0.0.md +0 -473
- package/docs/archive/CHANGELOG-pre-7.0.0.md +0 -126
- package/docs/archive/CHANGELOG-pre-8.0.0.md +0 -301
- package/docs/archive/CHANGELOG-pre-8.1.0.md +0 -316
- package/docs/archive/CHANGELOG-pre-8.12.0.md +0 -304
- package/docs/archive/CHANGELOG-pre-8.9.0.md +0 -306
- package/docs/archive/CHANGELOG-pre-9.2.0.md +0 -276
- package/docs/artefact-census.md +0 -71
- package/docs/benchmark.md +0 -785
- package/docs/benchmark.pinned.yml +0 -31
- package/docs/benchmarks.md +0 -85
- package/docs/capability-matrix.md +0 -33
- package/docs/case-studies/_template.md +0 -60
- package/docs/case-studies/frontend-design-positioning.md +0 -86
- package/docs/catalog.md +0 -726
- package/docs/command-flows.md +0 -272
- package/docs/command-naming-audit.md +0 -60
- package/docs/comparison.yaml +0 -87
- package/docs/contracts/CHANGELOG-conventions.md +0 -149
- package/docs/contracts/STABILITY.md +0 -188
- package/docs/contracts/adoption-signal-floor.md +0 -127
- package/docs/contracts/adr-architectural-consensus-mechanism.md +0 -68
- package/docs/contracts/adr-chat-history-split.md +0 -140
- package/docs/contracts/adr-command-suggestion.md +0 -144
- package/docs/contracts/adr-forecast-construction-shape.md +0 -90
- package/docs/contracts/adr-gtm-context-spine.md +0 -116
- package/docs/contracts/adr-implement-ticket-runtime.md +0 -121
- package/docs/contracts/adr-install-user-type-axis.md +0 -107
- package/docs/contracts/adr-layout.md +0 -107
- package/docs/contracts/adr-level-6-productization.md +0 -145
- package/docs/contracts/adr-mcp-runtime.md +0 -128
- package/docs/contracts/adr-product-ui-track.md +0 -381
- package/docs/contracts/adr-prompt-driven-execution.md +0 -186
- package/docs/contracts/adr-settings-sync-engine.md +0 -128
- package/docs/contracts/adr-user-types-axis.md +0 -127
- package/docs/contracts/adr-wing4-context-spine.md +0 -126
- package/docs/contracts/agent-user-schema.md +0 -170
- package/docs/contracts/agents-layout.md +0 -148
- package/docs/contracts/agents-md-tech-stack.md +0 -75
- package/docs/contracts/ai-council-config.md +0 -829
- package/docs/contracts/ai-team-config.md +0 -224
- package/docs/contracts/analysis-memory-loop.md +0 -149
- package/docs/contracts/at-rest-encryption.md +0 -191
- package/docs/contracts/audit-log-v1.md +0 -150
- package/docs/contracts/auto-orchestration-v1.md +0 -70
- package/docs/contracts/benchmark-ab-contract.md +0 -106
- package/docs/contracts/benchmark-corpus-spec.md +0 -125
- package/docs/contracts/benchmark-report-schema.md +0 -113
- package/docs/contracts/branch-protection-policy.md +0 -139
- package/docs/contracts/brand-token-consumption.md +0 -74
- package/docs/contracts/capability-boundary.md +0 -69
- package/docs/contracts/capability-packs.md +0 -217
- package/docs/contracts/ci-cost-budget.md +0 -111
- package/docs/contracts/ci-green-floor.md +0 -141
- package/docs/contracts/command-category-governance.md +0 -84
- package/docs/contracts/command-clusters.md +0 -399
- package/docs/contracts/command-surface-tiers.md +0 -176
- package/docs/contracts/command-taxonomy.md +0 -137
- package/docs/contracts/condensation-default-kill-criterion.md +0 -116
- package/docs/contracts/config-presets.md +0 -144
- package/docs/contracts/conformance.md +0 -84
- package/docs/contracts/consumer-bridge.md +0 -73
- package/docs/contracts/context-paths.md +0 -101
- package/docs/contracts/context-spine.md +0 -179
- package/docs/contracts/cost-dashboard.md +0 -143
- package/docs/contracts/cost-enforcement.md +0 -134
- package/docs/contracts/cost-profile-defaults.md +0 -110
- package/docs/contracts/cost-summary-schema.md +0 -107
- package/docs/contracts/creative-pack-boundary.md +0 -63
- package/docs/contracts/cross-repo-retrieval.md +0 -64
- package/docs/contracts/cross-wing-handoff.md +0 -134
- package/docs/contracts/daily-workspace.md +0 -147
- package/docs/contracts/decision-engine-gates.md +0 -120
- package/docs/contracts/decision-trace-v1.md +0 -177
- package/docs/contracts/design-artifact-lifecycle.md +0 -93
- package/docs/contracts/design-artifact-verification.md +0 -153
- package/docs/contracts/discovery-manifest.md +0 -209
- package/docs/contracts/discovery-manifest.schema.json +0 -254
- package/docs/contracts/evidence-based-pruning.md +0 -102
- package/docs/contracts/explain-modes.md +0 -187
- package/docs/contracts/explain-trace.schema.json +0 -144
- package/docs/contracts/file-ownership-matrix.json +0 -13941
- package/docs/contracts/file-ownership-matrix.md +0 -135
- package/docs/contracts/frontmatter-contract.md +0 -140
- package/docs/contracts/ghostwriter-schema.md +0 -337
- package/docs/contracts/governance-enforcement-projection.md +0 -159
- package/docs/contracts/gui-wizard.md +0 -350
- package/docs/contracts/harness-expectations.md +0 -128
- package/docs/contracts/hook-architecture-v1.md +0 -325
- package/docs/contracts/host-agent-protocol.md +0 -110
- package/docs/contracts/implement-ticket-flow.md +0 -625
- package/docs/contracts/init-telemetry.md +0 -132
- package/docs/contracts/injected-block-authenticity-model.md +0 -66
- package/docs/contracts/install-layout.md +0 -249
- package/docs/contracts/install-scopes.md +0 -82
- package/docs/contracts/installed-tools-lockfile.md +0 -144
- package/docs/contracts/installer-agent-mode.md +0 -137
- package/docs/contracts/iron-law-overrides.txt +0 -26
- package/docs/contracts/kernel-membership.md +0 -339
- package/docs/contracts/linear-ai-rules-inclusion.md +0 -143
- package/docs/contracts/linear-ai-three-layers.md +0 -130
- package/docs/contracts/linter-structural-model.md +0 -181
- package/docs/contracts/load-context-budget-model.md +0 -259
- package/docs/contracts/load-context-schema.md +0 -220
- package/docs/contracts/local-analytics.md +0 -160
- package/docs/contracts/local-knowledge-ingestion.md +0 -96
- package/docs/contracts/local-server-api.md +0 -134
- package/docs/contracts/local-server-ports.md +0 -53
- package/docs/contracts/low-impact-corpus-format.md +0 -95
- package/docs/contracts/mcp-beta-criteria.md +0 -130
- package/docs/contracts/mcp-cloud-scope.md +0 -355
- package/docs/contracts/mcp-discovery-phase-notice.md +0 -60
- package/docs/contracts/mcp-phase-1-scope.md +0 -272
- package/docs/contracts/mcp-registry-manifest.schema.json +0 -129
- package/docs/contracts/mcp-tool-inventory.md +0 -64
- package/docs/contracts/mcp-tool-stub-envelope.md +0 -78
- package/docs/contracts/measurement-baseline.md +0 -103
- package/docs/contracts/memory-visibility-v1.md +0 -160
- package/docs/contracts/mental-models.md +0 -336
- package/docs/contracts/migrate-command.md +0 -233
- package/docs/contracts/multi-tool-projection-fidelity.md +0 -134
- package/docs/contracts/namespace.md +0 -125
- package/docs/contracts/no-runtime-boundary.md +0 -61
- package/docs/contracts/one-off-script-lifecycle.md +0 -110
- package/docs/contracts/orchestration-dsl-v1.md +0 -153
- package/docs/contracts/package-self-orientation.md +0 -163
- package/docs/contracts/pilot/agent-authority.md +0 -24
- package/docs/contracts/pilot/direct-answers.md +0 -70
- package/docs/contracts/pilot/language-and-tone.md +0 -63
- package/docs/contracts/plain-language-surface.md +0 -117
- package/docs/contracts/prelaunch-diagnostics.md +0 -151
- package/docs/contracts/profile-system.md +0 -167
- package/docs/contracts/reasoning-discipline-protocol.md +0 -83
- package/docs/contracts/release-pr-gating.md +0 -151
- package/docs/contracts/release-sizing.md +0 -107
- package/docs/contracts/release-trunk-sync.md +0 -105
- package/docs/contracts/review-lens-schema.md +0 -64
- package/docs/contracts/roadmap-complexity-standard.md +0 -138
- package/docs/contracts/role-experience.md +0 -125
- package/docs/contracts/router-blending.md +0 -71
- package/docs/contracts/rule-classification.md +0 -171
- package/docs/contracts/rule-interactions.md +0 -132
- package/docs/contracts/rule-interactions.yml +0 -260
- package/docs/contracts/rule-priority-hierarchy.md +0 -88
- package/docs/contracts/rule-router.md +0 -287
- package/docs/contracts/safety-model.md +0 -129
- package/docs/contracts/session-profile-overlay.md +0 -157
- package/docs/contracts/settings-api.md +0 -264
- package/docs/contracts/settings-gui-agent-mode.schema.json +0 -128
- package/docs/contracts/settings-sync-yaml-subset.md +0 -139
- package/docs/contracts/skill-bundled-assets.md +0 -62
- package/docs/contracts/skill-discovery.md +0 -80
- package/docs/contracts/skill-distribution-channels.md +0 -66
- package/docs/contracts/skill-domains.md +0 -144
- package/docs/contracts/skill-dry-run.md +0 -47
- package/docs/contracts/skill-family-map.yml +0 -915
- package/docs/contracts/smoke-contracts.md +0 -144
- package/docs/contracts/subagent-boundary.md +0 -74
- package/docs/contracts/surface-agent-contracts.md +0 -153
- package/docs/contracts/surface-matrix.md +0 -108
- package/docs/contracts/surface-tiers.md +0 -81
- package/docs/contracts/telegraph-telemetry.md +0 -83
- package/docs/contracts/ticket-bundle-format.md +0 -233
- package/docs/contracts/tier-3-contrib-plugin.md +0 -137
- package/docs/contracts/trust-and-safety.md +0 -144
- package/docs/contracts/ui-stack-extension.md +0 -237
- package/docs/contracts/ui-track-flow.md +0 -329
- package/docs/contracts/universal-skills.md +0 -91
- package/docs/contracts/user-type-schema.md +0 -146
- package/docs/contracts/value-dashboard-spec.md +0 -378
- package/docs/contracts/value-report-schema.md +0 -168
- package/docs/contracts/workflow-packs.md +0 -121
- package/docs/contracts/workspace-boundary.md +0 -84
- package/docs/contracts/workspace-documents.md +0 -144
- package/docs/contracts/write-engine.md +0 -182
- package/docs/cookbook.md +0 -152
- package/docs/customization.md +0 -696
- package/docs/decisions/ADR-001-kernel-swap-deferred.md +0 -109
- package/docs/decisions/ADR-002-kernel-bucket-overrides.md +0 -135
- package/docs/decisions/ADR-003-flat-cluster-subs-and-colon-syntax.md +0 -137
- package/docs/decisions/ADR-004-rule-governance-pruning.md +0 -240
- package/docs/decisions/ADR-005-subagent-worktrees.md +0 -120
- package/docs/decisions/ADR-006-skill-tools-python-pilot.md +0 -114
- package/docs/decisions/ADR-007-agent-discovery-scopes.md +0 -371
- package/docs/decisions/ADR-008-installed-tools-manifest.md +0 -160
- package/docs/decisions/ADR-009-event4u-namespace.md +0 -188
- package/docs/decisions/ADR-010-profile-pack-preset-boundary.md +0 -168
- package/docs/decisions/ADR-011-domain-pack-readiness.md +0 -213
- package/docs/decisions/ADR-012-typescript-cli-shell.md +0 -162
- package/docs/decisions/ADR-013-discovery-frontmatter-contract.md +0 -342
- package/docs/decisions/ADR-014-gui-framework-choice.md +0 -136
- package/docs/decisions/ADR-015-discovery-manifest-contract.md +0 -146
- package/docs/decisions/ADR-016-installer-architecture.md +0 -191
- package/docs/decisions/ADR-017-monorepo-physical-layout.md +0 -261
- package/docs/decisions/ADR-018-trust-and-safety-layer.md +0 -159
- package/docs/decisions/ADR-019-router-json-dist-location.md +0 -124
- package/docs/decisions/ADR-020-global-only-consumer-scope.md +0 -213
- package/docs/decisions/ADR-021-deployment-shape.md +0 -153
- package/docs/decisions/ADR-022-daily-workspace-decomposition.md +0 -140
- package/docs/decisions/ADR-023-host-agent-protocol.md +0 -129
- package/docs/decisions/ADR-024-workspace-v0-feature-floor.md +0 -126
- package/docs/decisions/ADR-025-workspace-chrome.md +0 -119
- package/docs/decisions/ADR-026-explain-mode-translation.md +0 -117
- package/docs/decisions/ADR-027-changelog-machine-vs-manual.md +0 -129
- package/docs/decisions/ADR-028-root-layout.md +0 -147
- package/docs/decisions/ADR-029-multi-workspace-deferred.md +0 -122
- package/docs/decisions/ADR-030-claude-code-command-projection.md +0 -147
- package/docs/decisions/ADR-031-validation-severity-tiers-and-projection-roundtrip.md +0 -97
- package/docs/decisions/ADR-032-linked-projects-scope.md +0 -122
- package/docs/decisions/ADR-033-distribution-identity-npm-primary.md +0 -81
- package/docs/decisions/ADR-034-per-skill-model-recommendation-transport.md +0 -63
- package/docs/decisions/ADR-035-model-capability-tiers.md +0 -104
- package/docs/decisions/ADR-036-global-install-browser-wizard-handoff.md +0 -106
- package/docs/decisions/ADR-037-cost-profile-untangle.md +0 -117
- package/docs/decisions/ADR-038-canonical-settings-path.md +0 -96
- package/docs/decisions/ADR-039-claude-skills-untracked.md +0 -139
- package/docs/decisions/ADR-040-execution-model-projection-time-filtering.md +0 -244
- package/docs/decisions/ADR-041-controlled-command-verbs.md +0 -133
- package/docs/decisions/ADR-042-runtime-resolver-decision-gate.md +0 -113
- package/docs/decisions/ADR-043-monorepo-collapse-to-src-domains.md +0 -128
- package/docs/decisions/ADR-044-command-naming-scheme-hyphenated.md +0 -250
- package/docs/decisions/ADR-045-src-source-layout-and-profiles-as-views.md +0 -111
- package/docs/decisions/ADR-046-thin-command-principle.md +0 -93
- package/docs/decisions/ADR-047-framework-neutral-stack-adaptive-commands.md +0 -94
- package/docs/decisions/ADR-048-command-justification-rule.md +0 -106
- package/docs/decisions/ADR-049-configuration-trust-boundary.md +0 -132
- package/docs/decisions/ADR-050-workspace-vs-package-root-boundary.md +0 -121
- package/docs/decisions/ADR-051-uncondensed-source-container-relocation.md +0 -114
- package/docs/decisions/ADR-052-packages-removal-and-pack-home-migration.md +0 -86
- package/docs/decisions/ADR-053-agents-namespace-dual-role-resolution.md +0 -132
- package/docs/decisions/ADR-054-rule-adherence-decay-triggered-restate.md +0 -143
- package/docs/decisions/ADR-055-flow-layer-data-model.md +0 -235
- package/docs/decisions/ADR-056-unvalidated-video-adapters-disposition.md +0 -124
- package/docs/decisions/ADR-057-consolidation-evidence-gate-outcomes.md +0 -135
- package/docs/decisions/ADR-058-condensed-output-relocation-to-dist.md +0 -94
- package/docs/decisions/ADR-059-render-resume-filesystem-as-state.md +0 -161
- package/docs/decisions/ADR-060-comfyui-sandbox-model.md +0 -154
- package/docs/decisions/ADR-061-corpus-grounding-layer.md +0 -230
- package/docs/decisions/ADR-062-encrypt-at-rest-store-architecture.md +0 -121
- package/docs/decisions/ADR-063-append-jsonl-encryption-deferred.md +0 -83
- package/docs/decisions/ADR-064-append-jsonl-per-record-encryption.md +0 -113
- package/docs/decisions/ADR-065-tier3-inbox-handoff-v0.md +0 -86
- package/docs/decisions/ADR-066-skill-body-prerendering.md +0 -93
- package/docs/decisions/ADR-067-glama-registry-listing.md +0 -259
- package/docs/decisions/ADR-068-host-tier-detection.md +0 -90
- package/docs/decisions/ADR-069-prompt-renderer.md +0 -97
- package/docs/decisions/ADR-070-tier1-drive-loop.md +0 -94
- package/docs/decisions/ADR-071-launch-drive-integration.md +0 -95
- package/docs/decisions/ADR-072-codex-gemini-drive-configs.md +0 -90
- package/docs/decisions/ADR-073-drive-health-kill-switch.md +0 -81
- package/docs/decisions/ADR-074-drive-kill-switch-auto-recovery.md +0 -84
- package/docs/decisions/ADR-075-workspace-gui-drive.md +0 -83
- package/docs/decisions/ADR-076-workspace-multi-turn.md +0 -92
- package/docs/decisions/ADR-077-workspace-followup-gui.md +0 -70
- package/docs/decisions/ADR-078-drive-health-panel.md +0 -70
- package/docs/decisions/ADR-079-workspace-host-picker.md +0 -81
- package/docs/decisions/ADR-080-host-session-expired-410.md +0 -92
- package/docs/decisions/ADR-081-drive-health-reset-and-410-affordance.md +0 -71
- package/docs/decisions/ADR-082-410-one-click-relaunch.md +0 -58
- package/docs/decisions/ADR-083-session-thread-and-arbitrary-continuation.md +0 -85
- package/docs/decisions/ADR-084-drive-health-refresh-on-drive.md +0 -52
- package/docs/decisions/ADR-085-mcp-stdio-end-user-distribution-shape.md +0 -158
- package/docs/decisions/ADR-086-read-only-cross-agent-mcp-discovery-helper.md +0 -171
- package/docs/decisions/ADR-087-installer-e2e-test-strategy.md +0 -111
- package/docs/decisions/ADR-088-no-external-runtime-federation.md +0 -144
- package/docs/decisions/ADR-089-lean-local-plugin-install.md +0 -111
- package/docs/decisions/ADR-090-visibility-command-frontmatter-field.md +0 -95
- package/docs/decisions/ADR-091-split-meta-capability-packs.md +0 -113
- package/docs/decisions/ADR-092-defer-command-tier-alias-removal.md +0 -117
- package/docs/decisions/ADR-093-ai-council-config-user-global.md +0 -117
- package/docs/decisions/ADR-094-agent-memory-layer-removal.md +0 -94
- package/docs/decisions/ADR-095-workspace-boundary-contract.md +0 -108
- package/docs/decisions/ADR-096-analysis-workbench.md +0 -110
- package/docs/decisions/ADR-097-mission-recipe-privilege-boundary.md +0 -121
- package/docs/decisions/ADR-098-evidence-first-structure-discovery.md +0 -154
- package/docs/decisions/ADR-099-file-first-pattern-library.md +0 -87
- package/docs/decisions/ADR-100-global-knowledge-card-sharing.md +0 -140
- package/docs/decisions/ADR-101-ticket-bundle-emission.md +0 -109
- package/docs/decisions/ADR-102-ticket-handoff-paste-and-mcp.md +0 -72
- package/docs/decisions/ADR-103-global-knowledge-default-off-until-measured.md +0 -92
- package/docs/decisions/ADR-104-ai-council-config-global-only.md +0 -119
- package/docs/decisions/ADR-105-automatic-subagent-orchestration.md +0 -108
- package/docs/decisions/ADR-106-recursive-verification-benchmark-gate.md +0 -126
- package/docs/decisions/ADR-107-legal-domain-pack-adoption.md +0 -70
- package/docs/decisions/ADR-108-open-source-forever-no-commercial-tier.md +0 -46
- package/docs/decisions/ADR-109-subagent-v1-contract.md +0 -248
- package/docs/decisions/ADR-110-discipline-profile-resolution-locus.md +0 -112
- package/docs/decisions/ADR-111-canonical-glama-listing.md +0 -97
- package/docs/decisions/ADR-112-stdio-lite-stays-read-only.md +0 -92
- package/docs/decisions/ADR-113-ci-native-release-label-trigger.md +0 -209
- package/docs/decisions/ADR-114-commit-policy-iron-law-override.md +0 -85
- package/docs/decisions/ADR-115-command-cluster-consolidation-phase-4.md +0 -91
- package/docs/decisions/ADR-116-memory-tripwire-activation-path.md +0 -144
- package/docs/decisions/ADR-117-subagents-auto-default-on.md +0 -89
- package/docs/decisions/ADR-118-loop-engineering-boundaries.md +0 -162
- package/docs/decisions/ADR-119-global-knowledge-default-on.md +0 -104
- package/docs/decisions/ADR-120-council-chairman-mode.md +0 -70
- package/docs/decisions/ADR-121-knowledge-sensitivity-classes.md +0 -90
- package/docs/decisions/ADR-122-adversarial-verification-council.md +0 -166
- package/docs/decisions/ADR-123-runtime-security-scope-and-spawn-hardening.md +0 -142
- package/docs/decisions/ADR-124-embedded-engine-doctrine.md +0 -255
- package/docs/decisions/ADR-125-doc-screenshot-anonymization.md +0 -131
- package/docs/decisions/ADR-126-internet-reach-operator-tooling.md +0 -254
- package/docs/decisions/ADR-127-enforcement-claims-must-resolve.md +0 -150
- package/docs/decisions/ADR-128-executable-evidence-and-measured-escalation.md +0 -201
- package/docs/decisions/ADR-200-python-to-typescript-migration.md +0 -203
- package/docs/decisions/ADR-rule-kernel-and-router.md +0 -133
- package/docs/decisions/INDEX.md +0 -157
- package/docs/decisions/engine-reclassification-2026-07.md +0 -104
- package/docs/deploy/connector-setup.md +0 -129
- package/docs/deploy/env-vars.md +0 -70
- package/docs/deploy/policy-cookbook.md +0 -130
- package/docs/deploy/quickstart.md +0 -112
- package/docs/deploy/small-team-recipe.md +0 -148
- package/docs/deploy/team-deployment-posture.md +0 -111
- package/docs/design/adversarial-council-eval.md +0 -106
- package/docs/design/council-vs-solo-baseline.md +0 -92
- package/docs/design/cross-model-parity-eval.md +0 -82
- package/docs/design/length-neutral-judge-rerun.md +0 -92
- package/docs/design/utilization-window-criteria.md +0 -51
- package/docs/development.md +0 -230
- package/docs/distribution/awesome-list-submission.md +0 -46
- package/docs/distribution/consumer-matrix.md +0 -96
- package/docs/distribution/launch-story-draft.md +0 -58
- package/docs/distribution/mcp-submission-checklist.md +0 -95
- package/docs/distribution/public-install-smoke.md +0 -68
- package/docs/distribution/registries.md +0 -126
- package/docs/distribution/registry-submissions.md +0 -85
- package/docs/distribution/telemetry-privacy.md +0 -128
- package/docs/distribution/telemetry-schema.md +0 -174
- package/docs/distribution/topics-equivalents-decay-policy.md +0 -51
- package/docs/end-to-end-walkthroughs.md +0 -165
- package/docs/enforcement-by-host.md +0 -51
- package/docs/examples/agent-user.example.md +0 -22
- package/docs/experiences/agency.md +0 -49
- package/docs/experiences/content_creator.md +0 -49
- package/docs/experiences/developer.md +0 -49
- package/docs/experiences/finance.md +0 -50
- package/docs/experiences/founder.md +0 -49
- package/docs/experiences/ops.md +0 -49
- package/docs/featured-commands.md +0 -27
- package/docs/featured-skills.md +0 -95
- package/docs/flows.md +0 -67
- package/docs/getting-started-by-role.md +0 -190
- package/docs/getting-started-laravel.md +0 -72
- package/docs/getting-started-local-stdio.md +0 -77
- package/docs/getting-started.md +0 -254
- package/docs/github-topics.md +0 -93
- package/docs/governance-advantage.md +0 -72
- package/docs/governance.md +0 -96
- package/docs/guides/cross-repo-linked-projects.md +0 -93
- package/docs/guides/cross-repo-retrieval.md +0 -61
- package/docs/guides/frontend-design-corpus-refresh.md +0 -83
- package/docs/guides/gated-platform-reads.md +0 -221
- package/docs/guides/local-analytics.md +0 -125
- package/docs/guides/local-knowledge.md +0 -127
- package/docs/guides/skill-discovery.md +0 -71
- package/docs/guides/skill-preview.md +0 -71
- package/docs/hook-payload-capture.md +0 -221
- package/docs/install-friction-report.md +0 -66
- package/docs/installation.md +0 -959
- package/docs/maintainers/branch-protection.md +0 -105
- package/docs/maintainers/dev-mode.md +0 -106
- package/docs/maintainers/optional-media-deps.md +0 -50
- package/docs/maintainers/system-map.md +0 -85
- package/docs/mcp-registries.md +0 -94
- package/docs/mcp-server.md +0 -175
- package/docs/mcp.md +0 -147
- package/docs/media/proof-demo.cast +0 -14
- package/docs/media/proof-demo.gif +0 -0
- package/docs/migration/consumer-template-consumption-model.md +0 -145
- package/docs/migration/divergences/README.md +0 -55
- package/docs/migration/divergences/_template.md +0 -50
- package/docs/migration/divergences/bench-stats-float-precision.md +0 -72
- package/docs/migration/divergences/mcp-telemetry-node-sqlite.md +0 -61
- package/docs/migration/divergences/pack-mcp-content-gzip-body.md +0 -53
- package/docs/migration/divergences/src-scripts-build_cloud_bundle.md +0 -63
- package/docs/migration/divergences/src-scripts-check_memory.md +0 -91
- package/docs/migration/divergences/src-scripts-inventory_abstraction_budget.md +0 -65
- package/docs/migration/divergences/src-scripts-lint_marketplace.md +0 -57
- package/docs/migration/divergences/src-scripts-lint_mcp_registry_manifest.md +0 -70
- package/docs/migration/divergences/src-scripts-spotcheck_thin_root.md +0 -60
- package/docs/migration/divergences/src-scripts-validate_agent_settings.md +0 -58
- package/docs/migration/node-floor.md +0 -86
- package/docs/migration/v1-to-v2.md +0 -156
- package/docs/migration/yaml-roundtrip-spike.md +0 -163
- package/docs/migrations/commands-1.15.0.md +0 -117
- package/docs/parity/bench-external.json +0 -58
- package/docs/parity/bench.json +0 -41
- package/docs/parity/command-frontmatter.md +0 -60
- package/docs/parity/external-runtime.md +0 -46
- package/docs/personas.md +0 -178
- package/docs/positioning-evidence.md +0 -86
- package/docs/profiles.md +0 -108
- package/docs/proof.md +0 -252
- package/docs/quality.md +0 -98
- package/docs/readme-split-plan.md +0 -102
- package/docs/recruits/_template.md +0 -81
- package/docs/release-runbook.md +0 -141
- package/docs/role-experiences.md +0 -19
- package/docs/safety.md +0 -30
- package/docs/second-brain-scope.md +0 -116
- package/docs/self-review-gate.md +0 -65
- package/docs/setup/enterprise-and-offline.md +0 -201
- package/docs/setup/mcp-client-config.md +0 -358
- package/docs/setup/mcp-cloud-endpoints.md +0 -116
- package/docs/setup/mcp-cloud-registry-listing.md +0 -99
- package/docs/setup/mcp-cloud-setup.md +0 -183
- package/docs/setup/mcp-r2-bootstrap.md +0 -82
- package/docs/setup/mcp-server-docker.md +0 -101
- package/docs/setup/per-ide/aider.md +0 -48
- package/docs/setup/per-ide/antigravity.md +0 -68
- package/docs/setup/per-ide/augment.md +0 -89
- package/docs/setup/per-ide/claude-code.md +0 -97
- package/docs/setup/per-ide/claude-desktop.md +0 -207
- package/docs/setup/per-ide/cline.md +0 -43
- package/docs/setup/per-ide/codebuddy.md +0 -63
- package/docs/setup/per-ide/codex.md +0 -46
- package/docs/setup/per-ide/continue.md +0 -68
- package/docs/setup/per-ide/copilot.md +0 -80
- package/docs/setup/per-ide/cursor.md +0 -125
- package/docs/setup/per-ide/droid.md +0 -65
- package/docs/setup/per-ide/gemini-cli.md +0 -45
- package/docs/setup/per-ide/jetbrains.md +0 -76
- package/docs/setup/per-ide/kilocode.md +0 -66
- package/docs/setup/per-ide/kiro.md +0 -72
- package/docs/setup/per-ide/opencode.md +0 -62
- package/docs/setup/per-ide/qoder.md +0 -63
- package/docs/setup/per-ide/roocode.md +0 -68
- package/docs/setup/per-ide/trae.md +0 -63
- package/docs/setup/per-ide/warp.md +0 -63
- package/docs/setup/per-ide/windsurf.md +0 -109
- package/docs/setup/per-ide/zed.md +0 -73
- package/docs/showcase.md +0 -209
- package/docs/skill-duplication-findings.md +0 -91
- package/docs/skills-catalog.md +0 -265
- package/docs/skills-taxonomy.md +0 -90
- package/docs/spawn-site-policy.md +0 -72
- package/docs/succession.md +0 -80
- package/docs/threat-model.md +0 -30
- package/docs/troubleshooting.md +0 -155
- package/docs/ui-track-mental-model.md +0 -121
- package/docs/us-vs-the-category.md +0 -38
- package/docs/value.md +0 -86
- package/docs/walkthroughs/assets/workspace-role-grid.png +0 -0
- package/docs/walkthroughs/assets/workspace-session-started.png +0 -0
- package/docs/walkthroughs/assets/workspace-task-picker.png +0 -0
- package/docs/walkthroughs/daily-workspace-a11y.md +0 -87
- package/docs/walkthroughs/daily-workspace.md +0 -127
- package/docs/wedge/production-validator/README.md +0 -81
- package/docs/wedge/production-validator/first-run-check.sh +0 -42
- package/docs/wedge/production-validator/production-validator.md +0 -83
- package/docs/wizard.md +0 -173
- package/src/scripts/postinstall_gui.ts +0 -129
|
@@ -22,10 +22,14 @@ import * as fs from 'node:fs';
|
|
|
22
22
|
import * as path from 'node:path';
|
|
23
23
|
import { fileURLToPath, pathToFileURL } from 'node:url';
|
|
24
24
|
import type { DatabaseSync } from 'node:sqlite';
|
|
25
|
-
import type * as NodeSqlite from 'node:sqlite';
|
|
26
25
|
|
|
27
26
|
import { TELEMETRY_FILENAME, TELEMETRY_REL_DIR } from './mcp_server/telemetry.js';
|
|
27
|
+
import { loadSqlite, readUserVersion, stampUserVersion } from './_lib/sqlite_guard.js';
|
|
28
28
|
|
|
29
|
+
// cache-invalidation: the path carries no version segment (existing CLI
|
|
30
|
+
// intent tests pin this exact string in stdout); invalidation instead runs
|
|
31
|
+
// through `PRAGMA user_version = SCHEMA_VERSION`, stamped on every connect
|
|
32
|
+
// by `_connect()` below (road-to-reachable-code-memory Phase 7).
|
|
29
33
|
export const DEFAULT_DB_REL = 'agents/runtime/mcp-telemetry/calls.sqlite3';
|
|
30
34
|
export const SCHEMA_VERSION = 1;
|
|
31
35
|
|
|
@@ -173,42 +177,18 @@ export function resolve_db(consumer_root?: string | null): string {
|
|
|
173
177
|
return path.join(root, DEFAULT_DB_REL);
|
|
174
178
|
}
|
|
175
179
|
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
_sqliteWarningSilenced = true;
|
|
185
|
-
const orig = process.emitWarning.bind(process);
|
|
186
|
-
process.emitWarning = ((warning: string | Error, ...rest: unknown[]): void => {
|
|
187
|
-
const text = typeof warning === 'string' ? warning : (warning?.message ?? '');
|
|
188
|
-
if (/SQLite is an experimental/i.test(text)) return;
|
|
189
|
-
(orig as (w: string | Error, ...a: unknown[]) => void)(warning, ...rest);
|
|
190
|
-
}) as typeof process.emitWarning;
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
/** Lazy `node:sqlite` import — keeps the module loadable on a runtime without it. */
|
|
194
|
-
async function _loadSqlite(): Promise<typeof NodeSqlite> {
|
|
195
|
-
_silenceSqliteExperimentalWarning();
|
|
196
|
-
try {
|
|
197
|
-
return await import('node:sqlite');
|
|
198
|
-
} catch (exc) {
|
|
199
|
-
const message = exc instanceof Error ? exc.message : String(exc);
|
|
200
|
-
throw new Error(
|
|
201
|
-
`node:sqlite is unavailable in this runtime (${message}). ` +
|
|
202
|
-
'mcp_telemetry_store requires Node with the built-in SQLite module.',
|
|
203
|
-
);
|
|
180
|
+
/** Remove a possibly-corrupt DB file + its WAL/SHM sidecars, best-effort. */
|
|
181
|
+
function _discardDb(db_path: string): void {
|
|
182
|
+
for (const p of [db_path, `${db_path}-wal`, `${db_path}-shm`]) {
|
|
183
|
+
try {
|
|
184
|
+
fs.rmSync(p, { force: true });
|
|
185
|
+
} catch {
|
|
186
|
+
/* best-effort */
|
|
187
|
+
}
|
|
204
188
|
}
|
|
205
189
|
}
|
|
206
190
|
|
|
207
|
-
|
|
208
|
-
async function _connect(db_path: string): Promise<DatabaseSync> {
|
|
209
|
-
fs.mkdirSync(path.dirname(db_path), { recursive: true });
|
|
210
|
-
const { DatabaseSync } = await _loadSqlite();
|
|
211
|
-
const conn = new DatabaseSync(db_path);
|
|
191
|
+
function _createSchema(conn: DatabaseSync): void {
|
|
212
192
|
conn.exec('PRAGMA journal_mode=WAL');
|
|
213
193
|
conn.exec(
|
|
214
194
|
`
|
|
@@ -226,6 +206,56 @@ async function _connect(db_path: string): Promise<DatabaseSync> {
|
|
|
226
206
|
conn.exec('CREATE INDEX IF NOT EXISTS idx_calls_tool ON calls(tool_name)');
|
|
227
207
|
conn.exec('CREATE INDEX IF NOT EXISTS idx_calls_ts ON calls(ts)');
|
|
228
208
|
conn.exec('CREATE INDEX IF NOT EXISTS idx_calls_outcome ON calls(outcome)');
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
/**
|
|
212
|
+
* Open + schema-init the DB. Mirrors the Python `_connect` helper.
|
|
213
|
+
*
|
|
214
|
+
* road-to-reachable-code-memory Phase 7 — fixes the previously never-read
|
|
215
|
+
* `SCHEMA_VERSION` constant: `PRAGMA user_version` is stamped on create AND
|
|
216
|
+
* checked on open.
|
|
217
|
+
*
|
|
218
|
+
* - Absent file, or `user_version == 0` (a pre-Phase-7 DB written before this
|
|
219
|
+
* fix existed — same table shape, just never versioned): create/open
|
|
220
|
+
* normally, then stamp the current version. This is the "legacy-path
|
|
221
|
+
* sweep on first run".
|
|
222
|
+
* - `user_version` present but NOT `SCHEMA_VERSION`: a real future schema
|
|
223
|
+
* change landed. The DB is a derived, idempotently-rebuildable view of the
|
|
224
|
+
* JSONL sink (source of truth) — silently discard it and rebuild fresh
|
|
225
|
+
* rather than attempt an in-place migration for a schema this code
|
|
226
|
+
* doesn't know.
|
|
227
|
+
* - File exists but fails to even OPEN (truncated / corrupt): same
|
|
228
|
+
* discard-and-rebuild path. Corruption is a non-event, not an error the
|
|
229
|
+
* caller has to handle.
|
|
230
|
+
*/
|
|
231
|
+
async function _connect(db_path: string): Promise<DatabaseSync> {
|
|
232
|
+
fs.mkdirSync(path.dirname(db_path), { recursive: true });
|
|
233
|
+
const { DatabaseSync } = await loadSqlite('mcp_telemetry_store');
|
|
234
|
+
|
|
235
|
+
if (fs.existsSync(db_path)) {
|
|
236
|
+
let probe: DatabaseSync | null = null;
|
|
237
|
+
let drift = false;
|
|
238
|
+
try {
|
|
239
|
+
probe = new DatabaseSync(db_path);
|
|
240
|
+
const existing = readUserVersion(probe);
|
|
241
|
+
drift = existing !== 0 && existing !== SCHEMA_VERSION;
|
|
242
|
+
} catch {
|
|
243
|
+
drift = true; // corrupt / unreadable → rebuild
|
|
244
|
+
} finally {
|
|
245
|
+
try {
|
|
246
|
+
probe?.close();
|
|
247
|
+
} catch {
|
|
248
|
+
/* best-effort */
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
if (drift) {
|
|
252
|
+
_discardDb(db_path);
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
const conn = new DatabaseSync(db_path);
|
|
257
|
+
_createSchema(conn);
|
|
258
|
+
stampUserVersion(conn, SCHEMA_VERSION);
|
|
229
259
|
return conn;
|
|
230
260
|
}
|
|
231
261
|
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* session_end concern — memory learning sidecar aggregation
|
|
4
|
+
* (road-to-reachable-code-memory Phase 4).
|
|
5
|
+
*
|
|
6
|
+
* Joins the EXISTING `session_end` concern set in hook_manifest.yaml — no
|
|
7
|
+
* new platform hook wiring. On session end it aggregates
|
|
8
|
+
* `agents/memory/intake/signals-*.jsonl` through the learning sidecar
|
|
9
|
+
* (`learning_sidecar.ts`: 30-day decay, ≥2-origin corroboration, dead-end
|
|
10
|
+
* ledger) into the gitignored `agents/memory/.agent-learning.json` +
|
|
11
|
+
* // cache-invalidation: path owned by learning_sidecar.ts (schema_version field inside the JSON; name pinned there)
|
|
12
|
+
* `LESSONS.md`. Local-only, budget-capped, fail-open:
|
|
13
|
+
*
|
|
14
|
+
* - Default-OFF. Fires only when `memory.learn_on_session_end: true` in
|
|
15
|
+
* `.agent-settings.yml` (council decision 2026-07-27: ships off; the
|
|
16
|
+
* default flip is proposed only after the 30-day dogfood shows
|
|
17
|
+
* non-trivial signal AND session-end p95 < 2 s).
|
|
18
|
+
* - Budget-capped: a wall-clock budget (default 2000 ms) aborts the write
|
|
19
|
+
* and exits 0 — a slow aggregation must never tax session teardown.
|
|
20
|
+
* - Fail-open: any error → exit 0, no output. `fail_closed: false`.
|
|
21
|
+
* - Promotion stays human: this hook only refreshes the sidecar; a
|
|
22
|
+
* PROMOTED lesson is surfaced as a one-line visibility marker pointing
|
|
23
|
+
* at the existing /memory:propose flow. Nothing auto-writes curated
|
|
24
|
+
* `agents/memory/*.yml`.
|
|
25
|
+
*
|
|
26
|
+
* Exit codes (dispatcher contract): 0 always (allow).
|
|
27
|
+
*/
|
|
28
|
+
import fs from 'node:fs';
|
|
29
|
+
import path from 'node:path';
|
|
30
|
+
import { fileURLToPath, pathToFileURL } from 'node:url';
|
|
31
|
+
|
|
32
|
+
import {
|
|
33
|
+
buildSidecar,
|
|
34
|
+
LESSONS_NAME,
|
|
35
|
+
renderLessonsMd,
|
|
36
|
+
SIDECAR_NAME,
|
|
37
|
+
} from './learning_sidecar.js';
|
|
38
|
+
|
|
39
|
+
const SETTINGS_FILE = '.agent-settings.yml';
|
|
40
|
+
/** Wall-clock budget for the whole aggregation (ms). */
|
|
41
|
+
export const BUDGET_MS = 2000;
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Minimal `.agent-settings.yml` reader for `memory.learn_on_session_end`
|
|
45
|
+
* (same hand-rolled mini-parser pattern as the sibling hooks — no YAML
|
|
46
|
+
* dependency in the hook hot path).
|
|
47
|
+
*/
|
|
48
|
+
export function enabled(root: string): boolean {
|
|
49
|
+
const p = path.join(root, SETTINGS_FILE);
|
|
50
|
+
let text: string;
|
|
51
|
+
try {
|
|
52
|
+
text = fs.readFileSync(p, 'utf8');
|
|
53
|
+
} catch {
|
|
54
|
+
return false;
|
|
55
|
+
}
|
|
56
|
+
let inMemory = false;
|
|
57
|
+
for (const rawLine of text.split('\n')) {
|
|
58
|
+
const line = rawLine.replace(/\s+$/u, '');
|
|
59
|
+
if (/^memory:\s*(#.*)?$/u.test(line)) {
|
|
60
|
+
inMemory = true;
|
|
61
|
+
continue;
|
|
62
|
+
}
|
|
63
|
+
if (inMemory) {
|
|
64
|
+
if (/^\S/u.test(line) && line !== '') {
|
|
65
|
+
inMemory = false; // left the memory: block
|
|
66
|
+
continue;
|
|
67
|
+
}
|
|
68
|
+
const m = /^\s{2,}learn_on_session_end:\s*(\S+)/u.exec(line);
|
|
69
|
+
if (m) return m[1] === 'true';
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
return false;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/** Run the aggregation. Returns the one-line marker to emit, or null. */
|
|
76
|
+
export function runLearn(root: string, nowIso: string, budgetMs: number = BUDGET_MS): string | null {
|
|
77
|
+
const started = Date.now();
|
|
78
|
+
const intakeDir = path.join(root, 'agents', 'memory', 'intake');
|
|
79
|
+
const outDir = path.join(root, 'agents', 'memory');
|
|
80
|
+
if (!fs.existsSync(intakeDir)) return null;
|
|
81
|
+
const sidecar = buildSidecar(intakeDir, nowIso);
|
|
82
|
+
if (Date.now() - started > budgetMs) return null; // over budget — skip the write
|
|
83
|
+
if (sidecar.lessons.length === 0) return null;
|
|
84
|
+
fs.writeFileSync(path.join(outDir, SIDECAR_NAME), `${JSON.stringify(sidecar, null, 2)}\n`, 'utf8');
|
|
85
|
+
fs.writeFileSync(path.join(outDir, LESSONS_NAME), renderLessonsMd(sidecar), 'utf8');
|
|
86
|
+
const promoted = sidecar.lessons.filter((l) => l.verdict === 'preferred').length;
|
|
87
|
+
const deadEnds = sidecar.lessons.filter((l) => l.verdict === 'dead_end').length;
|
|
88
|
+
// Memory-visibility contract shape: one line, ids/counters only, no bodies.
|
|
89
|
+
return (
|
|
90
|
+
`🧠 Memory: sidecar refreshed — ${sidecar.lessons.length} lesson(s) ` +
|
|
91
|
+
`(${promoted} preferred · ${deadEnds} dead-end); promote via /memory:propose`
|
|
92
|
+
);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
export function main(): number {
|
|
96
|
+
try {
|
|
97
|
+
const root = process.cwd();
|
|
98
|
+
if (!enabled(root)) return 0;
|
|
99
|
+
const marker = runLearn(root, new Date().toISOString());
|
|
100
|
+
if (marker) process.stdout.write(`${marker}\n`);
|
|
101
|
+
} catch {
|
|
102
|
+
// fail-open: session teardown must never break on a learning hook.
|
|
103
|
+
}
|
|
104
|
+
return 0;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
// Bundle-safety: never auto-run when inlined into an esbuild bundle, where
|
|
108
|
+
// every module shares the bundle's `import.meta.url` (see cmd_migrate.ts).
|
|
109
|
+
declare const __AGENT_CONFIG_BUNDLE__: boolean | undefined;
|
|
110
|
+
const _isMain = (() => {
|
|
111
|
+
if (typeof __AGENT_CONFIG_BUNDLE__ !== 'undefined' && __AGENT_CONFIG_BUNDLE__) return false;
|
|
112
|
+
if (process.argv[1] === undefined) return false;
|
|
113
|
+
try {
|
|
114
|
+
return (
|
|
115
|
+
pathToFileURL(fs.realpathSync(path.resolve(process.argv[1]))).href ===
|
|
116
|
+
import.meta.url
|
|
117
|
+
);
|
|
118
|
+
} catch {
|
|
119
|
+
return pathToFileURL(path.resolve(process.argv[1])).href === import.meta.url;
|
|
120
|
+
}
|
|
121
|
+
})();
|
|
122
|
+
if (_isMain) {
|
|
123
|
+
process.exit(main());
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
export const _HERE = fileURLToPath(import.meta.url);
|
|
Binary file
|
|
@@ -0,0 +1,312 @@
|
|
|
1
|
+
#!/usr/bin/env tsx
|
|
2
|
+
/**
|
|
3
|
+
* Rollback-trigger replay for the memory FTS5 index
|
|
4
|
+
* (road-to-reachable-code-memory Phase 6 item 2 / ADR-129).
|
|
5
|
+
*
|
|
6
|
+
* ADR-129 makes the FTS5 substrate ship WITHOUT a ship-gate lift benchmark
|
|
7
|
+
* (the separator-recall gap is a correctness defect, not a ranking question
|
|
8
|
+
* a lift-gate could measure), but it still records a ROLLBACK trigger: this
|
|
9
|
+
* replay reports recall + tie-distribution for the substring `_score`
|
|
10
|
+
* fallback vs the persisted FTS5 index, over a FIXED 24-query set drawn from
|
|
11
|
+
* REAL entry ids in `agents/memory/*.yml` — not the synthetic
|
|
12
|
+
* needed+distractor bench store `measure_lexical_ranking.ts` uses.
|
|
13
|
+
*
|
|
14
|
+
* Two prior baselines are cited (per ADR-129: "the replay must state which
|
|
15
|
+
* baseline artefact it compares against"), but NEITHER is directly
|
|
16
|
+
* comparable to this replay's own numbers — both were measured over
|
|
17
|
+
* `internal/bench/second-brain/retrieval-store/` (a small store engineered
|
|
18
|
+
* with keyword-overlapping distractors specifically to produce ties), not
|
|
19
|
+
* over the real, distractor-free `agents/memory` corpus this script runs
|
|
20
|
+
* against:
|
|
21
|
+
*
|
|
22
|
+
* - `internal/bench/reports/second-brain-retrieval.json`:
|
|
23
|
+
* mean_tie_set_size = 4.111... (live retrieval-precision measurement)
|
|
24
|
+
* - `internal/bench/reports/lexical-ranking.json`: implied mean tie-set
|
|
25
|
+
* 3.333 for the SAME `_score` scorer over the SAME store (a different
|
|
26
|
+
* measurement pass — the cross-artefact discrepancy is a known, already
|
|
27
|
+
* documented finding, see `docs/proof.md`).
|
|
28
|
+
*
|
|
29
|
+
* This replay's own baseline-vs-FTS comparison (computed on the same corpus,
|
|
30
|
+
* same query set, same run) is the load-bearing measurement; the two
|
|
31
|
+
* externals above are context, printed for the record, never averaged in.
|
|
32
|
+
*
|
|
33
|
+
* Usage: memory_replay_24.ts [--write] [--format text|json]
|
|
34
|
+
* --write persist the dated note to agents/evidence/reports/memory-fts-replay.md
|
|
35
|
+
* Exit codes: 0 ok, 1 internal error, 2 usage error.
|
|
36
|
+
*/
|
|
37
|
+
import * as fs from 'node:fs';
|
|
38
|
+
import * as path from 'node:path';
|
|
39
|
+
import { fileURLToPath } from 'node:url';
|
|
40
|
+
|
|
41
|
+
import { _iter_curated_entries } from './memory_report.js';
|
|
42
|
+
import { _score } from './memory_lookup.js';
|
|
43
|
+
import { buildIndex, isStale, queryIndex, resolveIndexPath } from './_lib/memory_fts_index.js';
|
|
44
|
+
|
|
45
|
+
const _HERE = fileURLToPath(import.meta.url);
|
|
46
|
+
export const REPO_ROOT = path.resolve(path.dirname(_HERE), '..', '..');
|
|
47
|
+
export const MEMORY_ROOT = path.join(REPO_ROOT, 'agents', 'memory');
|
|
48
|
+
export const INTAKE_ROOT = path.join(MEMORY_ROOT, 'intake');
|
|
49
|
+
export const NOTE_PATH = path.join(REPO_ROOT, 'agents', 'evidence', 'reports', 'memory-fts-replay.md');
|
|
50
|
+
|
|
51
|
+
const CURATED_STATUS_EXCLUDE: ReadonlySet<string> = new Set(['deprecated', 'archived', 'superseded']);
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Fixed 24-query set — real curated entry ids from `agents/memory/*.yml`
|
|
55
|
+
* (2026-07-27 snapshot), deliberately hyphen-heavy so the set exercises the
|
|
56
|
+
* exact separator-recall defect ADR-129 names (`ai_council`-style queries
|
|
57
|
+
* scoring 0 under the literal substring scorer). Each query is the entry's
|
|
58
|
+
* OWN id — "recall" means "does querying by an entry's id retrieve that
|
|
59
|
+
* same entry within the top 5".
|
|
60
|
+
*/
|
|
61
|
+
export const REPLAY_QUERIES: readonly string[] = [
|
|
62
|
+
'adr-number-collision-on-parallel-prs',
|
|
63
|
+
'agent-config-hooks-need-global-binary',
|
|
64
|
+
'ai-council-cli-repo-local-only',
|
|
65
|
+
'auto-commit-empties-roadmaps',
|
|
66
|
+
'bench-ab-cost-and-activation-mechanics',
|
|
67
|
+
'capability-matrix-coverage-guard',
|
|
68
|
+
'claude-plugin-local-install-via-worktree',
|
|
69
|
+
'command-cluster-ci-surface',
|
|
70
|
+
'commit-relocates-into-per-branch-worktree',
|
|
71
|
+
'council-a1-subagent-contract',
|
|
72
|
+
'council-access-control-and-remediation',
|
|
73
|
+
'council-agent-memory-sunset',
|
|
74
|
+
'council-ai-failure-mode-prevention',
|
|
75
|
+
'council-analysis-workbench',
|
|
76
|
+
'council-chat-history-consolidation',
|
|
77
|
+
'council-claude-code-single-surface',
|
|
78
|
+
'council-command-cluster-phase4',
|
|
79
|
+
'council-contract-integrity',
|
|
80
|
+
'council-curl-timeout-fix',
|
|
81
|
+
'council-decisions-workspace-phases',
|
|
82
|
+
'council-design-antislop-harvest',
|
|
83
|
+
'council-design-exploration-skills',
|
|
84
|
+
'council-discipline-axis-benchmark',
|
|
85
|
+
'council-ecc-harvest',
|
|
86
|
+
];
|
|
87
|
+
|
|
88
|
+
const K = 5;
|
|
89
|
+
|
|
90
|
+
interface RankedRow {
|
|
91
|
+
id: string;
|
|
92
|
+
score: number;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
interface EngineResult {
|
|
96
|
+
rank: number; // 0-based index within the top-K, -1 = not recalled
|
|
97
|
+
tieSet: number; // count of entries sharing the TOP score (over the whole ranking)
|
|
98
|
+
top5: string[];
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
interface QueryResult {
|
|
102
|
+
query: string;
|
|
103
|
+
baseline: EngineResult;
|
|
104
|
+
fts: EngineResult;
|
|
105
|
+
top5Overlap: number; // |baseline.top5 ∩ fts.top5| / K
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/** Corpus entries (id + searchable text), status-excluded entries dropped — mirrors `retrieve()`'s candidate set. */
|
|
109
|
+
function _corpusEntries(): Array<{ id: string; entry: Record<string, unknown> }> {
|
|
110
|
+
const out: Array<{ id: string; entry: Record<string, unknown> }> = [];
|
|
111
|
+
for (const [, , entry] of _iter_curated_entries()) {
|
|
112
|
+
const status = entry['status'];
|
|
113
|
+
if (typeof status === 'string' && CURATED_STATUS_EXCLUDE.has(status)) continue;
|
|
114
|
+
const id = typeof entry['id'] === 'string' ? entry['id'] : '';
|
|
115
|
+
if (id === '') continue;
|
|
116
|
+
out.push({ id, entry });
|
|
117
|
+
}
|
|
118
|
+
return out;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
/** Deterministic ordering: score DESC, id ASC — the memory_lookup.ts contract. */
|
|
122
|
+
function _sortRanked(rows: RankedRow[]): void {
|
|
123
|
+
rows.sort((a, b) => (b.score - a.score) || (a.id < b.id ? -1 : a.id > b.id ? 1 : 0));
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
function _diagnose(ranked: RankedRow[], needed: string): EngineResult {
|
|
127
|
+
const positive = ranked.filter((r) => r.score > 0);
|
|
128
|
+
if (positive.length === 0) return { rank: -1, tieSet: 0, top5: [] };
|
|
129
|
+
const top = positive[0]?.score ?? 0;
|
|
130
|
+
const tieSet = positive.filter((r) => r.score === top).length;
|
|
131
|
+
const top5 = positive.slice(0, K).map((r) => r.id);
|
|
132
|
+
const rank = top5.indexOf(needed);
|
|
133
|
+
return { rank, tieSet, top5 };
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
function _baselineRanked(corpus: Array<{ id: string; entry: Record<string, unknown> }>, keys: string[]): RankedRow[] {
|
|
137
|
+
const rows = corpus.map((c) => ({ id: c.id, score: _score(c.entry, keys) }));
|
|
138
|
+
_sortRanked(rows);
|
|
139
|
+
return rows;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
function _ftsRanked(indexPath: string, keys: string[]): RankedRow[] {
|
|
143
|
+
const hits = queryIndex(indexPath, keys, []);
|
|
144
|
+
const rows = hits.map((h) => ({ id: h.id, score: h.relevance }));
|
|
145
|
+
_sortRanked(rows);
|
|
146
|
+
return rows;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
export interface ReplaySummary {
|
|
150
|
+
schema_version: 1;
|
|
151
|
+
kind: 'memory-fts-replay';
|
|
152
|
+
generated_at: string;
|
|
153
|
+
corpus: string;
|
|
154
|
+
corpus_entries: number;
|
|
155
|
+
queries: number;
|
|
156
|
+
k: number;
|
|
157
|
+
baseline_recall_at_k: number;
|
|
158
|
+
fts_recall_at_k: number;
|
|
159
|
+
baseline_mean_tie_set_size: number;
|
|
160
|
+
fts_mean_tie_set_size: number;
|
|
161
|
+
mean_top5_overlap: number;
|
|
162
|
+
compared_against: {
|
|
163
|
+
second_brain_retrieval_json: { path: string; mean_tie_set_size: number };
|
|
164
|
+
lexical_ranking_json: { path: string; note: string };
|
|
165
|
+
comparability_note: string;
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
export function replay(): { results: QueryResult[]; summary: ReplaySummary } {
|
|
170
|
+
const corpus = _corpusEntries();
|
|
171
|
+
const indexPath = resolveIndexPath(REPO_ROOT);
|
|
172
|
+
if (isStale(indexPath, MEMORY_ROOT, INTAKE_ROOT)) {
|
|
173
|
+
buildIndex(indexPath, MEMORY_ROOT, INTAKE_ROOT);
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
const results: QueryResult[] = [];
|
|
177
|
+
for (const query of REPLAY_QUERIES) {
|
|
178
|
+
const baseline = _diagnose(_baselineRanked(corpus, [query]), query);
|
|
179
|
+
const fts = _diagnose(_ftsRanked(indexPath, [query]), query);
|
|
180
|
+
const overlapCount = baseline.top5.filter((id) => fts.top5.includes(id)).length;
|
|
181
|
+
const top5Overlap = K > 0 ? overlapCount / K : 0;
|
|
182
|
+
results.push({ query, baseline, fts, top5Overlap });
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
const n = results.length;
|
|
186
|
+
const mean = (sel: (r: QueryResult) => number): number =>
|
|
187
|
+
n === 0 ? 0 : Math.round((results.reduce((a, r) => a + sel(r), 0) / n) * 1000) / 1000;
|
|
188
|
+
const recallAt = (sel: (r: QueryResult) => EngineResult): number =>
|
|
189
|
+
n === 0 ? 0 : Math.round((results.filter((r) => sel(r).rank >= 0).length / n) * 1000) / 1000;
|
|
190
|
+
|
|
191
|
+
const summary: ReplaySummary = {
|
|
192
|
+
schema_version: 1,
|
|
193
|
+
kind: 'memory-fts-replay',
|
|
194
|
+
generated_at: new Date().toISOString(),
|
|
195
|
+
corpus: 'agents/memory/ (real, distractor-free)',
|
|
196
|
+
corpus_entries: corpus.length,
|
|
197
|
+
queries: n,
|
|
198
|
+
k: K,
|
|
199
|
+
baseline_recall_at_k: recallAt((r) => r.baseline),
|
|
200
|
+
fts_recall_at_k: recallAt((r) => r.fts),
|
|
201
|
+
baseline_mean_tie_set_size: mean((r) => r.baseline.tieSet),
|
|
202
|
+
fts_mean_tie_set_size: mean((r) => r.fts.tieSet),
|
|
203
|
+
mean_top5_overlap: mean((r) => r.top5Overlap),
|
|
204
|
+
compared_against: {
|
|
205
|
+
second_brain_retrieval_json: {
|
|
206
|
+
path: 'internal/bench/reports/second-brain-retrieval.json',
|
|
207
|
+
mean_tie_set_size: 4.111111111111111,
|
|
208
|
+
},
|
|
209
|
+
lexical_ranking_json: {
|
|
210
|
+
path: 'internal/bench/reports/lexical-ranking.json',
|
|
211
|
+
note: 'records ~3.333 mean baseline tie-set for the same _score scorer over the SAME bench store — a different measurement pass, cross-artefact discrepancy documented in docs/proof.md',
|
|
212
|
+
},
|
|
213
|
+
comparability_note:
|
|
214
|
+
'Both cited artefacts were measured over internal/bench/second-brain/retrieval-store/ (engineered needed+distractor fixture). This replay runs over the real agents/memory/ corpus (no engineered distractors) with a DIFFERENT query set (real entry ids, not curated needed/distractor tasks) — the numbers above are NOT directly comparable to either cited artefact. They are cited per ADR-129\'s instruction to name which baseline artefact a replay compares against; this replay\'s own baseline-vs-FTS delta (computed on one corpus, one run) is the load-bearing number.',
|
|
215
|
+
},
|
|
216
|
+
};
|
|
217
|
+
return { results, summary };
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
function _renderMarkdown(out: { results: QueryResult[]; summary: ReplaySummary }): string {
|
|
221
|
+
const s = out.summary;
|
|
222
|
+
const date = s.generated_at.slice(0, 10);
|
|
223
|
+
const lines: string[] = [];
|
|
224
|
+
lines.push(`# Memory FTS5 replay — ${date}`);
|
|
225
|
+
lines.push('');
|
|
226
|
+
lines.push(
|
|
227
|
+
'Rollback-trigger measurement for the memory FTS5 index (road-to-reachable-code-memory ' +
|
|
228
|
+
'Phase 6 item 2 / ADR-129). Compares the substring `_score` fallback against the ' +
|
|
229
|
+
'persisted FTS5 index over a fixed 24-query set of real `agents/memory/*.yml` entry ids.',
|
|
230
|
+
);
|
|
231
|
+
lines.push('');
|
|
232
|
+
lines.push('## Comparability note');
|
|
233
|
+
lines.push('');
|
|
234
|
+
lines.push(s.compared_against.comparability_note);
|
|
235
|
+
lines.push('');
|
|
236
|
+
lines.push('## Cited baselines (context only — not directly comparable, see above)');
|
|
237
|
+
lines.push('');
|
|
238
|
+
lines.push(
|
|
239
|
+
`- \`${s.compared_against.second_brain_retrieval_json.path}\` — ` +
|
|
240
|
+
`mean_tie_set_size = ${s.compared_against.second_brain_retrieval_json.mean_tie_set_size}`,
|
|
241
|
+
);
|
|
242
|
+
lines.push(`- \`${s.compared_against.lexical_ranking_json.path}\` — ${s.compared_against.lexical_ranking_json.note}`);
|
|
243
|
+
lines.push('');
|
|
244
|
+
lines.push('## This replay');
|
|
245
|
+
lines.push('');
|
|
246
|
+
lines.push(`- Corpus: ${s.corpus} (${s.corpus_entries} entries)`);
|
|
247
|
+
lines.push(`- Queries: ${s.queries}, k=${s.k}`);
|
|
248
|
+
lines.push(`- Recall@${s.k}: baseline=${s.baseline_recall_at_k} fts=${s.fts_recall_at_k}`);
|
|
249
|
+
lines.push(
|
|
250
|
+
`- Mean top tie-set size: baseline=${s.baseline_mean_tie_set_size} fts=${s.fts_mean_tie_set_size}`,
|
|
251
|
+
);
|
|
252
|
+
lines.push(`- Mean top-${s.k} overlap (baseline ∩ fts): ${s.mean_top5_overlap}`);
|
|
253
|
+
lines.push('');
|
|
254
|
+
lines.push('## Per-query detail');
|
|
255
|
+
lines.push('');
|
|
256
|
+
lines.push('| query | baseline rank | baseline tie | fts rank | fts tie | top5 overlap |');
|
|
257
|
+
lines.push('|---|---|---|---|---|---|');
|
|
258
|
+
for (const r of out.results) {
|
|
259
|
+
lines.push(
|
|
260
|
+
`| \`${r.query}\` | ${r.baseline.rank} | ${r.baseline.tieSet} | ${r.fts.rank} | ${r.fts.tieSet} | ${r.top5Overlap} |`,
|
|
261
|
+
);
|
|
262
|
+
}
|
|
263
|
+
lines.push('');
|
|
264
|
+
return lines.join('\n');
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
export function main(argv: string[]): number {
|
|
268
|
+
let write = false;
|
|
269
|
+
let format: 'text' | 'json' = 'text';
|
|
270
|
+
for (let i = 0; i < argv.length; i++) {
|
|
271
|
+
const a = argv[i] as string;
|
|
272
|
+
if (a === '--write') write = true;
|
|
273
|
+
else if (a === '--format') format = (argv[++i] as 'text' | 'json') ?? 'text';
|
|
274
|
+
else if (a === '-h' || a === '--help') {
|
|
275
|
+
process.stdout.write('usage: memory_replay_24.ts [--write] [--format text|json]\n');
|
|
276
|
+
return 0;
|
|
277
|
+
} else {
|
|
278
|
+
process.stderr.write(`memory_replay_24: unknown argument ${a}\n`);
|
|
279
|
+
return 2;
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
let out: { results: QueryResult[]; summary: ReplaySummary };
|
|
284
|
+
try {
|
|
285
|
+
out = replay();
|
|
286
|
+
} catch (exc) {
|
|
287
|
+
process.stderr.write(`memory_replay_24: error: ${String(exc)}\n`);
|
|
288
|
+
return 1;
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
if (write) {
|
|
292
|
+
fs.mkdirSync(path.dirname(NOTE_PATH), { recursive: true });
|
|
293
|
+
fs.writeFileSync(NOTE_PATH, _renderMarkdown(out) + '\n');
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
if (format === 'json') {
|
|
297
|
+
process.stdout.write(JSON.stringify(out, null, 2) + '\n');
|
|
298
|
+
return 0;
|
|
299
|
+
}
|
|
300
|
+
const s = out.summary;
|
|
301
|
+
process.stdout.write(
|
|
302
|
+
`memory-fts-replay (${s.queries} queries, k=${s.k}, corpus=${s.corpus_entries} entries):\n` +
|
|
303
|
+
` recall@${s.k} baseline=${s.baseline_recall_at_k} fts=${s.fts_recall_at_k}\n` +
|
|
304
|
+
` mean top tie-set baseline=${s.baseline_mean_tie_set_size} fts=${s.fts_mean_tie_set_size}\n` +
|
|
305
|
+
` mean top-${s.k} overlap: ${s.mean_top5_overlap}\n`,
|
|
306
|
+
);
|
|
307
|
+
return 0;
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
if (fileURLToPath(import.meta.url) === path.resolve(process.argv[1] ?? '')) {
|
|
311
|
+
process.exit(main(process.argv.slice(2)));
|
|
312
|
+
}
|
|
@@ -189,10 +189,17 @@ function _pyYamlDatetimeStr(raw: string): string {
|
|
|
189
189
|
|
|
190
190
|
// --- curated/intake iteration -----------------------------------------------
|
|
191
191
|
|
|
192
|
-
type CuratedTuple = [string, string, Record<string, unknown>];
|
|
192
|
+
export type CuratedTuple = [string, string, Record<string, unknown>];
|
|
193
193
|
|
|
194
|
-
/**
|
|
195
|
-
|
|
194
|
+
/**
|
|
195
|
+
* Yield [file, type, entry] across both curated layouts.
|
|
196
|
+
*
|
|
197
|
+
* Exported for reuse by `_lib/memory_fts_index.ts` (road-to-reachable-code-memory
|
|
198
|
+
* Phase 6) — the FTS index builder repoints `MEMORY_ROOT` via `_setMemoryRoot`
|
|
199
|
+
* before calling this, then restores it, so it never needs a second copy of
|
|
200
|
+
* the curated-layout scan.
|
|
201
|
+
*/
|
|
202
|
+
export function _iter_curated_entries(): CuratedTuple[] {
|
|
196
203
|
const out: CuratedTuple[] = [];
|
|
197
204
|
for (const mtype of CURATED_TYPES) {
|
|
198
205
|
const single = path.join(MEMORY_ROOT, `${mtype}.yml`);
|
|
@@ -838,7 +845,13 @@ export function main(): number {
|
|
|
838
845
|
return 0;
|
|
839
846
|
}
|
|
840
847
|
|
|
848
|
+
// Bundle-safety: never auto-run when inlined into an esbuild bundle, where
|
|
849
|
+
// every module shares the bundle's `import.meta.url` (see cmd_migrate.ts).
|
|
850
|
+
declare const __AGENT_CONFIG_BUNDLE__: boolean | undefined;
|
|
841
851
|
function _isCliEntry(): boolean {
|
|
852
|
+
if (typeof __AGENT_CONFIG_BUNDLE__ !== 'undefined' && __AGENT_CONFIG_BUNDLE__) {
|
|
853
|
+
return false;
|
|
854
|
+
}
|
|
842
855
|
if (process.argv[1] === undefined) {
|
|
843
856
|
return false;
|
|
844
857
|
}
|
|
@@ -29,6 +29,7 @@
|
|
|
29
29
|
|
|
30
30
|
import * as crypto from 'node:crypto';
|
|
31
31
|
import * as fs from 'node:fs';
|
|
32
|
+
import * as os from 'node:os';
|
|
32
33
|
import * as path from 'node:path';
|
|
33
34
|
import process from 'node:process';
|
|
34
35
|
import { fileURLToPath, pathToFileURL } from 'node:url';
|
|
@@ -211,6 +212,49 @@ export interface SignalRecord {
|
|
|
211
212
|
body: string;
|
|
212
213
|
}
|
|
213
214
|
|
|
215
|
+
/**
|
|
216
|
+
* Provenance gate at the write edge — invariant 2 of ADR-130 (`subject`
|
|
217
|
+
* axis). A record whose `origin` resolves into the user-global store, or
|
|
218
|
+
* that carries `subject: user`, is REFUSED entry into the tracked project
|
|
219
|
+
* intake (plain path/field check, no model call). `subject: project` is
|
|
220
|
+
* the additive default. Thrown message names the partition rule.
|
|
221
|
+
*/
|
|
222
|
+
export class ProvenanceRefusedError extends Error {}
|
|
223
|
+
|
|
224
|
+
// lint-store-boundary: ignore — the provenance gate must RECOGNISE the global root to refuse it
|
|
225
|
+
const _GLOBAL_STORE_MARKER = `.event4u${path.sep}agent-config`;
|
|
226
|
+
|
|
227
|
+
export function _origin_is_global(origin: string): boolean {
|
|
228
|
+
if (!origin.includes('/') && !origin.includes(path.sep) && !origin.startsWith('~')) {
|
|
229
|
+
return false; // symbolic origins ('agent', 'claude', 'cursor', …) are not paths
|
|
230
|
+
}
|
|
231
|
+
const expanded = origin.startsWith('~')
|
|
232
|
+
? path.join(os.homedir(), origin.slice(1)) // lint-store-boundary: ignore — the gate itself must recognise the global root
|
|
233
|
+
: origin;
|
|
234
|
+
let resolved: string;
|
|
235
|
+
try {
|
|
236
|
+
resolved = path.resolve(expanded);
|
|
237
|
+
} catch {
|
|
238
|
+
return false;
|
|
239
|
+
}
|
|
240
|
+
return resolved.includes(_GLOBAL_STORE_MARKER) || /(^|[\\/])\.event4u([\\/]|$)/.test(origin);
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
export function _assert_project_writable(record: { origin: string; subject?: unknown }): void {
|
|
244
|
+
if (record.subject === 'user') {
|
|
245
|
+
throw new ProvenanceRefusedError(
|
|
246
|
+
'provenance gate: subject: user records live global-only and may ' +
|
|
247
|
+
'never be written into a tracked project artifact (ADR-130).',
|
|
248
|
+
);
|
|
249
|
+
}
|
|
250
|
+
if (_origin_is_global(record.origin)) {
|
|
251
|
+
throw new ProvenanceRefusedError(
|
|
252
|
+
`provenance gate: origin resolves into the user-global store ` +
|
|
253
|
+
`(${record.origin}) — refused entry into tracked project intake (ADR-130).`,
|
|
254
|
+
);
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
|
|
214
258
|
/**
|
|
215
259
|
* Append a signal entry. Returns the written record, or null when skipped.
|
|
216
260
|
*/
|
|
@@ -252,6 +296,10 @@ export function emit(
|
|
|
252
296
|
}
|
|
253
297
|
}
|
|
254
298
|
}
|
|
299
|
+
if (!('subject' in record)) {
|
|
300
|
+
record.subject = 'project'; // additive default (ADR-130)
|
|
301
|
+
}
|
|
302
|
+
_assert_project_writable(record as { origin: string; subject?: unknown });
|
|
255
303
|
fs.mkdirSync(INTAKE_ROOT, { recursive: true });
|
|
256
304
|
const target = _monthly_file();
|
|
257
305
|
fs.appendFileSync(target, `${_jsonDumpsUnicode(record)}\n`, 'utf-8');
|