@event4u/agent-config 3.3.0 → 4.2.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 +216 -3
- package/CONTRIBUTING.md +31 -12
- package/README.md +21 -12
- 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/atomic.js +92 -0
- package/dist/install/atomic.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 +358 -0
- package/dist/server/routes/install.js.map +1 -0
- package/dist/server/routes/wizard.js +468 -32
- 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 +5 -3
- package/dist/server/schemas/settings.js.map +1 -1
- package/dist/ui/assets/index-BDAhhpDV.js +40 -0
- package/dist/ui/assets/index-BDAhhpDV.js.map +1 -0
- package/dist/ui/assets/index-BXZILUxe.css +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 +110 -97
- 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 +3 -3
- 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/connector-setup.md +2 -2
- package/docs/deploy/policy-cookbook.md +2 -2
- 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 +273 -45
- 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 +152 -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
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Plan builder — Phase A3 port of `scripts/install.py:_build_install_plan`.
|
|
3
|
+
*
|
|
4
|
+
* Pure: walks one or more source directories, computes the target path
|
|
5
|
+
* + SHA-256 of every file, and returns a declarative {@link InstallPlan}.
|
|
6
|
+
* The applier (Phase A4) consumes the plan verbatim — it never recomputes
|
|
7
|
+
* paths or re-reads the source tree.
|
|
8
|
+
*
|
|
9
|
+
* Mirrors:
|
|
10
|
+
* - `_sha256_of_file(path)` → {@link sha256File}
|
|
11
|
+
* - `_file_entry(path, kind, ...)` → {@link fileEntry}
|
|
12
|
+
* - `_files_by_tool_from_deploy(...)` → buildInstallPlan loop
|
|
13
|
+
* - `_copy_dir_dereferencing_symlinks` walk → {@link walkSourceTree}
|
|
14
|
+
*
|
|
15
|
+
* v4 simplifies the Python shape: instead of three helper tables
|
|
16
|
+
* (`GLOBAL_DEPLOY_SOURCES` × `USER_SCOPE_PATHS` × `_bridge_marker`) the
|
|
17
|
+
* planner receives a flat list of `(srcDir, destDir, toolId, kind)`
|
|
18
|
+
* tuples. The mapping table lives in a higher layer (B0 dispatcher) so
|
|
19
|
+
* the planner stays a pure file walker.
|
|
20
|
+
*/
|
|
21
|
+
import { createHash } from 'node:crypto';
|
|
22
|
+
import { readFileSync, readdirSync, statSync } from 'node:fs';
|
|
23
|
+
import { join, relative, resolve } from 'node:path';
|
|
24
|
+
/**
|
|
25
|
+
* Hex SHA-256 of `path` content, or `null` if unreadable.
|
|
26
|
+
*
|
|
27
|
+
* 1:1 port of `_sha256_of_file`. Bridges intentionally skip this and
|
|
28
|
+
* pass `null` (their content is a pointer, not committed bytes).
|
|
29
|
+
*/
|
|
30
|
+
export function sha256File(path) {
|
|
31
|
+
try {
|
|
32
|
+
const data = readFileSync(path);
|
|
33
|
+
return createHash('sha256').update(data).digest('hex');
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Build one v2 `files[]` entry.
|
|
41
|
+
*
|
|
42
|
+
* 1:1 port of `_file_entry(path, kind, hash_content=...)`. `hashContent`
|
|
43
|
+
* toggles SHA-256 computation: deployed/marker pass `true`, bridges pass
|
|
44
|
+
* `false` (sha256 stays `null`).
|
|
45
|
+
*/
|
|
46
|
+
export function fileEntry(path, kind, options) {
|
|
47
|
+
return {
|
|
48
|
+
path,
|
|
49
|
+
kind,
|
|
50
|
+
sha256: options.hashContent ? sha256File(path) : null,
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Recursively list every file under `dir` (depth-first, sorted).
|
|
55
|
+
*
|
|
56
|
+
* Symlinks are followed via `statSync` (matches Python's
|
|
57
|
+
* `_copy_dir_dereferencing_symlinks` behaviour). Missing directories
|
|
58
|
+
* return `[]` rather than throwing — caller already validated `srcDir`.
|
|
59
|
+
*/
|
|
60
|
+
export function walkSourceTree(dir) {
|
|
61
|
+
const out = [];
|
|
62
|
+
walkInto(dir, out);
|
|
63
|
+
return out;
|
|
64
|
+
}
|
|
65
|
+
function walkInto(dir, out) {
|
|
66
|
+
let entries;
|
|
67
|
+
try {
|
|
68
|
+
entries = readdirSync(dir).sort();
|
|
69
|
+
}
|
|
70
|
+
catch {
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
for (const name of entries) {
|
|
74
|
+
const full = join(dir, name);
|
|
75
|
+
let isDir;
|
|
76
|
+
try {
|
|
77
|
+
isDir = statSync(full).isDirectory();
|
|
78
|
+
}
|
|
79
|
+
catch {
|
|
80
|
+
continue;
|
|
81
|
+
}
|
|
82
|
+
if (isDir) {
|
|
83
|
+
walkInto(full, out);
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
out.push(full);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Build a declarative install plan.
|
|
92
|
+
*
|
|
93
|
+
* For each {@link PlanSource}, walks `srcDir` and emits one {@link FileEntry}
|
|
94
|
+
* per file with `path = destDir + (file path relative to srcDir)` and a
|
|
95
|
+
* fresh SHA-256 of the source file (computed once, never recomputed by
|
|
96
|
+
* the applier). Bridges (`kind=bridge`) keep `sha256=null` per the
|
|
97
|
+
* Python schema.
|
|
98
|
+
*
|
|
99
|
+
* The applier (Phase A4) is path-only — it does not re-walk `srcDir`
|
|
100
|
+
* and does not re-hash. The plan is the source of truth.
|
|
101
|
+
*/
|
|
102
|
+
export function buildInstallPlan(inputs) {
|
|
103
|
+
const filesByTool = {};
|
|
104
|
+
for (const source of inputs.sources) {
|
|
105
|
+
const bucket = filesByTool[source.toolId] ?? [];
|
|
106
|
+
const files = walkSourceTree(source.srcDir);
|
|
107
|
+
for (const srcFile of files) {
|
|
108
|
+
const rel = relative(source.srcDir, srcFile);
|
|
109
|
+
const destPath = resolve(source.destDir, rel);
|
|
110
|
+
bucket.push(fileEntry(srcFile, source.kind, {
|
|
111
|
+
hashContent: source.kind !== 'bridge',
|
|
112
|
+
}));
|
|
113
|
+
// Override `path` so the entry reflects the *target* (the
|
|
114
|
+
// applier writes here), not the source we read from.
|
|
115
|
+
bucket[bucket.length - 1] = {
|
|
116
|
+
...bucket[bucket.length - 1],
|
|
117
|
+
path: destPath,
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
filesByTool[source.toolId] = bucket;
|
|
121
|
+
}
|
|
122
|
+
// Ensure every requested toolId appears, even with zero files —
|
|
123
|
+
// mirrors `_files_by_tool_from_deploy` emitting `[]` so a shrinking
|
|
124
|
+
// install actually shrinks the recorded inventory.
|
|
125
|
+
for (const source of inputs.sources) {
|
|
126
|
+
if (!(source.toolId in filesByTool)) {
|
|
127
|
+
filesByTool[source.toolId] = [];
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
return {
|
|
131
|
+
version: 2,
|
|
132
|
+
target: inputs.target,
|
|
133
|
+
root: inputs.root,
|
|
134
|
+
filesByTool,
|
|
135
|
+
mergedKeysByTool: {},
|
|
136
|
+
policy: inputs.policy,
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* True when the plan would not modify any file on disk.
|
|
141
|
+
*
|
|
142
|
+
* Wizard renders the "nothing to do" screen on `true` (Phase B2).
|
|
143
|
+
*/
|
|
144
|
+
export function isEmptyPlan(plan) {
|
|
145
|
+
for (const entries of Object.values(plan.filesByTool)) {
|
|
146
|
+
if (entries.length > 0) {
|
|
147
|
+
return false;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
for (const entries of Object.values(plan.mergedKeysByTool)) {
|
|
151
|
+
if (entries.length > 0) {
|
|
152
|
+
return false;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
return true;
|
|
156
|
+
}
|
|
157
|
+
//# sourceMappingURL=plan.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plan.js","sourceRoot":"","sources":["../../src/install/plan.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Transaction log — Phase A4 (council Finding #18).
|
|
3
|
+
*
|
|
4
|
+
* Append-only JSONL at `getLogPath()` (`~/.event4u/agent-config/install-log.jsonl`).
|
|
5
|
+
* Each successful atomic write appends one entry; recovery on crash is
|
|
6
|
+
* `tail -n` + reverse-apply. No PID lockfile (per Phase-A4 decision 8).
|
|
7
|
+
*
|
|
8
|
+
* Rotation: 10 MB OR 30 days, whichever first. Rotated copies move to
|
|
9
|
+
* `install-log.<ISO>.jsonl.gz` siblings; recovery never scans them.
|
|
10
|
+
*
|
|
11
|
+
* Recovery cap: at most the **last 500 entries** of the active log are
|
|
12
|
+
* scanned. Older incomplete tails are treated as abandoned and surfaced
|
|
13
|
+
* to the wizard as "previous run aborted; ignoring".
|
|
14
|
+
*/
|
|
15
|
+
import { createGzip } from 'node:zlib';
|
|
16
|
+
import { createReadStream, createWriteStream, existsSync, readFileSync, renameSync, statSync, unlinkSync } from 'node:fs';
|
|
17
|
+
import { dirname } from 'node:path';
|
|
18
|
+
import { pipeline } from 'node:stream/promises';
|
|
19
|
+
import { atomicAppendLine } from './atomic.js';
|
|
20
|
+
/** Rotate the active log when it reaches this size (council Finding #18). */
|
|
21
|
+
export const ROTATION_MAX_BYTES = 10 * 1024 * 1024;
|
|
22
|
+
/** Rotate the active log when its first entry is older than this (ms). */
|
|
23
|
+
export const ROTATION_MAX_AGE_MS = 30 * 24 * 60 * 60 * 1000;
|
|
24
|
+
/** Recovery scans at most the last N entries of the active log. */
|
|
25
|
+
export const RECOVERY_DEPTH_CAP = 500;
|
|
26
|
+
/** Append one entry to the active log, rotating first if thresholds tripped. */
|
|
27
|
+
export function appendTxLog(logPath, entry) {
|
|
28
|
+
if (shouldRotate(logPath)) {
|
|
29
|
+
rotateLogSync(logPath);
|
|
30
|
+
}
|
|
31
|
+
atomicAppendLine(logPath, JSON.stringify(entry));
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Read at most the last {@link RECOVERY_DEPTH_CAP} entries from the active log.
|
|
35
|
+
*
|
|
36
|
+
* Returns entries in chronological order (oldest of the tail first).
|
|
37
|
+
* Malformed lines are dropped silently \u2014 partial-write tails should not
|
|
38
|
+
* crash recovery.
|
|
39
|
+
*/
|
|
40
|
+
export function readRecentEntries(logPath) {
|
|
41
|
+
if (!existsSync(logPath)) {
|
|
42
|
+
return [];
|
|
43
|
+
}
|
|
44
|
+
const raw = readFileSync(logPath, 'utf8');
|
|
45
|
+
const lines = raw.split('\n').filter((l) => l.length > 0);
|
|
46
|
+
const tail = lines.slice(-RECOVERY_DEPTH_CAP);
|
|
47
|
+
const out = [];
|
|
48
|
+
for (const line of tail) {
|
|
49
|
+
const parsed = tryParseEntry(line);
|
|
50
|
+
if (parsed !== null) {
|
|
51
|
+
out.push(parsed);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return out;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* True when the active log breaches one of the rotation thresholds.
|
|
58
|
+
*
|
|
59
|
+
* Size threshold trips on byte-count alone; age threshold reads the
|
|
60
|
+
* first line and compares its `ts` against `now`.
|
|
61
|
+
*/
|
|
62
|
+
export function shouldRotate(logPath, now = new Date()) {
|
|
63
|
+
if (!existsSync(logPath)) {
|
|
64
|
+
return false;
|
|
65
|
+
}
|
|
66
|
+
let size = 0;
|
|
67
|
+
try {
|
|
68
|
+
size = statSync(logPath).size;
|
|
69
|
+
}
|
|
70
|
+
catch {
|
|
71
|
+
return false;
|
|
72
|
+
}
|
|
73
|
+
if (size >= ROTATION_MAX_BYTES) {
|
|
74
|
+
return true;
|
|
75
|
+
}
|
|
76
|
+
const firstTs = readFirstTimestamp(logPath);
|
|
77
|
+
if (firstTs === null) {
|
|
78
|
+
return false;
|
|
79
|
+
}
|
|
80
|
+
return now.getTime() - firstTs >= ROTATION_MAX_AGE_MS;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Rotate the active log to `install-log.<ISO>.jsonl.gz` and remove the original.
|
|
84
|
+
*
|
|
85
|
+
* Sync wrapper around the async gzip pipeline so callers stay sequential.
|
|
86
|
+
* `appendTxLog` blocks on this \u2014 acceptable: rotations are rare (10 MB
|
|
87
|
+
* or 30 days) and the gzip is fire-and-forget afterwards.
|
|
88
|
+
*/
|
|
89
|
+
export function rotateLogSync(logPath) {
|
|
90
|
+
if (!existsSync(logPath)) {
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
const stamp = new Date().toISOString().replace(/[:.]/g, '-');
|
|
94
|
+
const rotated = logPath.replace(/\.jsonl$/, `.${stamp}.jsonl`);
|
|
95
|
+
renameSync(logPath, rotated);
|
|
96
|
+
// Best-effort gzip in the background; failure is non-fatal because
|
|
97
|
+
// the rotated `.jsonl` is already a valid recovery artefact.
|
|
98
|
+
void gzipInPlace(rotated).catch(() => { });
|
|
99
|
+
}
|
|
100
|
+
async function gzipInPlace(source) {
|
|
101
|
+
const target = `${source}.gz`;
|
|
102
|
+
await pipeline(createReadStream(source), createGzip(), createWriteStream(target));
|
|
103
|
+
try {
|
|
104
|
+
unlinkSync(source);
|
|
105
|
+
}
|
|
106
|
+
catch {
|
|
107
|
+
/* swallow \u2014 gzip succeeded, leak is acceptable */
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
function readFirstTimestamp(logPath) {
|
|
111
|
+
try {
|
|
112
|
+
const raw = readFileSync(logPath, 'utf8');
|
|
113
|
+
const firstLine = raw.split('\n', 1)[0] ?? '';
|
|
114
|
+
const parsed = tryParseEntry(firstLine);
|
|
115
|
+
if (parsed === null)
|
|
116
|
+
return null;
|
|
117
|
+
const t = Date.parse(parsed.ts);
|
|
118
|
+
return Number.isFinite(t) ? t : null;
|
|
119
|
+
}
|
|
120
|
+
catch {
|
|
121
|
+
return null;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
function tryParseEntry(line) {
|
|
125
|
+
try {
|
|
126
|
+
const obj = JSON.parse(line);
|
|
127
|
+
if (typeof obj.ts !== 'string' || typeof obj.kind !== 'string' || typeof obj.path !== 'string') {
|
|
128
|
+
return null;
|
|
129
|
+
}
|
|
130
|
+
return obj;
|
|
131
|
+
}
|
|
132
|
+
catch {
|
|
133
|
+
return null;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
/** Resolve the directory holding `logPath` \u2014 helper for callers (apply.ts). */
|
|
137
|
+
export function txLogDir(logPath) {
|
|
138
|
+
return dirname(logPath);
|
|
139
|
+
}
|
|
140
|
+
//# sourceMappingURL=txlog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"txlog.js","sourceRoot":"","sources":["../../src/install/txlog.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core types for the unified TypeScript install engine (v4.0.0).
|
|
3
|
+
*
|
|
4
|
+
* Mirrors the on-disk schema used by the legacy Python installer
|
|
5
|
+
* (`scripts/install.py`) so the v4 engine reads/writes the same
|
|
6
|
+
* `~/.event4u/agent-config/` tree and v2 manifest entries without a
|
|
7
|
+
* migration step.
|
|
8
|
+
*
|
|
9
|
+
* Phase A1 — foundation. Sub-types referenced by `detect`, `plan`,
|
|
10
|
+
* apply, and conflict-resolution modules. Pure types, no runtime
|
|
11
|
+
* dependencies.
|
|
12
|
+
*
|
|
13
|
+
* Reference: `scripts/install.py`
|
|
14
|
+
* - `_file_entry()` → {@link FileEntry}
|
|
15
|
+
* - `class ConflictPolicy` → {@link ConflictPolicy}
|
|
16
|
+
* - v2 manifest `files_by_tool` → {@link InstallPlan.filesByTool}
|
|
17
|
+
*/
|
|
18
|
+
export {};
|
|
19
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/install/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG"}
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Wizard-state → {@link PlanSource}[] translator — Phase B2.
|
|
3
|
+
*
|
|
4
|
+
* The Preact wizard collects high-level identifiers (tool IDs like
|
|
5
|
+
* `cursor` / `augment`, capability-pack IDs like `founder-mvp`) and is
|
|
6
|
+
* deliberately ignorant of filesystem layout. This module is the
|
|
7
|
+
* server-side bridge that expands those IDs into the low-level
|
|
8
|
+
* `(srcDir, destDir, toolId, kind)` tuples consumed by
|
|
9
|
+
* {@link buildInstallPlan}.
|
|
10
|
+
*
|
|
11
|
+
* Mirrors the canonical mapping tables in
|
|
12
|
+
* `scripts/install.py:2029-2222`:
|
|
13
|
+
* - {@link USER_SCOPE_PATHS} ← `USER_SCOPE_PATHS`
|
|
14
|
+
* - {@link GLOBAL_DEPLOY_SOURCES} ← `_CLAUDE_SKILL_BUNDLE` + `GLOBAL_DEPLOY_SOURCES`
|
|
15
|
+
*
|
|
16
|
+
* Packs are intentionally NOT in this table: they are settings overlays
|
|
17
|
+
* (`packs/*.yml`), not file deployments. The 2PC settings write owns
|
|
18
|
+
* pack activation; the install plan only carries tool content.
|
|
19
|
+
*/
|
|
20
|
+
import { homedir } from 'node:os';
|
|
21
|
+
import { isAbsolute, join, resolve } from 'node:path';
|
|
22
|
+
import { buildInstallPlan } from './plan.js';
|
|
23
|
+
/**
|
|
24
|
+
* Per-tool user-scope anchor directory, mirrored 1:1 from
|
|
25
|
+
* `scripts/install.py:USER_SCOPE_PATHS`. Values may use `~` for the
|
|
26
|
+
* user's home directory; {@link expandAnchor} resolves it server-side.
|
|
27
|
+
*
|
|
28
|
+
* Tools without a user-scope directory convention (e.g. `claude-desktop`
|
|
29
|
+
* which writes a single marker file, or `aider` which writes a single
|
|
30
|
+
* YAML file) are still listed so the wizard's bridge logic in Phase A6
|
|
31
|
+
* can resolve them via {@link expandAnchor} when needed.
|
|
32
|
+
*/
|
|
33
|
+
export const USER_SCOPE_PATHS = {
|
|
34
|
+
'claude-code': '~/.claude/',
|
|
35
|
+
'claude-desktop': '~/Library/Application Support/Claude/',
|
|
36
|
+
cursor: '~/.cursor/',
|
|
37
|
+
windsurf: '~/.codeium/windsurf/',
|
|
38
|
+
cline: '~/Documents/Cline/Rules/',
|
|
39
|
+
'gemini-cli': '~/.gemini/',
|
|
40
|
+
copilot: '~/.copilot/',
|
|
41
|
+
augment: '~/.augment/',
|
|
42
|
+
aider: '~/.aider.conf.yml',
|
|
43
|
+
codex: '~/.codex/',
|
|
44
|
+
roocode: '~/.roo/',
|
|
45
|
+
continue: '~/.continue/',
|
|
46
|
+
kilocode: '~/.kilocode/',
|
|
47
|
+
zed: '~/.config/zed/',
|
|
48
|
+
jetbrains: '~/.config/JetBrains/',
|
|
49
|
+
kiro: '~/.kiro/',
|
|
50
|
+
qoder: '~/.qoder/',
|
|
51
|
+
opencode: '~/.opencode/',
|
|
52
|
+
trae: '~/.trae/',
|
|
53
|
+
antigravity: '~/.agents/',
|
|
54
|
+
codebuddy: '~/.codebuddy/',
|
|
55
|
+
droid: '~/.factory/',
|
|
56
|
+
warp: '~/.warp/',
|
|
57
|
+
};
|
|
58
|
+
/**
|
|
59
|
+
* Universal Anthropic-shaped skill bundle deployed to markdown-skills
|
|
60
|
+
* tools. Mirrors `_CLAUDE_SKILL_BUNDLE` in `scripts/install.py`.
|
|
61
|
+
*/
|
|
62
|
+
const CLAUDE_SKILL_BUNDLE = [
|
|
63
|
+
['.agent-src/rules', 'rules'],
|
|
64
|
+
['.agent-src/skills', 'skills'],
|
|
65
|
+
['.agent-src/personas', 'personas'],
|
|
66
|
+
];
|
|
67
|
+
/**
|
|
68
|
+
* Per-tool content deployment plan for `--global` installs. Each entry
|
|
69
|
+
* is a list of `(packageSrcRelative, destSubpath)` pairs.
|
|
70
|
+
*
|
|
71
|
+
* `packageSrcRelative` resolves against the agent-config package root;
|
|
72
|
+
* `destSubpath` is appended to `USER_SCOPE_PATHS[toolId]` (expanded).
|
|
73
|
+
*
|
|
74
|
+
* Mirrors `GLOBAL_DEPLOY_SOURCES` in `scripts/install.py:2178-2222`.
|
|
75
|
+
* Tools absent from this map have no deployable content in global scope
|
|
76
|
+
* — they either follow a marker-only convention (handled by bridges in
|
|
77
|
+
* Phase A6) or have no markdown convention at all.
|
|
78
|
+
*/
|
|
79
|
+
export const GLOBAL_DEPLOY_SOURCES = {
|
|
80
|
+
'claude-code': CLAUDE_SKILL_BUNDLE,
|
|
81
|
+
augment: [
|
|
82
|
+
['.agent-src/rules', 'rules'],
|
|
83
|
+
['.agent-src/skills', 'skills'],
|
|
84
|
+
['.agent-src/commands', 'commands'],
|
|
85
|
+
['.agent-src/contexts', 'contexts'],
|
|
86
|
+
['.agent-src/personas', 'personas'],
|
|
87
|
+
['.agent-src/templates', 'templates'],
|
|
88
|
+
],
|
|
89
|
+
cursor: [
|
|
90
|
+
['.agent-src/rules', 'rules'],
|
|
91
|
+
['.agent-src/commands', 'commands'],
|
|
92
|
+
['.agent-src/personas', 'personas'],
|
|
93
|
+
],
|
|
94
|
+
windsurf: [
|
|
95
|
+
['.agent-src/rules', 'rules'],
|
|
96
|
+
],
|
|
97
|
+
cline: [
|
|
98
|
+
['.agent-src/rules', ''],
|
|
99
|
+
],
|
|
100
|
+
'gemini-cli': CLAUDE_SKILL_BUNDLE,
|
|
101
|
+
codex: CLAUDE_SKILL_BUNDLE,
|
|
102
|
+
continue: CLAUDE_SKILL_BUNDLE,
|
|
103
|
+
roocode: CLAUDE_SKILL_BUNDLE,
|
|
104
|
+
kilocode: CLAUDE_SKILL_BUNDLE,
|
|
105
|
+
qoder: CLAUDE_SKILL_BUNDLE,
|
|
106
|
+
opencode: CLAUDE_SKILL_BUNDLE,
|
|
107
|
+
trae: CLAUDE_SKILL_BUNDLE,
|
|
108
|
+
antigravity: CLAUDE_SKILL_BUNDLE,
|
|
109
|
+
codebuddy: CLAUDE_SKILL_BUNDLE,
|
|
110
|
+
droid: CLAUDE_SKILL_BUNDLE,
|
|
111
|
+
warp: CLAUDE_SKILL_BUNDLE,
|
|
112
|
+
kiro: [
|
|
113
|
+
['.agent-src/rules', 'rules'],
|
|
114
|
+
['.agent-src/skills', 'steering'],
|
|
115
|
+
['.agent-src/personas', 'personas'],
|
|
116
|
+
],
|
|
117
|
+
};
|
|
118
|
+
/**
|
|
119
|
+
* Resolve a `~/...` anchor against the user's home directory.
|
|
120
|
+
*
|
|
121
|
+
* Absolute paths (no `~` prefix) pass through unchanged. Empty string
|
|
122
|
+
* returns the home directory itself. Mirrors Python's `os.path.expanduser`.
|
|
123
|
+
*/
|
|
124
|
+
export function expandAnchor(anchor, home) {
|
|
125
|
+
const h = home ?? homedir();
|
|
126
|
+
if (anchor === '~')
|
|
127
|
+
return h;
|
|
128
|
+
if (anchor.startsWith('~/'))
|
|
129
|
+
return join(h, anchor.slice(2));
|
|
130
|
+
if (isAbsolute(anchor))
|
|
131
|
+
return anchor;
|
|
132
|
+
return resolve(anchor);
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Expand the wizard's `toolIds` selection into a flat list of
|
|
136
|
+
* {@link PlanSource} tuples for the global install target.
|
|
137
|
+
*
|
|
138
|
+
* For each tool ID present in {@link GLOBAL_DEPLOY_SOURCES}, emit one
|
|
139
|
+
* `PlanSource` per `(packageSrcRelative, destSubpath)` pair, with:
|
|
140
|
+
* - `srcDir` = `packageRoot/packageSrcRelative`
|
|
141
|
+
* - `destDir` = `expandAnchor(USER_SCOPE_PATHS[toolId])/destSubpath`
|
|
142
|
+
* - `kind` = `'deployed'` (we own these bytes)
|
|
143
|
+
*
|
|
144
|
+
* Tool IDs absent from {@link GLOBAL_DEPLOY_SOURCES} contribute zero
|
|
145
|
+
* sources — they are either marker-only (Phase A6 bridges handle them)
|
|
146
|
+
* or have no markdown convention. Unknown tool IDs (not in any map) are
|
|
147
|
+
* silently ignored — the detect/plan layer is the gatekeeper for
|
|
148
|
+
* enable/disable, not this expander.
|
|
149
|
+
*/
|
|
150
|
+
export function expandWizardSources(inputs) {
|
|
151
|
+
const { toolIds, packageRoot, home } = inputs;
|
|
152
|
+
const out = [];
|
|
153
|
+
for (const toolId of toolIds) {
|
|
154
|
+
const deploy = GLOBAL_DEPLOY_SOURCES[toolId];
|
|
155
|
+
const anchor = USER_SCOPE_PATHS[toolId];
|
|
156
|
+
if (!deploy || !anchor)
|
|
157
|
+
continue;
|
|
158
|
+
const destRoot = expandAnchor(anchor, home);
|
|
159
|
+
for (const [srcRel, destSub] of deploy) {
|
|
160
|
+
const srcDir = join(packageRoot, srcRel);
|
|
161
|
+
const destDir = destSub.length === 0 ? destRoot : join(destRoot, destSub);
|
|
162
|
+
out.push({ toolId, srcDir, destDir, kind: 'deployed' });
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
return out;
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Build an {@link InstallPlan} directly from a wizard selection.
|
|
169
|
+
*
|
|
170
|
+
* Thin convenience over {@link expandWizardSources} +
|
|
171
|
+
* {@link buildInstallPlan}. Returns an empty-`filesByTool` plan when
|
|
172
|
+
* the selection contains zero deployable tool IDs — the wizard renders
|
|
173
|
+
* the "nothing to do" screen on that shape.
|
|
174
|
+
*/
|
|
175
|
+
export function buildPlanFromWizard(inputs) {
|
|
176
|
+
const sources = expandWizardSources(inputs);
|
|
177
|
+
return buildInstallPlan({
|
|
178
|
+
target: inputs.target,
|
|
179
|
+
root: inputs.root,
|
|
180
|
+
sources,
|
|
181
|
+
policy: inputs.policy,
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
//# sourceMappingURL=wizard-plan.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wizard-plan.js","sourceRoot":"","sources":["../../src/install/wizard-plan.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"discovery": {
|
|
3
|
-
"artefact_count":
|
|
4
|
-
"scanner_version": "
|
|
3
|
+
"artefact_count": 432,
|
|
4
|
+
"scanner_version": "b59a6d49e745"
|
|
5
5
|
},
|
|
6
|
-
"generated_at": "2026-05-
|
|
6
|
+
"generated_at": "2026-05-27",
|
|
7
7
|
"package": {
|
|
8
8
|
"description": "Universal AI Agent OS \u2014 audited skills, governance rules, commands, and templates for AI coding tools (Claude Code, Cursor, Windsurf, Copilot).",
|
|
9
9
|
"homepage": "https://github.com/event4u-app/agent-config#readme",
|
|
10
10
|
"name": "@event4u/agent-config",
|
|
11
11
|
"repository": "https://github.com/event4u-app/agent-config",
|
|
12
|
-
"version": "
|
|
12
|
+
"version": "4.2.0"
|
|
13
13
|
},
|
|
14
14
|
"registries": [
|
|
15
15
|
{
|