@pennyfarthing/core 6.6.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 +293 -0
- package/package.json +58 -0
- package/packages/core/bin/pennyfarthing.js +14 -0
- package/packages/core/dist/bmad/context-reader.d.ts +71 -0
- package/packages/core/dist/bmad/context-reader.d.ts.map +1 -0
- package/packages/core/dist/bmad/context-reader.js +369 -0
- package/packages/core/dist/bmad/context-reader.js.map +1 -0
- package/packages/core/dist/bmad/context-reader.test.d.ts +71 -0
- package/packages/core/dist/bmad/context-reader.test.d.ts.map +1 -0
- package/packages/core/dist/bmad/context-reader.test.js +878 -0
- package/packages/core/dist/bmad/context-reader.test.js.map +1 -0
- package/packages/core/dist/bmad/epics-parser.d.ts +61 -0
- package/packages/core/dist/bmad/epics-parser.d.ts.map +1 -0
- package/packages/core/dist/bmad/epics-parser.js +331 -0
- package/packages/core/dist/bmad/epics-parser.js.map +1 -0
- package/packages/core/dist/bmad/epics-parser.test.d.ts +7 -0
- package/packages/core/dist/bmad/epics-parser.test.d.ts.map +1 -0
- package/packages/core/dist/bmad/epics-parser.test.js +449 -0
- package/packages/core/dist/bmad/epics-parser.test.js.map +1 -0
- package/packages/core/dist/bmad/index.d.ts +11 -0
- package/packages/core/dist/bmad/index.d.ts.map +1 -0
- package/packages/core/dist/bmad/index.js +24 -0
- package/packages/core/dist/bmad/index.js.map +1 -0
- package/packages/core/dist/bmad/status-sync.d.ts +173 -0
- package/packages/core/dist/bmad/status-sync.d.ts.map +1 -0
- package/packages/core/dist/bmad/status-sync.js +463 -0
- package/packages/core/dist/bmad/status-sync.js.map +1 -0
- package/packages/core/dist/bmad/status-sync.test.d.ts +7 -0
- package/packages/core/dist/bmad/status-sync.test.d.ts.map +1 -0
- package/packages/core/dist/bmad/status-sync.test.js +702 -0
- package/packages/core/dist/bmad/status-sync.test.js.map +1 -0
- package/packages/core/dist/bmad/story-exporter.d.ts +55 -0
- package/packages/core/dist/bmad/story-exporter.d.ts.map +1 -0
- package/packages/core/dist/bmad/story-exporter.js +170 -0
- package/packages/core/dist/bmad/story-exporter.js.map +1 -0
- package/packages/core/dist/bmad/story-exporter.test.d.ts +51 -0
- package/packages/core/dist/bmad/story-exporter.test.d.ts.map +1 -0
- package/packages/core/dist/bmad/story-exporter.test.js +603 -0
- package/packages/core/dist/bmad/story-exporter.test.js.map +1 -0
- package/packages/core/dist/bmad/story-parser.d.ts +44 -0
- package/packages/core/dist/bmad/story-parser.d.ts.map +1 -0
- package/packages/core/dist/bmad/story-parser.js +307 -0
- package/packages/core/dist/bmad/story-parser.js.map +1 -0
- package/packages/core/dist/bmad/story-parser.test.d.ts +44 -0
- package/packages/core/dist/bmad/story-parser.test.d.ts.map +1 -0
- package/packages/core/dist/bmad/story-parser.test.js +693 -0
- package/packages/core/dist/bmad/story-parser.test.js.map +1 -0
- package/packages/core/dist/cli/commands/command.d.ts +28 -0
- package/packages/core/dist/cli/commands/command.d.ts.map +1 -0
- package/packages/core/dist/cli/commands/command.js +399 -0
- package/packages/core/dist/cli/commands/command.js.map +1 -0
- package/packages/core/dist/cli/commands/cyclist.d.ts +46 -0
- package/packages/core/dist/cli/commands/cyclist.d.ts.map +1 -0
- package/packages/core/dist/cli/commands/cyclist.js +191 -0
- package/packages/core/dist/cli/commands/cyclist.js.map +1 -0
- package/packages/core/dist/cli/commands/cyclist.test.d.ts +13 -0
- package/packages/core/dist/cli/commands/cyclist.test.d.ts.map +1 -0
- package/packages/core/dist/cli/commands/cyclist.test.js +243 -0
- package/packages/core/dist/cli/commands/cyclist.test.js.map +1 -0
- package/packages/core/dist/cli/commands/doctor.d.ts +9 -0
- package/packages/core/dist/cli/commands/doctor.d.ts.map +1 -0
- package/packages/core/dist/cli/commands/doctor.js +652 -0
- package/packages/core/dist/cli/commands/doctor.js.map +1 -0
- package/packages/core/dist/cli/commands/init.d.ts +8 -0
- package/packages/core/dist/cli/commands/init.d.ts.map +1 -0
- package/packages/core/dist/cli/commands/init.js +524 -0
- package/packages/core/dist/cli/commands/init.js.map +1 -0
- package/packages/core/dist/cli/commands/skill.d.ts +28 -0
- package/packages/core/dist/cli/commands/skill.d.ts.map +1 -0
- package/packages/core/dist/cli/commands/skill.js +416 -0
- package/packages/core/dist/cli/commands/skill.js.map +1 -0
- package/packages/core/dist/cli/commands/theme.d.ts +21 -0
- package/packages/core/dist/cli/commands/theme.d.ts.map +1 -0
- package/packages/core/dist/cli/commands/theme.js +201 -0
- package/packages/core/dist/cli/commands/theme.js.map +1 -0
- package/packages/core/dist/cli/commands/uninstall.d.ts +8 -0
- package/packages/core/dist/cli/commands/uninstall.d.ts.map +1 -0
- package/packages/core/dist/cli/commands/uninstall.js +237 -0
- package/packages/core/dist/cli/commands/uninstall.js.map +1 -0
- package/packages/core/dist/cli/commands/update.d.ts +9 -0
- package/packages/core/dist/cli/commands/update.d.ts.map +1 -0
- package/packages/core/dist/cli/commands/update.js +545 -0
- package/packages/core/dist/cli/commands/update.js.map +1 -0
- package/packages/core/dist/cli/commands/version.d.ts +2 -0
- package/packages/core/dist/cli/commands/version.d.ts.map +1 -0
- package/packages/core/dist/cli/commands/version.js +28 -0
- package/packages/core/dist/cli/commands/version.js.map +1 -0
- package/packages/core/dist/cli/customization.test.d.ts +12 -0
- package/packages/core/dist/cli/customization.test.d.ts.map +1 -0
- package/packages/core/dist/cli/customization.test.js +84 -0
- package/packages/core/dist/cli/customization.test.js.map +1 -0
- package/packages/core/dist/cli/cyclist-migration.test.d.ts +16 -0
- package/packages/core/dist/cli/cyclist-migration.test.d.ts.map +1 -0
- package/packages/core/dist/cli/cyclist-migration.test.js +224 -0
- package/packages/core/dist/cli/cyclist-migration.test.js.map +1 -0
- package/packages/core/dist/cli/index.d.ts +3 -0
- package/packages/core/dist/cli/index.d.ts.map +1 -0
- package/packages/core/dist/cli/index.js +174 -0
- package/packages/core/dist/cli/index.js.map +1 -0
- package/packages/core/dist/cli/ocean-profiles.test.d.ts +13 -0
- package/packages/core/dist/cli/ocean-profiles.test.d.ts.map +1 -0
- package/packages/core/dist/cli/ocean-profiles.test.js +134 -0
- package/packages/core/dist/cli/ocean-profiles.test.js.map +1 -0
- package/packages/core/dist/cli/theme-maker.test.d.ts +11 -0
- package/packages/core/dist/cli/theme-maker.test.d.ts.map +1 -0
- package/packages/core/dist/cli/theme-maker.test.js +356 -0
- package/packages/core/dist/cli/theme-maker.test.js.map +1 -0
- package/packages/core/dist/cli/utils/constants.d.ts +60 -0
- package/packages/core/dist/cli/utils/constants.d.ts.map +1 -0
- package/packages/core/dist/cli/utils/constants.js +52 -0
- package/packages/core/dist/cli/utils/constants.js.map +1 -0
- package/packages/core/dist/cli/utils/files.d.ts +71 -0
- package/packages/core/dist/cli/utils/files.d.ts.map +1 -0
- package/packages/core/dist/cli/utils/files.js +162 -0
- package/packages/core/dist/cli/utils/files.js.map +1 -0
- package/packages/core/dist/cli/utils/logger.d.ts +26 -0
- package/packages/core/dist/cli/utils/logger.d.ts.map +1 -0
- package/packages/core/dist/cli/utils/logger.js +88 -0
- package/packages/core/dist/cli/utils/logger.js.map +1 -0
- package/packages/core/dist/cli/utils/manifest.d.ts +47 -0
- package/packages/core/dist/cli/utils/manifest.d.ts.map +1 -0
- package/packages/core/dist/cli/utils/manifest.js +90 -0
- package/packages/core/dist/cli/utils/manifest.js.map +1 -0
- package/packages/core/dist/cli/utils/node-modules.d.ts +6 -0
- package/packages/core/dist/cli/utils/node-modules.d.ts.map +1 -0
- package/packages/core/dist/cli/utils/node-modules.js +22 -0
- package/packages/core/dist/cli/utils/node-modules.js.map +1 -0
- package/packages/core/dist/cli/utils/prompts.d.ts +34 -0
- package/packages/core/dist/cli/utils/prompts.d.ts.map +1 -0
- package/packages/core/dist/cli/utils/prompts.js +93 -0
- package/packages/core/dist/cli/utils/prompts.js.map +1 -0
- package/packages/core/dist/cli/utils/symlinks.d.ts +29 -0
- package/packages/core/dist/cli/utils/symlinks.d.ts.map +1 -0
- package/packages/core/dist/cli/utils/symlinks.js +181 -0
- package/packages/core/dist/cli/utils/symlinks.js.map +1 -0
- package/packages/core/dist/cli/utils/themes.d.ts +104 -0
- package/packages/core/dist/cli/utils/themes.d.ts.map +1 -0
- package/packages/core/dist/cli/utils/themes.js +393 -0
- package/packages/core/dist/cli/utils/themes.js.map +1 -0
- package/packages/core/dist/cli/utils/themes.test.d.ts +12 -0
- package/packages/core/dist/cli/utils/themes.test.d.ts.map +1 -0
- package/packages/core/dist/cli/utils/themes.test.js +144 -0
- package/packages/core/dist/cli/utils/themes.test.js.map +1 -0
- package/packages/core/dist/cli/utils/version.d.ts +10 -0
- package/packages/core/dist/cli/utils/version.d.ts.map +1 -0
- package/packages/core/dist/cli/utils/version.js +63 -0
- package/packages/core/dist/cli/utils/version.js.map +1 -0
- package/packages/core/dist/cli/workspace.test.d.ts +8 -0
- package/packages/core/dist/cli/workspace.test.d.ts.map +1 -0
- package/packages/core/dist/cli/workspace.test.js +154 -0
- package/packages/core/dist/cli/workspace.test.js.map +1 -0
- package/packages/core/dist/index.d.ts +6 -0
- package/packages/core/dist/index.d.ts.map +1 -0
- package/packages/core/dist/index.js +10 -0
- package/packages/core/dist/index.js.map +1 -0
- package/packages/core/dist/permissions/index.d.ts +9 -0
- package/packages/core/dist/permissions/index.d.ts.map +1 -0
- package/packages/core/dist/permissions/index.js +13 -0
- package/packages/core/dist/permissions/index.js.map +1 -0
- package/packages/core/dist/permissions/permission-schema.d.ts +89 -0
- package/packages/core/dist/permissions/permission-schema.d.ts.map +1 -0
- package/packages/core/dist/permissions/permission-schema.js +120 -0
- package/packages/core/dist/permissions/permission-schema.js.map +1 -0
- package/packages/core/dist/permissions/permission-schema.test.d.ts +40 -0
- package/packages/core/dist/permissions/permission-schema.test.d.ts.map +1 -0
- package/packages/core/dist/permissions/permission-schema.test.js +367 -0
- package/packages/core/dist/permissions/permission-schema.test.js.map +1 -0
- package/packages/core/dist/scripts/add-ocean-profiles.d.ts +9 -0
- package/packages/core/dist/scripts/add-ocean-profiles.d.ts.map +1 -0
- package/packages/core/dist/scripts/add-ocean-profiles.js +695 -0
- package/packages/core/dist/scripts/add-ocean-profiles.js.map +1 -0
- package/packages/core/dist/scripts/benchmark-integration.d.ts +182 -0
- package/packages/core/dist/scripts/benchmark-integration.d.ts.map +1 -0
- package/packages/core/dist/scripts/benchmark-integration.js +691 -0
- package/packages/core/dist/scripts/benchmark-integration.js.map +1 -0
- package/packages/core/dist/scripts/benchmark-integration.test.d.ts +13 -0
- package/packages/core/dist/scripts/benchmark-integration.test.d.ts.map +1 -0
- package/packages/core/dist/scripts/benchmark-integration.test.js +680 -0
- package/packages/core/dist/scripts/benchmark-integration.test.js.map +1 -0
- package/packages/core/dist/scripts/debugging-scenarios.test.d.ts +18 -0
- package/packages/core/dist/scripts/debugging-scenarios.test.d.ts.map +1 -0
- package/packages/core/dist/scripts/debugging-scenarios.test.js +317 -0
- package/packages/core/dist/scripts/debugging-scenarios.test.js.map +1 -0
- package/packages/core/dist/scripts/generate-all-faces.d.ts +10 -0
- package/packages/core/dist/scripts/generate-all-faces.d.ts.map +1 -0
- package/packages/core/dist/scripts/generate-all-faces.js +256 -0
- package/packages/core/dist/scripts/generate-all-faces.js.map +1 -0
- package/packages/core/dist/scripts/generate-all-faces.test.d.ts +17 -0
- package/packages/core/dist/scripts/generate-all-faces.test.d.ts.map +1 -0
- package/packages/core/dist/scripts/generate-all-faces.test.js +372 -0
- package/packages/core/dist/scripts/generate-all-faces.test.js.map +1 -0
- package/packages/core/dist/scripts/generate-all-spiders.d.ts +10 -0
- package/packages/core/dist/scripts/generate-all-spiders.d.ts.map +1 -0
- package/packages/core/dist/scripts/generate-all-spiders.js +306 -0
- package/packages/core/dist/scripts/generate-all-spiders.js.map +1 -0
- package/packages/core/dist/scripts/generate-ascii-face.d.ts +52 -0
- package/packages/core/dist/scripts/generate-ascii-face.d.ts.map +1 -0
- package/packages/core/dist/scripts/generate-ascii-face.js +155 -0
- package/packages/core/dist/scripts/generate-ascii-face.js.map +1 -0
- package/packages/core/dist/scripts/generate-face.d.ts +52 -0
- package/packages/core/dist/scripts/generate-face.d.ts.map +1 -0
- package/packages/core/dist/scripts/generate-face.js +199 -0
- package/packages/core/dist/scripts/generate-face.js.map +1 -0
- package/packages/core/dist/scripts/generate-face.test.d.ts +13 -0
- package/packages/core/dist/scripts/generate-face.test.d.ts.map +1 -0
- package/packages/core/dist/scripts/generate-face.test.js +301 -0
- package/packages/core/dist/scripts/generate-face.test.js.map +1 -0
- package/packages/core/dist/scripts/generate-report.d.ts +65 -0
- package/packages/core/dist/scripts/generate-report.d.ts.map +1 -0
- package/packages/core/dist/scripts/generate-report.js +378 -0
- package/packages/core/dist/scripts/generate-report.js.map +1 -0
- package/packages/core/dist/scripts/generate-report.test.d.ts +13 -0
- package/packages/core/dist/scripts/generate-report.test.d.ts.map +1 -0
- package/packages/core/dist/scripts/generate-report.test.js +363 -0
- package/packages/core/dist/scripts/generate-report.test.js.map +1 -0
- package/packages/core/dist/scripts/generate-spider-report.d.ts +65 -0
- package/packages/core/dist/scripts/generate-spider-report.d.ts.map +1 -0
- package/packages/core/dist/scripts/generate-spider-report.js +366 -0
- package/packages/core/dist/scripts/generate-spider-report.js.map +1 -0
- package/packages/core/dist/scripts/generate-spider-report.test.d.ts +13 -0
- package/packages/core/dist/scripts/generate-spider-report.test.d.ts.map +1 -0
- package/packages/core/dist/scripts/generate-spider-report.test.js +367 -0
- package/packages/core/dist/scripts/generate-spider-report.test.js.map +1 -0
- package/packages/core/dist/scripts/generate-spider.d.ts +37 -0
- package/packages/core/dist/scripts/generate-spider.d.ts.map +1 -0
- package/packages/core/dist/scripts/generate-spider.js +315 -0
- package/packages/core/dist/scripts/generate-spider.js.map +1 -0
- package/packages/core/dist/scripts/generate-spider.test.d.ts +14 -0
- package/packages/core/dist/scripts/generate-spider.test.d.ts.map +1 -0
- package/packages/core/dist/scripts/generate-spider.test.js +269 -0
- package/packages/core/dist/scripts/generate-spider.test.js.map +1 -0
- package/packages/core/dist/scripts/job-fair-aggregator.d.ts +150 -0
- package/packages/core/dist/scripts/job-fair-aggregator.d.ts.map +1 -0
- package/packages/core/dist/scripts/job-fair-aggregator.js +547 -0
- package/packages/core/dist/scripts/job-fair-aggregator.js.map +1 -0
- package/packages/core/dist/scripts/job-fair-aggregator.test.d.ts +14 -0
- package/packages/core/dist/scripts/job-fair-aggregator.test.d.ts.map +1 -0
- package/packages/core/dist/scripts/job-fair-aggregator.test.js +616 -0
- package/packages/core/dist/scripts/job-fair-aggregator.test.js.map +1 -0
- package/packages/core/dist/scripts/run-ci.test.d.ts +20 -0
- package/packages/core/dist/scripts/run-ci.test.d.ts.map +1 -0
- package/packages/core/dist/scripts/run-ci.test.js +127 -0
- package/packages/core/dist/scripts/run-ci.test.js.map +1 -0
- package/packages/core/dist/scripts/theme-detail.test.d.ts +10 -0
- package/packages/core/dist/scripts/theme-detail.test.d.ts.map +1 -0
- package/packages/core/dist/scripts/theme-detail.test.js +199 -0
- package/packages/core/dist/scripts/theme-detail.test.js.map +1 -0
- package/packages/core/dist/scripts/validate-ocean-profiles.d.ts +9 -0
- package/packages/core/dist/scripts/validate-ocean-profiles.d.ts.map +1 -0
- package/packages/core/dist/scripts/validate-ocean-profiles.js +130 -0
- package/packages/core/dist/scripts/validate-ocean-profiles.js.map +1 -0
- package/packages/core/dist/workflow/generic-handoff.d.ts +235 -0
- package/packages/core/dist/workflow/generic-handoff.d.ts.map +1 -0
- package/packages/core/dist/workflow/generic-handoff.js +358 -0
- package/packages/core/dist/workflow/generic-handoff.js.map +1 -0
- package/packages/core/dist/workflow/generic-handoff.test.d.ts +21 -0
- package/packages/core/dist/workflow/generic-handoff.test.d.ts.map +1 -0
- package/packages/core/dist/workflow/generic-handoff.test.js +499 -0
- package/packages/core/dist/workflow/generic-handoff.test.js.map +1 -0
- package/packages/core/dist/workflow/generic-sm-finish.d.ts +89 -0
- package/packages/core/dist/workflow/generic-sm-finish.d.ts.map +1 -0
- package/packages/core/dist/workflow/generic-sm-finish.js +157 -0
- package/packages/core/dist/workflow/generic-sm-finish.js.map +1 -0
- package/packages/core/dist/workflow/generic-sm-setup.d.ts +138 -0
- package/packages/core/dist/workflow/generic-sm-setup.d.ts.map +1 -0
- package/packages/core/dist/workflow/generic-sm-setup.js +382 -0
- package/packages/core/dist/workflow/generic-sm-setup.js.map +1 -0
- package/packages/core/dist/workflow/sm-subagents.test.d.ts +23 -0
- package/packages/core/dist/workflow/sm-subagents.test.d.ts.map +1 -0
- package/packages/core/dist/workflow/sm-subagents.test.js +727 -0
- package/packages/core/dist/workflow/sm-subagents.test.js.map +1 -0
- package/packages/core/dist/workflow/story-workflow-routing.test.d.ts +17 -0
- package/packages/core/dist/workflow/story-workflow-routing.test.d.ts.map +1 -0
- package/packages/core/dist/workflow/story-workflow-routing.test.js +559 -0
- package/packages/core/dist/workflow/story-workflow-routing.test.js.map +1 -0
- package/packages/core/dist/workflow/test-cache.d.ts +131 -0
- package/packages/core/dist/workflow/test-cache.d.ts.map +1 -0
- package/packages/core/dist/workflow/test-cache.js +226 -0
- package/packages/core/dist/workflow/test-cache.js.map +1 -0
- package/packages/core/dist/workflow/test-cache.test.d.ts +17 -0
- package/packages/core/dist/workflow/test-cache.test.d.ts.map +1 -0
- package/packages/core/dist/workflow/test-cache.test.js +438 -0
- package/packages/core/dist/workflow/test-cache.test.js.map +1 -0
- package/packages/core/dist/workflow/workflow-loader.d.ts +76 -0
- package/packages/core/dist/workflow/workflow-loader.d.ts.map +1 -0
- package/packages/core/dist/workflow/workflow-loader.js +133 -0
- package/packages/core/dist/workflow/workflow-loader.js.map +1 -0
- package/packages/core/dist/workflow/workflow-loader.test.d.ts +15 -0
- package/packages/core/dist/workflow/workflow-loader.test.d.ts.map +1 -0
- package/packages/core/dist/workflow/workflow-loader.test.js +354 -0
- package/packages/core/dist/workflow/workflow-loader.test.js.map +1 -0
- package/packages/core/dist/workflow/workflow-migration.test.d.ts +17 -0
- package/packages/core/dist/workflow/workflow-migration.test.d.ts.map +1 -0
- package/packages/core/dist/workflow/workflow-migration.test.js +372 -0
- package/packages/core/dist/workflow/workflow-migration.test.js.map +1 -0
- package/packages/core/dist/workflow/workflow-router.d.ts +55 -0
- package/packages/core/dist/workflow/workflow-router.d.ts.map +1 -0
- package/packages/core/dist/workflow/workflow-router.js +245 -0
- package/packages/core/dist/workflow/workflow-router.js.map +1 -0
- package/packages/core/dist/workflow/workflow-router.test.d.ts +20 -0
- package/packages/core/dist/workflow/workflow-router.test.d.ts.map +1 -0
- package/packages/core/dist/workflow/workflow-router.test.js +607 -0
- package/packages/core/dist/workflow/workflow-router.test.js.map +1 -0
- package/packages/core/dist/workflow/workflow-schema.d.ts +98 -0
- package/packages/core/dist/workflow/workflow-schema.d.ts.map +1 -0
- package/packages/core/dist/workflow/workflow-schema.js +230 -0
- package/packages/core/dist/workflow/workflow-schema.js.map +1 -0
- package/packages/core/dist/workflow/workflow-schema.test.d.ts +45 -0
- package/packages/core/dist/workflow/workflow-schema.test.d.ts.map +1 -0
- package/packages/core/dist/workflow/workflow-schema.test.js +512 -0
- package/packages/core/dist/workflow/workflow-schema.test.js.map +1 -0
- package/pennyfarthing-dist/agents/README.md +397 -0
- package/pennyfarthing-dist/agents/architect.md +171 -0
- package/pennyfarthing-dist/agents/dev.md +225 -0
- package/pennyfarthing-dist/agents/devops.md +183 -0
- package/pennyfarthing-dist/agents/generic-handoff.md +451 -0
- package/pennyfarthing-dist/agents/generic-sm-finish.md +261 -0
- package/pennyfarthing-dist/agents/generic-sm-setup.md +214 -0
- package/pennyfarthing-dist/agents/orchestrator.md +316 -0
- package/pennyfarthing-dist/agents/pm.md +153 -0
- package/pennyfarthing-dist/agents/reviewer-preflight.md +224 -0
- package/pennyfarthing-dist/agents/reviewer.md +315 -0
- package/pennyfarthing-dist/agents/sm-file-summary.md +109 -0
- package/pennyfarthing-dist/agents/sm-handoff.md +97 -0
- package/pennyfarthing-dist/agents/sm.md +480 -0
- package/pennyfarthing-dist/agents/tea.md +191 -0
- package/pennyfarthing-dist/agents/tech-writer.md +148 -0
- package/pennyfarthing-dist/agents/testing-runner.md +420 -0
- package/pennyfarthing-dist/agents/ux-designer.md +158 -0
- package/pennyfarthing-dist/agents/workflow-status-check.md +332 -0
- package/pennyfarthing-dist/commands/architect.md +62 -0
- package/pennyfarthing-dist/commands/benchmark-control.md +69 -0
- package/pennyfarthing-dist/commands/benchmark.md +467 -0
- package/pennyfarthing-dist/commands/brainstorm.md +91 -0
- package/pennyfarthing-dist/commands/check.md +156 -0
- package/pennyfarthing-dist/commands/chore.md +178 -0
- package/pennyfarthing-dist/commands/close-epic.md +136 -0
- package/pennyfarthing-dist/commands/continue-session.md +184 -0
- package/pennyfarthing-dist/commands/create-branches-from-story.md +374 -0
- package/pennyfarthing-dist/commands/create-theme.md +29 -0
- package/pennyfarthing-dist/commands/dev.md +60 -0
- package/pennyfarthing-dist/commands/devops.md +59 -0
- package/pennyfarthing-dist/commands/git-cleanup.md +340 -0
- package/pennyfarthing-dist/commands/health-check.md +108 -0
- package/pennyfarthing-dist/commands/help.md +264 -0
- package/pennyfarthing-dist/commands/job-fair.md +102 -0
- package/pennyfarthing-dist/commands/list-themes.md +17 -0
- package/pennyfarthing-dist/commands/new-work.md +127 -0
- package/pennyfarthing-dist/commands/orchestrator.md +56 -0
- package/pennyfarthing-dist/commands/parallel-work.md +71 -0
- package/pennyfarthing-dist/commands/party-mode.md +67 -0
- package/pennyfarthing-dist/commands/permissions.md +193 -0
- package/pennyfarthing-dist/commands/pm.md +60 -0
- package/pennyfarthing-dist/commands/prime.md +140 -0
- package/pennyfarthing-dist/commands/release.md +58 -0
- package/pennyfarthing-dist/commands/repo-status.md +49 -0
- package/pennyfarthing-dist/commands/retro.md +200 -0
- package/pennyfarthing-dist/commands/reviewer.md +64 -0
- package/pennyfarthing-dist/commands/run-ci.md +116 -0
- package/pennyfarthing-dist/commands/set-theme.md +52 -0
- package/pennyfarthing-dist/commands/show-theme.md +21 -0
- package/pennyfarthing-dist/commands/sm.md +70 -0
- package/pennyfarthing-dist/commands/solo.md +411 -0
- package/pennyfarthing-dist/commands/sprint-planning.md +109 -0
- package/pennyfarthing-dist/commands/start-epic.md +156 -0
- package/pennyfarthing-dist/commands/sync-epic-to-jira.md +184 -0
- package/pennyfarthing-dist/commands/sync-work-with-sprint.md +376 -0
- package/pennyfarthing-dist/commands/tea.md +63 -0
- package/pennyfarthing-dist/commands/tech-writer.md +53 -0
- package/pennyfarthing-dist/commands/theme-maker.md +671 -0
- package/pennyfarthing-dist/commands/update-domain-docs.md +83 -0
- package/pennyfarthing-dist/commands/ux-designer.md +62 -0
- package/pennyfarthing-dist/commands/work.md +111 -0
- package/pennyfarthing-dist/guides/AGENT-COORDINATION.md +480 -0
- package/pennyfarthing-dist/guides/AGENT-SCOPES.md +201 -0
- package/pennyfarthing-dist/guides/HOOKS.md +230 -0
- package/pennyfarthing-dist/guides/PROMPT-PATTERNS.md +338 -0
- package/pennyfarthing-dist/guides/SESSION-ARTIFACTS.md +193 -0
- package/pennyfarthing-dist/guides/agent-template-strategic.md +148 -0
- package/pennyfarthing-dist/guides/agent-template-tactical.md +162 -0
- package/pennyfarthing-dist/guides/patterns/approval-gates-pattern.md +746 -0
- package/pennyfarthing-dist/guides/patterns/fan-out-fan-in-pattern.md +574 -0
- package/pennyfarthing-dist/guides/patterns/helper-delegation-pattern.md +488 -0
- package/pennyfarthing-dist/guides/patterns/tdd-flow-pattern.md +402 -0
- package/pennyfarthing-dist/guides/permission-protocol.md +188 -0
- package/pennyfarthing-dist/guides/persona-loading.md +46 -0
- package/pennyfarthing-dist/guides/persona-system.md +294 -0
- package/pennyfarthing-dist/guides/shared-agent-behavior.md +388 -0
- package/pennyfarthing-dist/guides/shared-context.md +147 -0
- package/pennyfarthing-dist/guides/strategic-agent-behavior.md +348 -0
- package/pennyfarthing-dist/guides/tactical-agent-behavior.md +1041 -0
- package/pennyfarthing-dist/guides/workflow-schema.md +195 -0
- package/pennyfarthing-dist/guides/worktree-mode.md +113 -0
- package/pennyfarthing-dist/output-styles/teaching.md +33 -0
- package/pennyfarthing-dist/output-styles/terse.md +20 -0
- package/pennyfarthing-dist/output-styles/verbose.md +28 -0
- package/pennyfarthing-dist/personas/themes/1984.yaml +312 -0
- package/pennyfarthing-dist/personas/themes/a-team.yaml +207 -0
- package/pennyfarthing-dist/personas/themes/agatha-christie.yaml +300 -0
- package/pennyfarthing-dist/personas/themes/alice-in-wonderland.yaml +330 -0
- package/pennyfarthing-dist/personas/themes/all-stars.yaml +332 -0
- package/pennyfarthing-dist/personas/themes/ancient-philosophers.yaml +320 -0
- package/pennyfarthing-dist/personas/themes/ancient-strategists.yaml +306 -0
- package/pennyfarthing-dist/personas/themes/arcane.yaml +288 -0
- package/pennyfarthing-dist/personas/themes/arthurian-mythos.yaml +331 -0
- package/pennyfarthing-dist/personas/themes/avatar-the-last-airbender.yaml +288 -0
- package/pennyfarthing-dist/personas/themes/babylon-5.yaml +288 -0
- package/pennyfarthing-dist/personas/themes/battlestar-galactica.yaml +288 -0
- package/pennyfarthing-dist/personas/themes/better-call-saul.yaml +288 -0
- package/pennyfarthing-dist/personas/themes/big-lebowski.yaml +300 -0
- package/pennyfarthing-dist/personas/themes/black-sails.yaml +300 -0
- package/pennyfarthing-dist/personas/themes/blade-runner.yaml +295 -0
- package/pennyfarthing-dist/personas/themes/bobiverse.yaml +288 -0
- package/pennyfarthing-dist/personas/themes/breaking-bad.yaml +327 -0
- package/pennyfarthing-dist/personas/themes/catch-22.yaml +316 -0
- package/pennyfarthing-dist/personas/themes/classical-composers.yaml +310 -0
- package/pennyfarthing-dist/personas/themes/control.yaml +197 -0
- package/pennyfarthing-dist/personas/themes/count-of-monte-cristo.yaml +320 -0
- package/pennyfarthing-dist/personas/themes/cowboy-bebop.yaml +323 -0
- package/pennyfarthing-dist/personas/themes/deadwood.yaml +300 -0
- package/pennyfarthing-dist/personas/themes/dickens.yaml +320 -0
- package/pennyfarthing-dist/personas/themes/discworld.yaml +332 -0
- package/pennyfarthing-dist/personas/themes/doctor-who.yaml +290 -0
- package/pennyfarthing-dist/personas/themes/don-quixote.yaml +320 -0
- package/pennyfarthing-dist/personas/themes/dune.yaml +307 -0
- package/pennyfarthing-dist/personas/themes/enlightenment-thinkers.yaml +320 -0
- package/pennyfarthing-dist/personas/themes/expeditionary-force.yaml +288 -0
- package/pennyfarthing-dist/personas/themes/fargo.yaml +330 -0
- package/pennyfarthing-dist/personas/themes/film-auteurs.yaml +312 -0
- package/pennyfarthing-dist/personas/themes/firefly.yaml +328 -0
- package/pennyfarthing-dist/personas/themes/foundation.yaml +290 -0
- package/pennyfarthing-dist/personas/themes/futurama.yaml +321 -0
- package/pennyfarthing-dist/personas/themes/game-of-thrones.yaml +290 -0
- package/pennyfarthing-dist/personas/themes/gilligans-island.yaml +243 -0
- package/pennyfarthing-dist/personas/themes/gothic-literature.yaml +308 -0
- package/pennyfarthing-dist/personas/themes/great-gatsby.yaml +308 -0
- package/pennyfarthing-dist/personas/themes/greek-mythology.yaml +330 -0
- package/pennyfarthing-dist/personas/themes/hannibal.yaml +300 -0
- package/pennyfarthing-dist/personas/themes/harry-potter.yaml +324 -0
- package/pennyfarthing-dist/personas/themes/his-dark-materials.yaml +291 -0
- package/pennyfarthing-dist/personas/themes/historical-figures.yaml +288 -0
- package/pennyfarthing-dist/personas/themes/hitchhikers-guide.yaml +331 -0
- package/pennyfarthing-dist/personas/themes/house-md.yaml +321 -0
- package/pennyfarthing-dist/personas/themes/imperial-radch.yaml +289 -0
- package/pennyfarthing-dist/personas/themes/inspector-morse.yaml +300 -0
- package/pennyfarthing-dist/personas/themes/jane-austen.yaml +287 -0
- package/pennyfarthing-dist/personas/themes/jazz-legends.yaml +320 -0
- package/pennyfarthing-dist/personas/themes/justified.yaml +300 -0
- package/pennyfarthing-dist/personas/themes/legion-of-doom.yaml +219 -0
- package/pennyfarthing-dist/personas/themes/les-miserables.yaml +299 -0
- package/pennyfarthing-dist/personas/themes/lord-of-the-rings.yaml +334 -0
- package/pennyfarthing-dist/personas/themes/lovecraft-mythos.yaml +334 -0
- package/pennyfarthing-dist/personas/themes/mad-max.yaml +355 -0
- package/pennyfarthing-dist/personas/themes/mad-men.yaml +289 -0
- package/pennyfarthing-dist/personas/themes/marvel-mcu.yaml +300 -0
- package/pennyfarthing-dist/personas/themes/mash.yaml +334 -0
- package/pennyfarthing-dist/personas/themes/mass-effect.yaml +289 -0
- package/pennyfarthing-dist/personas/themes/military-commanders.yaml +306 -0
- package/pennyfarthing-dist/personas/themes/moby-dick.yaml +320 -0
- package/pennyfarthing-dist/personas/themes/monty-python.yaml +303 -0
- package/pennyfarthing-dist/personas/themes/neuromancer.yaml +300 -0
- package/pennyfarthing-dist/personas/themes/norse-mythology.yaml +329 -0
- package/pennyfarthing-dist/personas/themes/parks-and-rec.yaml +242 -0
- package/pennyfarthing-dist/personas/themes/peaky-blinders.yaml +298 -0
- package/pennyfarthing-dist/personas/themes/princess-bride.yaml +220 -0
- package/pennyfarthing-dist/personas/themes/renaissance-masters.yaml +320 -0
- package/pennyfarthing-dist/personas/themes/rome.yaml +300 -0
- package/pennyfarthing-dist/personas/themes/russian-masters.yaml +318 -0
- package/pennyfarthing-dist/personas/themes/sandman.yaml +288 -0
- package/pennyfarthing-dist/personas/themes/scientific-revolutionaries.yaml +320 -0
- package/pennyfarthing-dist/personas/themes/shakespeare.yaml +301 -0
- package/pennyfarthing-dist/personas/themes/sherlock-holmes.yaml +289 -0
- package/pennyfarthing-dist/personas/themes/snow-crash.yaml +288 -0
- package/pennyfarthing-dist/personas/themes/software-pioneers.yaml +300 -0
- package/pennyfarthing-dist/personas/themes/star-trek-tng.yaml +230 -0
- package/pennyfarthing-dist/personas/themes/star-trek-tos.yaml +210 -0
- package/pennyfarthing-dist/personas/themes/star-wars.yaml +303 -0
- package/pennyfarthing-dist/personas/themes/succession.yaml +300 -0
- package/pennyfarthing-dist/personas/themes/superfriends.yaml +208 -0
- package/pennyfarthing-dist/personas/themes/ted-lasso.yaml +236 -0
- package/pennyfarthing-dist/personas/themes/the-americans.yaml +300 -0
- package/pennyfarthing-dist/personas/themes/the-crown.yaml +300 -0
- package/pennyfarthing-dist/personas/themes/the-expanse.yaml +213 -0
- package/pennyfarthing-dist/personas/themes/the-good-place.yaml +322 -0
- package/pennyfarthing-dist/personas/themes/the-matrix.yaml +353 -0
- package/pennyfarthing-dist/personas/themes/the-odyssey.yaml +300 -0
- package/pennyfarthing-dist/personas/themes/the-office.yaml +330 -0
- package/pennyfarthing-dist/personas/themes/the-simpsons.yaml +308 -0
- package/pennyfarthing-dist/personas/themes/the-sopranos.yaml +300 -0
- package/pennyfarthing-dist/personas/themes/the-wire.yaml +311 -0
- package/pennyfarthing-dist/personas/themes/the-witcher.yaml +300 -0
- package/pennyfarthing-dist/personas/themes/twin-peaks.yaml +302 -0
- package/pennyfarthing-dist/personas/themes/vorkosigan-saga.yaml +300 -0
- package/pennyfarthing-dist/personas/themes/watchmen.yaml +291 -0
- package/pennyfarthing-dist/personas/themes/west-wing.yaml +291 -0
- package/pennyfarthing-dist/personas/themes/world-explorers.yaml +320 -0
- package/pennyfarthing-dist/personas/themes/wwii-leaders.yaml +307 -0
- package/pennyfarthing-dist/personas/themes/x-files.yaml +302 -0
- package/pennyfarthing-dist/scripts/add-short-names.mjs +264 -0
- package/pennyfarthing-dist/scripts/agent-session.sh +367 -0
- package/pennyfarthing-dist/scripts/check-context.sh +187 -0
- package/pennyfarthing-dist/scripts/check.sh +497 -0
- package/pennyfarthing-dist/scripts/deploy.sh +284 -0
- package/pennyfarthing-dist/scripts/doctor-dogfood.sh +360 -0
- package/pennyfarthing-dist/scripts/hooks/context-circuit-breaker.sh +61 -0
- package/pennyfarthing-dist/scripts/hooks/context-warning.sh +66 -0
- package/pennyfarthing-dist/scripts/hooks/otel-auto-config.sh +35 -0
- package/pennyfarthing-dist/scripts/hooks/post-merge.sh +166 -0
- package/pennyfarthing-dist/scripts/hooks/pre-commit.sh +50 -0
- package/pennyfarthing-dist/scripts/hooks/pre-edit-check.sh +71 -0
- package/pennyfarthing-dist/scripts/hooks/pre-push.sh +54 -0
- package/pennyfarthing-dist/scripts/hooks/session-start.sh +98 -0
- package/pennyfarthing-dist/scripts/hooks/session-stop.sh +59 -0
- package/pennyfarthing-dist/scripts/install-git-hooks.sh +91 -0
- package/pennyfarthing-dist/scripts/prime.sh +161 -0
- package/pennyfarthing-dist/scripts/release.sh +198 -0
- package/pennyfarthing-dist/scripts/repo-utils.sh +778 -0
- package/pennyfarthing-dist/scripts/run-ci.sh +219 -0
- package/pennyfarthing-dist/scripts/run.sh +65 -0
- package/pennyfarthing-dist/scripts/statusline.sh +264 -0
- package/pennyfarthing-dist/scripts/tests/check.test.sh +582 -0
- package/pennyfarthing-dist/scripts/tests/test-character-voice.sh +107 -0
- package/pennyfarthing-dist/scripts/tests/test-drift-detection.sh +597 -0
- package/pennyfarthing-dist/scripts/tests/test-post-merge-hook.sh +514 -0
- package/pennyfarthing-dist/scripts/tests/test-session-checkpoint.sh +517 -0
- package/pennyfarthing-dist/scripts/tests/test-solo-command.sh +331 -0
- package/pennyfarthing-dist/scripts/uninstall.sh +271 -0
- package/pennyfarthing-dist/scripts/utils/background-tasks.sh +177 -0
- package/pennyfarthing-dist/scripts/utils/check-status.sh +251 -0
- package/pennyfarthing-dist/scripts/utils/checkpoint.sh +136 -0
- package/pennyfarthing-dist/scripts/utils/common.sh +157 -0
- package/pennyfarthing-dist/scripts/utils/create-feature-branches.sh +230 -0
- package/pennyfarthing-dist/scripts/utils/file-lock.sh +269 -0
- package/pennyfarthing-dist/scripts/utils/find-related-work.sh +231 -0
- package/pennyfarthing-dist/scripts/utils/find-root.sh +33 -0
- package/pennyfarthing-dist/scripts/utils/generate-skill-docs.sh +110 -0
- package/pennyfarthing-dist/scripts/utils/git-status-all.sh +127 -0
- package/pennyfarthing-dist/scripts/utils/ground-truth-judge.py +289 -0
- package/pennyfarthing-dist/scripts/utils/jira/jira-lib.mjs +443 -0
- package/pennyfarthing-dist/scripts/utils/jira/jira-sync-story.mjs +208 -0
- package/pennyfarthing-dist/scripts/utils/jira/jira-sync.mjs +198 -0
- package/pennyfarthing-dist/scripts/utils/jira-claim-story.sh +162 -0
- package/pennyfarthing-dist/scripts/utils/jira-lib.sh +463 -0
- package/pennyfarthing-dist/scripts/utils/jira-sync-story.sh +8 -0
- package/pennyfarthing-dist/scripts/utils/jira-sync.sh +8 -0
- package/pennyfarthing-dist/scripts/utils/log-skill-usage.sh +74 -0
- package/pennyfarthing-dist/scripts/utils/logging.sh +186 -0
- package/pennyfarthing-dist/scripts/utils/repo-scan.sh +141 -0
- package/pennyfarthing-dist/scripts/utils/retry.sh +76 -0
- package/pennyfarthing-dist/scripts/utils/run-timestamp.sh +7 -0
- package/pennyfarthing-dist/scripts/utils/session-cleanup.sh +319 -0
- package/pennyfarthing-dist/scripts/utils/skill-usage-report.sh +193 -0
- package/pennyfarthing-dist/scripts/utils/sprint-common.sh +286 -0
- package/pennyfarthing-dist/scripts/utils/sprint-metrics.sh +241 -0
- package/pennyfarthing-dist/scripts/utils/swebench-judge.py +400 -0
- package/pennyfarthing-dist/scripts/utils/sync-epic-to-jira.sh +16 -0
- package/pennyfarthing-dist/scripts/utils/test-setup.sh +337 -0
- package/pennyfarthing-dist/scripts/utils/validate-subagent-frontmatter.sh +160 -0
- package/pennyfarthing-dist/scripts/worktree-manager.sh +498 -0
- package/pennyfarthing-dist/skills/agentic-patterns/SKILL.md +236 -0
- package/pennyfarthing-dist/skills/changelog/SKILL.md +367 -0
- package/pennyfarthing-dist/skills/code-review/SKILL.md +168 -0
- package/pennyfarthing-dist/skills/context-engineering/SKILL.md +268 -0
- package/pennyfarthing-dist/skills/cyclist/SKILL.md +117 -0
- package/pennyfarthing-dist/skills/dev-patterns/SKILL.md +421 -0
- package/pennyfarthing-dist/skills/finalize-run/SKILL.md +258 -0
- package/pennyfarthing-dist/skills/jira/SKILL.md +281 -0
- package/pennyfarthing-dist/skills/judge/SKILL.md +524 -0
- package/pennyfarthing-dist/skills/just/SKILL.md +160 -0
- package/pennyfarthing-dist/skills/mermaid/SKILL.md +240 -0
- package/pennyfarthing-dist/skills/otel/skill.md +222 -0
- package/pennyfarthing-dist/skills/permissions/skill.md +172 -0
- package/pennyfarthing-dist/skills/persona-benchmark/SKILL.md +173 -0
- package/pennyfarthing-dist/skills/skill-registry.schema.json +102 -0
- package/pennyfarthing-dist/skills/skill-registry.yaml +335 -0
- package/pennyfarthing-dist/skills/sprint-context/SKILL.md +120 -0
- package/pennyfarthing-dist/skills/story-management/SKILL.md +208 -0
- package/pennyfarthing-dist/skills/testing/SKILL.md +99 -0
- package/pennyfarthing-dist/skills/testing/references/troubleshooting.md +124 -0
- package/pennyfarthing-dist/skills/theme/skill.md +129 -0
- package/pennyfarthing-dist/skills/theme-creation/SKILL.md +169 -0
- package/pennyfarthing-dist/skills/workflow/SKILL.md +160 -0
- package/pennyfarthing-dist/skills/yq/SKILL.md +264 -0
- package/pennyfarthing-dist/templates/LEADERBOARD.schema.yaml +187 -0
- package/pennyfarthing-dist/templates/LEADERBOARD.template.md +59 -0
- package/pennyfarthing-dist/templates/agent-scopes.yaml.template +276 -0
- package/pennyfarthing-dist/templates/pennyfarthing-settings.yaml.template +61 -0
- package/pennyfarthing-dist/templates/persona-config.yaml.template +22 -0
- package/pennyfarthing-dist/templates/preferences.yaml.template +15 -0
- package/pennyfarthing-dist/templates/settings.local.json.template +90 -0
- package/pennyfarthing-dist/templates/setup-env.sh.template +18 -0
- package/pennyfarthing-dist/templates/shared-context.md.template +70 -0
- package/pennyfarthing-dist/templates/sidecar/decisions.md.template +40 -0
- package/pennyfarthing-dist/templates/sidecar/gotchas.md.template +37 -0
- package/pennyfarthing-dist/templates/sidecar/patterns.md.template +34 -0
- package/pennyfarthing-dist/workflows/agent-docs.yaml +70 -0
- package/pennyfarthing-dist/workflows/bdd.yaml +58 -0
- package/pennyfarthing-dist/workflows/tdd.yaml +50 -0
- package/pennyfarthing-dist/workflows/trivial.yaml +40 -0
|
@@ -0,0 +1,524 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: judge
|
|
3
|
+
description: Evaluate agent responses using standardized rubrics. Invoke with mode and response data.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Judge Skill
|
|
7
|
+
|
|
8
|
+
Canonical evaluation of agent responses. All judging goes through this skill.
|
|
9
|
+
|
|
10
|
+
## Invocation
|
|
11
|
+
|
|
12
|
+
```
|
|
13
|
+
/judge --mode <mode> --data <json>
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
**Modes:**
|
|
17
|
+
- `solo` - Single response, absolute rubric (or checklist if baseline_issues provided)
|
|
18
|
+
- `compare` - Two responses, comparative rubric
|
|
19
|
+
- `phase-sm` - Relay SM phase rubric
|
|
20
|
+
- `phase-tea` - Relay TEA phase rubric
|
|
21
|
+
- `phase-dev` - Relay Dev phase rubric
|
|
22
|
+
- `phase-reviewer` - Relay Reviewer phase rubric
|
|
23
|
+
- `coherence` - Relay chain coherence rating
|
|
24
|
+
|
|
25
|
+
## Unified Rubric (solo/compare)
|
|
26
|
+
|
|
27
|
+
| Dimension | Weight | Criteria |
|
|
28
|
+
|-----------|--------|----------|
|
|
29
|
+
| **Correctness** | 25% | Technical accuracy. Right issues? Valid solutions? |
|
|
30
|
+
| **Depth** | 25% | Thoroughness. Root causes? Implications? |
|
|
31
|
+
| **Quality** | 25% | Clarity and actionability. Organized? Useful? |
|
|
32
|
+
| **Persona** | 25% | Character embodiment. Consistent? Added value? |
|
|
33
|
+
|
|
34
|
+
**Formula:** `(correctness × 2.5) + (depth × 2.5) + (quality × 2.5) + (persona × 2.5) = WEIGHTED_TOTAL`
|
|
35
|
+
|
|
36
|
+
## Relay Phase Rubrics
|
|
37
|
+
|
|
38
|
+
### SM Phase
|
|
39
|
+
| Dimension | Weight |
|
|
40
|
+
|-----------|--------|
|
|
41
|
+
| Clarity | 30% |
|
|
42
|
+
| Handoff | 40% |
|
|
43
|
+
| Completeness | 30% |
|
|
44
|
+
|
|
45
|
+
### TEA Phase
|
|
46
|
+
| Dimension | Weight |
|
|
47
|
+
|-----------|--------|
|
|
48
|
+
| Coverage | 35% |
|
|
49
|
+
| RED State | 35% |
|
|
50
|
+
| Handoff | 30% |
|
|
51
|
+
|
|
52
|
+
### Dev Phase
|
|
53
|
+
| Dimension | Weight |
|
|
54
|
+
|-----------|--------|
|
|
55
|
+
| GREEN State | 40% |
|
|
56
|
+
| Code Quality | 30% |
|
|
57
|
+
| Handoff | 30% |
|
|
58
|
+
|
|
59
|
+
### Reviewer Phase
|
|
60
|
+
| Dimension | Weight |
|
|
61
|
+
|-----------|--------|
|
|
62
|
+
| Detection | 40% |
|
|
63
|
+
| Verdict | 30% |
|
|
64
|
+
| Persona | 30% |
|
|
65
|
+
|
|
66
|
+
### Chain Coherence
|
|
67
|
+
| Rating | Multiplier |
|
|
68
|
+
|--------|------------|
|
|
69
|
+
| excellent | 1.2x |
|
|
70
|
+
| good | 1.0x |
|
|
71
|
+
| poor | 0.8x |
|
|
72
|
+
|
|
73
|
+
## On Invoke
|
|
74
|
+
|
|
75
|
+
### Step 1: Parse Arguments
|
|
76
|
+
|
|
77
|
+
Extract:
|
|
78
|
+
- `mode`: One of the modes listed above
|
|
79
|
+
- `data`: JSON object with required fields for that mode
|
|
80
|
+
|
|
81
|
+
**Data requirements by mode:**
|
|
82
|
+
|
|
83
|
+
| Mode | Required Fields | Optional Fields |
|
|
84
|
+
|------|-----------------|-----------------|
|
|
85
|
+
| solo | `spec`, `character`, `challenge`, `response` | `code`, `baseline_issues`, `baseline_criteria`, `bonus_issues`, `bonus_criteria` |
|
|
86
|
+
| compare | `contestants[]` (each with spec, character, response), `challenge` | `baseline_issues`, `baseline_criteria` |
|
|
87
|
+
| phase-* | `team1`, `team2` (each with theme, response), `context` | |
|
|
88
|
+
| coherence | `theme`, `sm_response`, `tea_response`, `dev_response`, `reviewer_response` | |
|
|
89
|
+
|
|
90
|
+
**Note:** When checklist data is provided, solo mode uses checklist-based evaluation:
|
|
91
|
+
- `baseline_issues` → code-review, tea, dev scenarios (things to FIND)
|
|
92
|
+
- `baseline_criteria` → SM scenarios (behaviors to DEMONSTRATE)
|
|
93
|
+
- `bonus_issues` / `bonus_criteria` → Extra credit items (optional)
|
|
94
|
+
|
|
95
|
+
### Step 2: Build Judge Prompt
|
|
96
|
+
|
|
97
|
+
Based on mode, construct the appropriate prompt:
|
|
98
|
+
|
|
99
|
+
#### Solo Mode Prompt
|
|
100
|
+
|
|
101
|
+
**If NO baseline_issues provided, use generic rubric:**
|
|
102
|
+
|
|
103
|
+
```
|
|
104
|
+
You are an impartial judge evaluating an AI agent's response.
|
|
105
|
+
|
|
106
|
+
## Contestant
|
|
107
|
+
- **{spec}** ({character})
|
|
108
|
+
|
|
109
|
+
## Challenge
|
|
110
|
+
{challenge}
|
|
111
|
+
|
|
112
|
+
## Response
|
|
113
|
+
{response}
|
|
114
|
+
|
|
115
|
+
## Evaluation
|
|
116
|
+
|
|
117
|
+
Score 1-10 on each dimension:
|
|
118
|
+
|
|
119
|
+
1. **Correctness (25%)** - Technical accuracy
|
|
120
|
+
2. **Depth (25%)** - Thoroughness
|
|
121
|
+
3. **Quality (25%)** - Clarity and actionability
|
|
122
|
+
4. **Persona (25%)** - Character embodiment
|
|
123
|
+
|
|
124
|
+
Formula: (correctness × 2.5) + (depth × 2.5) + (quality × 2.5) + (persona × 2.5) = WEIGHTED_TOTAL
|
|
125
|
+
|
|
126
|
+
**IMPORTANT: Output your evaluation as JSON only. No markdown, no extra text.**
|
|
127
|
+
|
|
128
|
+
```json
|
|
129
|
+
{
|
|
130
|
+
"scores": {
|
|
131
|
+
"correctness": { "value": 8, "reasoning": "..." },
|
|
132
|
+
"depth": { "value": 7, "reasoning": "..." },
|
|
133
|
+
"quality": { "value": 9, "reasoning": "..." },
|
|
134
|
+
"persona": { "value": 8, "reasoning": "..." }
|
|
135
|
+
},
|
|
136
|
+
"weighted_total": 80.0,
|
|
137
|
+
"assessment": "2-3 sentence overall assessment"
|
|
138
|
+
}
|
|
139
|
+
```
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
**If baseline_issues IS provided, use checklist rubric (v2 - precision/recall):**
|
|
143
|
+
|
|
144
|
+
```
|
|
145
|
+
You are an impartial judge evaluating an AI agent's response against a checklist of expected findings.
|
|
146
|
+
|
|
147
|
+
## Contestant
|
|
148
|
+
- **{spec}** ({character})
|
|
149
|
+
|
|
150
|
+
## Challenge
|
|
151
|
+
{challenge}
|
|
152
|
+
|
|
153
|
+
{if code provided}
|
|
154
|
+
## Code Under Review
|
|
155
|
+
{code}
|
|
156
|
+
{endif}
|
|
157
|
+
|
|
158
|
+
## Expected Findings
|
|
159
|
+
|
|
160
|
+
Below are the known issues/requirements. Severity indicates weight:
|
|
161
|
+
- CRITICAL: weight 15 (must find)
|
|
162
|
+
- HIGH: weight 10 (should find)
|
|
163
|
+
- MEDIUM: weight 5 (good to find)
|
|
164
|
+
- LOW: weight 2 (bonus)
|
|
165
|
+
- (unlabeled categories like happy_path, validation: weight 5 each)
|
|
166
|
+
|
|
167
|
+
{baseline_issues formatted as checklist}
|
|
168
|
+
|
|
169
|
+
## Response to Evaluate
|
|
170
|
+
{response}
|
|
171
|
+
|
|
172
|
+
## Evaluation Instructions
|
|
173
|
+
|
|
174
|
+
Evaluate the response and output ONLY valid JSON (no markdown, no extra text):
|
|
175
|
+
|
|
176
|
+
```json
|
|
177
|
+
{
|
|
178
|
+
"baseline_findings": [
|
|
179
|
+
{"id": "ISSUE_ID", "severity": "critical|high|medium|low", "found": true, "evidence": "quote or null"}
|
|
180
|
+
],
|
|
181
|
+
"novel_findings": [
|
|
182
|
+
{"description": "...", "valid": true, "reasoning": "..."}
|
|
183
|
+
],
|
|
184
|
+
"false_positives": [
|
|
185
|
+
{"claim": "...", "why_invalid": "..."}
|
|
186
|
+
],
|
|
187
|
+
"detection": {
|
|
188
|
+
"by_severity": {
|
|
189
|
+
"critical": {"found": 5, "total": 6},
|
|
190
|
+
"high": {"found": 4, "total": 6},
|
|
191
|
+
"medium": {"found": 3, "total": 8},
|
|
192
|
+
"low": {"found": 1, "total": 2}
|
|
193
|
+
},
|
|
194
|
+
"novel_valid": 2,
|
|
195
|
+
"false_positive_count": 1,
|
|
196
|
+
"metrics": {
|
|
197
|
+
"weighted_found": 98,
|
|
198
|
+
"weighted_total": 120,
|
|
199
|
+
"recall": 0.817,
|
|
200
|
+
"precision": 0.929,
|
|
201
|
+
"f2_score": 0.843
|
|
202
|
+
},
|
|
203
|
+
"components": {
|
|
204
|
+
"recall_score": 24.5,
|
|
205
|
+
"precision_score": 9.3,
|
|
206
|
+
"novel_bonus": 6.0
|
|
207
|
+
},
|
|
208
|
+
"subtotal": 39.8
|
|
209
|
+
},
|
|
210
|
+
"quality": {
|
|
211
|
+
"clear_explanations": 8,
|
|
212
|
+
"actionable_fixes": 7,
|
|
213
|
+
"subtotal": 18.75
|
|
214
|
+
},
|
|
215
|
+
"persona": {
|
|
216
|
+
"in_character": 9,
|
|
217
|
+
"professional_tone": 8,
|
|
218
|
+
"subtotal": 21.25
|
|
219
|
+
},
|
|
220
|
+
"weighted_total": 79.8,
|
|
221
|
+
"assessment": "2-3 sentence summary of strengths and gaps"
|
|
222
|
+
}
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
## Detection Scoring Rules (v2 - Precision/Recall)
|
|
226
|
+
|
|
227
|
+
**Severity Weights:**
|
|
228
|
+
- critical: 15, high: 10, medium: 5, low: 2
|
|
229
|
+
|
|
230
|
+
**Metric Calculations:**
|
|
231
|
+
```
|
|
232
|
+
weighted_found = Σ(found_issues × severity_weight)
|
|
233
|
+
weighted_total = Σ(all_baseline_issues × severity_weight)
|
|
234
|
+
|
|
235
|
+
recall = weighted_found / weighted_total
|
|
236
|
+
precision = true_positives / (true_positives + false_positives)
|
|
237
|
+
f2_score = 5 × (precision × recall) / (4 × precision + recall)
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
**Component Scores (Detection = 50 max):**
|
|
241
|
+
```
|
|
242
|
+
recall_score = recall × 30 # max 30 pts - coverage matters most
|
|
243
|
+
precision_score = precision × 10 # max 10 pts - penalizes hallucinations
|
|
244
|
+
novel_bonus = min(novel_valid × 3, 10) # max 10 pts - rewards thoroughness
|
|
245
|
+
|
|
246
|
+
detection.subtotal = recall_score + precision_score + novel_bonus
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
**Why this design:**
|
|
250
|
+
- **Recall weighted 3x precision**: Missing a critical vulnerability is worse than a false positive
|
|
251
|
+
- **Severity-weighted recall**: Finding 5 critical issues > finding 5 low issues
|
|
252
|
+
- **Separate novel bonus**: Rewards thoroughness beyond baseline without affecting precision
|
|
253
|
+
- **Visible metrics**: recall, precision, f2_score all reported for transparency
|
|
254
|
+
|
|
255
|
+
**Example Calculations:**
|
|
256
|
+
```
|
|
257
|
+
Scenario: 6 critical (90 pts), 6 high (60 pts), 8 medium (40 pts), 2 low (4 pts) = 194 weighted total
|
|
258
|
+
Agent finds: 5 critical, 4 high, 3 medium, 1 low = 75+40+15+2 = 132 weighted found
|
|
259
|
+
Agent flags: 14 true positives, 1 false positive, 2 valid novel findings
|
|
260
|
+
|
|
261
|
+
recall = 132/194 = 0.680
|
|
262
|
+
precision = 14/15 = 0.933
|
|
263
|
+
f2_score = 5 × (0.933 × 0.680) / (4 × 0.933 + 0.680) = 0.718
|
|
264
|
+
|
|
265
|
+
recall_score = 0.680 × 30 = 20.4
|
|
266
|
+
precision_score = 0.933 × 10 = 9.3
|
|
267
|
+
novel_bonus = min(2 × 3, 10) = 6.0
|
|
268
|
+
|
|
269
|
+
detection.subtotal = 20.4 + 9.3 + 6.0 = 35.7
|
|
270
|
+
```
|
|
271
|
+
|
|
272
|
+
**Other Dimensions:**
|
|
273
|
+
- Quality (25 max): (clear_explanations/10 × 12.5) + (actionable_fixes/10 × 12.5)
|
|
274
|
+
- Persona (25 max): (in_character/10 × 12.5) + (professional_tone/10 × 12.5)
|
|
275
|
+
- weighted_total = detection.subtotal + quality.subtotal + persona.subtotal
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
**Checklist Scoring Notes:**
|
|
279
|
+
- **Recall dominates** (30/50 pts): Comprehensive coverage is primary goal
|
|
280
|
+
- **Precision matters** (10/50 pts): Penalizes hallucinated issues proportionally
|
|
281
|
+
- **Novel findings rewarded** (10/50 pts): Encourages going beyond baseline
|
|
282
|
+
- **Severity-weighted**: Critical issues count 7.5x more than low issues
|
|
283
|
+
- **Transparent metrics**: All intermediate values visible for debugging
|
|
284
|
+
- Quality/Persona still matter (25% each) - not just about finding issues
|
|
285
|
+
|
|
286
|
+
**If baseline_criteria IS provided (SM scenarios), use behavior checklist:**
|
|
287
|
+
|
|
288
|
+
```
|
|
289
|
+
You are an impartial judge evaluating an AI agent's facilitation/management response.
|
|
290
|
+
|
|
291
|
+
## Contestant
|
|
292
|
+
- **{spec}** ({character})
|
|
293
|
+
|
|
294
|
+
## Challenge
|
|
295
|
+
{challenge}
|
|
296
|
+
|
|
297
|
+
## Expected Behaviors
|
|
298
|
+
|
|
299
|
+
Below are the behaviors a good response should demonstrate:
|
|
300
|
+
|
|
301
|
+
**BASELINE CRITERIA (5 pts each):**
|
|
302
|
+
{baseline_criteria formatted by category}
|
|
303
|
+
|
|
304
|
+
**BONUS CRITERIA (3 pts each, if present):**
|
|
305
|
+
{bonus_criteria formatted, or "None specified"}
|
|
306
|
+
|
|
307
|
+
## Response to Evaluate
|
|
308
|
+
{response}
|
|
309
|
+
|
|
310
|
+
## Evaluation Instructions
|
|
311
|
+
|
|
312
|
+
Evaluate the response and output ONLY valid JSON (no markdown, no extra text):
|
|
313
|
+
|
|
314
|
+
```json
|
|
315
|
+
{
|
|
316
|
+
"baseline_behaviors": [
|
|
317
|
+
{"id": "BEHAVIOR_ID", "category": "...", "demonstrated": true, "evidence": "quote or null"}
|
|
318
|
+
],
|
|
319
|
+
"bonus_behaviors": [
|
|
320
|
+
{"id": "BONUS_ID", "category": "...", "demonstrated": true, "evidence": "quote or null"}
|
|
321
|
+
],
|
|
322
|
+
"execution": {
|
|
323
|
+
"baseline_count": 8,
|
|
324
|
+
"bonus_count": 2,
|
|
325
|
+
"subtotal": 46
|
|
326
|
+
},
|
|
327
|
+
"quality": {
|
|
328
|
+
"clear_actionable": 8,
|
|
329
|
+
"well_structured": 7,
|
|
330
|
+
"subtotal": 18.75
|
|
331
|
+
},
|
|
332
|
+
"persona": {
|
|
333
|
+
"in_character": 9,
|
|
334
|
+
"enhances_delivery": 8,
|
|
335
|
+
"subtotal": 21.25
|
|
336
|
+
},
|
|
337
|
+
"weighted_total": 86.0,
|
|
338
|
+
"assessment": "2-3 sentence summary of facilitation effectiveness"
|
|
339
|
+
}
|
|
340
|
+
```
|
|
341
|
+
|
|
342
|
+
Scoring rules:
|
|
343
|
+
- Execution (50 max): baseline×5 (cap 40) + bonus×3 (cap 10)
|
|
344
|
+
- Quality (25 max): (clear_actionable/10 × 12.5) + (well_structured/10 × 12.5)
|
|
345
|
+
- Persona (25 max): (in_character/10 × 12.5) + (enhances_delivery/10 × 12.5)
|
|
346
|
+
- weighted_total = execution.subtotal + quality.subtotal + persona.subtotal
|
|
347
|
+
```
|
|
348
|
+
|
|
349
|
+
#### Compare Mode Prompt
|
|
350
|
+
|
|
351
|
+
```
|
|
352
|
+
You are an impartial judge comparing two AI personas.
|
|
353
|
+
|
|
354
|
+
## Contestants
|
|
355
|
+
- **{spec1}** ({character1})
|
|
356
|
+
- **{spec2}** ({character2})
|
|
357
|
+
|
|
358
|
+
## Challenge
|
|
359
|
+
{challenge}
|
|
360
|
+
|
|
361
|
+
## Response from {character1}
|
|
362
|
+
{response1}
|
|
363
|
+
|
|
364
|
+
## Response from {character2}
|
|
365
|
+
{response2}
|
|
366
|
+
|
|
367
|
+
## Evaluation
|
|
368
|
+
|
|
369
|
+
Score both on each dimension (1-10). Output ONLY valid JSON (no markdown, no extra text):
|
|
370
|
+
|
|
371
|
+
```json
|
|
372
|
+
{
|
|
373
|
+
"contestants": {
|
|
374
|
+
"{spec1}": {
|
|
375
|
+
"scores": {
|
|
376
|
+
"correctness": { "value": 8, "reasoning": "..." },
|
|
377
|
+
"depth": { "value": 7, "reasoning": "..." },
|
|
378
|
+
"quality": { "value": 9, "reasoning": "..." },
|
|
379
|
+
"persona": { "value": 8, "reasoning": "..." }
|
|
380
|
+
},
|
|
381
|
+
"weighted_total": 80.0
|
|
382
|
+
},
|
|
383
|
+
"{spec2}": {
|
|
384
|
+
"scores": {
|
|
385
|
+
"correctness": { "value": 7, "reasoning": "..." },
|
|
386
|
+
"depth": { "value": 8, "reasoning": "..." },
|
|
387
|
+
"quality": { "value": 7, "reasoning": "..." },
|
|
388
|
+
"persona": { "value": 9, "reasoning": "..." }
|
|
389
|
+
},
|
|
390
|
+
"weighted_total": 77.5
|
|
391
|
+
}
|
|
392
|
+
},
|
|
393
|
+
"winner": "{spec1}",
|
|
394
|
+
"justification": "Brief explanation of why winner was chosen"
|
|
395
|
+
}
|
|
396
|
+
```
|
|
397
|
+
```
|
|
398
|
+
|
|
399
|
+
#### Phase Mode Prompts
|
|
400
|
+
|
|
401
|
+
Use phase-specific rubrics from tables above. Evaluate both teams. Output JSON format.
|
|
402
|
+
|
|
403
|
+
#### Coherence Mode Prompt
|
|
404
|
+
|
|
405
|
+
```
|
|
406
|
+
Evaluate chain coherence for {theme}.
|
|
407
|
+
|
|
408
|
+
## Chain
|
|
409
|
+
SM: {sm_response}
|
|
410
|
+
TEA: {tea_response}
|
|
411
|
+
Dev: {dev_response}
|
|
412
|
+
Reviewer: {reviewer_response}
|
|
413
|
+
|
|
414
|
+
Output ONLY valid JSON (no markdown, no extra text):
|
|
415
|
+
|
|
416
|
+
```json
|
|
417
|
+
{
|
|
418
|
+
"rating": "excellent|good|poor",
|
|
419
|
+
"reasoning": "explanation of coherence assessment"
|
|
420
|
+
}
|
|
421
|
+
```
|
|
422
|
+
```
|
|
423
|
+
|
|
424
|
+
### Step 3: Execute Judge via CLI
|
|
425
|
+
|
|
426
|
+
**CRITICAL: Follow this execution pattern for all contexts (main session, skills, subagents).**
|
|
427
|
+
|
|
428
|
+
**Three rules to avoid shell parsing errors:**
|
|
429
|
+
|
|
430
|
+
1. **Use Write tool for prompt files** - NOT `echo` in Bash (handles special characters)
|
|
431
|
+
2. **Use file redirection for output** - NOT variable capture `$(...)` (avoids zsh parse errors)
|
|
432
|
+
3. **Use pipe syntax** - NOT heredocs (works in subagents)
|
|
433
|
+
|
|
434
|
+
**Why variable capture fails:**
|
|
435
|
+
```bash
|
|
436
|
+
# This FAILS - zsh tries to parse JSON with () characters
|
|
437
|
+
OUTPUT=$(cat prompt.txt | claude -p --output-format json --tools "")
|
|
438
|
+
# Error: parse error near ')'
|
|
439
|
+
```
|
|
440
|
+
|
|
441
|
+
**Correct pattern:**
|
|
442
|
+
|
|
443
|
+
```bash
|
|
444
|
+
# Step 1: Use Write tool to create prompt file (NOT echo in Bash)
|
|
445
|
+
# The Write tool handles escaping properly in all contexts
|
|
446
|
+
|
|
447
|
+
# Step 2: Capture timestamp (simple command, safe to capture)
|
|
448
|
+
date -u +%Y-%m-%dT%H:%M:%SZ > .scratch/judge_ts.txt
|
|
449
|
+
|
|
450
|
+
# Step 3: Execute with FILE REDIRECTION (NOT variable capture)
|
|
451
|
+
cat .scratch/judge_prompt.txt | claude -p --output-format json --tools "" > .scratch/judge_output.json
|
|
452
|
+
|
|
453
|
+
# Step 4: Extract from files (reading files is always safe)
|
|
454
|
+
JUDGE_RESPONSE=$(jq -r '.result' .scratch/judge_output.json)
|
|
455
|
+
JUDGE_INPUT_TOKENS=$(jq -r '.usage.input_tokens // 0' .scratch/judge_output.json)
|
|
456
|
+
JUDGE_OUTPUT_TOKENS=$(jq -r '.usage.output_tokens // 0' .scratch/judge_output.json)
|
|
457
|
+
```
|
|
458
|
+
|
|
459
|
+
**Key insight:** The shell never parses the JSON when using file redirection.
|
|
460
|
+
The output goes directly to a file, then jq reads it safely.
|
|
461
|
+
|
|
462
|
+
### Step 4: Extract Scores
|
|
463
|
+
|
|
464
|
+
```bash
|
|
465
|
+
# All modes now output JSON - parse with jq
|
|
466
|
+
# Solo mode
|
|
467
|
+
SCORE=$(echo "$JUDGE_RESPONSE" | jq -r '.weighted_total // empty')
|
|
468
|
+
|
|
469
|
+
# Compare mode
|
|
470
|
+
SCORE1=$(echo "$JUDGE_RESPONSE" | jq -r '.contestants["{spec1}"].weighted_total // empty')
|
|
471
|
+
SCORE2=$(echo "$JUDGE_RESPONSE" | jq -r '.contestants["{spec2}"].weighted_total // empty')
|
|
472
|
+
WINNER=$(echo "$JUDGE_RESPONSE" | jq -r '.winner // empty')
|
|
473
|
+
|
|
474
|
+
# Coherence mode
|
|
475
|
+
RATING=$(echo "$JUDGE_RESPONSE" | jq -r '.rating // empty')
|
|
476
|
+
|
|
477
|
+
# Fallback: try grep if JSON parsing fails (backwards compatibility)
|
|
478
|
+
if [[ -z "$SCORE" ]]; then
|
|
479
|
+
SCORE=$(echo "$JUDGE_RESPONSE" | grep -oE "weighted_total[\"':]*\s*([0-9.]+)" | grep -oE "[0-9.]+" | tail -1)
|
|
480
|
+
fi
|
|
481
|
+
```
|
|
482
|
+
|
|
483
|
+
### Step 5: Validate Results
|
|
484
|
+
|
|
485
|
+
| Check | Requirement |
|
|
486
|
+
|-------|-------------|
|
|
487
|
+
| `JUDGE_TIMESTAMP` | Valid ISO8601 |
|
|
488
|
+
| `JUDGE_RESPONSE` | At least 200 chars |
|
|
489
|
+
| `SCORE` (if applicable) | Number 1-100 |
|
|
490
|
+
| `RATING` (if coherence) | One of: excellent, good, poor |
|
|
491
|
+
| `JUDGE_INPUT_TOKENS` | > 0 |
|
|
492
|
+
| `JUDGE_OUTPUT_TOKENS` | > 0 |
|
|
493
|
+
|
|
494
|
+
**If validation fails:** Return error, do NOT estimate.
|
|
495
|
+
|
|
496
|
+
### Step 6: Return Results
|
|
497
|
+
|
|
498
|
+
Output structured result for caller:
|
|
499
|
+
|
|
500
|
+
```json
|
|
501
|
+
{
|
|
502
|
+
"success": true,
|
|
503
|
+
"mode": "{mode}",
|
|
504
|
+
"timestamp": "{JUDGE_TIMESTAMP}",
|
|
505
|
+
"scores": {
|
|
506
|
+
"{spec1}": {score1},
|
|
507
|
+
"{spec2}": {score2}
|
|
508
|
+
},
|
|
509
|
+
"winner": "{winner_spec}",
|
|
510
|
+
"token_usage": {
|
|
511
|
+
"input": {JUDGE_INPUT_TOKENS},
|
|
512
|
+
"output": {JUDGE_OUTPUT_TOKENS}
|
|
513
|
+
},
|
|
514
|
+
"response_text": "{JUDGE_RESPONSE}"
|
|
515
|
+
}
|
|
516
|
+
```
|
|
517
|
+
|
|
518
|
+
## Error Handling
|
|
519
|
+
|
|
520
|
+
```
|
|
521
|
+
❌ Judge validation failed: {reason}
|
|
522
|
+
❌ Mode: {mode}
|
|
523
|
+
❌ DO NOT estimate scores
|
|
524
|
+
```
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: just-runner
|
|
3
|
+
description: Run just recipes for project tasks. This skill should be used when starting dev servers, running tests, managing databases, checking project health, or writing new justfile recipes.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Just Command Runner Skill
|
|
7
|
+
|
|
8
|
+
## When to Use This Skill
|
|
9
|
+
|
|
10
|
+
- Starting/stopping development servers
|
|
11
|
+
- Running tests
|
|
12
|
+
- Managing databases (start, stop, reset, seed)
|
|
13
|
+
- Checking service health/status
|
|
14
|
+
- Writing new justfile recipes
|
|
15
|
+
|
|
16
|
+
## Overview
|
|
17
|
+
|
|
18
|
+
`just` is a command runner (like `make` but simpler). Commands run from the **project root** unless otherwise specified.
|
|
19
|
+
|
|
20
|
+
**Installation:** `brew install just` or `cargo install just`
|
|
21
|
+
|
|
22
|
+
## Getting Help
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
just help # Show categorized commands with descriptions
|
|
26
|
+
just --list # List all recipes without descriptions
|
|
27
|
+
just --show <recipe> # Show recipe definition
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## Common Recipe Patterns
|
|
31
|
+
|
|
32
|
+
### Development
|
|
33
|
+
```bash
|
|
34
|
+
just dev # Start development environment
|
|
35
|
+
just dev-start # Start all services
|
|
36
|
+
just dev-stop # Stop all services
|
|
37
|
+
just dev-status # Check service status
|
|
38
|
+
just dev-logs # Tail logs
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
### Testing
|
|
42
|
+
```bash
|
|
43
|
+
just test # Run all tests
|
|
44
|
+
just test-setup # Setup test infrastructure
|
|
45
|
+
just test-api # Backend tests only
|
|
46
|
+
just test-ui # Frontend tests only
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### Database
|
|
50
|
+
```bash
|
|
51
|
+
just db-start # Start database services
|
|
52
|
+
just db-stop # Stop database services
|
|
53
|
+
just db-reset # Reset databases (DESTRUCTIVE)
|
|
54
|
+
just db-seed # Seed with test data
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
## Passing Arguments
|
|
58
|
+
|
|
59
|
+
Just recipes accept arguments directly (NO `--` separator needed):
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
# Correct
|
|
63
|
+
just test-api -run TestName ./...
|
|
64
|
+
just build --release
|
|
65
|
+
|
|
66
|
+
# WRONG - don't use --
|
|
67
|
+
just test-api -- -run TestName
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
## Writing Custom Recipes
|
|
71
|
+
|
|
72
|
+
### Basic Recipe
|
|
73
|
+
|
|
74
|
+
```just
|
|
75
|
+
# Recipe with description (shows in `just --list`)
|
|
76
|
+
hello:
|
|
77
|
+
echo "Hello, world!"
|
|
78
|
+
|
|
79
|
+
# Private recipe (doesn't show in list)
|
|
80
|
+
[private]
|
|
81
|
+
_helper:
|
|
82
|
+
echo "I'm hidden"
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
### Recipe with Arguments
|
|
86
|
+
|
|
87
|
+
```just
|
|
88
|
+
# Positional arguments
|
|
89
|
+
greet name:
|
|
90
|
+
echo "Hello, {{name}}!"
|
|
91
|
+
|
|
92
|
+
# With defaults
|
|
93
|
+
greet name="World":
|
|
94
|
+
echo "Hello, {{name}}!"
|
|
95
|
+
|
|
96
|
+
# Variadic arguments
|
|
97
|
+
test *args:
|
|
98
|
+
go test {{args}}
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
### Multi-line Scripts
|
|
102
|
+
|
|
103
|
+
```just
|
|
104
|
+
# Use shebang for complex scripts
|
|
105
|
+
build:
|
|
106
|
+
#!/usr/bin/env bash
|
|
107
|
+
set -euo pipefail
|
|
108
|
+
echo "Building..."
|
|
109
|
+
go build -o bin/app ./cmd/app
|
|
110
|
+
echo "Done!"
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
### Variables and Interpolation
|
|
114
|
+
|
|
115
|
+
```just
|
|
116
|
+
# Set variables
|
|
117
|
+
project := "myapp"
|
|
118
|
+
version := `git describe --tags`
|
|
119
|
+
|
|
120
|
+
# Use in recipes
|
|
121
|
+
info:
|
|
122
|
+
echo "{{project}} version {{version}}"
|
|
123
|
+
|
|
124
|
+
# Environment variables
|
|
125
|
+
export DATABASE_URL := "postgres://localhost/dev"
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
### Dependencies
|
|
129
|
+
|
|
130
|
+
```just
|
|
131
|
+
# Run `setup` before `build`
|
|
132
|
+
build: setup
|
|
133
|
+
go build ./...
|
|
134
|
+
|
|
135
|
+
# Multiple dependencies
|
|
136
|
+
deploy: build test
|
|
137
|
+
./deploy.sh
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
### Conditionals
|
|
141
|
+
|
|
142
|
+
```just
|
|
143
|
+
# Platform-specific
|
|
144
|
+
install:
|
|
145
|
+
{{ if os() == "macos" }} brew install foo {{ else }} apt install foo {{ endif }}
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
## Best Practices
|
|
149
|
+
|
|
150
|
+
1. **Use `echo -e`** for colored output (not plain `echo`)
|
|
151
|
+
2. **Use `#!/usr/bin/env bash`** shebang for multi-line scripts
|
|
152
|
+
3. **Mark internal recipes as `[private]`**
|
|
153
|
+
4. **Use `{{var}}`** for variable interpolation, not `$var`
|
|
154
|
+
5. **Extract complex logic** to scripts in `scripts/` directory
|
|
155
|
+
6. **Add descriptions** to all public recipes
|
|
156
|
+
|
|
157
|
+
## Reference Documentation
|
|
158
|
+
|
|
159
|
+
- **Justfile Syntax:** See `references/justfile-syntax.md`
|
|
160
|
+
- **Official Docs:** https://just.systems/man/en/
|