@event4u/agent-config 3.3.0 → 4.1.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/.agent-src/README.md +2 -2
- package/.agent-src/commands/agent-handoff.md +31 -2
- package/.agent-src/commands/agent-status.md +5 -5
- package/.agent-src/commands/agents/audit.md +8 -8
- package/.agent-src/commands/agents/init.md +25 -1
- package/.agent-src/commands/agents/optimize.md +3 -3
- package/.agent-src/commands/agents/user.md +1 -1
- package/.agent-src/commands/agents.md +1 -1
- package/.agent-src/commands/analyze-reference-repo.md +1 -1
- package/.agent-src/commands/check-current-md.md +8 -8
- package/.agent-src/commands/{compress.md → condense.md} +55 -55
- package/.agent-src/commands/context/create.md +7 -4
- package/.agent-src/commands/context/refactor.md +3 -1
- package/.agent-src/commands/feature/dev.md +1 -1
- package/.agent-src/commands/feature/explore.md +1 -1
- package/.agent-src/commands/feature/plan.md +10 -8
- package/.agent-src/commands/feature/refactor.md +3 -1
- package/.agent-src/commands/feature/roadmap.md +7 -4
- package/.agent-src/commands/fix/portability.md +3 -3
- package/.agent-src/commands/fix/refs.md +4 -4
- package/.agent-src/commands/ghostwriter.md +2 -2
- package/.agent-src/commands/memory/learn-low-impact.md +3 -3
- package/.agent-src/commands/module/explore.md +34 -8
- package/.agent-src/commands/optimize/agents-dir.md +9 -7
- package/.agent-src/commands/optimize/augmentignore.md +2 -2
- package/.agent-src/commands/optimize/skills.md +9 -9
- package/.agent-src/commands/post-as.md +1 -1
- package/.agent-src/commands/project-analyze.md +2 -2
- package/.agent-src/commands/project-health.md +3 -2
- package/.agent-src/commands/research/deep.md +1 -1
- package/.agent-src/commands/research/report.md +1 -1
- package/.agent-src/commands/research.md +1 -1
- package/.agent-src/commands/roadmap/ai-council.md +1 -1
- package/.agent-src/commands/roadmap/create.md +9 -4
- package/.agent-src/commands/rule-compliance-audit.md +1 -1
- package/.agent-src/commands/upstream-contribute.md +14 -14
- package/.agent-src/commands/video/from-script.md +1 -1
- package/.agent-src/commands/video/scene.md +1 -1
- package/.agent-src/commands/video/stitch.md +1 -1
- package/.agent-src/commands/video/storyboard.md +1 -1
- package/.agent-src/commands/video.md +1 -1
- package/.agent-src/contexts/augment-infrastructure.md +1 -1
- package/.agent-src/contexts/authority/commit-mechanics.md +15 -0
- package/.agent-src/contexts/authority/kernel-rule-edits.md +3 -3
- package/.agent-src/contexts/authority/scope-mechanics.md +1 -1
- package/.agent-src/contexts/communication/rules-auto/augment-source-of-truth-mechanics.md +28 -28
- package/.agent-src/contexts/communication/rules-auto/skill-quality-mechanics.md +4 -4
- package/.agent-src/contexts/communication/rules-auto/think-before-action-mechanics.md +2 -2
- package/.agent-src/contexts/contracts/artifact-engagement-flow.md +6 -6
- package/.agent-src/contexts/contracts/command-suggestion-flow.md +3 -3
- package/.agent-src/contexts/contracts/emergency-triage-block.md +4 -4
- package/.agent-src/contexts/contracts/frugality-charter.md +3 -3
- package/.agent-src/contexts/documentation-hierarchy.md +14 -7
- package/.agent-src/contexts/execution/autonomy-examples.md +1 -1
- package/.agent-src/contexts/execution/cheap-question-mechanics.md +39 -2
- package/.agent-src/contexts/execution/roadmap-process-loop.md +28 -5
- package/.agent-src/contexts/override-system.md +5 -5
- package/.agent-src/ghostwriter/fictional-fixture-v1.md +1 -1
- package/.agent-src/personas/advisors/first-principles.md +1 -1
- package/.agent-src/personas/hollywood-director.md +1 -1
- package/.agent-src/rules/architecture.md +5 -1
- package/.agent-src/rules/augment-edit-discipline.md +5 -5
- package/.agent-src/rules/augment-source-of-truth.md +15 -15
- package/.agent-src/rules/commit-conventions.md +1 -1
- package/.agent-src/rules/commit-policy.md +10 -0
- package/.agent-src/rules/domain-adoption-policy.md +3 -3
- package/.agent-src/rules/fast-path-marker-visibility.md +3 -3
- package/.agent-src/rules/finance-safety-floor.md +1 -1
- package/.agent-src/rules/framework-neutrality-in-generic-skills.md +8 -8
- package/.agent-src/rules/git-history-discipline.md +1 -1
- package/.agent-src/rules/improve-before-implement.md +2 -2
- package/.agent-src/rules/language-and-tone.md +2 -2
- package/.agent-src/rules/media-governance-routing.md +5 -5
- package/.agent-src/rules/no-attribution-footers.md +1 -0
- package/.agent-src/rules/no-cheap-questions.md +3 -0
- package/.agent-src/rules/no-decorative-emojis-in-git-surfaces.md +111 -0
- package/.agent-src/rules/no-pr-progress-comments.md +118 -0
- package/.agent-src/rules/no-roadmap-references.md +3 -3
- package/.agent-src/rules/non-destructive-by-default.md +1 -1
- package/.agent-src/rules/persona-governance.md +3 -3
- package/.agent-src/rules/preservation-guard.md +15 -15
- package/.agent-src/rules/roadmap-ci-steps-policy.md +7 -3
- package/.agent-src/rules/rule-type-governance.md +1 -1
- package/.agent-src/rules/skill-quality.md +1 -1
- package/.agent-src/rules/{caveman-speak.md → telegraph-speak.md} +15 -15
- package/.agent-src/rules/token-optimizer-maintenance.md +6 -6
- package/.agent-src/skills/agent-docs-writing/SKILL.md +17 -11
- package/.agent-src/skills/agents-md-thin-root/SKILL.md +9 -9
- package/.agent-src/skills/check-refs/SKILL.md +2 -2
- package/.agent-src/skills/code-refactoring/SKILL.md +2 -2
- package/.agent-src/skills/command-writing/SKILL.md +19 -19
- package/.agent-src/skills/comp-banding/SKILL.md +1 -1
- package/.agent-src/skills/condense-memory/SKILL.md +131 -0
- package/.agent-src/skills/context-authoring/SKILL.md +2 -2
- package/.agent-src/skills/context-document/SKILL.md +5 -3
- package/.agent-src/skills/copilot-agents-optimization/SKILL.md +3 -3
- package/.agent-src/skills/description-assist/SKILL.md +2 -2
- package/.agent-src/skills/git-workflow/SKILL.md +1 -1
- package/.agent-src/skills/guideline-writing/SKILL.md +5 -5
- package/.agent-src/skills/learning-to-rule-or-skill/SKILL.md +4 -4
- package/.agent-src/skills/lint-skills/SKILL.md +3 -3
- package/.agent-src/skills/md-language-check/SKILL.md +2 -2
- package/.agent-src/skills/module-detect-on-the-fly/SKILL.md +138 -0
- package/.agent-src/skills/module-management/SKILL.md +166 -94
- package/.agent-src/skills/override-management/SKILL.md +1 -1
- package/.agent-src/skills/persona-writing/SKILL.md +5 -5
- package/.agent-src/skills/positioning-strategy/SKILL.md +1 -1
- package/.agent-src/skills/project-docs/SKILL.md +6 -4
- package/.agent-src/skills/readme-reviewer/SKILL.md +2 -2
- package/.agent-src/skills/roadmap-management/SKILL.md +13 -1
- package/.agent-src/skills/roadmap-writing/SKILL.md +4 -2
- package/.agent-src/skills/rule-refactor/SKILL.md +5 -5
- package/.agent-src/skills/rule-writing/SKILL.md +18 -18
- package/.agent-src/skills/script-writing/SKILL.md +1 -1
- package/.agent-src/skills/skill-improvement-pipeline/SKILL.md +6 -6
- package/.agent-src/skills/skill-management/SKILL.md +21 -21
- package/.agent-src/skills/skill-reviewer/SKILL.md +2 -2
- package/.agent-src/skills/skill-writing/SKILL.md +8 -8
- package/.agent-src/skills/skill-writing/evals/triggers.json +1 -1
- package/.agent-src/skills/token-optimizer/SKILL.md +4 -4
- package/.agent-src/skills/unit-economics-modeling/SKILL.md +1 -1
- package/.agent-src/skills/upstream-contribute/SKILL.md +17 -17
- package/.agent-src/templates/AGENTS.md +1 -0
- package/.agent-src/templates/agent-settings.md +24 -13
- package/.agent-src/templates/agents/agent-project-settings.example.yml +61 -2
- package/.agent-src/templates/command.md +5 -5
- package/.agent-src/templates/contexts.md +1 -1
- package/.agent-src/templates/copilot-instructions.md +8 -8
- package/.agent-src/templates/features.md +1 -1
- package/.agent-src/templates/hooks/pre-commit-frontmatter +2 -2
- package/.agent-src/templates/hooks/pre-commit-roadmap-progress +3 -3
- package/.agent-src/templates/persona.md +2 -2
- package/.agent-src/templates/roadmaps.md +1 -1
- package/.agent-src/templates/rule.md +13 -13
- package/.agent-src/templates/scripts/memory_lookup.py +1 -1
- package/.agent-src/templates/scripts/memory_status.py +2 -2
- package/.agent-src/templates/scripts/work_engine/_lib/agent_settings.py +195 -1
- package/.agent-src/templates/scripts/work_engine/orchestration.py +1 -1
- package/.agent-src/templates/skill-archive-note.md +5 -5
- package/.agent-src/templates/skill.md +1 -1
- package/.claude-plugin/marketplace.json +4 -4
- package/AGENTS.md +16 -17
- package/CHANGELOG.md +181 -3
- package/CONTRIBUTING.md +31 -12
- package/README.md +18 -10
- package/config/agent-settings.template.yml +22 -2
- package/config/discovery/unassigned-artefacts.yml +24 -24
- package/config/profiles/full.ini +1 -1
- package/dist/cli/agent-config.js +52 -3
- package/dist/cli/agent-config.js.map +1 -1
- package/dist/cli/commands/uiServe.js +9 -0
- package/dist/cli/commands/uiServe.js.map +1 -1
- package/dist/cli/registry.js +2 -1
- package/dist/cli/registry.js.map +1 -1
- package/dist/discovery/deprecation-report.md +1 -1
- package/dist/discovery/discovery-manifest.json +649 -606
- package/dist/discovery/discovery-manifest.json.sha256 +1 -1
- package/dist/discovery/discovery-manifest.summary.md +4 -4
- package/dist/discovery/orphan-report.md +1 -1
- package/dist/discovery/packs.json +439 -437
- package/dist/discovery/trust-report.md +5 -5
- package/dist/discovery/workspaces.json +450 -448
- package/dist/install/apply.js +238 -0
- package/dist/install/apply.js.map +1 -0
- package/dist/install/atomic.js +92 -0
- package/dist/install/atomic.js.map +1 -0
- package/dist/install/bridges/augment.js +20 -0
- package/dist/install/bridges/augment.js.map +1 -0
- package/dist/install/bridges/claude.js +44 -0
- package/dist/install/bridges/claude.js.map +1 -0
- package/dist/install/bridges/cline.js +69 -0
- package/dist/install/bridges/cline.js.map +1 -0
- package/dist/install/bridges/copilot.js +28 -0
- package/dist/install/bridges/copilot.js.map +1 -0
- package/dist/install/bridges/cursor.js +34 -0
- package/dist/install/bridges/cursor.js.map +1 -0
- package/dist/install/bridges/gemini.js +39 -0
- package/dist/install/bridges/gemini.js.map +1 -0
- package/dist/install/bridges/index.js +88 -0
- package/dist/install/bridges/index.js.map +1 -0
- package/dist/install/bridges/marker-content.js +153 -0
- package/dist/install/bridges/marker-content.js.map +1 -0
- package/dist/install/bridges/markers.js +42 -0
- package/dist/install/bridges/markers.js.map +1 -0
- package/dist/install/bridges/types.js +31 -0
- package/dist/install/bridges/types.js.map +1 -0
- package/dist/install/bridges/vscode.js +26 -0
- package/dist/install/bridges/vscode.js.map +1 -0
- package/dist/install/bridges/windsurf.js +35 -0
- package/dist/install/bridges/windsurf.js.map +1 -0
- package/dist/install/conflict.js +196 -0
- package/dist/install/conflict.js.map +1 -0
- package/dist/install/detect.js +218 -0
- package/dist/install/detect.js.map +1 -0
- package/dist/install/paths.js +82 -0
- package/dist/install/paths.js.map +1 -0
- package/dist/install/plan.js +157 -0
- package/dist/install/plan.js.map +1 -0
- package/dist/install/txlog.js +140 -0
- package/dist/install/txlog.js.map +1 -0
- package/dist/install/types.js +19 -0
- package/dist/install/types.js.map +1 -0
- package/dist/install/wizard-plan.js +184 -0
- package/dist/install/wizard-plan.js.map +1 -0
- package/dist/mcp/registry-manifest.json +4 -4
- package/dist/router.json +67 -19
- package/dist/server/app.js +6 -0
- package/dist/server/app.js.map +1 -1
- package/dist/server/routes/install.js +547 -0
- package/dist/server/routes/install.js.map +1 -0
- package/dist/server/routes/wizard.js +301 -6
- package/dist/server/routes/wizard.js.map +1 -1
- package/dist/server/routes/workspace.js +396 -0
- package/dist/server/routes/workspace.js.map +1 -0
- package/dist/server/schemas/settings.js +4 -3
- package/dist/server/schemas/settings.js.map +1 -1
- package/dist/ui/assets/index-BXZILUxe.css +1 -0
- package/dist/ui/assets/index-DLEuEW1V.js +35 -0
- package/dist/ui/assets/index-DLEuEW1V.js.map +1 -0
- package/dist/ui/index.html +2 -2
- package/docs/MIGRATION.md +1 -1
- package/docs/adrs/cost/0001-hard-stop-hook.md +1 -1
- package/docs/adrs/router/0001-three-tier-routing.md +4 -4
- package/docs/adrs/schema/0001-json-schema-frontmatter.md +1 -1
- package/docs/adrs/smoke/0001-per-tier-smoke-scripts.md +4 -4
- package/docs/adrs/{caveman → telegraph}/0001-default-off-until-bench.md +9 -9
- package/docs/adrs/telegraph/README.md +9 -0
- package/docs/architecture/augment-projection.md +4 -4
- package/docs/architecture/claude-bundle.md +1 -1
- package/docs/architecture/current-onboard-baseline.md +3 -3
- package/docs/architecture/multi-tool-projection.md +10 -10
- package/docs/architecture/source-projection.md +27 -27
- package/docs/architecture.md +19 -15
- package/docs/archive/CHANGELOG-pre-2.11.0.md +2 -2
- package/docs/archive/CHANGELOG-pre-2.15.0.md +3 -3
- package/docs/archive/CHANGELOG-pre-2.16.0.md +1 -1
- package/docs/archive/CHANGELOG-pre-2.2.0.md +70 -70
- package/docs/archive/CHANGELOG-pre-2.20.0.md +2 -2
- package/docs/archive/CHANGELOG-pre-2.25.0.md +15 -15
- package/docs/archive/CHANGELOG-pre-3.0.0.md +4 -4
- package/docs/archive/CHANGELOG-pre-3.1.0.md +2 -2
- package/docs/archive/CHANGELOG-pre-3.2.0.md +3 -3
- package/docs/benchmark.md +65 -0
- package/docs/benchmarks.md +16 -16
- package/docs/catalog.md +17 -15
- package/docs/contracts/CHANGELOG-conventions.md +1 -1
- package/docs/contracts/STABILITY.md +2 -2
- package/docs/contracts/adoption-signal-floor.md +110 -0
- package/docs/contracts/adr-chat-history-split.md +4 -4
- package/docs/contracts/adr-command-suggestion.md +4 -4
- package/docs/contracts/adr-gtm-context-spine.md +1 -1
- package/docs/contracts/adr-implement-ticket-runtime.md +4 -4
- package/docs/contracts/adr-install-user-type-axis.md +1 -1
- package/docs/contracts/adr-layout.md +2 -2
- package/docs/contracts/adr-product-ui-track.md +10 -10
- package/docs/contracts/adr-user-types-axis.md +3 -3
- package/docs/contracts/adr-wing4-context-spine.md +1 -1
- package/docs/contracts/agent-memory-contract.md +3 -3
- package/docs/contracts/agents-md-tech-stack.md +2 -2
- package/docs/contracts/ai-council-config.md +2 -2
- package/docs/contracts/at-rest-encryption.md +4 -0
- package/docs/contracts/audit-log-v1.md +1 -1
- package/docs/contracts/benchmark-ab-contract.md +101 -0
- package/docs/contracts/benchmark-corpus-spec.md +1 -1
- package/docs/contracts/branch-protection-policy.md +98 -0
- package/docs/contracts/ci-cost-budget.md +106 -0
- package/docs/contracts/ci-green-floor.md +141 -0
- package/docs/contracts/command-clusters.md +6 -6
- package/docs/contracts/command-surface-tiers.md +2 -2
- package/docs/contracts/command-taxonomy.md +2 -2
- package/docs/contracts/{compression-default-kill-criterion.md → condensation-default-kill-criterion.md} +29 -29
- package/docs/contracts/config-presets.md +1 -1
- package/docs/contracts/context-paths.md +3 -3
- package/docs/contracts/context-spine.md +1 -1
- package/docs/contracts/cost-summary-schema.md +12 -12
- package/docs/contracts/cross-wing-handoff.md +4 -4
- package/docs/contracts/daily-workspace.md +4 -0
- package/docs/contracts/decision-trace-v1.md +2 -2
- package/docs/contracts/discovery-manifest.md +4 -4
- package/docs/contracts/explain-modes.md +4 -0
- package/docs/contracts/file-ownership-matrix.json +3493 -3318
- package/docs/contracts/file-ownership-matrix.md +3 -3
- package/docs/contracts/frontmatter-contract.md +4 -4
- package/docs/contracts/ghostwriter-schema.md +3 -3
- package/docs/contracts/gui-wizard.md +1 -1
- package/docs/contracts/harness-expectations.md +123 -0
- package/docs/contracts/host-agent-protocol.md +4 -0
- package/docs/contracts/implement-ticket-flow.md +9 -9
- package/docs/contracts/install-scopes.md +77 -0
- package/docs/contracts/iron-law-overrides.txt +1 -1
- package/docs/contracts/kernel-membership.md +26 -26
- package/docs/contracts/linear-ai-rules-inclusion.md +1 -1
- package/docs/contracts/linter-structural-model.md +2 -2
- package/docs/contracts/load-context-budget-model.md +4 -4
- package/docs/contracts/load-context-schema.md +13 -13
- package/docs/contracts/local-analytics.md +4 -0
- package/docs/contracts/local-knowledge-ingestion.md +1 -1
- package/docs/contracts/mcp-cloud-scope.md +2 -2
- package/docs/contracts/mcp-phase-1-scope.md +3 -3
- package/docs/contracts/measurement-baseline.md +5 -5
- package/docs/contracts/mental-models.md +30 -30
- package/docs/contracts/multi-tool-projection-fidelity.md +4 -4
- package/docs/contracts/namespace.md +4 -4
- package/docs/contracts/orchestration-dsl-v1.md +7 -7
- package/docs/contracts/package-self-orientation.md +12 -12
- package/docs/contracts/persona-schema.md +6 -6
- package/docs/contracts/pilot/language-and-tone.md +1 -1
- package/docs/contracts/plain-language-surface.md +117 -0
- package/docs/contracts/profile-system.md +3 -3
- package/docs/contracts/release-pr-gating.md +103 -0
- package/docs/contracts/role-experience.md +3 -3
- package/docs/contracts/rule-classification.md +13 -13
- package/docs/contracts/rule-interactions.md +4 -4
- package/docs/contracts/rule-interactions.yml +30 -30
- package/docs/contracts/rule-priority-hierarchy.md +13 -13
- package/docs/contracts/rule-router.md +2 -2
- package/docs/contracts/safety-model.md +1 -1
- package/docs/contracts/skill-distribution-channels.md +61 -0
- package/docs/contracts/skill-domains.md +2 -2
- package/docs/contracts/smoke-contracts.md +5 -5
- package/docs/contracts/telegraph-telemetry.md +83 -0
- package/docs/contracts/trust-and-safety.md +5 -5
- package/docs/contracts/ui-stack-extension.md +7 -7
- package/docs/contracts/ui-track-flow.md +9 -9
- package/docs/contracts/user-type-schema.md +4 -4
- package/docs/contracts/workflow-packs.md +4 -4
- package/docs/contracts/workspace-documents.md +4 -0
- package/docs/customization.md +28 -8
- package/docs/decisions/ADR-001-kernel-swap-deferred.md +6 -6
- package/docs/decisions/ADR-002-kernel-bucket-overrides.md +11 -11
- package/docs/decisions/ADR-003-flat-cluster-subs-and-colon-syntax.md +2 -2
- package/docs/decisions/ADR-004-rule-governance-pruning.md +4 -4
- package/docs/decisions/ADR-005-subagent-worktrees.md +7 -7
- package/docs/decisions/ADR-011-domain-pack-readiness.md +6 -6
- package/docs/decisions/ADR-013-discovery-frontmatter-contract.md +3 -3
- package/docs/decisions/ADR-015-discovery-manifest-contract.md +3 -3
- package/docs/decisions/ADR-017-monorepo-physical-layout.md +10 -10
- package/docs/decisions/ADR-018-trust-and-safety-layer.md +6 -6
- package/docs/decisions/ADR-019-router-json-dist-location.md +2 -2
- package/docs/decisions/ADR-020-global-only-consumer-scope.md +2 -2
- package/docs/decisions/ADR-021-deployment-shape.md +1 -1
- package/docs/decisions/ADR-022-daily-workspace-decomposition.md +1 -1
- package/docs/decisions/ADR-027-changelog-machine-vs-manual.md +2 -2
- package/docs/decisions/ADR-028-root-layout.md +7 -7
- package/docs/decisions/ADR-029-multi-workspace-deferred.md +2 -2
- package/docs/decisions/ADR-rule-kernel-and-router.md +5 -5
- package/docs/deploy/team-deployment-posture.md +20 -0
- package/docs/development.md +17 -17
- package/docs/distribution/registries.md +32 -0
- package/docs/distribution/registry-submissions.md +85 -0
- package/docs/distribution/telemetry-schema.md +1 -1
- package/docs/getting-started-by-role.md +45 -3
- package/docs/getting-started.md +2 -2
- package/docs/guidelines/agent-infra/5w2h-analysis.md +3 -3
- package/docs/guidelines/agent-infra/ask-when-uncertain-demos.md +1 -1
- package/docs/guidelines/agent-infra/asking-and-brevity-examples.md +3 -3
- package/docs/guidelines/agent-infra/carve-out-predicates.md +3 -3
- package/docs/guidelines/agent-infra/critical-thinking.md +4 -4
- package/docs/guidelines/agent-infra/direct-answers-demos.md +1 -1
- package/docs/guidelines/agent-infra/first-principles.md +2 -2
- package/docs/guidelines/agent-infra/inversion-thinking.md +5 -5
- package/docs/guidelines/agent-infra/layered-settings.md +56 -2
- package/docs/guidelines/agent-infra/mental-models.md +3 -3
- package/docs/guidelines/agent-infra/roadmap-progress-mechanics.md +2 -2
- package/docs/guidelines/agent-infra/rule-type-governance.md +1 -1
- package/docs/guidelines/agent-infra/scqa-framework.md +5 -5
- package/docs/guidelines/agent-infra/self-improvement-pipeline.md +2 -2
- package/docs/guidelines/agent-infra/six-hats.md +3 -3
- package/docs/guidelines/agent-infra/skill-quality-checklist.md +5 -5
- package/docs/guidelines/agent-infra/systems-thinking.md +1 -1
- package/docs/guidelines/agent-infra/verify-before-complete-demos.md +1 -1
- package/docs/guidelines/augment-portability-patterns.md +4 -4
- package/docs/guidelines/cross-role-handoff.md +2 -2
- package/docs/guidelines/php/php-coding-patterns.md +1 -1
- package/docs/guidelines/prompt-templates.md +6 -6
- package/docs/maintainers/dev-mode.md +1 -1
- package/docs/mcp.md +1 -1
- package/docs/parity/bench.json +3 -3
- package/docs/parity/ruflo.md +2 -2
- package/docs/profiles.md +11 -11
- package/docs/quality.md +11 -11
- package/docs/safety.md +3 -3
- package/docs/setup/mcp-client-config.md +1 -1
- package/docs/setup/mcp-r2-bootstrap.md +1 -1
- package/docs/setup/mcp-server-docker.md +3 -3
- package/docs/setup/per-ide/windsurf.md +1 -1
- package/docs/skills-catalog.md +8 -7
- package/docs/troubleshooting.md +1 -1
- package/docs/walkthroughs/daily-workspace-a11y.md +87 -0
- package/llms.txt +7 -6
- package/package.json +1 -1
- package/scripts/__pycache__/validate_frontmatter.cpython-312.pyc +0 -0
- package/scripts/_archive/README.md +2 -2
- package/scripts/_archive/_backfill_skill_domains.py +3 -3
- package/scripts/_archive/_bootstrap_tier_frontmatter.py +3 -3
- package/scripts/_archive/_p43_bodies.py +10 -10
- package/scripts/_archive/{_p43_compress.py → _p43_condense.py} +5 -5
- package/scripts/_archive/_p4_migrate.py +7 -7
- package/scripts/_archive/_phase2_shim_helper.py +1 -1
- package/scripts/_archive/_pilot_council_question.py +5 -5
- package/scripts/_cli/explain_last/inputs.py +1 -1
- package/scripts/_lib/__pycache__/__init__.cpython-312.pyc +0 -0
- package/scripts/_lib/__pycache__/agent_src.cpython-312.pyc +0 -0
- package/scripts/_lib/agent_settings.py +195 -1
- package/scripts/_lib/agent_src.py +19 -19
- package/scripts/_lib/bench_ab_cache.py +162 -0
- package/scripts/_lib/bench_ab_scoring.py +209 -0
- package/scripts/_lib/{bench_caveman.py → bench_telegraph.py} +21 -21
- package/scripts/_lib/{bench_caveman_report.py → bench_telegraph_report.py} +21 -21
- package/scripts/_lib/claude_desktop_bundler.py +5 -5
- package/scripts/_lib/module_detection.py +223 -0
- package/scripts/_lib/scope_guard.sh +162 -0
- package/scripts/_phase4_bucket.py +3 -3
- package/scripts/_pilot_measure.py +4 -4
- package/scripts/_tmp_scan_framework_leakage.py +1 -1
- package/scripts/adoption_report.py +195 -0
- package/scripts/adoption_snapshot.py +219 -0
- package/scripts/adoption_status.py +166 -0
- package/scripts/ai-video/lib/parse-blueprint.sh +1 -1
- package/scripts/ai_council/advisors.py +5 -5
- package/scripts/ai_council/compile_corpus.py +1 -1
- package/scripts/ai_council/one_off_archive/2026-05/_one_off_budget_v2_audit.py +3 -3
- package/scripts/ai_council/one_off_archive/2026-05/_one_off_context_layer_v1_review.py +2 -2
- package/scripts/ai_council/one_off_archive/2026-05/_one_off_inject_quiet_flag.py +1 -1
- package/scripts/ai_council/one_off_archive/2026-05/_one_off_measure_v2.sh +1 -1
- package/scripts/ai_council/one_off_archive/2026-05/_one_off_measure_verbosity.sh +1 -1
- package/scripts/ai_council/one_off_archive/2026-05/_one_off_nondestructive_inline_audit.py +3 -3
- package/scripts/ai_council/one_off_archive/2026-05/_one_off_per_task.sh +1 -1
- package/scripts/ai_council/one_off_archive/2026-05/_one_off_phase6_trigger_jaccard.py +1 -1
- package/scripts/ai_council/one_off_archive/2026-05/_one_off_phase_2a_budget_rebalance.py +6 -6
- package/scripts/ai_council/one_off_archive/2026-05/_one_off_rebalancing_audit.py +1 -1
- package/scripts/ai_council/one_off_archive/2026-05/_one_off_tier_retrofit.py +6 -6
- package/scripts/annotate_discovery.py +13 -13
- package/scripts/apply_modules_config.py +290 -0
- package/scripts/audit_adr_coverage.py +2 -2
- package/scripts/audit_auto_rules.py +2 -2
- package/scripts/audit_cloud_compatibility.py +3 -3
- package/scripts/audit_command_surface.py +9 -9
- package/scripts/audit_likelihood.py +2 -2
- package/scripts/audit_user_type_axis.py +2 -2
- package/scripts/bench_ab_cache_dispatch.py +68 -0
- package/scripts/bench_ab_clone.py +170 -0
- package/scripts/bench_ab_diff.py +227 -0
- package/scripts/bench_ab_integrity.py +143 -0
- package/scripts/bench_ab_run.py +235 -0
- package/scripts/bench_ab_task_runner.py +369 -0
- package/scripts/bench_ab_tracka_run.py +202 -0
- package/scripts/{bench_compress_memory.py → bench_condense_memory.py} +16 -16
- package/scripts/bench_run.py +33 -33
- package/scripts/bench_runner.py +2 -2
- package/scripts/bootstrap.sh +99 -0
- package/scripts/build_cloud_bundle.py +6 -6
- package/scripts/build_discovery_manifest.py +7 -7
- package/scripts/build_linear_digest.py +3 -3
- package/scripts/build_rule_trigger_matrix.py +8 -8
- package/scripts/chat_history.py +5 -5
- package/scripts/check_always_budget.py +11 -5
- package/scripts/check_augment_description_cap.py +3 -3
- package/scripts/check_cluster_patterns.py +2 -2
- package/scripts/check_command_count_messaging.py +3 -3
- package/scripts/{check_compression.py → check_condensation.py} +34 -34
- package/scripts/{check_compressed_paths.py → check_condensed_paths.py} +8 -8
- package/scripts/check_context_paths.py +7 -7
- package/scripts/check_council_layout.py +2 -2
- package/scripts/check_council_references.py +9 -9
- package/scripts/check_iron_law_prominence.py +2 -2
- package/scripts/check_kernel_rule_bundle.py +2 -2
- package/scripts/check_module_management_neutral.py +149 -0
- package/scripts/check_no_roadmap_refs.py +9 -9
- package/scripts/check_portability.py +3 -3
- package/scripts/check_public_catalog_links.py +4 -4
- package/scripts/check_references.py +7 -6
- package/scripts/check_release_pr_shape.py +112 -0
- package/scripts/check_reply_consistency.py +3 -3
- package/scripts/check_safety_floor_untouched.py +1 -1
- package/scripts/check_template_pin_drift.py +5 -5
- package/scripts/check_token_optimizer_freshness.py +3 -3
- package/scripts/ci_status.py +301 -0
- package/scripts/ci_time_ratio.py +1 -1
- package/scripts/cleanup_other_scope.sh +146 -0
- package/scripts/compile_router.py +10 -10
- package/scripts/{compress.py → condense.py} +64 -64
- package/scripts/condense.sh +18 -0
- package/scripts/{compress_memory.py → condense_memory.py} +33 -33
- package/scripts/config/presets.py +2 -2
- package/scripts/config/profiles.py +1 -1
- package/scripts/cost_by_conversation.py +3 -3
- package/scripts/cost_summary.py +7 -7
- package/scripts/count_token_optimizer_usage.sh +1 -1
- package/scripts/gen_discovery_baseline.py +5 -5
- package/scripts/generate_index.py +6 -6
- package/scripts/generate_ownership_matrix.py +10 -10
- package/scripts/generate_pack_manifests.py +1 -1
- package/scripts/ghostwriter_fixture_allowlist.txt +1 -1
- package/scripts/install +3 -3
- package/scripts/install-hooks.sh +6 -6
- package/scripts/install.py +76 -11
- package/scripts/install.sh +187 -1
- package/scripts/inventory_frontmatter.py +2 -2
- package/scripts/iron_law_sha.py +3 -3
- package/scripts/lint_agents_layout.py +14 -7
- package/scripts/lint_agents_md.py +4 -4
- package/scripts/lint_archived_skills.py +3 -3
- package/scripts/lint_artefact_frontmatter.py +2 -2
- package/scripts/lint_bench_ab.py +172 -0
- package/scripts/lint_bench_corpus.py +1 -1
- package/scripts/lint_command_tiers.py +5 -5
- package/scripts/lint_context_spine_usage.py +1 -1
- package/scripts/lint_framework_leakage.py +7 -7
- package/scripts/lint_framework_leakage_allowlist.json +144 -84
- package/scripts/lint_ghostwriter_source.py +3 -3
- package/scripts/lint_handoffs.py +1 -1
- package/scripts/lint_load_context.py +11 -11
- package/scripts/lint_media_policy_linkage.py +5 -5
- package/scripts/lint_namespace.py +1 -1
- package/scripts/lint_no_new_atomic_commands.py +2 -2
- package/scripts/lint_orchestration_dsl.py +1 -1
- package/scripts/lint_pack_boundaries.py +2 -2
- package/scripts/lint_persona_governance.py +4 -4
- package/scripts/lint_role_experiences.py +237 -0
- package/scripts/lint_rule_interactions.py +2 -2
- package/scripts/lint_rule_tiers.py +1 -1
- package/scripts/lint_trust_coherence.py +2 -2
- package/scripts/mcp_registry_submit.sh +187 -0
- package/scripts/mcp_server/tools.py +1 -1
- package/scripts/measure_frugality_savings.py +10 -10
- package/scripts/measure_patterns.py +1 -1
- package/scripts/measure_projection_bytes.py +5 -5
- package/scripts/measure_rule_budget.py +3 -3
- package/scripts/measure_skill_reduction.py +1 -1
- package/scripts/memory_lookup.py +1 -1
- package/scripts/memory_status.py +2 -2
- package/scripts/migrate_command_suggestions.py +3 -3
- package/scripts/mine_session.py +1 -1
- package/scripts/move_artefact.py +3 -3
- package/scripts/new_skill.py +2 -2
- package/scripts/pack_mcp_content.py +9 -9
- package/scripts/plan_physical_move.py +6 -6
- package/scripts/print_required_checks.py +196 -0
- package/scripts/probe_skill_registration.py +413 -0
- package/scripts/propose_modules_config.py +145 -0
- package/scripts/prototype_lint_contradictions.py +1 -1
- package/scripts/recruit_preflight.sh +152 -0
- package/scripts/refine_ticket_detect.py +3 -3
- package/scripts/release.py +20 -0
- package/scripts/render_benchmark_md.py +308 -0
- package/scripts/roadmap_progress_hook.py +1 -1
- package/scripts/run_skill_evals.py +2 -2
- package/scripts/runtime_registry.py +4 -4
- package/scripts/schemas/command.schema.json +4 -4
- package/scripts/schemas/rule.schema.json +5 -5
- package/scripts/schemas/skill.schema.json +3 -3
- package/scripts/schemas/user-type.schema.json +1 -1
- package/scripts/score_skill_selection.py +1 -1
- package/scripts/skill_collision_clusters.py +2 -2
- package/scripts/skill_linter.py +81 -81
- package/scripts/skill_overlap.py +5 -5
- package/scripts/skill_tools/audit_persona_coverage.py +2 -2
- package/scripts/skill_tools/audit_user_type_coverage.py +2 -2
- package/scripts/skill_tools/run_block_d_eval.py +1 -1
- package/scripts/skill_tools/score_skill_relevance.py +1 -1
- package/scripts/skill_tools/suggest_skill_for_task.py +1 -1
- package/scripts/skill_trigger_eval.py +3 -3
- package/scripts/smoke/kernel.sh +7 -1
- package/scripts/smoke/router.sh +5 -5
- package/scripts/smoke/skills.sh +1 -1
- package/scripts/smoke_quickstart.py +1 -1
- package/scripts/snapshot_agent_outputs.py +3 -3
- package/scripts/spotcheck_thin_root.py +1 -1
- package/scripts/{caveman_stats.py → telegraph_stats.py} +18 -18
- package/scripts/update_counts.py +1 -1
- package/scripts/validate_decision_engine.py +1 -1
- package/scripts/validate_frontmatter.py +1 -1
- package/scripts/validate_safe_paths.py +3 -3
- package/scripts/{validate_caveman_carveouts.py → validate_telegraph_carveouts.py} +7 -7
- package/scripts/verify_roadmap_closure.py +6 -6
- package/templates/consumer-settings/ONBOARDING.md +41 -0
- package/.agent-src/commands/install-via-agent.md +0 -129
- package/.agent-src/skills/compress-memory/SKILL.md +0 -131
- package/dist/ui/assets/index-D-DY1ywI.js +0 -35
- package/dist/ui/assets/index-D-DY1ywI.js.map +0 -1
- package/dist/ui/assets/index-Dqfhmg-d.css +0 -1
- package/docs/adrs/caveman/README.md +0 -9
- package/docs/contracts/caveman-telemetry.md +0 -83
- package/scripts/compress.sh +0 -18
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
#!/usr/bin/env python3
|
|
2
|
-
"""P4.3 — Write
|
|
2
|
+
"""P4.3 — Write condensed rule bodies. Run after _p43_condense.py."""
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
import pathlib
|
|
5
5
|
|
|
6
6
|
ROOT = pathlib.Path(__file__).resolve().parents[1]
|
|
7
|
-
RULES = ROOT / ".agent-src.
|
|
7
|
+
RULES = ROOT / ".agent-src.uncondensed" / "rules"
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
def write(name: str, content: str) -> None:
|
|
@@ -23,7 +23,7 @@ description: "Before coding, modifying, or debugging — analyze first, verify w
|
|
|
23
23
|
alwaysApply: false
|
|
24
24
|
source: package
|
|
25
25
|
load_context:
|
|
26
|
-
- .agent-src.
|
|
26
|
+
- .agent-src.uncondensed/contexts/communication/rules-auto/think-before-action-mechanics.md
|
|
27
27
|
triggers:
|
|
28
28
|
- intent: "before coding"
|
|
29
29
|
- intent: "before debugging"
|
|
@@ -63,7 +63,7 @@ description: "Writing or reviewing code — check relevant guideline before writ
|
|
|
63
63
|
alwaysApply: false
|
|
64
64
|
source: package
|
|
65
65
|
load_context:
|
|
66
|
-
- .agent-src.
|
|
66
|
+
- .agent-src.uncondensed/contexts/communication/rules-auto/guidelines-mechanics.md
|
|
67
67
|
triggers:
|
|
68
68
|
- intent: "writing code"
|
|
69
69
|
- intent: "reviewing code"
|
|
@@ -94,7 +94,7 @@ description: "When running CLI tools, fetching logs, or producing replies — re
|
|
|
94
94
|
alwaysApply: false
|
|
95
95
|
source: package
|
|
96
96
|
load_context:
|
|
97
|
-
- .agent-src.
|
|
97
|
+
- .agent-src.uncondensed/contexts/communication/rules-auto/token-efficiency-mechanics.md
|
|
98
98
|
triggers:
|
|
99
99
|
- intent: "verbose CLI output"
|
|
100
100
|
- intent: "fetching logs"
|
|
@@ -132,9 +132,9 @@ description: "Deciding whether to ask the user or just act on a workflow step
|
|
|
132
132
|
alwaysApply: false
|
|
133
133
|
source: package
|
|
134
134
|
load_context:
|
|
135
|
-
- .agent-src.
|
|
136
|
-
- .agent-src.
|
|
137
|
-
- .agent-src.
|
|
135
|
+
- .agent-src.uncondensed/contexts/execution/autonomy-detection.md
|
|
136
|
+
- .agent-src.uncondensed/contexts/execution/autonomy-mechanics.md
|
|
137
|
+
- .agent-src.uncondensed/contexts/execution/autonomy-examples.md
|
|
138
138
|
triggers:
|
|
139
139
|
- intent: "trivial workflow question"
|
|
140
140
|
- intent: "autonomy mode"
|
|
@@ -176,7 +176,7 @@ description: "Asking the user a question, presenting options, or summarizing pro
|
|
|
176
176
|
alwaysApply: false
|
|
177
177
|
source: package
|
|
178
178
|
load_context:
|
|
179
|
-
- .agent-src.
|
|
179
|
+
- .agent-src.uncondensed/contexts/communication/rules-auto/user-interaction-mechanics.md
|
|
180
180
|
triggers:
|
|
181
181
|
- intent: "ask user a question"
|
|
182
182
|
- intent: "numbered options"
|
|
@@ -232,4 +232,4 @@ lookup material.
|
|
|
232
232
|
if __name__ == "__main__":
|
|
233
233
|
for name, content in FILES.items():
|
|
234
234
|
write(name, content)
|
|
235
|
-
print(f"✓ wrote {len(FILES)}
|
|
235
|
+
print(f"✓ wrote {len(FILES)} condensed rule bodies")
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env python3
|
|
2
|
-
"""P4.3 — Surgical
|
|
2
|
+
"""P4.3 — Surgical condensation of 22 condense-and-keep auto-rules.
|
|
3
3
|
|
|
4
4
|
Writes new bodies for the largest rules (Iron Laws preserved verbatim,
|
|
5
5
|
extended rationale relocated to contexts/communication/rules-auto/).
|
|
@@ -13,8 +13,8 @@ import re
|
|
|
13
13
|
import sys
|
|
14
14
|
|
|
15
15
|
ROOT = pathlib.Path(__file__).resolve().parents[1]
|
|
16
|
-
RULES = ROOT / ".agent-src.
|
|
17
|
-
CTXDIR = ROOT / ".agent-src.
|
|
16
|
+
RULES = ROOT / ".agent-src.uncondensed" / "rules"
|
|
17
|
+
CTXDIR = ROOT / ".agent-src.uncondensed" / "contexts" / "communication" / "rules-auto"
|
|
18
18
|
|
|
19
19
|
# Triggers per rule (keyword / phrase / file_pattern / path_prefix / intent / command)
|
|
20
20
|
TRIGGERS: dict[str, list[dict]] = {
|
|
@@ -31,7 +31,7 @@ TRIGGERS: dict[str, list[dict]] = {
|
|
|
31
31
|
"missing-tool-handling": [{"keyword": "command not found"}, {"keyword": "not installed"}, {"intent": "install tool"}],
|
|
32
32
|
"no-attribution-footers": [{"intent": "PR body"}, {"intent": "commit message"}, {"intent": "Jira comment"}, {"keyword": "co-authored"}],
|
|
33
33
|
"no-roadmap-references": [{"path_prefix": "agents/roadmaps/"}, {"intent": "link from stable artifact"}],
|
|
34
|
-
"preservation-guard": [{"intent": "merge skill"}, {"intent": "
|
|
34
|
+
"preservation-guard": [{"intent": "merge skill"}, {"intent": "condense rule"}, {"intent": "refactor artifact"}, {"keyword": "Iron Law"}],
|
|
35
35
|
"role-mode-adherence": [{"keyword": "active_role"}, {"keyword": "role-mode"}, {"intent": "mode marker"}],
|
|
36
36
|
"runtime-safety": [{"keyword": "execution"}, {"keyword": "automated"}, {"keyword": "assisted"}, {"keyword": "handler"}],
|
|
37
37
|
"security-sensitive-stop": [{"keyword": "auth"}, {"keyword": "billing"}, {"keyword": "tenant"}, {"keyword": "secret"}, {"keyword": "webhook"}],
|
|
@@ -115,4 +115,4 @@ if __name__ == "__main__":
|
|
|
115
115
|
# Imported by _p43_bodies.py — when run directly, only stamp triggers.
|
|
116
116
|
for rid in TRIGGERS:
|
|
117
117
|
patch_triggers_only(rid)
|
|
118
|
-
print("✓ triggers stamped on all 22
|
|
118
|
+
print("✓ triggers stamped on all 22 condense-and-keep rules")
|
|
@@ -10,7 +10,7 @@ from __future__ import annotations
|
|
|
10
10
|
import re, sys, pathlib
|
|
11
11
|
|
|
12
12
|
ROOT = pathlib.Path(__file__).resolve().parents[1]
|
|
13
|
-
RULES = ROOT / ".agent-src.
|
|
13
|
+
RULES = ROOT / ".agent-src.uncondensed" / "rules"
|
|
14
14
|
GUIDELINES = ROOT / "docs" / "guidelines"
|
|
15
15
|
|
|
16
16
|
# (rule_id, route, triggers, iron_law_one_liner)
|
|
@@ -35,7 +35,7 @@ SKILL_MIGRATIONS = [
|
|
|
35
35
|
[("keyword", "docker"), ("keyword", "artisan"), ("keyword", "composer"), ("phrase", "inside the container")],
|
|
36
36
|
"Run PHP / artisan / composer / phpstan / rector / ecs / phpunit inside the project container, never on the host."),
|
|
37
37
|
("docs-sync", "skill:agent-docs-writing",
|
|
38
|
-
[("path_prefix", ".agent-src.
|
|
38
|
+
[("path_prefix", ".agent-src.uncondensed/"), ("path_prefix", ".augment/"), ("keyword", "rename"), ("keyword", "delete")],
|
|
39
39
|
"On any add / rename / delete of skill / rule / command / guideline, update counts and cross-references in the same edit."),
|
|
40
40
|
("e2e-testing", "command:e2e-heal",
|
|
41
41
|
[("keyword", "playwright"), ("keyword", "e2e"), ("phrase", "page object")],
|
|
@@ -77,8 +77,8 @@ GUIDELINE_MIGRATIONS = [
|
|
|
77
77
|
[("phrase", "/implement-ticket"), ("phrase", "/work"), ("keyword", "telemetry")],
|
|
78
78
|
"After a `/implement-ticket` or `/work` phase-step, emit one `telemetry:record` call with consulted + applied ids when telemetry is enabled."),
|
|
79
79
|
("augment-portability", "guideline:augment-portability-patterns",
|
|
80
|
-
[("path_prefix", ".augment/"), ("path_prefix", ".agent-src.
|
|
81
|
-
"Files inside `.augment/` and `.agent-src.
|
|
80
|
+
[("path_prefix", ".augment/"), ("path_prefix", ".agent-src.uncondensed/"), ("keyword", "portable")],
|
|
81
|
+
"Files inside `.augment/` and `.agent-src.uncondensed/` MUST stay project-agnostic — no project names, domains, stacks."),
|
|
82
82
|
("command-suggestion-policy", "contract:command-suggestion-flow",
|
|
83
83
|
[("phrase", "free-form prompt"), ("phrase", "command suggestion")],
|
|
84
84
|
"When a free-form prompt matches a command, surface matches as numbered options with as-is escape; never auto-execute."),
|
|
@@ -89,10 +89,10 @@ GUIDELINE_MIGRATIONS = [
|
|
|
89
89
|
[("path_prefix", "agents/roadmaps/")],
|
|
90
90
|
"Any touch to `agents/roadmaps/` regenerates the dashboard in the same response; archive the roadmap when 0 open items remain."),
|
|
91
91
|
("rule-type-governance", "guideline:agent-infra/rule-type-governance",
|
|
92
|
-
[("path_prefix", ".agent-src.
|
|
92
|
+
[("path_prefix", ".agent-src.uncondensed/rules/")],
|
|
93
93
|
"Choose `always` vs `auto` per the governance table; over-broad `always` rules degrade the kernel budget."),
|
|
94
94
|
("skill-quality", "guideline:agent-infra/skill-quality-checklist",
|
|
95
|
-
[("path_prefix", ".agent-src.
|
|
95
|
+
[("path_prefix", ".agent-src.uncondensed/skills/")],
|
|
96
96
|
"Every skill must be executable, validated, and self-contained — full checklist in the guideline."),
|
|
97
97
|
]
|
|
98
98
|
|
|
@@ -164,7 +164,7 @@ def write_guideline(rule_id: str, route: str, body: str, existing_fm: dict) -> p
|
|
|
164
164
|
desc = existing_fm.get("description", "")
|
|
165
165
|
header = (f"# {rule_id.replace('-', ' ').title()}\n\n"
|
|
166
166
|
f"> {desc}\n\n"
|
|
167
|
-
f"_Origin: migrated from `.agent-src.
|
|
167
|
+
f"_Origin: migrated from `.agent-src.uncondensed/rules/{rule_id}.md` "
|
|
168
168
|
f"per P4.2 of `road-to-kernel-and-router.md`._\n\n")
|
|
169
169
|
target.write_text(header + body.lstrip())
|
|
170
170
|
return target
|
|
@@ -6,11 +6,11 @@ OUT.parent.mkdir(parents=True, exist_ok=True)
|
|
|
6
6
|
|
|
7
7
|
framing = """# Cross-check request — Phase 1 of "Road to Rule Kernel and Router"
|
|
8
8
|
|
|
9
|
-
We are about to
|
|
9
|
+
We are about to condense a 56-rule "always-active" set down to a small
|
|
10
10
|
hard-capped kernel + a router-loaded auto bucket. Phase 1 is purely
|
|
11
11
|
classification + projection — no source rules edited yet. Two contracts
|
|
12
12
|
were produced. We want a neutral second opinion BEFORE Phase 2 ships
|
|
13
|
-
|
|
13
|
+
condensation to the actual rule files.
|
|
14
14
|
|
|
15
15
|
## What we want from you
|
|
16
16
|
|
|
@@ -23,13 +23,13 @@ compression to the actual rule files.
|
|
|
23
23
|
lists 4 criteria (Iron-Law floor / mode-independent / pre-action
|
|
24
24
|
gate / cross-cutting). Are these the right gates? Is anything
|
|
25
25
|
missing or redundant?
|
|
26
|
-
3. **
|
|
26
|
+
3. **Condensation-rate r = 0.742.** Three pilots gave r-values 0.677 /
|
|
27
27
|
0.712 / 0.838. We locked the **mean**. Reasonable, or should we use
|
|
28
28
|
median (0.712) / max (0.838) as a more conservative budget cushion?
|
|
29
29
|
Note: pilot range straddles the typical 0.6-0.75 band; max came
|
|
30
30
|
from the shortest rule (already-lean floor effect).
|
|
31
31
|
4. **The 1.5k per-rule cap with ADR-override.** Two of the three pilots
|
|
32
|
-
land >1.5k post-
|
|
32
|
+
land >1.5k post-condensation and would need an `iron-law-override`
|
|
33
33
|
ADR. Is the per-rule cap realistic, or should we raise the per-rule
|
|
34
34
|
ceiling (e.g. 2.5k or 3.5k) and lower the bucket cap (e.g. from 25k
|
|
35
35
|
to 20k)? What's the failure mode you'd be most worried about?
|
|
@@ -49,7 +49,7 @@ with OUT.open("a") as fh:
|
|
|
49
49
|
fh.write(Path("docs/contracts/rule-classification.md").read_text())
|
|
50
50
|
fh.write("\n\n---\n\n## Contract 2 — docs/contracts/kernel-membership.md\n\n")
|
|
51
51
|
fh.write(Path("docs/contracts/kernel-membership.md").read_text())
|
|
52
|
-
fh.write("\n\n---\n\n## Pilot inputs (
|
|
52
|
+
fh.write("\n\n---\n\n## Pilot inputs (condensed bodies, for reference)\n")
|
|
53
53
|
for rid in ("agent-authority", "direct-answers", "language-and-tone"):
|
|
54
54
|
fh.write(f"\n### Pilot — {rid}\n\n")
|
|
55
55
|
fh.write(Path(f"docs/contracts/pilot/{rid}.md").read_text())
|
|
@@ -85,7 +85,7 @@ def build(project_root: Path) -> dict[str, Any] | None:
|
|
|
85
85
|
def _pack_marker(project_root: Path) -> Path | None:
|
|
86
86
|
for candidate in (
|
|
87
87
|
project_root / ".agent-pack.yml",
|
|
88
|
-
project_root / ".agent-src.
|
|
88
|
+
project_root / ".agent-src.uncondensed" / ".agent-pack.yml",
|
|
89
89
|
):
|
|
90
90
|
if candidate.exists():
|
|
91
91
|
return candidate
|
|
Binary file
|
|
Binary file
|
|
@@ -50,6 +50,7 @@ Contract — pure, read-only, tolerant:
|
|
|
50
50
|
"""
|
|
51
51
|
from __future__ import annotations
|
|
52
52
|
|
|
53
|
+
import copy
|
|
53
54
|
import logging
|
|
54
55
|
import os
|
|
55
56
|
from pathlib import Path
|
|
@@ -60,6 +61,7 @@ from . import user_global_paths
|
|
|
60
61
|
logger = logging.getLogger(__name__)
|
|
61
62
|
|
|
62
63
|
DEFAULT_PROJECT_FILE = ".agent-settings.yml"
|
|
64
|
+
DEFAULT_TEAM_FILE = ".agent-project-settings.yml"
|
|
63
65
|
USER_GLOBAL_FILENAME = "agent-settings.yml"
|
|
64
66
|
|
|
65
67
|
#: Canonical write target under the new ``~/.event4u/agent-config/``
|
|
@@ -86,11 +88,25 @@ MERGEABLE_KEYS: tuple[str, ...] = (
|
|
|
86
88
|
"cost_profile",
|
|
87
89
|
"personal.bot_icon",
|
|
88
90
|
"personal.autonomy",
|
|
89
|
-
"
|
|
91
|
+
"telegraph.speak_scope",
|
|
90
92
|
)
|
|
91
93
|
|
|
92
94
|
_DEFAULTS: dict[str, Any] = {}
|
|
93
95
|
|
|
96
|
+
#: Defaults applied by :func:`get_modules_config` when a key is absent
|
|
97
|
+
#: from both the team file and the developer cascade. The values mirror
|
|
98
|
+
#: the ``modules:`` block shipped in
|
|
99
|
+
#: ``templates/agents/agent-project-settings.example.yml``. Lists are
|
|
100
|
+
#: returned as fresh copies — callers may mutate the result safely.
|
|
101
|
+
MODULES_DEFAULTS: dict[str, Any] = {
|
|
102
|
+
"enabled": False,
|
|
103
|
+
"root_paths": [],
|
|
104
|
+
"namespace_template": "",
|
|
105
|
+
"agent_folder": "agents",
|
|
106
|
+
"skip_dirs": [".module-template", ".example"],
|
|
107
|
+
"detection_acknowledged": False,
|
|
108
|
+
}
|
|
109
|
+
|
|
94
110
|
|
|
95
111
|
#: Anchor identifier returned by :func:`find_project_root_with_anchor`.
|
|
96
112
|
ANCHOR_AGENT_SETTINGS = "agent-settings"
|
|
@@ -470,6 +486,184 @@ def load_agent_settings(
|
|
|
470
486
|
return merged
|
|
471
487
|
|
|
472
488
|
|
|
489
|
+
def get_modules_config(
|
|
490
|
+
project_root: Path | str | None = None,
|
|
491
|
+
team_path: Path | str | None = None,
|
|
492
|
+
project_path: Path | str | None = None,
|
|
493
|
+
cwd: Path | None = None,
|
|
494
|
+
) -> dict[str, Any]:
|
|
495
|
+
"""Return the merged ``modules:`` configuration with defaults applied.
|
|
496
|
+
|
|
497
|
+
Three-tier precedence (deepest wins) per the layered-settings model
|
|
498
|
+
documented in ``docs/guidelines/agent-infra/layered-settings.md``:
|
|
499
|
+
|
|
500
|
+
1. :data:`MODULES_DEFAULTS` — package-shipped defaults.
|
|
501
|
+
2. Team file — ``<project_root>/.agent-project-settings.yml``
|
|
502
|
+
(committed, all developers see the same values).
|
|
503
|
+
3. Developer cascade — every ``.agent-settings.yml`` walked by
|
|
504
|
+
:func:`_resolve_cascade_paths` (git-ignored local overrides).
|
|
505
|
+
|
|
506
|
+
The team layer may pin keys via a top-level ``locked_keys`` list of
|
|
507
|
+
dotted paths (e.g. ``[modules.root_paths]``). Locked keys discard any
|
|
508
|
+
matching override from the developer cascade and emit a ``logging``
|
|
509
|
+
INFO record. Locks are advisory — the team file always wins anyway —
|
|
510
|
+
but the explicit list makes the intent reviewable and gives the loader
|
|
511
|
+
a hook for the warning.
|
|
512
|
+
|
|
513
|
+
``project_root`` defaults to ``find_project_root(cwd or Path.cwd())``.
|
|
514
|
+
``team_path`` overrides the resolved team-file location for tests.
|
|
515
|
+
``project_path`` + ``cwd`` flow through to :func:`load_agent_settings`
|
|
516
|
+
unchanged.
|
|
517
|
+
|
|
518
|
+
Pure, read-only — no file is ever written. Missing files / malformed
|
|
519
|
+
YAML / absent ``modules:`` block all return the defaults.
|
|
520
|
+
"""
|
|
521
|
+
cwd_resolved = cwd if cwd is not None else Path.cwd()
|
|
522
|
+
|
|
523
|
+
if team_path is not None:
|
|
524
|
+
team_file = Path(team_path)
|
|
525
|
+
else:
|
|
526
|
+
if project_root is not None:
|
|
527
|
+
root = Path(project_root)
|
|
528
|
+
else:
|
|
529
|
+
root = find_project_root(cwd_resolved) or cwd_resolved
|
|
530
|
+
team_file = root / DEFAULT_TEAM_FILE
|
|
531
|
+
|
|
532
|
+
team_raw = _read_yaml(team_file) or {}
|
|
533
|
+
team_modules = team_raw.get("modules") if isinstance(team_raw.get("modules"), dict) else {}
|
|
534
|
+
locked_keys_raw = team_raw.get("locked_keys")
|
|
535
|
+
locked_keys: tuple[str, ...] = tuple(
|
|
536
|
+
k for k in (locked_keys_raw or []) if isinstance(k, str)
|
|
537
|
+
)
|
|
538
|
+
|
|
539
|
+
dev_merged = load_agent_settings(
|
|
540
|
+
project_path=project_path,
|
|
541
|
+
cwd=cwd,
|
|
542
|
+
)
|
|
543
|
+
dev_modules = dev_merged.get("modules") if isinstance(dev_merged.get("modules"), dict) else {}
|
|
544
|
+
|
|
545
|
+
merged: dict[str, Any] = copy.deepcopy(MODULES_DEFAULTS)
|
|
546
|
+
if team_modules:
|
|
547
|
+
_deep_merge(merged, team_modules)
|
|
548
|
+
|
|
549
|
+
if dev_modules:
|
|
550
|
+
for key, value in dev_modules.items():
|
|
551
|
+
dotted = f"modules.{key}"
|
|
552
|
+
if dotted in locked_keys and key in (team_modules or {}):
|
|
553
|
+
logger.info(
|
|
554
|
+
"agent_settings: ignoring developer override of locked key %s",
|
|
555
|
+
dotted,
|
|
556
|
+
)
|
|
557
|
+
continue
|
|
558
|
+
if isinstance(value, dict) and isinstance(merged.get(key), dict):
|
|
559
|
+
_deep_merge(merged[key], value)
|
|
560
|
+
else:
|
|
561
|
+
merged[key] = value
|
|
562
|
+
|
|
563
|
+
return merged
|
|
564
|
+
|
|
565
|
+
|
|
566
|
+
def enumerate_modules(
|
|
567
|
+
project_root: Path | str | None = None,
|
|
568
|
+
cwd: Path | None = None,
|
|
569
|
+
modules_config: dict[str, Any] | None = None,
|
|
570
|
+
) -> list[dict[str, Any]]:
|
|
571
|
+
"""Enumerate every module under ``modules.root_paths``.
|
|
572
|
+
|
|
573
|
+
Phase D Step 1 of road-to-configurable-modules. For each path in
|
|
574
|
+
``modules.root_paths`` (resolved relative to ``project_root``), lists
|
|
575
|
+
immediate subdirectories that survive the ``modules.skip_dirs`` filter
|
|
576
|
+
and reports whether each module ships a per-module agent folder
|
|
577
|
+
(``modules.agent_folder``, default ``agents``).
|
|
578
|
+
|
|
579
|
+
Returns a list of dicts \u2014 one per discovered module \u2014 sorted by
|
|
580
|
+
``(root_path, name)`` for deterministic output:
|
|
581
|
+
|
|
582
|
+
* ``name`` \u2014 directory name of the module
|
|
583
|
+
* ``root_path`` \u2014 repo-relative root containing the module
|
|
584
|
+
* ``module_path`` \u2014 repo-relative path to the module itself
|
|
585
|
+
* ``has_agent_folder`` \u2014 ``True`` iff a directory matching
|
|
586
|
+
``modules.agent_folder`` lives directly under the module
|
|
587
|
+
* ``agent_folder_path`` \u2014 repo-relative path to that folder
|
|
588
|
+
(``None`` when ``has_agent_folder`` is ``False``)
|
|
589
|
+
|
|
590
|
+
Contract:
|
|
591
|
+
|
|
592
|
+
* ``modules.enabled`` is **not** consulted \u2014 callers decide whether
|
|
593
|
+
to skip the call. Disabled projects normally yield ``[]`` because
|
|
594
|
+
``root_paths`` is empty by default.
|
|
595
|
+
* Missing roots are skipped silently (logged at INFO).
|
|
596
|
+
* Hidden directories (leading ``.``) and entries in
|
|
597
|
+
``modules.skip_dirs`` are filtered out.
|
|
598
|
+
* Symlinks are followed only when they resolve inside the project
|
|
599
|
+
root \u2014 same boundary as ``find_project_root``.
|
|
600
|
+
* Pure, read-only \u2014 no file or directory is ever written.
|
|
601
|
+
|
|
602
|
+
``modules_config`` lets tests inject a pre-built dict; when ``None``
|
|
603
|
+
the function calls :func:`get_modules_config` with the same
|
|
604
|
+
``project_root`` / ``cwd`` so the precedence chain matches.
|
|
605
|
+
"""
|
|
606
|
+
cwd_resolved = cwd if cwd is not None else Path.cwd()
|
|
607
|
+
if project_root is not None:
|
|
608
|
+
root = Path(project_root)
|
|
609
|
+
else:
|
|
610
|
+
root = find_project_root(cwd_resolved) or cwd_resolved
|
|
611
|
+
root = root.resolve()
|
|
612
|
+
|
|
613
|
+
if modules_config is None:
|
|
614
|
+
modules_config = get_modules_config(project_root=root, cwd=cwd)
|
|
615
|
+
|
|
616
|
+
root_paths_raw = modules_config.get("root_paths") or []
|
|
617
|
+
skip_dirs_raw = modules_config.get("skip_dirs") or MODULES_DEFAULTS["skip_dirs"]
|
|
618
|
+
agent_folder = str(modules_config.get("agent_folder") or MODULES_DEFAULTS["agent_folder"])
|
|
619
|
+
|
|
620
|
+
skip_dirs: set[str] = {str(s) for s in skip_dirs_raw if isinstance(s, str)}
|
|
621
|
+
|
|
622
|
+
discovered: list[dict[str, Any]] = []
|
|
623
|
+
for raw in root_paths_raw:
|
|
624
|
+
if not isinstance(raw, str) or not raw.strip():
|
|
625
|
+
continue
|
|
626
|
+
root_rel = raw.strip().strip("/")
|
|
627
|
+
root_abs = (root / root_rel).resolve()
|
|
628
|
+
try:
|
|
629
|
+
if not root_abs.is_dir() or not str(root_abs).startswith(str(root)):
|
|
630
|
+
logger.info("enumerate_modules: skipping missing/out-of-tree root %s", root_rel)
|
|
631
|
+
continue
|
|
632
|
+
except OSError:
|
|
633
|
+
logger.info("enumerate_modules: unreadable root %s", root_rel)
|
|
634
|
+
continue
|
|
635
|
+
|
|
636
|
+
try:
|
|
637
|
+
children = sorted(root_abs.iterdir(), key=lambda p: p.name)
|
|
638
|
+
except OSError:
|
|
639
|
+
logger.info("enumerate_modules: cannot list %s", root_rel)
|
|
640
|
+
continue
|
|
641
|
+
|
|
642
|
+
for child in children:
|
|
643
|
+
name = child.name
|
|
644
|
+
if name.startswith(".") or name in skip_dirs:
|
|
645
|
+
continue
|
|
646
|
+
if not child.is_dir():
|
|
647
|
+
continue
|
|
648
|
+
agent_dir = child / agent_folder
|
|
649
|
+
has_agent = agent_dir.is_dir()
|
|
650
|
+
try:
|
|
651
|
+
module_rel = child.resolve().relative_to(root)
|
|
652
|
+
except ValueError:
|
|
653
|
+
continue
|
|
654
|
+
entry: dict[str, Any] = {
|
|
655
|
+
"name": name,
|
|
656
|
+
"root_path": root_rel,
|
|
657
|
+
"module_path": str(module_rel),
|
|
658
|
+
"has_agent_folder": has_agent,
|
|
659
|
+
"agent_folder_path": str(module_rel / agent_folder) if has_agent else None,
|
|
660
|
+
}
|
|
661
|
+
discovered.append(entry)
|
|
662
|
+
|
|
663
|
+
discovered.sort(key=lambda m: (m["root_path"], m["name"]))
|
|
664
|
+
return discovered
|
|
665
|
+
|
|
666
|
+
|
|
473
667
|
def iter_setting_overrides(
|
|
474
668
|
project_path: Path | str | None = None,
|
|
475
669
|
user_global_path: Path | str | None = None,
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
"""Locate artefact source roots across the monorepo physical layout.
|
|
2
2
|
|
|
3
3
|
Phase 4 of the monorepo migration (ADR-017) physically moves source
|
|
4
|
-
artefacts out of the flat ``.agent-src.
|
|
5
|
-
``packages/core/.agent-src.
|
|
6
|
-
``packages/pack-*/.agent-src.
|
|
4
|
+
artefacts out of the flat ``.agent-src.uncondensed/`` directory into
|
|
5
|
+
``packages/core/.agent-src.uncondensed/`` and
|
|
6
|
+
``packages/pack-*/.agent-src.uncondensed/`` trees. This helper hides
|
|
7
7
|
that decision from every scanner so they keep working pre-move and
|
|
8
8
|
post-move with the same call shape.
|
|
9
9
|
|
|
10
10
|
Contract:
|
|
11
11
|
|
|
12
12
|
- ``artefact_roots()`` returns every directory that contains source
|
|
13
|
-
``.md`` artefacts. Pre-move that is ``.agent-src.
|
|
14
|
-
the repo root. Post-move it is every ``packages/*/.agent-src.
|
|
13
|
+
``.md`` artefacts. Pre-move that is ``.agent-src.uncondensed/`` at
|
|
14
|
+
the repo root. Post-move it is every ``packages/*/.agent-src.uncondensed/``.
|
|
15
15
|
Both can coexist during the migration window.
|
|
16
16
|
- ``iter_artefacts()`` yields every source ``.md`` path under those roots.
|
|
17
17
|
- ``logical_relpath(p)`` returns the artefact's stable identity path
|
|
@@ -19,7 +19,7 @@ Contract:
|
|
|
19
19
|
root contains it. This is what manifests, hash maps, and projections
|
|
20
20
|
use as the artefact key.
|
|
21
21
|
- ``strip_source_prefix(p)`` returns the same as ``logical_relpath``
|
|
22
|
-
but accepts repo-relative POSIX strings (used by the
|
|
22
|
+
but accepts repo-relative POSIX strings (used by the condenseor's
|
|
23
23
|
output-path computation and the LEGACY_SRC_PREFIX logic).
|
|
24
24
|
"""
|
|
25
25
|
from __future__ import annotations
|
|
@@ -28,22 +28,22 @@ from pathlib import Path
|
|
|
28
28
|
from typing import Iterator
|
|
29
29
|
|
|
30
30
|
ROOT = Path(__file__).resolve().parents[2]
|
|
31
|
-
LEGACY_SRC = ROOT / ".agent-src.
|
|
31
|
+
LEGACY_SRC = ROOT / ".agent-src.uncondensed"
|
|
32
32
|
PACKAGES = ROOT / "packages"
|
|
33
33
|
|
|
34
34
|
# Repo-relative POSIX path prefixes that anchor an artefact source tree.
|
|
35
35
|
# Order: legacy first (kept until the move lands), then packages/*. Each
|
|
36
36
|
# entry is the prefix that gets stripped to obtain the logical path.
|
|
37
|
-
_LEGACY_PREFIX = ".agent-src.
|
|
38
|
-
_PACKAGE_SUFFIX = "/.agent-src.
|
|
37
|
+
_LEGACY_PREFIX = ".agent-src.uncondensed/"
|
|
38
|
+
_PACKAGE_SUFFIX = "/.agent-src.uncondensed/"
|
|
39
39
|
|
|
40
40
|
|
|
41
41
|
def artefact_roots() -> list[Path]:
|
|
42
42
|
"""Every existing directory that contains source ``.md`` artefacts.
|
|
43
43
|
|
|
44
|
-
Returns at most one ``.agent-src.
|
|
44
|
+
Returns at most one ``.agent-src.uncondensed/`` root (legacy) plus
|
|
45
45
|
one root per ``packages/*/`` subdirectory that exposes its own
|
|
46
|
-
``.agent-src.
|
|
46
|
+
``.agent-src.uncondensed/`` tree. Order is stable: legacy first,
|
|
47
47
|
then ``packages/`` entries sorted alphabetically.
|
|
48
48
|
"""
|
|
49
49
|
roots: list[Path] = []
|
|
@@ -51,7 +51,7 @@ def artefact_roots() -> list[Path]:
|
|
|
51
51
|
roots.append(LEGACY_SRC)
|
|
52
52
|
if PACKAGES.exists():
|
|
53
53
|
for pkg in sorted(PACKAGES.iterdir()):
|
|
54
|
-
sub = pkg / ".agent-src.
|
|
54
|
+
sub = pkg / ".agent-src.uncondensed"
|
|
55
55
|
if sub.is_dir():
|
|
56
56
|
roots.append(sub)
|
|
57
57
|
return roots
|
|
@@ -111,11 +111,11 @@ def logical_relpath(path: Path) -> str:
|
|
|
111
111
|
"""Return the artefact's logical identity path (POSIX, no prefix).
|
|
112
112
|
|
|
113
113
|
Examples:
|
|
114
|
-
``.agent-src.
|
|
114
|
+
``.agent-src.uncondensed/skills/laravel/SKILL.md``
|
|
115
115
|
→ ``skills/laravel/SKILL.md``
|
|
116
|
-
``packages/pack-laravel/.agent-src.
|
|
116
|
+
``packages/pack-laravel/.agent-src.uncondensed/skills/laravel/SKILL.md``
|
|
117
117
|
→ ``skills/laravel/SKILL.md``
|
|
118
|
-
``packages/core/.agent-src.
|
|
118
|
+
``packages/core/.agent-src.uncondensed/rules/scope-control.md``
|
|
119
119
|
→ ``rules/scope-control.md``
|
|
120
120
|
|
|
121
121
|
Raises ``ValueError`` if ``path`` is not under any known source root.
|
|
@@ -130,15 +130,15 @@ def logical_relpath(path: Path) -> str:
|
|
|
130
130
|
|
|
131
131
|
|
|
132
132
|
def strip_source_prefix(rel: str) -> str | None:
|
|
133
|
-
"""Strip the ``.agent-src.
|
|
133
|
+
"""Strip the ``.agent-src.uncondensed/`` anchor from a repo-relative path.
|
|
134
134
|
|
|
135
135
|
Accepts both the legacy flat layout and the monorepo packages layout.
|
|
136
136
|
Returns ``None`` if the path is not under any source root.
|
|
137
137
|
|
|
138
138
|
Examples:
|
|
139
|
-
``".agent-src.
|
|
140
|
-
``"packages/core/.agent-src.
|
|
141
|
-
``"packages/pack-laravel/.agent-src.
|
|
139
|
+
``".agent-src.uncondensed/rules/foo.md"`` → ``"rules/foo.md"``
|
|
140
|
+
``"packages/core/.agent-src.uncondensed/rules/foo.md"`` → ``"rules/foo.md"``
|
|
141
|
+
``"packages/pack-laravel/.agent-src.uncondensed/skills/x/SKILL.md"``
|
|
142
142
|
→ ``"skills/x/SKILL.md"``
|
|
143
143
|
``"docs/architecture.md"`` → ``None``
|
|
144
144
|
"""
|