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
package/core/errors.ts
DELETED
|
@@ -1,335 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Custom Error Hierarchy for prjct-cli
|
|
3
|
-
*
|
|
4
|
-
* Base error class with specific subclasses for different error domains.
|
|
5
|
-
* Enables typed error handling and better error messages.
|
|
6
|
-
*
|
|
7
|
-
* Features:
|
|
8
|
-
* - Zod-validated structured error data
|
|
9
|
-
* - NamedError pattern (inspired by opencode)
|
|
10
|
-
* - Type-safe error creation and handling
|
|
11
|
-
*
|
|
12
|
-
* @module core/errors
|
|
13
|
-
* @version 2.0.0
|
|
14
|
-
*/
|
|
15
|
-
|
|
16
|
-
import { type ZodType, z } from 'zod'
|
|
17
|
-
|
|
18
|
-
// =============================================================================
|
|
19
|
-
// Named Error Pattern (Zod-based)
|
|
20
|
-
// =============================================================================
|
|
21
|
-
|
|
22
|
-
/**
|
|
23
|
-
* Creates a typed error class with Zod schema validation
|
|
24
|
-
* Inspired by opencode's NamedError pattern
|
|
25
|
-
*
|
|
26
|
-
* @example
|
|
27
|
-
* const FileNotFound = NamedError.create('FileNotFound', z.object({
|
|
28
|
-
* path: z.string(),
|
|
29
|
-
* operation: z.enum(['read', 'write', 'delete'])
|
|
30
|
-
* }))
|
|
31
|
-
*
|
|
32
|
-
* throw FileNotFound.throw({ path: '/foo/bar', operation: 'read' })
|
|
33
|
-
*/
|
|
34
|
-
export const NamedError = {
|
|
35
|
-
create<T extends ZodType>(name: string, schema: T) {
|
|
36
|
-
type Data = z.infer<T>
|
|
37
|
-
|
|
38
|
-
class TypedError extends Error {
|
|
39
|
-
readonly errorName: string
|
|
40
|
-
readonly data: Data
|
|
41
|
-
readonly isOperational = true
|
|
42
|
-
|
|
43
|
-
constructor(data: Data) {
|
|
44
|
-
const parsed = schema.parse(data)
|
|
45
|
-
super(`${name}: ${JSON.stringify(parsed)}`)
|
|
46
|
-
this.name = name
|
|
47
|
-
this.errorName = name
|
|
48
|
-
this.data = parsed
|
|
49
|
-
Error.captureStackTrace?.(this, this.constructor)
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
static throw(data: Data): never {
|
|
53
|
-
throw new TypedError(data)
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
static is(error: unknown): error is TypedError {
|
|
57
|
-
return error instanceof TypedError && (error as TypedError).errorName === name
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
static create(data: Data): TypedError {
|
|
61
|
-
return new TypedError(data)
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
return TypedError
|
|
66
|
-
},
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
// =============================================================================
|
|
70
|
-
// Typed Error Definitions (New Pattern)
|
|
71
|
-
// =============================================================================
|
|
72
|
-
|
|
73
|
-
/** File operation errors with path context */
|
|
74
|
-
export const FileError = NamedError.create(
|
|
75
|
-
'FileError',
|
|
76
|
-
z.object({
|
|
77
|
-
path: z.string(),
|
|
78
|
-
operation: z.enum(['read', 'write', 'delete', 'create', 'copy']),
|
|
79
|
-
reason: z.string().optional(),
|
|
80
|
-
})
|
|
81
|
-
)
|
|
82
|
-
|
|
83
|
-
/** Validation errors with field context */
|
|
84
|
-
export const ValidationError = NamedError.create(
|
|
85
|
-
'ValidationError',
|
|
86
|
-
z.object({
|
|
87
|
-
field: z.string(),
|
|
88
|
-
expected: z.string(),
|
|
89
|
-
received: z.string().optional(),
|
|
90
|
-
message: z.string().optional(),
|
|
91
|
-
})
|
|
92
|
-
)
|
|
93
|
-
|
|
94
|
-
/** Permission errors */
|
|
95
|
-
export const PermissionError = NamedError.create(
|
|
96
|
-
'PermissionError',
|
|
97
|
-
z.object({
|
|
98
|
-
action: z.string(),
|
|
99
|
-
resource: z.string(),
|
|
100
|
-
reason: z.string().optional(),
|
|
101
|
-
})
|
|
102
|
-
)
|
|
103
|
-
|
|
104
|
-
/** Task operation errors */
|
|
105
|
-
export const TaskError = NamedError.create(
|
|
106
|
-
'TaskError',
|
|
107
|
-
z.object({
|
|
108
|
-
taskId: z.string().optional(),
|
|
109
|
-
operation: z.enum(['create', 'update', 'complete', 'pause', 'resume', 'delete']),
|
|
110
|
-
reason: z.string(),
|
|
111
|
-
})
|
|
112
|
-
)
|
|
113
|
-
|
|
114
|
-
/** Session errors */
|
|
115
|
-
export const SessionError = NamedError.create(
|
|
116
|
-
'SessionError',
|
|
117
|
-
z.object({
|
|
118
|
-
sessionId: z.string().optional(),
|
|
119
|
-
reason: z.string(),
|
|
120
|
-
})
|
|
121
|
-
)
|
|
122
|
-
|
|
123
|
-
/** Sync errors */
|
|
124
|
-
export const SyncError = NamedError.create(
|
|
125
|
-
'SyncError',
|
|
126
|
-
z.object({
|
|
127
|
-
projectId: z.string().optional(),
|
|
128
|
-
operation: z.enum(['push', 'pull', 'auth', 'connect']),
|
|
129
|
-
reason: z.string(),
|
|
130
|
-
})
|
|
131
|
-
)
|
|
132
|
-
|
|
133
|
-
// =============================================================================
|
|
134
|
-
// Legacy Error Classes (Preserved for Backward Compatibility)
|
|
135
|
-
// =============================================================================
|
|
136
|
-
|
|
137
|
-
/**
|
|
138
|
-
* Base error class for all prjct errors
|
|
139
|
-
*/
|
|
140
|
-
export class PrjctError extends Error {
|
|
141
|
-
readonly code: string
|
|
142
|
-
readonly isOperational: boolean
|
|
143
|
-
|
|
144
|
-
constructor(message: string, code = 'PRJCT_ERROR') {
|
|
145
|
-
super(message)
|
|
146
|
-
this.name = 'PrjctError'
|
|
147
|
-
this.code = code
|
|
148
|
-
this.isOperational = true // Distinguishes from programming errors
|
|
149
|
-
Error.captureStackTrace?.(this, this.constructor)
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
/**
|
|
154
|
-
* Configuration-related errors
|
|
155
|
-
*/
|
|
156
|
-
export class ConfigError extends PrjctError {
|
|
157
|
-
constructor(message: string, code = 'CONFIG_ERROR') {
|
|
158
|
-
super(message, code)
|
|
159
|
-
this.name = 'ConfigError'
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
static notFound(path: string): ConfigError {
|
|
163
|
-
return new ConfigError(`Configuration not found: ${path}`, 'CONFIG_NOT_FOUND')
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
static invalid(reason: string): ConfigError {
|
|
167
|
-
return new ConfigError(`Invalid configuration: ${reason}`, 'CONFIG_INVALID')
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
static parseError(path: string): ConfigError {
|
|
171
|
-
return new ConfigError(`Failed to parse configuration: ${path}`, 'CONFIG_PARSE_ERROR')
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
/**
|
|
176
|
-
* Storage and file system errors
|
|
177
|
-
*/
|
|
178
|
-
export class StorageError extends PrjctError {
|
|
179
|
-
constructor(message: string, code = 'STORAGE_ERROR') {
|
|
180
|
-
super(message, code)
|
|
181
|
-
this.name = 'StorageError'
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
static readFailed(path: string): StorageError {
|
|
185
|
-
return new StorageError(`Failed to read: ${path}`, 'STORAGE_READ_FAILED')
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
static writeFailed(path: string): StorageError {
|
|
189
|
-
return new StorageError(`Failed to write: ${path}`, 'STORAGE_WRITE_FAILED')
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
static notFound(path: string): StorageError {
|
|
193
|
-
return new StorageError(`File not found: ${path}`, 'STORAGE_NOT_FOUND')
|
|
194
|
-
}
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
/**
|
|
198
|
-
* Project-related errors
|
|
199
|
-
*/
|
|
200
|
-
export class ProjectError extends PrjctError {
|
|
201
|
-
constructor(message: string, code = 'PROJECT_ERROR') {
|
|
202
|
-
super(message, code)
|
|
203
|
-
this.name = 'ProjectError'
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
static notInitialized(): ProjectError {
|
|
207
|
-
return new ProjectError('Project not initialized. Run /p:init first.', 'PROJECT_NOT_INIT')
|
|
208
|
-
}
|
|
209
|
-
|
|
210
|
-
static notFound(projectId: string): ProjectError {
|
|
211
|
-
return new ProjectError(`Project not found: ${projectId}`, 'PROJECT_NOT_FOUND')
|
|
212
|
-
}
|
|
213
|
-
|
|
214
|
-
static invalidId(projectId: string): ProjectError {
|
|
215
|
-
return new ProjectError(`Invalid project ID: ${projectId}`, 'PROJECT_INVALID_ID')
|
|
216
|
-
}
|
|
217
|
-
}
|
|
218
|
-
|
|
219
|
-
/**
|
|
220
|
-
* Command execution errors
|
|
221
|
-
*/
|
|
222
|
-
export class CommandError extends PrjctError {
|
|
223
|
-
constructor(message: string, code = 'COMMAND_ERROR') {
|
|
224
|
-
super(message, code)
|
|
225
|
-
this.name = 'CommandError'
|
|
226
|
-
}
|
|
227
|
-
|
|
228
|
-
static notFound(commandName: string): CommandError {
|
|
229
|
-
return new CommandError(`Command not found: ${commandName}`, 'COMMAND_NOT_FOUND')
|
|
230
|
-
}
|
|
231
|
-
|
|
232
|
-
static invalidParams(reason: string): CommandError {
|
|
233
|
-
return new CommandError(`Invalid parameters: ${reason}`, 'COMMAND_INVALID_PARAMS')
|
|
234
|
-
}
|
|
235
|
-
|
|
236
|
-
static executionFailed(commandName: string, reason: string): CommandError {
|
|
237
|
-
return new CommandError(`Command '${commandName}' failed: ${reason}`, 'COMMAND_EXEC_FAILED')
|
|
238
|
-
}
|
|
239
|
-
}
|
|
240
|
-
|
|
241
|
-
/**
|
|
242
|
-
* Template-related errors
|
|
243
|
-
*/
|
|
244
|
-
export class TemplateError extends PrjctError {
|
|
245
|
-
constructor(message: string, code = 'TEMPLATE_ERROR') {
|
|
246
|
-
super(message, code)
|
|
247
|
-
this.name = 'TemplateError'
|
|
248
|
-
}
|
|
249
|
-
|
|
250
|
-
static notFound(templateName: string): TemplateError {
|
|
251
|
-
return new TemplateError(`Template not found: ${templateName}.md`, 'TEMPLATE_NOT_FOUND')
|
|
252
|
-
}
|
|
253
|
-
|
|
254
|
-
static parseFailed(templateName: string): TemplateError {
|
|
255
|
-
return new TemplateError(`Failed to parse template: ${templateName}`, 'TEMPLATE_PARSE_ERROR')
|
|
256
|
-
}
|
|
257
|
-
}
|
|
258
|
-
|
|
259
|
-
/**
|
|
260
|
-
* Agent-related errors
|
|
261
|
-
*/
|
|
262
|
-
export class AgentError extends PrjctError {
|
|
263
|
-
constructor(message: string, code = 'AGENT_ERROR') {
|
|
264
|
-
super(message, code)
|
|
265
|
-
this.name = 'AgentError'
|
|
266
|
-
}
|
|
267
|
-
|
|
268
|
-
static notSupported(agentType: string): AgentError {
|
|
269
|
-
return new AgentError(`Unsupported agent type: ${agentType}`, 'AGENT_NOT_SUPPORTED')
|
|
270
|
-
}
|
|
271
|
-
|
|
272
|
-
static initFailed(reason: string): AgentError {
|
|
273
|
-
return new AgentError(`Agent initialization failed: ${reason}`, 'AGENT_INIT_FAILED')
|
|
274
|
-
}
|
|
275
|
-
}
|
|
276
|
-
|
|
277
|
-
/**
|
|
278
|
-
* Type guard to check if error is a PrjctError
|
|
279
|
-
*/
|
|
280
|
-
export function isPrjctError(error: unknown): error is PrjctError {
|
|
281
|
-
return error instanceof PrjctError
|
|
282
|
-
}
|
|
283
|
-
|
|
284
|
-
/**
|
|
285
|
-
* Type guard for specific error types
|
|
286
|
-
*/
|
|
287
|
-
export function isConfigError(error: unknown): error is ConfigError {
|
|
288
|
-
return error instanceof ConfigError
|
|
289
|
-
}
|
|
290
|
-
|
|
291
|
-
export function isStorageError(error: unknown): error is StorageError {
|
|
292
|
-
return error instanceof StorageError
|
|
293
|
-
}
|
|
294
|
-
|
|
295
|
-
export function isProjectError(error: unknown): error is ProjectError {
|
|
296
|
-
return error instanceof ProjectError
|
|
297
|
-
}
|
|
298
|
-
|
|
299
|
-
export function isCommandError(error: unknown): error is CommandError {
|
|
300
|
-
return error instanceof CommandError
|
|
301
|
-
}
|
|
302
|
-
|
|
303
|
-
export function isTemplateError(error: unknown): error is TemplateError {
|
|
304
|
-
return error instanceof TemplateError
|
|
305
|
-
}
|
|
306
|
-
|
|
307
|
-
export function isAgentError(error: unknown): error is AgentError {
|
|
308
|
-
return error instanceof AgentError
|
|
309
|
-
}
|
|
310
|
-
|
|
311
|
-
/**
|
|
312
|
-
* Extract error message safely from unknown error
|
|
313
|
-
*/
|
|
314
|
-
export function getErrorMessage(error: unknown): string {
|
|
315
|
-
if (isPrjctError(error)) {
|
|
316
|
-
return error.message
|
|
317
|
-
}
|
|
318
|
-
if (error instanceof Error) {
|
|
319
|
-
return error.message
|
|
320
|
-
}
|
|
321
|
-
if (typeof error === 'string') {
|
|
322
|
-
return error
|
|
323
|
-
}
|
|
324
|
-
return 'Unknown error'
|
|
325
|
-
}
|
|
326
|
-
|
|
327
|
-
/**
|
|
328
|
-
* Extract error code safely from unknown error
|
|
329
|
-
*/
|
|
330
|
-
export function getErrorCode(error: unknown): string {
|
|
331
|
-
if (isPrjctError(error)) {
|
|
332
|
-
return error.code
|
|
333
|
-
}
|
|
334
|
-
return 'UNKNOWN_ERROR'
|
|
335
|
-
}
|
package/core/events/events.ts
DELETED
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Event Bus for Sync
|
|
3
|
-
*
|
|
4
|
-
* Events are published on every Storage write/delete.
|
|
5
|
-
* Events accumulate in sync/pending.json until /p:ship or /p:sync.
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
import pathManager from '../infrastructure/path-manager'
|
|
9
|
-
import type { SyncEvent, SyncEventType } from '../types'
|
|
10
|
-
import { getTimestamp } from '../utils/date-helper'
|
|
11
|
-
import * as fileHelper from '../utils/file-helper'
|
|
12
|
-
|
|
13
|
-
/**
|
|
14
|
-
* Infer event type from path and action
|
|
15
|
-
*/
|
|
16
|
-
export function inferEventType(pathArray: string[], action: 'write' | 'delete'): SyncEventType {
|
|
17
|
-
const entity = pathArray[0]
|
|
18
|
-
|
|
19
|
-
if (action === 'delete') {
|
|
20
|
-
return `${entity}.deleted` as SyncEventType
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
// For writes, we'd need to check if it's new or update
|
|
24
|
-
// For simplicity, use 'updated' (can be refined later)
|
|
25
|
-
return `${entity}.updated` as SyncEventType
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
class EventBus {
|
|
29
|
-
/**
|
|
30
|
-
* Publish event to pending queue
|
|
31
|
-
*/
|
|
32
|
-
async publish(event: SyncEvent): Promise<void> {
|
|
33
|
-
const filePath = pathManager.getSyncPendingPath(event.projectId)
|
|
34
|
-
|
|
35
|
-
// Read existing pending events
|
|
36
|
-
const pending = (await fileHelper.readJson<SyncEvent[]>(filePath, [])) ?? []
|
|
37
|
-
|
|
38
|
-
// Add new event
|
|
39
|
-
pending.push(event)
|
|
40
|
-
|
|
41
|
-
// Write back (ensureDir is handled by writeJson)
|
|
42
|
-
await fileHelper.writeJson(filePath, pending)
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
/**
|
|
46
|
-
* Get all pending events for a project
|
|
47
|
-
*/
|
|
48
|
-
async getPending(projectId: string): Promise<SyncEvent[]> {
|
|
49
|
-
const filePath = pathManager.getSyncPendingPath(projectId)
|
|
50
|
-
return (await fileHelper.readJson<SyncEvent[]>(filePath, [])) ?? []
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
/**
|
|
54
|
-
* Clear pending events after successful sync
|
|
55
|
-
*/
|
|
56
|
-
async clearPending(projectId: string): Promise<void> {
|
|
57
|
-
const filePath = pathManager.getSyncPendingPath(projectId)
|
|
58
|
-
await fileHelper.writeJson(filePath, [])
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
/**
|
|
62
|
-
* Update last sync timestamp
|
|
63
|
-
*/
|
|
64
|
-
async updateLastSync(projectId: string): Promise<void> {
|
|
65
|
-
const filePath = pathManager.getLastSyncPath(projectId)
|
|
66
|
-
|
|
67
|
-
const data = {
|
|
68
|
-
timestamp: getTimestamp(),
|
|
69
|
-
success: true,
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
await fileHelper.writeJson(filePath, data)
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
/**
|
|
76
|
-
* Get last sync info
|
|
77
|
-
*/
|
|
78
|
-
async getLastSync(projectId: string): Promise<{ timestamp: string; success: boolean } | null> {
|
|
79
|
-
const filePath = pathManager.getLastSyncPath(projectId)
|
|
80
|
-
return await fileHelper.readJson<{ timestamp: string; success: boolean } | null>(filePath, null)
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
export const eventBus = new EventBus()
|
|
85
|
-
export default eventBus
|