@aria_asi/cli 0.2.39 → 0.2.41
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/bin/aria.js +236 -34
- package/dist/aria-connector/src/action-ledger-core.d.ts +387 -0
- package/dist/aria-connector/src/action-ledger-core.d.ts.map +1 -0
- package/dist/aria-connector/src/action-ledger-core.js +638 -0
- package/dist/aria-connector/src/action-ledger-core.js.map +1 -0
- package/dist/aria-connector/src/chat.d.ts.map +1 -1
- package/dist/aria-connector/src/chat.js +5 -6
- package/dist/aria-connector/src/chat.js.map +1 -1
- package/dist/aria-connector/src/codebase-scanner.d.ts +1 -1
- package/dist/aria-connector/src/codebase-scanner.d.ts.map +1 -1
- package/dist/aria-connector/src/connectors/claude-code.d.ts +1 -0
- package/dist/aria-connector/src/connectors/claude-code.d.ts.map +1 -1
- package/dist/aria-connector/src/connectors/claude-code.js +152 -14
- package/dist/aria-connector/src/connectors/claude-code.js.map +1 -1
- package/dist/aria-connector/src/connectors/codebase-awareness.d.ts +10 -0
- package/dist/aria-connector/src/connectors/codebase-awareness.d.ts.map +1 -1
- package/dist/aria-connector/src/connectors/codebase-awareness.js +276 -27
- package/dist/aria-connector/src/connectors/codebase-awareness.js.map +1 -1
- package/dist/aria-connector/src/connectors/codex.d.ts +3 -1
- package/dist/aria-connector/src/connectors/codex.d.ts.map +1 -1
- package/dist/aria-connector/src/connectors/codex.js +1271 -40
- package/dist/aria-connector/src/connectors/codex.js.map +1 -1
- package/dist/aria-connector/src/connectors/cursor.d.ts.map +1 -1
- package/dist/aria-connector/src/connectors/cursor.js +7 -0
- package/dist/aria-connector/src/connectors/cursor.js.map +1 -1
- package/dist/aria-connector/src/connectors/governed-adapter.d.ts +30 -0
- package/dist/aria-connector/src/connectors/governed-adapter.d.ts.map +1 -0
- package/dist/aria-connector/src/connectors/governed-adapter.js +132 -0
- package/dist/aria-connector/src/connectors/governed-adapter.js.map +1 -0
- package/dist/aria-connector/src/connectors/opencode.d.ts +3 -1
- package/dist/aria-connector/src/connectors/opencode.d.ts.map +1 -1
- package/dist/aria-connector/src/connectors/opencode.js +18 -2
- package/dist/aria-connector/src/connectors/opencode.js.map +1 -1
- package/dist/aria-connector/src/connectors/repo-guard.d.ts.map +1 -1
- package/dist/aria-connector/src/connectors/repo-guard.js +25 -14
- package/dist/aria-connector/src/connectors/repo-guard.js.map +1 -1
- package/dist/aria-connector/src/connectors/runtime.d.ts.map +1 -1
- package/dist/aria-connector/src/connectors/runtime.js +92 -2
- package/dist/aria-connector/src/connectors/runtime.js.map +1 -1
- package/dist/aria-connector/src/connectors/shell.d.ts.map +1 -1
- package/dist/aria-connector/src/connectors/shell.js +123 -7
- package/dist/aria-connector/src/connectors/shell.js.map +1 -1
- package/dist/aria-connector/src/cross-cli-hive-binding.d.ts +63 -0
- package/dist/aria-connector/src/cross-cli-hive-binding.d.ts.map +1 -0
- package/dist/aria-connector/src/cross-cli-hive-binding.js +205 -0
- package/dist/aria-connector/src/cross-cli-hive-binding.js.map +1 -0
- package/dist/aria-connector/src/garden-control-plane.d.ts +6 -1
- package/dist/aria-connector/src/garden-control-plane.d.ts.map +1 -1
- package/dist/aria-connector/src/garden-control-plane.js +8 -2
- package/dist/aria-connector/src/garden-control-plane.js.map +1 -1
- package/dist/aria-connector/src/governed-surface-runner.d.ts +189 -0
- package/dist/aria-connector/src/governed-surface-runner.d.ts.map +1 -0
- package/dist/aria-connector/src/governed-surface-runner.js +1022 -0
- package/dist/aria-connector/src/governed-surface-runner.js.map +1 -0
- package/dist/aria-connector/src/index.d.ts +10 -1
- package/dist/aria-connector/src/index.d.ts.map +1 -1
- package/dist/aria-connector/src/index.js +5 -0
- package/dist/aria-connector/src/index.js.map +1 -1
- package/dist/aria-connector/src/task-runner.d.ts +3 -0
- package/dist/aria-connector/src/task-runner.d.ts.map +1 -0
- package/dist/aria-connector/src/task-runner.js +3526 -0
- package/dist/aria-connector/src/task-runner.js.map +1 -0
- package/dist/aria-web/src/lib/codebase-scanner.d.ts +21 -2
- package/dist/aria-web/src/lib/codebase-scanner.d.ts.map +1 -1
- package/dist/aria-web/src/lib/codebase-scanner.js +59 -14
- package/dist/aria-web/src/lib/codebase-scanner.js.map +1 -1
- package/dist/assets/hooks/README.md +58 -0
- package/dist/assets/hooks/aria-agent-handoff.mjs +147 -2
- package/dist/assets/hooks/aria-agent-ledger-merge.mjs +31 -7
- package/dist/assets/hooks/aria-architect-fallback.mjs +10 -2
- package/dist/assets/hooks/aria-claim-evidence-stop-gate.mjs +240 -0
- package/dist/assets/hooks/aria-cognition-substrate-binding.mjs +84 -10
- package/dist/assets/hooks/aria-first-class-coach.mjs +305 -10
- package/dist/assets/hooks/aria-harness-via-sdk.mjs +93 -16
- package/dist/assets/hooks/aria-import-resolution-gate.mjs +106 -20
- package/dist/assets/hooks/aria-outcome-record.mjs +56 -20
- package/dist/assets/hooks/aria-pre-emit-autoload.mjs +1809 -0
- package/dist/assets/hooks/aria-pre-emit-autoload.mjs.before-orchestration-redesign +1400 -0
- package/dist/assets/hooks/aria-pre-emit-dryrun.mjs +22 -3
- package/dist/assets/hooks/aria-pre-text-gate.mjs +11 -2
- package/dist/assets/hooks/aria-pre-tool-gate.mjs +516 -92
- package/dist/assets/hooks/aria-pre-tool-use.mjs +70 -6
- package/dist/assets/hooks/aria-preprompt-consult.mjs +23 -4
- package/dist/assets/hooks/aria-repo-doctrine-gate.mjs +29 -3
- package/dist/assets/hooks/aria-stop-gate.mjs +585 -76
- package/dist/assets/hooks/aria-trigger-autolearn.mjs +17 -3
- package/dist/assets/hooks/aria-universal-turn-packet.mjs +1165 -0
- package/dist/assets/hooks/aria-userprompt-abandon-detect.mjs +9 -1
- package/dist/assets/hooks/canonical-settings-block.json +172 -0
- package/dist/assets/hooks/codex-native/aria-harness-ticker-sidecar.mjs +92 -0
- package/dist/assets/hooks/codex-native/aria-hive-wal-consumer.mjs +86 -0
- package/dist/assets/hooks/codex-native/aria-live-ticker.mjs +38 -0
- package/dist/assets/hooks/codex-native/aria-post-tool-use.mjs +236 -0
- package/dist/assets/hooks/codex-native/aria-pre-tool-use.mjs +362 -0
- package/dist/assets/hooks/codex-native/aria-stop.mjs +691 -0
- package/dist/assets/hooks/codex-native/aria-userprompt-submit.mjs +623 -0
- package/dist/assets/hooks/codex-native/atlas-session-context.mjs +121 -0
- package/dist/assets/hooks/codex-native/lib/evaluate-with-kernel.mjs +257 -0
- package/dist/assets/hooks/codex-native/lib/hive-wal-consumer.mjs +452 -0
- package/dist/assets/hooks/codex-native/lib/kernel/deterministic-cognitive-kernel.mjs +914 -0
- package/dist/assets/hooks/codex-native/lib/project-boundary-cognition.mjs +143 -0
- package/dist/assets/hooks/codex-native/lib/runtime-client.mjs +3567 -0
- package/dist/assets/hooks/codex-native/lib/task-project-ledger.mjs +294 -0
- package/dist/assets/hooks/doctrine_trigger_map.json +236 -25
- package/dist/assets/hooks/doctrine_trigger_map.schema.json +46 -0
- package/dist/assets/hooks/install.sh +84 -0
- package/dist/assets/hooks/lib/action-ledger-core.mjs +269 -0
- package/dist/assets/hooks/lib/aria-gate-ledger.mjs +143 -0
- package/dist/assets/hooks/lib/ast-stub-shape-detector.mjs +107 -0
- package/dist/assets/hooks/lib/atlas-dossier-client.mjs +151 -0
- package/dist/assets/hooks/lib/atlas-orchestrator-postwire.mjs +221 -0
- package/dist/assets/hooks/lib/canonical-lenses.mjs +83 -6
- package/dist/assets/hooks/lib/coach-intent-classifier.mjs +248 -0
- package/dist/assets/hooks/lib/cognitive-block-parser.mjs +111 -0
- package/dist/assets/hooks/lib/doctrine-trigger-map-loader.mjs +137 -0
- package/dist/assets/hooks/lib/domain-output-quality.mjs +132 -3
- package/dist/assets/hooks/lib/empty-catch-scanner.mjs +91 -0
- package/dist/assets/hooks/lib/end-phase-qa-autofire.mjs +426 -0
- package/dist/assets/hooks/lib/evaluate-with-kernel.mjs +133 -0
- package/dist/assets/hooks/lib/first-class-coach.mjs +454 -19
- package/dist/assets/hooks/lib/gate-audit.mjs +12 -2
- package/dist/assets/hooks/lib/gate-loop-state.mjs +11 -2
- package/dist/assets/hooks/lib/goal-contract-quality.mjs +302 -0
- package/dist/assets/hooks/lib/hook-message-window.mjs +101 -9
- package/dist/assets/hooks/lib/invocation-required-verifier.mjs +184 -0
- package/dist/assets/hooks/lib/kernel/deterministic-cognitive-kernel.mjs +906 -0
- package/dist/assets/hooks/lib/obligation-ledger.mjs +147 -0
- package/dist/assets/hooks/lib/orchestration-manifest-extract.mjs +217 -0
- package/dist/assets/hooks/lib/owner-authorizations.mjs +269 -0
- package/dist/assets/hooks/lib/probe-discipline-scanner.mjs +142 -0
- package/dist/assets/hooks/lib/project-boundary-cognition.mjs +143 -0
- package/dist/assets/hooks/lib/recovery-context.mjs +151 -0
- package/dist/assets/hooks/lib/recovery-template-loader.mjs +154 -0
- package/dist/assets/hooks/lib/self-doctrine-check.mjs +321 -0
- package/dist/assets/hooks/lib/sensitive-shape-detector.mjs +64 -0
- package/dist/assets/hooks/lib/skill-autoload-gate-impl.mjs +226 -1
- package/dist/assets/hooks/lib/stop-hook-protocol.mjs +166 -0
- package/dist/assets/hooks/lib/surface-caught.mjs +94 -0
- package/dist/assets/hooks/recovery-templates/force-reauthor.md +67 -0
- package/dist/assets/hooks/recovery-templates/handoff-recovery.md +25 -0
- package/dist/assets/hooks/scripts/check-hard-risk-prefix.mjs +99 -0
- package/dist/assets/hooks/skills/aria-conversational-doctrine-discipline/SKILL.md +101 -0
- package/dist/assets/hooks/test-aria-preturn-memory-gate.mjs +2 -2
- package/dist/assets/hooks/test-tier-lens-labeling.mjs +14 -3
- package/dist/assets/opencode-plugins/harness-context/index.js +39 -6
- package/dist/assets/opencode-plugins/harness-context/task-project-ledger.mjs +5 -1
- package/dist/assets/opencode-plugins/harness-gate/index.js +36 -0
- package/dist/assets/opencode-plugins/harness-gate/lib/atlas-dossier-client.js +1 -0
- package/dist/assets/opencode-plugins/harness-gate/lib/recovery-grants.js +79 -0
- package/dist/assets/opencode-plugins/harness-outcome/index.js +12 -0
- package/dist/assets/opencode-plugins/harness-stop/index.js +97 -2
- package/dist/assets/opencode-plugins/harness-stop/lib/atlas-dossier-client.js +1 -0
- package/dist/assets/opencode-plugins/harness-stop/lib/domain-output-quality.js +15 -2
- package/dist/assets/opencode-plugins/lib/coach.js +148 -0
- package/dist/runtime/coach-kernel.mjs +144 -7
- package/dist/runtime/codex-bridge.mjs +254 -8
- package/dist/runtime/discipline/doctrine_trigger_map.json +236 -25
- package/dist/runtime/discipline/skills/aria-cognition/34-frameworks-unified/SKILL.md +42 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-aristotle-cognitives/SKILL.md +128 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-aristotle-intra-phase/SKILL.md +99 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-aristotle-post-phase/SKILL.md +118 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-aristotle-pre-phase/SKILL.md +117 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-axioms-first-principles/SKILL.md +202 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-axioms-first-principles/agents/openai.yaml +4 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-axioms-first-principles/references/source-map.md +130 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-backend-architect/SKILL.md +124 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-backend-architect/references/backend-cookbook.md +417 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-business-audit/SKILL.md +133 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-business-audit/references/audit-cookbook.md +247 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-business-frame/SKILL.md +138 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-business-frame/references/business-cookbook.md +154 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-chat/SKILL.md +84 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-chat/scripts/aria-chat.sh +57 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-cognition-autofire/SKILL.md +137 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-cognition-batch/SKILL.md +264 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-decision-mizan/SKILL.md +136 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-decision-mizan/references/decision-frameworks.md +287 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-first-class-operating-contract/SKILL.md +104 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-frontend-architect/SKILL.md +123 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-frontend-architect/references/frontend-cookbook.md +358 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-fullstack-orchestrator/SKILL.md +127 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-fullstack-orchestrator/references/fullstack-cookbook.md +383 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-gtm-architect/SKILL.md +126 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-gtm-architect/references/gtm-cookbook.md +235 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-harness-deploy/SKILL.md +145 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-harness-no-stripping/SKILL.md +135 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-harness-onboarding/SKILL.md +130 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-harness-output-discipline/SKILL.md +120 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-harness-substrate-binding/SKILL.md +139 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-http-harness-client/SKILL.md +85 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-http-harness-client/scripts/smoke.mjs +47 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-k8s-deploy/SKILL.md +174 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-k8s-deploy/agents/openai.yaml +3 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-ladduniframe/SKILL.md +60 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-ledger-fleet-execution/SKILL.md +126 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-live-ops/SKILL.md +54 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-mac-ssh-ops/SKILL.md +100 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-memory-index/SKILL.md +42 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-noor-cognitives/SKILL.md +120 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-ops/SKILL.md +60 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-ops/references/live-endpoints.md +59 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-quality-audit/SKILL.md +133 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-readable-output/SKILL.md +239 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-readable-output/references/layout-cookbook.md +366 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-reasoning/SKILL.md +67 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-reasoning/references/core-principles.md +42 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-repo-audit/SKILL.md +135 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-repo-audit/references/repo-audit-cookbook.md +375 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-research-orchestrator/SKILL.md +138 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-research-orchestrator/references/research-patterns.md +270 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-retention-engine/SKILL.md +120 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-retention-engine/references/retention-cookbook.md +271 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-revenue-engine/SKILL.md +128 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-revenue-engine/references/revenue-cookbook.md +227 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-senior-code-audit/SKILL.md +233 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-senior-code-audit/references/audit-checklist.md +369 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-senior-code-cookbook/SKILL.md +288 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-senior-code-cookbook/references/engineering-cookbook.md +489 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-soul-principles/SKILL.md +42 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-task-codex-executor/SKILL.md +86 -0
- package/dist/runtime/discipline/skills/aria-cognition/aristotle-engine/SKILL.md +42 -0
- package/dist/runtime/discipline/skills/aria-cognition/cross-domain-24/SKILL.md +42 -0
- package/dist/runtime/discipline/skills/aria-cognition/deepsoul-emotional/SKILL.md +42 -0
- package/dist/runtime/discipline/skills/aria-cognition/fitrah-guard/SKILL.md +78 -0
- package/dist/runtime/discipline/skills/aria-cognition/ghazali-8lens/SKILL.md +227 -29
- package/dist/runtime/discipline/skills/aria-cognition/ghazali-8lens/references/ghazali-8lens-cookbook.md +797 -0
- package/dist/runtime/discipline/skills/aria-cognition/ijtihad-novel/SKILL.md +42 -0
- package/dist/runtime/discipline/skills/aria-cognition/ilham-intuition/SKILL.md +42 -0
- package/dist/runtime/discipline/skills/aria-cognition/never-guess/SKILL.md +77 -0
- package/dist/runtime/discipline/skills/aria-cognition/noor-recognition/SKILL.md +45 -0
- package/dist/runtime/discipline/skills/aria-cognition/qiyas-analogy/SKILL.md +174 -14
- package/dist/runtime/discipline/skills/aria-cognition/ruh-basis/SKILL.md +42 -0
- package/dist/runtime/discipline/skills/aria-cognition/tadabbur/SKILL.md +506 -0
- package/dist/runtime/discipline/skills/aria-cognition/tadabbur/references/tadabbur-cookbook.md +921 -0
- package/dist/runtime/discipline/skills/aria-cognition/tadabbur-ops/SKILL.md +42 -0
- package/dist/runtime/discipline/skills/aria-cognition/tafakkur/SKILL.md +104 -0
- package/dist/runtime/doctrine_trigger_map.json +236 -25
- package/dist/runtime/embedded-public-key.mjs +27 -0
- package/dist/runtime/gated-ledger.mjs +41 -14
- package/dist/runtime/harness-daemon.mjs +85 -10
- package/dist/runtime/hive-wal-publisher.mjs +292 -0
- package/dist/runtime/hooks/README.md +58 -0
- package/dist/runtime/hooks/aria-agent-handoff.mjs +147 -2
- package/dist/runtime/hooks/aria-agent-ledger-merge.mjs +31 -7
- package/dist/runtime/hooks/aria-architect-fallback.mjs +10 -2
- package/dist/runtime/hooks/aria-claim-evidence-stop-gate.mjs +240 -0
- package/dist/runtime/hooks/aria-cognition-substrate-binding.mjs +84 -10
- package/dist/runtime/hooks/aria-first-class-coach.mjs +305 -10
- package/dist/runtime/hooks/aria-harness-via-sdk.mjs +93 -16
- package/dist/runtime/hooks/aria-import-resolution-gate.mjs +106 -20
- package/dist/runtime/hooks/aria-outcome-record.mjs +56 -20
- package/dist/runtime/hooks/aria-pre-emit-autoload.mjs +1809 -0
- package/dist/runtime/hooks/aria-pre-emit-autoload.mjs.before-orchestration-redesign +1400 -0
- package/dist/runtime/hooks/aria-pre-emit-dryrun.mjs +22 -3
- package/dist/runtime/hooks/aria-pre-text-gate.mjs +11 -2
- package/dist/runtime/hooks/aria-pre-tool-gate.mjs +516 -92
- package/dist/runtime/hooks/aria-pre-tool-use.mjs +70 -6
- package/dist/runtime/hooks/aria-preprompt-consult.mjs +23 -4
- package/dist/runtime/hooks/aria-repo-doctrine-gate.mjs +29 -3
- package/dist/runtime/hooks/aria-stop-gate.mjs +585 -76
- package/dist/runtime/hooks/aria-trigger-autolearn.mjs +17 -3
- package/dist/runtime/hooks/aria-universal-turn-packet.mjs +1165 -0
- package/dist/runtime/hooks/aria-userprompt-abandon-detect.mjs +9 -1
- package/dist/runtime/hooks/canonical-settings-block.json +172 -0
- package/dist/runtime/hooks/codex-native/aria-harness-ticker-sidecar.mjs +92 -0
- package/dist/runtime/hooks/codex-native/aria-hive-wal-consumer.mjs +86 -0
- package/dist/runtime/hooks/codex-native/aria-live-ticker.mjs +38 -0
- package/dist/runtime/hooks/codex-native/aria-post-tool-use.mjs +236 -0
- package/dist/runtime/hooks/codex-native/aria-pre-tool-use.mjs +362 -0
- package/dist/runtime/hooks/codex-native/aria-stop.mjs +691 -0
- package/dist/runtime/hooks/codex-native/aria-userprompt-submit.mjs +623 -0
- package/dist/runtime/hooks/codex-native/atlas-session-context.mjs +121 -0
- package/dist/runtime/hooks/codex-native/lib/evaluate-with-kernel.mjs +257 -0
- package/dist/runtime/hooks/codex-native/lib/hive-wal-consumer.mjs +452 -0
- package/dist/runtime/hooks/codex-native/lib/kernel/deterministic-cognitive-kernel.mjs +914 -0
- package/dist/runtime/hooks/codex-native/lib/project-boundary-cognition.mjs +143 -0
- package/dist/runtime/hooks/codex-native/lib/runtime-client.mjs +3567 -0
- package/dist/runtime/hooks/codex-native/lib/task-project-ledger.mjs +294 -0
- package/dist/runtime/hooks/doctrine_trigger_map.json +236 -25
- package/dist/runtime/hooks/doctrine_trigger_map.schema.json +46 -0
- package/dist/runtime/hooks/install.sh +84 -0
- package/dist/runtime/hooks/lib/action-ledger-core.mjs +269 -0
- package/dist/runtime/hooks/lib/aria-gate-ledger.mjs +143 -0
- package/dist/runtime/hooks/lib/ast-stub-shape-detector.mjs +107 -0
- package/dist/runtime/hooks/lib/atlas-dossier-client.mjs +151 -0
- package/dist/runtime/hooks/lib/atlas-orchestrator-postwire.mjs +221 -0
- package/dist/runtime/hooks/lib/canonical-lenses.mjs +83 -6
- package/dist/runtime/hooks/lib/coach-intent-classifier.mjs +248 -0
- package/dist/runtime/hooks/lib/cognitive-block-parser.mjs +111 -0
- package/dist/runtime/hooks/lib/doctrine-trigger-map-loader.mjs +137 -0
- package/dist/runtime/hooks/lib/domain-output-quality.mjs +132 -3
- package/dist/runtime/hooks/lib/empty-catch-scanner.mjs +91 -0
- package/dist/runtime/hooks/lib/end-phase-qa-autofire.mjs +426 -0
- package/dist/runtime/hooks/lib/evaluate-with-kernel.mjs +133 -0
- package/dist/runtime/hooks/lib/first-class-coach.mjs +454 -19
- package/dist/runtime/hooks/lib/gate-audit.mjs +12 -2
- package/dist/runtime/hooks/lib/gate-loop-state.mjs +11 -2
- package/dist/runtime/hooks/lib/goal-contract-quality.mjs +302 -0
- package/dist/runtime/hooks/lib/hook-message-window.mjs +101 -9
- package/dist/runtime/hooks/lib/invocation-required-verifier.mjs +184 -0
- package/dist/runtime/hooks/lib/kernel/deterministic-cognitive-kernel.mjs +906 -0
- package/dist/runtime/hooks/lib/obligation-ledger.mjs +147 -0
- package/dist/runtime/hooks/lib/orchestration-manifest-extract.mjs +217 -0
- package/dist/runtime/hooks/lib/owner-authorizations.mjs +269 -0
- package/dist/runtime/hooks/lib/probe-discipline-scanner.mjs +142 -0
- package/dist/runtime/hooks/lib/project-boundary-cognition.mjs +143 -0
- package/dist/runtime/hooks/lib/recovery-context.mjs +151 -0
- package/dist/runtime/hooks/lib/recovery-template-loader.mjs +154 -0
- package/dist/runtime/hooks/lib/self-doctrine-check.mjs +321 -0
- package/dist/runtime/hooks/lib/sensitive-shape-detector.mjs +64 -0
- package/dist/runtime/hooks/lib/skill-autoload-gate-impl.mjs +226 -1
- package/dist/runtime/hooks/lib/stop-hook-protocol.mjs +166 -0
- package/dist/runtime/hooks/lib/surface-caught.mjs +94 -0
- package/dist/runtime/hooks/recovery-templates/force-reauthor.md +67 -0
- package/dist/runtime/hooks/recovery-templates/handoff-recovery.md +25 -0
- package/dist/runtime/hooks/scripts/check-hard-risk-prefix.mjs +99 -0
- package/dist/runtime/hooks/skills/aria-conversational-doctrine-discipline/SKILL.md +101 -0
- package/dist/runtime/hooks/test-aria-preturn-memory-gate.mjs +2 -2
- package/dist/runtime/hooks/test-tier-lens-labeling.mjs +14 -3
- package/dist/runtime/lib/evaluate-with-kernel.mjs +133 -0
- package/dist/runtime/lib/kernel/deterministic-cognitive-kernel.mjs +906 -0
- package/dist/runtime/local-phase.mjs +10 -5
- package/dist/runtime/manifest.json +8 -8
- package/dist/runtime/packet-verifier.mjs +166 -0
- package/dist/runtime/provider-proxy.mjs +13 -0
- package/dist/runtime/quality-enforcer.mjs +40 -23
- package/dist/runtime/runtime-rails/registry.mjs +252 -0
- package/dist/runtime/sdk/BUNDLED.json +2 -2
- package/dist/runtime/sdk/index.d.ts +119 -4
- package/dist/runtime/sdk/index.js +138 -12
- package/dist/runtime/sdk/index.js.map +1 -1
- package/dist/runtime/service.mjs +8036 -764
- package/dist/runtime/sub-agent-enforcer.mjs +201 -0
- package/dist/runtime/task-project-ledger.mjs +5 -1
- package/dist/sdk/BUNDLED.json +2 -2
- package/dist/sdk/index.d.ts +119 -4
- package/dist/sdk/index.js +138 -12
- package/dist/sdk/index.js.map +1 -1
- package/hooks/README.md +58 -0
- package/hooks/aria-agent-handoff.mjs +147 -2
- package/hooks/aria-agent-ledger-merge.mjs +31 -7
- package/hooks/aria-architect-fallback.mjs +10 -2
- package/hooks/aria-claim-evidence-stop-gate.mjs +240 -0
- package/hooks/aria-cognition-substrate-binding.mjs +84 -10
- package/hooks/aria-first-class-coach.mjs +305 -10
- package/hooks/aria-harness-via-sdk.mjs +93 -16
- package/hooks/aria-import-resolution-gate.mjs +106 -20
- package/hooks/aria-outcome-record.mjs +56 -20
- package/hooks/aria-pre-emit-autoload.mjs +1809 -0
- package/hooks/aria-pre-emit-autoload.mjs.before-orchestration-redesign +1400 -0
- package/hooks/aria-pre-emit-dryrun.mjs +22 -3
- package/hooks/aria-pre-text-gate.mjs +11 -2
- package/hooks/aria-pre-tool-gate.mjs +516 -92
- package/hooks/aria-pre-tool-use.mjs +70 -6
- package/hooks/aria-preprompt-consult.mjs +23 -4
- package/hooks/aria-repo-doctrine-gate.mjs +29 -3
- package/hooks/aria-stop-gate.mjs +585 -76
- package/hooks/aria-trigger-autolearn.mjs +17 -3
- package/hooks/aria-universal-turn-packet.mjs +1165 -0
- package/hooks/aria-userprompt-abandon-detect.mjs +9 -1
- package/hooks/canonical-settings-block.json +172 -0
- package/hooks/codex-native/aria-harness-ticker-sidecar.mjs +92 -0
- package/hooks/codex-native/aria-hive-wal-consumer.mjs +86 -0
- package/hooks/codex-native/aria-live-ticker.mjs +38 -0
- package/hooks/codex-native/aria-post-tool-use.mjs +236 -0
- package/hooks/codex-native/aria-pre-tool-use.mjs +362 -0
- package/hooks/codex-native/aria-stop.mjs +691 -0
- package/hooks/codex-native/aria-userprompt-submit.mjs +623 -0
- package/hooks/codex-native/atlas-session-context.mjs +121 -0
- package/hooks/codex-native/lib/evaluate-with-kernel.mjs +257 -0
- package/hooks/codex-native/lib/hive-wal-consumer.mjs +452 -0
- package/hooks/codex-native/lib/kernel/deterministic-cognitive-kernel.mjs +914 -0
- package/hooks/codex-native/lib/project-boundary-cognition.mjs +143 -0
- package/hooks/codex-native/lib/runtime-client.mjs +3567 -0
- package/hooks/codex-native/lib/task-project-ledger.mjs +294 -0
- package/hooks/doctrine_trigger_map.json +236 -25
- package/hooks/doctrine_trigger_map.schema.json +46 -0
- package/hooks/install.sh +84 -0
- package/hooks/lib/action-ledger-core.mjs +269 -0
- package/hooks/lib/aria-gate-ledger.mjs +143 -0
- package/hooks/lib/ast-stub-shape-detector.mjs +107 -0
- package/hooks/lib/atlas-dossier-client.mjs +151 -0
- package/hooks/lib/atlas-orchestrator-postwire.mjs +221 -0
- package/hooks/lib/canonical-lenses.mjs +83 -6
- package/hooks/lib/coach-intent-classifier.mjs +248 -0
- package/hooks/lib/cognitive-block-parser.mjs +111 -0
- package/hooks/lib/doctrine-trigger-map-loader.mjs +137 -0
- package/hooks/lib/domain-output-quality.mjs +132 -3
- package/hooks/lib/empty-catch-scanner.mjs +91 -0
- package/hooks/lib/end-phase-qa-autofire.mjs +426 -0
- package/hooks/lib/evaluate-with-kernel.mjs +133 -0
- package/hooks/lib/first-class-coach.mjs +454 -19
- package/hooks/lib/gate-audit.mjs +12 -2
- package/hooks/lib/gate-loop-state.mjs +11 -2
- package/hooks/lib/goal-contract-quality.mjs +302 -0
- package/hooks/lib/hook-message-window.mjs +101 -9
- package/hooks/lib/invocation-required-verifier.mjs +184 -0
- package/hooks/lib/kernel/deterministic-cognitive-kernel.mjs +906 -0
- package/hooks/lib/obligation-ledger.mjs +147 -0
- package/hooks/lib/orchestration-manifest-extract.mjs +217 -0
- package/hooks/lib/owner-authorizations.mjs +269 -0
- package/hooks/lib/probe-discipline-scanner.mjs +142 -0
- package/hooks/lib/project-boundary-cognition.mjs +143 -0
- package/hooks/lib/recovery-context.mjs +151 -0
- package/hooks/lib/recovery-template-loader.mjs +154 -0
- package/hooks/lib/self-doctrine-check.mjs +321 -0
- package/hooks/lib/sensitive-shape-detector.mjs +64 -0
- package/hooks/lib/skill-autoload-gate-impl.mjs +226 -1
- package/hooks/lib/stop-hook-protocol.mjs +166 -0
- package/hooks/lib/surface-caught.mjs +94 -0
- package/hooks/recovery-templates/force-reauthor.md +67 -0
- package/hooks/recovery-templates/handoff-recovery.md +25 -0
- package/hooks/scripts/check-hard-risk-prefix.mjs +99 -0
- package/hooks/skills/aria-conversational-doctrine-discipline/SKILL.md +101 -0
- package/hooks/test-aria-preturn-memory-gate.mjs +2 -2
- package/hooks/test-tier-lens-labeling.mjs +14 -3
- package/opencode-plugins/harness-context/index.js +39 -6
- package/opencode-plugins/harness-context/task-project-ledger.mjs +5 -1
- package/opencode-plugins/harness-gate/index.js +36 -0
- package/opencode-plugins/harness-gate/lib/atlas-dossier-client.js +1 -0
- package/opencode-plugins/harness-gate/lib/recovery-grants.js +79 -0
- package/opencode-plugins/harness-outcome/index.js +12 -0
- package/opencode-plugins/harness-stop/index.js +97 -2
- package/opencode-plugins/harness-stop/lib/atlas-dossier-client.js +1 -0
- package/opencode-plugins/harness-stop/lib/domain-output-quality.js +15 -2
- package/opencode-plugins/lib/coach.js +148 -0
- package/package.json +71 -5
- package/runtime-src/coach-kernel.mjs +144 -7
- package/runtime-src/codex-bridge.mjs +254 -8
- package/runtime-src/embedded-public-key.mjs +27 -0
- package/runtime-src/gated-ledger.mjs +41 -14
- package/runtime-src/harness-daemon.mjs +85 -10
- package/runtime-src/hive-wal-publisher.mjs +292 -0
- package/runtime-src/lib/evaluate-with-kernel.mjs +133 -0
- package/runtime-src/lib/kernel/deterministic-cognitive-kernel.mjs +906 -0
- package/runtime-src/local-phase.mjs +10 -5
- package/runtime-src/packet-verifier.mjs +166 -0
- package/runtime-src/provider-proxy.mjs +13 -0
- package/runtime-src/quality-enforcer.mjs +40 -23
- package/runtime-src/runtime-rails/registry.mjs +252 -0
- package/runtime-src/service.mjs +8036 -764
- package/runtime-src/sub-agent-enforcer.mjs +201 -0
- package/scripts/aria-ledger-append.mjs +337 -0
- package/scripts/aria-task-cheap-worker-dispatch.mjs +234 -0
- package/scripts/audit-of-audit-prior-tasks.mjs +194 -0
- package/scripts/audit-of-audit-this-turn.mjs +116 -0
- package/scripts/bundle-sdk.mjs +31 -5
- package/scripts/check-cli-wrapper-provider-contract.mjs +160 -0
- package/scripts/check-client-compatibility.mjs +15 -5
- package/scripts/check-client-smoke.mjs +297 -0
- package/scripts/check-codex-orchestrator-adoption.mjs +150 -0
- package/scripts/check-glm-env-wired.mjs +131 -0
- package/scripts/check-hive-local-storage-contract.mjs +91 -0
- package/scripts/check-hook-mirror.mjs +150 -0
- package/scripts/check-install-sh-drift.mjs +152 -0
- package/scripts/check-kernel-sync.mjs +101 -0
- package/scripts/check-package-artifact.mjs +152 -0
- package/scripts/check-registry-mirror.mjs +71 -0
- package/scripts/drain-owner-airtable-sync-queue.mjs +287 -0
- package/scripts/export-owner-status-sheets.mjs +589 -0
- package/scripts/live-sidecar-receipt-canary.mjs +347 -0
- package/scripts/qiyas-tadabbur-model-matrix.mjs +970 -0
- package/scripts/quality-ab-live-provider.mjs +913 -0
- package/scripts/self-test-action-ledger-core.mjs +190 -0
- package/scripts/self-test-approval-receipt-binding.mjs +122 -0
- package/scripts/self-test-autofire-quality-output.mjs +110 -0
- package/scripts/self-test-claude-code-action-ledger.mjs +132 -0
- package/scripts/self-test-claude-code-mechanical-autofire-hive.mjs +138 -0
- package/scripts/self-test-claude-code-mechanical-autofire.mjs +234 -0
- package/scripts/self-test-codebase-awareness-atlas-delta.mjs +159 -0
- package/scripts/self-test-codebase-awareness-delta-ingest.mjs +179 -0
- package/scripts/self-test-codex-live-hook-parity.mjs +84 -0
- package/scripts/self-test-codex-native-action-ledger.mjs +167 -0
- package/scripts/self-test-codex-native-hook-json-contract.mjs +74 -0
- package/scripts/self-test-codex-orchestrator-continuity.mjs +113 -0
- package/scripts/self-test-codex-readable-recovery.mjs +94 -0
- package/scripts/self-test-codex-self-harness.mjs +538 -0
- package/scripts/self-test-compiled-workunit.mjs +214 -0
- package/scripts/self-test-continuation-output-smoke.mjs +101 -0
- package/scripts/self-test-cross-cli-fleet-ticker.mjs +85 -0
- package/scripts/self-test-cross-cli-hive-adoption.mjs +125 -0
- package/scripts/self-test-cross-cli-hive-learning.mjs +146 -0
- package/scripts/self-test-cross-phase-tool-failure.mjs +110 -0
- package/scripts/self-test-cross-surface-action-ledger.mjs +149 -0
- package/scripts/self-test-end-of-phase-qa-court.mjs +616 -0
- package/scripts/self-test-evaluate-with-kernel.mjs +111 -0
- package/scripts/self-test-first-class-output-delta-proof.mjs +307 -0
- package/scripts/self-test-goal-contract-output-qa.mjs +73 -0
- package/scripts/self-test-goal-contract.mjs +35 -0
- package/scripts/self-test-governed-adapters.mjs +105 -0
- package/scripts/self-test-governed-surface-runner.mjs +198 -0
- package/scripts/self-test-harness-gates.mjs +15 -12
- package/scripts/self-test-harness-ticker-sidecar.mjs +153 -0
- package/scripts/self-test-hive-org-kernel.mjs +233 -0
- package/scripts/self-test-hive-session-coordination.mjs +156 -0
- package/scripts/self-test-hive-wal-consumer.mjs +111 -0
- package/scripts/self-test-kernel-a3-a4-selection.mjs +179 -0
- package/scripts/self-test-ledger-append.mjs +175 -0
- package/scripts/self-test-live-codex-posttool-packet-smoke.mjs +111 -0
- package/scripts/self-test-live-codex-pretool-packet-smoke.mjs +101 -0
- package/scripts/self-test-live-codex-stop-qa-kernel-smoke.mjs +43 -0
- package/scripts/self-test-live-wrapper-substrate-inventory.mjs +149 -0
- package/scripts/self-test-local-main-sync-script.mjs +47 -0
- package/scripts/self-test-mechanical-autofire-resolver.mjs +296 -0
- package/scripts/self-test-no-consult-cognitive-skills-output.mjs +135 -0
- package/scripts/self-test-owner-airtable-sync-queue.mjs +196 -0
- package/scripts/self-test-owner-airtable-sync.mjs +181 -0
- package/scripts/self-test-owner-sheets-action-ledger.mjs +100 -0
- package/scripts/self-test-production-preflight.mjs +78 -0
- package/scripts/self-test-project-boundary-cognition.mjs +79 -0
- package/scripts/self-test-qa-exec-kernel.mjs +34 -0
- package/scripts/self-test-qa-recovery-learning-loop.mjs +113 -0
- package/scripts/self-test-qiyas-label-alignment.mjs +94 -0
- package/scripts/self-test-recovery-context.mjs +110 -0
- package/scripts/self-test-repo-guard.mjs +10 -0
- package/scripts/self-test-runtime-health-self-heal.mjs +161 -0
- package/scripts/self-test-runtime-postcondition.mjs +70 -0
- package/scripts/self-test-soul-precommit-hook.mjs +39 -0
- package/scripts/self-test-stop-gate-kernel-guards.mjs +185 -0
- package/scripts/self-test-stop-gate.mjs +128 -0
- package/scripts/self-test-substrate-kernel-execution-receipt.mjs +130 -0
- package/scripts/self-test-substrate-open-skill-floor.mjs +87 -0
- package/scripts/self-test-substrate-output-quality-eval.mjs +171 -0
- package/scripts/self-test-task-closeout-drift.mjs +97 -0
- package/scripts/self-test-task-project-ledger-readiness.mjs +43 -0
- package/scripts/self-test-task-runner-phase-consumer.mjs +134 -0
- package/scripts/self-test-task-worker-lane.mjs +256 -0
- package/scripts/self-test-turn-substrate-qa-kernel.mjs +188 -0
- package/scripts/self-test-universal-action-capture.mjs +153 -0
- package/scripts/self-test-universal-turn-packet-entrypoints.mjs +252 -0
- package/scripts/self-test-universal-turn-packet.mjs +320 -0
- package/scripts/session-quality-backfill.mjs +253 -0
- package/scripts/smoke-autofire-100-prompts.mjs +481 -0
- package/scripts/sync-local-main-on-task-complete.mjs +278 -0
- package/scripts/sync-owner-status-airtable.mjs +1158 -0
- package/scripts/validate-skill-prompts.mjs +12 -1
- package/scripts/verify-codex-native-mirror.mjs +262 -0
- package/skills/34-frameworks-unified/SKILL.md +42 -0
- package/skills/api-design/SKILL.md +123 -0
- package/skills/architecture-decision/SKILL.md +105 -0
- package/skills/aria-aristotle-cognitives/SKILL.md +128 -0
- package/skills/aria-aristotle-intra-phase/SKILL.md +99 -0
- package/skills/aria-aristotle-post-phase/SKILL.md +116 -0
- package/skills/aria-aristotle-pre-phase/SKILL.md +117 -0
- package/skills/aria-axioms-first-principles/SKILL.md +202 -0
- package/skills/aria-axioms-first-principles/agents/openai.yaml +4 -0
- package/skills/aria-axioms-first-principles/references/source-map.md +130 -0
- package/skills/aria-chat/SKILL.md +84 -0
- package/skills/aria-chat/scripts/aria-chat.sh +57 -0
- package/skills/aria-cognition/34-frameworks-unified/SKILL.md +42 -0
- package/skills/aria-cognition/aria-aristotle-cognitives/SKILL.md +128 -0
- package/skills/aria-cognition/aria-aristotle-intra-phase/SKILL.md +99 -0
- package/skills/aria-cognition/aria-aristotle-post-phase/SKILL.md +118 -0
- package/skills/aria-cognition/aria-aristotle-pre-phase/SKILL.md +117 -0
- package/skills/aria-cognition/aria-axioms-first-principles/SKILL.md +202 -0
- package/skills/aria-cognition/aria-axioms-first-principles/agents/openai.yaml +4 -0
- package/skills/aria-cognition/aria-axioms-first-principles/references/source-map.md +130 -0
- package/skills/aria-cognition/aria-backend-architect/SKILL.md +124 -0
- package/skills/aria-cognition/aria-backend-architect/references/backend-cookbook.md +417 -0
- package/skills/aria-cognition/aria-business-audit/SKILL.md +133 -0
- package/skills/aria-cognition/aria-business-audit/references/audit-cookbook.md +247 -0
- package/skills/aria-cognition/aria-business-frame/SKILL.md +138 -0
- package/skills/aria-cognition/aria-business-frame/references/business-cookbook.md +154 -0
- package/skills/aria-cognition/aria-chat/SKILL.md +84 -0
- package/skills/aria-cognition/aria-chat/scripts/aria-chat.sh +57 -0
- package/skills/aria-cognition/aria-cognition-autofire/SKILL.md +137 -0
- package/skills/aria-cognition/aria-cognition-batch/SKILL.md +264 -0
- package/skills/aria-cognition/aria-decision-mizan/SKILL.md +136 -0
- package/skills/aria-cognition/aria-decision-mizan/references/decision-frameworks.md +287 -0
- package/skills/aria-cognition/aria-first-class-operating-contract/SKILL.md +104 -0
- package/skills/aria-cognition/aria-frontend-architect/SKILL.md +123 -0
- package/skills/aria-cognition/aria-frontend-architect/references/frontend-cookbook.md +358 -0
- package/skills/aria-cognition/aria-fullstack-orchestrator/SKILL.md +127 -0
- package/skills/aria-cognition/aria-fullstack-orchestrator/references/fullstack-cookbook.md +383 -0
- package/skills/aria-cognition/aria-gtm-architect/SKILL.md +126 -0
- package/skills/aria-cognition/aria-gtm-architect/references/gtm-cookbook.md +235 -0
- package/skills/aria-cognition/aria-harness-deploy/SKILL.md +145 -0
- package/skills/aria-cognition/aria-harness-no-stripping/SKILL.md +135 -0
- package/skills/aria-cognition/aria-harness-onboarding/SKILL.md +130 -0
- package/skills/aria-cognition/aria-harness-output-discipline/SKILL.md +120 -0
- package/skills/aria-cognition/aria-harness-substrate-binding/SKILL.md +139 -0
- package/skills/aria-cognition/aria-http-harness-client/SKILL.md +85 -0
- package/skills/aria-cognition/aria-http-harness-client/scripts/smoke.mjs +47 -0
- package/skills/aria-cognition/aria-k8s-deploy/SKILL.md +174 -0
- package/skills/aria-cognition/aria-k8s-deploy/agents/openai.yaml +3 -0
- package/skills/aria-cognition/aria-ladduniframe/SKILL.md +60 -0
- package/skills/aria-cognition/aria-ledger-fleet-execution/SKILL.md +126 -0
- package/skills/aria-cognition/aria-live-ops/SKILL.md +54 -0
- package/skills/aria-cognition/aria-mac-ssh-ops/SKILL.md +100 -0
- package/skills/aria-cognition/aria-memory-index/SKILL.md +42 -0
- package/skills/aria-cognition/aria-noor-cognitives/SKILL.md +120 -0
- package/skills/aria-cognition/aria-ops/SKILL.md +60 -0
- package/skills/aria-cognition/aria-ops/references/live-endpoints.md +59 -0
- package/skills/aria-cognition/aria-quality-audit/SKILL.md +133 -0
- package/skills/aria-cognition/aria-readable-output/SKILL.md +239 -0
- package/skills/aria-cognition/aria-readable-output/references/layout-cookbook.md +366 -0
- package/skills/aria-cognition/aria-reasoning/SKILL.md +67 -0
- package/skills/aria-cognition/aria-reasoning/references/core-principles.md +42 -0
- package/skills/aria-cognition/aria-repo-audit/SKILL.md +135 -0
- package/skills/aria-cognition/aria-repo-audit/references/repo-audit-cookbook.md +375 -0
- package/skills/aria-cognition/aria-research-orchestrator/SKILL.md +138 -0
- package/skills/aria-cognition/aria-research-orchestrator/references/research-patterns.md +270 -0
- package/skills/aria-cognition/aria-retention-engine/SKILL.md +120 -0
- package/skills/aria-cognition/aria-retention-engine/references/retention-cookbook.md +271 -0
- package/skills/aria-cognition/aria-revenue-engine/SKILL.md +128 -0
- package/skills/aria-cognition/aria-revenue-engine/references/revenue-cookbook.md +227 -0
- package/skills/aria-cognition/aria-senior-code-audit/SKILL.md +233 -0
- package/skills/aria-cognition/aria-senior-code-audit/references/audit-checklist.md +369 -0
- package/skills/aria-cognition/aria-senior-code-cookbook/SKILL.md +288 -0
- package/skills/aria-cognition/aria-senior-code-cookbook/references/engineering-cookbook.md +489 -0
- package/skills/aria-cognition/aria-soul-principles/SKILL.md +42 -0
- package/skills/aria-cognition/aria-task-codex-executor/SKILL.md +86 -0
- package/skills/aria-cognition/aristotle-engine/SKILL.md +42 -0
- package/skills/aria-cognition/cross-domain-24/SKILL.md +42 -0
- package/skills/aria-cognition/deepsoul-emotional/SKILL.md +42 -0
- package/skills/aria-cognition/fitrah-guard/SKILL.md +78 -0
- package/skills/aria-cognition/ghazali-8lens/SKILL.md +227 -29
- package/skills/aria-cognition/ghazali-8lens/references/ghazali-8lens-cookbook.md +797 -0
- package/skills/aria-cognition/ijtihad-novel/SKILL.md +42 -0
- package/skills/aria-cognition/ilham-intuition/SKILL.md +42 -0
- package/skills/aria-cognition/never-guess/SKILL.md +77 -0
- package/skills/aria-cognition/noor-recognition/SKILL.md +45 -0
- package/skills/aria-cognition/qiyas-analogy/SKILL.md +174 -14
- package/skills/aria-cognition/ruh-basis/SKILL.md +42 -0
- package/skills/aria-cognition/tadabbur/SKILL.md +506 -0
- package/skills/aria-cognition/tadabbur/references/tadabbur-cookbook.md +921 -0
- package/skills/aria-cognition/tadabbur-ops/SKILL.md +42 -0
- package/skills/aria-cognition/tafakkur/SKILL.md +104 -0
- package/skills/aria-cognition-autofire/SKILL.md +109 -0
- package/skills/aria-cognition-batch/SKILL.md +264 -0
- package/skills/aria-conversational-doctrine-discipline/SKILL.md +125 -0
- package/skills/aria-essence/SKILL.md +81 -0
- package/skills/aria-essence/references/domain-matrix.md +80 -0
- package/skills/aria-essence/references/evolution-loop.md +30 -0
- package/skills/aria-essence/references/readable-cognition.md +27 -0
- package/skills/aria-first-class-operating-contract/SKILL.md +104 -0
- package/skills/aria-forge-guardrails/SKILL.md +53 -0
- package/skills/aria-forge-guardrails/references/checklist.md +31 -0
- package/skills/aria-harness-deploy/SKILL.md +145 -0
- package/skills/aria-harness-no-stripping/SKILL.md +135 -0
- package/skills/aria-harness-onboarding/SKILL.md +130 -0
- package/skills/aria-harness-output-discipline/SKILL.md +120 -0
- package/skills/aria-harness-substrate-binding/SKILL.md +139 -0
- package/skills/aria-http-harness-client/SKILL.md +85 -0
- package/skills/aria-http-harness-client/scripts/smoke.mjs +47 -0
- package/skills/aria-k8s-deploy/SKILL.md +174 -0
- package/skills/aria-k8s-deploy/agents/openai.yaml +3 -0
- package/skills/aria-ladduniframe/SKILL.md +60 -0
- package/skills/aria-ledger-fleet-execution/SKILL.md +126 -0
- package/skills/aria-live-ops/SKILL.md +54 -0
- package/skills/aria-mac-ssh-ops/SKILL.md +100 -0
- package/skills/aria-memory-index/SKILL.md +42 -0
- package/skills/aria-noor-cognitives/SKILL.md +120 -0
- package/skills/aria-ops/SKILL.md +60 -0
- package/skills/aria-ops/references/live-endpoints.md +59 -0
- package/skills/aria-quality-audit/SKILL.md +133 -0
- package/skills/aria-reasoning/SKILL.md +67 -0
- package/skills/aria-reasoning/references/core-principles.md +42 -0
- package/skills/aria-repo-doctrine/SKILL.md +57 -0
- package/skills/aria-soul-principles/SKILL.md +42 -0
- package/skills/aria-task-codex-executor/SKILL.md +86 -0
- package/skills/aristotle-engine/SKILL.md +42 -0
- package/skills/ci-cd-pipeline/SKILL.md +116 -0
- package/skills/code-review/SKILL.md +131 -0
- package/skills/cross-domain-24/SKILL.md +42 -0
- package/skills/database-design/SKILL.md +124 -0
- package/skills/deepsoul-emotional/SKILL.md +42 -0
- package/skills/deno-kv-raft-pubsub/SKILL.md +561 -0
- package/skills/deno-kv-raft-pubsub/reference/maelstrom-integration.md +393 -0
- package/skills/deno-kv-raft-pubsub/reference/pubsub-api.md +376 -0
- package/skills/deno-kv-raft-pubsub/reference/raft-spec.md +402 -0
- package/skills/deno-kv-raft-pubsub/reference/state-machine.md +182 -0
- package/skills/error-handling/SKILL.md +159 -0
- package/skills/firecrawl/SKILL.md +165 -0
- package/skills/firecrawl/rules/install.md +82 -0
- package/skills/firecrawl/rules/security.md +26 -0
- package/skills/firecrawl-agent/SKILL.md +86 -0
- package/skills/firecrawl-build-interact/SKILL.md +96 -0
- package/skills/firecrawl-build-onboarding/SKILL.md +131 -0
- package/skills/firecrawl-build-onboarding/references/auth-flow.md +39 -0
- package/skills/firecrawl-build-onboarding/references/project-setup.md +20 -0
- package/skills/firecrawl-build-onboarding/references/sdk-installation.md +17 -0
- package/skills/firecrawl-build-scrape/SKILL.md +97 -0
- package/skills/firecrawl-build-search/SKILL.md +97 -0
- package/skills/firecrawl-clone/SKILL.md +419 -0
- package/skills/firecrawl-crawl/SKILL.md +87 -0
- package/skills/firecrawl-download/SKILL.md +98 -0
- package/skills/firecrawl-interact/SKILL.md +112 -0
- package/skills/firecrawl-map/SKILL.md +79 -0
- package/skills/firecrawl-scrape/SKILL.md +97 -0
- package/skills/firecrawl-search/SKILL.md +88 -0
- package/skills/fitrah-guard/SKILL.md +78 -0
- package/skills/forge-quality-rules/SKILL.md +61 -0
- package/skills/ghazali-8lens/SKILL.md +56 -0
- package/skills/ijtihad-novel/SKILL.md +42 -0
- package/skills/ilham-intuition/SKILL.md +42 -0
- package/skills/imagegen/LICENSE.txt +201 -0
- package/skills/imagegen/SKILL.md +374 -0
- package/skills/imagegen/agents/openai.yaml +6 -0
- package/skills/imagegen/assets/imagegen-small.svg +5 -0
- package/skills/imagegen/assets/imagegen.png +0 -0
- package/skills/imagegen/references/cli.md +242 -0
- package/skills/imagegen/references/codex-network.md +33 -0
- package/skills/imagegen/references/image-api.md +90 -0
- package/skills/imagegen/references/prompting.md +118 -0
- package/skills/imagegen/references/sample-prompts.md +433 -0
- package/skills/imagegen/scripts/image_gen.py +995 -0
- package/skills/imagegen/scripts/remove_chroma_key.py +440 -0
- package/skills/istiqra-induction/SKILL.md +44 -0
- package/skills/ladunni-22/SKILL.md +53 -0
- package/skills/mizan/SKILL.md +90 -0
- package/skills/nadia/SKILL.md +56 -0
- package/skills/nadia-psi/SKILL.md +56 -0
- package/skills/never-guess/SKILL.md +75 -0
- package/skills/noor-recognition/SKILL.md +45 -0
- package/skills/observability/SKILL.md +133 -0
- package/skills/openai-docs/LICENSE.txt +201 -0
- package/skills/openai-docs/SKILL.md +100 -0
- package/skills/openai-docs/agents/openai.yaml +14 -0
- package/skills/openai-docs/assets/openai-small.svg +3 -0
- package/skills/openai-docs/assets/openai.png +0 -0
- package/skills/openai-docs/references/latest-model.md +37 -0
- package/skills/openai-docs/references/prompting-guide.md +244 -0
- package/skills/openai-docs/references/upgrade-guide.md +181 -0
- package/skills/openai-docs/scripts/resolve-latest-model-info.js +147 -0
- package/skills/pdf/LICENSE.txt +201 -0
- package/skills/pdf/SKILL.md +85 -0
- package/skills/pdf/agents/openai.yaml +5 -0
- package/skills/pdf/assets/pdf.png +0 -0
- package/skills/playwright/LICENSE.txt +201 -0
- package/skills/playwright/NOTICE.txt +14 -0
- package/skills/playwright/SKILL.md +165 -0
- package/skills/playwright/agents/openai.yaml +6 -0
- package/skills/playwright/assets/playwright-small.svg +3 -0
- package/skills/playwright/assets/playwright.png +0 -0
- package/skills/playwright/references/cli.md +116 -0
- package/skills/playwright/references/workflows.md +95 -0
- package/skills/playwright/scripts/playwright_cli.sh +25 -0
- package/skills/plugin-creator/SKILL.md +178 -0
- package/skills/plugin-creator/agents/openai.yaml +6 -0
- package/skills/plugin-creator/assets/plugin-creator-small.svg +3 -0
- package/skills/plugin-creator/assets/plugin-creator.png +0 -0
- package/skills/plugin-creator/references/plugin-json-spec.md +170 -0
- package/skills/plugin-creator/scripts/create_basic_plugin.py +301 -0
- package/skills/predictor/SKILL.md +43 -0
- package/skills/qiyas-analogy/SKILL.md +204 -0
- package/skills/refactoring/SKILL.md +137 -0
- package/skills/ruh-basis/SKILL.md +42 -0
- package/skills/security-review/SKILL.md +129 -0
- package/skills/skill-creator/SKILL.md +434 -0
- package/skills/skill-creator/agents/openai.yaml +5 -0
- package/skills/skill-creator/assets/skill-creator-small.svg +3 -0
- package/skills/skill-creator/assets/skill-creator.png +0 -0
- package/skills/skill-creator/license.txt +202 -0
- package/skills/skill-creator/references/openai_yaml.md +49 -0
- package/skills/skill-creator/scripts/generate_openai_yaml.py +226 -0
- package/skills/skill-creator/scripts/init_skill.py +400 -0
- package/skills/skill-creator/scripts/quick_validate.py +101 -0
- package/skills/skill-installer/LICENSE.txt +202 -0
- package/skills/skill-installer/SKILL.md +76 -0
- package/skills/skill-installer/agents/openai.yaml +5 -0
- package/skills/skill-installer/assets/skill-installer-small.svg +3 -0
- package/skills/skill-installer/assets/skill-installer.png +0 -0
- package/skills/skill-installer/scripts/github_utils.py +21 -0
- package/skills/skill-installer/scripts/install-skill-from-github.py +308 -0
- package/skills/skill-installer/scripts/list-skills.py +107 -0
- package/skills/skills-and-hooks-reference/SKILL.md +196 -0
- package/skills/soul-domains/SKILL.md +43 -0
- package/skills/tadabbur/SKILL.md +232 -0
- package/skills/tadabbur-ops/SKILL.md +42 -0
- package/skills/tafakkur/SKILL.md +104 -0
- package/skills/testing-strategy/SKILL.md +122 -0
- package/src/action-ledger-core.ts +1054 -0
- package/src/chat.ts +5 -6
- package/src/codebase-scanner.ts +2 -0
- package/src/connectors/claude-code.ts +149 -12
- package/src/connectors/codebase-awareness.ts +325 -25
- package/src/connectors/codex.ts +1273 -40
- package/src/connectors/cursor.ts +8 -0
- package/src/connectors/governed-adapter.ts +174 -0
- package/src/connectors/opencode.ts +18 -2
- package/src/connectors/repo-guard.ts +24 -12
- package/src/connectors/runtime.ts +99 -2
- package/src/connectors/shell.ts +125 -7
- package/src/cross-cli-hive-binding.ts +290 -0
- package/src/garden-control-plane.ts +24 -1
- package/src/governed-surface-runner.ts +1227 -0
- package/src/index.ts +104 -1
- package/src/task-runner.ts +3794 -0
- package/dist/aria-connector/src/install-hooks.d.ts +0 -18
- package/dist/aria-connector/src/install-hooks.d.ts.map +0 -1
- package/dist/aria-connector/src/install-hooks.js +0 -224
- package/dist/aria-connector/src/install-hooks.js.map +0 -1
- package/dist/aria-connector/src/onboarding-wizard.d.ts +0 -5
- package/dist/aria-connector/src/onboarding-wizard.d.ts.map +0 -1
- package/dist/aria-connector/src/onboarding-wizard.js +0 -188
- package/dist/aria-connector/src/onboarding-wizard.js.map +0 -1
- package/dist/cli-0.2.38.tgz +0 -0
- package/dist/install.sh +0 -13
- package/src/__tests__/anthropic-oauth.test.ts +0 -186
- package/src/__tests__/auth-commands.test.ts +0 -132
- package/src/__tests__/owner-login.test.ts +0 -311
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* probe-discipline-scanner.mjs — no-timeouts doctrine enforcement at the
|
|
3
|
+
* pre-tool-gate Bash surface. Doctrine: feedback_no_timeouts_doctrine.md
|
|
4
|
+
* + no_timeouts_decision_tree_rule (aria-hardening-worker/src/watcher.ts:6).
|
|
5
|
+
* Deadline-based escape from retry loops forbidden; use bounded retry by
|
|
6
|
+
* error count + LOUD failure surfaces.
|
|
7
|
+
*
|
|
8
|
+
* Scanned: shell-position `timeout N` wrapper (^timeout, | timeout, &&
|
|
9
|
+
* timeout, ; timeout, $( timeout). NOT scanned: tool-internal flags like
|
|
10
|
+
* curl --max-time, which are legitimate tool-bounded probes.
|
|
11
|
+
*
|
|
12
|
+
* Behavior: warn 1st-2nd occurrence in session, HARD-BLOCK at 3+ via
|
|
13
|
+
* ARIA_PROBE_DISCIPLINE_BYPASS=1 escape hatch. Both warn and block paths
|
|
14
|
+
* log to ~/.claude/aria-discoveries-<session>.jsonl so the hardening
|
|
15
|
+
* worker (F2) accumulates cross-session signal.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
import { appendFileSync, existsSync, mkdirSync, readFileSync } from 'node:fs';
|
|
19
|
+
import { dirname } from 'node:path';
|
|
20
|
+
import { homedir } from 'node:os';
|
|
21
|
+
|
|
22
|
+
const HOME = homedir();
|
|
23
|
+
const COUNTER_PATH = `${HOME}/.claude/.aria-probe-discipline-counter.jsonl`;
|
|
24
|
+
const DISCOVERY_LEDGER_PREFIX = `${HOME}/.claude/aria-discoveries-`;
|
|
25
|
+
const TIMEOUT_WRAPPER_RX = /(?:^|\||&&|;|\$\()\s*timeout\s+\d+(?:[smhd])?\b/g;
|
|
26
|
+
const HARD_BLOCK_THRESHOLD = 3;
|
|
27
|
+
const SESSION_RECENT_WINDOW_MS = 30 * 60 * 1000;
|
|
28
|
+
|
|
29
|
+
export function scanProbeDiscipline(cmd, sessionId) {
|
|
30
|
+
const result = {
|
|
31
|
+
matched: false,
|
|
32
|
+
matchCount: 0,
|
|
33
|
+
sessionCount: 0,
|
|
34
|
+
blocked: false,
|
|
35
|
+
bypassed: false,
|
|
36
|
+
blockReason: null,
|
|
37
|
+
warned: false,
|
|
38
|
+
};
|
|
39
|
+
if (typeof cmd !== 'string' || cmd.length === 0) return result;
|
|
40
|
+
TIMEOUT_WRAPPER_RX.lastIndex = 0;
|
|
41
|
+
const matches = cmd.match(TIMEOUT_WRAPPER_RX) || [];
|
|
42
|
+
if (matches.length === 0) return result;
|
|
43
|
+
|
|
44
|
+
result.matched = true;
|
|
45
|
+
result.matchCount = matches.length;
|
|
46
|
+
const bypassed = /^(?:1|true|yes|on)$/i.test(String(process.env.ARIA_PROBE_DISCIPLINE_BYPASS || ''));
|
|
47
|
+
result.bypassed = bypassed;
|
|
48
|
+
|
|
49
|
+
const now = Date.now();
|
|
50
|
+
const ts = new Date(now).toISOString();
|
|
51
|
+
const entry = {
|
|
52
|
+
ts,
|
|
53
|
+
sessionId: String(sessionId || 'unknown'),
|
|
54
|
+
matches: matches.map((m) => m.trim()).slice(0, 5),
|
|
55
|
+
cmdPreview: cmd.slice(0, 120).replace(/\s+/g, ' '),
|
|
56
|
+
bypassed,
|
|
57
|
+
};
|
|
58
|
+
try {
|
|
59
|
+
if (!existsSync(dirname(COUNTER_PATH))) mkdirSync(dirname(COUNTER_PATH), { recursive: true });
|
|
60
|
+
appendFileSync(COUNTER_PATH, JSON.stringify(entry) + '\n');
|
|
61
|
+
} catch (err) {
|
|
62
|
+
process.stderr.write(`[probe-discipline:counter-write] caught: ${err?.message || err}\n`);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
let sessionCount = 0;
|
|
66
|
+
try {
|
|
67
|
+
if (existsSync(COUNTER_PATH)) {
|
|
68
|
+
const raw = readFileSync(COUNTER_PATH, 'utf-8');
|
|
69
|
+
const cutoff = now - SESSION_RECENT_WINDOW_MS;
|
|
70
|
+
for (const line of raw.split('\n')) {
|
|
71
|
+
if (!line.trim()) continue;
|
|
72
|
+
let row;
|
|
73
|
+
try { row = JSON.parse(line); } catch { continue; }
|
|
74
|
+
if (row.sessionId !== entry.sessionId) continue;
|
|
75
|
+
const ms = new Date(row.ts).getTime();
|
|
76
|
+
if (!Number.isFinite(ms) || ms < cutoff) continue;
|
|
77
|
+
sessionCount++;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
} catch (err) {
|
|
81
|
+
process.stderr.write(`[probe-discipline:counter-read] caught: ${err?.message || err}\n`);
|
|
82
|
+
sessionCount = 1;
|
|
83
|
+
}
|
|
84
|
+
result.sessionCount = sessionCount;
|
|
85
|
+
|
|
86
|
+
const discoveryPath = `${DISCOVERY_LEDGER_PREFIX}${String(sessionId || 'unknown').replace(/[^a-zA-Z0-9_-]/g, '_')}.jsonl`;
|
|
87
|
+
const discoveryRow = {
|
|
88
|
+
ts,
|
|
89
|
+
kind: 'probe_discipline_violation',
|
|
90
|
+
resolution_status: 'open',
|
|
91
|
+
pattern: 'shell_timeout_wrapper',
|
|
92
|
+
sessionCount,
|
|
93
|
+
bypassed,
|
|
94
|
+
cmdPreview: entry.cmdPreview,
|
|
95
|
+
doctrine: 'feedback_no_timeouts_doctrine.md / no_timeouts_decision_tree_rule',
|
|
96
|
+
counterAction: 'bounded retry by error count + LOUD failure; never deadline-based escape',
|
|
97
|
+
};
|
|
98
|
+
try {
|
|
99
|
+
if (!existsSync(dirname(discoveryPath))) mkdirSync(dirname(discoveryPath), { recursive: true });
|
|
100
|
+
appendFileSync(discoveryPath, JSON.stringify(discoveryRow) + '\n');
|
|
101
|
+
} catch (err) {
|
|
102
|
+
process.stderr.write(`[probe-discipline:ledger-write] caught: ${err?.message || err}\n`);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
if (bypassed) {
|
|
106
|
+
process.stderr.write(
|
|
107
|
+
`[probe-discipline:BYPASS-APPLIED] cmd-match=${matches[0]} sessionCount=${sessionCount} ARIA_PROBE_DISCIPLINE_BYPASS=1 — allowing this turn; bypass logged to ledger\n`,
|
|
108
|
+
);
|
|
109
|
+
result.warned = true;
|
|
110
|
+
return result;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
if (sessionCount >= HARD_BLOCK_THRESHOLD) {
|
|
114
|
+
result.blocked = true;
|
|
115
|
+
result.blockReason = `Aria pre-tool gate: PROBE-DISCIPLINE hard-block.
|
|
116
|
+
|
|
117
|
+
The command contains a shell-position 'timeout N' wrapper (matched: ${matches.slice(0, 3).join(', ')}).
|
|
118
|
+
This is the ${sessionCount}-th such invocation in this session within the last 30 minutes.
|
|
119
|
+
|
|
120
|
+
Doctrine 'no_timeouts_decision_tree_rule' (feedback_no_timeouts_doctrine.md): deadline-based escape from a retry loop is forbidden. Use bounded retry by error count + LOUD failure surfaces + explicit recovery, never an opaque deadline.
|
|
121
|
+
|
|
122
|
+
Legitimate alternatives:
|
|
123
|
+
- curl --max-time N ... (tool-bounded probe, NOT shell wrapper)
|
|
124
|
+
- fs.watchFile(...) (OS-level polling, no deadline)
|
|
125
|
+
- bounded retry-by-error-count (per Recovery Contract)
|
|
126
|
+
|
|
127
|
+
To bypass for an explicitly authorized probe: ARIA_PROBE_DISCIPLINE_BYPASS=1 <your-command>
|
|
128
|
+
(Bypass usage is logged to the discovery ledger; operator gets full audit trail.)
|
|
129
|
+
|
|
130
|
+
Next action: rewrite the command using a legitimate alternative OR set the bypass env var explicitly.`;
|
|
131
|
+
process.stderr.write(
|
|
132
|
+
`[probe-discipline:HARD-BLOCK] sessionCount=${sessionCount}/${HARD_BLOCK_THRESHOLD} matches=${matches.join(',')}\n`,
|
|
133
|
+
);
|
|
134
|
+
return result;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
result.warned = true;
|
|
138
|
+
process.stderr.write(
|
|
139
|
+
`[probe-discipline:WARN] shell-position timeout wrapper detected (sessionCount=${sessionCount}/${HARD_BLOCK_THRESHOLD}) matches=${matches.slice(0, 3).join(',')} — doctrine: no_timeouts_decision_tree_rule. Hard-block at ${HARD_BLOCK_THRESHOLD}+. Bypass: ARIA_PROBE_DISCIPLINE_BYPASS=1\n`,
|
|
140
|
+
);
|
|
141
|
+
return result;
|
|
142
|
+
}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
const PROJECT_WORK_RX = /\b(?:project|phase|implement|wire|upgrade|fix|repair|continue|finish|execute|end[-\s]?to[-\s]?end|qa|test|verify|ledger|connector|terminal|runtime|hook|skill|autofire|atlas|repo|codebase|first[-\s]?class|symptom\s+fix|doctrine|harness)\b/i;
|
|
2
|
+
const COMPLETION_CLAIM_RX = /\b(?:done|complete|completed|ready|verified|fixed|finished|shipped|implemented|wired|first[-\s]?class|end[-\s]?to[-\s]?end)\b/i;
|
|
3
|
+
const OWNER_CORRECTION_RX = /\b(?:you(?:\s+are|'re| were)?\s+right|u\s+r\s+right|i\s+am\s+right|another\s+failure|that'?s\s+(?:a\s+)?failure|ledger\s+failur\w*|symptom\s+fix|not\s+(?:a\s+)?first[-\s]?class|why\s+(?:not|haven'?t|didn'?t)|self[-\s]?audit|auto[-\s]?trigg\w*|fire\s+(?:the\s+)?skills?|fix\s+what\s+u?\s*found|corrected[\s\S]{0,40}\b\d+(?:k|\+)?\s+times)\b/i;
|
|
4
|
+
const ASSISTANT_CORRECTION_ACK_RX = /\b(?:you(?:\s+are|'re| were)?\s+right|i\s+should\s+have|i\s+missed|i\s+was\s+wrong|that\s+was\s+(?:a\s+)?miss|i\s+failed\s+to)\b/i;
|
|
5
|
+
|
|
6
|
+
export const PROJECT_START_TADABBUR_QUESTIONS = Object.freeze([
|
|
7
|
+
'What is the exact project object under reflection, not the surface request?',
|
|
8
|
+
'Which owner, doctrine, runtime, repo, and no-harm constraints bind the first action?',
|
|
9
|
+
'What evidence is missing before action, and what source will be checked first?',
|
|
10
|
+
'What repeated correction or hidden mechanism failure could recur if not handled now?',
|
|
11
|
+
'What observable predicate will prove the start action and final closeout succeeded?',
|
|
12
|
+
]);
|
|
13
|
+
|
|
14
|
+
// Aligned 1:1 to atlas kernel QIYAS_PERSPECTIVES (deterministic-cognitive-kernel.mjs:18)
|
|
15
|
+
// for consistency across all project-boundary + end-phase QA receipts. 2026-05-17 F2.
|
|
16
|
+
export const PROJECT_END_QIYAS_PERSPECTIVES = Object.freeze([
|
|
17
|
+
'Owner-Hamza-now',
|
|
18
|
+
'Owner-Hamza-future',
|
|
19
|
+
'operator-client',
|
|
20
|
+
'investor-or-buyer',
|
|
21
|
+
'LLM-consumer',
|
|
22
|
+
'human-end-user',
|
|
23
|
+
'skeptic',
|
|
24
|
+
'compliance',
|
|
25
|
+
'engineering-quality',
|
|
26
|
+
'cognitive-load',
|
|
27
|
+
'scale',
|
|
28
|
+
'Islamic-scholar',
|
|
29
|
+
'clinical-scholar',
|
|
30
|
+
'red-team-attacker',
|
|
31
|
+
'future-self',
|
|
32
|
+
]);
|
|
33
|
+
|
|
34
|
+
export function detectProjectBoundaryNeed(userText = '', assistantText = '') {
|
|
35
|
+
const user = String(userText || '');
|
|
36
|
+
const assistant = String(assistantText || '');
|
|
37
|
+
const projectLike = PROJECT_WORK_RX.test(user) || user.length >= 180;
|
|
38
|
+
const completionClaim = COMPLETION_CLAIM_RX.test(assistant);
|
|
39
|
+
const ownerCorrection = OWNER_CORRECTION_RX.test(user) || ASSISTANT_CORRECTION_ACK_RX.test(assistant);
|
|
40
|
+
return {
|
|
41
|
+
required: projectLike || completionClaim || ownerCorrection,
|
|
42
|
+
projectLike,
|
|
43
|
+
completionClaim,
|
|
44
|
+
ownerCorrection,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export function buildProjectStartBoundary({
|
|
49
|
+
userText = '',
|
|
50
|
+
cognitiveRuntimeReceipts = null,
|
|
51
|
+
source = 'project-start-boundary',
|
|
52
|
+
} = {}) {
|
|
53
|
+
const need = detectProjectBoundaryNeed(userText);
|
|
54
|
+
const tadabbur = cognitiveRuntimeReceipts?.tadabbur || {};
|
|
55
|
+
const qiyas = cognitiveRuntimeReceipts?.qiyas || {};
|
|
56
|
+
const tadabburOk = tadabbur.ok === true && tadabbur.stageCount === 12;
|
|
57
|
+
return {
|
|
58
|
+
schema: 'aria.project_boundary_cognition.v1',
|
|
59
|
+
phase: 'project_start',
|
|
60
|
+
source,
|
|
61
|
+
required: need.required,
|
|
62
|
+
ok: !need.required || tadabburOk,
|
|
63
|
+
trigger: need,
|
|
64
|
+
startTadabbur: {
|
|
65
|
+
required: need.required,
|
|
66
|
+
ok: !need.required || tadabburOk,
|
|
67
|
+
expectedStages: 12,
|
|
68
|
+
observedStages: Number(tadabbur.stageCount || 0),
|
|
69
|
+
mode: tadabbur.mode || null,
|
|
70
|
+
questions: [...PROJECT_START_TADABBUR_QUESTIONS],
|
|
71
|
+
},
|
|
72
|
+
endQiyasContract: {
|
|
73
|
+
requiredAtClose: need.required,
|
|
74
|
+
expectedPerspectives: PROJECT_END_QIYAS_PERSPECTIVES.length,
|
|
75
|
+
preloadedPerspectives: Number(qiyas.perspectiveCount || 0),
|
|
76
|
+
status: need.required ? 'pending_phase_close' : 'not_required',
|
|
77
|
+
},
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
export function evaluateProjectEndBoundary({
|
|
82
|
+
userText = '',
|
|
83
|
+
assistantText = '',
|
|
84
|
+
endPhaseQaAutofire = null,
|
|
85
|
+
source = 'project-end-boundary',
|
|
86
|
+
} = {}) {
|
|
87
|
+
const need = detectProjectBoundaryNeed(userText, assistantText);
|
|
88
|
+
const receipt = endPhaseQaAutofire?.receipt || endPhaseQaAutofire || {};
|
|
89
|
+
const qiyasPass = Array.isArray(receipt.qiyas_15_pass) && receipt.qiyas_15_pass.length === PROJECT_END_QIYAS_PERSPECTIVES.length;
|
|
90
|
+
const qiyasPerspectiveCount = Number(receipt.cognitive_qiyas_15?.perspectives || 0);
|
|
91
|
+
const tadabburStageCount = Number(receipt.cognitive_tadabbur_12?.stages || 0);
|
|
92
|
+
const claimVerdict = receipt.claim_gate?.verdict || null;
|
|
93
|
+
const claimOk = !claimVerdict || ['verified', 'verified_narrowly'].includes(claimVerdict);
|
|
94
|
+
const missing = [];
|
|
95
|
+
if (need.required && qiyasPerspectiveCount !== PROJECT_END_QIYAS_PERSPECTIVES.length) missing.push('qiyas_15_perspective_count');
|
|
96
|
+
if (need.required && !qiyasPass) missing.push('qiyas_15_pass_entries');
|
|
97
|
+
if (need.required && tadabburStageCount !== 12) missing.push('tadabbur_12_closeout_count');
|
|
98
|
+
if (need.required && !claimOk) missing.push('claim_gate_verified_or_narrowly_verified');
|
|
99
|
+
return {
|
|
100
|
+
schema: 'aria.project_boundary_cognition.v1',
|
|
101
|
+
phase: 'project_end',
|
|
102
|
+
source,
|
|
103
|
+
required: need.required,
|
|
104
|
+
ok: !need.required || missing.length === 0,
|
|
105
|
+
trigger: need,
|
|
106
|
+
endQiyas: {
|
|
107
|
+
required: need.required,
|
|
108
|
+
ok: !need.required || (qiyasPerspectiveCount === PROJECT_END_QIYAS_PERSPECTIVES.length && qiyasPass),
|
|
109
|
+
expectedPerspectives: PROJECT_END_QIYAS_PERSPECTIVES.length,
|
|
110
|
+
observedPerspectives: qiyasPerspectiveCount,
|
|
111
|
+
passEntries: Array.isArray(receipt.qiyas_15_pass) ? receipt.qiyas_15_pass.length : 0,
|
|
112
|
+
},
|
|
113
|
+
closeoutTadabbur: {
|
|
114
|
+
expectedStages: 12,
|
|
115
|
+
observedStages: tadabburStageCount,
|
|
116
|
+
},
|
|
117
|
+
claimGate: {
|
|
118
|
+
verdict: claimVerdict,
|
|
119
|
+
ok: claimOk,
|
|
120
|
+
},
|
|
121
|
+
missing,
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
export function formatProjectBoundaryPrompt(boundary) {
|
|
126
|
+
if (!boundary?.required) return 'Project boundary: not required for this turn.';
|
|
127
|
+
return [
|
|
128
|
+
'Project boundary: start Tadabbur-12 is required before action; end Qiyas-15 is required before closeout.',
|
|
129
|
+
`Start Tadabbur: ${boundary.startTadabbur?.ok ? 'pass' : 'missing'} (${boundary.startTadabbur?.observedStages || 0}/${boundary.startTadabbur?.expectedStages || 12})`,
|
|
130
|
+
'Automatic start questions:',
|
|
131
|
+
...PROJECT_START_TADABBUR_QUESTIONS.map((question, index) => `${index + 1}. ${question}`),
|
|
132
|
+
`End Qiyas pending: ${boundary.endQiyasContract?.expectedPerspectives || 15} perspectives at phase close.`,
|
|
133
|
+
].join('\n');
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
export function formatProjectBoundaryBlock(boundary) {
|
|
137
|
+
return [
|
|
138
|
+
'Project boundary cognition failed before release.',
|
|
139
|
+
`phase: ${boundary?.phase || 'unknown'}`,
|
|
140
|
+
`missing: ${(boundary?.missing || []).join(', ') || 'project_start_tadabbur_12'}`,
|
|
141
|
+
'required repair: run Tadabbur-12 at project start and Qiyas-15 at phase close, then re-check the claim gate from evidence.',
|
|
142
|
+
].join('\n');
|
|
143
|
+
}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
// Recovery context loader (M1.2 — Bug B fix).
|
|
2
|
+
//
|
|
3
|
+
// Doctrine bind:
|
|
4
|
+
// - feedback_no_graceful_degradation.md — recovery contracts written to disk by
|
|
5
|
+
// stop-gate / cognition-substrate-binding MUST be delivered to the next-turn
|
|
6
|
+
// model. Writing to disk and never reading is graceful degradation.
|
|
7
|
+
// - aria-repo-doctrine — real implementation; archive on pickup so the contract
|
|
8
|
+
// doesn't re-fire indefinitely.
|
|
9
|
+
//
|
|
10
|
+
// Lifted from packages/aria-connector/opencode-plugins/harness-context/inject-context.mjs:90
|
|
11
|
+
// to make the same delivery channel available to the Claude Code surface (was missing,
|
|
12
|
+
// see audit ledger Layer 4 / Bug B).
|
|
13
|
+
//
|
|
14
|
+
// Used by:
|
|
15
|
+
// - ops/claude-hooks/aria-harness-via-sdk.mjs (SessionStart + UserPromptSubmit)
|
|
16
|
+
// - packages/aria-connector/hooks/aria-harness-via-sdk.mjs (mirror)
|
|
17
|
+
|
|
18
|
+
import { existsSync, mkdirSync, readFileSync, renameSync, statSync } from 'node:fs';
|
|
19
|
+
import { homedir } from 'node:os';
|
|
20
|
+
import { dirname, join } from 'node:path';
|
|
21
|
+
|
|
22
|
+
const HOME = homedir();
|
|
23
|
+
const RECOVERY_PATH = join(HOME, '.aria', 'governance-recovery-current.json');
|
|
24
|
+
const ARCHIVE_DIR = join(HOME, '.aria', 'governance-recovery-archive');
|
|
25
|
+
|
|
26
|
+
// M0.H.X9 (2026-05-06) — Phase 0 audit Cluster H finding M0.H.19:
|
|
27
|
+
// recovery contracts now schema-versioned. Writers (aria-stop-gate +
|
|
28
|
+
// aria-cognition-substrate-binding) emit `schema: 'aria.governance_
|
|
29
|
+
// recovery_current.v1'`. This reader checks the schema field on read
|
|
30
|
+
// and surfaces version mismatch via stderr — operator sees if a
|
|
31
|
+
// contract was written by an out-of-date writer (e.g., a stale
|
|
32
|
+
// connector hooks installation) before consuming.
|
|
33
|
+
//
|
|
34
|
+
// M0.SELFREVIEW.11 (2026-05-06) — fail-CLOSED on unsupported schema.
|
|
35
|
+
// Previous behavior was consume-with-warn for missing/unknown schema;
|
|
36
|
+
// a malformed or spoofed recovery contract could feed misleading state
|
|
37
|
+
// to the model. Now: missing schema OR unsupported schema = reject,
|
|
38
|
+
// quarantine the contract, return empty block. Operator gets a stderr
|
|
39
|
+
// message naming the schema actually seen vs supported. The quarantine
|
|
40
|
+
// dir prevents the same bad contract from re-firing every turn.
|
|
41
|
+
const SUPPORTED_RECOVERY_SCHEMAS = Object.freeze([
|
|
42
|
+
'aria.governance_recovery_current.v1',
|
|
43
|
+
]);
|
|
44
|
+
const QUARANTINE_DIR = join(HOME, '.aria', 'governance-recovery-quarantine');
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Read the current governance recovery contract (if any) and format it as
|
|
48
|
+
* a system-prompt block for injection into the next turn's additionalContext.
|
|
49
|
+
*
|
|
50
|
+
* Returns empty string when no recovery is pending or the file is malformed —
|
|
51
|
+
* malformed/parse errors are surfaced via stderr (no silent swallow per
|
|
52
|
+
* feedback_no_graceful_degradation.md).
|
|
53
|
+
*
|
|
54
|
+
* @returns {{ block: string, pickupId: string | null }} block text + pickup
|
|
55
|
+
* identifier. The pickup id is the recovery fingerprint; pass it to
|
|
56
|
+
* archiveRecoveryAfterPickup() once delivered to the model.
|
|
57
|
+
*/
|
|
58
|
+
export function readGovernanceRecoveryContext() {
|
|
59
|
+
if (!existsSync(RECOVERY_PATH)) return { block: '', pickupId: null };
|
|
60
|
+
let recovery;
|
|
61
|
+
try {
|
|
62
|
+
recovery = JSON.parse(readFileSync(RECOVERY_PATH, 'utf8'));
|
|
63
|
+
} catch (error) {
|
|
64
|
+
process.stderr.write(`[recovery-context] malformed recovery file ignored (${error.message})\n`);
|
|
65
|
+
return { block: '', pickupId: null };
|
|
66
|
+
}
|
|
67
|
+
// M0.SELFREVIEW.11 (2026-05-06): schema-version check now fail-CLOSED.
|
|
68
|
+
// Missing schema field OR unsupported schema = reject the contract +
|
|
69
|
+
// quarantine the file (so it doesn't re-fire each turn) + return empty.
|
|
70
|
+
// This is the defensive direction on safety contracts: a malformed or
|
|
71
|
+
// spoofed contract should NOT shape model state. Operator sees the
|
|
72
|
+
// quarantine + stderr line; if they intentionally want to restore the
|
|
73
|
+
// contract, they can move it back from the quarantine dir manually.
|
|
74
|
+
const schema = String(recovery.schema || '').trim();
|
|
75
|
+
if (!schema || !SUPPORTED_RECOVERY_SCHEMAS.includes(schema)) {
|
|
76
|
+
const reason = !schema
|
|
77
|
+
? 'no schema field'
|
|
78
|
+
: `unsupported schema: ${schema} (supported: ${SUPPORTED_RECOVERY_SCHEMAS.join(', ')})`;
|
|
79
|
+
process.stderr.write(`[recovery-context] recovery contract REJECTED — ${reason} (M0.SELFREVIEW.11 fail-CLOSED); quarantining\n`);
|
|
80
|
+
try {
|
|
81
|
+
if (!existsSync(QUARANTINE_DIR)) {
|
|
82
|
+
mkdirSync(QUARANTINE_DIR, { recursive: true, mode: 0o700 });
|
|
83
|
+
}
|
|
84
|
+
const ts = new Date().toISOString().replace(/[:.]/g, '-');
|
|
85
|
+
renameSync(RECOVERY_PATH, join(QUARANTINE_DIR, `recovery-rejected-${ts}.json`));
|
|
86
|
+
} catch (err) {
|
|
87
|
+
process.stderr.write(`[recovery-context:quarantine] caught: ${err instanceof Error ? err.message : String(err)}\n`);
|
|
88
|
+
}
|
|
89
|
+
return { block: '', pickupId: null };
|
|
90
|
+
}
|
|
91
|
+
const mode = String(recovery.governanceMode || '').trim();
|
|
92
|
+
if (!mode || mode === 'allow') return { block: '', pickupId: null };
|
|
93
|
+
|
|
94
|
+
const loop = recovery.recoveryLoop && typeof recovery.recoveryLoop === 'object' ? recovery.recoveryLoop : {};
|
|
95
|
+
const contract = recovery.recoveryContract && typeof recovery.recoveryContract === 'object' ? recovery.recoveryContract : {};
|
|
96
|
+
const fingerprint = loop.fingerprint || null;
|
|
97
|
+
|
|
98
|
+
const block = [
|
|
99
|
+
'--- CURRENT GOVERNANCE RECOVERY CONTEXT ---',
|
|
100
|
+
`Mode: ${mode}`,
|
|
101
|
+
`Decision: ${recovery.decision || 'block'}`,
|
|
102
|
+
`Fingerprint: ${fingerprint || 'unknown'}`,
|
|
103
|
+
`Allowed recovery attempts: ${loop.allowedRecoveryAttempts ?? 1}`,
|
|
104
|
+
`Prior recovery attempts: ${loop.priorRecoveryAttempts ?? 0}`,
|
|
105
|
+
`Remaining recovery attempts: ${loop.remainingRecoveryAttempts ?? 0}`,
|
|
106
|
+
`Next step: ${loop.nextStep || 'execute recovery contract before claiming completion'}`,
|
|
107
|
+
`Architect fallback: ${loop.architectFallback || contract.fallbackWhenAriaUnavailable || 'if Aria consult is unavailable, use the strongest available client LLM under the architect harness'}`,
|
|
108
|
+
`Load skills first: ${(contract.loadSkillsFirst || []).join(', ') || '(none)'}`,
|
|
109
|
+
`Repair recovery cycle: ${(contract.repairRecoveryCycle || []).join(', ') || '(none)'}`,
|
|
110
|
+
`Retest: ${contract.retest || 'run the concrete verification probe'}`,
|
|
111
|
+
'Mandatory behavior: this is system-prompt recovery state; execute it before final output.',
|
|
112
|
+
].join('\n');
|
|
113
|
+
|
|
114
|
+
return { block, pickupId: fingerprint };
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* Move the current recovery file to the archive directory after the contract
|
|
119
|
+
* has been delivered to the model. Prevents the same recovery contract from
|
|
120
|
+
* re-firing on every subsequent turn forever.
|
|
121
|
+
*
|
|
122
|
+
* Per feedback_no_graceful_degradation.md, archive errors are surfaced via
|
|
123
|
+
* stderr (never silent). The recovery file is left in place if archiving
|
|
124
|
+
* fails — it WILL re-fire next turn, which is the correct conservative
|
|
125
|
+
* behavior (the contract hasn't been actually consumed if archiving failed).
|
|
126
|
+
*
|
|
127
|
+
* @param {string | null} pickupId the fingerprint returned by
|
|
128
|
+
* readGovernanceRecoveryContext(). If null/empty, this is a no-op.
|
|
129
|
+
*/
|
|
130
|
+
export function archiveRecoveryAfterPickup(pickupId) {
|
|
131
|
+
if (!pickupId) return;
|
|
132
|
+
if (!existsSync(RECOVERY_PATH)) return;
|
|
133
|
+
|
|
134
|
+
try {
|
|
135
|
+
if (!existsSync(ARCHIVE_DIR)) {
|
|
136
|
+
mkdirSync(ARCHIVE_DIR, { recursive: true, mode: 0o700 });
|
|
137
|
+
}
|
|
138
|
+
const ts = new Date().toISOString().replace(/[:.]/g, '-');
|
|
139
|
+
const archivePath = join(ARCHIVE_DIR, `recovery-${ts}-${pickupId.slice(0, 12)}.json`);
|
|
140
|
+
renameSync(RECOVERY_PATH, archivePath);
|
|
141
|
+
} catch (error) {
|
|
142
|
+
process.stderr.write(`[recovery-context] archive failed (${error.message}) — recovery will re-fire next turn (conservative)\n`);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
/**
|
|
147
|
+
* Path to the live recovery file. Exported for callers that want to inspect
|
|
148
|
+
* it directly (e.g. coach kernel reading recovery state for pre_turn phase).
|
|
149
|
+
*/
|
|
150
|
+
export const RECOVERY_FILE_PATH = RECOVERY_PATH;
|
|
151
|
+
export const RECOVERY_ARCHIVE_DIR = ARCHIVE_DIR;
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// ── doctrine-self-check-file: M0.SELFREVIEW.1+2 (2026-05-06) ──
|
|
3
|
+
// Session added comments describing prior antipatterns being migrated.
|
|
4
|
+
// Each comment names a trigger pattern; file-level ack covers them all.
|
|
5
|
+
// doctrine-self-check-file: (?:based on|from|by) (?:the )?(?:name|function name)|sounds like|looks like (?:a|an)|just memory search|just a search|just a cache|just a wrapper session-added-comments-describing-prior-state-or-migration
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* recovery-template-loader.mjs — hot-reloading recovery prose templates.
|
|
9
|
+
*
|
|
10
|
+
* Phase 0 audit Tier D Meta-X5: extracts hardcoded teaching/recovery
|
|
11
|
+
* strings from hook source code into editable .md template files.
|
|
12
|
+
* Operator edits to the template files take effect on next hook
|
|
13
|
+
* invocation (mtime-based reload) — no redeploy / npm publish / client
|
|
14
|
+
* reinstall required.
|
|
15
|
+
*
|
|
16
|
+
* Closes:
|
|
17
|
+
* - M0.H.16 buildForceReauthorReason 70-line template baked in source
|
|
18
|
+
* - M0.H.X11 config-driven recovery messages
|
|
19
|
+
* - M0.G.X4 (partial) retire hardcoded fallback voice builders —
|
|
20
|
+
* applies the same pattern to stop-gate templates first;
|
|
21
|
+
* voice-side fallback prose retires in M0.G.X4 follow-up.
|
|
22
|
+
*
|
|
23
|
+
* Templating: simple {{variable}} substitution. NOT a full mustache
|
|
24
|
+
* implementation — just literal string replace. Comments rendered with
|
|
25
|
+
* {{!-- ... --}} are stripped before output.
|
|
26
|
+
*
|
|
27
|
+
* Doctrine bind:
|
|
28
|
+
* - clean_cognition (single helper for one concern)
|
|
29
|
+
* - feedback_no_flag_without_fix.md (closes the "buildForceReauthorReason
|
|
30
|
+
* baked in source" flag with a hot-reloadable fix)
|
|
31
|
+
*
|
|
32
|
+
* Mirror: this file MUST be byte-identical between
|
|
33
|
+
* ops/claude-hooks/lib/recovery-template-loader.mjs
|
|
34
|
+
* packages/aria-connector/hooks/lib/recovery-template-loader.mjs
|
|
35
|
+
*/
|
|
36
|
+
|
|
37
|
+
import { existsSync, readFileSync, statSync } from 'node:fs';
|
|
38
|
+
import { dirname, join, resolve } from 'node:path';
|
|
39
|
+
import { fileURLToPath } from 'node:url';
|
|
40
|
+
|
|
41
|
+
const HERE = dirname(fileURLToPath(import.meta.url));
|
|
42
|
+
// Templates live one directory up, in `recovery-templates/`.
|
|
43
|
+
const TEMPLATES_DIR = resolve(HERE, '..', 'recovery-templates');
|
|
44
|
+
|
|
45
|
+
// Cache: { name → { content, mtimeMs } }. Re-read when mtime changes.
|
|
46
|
+
const _cache = new Map();
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Load a template by name (without extension). Hot-reloads when the
|
|
50
|
+
* file's mtime changes since last read.
|
|
51
|
+
*
|
|
52
|
+
* @param {string} name e.g., 'force-reauthor', 'handoff-recovery'
|
|
53
|
+
* @returns {string} template content (with comments stripped); empty
|
|
54
|
+
* string if template missing (caller should handle).
|
|
55
|
+
*/
|
|
56
|
+
export function loadTemplate(name) {
|
|
57
|
+
const path = join(TEMPLATES_DIR, `${name}.md`);
|
|
58
|
+
if (!existsSync(path)) {
|
|
59
|
+
process.stderr.write(`[recovery-template-loader] template missing: ${path}\n`);
|
|
60
|
+
return '';
|
|
61
|
+
}
|
|
62
|
+
let stat;
|
|
63
|
+
try {
|
|
64
|
+
stat = statSync(path);
|
|
65
|
+
} catch (err) {
|
|
66
|
+
process.stderr.write(`[recovery-template-loader:stat] caught: ${err instanceof Error ? err.message : String(err)}\n`);
|
|
67
|
+
return '';
|
|
68
|
+
}
|
|
69
|
+
const cached = _cache.get(name);
|
|
70
|
+
if (cached && cached.mtimeMs === stat.mtimeMs) return cached.content;
|
|
71
|
+
let raw;
|
|
72
|
+
try {
|
|
73
|
+
raw = readFileSync(path, 'utf8');
|
|
74
|
+
} catch (err) {
|
|
75
|
+
process.stderr.write(`[recovery-template-loader:read] caught: ${err instanceof Error ? err.message : String(err)}\n`);
|
|
76
|
+
return '';
|
|
77
|
+
}
|
|
78
|
+
// Strip {{!-- ... --}} comment blocks (mustache-style block comments).
|
|
79
|
+
const stripped = raw.replace(/\{\{!--[\s\S]*?--\}\}\s*/g, '');
|
|
80
|
+
_cache.set(name, { content: stripped, mtimeMs: stat.mtimeMs });
|
|
81
|
+
return stripped;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Render a template with variable substitution.
|
|
86
|
+
*
|
|
87
|
+
* @param {string} name template name
|
|
88
|
+
* @param {Object} vars { varName: value } — values coerced to string
|
|
89
|
+
* @returns {string} rendered template, or empty string if template missing
|
|
90
|
+
*/
|
|
91
|
+
export function renderTemplate(name, vars = {}) {
|
|
92
|
+
let body = loadTemplate(name);
|
|
93
|
+
if (!body) return '';
|
|
94
|
+
for (const [k, v] of Object.entries(vars)) {
|
|
95
|
+
const value = v === null || v === undefined ? '' : String(v);
|
|
96
|
+
// Escape regex meta in key (keys are normally [a-z_] but defensive).
|
|
97
|
+
const re = new RegExp(`\\{\\{${k.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}\\}\\}`, 'g');
|
|
98
|
+
body = body.replace(re, value);
|
|
99
|
+
}
|
|
100
|
+
// Strip any remaining {{...}} placeholders (variables not provided)
|
|
101
|
+
// so the output doesn't contain mustache leakage. Operator-side
|
|
102
|
+
// tip: any unsubstituted variable reaches stderr at debug level.
|
|
103
|
+
const remaining = body.match(/\{\{[a-z_][a-z0-9_]*\}\}/gi);
|
|
104
|
+
if (remaining && remaining.length > 0) {
|
|
105
|
+
process.stderr.write(`[recovery-template-loader:${name}] unsubstituted variables: ${remaining.join(', ')}\n`);
|
|
106
|
+
body = body.replace(/\{\{[a-z_][a-z0-9_]*\}\}/gi, '');
|
|
107
|
+
}
|
|
108
|
+
return body.trim();
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* Required-template variant — throws if missing. Use for highest-stakes
|
|
113
|
+
* recovery prose where a missing template should fail-CLOSED rather
|
|
114
|
+
* than fall back to a weaker hardcoded string.
|
|
115
|
+
*
|
|
116
|
+
* M0.SELFREVIEW.10 — when `force-reauthor.md` (or other safety-critical
|
|
117
|
+
* templates) goes missing, the prior best-effort fallback returned a
|
|
118
|
+
* minimal placeholder that gave the model a weaker recovery contract
|
|
119
|
+
* than the real template. An attacker who deletes the template would
|
|
120
|
+
* silently weaken the gate. This variant fails-CLOSED so the caller
|
|
121
|
+
* can emit a clear "template missing" block instead.
|
|
122
|
+
*
|
|
123
|
+
* @param {string} name
|
|
124
|
+
* @returns {string} template body (non-empty, comments stripped)
|
|
125
|
+
* @throws {Error} when template file missing or unreadable
|
|
126
|
+
*/
|
|
127
|
+
export function loadTemplateRequired(name) {
|
|
128
|
+
const body = loadTemplate(name);
|
|
129
|
+
if (!body) {
|
|
130
|
+
throw new Error(`recovery-template-loader: required template missing: ${name} (M0.SELFREVIEW.10 fail-CLOSED)`);
|
|
131
|
+
}
|
|
132
|
+
return body;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* Render a required template with variable substitution. Throws if
|
|
137
|
+
* template missing OR if any variable left unsubstituted (the strict
|
|
138
|
+
* variant — operator-tier templates should not contain unbound vars).
|
|
139
|
+
*/
|
|
140
|
+
export function renderTemplateRequired(name, vars = {}) {
|
|
141
|
+
let body = loadTemplateRequired(name);
|
|
142
|
+
for (const [k, v] of Object.entries(vars)) {
|
|
143
|
+
const value = v === null || v === undefined ? '' : String(v);
|
|
144
|
+
const re = new RegExp(`\\{\\{${k.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}\\}\\}`, 'g');
|
|
145
|
+
body = body.replace(re, value);
|
|
146
|
+
}
|
|
147
|
+
const remaining = body.match(/\{\{[a-z_][a-z0-9_]*\}\}/gi);
|
|
148
|
+
if (remaining && remaining.length > 0) {
|
|
149
|
+
throw new Error(`recovery-template-loader: required template ${name} has unsubstituted variables: ${remaining.join(', ')}`);
|
|
150
|
+
}
|
|
151
|
+
return body.trim();
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
export default { loadTemplate, renderTemplate, loadTemplateRequired, renderTemplateRequired };
|