@event4u/agent-config 14.23.0 → 16.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.augment-plugin/marketplace.json +3 -3
- package/.augment-plugin/plugin.json +1 -1
- package/.claude-plugin/marketplace.json +1 -1
- package/CHANGELOG.md +144 -152
- package/README.md +1 -1
- package/dist/agent-src/commands/agent-handoff.md +8 -7
- package/dist/agent-src/commands/agents/init.md +1 -1
- package/dist/agent-src/commands/agents/user/accept.md +4 -4
- package/dist/agent-src/commands/agents/user/delete.md +2 -2
- package/dist/agent-src/commands/agents/user/init.md +3 -3
- package/dist/agent-src/commands/agents/user/review.md +3 -3
- package/dist/agent-src/commands/agents/user/show.md +3 -3
- package/dist/agent-src/commands/agents/user/update.md +2 -2
- package/dist/agent-src/commands/agents/user.md +6 -6
- package/dist/agent-src/commands/analytics/prune.md +1 -1
- package/dist/agent-src/commands/analytics/show.md +2 -2
- package/dist/agent-src/commands/analyze/decision.md +2 -2
- package/dist/agent-src/commands/analyze/inbox.md +5 -5
- package/dist/agent-src/commands/analyze/incident.md +3 -3
- package/dist/agent-src/commands/analyze/near-miss.md +3 -3
- package/dist/agent-src/commands/analyze/postmortem.md +4 -4
- package/dist/agent-src/commands/analyze/premortem.md +2 -2
- package/dist/agent-src/commands/analyze.md +2 -2
- package/dist/agent-src/commands/bug/fix.md +1 -1
- package/dist/agent-src/commands/bug/investigate.md +2 -2
- package/dist/agent-src/commands/cost/profile.md +3 -3
- package/dist/agent-src/commands/design.md +1 -1
- package/dist/agent-src/commands/feature/explore.md +1 -1
- package/dist/agent-src/commands/feature/plan.md +2 -2
- package/dist/agent-src/commands/feature/roadmap.md +2 -2
- package/dist/agent-src/commands/ghostwriter/fetch.md +4 -4
- package/dist/agent-src/commands/ghostwriter/list.md +1 -1
- package/dist/agent-src/commands/ghostwriter/show.md +1 -1
- package/dist/agent-src/commands/ghostwriter/write.md +9 -9
- package/dist/agent-src/commands/humanize.md +6 -6
- package/dist/agent-src/commands/jira-ticket.md +1 -1
- package/dist/agent-src/commands/judge/solo.md +1 -1
- package/dist/agent-src/commands/judge.md +1 -1
- package/dist/agent-src/commands/knowledge/cross-repo.md +1 -1
- package/dist/agent-src/commands/knowledge/forget.md +1 -1
- package/dist/agent-src/commands/knowledge/ingest.md +2 -2
- package/dist/agent-src/commands/knowledge/list.md +1 -1
- package/dist/agent-src/commands/memory/add.md +3 -3
- package/dist/agent-src/commands/memory/load.md +4 -4
- package/dist/agent-src/commands/memory/mine-session.md +1 -1
- package/dist/agent-src/commands/memory/promote.md +4 -4
- package/dist/agent-src/commands/memory/propose.md +2 -2
- package/dist/agent-src/commands/mode.md +5 -5
- package/dist/agent-src/commands/post-as/ghostwriter.md +3 -3
- package/dist/agent-src/commands/post-as/me.md +7 -7
- package/dist/agent-src/commands/pr/create.md +1 -1
- package/dist/agent-src/commands/pr/merge.md +1 -1
- package/dist/agent-src/commands/profile/activate.md +1 -1
- package/dist/agent-src/commands/profile/show.md +1 -1
- package/dist/agent-src/commands/research/deep.md +2 -2
- package/dist/agent-src/commands/research/report.md +2 -2
- package/dist/agent-src/commands/review/changes.md +1 -1
- package/dist/agent-src/commands/review/routing.md +1 -1
- package/dist/agent-src/commands/roadmap/create.md +4 -3
- package/dist/agent-src/commands/roadmap/materialize.md +2 -2
- package/dist/agent-src/commands/roadmap/next.md +1 -1
- package/dist/agent-src/commands/roadmap/process-full.md +2 -2
- package/dist/agent-src/commands/security-audit-config.md +3 -3
- package/dist/agent-src/commands/skill/preview.md +1 -1
- package/dist/agent-src/commands/skills/discover.md +1 -1
- package/dist/agent-src/commands/sync/agent-settings.md +2 -2
- package/dist/agent-src/commands/sync/gitignore/fix.md +1 -1
- package/dist/agent-src/commands/tests/create.md +1 -1
- package/dist/agent-src/commands/tests/e2e-heal.md +1 -1
- package/dist/agent-src/commands/tests/e2e-plan.md +1 -1
- package/dist/agent-src/contexts/authority/kernel-rule-edits.md +6 -6
- package/dist/agent-src/contexts/communication/rules-auto/slash-command-routing-policy-mechanics.md +1 -2
- package/dist/agent-src/contexts/communication/rules-auto/think-before-action-mechanics.md +2 -2
- package/dist/agent-src/contexts/communication/rules-auto/token-efficiency-mechanics.md +88 -1
- package/dist/agent-src/contexts/communication/rules-auto/user-interaction-mechanics.md +51 -1
- package/dist/agent-src/contexts/contracts/frugality-charter.md +1 -1
- package/dist/agent-src/contexts/execution/auto-dispatch-classification.md +1 -1
- package/dist/agent-src/contexts/execution/auto-orchestration-activation.md +1 -1
- package/dist/agent-src/contexts/execution/autonomy-mechanics.md +1 -1
- package/dist/agent-src/contexts/execution/cheap-question-mechanics.md +1 -1
- package/dist/agent-src/contexts/execution/contract-decision-sheet.md +3 -3
- package/dist/agent-src/contexts/execution/mandated-lines.md +1 -1
- package/dist/agent-src/contexts/execution/non-interactive-contract.md +1 -1
- package/dist/agent-src/contexts/execution/orchestration-telemetry.md +1 -1
- package/dist/agent-src/contexts/execution/plan-confidence-gate.md +5 -5
- package/dist/agent-src/contexts/execution/roadmap-execution-contract.md +1 -1
- package/dist/agent-src/contexts/execution/subagent-modes-detail.md +1 -1
- package/dist/agent-src/contexts/execution/subagent-routing.md +2 -2
- package/dist/agent-src/contexts/execution/subagent-spawn-contract.md +1 -1
- package/dist/agent-src/contexts/execution/user-memory-channels.md +3 -3
- package/dist/agent-src/contexts/execution/verification-mechanics.md +1 -1
- package/dist/agent-src/contexts/judges/persona-voice-rubric.md +2 -2
- package/dist/agent-src/guidelines/abstraction-thresholds.md +88 -0
- package/dist/agent-src/guidelines/agent-infra/5w2h-analysis.md +260 -0
- package/dist/agent-src/guidelines/agent-infra/active-remediation-mechanics.md +99 -0
- package/dist/agent-src/guidelines/agent-infra/agent-interaction-and-decision-quality.md +325 -0
- package/dist/agent-src/guidelines/agent-infra/api-cost-levers.md +177 -0
- package/dist/agent-src/guidelines/agent-infra/artifact-drafting-protocol-mechanics.md +222 -0
- package/dist/agent-src/guidelines/agent-infra/ask-when-uncertain-demos.md +134 -0
- package/dist/agent-src/guidelines/agent-infra/asking-and-brevity-examples.md +198 -0
- package/dist/agent-src/guidelines/agent-infra/break-glass-usage.md +113 -0
- package/dist/agent-src/guidelines/agent-infra/carve-out-predicates.md +17 -0
- package/dist/agent-src/guidelines/agent-infra/comparison-matrix.md +179 -0
- package/dist/agent-src/guidelines/agent-infra/context-hygiene-mechanics.md +165 -0
- package/dist/agent-src/guidelines/agent-infra/corpus-grounding-authoring.md +91 -0
- package/dist/agent-src/guidelines/agent-infra/critical-thinking.md +156 -0
- package/dist/agent-src/guidelines/agent-infra/cross-source-consistency-mechanics.md +109 -0
- package/dist/agent-src/guidelines/agent-infra/developer-judgment.md +82 -0
- package/dist/agent-src/guidelines/agent-infra/direct-answers-demos.md +142 -0
- package/dist/agent-src/guidelines/agent-infra/domain-adoption-gates.md +112 -0
- package/dist/agent-src/guidelines/agent-infra/domain-eval-anti-pattern.md +53 -0
- package/dist/agent-src/guidelines/agent-infra/domain-pack-architecture.md +56 -0
- package/dist/agent-src/guidelines/agent-infra/downstream-changes-mechanics.md +91 -0
- package/dist/agent-src/guidelines/agent-infra/emphasis-budget.md +45 -0
- package/dist/agent-src/guidelines/agent-infra/engineering-memory-data-format.md +210 -0
- package/dist/agent-src/guidelines/agent-infra/evaluator-independence-mechanics.md +92 -0
- package/dist/agent-src/guidelines/agent-infra/existence-question-verdicts.md +80 -0
- package/dist/agent-src/guidelines/agent-infra/failure-signatures.md +70 -0
- package/dist/agent-src/guidelines/agent-infra/false-green.md +233 -0
- package/dist/agent-src/guidelines/agent-infra/first-principles.md +192 -0
- package/dist/agent-src/guidelines/agent-infra/framework-neutrality-patterns.md +66 -0
- package/dist/agent-src/guidelines/agent-infra/frontier-reasoning-operating-profile.md +169 -0
- package/dist/agent-src/guidelines/agent-infra/gate-authoring.md +177 -0
- package/dist/agent-src/guidelines/agent-infra/guarded-baseline.md +39 -0
- package/dist/agent-src/guidelines/agent-infra/installed-tools-manifest.md +142 -0
- package/dist/agent-src/guidelines/agent-infra/inversion-thinking.md +388 -0
- package/dist/agent-src/guidelines/agent-infra/ios-simulator-guide.md +378 -0
- package/dist/agent-src/guidelines/agent-infra/language-and-tone-examples.md +141 -0
- package/dist/agent-src/guidelines/agent-infra/layered-settings.md +317 -0
- package/dist/agent-src/guidelines/agent-infra/linked-projects-onboarding-gate.md +80 -0
- package/dist/agent-src/guidelines/agent-infra/mcp-request-signing.md +197 -0
- package/dist/agent-src/guidelines/agent-infra/memory-access.md +149 -0
- package/dist/agent-src/guidelines/agent-infra/mental-models.md +314 -0
- package/dist/agent-src/guidelines/agent-infra/minimal-safe-diff-mechanics.md +241 -0
- package/dist/agent-src/guidelines/agent-infra/missing-tool-handling.md +66 -0
- package/dist/agent-src/guidelines/agent-infra/model-recommendation.md +101 -0
- package/dist/agent-src/guidelines/agent-infra/naming.md +69 -0
- package/dist/agent-src/guidelines/agent-infra/notes-horizon-mechanics.md +90 -0
- package/dist/agent-src/guidelines/agent-infra/output-patterns.md +117 -0
- package/dist/agent-src/guidelines/agent-infra/recurring-criticism-mechanics.md +96 -0
- package/dist/agent-src/guidelines/agent-infra/reuse-verdict-mechanics.md +71 -0
- package/dist/agent-src/guidelines/agent-infra/review-routing-data-format.md +143 -0
- package/dist/agent-src/guidelines/agent-infra/roadmap-deferred-resolution-provenance.md +54 -0
- package/dist/agent-src/guidelines/agent-infra/roadmap-progress-mechanics.md +274 -0
- package/dist/agent-src/guidelines/agent-infra/role-contracts.md +209 -0
- package/dist/agent-src/guidelines/agent-infra/role-mode-router.md +89 -0
- package/dist/agent-src/guidelines/agent-infra/rule-body-migration-inventory.md +241 -0
- package/dist/agent-src/guidelines/agent-infra/rule-type-governance.md +73 -0
- package/dist/agent-src/guidelines/agent-infra/runtime-layer.md +89 -0
- package/dist/agent-src/guidelines/agent-infra/scqa-framework.md +526 -0
- package/dist/agent-src/guidelines/agent-infra/security-lint-containment.md +121 -0
- package/dist/agent-src/guidelines/agent-infra/self-improvement-pipeline.md +134 -0
- package/dist/agent-src/guidelines/agent-infra/simplicity-and-goal-demos.md +211 -0
- package/dist/agent-src/guidelines/agent-infra/six-hats.md +353 -0
- package/dist/agent-src/guidelines/agent-infra/size-and-scope.md +229 -0
- package/dist/agent-src/guidelines/agent-infra/skill-quality-checklist.md +157 -0
- package/dist/agent-src/guidelines/agent-infra/source-confidentiality-mechanics.md +109 -0
- package/dist/agent-src/guidelines/agent-infra/symptom-driven-harvest-loop.md +104 -0
- package/dist/agent-src/guidelines/agent-infra/systems-thinking.md +220 -0
- package/dist/agent-src/guidelines/agent-infra/tool-description-as-policy.md +35 -0
- package/dist/agent-src/guidelines/agent-infra/tool-integration.md +73 -0
- package/dist/agent-src/guidelines/agent-infra/traceability-field-mechanics.md +50 -0
- package/dist/agent-src/guidelines/agent-infra/untrusted-input-spotlighting.md +166 -0
- package/dist/agent-src/guidelines/agent-infra/verify-before-complete-demos.md +128 -0
- package/dist/agent-src/guidelines/augment-portability-patterns.md +70 -0
- package/dist/agent-src/guidelines/code-clarity.md +350 -0
- package/dist/agent-src/guidelines/component-oriented-and-oop-development.md +189 -0
- package/dist/agent-src/guidelines/cross-role-handoff.md +127 -0
- package/dist/agent-src/guidelines/design-antipatterns-triggers.json +18 -0
- package/dist/agent-src/guidelines/design-antipatterns.md +327 -0
- package/dist/agent-src/guidelines/design-asset-discipline.md +38 -0
- package/dist/agent-src/guidelines/design-canon.md +63 -0
- package/dist/agent-src/guidelines/design-fidelity-mechanics.md +293 -0
- package/dist/agent-src/guidelines/design-fidelity-routing.md +78 -0
- package/dist/agent-src/guidelines/design-handover-extraction.md +117 -0
- package/dist/agent-src/guidelines/design-modes.md +143 -0
- package/dist/agent-src/guidelines/design-reconciliation.md +172 -0
- package/dist/agent-src/guidelines/docs/readme-size-and-splitting.md +209 -0
- package/dist/agent-src/guidelines/e2e/playwright.md +363 -0
- package/dist/agent-src/guidelines/gtm-handoff.md +114 -0
- package/dist/agent-src/guidelines/monorepo-antipatterns.md +141 -0
- package/dist/agent-src/guidelines/php/api-design.md +115 -0
- package/dist/agent-src/guidelines/php/artisan-commands.md +81 -0
- package/dist/agent-src/guidelines/php/blade-ui.md +78 -0
- package/dist/agent-src/guidelines/php/controllers.md +90 -0
- package/dist/agent-src/guidelines/php/database.md +194 -0
- package/dist/agent-src/guidelines/php/eloquent.md +208 -0
- package/dist/agent-src/guidelines/php/flux.md +80 -0
- package/dist/agent-src/guidelines/php/general.md +207 -0
- package/dist/agent-src/guidelines/php/git.md +164 -0
- package/dist/agent-src/guidelines/php/jobs.md +111 -0
- package/dist/agent-src/guidelines/php/livewire.md +71 -0
- package/dist/agent-src/guidelines/php/logging.md +79 -0
- package/dist/agent-src/guidelines/php/naming.md +89 -0
- package/dist/agent-src/guidelines/php/patterns/dependency-injection.md +57 -0
- package/dist/agent-src/guidelines/php/patterns/dtos.md +199 -0
- package/dist/agent-src/guidelines/php/patterns/events.md +67 -0
- package/dist/agent-src/guidelines/php/patterns/factory.md +53 -0
- package/dist/agent-src/guidelines/php/patterns/pipelines.md +66 -0
- package/dist/agent-src/guidelines/php/patterns/policies.md +66 -0
- package/dist/agent-src/guidelines/php/patterns/repositories.md +122 -0
- package/dist/agent-src/guidelines/php/patterns/service-layer.md +64 -0
- package/dist/agent-src/guidelines/php/patterns/strategy.md +247 -0
- package/dist/agent-src/guidelines/php/patterns.md +28 -0
- package/dist/agent-src/guidelines/php/performance.md +92 -0
- package/dist/agent-src/guidelines/php/php-coding-patterns.md +80 -0
- package/dist/agent-src/guidelines/php/resources.md +100 -0
- package/dist/agent-src/guidelines/php/security.md +110 -0
- package/dist/agent-src/guidelines/php/sql.md +97 -0
- package/dist/agent-src/guidelines/php/validations.md +119 -0
- package/dist/agent-src/guidelines/php/websocket.md +100 -0
- package/dist/agent-src/guidelines/prompt-templates.md +189 -0
- package/dist/agent-src/guidelines/redundancy-taxonomy.md +208 -0
- package/dist/agent-src/guidelines/wing4-handoff.md +127 -0
- package/dist/agent-src/personas/README.md +1 -1
- package/dist/agent-src/personas/_template-specialist/persona.md +1 -1
- package/dist/agent-src/personas/product-owner.md +1 -1
- package/dist/agent-src/rules/active-remediation.md +1 -1
- package/dist/agent-src/rules/architecture.md +2 -2
- package/dist/agent-src/rules/artifact-drafting-protocol.md +1 -1
- package/dist/agent-src/rules/ask-when-uncertain.md +2 -2
- package/dist/agent-src/rules/brand-source-of-truth.md +9 -7
- package/dist/agent-src/rules/code-comment-discipline.md +2 -2
- package/dist/agent-src/rules/code-provenance.md +1 -1
- package/dist/agent-src/rules/content-quoting-floor.md +1 -1
- package/dist/agent-src/rules/context-hygiene.md +5 -5
- package/dist/agent-src/rules/cross-source-consistency.md +1 -1
- package/dist/agent-src/rules/design-fidelity.md +36 -46
- package/dist/agent-src/rules/direct-answers.md +2 -2
- package/dist/agent-src/rules/domain-adoption-policy.md +1 -1
- package/dist/agent-src/rules/evaluator-independence.md +1 -1
- package/dist/agent-src/rules/framework-neutrality-in-generic-skills.md +1 -1
- package/dist/agent-src/rules/icon-consistency.md +5 -1
- package/dist/agent-src/rules/improve-before-implement.md +1 -1
- package/dist/agent-src/rules/language-and-tone.md +3 -3
- package/dist/agent-src/rules/minimal-safe-diff.md +1 -1
- package/dist/agent-src/rules/notes-first-reasoning.md +2 -2
- package/dist/agent-src/rules/recurring-criticism.md +1 -1
- package/dist/agent-src/rules/roadmap-progress-sync.md +1 -1
- package/dist/agent-src/rules/role-mode-adherence.md +2 -2
- package/dist/agent-src/rules/security-sensitive-stop.md +1 -1
- package/dist/agent-src/rules/size-enforcement.md +1 -1
- package/dist/agent-src/rules/source-confidentiality.md +2 -2
- package/dist/agent-src/rules/think-before-action.md +1 -1
- package/dist/agent-src/rules/token-efficiency.md +7 -5
- package/dist/agent-src/rules/ui-audit-gate.md +3 -2
- package/dist/agent-src/rules/untrusted-input-defense.md +3 -3
- package/dist/agent-src/rules/user-interaction.md +31 -30
- package/dist/agent-src/skills/activation-design/SKILL.md +2 -2
- package/dist/agent-src/skills/adr-create/SKILL.md +5 -5
- package/dist/agent-src/skills/ai-council/SKILL.md +1 -1
- package/dist/agent-src/skills/ai-council/references/advanced-modes.md +1 -1
- package/dist/agent-src/skills/blade-ui/SKILL.md +1 -1
- package/dist/agent-src/skills/blast-radius-analyzer/SKILL.md +1 -1
- package/dist/agent-src/skills/brand-to-tokens/SKILL.md +24 -3
- package/dist/agent-src/skills/bug-analyzer/SKILL.md +1 -1
- package/dist/agent-src/skills/build-buy-partner/SKILL.md +1 -1
- package/dist/agent-src/skills/churn-prevention/SKILL.md +2 -2
- package/dist/agent-src/skills/code-refactoring/SKILL.md +3 -3
- package/dist/agent-src/skills/code-review/SKILL.md +3 -3
- package/dist/agent-src/skills/command-writing/SKILL.md +3 -3
- package/dist/agent-src/skills/comp-banding/SKILL.md +1 -1
- package/dist/agent-src/skills/competitive-moat-analysis/SKILL.md +1 -1
- package/dist/agent-src/skills/competitive-positioning/SKILL.md +2 -2
- package/dist/agent-src/skills/complexity-first-planning/SKILL.md +1 -1
- package/dist/agent-src/skills/condense-memory/SKILL.md +1 -1
- package/dist/agent-src/skills/content-funnel-design/SKILL.md +2 -2
- package/dist/agent-src/skills/contracts-cognition/SKILL.md +1 -1
- package/dist/agent-src/skills/copilot-agents-optimization/SKILL.md +2 -2
- package/dist/agent-src/skills/corpus-grounding/SKILL.md +2 -2
- package/dist/agent-src/skills/customer-research/SKILL.md +2 -2
- package/dist/agent-src/skills/dashboard-design/SKILL.md +1 -1
- package/dist/agent-src/skills/data-handling-judgment/SKILL.md +1 -1
- package/dist/agent-src/skills/deal-qualification-meddic/SKILL.md +2 -2
- package/dist/agent-src/skills/decision-record/SKILL.md +3 -3
- package/dist/agent-src/skills/decision-review/SKILL.md +8 -8
- package/dist/agent-src/skills/deep-reading-analyst/SKILL.md +22 -22
- package/dist/agent-src/skills/design-intelligence/SKILL.md +4 -4
- package/dist/agent-src/skills/design-intelligence/references/context-and-registers.md +2 -2
- package/dist/agent-src/skills/design-review/SKILL.md +4 -4
- package/dist/agent-src/skills/design-system-capture/references/design-system-json.md +20 -1
- package/dist/agent-src/skills/design-tokens/SKILL.md +17 -2
- package/dist/agent-src/skills/design-variations/SKILL.md +2 -2
- package/dist/agent-src/skills/developer-like-execution/SKILL.md +2 -2
- package/dist/agent-src/skills/discovery-interview/SKILL.md +2 -2
- package/dist/agent-src/skills/doc-coauthoring/SKILL.md +3 -3
- package/dist/agent-src/skills/editorial-calendar/SKILL.md +2 -2
- package/dist/agent-src/skills/error-handling-patterns/SKILL.md +9 -0
- package/dist/agent-src/skills/existing-ui-audit/SKILL.md +44 -1
- package/dist/agent-src/skills/existing-ui-audit/references/anti-slop-cross-reference.md +2 -2
- package/dist/agent-src/skills/expansion-playbook/SKILL.md +2 -2
- package/dist/agent-src/skills/experiment-loop/SKILL.md +1 -1
- package/dist/agent-src/skills/experiment-loop/references/protocol.md +1 -1
- package/dist/agent-src/skills/fe-design/SKILL.md +3 -3
- package/dist/agent-src/skills/fe-design/references/design-patterns.md +1 -1
- package/dist/agent-src/skills/fe-design/references/design-read-and-memory.md +3 -3
- package/dist/agent-src/skills/fe-design/references/source-led-port.md +1 -1
- package/dist/agent-src/skills/feature-planning/SKILL.md +1 -1
- package/dist/agent-src/skills/flux/SKILL.md +1 -1
- package/dist/agent-src/skills/forecast-accuracy/SKILL.md +2 -2
- package/dist/agent-src/skills/forecasting/SKILL.md +2 -2
- package/dist/agent-src/skills/fundraising-narrative/SKILL.md +2 -2
- package/dist/agent-src/skills/funnel-analysis/SKILL.md +2 -2
- package/dist/agent-src/skills/gtm-launch/SKILL.md +2 -2
- package/dist/agent-src/skills/hiring-loop-design/SKILL.md +1 -1
- package/dist/agent-src/skills/html-deck/SKILL.md +5 -5
- package/dist/agent-src/skills/humanizer/SKILL.md +1 -1
- package/dist/agent-src/skills/humanizer/data/patterns.md +1 -1
- package/dist/agent-src/skills/iconography/SKILL.md +3 -3
- package/dist/agent-src/skills/judge-synthesis/SKILL.md +1 -1
- package/dist/agent-src/skills/laravel-api-endpoint/SKILL.md +2 -2
- package/dist/agent-src/skills/launch-readiness/SKILL.md +3 -3
- package/dist/agent-src/skills/learning-to-rule-or-skill/SKILL.md +6 -6
- package/dist/agent-src/skills/livewire/SKILL.md +1 -1
- package/dist/agent-src/skills/market-entry-analysis/SKILL.md +1 -1
- package/dist/agent-src/skills/mcp-builder/SKILL.md +1 -1
- package/dist/agent-src/skills/memory-consolidation/SKILL.md +3 -3
- package/dist/agent-src/skills/messaging-architecture/SKILL.md +2 -2
- package/dist/agent-src/skills/monorepo-workspace/SKILL.md +1 -1
- package/dist/agent-src/skills/onboarding-design/SKILL.md +2 -2
- package/dist/agent-src/skills/onboarding-program/SKILL.md +1 -1
- package/dist/agent-src/skills/one-on-one-cadence/SKILL.md +1 -1
- package/dist/agent-src/skills/org-design/SKILL.md +1 -1
- package/dist/agent-src/skills/overbuild-review-lens/SKILL.md +3 -3
- package/dist/agent-src/skills/override-management/SKILL.md +1 -1
- package/dist/agent-src/skills/perf-feedback-craft/SKILL.md +1 -1
- package/dist/agent-src/skills/persona-writing/SKILL.md +1 -1
- package/dist/agent-src/skills/php-coder/SKILL.md +1 -1
- package/dist/agent-src/skills/pipeline-strategy/SKILL.md +2 -2
- package/dist/agent-src/skills/playwright-testing/SKILL.md +3 -3
- package/dist/agent-src/skills/po-discovery/SKILL.md +1 -1
- package/dist/agent-src/skills/positioning-strategy/SKILL.md +2 -2
- package/dist/agent-src/skills/privacy-review/SKILL.md +1 -1
- package/dist/agent-src/skills/prompt-optimizer/SKILL.md +3 -3
- package/dist/agent-src/skills/react-shadcn-ui/SKILL.md +1 -1
- package/dist/agent-src/skills/reasoning-orchestrator/SKILL.md +2 -2
- package/dist/agent-src/skills/receiving-code-review/SKILL.md +1 -1
- package/dist/agent-src/skills/refine-ticket/SKILL.md +2 -2
- package/dist/agent-src/skills/release-comms/SKILL.md +2 -2
- package/dist/agent-src/skills/retention-loops/SKILL.md +2 -2
- package/dist/agent-src/skills/review-routing/SKILL.md +2 -2
- package/dist/agent-src/skills/roadmap-management/SKILL.md +1 -1
- package/dist/agent-src/skills/roadmap-management/references/archival.md +1 -1
- package/dist/agent-src/skills/roadmap-writing/SKILL.md +5 -5
- package/dist/agent-src/skills/rule-writing/SKILL.md +6 -6
- package/dist/agent-src/skills/runway-cognition/SKILL.md +2 -2
- package/dist/agent-src/skills/scenario-modeling/SKILL.md +2 -2
- package/dist/agent-src/skills/skill-writing/SKILL.md +2 -2
- package/dist/agent-src/skills/skill-writing/references/procedure.md +1 -1
- package/dist/agent-src/skills/skill-writing/references/section-patterns.md +3 -3
- package/dist/agent-src/skills/spreadsheet-authoring/SKILL.md +1 -1
- package/dist/agent-src/skills/stakeholder-tradeoff/SKILL.md +3 -3
- package/dist/agent-src/skills/subagent-orchestration/SKILL.md +1 -1
- package/dist/agent-src/skills/supply-chain-intake/SKILL.md +1 -1
- package/dist/agent-src/skills/systematic-debugging/SKILL.md +2 -2
- package/dist/agent-src/skills/tailwind-engineer/SKILL.md +11 -5
- package/dist/agent-src/skills/throughput-vs-morale-tradeoff/SKILL.md +1 -1
- package/dist/agent-src/skills/token-optimizer/SKILL.md +1 -1
- package/dist/agent-src/skills/typography-system/SKILL.md +2 -2
- package/dist/agent-src/skills/ui-component-architect/SKILL.md +28 -8
- package/dist/agent-src/skills/unit-economics-modeling/SKILL.md +2 -2
- package/dist/agent-src/skills/upstream-contribute/SKILL.md +1 -1
- package/dist/agent-src/skills/validate-feature-fit/SKILL.md +2 -2
- package/dist/agent-src/skills/verify-repair-loop/SKILL.md +2 -2
- package/dist/agent-src/skills/vision-articulation/SKILL.md +1 -1
- package/dist/agent-src/skills/voc-extract/SKILL.md +2 -2
- package/dist/agent-src/skills/voice-and-tone-design/SKILL.md +2 -2
- package/dist/agent-src/skills/wireframe/SKILL.md +1 -1
- package/dist/agent-src/skills/workspace-link/SKILL.md +1 -1
- package/dist/agent-src/templates/agent-settings.md +6 -6
- package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
- package/dist/agent-src/templates/contexts/knowledge-pages.md +2 -3
- package/dist/agent-src/templates/copilot-instructions.md +1 -1
- package/dist/agent-src/templates/roadmaps.md +1 -1
- package/dist/agent-src/templates/scripts/README.md +2 -2
- package/dist/agent-src/user-types/_template/user-type.md +1 -1
- package/dist/cli-delegate/check_update_banner.js +12 -1
- package/dist/cli-delegate/{chunk-NLP54U3J.js → chunk-2XY7ILBT.js} +13 -1
- package/dist/cli-delegate/{chunk-IAI3XL43.js → chunk-3FKR64R5.js} +22 -6
- package/dist/cli-delegate/{chunk-J3RFNKG4.js → chunk-55ACLDUE.js} +2 -2
- package/dist/cli-delegate/{chunk-PKOBQADP.js → chunk-57PN4GYJ.js} +1 -1
- package/dist/cli-delegate/{chunk-KCNTUSPI.js → chunk-AK6HODNQ.js} +4 -4
- package/dist/cli-delegate/{chunk-2FTMENJL.js → chunk-GYC3VRYN.js} +1 -1
- package/dist/cli-delegate/{chunk-LWTYTX6F.js → chunk-H32DGUJH.js} +15 -84
- package/dist/cli-delegate/{chunk-6RJA2F5A.js → chunk-IVBPRCQO.js} +1 -1
- package/dist/cli-delegate/chunk-NUHLI2RX.js +80 -0
- package/dist/cli-delegate/{chunk-TYSY33MD.js → chunk-QJWAUMJW.js} +12 -2
- package/dist/cli-delegate/{chunk-2KKXJW25.js → chunk-S3VFXMTM.js} +1 -1
- package/dist/cli-delegate/{chunk-I6RHFQEG.js → chunk-YUM5KURG.js} +17 -1
- package/dist/cli-delegate/cmd_analyze_session.js +1 -1
- package/dist/cli-delegate/cmd_brand_status.js +1 -1
- package/dist/cli-delegate/cmd_conformance.js +834 -275
- package/dist/cli-delegate/cmd_doctor.js +3 -3
- package/dist/cli-delegate/cmd_explain.js +5 -3
- package/dist/cli-delegate/cmd_export.js +4 -4
- package/dist/cli-delegate/cmd_handoff.js +6 -6
- package/dist/cli-delegate/cmd_mcp_available.js +1 -1
- package/dist/cli-delegate/cmd_memory_get.js +1 -1
- package/dist/cli-delegate/cmd_migrate.js +2 -2
- package/dist/cli-delegate/cmd_packs_active.js +3 -2
- package/dist/cli-delegate/cmd_prune.js +4 -4
- package/dist/cli-delegate/cmd_route_audit.js +3 -3
- package/dist/cli-delegate/cmd_route_explain.js +1 -1
- package/dist/cli-delegate/cmd_session_recycle.js +3 -3
- package/dist/cli-delegate/cmd_settings_get.js +15 -9
- package/dist/cli-delegate/cmd_settings_migrate.js +4 -4
- package/dist/cli-delegate/cmd_settings_set.js +54 -11
- package/dist/cli-delegate/cmd_sync.js +4 -4
- package/dist/cli-delegate/cmd_uninstall.js +4 -4
- package/dist/cli-delegate/cmd_update.js +1 -1
- package/dist/cli-delegate/cmd_upgrade.js +1 -1
- package/dist/cli-delegate/cmd_validate.js +4 -4
- package/dist/cli-delegate/cmd_versions.js +1 -1
- package/dist/discovery/deprecation-report.md +1 -1
- package/dist/discovery/discovery-manifest.json +25 -78
- package/dist/discovery/discovery-manifest.json.sha256 +1 -1
- package/dist/discovery/discovery-manifest.summary.md +3 -3
- package/dist/discovery/dormancy-report.md +1 -1
- package/dist/discovery/orphan-report.md +1 -1
- package/dist/discovery/packs.json +5 -7
- package/dist/discovery/trust-report.md +2 -2
- package/dist/discovery/workspaces.json +4 -6
- package/dist/hooks/dispatch.js +9684 -9304
- package/dist/install/install.mjs +36 -8
- package/dist/mcp/registry-manifest.json +3 -3
- package/dist/mcp/server.json +2 -2
- package/dist/mcp/server.mjs +2147 -1470
- package/dist/router.json +1 -1
- package/dist/scripts/_lib/agent_settings.js +73 -0
- package/dist/scripts/_lib/agent_src.js +20 -0
- package/dist/scripts/_lib/guidelines_lane.js +158 -0
- package/dist/scripts/_lib/installed_lock.js +1 -1
- package/dist/scripts/condense.js +2 -5
- package/dist/server/io/yamlIO.js +175 -17
- package/dist/server/schemas/settings.js +18 -4
- package/dist/shared/settingsSurface.js +6 -1
- package/docs/contracts/settings-classes.md +18 -9
- package/docs/guidelines/abstraction-thresholds.md +35 -0
- package/docs/guidelines/agent-infra/active-remediation-mechanics.md +3 -3
- package/docs/guidelines/agent-infra/false-green.md +2 -2
- package/docs/guidelines/agent-infra/roadmap-progress-mechanics.md +1 -1
- package/docs/guidelines/agent-infra/skill-quality-checklist.md +1 -1
- package/docs/guidelines/design-fidelity-mechanics.md +4 -0
- package/docs/guidelines/design-fidelity-routing.md +78 -0
- package/docs/guidelines/design-reconciliation.md +172 -0
- package/docs/guidelines/gtm-handoff.md +2 -2
- package/docs/guidelines/wing4-handoff.md +2 -2
- package/package.json +7 -3
- package/src/config/agent-settings.template.yml +55 -8
- package/src/config/ci-local-parity.yml +34 -0
- package/src/config/continuity-surface.json +11 -32
- package/src/config/gate-coverage.yml +31 -8
- package/src/config/gate-reachability-exemptions.json +1 -0
- package/src/config/gate-violation-baselines.json +3 -3
- package/src/config/hook-token-budget.json +1 -1
- package/src/config/host-injection-effect.json +2 -2
- package/src/config/pack-size-budget.json +55 -4
- package/src/config/platform-anchor.json +47 -0
- package/src/config/preamble-payload-budget.json +12 -8
- package/src/config/preamble-payload-exceptions.json +28 -0
- package/src/config/publish-surface.json +4 -2
- package/src/config/ratification-policy.json +7 -0
- package/src/config/rule-stub-ceilings.json +16 -9
- package/src/scripts/_cli/cmd_settings_get.ts +22 -7
- package/src/scripts/_dispatch.bash +3 -1
- package/src/scripts/_lib/agent_settings.ts +85 -0
- package/src/scripts/_lib/agent_src.ts +21 -0
- package/src/scripts/_lib/artifact_maturity.ts +242 -0
- package/src/scripts/_lib/base_ref_payload.ts +315 -0
- package/src/scripts/_lib/conformance_report.ts +403 -0
- package/src/scripts/_lib/continuity_writer.ts +72 -13
- package/src/scripts/_lib/design_system_import.ts +20 -0
- package/src/scripts/_lib/design_tolerance.ts +281 -0
- package/src/scripts/_lib/dropped_decision.ts +142 -0
- package/src/scripts/_lib/guidelines_lane.ts +164 -0
- package/src/scripts/_lib/installed_lock.ts +1 -1
- package/src/scripts/_lib/measured_payload_ceiling.ts +424 -0
- package/src/scripts/_lib/obligation_frequency.ts +2 -3
- package/src/scripts/_lib/payload_catalogue_completeness.ts +211 -0
- package/src/scripts/_lib/platform_anchor.ts +1053 -0
- package/src/scripts/_lib/ratification_artifact.ts +278 -0
- package/src/scripts/_lib/release_findings_ingest.ts +324 -0
- package/src/scripts/_lib/release_tag_dispatch.ts +63 -0
- package/src/scripts/_lib/review_baseline.ts +254 -0
- package/src/scripts/_lib/review_skipped_record.ts +61 -1
- package/src/scripts/_lib/security_lint.ts +23 -2
- package/src/scripts/_lib/self_repair.ts +21 -0
- package/src/scripts/_lib/session_index_trust.ts +42 -1
- package/src/scripts/_lib/standing_bound_ratchet.ts +267 -88
- package/src/scripts/_lib/tolerance_shadow.ts +177 -0
- package/src/scripts/_lib/turn_end_refusals.ts +51 -4
- package/src/scripts/ai_council/redact_low_impact_entry.ts +8 -0
- package/src/scripts/autonomy_friction_traffic.ts +379 -0
- package/src/scripts/check_beta_review_markers.ts +35 -4
- package/src/scripts/check_finding_dispositions.ts +167 -16
- package/src/scripts/check_held_object_arrivals.ts +381 -0
- package/src/scripts/check_kernel_edit_ratified.ts +462 -0
- package/src/scripts/check_loss_class_declared.ts +793 -46
- package/src/scripts/check_platform_anchor.ts +390 -0
- package/src/scripts/check_preamble_payload_budget.ts +672 -107
- package/src/scripts/check_projected_rule_routes.ts +395 -0
- package/src/scripts/check_release_published.ts +1 -1
- package/src/scripts/check_reply_consistency.ts +86 -17
- package/src/scripts/code_graph/cli.ts +6 -0
- package/src/scripts/condense.ts +2 -6
- package/src/scripts/generate_host_cost_table.ts +354 -0
- package/src/scripts/hook_manifest.json +1 -1
- package/src/scripts/hook_manifest.yaml +74 -30
- package/src/scripts/hooks/block_kernel_rule_writes.ts +12 -2
- package/src/scripts/hooks/category_a.ts +1 -1
- package/src/scripts/hooks/chain_nudge_hook.ts +311 -25
- package/src/scripts/hooks/concern_registry.ts +2 -0
- package/src/scripts/hooks/end_review_nudge_hook.ts +101 -21
- package/src/scripts/hooks/review_baseline_hook.ts +130 -0
- package/src/scripts/hooks/session_eol_hook.ts +68 -154
- package/src/scripts/hooks/source_first_gate_hook.ts +12 -0
- package/src/scripts/hooks/turn_end_gate_hook.ts +232 -14
- package/src/scripts/hooks/ui_route_nudge_hook.ts +52 -15
- package/src/scripts/hooks_doctor.ts +4 -1
- package/src/scripts/hot_context_hook.ts +41 -401
- package/src/scripts/install.ts +1 -1
- package/src/scripts/interruption_report.ts +8 -2
- package/src/scripts/janitor.ts +8 -1
- package/src/scripts/lint_evidence_artifacts.ts +1 -0
- package/src/scripts/lint_knowledge_scale.ts +0 -26
- package/src/scripts/measure_turn_end_gate.ts +302 -5
- package/src/scripts/memory_lookup.ts +9 -9
- package/src/scripts/release.ts +52 -64
- package/src/scripts/release_drill.ts +193 -14
- package/src/scripts/release_env.ts +1 -1
- package/src/scripts/release_publication.ts +1 -1
- package/src/scripts/report_held_object_arrivals.ts +456 -0
- package/src/scripts/report_standing_payload_by_host.ts +7 -7
- package/src/scripts/session_memory_index.ts +5 -0
- package/src/scripts/sync_agent_settings.ts +394 -12
- package/src/server/io/yamlIO.ts +175 -17
- package/src/server/schemas/settings.ts +25 -5
- package/src/shared/settingsSurface.ts +13 -2
- package/src/templates/compact-instructions.md +8 -3
- package/dist/agent-src/commands/chat-history/import.md +0 -170
- package/dist/agent-src/commands/chat-history.md +0 -63
|
@@ -0,0 +1,456 @@
|
|
|
1
|
+
#!/usr/bin/env tsx
|
|
2
|
+
/**
|
|
3
|
+
* How many distinct consumed-inbox rounds raise a held object's subject.
|
|
4
|
+
*
|
|
5
|
+
* WHY A REPORTER AND NOT A GATE
|
|
6
|
+
* -----------------------------
|
|
7
|
+
* The count belongs on the held object as a human-authored line, so that a
|
|
8
|
+
* number arrives with a reason attached. This script derives the figure and
|
|
9
|
+
* prints it; it writes nothing, and the absence of any write is the contract.
|
|
10
|
+
* A generated counter would be a number nobody chose, and the first time it
|
|
11
|
+
* disagreed with the prose beside it the prose would be believed.
|
|
12
|
+
*
|
|
13
|
+
* THE UNIT IS A ROUND, NEVER A FILE
|
|
14
|
+
* ---------------------------------
|
|
15
|
+
* One round can carry a dozen revisions of the same argument. Counting files
|
|
16
|
+
* turns a single arrival into twelve, which inflates exactly the figure this
|
|
17
|
+
* practice exists to make trustworthy. So the unit is a top-level entry of the
|
|
18
|
+
* consumed-inbox tree: a directory is one round however many files it holds,
|
|
19
|
+
* and a loose file dropped at the top level is a round of one. Both are one
|
|
20
|
+
* arrival of the subject, and the report prints the split so a reader can tell
|
|
21
|
+
* which kind they are looking at.
|
|
22
|
+
*
|
|
23
|
+
* NOT-READABLE IS NOT ZERO
|
|
24
|
+
* ------------------------
|
|
25
|
+
* The consumed-inbox tree is gitignored and machine-local. A clone, a fresh
|
|
26
|
+
* worktree and CI all see no tree at all. Reporting that as "0 arrivals" would
|
|
27
|
+
* publish the strongest possible claim from the weakest possible evidence, so
|
|
28
|
+
* an unreachable tree exits 0 saying no prior rounds are readable, and prints
|
|
29
|
+
* no count at all.
|
|
30
|
+
*
|
|
31
|
+
* WHAT THE NUMBER IS NOT
|
|
32
|
+
* ----------------------
|
|
33
|
+
* It is a floor on recurrence over one machine's store, under one pattern. A
|
|
34
|
+
* narrower pattern reads lower and a broader one sweeps in incidental
|
|
35
|
+
* mentions, which is why the pattern and its provenance are printed beside
|
|
36
|
+
* every figure. Two counters written on different days under different
|
|
37
|
+
* patterns are not comparable, and this script's whole purpose is to make the
|
|
38
|
+
* pattern explicit so the next one can be.
|
|
39
|
+
*
|
|
40
|
+
* Exit: 0 always, except a usage error (2). It gates on nothing.
|
|
41
|
+
*/
|
|
42
|
+
|
|
43
|
+
import * as fs from 'node:fs';
|
|
44
|
+
import * as path from 'node:path';
|
|
45
|
+
import { fileURLToPath, pathToFileURL } from 'node:url';
|
|
46
|
+
|
|
47
|
+
const _HERE = path.resolve(fileURLToPath(import.meta.url));
|
|
48
|
+
const REPO_ROOT = path.resolve(path.dirname(_HERE), '..', '..');
|
|
49
|
+
|
|
50
|
+
/** Where a held object lives, relative to a repository root. */
|
|
51
|
+
export const HELD_DIRS = ['agents/roadmaps/stubs', 'agents/roadmaps/later'] as const;
|
|
52
|
+
|
|
53
|
+
/** The consumed-inbox tree, relative to a repository root. */
|
|
54
|
+
export const INBOX_REL = 'agents/tmp.old';
|
|
55
|
+
|
|
56
|
+
/** A held object may declare the pattern its counter was measured under. */
|
|
57
|
+
const SUBJECT_MARKER = /<!--\s*arrival-subject:\s*(.+?)\s*-->/;
|
|
58
|
+
|
|
59
|
+
/** Biggest file the scanner will read. Above it the file is skipped and counted as skipped. */
|
|
60
|
+
const MAX_FILE_BYTES = 8 * 1024 * 1024;
|
|
61
|
+
|
|
62
|
+
export type TreeOrigin =
|
|
63
|
+
| 'flag'
|
|
64
|
+
| 'env'
|
|
65
|
+
| 'repo-root'
|
|
66
|
+
| 'main-checkout'
|
|
67
|
+
| 'project-dir'
|
|
68
|
+
| 'unreadable';
|
|
69
|
+
|
|
70
|
+
export interface TreeResolution {
|
|
71
|
+
/** Absolute path to the tree, or null when nothing readable was found. */
|
|
72
|
+
dir: string | null;
|
|
73
|
+
/** Which candidate answered — printed so a figure carries its provenance. */
|
|
74
|
+
origin: TreeOrigin;
|
|
75
|
+
/** Every candidate considered, in order, with whether it resolved. */
|
|
76
|
+
tried: ReadonlyArray<{ origin: TreeOrigin; dir: string; readable: boolean }>;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
function isReadableDir(dir: string): boolean {
|
|
80
|
+
try {
|
|
81
|
+
return fs.statSync(dir).isDirectory();
|
|
82
|
+
} catch {
|
|
83
|
+
return false;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* The main checkout behind a linked git worktree, or null.
|
|
89
|
+
*
|
|
90
|
+
* Read off the filesystem rather than by shelling out. In a linked worktree
|
|
91
|
+
* `.git` is a file whose one line points at `<main>/.git/worktrees/<name>`, so
|
|
92
|
+
* the main root is three levels above it. No subprocess, which matters because
|
|
93
|
+
* an inherited git directory has already broken gates in this tree once.
|
|
94
|
+
*/
|
|
95
|
+
export function mainCheckoutOf(root: string): string | null {
|
|
96
|
+
const dotGit = path.join(root, '.git');
|
|
97
|
+
let raw: string;
|
|
98
|
+
try {
|
|
99
|
+
if (!fs.statSync(dotGit).isFile()) return null;
|
|
100
|
+
raw = fs.readFileSync(dotGit, 'utf8');
|
|
101
|
+
} catch {
|
|
102
|
+
return null;
|
|
103
|
+
}
|
|
104
|
+
const m = /^gitdir:\s*(.+)$/m.exec(raw);
|
|
105
|
+
if (m === null) return null;
|
|
106
|
+
const gitdir = path.resolve(root, m[1]?.trim() ?? '');
|
|
107
|
+
// <main>/.git/worktrees/<name> -> <main>
|
|
108
|
+
const worktrees = path.dirname(gitdir);
|
|
109
|
+
if (path.basename(worktrees) !== 'worktrees') return null;
|
|
110
|
+
return path.dirname(path.dirname(worktrees));
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* Find the consumed-inbox tree, reporting which candidate answered.
|
|
115
|
+
*
|
|
116
|
+
* AN EXPLICIT TREE OVERRIDES; IT DOES NOT COMPETE
|
|
117
|
+
* -----------------------------------------------
|
|
118
|
+
* A tree named on the command line or in the environment is the answer, even
|
|
119
|
+
* when it is unreadable. Treating it as the first of several candidates would
|
|
120
|
+
* mean that naming a path that does not exist silently reads some other tree
|
|
121
|
+
* instead — and on every machine where the real tree exists, that makes the
|
|
122
|
+
* unreadable branch impossible to reach. The one behaviour this reporter most
|
|
123
|
+
* needs to be able to demonstrate would be the one behaviour nobody could
|
|
124
|
+
* exercise, which is how a branch ends up shipping with unknown sensitivity.
|
|
125
|
+
*
|
|
126
|
+
* The implicit chain runs only when neither was given. Its order is this root,
|
|
127
|
+
* then the main checkout behind it, because a worktree carries no tree of its
|
|
128
|
+
* own and the honest answers there are either the main checkout's tree or none
|
|
129
|
+
* at all. The host-provided project directory comes last: it is known to point
|
|
130
|
+
* at the parent checkout even from inside a worktree, which is useful and is
|
|
131
|
+
* also a host's opinion rather than a fact about this repository.
|
|
132
|
+
*/
|
|
133
|
+
export function resolveTree(opts: {
|
|
134
|
+
root: string;
|
|
135
|
+
flag?: string | undefined;
|
|
136
|
+
env?: NodeJS.ProcessEnv;
|
|
137
|
+
}): TreeResolution {
|
|
138
|
+
const env = opts.env ?? process.env;
|
|
139
|
+
const fromEnv = env['AGENT_CONFIG_INBOX_TREE'];
|
|
140
|
+
const explicit: { origin: TreeOrigin; dir: string } | null =
|
|
141
|
+
opts.flag !== undefined && opts.flag !== ''
|
|
142
|
+
? { origin: 'flag', dir: path.resolve(opts.root, opts.flag) }
|
|
143
|
+
: fromEnv !== undefined && fromEnv !== ''
|
|
144
|
+
? { origin: 'env', dir: path.resolve(opts.root, fromEnv) }
|
|
145
|
+
: null;
|
|
146
|
+
if (explicit !== null) {
|
|
147
|
+
const readable = isReadableDir(explicit.dir);
|
|
148
|
+
const tried = [{ ...explicit, readable }];
|
|
149
|
+
return readable
|
|
150
|
+
? { dir: explicit.dir, origin: explicit.origin, tried }
|
|
151
|
+
: { dir: null, origin: 'unreadable', tried };
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
const candidates: Array<{ origin: TreeOrigin; dir: string }> = [];
|
|
155
|
+
candidates.push({ origin: 'repo-root', dir: path.join(opts.root, INBOX_REL) });
|
|
156
|
+
const main = mainCheckoutOf(opts.root);
|
|
157
|
+
if (main !== null && path.resolve(main) !== path.resolve(opts.root)) {
|
|
158
|
+
candidates.push({ origin: 'main-checkout', dir: path.join(main, INBOX_REL) });
|
|
159
|
+
}
|
|
160
|
+
const projectDir = env['CLAUDE_PROJECT_DIR'];
|
|
161
|
+
if (projectDir !== undefined && projectDir !== '') {
|
|
162
|
+
candidates.push({ origin: 'project-dir', dir: path.join(projectDir, INBOX_REL) });
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
const tried = candidates.map((c) => ({ ...c, readable: isReadableDir(c.dir) }));
|
|
166
|
+
const hit = tried.find((c) => c.readable);
|
|
167
|
+
return hit === undefined
|
|
168
|
+
? { dir: null, origin: 'unreadable', tried }
|
|
169
|
+
: { dir: hit.dir, origin: hit.origin, tried };
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
export interface RoundMatch {
|
|
173
|
+
/** Top-level entry name — the round's codename. */
|
|
174
|
+
name: string;
|
|
175
|
+
/** `dir` = a round directory. `file` = a loose drop at the top level. */
|
|
176
|
+
kind: 'dir' | 'file';
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
export interface RoundCount {
|
|
180
|
+
matches: RoundMatch[];
|
|
181
|
+
/** Top-level entries examined — the denominator the count was taken over. */
|
|
182
|
+
examined: number;
|
|
183
|
+
/** Files the scanner could not read, so a low count is never silently a clean one. */
|
|
184
|
+
unreadable: number;
|
|
185
|
+
/** Files skipped for size. */
|
|
186
|
+
oversized: number;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
function fileRaises(file: string, re: RegExp, tally: { unreadable: number; oversized: number }): boolean {
|
|
190
|
+
let size: number;
|
|
191
|
+
try {
|
|
192
|
+
const st = fs.statSync(file);
|
|
193
|
+
if (!st.isFile()) return false;
|
|
194
|
+
size = st.size;
|
|
195
|
+
} catch {
|
|
196
|
+
tally.unreadable += 1;
|
|
197
|
+
return false;
|
|
198
|
+
}
|
|
199
|
+
if (size > MAX_FILE_BYTES) {
|
|
200
|
+
tally.oversized += 1;
|
|
201
|
+
return false;
|
|
202
|
+
}
|
|
203
|
+
try {
|
|
204
|
+
return re.test(fs.readFileSync(file, 'utf8'));
|
|
205
|
+
} catch {
|
|
206
|
+
tally.unreadable += 1;
|
|
207
|
+
return false;
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
function dirRaises(dir: string, re: RegExp, tally: { unreadable: number; oversized: number }): boolean {
|
|
212
|
+
let entries: fs.Dirent[];
|
|
213
|
+
try {
|
|
214
|
+
entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
215
|
+
} catch {
|
|
216
|
+
tally.unreadable += 1;
|
|
217
|
+
return false;
|
|
218
|
+
}
|
|
219
|
+
for (const e of entries) {
|
|
220
|
+
const full = path.join(dir, e.name);
|
|
221
|
+
if (e.isSymbolicLink()) continue;
|
|
222
|
+
if (e.isDirectory()) {
|
|
223
|
+
if (dirRaises(full, re, tally)) return true;
|
|
224
|
+
} else if (e.isFile()) {
|
|
225
|
+
if (fileRaises(full, re, tally)) return true;
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
return false;
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
/**
|
|
232
|
+
* Count distinct rounds whose contents match `re`.
|
|
233
|
+
*
|
|
234
|
+
* A round stops being examined the moment one of its files matches: the
|
|
235
|
+
* question is whether the round raised the subject, not how loudly.
|
|
236
|
+
*/
|
|
237
|
+
export function countRounds(tree: string, re: RegExp): RoundCount {
|
|
238
|
+
let entries: fs.Dirent[];
|
|
239
|
+
try {
|
|
240
|
+
entries = fs.readdirSync(tree, { withFileTypes: true });
|
|
241
|
+
} catch {
|
|
242
|
+
return { matches: [], examined: 0, unreadable: 1, oversized: 0 };
|
|
243
|
+
}
|
|
244
|
+
const tally = { unreadable: 0, oversized: 0 };
|
|
245
|
+
const matches: RoundMatch[] = [];
|
|
246
|
+
let examined = 0;
|
|
247
|
+
for (const e of entries.slice().sort((a, b) => a.name.localeCompare(b.name))) {
|
|
248
|
+
if (e.name.startsWith('.')) continue;
|
|
249
|
+
if (e.isSymbolicLink()) continue;
|
|
250
|
+
const full = path.join(tree, e.name);
|
|
251
|
+
if (e.isDirectory()) {
|
|
252
|
+
examined += 1;
|
|
253
|
+
if (dirRaises(full, re, tally)) matches.push({ name: e.name, kind: 'dir' });
|
|
254
|
+
} else if (e.isFile()) {
|
|
255
|
+
examined += 1;
|
|
256
|
+
if (fileRaises(full, re, tally)) matches.push({ name: e.name, kind: 'file' });
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
return { matches, examined, unreadable: tally.unreadable, oversized: tally.oversized };
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
export interface HeldObject {
|
|
263
|
+
/** Repo-relative path. */
|
|
264
|
+
rel: string;
|
|
265
|
+
/** File stem. */
|
|
266
|
+
slug: string;
|
|
267
|
+
/** Declared subject pattern, when the object carries one. */
|
|
268
|
+
declared: string | null;
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
/** Locate a held object by path or by slug. */
|
|
272
|
+
export function findHeldObject(root: string, ref: string): HeldObject | null {
|
|
273
|
+
const direct = path.isAbsolute(ref) ? ref : path.join(root, ref);
|
|
274
|
+
const candidates = [direct];
|
|
275
|
+
const bare = path.basename(ref).replace(/\.md$/, '');
|
|
276
|
+
for (const d of HELD_DIRS) candidates.push(path.join(root, d, `${bare}.md`));
|
|
277
|
+
for (const c of candidates) {
|
|
278
|
+
let text: string;
|
|
279
|
+
try {
|
|
280
|
+
if (!fs.statSync(c).isFile()) continue;
|
|
281
|
+
text = fs.readFileSync(c, 'utf8');
|
|
282
|
+
} catch {
|
|
283
|
+
continue;
|
|
284
|
+
}
|
|
285
|
+
const m = SUBJECT_MARKER.exec(text);
|
|
286
|
+
return {
|
|
287
|
+
rel: path.relative(root, c),
|
|
288
|
+
slug: path.basename(c).replace(/\.md$/, ''),
|
|
289
|
+
declared: m === null ? null : (m[1] ?? null),
|
|
290
|
+
};
|
|
291
|
+
}
|
|
292
|
+
return null;
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
/**
|
|
296
|
+
* A pattern derived from a slug, used only when the object declares none.
|
|
297
|
+
*
|
|
298
|
+
* Deliberately weak, and printed as such. The recorded counters in this tree
|
|
299
|
+
* were taken under hand-written subject patterns, and a slug is a filename
|
|
300
|
+
* rather than a subject — so this reads as a hard floor and usually as zero.
|
|
301
|
+
* It exists so the tool answers for any object rather than refusing, and the
|
|
302
|
+
* output says which kind of pattern produced the figure.
|
|
303
|
+
*/
|
|
304
|
+
export function slugPattern(slug: string): string {
|
|
305
|
+
return slug.replace(/^road-to-/, '').replace(/-/g, '[-_ .]');
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
type PatternOrigin = 'flag' | 'declared' | 'slug';
|
|
309
|
+
|
|
310
|
+
function buildPattern(
|
|
311
|
+
obj: HeldObject | null,
|
|
312
|
+
flag: string | undefined,
|
|
313
|
+
): { source: string; origin: PatternOrigin } {
|
|
314
|
+
if (flag !== undefined && flag !== '') return { source: flag, origin: 'flag' };
|
|
315
|
+
if (obj !== null && obj.declared !== null) return { source: obj.declared, origin: 'declared' };
|
|
316
|
+
if (obj !== null) return { source: slugPattern(obj.slug), origin: 'slug' };
|
|
317
|
+
return { source: '', origin: 'slug' };
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
const PATTERN_NOTE: Record<PatternOrigin, string> = {
|
|
321
|
+
flag: 'given on the command line',
|
|
322
|
+
declared: 'declared on the object itself',
|
|
323
|
+
slug: 'derived from the slug — a hard floor, and usually the wrong question; pass --pattern',
|
|
324
|
+
};
|
|
325
|
+
|
|
326
|
+
const ORIGIN_NOTE: Record<TreeOrigin, string> = {
|
|
327
|
+
flag: '--tree',
|
|
328
|
+
env: 'AGENT_CONFIG_INBOX_TREE',
|
|
329
|
+
'repo-root': 'this repository root',
|
|
330
|
+
'main-checkout': "the main checkout behind this worktree",
|
|
331
|
+
'project-dir': 'CLAUDE_PROJECT_DIR',
|
|
332
|
+
unreadable: 'nothing',
|
|
333
|
+
};
|
|
334
|
+
|
|
335
|
+
export interface ReportResult {
|
|
336
|
+
exit: number;
|
|
337
|
+
text: string;
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
export function report(argv: readonly string[], root: string): ReportResult {
|
|
341
|
+
const out: string[] = [];
|
|
342
|
+
const arg = (name: string): string | undefined => {
|
|
343
|
+
const i = argv.indexOf(name);
|
|
344
|
+
return i === -1 ? undefined : argv[i + 1];
|
|
345
|
+
};
|
|
346
|
+
// Only these flags consume the token after them. The earlier form treated
|
|
347
|
+
// EVERY `--`-prefixed token as value-taking, which silently ate the held
|
|
348
|
+
// object ref after `--list`, and let the documented short form `-i` through
|
|
349
|
+
// as a positional because it carries one dash rather than two. Both
|
|
350
|
+
// spellings are in the help text, so both have to parse.
|
|
351
|
+
const VALUE_FLAGS = new Set(['--pattern', '--tree', '--root']);
|
|
352
|
+
const positional = argv.filter(
|
|
353
|
+
(a, i) => !a.startsWith('-') && !VALUE_FLAGS.has(String(argv[i - 1] ?? '')),
|
|
354
|
+
);
|
|
355
|
+
const ref = positional[0];
|
|
356
|
+
if (ref === undefined) {
|
|
357
|
+
return { exit: 2, text: 'usage: report_held_object_arrivals <held-object> [--pattern RE] [--tree DIR] [--root DIR] [--ignore-case] [--list]\n' };
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
const obj = findHeldObject(root, ref);
|
|
361
|
+
if (obj === null) {
|
|
362
|
+
out.push(`held object not found: ${ref}`);
|
|
363
|
+
out.push(` looked in: ${HELD_DIRS.join(', ')}`);
|
|
364
|
+
return { exit: 2, text: `${out.join('\n')}\n` };
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
const { source, origin: patternOrigin } = buildPattern(obj, arg('--pattern'));
|
|
368
|
+
// Case-sensitive by default, so the tool reproduces a plain `grep -rl`.
|
|
369
|
+
// Every recorded counter in this tree was taken that way, and a figure
|
|
370
|
+
// that quietly reads two rounds higher than the line it is checking is
|
|
371
|
+
// worse than no figure: it looks like drift in the store rather than a
|
|
372
|
+
// difference in the question asked.
|
|
373
|
+
const fold = argv.includes('--ignore-case') || argv.includes('-i');
|
|
374
|
+
let re: RegExp;
|
|
375
|
+
try {
|
|
376
|
+
re = new RegExp(source, fold ? 'i' : '');
|
|
377
|
+
} catch (e) {
|
|
378
|
+
return { exit: 2, text: `bad --pattern: ${String(e)}\n` };
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
const tree = resolveTree({ root, flag: arg('--tree') });
|
|
382
|
+
|
|
383
|
+
out.push(`object: ${obj.rel}`);
|
|
384
|
+
out.push(`pattern: /${source}/${fold ? 'i' : ''} (${PATTERN_NOTE[patternOrigin]})`);
|
|
385
|
+
|
|
386
|
+
if (tree.dir === null) {
|
|
387
|
+
out.push('tree: unreadable');
|
|
388
|
+
for (const t of tree.tried) out.push(` · ${t.origin}: ${t.dir} — absent`);
|
|
389
|
+
out.push('');
|
|
390
|
+
out.push('no prior rounds readable — the consumed-inbox tree is gitignored and');
|
|
391
|
+
out.push('machine-local, so this environment cannot see it. This is NOT a count of');
|
|
392
|
+
out.push('zero arrivals: no reading was taken. Point --tree at the tree, or run');
|
|
393
|
+
out.push('where it lives.');
|
|
394
|
+
return { exit: 0, text: `${out.join('\n')}\n` };
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
const counted = countRounds(tree.dir, re);
|
|
398
|
+
// A tree that STATS as a directory but cannot be LISTED reaches here with
|
|
399
|
+
// examined 0 and unreadable 1. Printing "0 distinct round(s) of 0 examined"
|
|
400
|
+
// would be the zero-versus-unreadable conflation this tool exists to avoid,
|
|
401
|
+
// one layer in from the absent-tree branch above: `isReadableDir` passed, so
|
|
402
|
+
// resolution succeeded and only enumeration failed. Same message, because it
|
|
403
|
+
// is the same fact — no reading was taken.
|
|
404
|
+
if (counted.examined === 0 && counted.unreadable > 0) {
|
|
405
|
+
out.push(`tree: ${tree.dir} (via ${ORIGIN_NOTE[tree.origin]}, but not listable)`);
|
|
406
|
+
out.push('');
|
|
407
|
+
out.push('no prior rounds readable — the tree resolved but could not be enumerated');
|
|
408
|
+
out.push('(permissions, or a race with something rewriting it). This is NOT a count');
|
|
409
|
+
out.push('of zero arrivals: no reading was taken.');
|
|
410
|
+
return { exit: 0, text: `${out.join('\n')}\n` };
|
|
411
|
+
}
|
|
412
|
+
const dirs = counted.matches.filter((m) => m.kind === 'dir').length;
|
|
413
|
+
const files = counted.matches.length - dirs;
|
|
414
|
+
out.push(`tree: ${tree.dir} (via ${ORIGIN_NOTE[tree.origin]})`);
|
|
415
|
+
out.push('');
|
|
416
|
+
out.push(
|
|
417
|
+
`arrivals: ${String(counted.matches.length)} distinct round(s) of ${String(counted.examined)} examined` +
|
|
418
|
+
` — ${String(dirs)} round director(ies), ${String(files)} loose drop(s)`,
|
|
419
|
+
);
|
|
420
|
+
if (counted.unreadable > 0) out.push(` note: ${String(counted.unreadable)} path(s) unreadable — the count is a floor`);
|
|
421
|
+
if (counted.oversized > 0) out.push(` note: ${String(counted.oversized)} file(s) skipped for size`);
|
|
422
|
+
out.push('');
|
|
423
|
+
out.push('The figure is a floor on recurrence over one machine\'s store under one');
|
|
424
|
+
out.push('pattern. Write it onto the object by hand, with this pattern and this');
|
|
425
|
+
out.push('denominator beside it, so the next reader can tell a measured count from a');
|
|
426
|
+
out.push('remembered one.');
|
|
427
|
+
if (argv.includes('--list') || counted.matches.length <= 40) {
|
|
428
|
+
out.push('');
|
|
429
|
+
out.push('rounds:');
|
|
430
|
+
for (const m of counted.matches) out.push(` · ${m.name}${m.kind === 'file' ? ' (loose drop)' : ''}`);
|
|
431
|
+
}
|
|
432
|
+
return { exit: 0, text: `${out.join('\n')}\n` };
|
|
433
|
+
}
|
|
434
|
+
|
|
435
|
+
export function main(argv: readonly string[]): number {
|
|
436
|
+
if (argv.includes('--help') || argv.includes('-h')) {
|
|
437
|
+
process.stdout.write(
|
|
438
|
+
'usage: report_held_object_arrivals <held-object> [--pattern RE] [--tree DIR] [--root DIR] [--list]\n\n' +
|
|
439
|
+
' <held-object> a path, or a bare slug resolved under the held-object directories\n' +
|
|
440
|
+
' --pattern RE the subject pattern; overrides any the object declares\n' +
|
|
441
|
+
' --tree DIR the consumed-inbox tree; otherwise resolved and reported\n' +
|
|
442
|
+
' --ignore-case fold case; the default is a case-sensitive grep\n' +
|
|
443
|
+
' --list list every matched round even when there are many\n',
|
|
444
|
+
);
|
|
445
|
+
return 0;
|
|
446
|
+
}
|
|
447
|
+
const i = argv.indexOf('--root');
|
|
448
|
+
const root = i === -1 ? REPO_ROOT : (argv[i + 1] ?? REPO_ROOT);
|
|
449
|
+
const res = report(argv, root);
|
|
450
|
+
process.stdout.write(res.text);
|
|
451
|
+
return res.exit;
|
|
452
|
+
}
|
|
453
|
+
|
|
454
|
+
if (process.argv[1] !== undefined && import.meta.url === pathToFileURL(path.resolve(process.argv[1])).href) {
|
|
455
|
+
process.exit(main(process.argv.slice(2)));
|
|
456
|
+
}
|
|
@@ -101,19 +101,19 @@ export interface HostSurface {
|
|
|
101
101
|
export const HOST_SURFACES: readonly HostSurface[] = [
|
|
102
102
|
{
|
|
103
103
|
host: 'augment', surface: '.augment/rules', perRuleTree: true,
|
|
104
|
-
writer: 'src/scripts/condense.ts:
|
|
104
|
+
writer: 'src/scripts/condense.ts:2495',
|
|
105
105
|
anchor: '\'.augment/rules\',',
|
|
106
106
|
note: 'copies by default; symlinks under `augment.rules_use_symlinks`',
|
|
107
107
|
},
|
|
108
108
|
{
|
|
109
109
|
host: 'claude-code', surface: '.claude/rules', perRuleTree: true,
|
|
110
|
-
writer: 'src/scripts/condense.ts:
|
|
110
|
+
writer: 'src/scripts/condense.ts:1188',
|
|
111
111
|
anchor: '_emit_claude_rule(',
|
|
112
112
|
note: '`_emit_claude_rule` rewrites frontmatter to the host\'s own `paths:` key',
|
|
113
113
|
},
|
|
114
114
|
{
|
|
115
115
|
host: 'cline', surface: '.clinerules', perRuleTree: true,
|
|
116
|
-
writer: 'src/scripts/condense.ts:
|
|
116
|
+
writer: 'src/scripts/condense.ts:1190',
|
|
117
117
|
anchor: 'fs.symlinkSync(',
|
|
118
118
|
note: 'symlink per rule into the projection',
|
|
119
119
|
},
|
|
@@ -131,19 +131,19 @@ export const HOST_SURFACES: readonly HostSurface[] = [
|
|
|
131
131
|
},
|
|
132
132
|
{
|
|
133
133
|
host: 'cursor', surface: '.cursor/rules', perRuleTree: true,
|
|
134
|
-
writer: 'src/scripts/condense.ts:
|
|
134
|
+
writer: 'src/scripts/condense.ts:1190',
|
|
135
135
|
anchor: 'fs.symlinkSync(',
|
|
136
|
-
note: 'symlink per rule, plus `.mdc` companions at `condense.ts:
|
|
136
|
+
note: 'symlink per rule, plus `.mdc` companions at `condense.ts:1418`',
|
|
137
137
|
},
|
|
138
138
|
{
|
|
139
139
|
host: 'gemini', surface: 'GEMINI.md', perRuleTree: false,
|
|
140
|
-
writer: 'src/scripts/condense.ts:
|
|
140
|
+
writer: 'src/scripts/condense.ts:1494',
|
|
141
141
|
anchor: '\'GEMINI.md\'',
|
|
142
142
|
note: 'single file',
|
|
143
143
|
},
|
|
144
144
|
{
|
|
145
145
|
host: 'windsurf', surface: '.windsurfrules', perRuleTree: false,
|
|
146
|
-
writer: 'src/scripts/condense.ts:
|
|
146
|
+
writer: 'src/scripts/condense.ts:1238',
|
|
147
147
|
anchor: '\'.windsurfrules\'',
|
|
148
148
|
note: 'single concatenated file',
|
|
149
149
|
},
|
|
@@ -20,6 +20,11 @@
|
|
|
20
20
|
* deterministic (real tokenizer, reported by `session_index_cost()`); the
|
|
21
21
|
* hit-rate arm needs a live paired run and has NOT been executed — so the
|
|
22
22
|
* default is off, per the roadmap's "off unless proven".
|
|
23
|
+
*
|
|
24
|
+
* loss_class: recoverable-lossy
|
|
25
|
+
* loss_recovery: agents/memory/ — this module renders the block and applies
|
|
26
|
+
* `capRows`, so it carries the same class as the cap it applies. Each dropped
|
|
27
|
+
* row names a curated entry that remains on disk and is fetchable by id.
|
|
23
28
|
*/
|
|
24
29
|
|
|
25
30
|
import { CURATED_TYPES, MEMORY_ROOT, retrieve_v1 } from './memory_lookup.js';
|