prjct-cli 1.22.0 → 1.24.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/CHANGELOG.md +230 -0
- package/bin/prjct +30 -13
- package/dist/bin/prjct-core.mjs +1748 -0
- package/dist/bin/prjct.mjs +17 -36672
- package/dist/cli/linear.mjs +14 -0
- package/dist/daemon/entry.mjs +1429 -0
- package/dist/templates.json +1 -0
- package/package.json +4 -5
- package/bin/prjct.ts +0 -342
- package/core/__tests__/agentic/analysis-injection.test.ts +0 -377
- package/core/__tests__/agentic/cache-eviction.test.ts +0 -294
- package/core/__tests__/agentic/command-context.test.ts +0 -281
- package/core/__tests__/agentic/command-executor.test.ts +0 -659
- package/core/__tests__/agentic/domain-classifier.test.ts +0 -330
- package/core/__tests__/agentic/injection-validator.test.ts +0 -255
- package/core/__tests__/agentic/memory-system.test.ts +0 -281
- package/core/__tests__/agentic/plan-mode.test.ts +0 -386
- package/core/__tests__/agentic/prompt-assembly.test.ts +0 -298
- package/core/__tests__/agentic/prompt-builder.test.ts +0 -243
- package/core/__tests__/agentic/response-validator.test.ts +0 -263
- package/core/__tests__/agentic/semantic-matching.test.ts +0 -131
- package/core/__tests__/agentic/smart-context.test.ts +0 -372
- package/core/__tests__/agentic/tech-normalizer.test.ts +0 -136
- package/core/__tests__/agentic/token-budget.test.ts +0 -294
- package/core/__tests__/ai-tools/formatters.test.ts +0 -476
- package/core/__tests__/domain/bm25.test.ts +0 -225
- package/core/__tests__/domain/change-propagator.test.ts +0 -100
- package/core/__tests__/domain/fibonacci.test.ts +0 -113
- package/core/__tests__/domain/file-hasher.test.ts +0 -146
- package/core/__tests__/domain/file-ranker.test.ts +0 -169
- package/core/__tests__/domain/git-cochange.test.ts +0 -121
- package/core/__tests__/domain/import-graph.test.ts +0 -156
- package/core/__tests__/domain/velocity.test.ts +0 -623
- package/core/__tests__/infrastructure/performance-tracker.test.ts +0 -328
- package/core/__tests__/schemas/model.test.ts +0 -272
- package/core/__tests__/services/dependency-validator.test.ts +0 -175
- package/core/__tests__/services/hierarchical-agent-resolver.test.ts +0 -359
- package/core/__tests__/services/nested-context-resolver.test.ts +0 -443
- package/core/__tests__/services/project-index.test.ts +0 -355
- package/core/__tests__/services/staleness-checker.test.ts +0 -204
- package/core/__tests__/storage/analysis-storage.test.ts +0 -641
- package/core/__tests__/storage/archive-storage.test.ts +0 -455
- package/core/__tests__/storage/safe-reader.test.ts +0 -262
- package/core/__tests__/storage/sqlite-migration.test.ts +0 -1016
- package/core/__tests__/storage/state-storage-feedback.test.ts +0 -463
- package/core/__tests__/storage/state-storage-history.test.ts +0 -469
- package/core/__tests__/storage/storage-manager.test.ts +0 -383
- package/core/__tests__/storage/subtask-handoff.test.ts +0 -237
- package/core/__tests__/types/fs.test.ts +0 -125
- package/core/__tests__/utils/date-helper.test.ts +0 -449
- package/core/__tests__/utils/output.test.ts +0 -278
- package/core/__tests__/utils/preserve-sections.test.ts +0 -216
- package/core/__tests__/utils/project-commands.test.ts +0 -71
- package/core/__tests__/utils/retry.test.ts +0 -381
- package/core/__tests__/workflow/state-machine.test.ts +0 -216
- package/core/agentic/agent-router.ts +0 -150
- package/core/agentic/anti-hallucination.ts +0 -141
- package/core/agentic/chain-of-thought.ts +0 -234
- package/core/agentic/command-classifier.ts +0 -141
- package/core/agentic/command-context.ts +0 -168
- package/core/agentic/command-executor.ts +0 -471
- package/core/agentic/context-builder.ts +0 -285
- package/core/agentic/domain-classifier.ts +0 -525
- package/core/agentic/environment-block.ts +0 -102
- package/core/agentic/ground-truth.ts +0 -706
- package/core/agentic/index.ts +0 -193
- package/core/agentic/injection-validator.ts +0 -208
- package/core/agentic/loop-detector.ts +0 -451
- package/core/agentic/memory-system.ts +0 -1547
- package/core/agentic/orchestrator-executor.ts +0 -579
- package/core/agentic/plan-mode.ts +0 -525
- package/core/agentic/prompt-builder.ts +0 -1069
- package/core/agentic/response-validator.ts +0 -98
- package/core/agentic/services.ts +0 -167
- package/core/agentic/skill-loader.ts +0 -106
- package/core/agentic/smart-context.ts +0 -393
- package/core/agentic/tech-normalizer.ts +0 -167
- package/core/agentic/template-executor.ts +0 -272
- package/core/agentic/template-loader.ts +0 -109
- package/core/agentic/token-budget.ts +0 -226
- package/core/agentic/tool-registry.ts +0 -146
- package/core/agents/index.ts +0 -28
- package/core/agents/performance.ts +0 -429
- package/core/ai-tools/formatters.ts +0 -341
- package/core/ai-tools/generator.ts +0 -144
- package/core/ai-tools/index.ts +0 -15
- package/core/ai-tools/registry.ts +0 -201
- package/core/bus/bus.ts +0 -314
- package/core/bus/index.ts +0 -8
- package/core/cli/linear.ts +0 -500
- package/core/cli/lint-meta-commentary.ts +0 -177
- package/core/cli/start.ts +0 -386
- package/core/commands/analysis.ts +0 -1274
- package/core/commands/analytics.ts +0 -342
- package/core/commands/base.ts +0 -118
- package/core/commands/cleanup.ts +0 -157
- package/core/commands/command-data.ts +0 -463
- package/core/commands/commands.ts +0 -306
- package/core/commands/context.ts +0 -238
- package/core/commands/design.ts +0 -77
- package/core/commands/index.ts +0 -19
- package/core/commands/maintenance.ts +0 -77
- package/core/commands/performance.ts +0 -114
- package/core/commands/planning.ts +0 -662
- package/core/commands/register.ts +0 -127
- package/core/commands/registry.ts +0 -444
- package/core/commands/setup.ts +0 -280
- package/core/commands/shipping.ts +0 -267
- package/core/commands/snapshots.ts +0 -297
- package/core/commands/uninstall.ts +0 -542
- package/core/commands/velocity.ts +0 -149
- package/core/commands/workflow.ts +0 -505
- package/core/config/command-context.config.json +0 -66
- package/core/constants/index.ts +0 -379
- package/core/context/generator.ts +0 -368
- package/core/context-tools/files-tool.ts +0 -577
- package/core/context-tools/imports-tool.ts +0 -400
- package/core/context-tools/index.ts +0 -434
- package/core/context-tools/recent-tool.ts +0 -301
- package/core/context-tools/signatures-tool.ts +0 -495
- package/core/context-tools/summary-tool.ts +0 -301
- package/core/context-tools/token-counter.ts +0 -273
- package/core/context-tools/types.ts +0 -253
- package/core/domain/agent-generator.ts +0 -186
- package/core/domain/agent-loader.ts +0 -419
- package/core/domain/analyzer.ts +0 -387
- package/core/domain/architecture-generator.ts +0 -108
- package/core/domain/bm25.ts +0 -525
- package/core/domain/change-propagator.ts +0 -162
- package/core/domain/context-estimator.ts +0 -175
- package/core/domain/fibonacci.ts +0 -128
- package/core/domain/file-hasher.ts +0 -296
- package/core/domain/file-ranker.ts +0 -151
- package/core/domain/git-cochange.ts +0 -250
- package/core/domain/import-graph.ts +0 -315
- package/core/domain/snapshot-manager.ts +0 -415
- package/core/domain/task-stack.ts +0 -578
- package/core/domain/velocity.ts +0 -470
- package/core/errors.ts +0 -335
- package/core/events/events.ts +0 -85
- package/core/events/index.ts +0 -8
- package/core/index.ts +0 -481
- package/core/infrastructure/agent-detector.ts +0 -135
- package/core/infrastructure/ai-provider.ts +0 -578
- package/core/infrastructure/author-detector.ts +0 -133
- package/core/infrastructure/capability-installer.ts +0 -76
- package/core/infrastructure/claude-agent.ts +0 -297
- package/core/infrastructure/command-installer.ts +0 -752
- package/core/infrastructure/config-manager.ts +0 -364
- package/core/infrastructure/editors-config.ts +0 -172
- package/core/infrastructure/path-manager.ts +0 -571
- package/core/infrastructure/performance-tracker.ts +0 -326
- package/core/infrastructure/permission-manager.ts +0 -289
- package/core/infrastructure/setup.ts +0 -1061
- package/core/infrastructure/update-checker.ts +0 -246
- package/core/integrations/issue-tracker/enricher.ts +0 -271
- package/core/integrations/issue-tracker/index.ts +0 -8
- package/core/integrations/issue-tracker/manager.ts +0 -286
- package/core/integrations/issue-tracker/types.ts +0 -310
- package/core/integrations/jira/cache.ts +0 -57
- package/core/integrations/jira/client.ts +0 -688
- package/core/integrations/jira/index.ts +0 -23
- package/core/integrations/jira/service.ts +0 -244
- package/core/integrations/linear/cache.ts +0 -68
- package/core/integrations/linear/client.ts +0 -436
- package/core/integrations/linear/index.ts +0 -20
- package/core/integrations/linear/service.ts +0 -260
- package/core/integrations/linear/sync.ts +0 -314
- package/core/outcomes/analyzer.ts +0 -286
- package/core/outcomes/index.ts +0 -34
- package/core/outcomes/recorder.ts +0 -195
- package/core/plugin/builtin/webhook.ts +0 -148
- package/core/plugin/hooks.ts +0 -315
- package/core/plugin/index.ts +0 -50
- package/core/plugin/loader.ts +0 -354
- package/core/plugin/registry.ts +0 -326
- package/core/schemas/agents.ts +0 -27
- package/core/schemas/analysis.ts +0 -530
- package/core/schemas/classification.ts +0 -91
- package/core/schemas/command-context.ts +0 -29
- package/core/schemas/enriched-task.ts +0 -291
- package/core/schemas/ideas.ts +0 -114
- package/core/schemas/index.ts +0 -53
- package/core/schemas/issues.ts +0 -159
- package/core/schemas/llm-output.ts +0 -170
- package/core/schemas/metrics.ts +0 -143
- package/core/schemas/model.ts +0 -153
- package/core/schemas/outcomes.ts +0 -487
- package/core/schemas/performance.ts +0 -128
- package/core/schemas/permissions.ts +0 -180
- package/core/schemas/prd.ts +0 -450
- package/core/schemas/project.ts +0 -57
- package/core/schemas/roadmap.ts +0 -322
- package/core/schemas/schemas.ts +0 -38
- package/core/schemas/shipped.ts +0 -109
- package/core/schemas/state.ts +0 -284
- package/core/schemas/velocity.ts +0 -103
- package/core/server/index.ts +0 -21
- package/core/server/routes-extended.ts +0 -566
- package/core/server/routes.ts +0 -176
- package/core/server/server.ts +0 -149
- package/core/server/sse.ts +0 -192
- package/core/services/agent-generator.ts +0 -385
- package/core/services/agent-service.ts +0 -168
- package/core/services/breakdown-service.ts +0 -124
- package/core/services/context-generator.ts +0 -445
- package/core/services/context-selector.ts +0 -429
- package/core/services/dependency-validator.ts +0 -318
- package/core/services/diff-generator.ts +0 -313
- package/core/services/doctor-service.ts +0 -423
- package/core/services/file-categorizer.ts +0 -448
- package/core/services/file-scorer.ts +0 -270
- package/core/services/git-analyzer.ts +0 -293
- package/core/services/hierarchical-agent-resolver.ts +0 -236
- package/core/services/hooks-service.ts +0 -685
- package/core/services/index.ts +0 -46
- package/core/services/local-state-generator.ts +0 -158
- package/core/services/memory-service.ts +0 -181
- package/core/services/nested-context-resolver.ts +0 -842
- package/core/services/project-index.ts +0 -911
- package/core/services/project-service.ts +0 -155
- package/core/services/session-tracker.ts +0 -287
- package/core/services/skill-installer.ts +0 -447
- package/core/services/skill-lock.ts +0 -132
- package/core/services/skill-service.ts +0 -306
- package/core/services/stack-detector.ts +0 -229
- package/core/services/staleness-checker.ts +0 -327
- package/core/services/sync-service.ts +0 -1515
- package/core/services/sync-verifier.ts +0 -253
- package/core/services/watch-service.ts +0 -312
- package/core/session/compaction.ts +0 -248
- package/core/session/index.ts +0 -35
- package/core/session/log-migration.ts +0 -88
- package/core/session/metrics.ts +0 -323
- package/core/session/session-log-manager.ts +0 -307
- package/core/session/task-session-manager.ts +0 -404
- package/core/session/utils.ts +0 -51
- package/core/storage/analysis-storage.ts +0 -373
- package/core/storage/archive-storage.ts +0 -205
- package/core/storage/database.ts +0 -575
- package/core/storage/ideas-storage.ts +0 -298
- package/core/storage/index-storage.ts +0 -523
- package/core/storage/index.ts +0 -79
- package/core/storage/metrics-storage.ts +0 -321
- package/core/storage/migrate-json.ts +0 -720
- package/core/storage/queue-storage.ts +0 -336
- package/core/storage/safe-reader.ts +0 -105
- package/core/storage/shipped-storage.ts +0 -253
- package/core/storage/state-storage.ts +0 -1035
- package/core/storage/storage-manager.ts +0 -205
- package/core/storage/storage.ts +0 -177
- package/core/storage/velocity-storage.ts +0 -149
- package/core/sync/auth-config.ts +0 -138
- package/core/sync/index.ts +0 -31
- package/core/sync/oauth-handler.ts +0 -143
- package/core/sync/sync-client.ts +0 -251
- package/core/sync/sync-manager.ts +0 -327
- package/core/tsconfig.json +0 -22
- package/core/types/agentic.ts +0 -760
- package/core/types/agents.ts +0 -150
- package/core/types/bus.ts +0 -193
- package/core/types/citations.ts +0 -22
- package/core/types/commands.ts +0 -399
- package/core/types/config.ts +0 -92
- package/core/types/core.ts +0 -96
- package/core/types/diff.ts +0 -41
- package/core/types/domain.ts +0 -71
- package/core/types/errors.ts +0 -111
- package/core/types/events.ts +0 -42
- package/core/types/fs.ts +0 -72
- package/core/types/index.ts +0 -510
- package/core/types/infrastructure.ts +0 -210
- package/core/types/integrations.ts +0 -31
- package/core/types/jira.ts +0 -51
- package/core/types/logger.ts +0 -17
- package/core/types/memory.ts +0 -313
- package/core/types/outcomes.ts +0 -190
- package/core/types/output.ts +0 -47
- package/core/types/plugin.ts +0 -25
- package/core/types/project-sync.ts +0 -129
- package/core/types/provider.ts +0 -163
- package/core/types/server.ts +0 -71
- package/core/types/services.ts +0 -84
- package/core/types/session.ts +0 -135
- package/core/types/stack.ts +0 -19
- package/core/types/storage.ts +0 -318
- package/core/types/sync-verifier.ts +0 -33
- package/core/types/sync.ts +0 -121
- package/core/types/task.ts +0 -72
- package/core/types/template.ts +0 -24
- package/core/types/utils.ts +0 -92
- package/core/types/workflow.ts +0 -23
- package/core/utils/agent-stream.ts +0 -140
- package/core/utils/animations.ts +0 -251
- package/core/utils/branding.ts +0 -88
- package/core/utils/cache.ts +0 -187
- package/core/utils/citations.ts +0 -39
- package/core/utils/collection-filters.ts +0 -209
- package/core/utils/date-helper.ts +0 -176
- package/core/utils/error-messages.ts +0 -38
- package/core/utils/file-helper.ts +0 -277
- package/core/utils/fs-helpers.ts +0 -14
- package/core/utils/help.ts +0 -314
- package/core/utils/jsonl-helper.ts +0 -290
- package/core/utils/keychain.ts +0 -127
- package/core/utils/logger.ts +0 -77
- package/core/utils/markdown-builder.ts +0 -280
- package/core/utils/next-steps.ts +0 -95
- package/core/utils/output.ts +0 -403
- package/core/utils/preserve-sections.ts +0 -218
- package/core/utils/project-commands.ts +0 -126
- package/core/utils/project-credentials.ts +0 -143
- package/core/utils/provider-cache.ts +0 -49
- package/core/utils/retry.ts +0 -318
- package/core/utils/runtime.ts +0 -108
- package/core/utils/session-helper.ts +0 -278
- package/core/utils/subtask-table.ts +0 -227
- package/core/utils/version.ts +0 -128
- package/core/wizard/index.ts +0 -13
- package/core/wizard/onboarding.ts +0 -633
- package/core/workflow/index.ts +0 -7
- package/core/workflow/state-machine.ts +0 -198
- package/core/workflow/workflow-preferences.ts +0 -294
- package/dist/core/infrastructure/command-installer.js +0 -1141
- package/dist/core/infrastructure/editors-config.js +0 -177
- package/dist/core/infrastructure/setup.js +0 -2244
- package/dist/core/utils/version.js +0 -141
- package/templates/agentic/agent-routing.md +0 -45
- package/templates/agentic/agents/uxui.md +0 -63
- package/templates/agentic/checklist-routing.md +0 -98
- package/templates/agentic/orchestrator.md +0 -68
- package/templates/agentic/task-fragmentation.md +0 -89
- package/templates/agents/AGENTS.md +0 -68
- package/templates/analysis/analyze.md +0 -84
- package/templates/analysis/patterns.md +0 -60
- package/templates/antigravity/SKILL.md +0 -39
- package/templates/architect/discovery.md +0 -67
- package/templates/architect/phases.md +0 -59
- package/templates/checklists/architecture.md +0 -28
- package/templates/checklists/code-quality.md +0 -28
- package/templates/checklists/data.md +0 -33
- package/templates/checklists/documentation.md +0 -33
- package/templates/checklists/infrastructure.md +0 -33
- package/templates/checklists/performance.md +0 -33
- package/templates/checklists/security.md +0 -33
- package/templates/checklists/testing.md +0 -33
- package/templates/checklists/ux-ui.md +0 -37
- package/templates/commands/analyze.md +0 -56
- package/templates/commands/auth.md +0 -234
- package/templates/commands/bug.md +0 -163
- package/templates/commands/cleanup.md +0 -19
- package/templates/commands/dash.md +0 -99
- package/templates/commands/design.md +0 -15
- package/templates/commands/done.md +0 -291
- package/templates/commands/enrich.md +0 -174
- package/templates/commands/git.md +0 -295
- package/templates/commands/history.md +0 -389
- package/templates/commands/idea.md +0 -88
- package/templates/commands/impact.md +0 -864
- package/templates/commands/init.md +0 -54
- package/templates/commands/jira.md +0 -278
- package/templates/commands/linear.md +0 -288
- package/templates/commands/merge.md +0 -206
- package/templates/commands/next.md +0 -80
- package/templates/commands/p.md +0 -67
- package/templates/commands/p.toml +0 -37
- package/templates/commands/pause.md +0 -136
- package/templates/commands/plan.md +0 -696
- package/templates/commands/prd.md +0 -356
- package/templates/commands/resume.md +0 -171
- package/templates/commands/review.md +0 -276
- package/templates/commands/serve.md +0 -118
- package/templates/commands/setup.md +0 -91
- package/templates/commands/ship.md +0 -475
- package/templates/commands/skill.md +0 -259
- package/templates/commands/spec.md +0 -218
- package/templates/commands/status.md +0 -207
- package/templates/commands/sync.md +0 -104
- package/templates/commands/task.md +0 -312
- package/templates/commands/test.md +0 -93
- package/templates/commands/update.md +0 -63
- package/templates/commands/verify.md +0 -204
- package/templates/commands/workflow.md +0 -150
- package/templates/config/skill-mappings.json +0 -82
- package/templates/context/dashboard.md +0 -256
- package/templates/context/roadmap.md +0 -221
- package/templates/cursor/commands/bug.md +0 -8
- package/templates/cursor/commands/done.md +0 -4
- package/templates/cursor/commands/pause.md +0 -6
- package/templates/cursor/commands/resume.md +0 -4
- package/templates/cursor/commands/ship.md +0 -8
- package/templates/cursor/commands/sync.md +0 -4
- package/templates/cursor/commands/task.md +0 -8
- package/templates/cursor/p.md +0 -29
- package/templates/cursor/router.mdc +0 -28
- package/templates/design/api.md +0 -95
- package/templates/design/architecture.md +0 -77
- package/templates/design/component.md +0 -89
- package/templates/design/database.md +0 -78
- package/templates/design/flow.md +0 -94
- package/templates/global/ANTIGRAVITY.md +0 -254
- package/templates/global/CLAUDE.md +0 -497
- package/templates/global/CURSOR.mdc +0 -266
- package/templates/global/GEMINI.md +0 -293
- package/templates/global/STORAGE-SPEC.md +0 -391
- package/templates/global/WINDSURF.md +0 -266
- package/templates/global/modules/CLAUDE-commands.md +0 -70
- package/templates/global/modules/CLAUDE-core.md +0 -105
- package/templates/global/modules/CLAUDE-git.md +0 -50
- package/templates/global/modules/CLAUDE-intelligence.md +0 -92
- package/templates/global/modules/CLAUDE-storage.md +0 -50
- package/templates/global/modules/module-config.json +0 -36
- package/templates/mcp-config.json +0 -19
- package/templates/permissions/default.jsonc +0 -60
- package/templates/permissions/permissive.jsonc +0 -49
- package/templates/permissions/strict.jsonc +0 -58
- package/templates/planning-methodology.md +0 -195
- package/templates/skills/code-review.md +0 -47
- package/templates/skills/debug.md +0 -61
- package/templates/skills/refactor.md +0 -47
- package/templates/subagents/agent-base.md +0 -20
- package/templates/subagents/domain/backend.md +0 -109
- package/templates/subagents/domain/database.md +0 -121
- package/templates/subagents/domain/devops.md +0 -152
- package/templates/subagents/domain/frontend.md +0 -103
- package/templates/subagents/domain/testing.md +0 -169
- package/templates/subagents/pm-expert.md +0 -366
- package/templates/subagents/workflow/chief-architect.md +0 -657
- package/templates/subagents/workflow/prjct-planner.md +0 -159
- package/templates/subagents/workflow/prjct-shipper.md +0 -188
- package/templates/subagents/workflow/prjct-workflow.md +0 -98
- package/templates/tools/bash.txt +0 -22
- package/templates/tools/edit.txt +0 -18
- package/templates/tools/glob.txt +0 -19
- package/templates/tools/grep.txt +0 -21
- package/templates/tools/read.txt +0 -14
- package/templates/tools/task.txt +0 -20
- package/templates/tools/webfetch.txt +0 -16
- package/templates/tools/websearch.txt +0 -18
- package/templates/tools/write.txt +0 -17
- package/templates/windsurf/router.md +0 -28
- package/templates/windsurf/workflows/bug.md +0 -8
- package/templates/windsurf/workflows/done.md +0 -4
- package/templates/windsurf/workflows/pause.md +0 -4
- package/templates/windsurf/workflows/resume.md +0 -4
- package/templates/windsurf/workflows/ship.md +0 -8
- package/templates/windsurf/workflows/sync.md +0 -4
- package/templates/windsurf/workflows/task.md +0 -8
|
@@ -1,180 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Permissions Schema
|
|
3
|
-
*
|
|
4
|
-
* Defines granular permission controls for bash commands and file operations.
|
|
5
|
-
* Inspired by opencode's glob-based permission system.
|
|
6
|
-
*
|
|
7
|
-
* @version 1.0.0
|
|
8
|
-
*/
|
|
9
|
-
|
|
10
|
-
import { z } from 'zod'
|
|
11
|
-
|
|
12
|
-
// =============================================================================
|
|
13
|
-
// Zod Schemas - Source of Truth
|
|
14
|
-
// =============================================================================
|
|
15
|
-
|
|
16
|
-
/** Permission level for an action */
|
|
17
|
-
export const PermissionLevelSchema = z.enum(['allow', 'deny', 'ask'])
|
|
18
|
-
|
|
19
|
-
/** File operation types */
|
|
20
|
-
export const FileOperationSchema = z.enum(['read', 'write', 'delete', 'create'])
|
|
21
|
-
|
|
22
|
-
/** Bash command permission entry - glob pattern to permission level */
|
|
23
|
-
export const BashPermissionSchema = z.record(z.string(), PermissionLevelSchema)
|
|
24
|
-
|
|
25
|
-
/** File permission entry - glob pattern to permission level */
|
|
26
|
-
export const FilePermissionSchema = z.record(z.string(), PermissionLevelSchema)
|
|
27
|
-
|
|
28
|
-
/** Web fetch permission */
|
|
29
|
-
export const WebPermissionSchema = z.object({
|
|
30
|
-
enabled: z.boolean().default(true),
|
|
31
|
-
allowedDomains: z.array(z.string()).optional(),
|
|
32
|
-
blockedDomains: z.array(z.string()).optional(),
|
|
33
|
-
})
|
|
34
|
-
|
|
35
|
-
/** Complete permissions configuration */
|
|
36
|
-
export const PermissionsConfigSchema = z.object({
|
|
37
|
-
/** Bash command permissions - glob patterns */
|
|
38
|
-
bash: BashPermissionSchema.optional(),
|
|
39
|
-
|
|
40
|
-
/** File operation permissions - glob patterns */
|
|
41
|
-
files: z
|
|
42
|
-
.object({
|
|
43
|
-
read: FilePermissionSchema.optional(),
|
|
44
|
-
write: FilePermissionSchema.optional(),
|
|
45
|
-
delete: FilePermissionSchema.optional(),
|
|
46
|
-
})
|
|
47
|
-
.optional(),
|
|
48
|
-
|
|
49
|
-
/** Web fetch permissions */
|
|
50
|
-
web: WebPermissionSchema.optional(),
|
|
51
|
-
|
|
52
|
-
/** Skill invocation permissions */
|
|
53
|
-
skills: z.record(z.string(), PermissionLevelSchema).optional(),
|
|
54
|
-
|
|
55
|
-
/** Doom loop protection - prevent infinite retries */
|
|
56
|
-
doomLoop: z
|
|
57
|
-
.object({
|
|
58
|
-
enabled: z.boolean().default(true),
|
|
59
|
-
maxRetries: z.number().default(3),
|
|
60
|
-
})
|
|
61
|
-
.optional(),
|
|
62
|
-
|
|
63
|
-
/** External directory access */
|
|
64
|
-
externalDirectories: PermissionLevelSchema.default('ask'),
|
|
65
|
-
})
|
|
66
|
-
|
|
67
|
-
// =============================================================================
|
|
68
|
-
// Inferred Types
|
|
69
|
-
// =============================================================================
|
|
70
|
-
|
|
71
|
-
export type PermissionLevel = z.infer<typeof PermissionLevelSchema>
|
|
72
|
-
export type FileOperation = z.infer<typeof FileOperationSchema>
|
|
73
|
-
export type BashPermission = z.infer<typeof BashPermissionSchema>
|
|
74
|
-
export type FilePermission = z.infer<typeof FilePermissionSchema>
|
|
75
|
-
export type WebPermission = z.infer<typeof WebPermissionSchema>
|
|
76
|
-
export type PermissionsConfig = z.infer<typeof PermissionsConfigSchema>
|
|
77
|
-
|
|
78
|
-
// =============================================================================
|
|
79
|
-
// Default Permission Presets
|
|
80
|
-
// =============================================================================
|
|
81
|
-
|
|
82
|
-
/** Default safe bash patterns - always allowed */
|
|
83
|
-
export const DEFAULT_BASH_ALLOW: string[] = [
|
|
84
|
-
'git status*',
|
|
85
|
-
'git log*',
|
|
86
|
-
'git diff*',
|
|
87
|
-
'git branch*',
|
|
88
|
-
'git remote*',
|
|
89
|
-
'ls*',
|
|
90
|
-
'pwd',
|
|
91
|
-
'cat*',
|
|
92
|
-
'head*',
|
|
93
|
-
'tail*',
|
|
94
|
-
'grep*',
|
|
95
|
-
'find*',
|
|
96
|
-
'which*',
|
|
97
|
-
'echo*',
|
|
98
|
-
'node -e*',
|
|
99
|
-
'bun -e*',
|
|
100
|
-
'npm list*',
|
|
101
|
-
'npm view*',
|
|
102
|
-
'npx tsc --noEmit*',
|
|
103
|
-
]
|
|
104
|
-
|
|
105
|
-
/** Dangerous bash patterns - always ask */
|
|
106
|
-
export const DEFAULT_BASH_ASK: string[] = [
|
|
107
|
-
'rm -rf*',
|
|
108
|
-
'rm -r*',
|
|
109
|
-
'git push*',
|
|
110
|
-
'git reset --hard*',
|
|
111
|
-
'git clean*',
|
|
112
|
-
'npm publish*',
|
|
113
|
-
'chmod*',
|
|
114
|
-
'chown*',
|
|
115
|
-
'sudo*',
|
|
116
|
-
'curl*|*sh',
|
|
117
|
-
'wget*|*sh',
|
|
118
|
-
]
|
|
119
|
-
|
|
120
|
-
/** Dangerous bash patterns - always deny */
|
|
121
|
-
export const DEFAULT_BASH_DENY: string[] = [
|
|
122
|
-
'rm -rf /*',
|
|
123
|
-
'rm -rf ~/*',
|
|
124
|
-
':(){ :|:& };:*', // Fork bomb
|
|
125
|
-
'mkfs*',
|
|
126
|
-
'dd if=*of=/dev/*',
|
|
127
|
-
]
|
|
128
|
-
|
|
129
|
-
/** Build default permissions config */
|
|
130
|
-
export function buildDefaultPermissions(): PermissionsConfig {
|
|
131
|
-
const bash: BashPermission = {}
|
|
132
|
-
|
|
133
|
-
// Add allow patterns
|
|
134
|
-
for (const pattern of DEFAULT_BASH_ALLOW) {
|
|
135
|
-
bash[pattern] = 'allow'
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
// Add ask patterns
|
|
139
|
-
for (const pattern of DEFAULT_BASH_ASK) {
|
|
140
|
-
bash[pattern] = 'ask'
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
// Add deny patterns
|
|
144
|
-
for (const pattern of DEFAULT_BASH_DENY) {
|
|
145
|
-
bash[pattern] = 'deny'
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
return {
|
|
149
|
-
bash,
|
|
150
|
-
files: {
|
|
151
|
-
read: { '**/*': 'allow' },
|
|
152
|
-
write: { '**/*': 'allow' },
|
|
153
|
-
delete: { '**/*': 'ask' },
|
|
154
|
-
},
|
|
155
|
-
web: {
|
|
156
|
-
enabled: true,
|
|
157
|
-
},
|
|
158
|
-
doomLoop: {
|
|
159
|
-
enabled: true,
|
|
160
|
-
maxRetries: 3,
|
|
161
|
-
},
|
|
162
|
-
externalDirectories: 'ask',
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
// =============================================================================
|
|
167
|
-
// Validation Helpers
|
|
168
|
-
// =============================================================================
|
|
169
|
-
|
|
170
|
-
/** Parse and validate permissions config */
|
|
171
|
-
export const parsePermissions = (data: unknown): PermissionsConfig =>
|
|
172
|
-
PermissionsConfigSchema.parse(data)
|
|
173
|
-
|
|
174
|
-
export const safeParsePermissions = (data: unknown) => PermissionsConfigSchema.safeParse(data)
|
|
175
|
-
|
|
176
|
-
// =============================================================================
|
|
177
|
-
// Defaults
|
|
178
|
-
// =============================================================================
|
|
179
|
-
|
|
180
|
-
export const DEFAULT_PERMISSIONS: PermissionsConfig = buildDefaultPermissions()
|
package/core/schemas/prd.ts
DELETED
|
@@ -1,450 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* PRD Schema
|
|
3
|
-
*
|
|
4
|
-
* Defines the structure for prds.json - Product Requirement Documents.
|
|
5
|
-
* Uses Zod for runtime validation and TypeScript type inference.
|
|
6
|
-
*
|
|
7
|
-
* PRDs are created by the Chief Architect agent following an 8-phase methodology.
|
|
8
|
-
* They serve as the foundation for roadmap planning and Linear/Jira/Monday integration.
|
|
9
|
-
*
|
|
10
|
-
* @version 1.0.0
|
|
11
|
-
*/
|
|
12
|
-
|
|
13
|
-
import { z } from 'zod'
|
|
14
|
-
|
|
15
|
-
// =============================================================================
|
|
16
|
-
// Zod Schemas - Source of Truth
|
|
17
|
-
// =============================================================================
|
|
18
|
-
|
|
19
|
-
export const PRDStatusSchema = z.enum([
|
|
20
|
-
'draft',
|
|
21
|
-
'approved',
|
|
22
|
-
'in_progress',
|
|
23
|
-
'completed',
|
|
24
|
-
'cancelled',
|
|
25
|
-
])
|
|
26
|
-
export const PRDSizeSchema = z.enum(['XS', 'S', 'M', 'L', 'XL'])
|
|
27
|
-
export const ImpactLevelSchema = z.enum(['critical', 'high', 'medium', 'low'])
|
|
28
|
-
export const ConfidenceLevelSchema = z.enum(['low', 'medium', 'high'])
|
|
29
|
-
export const FrequencySchema = z.enum(['daily', 'weekly', 'monthly', 'rarely'])
|
|
30
|
-
export const RiskTypeSchema = z.enum(['technical', 'business', 'timeline'])
|
|
31
|
-
export const APIStyleSchema = z.enum(['REST', 'GraphQL', 'tRPC', 'gRPC', 'none'])
|
|
32
|
-
export const SchemaChangeTypeSchema = z.enum(['create', 'alter', 'drop'])
|
|
33
|
-
|
|
34
|
-
// -----------------------------------------------------------------------------
|
|
35
|
-
// Phase 1: Problem Definition
|
|
36
|
-
// -----------------------------------------------------------------------------
|
|
37
|
-
|
|
38
|
-
export const ProblemSchema = z.object({
|
|
39
|
-
statement: z.string(),
|
|
40
|
-
targetUser: z.string(),
|
|
41
|
-
currentState: z.string().optional(),
|
|
42
|
-
painPoints: z.array(z.string()),
|
|
43
|
-
frequency: FrequencySchema.optional(),
|
|
44
|
-
impact: ImpactLevelSchema,
|
|
45
|
-
})
|
|
46
|
-
|
|
47
|
-
// -----------------------------------------------------------------------------
|
|
48
|
-
// Phase 2: User Flows
|
|
49
|
-
// -----------------------------------------------------------------------------
|
|
50
|
-
|
|
51
|
-
export const UserFlowsSchema = z.object({
|
|
52
|
-
entryPoint: z.string(),
|
|
53
|
-
happyPath: z.array(z.string()),
|
|
54
|
-
successState: z.string(),
|
|
55
|
-
errorStates: z.array(z.string()),
|
|
56
|
-
edgeCases: z.array(z.string()),
|
|
57
|
-
jobsToBeDone: z.string().optional(),
|
|
58
|
-
})
|
|
59
|
-
|
|
60
|
-
// -----------------------------------------------------------------------------
|
|
61
|
-
// Phase 3: Domain Modeling
|
|
62
|
-
// -----------------------------------------------------------------------------
|
|
63
|
-
|
|
64
|
-
export const EntityAttributeSchema = z.object({
|
|
65
|
-
name: z.string(),
|
|
66
|
-
type: z.string(),
|
|
67
|
-
constraints: z.string().optional(),
|
|
68
|
-
})
|
|
69
|
-
|
|
70
|
-
export const DomainEntitySchema = z.object({
|
|
71
|
-
name: z.string(),
|
|
72
|
-
description: z.string(),
|
|
73
|
-
attributes: z.array(EntityAttributeSchema),
|
|
74
|
-
relationships: z.array(z.string()),
|
|
75
|
-
rules: z.array(z.string()),
|
|
76
|
-
states: z.array(z.string()),
|
|
77
|
-
})
|
|
78
|
-
|
|
79
|
-
export const DomainModelSchema = z.object({
|
|
80
|
-
newEntities: z.array(DomainEntitySchema),
|
|
81
|
-
modifiedEntities: z.array(z.string()),
|
|
82
|
-
boundedContext: z.string().optional(),
|
|
83
|
-
})
|
|
84
|
-
|
|
85
|
-
// -----------------------------------------------------------------------------
|
|
86
|
-
// Phase 4: API Contracts
|
|
87
|
-
// -----------------------------------------------------------------------------
|
|
88
|
-
|
|
89
|
-
export const APIEndpointSchema = z.object({
|
|
90
|
-
operation: z.string(),
|
|
91
|
-
method: z.enum(['GET', 'POST', 'PUT', 'PATCH', 'DELETE']).optional(),
|
|
92
|
-
path: z.string().optional(),
|
|
93
|
-
auth: z.enum(['required', 'optional', 'none']),
|
|
94
|
-
input: z.record(z.string()).optional(),
|
|
95
|
-
output: z.record(z.string()).optional(),
|
|
96
|
-
errors: z
|
|
97
|
-
.array(
|
|
98
|
-
z.object({
|
|
99
|
-
code: z.number(),
|
|
100
|
-
description: z.string(),
|
|
101
|
-
})
|
|
102
|
-
)
|
|
103
|
-
.optional(),
|
|
104
|
-
})
|
|
105
|
-
|
|
106
|
-
export const APIContractsSchema = z.object({
|
|
107
|
-
style: APIStyleSchema,
|
|
108
|
-
endpoints: z.array(APIEndpointSchema),
|
|
109
|
-
})
|
|
110
|
-
|
|
111
|
-
// -----------------------------------------------------------------------------
|
|
112
|
-
// Phase 5: System Architecture
|
|
113
|
-
// -----------------------------------------------------------------------------
|
|
114
|
-
|
|
115
|
-
export const ArchitectureComponentSchema = z.object({
|
|
116
|
-
name: z.string(),
|
|
117
|
-
responsibility: z.string(),
|
|
118
|
-
dependencies: z.array(z.string()),
|
|
119
|
-
})
|
|
120
|
-
|
|
121
|
-
export const ArchitectureSchema = z.object({
|
|
122
|
-
pattern: z.string(),
|
|
123
|
-
affectedComponents: z.array(z.string()),
|
|
124
|
-
newComponents: z.array(ArchitectureComponentSchema),
|
|
125
|
-
externalDependencies: z.array(z.string()),
|
|
126
|
-
})
|
|
127
|
-
|
|
128
|
-
// -----------------------------------------------------------------------------
|
|
129
|
-
// Phase 6: Data Architecture
|
|
130
|
-
// -----------------------------------------------------------------------------
|
|
131
|
-
|
|
132
|
-
export const SchemaColumnSchema = z.object({
|
|
133
|
-
name: z.string(),
|
|
134
|
-
type: z.string(),
|
|
135
|
-
})
|
|
136
|
-
|
|
137
|
-
export const SchemaChangeSchema = z.object({
|
|
138
|
-
type: SchemaChangeTypeSchema,
|
|
139
|
-
table: z.string(),
|
|
140
|
-
columns: z.array(SchemaColumnSchema).optional(),
|
|
141
|
-
indexes: z.array(z.string()).optional(),
|
|
142
|
-
constraints: z.array(z.string()).optional(),
|
|
143
|
-
})
|
|
144
|
-
|
|
145
|
-
export const MigrationSchema = z.object({
|
|
146
|
-
description: z.string(),
|
|
147
|
-
reversible: z.boolean(),
|
|
148
|
-
})
|
|
149
|
-
|
|
150
|
-
export const DataArchitectureSchema = z.object({
|
|
151
|
-
database: z.string(),
|
|
152
|
-
schemaChanges: z.array(SchemaChangeSchema),
|
|
153
|
-
migrations: z.array(MigrationSchema),
|
|
154
|
-
})
|
|
155
|
-
|
|
156
|
-
// -----------------------------------------------------------------------------
|
|
157
|
-
// Phase 7: Tech Stack
|
|
158
|
-
// -----------------------------------------------------------------------------
|
|
159
|
-
|
|
160
|
-
export const TechStackDependenciesSchema = z.object({
|
|
161
|
-
frontend: z.array(z.string()).optional(),
|
|
162
|
-
backend: z.array(z.string()).optional(),
|
|
163
|
-
devDeps: z.array(z.string()).optional(),
|
|
164
|
-
infrastructure: z.array(z.string()).optional(),
|
|
165
|
-
})
|
|
166
|
-
|
|
167
|
-
export const TechStackDecisionSchema = z.object({
|
|
168
|
-
newDependencies: TechStackDependenciesSchema,
|
|
169
|
-
justification: z.string().optional(),
|
|
170
|
-
security: z.array(z.string()),
|
|
171
|
-
performance: z.array(z.string()),
|
|
172
|
-
})
|
|
173
|
-
|
|
174
|
-
// -----------------------------------------------------------------------------
|
|
175
|
-
// Phase 8: Implementation Roadmap
|
|
176
|
-
// -----------------------------------------------------------------------------
|
|
177
|
-
|
|
178
|
-
export const RiskSchema = z.object({
|
|
179
|
-
type: RiskTypeSchema,
|
|
180
|
-
description: z.string(),
|
|
181
|
-
mitigation: z.string(),
|
|
182
|
-
probability: ImpactLevelSchema,
|
|
183
|
-
impact: ImpactLevelSchema,
|
|
184
|
-
})
|
|
185
|
-
|
|
186
|
-
export const ImplementationPhaseSchema = z.object({
|
|
187
|
-
name: z.string(),
|
|
188
|
-
deliverable: z.string(),
|
|
189
|
-
tasks: z.array(z.string()),
|
|
190
|
-
})
|
|
191
|
-
|
|
192
|
-
export const MVPScopeSchema = z.object({
|
|
193
|
-
p0: z.array(z.string()), // Must-have
|
|
194
|
-
p1: z.array(z.string()), // Should-have
|
|
195
|
-
p2: z.array(z.string()), // Nice-to-have
|
|
196
|
-
p3: z.array(z.string()), // Future
|
|
197
|
-
})
|
|
198
|
-
|
|
199
|
-
export const ImplementationRoadmapSchema = z.object({
|
|
200
|
-
mvp: MVPScopeSchema,
|
|
201
|
-
phases: z.array(ImplementationPhaseSchema),
|
|
202
|
-
risks: z.array(RiskSchema),
|
|
203
|
-
dependencies: z.array(z.string()),
|
|
204
|
-
assumptions: z.array(z.string()),
|
|
205
|
-
})
|
|
206
|
-
|
|
207
|
-
// -----------------------------------------------------------------------------
|
|
208
|
-
// Estimation
|
|
209
|
-
// -----------------------------------------------------------------------------
|
|
210
|
-
|
|
211
|
-
export const EstimationBreakdownSchema = z.object({
|
|
212
|
-
area: z.string(),
|
|
213
|
-
hours: z.number(),
|
|
214
|
-
})
|
|
215
|
-
|
|
216
|
-
export const EstimationSchema = z.object({
|
|
217
|
-
tShirtSize: PRDSizeSchema,
|
|
218
|
-
estimatedHours: z.number(),
|
|
219
|
-
confidence: ConfidenceLevelSchema,
|
|
220
|
-
breakdown: z.array(EstimationBreakdownSchema),
|
|
221
|
-
assumptions: z.array(z.string()).optional(),
|
|
222
|
-
})
|
|
223
|
-
|
|
224
|
-
// -----------------------------------------------------------------------------
|
|
225
|
-
// Success Criteria
|
|
226
|
-
// -----------------------------------------------------------------------------
|
|
227
|
-
|
|
228
|
-
export const SuccessMetricSchema = z.object({
|
|
229
|
-
name: z.string(),
|
|
230
|
-
baseline: z.number().nullable(),
|
|
231
|
-
target: z.number(),
|
|
232
|
-
unit: z.string(),
|
|
233
|
-
measurementMethod: z.string().optional(),
|
|
234
|
-
})
|
|
235
|
-
|
|
236
|
-
export const SuccessCriteriaSchema = z.object({
|
|
237
|
-
metrics: z.array(SuccessMetricSchema),
|
|
238
|
-
acceptanceCriteria: z.array(z.string()),
|
|
239
|
-
qualitative: z.array(z.string()).optional(),
|
|
240
|
-
})
|
|
241
|
-
|
|
242
|
-
// -----------------------------------------------------------------------------
|
|
243
|
-
// Value Assessment (for Linear/Jira/Monday mapping)
|
|
244
|
-
// -----------------------------------------------------------------------------
|
|
245
|
-
|
|
246
|
-
export const ValueAssessmentSchema = z.object({
|
|
247
|
-
businessImpact: ImpactLevelSchema,
|
|
248
|
-
userImpact: ImpactLevelSchema,
|
|
249
|
-
strategicAlignment: z.number().min(1).max(5),
|
|
250
|
-
competitiveAdvantage: z.boolean().optional(),
|
|
251
|
-
})
|
|
252
|
-
|
|
253
|
-
// -----------------------------------------------------------------------------
|
|
254
|
-
// Outcomes (filled post-completion)
|
|
255
|
-
// -----------------------------------------------------------------------------
|
|
256
|
-
|
|
257
|
-
export const MetricOutcomeSchema = z.object({
|
|
258
|
-
name: z.string(),
|
|
259
|
-
actual: z.number(),
|
|
260
|
-
targetMet: z.boolean(),
|
|
261
|
-
})
|
|
262
|
-
|
|
263
|
-
export const PRDOutcomesSchema = z.object({
|
|
264
|
-
actualHours: z.number(),
|
|
265
|
-
metricsAchieved: z.array(MetricOutcomeSchema),
|
|
266
|
-
learnings: z.array(z.string()),
|
|
267
|
-
surprises: z.array(z.string()),
|
|
268
|
-
wouldDoAgain: z.boolean(),
|
|
269
|
-
rating: z.number().min(1).max(5),
|
|
270
|
-
completedAt: z.string(),
|
|
271
|
-
})
|
|
272
|
-
|
|
273
|
-
// -----------------------------------------------------------------------------
|
|
274
|
-
// Complete PRD Schema
|
|
275
|
-
// -----------------------------------------------------------------------------
|
|
276
|
-
|
|
277
|
-
export const PRDItemSchema = z.object({
|
|
278
|
-
id: z.string(), // prd_xxxxxxxx
|
|
279
|
-
title: z.string(),
|
|
280
|
-
status: PRDStatusSchema,
|
|
281
|
-
size: PRDSizeSchema,
|
|
282
|
-
|
|
283
|
-
// Phase outputs (optional based on size)
|
|
284
|
-
problem: ProblemSchema,
|
|
285
|
-
userFlows: UserFlowsSchema.optional(),
|
|
286
|
-
domainModel: DomainModelSchema.optional(),
|
|
287
|
-
apiContracts: APIContractsSchema.optional(),
|
|
288
|
-
architecture: ArchitectureSchema.optional(),
|
|
289
|
-
dataArchitecture: DataArchitectureSchema.optional(),
|
|
290
|
-
techStack: TechStackDecisionSchema.optional(),
|
|
291
|
-
roadmap: ImplementationRoadmapSchema,
|
|
292
|
-
|
|
293
|
-
// Estimation & Success
|
|
294
|
-
estimation: EstimationSchema,
|
|
295
|
-
successCriteria: SuccessCriteriaSchema,
|
|
296
|
-
value: ValueAssessmentSchema.optional(),
|
|
297
|
-
|
|
298
|
-
// Links (for integration)
|
|
299
|
-
featureId: z.string().nullable(), // Link to roadmap feature
|
|
300
|
-
phase: z.string().nullable(), // P0, P1, etc.
|
|
301
|
-
quarter: z.string().nullable(), // Q1-2026, etc.
|
|
302
|
-
|
|
303
|
-
// Metadata
|
|
304
|
-
createdAt: z.string(),
|
|
305
|
-
createdBy: z.string(),
|
|
306
|
-
approvedAt: z.string().nullable(),
|
|
307
|
-
approvedBy: z.string().nullable(),
|
|
308
|
-
completedAt: z.string().optional(),
|
|
309
|
-
|
|
310
|
-
// Outcomes (filled post-completion)
|
|
311
|
-
outcomes: PRDOutcomesSchema.optional(),
|
|
312
|
-
})
|
|
313
|
-
|
|
314
|
-
export const PRDsJsonSchema = z.object({
|
|
315
|
-
prds: z.array(PRDItemSchema),
|
|
316
|
-
lastUpdated: z.string(),
|
|
317
|
-
})
|
|
318
|
-
|
|
319
|
-
// =============================================================================
|
|
320
|
-
// Inferred Types
|
|
321
|
-
// =============================================================================
|
|
322
|
-
|
|
323
|
-
export type PRDStatus = z.infer<typeof PRDStatusSchema>
|
|
324
|
-
export type PRDSize = z.infer<typeof PRDSizeSchema>
|
|
325
|
-
export type ImpactLevel = z.infer<typeof ImpactLevelSchema>
|
|
326
|
-
export type ConfidenceLevel = z.infer<typeof ConfidenceLevelSchema>
|
|
327
|
-
export type Frequency = z.infer<typeof FrequencySchema>
|
|
328
|
-
export type RiskType = z.infer<typeof RiskTypeSchema>
|
|
329
|
-
export type APIStyle = z.infer<typeof APIStyleSchema>
|
|
330
|
-
|
|
331
|
-
export type Problem = z.infer<typeof ProblemSchema>
|
|
332
|
-
export type UserFlows = z.infer<typeof UserFlowsSchema>
|
|
333
|
-
export type DomainEntity = z.infer<typeof DomainEntitySchema>
|
|
334
|
-
export type DomainModel = z.infer<typeof DomainModelSchema>
|
|
335
|
-
export type APIEndpoint = z.infer<typeof APIEndpointSchema>
|
|
336
|
-
export type APIContracts = z.infer<typeof APIContractsSchema>
|
|
337
|
-
export type ArchitectureComponent = z.infer<typeof ArchitectureComponentSchema>
|
|
338
|
-
export type Architecture = z.infer<typeof ArchitectureSchema>
|
|
339
|
-
export type SchemaChange = z.infer<typeof SchemaChangeSchema>
|
|
340
|
-
export type Migration = z.infer<typeof MigrationSchema>
|
|
341
|
-
export type DataArchitecture = z.infer<typeof DataArchitectureSchema>
|
|
342
|
-
export type TechStackDecision = z.infer<typeof TechStackDecisionSchema>
|
|
343
|
-
export type Risk = z.infer<typeof RiskSchema>
|
|
344
|
-
export type ImplementationPhase = z.infer<typeof ImplementationPhaseSchema>
|
|
345
|
-
export type MVPScope = z.infer<typeof MVPScopeSchema>
|
|
346
|
-
export type ImplementationRoadmap = z.infer<typeof ImplementationRoadmapSchema>
|
|
347
|
-
export type Estimation = z.infer<typeof EstimationSchema>
|
|
348
|
-
export type SuccessMetric = z.infer<typeof SuccessMetricSchema>
|
|
349
|
-
export type SuccessCriteria = z.infer<typeof SuccessCriteriaSchema>
|
|
350
|
-
export type ValueAssessment = z.infer<typeof ValueAssessmentSchema>
|
|
351
|
-
export type PRDOutcomes = z.infer<typeof PRDOutcomesSchema>
|
|
352
|
-
export type PRDItem = z.infer<typeof PRDItemSchema>
|
|
353
|
-
export type PRDsJson = z.infer<typeof PRDsJsonSchema>
|
|
354
|
-
|
|
355
|
-
// =============================================================================
|
|
356
|
-
// Validation Helpers
|
|
357
|
-
// =============================================================================
|
|
358
|
-
|
|
359
|
-
/** Parse and validate prds.json content */
|
|
360
|
-
export const parsePRDs = (data: unknown): PRDsJson => PRDsJsonSchema.parse(data)
|
|
361
|
-
export const safeParsePRDs = (data: unknown) => PRDsJsonSchema.safeParse(data)
|
|
362
|
-
|
|
363
|
-
/** Parse a single PRD */
|
|
364
|
-
export const parsePRD = (data: unknown): PRDItem => PRDItemSchema.parse(data)
|
|
365
|
-
export const safeParsePRD = (data: unknown) => PRDItemSchema.safeParse(data)
|
|
366
|
-
|
|
367
|
-
// =============================================================================
|
|
368
|
-
// Defaults
|
|
369
|
-
// =============================================================================
|
|
370
|
-
|
|
371
|
-
export const DEFAULT_PRD: Omit<
|
|
372
|
-
PRDItem,
|
|
373
|
-
'id' | 'title' | 'problem' | 'roadmap' | 'estimation' | 'successCriteria'
|
|
374
|
-
> = {
|
|
375
|
-
status: 'draft',
|
|
376
|
-
size: 'M',
|
|
377
|
-
featureId: null,
|
|
378
|
-
phase: null,
|
|
379
|
-
quarter: null,
|
|
380
|
-
createdAt: new Date().toISOString(),
|
|
381
|
-
createdBy: 'chief-architect',
|
|
382
|
-
approvedAt: null,
|
|
383
|
-
approvedBy: null,
|
|
384
|
-
}
|
|
385
|
-
|
|
386
|
-
export const DEFAULT_PRDS: PRDsJson = {
|
|
387
|
-
prds: [],
|
|
388
|
-
lastUpdated: '',
|
|
389
|
-
}
|
|
390
|
-
|
|
391
|
-
// =============================================================================
|
|
392
|
-
// Mapping Helpers (for Linear/Jira/Monday integration)
|
|
393
|
-
// =============================================================================
|
|
394
|
-
|
|
395
|
-
/**
|
|
396
|
-
* Maps PRD size to story points (for Jira/Linear)
|
|
397
|
-
*/
|
|
398
|
-
export const sizeToStoryPoints: Record<PRDSize, number> = {
|
|
399
|
-
XS: 1,
|
|
400
|
-
S: 2,
|
|
401
|
-
M: 5,
|
|
402
|
-
L: 8,
|
|
403
|
-
XL: 13,
|
|
404
|
-
}
|
|
405
|
-
|
|
406
|
-
/**
|
|
407
|
-
* Maps impact level to priority (for Linear/Jira)
|
|
408
|
-
*/
|
|
409
|
-
export const impactToPriority: Record<ImpactLevel, number> = {
|
|
410
|
-
critical: 1,
|
|
411
|
-
high: 2,
|
|
412
|
-
medium: 3,
|
|
413
|
-
low: 4,
|
|
414
|
-
}
|
|
415
|
-
|
|
416
|
-
/**
|
|
417
|
-
* Calculate value score for prioritization
|
|
418
|
-
*/
|
|
419
|
-
export const calculateValueScore = (prd: PRDItem): number => {
|
|
420
|
-
const impactScore = {
|
|
421
|
-
critical: 4,
|
|
422
|
-
high: 3,
|
|
423
|
-
medium: 2,
|
|
424
|
-
low: 1,
|
|
425
|
-
}
|
|
426
|
-
|
|
427
|
-
const businessImpact = prd.value?.businessImpact
|
|
428
|
-
? impactScore[prd.value.businessImpact]
|
|
429
|
-
: impactScore[prd.problem.impact]
|
|
430
|
-
|
|
431
|
-
const userImpact = prd.value?.userImpact
|
|
432
|
-
? impactScore[prd.value.userImpact]
|
|
433
|
-
: impactScore[prd.problem.impact]
|
|
434
|
-
|
|
435
|
-
const strategicAlignment = prd.value?.strategicAlignment ?? 3
|
|
436
|
-
|
|
437
|
-
// Value = (Business Impact + User Impact) × Strategic Alignment
|
|
438
|
-
return (businessImpact + userImpact) * strategicAlignment
|
|
439
|
-
}
|
|
440
|
-
|
|
441
|
-
/**
|
|
442
|
-
* Calculate priority score (value / effort)
|
|
443
|
-
*/
|
|
444
|
-
export const calculatePriorityScore = (prd: PRDItem): number => {
|
|
445
|
-
const valueScore = calculateValueScore(prd)
|
|
446
|
-
const effortScore = prd.estimation.estimatedHours / 10 // Normalize hours
|
|
447
|
-
|
|
448
|
-
// Priority = Value / Effort (higher is better)
|
|
449
|
-
return effortScore > 0 ? valueScore / effortScore : valueScore
|
|
450
|
-
}
|
package/core/schemas/project.ts
DELETED
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Project Schema
|
|
3
|
-
*
|
|
4
|
-
* Defines the structure for project.json - project metadata.
|
|
5
|
-
* Uses Zod for runtime validation and TypeScript type inference.
|
|
6
|
-
*
|
|
7
|
-
* @version 2.0.0
|
|
8
|
-
*/
|
|
9
|
-
|
|
10
|
-
import { z } from 'zod'
|
|
11
|
-
|
|
12
|
-
// =============================================================================
|
|
13
|
-
// Zod Schemas - Source of Truth
|
|
14
|
-
// =============================================================================
|
|
15
|
-
|
|
16
|
-
export const ProjectItemSchema = z.object({
|
|
17
|
-
projectId: z.string(),
|
|
18
|
-
name: z.string(),
|
|
19
|
-
repoPath: z.string(),
|
|
20
|
-
description: z.string().optional(),
|
|
21
|
-
version: z.string().optional(),
|
|
22
|
-
cliVersion: z.string().optional(), // prjct-cli version used to sync
|
|
23
|
-
techStack: z.array(z.string()),
|
|
24
|
-
fileCount: z.number(),
|
|
25
|
-
commitCount: z.number(),
|
|
26
|
-
createdAt: z.string(), // ISO8601
|
|
27
|
-
lastSync: z.string(), // ISO8601
|
|
28
|
-
// Staleness tracking (PRJ-120)
|
|
29
|
-
lastSyncCommit: z.string().optional(), // Git commit hash at last sync
|
|
30
|
-
lastSyncBranch: z.string().optional(), // Git branch at last sync
|
|
31
|
-
})
|
|
32
|
-
|
|
33
|
-
// =============================================================================
|
|
34
|
-
// Inferred Types - Backward Compatible
|
|
35
|
-
// =============================================================================
|
|
36
|
-
|
|
37
|
-
export type ProjectSchema = z.infer<typeof ProjectItemSchema>
|
|
38
|
-
|
|
39
|
-
// =============================================================================
|
|
40
|
-
// Validation Helpers
|
|
41
|
-
// =============================================================================
|
|
42
|
-
|
|
43
|
-
/** Parse and validate project.json content */
|
|
44
|
-
export const parseProject = (data: unknown): ProjectSchema => ProjectItemSchema.parse(data)
|
|
45
|
-
export const safeParseProject = (data: unknown) => ProjectItemSchema.safeParse(data)
|
|
46
|
-
|
|
47
|
-
// =============================================================================
|
|
48
|
-
// Defaults
|
|
49
|
-
// =============================================================================
|
|
50
|
-
|
|
51
|
-
export const DEFAULT_PROJECT: Omit<ProjectSchema, 'projectId' | 'name' | 'repoPath'> = {
|
|
52
|
-
techStack: [],
|
|
53
|
-
fileCount: 0,
|
|
54
|
-
commitCount: 0,
|
|
55
|
-
createdAt: new Date().toISOString(),
|
|
56
|
-
lastSync: new Date().toISOString(),
|
|
57
|
-
}
|