@xhulz/nina 0.69.0 → 0.71.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/bin/nina.mjs +2 -1
- package/package.json +1 -1
- package/releases/0.70.0/core/GAPS.md +125 -0
- package/releases/0.70.0/core/answered.json +89 -0
- package/releases/0.70.0/core/defaults/tree/.claude/agents/architect.md +1 -0
- package/releases/0.70.0/core/defaults/tree/.claude/agents/dba.md +3 -0
- package/releases/0.70.0/core/defaults/tree/.claude/agents/devops.md +1 -0
- package/releases/0.70.0/core/defaults/tree/.claude/agents/implementer.md +1 -0
- package/releases/0.70.0/core/defaults/tree/.claude/agents/integration-tester.md +3 -0
- package/releases/0.70.0/core/defaults/tree/.claude/agents/qa.md +7 -0
- package/releases/0.70.0/core/defaults/tree/.claude/agents/reviewer.md +3 -0
- package/releases/0.70.0/core/defaults/tree/.claude/agents/secops.md +3 -0
- package/releases/0.70.0/core/defaults/tree/.claude/agents/solidity-auditor.md +3 -0
- package/releases/0.70.0/core/defaults/tree/.claude/agents/solidity-dev.md +3 -0
- package/releases/0.70.0/core/tree/.claude/agents/architect.md +135 -0
- package/releases/0.70.0/core/tree/.claude/agents/dba.md +119 -0
- package/releases/0.70.0/core/tree/.claude/agents/design-reviewer.md +78 -0
- package/releases/0.70.0/core/tree/.claude/agents/devops.md +118 -0
- package/releases/0.70.0/core/tree/.claude/agents/implementer.md +178 -0
- package/releases/0.70.0/core/tree/.claude/agents/integration-tester.md +170 -0
- package/releases/0.70.0/core/tree/.claude/agents/planner.md +132 -0
- package/releases/0.70.0/core/tree/.claude/agents/qa.md +150 -0
- package/releases/0.70.0/core/tree/.claude/agents/reviewer.md +187 -0
- package/releases/0.70.0/core/tree/.claude/agents/secops.md +120 -0
- package/releases/0.70.0/core/tree/.claude/agents/solidity-auditor.md +126 -0
- package/releases/0.70.0/core/tree/.claude/agents/solidity-dev.md +123 -0
- package/releases/0.70.0/core/tree/.claude/agents-overview.md +65 -0
- package/releases/0.70.0/core/tree/.claude/frontend.md +10 -0
- package/releases/0.70.0/core/tree/.claude/graph.md +79 -0
- package/releases/0.70.0/core/tree/.claude/patterns.md +252 -0
- package/releases/0.70.0/core/tree/.claude/pills/README.md +150 -0
- package/releases/0.70.0/core/tree/.claude/pipeline.md +101 -0
- package/releases/0.70.0/core/tree/.claude/retrieval.md +103 -0
- package/releases/0.70.0/core/tree/.claude/router.md +221 -0
- package/releases/0.70.0/core/tree/.claude/templates/integration.md +48 -0
- package/releases/0.70.0/core/tree/CLAUDE.md +167 -0
- package/releases/0.70.0/core/tree/scripts/cost-watch.mjs +25 -0
- package/releases/0.70.0/core/tree/scripts/edit-guard.mjs +24 -0
- package/releases/0.70.0/core/tree/scripts/harness-check.mjs +82 -0
- package/releases/0.70.0/core/tree/scripts/loop-gate.mjs +19 -0
- package/releases/0.70.0/core/vocabulary.json +14 -0
- package/releases/0.70.0/surfaces/blockchain/tree/.claude/agents/architect.md +5 -0
- package/releases/0.70.0/surfaces/blockchain/tree/.claude/agents/devops.md +5 -0
- package/releases/0.70.0/surfaces/blockchain/tree/.claude/agents/reviewer.md +5 -0
- package/releases/0.70.0/surfaces/blockchain/tree/.claude/agents/solidity-auditor.md +18 -0
- package/releases/0.70.0/surfaces/blockchain/tree/.claude/agents/solidity-dev.md +16 -0
- package/releases/0.70.0/surfaces/blockchain/tree/.claude/agents-overview.md +6 -0
- package/releases/0.70.0/surfaces/blockchain/tree/.claude/graph.md +11 -0
- package/releases/0.70.0/surfaces/blockchain/tree/.claude/router.md +6 -0
- package/releases/0.70.0/surfaces/blockchain/tree/CLAUDE.md +12 -0
- package/releases/0.70.0/surfaces/d1/tree/.claude/agents/dba.md +15 -0
- package/releases/0.70.0/surfaces/d1/tree/.claude/agents/devops.md +2 -0
- package/releases/0.70.0/surfaces/d1/tree/.claude/agents/implementer.md +2 -0
- package/releases/0.70.0/surfaces/d1/tree/.claude/patterns.md +8 -0
- package/releases/0.70.0/surfaces/d1/tree/CLAUDE.md +2 -0
- package/releases/0.70.0/surfaces/db/tree/.claude/agents/architect.md +5 -0
- package/releases/0.70.0/surfaces/db/tree/.claude/agents/dba.md +54 -0
- package/releases/0.70.0/surfaces/db/tree/.claude/agents/devops.md +5 -0
- package/releases/0.70.0/surfaces/db/tree/.claude/agents/implementer.md +2 -0
- package/releases/0.70.0/surfaces/db/tree/.claude/agents/integration-tester.md +10 -0
- package/releases/0.70.0/surfaces/db/tree/.claude/agents/planner.md +2 -0
- package/releases/0.70.0/surfaces/db/tree/.claude/agents/reviewer.md +22 -0
- package/releases/0.70.0/surfaces/db/tree/.claude/agents/secops.md +2 -0
- package/releases/0.70.0/surfaces/db/tree/.claude/agents-overview.md +5 -0
- package/releases/0.70.0/surfaces/db/tree/.claude/graph.md +8 -0
- package/releases/0.70.0/surfaces/db/tree/.claude/patterns.md +22 -0
- package/releases/0.70.0/surfaces/db/tree/.claude/pipeline.md +13 -0
- package/releases/0.70.0/surfaces/db/tree/.claude/retrieval.md +5 -0
- package/releases/0.70.0/surfaces/db/tree/.claude/router.md +4 -0
- package/releases/0.70.0/surfaces/db/tree/CLAUDE.md +17 -0
- package/releases/0.70.0/surfaces/drizzle/tree/.claude/agents/dba.md +9 -0
- package/releases/0.70.0/surfaces/drizzle/tree/.claude/agents/devops.md +5 -0
- package/releases/0.70.0/surfaces/drizzle/tree/.claude/agents/implementer.md +2 -0
- package/releases/0.70.0/surfaces/drizzle/tree/.claude/patterns.md +7 -0
- package/releases/0.70.0/surfaces/edge-cf/tree/.claude/agents/architect.md +14 -0
- package/releases/0.70.0/surfaces/edge-cf/tree/.claude/agents/dba.md +2 -0
- package/releases/0.70.0/surfaces/edge-cf/tree/.claude/agents/devops.md +29 -0
- package/releases/0.70.0/surfaces/edge-cf/tree/.claude/agents/implementer.md +14 -0
- package/releases/0.70.0/surfaces/edge-cf/tree/.claude/agents/integration-tester.md +11 -0
- package/releases/0.70.0/surfaces/edge-cf/tree/.claude/agents/qa.md +3 -0
- package/releases/0.70.0/surfaces/edge-cf/tree/.claude/agents/reviewer.md +8 -0
- package/releases/0.70.0/surfaces/edge-cf/tree/.claude/agents/secops.md +8 -0
- package/releases/0.70.0/surfaces/edge-cf/tree/.claude/patterns.md +17 -0
- package/releases/0.70.0/surfaces/edge-cf/tree/.claude/retrieval.md +8 -0
- package/releases/0.70.0/surfaces/edge-cf/tree/CLAUDE.md +29 -0
- package/releases/0.70.0/surfaces/frontend/tree/.claude/agents/architect.md +20 -0
- package/releases/0.70.0/surfaces/frontend/tree/.claude/agents/devops.md +28 -0
- package/releases/0.70.0/surfaces/frontend/tree/.claude/agents/implementer.md +25 -0
- package/releases/0.70.0/surfaces/frontend/tree/.claude/agents/qa.md +17 -0
- package/releases/0.70.0/surfaces/frontend/tree/.claude/agents/reviewer.md +56 -0
- package/releases/0.70.0/surfaces/frontend/tree/.claude/patterns.md +8 -0
- package/releases/0.70.0/surfaces/frontend/tree/.claude/retrieval.md +2 -0
- package/releases/0.70.0/surfaces/frontend/tree/.claude/router.md +14 -0
- package/releases/0.70.0/surfaces/frontend/tree/CLAUDE.md +5 -0
- package/releases/0.70.0/surfaces/integrations/tree/.claude/agents/architect.md +16 -0
- package/releases/0.70.0/surfaces/integrations/tree/.claude/agents/implementer.md +12 -0
- package/releases/0.70.0/surfaces/integrations/tree/.claude/agents/integration-tester.md +20 -0
- package/releases/0.70.0/surfaces/integrations/tree/.claude/agents/planner.md +2 -0
- package/releases/0.70.0/surfaces/integrations/tree/.claude/agents/reviewer.md +21 -0
- package/releases/0.70.0/surfaces/integrations/tree/.claude/agents/secops.md +2 -0
- package/releases/0.70.0/surfaces/integrations/tree/.claude/agents-overview.md +8 -0
- package/releases/0.70.0/surfaces/integrations/tree/.claude/graph.md +10 -0
- package/releases/0.70.0/surfaces/integrations/tree/.claude/patterns.md +38 -0
- package/releases/0.70.0/surfaces/integrations/tree/.claude/pipeline.md +16 -0
- package/releases/0.70.0/surfaces/integrations/tree/.claude/retrieval.md +16 -0
- package/releases/0.70.0/surfaces/integrations/tree/.claude/router.md +6 -0
- package/releases/0.70.0/surfaces/integrations/tree/CLAUDE.md +17 -0
- package/releases/0.70.0/surfaces/money/tree/.claude/agents/architect.md +12 -0
- package/releases/0.70.0/surfaces/money/tree/.claude/agents/dba.md +14 -0
- package/releases/0.70.0/surfaces/money/tree/.claude/agents/implementer.md +11 -0
- package/releases/0.70.0/surfaces/money/tree/.claude/agents/integration-tester.md +3 -0
- package/releases/0.70.0/surfaces/money/tree/.claude/agents/reviewer.md +23 -0
- package/releases/0.70.0/surfaces/money/tree/.claude/agents/secops.md +5 -0
- package/releases/0.70.0/surfaces/money/tree/.claude/agents/solidity-auditor.md +4 -0
- package/releases/0.70.0/surfaces/money/tree/.claude/agents/solidity-dev.md +4 -0
- package/releases/0.70.0/surfaces/money/tree/.claude/graph.md +2 -0
- package/releases/0.70.0/surfaces/money/tree/.claude/patterns.md +49 -0
- package/releases/0.70.0/surfaces/money/tree/.claude/pipeline.md +2 -0
- package/releases/0.70.0/surfaces/money/tree/.claude/retrieval.md +2 -0
- package/releases/0.70.0/surfaces/money/tree/CLAUDE.md +11 -0
- package/releases/0.70.0/surfaces/pii/tree/.claude/agents/dba.md +2 -0
- package/releases/0.70.0/surfaces/pii/tree/.claude/agents/devops.md +8 -0
- package/releases/0.70.0/surfaces/pii/tree/.claude/agents/reviewer.md +8 -0
- package/releases/0.70.0/surfaces/pii/tree/.claude/agents/secops.md +2 -0
- package/releases/0.70.0/surfaces/pii/tree/.claude/agents/solidity-auditor.md +5 -0
- package/releases/0.70.0/surfaces/pii/tree/CLAUDE.md +5 -0
- package/releases/0.70.0/surfaces/prisma/tree/.claude/agents/architect.md +2 -0
- package/releases/0.70.0/surfaces/prisma/tree/.claude/agents/dba.md +42 -0
- package/releases/0.70.0/surfaces/prisma/tree/.claude/agents/devops.md +11 -0
- package/releases/0.70.0/surfaces/prisma/tree/.claude/agents/implementer.md +2 -0
- package/releases/0.70.0/surfaces/prisma/tree/.claude/agents/integration-tester.md +2 -0
- package/releases/0.70.0/surfaces/prisma/tree/.claude/agents/reviewer.md +2 -0
- package/releases/0.70.0/surfaces/prisma/tree/.claude/patterns.md +15 -0
- package/releases/0.70.0/surfaces/prisma/tree/CLAUDE.md +5 -0
- package/releases/0.71.0/core/GAPS.md +125 -0
- package/releases/0.71.0/core/answered.json +89 -0
- package/releases/0.71.0/core/defaults/tree/.claude/agents/architect.md +1 -0
- package/releases/0.71.0/core/defaults/tree/.claude/agents/dba.md +3 -0
- package/releases/0.71.0/core/defaults/tree/.claude/agents/devops.md +1 -0
- package/releases/0.71.0/core/defaults/tree/.claude/agents/implementer.md +1 -0
- package/releases/0.71.0/core/defaults/tree/.claude/agents/integration-tester.md +3 -0
- package/releases/0.71.0/core/defaults/tree/.claude/agents/qa.md +7 -0
- package/releases/0.71.0/core/defaults/tree/.claude/agents/reviewer.md +3 -0
- package/releases/0.71.0/core/defaults/tree/.claude/agents/secops.md +3 -0
- package/releases/0.71.0/core/defaults/tree/.claude/agents/solidity-auditor.md +3 -0
- package/releases/0.71.0/core/defaults/tree/.claude/agents/solidity-dev.md +3 -0
- package/releases/0.71.0/core/tree/.claude/agents/architect.md +135 -0
- package/releases/0.71.0/core/tree/.claude/agents/dba.md +119 -0
- package/releases/0.71.0/core/tree/.claude/agents/design-reviewer.md +78 -0
- package/releases/0.71.0/core/tree/.claude/agents/devops.md +118 -0
- package/releases/0.71.0/core/tree/.claude/agents/implementer.md +178 -0
- package/releases/0.71.0/core/tree/.claude/agents/integration-tester.md +170 -0
- package/releases/0.71.0/core/tree/.claude/agents/planner.md +132 -0
- package/releases/0.71.0/core/tree/.claude/agents/qa.md +150 -0
- package/releases/0.71.0/core/tree/.claude/agents/reviewer.md +187 -0
- package/releases/0.71.0/core/tree/.claude/agents/secops.md +120 -0
- package/releases/0.71.0/core/tree/.claude/agents/solidity-auditor.md +126 -0
- package/releases/0.71.0/core/tree/.claude/agents/solidity-dev.md +123 -0
- package/releases/0.71.0/core/tree/.claude/agents-overview.md +65 -0
- package/releases/0.71.0/core/tree/.claude/frontend.md +10 -0
- package/releases/0.71.0/core/tree/.claude/graph.md +79 -0
- package/releases/0.71.0/core/tree/.claude/patterns.md +252 -0
- package/releases/0.71.0/core/tree/.claude/pills/README.md +150 -0
- package/releases/0.71.0/core/tree/.claude/pipeline.md +101 -0
- package/releases/0.71.0/core/tree/.claude/retrieval.md +103 -0
- package/releases/0.71.0/core/tree/.claude/router.md +221 -0
- package/releases/0.71.0/core/tree/.claude/templates/integration.md +48 -0
- package/releases/0.71.0/core/tree/CLAUDE.md +167 -0
- package/releases/0.71.0/core/tree/scripts/cost-watch.mjs +27 -0
- package/releases/0.71.0/core/tree/scripts/edit-guard.mjs +24 -0
- package/releases/0.71.0/core/tree/scripts/harness-check.mjs +82 -0
- package/releases/0.71.0/core/tree/scripts/loop-gate.mjs +19 -0
- package/releases/0.71.0/core/vocabulary.json +15 -0
- package/releases/0.71.0/surfaces/blockchain/tree/.claude/agents/architect.md +5 -0
- package/releases/0.71.0/surfaces/blockchain/tree/.claude/agents/devops.md +5 -0
- package/releases/0.71.0/surfaces/blockchain/tree/.claude/agents/reviewer.md +5 -0
- package/releases/0.71.0/surfaces/blockchain/tree/.claude/agents/solidity-auditor.md +18 -0
- package/releases/0.71.0/surfaces/blockchain/tree/.claude/agents/solidity-dev.md +16 -0
- package/releases/0.71.0/surfaces/blockchain/tree/.claude/agents-overview.md +6 -0
- package/releases/0.71.0/surfaces/blockchain/tree/.claude/graph.md +11 -0
- package/releases/0.71.0/surfaces/blockchain/tree/.claude/router.md +6 -0
- package/releases/0.71.0/surfaces/blockchain/tree/CLAUDE.md +12 -0
- package/releases/0.71.0/surfaces/d1/tree/.claude/agents/dba.md +15 -0
- package/releases/0.71.0/surfaces/d1/tree/.claude/agents/devops.md +2 -0
- package/releases/0.71.0/surfaces/d1/tree/.claude/agents/implementer.md +2 -0
- package/releases/0.71.0/surfaces/d1/tree/.claude/patterns.md +8 -0
- package/releases/0.71.0/surfaces/d1/tree/CLAUDE.md +2 -0
- package/releases/0.71.0/surfaces/db/tree/.claude/agents/architect.md +5 -0
- package/releases/0.71.0/surfaces/db/tree/.claude/agents/dba.md +54 -0
- package/releases/0.71.0/surfaces/db/tree/.claude/agents/devops.md +5 -0
- package/releases/0.71.0/surfaces/db/tree/.claude/agents/implementer.md +2 -0
- package/releases/0.71.0/surfaces/db/tree/.claude/agents/integration-tester.md +10 -0
- package/releases/0.71.0/surfaces/db/tree/.claude/agents/planner.md +2 -0
- package/releases/0.71.0/surfaces/db/tree/.claude/agents/reviewer.md +22 -0
- package/releases/0.71.0/surfaces/db/tree/.claude/agents/secops.md +2 -0
- package/releases/0.71.0/surfaces/db/tree/.claude/agents-overview.md +5 -0
- package/releases/0.71.0/surfaces/db/tree/.claude/graph.md +8 -0
- package/releases/0.71.0/surfaces/db/tree/.claude/patterns.md +22 -0
- package/releases/0.71.0/surfaces/db/tree/.claude/pipeline.md +13 -0
- package/releases/0.71.0/surfaces/db/tree/.claude/retrieval.md +5 -0
- package/releases/0.71.0/surfaces/db/tree/.claude/router.md +4 -0
- package/releases/0.71.0/surfaces/db/tree/CLAUDE.md +17 -0
- package/releases/0.71.0/surfaces/drizzle/tree/.claude/agents/dba.md +9 -0
- package/releases/0.71.0/surfaces/drizzle/tree/.claude/agents/devops.md +5 -0
- package/releases/0.71.0/surfaces/drizzle/tree/.claude/agents/implementer.md +2 -0
- package/releases/0.71.0/surfaces/drizzle/tree/.claude/patterns.md +7 -0
- package/releases/0.71.0/surfaces/edge-cf/tree/.claude/agents/architect.md +14 -0
- package/releases/0.71.0/surfaces/edge-cf/tree/.claude/agents/dba.md +2 -0
- package/releases/0.71.0/surfaces/edge-cf/tree/.claude/agents/devops.md +29 -0
- package/releases/0.71.0/surfaces/edge-cf/tree/.claude/agents/implementer.md +14 -0
- package/releases/0.71.0/surfaces/edge-cf/tree/.claude/agents/integration-tester.md +11 -0
- package/releases/0.71.0/surfaces/edge-cf/tree/.claude/agents/qa.md +3 -0
- package/releases/0.71.0/surfaces/edge-cf/tree/.claude/agents/reviewer.md +8 -0
- package/releases/0.71.0/surfaces/edge-cf/tree/.claude/agents/secops.md +8 -0
- package/releases/0.71.0/surfaces/edge-cf/tree/.claude/patterns.md +17 -0
- package/releases/0.71.0/surfaces/edge-cf/tree/.claude/retrieval.md +8 -0
- package/releases/0.71.0/surfaces/edge-cf/tree/CLAUDE.md +29 -0
- package/releases/0.71.0/surfaces/frontend/tree/.claude/agents/architect.md +20 -0
- package/releases/0.71.0/surfaces/frontend/tree/.claude/agents/devops.md +28 -0
- package/releases/0.71.0/surfaces/frontend/tree/.claude/agents/implementer.md +25 -0
- package/releases/0.71.0/surfaces/frontend/tree/.claude/agents/qa.md +17 -0
- package/releases/0.71.0/surfaces/frontend/tree/.claude/agents/reviewer.md +56 -0
- package/releases/0.71.0/surfaces/frontend/tree/.claude/patterns.md +8 -0
- package/releases/0.71.0/surfaces/frontend/tree/.claude/retrieval.md +2 -0
- package/releases/0.71.0/surfaces/frontend/tree/.claude/router.md +14 -0
- package/releases/0.71.0/surfaces/frontend/tree/CLAUDE.md +5 -0
- package/releases/0.71.0/surfaces/integrations/tree/.claude/agents/architect.md +16 -0
- package/releases/0.71.0/surfaces/integrations/tree/.claude/agents/implementer.md +12 -0
- package/releases/0.71.0/surfaces/integrations/tree/.claude/agents/integration-tester.md +20 -0
- package/releases/0.71.0/surfaces/integrations/tree/.claude/agents/planner.md +2 -0
- package/releases/0.71.0/surfaces/integrations/tree/.claude/agents/reviewer.md +21 -0
- package/releases/0.71.0/surfaces/integrations/tree/.claude/agents/secops.md +2 -0
- package/releases/0.71.0/surfaces/integrations/tree/.claude/agents-overview.md +8 -0
- package/releases/0.71.0/surfaces/integrations/tree/.claude/graph.md +10 -0
- package/releases/0.71.0/surfaces/integrations/tree/.claude/patterns.md +38 -0
- package/releases/0.71.0/surfaces/integrations/tree/.claude/pipeline.md +16 -0
- package/releases/0.71.0/surfaces/integrations/tree/.claude/retrieval.md +16 -0
- package/releases/0.71.0/surfaces/integrations/tree/.claude/router.md +6 -0
- package/releases/0.71.0/surfaces/integrations/tree/CLAUDE.md +17 -0
- package/releases/0.71.0/surfaces/money/tree/.claude/agents/architect.md +12 -0
- package/releases/0.71.0/surfaces/money/tree/.claude/agents/dba.md +14 -0
- package/releases/0.71.0/surfaces/money/tree/.claude/agents/implementer.md +11 -0
- package/releases/0.71.0/surfaces/money/tree/.claude/agents/integration-tester.md +3 -0
- package/releases/0.71.0/surfaces/money/tree/.claude/agents/reviewer.md +23 -0
- package/releases/0.71.0/surfaces/money/tree/.claude/agents/secops.md +5 -0
- package/releases/0.71.0/surfaces/money/tree/.claude/agents/solidity-auditor.md +4 -0
- package/releases/0.71.0/surfaces/money/tree/.claude/agents/solidity-dev.md +4 -0
- package/releases/0.71.0/surfaces/money/tree/.claude/graph.md +2 -0
- package/releases/0.71.0/surfaces/money/tree/.claude/patterns.md +49 -0
- package/releases/0.71.0/surfaces/money/tree/.claude/pipeline.md +2 -0
- package/releases/0.71.0/surfaces/money/tree/.claude/retrieval.md +2 -0
- package/releases/0.71.0/surfaces/money/tree/CLAUDE.md +11 -0
- package/releases/0.71.0/surfaces/pii/tree/.claude/agents/dba.md +2 -0
- package/releases/0.71.0/surfaces/pii/tree/.claude/agents/devops.md +8 -0
- package/releases/0.71.0/surfaces/pii/tree/.claude/agents/reviewer.md +8 -0
- package/releases/0.71.0/surfaces/pii/tree/.claude/agents/secops.md +2 -0
- package/releases/0.71.0/surfaces/pii/tree/.claude/agents/solidity-auditor.md +5 -0
- package/releases/0.71.0/surfaces/pii/tree/CLAUDE.md +5 -0
- package/releases/0.71.0/surfaces/prisma/tree/.claude/agents/architect.md +2 -0
- package/releases/0.71.0/surfaces/prisma/tree/.claude/agents/dba.md +42 -0
- package/releases/0.71.0/surfaces/prisma/tree/.claude/agents/devops.md +11 -0
- package/releases/0.71.0/surfaces/prisma/tree/.claude/agents/implementer.md +2 -0
- package/releases/0.71.0/surfaces/prisma/tree/.claude/agents/integration-tester.md +2 -0
- package/releases/0.71.0/surfaces/prisma/tree/.claude/agents/reviewer.md +2 -0
- package/releases/0.71.0/surfaces/prisma/tree/.claude/patterns.md +15 -0
- package/releases/0.71.0/surfaces/prisma/tree/CLAUDE.md +5 -0
- package/src/commands/learn.mjs +44 -13
- package/src/commands/sizes.mjs +94 -24
- package/src/commands/stats.mjs +57 -1
- package/src/commands/upgrade.mjs +3 -3
- package/src/cost.mjs +174 -19
- package/src/dashboard.html +3 -1
- package/src/gate.mjs +10 -4
- package/src/langfuse.mjs +5 -2
- package/src/transcripts.mjs +45 -7
- package/src/wiring.mjs +33 -5
package/src/transcripts.mjs
CHANGED
|
@@ -860,7 +860,7 @@ async function attachAgentDetail(projectDir, dispatches) {
|
|
|
860
860
|
if (
|
|
861
861
|
run.agent_read_bytes === size &&
|
|
862
862
|
!('resumes' in run) &&
|
|
863
|
-
[...records, ...later].every((r) => settled(r) && 'round' in r && 'lessons_read' in r && 'tokens' in r && 'files_touched' in r && 'lines_written' in r && 'shell_writes' in r && 'effort' in r && 'turns' in r && 'prompt_chars' in r)
|
|
863
|
+
[...records, ...later].every((r) => settled(r) && 'round' in r && 'lessons_read' in r && 'tokens' in r && 'files_touched' in r && 'lines_written' in r && 'shell_writes' in r && 'effort' in r && 'turns' in r && 'prompt_chars' in r && 'cache_rewrites' in r && 'clipped' in r)
|
|
864
864
|
) {
|
|
865
865
|
continue;
|
|
866
866
|
}
|
|
@@ -899,6 +899,8 @@ async function attachAgentDetail(projectDir, dispatches) {
|
|
|
899
899
|
calls: new Set(),
|
|
900
900
|
/** How long the prompt that opened the round was, in characters; never the prompt. */
|
|
901
901
|
promptChars: null,
|
|
902
|
+
/** The tool results the cost watch clipped to a file, so they were never re-read whole. */
|
|
903
|
+
clipped: 0,
|
|
902
904
|
});
|
|
903
905
|
const rounds = [fresh()];
|
|
904
906
|
const roundOf = roundsOf();
|
|
@@ -942,6 +944,19 @@ async function attachAgentDetail(projectDir, dispatches) {
|
|
|
942
944
|
// A torn line loses one edit, not the run's.
|
|
943
945
|
}
|
|
944
946
|
}
|
|
947
|
+
if (line.includes(CLIP_MARK) && line.includes('"tool_result"')) {
|
|
948
|
+
try {
|
|
949
|
+
const row = JSON.parse(line);
|
|
950
|
+
const content = row?.type === 'user' ? row.message?.content : null;
|
|
951
|
+
for (const block of Array.isArray(content) ? content : []) {
|
|
952
|
+
const said = block?.type === 'tool_result' ? block.content : null;
|
|
953
|
+
const text = typeof said === 'string' ? said : Array.isArray(said) ? said.map((x) => x?.text ?? '').join('') : '';
|
|
954
|
+
if (text.includes(CLIP_MARK)) round.clipped += 1;
|
|
955
|
+
}
|
|
956
|
+
} catch {
|
|
957
|
+
// A torn line loses one count.
|
|
958
|
+
}
|
|
959
|
+
}
|
|
945
960
|
if (line.includes('"name":"Bash"')) {
|
|
946
961
|
try {
|
|
947
962
|
for (const block of JSON.parse(line)?.message?.content ?? []) {
|
|
@@ -1028,6 +1043,9 @@ async function attachAgentDetail(projectDir, dispatches) {
|
|
|
1028
1043
|
record.tool_calls = round.calls.size;
|
|
1029
1044
|
record.context_start = shape.start;
|
|
1030
1045
|
record.context_peak = shape.peak;
|
|
1046
|
+
record.cache_rewrites = shape.rewrites;
|
|
1047
|
+
record.cache_rewritten = shape.rewritten;
|
|
1048
|
+
record.clipped = round.clipped;
|
|
1031
1049
|
record.prompt_chars = round.promptChars;
|
|
1032
1050
|
record.usage_model = spent.model;
|
|
1033
1051
|
record.effort = spent.effort;
|
|
@@ -1078,20 +1096,40 @@ export function promptOf(row, round) {
|
|
|
1078
1096
|
return row?.type === 'user' && (round > 1 || !row.isMeta) && typeof content === 'string' ? content : null;
|
|
1079
1097
|
}
|
|
1080
1098
|
|
|
1099
|
+
/** The smallest context whose loss counts as a rewrite: below it, a turn writing most of it is the round beginning. */
|
|
1100
|
+
const REWRITE_FLOOR = 30_000;
|
|
1101
|
+
|
|
1081
1102
|
/**
|
|
1082
|
-
* How a round spent its context: how many turns it took,
|
|
1083
|
-
* when the round began and at its largest
|
|
1084
|
-
* begins where a long one ended — a run resumed for a fix — pays for
|
|
1103
|
+
* How a round spent its context: how many turns it took, how large the context each turn re-read was
|
|
1104
|
+
* when the round began and at its largest, and how often its cache had expired. Every turn is billed the
|
|
1105
|
+
* whole context again, so a round that begins where a long one ended — a run resumed for a fix — pays for
|
|
1106
|
+
* everything before it on each turn.
|
|
1107
|
+
*
|
|
1108
|
+
* A turn reads its context from the cache only while the cache is alive — five minutes after the turn
|
|
1109
|
+
* before, for a subagent — and past that writes all of it again, at twelve times a read's price. So a turn
|
|
1110
|
+
* that wrote more than half of a context of at least {@link REWRITE_FLOOR} tokens is counted a rewrite.
|
|
1085
1111
|
*
|
|
1086
1112
|
* @param {Map<string, {usage: object}>} usage - Message id → its final usage, in the order the round sent them.
|
|
1087
|
-
* @returns {{turns: number, start: number|null, peak: number|null}} Context sizes in tokens.
|
|
1113
|
+
* @returns {{turns: number, start: number|null, peak: number|null, rewrites: number, rewritten: number}} Context sizes in tokens.
|
|
1088
1114
|
*/
|
|
1089
1115
|
export function contextOf(usage) {
|
|
1090
1116
|
const n = (v) => (typeof v === 'number' ? v : 0);
|
|
1091
|
-
const
|
|
1092
|
-
|
|
1117
|
+
const turns = [...usage.values()].map(({ usage: u }) => ({ size: n(u.input_tokens) + n(u.cache_read_input_tokens) + n(u.cache_creation_input_tokens), written: n(u.cache_creation_input_tokens) }));
|
|
1118
|
+
const sizes = turns.map((t) => t.size);
|
|
1119
|
+
let rewrites = 0;
|
|
1120
|
+
let rewritten = 0;
|
|
1121
|
+
for (let i = 1; i < turns.length; i += 1) {
|
|
1122
|
+
if (sizes[i - 1] >= REWRITE_FLOOR && turns[i].written > sizes[i - 1] / 2) {
|
|
1123
|
+
rewrites += 1;
|
|
1124
|
+
rewritten += turns[i].written;
|
|
1125
|
+
}
|
|
1126
|
+
}
|
|
1127
|
+
return { turns: sizes.length, start: sizes[0] ?? null, peak: sizes.length > 0 ? Math.max(...sizes) : null, rewrites, rewritten };
|
|
1093
1128
|
}
|
|
1094
1129
|
|
|
1130
|
+
/** How the cost watch opens an output it clipped (`src/cost.mjs`), which is how a snapshot counts them. */
|
|
1131
|
+
export const CLIP_MARK = '[NINA clipped this output';
|
|
1132
|
+
|
|
1095
1133
|
/**
|
|
1096
1134
|
* What a run spent, from each of its messages' final usage: tokens by kind, and the model and effort
|
|
1097
1135
|
* level that most of its messages ran at. Metadata — counts, a model id and a level, never a message.
|
package/src/wiring.mjs
CHANGED
|
@@ -146,6 +146,23 @@ const HOOKS = [
|
|
|
146
146
|
/** Where a project's hooks can live: Claude Code reads both, so a hook kept in the local file counts. */
|
|
147
147
|
const SETTINGS_FILES = ['.claude/settings.json', '.claude/settings.local.json'];
|
|
148
148
|
|
|
149
|
+
/**
|
|
150
|
+
* Settings a project's `.claude/settings.json` carries beside its hooks, each shipped with the script whose
|
|
151
|
+
* concern it is. `why` is what `check` says when one is missing. A key the owner already wrote, in either
|
|
152
|
+
* settings file and with whatever value, is theirs: `wire` adds a missing one and never changes one.
|
|
153
|
+
*
|
|
154
|
+
* The skill listing is every installed skill's description, sized at a hundredth of the model's context
|
|
155
|
+
* window, and every stage whose tools include `Skill` re-reads it on every turn: 32k characters in two
|
|
156
|
+
* projects, a twentieth of what their stages re-read. The skills a stage must use are named in its spec,
|
|
157
|
+
* and every skill's name stays listed however small the budget, so the descriptions buy a stage nothing.
|
|
158
|
+
*/
|
|
159
|
+
const SETTINGS = [
|
|
160
|
+
{
|
|
161
|
+
key: 'skillListingBudgetFraction', value: 0.001, script: COST,
|
|
162
|
+
why: "every stage that may invoke a skill re-reads every installed skill's description on every turn, about 9k tokens",
|
|
163
|
+
},
|
|
164
|
+
];
|
|
165
|
+
|
|
149
166
|
/** The scripts some hook runs — `check` asks for these by hook, not by npm script. */
|
|
150
167
|
export const HOOK_SCRIPTS = new Set(HOOKS.map((h) => h.script));
|
|
151
168
|
|
|
@@ -252,11 +269,13 @@ function covered(hooks, h) {
|
|
|
252
269
|
*
|
|
253
270
|
* @param {string} target - The project directory.
|
|
254
271
|
* @param {(event: string) => boolean} [wanted] - Events whose malformed lists are worth a problem.
|
|
255
|
-
* @returns {Promise<{merged: Record<string, object[]>, problems: string[]}>} Each merged group says
|
|
272
|
+
* @returns {Promise<{merged: Record<string, object[]>, problems: string[], keys: Set<string>}>} Each merged group says
|
|
273
|
+
* `from` which file; `keys` holds every top-level key either file sets.
|
|
256
274
|
*/
|
|
257
275
|
async function projectHooks(target, wanted = () => false) {
|
|
258
276
|
const merged = {};
|
|
259
277
|
const problems = [];
|
|
278
|
+
const keys = new Set();
|
|
260
279
|
for (const rel of SETTINGS_FILES) {
|
|
261
280
|
const path = join(target, rel);
|
|
262
281
|
if (!existsSync(path)) continue;
|
|
@@ -267,6 +286,7 @@ async function projectHooks(target, wanted = () => false) {
|
|
|
267
286
|
problems.push(`${rel} is not valid JSON — ${error.message}`);
|
|
268
287
|
continue;
|
|
269
288
|
}
|
|
289
|
+
if (settings && typeof settings === 'object' && !Array.isArray(settings)) for (const key of Object.keys(settings)) keys.add(key);
|
|
270
290
|
const shape = settings?.hooks;
|
|
271
291
|
if (shape === undefined || shape === null) continue;
|
|
272
292
|
if (typeof shape !== 'object' || Array.isArray(shape)) {
|
|
@@ -278,7 +298,7 @@ async function projectHooks(target, wanted = () => false) {
|
|
|
278
298
|
else if (wanted(event)) problems.push(`${rel}'s hooks.${event} is not a list — no hook in it can run`);
|
|
279
299
|
}
|
|
280
300
|
}
|
|
281
|
-
return { merged, problems };
|
|
301
|
+
return { merged, problems, keys };
|
|
282
302
|
}
|
|
283
303
|
|
|
284
304
|
/** The command settings run for a hook, when they run one — the selftest runs it the same way. */
|
|
@@ -298,7 +318,8 @@ export function hookCommand(settings, event, script) {
|
|
|
298
318
|
* @returns {string}
|
|
299
319
|
*/
|
|
300
320
|
export function settingsFile(shipped = HOOK_SCRIPTS) {
|
|
301
|
-
|
|
321
|
+
const values = Object.fromEntries(SETTINGS.filter((x) => shipped.has(x.script)).map((x) => [x.key, x.value]));
|
|
322
|
+
return `${JSON.stringify({ ...values, hooks: settingsHooks(HOOKS.filter((h) => shipped.has(h.script))) }, null, 2)}\n`;
|
|
302
323
|
}
|
|
303
324
|
|
|
304
325
|
/** Hooks as settings JSON, grouped by event. */
|
|
@@ -369,8 +390,11 @@ export async function missingWiring(target, shipped) {
|
|
|
369
390
|
}
|
|
370
391
|
const wanted = HOOKS.filter((h) => shipped.has(h.script));
|
|
371
392
|
if (wanted.length === 0) return out;
|
|
372
|
-
const { merged, problems } = await projectHooks(target, (event) => wanted.some((h) => h.event === event));
|
|
393
|
+
const { merged, problems, keys } = await projectHooks(target, (event) => wanted.some((h) => h.event === event));
|
|
373
394
|
out.push(...problems);
|
|
395
|
+
for (const x of SETTINGS.filter((x) => shipped.has(x.script) && !keys.has(x.key))) {
|
|
396
|
+
out.push(`.claude/settings.json has no "${x.key}" — without it ${x.why}; \`nina wire --apply\` sets it to ${x.value}`);
|
|
397
|
+
}
|
|
374
398
|
for (const h of wanted) {
|
|
375
399
|
const running = (merged[h.event] ?? []).filter((g) => runs(g, h));
|
|
376
400
|
if (doubled(running)) {
|
|
@@ -468,7 +492,11 @@ export async function applyWiring(target, shipped, { settings: editSettings = tr
|
|
|
468
492
|
if (readable) {
|
|
469
493
|
const hooks = settings.hooks ?? {};
|
|
470
494
|
const added = [];
|
|
471
|
-
const { merged } = await projectHooks(target);
|
|
495
|
+
const { merged, keys } = await projectHooks(target);
|
|
496
|
+
for (const x of SETTINGS.filter((x) => shipped.has(x.script) && !keys.has(x.key))) {
|
|
497
|
+
settings[x.key] = x.value;
|
|
498
|
+
added.push(`"${x.key}": ${x.value}`);
|
|
499
|
+
}
|
|
472
500
|
for (const h of HOOKS.filter((h) => shipped.has(h.script))) {
|
|
473
501
|
const running = (merged[h.event] ?? []).filter((g) => runs(g, h));
|
|
474
502
|
if (covered(merged, h) && !doubled(running)) continue;
|