prjct-cli 1.22.0 → 1.23.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 +147 -0
- package/bin/prjct +30 -13
- package/dist/bin/prjct.mjs +917 -35845
- package/dist/bin/prjct.mjs.map +7 -0
- package/dist/cli/linear.mjs +16 -0
- package/dist/cli/linear.mjs.map +7 -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
package/core/schemas/roadmap.ts
DELETED
|
@@ -1,322 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Roadmap Schema
|
|
3
|
-
*
|
|
4
|
-
* Defines the structure for roadmap.json - feature roadmap.
|
|
5
|
-
* Uses Zod for runtime validation and TypeScript type inference.
|
|
6
|
-
*
|
|
7
|
-
* Enhanced for AI Orchestration Layer (v0.29.0):
|
|
8
|
-
* - PRD linking (prdId)
|
|
9
|
-
* - Legacy feature support (legacy, inferredFrom)
|
|
10
|
-
* - Quarter-based planning (quarters)
|
|
11
|
-
* - Dependency tracking (dependencies)
|
|
12
|
-
* - Effort tracking (effortEstimate, effortActual)
|
|
13
|
-
* - Value scoring (valueScore)
|
|
14
|
-
*
|
|
15
|
-
* @version 3.0.0
|
|
16
|
-
*/
|
|
17
|
-
|
|
18
|
-
import { z } from 'zod'
|
|
19
|
-
|
|
20
|
-
// =============================================================================
|
|
21
|
-
// Zod Schemas - Source of Truth
|
|
22
|
-
// =============================================================================
|
|
23
|
-
|
|
24
|
-
export const FeatureStatusSchema = z.enum(['planned', 'active', 'completed', 'shipped'])
|
|
25
|
-
export const FeatureImpactSchema = z.enum(['low', 'medium', 'high'])
|
|
26
|
-
export const FeatureTypeSchema = z.enum([
|
|
27
|
-
'feature',
|
|
28
|
-
'breaking_change',
|
|
29
|
-
'refactor',
|
|
30
|
-
'infrastructure',
|
|
31
|
-
])
|
|
32
|
-
export const PhaseStatusSchema = z.enum(['completed', 'active', 'planned'])
|
|
33
|
-
export const QuarterStatusSchema = z.enum(['planned', 'active', 'completed'])
|
|
34
|
-
export const InferredFromSchema = z.enum(['git', 'git-branch', 'manual', 'prd'])
|
|
35
|
-
|
|
36
|
-
export const FeatureTaskSchema = z.object({
|
|
37
|
-
id: z.string(), // task_xxxxxxxx
|
|
38
|
-
description: z.string(),
|
|
39
|
-
completed: z.boolean(),
|
|
40
|
-
completedAt: z.string().optional(),
|
|
41
|
-
})
|
|
42
|
-
|
|
43
|
-
export const RoadmapPhaseSchema = z.object({
|
|
44
|
-
id: z.string(), // P0, P1, etc.
|
|
45
|
-
name: z.string(),
|
|
46
|
-
status: PhaseStatusSchema,
|
|
47
|
-
completedAt: z.string().optional(),
|
|
48
|
-
})
|
|
49
|
-
|
|
50
|
-
export const RoadmapStrategySchema = z.object({
|
|
51
|
-
goal: z.string(),
|
|
52
|
-
phases: z.array(RoadmapPhaseSchema),
|
|
53
|
-
successMetrics: z.array(z.string()).optional(),
|
|
54
|
-
})
|
|
55
|
-
|
|
56
|
-
export const FeatureDurationSchema = z.object({
|
|
57
|
-
hours: z.number(),
|
|
58
|
-
minutes: z.number(),
|
|
59
|
-
totalMinutes: z.number(),
|
|
60
|
-
display: z.string().optional(),
|
|
61
|
-
})
|
|
62
|
-
|
|
63
|
-
// -----------------------------------------------------------------------------
|
|
64
|
-
// Git Commit (for legacy features inferred from git)
|
|
65
|
-
// -----------------------------------------------------------------------------
|
|
66
|
-
|
|
67
|
-
export const GitCommitSchema = z.object({
|
|
68
|
-
hash: z.string(),
|
|
69
|
-
message: z.string(),
|
|
70
|
-
date: z.string(),
|
|
71
|
-
author: z.string().optional(),
|
|
72
|
-
})
|
|
73
|
-
|
|
74
|
-
// -----------------------------------------------------------------------------
|
|
75
|
-
// Effort Tracking (for PRD comparison)
|
|
76
|
-
// -----------------------------------------------------------------------------
|
|
77
|
-
|
|
78
|
-
export const EffortEstimateSchema = z.object({
|
|
79
|
-
hours: z.number(),
|
|
80
|
-
confidence: z.enum(['low', 'medium', 'high']).optional(),
|
|
81
|
-
breakdown: z
|
|
82
|
-
.array(
|
|
83
|
-
z.object({
|
|
84
|
-
area: z.string(),
|
|
85
|
-
hours: z.number(),
|
|
86
|
-
})
|
|
87
|
-
)
|
|
88
|
-
.optional(),
|
|
89
|
-
})
|
|
90
|
-
|
|
91
|
-
export const EffortActualSchema = z.object({
|
|
92
|
-
hours: z.number().optional(),
|
|
93
|
-
commits: z.number().optional(),
|
|
94
|
-
linesAdded: z.number().optional(),
|
|
95
|
-
linesRemoved: z.number().optional(),
|
|
96
|
-
})
|
|
97
|
-
|
|
98
|
-
export const FeatureEffortSchema = z.object({
|
|
99
|
-
estimated: EffortEstimateSchema.nullable(),
|
|
100
|
-
actual: EffortActualSchema.nullable(),
|
|
101
|
-
})
|
|
102
|
-
|
|
103
|
-
// -----------------------------------------------------------------------------
|
|
104
|
-
// Quarter (for capacity planning)
|
|
105
|
-
// -----------------------------------------------------------------------------
|
|
106
|
-
|
|
107
|
-
export const QuarterCapacitySchema = z.object({
|
|
108
|
-
totalHours: z.number(),
|
|
109
|
-
allocatedHours: z.number(),
|
|
110
|
-
bufferPercent: z.number().optional(), // % reserved for unknowns
|
|
111
|
-
})
|
|
112
|
-
|
|
113
|
-
export const QuarterSchema = z.object({
|
|
114
|
-
id: z.string(), // Q1-2026
|
|
115
|
-
name: z.string(), // "Q1 2026"
|
|
116
|
-
theme: z.string().optional(), // "Foundation"
|
|
117
|
-
goals: z.array(z.string()).optional(),
|
|
118
|
-
features: z.array(z.string()), // Feature IDs
|
|
119
|
-
capacity: QuarterCapacitySchema.optional(),
|
|
120
|
-
status: QuarterStatusSchema,
|
|
121
|
-
startDate: z.string().optional(), // ISO8601
|
|
122
|
-
endDate: z.string().optional(), // ISO8601
|
|
123
|
-
})
|
|
124
|
-
|
|
125
|
-
// -----------------------------------------------------------------------------
|
|
126
|
-
// Feature Item (enhanced)
|
|
127
|
-
// -----------------------------------------------------------------------------
|
|
128
|
-
|
|
129
|
-
export const FeatureItemSchema = z.object({
|
|
130
|
-
id: z.string(), // feat_xxxxxxxx
|
|
131
|
-
name: z.string(),
|
|
132
|
-
description: z.string().optional(),
|
|
133
|
-
date: z.string(), // YYYY-MM-DD creation date
|
|
134
|
-
status: FeatureStatusSchema,
|
|
135
|
-
impact: FeatureImpactSchema,
|
|
136
|
-
effort: z.string().optional(),
|
|
137
|
-
progress: z.number(), // 0-100
|
|
138
|
-
// Enriched fields from MD
|
|
139
|
-
type: FeatureTypeSchema.optional(),
|
|
140
|
-
roi: z.number().optional(), // 1-5 from star count
|
|
141
|
-
why: z.array(z.string()).optional(),
|
|
142
|
-
technicalNotes: z.array(z.string()).optional(),
|
|
143
|
-
compatibility: z.string().optional(),
|
|
144
|
-
phase: z.string().optional(), // P0, P1, etc.
|
|
145
|
-
tasks: z.array(FeatureTaskSchema),
|
|
146
|
-
createdAt: z.string(), // ISO8601
|
|
147
|
-
shippedAt: z.string().optional(),
|
|
148
|
-
version: z.string().optional(),
|
|
149
|
-
// ZERO DATA LOSS - additional fields
|
|
150
|
-
duration: FeatureDurationSchema.optional(),
|
|
151
|
-
taskCount: z.number().optional(),
|
|
152
|
-
agent: z.string().optional(), // "fe+be", "fe", "be"
|
|
153
|
-
sprintName: z.string().optional(),
|
|
154
|
-
completedDate: z.string().optional(),
|
|
155
|
-
|
|
156
|
-
// =========================================================================
|
|
157
|
-
// AI ORCHESTRATION FIELDS (v0.29.0)
|
|
158
|
-
// =========================================================================
|
|
159
|
-
|
|
160
|
-
// PRD Integration
|
|
161
|
-
prdId: z.string().nullable().optional(), // Link to PRD (prd_xxxxxxxx)
|
|
162
|
-
|
|
163
|
-
// Legacy Support (for existing projects)
|
|
164
|
-
legacy: z.boolean().optional(), // true = no PRD required
|
|
165
|
-
inferredFrom: InferredFromSchema.optional(), // git, git-branch, manual, prd
|
|
166
|
-
|
|
167
|
-
// Quarter Planning
|
|
168
|
-
quarter: z.string().nullable().optional(), // Q1-2026, etc.
|
|
169
|
-
|
|
170
|
-
// Dependency Tracking
|
|
171
|
-
dependencies: z.array(z.string()).optional(), // Feature IDs this depends on
|
|
172
|
-
blockedBy: z.array(z.string()).optional(), // Feature IDs blocking this
|
|
173
|
-
|
|
174
|
-
// Effort Tracking (for PRD comparison)
|
|
175
|
-
effortTracking: FeatureEffortSchema.optional(),
|
|
176
|
-
|
|
177
|
-
// Value Scoring (calculated from PRD)
|
|
178
|
-
valueScore: z.number().optional(), // Calculated priority score
|
|
179
|
-
|
|
180
|
-
// Git Data (for legacy features)
|
|
181
|
-
commits: z.array(GitCommitSchema).optional(), // Commits for this feature
|
|
182
|
-
branch: z.string().optional(), // Branch name (for active)
|
|
183
|
-
commitsAhead: z.number().optional(), // Commits ahead of main
|
|
184
|
-
})
|
|
185
|
-
|
|
186
|
-
// -----------------------------------------------------------------------------
|
|
187
|
-
// Backlog Item (enhanced)
|
|
188
|
-
// -----------------------------------------------------------------------------
|
|
189
|
-
|
|
190
|
-
export const BacklogItemSchema = z.object({
|
|
191
|
-
id: z.string(),
|
|
192
|
-
title: z.string(),
|
|
193
|
-
prdId: z.string().nullable().optional(),
|
|
194
|
-
valueScore: z.number().optional(),
|
|
195
|
-
effortEstimate: z.number().optional(),
|
|
196
|
-
reason: z.string().optional(), // Why in backlog
|
|
197
|
-
})
|
|
198
|
-
|
|
199
|
-
// -----------------------------------------------------------------------------
|
|
200
|
-
// Roadmap JSON (enhanced)
|
|
201
|
-
// -----------------------------------------------------------------------------
|
|
202
|
-
|
|
203
|
-
export const RoadmapJsonSchema = z.object({
|
|
204
|
-
strategy: RoadmapStrategySchema.nullable().optional(),
|
|
205
|
-
features: z.array(FeatureItemSchema),
|
|
206
|
-
backlog: z.array(z.union([z.string(), BacklogItemSchema])), // Support both formats
|
|
207
|
-
lastUpdated: z.string(),
|
|
208
|
-
|
|
209
|
-
// AI ORCHESTRATION FIELDS (v0.29.0)
|
|
210
|
-
quarters: z.array(QuarterSchema).optional(),
|
|
211
|
-
|
|
212
|
-
// Metadata (for git-inferred roadmaps)
|
|
213
|
-
generatedFrom: z.enum(['git-history', 'manual', 'prd']).optional(),
|
|
214
|
-
generatedAt: z.string().optional(),
|
|
215
|
-
})
|
|
216
|
-
|
|
217
|
-
// =============================================================================
|
|
218
|
-
// Inferred Types - Backward Compatible
|
|
219
|
-
// =============================================================================
|
|
220
|
-
|
|
221
|
-
export type FeatureStatus = z.infer<typeof FeatureStatusSchema>
|
|
222
|
-
export type FeatureImpact = z.infer<typeof FeatureImpactSchema>
|
|
223
|
-
export type FeatureType = z.infer<typeof FeatureTypeSchema>
|
|
224
|
-
export type FeatureTask = z.infer<typeof FeatureTaskSchema>
|
|
225
|
-
export type RoadmapPhase = z.infer<typeof RoadmapPhaseSchema>
|
|
226
|
-
export type RoadmapStrategy = z.infer<typeof RoadmapStrategySchema>
|
|
227
|
-
export type FeatureDuration = z.infer<typeof FeatureDurationSchema>
|
|
228
|
-
export type FeatureSchema = z.infer<typeof FeatureItemSchema>
|
|
229
|
-
export type RoadmapJson = z.infer<typeof RoadmapJsonSchema>
|
|
230
|
-
|
|
231
|
-
// Legacy type for backwards compatibility
|
|
232
|
-
export type RoadmapSchema = FeatureSchema[]
|
|
233
|
-
|
|
234
|
-
// AI Orchestration types (v0.29.0)
|
|
235
|
-
export type QuarterStatus = z.infer<typeof QuarterStatusSchema>
|
|
236
|
-
export type InferredFrom = z.infer<typeof InferredFromSchema>
|
|
237
|
-
export type GitCommit = z.infer<typeof GitCommitSchema>
|
|
238
|
-
export type EffortEstimate = z.infer<typeof EffortEstimateSchema>
|
|
239
|
-
export type EffortActual = z.infer<typeof EffortActualSchema>
|
|
240
|
-
export type FeatureEffort = z.infer<typeof FeatureEffortSchema>
|
|
241
|
-
export type QuarterCapacity = z.infer<typeof QuarterCapacitySchema>
|
|
242
|
-
export type Quarter = z.infer<typeof QuarterSchema>
|
|
243
|
-
export type BacklogItem = z.infer<typeof BacklogItemSchema>
|
|
244
|
-
|
|
245
|
-
// =============================================================================
|
|
246
|
-
// Validation Helpers
|
|
247
|
-
// =============================================================================
|
|
248
|
-
|
|
249
|
-
/** Parse and validate roadmap.json content */
|
|
250
|
-
export const parseRoadmap = (data: unknown): RoadmapJson => RoadmapJsonSchema.parse(data)
|
|
251
|
-
export const safeParseRoadmap = (data: unknown) => RoadmapJsonSchema.safeParse(data)
|
|
252
|
-
|
|
253
|
-
// =============================================================================
|
|
254
|
-
// Defaults
|
|
255
|
-
// =============================================================================
|
|
256
|
-
|
|
257
|
-
export const DEFAULT_FEATURE: Omit<FeatureSchema, 'id' | 'name'> = {
|
|
258
|
-
date: new Date().toISOString().split('T')[0],
|
|
259
|
-
status: 'planned',
|
|
260
|
-
impact: 'medium',
|
|
261
|
-
progress: 0,
|
|
262
|
-
tasks: [],
|
|
263
|
-
createdAt: new Date().toISOString(),
|
|
264
|
-
// AI Orchestration defaults
|
|
265
|
-
prdId: null,
|
|
266
|
-
legacy: false,
|
|
267
|
-
quarter: null,
|
|
268
|
-
}
|
|
269
|
-
|
|
270
|
-
export const DEFAULT_ROADMAP: RoadmapJson = {
|
|
271
|
-
features: [],
|
|
272
|
-
backlog: [],
|
|
273
|
-
lastUpdated: '',
|
|
274
|
-
// AI Orchestration defaults
|
|
275
|
-
quarters: [],
|
|
276
|
-
}
|
|
277
|
-
|
|
278
|
-
// =============================================================================
|
|
279
|
-
// Helper Functions (for AI Orchestration)
|
|
280
|
-
// =============================================================================
|
|
281
|
-
|
|
282
|
-
/**
|
|
283
|
-
* Check if a feature is legacy (no PRD required)
|
|
284
|
-
*/
|
|
285
|
-
export const isLegacyFeature = (feature: FeatureSchema): boolean => {
|
|
286
|
-
return (
|
|
287
|
-
feature.legacy === true ||
|
|
288
|
-
feature.inferredFrom === 'git' ||
|
|
289
|
-
feature.inferredFrom === 'git-branch'
|
|
290
|
-
)
|
|
291
|
-
}
|
|
292
|
-
|
|
293
|
-
/**
|
|
294
|
-
* Calculate feature priority score (value / effort)
|
|
295
|
-
*/
|
|
296
|
-
export const calculateFeaturePriority = (feature: FeatureSchema): number => {
|
|
297
|
-
const impactScore = { high: 3, medium: 2, low: 1 }[feature.impact] || 2
|
|
298
|
-
const valueScore = feature.valueScore ?? impactScore * 3
|
|
299
|
-
|
|
300
|
-
const estimatedHours = feature.effortTracking?.estimated?.hours ?? 8
|
|
301
|
-
const effortScore = estimatedHours / 10
|
|
302
|
-
|
|
303
|
-
return effortScore > 0 ? valueScore / effortScore : valueScore
|
|
304
|
-
}
|
|
305
|
-
|
|
306
|
-
/**
|
|
307
|
-
* Get features for a specific quarter
|
|
308
|
-
*/
|
|
309
|
-
export const getQuarterFeatures = (roadmap: RoadmapJson, quarterId: string): FeatureSchema[] => {
|
|
310
|
-
return roadmap.features.filter((f) => f.quarter === quarterId)
|
|
311
|
-
}
|
|
312
|
-
|
|
313
|
-
/**
|
|
314
|
-
* Get quarter capacity utilization percentage
|
|
315
|
-
*/
|
|
316
|
-
export const getQuarterUtilization = (roadmap: RoadmapJson, quarterId: string): number => {
|
|
317
|
-
const quarter = roadmap.quarters?.find((q) => q.id === quarterId)
|
|
318
|
-
if (!quarter?.capacity) return 0
|
|
319
|
-
|
|
320
|
-
const { allocatedHours, totalHours } = quarter.capacity
|
|
321
|
-
return totalHours > 0 ? (allocatedHours / totalHours) * 100 : 0
|
|
322
|
-
}
|
package/core/schemas/schemas.ts
DELETED
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Schemas Utilities
|
|
3
|
-
*
|
|
4
|
-
* ID generators and path helpers for project data.
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
import crypto from 'node:crypto'
|
|
8
|
-
import { homedir } from 'node:os'
|
|
9
|
-
import { join } from 'node:path'
|
|
10
|
-
|
|
11
|
-
// ============================================
|
|
12
|
-
// ID GENERATORS - UUID ONLY
|
|
13
|
-
// ============================================
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* Generate a standard UUID.
|
|
17
|
-
* All IDs in the system use this format for PostgreSQL consistency.
|
|
18
|
-
*/
|
|
19
|
-
export function generateUUID(): string {
|
|
20
|
-
return crypto.randomUUID()
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
// All use the same UUID generator
|
|
24
|
-
export const generateTaskId = generateUUID
|
|
25
|
-
export const generateFeatureId = generateUUID
|
|
26
|
-
export const generateIdeaId = generateUUID
|
|
27
|
-
export const generateShipId = generateUUID
|
|
28
|
-
export const generateSessionId = generateUUID
|
|
29
|
-
|
|
30
|
-
// ============================================
|
|
31
|
-
// PATH HELPERS
|
|
32
|
-
// ============================================
|
|
33
|
-
|
|
34
|
-
export const GLOBAL_STORAGE = join(homedir(), '.prjct-cli', 'projects')
|
|
35
|
-
|
|
36
|
-
export function getProjectPath(projectId: string): string {
|
|
37
|
-
return join(GLOBAL_STORAGE, projectId)
|
|
38
|
-
}
|
package/core/schemas/shipped.ts
DELETED
|
@@ -1,109 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Shipped Schema
|
|
3
|
-
*
|
|
4
|
-
* Defines the structure for shipped.json - completed/shipped items.
|
|
5
|
-
* Uses Zod for runtime validation and TypeScript type inference.
|
|
6
|
-
* ZERO DATA LOSS - captures ALL fields from MD files.
|
|
7
|
-
*
|
|
8
|
-
* @version 2.0.0
|
|
9
|
-
*/
|
|
10
|
-
|
|
11
|
-
import { z } from 'zod'
|
|
12
|
-
|
|
13
|
-
// =============================================================================
|
|
14
|
-
// Zod Schemas - Source of Truth
|
|
15
|
-
// =============================================================================
|
|
16
|
-
|
|
17
|
-
export const ShipTypeSchema = z.enum(['feature', 'fix', 'improvement', 'refactor'])
|
|
18
|
-
export const CheckStatusSchema = z.enum(['pass', 'warning', 'fail', 'skipped'])
|
|
19
|
-
export const ChangeTypeSchema = z.enum(['added', 'changed', 'fixed', 'removed'])
|
|
20
|
-
|
|
21
|
-
export const DurationSchema = z.object({
|
|
22
|
-
hours: z.number(),
|
|
23
|
-
minutes: z.number(),
|
|
24
|
-
totalMinutes: z.number(),
|
|
25
|
-
})
|
|
26
|
-
|
|
27
|
-
export const CodeMetricsSchema = z.object({
|
|
28
|
-
filesChanged: z.number().nullable().optional(),
|
|
29
|
-
linesAdded: z.number().nullable().optional(),
|
|
30
|
-
linesRemoved: z.number().nullable().optional(),
|
|
31
|
-
commits: z.number().nullable().optional(),
|
|
32
|
-
})
|
|
33
|
-
|
|
34
|
-
export const ShipChangeSchema = z.object({
|
|
35
|
-
description: z.string(),
|
|
36
|
-
type: ChangeTypeSchema.optional(),
|
|
37
|
-
})
|
|
38
|
-
|
|
39
|
-
export const QualityMetricsSchema = z.object({
|
|
40
|
-
lintStatus: CheckStatusSchema.nullable().optional(),
|
|
41
|
-
lintDetails: z.string().optional(),
|
|
42
|
-
testStatus: CheckStatusSchema.nullable().optional(),
|
|
43
|
-
testDetails: z.string().optional(),
|
|
44
|
-
})
|
|
45
|
-
|
|
46
|
-
export const CommitInfoSchema = z.object({
|
|
47
|
-
hash: z.string().optional(),
|
|
48
|
-
message: z.string().optional(),
|
|
49
|
-
branch: z.string().optional(),
|
|
50
|
-
})
|
|
51
|
-
|
|
52
|
-
export const ShippedItemSchema = z.object({
|
|
53
|
-
id: z.string(), // ship_xxxxxxxx
|
|
54
|
-
name: z.string(),
|
|
55
|
-
version: z.string().nullable().optional(),
|
|
56
|
-
type: ShipTypeSchema,
|
|
57
|
-
agent: z.string().optional(), // "fe+be", "be", "fe"
|
|
58
|
-
description: z.string().optional(),
|
|
59
|
-
changes: z.array(ShipChangeSchema).optional(),
|
|
60
|
-
codeSnippets: z.array(z.string()).optional(),
|
|
61
|
-
commit: CommitInfoSchema.optional(),
|
|
62
|
-
codeMetrics: CodeMetricsSchema.optional(),
|
|
63
|
-
qualityMetrics: QualityMetricsSchema.optional(),
|
|
64
|
-
quantitativeImpact: z.string().optional(),
|
|
65
|
-
duration: DurationSchema.optional(),
|
|
66
|
-
tasksCompleted: z.number().nullable().optional(),
|
|
67
|
-
shippedAt: z.string(), // ISO8601
|
|
68
|
-
featureId: z.string().optional(),
|
|
69
|
-
})
|
|
70
|
-
|
|
71
|
-
export const ShippedJsonSchema = z.object({
|
|
72
|
-
shipped: z.array(ShippedItemSchema),
|
|
73
|
-
lastUpdated: z.string(),
|
|
74
|
-
})
|
|
75
|
-
|
|
76
|
-
// =============================================================================
|
|
77
|
-
// Inferred Types - Backward Compatible
|
|
78
|
-
// =============================================================================
|
|
79
|
-
|
|
80
|
-
export type ShipType = z.infer<typeof ShipTypeSchema>
|
|
81
|
-
export type CheckStatus = z.infer<typeof CheckStatusSchema>
|
|
82
|
-
export type AgentType = 'fe' | 'be' | 'fe+be' | 'devops' | 'ai' | string
|
|
83
|
-
export type Duration = z.infer<typeof DurationSchema>
|
|
84
|
-
export type CodeMetrics = z.infer<typeof CodeMetricsSchema>
|
|
85
|
-
export type ShipChange = z.infer<typeof ShipChangeSchema>
|
|
86
|
-
export type QualityMetrics = z.infer<typeof QualityMetricsSchema>
|
|
87
|
-
export type CommitInfo = z.infer<typeof CommitInfoSchema>
|
|
88
|
-
export type ShippedItemSchema = z.infer<typeof ShippedItemSchema>
|
|
89
|
-
export type ShippedJson = z.infer<typeof ShippedJsonSchema>
|
|
90
|
-
|
|
91
|
-
// Legacy type for backwards compatibility
|
|
92
|
-
export type ShippedSchema = ShippedItemSchema[]
|
|
93
|
-
|
|
94
|
-
// =============================================================================
|
|
95
|
-
// Validation Helpers
|
|
96
|
-
// =============================================================================
|
|
97
|
-
|
|
98
|
-
/** Parse and validate shipped.json content */
|
|
99
|
-
export const parseShipped = (data: unknown): ShippedJson => ShippedJsonSchema.parse(data)
|
|
100
|
-
export const safeParseShipped = (data: unknown) => ShippedJsonSchema.safeParse(data)
|
|
101
|
-
|
|
102
|
-
// =============================================================================
|
|
103
|
-
// Defaults
|
|
104
|
-
// =============================================================================
|
|
105
|
-
|
|
106
|
-
export const DEFAULT_SHIPPED: ShippedJson = {
|
|
107
|
-
shipped: [],
|
|
108
|
-
lastUpdated: '',
|
|
109
|
-
}
|