@pennyfarthing/core 7.0.1 → 7.4.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/{packages/core/dist → dist}/cli/commands/cyclist.d.ts +2 -2
- package/{packages/core/dist → dist}/cli/commands/cyclist.d.ts.map +1 -1
- package/{packages/core/dist → dist}/cli/commands/cyclist.js +8 -9
- package/dist/cli/commands/cyclist.js.map +1 -0
- package/{packages/core/dist → dist}/cli/commands/cyclist.test.js +6 -4
- package/dist/cli/commands/cyclist.test.js.map +1 -0
- package/{packages/core/dist → dist}/cli/commands/update.d.ts.map +1 -1
- package/{packages/core/dist → dist}/cli/commands/update.js +9 -136
- package/dist/cli/commands/update.js.map +1 -0
- package/{packages/core/dist → dist}/cli/cyclist-migration.test.js +4 -3
- package/{packages/core/dist → dist}/cli/cyclist-migration.test.js.map +1 -1
- package/{packages/core/dist → dist}/cli/utils/constants.d.ts +7 -1
- package/dist/cli/utils/constants.d.ts.map +1 -0
- package/{packages/core/dist → dist}/cli/utils/constants.js +4 -2
- package/{packages/core/dist → dist}/cli/utils/constants.js.map +1 -1
- package/{packages/core/dist → dist}/cli/utils/themes.d.ts +1 -4
- package/{packages/core/dist → dist}/cli/utils/themes.d.ts.map +1 -1
- package/{packages/core/dist → dist}/cli/utils/themes.js +2 -22
- package/dist/cli/utils/themes.js.map +1 -0
- package/dist/cli/utils/themes.test.d.ts +12 -0
- package/{packages/core/dist → dist}/cli/utils/themes.test.js +16 -13
- package/dist/cli/utils/themes.test.js.map +1 -0
- package/{packages/core/dist → dist}/cli/workspace.test.js +5 -8
- package/{packages/core/dist → dist}/cli/workspace.test.js.map +1 -1
- package/{packages/core/dist → dist}/index.d.ts +1 -0
- package/{packages/core/dist → dist}/index.d.ts.map +1 -1
- package/{packages/core/dist → dist}/index.js +10 -0
- package/{packages/core/dist → dist}/index.js.map +1 -1
- package/dist/jira/jira-epic-creation.d.ts +109 -0
- package/dist/jira/jira-epic-creation.d.ts.map +1 -0
- package/dist/jira/jira-epic-creation.js +253 -0
- package/dist/jira/jira-epic-creation.js.map +1 -0
- package/dist/jira/jira-epic-creation.test.d.ts +16 -0
- package/dist/jira/jira-epic-creation.test.d.ts.map +1 -0
- package/dist/jira/jira-epic-creation.test.js +387 -0
- package/dist/jira/jira-epic-creation.test.js.map +1 -0
- package/dist/jira/jira-sprint-sync.d.ts +247 -0
- package/dist/jira/jira-sprint-sync.d.ts.map +1 -0
- package/dist/jira/jira-sprint-sync.js +670 -0
- package/dist/jira/jira-sprint-sync.js.map +1 -0
- package/dist/jira/jira-sprint-sync.test.d.ts +16 -0
- package/dist/jira/jira-sprint-sync.test.d.ts.map +1 -0
- package/dist/jira/jira-sprint-sync.test.js +845 -0
- package/dist/jira/jira-sprint-sync.test.js.map +1 -0
- package/{packages/core/dist → dist}/scripts/generate-spider.d.ts +11 -1
- package/{packages/core/dist → dist}/scripts/generate-spider.d.ts.map +1 -1
- package/{packages/core/dist → dist}/scripts/generate-spider.js +24 -1
- package/dist/scripts/generate-spider.js.map +1 -0
- package/{packages/core/dist → dist}/scripts/generate-spider.test.js +6 -4
- package/dist/scripts/generate-spider.test.js.map +1 -0
- package/dist/workflow/gate-handler.d.ts +94 -0
- package/dist/workflow/gate-handler.d.ts.map +1 -0
- package/dist/workflow/gate-handler.js +189 -0
- package/dist/workflow/gate-handler.js.map +1 -0
- package/dist/workflow/gate-handler.test.d.ts +14 -0
- package/dist/workflow/gate-handler.test.d.ts.map +1 -0
- package/dist/workflow/gate-handler.test.js +543 -0
- package/dist/workflow/gate-handler.test.js.map +1 -0
- package/{packages/core/dist → dist}/workflow/generic-handoff.d.ts +46 -0
- package/{packages/core/dist → dist}/workflow/generic-handoff.d.ts.map +1 -1
- package/{packages/core/dist → dist}/workflow/generic-handoff.js +53 -0
- package/{packages/core/dist → dist}/workflow/generic-handoff.js.map +1 -1
- package/{packages/core/dist → dist}/workflow/generic-handoff.test.js +2 -2
- package/{packages/core/dist → dist}/workflow/generic-handoff.test.js.map +1 -1
- package/dist/workflow/index.d.ts +16 -0
- package/dist/workflow/index.d.ts.map +1 -0
- package/dist/workflow/index.js +24 -0
- package/dist/workflow/index.js.map +1 -0
- package/dist/workflow/session-state.d.ts +92 -0
- package/dist/workflow/session-state.d.ts.map +1 -0
- package/dist/workflow/session-state.js +198 -0
- package/dist/workflow/session-state.js.map +1 -0
- package/dist/workflow/session-state.test.d.ts +8 -0
- package/dist/workflow/session-state.test.d.ts.map +1 -0
- package/dist/workflow/session-state.test.js +551 -0
- package/dist/workflow/session-state.test.js.map +1 -0
- package/dist/workflow/step-parser.d.ts +45 -0
- package/dist/workflow/step-parser.d.ts.map +1 -0
- package/dist/workflow/step-parser.js +147 -0
- package/dist/workflow/step-parser.js.map +1 -0
- package/dist/workflow/step-parser.test.d.ts +14 -0
- package/dist/workflow/step-parser.test.d.ts.map +1 -0
- package/dist/workflow/step-parser.test.js +470 -0
- package/dist/workflow/step-parser.test.js.map +1 -0
- package/dist/workflow/trimodal.d.ts +86 -0
- package/dist/workflow/trimodal.d.ts.map +1 -0
- package/dist/workflow/trimodal.js +118 -0
- package/dist/workflow/trimodal.js.map +1 -0
- package/dist/workflow/trimodal.test.d.ts +11 -0
- package/dist/workflow/trimodal.test.d.ts.map +1 -0
- package/dist/workflow/trimodal.test.js +395 -0
- package/dist/workflow/trimodal.test.js.map +1 -0
- package/dist/workflow/variable-resolver.d.ts +67 -0
- package/dist/workflow/variable-resolver.d.ts.map +1 -0
- package/dist/workflow/variable-resolver.js +156 -0
- package/dist/workflow/variable-resolver.js.map +1 -0
- package/dist/workflow/variable-resolver.test.d.ts +14 -0
- package/dist/workflow/variable-resolver.test.d.ts.map +1 -0
- package/dist/workflow/variable-resolver.test.js +400 -0
- package/dist/workflow/variable-resolver.test.js.map +1 -0
- package/dist/workflow/workflow-executor.d.ts +163 -0
- package/dist/workflow/workflow-executor.d.ts.map +1 -0
- package/dist/workflow/workflow-executor.js +197 -0
- package/dist/workflow/workflow-executor.js.map +1 -0
- package/dist/workflow/workflow-executor.test.d.ts +8 -0
- package/dist/workflow/workflow-executor.test.d.ts.map +1 -0
- package/dist/workflow/workflow-executor.test.js +444 -0
- package/dist/workflow/workflow-executor.test.js.map +1 -0
- package/{packages/core/dist → dist}/workflow/workflow-loader.test.js +5 -5
- package/dist/workflow/workflow-loader.test.js.map +1 -0
- package/{packages/core/dist → dist}/workflow/workflow-migration.test.js +8 -9
- package/{packages/core/dist → dist}/workflow/workflow-migration.test.js.map +1 -1
- package/dist/workflow/workflow-permissions.d.ts +55 -0
- package/dist/workflow/workflow-permissions.d.ts.map +1 -0
- package/dist/workflow/workflow-permissions.js +64 -0
- package/dist/workflow/workflow-permissions.js.map +1 -0
- package/dist/workflow/workflow-permissions.test.d.ts +15 -0
- package/dist/workflow/workflow-permissions.test.d.ts.map +1 -0
- package/dist/workflow/workflow-permissions.test.js +301 -0
- package/dist/workflow/workflow-permissions.test.js.map +1 -0
- package/{packages/core/dist → dist}/workflow/workflow-schema.d.ts +61 -2
- package/dist/workflow/workflow-schema.d.ts.map +1 -0
- package/dist/workflow/workflow-schema.js +454 -0
- package/dist/workflow/workflow-schema.js.map +1 -0
- package/{packages/core/dist → dist}/workflow/workflow-schema.test.js +6 -6
- package/{packages/core/dist → dist}/workflow/workflow-schema.test.js.map +1 -1
- package/dist/workflow/workflow-stepped-schema.test.d.ts +18 -0
- package/dist/workflow/workflow-stepped-schema.test.d.ts.map +1 -0
- package/dist/workflow/workflow-stepped-schema.test.js +608 -0
- package/dist/workflow/workflow-stepped-schema.test.js.map +1 -0
- package/package.json +36 -31
- package/README.md +0 -301
- package/packages/core/dist/cli/commands/cyclist.js.map +0 -1
- package/packages/core/dist/cli/commands/cyclist.test.js.map +0 -1
- package/packages/core/dist/cli/commands/update.js.map +0 -1
- package/packages/core/dist/cli/utils/constants.d.ts.map +0 -1
- package/packages/core/dist/cli/utils/themes.js.map +0 -1
- package/packages/core/dist/cli/utils/themes.test.d.ts +0 -12
- package/packages/core/dist/cli/utils/themes.test.js.map +0 -1
- package/packages/core/dist/scripts/generate-all-faces.d.ts +0 -10
- package/packages/core/dist/scripts/generate-all-faces.d.ts.map +0 -1
- package/packages/core/dist/scripts/generate-all-faces.js +0 -256
- package/packages/core/dist/scripts/generate-all-faces.js.map +0 -1
- package/packages/core/dist/scripts/generate-all-faces.test.d.ts +0 -17
- package/packages/core/dist/scripts/generate-all-faces.test.d.ts.map +0 -1
- package/packages/core/dist/scripts/generate-all-faces.test.js +0 -372
- package/packages/core/dist/scripts/generate-all-faces.test.js.map +0 -1
- package/packages/core/dist/scripts/generate-ascii-face.d.ts +0 -52
- package/packages/core/dist/scripts/generate-ascii-face.d.ts.map +0 -1
- package/packages/core/dist/scripts/generate-ascii-face.js +0 -155
- package/packages/core/dist/scripts/generate-ascii-face.js.map +0 -1
- package/packages/core/dist/scripts/generate-face.d.ts +0 -52
- package/packages/core/dist/scripts/generate-face.d.ts.map +0 -1
- package/packages/core/dist/scripts/generate-face.js +0 -199
- package/packages/core/dist/scripts/generate-face.js.map +0 -1
- package/packages/core/dist/scripts/generate-face.test.d.ts +0 -13
- package/packages/core/dist/scripts/generate-face.test.d.ts.map +0 -1
- package/packages/core/dist/scripts/generate-face.test.js +0 -301
- package/packages/core/dist/scripts/generate-face.test.js.map +0 -1
- package/packages/core/dist/scripts/generate-spider.js.map +0 -1
- package/packages/core/dist/scripts/generate-spider.test.js.map +0 -1
- package/packages/core/dist/workflow/workflow-loader.test.js.map +0 -1
- package/packages/core/dist/workflow/workflow-schema.d.ts.map +0 -1
- package/packages/core/dist/workflow/workflow-schema.js +0 -230
- package/packages/core/dist/workflow/workflow-schema.js.map +0 -1
- package/pennyfarthing-dist/agents/README.md +0 -397
- package/pennyfarthing-dist/agents/architect.md +0 -171
- package/pennyfarthing-dist/agents/dev.md +0 -225
- package/pennyfarthing-dist/agents/devops.md +0 -183
- package/pennyfarthing-dist/agents/generic-handoff.md +0 -451
- package/pennyfarthing-dist/agents/generic-sm-finish.md +0 -261
- package/pennyfarthing-dist/agents/generic-sm-setup.md +0 -214
- package/pennyfarthing-dist/agents/orchestrator.md +0 -316
- package/pennyfarthing-dist/agents/pm.md +0 -153
- package/pennyfarthing-dist/agents/reviewer-preflight.md +0 -224
- package/pennyfarthing-dist/agents/reviewer.md +0 -315
- package/pennyfarthing-dist/agents/sm-file-summary.md +0 -109
- package/pennyfarthing-dist/agents/sm-handoff.md +0 -97
- package/pennyfarthing-dist/agents/sm.md +0 -480
- package/pennyfarthing-dist/agents/tea.md +0 -191
- package/pennyfarthing-dist/agents/tech-writer.md +0 -148
- package/pennyfarthing-dist/agents/testing-runner.md +0 -420
- package/pennyfarthing-dist/agents/ux-designer.md +0 -158
- package/pennyfarthing-dist/agents/workflow-status-check.md +0 -332
- package/pennyfarthing-dist/commands/architect.md +0 -62
- package/pennyfarthing-dist/commands/benchmark-control.md +0 -69
- package/pennyfarthing-dist/commands/benchmark.md +0 -467
- package/pennyfarthing-dist/commands/brainstorm.md +0 -91
- package/pennyfarthing-dist/commands/check.md +0 -156
- package/pennyfarthing-dist/commands/chore.md +0 -178
- package/pennyfarthing-dist/commands/close-epic.md +0 -136
- package/pennyfarthing-dist/commands/continue-session.md +0 -184
- package/pennyfarthing-dist/commands/create-branches-from-story.md +0 -374
- package/pennyfarthing-dist/commands/create-theme.md +0 -29
- package/pennyfarthing-dist/commands/dev.md +0 -60
- package/pennyfarthing-dist/commands/devops.md +0 -59
- package/pennyfarthing-dist/commands/git-cleanup.md +0 -340
- package/pennyfarthing-dist/commands/health-check.md +0 -108
- package/pennyfarthing-dist/commands/help.md +0 -264
- package/pennyfarthing-dist/commands/job-fair.md +0 -102
- package/pennyfarthing-dist/commands/list-themes.md +0 -17
- package/pennyfarthing-dist/commands/new-work.md +0 -127
- package/pennyfarthing-dist/commands/orchestrator.md +0 -56
- package/pennyfarthing-dist/commands/parallel-work.md +0 -71
- package/pennyfarthing-dist/commands/party-mode.md +0 -67
- package/pennyfarthing-dist/commands/permissions.md +0 -193
- package/pennyfarthing-dist/commands/pm.md +0 -60
- package/pennyfarthing-dist/commands/prime.md +0 -140
- package/pennyfarthing-dist/commands/release.md +0 -58
- package/pennyfarthing-dist/commands/repo-status.md +0 -49
- package/pennyfarthing-dist/commands/retro.md +0 -200
- package/pennyfarthing-dist/commands/reviewer.md +0 -64
- package/pennyfarthing-dist/commands/run-ci.md +0 -116
- package/pennyfarthing-dist/commands/set-theme.md +0 -52
- package/pennyfarthing-dist/commands/show-theme.md +0 -21
- package/pennyfarthing-dist/commands/sm.md +0 -70
- package/pennyfarthing-dist/commands/solo.md +0 -411
- package/pennyfarthing-dist/commands/sprint-planning.md +0 -109
- package/pennyfarthing-dist/commands/start-epic.md +0 -156
- package/pennyfarthing-dist/commands/sync-epic-to-jira.md +0 -184
- package/pennyfarthing-dist/commands/sync-work-with-sprint.md +0 -376
- package/pennyfarthing-dist/commands/tea.md +0 -63
- package/pennyfarthing-dist/commands/tech-writer.md +0 -53
- package/pennyfarthing-dist/commands/theme-maker.md +0 -671
- package/pennyfarthing-dist/commands/update-domain-docs.md +0 -83
- package/pennyfarthing-dist/commands/ux-designer.md +0 -62
- package/pennyfarthing-dist/commands/work.md +0 -111
- package/pennyfarthing-dist/guides/AGENT-COORDINATION.md +0 -480
- package/pennyfarthing-dist/guides/AGENT-SCOPES.md +0 -201
- package/pennyfarthing-dist/guides/HOOKS.md +0 -230
- package/pennyfarthing-dist/guides/PROMPT-PATTERNS.md +0 -338
- package/pennyfarthing-dist/guides/SESSION-ARTIFACTS.md +0 -193
- package/pennyfarthing-dist/guides/agent-template-strategic.md +0 -148
- package/pennyfarthing-dist/guides/agent-template-tactical.md +0 -162
- package/pennyfarthing-dist/guides/patterns/approval-gates-pattern.md +0 -746
- package/pennyfarthing-dist/guides/patterns/fan-out-fan-in-pattern.md +0 -574
- package/pennyfarthing-dist/guides/patterns/helper-delegation-pattern.md +0 -488
- package/pennyfarthing-dist/guides/patterns/tdd-flow-pattern.md +0 -402
- package/pennyfarthing-dist/guides/permission-protocol.md +0 -188
- package/pennyfarthing-dist/guides/persona-loading.md +0 -46
- package/pennyfarthing-dist/guides/persona-system.md +0 -294
- package/pennyfarthing-dist/guides/shared-agent-behavior.md +0 -388
- package/pennyfarthing-dist/guides/shared-context.md +0 -147
- package/pennyfarthing-dist/guides/strategic-agent-behavior.md +0 -348
- package/pennyfarthing-dist/guides/tactical-agent-behavior.md +0 -1041
- package/pennyfarthing-dist/guides/workflow-schema.md +0 -195
- package/pennyfarthing-dist/guides/worktree-mode.md +0 -113
- package/pennyfarthing-dist/output-styles/teaching.md +0 -33
- package/pennyfarthing-dist/output-styles/terse.md +0 -20
- package/pennyfarthing-dist/output-styles/verbose.md +0 -28
- package/pennyfarthing-dist/personas/themes/1984.yaml +0 -312
- package/pennyfarthing-dist/personas/themes/a-team.yaml +0 -207
- package/pennyfarthing-dist/personas/themes/agatha-christie.yaml +0 -300
- package/pennyfarthing-dist/personas/themes/alice-in-wonderland.yaml +0 -330
- package/pennyfarthing-dist/personas/themes/all-stars.yaml +0 -332
- package/pennyfarthing-dist/personas/themes/ancient-philosophers.yaml +0 -320
- package/pennyfarthing-dist/personas/themes/ancient-strategists.yaml +0 -306
- package/pennyfarthing-dist/personas/themes/arcane.yaml +0 -288
- package/pennyfarthing-dist/personas/themes/arthurian-mythos.yaml +0 -331
- package/pennyfarthing-dist/personas/themes/avatar-the-last-airbender.yaml +0 -288
- package/pennyfarthing-dist/personas/themes/babylon-5.yaml +0 -288
- package/pennyfarthing-dist/personas/themes/battlestar-galactica.yaml +0 -288
- package/pennyfarthing-dist/personas/themes/better-call-saul.yaml +0 -288
- package/pennyfarthing-dist/personas/themes/big-lebowski.yaml +0 -300
- package/pennyfarthing-dist/personas/themes/black-sails.yaml +0 -300
- package/pennyfarthing-dist/personas/themes/blade-runner.yaml +0 -295
- package/pennyfarthing-dist/personas/themes/bobiverse.yaml +0 -288
- package/pennyfarthing-dist/personas/themes/breaking-bad.yaml +0 -327
- package/pennyfarthing-dist/personas/themes/catch-22.yaml +0 -316
- package/pennyfarthing-dist/personas/themes/classical-composers.yaml +0 -310
- package/pennyfarthing-dist/personas/themes/control.yaml +0 -197
- package/pennyfarthing-dist/personas/themes/count-of-monte-cristo.yaml +0 -320
- package/pennyfarthing-dist/personas/themes/cowboy-bebop.yaml +0 -323
- package/pennyfarthing-dist/personas/themes/deadwood.yaml +0 -300
- package/pennyfarthing-dist/personas/themes/dickens.yaml +0 -320
- package/pennyfarthing-dist/personas/themes/discworld.yaml +0 -332
- package/pennyfarthing-dist/personas/themes/doctor-who.yaml +0 -290
- package/pennyfarthing-dist/personas/themes/don-quixote.yaml +0 -320
- package/pennyfarthing-dist/personas/themes/dune.yaml +0 -307
- package/pennyfarthing-dist/personas/themes/enlightenment-thinkers.yaml +0 -320
- package/pennyfarthing-dist/personas/themes/expeditionary-force.yaml +0 -288
- package/pennyfarthing-dist/personas/themes/fargo.yaml +0 -330
- package/pennyfarthing-dist/personas/themes/film-auteurs.yaml +0 -312
- package/pennyfarthing-dist/personas/themes/firefly.yaml +0 -328
- package/pennyfarthing-dist/personas/themes/foundation.yaml +0 -290
- package/pennyfarthing-dist/personas/themes/futurama.yaml +0 -321
- package/pennyfarthing-dist/personas/themes/game-of-thrones.yaml +0 -290
- package/pennyfarthing-dist/personas/themes/gilligans-island.yaml +0 -243
- package/pennyfarthing-dist/personas/themes/gothic-literature.yaml +0 -308
- package/pennyfarthing-dist/personas/themes/great-gatsby.yaml +0 -308
- package/pennyfarthing-dist/personas/themes/greek-mythology.yaml +0 -330
- package/pennyfarthing-dist/personas/themes/hannibal.yaml +0 -300
- package/pennyfarthing-dist/personas/themes/harry-potter.yaml +0 -324
- package/pennyfarthing-dist/personas/themes/his-dark-materials.yaml +0 -291
- package/pennyfarthing-dist/personas/themes/historical-figures.yaml +0 -288
- package/pennyfarthing-dist/personas/themes/hitchhikers-guide.yaml +0 -331
- package/pennyfarthing-dist/personas/themes/house-md.yaml +0 -321
- package/pennyfarthing-dist/personas/themes/imperial-radch.yaml +0 -289
- package/pennyfarthing-dist/personas/themes/inspector-morse.yaml +0 -300
- package/pennyfarthing-dist/personas/themes/jane-austen.yaml +0 -287
- package/pennyfarthing-dist/personas/themes/jazz-legends.yaml +0 -320
- package/pennyfarthing-dist/personas/themes/justified.yaml +0 -300
- package/pennyfarthing-dist/personas/themes/legion-of-doom.yaml +0 -219
- package/pennyfarthing-dist/personas/themes/les-miserables.yaml +0 -299
- package/pennyfarthing-dist/personas/themes/lord-of-the-rings.yaml +0 -334
- package/pennyfarthing-dist/personas/themes/lovecraft-mythos.yaml +0 -334
- package/pennyfarthing-dist/personas/themes/mad-max.yaml +0 -355
- package/pennyfarthing-dist/personas/themes/mad-men.yaml +0 -289
- package/pennyfarthing-dist/personas/themes/marvel-mcu.yaml +0 -300
- package/pennyfarthing-dist/personas/themes/mash.yaml +0 -334
- package/pennyfarthing-dist/personas/themes/mass-effect.yaml +0 -289
- package/pennyfarthing-dist/personas/themes/military-commanders.yaml +0 -306
- package/pennyfarthing-dist/personas/themes/moby-dick.yaml +0 -320
- package/pennyfarthing-dist/personas/themes/monty-python.yaml +0 -303
- package/pennyfarthing-dist/personas/themes/neuromancer.yaml +0 -300
- package/pennyfarthing-dist/personas/themes/norse-mythology.yaml +0 -329
- package/pennyfarthing-dist/personas/themes/parks-and-rec.yaml +0 -242
- package/pennyfarthing-dist/personas/themes/peaky-blinders.yaml +0 -298
- package/pennyfarthing-dist/personas/themes/princess-bride.yaml +0 -220
- package/pennyfarthing-dist/personas/themes/renaissance-masters.yaml +0 -320
- package/pennyfarthing-dist/personas/themes/rome.yaml +0 -300
- package/pennyfarthing-dist/personas/themes/russian-masters.yaml +0 -318
- package/pennyfarthing-dist/personas/themes/sandman.yaml +0 -288
- package/pennyfarthing-dist/personas/themes/scientific-revolutionaries.yaml +0 -320
- package/pennyfarthing-dist/personas/themes/shakespeare.yaml +0 -301
- package/pennyfarthing-dist/personas/themes/sherlock-holmes.yaml +0 -289
- package/pennyfarthing-dist/personas/themes/snow-crash.yaml +0 -288
- package/pennyfarthing-dist/personas/themes/software-pioneers.yaml +0 -300
- package/pennyfarthing-dist/personas/themes/star-trek-tng.yaml +0 -230
- package/pennyfarthing-dist/personas/themes/star-trek-tos.yaml +0 -210
- package/pennyfarthing-dist/personas/themes/star-wars.yaml +0 -303
- package/pennyfarthing-dist/personas/themes/succession.yaml +0 -300
- package/pennyfarthing-dist/personas/themes/superfriends.yaml +0 -208
- package/pennyfarthing-dist/personas/themes/ted-lasso.yaml +0 -236
- package/pennyfarthing-dist/personas/themes/the-americans.yaml +0 -300
- package/pennyfarthing-dist/personas/themes/the-crown.yaml +0 -300
- package/pennyfarthing-dist/personas/themes/the-expanse.yaml +0 -213
- package/pennyfarthing-dist/personas/themes/the-good-place.yaml +0 -322
- package/pennyfarthing-dist/personas/themes/the-matrix.yaml +0 -353
- package/pennyfarthing-dist/personas/themes/the-odyssey.yaml +0 -300
- package/pennyfarthing-dist/personas/themes/the-office.yaml +0 -330
- package/pennyfarthing-dist/personas/themes/the-simpsons.yaml +0 -308
- package/pennyfarthing-dist/personas/themes/the-sopranos.yaml +0 -300
- package/pennyfarthing-dist/personas/themes/the-wire.yaml +0 -311
- package/pennyfarthing-dist/personas/themes/the-witcher.yaml +0 -300
- package/pennyfarthing-dist/personas/themes/twin-peaks.yaml +0 -302
- package/pennyfarthing-dist/personas/themes/vorkosigan-saga.yaml +0 -300
- package/pennyfarthing-dist/personas/themes/watchmen.yaml +0 -291
- package/pennyfarthing-dist/personas/themes/west-wing.yaml +0 -291
- package/pennyfarthing-dist/personas/themes/world-explorers.yaml +0 -320
- package/pennyfarthing-dist/personas/themes/wwii-leaders.yaml +0 -307
- package/pennyfarthing-dist/personas/themes/x-files.yaml +0 -302
- package/pennyfarthing-dist/scripts/add-short-names.mjs +0 -264
- package/pennyfarthing-dist/scripts/agent-session.sh +0 -367
- package/pennyfarthing-dist/scripts/check-context.sh +0 -187
- package/pennyfarthing-dist/scripts/check.sh +0 -497
- package/pennyfarthing-dist/scripts/deploy.sh +0 -284
- package/pennyfarthing-dist/scripts/doctor-dogfood.sh +0 -395
- package/pennyfarthing-dist/scripts/hooks/context-circuit-breaker.sh +0 -61
- package/pennyfarthing-dist/scripts/hooks/context-warning.sh +0 -66
- package/pennyfarthing-dist/scripts/hooks/otel-auto-config.sh +0 -35
- package/pennyfarthing-dist/scripts/hooks/post-merge.sh +0 -166
- package/pennyfarthing-dist/scripts/hooks/pre-commit.sh +0 -50
- package/pennyfarthing-dist/scripts/hooks/pre-edit-check.sh +0 -71
- package/pennyfarthing-dist/scripts/hooks/pre-push.sh +0 -54
- package/pennyfarthing-dist/scripts/hooks/session-start.sh +0 -98
- package/pennyfarthing-dist/scripts/hooks/session-stop.sh +0 -59
- package/pennyfarthing-dist/scripts/install-git-hooks.sh +0 -91
- package/pennyfarthing-dist/scripts/prime.sh +0 -161
- package/pennyfarthing-dist/scripts/release.sh +0 -198
- package/pennyfarthing-dist/scripts/repo-utils.sh +0 -778
- package/pennyfarthing-dist/scripts/run-ci.sh +0 -219
- package/pennyfarthing-dist/scripts/run.sh +0 -65
- package/pennyfarthing-dist/scripts/statusline.sh +0 -264
- package/pennyfarthing-dist/scripts/tests/check.test.sh +0 -582
- package/pennyfarthing-dist/scripts/tests/test-character-voice.sh +0 -107
- package/pennyfarthing-dist/scripts/tests/test-drift-detection.sh +0 -597
- package/pennyfarthing-dist/scripts/tests/test-post-merge-hook.sh +0 -514
- package/pennyfarthing-dist/scripts/tests/test-session-checkpoint.sh +0 -517
- package/pennyfarthing-dist/scripts/tests/test-solo-command.sh +0 -331
- package/pennyfarthing-dist/scripts/uninstall.sh +0 -271
- package/pennyfarthing-dist/scripts/utils/background-tasks.sh +0 -177
- package/pennyfarthing-dist/scripts/utils/check-status.sh +0 -251
- package/pennyfarthing-dist/scripts/utils/checkpoint.sh +0 -136
- package/pennyfarthing-dist/scripts/utils/common.sh +0 -157
- package/pennyfarthing-dist/scripts/utils/create-feature-branches.sh +0 -230
- package/pennyfarthing-dist/scripts/utils/file-lock.sh +0 -269
- package/pennyfarthing-dist/scripts/utils/find-related-work.sh +0 -231
- package/pennyfarthing-dist/scripts/utils/find-root.sh +0 -33
- package/pennyfarthing-dist/scripts/utils/generate-skill-docs.sh +0 -110
- package/pennyfarthing-dist/scripts/utils/git-status-all.sh +0 -127
- package/pennyfarthing-dist/scripts/utils/ground-truth-judge.py +0 -289
- package/pennyfarthing-dist/scripts/utils/jira/jira-lib.mjs +0 -443
- package/pennyfarthing-dist/scripts/utils/jira/jira-sync-story.mjs +0 -208
- package/pennyfarthing-dist/scripts/utils/jira/jira-sync.mjs +0 -198
- package/pennyfarthing-dist/scripts/utils/jira-claim-story.sh +0 -162
- package/pennyfarthing-dist/scripts/utils/jira-lib.sh +0 -463
- package/pennyfarthing-dist/scripts/utils/jira-sync-story.sh +0 -8
- package/pennyfarthing-dist/scripts/utils/jira-sync.sh +0 -8
- package/pennyfarthing-dist/scripts/utils/log-skill-usage.sh +0 -74
- package/pennyfarthing-dist/scripts/utils/logging.sh +0 -186
- package/pennyfarthing-dist/scripts/utils/repo-scan.sh +0 -141
- package/pennyfarthing-dist/scripts/utils/retry.sh +0 -76
- package/pennyfarthing-dist/scripts/utils/run-timestamp.sh +0 -7
- package/pennyfarthing-dist/scripts/utils/session-cleanup.sh +0 -319
- package/pennyfarthing-dist/scripts/utils/skill-usage-report.sh +0 -193
- package/pennyfarthing-dist/scripts/utils/sprint-common.sh +0 -286
- package/pennyfarthing-dist/scripts/utils/sprint-metrics.sh +0 -241
- package/pennyfarthing-dist/scripts/utils/swebench-judge.py +0 -400
- package/pennyfarthing-dist/scripts/utils/sync-epic-to-jira.sh +0 -16
- package/pennyfarthing-dist/scripts/utils/test-setup.sh +0 -337
- package/pennyfarthing-dist/scripts/utils/validate-subagent-frontmatter.sh +0 -160
- package/pennyfarthing-dist/scripts/worktree-manager.sh +0 -498
- package/pennyfarthing-dist/skills/agentic-patterns/SKILL.md +0 -236
- package/pennyfarthing-dist/skills/changelog/SKILL.md +0 -367
- package/pennyfarthing-dist/skills/code-review/SKILL.md +0 -168
- package/pennyfarthing-dist/skills/context-engineering/SKILL.md +0 -268
- package/pennyfarthing-dist/skills/cyclist/SKILL.md +0 -117
- package/pennyfarthing-dist/skills/dev-patterns/SKILL.md +0 -421
- package/pennyfarthing-dist/skills/finalize-run/SKILL.md +0 -258
- package/pennyfarthing-dist/skills/jira/SKILL.md +0 -281
- package/pennyfarthing-dist/skills/judge/SKILL.md +0 -524
- package/pennyfarthing-dist/skills/just/SKILL.md +0 -160
- package/pennyfarthing-dist/skills/mermaid/SKILL.md +0 -240
- package/pennyfarthing-dist/skills/otel/skill.md +0 -222
- package/pennyfarthing-dist/skills/permissions/skill.md +0 -172
- package/pennyfarthing-dist/skills/persona-benchmark/SKILL.md +0 -173
- package/pennyfarthing-dist/skills/skill-registry.schema.json +0 -102
- package/pennyfarthing-dist/skills/skill-registry.yaml +0 -335
- package/pennyfarthing-dist/skills/sprint-context/SKILL.md +0 -120
- package/pennyfarthing-dist/skills/story-management/SKILL.md +0 -208
- package/pennyfarthing-dist/skills/testing/SKILL.md +0 -99
- package/pennyfarthing-dist/skills/testing/references/troubleshooting.md +0 -124
- package/pennyfarthing-dist/skills/theme/skill.md +0 -129
- package/pennyfarthing-dist/skills/theme-creation/SKILL.md +0 -169
- package/pennyfarthing-dist/skills/workflow/SKILL.md +0 -160
- package/pennyfarthing-dist/skills/yq/SKILL.md +0 -264
- package/pennyfarthing-dist/templates/LEADERBOARD.schema.yaml +0 -187
- package/pennyfarthing-dist/templates/LEADERBOARD.template.md +0 -59
- package/pennyfarthing-dist/templates/agent-scopes.yaml.template +0 -276
- package/pennyfarthing-dist/templates/pennyfarthing-settings.yaml.template +0 -61
- package/pennyfarthing-dist/templates/persona-config.yaml.template +0 -22
- package/pennyfarthing-dist/templates/preferences.yaml.template +0 -15
- package/pennyfarthing-dist/templates/settings.local.json.template +0 -90
- package/pennyfarthing-dist/templates/setup-env.sh.template +0 -18
- package/pennyfarthing-dist/templates/shared-context.md.template +0 -70
- package/pennyfarthing-dist/templates/sidecar/decisions.md.template +0 -40
- package/pennyfarthing-dist/templates/sidecar/gotchas.md.template +0 -37
- package/pennyfarthing-dist/templates/sidecar/patterns.md.template +0 -34
- package/pennyfarthing-dist/workflows/agent-docs.yaml +0 -70
- package/pennyfarthing-dist/workflows/bdd.yaml +0 -58
- package/pennyfarthing-dist/workflows/tdd.yaml +0 -50
- package/pennyfarthing-dist/workflows/trivial.yaml +0 -40
- /package/{packages/core/bin → bin}/pennyfarthing.js +0 -0
- /package/{packages/core/dist → dist}/bmad/context-reader.d.ts +0 -0
- /package/{packages/core/dist → dist}/bmad/context-reader.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/bmad/context-reader.js +0 -0
- /package/{packages/core/dist → dist}/bmad/context-reader.js.map +0 -0
- /package/{packages/core/dist → dist}/bmad/context-reader.test.d.ts +0 -0
- /package/{packages/core/dist → dist}/bmad/context-reader.test.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/bmad/context-reader.test.js +0 -0
- /package/{packages/core/dist → dist}/bmad/context-reader.test.js.map +0 -0
- /package/{packages/core/dist → dist}/bmad/epics-parser.d.ts +0 -0
- /package/{packages/core/dist → dist}/bmad/epics-parser.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/bmad/epics-parser.js +0 -0
- /package/{packages/core/dist → dist}/bmad/epics-parser.js.map +0 -0
- /package/{packages/core/dist → dist}/bmad/epics-parser.test.d.ts +0 -0
- /package/{packages/core/dist → dist}/bmad/epics-parser.test.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/bmad/epics-parser.test.js +0 -0
- /package/{packages/core/dist → dist}/bmad/epics-parser.test.js.map +0 -0
- /package/{packages/core/dist → dist}/bmad/index.d.ts +0 -0
- /package/{packages/core/dist → dist}/bmad/index.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/bmad/index.js +0 -0
- /package/{packages/core/dist → dist}/bmad/index.js.map +0 -0
- /package/{packages/core/dist → dist}/bmad/status-sync.d.ts +0 -0
- /package/{packages/core/dist → dist}/bmad/status-sync.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/bmad/status-sync.js +0 -0
- /package/{packages/core/dist → dist}/bmad/status-sync.js.map +0 -0
- /package/{packages/core/dist → dist}/bmad/status-sync.test.d.ts +0 -0
- /package/{packages/core/dist → dist}/bmad/status-sync.test.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/bmad/status-sync.test.js +0 -0
- /package/{packages/core/dist → dist}/bmad/status-sync.test.js.map +0 -0
- /package/{packages/core/dist → dist}/bmad/story-exporter.d.ts +0 -0
- /package/{packages/core/dist → dist}/bmad/story-exporter.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/bmad/story-exporter.js +0 -0
- /package/{packages/core/dist → dist}/bmad/story-exporter.js.map +0 -0
- /package/{packages/core/dist → dist}/bmad/story-exporter.test.d.ts +0 -0
- /package/{packages/core/dist → dist}/bmad/story-exporter.test.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/bmad/story-exporter.test.js +0 -0
- /package/{packages/core/dist → dist}/bmad/story-exporter.test.js.map +0 -0
- /package/{packages/core/dist → dist}/bmad/story-parser.d.ts +0 -0
- /package/{packages/core/dist → dist}/bmad/story-parser.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/bmad/story-parser.js +0 -0
- /package/{packages/core/dist → dist}/bmad/story-parser.js.map +0 -0
- /package/{packages/core/dist → dist}/bmad/story-parser.test.d.ts +0 -0
- /package/{packages/core/dist → dist}/bmad/story-parser.test.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/bmad/story-parser.test.js +0 -0
- /package/{packages/core/dist → dist}/bmad/story-parser.test.js.map +0 -0
- /package/{packages/core/dist → dist}/cli/commands/command.d.ts +0 -0
- /package/{packages/core/dist → dist}/cli/commands/command.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/cli/commands/command.js +0 -0
- /package/{packages/core/dist → dist}/cli/commands/command.js.map +0 -0
- /package/{packages/core/dist → dist}/cli/commands/cyclist.test.d.ts +0 -0
- /package/{packages/core/dist → dist}/cli/commands/cyclist.test.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/cli/commands/doctor.d.ts +0 -0
- /package/{packages/core/dist → dist}/cli/commands/doctor.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/cli/commands/doctor.js +0 -0
- /package/{packages/core/dist → dist}/cli/commands/doctor.js.map +0 -0
- /package/{packages/core/dist → dist}/cli/commands/init.d.ts +0 -0
- /package/{packages/core/dist → dist}/cli/commands/init.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/cli/commands/init.js +0 -0
- /package/{packages/core/dist → dist}/cli/commands/init.js.map +0 -0
- /package/{packages/core/dist → dist}/cli/commands/skill.d.ts +0 -0
- /package/{packages/core/dist → dist}/cli/commands/skill.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/cli/commands/skill.js +0 -0
- /package/{packages/core/dist → dist}/cli/commands/skill.js.map +0 -0
- /package/{packages/core/dist → dist}/cli/commands/theme.d.ts +0 -0
- /package/{packages/core/dist → dist}/cli/commands/theme.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/cli/commands/theme.js +0 -0
- /package/{packages/core/dist → dist}/cli/commands/theme.js.map +0 -0
- /package/{packages/core/dist → dist}/cli/commands/uninstall.d.ts +0 -0
- /package/{packages/core/dist → dist}/cli/commands/uninstall.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/cli/commands/uninstall.js +0 -0
- /package/{packages/core/dist → dist}/cli/commands/uninstall.js.map +0 -0
- /package/{packages/core/dist → dist}/cli/commands/update.d.ts +0 -0
- /package/{packages/core/dist → dist}/cli/commands/version.d.ts +0 -0
- /package/{packages/core/dist → dist}/cli/commands/version.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/cli/commands/version.js +0 -0
- /package/{packages/core/dist → dist}/cli/commands/version.js.map +0 -0
- /package/{packages/core/dist → dist}/cli/customization.test.d.ts +0 -0
- /package/{packages/core/dist → dist}/cli/customization.test.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/cli/customization.test.js +0 -0
- /package/{packages/core/dist → dist}/cli/customization.test.js.map +0 -0
- /package/{packages/core/dist → dist}/cli/cyclist-migration.test.d.ts +0 -0
- /package/{packages/core/dist → dist}/cli/cyclist-migration.test.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/cli/index.d.ts +0 -0
- /package/{packages/core/dist → dist}/cli/index.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/cli/index.js +0 -0
- /package/{packages/core/dist → dist}/cli/index.js.map +0 -0
- /package/{packages/core/dist → dist}/cli/ocean-profiles.test.d.ts +0 -0
- /package/{packages/core/dist → dist}/cli/ocean-profiles.test.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/cli/ocean-profiles.test.js +0 -0
- /package/{packages/core/dist → dist}/cli/ocean-profiles.test.js.map +0 -0
- /package/{packages/core/dist → dist}/cli/theme-maker.test.d.ts +0 -0
- /package/{packages/core/dist → dist}/cli/theme-maker.test.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/cli/theme-maker.test.js +0 -0
- /package/{packages/core/dist → dist}/cli/theme-maker.test.js.map +0 -0
- /package/{packages/core/dist → dist}/cli/utils/files.d.ts +0 -0
- /package/{packages/core/dist → dist}/cli/utils/files.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/cli/utils/files.js +0 -0
- /package/{packages/core/dist → dist}/cli/utils/files.js.map +0 -0
- /package/{packages/core/dist → dist}/cli/utils/logger.d.ts +0 -0
- /package/{packages/core/dist → dist}/cli/utils/logger.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/cli/utils/logger.js +0 -0
- /package/{packages/core/dist → dist}/cli/utils/logger.js.map +0 -0
- /package/{packages/core/dist → dist}/cli/utils/manifest.d.ts +0 -0
- /package/{packages/core/dist → dist}/cli/utils/manifest.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/cli/utils/manifest.js +0 -0
- /package/{packages/core/dist → dist}/cli/utils/manifest.js.map +0 -0
- /package/{packages/core/dist → dist}/cli/utils/node-modules.d.ts +0 -0
- /package/{packages/core/dist → dist}/cli/utils/node-modules.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/cli/utils/node-modules.js +0 -0
- /package/{packages/core/dist → dist}/cli/utils/node-modules.js.map +0 -0
- /package/{packages/core/dist → dist}/cli/utils/prompts.d.ts +0 -0
- /package/{packages/core/dist → dist}/cli/utils/prompts.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/cli/utils/prompts.js +0 -0
- /package/{packages/core/dist → dist}/cli/utils/prompts.js.map +0 -0
- /package/{packages/core/dist → dist}/cli/utils/symlinks.d.ts +0 -0
- /package/{packages/core/dist → dist}/cli/utils/symlinks.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/cli/utils/symlinks.js +0 -0
- /package/{packages/core/dist → dist}/cli/utils/symlinks.js.map +0 -0
- /package/{packages/core/dist → dist}/cli/utils/themes.test.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/cli/utils/version.d.ts +0 -0
- /package/{packages/core/dist → dist}/cli/utils/version.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/cli/utils/version.js +0 -0
- /package/{packages/core/dist → dist}/cli/utils/version.js.map +0 -0
- /package/{packages/core/dist → dist}/cli/workspace.test.d.ts +0 -0
- /package/{packages/core/dist → dist}/cli/workspace.test.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/permissions/index.d.ts +0 -0
- /package/{packages/core/dist → dist}/permissions/index.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/permissions/index.js +0 -0
- /package/{packages/core/dist → dist}/permissions/index.js.map +0 -0
- /package/{packages/core/dist → dist}/permissions/permission-schema.d.ts +0 -0
- /package/{packages/core/dist → dist}/permissions/permission-schema.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/permissions/permission-schema.js +0 -0
- /package/{packages/core/dist → dist}/permissions/permission-schema.js.map +0 -0
- /package/{packages/core/dist → dist}/permissions/permission-schema.test.d.ts +0 -0
- /package/{packages/core/dist → dist}/permissions/permission-schema.test.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/permissions/permission-schema.test.js +0 -0
- /package/{packages/core/dist → dist}/permissions/permission-schema.test.js.map +0 -0
- /package/{packages/core/dist → dist}/scripts/add-ocean-profiles.d.ts +0 -0
- /package/{packages/core/dist → dist}/scripts/add-ocean-profiles.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/scripts/add-ocean-profiles.js +0 -0
- /package/{packages/core/dist → dist}/scripts/add-ocean-profiles.js.map +0 -0
- /package/{packages/core/dist → dist}/scripts/benchmark-integration.d.ts +0 -0
- /package/{packages/core/dist → dist}/scripts/benchmark-integration.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/scripts/benchmark-integration.js +0 -0
- /package/{packages/core/dist → dist}/scripts/benchmark-integration.js.map +0 -0
- /package/{packages/core/dist → dist}/scripts/benchmark-integration.test.d.ts +0 -0
- /package/{packages/core/dist → dist}/scripts/benchmark-integration.test.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/scripts/benchmark-integration.test.js +0 -0
- /package/{packages/core/dist → dist}/scripts/benchmark-integration.test.js.map +0 -0
- /package/{packages/core/dist → dist}/scripts/debugging-scenarios.test.d.ts +0 -0
- /package/{packages/core/dist → dist}/scripts/debugging-scenarios.test.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/scripts/debugging-scenarios.test.js +0 -0
- /package/{packages/core/dist → dist}/scripts/debugging-scenarios.test.js.map +0 -0
- /package/{packages/core/dist → dist}/scripts/generate-all-spiders.d.ts +0 -0
- /package/{packages/core/dist → dist}/scripts/generate-all-spiders.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/scripts/generate-all-spiders.js +0 -0
- /package/{packages/core/dist → dist}/scripts/generate-all-spiders.js.map +0 -0
- /package/{packages/core/dist → dist}/scripts/generate-report.d.ts +0 -0
- /package/{packages/core/dist → dist}/scripts/generate-report.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/scripts/generate-report.js +0 -0
- /package/{packages/core/dist → dist}/scripts/generate-report.js.map +0 -0
- /package/{packages/core/dist → dist}/scripts/generate-report.test.d.ts +0 -0
- /package/{packages/core/dist → dist}/scripts/generate-report.test.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/scripts/generate-report.test.js +0 -0
- /package/{packages/core/dist → dist}/scripts/generate-report.test.js.map +0 -0
- /package/{packages/core/dist → dist}/scripts/generate-spider-report.d.ts +0 -0
- /package/{packages/core/dist → dist}/scripts/generate-spider-report.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/scripts/generate-spider-report.js +0 -0
- /package/{packages/core/dist → dist}/scripts/generate-spider-report.js.map +0 -0
- /package/{packages/core/dist → dist}/scripts/generate-spider-report.test.d.ts +0 -0
- /package/{packages/core/dist → dist}/scripts/generate-spider-report.test.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/scripts/generate-spider-report.test.js +0 -0
- /package/{packages/core/dist → dist}/scripts/generate-spider-report.test.js.map +0 -0
- /package/{packages/core/dist → dist}/scripts/generate-spider.test.d.ts +0 -0
- /package/{packages/core/dist → dist}/scripts/generate-spider.test.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/scripts/job-fair-aggregator.d.ts +0 -0
- /package/{packages/core/dist → dist}/scripts/job-fair-aggregator.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/scripts/job-fair-aggregator.js +0 -0
- /package/{packages/core/dist → dist}/scripts/job-fair-aggregator.js.map +0 -0
- /package/{packages/core/dist → dist}/scripts/job-fair-aggregator.test.d.ts +0 -0
- /package/{packages/core/dist → dist}/scripts/job-fair-aggregator.test.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/scripts/job-fair-aggregator.test.js +0 -0
- /package/{packages/core/dist → dist}/scripts/job-fair-aggregator.test.js.map +0 -0
- /package/{packages/core/dist → dist}/scripts/run-ci.test.d.ts +0 -0
- /package/{packages/core/dist → dist}/scripts/run-ci.test.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/scripts/run-ci.test.js +0 -0
- /package/{packages/core/dist → dist}/scripts/run-ci.test.js.map +0 -0
- /package/{packages/core/dist → dist}/scripts/theme-detail.test.d.ts +0 -0
- /package/{packages/core/dist → dist}/scripts/theme-detail.test.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/scripts/theme-detail.test.js +0 -0
- /package/{packages/core/dist → dist}/scripts/theme-detail.test.js.map +0 -0
- /package/{packages/core/dist → dist}/scripts/validate-ocean-profiles.d.ts +0 -0
- /package/{packages/core/dist → dist}/scripts/validate-ocean-profiles.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/scripts/validate-ocean-profiles.js +0 -0
- /package/{packages/core/dist → dist}/scripts/validate-ocean-profiles.js.map +0 -0
- /package/{packages/core/dist → dist}/workflow/generic-handoff.test.d.ts +0 -0
- /package/{packages/core/dist → dist}/workflow/generic-handoff.test.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/workflow/generic-sm-finish.d.ts +0 -0
- /package/{packages/core/dist → dist}/workflow/generic-sm-finish.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/workflow/generic-sm-finish.js +0 -0
- /package/{packages/core/dist → dist}/workflow/generic-sm-finish.js.map +0 -0
- /package/{packages/core/dist → dist}/workflow/generic-sm-setup.d.ts +0 -0
- /package/{packages/core/dist → dist}/workflow/generic-sm-setup.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/workflow/generic-sm-setup.js +0 -0
- /package/{packages/core/dist → dist}/workflow/generic-sm-setup.js.map +0 -0
- /package/{packages/core/dist → dist}/workflow/sm-subagents.test.d.ts +0 -0
- /package/{packages/core/dist → dist}/workflow/sm-subagents.test.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/workflow/sm-subagents.test.js +0 -0
- /package/{packages/core/dist → dist}/workflow/sm-subagents.test.js.map +0 -0
- /package/{packages/core/dist → dist}/workflow/story-workflow-routing.test.d.ts +0 -0
- /package/{packages/core/dist → dist}/workflow/story-workflow-routing.test.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/workflow/story-workflow-routing.test.js +0 -0
- /package/{packages/core/dist → dist}/workflow/story-workflow-routing.test.js.map +0 -0
- /package/{packages/core/dist → dist}/workflow/test-cache.d.ts +0 -0
- /package/{packages/core/dist → dist}/workflow/test-cache.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/workflow/test-cache.js +0 -0
- /package/{packages/core/dist → dist}/workflow/test-cache.js.map +0 -0
- /package/{packages/core/dist → dist}/workflow/test-cache.test.d.ts +0 -0
- /package/{packages/core/dist → dist}/workflow/test-cache.test.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/workflow/test-cache.test.js +0 -0
- /package/{packages/core/dist → dist}/workflow/test-cache.test.js.map +0 -0
- /package/{packages/core/dist → dist}/workflow/workflow-loader.d.ts +0 -0
- /package/{packages/core/dist → dist}/workflow/workflow-loader.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/workflow/workflow-loader.js +0 -0
- /package/{packages/core/dist → dist}/workflow/workflow-loader.js.map +0 -0
- /package/{packages/core/dist → dist}/workflow/workflow-loader.test.d.ts +0 -0
- /package/{packages/core/dist → dist}/workflow/workflow-loader.test.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/workflow/workflow-migration.test.d.ts +0 -0
- /package/{packages/core/dist → dist}/workflow/workflow-migration.test.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/workflow/workflow-router.d.ts +0 -0
- /package/{packages/core/dist → dist}/workflow/workflow-router.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/workflow/workflow-router.js +0 -0
- /package/{packages/core/dist → dist}/workflow/workflow-router.js.map +0 -0
- /package/{packages/core/dist → dist}/workflow/workflow-router.test.d.ts +0 -0
- /package/{packages/core/dist → dist}/workflow/workflow-router.test.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/workflow/workflow-router.test.js +0 -0
- /package/{packages/core/dist → dist}/workflow/workflow-router.test.js.map +0 -0
- /package/{packages/core/dist → dist}/workflow/workflow-schema.test.d.ts +0 -0
- /package/{packages/core/dist → dist}/workflow/workflow-schema.test.d.ts.map +0 -0
|
@@ -1,230 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Workflow Schema Validation
|
|
3
|
-
*
|
|
4
|
-
* Defines types and validation for workflow definitions.
|
|
5
|
-
* See pennyfarthing-dist/guides/workflow-schema.md for spec.
|
|
6
|
-
*/
|
|
7
|
-
/**
|
|
8
|
-
* Validates a workflow definition object
|
|
9
|
-
*
|
|
10
|
-
* @param input - Raw workflow object (e.g., parsed from YAML)
|
|
11
|
-
* @returns Validation result with parsed workflow or errors
|
|
12
|
-
*
|
|
13
|
-
* @example
|
|
14
|
-
* ```typescript
|
|
15
|
-
* const yaml = fs.readFileSync('workflow.yaml', 'utf-8');
|
|
16
|
-
* const parsed = YAML.parse(yaml);
|
|
17
|
-
* const result = validateWorkflow(parsed);
|
|
18
|
-
*
|
|
19
|
-
* if (result.valid) {
|
|
20
|
-
* console.log(`Workflow "${result.workflow.name}" is valid`);
|
|
21
|
-
* } else {
|
|
22
|
-
* console.error('Validation errors:', result.errors);
|
|
23
|
-
* }
|
|
24
|
-
* ```
|
|
25
|
-
*/
|
|
26
|
-
export function validateWorkflow(input) {
|
|
27
|
-
const errors = [];
|
|
28
|
-
// Check input is an object
|
|
29
|
-
if (!input || typeof input !== 'object') {
|
|
30
|
-
return {
|
|
31
|
-
valid: false,
|
|
32
|
-
errors: [{ field: 'workflow', message: 'Input must be an object' }]
|
|
33
|
-
};
|
|
34
|
-
}
|
|
35
|
-
const inputObj = input;
|
|
36
|
-
// Check for root 'workflow' key
|
|
37
|
-
if (!('workflow' in inputObj) || !inputObj.workflow || typeof inputObj.workflow !== 'object') {
|
|
38
|
-
return {
|
|
39
|
-
valid: false,
|
|
40
|
-
errors: [{ field: 'workflow', message: 'Missing required root "workflow" key' }]
|
|
41
|
-
};
|
|
42
|
-
}
|
|
43
|
-
const workflowObj = inputObj.workflow;
|
|
44
|
-
// Validate workflow.name (required, string)
|
|
45
|
-
if (!('name' in workflowObj) || workflowObj.name === undefined || workflowObj.name === null) {
|
|
46
|
-
errors.push({ field: 'workflow.name', message: 'Name is required' });
|
|
47
|
-
}
|
|
48
|
-
else if (typeof workflowObj.name !== 'string') {
|
|
49
|
-
errors.push({ field: 'workflow.name', message: 'Name must be a string' });
|
|
50
|
-
}
|
|
51
|
-
// Validate workflow.phases (required, array with at least one phase)
|
|
52
|
-
if (!('phases' in workflowObj) || workflowObj.phases === undefined) {
|
|
53
|
-
errors.push({ field: 'workflow.phases', message: 'Phases is required' });
|
|
54
|
-
}
|
|
55
|
-
else if (!Array.isArray(workflowObj.phases)) {
|
|
56
|
-
errors.push({ field: 'workflow.phases', message: 'Phases must be an array' });
|
|
57
|
-
}
|
|
58
|
-
else if (workflowObj.phases.length === 0) {
|
|
59
|
-
errors.push({ field: 'workflow.phases', message: 'Workflow must have at least one phase' });
|
|
60
|
-
}
|
|
61
|
-
else {
|
|
62
|
-
// Validate each phase
|
|
63
|
-
const phases = workflowObj.phases;
|
|
64
|
-
phases.forEach((phase, index) => {
|
|
65
|
-
if (!phase || typeof phase !== 'object') {
|
|
66
|
-
errors.push({ field: `workflow.phases[${index}]`, message: 'Phase must be an object' });
|
|
67
|
-
return;
|
|
68
|
-
}
|
|
69
|
-
const phaseObj = phase;
|
|
70
|
-
// Phase name (required)
|
|
71
|
-
if (!('name' in phaseObj) || phaseObj.name === undefined || phaseObj.name === null) {
|
|
72
|
-
errors.push({ field: `workflow.phases[${index}].name`, message: 'Phase name is required' });
|
|
73
|
-
}
|
|
74
|
-
else if (typeof phaseObj.name !== 'string') {
|
|
75
|
-
errors.push({ field: `workflow.phases[${index}].name`, message: 'Phase name must be a string' });
|
|
76
|
-
}
|
|
77
|
-
// Phase agent (required)
|
|
78
|
-
if (!('agent' in phaseObj) || phaseObj.agent === undefined || phaseObj.agent === null) {
|
|
79
|
-
errors.push({ field: `workflow.phases[${index}].agent`, message: 'Phase agent is required' });
|
|
80
|
-
}
|
|
81
|
-
else if (typeof phaseObj.agent !== 'string') {
|
|
82
|
-
errors.push({ field: `workflow.phases[${index}].agent`, message: 'Phase agent must be a string' });
|
|
83
|
-
}
|
|
84
|
-
// Phase gate (optional, but if present must have type)
|
|
85
|
-
if ('gate' in phaseObj && phaseObj.gate !== undefined) {
|
|
86
|
-
if (!phaseObj.gate || typeof phaseObj.gate !== 'object') {
|
|
87
|
-
errors.push({ field: `workflow.phases[${index}].gate`, message: 'Gate must be an object' });
|
|
88
|
-
}
|
|
89
|
-
else {
|
|
90
|
-
const gateObj = phaseObj.gate;
|
|
91
|
-
if (!('type' in gateObj) || gateObj.type === undefined || gateObj.type === null) {
|
|
92
|
-
errors.push({ field: `workflow.phases[${index}].gate.type`, message: 'Gate type is required' });
|
|
93
|
-
}
|
|
94
|
-
else if (typeof gateObj.type !== 'string') {
|
|
95
|
-
errors.push({ field: `workflow.phases[${index}].gate.type`, message: 'Gate type must be a string' });
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
// Phase input (optional, array of strings)
|
|
100
|
-
if ('input' in phaseObj && phaseObj.input !== undefined) {
|
|
101
|
-
if (!Array.isArray(phaseObj.input)) {
|
|
102
|
-
errors.push({ field: `workflow.phases[${index}].input`, message: 'Input must be an array' });
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
// Phase output (optional, array of strings)
|
|
106
|
-
if ('output' in phaseObj && phaseObj.output !== undefined) {
|
|
107
|
-
if (!Array.isArray(phaseObj.output)) {
|
|
108
|
-
errors.push({ field: `workflow.phases[${index}].output`, message: 'Output must be an array' });
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
});
|
|
112
|
-
}
|
|
113
|
-
// Validate triggers (optional)
|
|
114
|
-
if ('triggers' in workflowObj && workflowObj.triggers !== undefined) {
|
|
115
|
-
if (!workflowObj.triggers || typeof workflowObj.triggers !== 'object') {
|
|
116
|
-
errors.push({ field: 'workflow.triggers', message: 'Triggers must be an object' });
|
|
117
|
-
}
|
|
118
|
-
else {
|
|
119
|
-
const triggersObj = workflowObj.triggers;
|
|
120
|
-
// tags (optional, array)
|
|
121
|
-
if ('tags' in triggersObj && triggersObj.tags !== undefined) {
|
|
122
|
-
if (!Array.isArray(triggersObj.tags)) {
|
|
123
|
-
errors.push({ field: 'workflow.triggers.tags', message: 'Tags must be an array' });
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
// types (optional, array)
|
|
127
|
-
if ('types' in triggersObj && triggersObj.types !== undefined) {
|
|
128
|
-
if (!Array.isArray(triggersObj.types)) {
|
|
129
|
-
errors.push({ field: 'workflow.triggers.types', message: 'Types must be an array' });
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
// points (optional, object with min/max)
|
|
133
|
-
if ('points' in triggersObj && triggersObj.points !== undefined) {
|
|
134
|
-
if (!triggersObj.points || typeof triggersObj.points !== 'object') {
|
|
135
|
-
errors.push({ field: 'workflow.triggers.points', message: 'Points must be an object' });
|
|
136
|
-
}
|
|
137
|
-
else {
|
|
138
|
-
const pointsObj = triggersObj.points;
|
|
139
|
-
// min (optional, number)
|
|
140
|
-
if ('min' in pointsObj && pointsObj.min !== undefined) {
|
|
141
|
-
if (typeof pointsObj.min !== 'number') {
|
|
142
|
-
errors.push({ field: 'workflow.triggers.points.min', message: 'Points min must be a number' });
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
// max (optional, number)
|
|
146
|
-
if ('max' in pointsObj && pointsObj.max !== undefined) {
|
|
147
|
-
if (typeof pointsObj.max !== 'number') {
|
|
148
|
-
errors.push({ field: 'workflow.triggers.points.max', message: 'Points max must be a number' });
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
// Validate min <= max if both present and valid numbers
|
|
152
|
-
if ('min' in pointsObj && 'max' in pointsObj &&
|
|
153
|
-
typeof pointsObj.min === 'number' && typeof pointsObj.max === 'number' &&
|
|
154
|
-
pointsObj.min > pointsObj.max) {
|
|
155
|
-
errors.push({ field: 'workflow.triggers.points', message: 'Points min cannot be greater than max' });
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
// default (optional, boolean)
|
|
160
|
-
if ('default' in triggersObj && triggersObj.default !== undefined) {
|
|
161
|
-
if (typeof triggersObj.default !== 'boolean') {
|
|
162
|
-
errors.push({ field: 'workflow.triggers.default', message: 'Default must be a boolean' });
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
// If there are errors, return invalid result
|
|
168
|
-
if (errors.length > 0) {
|
|
169
|
-
return { valid: false, errors };
|
|
170
|
-
}
|
|
171
|
-
// Build the validated workflow object
|
|
172
|
-
const phases = workflowObj.phases.map((phase) => {
|
|
173
|
-
const result = {
|
|
174
|
-
name: phase.name,
|
|
175
|
-
agent: phase.agent
|
|
176
|
-
};
|
|
177
|
-
if (phase.input !== undefined) {
|
|
178
|
-
result.input = phase.input;
|
|
179
|
-
}
|
|
180
|
-
if (phase.output !== undefined) {
|
|
181
|
-
result.output = phase.output;
|
|
182
|
-
}
|
|
183
|
-
if (phase.gate !== undefined) {
|
|
184
|
-
const gateObj = phase.gate;
|
|
185
|
-
result.gate = {
|
|
186
|
-
type: gateObj.type
|
|
187
|
-
};
|
|
188
|
-
if (gateObj.condition !== undefined) {
|
|
189
|
-
result.gate.condition = gateObj.condition;
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
return result;
|
|
193
|
-
});
|
|
194
|
-
const workflow = {
|
|
195
|
-
name: workflowObj.name,
|
|
196
|
-
phases
|
|
197
|
-
};
|
|
198
|
-
if (workflowObj.description !== undefined) {
|
|
199
|
-
workflow.description = workflowObj.description;
|
|
200
|
-
}
|
|
201
|
-
if (workflowObj.version !== undefined) {
|
|
202
|
-
workflow.version = workflowObj.version;
|
|
203
|
-
}
|
|
204
|
-
if (workflowObj.triggers !== undefined) {
|
|
205
|
-
const triggersObj = workflowObj.triggers;
|
|
206
|
-
const triggers = {};
|
|
207
|
-
if (triggersObj.tags !== undefined) {
|
|
208
|
-
triggers.tags = triggersObj.tags;
|
|
209
|
-
}
|
|
210
|
-
if (triggersObj.types !== undefined) {
|
|
211
|
-
triggers.types = triggersObj.types;
|
|
212
|
-
}
|
|
213
|
-
if (triggersObj.points !== undefined) {
|
|
214
|
-
const pointsObj = triggersObj.points;
|
|
215
|
-
triggers.points = {};
|
|
216
|
-
if (pointsObj.min !== undefined) {
|
|
217
|
-
triggers.points.min = pointsObj.min;
|
|
218
|
-
}
|
|
219
|
-
if (pointsObj.max !== undefined) {
|
|
220
|
-
triggers.points.max = pointsObj.max;
|
|
221
|
-
}
|
|
222
|
-
}
|
|
223
|
-
if (triggersObj.default !== undefined) {
|
|
224
|
-
triggers.default = triggersObj.default;
|
|
225
|
-
}
|
|
226
|
-
workflow.triggers = triggers;
|
|
227
|
-
}
|
|
228
|
-
return { valid: true, workflow };
|
|
229
|
-
}
|
|
230
|
-
//# sourceMappingURL=workflow-schema.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"workflow-schema.js","sourceRoot":"","sources":["../../src/workflow/workflow-schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,397 +0,0 @@
|
|
|
1
|
-
# Pennyfarthing Core Agents
|
|
2
|
-
|
|
3
|
-
## Overview
|
|
4
|
-
|
|
5
|
-
This directory contains the **single source of truth** for all Pennyfarthing agent definitions. Agents are coordinated across both `API` and `UI` repositories.
|
|
6
|
-
|
|
7
|
-
**See:** `../ AGENT-COORDINATION.md` for complete architecture documentation.
|
|
8
|
-
|
|
9
|
-
## Agent Maturity
|
|
10
|
-
|
|
11
|
-
Agents are marked with `<status>` tags indicating their maturity level:
|
|
12
|
-
|
|
13
|
-
### Production Agents
|
|
14
|
-
These agents follow the TDD workflow and are battle-tested:
|
|
15
|
-
- **SM** - Scrum Master (story coordination, session management)
|
|
16
|
-
- **TEA** - Test Engineer/Architect (test writing, TDD guidance)
|
|
17
|
-
- **Dev** - Developer (implementation, making tests pass)
|
|
18
|
-
- **Reviewer** - Code Reviewer (adversarial review, quality gates)
|
|
19
|
-
|
|
20
|
-
### Experimental Agents
|
|
21
|
-
These agents are available but not yet modernized to the same standard:
|
|
22
|
-
- **Orchestrator** - Meta operations, process improvement
|
|
23
|
-
- **PM** - Product Manager (planning, prioritization)
|
|
24
|
-
- **Architect** - System Architect (design decisions)
|
|
25
|
-
- **DevOps** - DevOps Engineer (infrastructure, deployment)
|
|
26
|
-
- **Tech Writer** - Technical Writer (documentation)
|
|
27
|
-
- **UX Designer** - UX Designer (UI design, accessibility)
|
|
28
|
-
|
|
29
|
-
> **Tip:** Start with production agents for core development work. Experimental agents may have less consistent behavior or missing features.
|
|
30
|
-
|
|
31
|
-
## Agent Hierarchy
|
|
32
|
-
|
|
33
|
-
### Strategic Agents (Full Scope)
|
|
34
|
-
Oversee both repos, make cross-repo decisions, coordinate work.
|
|
35
|
-
|
|
36
|
-
- **`orchestrator.md`** - Master orchestrator
|
|
37
|
-
- **`pm.md`** - Product Manager (planning, prioritization)
|
|
38
|
-
- **`sm.md`** - Scrum Master (story creation, technical specs)
|
|
39
|
-
- **`architect.md`** - System Architect (design decisions, patterns)
|
|
40
|
-
- **`devops.md`** - DevOps Engineer (infrastructure, deployment)
|
|
41
|
-
|
|
42
|
-
### Tactical Agents (Story-Scoped)
|
|
43
|
-
Focus on specific repo(s), implement/test/document features.
|
|
44
|
-
|
|
45
|
-
- **`dev.md`** - Developer (feature implementation)
|
|
46
|
-
- **`tea.md`** - Test Engineer/Architect (testing, quality)
|
|
47
|
-
- **`reviewer.md`** - Code Reviewer (adversarial review, quality gates)
|
|
48
|
-
- **`tech-writer.md`** - Technical Writer (documentation)
|
|
49
|
-
- **`ux-designer.md`** - UX Designer (UI design, UX)
|
|
50
|
-
|
|
51
|
-
### Official Subagents (Haiku-based)
|
|
52
|
-
Lightweight subagents for mechanical tasks. Invoked via `Task tool` with `subagent_type`.
|
|
53
|
-
|
|
54
|
-
- **`workflow-status-check.md`** - Detect workflow state
|
|
55
|
-
- **`generic-sm-setup.md`** - Research OR setup mode (Story 31-11)
|
|
56
|
-
- **`generic-sm-finish.md`** - Preflight OR execute phase (Story 31-11)
|
|
57
|
-
- **`generic-handoff.md`** - Workflow-driven handoff (Stories 31-7, 31-10)
|
|
58
|
-
- **`sm-handoff.md`** - SM→TEA/Dev handoff with Jira/branch verification
|
|
59
|
-
- **`sm-file-summary.md`** - Summarize file changes
|
|
60
|
-
- **`reviewer-preflight.md`** - Gather review data
|
|
61
|
-
- **`testing-runner.md`** - Execute tests, report results
|
|
62
|
-
|
|
63
|
-
### Removed Files (Stories 31-11, 31-12)
|
|
64
|
-
These files have been deleted and replaced by consolidated versions:
|
|
65
|
-
|
|
66
|
-
**SM Subagents (Story 31-12):**
|
|
67
|
-
- `sm-work-research.md` → use `generic-sm-setup` with MODE=research
|
|
68
|
-
- `sm-story-setup.md` → use `generic-sm-setup` with MODE=setup
|
|
69
|
-
- `sm-finish-bookkeeping.md` → use `generic-sm-finish` with PHASE=preflight
|
|
70
|
-
- `sm-finish-execution.md` → use `generic-sm-finish` with PHASE=execute
|
|
71
|
-
|
|
72
|
-
**Handoff Subagents (Story 31-11):**
|
|
73
|
-
- `tea-handoff.md` → use `generic-handoff` with CURRENT_PHASE=red
|
|
74
|
-
- `dev-handoff.md` → use `generic-handoff` with CURRENT_PHASE=green
|
|
75
|
-
- `reviewer-handoff-approve.md` → use `generic-handoff` with VERDICT=approved
|
|
76
|
-
- `reviewer-handoff-reject.md` → use `generic-handoff` with VERDICT=rejected
|
|
77
|
-
|
|
78
|
-
## Context Loading
|
|
79
|
-
|
|
80
|
-
Agents load context based on their type:
|
|
81
|
-
|
|
82
|
-
### Strategic Agents Load:
|
|
83
|
-
- Full sprint status
|
|
84
|
-
- Both API and UI contexts
|
|
85
|
-
- Epic definitions
|
|
86
|
-
- Active work
|
|
87
|
-
|
|
88
|
-
### Tactical Agents Load:
|
|
89
|
-
- Story section of sprint status
|
|
90
|
-
- Active work
|
|
91
|
-
- Target repo context only (based on story)
|
|
92
|
-
|
|
93
|
-
**Configuration:** `.claude/project/docs/agent-scopes.yaml`
|
|
94
|
-
|
|
95
|
-
## Usage
|
|
96
|
-
|
|
97
|
-
### Activate an Agent
|
|
98
|
-
|
|
99
|
-
```bash
|
|
100
|
-
# Via workflow
|
|
101
|
-
@/pm
|
|
102
|
-
@/dev
|
|
103
|
-
@/tea
|
|
104
|
-
|
|
105
|
-
# Or mention in chat
|
|
106
|
-
"Let's activate the PM agent"
|
|
107
|
-
"Activate Dev to implement this story"
|
|
108
|
-
```
|
|
109
|
-
|
|
110
|
-
### Agent Files
|
|
111
|
-
|
|
112
|
-
Each agent file contains:
|
|
113
|
-
- **Persona:** Character and expertise
|
|
114
|
-
- **Responsibilities:** What they handle
|
|
115
|
-
- **Context:** Project information
|
|
116
|
-
- **Context Loading:** What files to load on activation
|
|
117
|
-
- **Activation:** How they operate
|
|
118
|
-
- **Workflows:** Common tasks and patterns
|
|
119
|
-
- **Handoffs:** How they coordinate with other agents
|
|
120
|
-
|
|
121
|
-
## File Structure
|
|
122
|
-
|
|
123
|
-
```
|
|
124
|
-
.pennyfarthing/agents/
|
|
125
|
-
├── README.md # This file
|
|
126
|
-
│
|
|
127
|
-
│ # Main Agents (10)
|
|
128
|
-
├── orchestrator.md # Master orchestrator
|
|
129
|
-
├── pm.md # Product Manager
|
|
130
|
-
├── sm.md # Scrum Master
|
|
131
|
-
├── architect.md # System Architect
|
|
132
|
-
├── devops.md # DevOps Engineer
|
|
133
|
-
├── dev.md # Developer
|
|
134
|
-
├── tea.md # Test Engineer
|
|
135
|
-
├── reviewer.md # Code Reviewer
|
|
136
|
-
├── tech-writer.md # Technical Writer
|
|
137
|
-
├── ux-designer.md # UX Designer
|
|
138
|
-
│
|
|
139
|
-
│ # Official Subagents (8 active)
|
|
140
|
-
├── workflow-status-check.md # Detect workflow state
|
|
141
|
-
├── generic-sm-setup.md # Research or setup mode (Story 31-11)
|
|
142
|
-
├── generic-sm-finish.md # Preflight or execute (Story 31-11)
|
|
143
|
-
├── generic-handoff.md # Workflow-driven handoff (Stories 31-7, 31-10)
|
|
144
|
-
├── sm-handoff.md # SM→TEA/Dev handoff with Jira/branch
|
|
145
|
-
├── sm-file-summary.md # Summarize files
|
|
146
|
-
├── reviewer-preflight.md # Review prep
|
|
147
|
-
└── testing-runner.md # Run tests
|
|
148
|
-
```
|
|
149
|
-
|
|
150
|
-
## Context Budget
|
|
151
|
-
|
|
152
|
-
Each agent is designed to work within **~500-800 line context budget**:
|
|
153
|
-
|
|
154
|
-
### Strategic Agent Budget
|
|
155
|
-
- Agent file: ~200-300 lines
|
|
156
|
-
- Sprint status: ~100-150 lines
|
|
157
|
-
- Repo contexts: ~60 lines
|
|
158
|
-
- Epics/docs: ~100 lines
|
|
159
|
-
- Active work: ~50 lines
|
|
160
|
-
- **Total:** ~500-660 lines
|
|
161
|
-
|
|
162
|
-
### Tactical Agent Budget
|
|
163
|
-
- Agent file: ~250-400 lines
|
|
164
|
-
- Sprint status (story): ~50 lines
|
|
165
|
-
- Active work: ~50 lines
|
|
166
|
-
- Target repo context: ~100 lines
|
|
167
|
-
- **Total:** ~450-600 lines
|
|
168
|
-
|
|
169
|
-
## Agent Coordination
|
|
170
|
-
|
|
171
|
-
### TDD Flow Handoffs
|
|
172
|
-
|
|
173
|
-
```
|
|
174
|
-
SM → TEA: Story selected, write failing tests
|
|
175
|
-
TEA → Dev: Tests written (RED), make them pass
|
|
176
|
-
Dev → Reviewer: Implementation done, review PR
|
|
177
|
-
Reviewer → SM: Story approved, finish it
|
|
178
|
-
Reviewer → Dev: Issues found, fix needed
|
|
179
|
-
```
|
|
180
|
-
|
|
181
|
-
### Strategic → Tactical Handoffs
|
|
182
|
-
|
|
183
|
-
```
|
|
184
|
-
PM → SM: Epic needs stories
|
|
185
|
-
SM → TEA: Story ready for tests
|
|
186
|
-
TEA → Dev: Tests ready for implementation
|
|
187
|
-
Dev → Reviewer: PR ready for review
|
|
188
|
-
```
|
|
189
|
-
|
|
190
|
-
### Strategic ↔ Strategic Coordination
|
|
191
|
-
|
|
192
|
-
```
|
|
193
|
-
PM ↔ Architect: Need design decisions
|
|
194
|
-
PM ↔ SM: Story prioritization
|
|
195
|
-
SM ↔ Architect: Technical approach
|
|
196
|
-
```
|
|
197
|
-
|
|
198
|
-
### Tactical → Strategic Feedback
|
|
199
|
-
|
|
200
|
-
```
|
|
201
|
-
Dev → SM: Story blocked or needs clarification
|
|
202
|
-
TEA → SM: Test coverage gaps identified
|
|
203
|
-
Reviewer → SM: Code quality concerns
|
|
204
|
-
Tech Writer → SM: Documentation needs
|
|
205
|
-
```
|
|
206
|
-
|
|
207
|
-
## Creating New Agents
|
|
208
|
-
|
|
209
|
-
To add a new agent:
|
|
210
|
-
|
|
211
|
-
1. Create `.pennyfarthing/agents/[name].md`
|
|
212
|
-
2. Follow existing agent structure
|
|
213
|
-
3. Add to `../agent-scopes.yaml`
|
|
214
|
-
4. Update this README
|
|
215
|
-
5. Create command in `.claude/commands/[name].md`
|
|
216
|
-
|
|
217
|
-
### Agent Template Structure
|
|
218
|
-
|
|
219
|
-
```markdown
|
|
220
|
-
# [Agent Name] Agent - [Role]
|
|
221
|
-
|
|
222
|
-
## Persona
|
|
223
|
-
[Character description and expertise]
|
|
224
|
-
|
|
225
|
-
## Responsibilities
|
|
226
|
-
[What they handle]
|
|
227
|
-
|
|
228
|
-
## Context
|
|
229
|
-
[Project information]
|
|
230
|
-
|
|
231
|
-
## Context Loading
|
|
232
|
-
[What files to load on activation]
|
|
233
|
-
|
|
234
|
-
## Activation
|
|
235
|
-
[How they operate]
|
|
236
|
-
|
|
237
|
-
## Key Workflows
|
|
238
|
-
[Common tasks]
|
|
239
|
-
|
|
240
|
-
## Handoffs
|
|
241
|
-
[Coordination with other agents]
|
|
242
|
-
|
|
243
|
-
## Activation Command
|
|
244
|
-
[@/agent-name]
|
|
245
|
-
|
|
246
|
-
## Exit
|
|
247
|
-
[How to exit agent mode]
|
|
248
|
-
```
|
|
249
|
-
|
|
250
|
-
## Benefits
|
|
251
|
-
|
|
252
|
-
✅ **Single Source of Truth** - All agents in one place
|
|
253
|
-
✅ **Coordinated Planning** - Strategic agents see full scope
|
|
254
|
-
✅ **Focused Implementation** - Tactical agents load only what they need
|
|
255
|
-
✅ **Clear Hierarchy** - Strategic coordinate, tactical execute
|
|
256
|
-
✅ **Scalable** - Easy to add new agents
|
|
257
|
-
|
|
258
|
-
## Path Standards
|
|
259
|
-
|
|
260
|
-
**IMPORTANT:** All agent commands use `$CLAUDE_PROJECT_DIR` for path references.
|
|
261
|
-
|
|
262
|
-
### Standard Pattern
|
|
263
|
-
```bash
|
|
264
|
-
# ✅ CORRECT - Use $CLAUDE_PROJECT_DIR
|
|
265
|
-
$CLAUDE_PROJECT_DIR/scripts/agent-session.sh start "Agent Name"
|
|
266
|
-
$CLAUDE_PROJECT_DIR/.session/{STORY_ID}-session.md
|
|
267
|
-
|
|
268
|
-
# ❌ WRONG - Don't use git rev-parse (unreliable in agent context)
|
|
269
|
-
$(git rev-parse --show-toplevel)/scripts/agent-session.sh
|
|
270
|
-
|
|
271
|
-
# ❌ WRONG - Don't hardcode absolute paths
|
|
272
|
-
/Users/someone/project/scripts/agent-session.sh
|
|
273
|
-
```
|
|
274
|
-
|
|
275
|
-
### Why $CLAUDE_PROJECT_DIR?
|
|
276
|
-
- `$(git rev-parse --show-toplevel)` doesn't work reliably in agent context
|
|
277
|
-
- Hardcoded paths break on different machines
|
|
278
|
-
- `$CLAUDE_PROJECT_DIR` is set by the environment and works consistently
|
|
279
|
-
|
|
280
|
-
### Usage in Agent Commands
|
|
281
|
-
All agent commands in `.claude/commands/` have been standardized to use `$CLAUDE_PROJECT_DIR`:
|
|
282
|
-
- Agent session registration
|
|
283
|
-
- Script execution
|
|
284
|
-
- File path references
|
|
285
|
-
|
|
286
|
-
## Background Subagent Execution
|
|
287
|
-
|
|
288
|
-
Subagents can run in background using Claude Code's `run_in_background` parameter. This allows the main agent to continue working while slow operations complete asynchronously.
|
|
289
|
-
|
|
290
|
-
### When to Use Background Execution
|
|
291
|
-
|
|
292
|
-
**Good candidates:**
|
|
293
|
-
- Test runs (via `testing-runner`) while writing more code
|
|
294
|
-
- Multiple independent file searches
|
|
295
|
-
- Long-running git operations (fetch, clone)
|
|
296
|
-
- Parallel exploration of code paths
|
|
297
|
-
|
|
298
|
-
**When NOT to use:**
|
|
299
|
-
- Operations where subsequent work depends on the result
|
|
300
|
-
- Operations that modify shared state (session file, git working tree)
|
|
301
|
-
- Sequential workflows (must complete phase A before phase B)
|
|
302
|
-
|
|
303
|
-
### Spawning Background Subagents
|
|
304
|
-
|
|
305
|
-
```yaml
|
|
306
|
-
Task tool:
|
|
307
|
-
subagent_type: "testing-runner"
|
|
308
|
-
run_in_background: true
|
|
309
|
-
prompt: |
|
|
310
|
-
REPOS: all
|
|
311
|
-
CONTEXT: Background test run while implementing
|
|
312
|
-
RUN_ID: bg-test-001
|
|
313
|
-
```
|
|
314
|
-
|
|
315
|
-
### Checking Background Task Status
|
|
316
|
-
|
|
317
|
-
Use the `TaskOutput` tool to check on background tasks:
|
|
318
|
-
|
|
319
|
-
```yaml
|
|
320
|
-
TaskOutput tool:
|
|
321
|
-
task_id: {task_id from spawn}
|
|
322
|
-
block: false # Non-blocking check
|
|
323
|
-
timeout: 1000 # Quick timeout for status check
|
|
324
|
-
```
|
|
325
|
-
|
|
326
|
-
**Status values:**
|
|
327
|
-
- `running` - Task still executing
|
|
328
|
-
- `completed` - Task finished, results available
|
|
329
|
-
- `error` - Task failed
|
|
330
|
-
|
|
331
|
-
### Tracking Background Tasks in Session Files
|
|
332
|
-
|
|
333
|
-
Use the background task tracking utilities to manage session file entries:
|
|
334
|
-
|
|
335
|
-
```bash
|
|
336
|
-
source $CLAUDE_PROJECT_DIR/scripts/utils/background-tasks.sh
|
|
337
|
-
SESSION_FILE="$CLAUDE_PROJECT_DIR/.session/${STORY_ID}-session.md"
|
|
338
|
-
|
|
339
|
-
# After spawning, record the task:
|
|
340
|
-
bg_task_add "$SESSION_FILE" "$TASK_ID" "testing-runner" "Background test run"
|
|
341
|
-
|
|
342
|
-
# After checking TaskOutput, update status:
|
|
343
|
-
bg_task_update "$SESSION_FILE" "$TASK_ID" "completed" # or "error"
|
|
344
|
-
|
|
345
|
-
# Clean up finished tasks:
|
|
346
|
-
bg_task_cleanup "$SESSION_FILE"
|
|
347
|
-
```
|
|
348
|
-
|
|
349
|
-
**Available functions:**
|
|
350
|
-
| Function | Purpose |
|
|
351
|
-
|----------|---------|
|
|
352
|
-
| `bg_task_add` | Record new background task |
|
|
353
|
-
| `bg_task_update` | Update task status (running/completed/error) |
|
|
354
|
-
| `bg_task_cleanup` | Remove completed and errored tasks |
|
|
355
|
-
| `bg_task_list` | Show all running tasks |
|
|
356
|
-
| `bg_task_check` | Return 0 if any tasks running |
|
|
357
|
-
| `bg_task_summary` | Print counts by status |
|
|
358
|
-
|
|
359
|
-
### Background Execution Constraints
|
|
360
|
-
|
|
361
|
-
1. **No concurrent state mutation** - Don't have multiple background tasks writing to the same file
|
|
362
|
-
2. **Independent operations only** - Each background task should be self-contained
|
|
363
|
-
3. **Check before proceeding** - If you need the result, wait for it with `block: true`
|
|
364
|
-
4. **Clean up tracking** - Use `bg_task_cleanup` after processing results
|
|
365
|
-
|
|
366
|
-
### Example: Background Tests While Coding
|
|
367
|
-
|
|
368
|
-
```bash
|
|
369
|
-
# 1. Spawn testing-runner with run_in_background: true
|
|
370
|
-
# 2. Record: bg_task_add "$SESSION_FILE" "$TASK_ID" "testing-runner" "Tests while coding"
|
|
371
|
-
# 3. Continue writing code
|
|
372
|
-
# 4. Periodically check TaskOutput with block: false
|
|
373
|
-
# 5. When complete: bg_task_update "$SESSION_FILE" "$TASK_ID" "completed"
|
|
374
|
-
# 6. Cleanup: bg_task_cleanup "$SESSION_FILE"
|
|
375
|
-
# 7. If RED: stop and fix
|
|
376
|
-
# 8. If GREEN: continue with confidence
|
|
377
|
-
```
|
|
378
|
-
|
|
379
|
-
## Quick Reference
|
|
380
|
-
|
|
381
|
-
```bash
|
|
382
|
-
# View agent scope configuration
|
|
383
|
-
cat .claude/project/docs/agent-scopes.yaml
|
|
384
|
-
|
|
385
|
-
# List all agents
|
|
386
|
-
ls .pennyfarthing/agents/
|
|
387
|
-
|
|
388
|
-
# View agent definition
|
|
389
|
-
cat .pennyfarthing/agents/pm.md
|
|
390
|
-
|
|
391
|
-
# Activate agent
|
|
392
|
-
@/pm
|
|
393
|
-
```
|
|
394
|
-
|
|
395
|
-
---
|
|
396
|
-
|
|
397
|
-
**Your coordinated Pennyfarthing agent system is ready!**
|