@xhulz/nina 0.46.0 → 0.48.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/README.md +1 -1
- package/bin/nina.mjs +8 -2
- package/package.json +1 -1
- package/releases/0.47.0/core/GAPS.md +125 -0
- package/releases/0.47.0/core/answered.json +44 -0
- package/releases/0.47.0/core/defaults/tree/.claude/agents/architect.md +1 -0
- package/releases/0.47.0/core/defaults/tree/.claude/agents/dba.md +3 -0
- package/releases/0.47.0/core/defaults/tree/.claude/agents/devops.md +1 -0
- package/releases/0.47.0/core/defaults/tree/.claude/agents/implementer.md +1 -0
- package/releases/0.47.0/core/defaults/tree/.claude/agents/integration-tester.md +3 -0
- package/releases/0.47.0/core/defaults/tree/.claude/agents/qa.md +7 -0
- package/releases/0.47.0/core/defaults/tree/.claude/agents/reviewer.md +3 -0
- package/releases/0.47.0/core/defaults/tree/.claude/agents/secops.md +3 -0
- package/releases/0.47.0/core/defaults/tree/.claude/agents/solidity-auditor.md +3 -0
- package/releases/0.47.0/core/defaults/tree/.claude/agents/solidity-dev.md +3 -0
- package/releases/0.47.0/core/tree/.claude/agents/architect.md +127 -0
- package/releases/0.47.0/core/tree/.claude/agents/dba.md +117 -0
- package/releases/0.47.0/core/tree/.claude/agents/devops.md +118 -0
- package/releases/0.47.0/core/tree/.claude/agents/implementer.md +160 -0
- package/releases/0.47.0/core/tree/.claude/agents/integration-tester.md +168 -0
- package/releases/0.47.0/core/tree/.claude/agents/planner.md +132 -0
- package/releases/0.47.0/core/tree/.claude/agents/qa.md +150 -0
- package/releases/0.47.0/core/tree/.claude/agents/reviewer.md +183 -0
- package/releases/0.47.0/core/tree/.claude/agents/secops.md +120 -0
- package/releases/0.47.0/core/tree/.claude/agents/solidity-auditor.md +126 -0
- package/releases/0.47.0/core/tree/.claude/agents/solidity-dev.md +123 -0
- package/releases/0.47.0/core/tree/.claude/agents-overview.md +64 -0
- package/releases/0.47.0/core/tree/.claude/frontend.md +10 -0
- package/releases/0.47.0/core/tree/.claude/graph.md +75 -0
- package/releases/0.47.0/core/tree/.claude/patterns.md +251 -0
- package/releases/0.47.0/core/tree/.claude/pills/README.md +147 -0
- package/releases/0.47.0/core/tree/.claude/pipeline.md +101 -0
- package/releases/0.47.0/core/tree/.claude/retrieval.md +103 -0
- package/releases/0.47.0/core/tree/.claude/router.md +198 -0
- package/releases/0.47.0/core/tree/.claude/templates/integration.md +45 -0
- package/releases/0.47.0/core/tree/CLAUDE.md +164 -0
- package/releases/0.47.0/core/tree/scripts/cost-watch.mjs +25 -0
- package/releases/0.47.0/core/tree/scripts/edit-guard.mjs +24 -0
- package/releases/0.47.0/core/tree/scripts/harness-check.mjs +71 -0
- package/releases/0.47.0/core/tree/scripts/loop-gate.mjs +19 -0
- package/releases/0.47.0/core/vocabulary.json +13 -0
- package/releases/0.47.0/surfaces/blockchain/tree/.claude/agents/architect.md +5 -0
- package/releases/0.47.0/surfaces/blockchain/tree/.claude/agents/devops.md +5 -0
- package/releases/0.47.0/surfaces/blockchain/tree/.claude/agents/reviewer.md +5 -0
- package/releases/0.47.0/surfaces/blockchain/tree/.claude/agents/solidity-auditor.md +18 -0
- package/releases/0.47.0/surfaces/blockchain/tree/.claude/agents/solidity-dev.md +16 -0
- package/releases/0.47.0/surfaces/blockchain/tree/.claude/agents-overview.md +6 -0
- package/releases/0.47.0/surfaces/blockchain/tree/.claude/graph.md +11 -0
- package/releases/0.47.0/surfaces/blockchain/tree/.claude/router.md +6 -0
- package/releases/0.47.0/surfaces/blockchain/tree/CLAUDE.md +12 -0
- package/releases/0.47.0/surfaces/d1/tree/.claude/agents/dba.md +13 -0
- package/releases/0.47.0/surfaces/d1/tree/.claude/agents/devops.md +2 -0
- package/releases/0.47.0/surfaces/d1/tree/.claude/agents/implementer.md +2 -0
- package/releases/0.47.0/surfaces/d1/tree/.claude/patterns.md +8 -0
- package/releases/0.47.0/surfaces/d1/tree/CLAUDE.md +2 -0
- package/releases/0.47.0/surfaces/db/tree/.claude/agents/architect.md +5 -0
- package/releases/0.47.0/surfaces/db/tree/.claude/agents/dba.md +54 -0
- package/releases/0.47.0/surfaces/db/tree/.claude/agents/devops.md +5 -0
- package/releases/0.47.0/surfaces/db/tree/.claude/agents/implementer.md +2 -0
- package/releases/0.47.0/surfaces/db/tree/.claude/agents/integration-tester.md +10 -0
- package/releases/0.47.0/surfaces/db/tree/.claude/agents/planner.md +2 -0
- package/releases/0.47.0/surfaces/db/tree/.claude/agents/reviewer.md +22 -0
- package/releases/0.47.0/surfaces/db/tree/.claude/agents/secops.md +2 -0
- package/releases/0.47.0/surfaces/db/tree/.claude/agents-overview.md +5 -0
- package/releases/0.47.0/surfaces/db/tree/.claude/graph.md +8 -0
- package/releases/0.47.0/surfaces/db/tree/.claude/patterns.md +22 -0
- package/releases/0.47.0/surfaces/db/tree/.claude/pipeline.md +13 -0
- package/releases/0.47.0/surfaces/db/tree/.claude/retrieval.md +5 -0
- package/releases/0.47.0/surfaces/db/tree/.claude/router.md +4 -0
- package/releases/0.47.0/surfaces/db/tree/CLAUDE.md +17 -0
- package/releases/0.47.0/surfaces/drizzle/tree/.claude/agents/dba.md +9 -0
- package/releases/0.47.0/surfaces/drizzle/tree/.claude/agents/devops.md +5 -0
- package/releases/0.47.0/surfaces/drizzle/tree/.claude/agents/implementer.md +2 -0
- package/releases/0.47.0/surfaces/drizzle/tree/.claude/patterns.md +7 -0
- package/releases/0.47.0/surfaces/edge-cf/tree/.claude/agents/architect.md +14 -0
- package/releases/0.47.0/surfaces/edge-cf/tree/.claude/agents/dba.md +2 -0
- package/releases/0.47.0/surfaces/edge-cf/tree/.claude/agents/devops.md +29 -0
- package/releases/0.47.0/surfaces/edge-cf/tree/.claude/agents/implementer.md +14 -0
- package/releases/0.47.0/surfaces/edge-cf/tree/.claude/agents/integration-tester.md +11 -0
- package/releases/0.47.0/surfaces/edge-cf/tree/.claude/agents/qa.md +3 -0
- package/releases/0.47.0/surfaces/edge-cf/tree/.claude/agents/reviewer.md +8 -0
- package/releases/0.47.0/surfaces/edge-cf/tree/.claude/agents/secops.md +8 -0
- package/releases/0.47.0/surfaces/edge-cf/tree/.claude/patterns.md +17 -0
- package/releases/0.47.0/surfaces/edge-cf/tree/.claude/retrieval.md +8 -0
- package/releases/0.47.0/surfaces/edge-cf/tree/CLAUDE.md +27 -0
- package/releases/0.47.0/surfaces/frontend/tree/.claude/agents/architect.md +20 -0
- package/releases/0.47.0/surfaces/frontend/tree/.claude/agents/devops.md +28 -0
- package/releases/0.47.0/surfaces/frontend/tree/.claude/agents/implementer.md +25 -0
- package/releases/0.47.0/surfaces/frontend/tree/.claude/agents/qa.md +17 -0
- package/releases/0.47.0/surfaces/frontend/tree/.claude/agents/reviewer.md +56 -0
- package/releases/0.47.0/surfaces/frontend/tree/.claude/patterns.md +8 -0
- package/releases/0.47.0/surfaces/frontend/tree/.claude/retrieval.md +2 -0
- package/releases/0.47.0/surfaces/frontend/tree/.claude/router.md +14 -0
- package/releases/0.47.0/surfaces/frontend/tree/CLAUDE.md +5 -0
- package/releases/0.47.0/surfaces/integrations/tree/.claude/agents/architect.md +16 -0
- package/releases/0.47.0/surfaces/integrations/tree/.claude/agents/implementer.md +12 -0
- package/releases/0.47.0/surfaces/integrations/tree/.claude/agents/integration-tester.md +20 -0
- package/releases/0.47.0/surfaces/integrations/tree/.claude/agents/planner.md +2 -0
- package/releases/0.47.0/surfaces/integrations/tree/.claude/agents/reviewer.md +21 -0
- package/releases/0.47.0/surfaces/integrations/tree/.claude/agents/secops.md +2 -0
- package/releases/0.47.0/surfaces/integrations/tree/.claude/agents-overview.md +8 -0
- package/releases/0.47.0/surfaces/integrations/tree/.claude/graph.md +10 -0
- package/releases/0.47.0/surfaces/integrations/tree/.claude/patterns.md +38 -0
- package/releases/0.47.0/surfaces/integrations/tree/.claude/pipeline.md +16 -0
- package/releases/0.47.0/surfaces/integrations/tree/.claude/retrieval.md +16 -0
- package/releases/0.47.0/surfaces/integrations/tree/.claude/router.md +6 -0
- package/releases/0.47.0/surfaces/integrations/tree/CLAUDE.md +17 -0
- package/releases/0.47.0/surfaces/money/tree/.claude/agents/architect.md +12 -0
- package/releases/0.47.0/surfaces/money/tree/.claude/agents/dba.md +14 -0
- package/releases/0.47.0/surfaces/money/tree/.claude/agents/implementer.md +11 -0
- package/releases/0.47.0/surfaces/money/tree/.claude/agents/integration-tester.md +3 -0
- package/releases/0.47.0/surfaces/money/tree/.claude/agents/reviewer.md +23 -0
- package/releases/0.47.0/surfaces/money/tree/.claude/agents/secops.md +5 -0
- package/releases/0.47.0/surfaces/money/tree/.claude/agents/solidity-auditor.md +4 -0
- package/releases/0.47.0/surfaces/money/tree/.claude/agents/solidity-dev.md +4 -0
- package/releases/0.47.0/surfaces/money/tree/.claude/graph.md +2 -0
- package/releases/0.47.0/surfaces/money/tree/.claude/patterns.md +49 -0
- package/releases/0.47.0/surfaces/money/tree/.claude/pipeline.md +2 -0
- package/releases/0.47.0/surfaces/money/tree/.claude/retrieval.md +2 -0
- package/releases/0.47.0/surfaces/money/tree/CLAUDE.md +11 -0
- package/releases/0.47.0/surfaces/pii/tree/.claude/agents/dba.md +2 -0
- package/releases/0.47.0/surfaces/pii/tree/.claude/agents/devops.md +8 -0
- package/releases/0.47.0/surfaces/pii/tree/.claude/agents/reviewer.md +8 -0
- package/releases/0.47.0/surfaces/pii/tree/.claude/agents/secops.md +2 -0
- package/releases/0.47.0/surfaces/pii/tree/.claude/agents/solidity-auditor.md +5 -0
- package/releases/0.47.0/surfaces/pii/tree/CLAUDE.md +5 -0
- package/releases/0.47.0/surfaces/prisma/tree/.claude/agents/architect.md +2 -0
- package/releases/0.47.0/surfaces/prisma/tree/.claude/agents/dba.md +42 -0
- package/releases/0.47.0/surfaces/prisma/tree/.claude/agents/devops.md +11 -0
- package/releases/0.47.0/surfaces/prisma/tree/.claude/agents/implementer.md +2 -0
- package/releases/0.47.0/surfaces/prisma/tree/.claude/agents/integration-tester.md +2 -0
- package/releases/0.47.0/surfaces/prisma/tree/.claude/agents/reviewer.md +2 -0
- package/releases/0.47.0/surfaces/prisma/tree/.claude/patterns.md +15 -0
- package/releases/0.47.0/surfaces/prisma/tree/CLAUDE.md +5 -0
- package/releases/0.48.0/core/GAPS.md +125 -0
- package/releases/0.48.0/core/answered.json +44 -0
- package/releases/0.48.0/core/defaults/tree/.claude/agents/architect.md +1 -0
- package/releases/0.48.0/core/defaults/tree/.claude/agents/dba.md +3 -0
- package/releases/0.48.0/core/defaults/tree/.claude/agents/devops.md +1 -0
- package/releases/0.48.0/core/defaults/tree/.claude/agents/implementer.md +1 -0
- package/releases/0.48.0/core/defaults/tree/.claude/agents/integration-tester.md +3 -0
- package/releases/0.48.0/core/defaults/tree/.claude/agents/qa.md +7 -0
- package/releases/0.48.0/core/defaults/tree/.claude/agents/reviewer.md +3 -0
- package/releases/0.48.0/core/defaults/tree/.claude/agents/secops.md +3 -0
- package/releases/0.48.0/core/defaults/tree/.claude/agents/solidity-auditor.md +3 -0
- package/releases/0.48.0/core/defaults/tree/.claude/agents/solidity-dev.md +3 -0
- package/releases/0.48.0/core/tree/.claude/agents/architect.md +127 -0
- package/releases/0.48.0/core/tree/.claude/agents/dba.md +117 -0
- package/releases/0.48.0/core/tree/.claude/agents/devops.md +118 -0
- package/releases/0.48.0/core/tree/.claude/agents/implementer.md +160 -0
- package/releases/0.48.0/core/tree/.claude/agents/integration-tester.md +168 -0
- package/releases/0.48.0/core/tree/.claude/agents/planner.md +132 -0
- package/releases/0.48.0/core/tree/.claude/agents/qa.md +150 -0
- package/releases/0.48.0/core/tree/.claude/agents/reviewer.md +183 -0
- package/releases/0.48.0/core/tree/.claude/agents/secops.md +120 -0
- package/releases/0.48.0/core/tree/.claude/agents/solidity-auditor.md +126 -0
- package/releases/0.48.0/core/tree/.claude/agents/solidity-dev.md +123 -0
- package/releases/0.48.0/core/tree/.claude/agents-overview.md +64 -0
- package/releases/0.48.0/core/tree/.claude/frontend.md +10 -0
- package/releases/0.48.0/core/tree/.claude/graph.md +75 -0
- package/releases/0.48.0/core/tree/.claude/patterns.md +251 -0
- package/releases/0.48.0/core/tree/.claude/pills/README.md +147 -0
- package/releases/0.48.0/core/tree/.claude/pipeline.md +101 -0
- package/releases/0.48.0/core/tree/.claude/retrieval.md +103 -0
- package/releases/0.48.0/core/tree/.claude/router.md +202 -0
- package/releases/0.48.0/core/tree/.claude/templates/integration.md +45 -0
- package/releases/0.48.0/core/tree/CLAUDE.md +164 -0
- package/releases/0.48.0/core/tree/scripts/cost-watch.mjs +25 -0
- package/releases/0.48.0/core/tree/scripts/edit-guard.mjs +24 -0
- package/releases/0.48.0/core/tree/scripts/harness-check.mjs +71 -0
- package/releases/0.48.0/core/tree/scripts/loop-gate.mjs +19 -0
- package/releases/0.48.0/core/vocabulary.json +13 -0
- package/releases/0.48.0/surfaces/blockchain/tree/.claude/agents/architect.md +5 -0
- package/releases/0.48.0/surfaces/blockchain/tree/.claude/agents/devops.md +5 -0
- package/releases/0.48.0/surfaces/blockchain/tree/.claude/agents/reviewer.md +5 -0
- package/releases/0.48.0/surfaces/blockchain/tree/.claude/agents/solidity-auditor.md +18 -0
- package/releases/0.48.0/surfaces/blockchain/tree/.claude/agents/solidity-dev.md +16 -0
- package/releases/0.48.0/surfaces/blockchain/tree/.claude/agents-overview.md +6 -0
- package/releases/0.48.0/surfaces/blockchain/tree/.claude/graph.md +11 -0
- package/releases/0.48.0/surfaces/blockchain/tree/.claude/router.md +6 -0
- package/releases/0.48.0/surfaces/blockchain/tree/CLAUDE.md +12 -0
- package/releases/0.48.0/surfaces/d1/tree/.claude/agents/dba.md +13 -0
- package/releases/0.48.0/surfaces/d1/tree/.claude/agents/devops.md +2 -0
- package/releases/0.48.0/surfaces/d1/tree/.claude/agents/implementer.md +2 -0
- package/releases/0.48.0/surfaces/d1/tree/.claude/patterns.md +8 -0
- package/releases/0.48.0/surfaces/d1/tree/CLAUDE.md +2 -0
- package/releases/0.48.0/surfaces/db/tree/.claude/agents/architect.md +5 -0
- package/releases/0.48.0/surfaces/db/tree/.claude/agents/dba.md +54 -0
- package/releases/0.48.0/surfaces/db/tree/.claude/agents/devops.md +5 -0
- package/releases/0.48.0/surfaces/db/tree/.claude/agents/implementer.md +2 -0
- package/releases/0.48.0/surfaces/db/tree/.claude/agents/integration-tester.md +10 -0
- package/releases/0.48.0/surfaces/db/tree/.claude/agents/planner.md +2 -0
- package/releases/0.48.0/surfaces/db/tree/.claude/agents/reviewer.md +22 -0
- package/releases/0.48.0/surfaces/db/tree/.claude/agents/secops.md +2 -0
- package/releases/0.48.0/surfaces/db/tree/.claude/agents-overview.md +5 -0
- package/releases/0.48.0/surfaces/db/tree/.claude/graph.md +8 -0
- package/releases/0.48.0/surfaces/db/tree/.claude/patterns.md +22 -0
- package/releases/0.48.0/surfaces/db/tree/.claude/pipeline.md +13 -0
- package/releases/0.48.0/surfaces/db/tree/.claude/retrieval.md +5 -0
- package/releases/0.48.0/surfaces/db/tree/.claude/router.md +4 -0
- package/releases/0.48.0/surfaces/db/tree/CLAUDE.md +17 -0
- package/releases/0.48.0/surfaces/drizzle/tree/.claude/agents/dba.md +9 -0
- package/releases/0.48.0/surfaces/drizzle/tree/.claude/agents/devops.md +5 -0
- package/releases/0.48.0/surfaces/drizzle/tree/.claude/agents/implementer.md +2 -0
- package/releases/0.48.0/surfaces/drizzle/tree/.claude/patterns.md +7 -0
- package/releases/0.48.0/surfaces/edge-cf/tree/.claude/agents/architect.md +14 -0
- package/releases/0.48.0/surfaces/edge-cf/tree/.claude/agents/dba.md +2 -0
- package/releases/0.48.0/surfaces/edge-cf/tree/.claude/agents/devops.md +29 -0
- package/releases/0.48.0/surfaces/edge-cf/tree/.claude/agents/implementer.md +14 -0
- package/releases/0.48.0/surfaces/edge-cf/tree/.claude/agents/integration-tester.md +11 -0
- package/releases/0.48.0/surfaces/edge-cf/tree/.claude/agents/qa.md +3 -0
- package/releases/0.48.0/surfaces/edge-cf/tree/.claude/agents/reviewer.md +8 -0
- package/releases/0.48.0/surfaces/edge-cf/tree/.claude/agents/secops.md +8 -0
- package/releases/0.48.0/surfaces/edge-cf/tree/.claude/patterns.md +17 -0
- package/releases/0.48.0/surfaces/edge-cf/tree/.claude/retrieval.md +8 -0
- package/releases/0.48.0/surfaces/edge-cf/tree/CLAUDE.md +27 -0
- package/releases/0.48.0/surfaces/frontend/tree/.claude/agents/architect.md +20 -0
- package/releases/0.48.0/surfaces/frontend/tree/.claude/agents/devops.md +28 -0
- package/releases/0.48.0/surfaces/frontend/tree/.claude/agents/implementer.md +25 -0
- package/releases/0.48.0/surfaces/frontend/tree/.claude/agents/qa.md +17 -0
- package/releases/0.48.0/surfaces/frontend/tree/.claude/agents/reviewer.md +56 -0
- package/releases/0.48.0/surfaces/frontend/tree/.claude/patterns.md +8 -0
- package/releases/0.48.0/surfaces/frontend/tree/.claude/retrieval.md +2 -0
- package/releases/0.48.0/surfaces/frontend/tree/.claude/router.md +14 -0
- package/releases/0.48.0/surfaces/frontend/tree/CLAUDE.md +5 -0
- package/releases/0.48.0/surfaces/integrations/tree/.claude/agents/architect.md +16 -0
- package/releases/0.48.0/surfaces/integrations/tree/.claude/agents/implementer.md +12 -0
- package/releases/0.48.0/surfaces/integrations/tree/.claude/agents/integration-tester.md +20 -0
- package/releases/0.48.0/surfaces/integrations/tree/.claude/agents/planner.md +2 -0
- package/releases/0.48.0/surfaces/integrations/tree/.claude/agents/reviewer.md +21 -0
- package/releases/0.48.0/surfaces/integrations/tree/.claude/agents/secops.md +2 -0
- package/releases/0.48.0/surfaces/integrations/tree/.claude/agents-overview.md +8 -0
- package/releases/0.48.0/surfaces/integrations/tree/.claude/graph.md +10 -0
- package/releases/0.48.0/surfaces/integrations/tree/.claude/patterns.md +38 -0
- package/releases/0.48.0/surfaces/integrations/tree/.claude/pipeline.md +16 -0
- package/releases/0.48.0/surfaces/integrations/tree/.claude/retrieval.md +16 -0
- package/releases/0.48.0/surfaces/integrations/tree/.claude/router.md +6 -0
- package/releases/0.48.0/surfaces/integrations/tree/CLAUDE.md +17 -0
- package/releases/0.48.0/surfaces/money/tree/.claude/agents/architect.md +12 -0
- package/releases/0.48.0/surfaces/money/tree/.claude/agents/dba.md +14 -0
- package/releases/0.48.0/surfaces/money/tree/.claude/agents/implementer.md +11 -0
- package/releases/0.48.0/surfaces/money/tree/.claude/agents/integration-tester.md +3 -0
- package/releases/0.48.0/surfaces/money/tree/.claude/agents/reviewer.md +23 -0
- package/releases/0.48.0/surfaces/money/tree/.claude/agents/secops.md +5 -0
- package/releases/0.48.0/surfaces/money/tree/.claude/agents/solidity-auditor.md +4 -0
- package/releases/0.48.0/surfaces/money/tree/.claude/agents/solidity-dev.md +4 -0
- package/releases/0.48.0/surfaces/money/tree/.claude/graph.md +2 -0
- package/releases/0.48.0/surfaces/money/tree/.claude/patterns.md +49 -0
- package/releases/0.48.0/surfaces/money/tree/.claude/pipeline.md +2 -0
- package/releases/0.48.0/surfaces/money/tree/.claude/retrieval.md +2 -0
- package/releases/0.48.0/surfaces/money/tree/CLAUDE.md +11 -0
- package/releases/0.48.0/surfaces/pii/tree/.claude/agents/dba.md +2 -0
- package/releases/0.48.0/surfaces/pii/tree/.claude/agents/devops.md +8 -0
- package/releases/0.48.0/surfaces/pii/tree/.claude/agents/reviewer.md +8 -0
- package/releases/0.48.0/surfaces/pii/tree/.claude/agents/secops.md +2 -0
- package/releases/0.48.0/surfaces/pii/tree/.claude/agents/solidity-auditor.md +5 -0
- package/releases/0.48.0/surfaces/pii/tree/CLAUDE.md +5 -0
- package/releases/0.48.0/surfaces/prisma/tree/.claude/agents/architect.md +2 -0
- package/releases/0.48.0/surfaces/prisma/tree/.claude/agents/dba.md +42 -0
- package/releases/0.48.0/surfaces/prisma/tree/.claude/agents/devops.md +11 -0
- package/releases/0.48.0/surfaces/prisma/tree/.claude/agents/implementer.md +2 -0
- package/releases/0.48.0/surfaces/prisma/tree/.claude/agents/integration-tester.md +2 -0
- package/releases/0.48.0/surfaces/prisma/tree/.claude/agents/reviewer.md +2 -0
- package/releases/0.48.0/surfaces/prisma/tree/.claude/patterns.md +15 -0
- package/releases/0.48.0/surfaces/prisma/tree/CLAUDE.md +5 -0
- package/src/commands/check.mjs +20 -4
- package/src/commands/compose.mjs +3 -3
- package/src/commands/gate.mjs +53 -2
- package/src/commands/init.mjs +14 -5
- package/src/commands/upgrade.mjs +2 -2
- package/src/gate.mjs +58 -19
- package/src/surfaces.mjs +19 -3
package/src/commands/init.mjs
CHANGED
|
@@ -21,7 +21,7 @@ import { join, resolve } from 'node:path';
|
|
|
21
21
|
import { REQUIRES, SLOT, byVersion, closedGate, composedPaths, composeProject, defaultedSlots, layerRootFor, projectOwned, walk } from './compose.mjs';
|
|
22
22
|
import { owedDocuments } from './check.mjs';
|
|
23
23
|
import { PLACEHOLDER, defaultVocabulary } from '../vocabulary.mjs';
|
|
24
|
-
import { DETECTABLE,
|
|
24
|
+
import { DETECTABLE, missingNeeds } from '../surfaces.mjs';
|
|
25
25
|
import { bold, dim, green, pink } from '../look.mjs';
|
|
26
26
|
|
|
27
27
|
/**
|
|
@@ -35,11 +35,13 @@ const QUESTIONS = {
|
|
|
35
35
|
'external-api': 'Does it depend on anything whose behavior it does not define?',
|
|
36
36
|
db: 'Does it own persistent data of its own?',
|
|
37
37
|
prisma: 'Does it reach that data through Prisma?',
|
|
38
|
+
drizzle: 'Does it reach that data through Drizzle?',
|
|
38
39
|
money: 'Does it conserve and distribute an amount — money in equals money out plus retained?',
|
|
39
40
|
pii: 'Does it hold data about people that would harm someone specific if it leaked?',
|
|
40
41
|
integrations: 'Does it depend on anything whose behavior it does not define?',
|
|
41
42
|
frontend: 'Does it render a screen a person looks at?',
|
|
42
43
|
'edge-cf': 'Does it run on Cloudflare Workers or Pages?',
|
|
44
|
+
d1: 'Does it keep that data in Cloudflare D1?',
|
|
43
45
|
// Not "does it use blockchain" — that is a technology, and a technology is not a reason to
|
|
44
46
|
// gate anything. What this surface costs is immutability: code that ships cannot be edited.
|
|
45
47
|
blockchain: 'Does it deploy code that cannot be changed once it is live?',
|
|
@@ -59,7 +61,7 @@ function questionFor(surface) {
|
|
|
59
61
|
* The order the interview asks in: the surfaces most projects have first, the rare ones last. Asked
|
|
60
62
|
* alphabetically, the first question a web app met was whether it deploys immutable code.
|
|
61
63
|
*/
|
|
62
|
-
const ASK_ORDER = ['db', 'prisma', 'frontend', 'integrations', 'pii', 'money', 'edge-cf', 'blockchain'];
|
|
64
|
+
const ASK_ORDER = ['db', 'prisma', 'drizzle', 'frontend', 'integrations', 'pii', 'money', 'edge-cf', 'd1', 'blockchain'];
|
|
63
65
|
|
|
64
66
|
/**
|
|
65
67
|
* The surfaces a core offers, in the order the interview asks them; one it does not know goes last.
|
|
@@ -216,14 +218,21 @@ async function interview(available, matched, impacts) {
|
|
|
216
218
|
const scope = lines.join(' ');
|
|
217
219
|
|
|
218
220
|
const order = available;
|
|
219
|
-
console.log(`\n ${strong('Surfaces')} — ${order.length} yes-or-no questions, one per surface.`);
|
|
221
|
+
console.log(`\n ${strong('Surfaces')} — up to ${order.length} yes-or-no questions, one per surface; a stack comes only after a yes to what it needs.`);
|
|
220
222
|
console.log(' A surface is a part of the harness only some projects need: its rules, its checks, sometimes a');
|
|
221
223
|
console.log(' whole role. Answer for what the project does today; one can be added later in .nina/profile.json.\n');
|
|
222
224
|
const surfaces = [];
|
|
225
|
+
let asked = 0;
|
|
223
226
|
for (const [n, s] of order.entries()) {
|
|
224
227
|
// A stack is asked about only where its concern was answered yes: asked whether data it does not
|
|
225
228
|
// own goes through Prisma, a project has nothing true to answer.
|
|
226
|
-
if (
|
|
229
|
+
if (missingNeeds(s, surfaces).length > 0) continue;
|
|
230
|
+
// Counted by what is asked, not by place in the list: numbered by place, a no to the database read
|
|
231
|
+
// 1/10 then 4/10, and the header promised ten questions to someone asked seven. The total is what is
|
|
232
|
+
// asked so far plus what can still be, so a no shrinks it; the last question is n/n while the order
|
|
233
|
+
// ends with a surface that needs nothing, as it does.
|
|
234
|
+
asked += 1;
|
|
235
|
+
const total = asked + order.slice(n + 1).filter((t) => missingNeeds(t, [...surfaces, ...order.slice(n)]).length === 0).length;
|
|
227
236
|
const i = impacts[s];
|
|
228
237
|
const reason = matched.find((d) => d.surface === s)?.why;
|
|
229
238
|
// What a yes brings, in what a person would recognise: roles, rules, agents. The count of
|
|
@@ -233,7 +242,7 @@ async function interview(available, matched, impacts) {
|
|
|
233
242
|
...(i.rules ? [`${i.rules} hard rule${i.rules > 1 ? 's' : ''}`] : []),
|
|
234
243
|
...(i.agents.length ? [`changes to ${i.agents.length} agent${i.agents.length > 1 ? 's' : ''}`] : []),
|
|
235
244
|
];
|
|
236
|
-
console.log(` ${faint(`${
|
|
245
|
+
console.log(` ${faint(`${asked}/${total}`)} ${strong(s)}`);
|
|
237
246
|
console.log(` ${questionFor(s)}`);
|
|
238
247
|
console.log(faint(` if yes: ${brings.length ? brings.join(' · ') : `guidance in ${i.fragments} places`}`));
|
|
239
248
|
if (reason) console.log(found(` already here: ${reason}`));
|
package/src/commands/upgrade.mjs
CHANGED
|
@@ -15,7 +15,7 @@ import { describeMove, HARNESS, interruptedMove, movedFrom, moveJournal, readPro
|
|
|
15
15
|
import { existsSync, lstatSync, mkdirSync, readFileSync, renameSync, rmSync, writeFileSync } from 'node:fs';
|
|
16
16
|
import { dirname, join, resolve } from 'node:path';
|
|
17
17
|
import { REMOVED, composeProject, composedPaths, defaultedSlots, layerRootFor, walk } from './compose.mjs';
|
|
18
|
-
import {
|
|
18
|
+
import { detected, missingNeeds } from '../surfaces.mjs';
|
|
19
19
|
import { filledSlots, projectSlots, referencedVocabulary } from './check.mjs';
|
|
20
20
|
import { EXPECT_ENV } from '../expected.mjs';
|
|
21
21
|
import { closeAnswered } from './learn.mjs';
|
|
@@ -297,7 +297,7 @@ export async function upgrade(argv, ctx) {
|
|
|
297
297
|
// them in silence: the rules that were in its specs yesterday are not there after the move.
|
|
298
298
|
const offeredBefore = (await surfacesIn(from.dir));
|
|
299
299
|
const offered = detected(await walk(target)).filter(
|
|
300
|
-
(d) => available.includes(d.surface) && !offeredBefore.includes(d.surface) && !surfaces.includes(d.surface) && (
|
|
300
|
+
(d) => available.includes(d.surface) && !offeredBefore.includes(d.surface) && !surfaces.includes(d.surface) && missingNeeds(d.surface, kept).length === 0,
|
|
301
301
|
);
|
|
302
302
|
|
|
303
303
|
const [vocabBefore, vocabAfter] = [
|
package/src/gate.mjs
CHANGED
|
@@ -280,11 +280,13 @@ function append(path, entry) {
|
|
|
280
280
|
* @param {object[]} entries - The ledger, oldest first.
|
|
281
281
|
* @param {ReturnType<typeof loopEdges>} loops - The capped loop-back edges.
|
|
282
282
|
* @param {Map<string, Set<string>>} [forward] - Stage → the sources that hand passing work on to it.
|
|
283
|
-
* @returns {{effect: (to: string) => {rounds: object[]}, rounds: object[]}}
|
|
283
|
+
* @returns {{effect: (to: string) => {rounds: object[]}, rounds: object[], open: object[], waiting: object[]}}
|
|
284
284
|
* A round is `{source, target, token, round, max, edgeRound, ceiling, agents}`, plus `issue` (the id
|
|
285
285
|
* that decides it) and `issues` (every id with its count) when it was counted by issue.
|
|
286
286
|
* `effect` says what a dispatch to a stage would make now, without making it; `rounds` is every round
|
|
287
|
-
* the recorded dispatches made
|
|
287
|
+
* the recorded dispatches made; `open` each loop still counted, with whether a pass already closes it
|
|
288
|
+
* (`closing`), the stages a dispatch to which would (`targets`) and the stages whose pass would (`onward`);
|
|
289
|
+
* `waiting` each loop-back no fix has acted on yet.
|
|
288
290
|
*/
|
|
289
291
|
export function replay(entries, loops, forward = new Map()) {
|
|
290
292
|
// When each dispatch went out. A foreground dispatch's `dispatch` entry is written after the agent
|
|
@@ -329,15 +331,23 @@ export function replay(entries, loops, forward = new Map()) {
|
|
|
329
331
|
for (const map of [streak, grace]) for (const key of [...map.keys()]) if (key.startsWith(`${source}|`)) map.delete(key);
|
|
330
332
|
};
|
|
331
333
|
|
|
334
|
+
/**
|
|
335
|
+
* A source's waiting verdicts, settled: the rejections no later review of a fix cancelled, and whether a pass
|
|
336
|
+
* closes its loops — one that began after the latest fix, with no rejection running beside it.
|
|
337
|
+
*/
|
|
338
|
+
const settle = (source, batch) => {
|
|
339
|
+
const passes = batch.filter((v) => !isLoopBack(v.verdict));
|
|
340
|
+
const live = batch.filter((v) => isLoopBack(v.verdict) && !passes.some((p) => p.launch > v.at && fixBetween(source, v.at, p.launch)));
|
|
341
|
+
return { live, closes: passes.some((p) => p.launch > (lastFix.get(source) ?? -1) && !live.some((v) => v.launch < p.at)) };
|
|
342
|
+
};
|
|
343
|
+
|
|
332
344
|
const effect = (to, at) => {
|
|
333
345
|
const rounds = [];
|
|
334
346
|
const outcome = [];
|
|
335
347
|
for (const [source, batch] of pending) {
|
|
336
348
|
const byToken = loops.get(source);
|
|
337
349
|
if (!byToken || batch.length === 0 || !targetsOf(source).has(to)) continue;
|
|
338
|
-
const
|
|
339
|
-
const live = batch.filter((v) => isLoopBack(v.verdict) && !passes.some((p) => p.launch > v.at && fixBetween(source, v.at, p.launch)));
|
|
340
|
-
const closes = passes.some((p) => p.launch > (lastFix.get(source) ?? -1) && !live.some((v) => v.launch < p.at));
|
|
350
|
+
const { live, closes } = settle(source, batch);
|
|
341
351
|
const routed = live.filter((v) => byToken.get(v.verdict)?.has(to));
|
|
342
352
|
const fresh = routed.filter((v) => {
|
|
343
353
|
const last = streak.get(`${source}|${v.verdict}`);
|
|
@@ -434,13 +444,18 @@ export function replay(entries, loops, forward = new Map()) {
|
|
|
434
444
|
});
|
|
435
445
|
// What is open when the replay ends: each loop with its rounds, the rounds the owner's replies gave it and the
|
|
436
446
|
// issues it counted by, and each loop-back no fix has acted on yet — what a compaction takes from the orchestrator.
|
|
447
|
+
// A loop whose source passed after the latest fix is closed by the next dispatch it could act on, and until then
|
|
448
|
+
// is still in the count; it says so, and what would close each of the others. Listed as open, three loops
|
|
449
|
+
// approved the evening before a compaction were handed back as capped, and the orchestrator went looking for why.
|
|
437
450
|
const open = [...streak.entries()]
|
|
438
451
|
.filter(([key]) => key.split('|').length === 2)
|
|
439
452
|
.map(([key, s]) => {
|
|
440
453
|
const [source, token] = key.split('|');
|
|
441
454
|
const cap = Math.max(0, ...(loops.get(source)?.get(token)?.values() ?? []));
|
|
442
455
|
const issues = [...streak.keys()].filter((k) => k.startsWith(`${key}|`)).map((k) => k.slice(key.length + 1));
|
|
443
|
-
|
|
456
|
+
const closing = settle(source, pending.get(source) ?? []).closes;
|
|
457
|
+
const onward = [...forward].filter(([, sources]) => sources.has(source)).map(([stage]) => stage);
|
|
458
|
+
return { source, token, rounds: s.n, cap, given: grace.get(key) ?? 0, issues, closing, targets: [...targetsOf(source)], onward };
|
|
444
459
|
});
|
|
445
460
|
const waiting = [...pending.entries()].flatMap(([source, batch]) => batch.filter((v) => isLoopBack(v.verdict)).map((v) => ({ source, verdict: v.verdict, issues: v.issues ?? [] })));
|
|
446
461
|
return { effect: (to) => effect(to, entries.length), rounds: made, open, waiting };
|
|
@@ -671,32 +686,56 @@ function onPre(input, project, path, at) {
|
|
|
671
686
|
return confirmation(worst);
|
|
672
687
|
}
|
|
673
688
|
|
|
689
|
+
/** Stages as a sentence lists them: `qa`, `implementer or architect`, `a, b or c`. */
|
|
690
|
+
const either = (stages) => (stages.length < 2 ? stages.join('') : `${stages.slice(0, -1).join(', ')} or ${stages.at(-1)}`);
|
|
691
|
+
|
|
674
692
|
/**
|
|
675
|
-
* What
|
|
676
|
-
* loop-backs
|
|
677
|
-
*
|
|
678
|
-
* report; the router told the orchestrator to write "round 2 of max 2" in a dispatch so "you after a
|
|
679
|
-
* compaction" could see it, and after a compaction it sees only a summary.
|
|
693
|
+
* What a session's ledger says of its loops, a line each: every loop still counted, and what would close it;
|
|
694
|
+
* the loop-backs no fix has acted on yet; and the latest dispatches. It is what a compaction hands the
|
|
695
|
+
* orchestrator and what `nina gate --status` prints, so the two cannot disagree.
|
|
680
696
|
*
|
|
681
697
|
* @param {object} project - `loadProject`'s.
|
|
682
|
-
* @param {
|
|
683
|
-
* @
|
|
684
|
-
*
|
|
698
|
+
* @param {object[]} entries - The session's ledger, oldest first.
|
|
699
|
+
* @returns {{lines: string[], open: number, closing: number, waiting: number}} The lines; the loops open, the
|
|
700
|
+
* loops a pass already settled, whose count the next dispatch drops, and the loop-backs waiting on a fix.
|
|
685
701
|
*/
|
|
686
|
-
function
|
|
687
|
-
const entries = readLedger(path);
|
|
702
|
+
export function loopState(project, entries) {
|
|
688
703
|
const { open, waiting } = replay(entries, project.loops, project.forward);
|
|
689
|
-
const lines = [
|
|
704
|
+
const lines = [];
|
|
690
705
|
for (const l of open) {
|
|
706
|
+
const count =
|
|
707
|
+
`${l.source} ${l.token} — ${l.rounds} round(s), capped at ${l.cap}${l.given ? ` and ${l.given} more from the owner's replies` : ''}` +
|
|
708
|
+
(l.issues.length ? `, issues ${l.issues.join(', ')}` : '');
|
|
709
|
+
const fix = waiting.some((w) => w.source === l.source) ? 'the fix it waits on' : 'the latest fix';
|
|
691
710
|
lines.push(
|
|
692
|
-
|
|
693
|
-
|
|
711
|
+
l.closing
|
|
712
|
+
? `- passed after its latest fix: ${count}. Those rounds are settled, and the gate drops them at the next dispatch to ${either(l.targets)}`
|
|
713
|
+
: `- open loop: ${count}. It closes when a ${l.source} launched after ${fix} passes with no rejection beside it` +
|
|
714
|
+
(l.onward.length ? `, or when ${either(l.onward)} passes, sent out after the ${l.source} last reported` : ''),
|
|
694
715
|
);
|
|
695
716
|
}
|
|
696
717
|
for (const w of waiting) lines.push(`- waiting on a fix: ${w.source} ${w.verdict}${w.issues.length ? `, issues ${w.issues.join(', ')}` : ''}`);
|
|
697
718
|
if (open.length === 0 && waiting.length === 0) lines.push('- no loop is open');
|
|
698
719
|
const dispatched = entries.filter((e) => e.k === 'dispatch' && e.role).slice(-4);
|
|
699
720
|
if (dispatched.length) lines.push(`- the latest dispatches: ${dispatched.map((e) => e.role).join(', ')}, the newest at ${String(dispatched.at(-1).at ?? '').slice(11, 16)} UTC`);
|
|
721
|
+
const closing = open.filter((l) => l.closing).length;
|
|
722
|
+
return { lines, open: open.length - closing, closing, waiting: waiting.length };
|
|
723
|
+
}
|
|
724
|
+
|
|
725
|
+
/**
|
|
726
|
+
* What the gate hands the orchestrator after its conversation was compacted: the loops still open and the
|
|
727
|
+
* loop-backs waiting on a fix, the latest dispatches, where the checkout stands, and the two documents to read
|
|
728
|
+
* again. The graph and the router are read once, at a session's start, and a compaction drops them with every
|
|
729
|
+
* report; the router told the orchestrator to write "round 2 of max 2" in a dispatch so "you after a
|
|
730
|
+
* compaction" could see it, and after a compaction it sees only a summary.
|
|
731
|
+
*
|
|
732
|
+
* @param {object} project - `loadProject`'s.
|
|
733
|
+
* @param {string} path - The session's ledger.
|
|
734
|
+
* @param {string} root - The project.
|
|
735
|
+
* @returns {object}
|
|
736
|
+
*/
|
|
737
|
+
function afterCompaction(project, path, root) {
|
|
738
|
+
const lines = ['The conversation was compacted. What the NINA loop gate kept of this session:', ...loopState(project, readLedger(path)).lines];
|
|
700
739
|
const git = (...args) => spawnSync('git', ['-C', root, ...args], { encoding: 'utf8', timeout: 2000 }).stdout?.trim() ?? '';
|
|
701
740
|
const branch = git('rev-parse', '--abbrev-ref', 'HEAD');
|
|
702
741
|
const last = git('log', '-1', '--format=%h %s');
|
package/src/surfaces.mjs
CHANGED
|
@@ -12,17 +12,33 @@
|
|
|
12
12
|
* `init`, `check` and `upgrade` all read this, so a surface's evidence and its prerequisite are stated once.
|
|
13
13
|
*/
|
|
14
14
|
|
|
15
|
+
/** A drizzle-kit config, which a Drizzle project usually has and nothing else names so. */
|
|
16
|
+
const DRIZZLE_CONFIG = /(^|\/)drizzle\.config\.[cm]?[jt]s$/;
|
|
17
|
+
|
|
15
18
|
/** Surfaces a repository reveals by its files. The rest are claims about the domain. */
|
|
16
19
|
export const DETECTABLE = [
|
|
17
|
-
{ surface: 'db', why: 'a Prisma schema', test: (f) => f.some((p) => p.endsWith('schema.prisma')) },
|
|
20
|
+
{ surface: 'db', why: 'a Prisma schema or a drizzle-kit config', test: (f) => f.some((p) => p.endsWith('schema.prisma') || DRIZZLE_CONFIG.test(p)) },
|
|
18
21
|
{ surface: 'prisma', why: 'a Prisma schema', test: (f) => f.some((p) => p.endsWith('schema.prisma')) },
|
|
22
|
+
{ surface: 'drizzle', why: 'a drizzle-kit config', test: (f) => f.some((p) => DRIZZLE_CONFIG.test(p)) },
|
|
19
23
|
{ surface: 'edge-cf', why: 'a wrangler config', test: (f) => f.some((p) => /(^|\/)wrangler\.(toml|jsonc?)$/.test(p)) },
|
|
20
24
|
{ surface: 'frontend', why: 'a Vite config', test: (f) => f.some((p) => /(^|\/)vite\.config\.[cm]?[jt]s$/.test(p)) },
|
|
21
25
|
{ surface: 'blockchain', why: 'a Foundry or Hardhat config', test: (f) => f.some((p) => /(^|\/)(foundry\.toml|hardhat\.config\.[cm]?[jt]s)$/.test(p)) },
|
|
22
26
|
];
|
|
23
27
|
|
|
24
|
-
/**
|
|
25
|
-
|
|
28
|
+
/**
|
|
29
|
+
* A stack surface, and every surface it is a stack of: declared without one of them, its rules have nowhere
|
|
30
|
+
* to land. Most stacks need one concern; an engine that only runs on one platform needs the platform too.
|
|
31
|
+
*/
|
|
32
|
+
export const NEEDS = { prisma: ['db'], drizzle: ['db'], d1: ['db', 'edge-cf'] };
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* What a stack needs that a profile does not declare — empty for a surface that is not a stack.
|
|
36
|
+
*
|
|
37
|
+
* @param {string} surface - The surface asked about.
|
|
38
|
+
* @param {string[]} declared - The surfaces declared, or answered yes so far.
|
|
39
|
+
* @returns {string[]}
|
|
40
|
+
*/
|
|
41
|
+
export const missingNeeds = (surface, declared) => (NEEDS[surface] ?? []).filter((need) => !declared.includes(need));
|
|
26
42
|
|
|
27
43
|
/**
|
|
28
44
|
* The surfaces a project's files reveal, with the evidence for each.
|