@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
|
@@ -8,3 +8,8 @@ bundle integrity 3a7bd3e2360a3d29eea436fcfb7e44c735d117c42d1c1835420b6b9942dd4f1
|
|
|
8
8
|
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAElFTkSuQmCC
|
|
9
9
|
API_KEY=your-key-here
|
|
10
10
|
aws_key = "AKIAZ4Q7WXYT2H9RVBKL" # secret-allow
|
|
11
|
+
aws docs example AKIAIOSFODNN7EXAMPLE
|
|
12
|
+
stripe_key = "sk_test_placeholder"
|
|
13
|
+
token = "[REDACTED]"
|
|
14
|
+
password = "********"
|
|
15
|
+
checksum sha512-VGhpcyBpcyBub3QgYSBzZWNyZXQgYXQgYWxsIGp1c3QgYSBkaWdlc3Q=
|
|
@@ -9,3 +9,7 @@ pem|-----BEGIN RSA PRIVATE KEY-----
|
|
|
9
9
|
jwt|eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMjM0NTY3ODkwIn0.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
|
|
10
10
|
dburl|postgres://dbuser:s3cr3tpass@db.internal:5432/app
|
|
11
11
|
assignment|api_key = "s3cr3tV4lu3Abc123"
|
|
12
|
+
github-fine-grained|github_pat_11ABCDEFG0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
|
|
13
|
+
env-db-password|DB_PASSWORD=q7Xp2Vr9kLm4Nt8wYz3BdF6h
|
|
14
|
+
env-api-key|API_KEY=Zr4tK9pQx2Wm7Vn3Jb8LcD5f
|
|
15
|
+
dburl-mysql|mysql://svc:P4ssw0rdXyz789@10.0.0.12:3306/prod
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Installer drift report (measurement only, never a gate).
|
|
3
|
+
*
|
|
4
|
+
* Compares the sha256 hashes recorded in a project's
|
|
5
|
+
* `agents/installed-tools.lock` manifest (`kind: 'deployed'` file entries —
|
|
6
|
+
* written by the installer at deploy time, see `install.ts`'s `_file_entry`)
|
|
7
|
+
* against the current on-disk content of those same files. A mismatch means
|
|
8
|
+
* a framework-authoritative file was locally modified since the last
|
|
9
|
+
* install/upgrade; a missing file means it was deleted. This measures the
|
|
10
|
+
* "consumers edit framework-authoritative files" premise — it never repairs,
|
|
11
|
+
* never blocks, and has no opinion on whether drift is good or bad. See
|
|
12
|
+
* `report_install_drift.ts` (the standalone CLI, always exits 0) and
|
|
13
|
+
* `install.ts`'s global-install upgrade path (prints the report and
|
|
14
|
+
* proceeds with the redeploy regardless of what it finds).
|
|
15
|
+
*
|
|
16
|
+
* Deliberately does NOT reuse `installed_tools.read_manifest()`: that
|
|
17
|
+
* module's manual v1/v2 parser silently drops nested `tools[].files[]`
|
|
18
|
+
* entries on read (documented divergence in that module's header) — exactly
|
|
19
|
+
* the data this report needs. This module parses the manifest YAML directly
|
|
20
|
+
* with the `yaml` package (a real dependency of this package, already used
|
|
21
|
+
* by dozens of sibling scripts) so `sha256` values are read faithfully. It
|
|
22
|
+
* still reuses `installed_tools.manifest_path()` for path resolution + the
|
|
23
|
+
* `AGENT_CONFIG_INSTALLED_TOOLS` env override, so there is exactly one place
|
|
24
|
+
* that decides "where is the manifest".
|
|
25
|
+
*/
|
|
26
|
+
import * as crypto from "node:crypto";
|
|
27
|
+
import * as fs from "node:fs";
|
|
28
|
+
import * as os from "node:os";
|
|
29
|
+
import * as path from "node:path";
|
|
30
|
+
import { parse as parseYaml } from "yaml";
|
|
31
|
+
|
|
32
|
+
import { manifest_path, type EnvMap } from "./installed_tools.js";
|
|
33
|
+
|
|
34
|
+
export type DriftStatus = "modified" | "missing";
|
|
35
|
+
|
|
36
|
+
export interface DriftEntry {
|
|
37
|
+
/** Tool id the entry is recorded under (`tools[].name` in the manifest). */
|
|
38
|
+
tool_id: string;
|
|
39
|
+
/** Resolved on-disk path (absolute when the recorded path was absolute). */
|
|
40
|
+
path: string;
|
|
41
|
+
status: DriftStatus;
|
|
42
|
+
recorded_sha256: string;
|
|
43
|
+
/** `null` when the file is missing entirely (status === 'missing'). */
|
|
44
|
+
current_sha256: string | null;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/** Expand a leading `~`, mirroring the sibling helper in `installed_tools.ts`. */
|
|
48
|
+
function expanduser(p: string): string {
|
|
49
|
+
if (p === "~") {
|
|
50
|
+
return os.homedir();
|
|
51
|
+
}
|
|
52
|
+
if (p.startsWith("~/") || (process.platform === "win32" && p.startsWith("~\\"))) {
|
|
53
|
+
return path.join(os.homedir(), p.slice(2));
|
|
54
|
+
}
|
|
55
|
+
return p;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/** Resolve a manifest-recorded path against the project root (mirrors `cmd_doctor.ts`'s `_resolve_path`). */
|
|
59
|
+
function resolve_entry_path(project_root: string, raw: string): string {
|
|
60
|
+
const p = expanduser(raw);
|
|
61
|
+
return path.isAbsolute(p) ? p : path.join(project_root, p);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
function sha256_of_file(p: string): string | null {
|
|
65
|
+
try {
|
|
66
|
+
return crypto.createHash("sha256").update(fs.readFileSync(p)).digest("hex");
|
|
67
|
+
} catch {
|
|
68
|
+
return null;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Read the project manifest and return one entry per `kind: 'deployed'` file
|
|
74
|
+
* whose current on-disk sha256 differs from the recorded value, or which no
|
|
75
|
+
* longer exists.
|
|
76
|
+
*
|
|
77
|
+
* Returns `null` when there is no manifest at all (or it fails to parse) —
|
|
78
|
+
* distinct from `[]`, which means the manifest was read fine and nothing has
|
|
79
|
+
* drifted. Never throws.
|
|
80
|
+
*/
|
|
81
|
+
export function collect_drift(project_root: string, env?: EnvMap | null): DriftEntry[] | null {
|
|
82
|
+
const target = manifest_path(project_root, env);
|
|
83
|
+
|
|
84
|
+
let text: string;
|
|
85
|
+
try {
|
|
86
|
+
text = fs.readFileSync(target, "utf-8");
|
|
87
|
+
} catch {
|
|
88
|
+
return null;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
let data: unknown;
|
|
92
|
+
try {
|
|
93
|
+
data = parseYaml(text, { version: "1.1" });
|
|
94
|
+
} catch {
|
|
95
|
+
return null;
|
|
96
|
+
}
|
|
97
|
+
if (typeof data !== "object" || data === null) {
|
|
98
|
+
return null;
|
|
99
|
+
}
|
|
100
|
+
const tools = (data as Record<string, unknown>)["tools"];
|
|
101
|
+
if (!Array.isArray(tools)) {
|
|
102
|
+
// Manifest parsed fine, just carries no tools — that is "clean", not
|
|
103
|
+
// "no manifest".
|
|
104
|
+
return [];
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
const out: DriftEntry[] = [];
|
|
108
|
+
for (const tool of tools) {
|
|
109
|
+
if (typeof tool !== "object" || tool === null) {
|
|
110
|
+
continue;
|
|
111
|
+
}
|
|
112
|
+
const t = tool as Record<string, unknown>;
|
|
113
|
+
const tool_id = t["name"] === undefined ? "" : String(t["name"]);
|
|
114
|
+
const files = t["files"];
|
|
115
|
+
if (!Array.isArray(files)) {
|
|
116
|
+
continue;
|
|
117
|
+
}
|
|
118
|
+
for (const entry of files) {
|
|
119
|
+
if (typeof entry !== "object" || entry === null) {
|
|
120
|
+
continue;
|
|
121
|
+
}
|
|
122
|
+
const e = entry as Record<string, unknown>;
|
|
123
|
+
if (e["kind"] !== "deployed") {
|
|
124
|
+
continue;
|
|
125
|
+
}
|
|
126
|
+
const recorded_sha256 = e["sha256"];
|
|
127
|
+
if (typeof recorded_sha256 !== "string" || recorded_sha256 === "") {
|
|
128
|
+
continue;
|
|
129
|
+
}
|
|
130
|
+
const raw_path = e["path"];
|
|
131
|
+
if (typeof raw_path !== "string" || raw_path === "") {
|
|
132
|
+
continue;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
const resolved = resolve_entry_path(project_root, raw_path);
|
|
136
|
+
if (!fs.existsSync(resolved)) {
|
|
137
|
+
out.push({
|
|
138
|
+
tool_id,
|
|
139
|
+
path: resolved,
|
|
140
|
+
status: "missing",
|
|
141
|
+
recorded_sha256,
|
|
142
|
+
current_sha256: null,
|
|
143
|
+
});
|
|
144
|
+
continue;
|
|
145
|
+
}
|
|
146
|
+
const current = sha256_of_file(resolved);
|
|
147
|
+
if (current === recorded_sha256) {
|
|
148
|
+
continue;
|
|
149
|
+
}
|
|
150
|
+
out.push({
|
|
151
|
+
tool_id,
|
|
152
|
+
path: resolved,
|
|
153
|
+
status: "modified",
|
|
154
|
+
recorded_sha256,
|
|
155
|
+
current_sha256: current,
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
out.sort((a, b) => {
|
|
161
|
+
if (a.tool_id !== b.tool_id) {
|
|
162
|
+
return a.tool_id < b.tool_id ? -1 : 1;
|
|
163
|
+
}
|
|
164
|
+
return a.path < b.path ? -1 : a.path > b.path ? 1 : 0;
|
|
165
|
+
});
|
|
166
|
+
return out;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
/**
|
|
170
|
+
* Human-readable report body — one line per drifted file plus a summary
|
|
171
|
+
* line, or an explicit "clean"/"no manifest" line. Never throws.
|
|
172
|
+
*/
|
|
173
|
+
export function format_drift_report(entries: DriftEntry[] | null): string {
|
|
174
|
+
if (entries === null) {
|
|
175
|
+
return "Installer drift: no installed-tools manifest found — nothing to report.\n";
|
|
176
|
+
}
|
|
177
|
+
if (entries.length === 0) {
|
|
178
|
+
return "Installer drift: no local modifications detected in framework-authoritative files.\n";
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
const lines: string[] = [];
|
|
182
|
+
for (const e of entries) {
|
|
183
|
+
const label = e.status === "missing" ? "missing " : "modified";
|
|
184
|
+
lines.push(` ${label} [${e.tool_id}] ${e.path}`);
|
|
185
|
+
}
|
|
186
|
+
const modified = entries.filter((e) => e.status === "modified").length;
|
|
187
|
+
const missing = entries.filter((e) => e.status === "missing").length;
|
|
188
|
+
lines.push("");
|
|
189
|
+
lines.push(
|
|
190
|
+
`Installer drift: ${entries.length} framework-authoritative file(s) locally modified ` +
|
|
191
|
+
`since the last install (${modified} modified, ${missing} missing).`,
|
|
192
|
+
);
|
|
193
|
+
return lines.join("\n") + "\n";
|
|
194
|
+
}
|
|
@@ -0,0 +1,390 @@
|
|
|
1
|
+
// Derived FTS5 index over curated memory + intake JSONL
|
|
2
|
+
// (road-to-reachable-code-memory Phase 6 item 2 / ADR-129).
|
|
3
|
+
//
|
|
4
|
+
// `memory_lookup.ts`'s `_score` is a literal substring/glob scorer over
|
|
5
|
+
// unsplit haystack text. A curated entry's `key` field normalises separators
|
|
6
|
+
// to spaces (`key: ai council cli repo local only`), so a hyphen/underscore
|
|
7
|
+
// query (`ai_council`, `roadmap-progress`) scores 0 against EVERY entry —
|
|
8
|
+
// not a ranking preference, a recall defect (ADR-129 context point 1). This
|
|
9
|
+
// module builds a real FTS5 index (unicode61 tokenizer splits on the same
|
|
10
|
+
// separators on both the indexed text and the query, so the mismatch
|
|
11
|
+
// disappears) as a DERIVED, gitignored, disposable accelerant — JSON/YAML
|
|
12
|
+
// stays canonical; deleting the derived SQLite file is always safe, it
|
|
13
|
+
// rebuilds on the next lookup.
|
|
14
|
+
//
|
|
15
|
+
// Node < 22.5 (no `node:sqlite`) or a build failure → every public function
|
|
16
|
+
// here degrades to `null`/no-hits rather than throwing; `memory_lookup.ts`'s
|
|
17
|
+
// substring `_score` is the documented, always-available fallback.
|
|
18
|
+
import * as fs from 'node:fs';
|
|
19
|
+
import * as path from 'node:path';
|
|
20
|
+
import type * as NodeSqlite from 'node:sqlite';
|
|
21
|
+
import type { DatabaseSync } from 'node:sqlite';
|
|
22
|
+
|
|
23
|
+
import {
|
|
24
|
+
loadSqliteSync,
|
|
25
|
+
probeFts5Sync,
|
|
26
|
+
readUserVersion,
|
|
27
|
+
stampUserVersion,
|
|
28
|
+
} from './sqlite_guard.js';
|
|
29
|
+
import {
|
|
30
|
+
_iter_curated_entries,
|
|
31
|
+
_setMemoryRoot as _reportSetMemoryRoot,
|
|
32
|
+
MEMORY_ROOT as _reportMemoryRoot,
|
|
33
|
+
} from '../memory_report.js';
|
|
34
|
+
|
|
35
|
+
/** Versioned in the path itself (cache-invalidation lint: `-v1-`). */
|
|
36
|
+
export const MEMORY_INDEX_REL = path.join('agents', 'runtime', 'state', 'memory-index-v1.sqlite3');
|
|
37
|
+
/** Stamped via `PRAGMA user_version` on every build (road-to-reachable-code-memory Phase 7). */
|
|
38
|
+
export const SCHEMA_VERSION = 1;
|
|
39
|
+
|
|
40
|
+
const CURATED_STATUS_EXCLUDE: ReadonlySet<string> = new Set(['deprecated', 'archived', 'superseded']);
|
|
41
|
+
const INDEX_TEXT_FIELDS: readonly string[] = ['path', 'key', 'symptom', 'feature', 'rule', 'body'];
|
|
42
|
+
|
|
43
|
+
export type IndexedSource = 'curated' | 'intake';
|
|
44
|
+
|
|
45
|
+
export interface IndexedEntry {
|
|
46
|
+
id: string;
|
|
47
|
+
mtype: string;
|
|
48
|
+
source: IndexedSource;
|
|
49
|
+
path: string;
|
|
50
|
+
text: string;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/** One FTS5-recalled candidate. `relevance` is already a positive, `>0` value. */
|
|
54
|
+
export interface FtsHit {
|
|
55
|
+
id: string;
|
|
56
|
+
mtype: string;
|
|
57
|
+
source: IndexedSource;
|
|
58
|
+
path: string;
|
|
59
|
+
relevance: number;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/** Absolute index path for a consumer root (defaults to `process.cwd()`). */
|
|
63
|
+
export function resolveIndexPath(consumerRoot?: string | null): string {
|
|
64
|
+
return path.join(consumerRoot ?? process.cwd(), MEMORY_INDEX_REL);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
function _pyStr(v: unknown): string {
|
|
68
|
+
if (v === undefined || v === null) return '';
|
|
69
|
+
if (typeof v === 'string') return v;
|
|
70
|
+
return String(v);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/** Mirrors `memory_lookup.ts`'s `_entryIndexText` — the fields `_score` reads. */
|
|
74
|
+
function _entryIndexText(entry: Record<string, unknown>): string {
|
|
75
|
+
const parts: string[] = [];
|
|
76
|
+
for (const f of INDEX_TEXT_FIELDS) {
|
|
77
|
+
const v = entry[f];
|
|
78
|
+
if (typeof v === 'string') parts.push(v);
|
|
79
|
+
else if (Array.isArray(v)) for (const x of v) parts.push(_pyStr(x));
|
|
80
|
+
}
|
|
81
|
+
return parts.join(' | ');
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
function _isPlainObject(v: unknown): v is Record<string, unknown> {
|
|
85
|
+
return typeof v === 'object' && v !== null && !Array.isArray(v);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* Curated entries across both layouts, via `memory_report.ts`'s exported
|
|
90
|
+
* iterator. `memory_report` keeps its own module-level `MEMORY_ROOT`
|
|
91
|
+
* (separate from `memory_lookup.ts`'s), so this repoints it for the scan and
|
|
92
|
+
* restores it immediately after — the two calls are synchronous and never
|
|
93
|
+
* interleaved with another caller's use of that module state.
|
|
94
|
+
*/
|
|
95
|
+
function _collectCurated(memoryRoot: string): IndexedEntry[] {
|
|
96
|
+
const out: IndexedEntry[] = [];
|
|
97
|
+
// `_reportMemoryRoot` is a live ESM binding — reading it here captures
|
|
98
|
+
// whatever `memory_report.ts` was actually set to (its own default, or a
|
|
99
|
+
// prior caller's override), so restoring it below is exact, not a guess.
|
|
100
|
+
const previous = _reportMemoryRoot;
|
|
101
|
+
_reportSetMemoryRoot(memoryRoot);
|
|
102
|
+
try {
|
|
103
|
+
for (const [file, mtype, entry] of _iter_curated_entries()) {
|
|
104
|
+
const status = entry['status'];
|
|
105
|
+
if (typeof status === 'string' && CURATED_STATUS_EXCLUDE.has(status)) continue;
|
|
106
|
+
const id = typeof entry['id'] === 'string' ? entry['id'] : '';
|
|
107
|
+
if (id === '') continue;
|
|
108
|
+
out.push({ id, mtype, source: 'curated', path: file, text: _entryIndexText(entry) });
|
|
109
|
+
}
|
|
110
|
+
} finally {
|
|
111
|
+
_reportSetMemoryRoot(previous);
|
|
112
|
+
}
|
|
113
|
+
return out;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/** Sorted `*.jsonl` file names directly under `intakeRoot` (absent dir → []). */
|
|
117
|
+
function _globJsonl(intakeRoot: string): string[] {
|
|
118
|
+
let names: string[];
|
|
119
|
+
try {
|
|
120
|
+
names = fs.readdirSync(intakeRoot);
|
|
121
|
+
} catch {
|
|
122
|
+
return [];
|
|
123
|
+
}
|
|
124
|
+
return names.filter((n) => n.endsWith('.jsonl')).sort().map((n) => path.join(intakeRoot, n));
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
/**
|
|
128
|
+
* Intake entries, supersede-chains resolved (later `{"type":"supersede",
|
|
129
|
+
* "supersedes":<id>}` lines drop the target). A self-contained twin of
|
|
130
|
+
* `memory_lookup.ts`'s private `_iter_intake_entries` (kept intentionally
|
|
131
|
+
* separate — that generator is per-mtype and not exported; duplicating the
|
|
132
|
+
* ~20-line supersede resolution here is cheaper than coupling two modules'
|
|
133
|
+
* private generators together for a build-time-only scan).
|
|
134
|
+
*/
|
|
135
|
+
function _collectIntake(intakeRoot: string): IndexedEntry[] {
|
|
136
|
+
const out: IndexedEntry[] = [];
|
|
137
|
+
for (const jsonl of _globJsonl(intakeRoot)) {
|
|
138
|
+
const by_id = new Map<string, Record<string, unknown>>();
|
|
139
|
+
const superseded = new Set<string>();
|
|
140
|
+
let content: string;
|
|
141
|
+
try {
|
|
142
|
+
content = fs.readFileSync(jsonl, 'utf-8');
|
|
143
|
+
} catch {
|
|
144
|
+
continue;
|
|
145
|
+
}
|
|
146
|
+
for (let line of content.split(/\n/)) {
|
|
147
|
+
line = line.trim();
|
|
148
|
+
if (!line) continue;
|
|
149
|
+
let obj: unknown;
|
|
150
|
+
try {
|
|
151
|
+
obj = JSON.parse(line);
|
|
152
|
+
} catch {
|
|
153
|
+
continue;
|
|
154
|
+
}
|
|
155
|
+
if (!_isPlainObject(obj)) continue;
|
|
156
|
+
if (obj['type'] === 'supersede') {
|
|
157
|
+
const target = obj['supersedes'];
|
|
158
|
+
if (typeof target === 'string') superseded.add(target);
|
|
159
|
+
continue;
|
|
160
|
+
}
|
|
161
|
+
const eid = obj['id'];
|
|
162
|
+
if (typeof eid === 'string') by_id.set(eid, obj);
|
|
163
|
+
}
|
|
164
|
+
for (const [eid, obj] of by_id.entries()) {
|
|
165
|
+
if (superseded.has(eid)) continue;
|
|
166
|
+
const mtype = typeof obj['entry_type'] === 'string' ? obj['entry_type'] : '';
|
|
167
|
+
out.push({ id: eid, mtype, source: 'intake', path: jsonl, text: _entryIndexText(obj) });
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
return out;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
/** All indexable entries (curated + intake) for one memory tree. */
|
|
174
|
+
export function collectEntries(memoryRoot: string, intakeRoot: string): IndexedEntry[] {
|
|
175
|
+
return [..._collectCurated(memoryRoot), ..._collectIntake(intakeRoot)];
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
/** Newest mtime (ms) across every source file the index is built from. */
|
|
179
|
+
function _sourcesMaxMtimeMs(memoryRoot: string, intakeRoot: string): number {
|
|
180
|
+
let max = 0;
|
|
181
|
+
const bump = (p: string): void => {
|
|
182
|
+
try {
|
|
183
|
+
const st = fs.statSync(p);
|
|
184
|
+
if (st.mtimeMs > max) max = st.mtimeMs;
|
|
185
|
+
} catch {
|
|
186
|
+
/* absent — ignore */
|
|
187
|
+
}
|
|
188
|
+
};
|
|
189
|
+
const walk = (dir: string): void => {
|
|
190
|
+
let entries: fs.Dirent[];
|
|
191
|
+
try {
|
|
192
|
+
entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
193
|
+
} catch {
|
|
194
|
+
return;
|
|
195
|
+
}
|
|
196
|
+
for (const e of entries) {
|
|
197
|
+
const full = path.join(dir, e.name);
|
|
198
|
+
if (e.isDirectory()) walk(full);
|
|
199
|
+
else if (e.isFile() && e.name.endsWith('.yml')) bump(full);
|
|
200
|
+
}
|
|
201
|
+
};
|
|
202
|
+
// Curated: both the flat `<type>.yml` files and the `<type>/*.yml` dirs.
|
|
203
|
+
let memEntries: fs.Dirent[];
|
|
204
|
+
try {
|
|
205
|
+
memEntries = fs.readdirSync(memoryRoot, { withFileTypes: true });
|
|
206
|
+
for (const e of memEntries) {
|
|
207
|
+
const full = path.join(memoryRoot, e.name);
|
|
208
|
+
if (e.isFile() && e.name.endsWith('.yml')) bump(full);
|
|
209
|
+
else if (e.isDirectory()) walk(full);
|
|
210
|
+
}
|
|
211
|
+
} catch {
|
|
212
|
+
/* memory root absent — total stays 0 */
|
|
213
|
+
}
|
|
214
|
+
for (const f of _globJsonl(intakeRoot)) bump(f);
|
|
215
|
+
return max;
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
const META_KEY_SOURCES_MTIME = 'sources_mtime_ms';
|
|
219
|
+
|
|
220
|
+
/**
|
|
221
|
+
* Whether the index at `indexPath` is missing, schema-mismatched, corrupt, or
|
|
222
|
+
* stale relative to its sources. Any read failure (including a truncated /
|
|
223
|
+
* corrupt file — road-to-reachable-code-memory Phase 7) counts as stale;
|
|
224
|
+
* corruption is a non-event, not an error the caller has to handle.
|
|
225
|
+
*/
|
|
226
|
+
export function isStale(indexPath: string, memoryRoot: string, intakeRoot: string): boolean {
|
|
227
|
+
if (!fs.existsSync(indexPath)) return true;
|
|
228
|
+
let sqlite: typeof NodeSqlite;
|
|
229
|
+
try {
|
|
230
|
+
sqlite = loadSqliteSync('memory_fts_index.isStale');
|
|
231
|
+
} catch {
|
|
232
|
+
return true; // no sqlite → caller will skip building anyway
|
|
233
|
+
}
|
|
234
|
+
let conn: DatabaseSync | null = null;
|
|
235
|
+
try {
|
|
236
|
+
conn = new sqlite.DatabaseSync(indexPath, { readOnly: true });
|
|
237
|
+
if (readUserVersion(conn) !== SCHEMA_VERSION) return true;
|
|
238
|
+
const row = conn.prepare('SELECT value FROM _meta WHERE key = ?').get(META_KEY_SOURCES_MTIME);
|
|
239
|
+
const stored = row?.['value'];
|
|
240
|
+
const storedMs = typeof stored === 'string' ? Number(stored) : NaN;
|
|
241
|
+
if (!Number.isFinite(storedMs)) return true;
|
|
242
|
+
return _sourcesMaxMtimeMs(memoryRoot, intakeRoot) > storedMs;
|
|
243
|
+
} catch {
|
|
244
|
+
return true; // corrupt / unreadable → rebuild
|
|
245
|
+
} finally {
|
|
246
|
+
try {
|
|
247
|
+
conn?.close();
|
|
248
|
+
} catch {
|
|
249
|
+
/* best-effort */
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
export interface BuildReport {
|
|
255
|
+
indexPath: string;
|
|
256
|
+
entriesIndexed: number;
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
/**
|
|
260
|
+
* Rebuild the index from scratch (JSON/YAML is canonical — a full rebuild is
|
|
261
|
+
* always correct and cheap enough for the corpus sizes this suite runs at;
|
|
262
|
+
* "rebuilt batch/lazy" per the roadmap, never incremental). Deletes any
|
|
263
|
+
* existing file first so a corrupt/partial index never lingers.
|
|
264
|
+
*/
|
|
265
|
+
export function buildIndex(indexPath: string, memoryRoot: string, intakeRoot: string): BuildReport {
|
|
266
|
+
fs.mkdirSync(path.dirname(indexPath), { recursive: true });
|
|
267
|
+
try {
|
|
268
|
+
fs.rmSync(indexPath, { force: true });
|
|
269
|
+
fs.rmSync(`${indexPath}-wal`, { force: true });
|
|
270
|
+
fs.rmSync(`${indexPath}-shm`, { force: true });
|
|
271
|
+
} catch {
|
|
272
|
+
/* best-effort */
|
|
273
|
+
}
|
|
274
|
+
const { DatabaseSync } = loadSqliteSync('memory_fts_index.buildIndex');
|
|
275
|
+
const conn = new DatabaseSync(indexPath);
|
|
276
|
+
let count = 0;
|
|
277
|
+
try {
|
|
278
|
+
conn.exec('PRAGMA journal_mode=WAL');
|
|
279
|
+
conn.exec(
|
|
280
|
+
"CREATE VIRTUAL TABLE entries USING fts5(id UNINDEXED, mtype UNINDEXED, source UNINDEXED, path UNINDEXED, text)",
|
|
281
|
+
);
|
|
282
|
+
conn.exec('CREATE TABLE _meta (key TEXT PRIMARY KEY, value TEXT NOT NULL)');
|
|
283
|
+
const stmt = conn.prepare(
|
|
284
|
+
'INSERT INTO entries (id, mtype, source, path, text) VALUES (?, ?, ?, ?, ?)',
|
|
285
|
+
);
|
|
286
|
+
for (const e of collectEntries(memoryRoot, intakeRoot)) {
|
|
287
|
+
stmt.run(e.id, e.mtype, e.source, e.path, e.text);
|
|
288
|
+
count += 1;
|
|
289
|
+
}
|
|
290
|
+
const metaStmt = conn.prepare('INSERT INTO _meta (key, value) VALUES (?, ?)');
|
|
291
|
+
metaStmt.run(META_KEY_SOURCES_MTIME, String(_sourcesMaxMtimeMs(memoryRoot, intakeRoot)));
|
|
292
|
+
stampUserVersion(conn, SCHEMA_VERSION);
|
|
293
|
+
conn.exec('PRAGMA wal_checkpoint(TRUNCATE)');
|
|
294
|
+
conn.exec('PRAGMA journal_mode=DELETE');
|
|
295
|
+
} finally {
|
|
296
|
+
conn.close();
|
|
297
|
+
}
|
|
298
|
+
return { indexPath, entriesIndexed: count };
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
/**
|
|
302
|
+
* Ensure a fresh index exists at `indexPath`, building/rebuilding it when
|
|
303
|
+
* absent or stale. Returns `false` (never throws) when `node:sqlite` or FTS5
|
|
304
|
+
* is unavailable, or the build itself fails — callers fall back to `_score`.
|
|
305
|
+
*/
|
|
306
|
+
export function ensureIndex(indexPath: string, memoryRoot: string, intakeRoot: string): boolean {
|
|
307
|
+
if (!probeFts5Sync()) return false;
|
|
308
|
+
try {
|
|
309
|
+
if (isStale(indexPath, memoryRoot, intakeRoot)) {
|
|
310
|
+
buildIndex(indexPath, memoryRoot, intakeRoot);
|
|
311
|
+
}
|
|
312
|
+
return true;
|
|
313
|
+
} catch {
|
|
314
|
+
return false;
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
/**
|
|
319
|
+
* Turn a raw query key into an FTS5 MATCH clause of separate, implicitly
|
|
320
|
+
* AND'd barewords.
|
|
321
|
+
*
|
|
322
|
+
* FTS5's QUERY GRAMMAR (not the content tokenizer) treats an unbroken
|
|
323
|
+
* hyphen/underscore run as ONE bareword — `adr-number-collision` tokenizes
|
|
324
|
+
* to 6 tokens, but a single ungapped bareword is matched as an EXACT
|
|
325
|
+
* ADJACENT PHRASE of those tokens, not a free AND. That reintroduces a
|
|
326
|
+
* separator-shaped recall gap one layer up (a hyphenated query key with the
|
|
327
|
+
* matching words in non-adjacent or reordered position in the entry text
|
|
328
|
+
* would miss). Replacing every separator with a literal SPACE here forces
|
|
329
|
+
* the grammar to see distinct barewords — implicit AND, any position — which
|
|
330
|
+
* is the recall behaviour this index exists to provide.
|
|
331
|
+
*/
|
|
332
|
+
function _sanitizeFtsClause(key: string): string {
|
|
333
|
+
// Keep letters/digits; every other character (hyphen, underscore, quote,
|
|
334
|
+
// paren, colon, asterisk, ...) becomes a bareword boundary.
|
|
335
|
+
return key.replace(/[^\p{L}\p{N}]+/gu, ' ').trim();
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
/**
|
|
339
|
+
* Query the FTS5 index for `keys` (OR'd — any key matching is a hit),
|
|
340
|
+
* optionally restricted to `types`. Never throws — a MATCH syntax error or a
|
|
341
|
+
* read failure resolves to `[]`, the caller's cue to stay on `_score`.
|
|
342
|
+
*/
|
|
343
|
+
export function queryIndex(
|
|
344
|
+
indexPath: string,
|
|
345
|
+
keys: readonly string[],
|
|
346
|
+
types: readonly string[],
|
|
347
|
+
): FtsHit[] {
|
|
348
|
+
const clauses = keys.map(_sanitizeFtsClause).filter((c) => c.length > 0);
|
|
349
|
+
if (clauses.length === 0) return [];
|
|
350
|
+
let sqlite: typeof NodeSqlite;
|
|
351
|
+
try {
|
|
352
|
+
sqlite = loadSqliteSync('memory_fts_index.queryIndex');
|
|
353
|
+
} catch {
|
|
354
|
+
return [];
|
|
355
|
+
}
|
|
356
|
+
let conn: DatabaseSync | null = null;
|
|
357
|
+
try {
|
|
358
|
+
conn = new sqlite.DatabaseSync(indexPath, { readOnly: true });
|
|
359
|
+
const matchQuery = clauses.map((c) => `(${c})`).join(' OR ');
|
|
360
|
+
const typeFilter = types.length > 0 ? `AND mtype IN (${types.map(() => '?').join(',')})` : '';
|
|
361
|
+
const rows = conn
|
|
362
|
+
.prepare(
|
|
363
|
+
`SELECT id, mtype, source, path, bm25(entries) AS score
|
|
364
|
+
FROM entries
|
|
365
|
+
WHERE entries MATCH ? ${typeFilter}
|
|
366
|
+
ORDER BY score ASC`,
|
|
367
|
+
)
|
|
368
|
+
.all(matchQuery, ...types);
|
|
369
|
+
return rows.map((r) => {
|
|
370
|
+
// bm25(): more negative is a better match. Flip to a positive
|
|
371
|
+
// "relevance" so the caller's ranking math reads naturally.
|
|
372
|
+
const bm25 = typeof r['score'] === 'number' ? r['score'] : Number(r['score'] ?? 0);
|
|
373
|
+
return {
|
|
374
|
+
id: String(r['id']),
|
|
375
|
+
mtype: String(r['mtype']),
|
|
376
|
+
source: (r['source'] as IndexedSource) ?? 'curated',
|
|
377
|
+
path: String(r['path']),
|
|
378
|
+
relevance: Math.max(0, -bm25),
|
|
379
|
+
};
|
|
380
|
+
});
|
|
381
|
+
} catch {
|
|
382
|
+
return [];
|
|
383
|
+
} finally {
|
|
384
|
+
try {
|
|
385
|
+
conn?.close();
|
|
386
|
+
} catch {
|
|
387
|
+
/* best-effort */
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
}
|