@event4u/agent-config 14.11.0 → 14.13.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 +368 -516
- package/CONTRIBUTING.md +38 -0
- package/CREDITS.md +135 -0
- package/NOTICE +13 -0
- package/README.md +8 -6
- package/dist/agent-src/commands/analyze/inbox.md +109 -2
- package/dist/agent-src/commands/feature/dev.md +7 -2
- package/dist/agent-src/commands/ghostwriter/write.md +5 -1
- package/dist/agent-src/commands/implement-ticket.md +1 -1
- package/dist/agent-src/commands/mission/upgrade.md +1 -1
- package/dist/agent-src/commands/orchestrate.md +2 -2
- package/dist/agent-src/commands/post-as/me.md +5 -1
- package/dist/agent-src/commands/pr/merge.md +19 -6
- package/dist/agent-src/commands/roadmap/process-full.md +19 -5
- package/dist/agent-src/commands/tdd/red.md +12 -2
- package/dist/agent-src/commands/work.md +1 -1
- package/dist/agent-src/contexts/communication/rules-auto/token-efficiency-mechanics.md +40 -0
- package/dist/agent-src/contexts/execution/auto-dispatch-classification.md +5 -2
- package/dist/agent-src/contexts/execution/autonomy-mechanics.md +21 -0
- package/dist/agent-src/contexts/execution/evidence-discipline.md +26 -0
- package/dist/agent-src/contexts/execution/orchestration-telemetry.md +1 -0
- package/dist/agent-src/contexts/execution/subagent-response-contract.md +40 -0
- package/dist/agent-src/contexts/execution/subagent-steering.md +13 -1
- package/dist/agent-src/contexts/execution/terminal-states.md +96 -0
- package/dist/agent-src/rules/artifact-drafting-protocol.md +1 -1
- package/dist/agent-src/rules/broken-access-control.md +4 -0
- package/dist/agent-src/rules/code-provenance.md +4 -0
- package/dist/agent-src/rules/design-fidelity.md +1 -1
- package/dist/agent-src/rules/domain-safety-pii.md +4 -0
- package/dist/agent-src/rules/domain-safety-retention.md +4 -0
- package/dist/agent-src/rules/engineering-safety-floor.md +2 -0
- package/dist/agent-src/rules/external-code-graph-interop.md +14 -12
- package/dist/agent-src/rules/improve-before-implement.md +6 -8
- package/dist/agent-src/rules/laravel-routing.md +1 -1
- package/dist/agent-src/rules/lethal-trifecta-guard.md +4 -0
- package/dist/agent-src/rules/secret-vcs-guard.md +2 -0
- package/dist/agent-src/rules/security-sensitive-stop.md +2 -0
- package/dist/agent-src/rules/source-confidentiality.md +12 -34
- package/dist/agent-src/rules/symfony-routing.md +1 -1
- package/dist/agent-src/rules/token-efficiency.md +14 -0
- package/dist/agent-src/rules/tool-safety.md +4 -0
- package/dist/agent-src/rules/untrusted-input-defense.md +4 -0
- package/dist/agent-src/scripts/archive_completed_roadmaps.ts +247 -3
- package/dist/agent-src/scripts/guarded_baseline.ts +328 -0
- package/dist/agent-src/scripts/roadmap_set_step.ts +253 -0
- package/dist/agent-src/scripts/stub_queue.ts +82 -0
- package/dist/agent-src/scripts/stubs_due.ts +400 -0
- package/dist/agent-src/scripts/ticket_bundles.ts +84 -0
- package/dist/agent-src/scripts/update_roadmap_progress.ts +8 -4
- package/dist/agent-src/skills/brand-asset-generation/SKILL.md +17 -4
- package/dist/agent-src/skills/brand-audit/SKILL.md +33 -0
- package/dist/agent-src/skills/code-intelligence/SKILL.md +57 -0
- package/dist/agent-src/skills/code-refactoring/SKILL.md +45 -1
- package/dist/agent-src/skills/code-review/SKILL.md +65 -6
- package/dist/agent-src/skills/command-writing/SKILL.md +35 -0
- package/dist/agent-src/skills/database/SKILL.md +8 -0
- package/dist/agent-src/skills/dependency-upgrade/SKILL.md +27 -0
- package/dist/agent-src/skills/design-review/SKILL.md +1 -1
- package/dist/agent-src/skills/doc-coauthoring/SKILL.md +1 -1
- package/dist/agent-src/skills/existing-ui-audit/SKILL.md +25 -2
- package/dist/agent-src/skills/feature-planning/SKILL.md +9 -2
- package/dist/agent-src/skills/frontend-render-security/SKILL.md +44 -0
- package/dist/agent-src/skills/git-workflow/SKILL.md +1 -1
- package/dist/agent-src/skills/js-library-packaging/scripts/check_package_surface.ts +38 -4
- package/dist/agent-src/skills/judge-artifact-completeness/rubrics/ticket-quality-score.json +2 -2
- package/dist/agent-src/skills/laravel/SKILL.md +35 -0
- package/dist/agent-src/skills/laravel-migration/SKILL.md +57 -3
- package/dist/agent-src/skills/monorepo-workspace/SKILL.md +26 -0
- package/dist/agent-src/skills/playbook-authoring/SKILL.md +28 -1
- package/dist/agent-src/skills/project-analysis-core/SKILL.md +23 -0
- package/dist/agent-src/skills/react-shadcn-ui/SKILL.md +30 -13
- package/dist/agent-src/skills/skill-writing/references/procedure.md +29 -7
- package/dist/agent-src/skills/sql-writing/SKILL.md +7 -1
- package/dist/agent-src/skills/standards-from-config/SKILL.md +27 -4
- package/dist/agent-src/skills/storybook-workshop/SKILL.md +9 -0
- package/dist/agent-src/skills/supply-chain-intake/SKILL.md +11 -4
- package/dist/agent-src/skills/symfony-workflow/SKILL.md +35 -0
- package/dist/agent-src/skills/test-case-discovery/SKILL.md +85 -0
- package/dist/agent-src/skills/test-driven-development/SKILL.md +33 -9
- package/dist/agent-src/skills/testing-anti-patterns/SKILL.md +1 -1
- package/dist/agent-src/skills/testing-anti-patterns/process-anti-patterns.md +37 -0
- package/dist/agent-src/skills/ui-component-architect/SKILL.md +53 -2
- package/dist/agent-src/skills/upstream-contribute/SKILL.md +38 -1
- package/dist/agent-src/skills/verify-repair-loop/SKILL.md +9 -4
- package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
- package/dist/agent-src/templates/roadmaps.md +97 -3
- package/dist/agent-src/templates/scripts/check_memory.ts +258 -17
- package/dist/agent-src/templates/scripts/check_memory_proposal.ts +9 -3
- package/dist/agent-src/templates/scripts/memory_lookup.ts +86 -0
- package/dist/agent-src/templates/scripts/memory_signal.ts +44 -0
- package/dist/agent-src/templates/scripts/work_engine/directives/backend/implement.ts +90 -0
- package/dist/agent-src/templates/scripts/work_engine/directives/backend/index.ts +11 -0
- package/dist/agent-src/templates/scripts/work_engine/directives/backend/test.ts +23 -1
- package/dist/agent-src/templates/scripts/work_engine/directives/backend/verify.ts +10 -1
- package/dist/agent-src/templates/scripts/work_engine/directives/mixed/stitch.ts +5 -1
- package/dist/agent-src/templates/scripts/work_engine/stack/runner.ts +102 -14
- package/dist/cli/commands/uiAudit.js +124 -5
- package/dist/cli/registry.js +2 -0
- package/dist/cli-delegate/{chunk-HYWSRNUX.js → chunk-2DK2VJWG.js} +3 -3
- package/dist/cli-delegate/{chunk-L43NCYPB.js → chunk-4FS4WRXP.js} +10 -0
- package/dist/cli-delegate/{chunk-OMIVVCG2.js → chunk-A4QJ6ENT.js} +24 -0
- package/dist/cli-delegate/{chunk-236PNQZK.js → chunk-AKJGUQNO.js} +466 -285
- package/dist/cli-delegate/{chunk-E46KPN6K.js → chunk-BTWUYDGN.js} +424 -363
- package/dist/cli-delegate/{chunk-K4FFODTS.js → chunk-ILMUPLGW.js} +1227 -316
- package/dist/cli-delegate/{chunk-FF7WAFMR.js → chunk-KPBWFOPZ.js} +5 -1
- package/dist/cli-delegate/cmd_adr_effective.js +102 -0
- package/dist/cli-delegate/cmd_conformance.js +42 -10
- package/dist/cli-delegate/cmd_doctor.js +3 -3
- package/dist/cli-delegate/cmd_export.js +3 -2
- package/dist/cli-delegate/cmd_fleet.js +2 -2
- package/dist/cli-delegate/cmd_handoff.js +1 -1
- package/dist/cli-delegate/cmd_preflight.js +2 -2
- package/dist/cli-delegate/cmd_prune.js +3 -2
- package/dist/cli-delegate/cmd_settings_get.js +1 -1
- package/dist/cli-delegate/cmd_settings_migrate.js +3 -2
- package/dist/cli-delegate/cmd_settings_set.js +2 -2
- package/dist/cli-delegate/cmd_sync.js +3 -2
- package/dist/cli-delegate/cmd_uninstall.js +3 -2
- package/dist/cli-delegate/cmd_validate.js +3 -2
- package/dist/discovery/deprecation-report.md +1 -1
- package/dist/discovery/discovery-manifest.json +62 -62
- package/dist/discovery/discovery-manifest.json.sha256 +1 -1
- package/dist/discovery/discovery-manifest.summary.md +1 -1
- package/dist/discovery/dormancy-report.md +1 -1
- package/dist/discovery/orphan-report.md +1 -1
- package/dist/discovery/packs.json +2 -2
- package/dist/discovery/trust-report.md +1 -1
- package/dist/discovery/workspaces.json +2 -2
- package/dist/hooks/dispatch.js +2413 -1087
- package/dist/install/claudeRuleRewrite.js +254 -0
- package/dist/install/detect.js +29 -16
- package/dist/install/detect_php_shape.js +159 -0
- package/dist/install/install.mjs +639 -428
- package/dist/mcp/awesome-mcp-servers.row.md +1 -1
- package/dist/mcp/mcp-cloudflare-catalogue.json +1 -1
- package/dist/mcp/registry-manifest.json +3 -3
- package/dist/mcp/server.json +3 -3
- package/dist/mcp/server.mjs +4818 -2645
- package/dist/server/schemas/settings.js +6 -0
- package/dist/ui/assets/index-D0jaCRPM.js +29 -0
- package/dist/ui/index.html +1 -1
- package/docs/MIGRATION.md +1 -1
- package/docs/THIRD-PARTY-NOTICES.md +25 -0
- package/docs/contracts/provider-lifecycle.md +1 -1
- package/docs/contracts/settings-classes.md +30 -4
- package/docs/guidelines/agent-infra/5w2h-analysis.md +3 -3
- package/docs/guidelines/agent-infra/agent-interaction-and-decision-quality.md +1 -0
- package/docs/guidelines/agent-infra/artifact-drafting-protocol-mechanics.md +58 -3
- package/docs/guidelines/agent-infra/ask-when-uncertain-demos.md +2 -2
- package/docs/guidelines/agent-infra/asking-and-brevity-examples.md +3 -3
- package/docs/guidelines/agent-infra/break-glass-usage.md +7 -7
- package/docs/guidelines/agent-infra/carve-out-predicates.md +3 -3
- package/docs/guidelines/agent-infra/comparison-matrix.md +1 -1
- package/docs/guidelines/agent-infra/critical-thinking.md +4 -4
- package/docs/guidelines/agent-infra/direct-answers-demos.md +2 -2
- package/docs/guidelines/agent-infra/domain-eval-anti-pattern.md +1 -1
- package/docs/guidelines/agent-infra/downstream-changes-mechanics.md +91 -0
- package/docs/guidelines/agent-infra/engineering-memory-data-format.md +3 -3
- package/docs/guidelines/agent-infra/existence-question-verdicts.md +80 -0
- package/docs/guidelines/agent-infra/first-principles.md +2 -2
- package/docs/guidelines/agent-infra/framework-neutrality-patterns.md +2 -2
- package/docs/guidelines/agent-infra/guarded-baseline.md +39 -0
- package/docs/guidelines/agent-infra/inversion-thinking.md +5 -5
- package/docs/guidelines/agent-infra/language-and-tone-examples.md +1 -1
- package/docs/guidelines/agent-infra/layered-settings.md +10 -10
- package/docs/guidelines/agent-infra/memory-access.md +1 -1
- package/docs/guidelines/agent-infra/mental-models.md +3 -3
- package/docs/guidelines/agent-infra/reuse-verdict-mechanics.md +71 -0
- package/docs/guidelines/agent-infra/review-routing-data-format.md +7 -7
- package/docs/guidelines/agent-infra/roadmap-progress-mechanics.md +13 -7
- package/docs/guidelines/agent-infra/role-contracts.md +2 -2
- package/docs/guidelines/agent-infra/role-mode-router.md +3 -3
- package/docs/guidelines/agent-infra/rule-type-governance.md +2 -2
- package/docs/guidelines/agent-infra/scqa-framework.md +5 -5
- package/docs/guidelines/agent-infra/self-improvement-pipeline.md +6 -6
- package/docs/guidelines/agent-infra/simplicity-and-goal-demos.md +2 -2
- package/docs/guidelines/agent-infra/six-hats.md +3 -3
- package/docs/guidelines/agent-infra/skill-quality-checklist.md +6 -6
- package/docs/guidelines/agent-infra/source-confidentiality-mechanics.md +109 -0
- package/docs/guidelines/agent-infra/systems-thinking.md +1 -1
- package/docs/guidelines/agent-infra/verify-before-complete-demos.md +2 -2
- package/docs/guidelines/augment-portability-patterns.md +6 -4
- package/docs/guidelines/code-clarity.md +21 -0
- package/docs/guidelines/component-oriented-and-oop-development.md +3 -2
- package/docs/guidelines/cross-role-handoff.md +2 -2
- package/docs/guidelines/design-fidelity-mechanics.md +1 -1
- package/docs/guidelines/docs/readme-size-and-splitting.md +3 -3
- package/docs/guidelines/php/database.md +90 -7
- package/docs/guidelines/prompt-templates.md +7 -7
- package/docs/guidelines/redundancy-taxonomy.md +180 -0
- package/llms.txt +2 -2
- package/package.json +10 -3
- package/src/agent-src/scripts/archive_completed_roadmaps.ts +247 -3
- package/src/agent-src/scripts/guarded_baseline.ts +328 -0
- package/src/agent-src/scripts/roadmap_set_step.ts +253 -0
- package/src/agent-src/scripts/stub_queue.ts +82 -0
- package/src/agent-src/scripts/stubs_due.ts +400 -0
- package/src/agent-src/scripts/ticket_bundles.ts +84 -0
- package/src/agent-src/scripts/update_roadmap_progress.ts +8 -4
- package/src/agent-src/templates/scripts/check_memory.ts +258 -17
- package/src/agent-src/templates/scripts/check_memory_proposal.ts +9 -3
- package/src/agent-src/templates/scripts/memory_lookup.ts +86 -0
- package/src/agent-src/templates/scripts/memory_signal.ts +44 -0
- package/src/agent-src/templates/scripts/work_engine/directives/backend/implement.ts +90 -0
- package/src/agent-src/templates/scripts/work_engine/directives/backend/index.ts +11 -0
- package/src/agent-src/templates/scripts/work_engine/directives/backend/test.ts +23 -1
- package/src/agent-src/templates/scripts/work_engine/directives/backend/verify.ts +10 -1
- package/src/agent-src/templates/scripts/work_engine/directives/mixed/stitch.ts +5 -1
- package/src/agent-src/templates/scripts/work_engine/stack/runner.ts +102 -14
- package/src/config/agent-settings.template.yml +48 -3
- package/src/config/assurance-capability-registry.json +21 -9
- package/src/config/budgets.yml +19 -0
- package/src/config/canonical-terms.yml +119 -0
- package/src/config/capability-native-outcome-bars.json +81 -0
- package/src/config/ci-local-parity.yml +95 -0
- package/src/config/discovery/prompt-patterns.yml +56 -0
- package/src/config/drafting-channels.yml +43 -0
- package/src/config/estate-count-budget.json +38 -31
- package/src/config/evaluator-budgets.json +14 -14
- package/src/config/gate-coverage.yml +731 -30
- package/src/config/gate-reachability-exemptions.json +21 -0
- package/src/config/gate-violation-baselines.json +38 -20
- package/src/config/harness-evolution-budget.json +25 -0
- package/src/config/lapsed-beta-baseline.json +96 -0
- package/src/config/memory-twin-verdicts.yml +129 -0
- package/src/config/metric-registry.yml +124 -0
- package/src/config/pack-size-budget.json +35 -7
- package/src/config/preamble-payload-budget.json +97 -71
- package/src/config/profiles/balanced.ini +27 -0
- package/src/config/profiles/full.ini +27 -0
- package/src/config/profiles/minimal.ini +27 -0
- package/src/config/publish-surface.json +9 -2
- package/src/config/routing-coverage-seed.json +43 -0
- package/src/config/rule-stub-ceilings.json +126 -112
- package/src/config/suggestion-capture.json +28 -0
- package/src/config/surface-matrix.yml +21 -2
- package/src/config/turnaround-budget.json +66 -0
- package/src/config/web-launch-readiness.json +188 -0
- package/src/install/claudeRuleRewrite.ts +288 -0
- package/src/install/detect.ts +60 -17
- package/src/install/detect_php_shape.ts +191 -0
- package/src/scripts/_cli/cmd_doctor.ts +27 -112
- package/src/scripts/_dispatch.bash +27 -0
- package/src/scripts/_lib/activation_ladder.ts +211 -0
- package/src/scripts/_lib/activation_states.ts +88 -0
- package/src/scripts/_lib/adherence_detectors.ts +143 -0
- package/src/scripts/_lib/arith_claims.ts +181 -0
- package/src/scripts/_lib/arm_ranking.ts +62 -0
- package/src/scripts/_lib/asset_delivery_ledger.ts +303 -0
- package/src/scripts/_lib/audit_field_provenance.ts +54 -0
- package/src/scripts/_lib/auto_dispatch.ts +32 -3
- package/src/scripts/_lib/bench_ab_size_claim.ts +98 -4
- package/src/scripts/_lib/benchmark_cache_fields.ts +158 -0
- package/src/scripts/_lib/candidate_proposer.ts +402 -0
- package/src/scripts/_lib/candidate_record.ts +601 -0
- package/src/scripts/_lib/capture_rate.ts +319 -0
- package/src/scripts/_lib/collector_denominator.ts +771 -0
- package/src/scripts/_lib/collector_record.ts +340 -0
- package/src/scripts/_lib/collector_store.ts +664 -0
- package/src/scripts/_lib/collector_supervision.ts +827 -0
- package/src/scripts/_lib/concern_estate.ts +77 -0
- package/src/scripts/_lib/config_chain.ts +477 -0
- package/src/scripts/_lib/config_cost.ts +209 -0
- package/src/scripts/_lib/council_settings_block.ts +6 -0
- package/src/scripts/_lib/curator_ops.ts +172 -0
- package/src/scripts/_lib/delivery_arm_experiment.ts +266 -0
- package/src/scripts/_lib/delivery_criticality.ts +126 -0
- package/src/scripts/_lib/doctor_runtime_checks.ts +70 -0
- package/src/scripts/_lib/empty_cycles.ts +88 -0
- package/src/scripts/_lib/eval_publication.ts +354 -0
- package/src/scripts/_lib/evaluation_vector.ts +283 -0
- package/src/scripts/_lib/evaluator_promotion.ts +225 -0
- package/src/scripts/_lib/evidence_basis.ts +118 -0
- package/src/scripts/_lib/exec_evidence.ts +8 -0
- package/src/scripts/_lib/experience_card.ts +272 -0
- package/src/scripts/_lib/experience_report.ts +151 -0
- package/src/scripts/_lib/experiment_freeze.ts +112 -0
- package/src/scripts/_lib/gate_baseline.ts +150 -1
- package/src/scripts/_lib/generated_by.ts +66 -0
- package/src/scripts/_lib/harness_evolution_guards.ts +229 -0
- package/src/scripts/_lib/hook_effect_probe.ts +141 -0
- package/src/scripts/_lib/host_denominator.ts +687 -0
- package/src/scripts/_lib/host_projection_reach.ts +157 -0
- package/src/scripts/_lib/ignored_blocker.ts +148 -0
- package/src/scripts/_lib/install_reach_checks.ts +495 -0
- package/src/scripts/_lib/json_duplicate_keys.ts +150 -0
- package/src/scripts/_lib/judge_hygiene.ts +228 -0
- package/src/scripts/_lib/legacy_boundary_map.ts +228 -0
- package/src/scripts/_lib/loop_guards.ts +299 -0
- package/src/scripts/_lib/loss_class.ts +129 -0
- package/src/scripts/_lib/machine_wake.ts +51 -0
- package/src/scripts/_lib/md_prose_lines.ts +177 -0
- package/src/scripts/_lib/minimality_tiebreak.ts +168 -0
- package/src/scripts/_lib/one_resolver_invariant.ts +449 -0
- package/src/scripts/_lib/orchestration_record.ts +253 -5
- package/src/scripts/_lib/outcome_envelope.ts +227 -0
- package/src/scripts/_lib/outcome_vocabularies.ts +125 -0
- package/src/scripts/_lib/paired_stats.ts +245 -0
- package/src/scripts/_lib/paired_verdict.ts +226 -0
- package/src/scripts/_lib/prefix_stable_surfaces.ts +123 -0
- package/src/scripts/_lib/privacy_class.ts +47 -0
- package/src/scripts/_lib/regression_neighbourhood.ts +259 -0
- package/src/scripts/_lib/repeated_failure.ts +105 -0
- package/src/scripts/_lib/repo_root.ts +111 -0
- package/src/scripts/_lib/review_skipped_record.ts +37 -0
- package/src/scripts/_lib/role_split.ts +338 -0
- package/src/scripts/_lib/runtime_journal.ts +1499 -0
- package/src/scripts/_lib/runtime_wiring_checks.ts +430 -0
- package/src/scripts/_lib/skill_catalogue.ts +11 -1
- package/src/scripts/_lib/skill_estate.ts +115 -0
- package/src/scripts/_lib/source_digest.ts +200 -0
- package/src/scripts/_lib/source_redact.ts +260 -0
- package/src/scripts/_lib/source_shape.ts +502 -0
- package/src/scripts/_lib/source_snapshot_dedup.ts +199 -0
- package/src/scripts/_lib/strip_comments.d.mts +8 -0
- package/src/scripts/_lib/strip_comments.mjs +65 -0
- package/src/scripts/_lib/test_red_state.ts +154 -0
- package/src/scripts/_lib/trigger_shift.ts +144 -0
- package/src/scripts/_lib/untrusted_content.ts +82 -7
- package/src/scripts/adoption_report.ts +1 -1
- package/src/scripts/adr/evidence_census.ts +1 -1
- package/src/scripts/adr/regenerate_index.ts +26 -2
- package/src/scripts/adr_cite_check.ts +164 -1
- package/src/scripts/ai_council/argument_exhaustion.ts +130 -0
- package/src/scripts/ai_council/blind_review.ts +11 -1
- package/src/scripts/ai_council/clients.ts +4 -0
- package/src/scripts/ai_council/config.ts +3 -0
- package/src/scripts/ai_council/consensus.ts +28 -8
- package/src/scripts/ai_council/consensus_round.ts +226 -0
- package/src/scripts/ai_council/disagreement_signal.ts +338 -0
- package/src/scripts/ai_council/inline_findings.ts +340 -0
- package/src/scripts/ai_council/judge_position_bias.ts +197 -0
- package/src/scripts/ai_council/orchestrator.ts +16 -203
- package/src/scripts/ai_council/orchestrator_results.ts +23 -3
- package/src/scripts/ai_council/pricing.ts +106 -0
- package/src/scripts/ai_council/prompts.ts +74 -7
- package/src/scripts/ai_council/provider_leakage_bench.ts +327 -0
- package/src/scripts/ai_council/py_format.ts +14 -3
- package/src/scripts/ai_council/recouncil_guard.ts +293 -0
- package/src/scripts/ai_council/response_record.ts +50 -0
- package/src/scripts/ai_council/topology_bench_manifest.ts +860 -0
- package/src/scripts/ai_council/topology_vocabulary.ts +175 -0
- package/src/scripts/asset_delivery_ledger.ts +157 -0
- package/src/scripts/attest_artifact.ts +193 -0
- package/src/scripts/audit_auto_rules.ts +2 -1
- package/src/scripts/audit_command_surface.ts +1 -1
- package/src/scripts/audit_mcp_tools.ts +2 -2
- package/src/scripts/audit_skill_overlap_allowlist.json +6 -1
- package/src/scripts/audit_user_type_axis.ts +2 -1
- package/src/scripts/bench_ab_clone.ts +215 -10
- package/src/scripts/bench_ab_integrity.ts +119 -5
- package/src/scripts/bench_ab_v2_stats.ts +40 -213
- package/src/scripts/build_archive_index.ts +1 -1
- package/src/scripts/build_linear_digest.ts +1 -1
- package/src/scripts/build_proof.ts +11 -4
- package/src/scripts/build_rule_trigger_matrix.ts +1 -1
- package/src/scripts/build_source_digests.ts +157 -0
- package/src/scripts/cache_realization_report.ts +103 -0
- package/src/scripts/check_adr_frontmatter.ts +126 -0
- package/src/scripts/check_benchmark_report_fields.ts +207 -0
- package/src/scripts/check_beta_review_markers.ts +235 -6
- package/src/scripts/check_bundle_path_leakage.ts +195 -7
- package/src/scripts/check_claims.ts +576 -6
- package/src/scripts/check_command_examples.ts +557 -0
- package/src/scripts/check_composite_arming.ts +35 -0
- package/src/scripts/check_concern_admissions.ts +365 -0
- package/src/scripts/check_enforcement_coverage.ts +28 -0
- package/src/scripts/check_estate_count.ts +263 -3
- package/src/scripts/check_gate_reachability.ts +383 -0
- package/src/scripts/check_host_loadability.ts +104 -0
- package/src/scripts/check_loss_class_declared.ts +308 -0
- package/src/scripts/check_md_language.ts +15 -98
- package/src/scripts/check_memory_proposal.ts +18 -11
- package/src/scripts/check_no_currency_in_cost_surfaces.ts +225 -0
- package/src/scripts/check_no_external_sources.ts +281 -6
- package/src/scripts/check_pack_conformance_fixture.ts +11 -1
- package/src/scripts/check_pack_size.ts +59 -2
- package/src/scripts/check_preamble_payload_budget.ts +144 -6
- package/src/scripts/check_prefix_stable_mutation.ts +372 -0
- package/src/scripts/check_publish_surface.ts +10 -1
- package/src/scripts/check_references.ts +24 -1
- package/src/scripts/check_routing_coverage.ts +352 -0
- package/src/scripts/check_rule_evidence_declaration.ts +316 -0
- package/src/scripts/check_rule_projection_integrity.ts +14 -4
- package/src/scripts/check_score_contract.ts +528 -0
- package/src/scripts/check_skill_admissions.ts +514 -0
- package/src/scripts/check_static_parity.ts +285 -0
- package/src/scripts/check_supervision_claim_atomicity.ts +498 -0
- package/src/scripts/check_suppression_hygiene.ts +15 -0
- package/src/scripts/check_web_launch_readiness.ts +705 -0
- package/src/scripts/ci_settle.ts +39 -2
- package/src/scripts/code_graph/build.ts +60 -3
- package/src/scripts/code_graph/extract.ts +44 -0
- package/src/scripts/code_graph/types.ts +24 -0
- package/src/scripts/collector_daemon.ts +714 -0
- package/src/scripts/config_cost_report.ts +302 -0
- package/src/scripts/consumer_matrix.ts +74 -1
- package/src/scripts/cost/budget.mjs +10 -3
- package/src/scripts/cost/track.mjs +10 -3
- package/src/scripts/council_cli.ts +37 -54
- package/src/scripts/description_route_check.ts +494 -0
- package/src/scripts/dispatch_r2_reviewer.ts +46 -5
- package/src/scripts/evolution_lab.ts +980 -0
- package/src/scripts/external_sources_denylist.json +5 -18
- package/src/scripts/extract_audit_patterns.ts +21 -0
- package/src/scripts/fold_intake.ts +12 -1
- package/src/scripts/gen_discovery_baseline.ts +1 -1
- package/src/scripts/generate_capabilities_index.ts +12 -5
- package/src/scripts/generate_capability_matrix.ts +3 -3
- package/src/scripts/generate_command_flows.ts +2 -2
- package/src/scripts/generate_cookbook.ts +2 -2
- package/src/scripts/generate_index.ts +8 -1
- package/src/scripts/generate_knowledge_index.ts +2 -1
- package/src/scripts/generate_ownership_matrix.ts +2 -1
- package/src/scripts/generate_pack_manifests.ts +10 -2
- package/src/scripts/generate_role_experiences_catalog.ts +2 -2
- package/src/scripts/generate_settings_reference.ts +1 -1
- package/src/scripts/git_authorization_hook.ts +22 -1
- package/src/scripts/grade_target_readiness.ts +48 -5
- package/src/scripts/hook_effect_doctor.ts +261 -0
- package/src/scripts/hook_manifest.json +1 -1
- package/src/scripts/hook_manifest.yaml +125 -11
- package/src/scripts/hooks/block_speaking_inbox_dir.ts +271 -0
- package/src/scripts/hooks/block_unauthorized_git.ts +18 -0
- package/src/scripts/hooks/concern_registry.ts +6 -0
- package/src/scripts/hooks/dispatch_hook.ts +32 -0
- package/src/scripts/hooks/journal_record_hook.ts +345 -0
- package/src/scripts/hooks/prepush_metadata_sources.sh +110 -0
- package/src/scripts/hooks/run_continuation_hook.ts +44 -9
- package/src/scripts/hooks/shims/install.sh +61 -0
- package/src/scripts/hooks/shims/php +101 -0
- package/src/scripts/hooks/suggestion_capture_hook.ts +378 -0
- package/src/scripts/hot_context_hook.ts +16 -0
- package/src/scripts/install-hooks.sh +20 -5
- package/src/scripts/install.ts +17 -35
- package/src/scripts/inventory_frontmatter.ts +2 -1
- package/src/scripts/lint_adr_sweep_routing.ts +12 -0
- package/src/scripts/lint_budget_ownership.ts +54 -4
- package/src/scripts/lint_canonical_terms.ts +604 -0
- package/src/scripts/lint_composition_review.ts +619 -0
- package/src/scripts/lint_consolidation_lineage.ts +666 -0
- package/src/scripts/lint_eval_specs.ts +593 -0
- package/src/scripts/lint_hook_manifest.ts +19 -0
- package/src/scripts/lint_host_portability.ts +373 -0
- package/src/scripts/lint_judge_prompt_expectation.ts +27 -1
- package/src/scripts/lint_memory_twin_parity.ts +335 -0
- package/src/scripts/lint_metric_consumers.ts +355 -0
- package/src/scripts/lint_skill_descriptions.ts +18 -1
- package/src/scripts/lint_skill_frontmatter_safety.ts +58 -0
- package/src/scripts/lint_skill_link_reach.ts +252 -0
- package/src/scripts/lint_skill_trigger_corpus.ts +752 -0
- package/src/scripts/lint_ticket_buildable.ts +17 -1
- package/src/scripts/mcp_server/consumer_tool_catalog.json +1 -1
- package/src/scripts/mcp_server/tool_catalog_source.ts +1 -1
- package/src/scripts/measure_docs_dead_links.ts +348 -0
- package/src/scripts/measure_host_capture.ts +461 -0
- package/src/scripts/migration_status.ts +3 -3
- package/src/scripts/model_rule_injection.ts +60 -0
- package/src/scripts/orchestration_record.ts +14 -0
- package/src/scripts/pack_install_smoke.ts +363 -0
- package/src/scripts/pr_conflict_census.ts +187 -0
- package/src/scripts/preamble_byte_census.ts +139 -10
- package/src/scripts/prepack-check.mjs +4 -1
- package/src/scripts/probe_turnaround.ts +384 -0
- package/src/scripts/probe_unblocked_ask.ts +279 -0
- package/src/scripts/render_benchmark_md.ts +1 -1
- package/src/scripts/report_pack_delta.ts +204 -0
- package/src/scripts/rule_activation_census.ts +70 -9
- package/src/scripts/rule_backlinks.ts +1 -1
- package/src/scripts/run_lifecycle_suite.ts +208 -0
- package/src/scripts/run_skill_evals.ts +40 -0
- package/src/scripts/schemas/delivery-manifest.schema.json +43 -0
- package/src/scripts/schemas/drafting-channels.schema.json +43 -0
- package/src/scripts/schemas/evals.schema.json +24 -1
- package/src/scripts/schemas/rule.schema.json +52 -1
- package/src/scripts/schemas/skill.schema.json +17 -2
- package/src/scripts/select_analysis_mode.ts +112 -0
- package/src/scripts/skill_overlap.ts +7 -1
- package/src/scripts/skill_tools/run_block_d_eval.ts +8 -1
- package/src/scripts/skill_tools/score_skill_relevance.ts +84 -3
- package/src/scripts/skill_tools/suggest_skill_for_task.ts +8 -1
- package/src/scripts/skill_usage_report.ts +2 -1
- package/src/scripts/stubs_due.ts +211 -0
- package/src/scripts/sweep_source_surfaces.ts +678 -0
- package/src/scripts/sync_pr_branch.ts +40 -1
- package/src/scripts/trigger_eval_grandfather.json +202 -222
- package/src/scripts/utilization_report.ts +22 -2
- package/src/server/schemas/settings.ts +10 -0
- package/src/templates/marketing-copy.yml +1 -1
- package/dist/agent-src/skills/accessibility-auditor/evals/evals.json +0 -15
- package/dist/agent-src/skills/agent-security-review/evals/triggers.json +0 -52
- package/dist/agent-src/skills/ai-code-blindspots/evals/triggers.json +0 -52
- package/dist/agent-src/skills/alerting-doctrine/evals/triggers.json +0 -17
- package/dist/agent-src/skills/analysis-skill-router/evals/evals.json +0 -13
- package/dist/agent-src/skills/brand/evals/triggers.json +0 -17
- package/dist/agent-src/skills/brand-asset-generation/evals/triggers.json +0 -17
- package/dist/agent-src/skills/brand-audit/evals/triggers.json +0 -17
- package/dist/agent-src/skills/brand-identity/evals/triggers.json +0 -17
- package/dist/agent-src/skills/brand-strategy/evals/triggers.json +0 -17
- package/dist/agent-src/skills/brand-to-tokens/evals/triggers.json +0 -17
- package/dist/agent-src/skills/bug-analyzer/evals/evals.json +0 -13
- package/dist/agent-src/skills/canvas-design/evals/triggers.json +0 -17
- package/dist/agent-src/skills/character-consistency/evals/evals.json +0 -16
- package/dist/agent-src/skills/code-intelligence/evals/triggers.json +0 -52
- package/dist/agent-src/skills/code-review/evals/evals.json +0 -100
- package/dist/agent-src/skills/command-routing/evals/evals.json +0 -14
- package/dist/agent-src/skills/complexity-first-planning/evals/triggers.json +0 -17
- package/dist/agent-src/skills/contract-review/evals/triggers.json +0 -17
- package/dist/agent-src/skills/conventional-commits-writing/evals/evals.json +0 -15
- package/dist/agent-src/skills/corpus-grounding/evals/triggers.json +0 -17
- package/dist/agent-src/skills/dashboard-design/evals/evals.json +0 -16
- package/dist/agent-src/skills/dcf-modeling/evals/domain-truth.json +0 -29
- package/dist/agent-src/skills/dcf-modeling/evals/evals.json +0 -20
- package/dist/agent-src/skills/decision-record/evals/evals.json +0 -20
- package/dist/agent-src/skills/decision-record/evals/triggers.json +0 -87
- package/dist/agent-src/skills/design-intelligence/evals/evals.json +0 -14
- package/dist/agent-src/skills/design-intelligence/evals/triggers.json +0 -17
- package/dist/agent-src/skills/design-system-capture/evals/evals.json +0 -15
- package/dist/agent-src/skills/design-tokens/evals/triggers.json +0 -17
- package/dist/agent-src/skills/design-variations/evals/triggers.json +0 -17
- package/dist/agent-src/skills/developer-like-execution/evals/evals.json +0 -16
- package/dist/agent-src/skills/doc-coauthoring/evals/evals.json +0 -16
- package/dist/agent-src/skills/doc-coauthoring/evals/triggers.json +0 -17
- package/dist/agent-src/skills/docx-authoring/evals/triggers.json +0 -52
- package/dist/agent-src/skills/dpa-review/evals/triggers.json +0 -17
- package/dist/agent-src/skills/editorial-calendar/evals/domain-truth.json +0 -16
- package/dist/agent-src/skills/editorial-calendar/evals/evals.json +0 -16
- package/dist/agent-src/skills/eloquent/evals/triggers.json +0 -17
- package/dist/agent-src/skills/estimate-ticket/evals/evals.json +0 -16
- package/dist/agent-src/skills/estimate-ticket/evals/output-schema.yml +0 -20
- package/dist/agent-src/skills/estimate-ticket/evals/triggers.json +0 -19
- package/dist/agent-src/skills/evaluate-llm-feature/evals/triggers.json +0 -52
- package/dist/agent-src/skills/existing-ui-audit/evals/triggers.json +0 -47
- package/dist/agent-src/skills/experiment-loop/evals/output-schema.yml +0 -27
- package/dist/agent-src/skills/experiment-loop/evals/triggers.json +0 -17
- package/dist/agent-src/skills/fe-design/evals/triggers.json +0 -67
- package/dist/agent-src/skills/forecasting/evals/domain-truth.json +0 -29
- package/dist/agent-src/skills/forecasting/evals/evals.json +0 -20
- package/dist/agent-src/skills/forensics-report/evals/triggers.json +0 -17
- package/dist/agent-src/skills/frontend-render-security/evals/triggers.json +0 -52
- package/dist/agent-src/skills/fundraising-narrative/evals/domain-truth.json +0 -16
- package/dist/agent-src/skills/fundraising-narrative/evals/evals.json +0 -16
- package/dist/agent-src/skills/gated-reach/evals/triggers.json +0 -72
- package/dist/agent-src/skills/github-ci/evals/evals.json +0 -25
- package/dist/agent-src/skills/history-design/evals/triggers.json +0 -17
- package/dist/agent-src/skills/html-deck/evals/triggers.json +0 -17
- package/dist/agent-src/skills/humanizer/evals/strip_fixtures.json +0 -57
- package/dist/agent-src/skills/humanizer/evals/triggers.json +0 -17
- package/dist/agent-src/skills/iconography/evals/triggers.json +0 -17
- package/dist/agent-src/skills/image-analyser/evals/triggers.json +0 -17
- package/dist/agent-src/skills/image-creator/evals/triggers.json +0 -17
- package/dist/agent-src/skills/image-editing/evals/triggers.json +0 -17
- package/dist/agent-src/skills/image-generation/evals/triggers.json +0 -17
- package/dist/agent-src/skills/image-provider-routing/evals/triggers.json +0 -17
- package/dist/agent-src/skills/incident-commander/evals/domain-truth.json +0 -16
- package/dist/agent-src/skills/incident-commander/evals/evals.json +0 -20
- package/dist/agent-src/skills/js-library-packaging/evals/triggers.json +0 -17
- package/dist/agent-src/skills/judge-artifact-completeness/evals/triggers.json +0 -17
- package/dist/agent-src/skills/judge-injection-defense/evals/triggers.json +0 -17
- package/dist/agent-src/skills/judge-synthesis/evals/triggers.json +0 -17
- package/dist/agent-src/skills/launch-readiness/evals/evals.json +0 -21
- package/dist/agent-src/skills/learning-tutor/evals/triggers.json +0 -52
- package/dist/agent-src/skills/legal-intake-triage/evals/triggers.json +0 -17
- package/dist/agent-src/skills/legal-practice-profile/evals/triggers.json +0 -17
- package/dist/agent-src/skills/license-compliance-audit/evals/triggers.json +0 -52
- package/dist/agent-src/skills/license-compliance-borrow-check/evals/triggers.json +0 -52
- package/dist/agent-src/skills/license-compliance-credits/evals/triggers.json +0 -52
- package/dist/agent-src/skills/llm-provider-knowledge/evals/triggers.json +0 -20
- package/dist/agent-src/skills/logging-monitoring/evals/evals.json +0 -16
- package/dist/agent-src/skills/logo-generation/evals/triggers.json +0 -17
- package/dist/agent-src/skills/messaging-architecture/evals/domain-truth.json +0 -16
- package/dist/agent-src/skills/messaging-architecture/evals/evals.json +0 -16
- package/dist/agent-src/skills/monorepo-workspace/evals/triggers.json +0 -17
- package/dist/agent-src/skills/nda-triage/evals/triggers.json +0 -17
- package/dist/agent-src/skills/operational-readiness/evals/triggers.json +0 -17
- package/dist/agent-src/skills/pdf-tools/evals/triggers.json +0 -52
- package/dist/agent-src/skills/perf-feedback-craft/evals/evals.json +0 -16
- package/dist/agent-src/skills/persona-improvement/evals/triggers.json +0 -52
- package/dist/agent-src/skills/php-coder/evals/triggers.json +0 -17
- package/dist/agent-src/skills/prediction-pool-optimizer/evals/triggers.json +0 -21
- package/dist/agent-src/skills/prompt-engineering-image/evals/triggers.json +0 -17
- package/dist/agent-src/skills/prompt-engineering-patterns/evals/evals.json +0 -16
- package/dist/agent-src/skills/prompt-validator/evals/triggers.json +0 -17
- package/dist/agent-src/skills/quality-tools/evals/evals.json +0 -15
- package/dist/agent-src/skills/reasoning-orchestrator/evals/triggers.json +0 -17
- package/dist/agent-src/skills/refine-prompt/evals/evals.json +0 -16
- package/dist/agent-src/skills/refine-ticket/evals/evals.json +0 -16
- package/dist/agent-src/skills/refine-ticket/evals/output-schema.yml +0 -16
- package/dist/agent-src/skills/refine-ticket/evals/triggers.json +0 -17
- package/dist/agent-src/skills/release-comms/evals/evals.json +0 -16
- package/dist/agent-src/skills/rice-prioritization/evals/evals.json +0 -20
- package/dist/agent-src/skills/runway-cognition/evals/domain-truth.json +0 -29
- package/dist/agent-src/skills/runway-cognition/evals/evals.json +0 -20
- package/dist/agent-src/skills/scenario-modeling/evals/domain-truth.json +0 -29
- package/dist/agent-src/skills/scenario-modeling/evals/evals.json +0 -20
- package/dist/agent-src/skills/schema-review/evals/triggers.json +0 -17
- package/dist/agent-src/skills/screenshot-hygiene/evals/triggers.json +0 -52
- package/dist/agent-src/skills/security-maturity-assessment/evals/triggers.json +0 -52
- package/dist/agent-src/skills/server-hardening/evals/triggers.json +0 -17
- package/dist/agent-src/skills/skill-writing/evals/triggers.json +0 -17
- package/dist/agent-src/skills/spreadsheet-authoring/evals/triggers.json +0 -47
- package/dist/agent-src/skills/storybook-workshop/evals/triggers.json +0 -17
- package/dist/agent-src/skills/subagent-orchestration/evals/evals.json +0 -60
- package/dist/agent-src/skills/supply-chain-intake/evals/triggers.json +0 -52
- package/dist/agent-src/skills/systematic-debugging/evals/evals.json +0 -20
- package/dist/agent-src/skills/test-case-discovery/evals/triggers.json +0 -52
- package/dist/agent-src/skills/test-driven-development/evals/evals.json +0 -16
- package/dist/agent-src/skills/threat-modeling/evals/evals.json +0 -21
- package/dist/agent-src/skills/typography-system/evals/evals.json +0 -14
- package/dist/agent-src/skills/typography-system/evals/triggers.json +0 -17
- package/dist/agent-src/skills/unit-economics-modeling/evals/domain-truth.json +0 -40
- package/dist/agent-src/skills/unit-economics-modeling/evals/evals.json +0 -24
- package/dist/agent-src/skills/verify-completion-evidence/evals/evals.json +0 -16
- package/dist/agent-src/skills/verify-repair-loop/evals/output-schema.yml +0 -20
- package/dist/agent-src/skills/verify-repair-loop/evals/triggers.json +0 -17
- package/dist/agent-src/skills/vision-articulation/evals/evals.json +0 -16
- package/dist/agent-src/skills/voice-and-tone-design/evals/evals.json +0 -16
- package/dist/agent-src/skills/wireframe/evals/triggers.json +0 -17
- package/dist/agent-src/skills/workspace-link/evals/triggers.json +0 -17
- package/dist/agent-src/skills/worktree-lifecycle/evals/evals.json +0 -38
- package/dist/agent-src/skills/worktree-lifecycle/evals/triggers.json +0 -52
- package/dist/cli/agent-config.js.map +0 -1
- package/dist/cli/bash/runBash.js.map +0 -1
- package/dist/cli/commands/commands.js.map +0 -1
- package/dist/cli/commands/config.js.map +0 -1
- package/dist/cli/commands/doctorShell.js.map +0 -1
- package/dist/cli/commands/mcpServer.js.map +0 -1
- package/dist/cli/commands/packs.js.map +0 -1
- package/dist/cli/commands/profiles.js.map +0 -1
- package/dist/cli/commands/recordTriggerEval.js.map +0 -1
- package/dist/cli/commands/rtkDetect.js.map +0 -1
- package/dist/cli/commands/settings.js.map +0 -1
- package/dist/cli/commands/uiAudit.js.map +0 -1
- package/dist/cli/commands/uiRender.js.map +0 -1
- package/dist/cli/commands/uiServe.js.map +0 -1
- package/dist/cli/commands/versions.js.map +0 -1
- package/dist/cli/commands/workspaces.js.map +0 -1
- package/dist/cli/configRoot.js.map +0 -1
- package/dist/cli/discovery/loadManifest.js.map +0 -1
- package/dist/cli/firstRunNotice.js.map +0 -1
- package/dist/cli/help.js.map +0 -1
- package/dist/cli/initRouting.js.map +0 -1
- package/dist/cli/log/logger.js.map +0 -1
- package/dist/cli/main.js.map +0 -1
- package/dist/cli/mcp/content.js.map +0 -1
- package/dist/cli/mcp/dispatch.js.map +0 -1
- package/dist/cli/mcp/stdio.js.map +0 -1
- package/dist/cli/paths.js.map +0 -1
- package/dist/cli/python/knowledge_ingest.js.map +0 -1
- package/dist/cli/python/workspace_analytics.js.map +0 -1
- package/dist/cli/python/workspace_crypto.js.map +0 -1
- package/dist/cli/python/workspace_documents.js.map +0 -1
- package/dist/cli/python/workspace_drive.js.map +0 -1
- package/dist/cli/python/workspace_drive_health.js.map +0 -1
- package/dist/cli/python/workspace_explain.js.map +0 -1
- package/dist/cli/python/workspace_hosts.js.map +0 -1
- package/dist/cli/python/workspace_inbox.js.map +0 -1
- package/dist/cli/python/workspace_render.js.map +0 -1
- package/dist/cli/python/workspace_roles.js.map +0 -1
- package/dist/cli/python/workspace_secrets.js.map +0 -1
- package/dist/cli/python/workspace_sessions.js.map +0 -1
- package/dist/cli/python/workspace_skills.js.map +0 -1
- package/dist/cli/registry.js.map +0 -1
- package/dist/install/agentSwitchDetection.js.map +0 -1
- package/dist/install/agentSwitchProfile.js.map +0 -1
- package/dist/install/atomic.js.map +0 -1
- package/dist/install/claudePathsPlan.js.map +0 -1
- package/dist/install/conflict.js.map +0 -1
- package/dist/install/detect.js.map +0 -1
- package/dist/install/emit_host_rules_cli.js.map +0 -1
- package/dist/install/globalRuleLayers.js.map +0 -1
- package/dist/install/hostLayerFingerprint.js.map +0 -1
- package/dist/install/partitionEligibility.js.map +0 -1
- package/dist/install/paths.js.map +0 -1
- package/dist/install/plan.js.map +0 -1
- package/dist/install/preflight.js.map +0 -1
- package/dist/install/rtkDetection.js.map +0 -1
- package/dist/install/ruleInScope.js.map +0 -1
- package/dist/install/ruleLayerPartition.js.map +0 -1
- package/dist/install/rule_scope.js.map +0 -1
- package/dist/install/rule_scope_cli.js.map +0 -1
- package/dist/install/selectedTools.js.map +0 -1
- package/dist/install/toolDetection.js.map +0 -1
- package/dist/install/txlog.js.map +0 -1
- package/dist/install/types.js.map +0 -1
- package/dist/install/wizard-plan.js.map +0 -1
- package/dist/install/wizardDismissals.js.map +0 -1
- package/dist/scripts/_lib/agent_settings.js.map +0 -1
- package/dist/scripts/_lib/agent_src.js.map +0 -1
- package/dist/scripts/_lib/claude_builtin_names.js.map +0 -1
- package/dist/scripts/_lib/claude_plugin.js.map +0 -1
- package/dist/scripts/_lib/claude_settings_hooks.js.map +0 -1
- package/dist/scripts/_lib/compile_time_toggles.js.map +0 -1
- package/dist/scripts/_lib/environment_detector.js.map +0 -1
- package/dist/scripts/_lib/host_launch.js.map +0 -1
- package/dist/scripts/_lib/install_layout.js.map +0 -1
- package/dist/scripts/_lib/installed_lock.js.map +0 -1
- package/dist/scripts/_lib/lean_projection_mode.js.map +0 -1
- package/dist/scripts/_lib/model_tier.js.map +0 -1
- package/dist/scripts/_lib/prune_empty_dirs.js.map +0 -1
- package/dist/scripts/_lib/scoped_projection.js.map +0 -1
- package/dist/scripts/_lib/script_output.js.map +0 -1
- package/dist/scripts/_lib/spawn_env.js.map +0 -1
- package/dist/scripts/_lib/surface_tiers.js.map +0 -1
- package/dist/scripts/_lib/token_count.js.map +0 -1
- package/dist/scripts/_lib/trigger_eval_floors.js.map +0 -1
- package/dist/scripts/_lib/ui_surface.js.map +0 -1
- package/dist/scripts/_lib/user_global_paths.js.map +0 -1
- package/dist/scripts/ai_council/modes.js.map +0 -1
- package/dist/scripts/ai_council/transport_resolver.js.map +0 -1
- package/dist/scripts/condense.js.map +0 -1
- package/dist/scripts/project_thin_rules.js.map +0 -1
- package/dist/server/app.js.map +0 -1
- package/dist/server/io/atomicMultiWrite.js.map +0 -1
- package/dist/server/io/atomicWrite.js.map +0 -1
- package/dist/server/io/sharedWriteCheck.js.map +0 -1
- package/dist/server/io/substituteTemplate.js.map +0 -1
- package/dist/server/io/yamlIO.js.map +0 -1
- package/dist/server/nicknameResolver.js.map +0 -1
- package/dist/server/port.js.map +0 -1
- package/dist/server/routes/discovery.js.map +0 -1
- package/dist/server/routes/install.js.map +0 -1
- package/dist/server/routes/ping.js.map +0 -1
- package/dist/server/routes/schema.js.map +0 -1
- package/dist/server/routes/settings.js.map +0 -1
- package/dist/server/routes/settingsChanges.js.map +0 -1
- package/dist/server/routes/userMd.js.map +0 -1
- package/dist/server/routes/wizard.js.map +0 -1
- package/dist/server/routes/workspace.js.map +0 -1
- package/dist/server/schemas/settings.js.map +0 -1
- package/dist/server/serverInfo.js.map +0 -1
- package/dist/server/token.js.map +0 -1
- package/dist/server/writeRoot.js.map +0 -1
- package/dist/shared/capabilities.js.map +0 -1
- package/dist/shared/interactiveContext.js.map +0 -1
- package/dist/shared/nicknamePrefill.js.map +0 -1
- package/dist/shared/settingsAsks.js.map +0 -1
- package/dist/shared/settingsCarveOut.js.map +0 -1
- package/dist/shared/settingsClasses.js.map +0 -1
- package/dist/shared/settingsConsent.js.map +0 -1
- package/dist/shared/settingsSurface.js.map +0 -1
- package/dist/shared/skillRanking.js.map +0 -1
- package/dist/shared/userMd/formAdapter.js.map +0 -1
- package/dist/shared/userMd/schema.js.map +0 -1
- package/dist/shared/userMd/utils.js.map +0 -1
- package/dist/ui/assets/index-Cxgy63kz.js +0 -26
- package/dist/ui/assets/index-Cxgy63kz.js.map +0 -1
- package/src/scripts/_lib/adr_frontmatter.test.ts +0 -365
- package/src/scripts/_lib/adversarial_council_gate.test.ts +0 -112
- package/src/scripts/_lib/adversarial_reconcile.test.ts +0 -197
- package/src/scripts/_lib/auto_dispatch.corpus.test.ts +0 -150
- package/src/scripts/_lib/secret_detector.test.ts +0 -108
- package/src/scripts/_lib/secret_detector_adversarial.test.ts +0 -116
- package/src/scripts/_lib/ui_authority.test.ts +0 -251
- package/src/scripts/_lib/untrusted_content.test.ts +0 -175
- package/src/scripts/check_secret_leak.test.ts +0 -90
- package/src/scripts/design_slop_rules.test.ts +0 -246
- package/src/scripts/self_review_gate.test.ts +0 -296
- package/src/shared/capabilities.test.ts +0 -43
|
@@ -16,6 +16,9 @@
|
|
|
16
16
|
* Flow:
|
|
17
17
|
*
|
|
18
18
|
* - `plan` outcome is not `success` → BLOCKED on precondition.
|
|
19
|
+
* - no RED evidence on `state.tests` → BLOCKED with
|
|
20
|
+
* `@agent-directive: observe-red` so the agent writes and observes the
|
|
21
|
+
* failing test for the next single behaviour BEFORE any production edit.
|
|
19
22
|
* - `state.changes` empty → BLOCKED with `@agent-directive:
|
|
20
23
|
* apply-plan` so the agent applies the plan.
|
|
21
24
|
* - `state.changes` populated but malformed (entries missing
|
|
@@ -26,6 +29,26 @@
|
|
|
26
29
|
* `docs/contracts/implement-ticket-flow.md#deliverystate-the-only-shared-object`
|
|
27
30
|
* — each entry is a dict with at least a `path`; optional
|
|
28
31
|
* `lines` / `purpose` feed the delivery report.
|
|
32
|
+
*
|
|
33
|
+
* RED evidence lives at `state.tests.red` and is the engine-side carrier for
|
|
34
|
+
* the test-first default in `rules/think-before-action.md`. Two accepted
|
|
35
|
+
* shapes, and nothing else counts:
|
|
36
|
+
*
|
|
37
|
+
* - one observation, or a list of them, each a dict with a non-empty
|
|
38
|
+
* `behaviour` and a `failure_class` from `_RED_FAILURE_CLASSES` — the three
|
|
39
|
+
* valid RED classes the `test-driven-development` skill admits (a failing
|
|
40
|
+
* assertion, a missing target, a contract failure). A broken fixture, a
|
|
41
|
+
* syntax error in the test, a missing unrelated dependency and a runner
|
|
42
|
+
* fault are NOT RED and are rejected by that same contract, not here.
|
|
43
|
+
* - `{exempt: "<reason>"}` — the recorded override for work the skill's
|
|
44
|
+
* *Do NOT use when* list already excludes (scaffolding, generated files,
|
|
45
|
+
* documentation). Recorded, never silent: an absent key is not an exemption.
|
|
46
|
+
*
|
|
47
|
+
* The gate is per behaviour, not per run: it names the behaviour it is waiting
|
|
48
|
+
* on and re-fires for the next one. It does NOT detect a batch — an agent that
|
|
49
|
+
* front-loads every test for the feature satisfies it, and the eval that fails
|
|
50
|
+
* a one-test-phase-then-one-code-phase plan is the control for that, not this
|
|
51
|
+
* step.
|
|
29
52
|
*/
|
|
30
53
|
|
|
31
54
|
import type { DeliveryState} from '../../delivery_state.js';
|
|
@@ -39,6 +62,13 @@ export const AMBIGUITIES: ReadonlyArray<Record<string, string>> = [
|
|
|
39
62
|
trigger: '`plan` outcome is not `success`',
|
|
40
63
|
resolution: 're-run `/implement-ticket` from the start',
|
|
41
64
|
},
|
|
65
|
+
{
|
|
66
|
+
code: 'no_red_evidence',
|
|
67
|
+
trigger: '`state.tests.red` carries neither an observed failing test for a ' +
|
|
68
|
+
'behaviour nor a recorded exemption',
|
|
69
|
+
resolution: 'agent directive `observe-red` → write the failing test for the ' +
|
|
70
|
+
'next single behaviour, observe it fail, record it',
|
|
71
|
+
},
|
|
42
72
|
{
|
|
43
73
|
code: 'empty_changes_delegate',
|
|
44
74
|
trigger: '`state.changes` empty — plan not applied yet',
|
|
@@ -68,6 +98,13 @@ export function run(state: DeliveryState): StepResult {
|
|
|
68
98
|
return _blocked_on_precondition(state);
|
|
69
99
|
}
|
|
70
100
|
|
|
101
|
+
// Test-first, enforced where the engine can see it: no production work is
|
|
102
|
+
// emitted for a behaviour whose failing test has not been observed.
|
|
103
|
+
const redIssue = _diagnose_red(state.tests);
|
|
104
|
+
if (redIssue !== null) {
|
|
105
|
+
return _blocked_on_missing_red(state, redIssue);
|
|
106
|
+
}
|
|
107
|
+
|
|
71
108
|
if (!_pyTruthy(state.changes)) {
|
|
72
109
|
return _delegate_to_apply_plan(state);
|
|
73
110
|
}
|
|
@@ -98,6 +135,59 @@ function _diagnose_changes(changes: Any[]): string[] {
|
|
|
98
135
|
return issues;
|
|
99
136
|
}
|
|
100
137
|
|
|
138
|
+
/** The three RED classes the `test-driven-development` mode contract admits. */
|
|
139
|
+
const _RED_FAILURE_CLASSES = ['assertion', 'missing_target', 'contract'] as const;
|
|
140
|
+
|
|
141
|
+
/**
|
|
142
|
+
* `null` when `state.tests` carries usable RED evidence, else the complaint.
|
|
143
|
+
*
|
|
144
|
+
* Absent is a complaint, not an exemption — the whole point of the gate.
|
|
145
|
+
*/
|
|
146
|
+
function _diagnose_red(tests: Any): string | null {
|
|
147
|
+
if (!_isPlainObject(tests)) {
|
|
148
|
+
return 'no `state.tests.red` recorded';
|
|
149
|
+
}
|
|
150
|
+
const red = (tests as Record<string, unknown>).red;
|
|
151
|
+
if (!_pyTruthy(red)) {
|
|
152
|
+
return 'no `state.tests.red` recorded';
|
|
153
|
+
}
|
|
154
|
+
if (_isPlainObject(red) && _pyTruthy((red as Record<string, unknown>).exempt)) {
|
|
155
|
+
return null;
|
|
156
|
+
}
|
|
157
|
+
const observations = Array.isArray(red) ? red : [red];
|
|
158
|
+
for (const obs of observations) {
|
|
159
|
+
if (!_isPlainObject(obs)) {
|
|
160
|
+
return 'a `red` observation is not a dict';
|
|
161
|
+
}
|
|
162
|
+
const o = obs as Record<string, unknown>;
|
|
163
|
+
if (typeof o.behaviour !== 'string' || _pyStrip(o.behaviour).length === 0) {
|
|
164
|
+
return 'a `red` observation names no `behaviour`';
|
|
165
|
+
}
|
|
166
|
+
if (!_RED_FAILURE_CLASSES.includes(o.failure_class as (typeof _RED_FAILURE_CLASSES)[number])) {
|
|
167
|
+
return (
|
|
168
|
+
`\`red\` observation for \`${_pyStrip(o.behaviour)}\` has ` +
|
|
169
|
+
`\`failure_class\` outside ${_RED_FAILURE_CLASSES.join(', ')}`
|
|
170
|
+
);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
return null;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
function _blocked_on_missing_red(state: DeliveryState, issue: string): StepResult {
|
|
177
|
+
const ticketId = _ticketId(state);
|
|
178
|
+
return new StepResult({
|
|
179
|
+
outcome: Outcome.BLOCKED,
|
|
180
|
+
questions: [
|
|
181
|
+
agent_directive('observe-red', { ticket: ticketId }),
|
|
182
|
+
`> Ticket ${ticketId} — implement gate refused: ${issue}. Write the ` +
|
|
183
|
+
'failing test for the next single behaviour and observe it fail first.',
|
|
184
|
+
'> 1. Continue — write and run that one failing test',
|
|
185
|
+
'> 2. Record an exemption — `state.tests.red = {exempt: "<reason>"}`',
|
|
186
|
+
],
|
|
187
|
+
message: `Ticket ${ticketId} needs an observed failing test before production work: ${issue}.`,
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
|
|
101
191
|
function _delegate_to_apply_plan(state: DeliveryState): StepResult {
|
|
102
192
|
const ticketId = _ticketId(state);
|
|
103
193
|
return new StepResult({
|
|
@@ -45,6 +45,17 @@ export const SUPPORTED_KINDS: ReadonlyArray<string> = ['ticket', 'prompt'];
|
|
|
45
45
|
// test, verify, report). The leaf name is the dispatcher slot key; in Python
|
|
46
46
|
// it is derived via `step.__name__.rsplit(".", 1)[-1]` — hardcoded here since
|
|
47
47
|
// the modules are imported statically.
|
|
48
|
+
//
|
|
49
|
+
// `implement` stays BEFORE `test`, deliberately, and the order is not the
|
|
50
|
+
// test-after instruction it looks like. The tuple is linear and runs once per
|
|
51
|
+
// flow, so moving `test` in front of `implement` would buy exactly one test
|
|
52
|
+
// phase followed by one code phase — batch-TDD, which is the second
|
|
53
|
+
// anti-pattern rather than a fix for the first. Test-first is enforced INSIDE
|
|
54
|
+
// `implement` instead: `./implement.ts` refuses to emit production work for a
|
|
55
|
+
// behaviour whose failing test has not been observed (`state.tests.red`), so
|
|
56
|
+
// the discipline is per behaviour while the tuple stays per flow. The `test`
|
|
57
|
+
// slot here is the whole-suite verdict that gates `verify`, never the first
|
|
58
|
+
// time a test is written.
|
|
48
59
|
const _STEPS: ReadonlyArray<[string, { run: Step; AMBIGUITIES: ReadonlyArray<Record<string, string>> }]> = [
|
|
49
60
|
['refine', refine],
|
|
50
61
|
['memory', memory],
|
|
@@ -25,6 +25,13 @@
|
|
|
25
25
|
* be silently skipped, and the loop cannot report one as success.
|
|
26
26
|
* - Optional keys (`targeted`, `full`, `duration_ms`,
|
|
27
27
|
* `followups`) feed the delivery report.
|
|
28
|
+
* - `red` is NOT a verdict. It is the per-behaviour RED evidence
|
|
29
|
+
* `./implement.ts` gates on, written before any production edit, and it
|
|
30
|
+
* says nothing about the suite. A `state.tests` carrying `red` and no
|
|
31
|
+
* `verdict` therefore means the runner has not been invoked for the suite
|
|
32
|
+
* yet → delegate, exactly as an empty `state.tests` does. A `verdict` that
|
|
33
|
+
* is present and unrecognised still blocks on shape; this is a
|
|
34
|
+
* not-yet-run case, never a relaxed verdict check.
|
|
28
35
|
*/
|
|
29
36
|
|
|
30
37
|
import type { DeliveryState} from '../../delivery_state.js';
|
|
@@ -86,7 +93,7 @@ export function run(state: DeliveryState): StepResult {
|
|
|
86
93
|
}
|
|
87
94
|
|
|
88
95
|
const tests = state.tests;
|
|
89
|
-
if (!_pyTruthy(tests)) {
|
|
96
|
+
if (!_pyTruthy(tests) || _isRedOnly(tests)) {
|
|
90
97
|
return _delegate_to_run_tests(state, policy.widen_tests);
|
|
91
98
|
}
|
|
92
99
|
|
|
@@ -104,6 +111,21 @@ export function run(state: DeliveryState): StepResult {
|
|
|
104
111
|
return new StepResult({ outcome: Outcome.SUCCESS });
|
|
105
112
|
}
|
|
106
113
|
|
|
114
|
+
/**
|
|
115
|
+
* True when `state.tests` carries only the pre-implement RED record.
|
|
116
|
+
*
|
|
117
|
+
* `red` is written by the `implement` gate's `observe-red` directive; it is
|
|
118
|
+
* evidence about one behaviour's first failing run, not a suite verdict. Only
|
|
119
|
+
* a MISSING `verdict` routes here — a present-but-wrong one still blocks.
|
|
120
|
+
*/
|
|
121
|
+
function _isRedOnly(tests: Any): boolean {
|
|
122
|
+
if (!_isPlainObject(tests)) {
|
|
123
|
+
return false;
|
|
124
|
+
}
|
|
125
|
+
const d = tests as Record<string, unknown>;
|
|
126
|
+
return !('verdict' in d) && _pyTruthy(d.red);
|
|
127
|
+
}
|
|
128
|
+
|
|
107
129
|
function _diagnose_tests(tests: Any): string[] {
|
|
108
130
|
if (!_isPlainObject(tests)) {
|
|
109
131
|
return [`state.tests must be a dict, got ${_pyTypeName(tests)}`];
|
|
@@ -33,7 +33,16 @@ import { type Any, Outcome, StepResult, agent_directive } from '../../delivery_s
|
|
|
33
33
|
import { resolve_policy } from '../../persona_policy.js';
|
|
34
34
|
import { decide, partial_exit, record_attempt, retry_halt, unmet_dod, verdict_signature } from './_self_fix.js';
|
|
35
35
|
|
|
36
|
-
|
|
36
|
+
/**
|
|
37
|
+
* DERIVED, never re-declared. `delivery_state.ts` is the step vocabulary's
|
|
38
|
+
* declaration for the template tree (templates are self-contained by contract
|
|
39
|
+
* and may not import from `src/scripts/`, so the registry mirrors it rather
|
|
40
|
+
* than the other way round). Spelling the three values again here made this the
|
|
41
|
+
* THIRD copy, and a third copy is how one vocabulary becomes two truths --
|
|
42
|
+
* which is the defect the outcome-vocabulary reconciliation was opened to fix.
|
|
43
|
+
* Found by the widened duplicate detector, 2026-08-30.
|
|
44
|
+
*/
|
|
45
|
+
const _ALLOWED_VERDICTS = Object.values(Outcome) as ReadonlyArray<Outcome>;
|
|
37
46
|
|
|
38
47
|
/** Declared ambiguity surfaces. Advisory personas skip this step entirely. */
|
|
39
48
|
export const AMBIGUITIES: ReadonlyArray<Record<string, string>> = [
|
|
@@ -20,7 +20,11 @@ import {
|
|
|
20
20
|
/** Agent directive that drives end-to-end smoke scenarios. */
|
|
21
21
|
export const INTEGRATION_TEST_DIRECTIVE = 'integration-test';
|
|
22
22
|
|
|
23
|
-
|
|
23
|
+
/**
|
|
24
|
+
* DERIVED, never re-declared — see the note in `directives/backend/verify.ts`.
|
|
25
|
+
* This was the fourth copy of the step vocabulary.
|
|
26
|
+
*/
|
|
27
|
+
const _ALLOWED_VERDICTS: ReadonlyArray<string> = Object.values(Outcome);
|
|
24
28
|
|
|
25
29
|
export const AMBIGUITIES: ReadonlyArray<Record<string, string>> = [
|
|
26
30
|
{
|
|
@@ -236,7 +236,7 @@ export function resolve_toolchain(
|
|
|
236
236
|
quality.push(..._php_quality(project_root, composer, wrappers));
|
|
237
237
|
}
|
|
238
238
|
if (has_package) {
|
|
239
|
-
runners.push(..._js_runners(pkg, wrappers));
|
|
239
|
+
runners.push(..._js_runners(pkg, wrappers, _package_manager(project_root, pkg)));
|
|
240
240
|
quality.push(..._js_quality(pkg, wrappers));
|
|
241
241
|
}
|
|
242
242
|
if (has_python) {
|
|
@@ -347,7 +347,7 @@ function _php_runners(root: string, composer: Manifest, wrappers: Wrappers): Run
|
|
|
347
347
|
];
|
|
348
348
|
}
|
|
349
349
|
|
|
350
|
-
function _js_runners(pkg: Manifest, wrappers: Wrappers): RunnerResult[] {
|
|
350
|
+
function _js_runners(pkg: Manifest, wrappers: Wrappers, manager: string): RunnerResult[] {
|
|
351
351
|
const deps = _all_dependencies(
|
|
352
352
|
pkg,
|
|
353
353
|
'dependencies',
|
|
@@ -383,17 +383,17 @@ function _js_runners(pkg: Manifest, wrappers: Wrappers): RunnerResult[] {
|
|
|
383
383
|
|
|
384
384
|
// e2e runner — separate bucket, excluded unless --include-e2e.
|
|
385
385
|
if ('@playwright/test' in deps || 'playwright' in deps) {
|
|
386
|
-
const cmd = _script_command(scripts, ['test:e2e', 'e2e', 'playwright']) || 'npx playwright test';
|
|
386
|
+
const cmd = _script_command(scripts, ['test:e2e', 'e2e', 'playwright'], manager) || 'npx playwright test';
|
|
387
387
|
out.push(
|
|
388
388
|
new RunnerResult('js', 'playwright', cmd, SPEED_E2E, HIGH, '@playwright/test in package deps'),
|
|
389
389
|
);
|
|
390
390
|
} else if ('cypress' in deps) {
|
|
391
|
-
const cmd = _script_command(scripts, ['test:e2e', 'e2e', 'cypress']) || 'npx cypress run';
|
|
391
|
+
const cmd = _script_command(scripts, ['test:e2e', 'e2e', 'cypress'], manager) || 'npx cypress run';
|
|
392
392
|
out.push(new RunnerResult('js', 'cypress', cmd, SPEED_E2E, HIGH, 'cypress in package deps'));
|
|
393
393
|
}
|
|
394
394
|
|
|
395
395
|
// slow bucket — an explicit slow/integration script.
|
|
396
|
-
const slow_cmd = _script_command(scripts, ['test:slow', 'test:integration']);
|
|
396
|
+
const slow_cmd = _script_command(scripts, ['test:slow', 'test:integration'], manager);
|
|
397
397
|
if (slow_cmd) {
|
|
398
398
|
out.push(
|
|
399
399
|
new RunnerResult(
|
|
@@ -487,19 +487,100 @@ function _task_runner_wrappers(root: string, pkg: Manifest): Wrappers {
|
|
|
487
487
|
}
|
|
488
488
|
const scripts: Manifest = _isDict(pkg.scripts) ? pkg.scripts : {};
|
|
489
489
|
if (_isDict(scripts) && 'test' in scripts) {
|
|
490
|
-
out['js-test'] = `${_package_manager(root)} test`;
|
|
490
|
+
out['js-test'] = `${_package_manager(root, pkg)} test`;
|
|
491
491
|
}
|
|
492
492
|
return out;
|
|
493
493
|
}
|
|
494
494
|
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
495
|
+
/**
|
|
496
|
+
* Lockfile → manager, in the order `monorepo-workspace/SKILL.md` § 1 states.
|
|
497
|
+
* Kept as data rather than a chain of ifs so `PACKAGE_MANAGER_BRANCHES` below
|
|
498
|
+
* can assert the count against the documented one.
|
|
499
|
+
*/
|
|
500
|
+
const LOCKFILE_MANAGERS: ReadonlyArray<readonly [string, string]> = [
|
|
501
|
+
['pnpm-lock.yaml', 'pnpm'],
|
|
502
|
+
['yarn.lock', 'yarn'],
|
|
503
|
+
['bun.lock', 'bun'],
|
|
504
|
+
['bun.lockb', 'bun'],
|
|
505
|
+
['package-lock.json', 'npm'],
|
|
506
|
+
];
|
|
507
|
+
|
|
508
|
+
/**
|
|
509
|
+
* The five branches `monorepo-workspace/SKILL.md` § 1 specifies, named so a
|
|
510
|
+
* test can assert none went missing. The skill is the contract and it was
|
|
511
|
+
* already correct; this list exists because the code implemented three of the
|
|
512
|
+
* five and nothing noticed.
|
|
513
|
+
*/
|
|
514
|
+
export const PACKAGE_MANAGER_BRANCHES: readonly string[] = [
|
|
515
|
+
'packageManager',
|
|
516
|
+
'pnpm',
|
|
517
|
+
'yarn',
|
|
518
|
+
'bun',
|
|
519
|
+
'npm',
|
|
520
|
+
] as const;
|
|
521
|
+
|
|
522
|
+
export interface PackageManagerResolution {
|
|
523
|
+
/** The resolved manager, or `null` when the cascade deliberately refuses. */
|
|
524
|
+
manager: string | null;
|
|
525
|
+
/** Which branch answered — one of `PACKAGE_MANAGER_BRANCHES`, or `'ambiguous'`. */
|
|
526
|
+
via: string;
|
|
527
|
+
/** Non-empty when the cascade refuses: the reported finding. */
|
|
528
|
+
finding: string;
|
|
529
|
+
}
|
|
530
|
+
|
|
531
|
+
/**
|
|
532
|
+
* Resolve the package manager per `monorepo-workspace/SKILL.md` § 1.
|
|
533
|
+
*
|
|
534
|
+
* Two behaviours the previous three-branch version did not have, and both are
|
|
535
|
+
* in the skill rather than invented here:
|
|
536
|
+
*
|
|
537
|
+
* - `packageManager` in the root `package.json` is the DECLARATION and wins
|
|
538
|
+
* when present, because it is what Corepack enforces. A lockfile is an
|
|
539
|
+
* inference; a declaration is not.
|
|
540
|
+
* - **Two lockfiles is a finding, not a tie to break.** The old code returned
|
|
541
|
+
* `pnpm` for a repository carrying both `pnpm-lock.yaml` and `yarn.lock`,
|
|
542
|
+
* silently picking the first branch it tested. That is a guess presented as
|
|
543
|
+
* an answer, and the skill says to report both and stop.
|
|
544
|
+
*/
|
|
545
|
+
export function _resolve_package_manager(
|
|
546
|
+
root: string,
|
|
547
|
+
pkg?: Manifest,
|
|
548
|
+
): PackageManagerResolution {
|
|
549
|
+
const declared = pkg === undefined ? undefined : pkg['packageManager'];
|
|
550
|
+
if (typeof declared === 'string' && declared.trim() !== '') {
|
|
551
|
+
// `pnpm@9.1.0` → `pnpm`. Corepack's own format.
|
|
552
|
+
const name = declared.trim().split('@')[0] as string;
|
|
553
|
+
if (name !== '') {
|
|
554
|
+
return { manager: name, via: 'packageManager', finding: '' };
|
|
555
|
+
}
|
|
556
|
+
}
|
|
557
|
+
const present = LOCKFILE_MANAGERS.filter(([file]) => _is_file(path.join(root, file)));
|
|
558
|
+
const distinct = [...new Set(present.map(([, mgr]) => mgr))];
|
|
559
|
+
if (distinct.length > 1) {
|
|
560
|
+
return {
|
|
561
|
+
manager: null,
|
|
562
|
+
via: 'ambiguous',
|
|
563
|
+
finding:
|
|
564
|
+
`two package-manager lockfiles present (${present.map(([f]) => f).join(', ')}) ` +
|
|
565
|
+
'and no `packageManager` declaration — report both and stop, per ' +
|
|
566
|
+
'monorepo-workspace SKILL.md § 1',
|
|
567
|
+
};
|
|
498
568
|
}
|
|
499
|
-
if (
|
|
500
|
-
|
|
569
|
+
if (distinct.length === 1) {
|
|
570
|
+
const mgr = distinct[0] as string;
|
|
571
|
+
return { manager: mgr, via: mgr, finding: '' };
|
|
501
572
|
}
|
|
502
|
-
return 'npm';
|
|
573
|
+
return { manager: 'npm', via: 'npm', finding: '' };
|
|
574
|
+
}
|
|
575
|
+
|
|
576
|
+
/**
|
|
577
|
+
* The resolved manager as a bare string for command construction. Falls back to
|
|
578
|
+
* `npm` on the ambiguous case so a caller building a command string still gets
|
|
579
|
+
* one — the FINDING is what carries the ambiguity, and a caller that needs it
|
|
580
|
+
* calls `_resolve_package_manager` directly.
|
|
581
|
+
*/
|
|
582
|
+
function _package_manager(root: string, pkg?: Manifest): string {
|
|
583
|
+
return _resolve_package_manager(root, pkg).manager ?? 'npm';
|
|
503
584
|
}
|
|
504
585
|
|
|
505
586
|
// --------------------------------------------------------------------------
|
|
@@ -580,10 +661,17 @@ function _script_uses(scripts: Manifest, name: string, tool: string): boolean {
|
|
|
580
661
|
return typeof value === 'string' && value.includes(tool);
|
|
581
662
|
}
|
|
582
663
|
|
|
583
|
-
|
|
664
|
+
/**
|
|
665
|
+
* Build a `<manager> run <script>` command for the first matching script name.
|
|
666
|
+
*
|
|
667
|
+
* `manager` used to be hardcoded `npm`. Every command the work engine hands an
|
|
668
|
+
* agent for verification inherited that, so a pnpm or yarn repository was told
|
|
669
|
+
* to run a command its lockfile contradicts.
|
|
670
|
+
*/
|
|
671
|
+
function _script_command(scripts: Manifest, names: string[], manager: string): string {
|
|
584
672
|
for (const name of names) {
|
|
585
673
|
if (typeof scripts[name] === 'string') {
|
|
586
|
-
return
|
|
674
|
+
return `${manager} run ${name}`;
|
|
587
675
|
}
|
|
588
676
|
}
|
|
589
677
|
return '';
|
|
@@ -44,7 +44,45 @@ import { isUiPath, isUiTreePath } from '../../scripts/_lib/ui_surface.js';
|
|
|
44
44
|
*/
|
|
45
45
|
export const COVERAGE_BUCKETS = ['honoured', 'translated', 'flagged'];
|
|
46
46
|
export const ARTEFACT_REL = path.join('agents', 'runtime', 'state', 'ui-audit.json');
|
|
47
|
-
/**
|
|
47
|
+
/**
|
|
48
|
+
* The audit `kind` vocabulary — ONE definition, and the source the skill is
|
|
49
|
+
* tested against rather than a second hand-written list.
|
|
50
|
+
*
|
|
51
|
+
* Canonicalised 2026-08-26 (road-to-component-granularity-vocabulary 0.1). The
|
|
52
|
+
* skill declared `page | partial | component | layout` and the code emitted
|
|
53
|
+
* `component | view | style | page`; only two values were common, so an audit
|
|
54
|
+
* artefact written by the code was being read against a contract it did not
|
|
55
|
+
* satisfy. AI council 2/2: the emitted schema is authoritative for
|
|
56
|
+
* compatibility, one seat adding the refinement that the enum should live in a
|
|
57
|
+
* single module the producer, the consumer and the doc-conformance test all
|
|
58
|
+
* depend on — which is what this constant is.
|
|
59
|
+
*
|
|
60
|
+
* `partial` and `layout` are NOT adopted. Both sound like they mean something,
|
|
61
|
+
* and neither has an operational definition anyone could test: measured against
|
|
62
|
+
* a real tree, there is no line. Adding them would replace two undocumented
|
|
63
|
+
* values with two speculative ones.
|
|
64
|
+
*
|
|
65
|
+
* `view` IS retained, against both council seats' recommendation, because the
|
|
66
|
+
* premise they were given is false. The roadmap records `view` as "0 in any JS
|
|
67
|
+
* tree" and both seats read that as zero-yield. Measured on this repository
|
|
68
|
+
* 2026-08-26: **`view` = 2**, on
|
|
69
|
+
* `tests/eval/frontend-corpus/cases/blade-view/…` and
|
|
70
|
+
* `…/livewire-flux/…`. It is the BLADE branch. "Zero in a JS tree" is true of it
|
|
71
|
+
* the way "zero cats in a dog show" is true — the instrument was pointed at the
|
|
72
|
+
* wrong corpus. Removing it would have deleted this suite's only Laravel
|
|
73
|
+
* classification.
|
|
74
|
+
*/
|
|
75
|
+
export const AUDIT_KINDS = ['component', 'view', 'style', 'page'];
|
|
76
|
+
/**
|
|
77
|
+
* Files that mark an adopted design system, and the marker each implies.
|
|
78
|
+
*
|
|
79
|
+
* The `shadcn` row is a FALLBACK, not the detector. shadcn's own
|
|
80
|
+
* `components.json` declares where its primitives live under `aliases.ui`, and a
|
|
81
|
+
* project that points that alias anywhere other than `components/ui/` was
|
|
82
|
+
* reported as having no design system at all. Read the declaration first — see
|
|
83
|
+
* `shadcnUiDirs` — and keep this pattern for the case where `components.json`
|
|
84
|
+
* is absent or unreadable.
|
|
85
|
+
*/
|
|
48
86
|
const SYSTEM_MARKERS = [
|
|
49
87
|
[/components\/ui\/[a-z-]+\.tsx?$/i, 'shadcn'],
|
|
50
88
|
[/\btailwind\.config\.[cm]?[jt]s$/i, 'tailwind'],
|
|
@@ -77,19 +115,90 @@ function walk(root, out = [], depth = 0) {
|
|
|
77
115
|
}
|
|
78
116
|
return out;
|
|
79
117
|
}
|
|
80
|
-
|
|
118
|
+
/**
|
|
119
|
+
* True when a module's body is re-exports and nothing else — a barrel.
|
|
120
|
+
*
|
|
121
|
+
* `index.[jt]sx?` is one of the page markers, and a barrel is the commonest
|
|
122
|
+
* thing to call `index`. Reproduced 2026-08-26: `src/ui/components/index.tsx`
|
|
123
|
+
* containing two `export { X } from './X'` lines classified as `page`, which is
|
|
124
|
+
* wrong in a way that matters — `page` is what the `audit_path` branch and every
|
|
125
|
+
* downstream consumer read as "a screen".
|
|
126
|
+
*
|
|
127
|
+
* Deliberately conservative. Comments and blank lines are ignored; ANY other
|
|
128
|
+
* statement — a declaration, a side effect, an `export default` — makes it not a
|
|
129
|
+
* barrel, so a hybrid `index.tsx` that both re-exports and renders keeps its
|
|
130
|
+
* page classification. A false negative here costs a page label; a false
|
|
131
|
+
* positive would silently reclassify real screens.
|
|
132
|
+
*/
|
|
133
|
+
export function isBarrel(text) {
|
|
134
|
+
const body = text
|
|
135
|
+
.replace(/\/\*[\s\S]*?\*\//g, '')
|
|
136
|
+
.split('\n')
|
|
137
|
+
.map((l) => l.trim())
|
|
138
|
+
.filter((l) => l !== '' && !l.startsWith('//'));
|
|
139
|
+
if (body.length === 0)
|
|
140
|
+
return false;
|
|
141
|
+
return body.every((l) => /^export\s+(?:\*|\{)[^;]*from\s+['"][^'"]+['"];?$/.test(l));
|
|
142
|
+
}
|
|
143
|
+
function classify(rel, text = '') {
|
|
81
144
|
if (/\.(css|scss|sass|less)$/i.test(rel))
|
|
82
145
|
return 'style';
|
|
83
|
-
|
|
84
|
-
|
|
146
|
+
// `view` is the BLADE branch, not a dead one. It reads 0 in a JS tree by
|
|
147
|
+
// construction and 2 in this repository's own Laravel fixtures — the two
|
|
148
|
+
// statements are not in tension, and reading the first as "unused" is the
|
|
149
|
+
// misreading `road-to-component-granularity-vocabulary` 0.6 was written
|
|
150
|
+
// against.
|
|
85
151
|
if (/\.blade\.php$/.test(rel) || /resources\/views\//.test(rel))
|
|
86
152
|
return 'view';
|
|
153
|
+
if (/(^|\/)(pages|app)\//i.test(rel))
|
|
154
|
+
return 'page';
|
|
155
|
+
// An `index.*` that only re-exports is a barrel, not a screen.
|
|
156
|
+
if (/(^|\/)(page|index)\.[jt]sx?$/i.test(rel)) {
|
|
157
|
+
return /(^|\/)index\.[jt]sx?$/i.test(rel) && isBarrel(text) ? 'component' : 'page';
|
|
158
|
+
}
|
|
87
159
|
return 'component';
|
|
88
160
|
}
|
|
89
161
|
/**
|
|
90
162
|
* Pure core. Takes (relative path, text) pairs so every branch is testable
|
|
91
163
|
* without a tree on disk — the same reason `ui_authority` takes a record.
|
|
92
164
|
*/
|
|
165
|
+
/**
|
|
166
|
+
* The directories shadcn's own `components.json` declares as its UI root, as
|
|
167
|
+
* repo-relative prefixes with a trailing slash. Empty when the file is absent,
|
|
168
|
+
* unparseable, or declares no `aliases.ui`.
|
|
169
|
+
*
|
|
170
|
+
* `aliases.ui` is written as a path alias (`@/components/ui`, `~/lib/ui`, or a
|
|
171
|
+
* bare `src/ui`). The leading alias token is stripped rather than resolved: this
|
|
172
|
+
* is a marker detector, not a module resolver, and resolving `@` would mean
|
|
173
|
+
* reading `tsconfig.json` paths for a signal that only has to be right about
|
|
174
|
+
* WHICH DIRECTORY, never about which module.
|
|
175
|
+
*/
|
|
176
|
+
export function shadcnUiDirs(files) {
|
|
177
|
+
const out = [];
|
|
178
|
+
for (const [rel, text] of files) {
|
|
179
|
+
if (path.basename(rel) !== 'components.json')
|
|
180
|
+
continue;
|
|
181
|
+
let parsed;
|
|
182
|
+
try {
|
|
183
|
+
parsed = JSON.parse(text);
|
|
184
|
+
}
|
|
185
|
+
catch {
|
|
186
|
+
continue;
|
|
187
|
+
}
|
|
188
|
+
if (typeof parsed !== 'object' || parsed === null)
|
|
189
|
+
continue;
|
|
190
|
+
const aliases = parsed['aliases'];
|
|
191
|
+
if (typeof aliases !== 'object' || aliases === null)
|
|
192
|
+
continue;
|
|
193
|
+
const ui = aliases['ui'];
|
|
194
|
+
if (typeof ui !== 'string' || ui.trim() === '')
|
|
195
|
+
continue;
|
|
196
|
+
const stripped = ui.trim().replace(/^[@~]\//, '').replace(/^\.\//, '').replace(/\/+$/, '');
|
|
197
|
+
if (stripped !== '')
|
|
198
|
+
out.push(`${stripped}/`);
|
|
199
|
+
}
|
|
200
|
+
return [...new Set(out)];
|
|
201
|
+
}
|
|
93
202
|
export function buildArtefact(root, files, now = new Date().toISOString()) {
|
|
94
203
|
const uiFiles = files.filter(([rel]) => isUiPath(rel) || isUiTreePath(rel));
|
|
95
204
|
const components = [];
|
|
@@ -97,7 +206,17 @@ export function buildArtefact(root, files, now = new Date().toISOString()) {
|
|
|
97
206
|
const primitives = new Set();
|
|
98
207
|
const markers = [];
|
|
99
208
|
const families = new Set();
|
|
209
|
+
// Declared shadcn UI roots win over the hardcoded `components/ui/` pattern.
|
|
210
|
+
// A project whose `aliases.ui` points elsewhere used to report NO design
|
|
211
|
+
// system, which is the opposite of the truth.
|
|
212
|
+
const declaredUiDirs = shadcnUiDirs(files);
|
|
100
213
|
for (const [rel] of files) {
|
|
214
|
+
if (declaredUiDirs.length > 0 &&
|
|
215
|
+
/\.tsx?$/i.test(rel) &&
|
|
216
|
+
declaredUiDirs.some((d) => rel.startsWith(d)) &&
|
|
217
|
+
!markers.some((m) => m.marker === 'shadcn')) {
|
|
218
|
+
markers.push({ marker: 'shadcn', path: rel });
|
|
219
|
+
}
|
|
101
220
|
for (const [re, marker] of SYSTEM_MARKERS) {
|
|
102
221
|
if (re.test(rel) && !markers.some((m) => m.marker === marker))
|
|
103
222
|
markers.push({ marker, path: rel });
|
|
@@ -116,7 +235,7 @@ export function buildArtefact(root, files, now = new Date().toISOString()) {
|
|
|
116
235
|
exports.push(m[1]);
|
|
117
236
|
primitives.add(m[1]);
|
|
118
237
|
}
|
|
119
|
-
components.push({ path: rel, kind: classify(rel), exports });
|
|
238
|
+
components.push({ path: rel, kind: classify(rel, text), exports });
|
|
120
239
|
}
|
|
121
240
|
// Greenfield is the ABSENCE of a UI surface, not the absence of a
|
|
122
241
|
// DESIGN.md. A1.3 depends on this distinction: a coherent incumbent with no
|
package/dist/cli/registry.js
CHANGED
|
@@ -65,6 +65,8 @@ export const REGISTRY = [
|
|
|
65
65
|
{ name: 'roadmap:progress', disposition: 'delegate', synopsis: 'Regenerate agents/roadmaps-progress.md from open roadmaps; archives completed ones (--no-archive to skip).' },
|
|
66
66
|
{ name: 'roadmap:progress-check', disposition: 'delegate', synopsis: 'Fail if agents/roadmaps-progress.md is stale (for CI).' },
|
|
67
67
|
{ name: 'roadmap:archive', disposition: 'delegate', synopsis: 'Archive completed roadmaps (PR-gate sweep).' },
|
|
68
|
+
{ name: 'roadmap:set-step', disposition: 'delegate', synopsis: 'The single sanctioned writer of a checkbox glyph: advisory lock, line-anchored edit, live step-count invariant, post-write survival check.' },
|
|
69
|
+
{ name: 'stubs:due', disposition: 'delegate', synopsis: 'Read-only: roadmap stubs past their review_by: date, plus the decisions routed to the owner. Writes nothing; --json, --counts, --today <ISO>.' },
|
|
68
70
|
{ name: 'gates', disposition: 'delegate', synopsis: 'Open decisions that need you, as actions — owner-filtered roadmap blockers; --all, --json, --reply, --pending (staged requires_confirmation actions).' },
|
|
69
71
|
{ name: 'capabilities:index', disposition: 'delegate', synopsis: 'Regenerate CAPABILITIES.yaml (the package coverage index); --check for CI.' },
|
|
70
72
|
{ name: 'adr:effective', disposition: 'delegate', synopsis: "Effective state of one ADR: status, Decision verbatim, clauses its own amendments superseded, active amendments, axes, trigger state. Authorizes nothing." },
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { createRequire as __acCreateRequire } from 'node:module'; const require = globalThis.require ?? __acCreateRequire(import.meta.url);
|
|
2
|
-
import {
|
|
3
|
-
detectToolPresence
|
|
4
|
-
} from "./chunk-OMIVVCG2.js";
|
|
5
2
|
import {
|
|
6
3
|
buildInstallPlan,
|
|
7
4
|
sha256File
|
|
8
5
|
} from "./chunk-523HCFYO.js";
|
|
6
|
+
import {
|
|
7
|
+
detectToolPresence
|
|
8
|
+
} from "./chunk-A4QJ6ENT.js";
|
|
9
9
|
|
|
10
10
|
// src/install/preflight.ts
|
|
11
11
|
import { accessSync, constants, existsSync as existsSync2, statSync } from "node:fs";
|
|
@@ -4525,6 +4525,11 @@ var settingsSchema = external_exports.object({
|
|
|
4525
4525
|
"PostToolUse prompt-injection scanner (road-to-security-pillar.md P3.2). Default off. When on, scans tool output (file reads, web fetches, MCP responses) for injection signatures and WARNS in context (never blocks). Runtime backstop on top of the always-on untrusted-input-defense rule; detection is probabilistic."
|
|
4526
4526
|
)
|
|
4527
4527
|
}).default({}),
|
|
4528
|
+
runtime_journal: external_exports.object({
|
|
4529
|
+
enabled: external_exports.boolean().default(false).describe(
|
|
4530
|
+
"Runtime event journal (road-to-runtime-event-journal Phase 1). Default off. When on, one durable, episode-keyed record per dispatched hook event is appended to <git-common-dir>/agent-journal/journal.sqlite \u2014 a Class-A write that opens, writes and exits. It emits nothing to the model, never warns and never blocks: a locked database, a missing node:sqlite, a malformed envelope or a full disk all degrade to silence. Off rather than on because it CREATES a storage surface (a SQLite database under your .git/) rather than appending to a directory that already exists. The record type has no field able to hold free-form content \u2014 ids, an event name, a bounded capability identifier, repo-relative locators and two 12-hex digests; no prompt, no file body, no absolute path. Retention: a 30-day TTL anchored on episode close, plus explicit, time-bounded, human-only holds that themselves expire."
|
|
4531
|
+
)
|
|
4532
|
+
}).default({}),
|
|
4528
4533
|
rtk_wrap: external_exports.object({
|
|
4529
4534
|
enabled: external_exports.boolean().default(false).describe(
|
|
4530
4535
|
'PreToolUse RTK-wrap nudge (token-saving Phase 3). Default off. When on AND the binary on PATH is verified as Rust Token Killer (a live two-stage identity probe \u2014 not a self-reported flag, and never a colliding same-name binary), warns (never blocks) "re-run wrapped with rtk" before a single verbose CLI command (git/npm/cargo/docker/\u2026) \u2014 upstream reports 60\u201390% output-token savings (their estimate). Skips completeness-critical / piped / compound commands and git diff. No-op when rtk is absent, unverified, or a different tool.'
|
|
@@ -4549,6 +4554,11 @@ var settingsSchema = external_exports.object({
|
|
|
4549
4554
|
enabled: external_exports.boolean().default(false).describe(
|
|
4550
4555
|
"PreToolUse code-graph nudge (ADR-124 Phase 4). Default off. When on AND a native code-graph cache or a consumer-shipped graph.json/SCIP index is present, warns once per session (never blocks) as the agent is about to Grep/Glob or Read a source file \u2014 query the graph first for who-calls/where-used/impact questions (or rebuild if stale, build if absent). Source G\u2019s strict block-first-read mode is deliberately un-ported."
|
|
4551
4556
|
)
|
|
4557
|
+
}).default({}),
|
|
4558
|
+
suggestion_capture: external_exports.object({
|
|
4559
|
+
enabled: external_exports.boolean().default(false).describe(
|
|
4560
|
+
'Suggestion-block capture (road-to-suggestion-block-capture Phase 2). Default off. Two slots: `stop` reads `last_assistant_message` \u2014 a payload field, so no transcript file is read \u2014 and latches that the assistant turn carried a numbered-options block; `user_prompt_submit` CONSUMES that latch and classifies the answering turn as option_n / as_is / other / stale_block. Consume-once is the correctness guard: the latch is deleted on read, so a bare "1" three turns later meets no latch and classifies `other`, and a latch past its TTL or unparseable is `stale_block` rather than a guess. Writes COUNTS ONLY to agents/runtime/state/audit/suggestion-capture.jsonl \u2014 the record type has no field able to hold a prompt, an option label or a command name, and a test asserts the written key set against src/config/suggestion-capture.json. Off by default because this is an INSTRUMENT rather than a feature: it exists so a capture rate can be measured on a maintainer workspace over a fixed soak window, and there is nothing in it for a consumer to gain.'
|
|
4561
|
+
)
|
|
4552
4562
|
}).default({})
|
|
4553
4563
|
// `turn_end_gate` is deliberately ABSENT. The stop-slot turn-end gate is
|
|
4554
4564
|
// always armed (2026-08-12) and has no settings surface: whether it
|
|
@@ -3,6 +3,28 @@ import { createRequire as __acCreateRequire } from 'node:module'; const require
|
|
|
3
3
|
// src/install/detect.ts
|
|
4
4
|
import { existsSync, readFileSync, readdirSync, statSync } from "node:fs";
|
|
5
5
|
import { join, resolve } from "node:path";
|
|
6
|
+
var SCOPE_DETECT_MANIFESTS = [
|
|
7
|
+
"package.json",
|
|
8
|
+
"composer.json",
|
|
9
|
+
"pyproject.toml",
|
|
10
|
+
"Cargo.toml",
|
|
11
|
+
"go.mod",
|
|
12
|
+
"Gemfile"
|
|
13
|
+
];
|
|
14
|
+
var SCOPE_DETECT_AI_DIRS = [
|
|
15
|
+
".claude",
|
|
16
|
+
".cursor",
|
|
17
|
+
".windsurf",
|
|
18
|
+
".augment",
|
|
19
|
+
".clinerules",
|
|
20
|
+
".copilot",
|
|
21
|
+
".gemini",
|
|
22
|
+
".codex",
|
|
23
|
+
".aider",
|
|
24
|
+
".continue",
|
|
25
|
+
".roo",
|
|
26
|
+
".kilocode"
|
|
27
|
+
];
|
|
6
28
|
function detectToolPresence(root) {
|
|
7
29
|
return {
|
|
8
30
|
augment: isDir(join(root, ".augment")),
|
|
@@ -22,5 +44,7 @@ function isDir(path) {
|
|
|
22
44
|
}
|
|
23
45
|
|
|
24
46
|
export {
|
|
47
|
+
SCOPE_DETECT_MANIFESTS,
|
|
48
|
+
SCOPE_DETECT_AI_DIRS,
|
|
25
49
|
detectToolPresence
|
|
26
50
|
};
|