@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,240 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: mermaid
|
|
3
|
+
description: Generate diagrams using Mermaid syntax. Use this skill when creating architecture diagrams, sequence diagrams, ER diagrams, flowcharts, or any visual documentation in markdown files.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Mermaid Diagram Skill
|
|
7
|
+
|
|
8
|
+
## When to Use This Skill
|
|
9
|
+
|
|
10
|
+
- Documenting system architecture or component relationships
|
|
11
|
+
- Visualizing API request/response flows
|
|
12
|
+
- Creating database schema diagrams from models
|
|
13
|
+
- Illustrating state machines or workflows
|
|
14
|
+
- Adding visual documentation to markdown files
|
|
15
|
+
|
|
16
|
+
## Overview
|
|
17
|
+
|
|
18
|
+
Mermaid is a JavaScript-based diagramming tool that renders markdown-like syntax into diagrams. GitHub, GitLab, and many markdown editors render Mermaid blocks natively.
|
|
19
|
+
|
|
20
|
+
**No installation required** for GitHub rendering - just use fenced code blocks with `mermaid` language identifier.
|
|
21
|
+
|
|
22
|
+
## Prerequisites
|
|
23
|
+
|
|
24
|
+
### Option 1: GitHub/GitLab (Recommended)
|
|
25
|
+
No setup needed. Wrap diagrams in triple backticks with `mermaid` language:
|
|
26
|
+
|
|
27
|
+
~~~markdown
|
|
28
|
+
```mermaid
|
|
29
|
+
flowchart LR
|
|
30
|
+
A --> B
|
|
31
|
+
```
|
|
32
|
+
~~~
|
|
33
|
+
|
|
34
|
+
### Option 2: Mermaid CLI (Local Rendering)
|
|
35
|
+
```bash
|
|
36
|
+
npm install -g @mermaid-js/mermaid-cli
|
|
37
|
+
mmdc -i input.mmd -o output.svg
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
### Option 3: VS Code Extension
|
|
41
|
+
Install "Markdown Preview Mermaid Support" extension for live preview.
|
|
42
|
+
|
|
43
|
+
## Flowchart Diagrams
|
|
44
|
+
|
|
45
|
+
Use for architecture, decision trees, and process flows.
|
|
46
|
+
|
|
47
|
+
### Basic Syntax
|
|
48
|
+
```mermaid
|
|
49
|
+
flowchart TD
|
|
50
|
+
A[Rectangle] --> B(Rounded)
|
|
51
|
+
B --> C{Diamond}
|
|
52
|
+
C -->|Yes| D[Result 1]
|
|
53
|
+
C -->|No| E[Result 2]
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### Direction Options
|
|
57
|
+
- `TD` or `TB` - Top to bottom
|
|
58
|
+
- `LR` - Left to right
|
|
59
|
+
- `BT` - Bottom to top
|
|
60
|
+
- `RL` - Right to left
|
|
61
|
+
|
|
62
|
+
### Architecture Example
|
|
63
|
+
```mermaid
|
|
64
|
+
flowchart TD
|
|
65
|
+
subgraph Client
|
|
66
|
+
UI[React App]
|
|
67
|
+
end
|
|
68
|
+
subgraph Server
|
|
69
|
+
API[Express API]
|
|
70
|
+
Auth[Auth Service]
|
|
71
|
+
end
|
|
72
|
+
subgraph Data
|
|
73
|
+
DB[(PostgreSQL)]
|
|
74
|
+
Cache[(Redis)]
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
UI -->|HTTP| API
|
|
78
|
+
API --> Auth
|
|
79
|
+
API --> DB
|
|
80
|
+
API --> Cache
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
## Sequence Diagrams
|
|
84
|
+
|
|
85
|
+
Use for API flows, authentication sequences, and message passing.
|
|
86
|
+
|
|
87
|
+
### Basic Syntax
|
|
88
|
+
```mermaid
|
|
89
|
+
sequenceDiagram
|
|
90
|
+
participant C as Client
|
|
91
|
+
participant S as Server
|
|
92
|
+
participant DB as Database
|
|
93
|
+
|
|
94
|
+
C->>S: POST /api/users
|
|
95
|
+
S->>DB: INSERT user
|
|
96
|
+
DB-->>S: OK
|
|
97
|
+
S-->>C: 201 Created
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
### Arrow Types
|
|
101
|
+
- `->>` Solid line with arrowhead
|
|
102
|
+
- `-->>` Dotted line with arrowhead
|
|
103
|
+
- `-x` Solid line with X (async)
|
|
104
|
+
- `--x` Dotted line with X
|
|
105
|
+
|
|
106
|
+
### With Loops and Conditionals
|
|
107
|
+
```mermaid
|
|
108
|
+
sequenceDiagram
|
|
109
|
+
participant U as User
|
|
110
|
+
participant A as API
|
|
111
|
+
participant Auth as Auth Service
|
|
112
|
+
|
|
113
|
+
U->>A: Login request
|
|
114
|
+
A->>Auth: Validate credentials
|
|
115
|
+
|
|
116
|
+
alt Valid credentials
|
|
117
|
+
Auth-->>A: Token
|
|
118
|
+
A-->>U: 200 OK + Token
|
|
119
|
+
else Invalid
|
|
120
|
+
Auth-->>A: Error
|
|
121
|
+
A-->>U: 401 Unauthorized
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
loop Every 15 minutes
|
|
125
|
+
U->>A: Refresh token
|
|
126
|
+
A-->>U: New token
|
|
127
|
+
end
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
## ER Diagrams
|
|
131
|
+
|
|
132
|
+
Use for database schemas and entity relationships.
|
|
133
|
+
|
|
134
|
+
### Basic Syntax
|
|
135
|
+
```mermaid
|
|
136
|
+
erDiagram
|
|
137
|
+
USER ||--o{ ORDER : places
|
|
138
|
+
ORDER ||--|{ LINE_ITEM : contains
|
|
139
|
+
PRODUCT ||--o{ LINE_ITEM : "ordered in"
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
### Cardinality Notation
|
|
143
|
+
- `||` - Exactly one
|
|
144
|
+
- `o|` - Zero or one
|
|
145
|
+
- `}|` - One or more
|
|
146
|
+
- `}o` - Zero or more
|
|
147
|
+
|
|
148
|
+
### With Attributes
|
|
149
|
+
```mermaid
|
|
150
|
+
erDiagram
|
|
151
|
+
USER {
|
|
152
|
+
int id PK
|
|
153
|
+
string email UK
|
|
154
|
+
string name
|
|
155
|
+
timestamp created_at
|
|
156
|
+
}
|
|
157
|
+
ORDER {
|
|
158
|
+
int id PK
|
|
159
|
+
int user_id FK
|
|
160
|
+
decimal total
|
|
161
|
+
string status
|
|
162
|
+
}
|
|
163
|
+
USER ||--o{ ORDER : places
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
## Class Diagrams
|
|
167
|
+
|
|
168
|
+
Use for object models and component relationships.
|
|
169
|
+
|
|
170
|
+
### Basic Syntax
|
|
171
|
+
```mermaid
|
|
172
|
+
classDiagram
|
|
173
|
+
class User {
|
|
174
|
+
+int id
|
|
175
|
+
+string email
|
|
176
|
+
+login()
|
|
177
|
+
+logout()
|
|
178
|
+
}
|
|
179
|
+
class Order {
|
|
180
|
+
+int id
|
|
181
|
+
+decimal total
|
|
182
|
+
+submit()
|
|
183
|
+
}
|
|
184
|
+
User "1" --> "*" Order : places
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
### Relationship Types
|
|
188
|
+
- `<|--` Inheritance
|
|
189
|
+
- `*--` Composition
|
|
190
|
+
- `o--` Aggregation
|
|
191
|
+
- `-->` Association
|
|
192
|
+
- `..>` Dependency
|
|
193
|
+
|
|
194
|
+
## State Diagrams
|
|
195
|
+
|
|
196
|
+
Use for state machines and workflow states.
|
|
197
|
+
|
|
198
|
+
### Basic Syntax
|
|
199
|
+
```mermaid
|
|
200
|
+
stateDiagram-v2
|
|
201
|
+
[*] --> Draft
|
|
202
|
+
Draft --> Review : submit
|
|
203
|
+
Review --> Approved : approve
|
|
204
|
+
Review --> Draft : reject
|
|
205
|
+
Approved --> Published : publish
|
|
206
|
+
Published --> [*]
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
### With Nested States
|
|
210
|
+
```mermaid
|
|
211
|
+
stateDiagram-v2
|
|
212
|
+
[*] --> Active
|
|
213
|
+
|
|
214
|
+
state Active {
|
|
215
|
+
[*] --> Idle
|
|
216
|
+
Idle --> Processing : start
|
|
217
|
+
Processing --> Idle : complete
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
Active --> Suspended : suspend
|
|
221
|
+
Suspended --> Active : resume
|
|
222
|
+
Active --> [*] : terminate
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
## Best Practices
|
|
226
|
+
|
|
227
|
+
1. **Keep diagrams focused** - One concept per diagram, split complex systems into multiple diagrams
|
|
228
|
+
2. **Use meaningful labels** - `API` not `A`, `Database` not `DB` (unless space-constrained)
|
|
229
|
+
3. **Add subgraphs** for grouping related components in flowcharts
|
|
230
|
+
4. **Use aliases** in sequence diagrams (`participant C as Client`) for readability
|
|
231
|
+
5. **Include cardinality** in ER diagrams - relationships are ambiguous without it
|
|
232
|
+
6. **Test rendering** on GitHub before committing - some syntax varies between versions
|
|
233
|
+
7. **Link to details** - Diagrams show structure; link to docs for implementation details
|
|
234
|
+
|
|
235
|
+
## Reference Documentation
|
|
236
|
+
|
|
237
|
+
- **Official Docs:** https://mermaid.js.org/
|
|
238
|
+
- **Live Editor:** https://mermaid.live/
|
|
239
|
+
- **GitHub Support:** https://docs.github.com/en/get-started/writing-on-github/working-with-advanced-formatting/creating-diagrams
|
|
240
|
+
- **Syntax Reference:** https://mermaid.js.org/syntax/flowchart.html
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: otel
|
|
3
|
+
description: Claude Code OTEL telemetry format documentation. Use when working with OTEL span interception, enrichment, or correlation in Cyclist.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# OTEL Skill - Claude Code Telemetry
|
|
7
|
+
|
|
8
|
+
## Purpose
|
|
9
|
+
|
|
10
|
+
Document the actual OTEL data Claude Code emits. This is ground truth, not speculation.
|
|
11
|
+
|
|
12
|
+
**WARNING:** Do NOT assume fields exist. Check this document first.
|
|
13
|
+
|
|
14
|
+
## Quick Start - Enable Debug Logging
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
# Option 1: Via just command
|
|
18
|
+
just cyclist-electron true
|
|
19
|
+
|
|
20
|
+
# Option 2: Via environment variable
|
|
21
|
+
OTEL_DEBUG=true npm run dev
|
|
22
|
+
|
|
23
|
+
# Option 3: Runtime toggle (in code or devtools)
|
|
24
|
+
import { setOtelDebug } from './otlp-receiver.js';
|
|
25
|
+
setOtelDebug(true);
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
Captures go to:
|
|
29
|
+
- Console: `[OTEL-CAPTURE]` prefix
|
|
30
|
+
- File: `/tmp/otel-capture.jsonl`
|
|
31
|
+
|
|
32
|
+
View captures:
|
|
33
|
+
```bash
|
|
34
|
+
cat /tmp/otel-capture.jsonl | jq .
|
|
35
|
+
# Or tail live:
|
|
36
|
+
tail -f /tmp/otel-capture.jsonl | jq .
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## Status
|
|
40
|
+
|
|
41
|
+
**WORKING** - Stories 36-9, 36-10, 36-2, and 36-3 have established working enrichment patterns.
|
|
42
|
+
|
|
43
|
+
## Known Facts (Verified)
|
|
44
|
+
|
|
45
|
+
### LogRecord Structure
|
|
46
|
+
|
|
47
|
+
Claude Code exports OTEL logs (not traces/spans). The logRecord structure:
|
|
48
|
+
|
|
49
|
+
```typescript
|
|
50
|
+
interface LogRecord {
|
|
51
|
+
timeUnixNano: string; // Nanoseconds since epoch
|
|
52
|
+
observedTimeUnixNano: string;
|
|
53
|
+
body: { stringValue: string }; // Event name (e.g., "claude_code.tool_result")
|
|
54
|
+
attributes: Attribute[]; // Key-value pairs
|
|
55
|
+
droppedAttributesCount: number;
|
|
56
|
+
// NOTE: traceId and spanId are NOT present at logRecord level
|
|
57
|
+
}
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
### What We Know Is MISSING
|
|
61
|
+
|
|
62
|
+
- `traceId` - NOT in logRecord (Story 36-9 confirmed)
|
|
63
|
+
- `spanId` - NOT in logRecord (Story 36-9 confirmed)
|
|
64
|
+
- `tool_use_id` - NOT in OTEL attributes; use Claude message stream `block.id` instead
|
|
65
|
+
|
|
66
|
+
### Event Types Observed
|
|
67
|
+
|
|
68
|
+
| Event Name | Description |
|
|
69
|
+
|------------|-------------|
|
|
70
|
+
| `claude_code.tool_result` | Tool execution completed |
|
|
71
|
+
| `claude_code.user_prompt` | User prompt submitted |
|
|
72
|
+
| `claude_code.api_request` | API request made |
|
|
73
|
+
|
|
74
|
+
### Tool Result Attributes (VERIFIED)
|
|
75
|
+
|
|
76
|
+
```
|
|
77
|
+
tool_name: string // e.g., "Read", "Edit", "Bash"
|
|
78
|
+
tool_parameters: string // JSON string with tool-specific input
|
|
79
|
+
tool_output: string // Tool output (truncated to ~2000 chars)
|
|
80
|
+
duration_ms: string|number // Execution time in milliseconds
|
|
81
|
+
success: string // "true" or "false" as string
|
|
82
|
+
error?: string // Error message if failed
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
### tool_parameters Format by Tool (VERIFIED)
|
|
86
|
+
|
|
87
|
+
**Read:**
|
|
88
|
+
```json
|
|
89
|
+
{ "file_path": "/absolute/path/to/file.ts" }
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
**Edit:**
|
|
93
|
+
```json
|
|
94
|
+
{
|
|
95
|
+
"file_path": "/absolute/path/to/file.ts",
|
|
96
|
+
"old_string": "text to replace",
|
|
97
|
+
"new_string": "replacement text"
|
|
98
|
+
}
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
**Bash:**
|
|
102
|
+
```json
|
|
103
|
+
{
|
|
104
|
+
"command": "git status",
|
|
105
|
+
"description": "Check git status",
|
|
106
|
+
"timeout": 120000,
|
|
107
|
+
"run_in_background": false
|
|
108
|
+
}
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
## Correlation Strategy (WORKING)
|
|
112
|
+
|
|
113
|
+
Story 36-10 solved the correlation problem:
|
|
114
|
+
|
|
115
|
+
1. Claude message stream provides `tool_use` with `block.id`, `block.name`, `block.input`
|
|
116
|
+
2. Store in pending queue via `storePendingToolInput(toolId, toolName, input)`
|
|
117
|
+
3. When OTEL arrives, match via `consumePendingToolInput(toolName, parsedToolParams)`
|
|
118
|
+
4. **Key fix:** For Read/Edit, match on `file_path` first for precise correlation
|
|
119
|
+
5. Fall back to FIFO by toolName for tools without file_path (e.g., Bash)
|
|
120
|
+
6. Use `block.id` (toolId) as synthetic spanId for correlation map
|
|
121
|
+
|
|
122
|
+
**Why this works:**
|
|
123
|
+
- Claude message stream arrives BEFORE OTEL tool_result
|
|
124
|
+
- file_path matching handles concurrent Read/Edit operations correctly
|
|
125
|
+
- FIFO fallback works for Bash since commands are typically sequential
|
|
126
|
+
|
|
127
|
+
## Enrichment Pipeline
|
|
128
|
+
|
|
129
|
+
```
|
|
130
|
+
Claude Message Stream OTEL Logs
|
|
131
|
+
| |
|
|
132
|
+
tool_use event tool_result event
|
|
133
|
+
| |
|
|
134
|
+
storePendingToolInput() consumePendingToolInput()
|
|
135
|
+
| |
|
|
136
|
+
+-----> Correlation <---------+
|
|
137
|
+
|
|
|
138
|
+
enrichXxxSpan()
|
|
139
|
+
|
|
|
140
|
+
ToolEvent with metadata
|
|
141
|
+
|
|
|
142
|
+
Broadcast to UI
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
### Implemented Enrichments
|
|
146
|
+
|
|
147
|
+
| Tool | Enrichment Function | Data Added |
|
|
148
|
+
|------|---------------------|------------|
|
|
149
|
+
| Read | `enrichReadSpan()` | fileSize, lineCount, language, gitStatus |
|
|
150
|
+
| Edit | `enrichEditSpan()` | fileSize, language, gitStatus, diff (added/removed) |
|
|
151
|
+
| Bash | `enrichBashSpan()` | command (redacted), exitCode, outputSummary, workingDirectory |
|
|
152
|
+
|
|
153
|
+
### Secret Redaction (Bash)
|
|
154
|
+
|
|
155
|
+
Commands are redacted before storage:
|
|
156
|
+
- `password=xxx` → `password=[REDACTED]`
|
|
157
|
+
- `token=xxx` → `token=[REDACTED]`
|
|
158
|
+
- AWS credentials → `AWS_SECRET_ACCESS_KEY=[REDACTED]`
|
|
159
|
+
- GitHub tokens (ghp_xxx) → `[REDACTED]`
|
|
160
|
+
- Long base64 strings (40+ chars) → `[REDACTED]`
|
|
161
|
+
|
|
162
|
+
## Files to Reference
|
|
163
|
+
|
|
164
|
+
| File | Purpose |
|
|
165
|
+
|------|---------|
|
|
166
|
+
| `packages/cyclist/src/otlp-receiver.ts` | OTEL parsing, enrichment integration |
|
|
167
|
+
| `packages/cyclist/src/span-correlation.ts` | Pending tool input queue, correlation map |
|
|
168
|
+
| `packages/cyclist/src/file-enrichment.ts` | Enrichment functions (Read, Edit, Bash) |
|
|
169
|
+
| `packages/cyclist/src/main.ts:820-824` | Message stream tool_use capture |
|
|
170
|
+
|
|
171
|
+
## API
|
|
172
|
+
|
|
173
|
+
```typescript
|
|
174
|
+
// Enable/disable debug at runtime
|
|
175
|
+
import { setOtelDebug, isOtelDebugEnabled } from './otlp-receiver.js';
|
|
176
|
+
|
|
177
|
+
setOtelDebug(true); // Start capturing
|
|
178
|
+
setOtelDebug(false); // Stop capturing
|
|
179
|
+
isOtelDebugEnabled(); // Check status
|
|
180
|
+
|
|
181
|
+
// Enrichment functions
|
|
182
|
+
import { enrichReadSpan, enrichEditSpan, enrichBashSpan } from './file-enrichment.js';
|
|
183
|
+
|
|
184
|
+
// Correlation
|
|
185
|
+
import { storePendingToolInput, consumePendingToolInput } from './span-correlation.js';
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
## Captured Data Format
|
|
189
|
+
|
|
190
|
+
Each line in `/tmp/otel-capture.jsonl` contains:
|
|
191
|
+
|
|
192
|
+
```json
|
|
193
|
+
{
|
|
194
|
+
"timestamp": "2026-01-15T08:00:00.000Z",
|
|
195
|
+
"eventName": "claude_code.tool_result",
|
|
196
|
+
"logRecordKeys": ["timeUnixNano", "body", "attributes", ...],
|
|
197
|
+
"traceId": null,
|
|
198
|
+
"spanId": null,
|
|
199
|
+
"attributes": [
|
|
200
|
+
{ "key": "tool_name", "value": { "stringValue": "Read" } },
|
|
201
|
+
...
|
|
202
|
+
]
|
|
203
|
+
}
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
## Related Stories
|
|
207
|
+
|
|
208
|
+
| Story | Title | Status |
|
|
209
|
+
|-------|-------|--------|
|
|
210
|
+
| 36-1 | OTEL span interception and correlation | DONE |
|
|
211
|
+
| 36-2 | Read/Edit tool enrichment | DONE |
|
|
212
|
+
| 36-3 | Bash tool enrichment | DONE |
|
|
213
|
+
| 36-4 | Search tool enrichment (Grep/Glob) | Backlog |
|
|
214
|
+
| 36-5 | Task/subagent enrichment | Backlog |
|
|
215
|
+
| 36-9 | Bug: missing trace/span IDs | DONE |
|
|
216
|
+
| 36-10 | Bug: race condition in correlation | DONE |
|
|
217
|
+
|
|
218
|
+
## Next Steps (Remaining Work)
|
|
219
|
+
|
|
220
|
+
1. **36-4:** Add Grep/Glob enrichment (pattern, match count, file list)
|
|
221
|
+
2. **36-5:** Add Task enrichment (subagent type, prompt summary, turn count)
|
|
222
|
+
3. **36-6:** Export enriched spans to UI visualization
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: permissions
|
|
3
|
+
description: Manage runtime permission grants - list active grants, add/revoke tool access, show grant details. Use for all permission-related operations.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Permission Management Skill
|
|
7
|
+
|
|
8
|
+
## Overview
|
|
9
|
+
|
|
10
|
+
Pennyfarthing uses a runtime permission system for tool access control. This skill provides commands to view and manage permission grants.
|
|
11
|
+
|
|
12
|
+
## Quick Reference
|
|
13
|
+
|
|
14
|
+
| Action | Command |
|
|
15
|
+
|--------|---------|
|
|
16
|
+
| List all grants | `/permissions` |
|
|
17
|
+
| Grant tool access | `/permissions grant <tool> "<scope>"` |
|
|
18
|
+
| Revoke tool access | `/permissions revoke <tool>` |
|
|
19
|
+
| Show grant details | `/permissions show <tool>` |
|
|
20
|
+
|
|
21
|
+
## Grant Types
|
|
22
|
+
|
|
23
|
+
Permissions support three duration types:
|
|
24
|
+
|
|
25
|
+
| Type | Duration | Storage |
|
|
26
|
+
|------|----------|---------|
|
|
27
|
+
| `once` | Single use | Memory only |
|
|
28
|
+
| `session` | Until session ends | Memory only |
|
|
29
|
+
| `always` | Persists forever | `.claude/settings.local.json` |
|
|
30
|
+
|
|
31
|
+
## List Active Grants
|
|
32
|
+
|
|
33
|
+
To see all currently active permission grants:
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
# Read grants from settings
|
|
37
|
+
cat .claude/settings.local.json 2>/dev/null | jq '.permissions.grants // []'
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
Output shows:
|
|
41
|
+
- Tool name
|
|
42
|
+
- Scope pattern
|
|
43
|
+
- Grant type
|
|
44
|
+
- When granted
|
|
45
|
+
- Uses remaining (for `once` type)
|
|
46
|
+
|
|
47
|
+
If no grants exist, displays "No active permission grants."
|
|
48
|
+
|
|
49
|
+
## Grant Tool Access
|
|
50
|
+
|
|
51
|
+
Add a permission grant for a specific tool and scope:
|
|
52
|
+
|
|
53
|
+
```
|
|
54
|
+
/permissions grant <tool> "<scope>" [--type <once|session|always>]
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
**Parameters:**
|
|
58
|
+
- `<tool>` - Tool name (e.g., `WebFetch`, `Bash`, `Read`)
|
|
59
|
+
- `"<scope>"` - Scope pattern in quotes (e.g., `"*.github.com"`, `"git *"`)
|
|
60
|
+
- `--type` - Grant duration (default: `session`)
|
|
61
|
+
|
|
62
|
+
**Examples:**
|
|
63
|
+
|
|
64
|
+
```bash
|
|
65
|
+
# Grant WebFetch access to GitHub
|
|
66
|
+
/permissions grant WebFetch "*.github.com"
|
|
67
|
+
|
|
68
|
+
# Grant Bash read-only git commands (session-only)
|
|
69
|
+
/permissions grant Bash "git status|git log|git diff"
|
|
70
|
+
|
|
71
|
+
# Grant Read access to src directory (always)
|
|
72
|
+
/permissions grant Read "src/**/*" --type always
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
**What happens:**
|
|
76
|
+
1. Validates the tool name and scope
|
|
77
|
+
2. Creates a `PermissionGrant` object with timestamp
|
|
78
|
+
3. Stores in `.claude/settings.local.json` under `permissions.grants`
|
|
79
|
+
4. Reports success with grant details
|
|
80
|
+
|
|
81
|
+
## Revoke Tool Access
|
|
82
|
+
|
|
83
|
+
Remove all grants for a specific tool:
|
|
84
|
+
|
|
85
|
+
```
|
|
86
|
+
/permissions revoke <tool>
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
**Examples:**
|
|
90
|
+
|
|
91
|
+
```bash
|
|
92
|
+
# Revoke all WebFetch grants
|
|
93
|
+
/permissions revoke WebFetch
|
|
94
|
+
|
|
95
|
+
# Revoke all Bash grants
|
|
96
|
+
/permissions revoke Bash
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
**What happens:**
|
|
100
|
+
1. Reads current grants from settings
|
|
101
|
+
2. Filters out grants matching the tool name
|
|
102
|
+
3. Writes updated grants back to settings
|
|
103
|
+
4. Reports how many grants were removed
|
|
104
|
+
|
|
105
|
+
## Show Grant Details
|
|
106
|
+
|
|
107
|
+
Display detailed information about grants for a specific tool:
|
|
108
|
+
|
|
109
|
+
```
|
|
110
|
+
/permissions show <tool>
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
**Output includes:**
|
|
114
|
+
- All grants for the specified tool
|
|
115
|
+
- Scope patterns
|
|
116
|
+
- Grant types
|
|
117
|
+
- Timestamps
|
|
118
|
+
- Remaining uses (for `once` type)
|
|
119
|
+
|
|
120
|
+
## Storage Format
|
|
121
|
+
|
|
122
|
+
Grants are stored in `.claude/settings.local.json`:
|
|
123
|
+
|
|
124
|
+
```json
|
|
125
|
+
{
|
|
126
|
+
"permissions": {
|
|
127
|
+
"grants": [
|
|
128
|
+
{
|
|
129
|
+
"tool": "WebFetch",
|
|
130
|
+
"scope": "*.github.com",
|
|
131
|
+
"grant_type": "session",
|
|
132
|
+
"granted_at": "2026-01-13T15:00:00.000Z"
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
"tool": "Bash",
|
|
136
|
+
"scope": "git *",
|
|
137
|
+
"grant_type": "always",
|
|
138
|
+
"granted_at": "2026-01-13T14:30:00.000Z"
|
|
139
|
+
}
|
|
140
|
+
]
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
## Permission Schema
|
|
146
|
+
|
|
147
|
+
From `@pennyfarthing/core`:
|
|
148
|
+
|
|
149
|
+
```typescript
|
|
150
|
+
interface PermissionGrant {
|
|
151
|
+
tool: string; // Tool name
|
|
152
|
+
scope: string; // Scope pattern
|
|
153
|
+
grant_type: GrantType; // 'once' | 'session' | 'always'
|
|
154
|
+
granted_at: string; // ISO timestamp
|
|
155
|
+
uses_remaining?: number; // For 'once' type
|
|
156
|
+
}
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
## Error Handling
|
|
160
|
+
|
|
161
|
+
| Error | Cause | Solution |
|
|
162
|
+
|-------|-------|----------|
|
|
163
|
+
| "Invalid tool name" | Tool doesn't exist | Check available tools |
|
|
164
|
+
| "Invalid scope pattern" | Empty or malformed scope | Provide quoted scope string |
|
|
165
|
+
| "Settings file not found" | First-time use | File will be created |
|
|
166
|
+
| "No grants found for tool" | Tool has no active grants | Nothing to revoke |
|
|
167
|
+
|
|
168
|
+
## Related
|
|
169
|
+
|
|
170
|
+
- **Story 33-1:** Permission Request Protocol (schema definitions)
|
|
171
|
+
- **Story 33-3:** Cyclist Permission UI (visual management)
|
|
172
|
+
- **Story 33-4:** Spot Permission Grants (inline approval)
|