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
|
@@ -1,170 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* LLM Output Schemas
|
|
3
|
-
*
|
|
4
|
-
* Zod schemas for all LLM prompt response types.
|
|
5
|
-
* These schemas are:
|
|
6
|
-
* 1. Injected into prompts as explicit format instructions
|
|
7
|
-
* 2. Used to validate LLM responses before storage or use
|
|
8
|
-
* 3. Define the contract between prompts and response handling
|
|
9
|
-
*
|
|
10
|
-
* @see PRJ-264
|
|
11
|
-
*/
|
|
12
|
-
|
|
13
|
-
import { z } from 'zod'
|
|
14
|
-
import { ClassificationDomainSchema, TaskClassificationSchema } from './classification'
|
|
15
|
-
|
|
16
|
-
// =============================================================================
|
|
17
|
-
// Re-export classification schema (it IS an LLM output schema)
|
|
18
|
-
// =============================================================================
|
|
19
|
-
|
|
20
|
-
export { TaskClassificationSchema } from './classification'
|
|
21
|
-
|
|
22
|
-
// =============================================================================
|
|
23
|
-
// Agent Assignment Schema
|
|
24
|
-
// =============================================================================
|
|
25
|
-
|
|
26
|
-
/** LLM response when selecting which agent should handle a task */
|
|
27
|
-
export const AgentAssignmentSchema = z.object({
|
|
28
|
-
/** Agent file name (e.g., "backend.md", "frontend.md") */
|
|
29
|
-
agentName: z.string(),
|
|
30
|
-
/** Why this agent was selected */
|
|
31
|
-
reasoning: z.string(),
|
|
32
|
-
/** Confidence in the assignment (0-1) */
|
|
33
|
-
confidence: z.number().min(0).max(1),
|
|
34
|
-
})
|
|
35
|
-
|
|
36
|
-
// =============================================================================
|
|
37
|
-
// Subtask Breakdown Schema
|
|
38
|
-
// =============================================================================
|
|
39
|
-
|
|
40
|
-
/** LLM response when breaking a task into subtasks */
|
|
41
|
-
export const SubtaskBreakdownSchema = z.object({
|
|
42
|
-
/** Subtasks in execution order */
|
|
43
|
-
subtasks: z.array(
|
|
44
|
-
z.object({
|
|
45
|
-
/** Short description of the subtask */
|
|
46
|
-
description: z.string(),
|
|
47
|
-
/** Domain this subtask belongs to */
|
|
48
|
-
domain: ClassificationDomainSchema,
|
|
49
|
-
/** Suggested agent for this subtask */
|
|
50
|
-
agent: z.string(),
|
|
51
|
-
/** IDs of subtasks this depends on (by index, 0-based) */
|
|
52
|
-
dependsOn: z.array(z.number()),
|
|
53
|
-
})
|
|
54
|
-
),
|
|
55
|
-
/** Estimated total effort */
|
|
56
|
-
effort: z.enum(['low', 'medium', 'high']),
|
|
57
|
-
})
|
|
58
|
-
|
|
59
|
-
// =============================================================================
|
|
60
|
-
// Schema-to-Prompt Serializer
|
|
61
|
-
// =============================================================================
|
|
62
|
-
|
|
63
|
-
/**
|
|
64
|
-
* Registry of output schemas keyed by prompt type.
|
|
65
|
-
* Used by prompt-builder to inject the correct schema into each prompt.
|
|
66
|
-
*/
|
|
67
|
-
export const OUTPUT_SCHEMAS: Record<string, { schema: z.ZodTypeAny; example: string }> = {
|
|
68
|
-
classification: {
|
|
69
|
-
schema: TaskClassificationSchema,
|
|
70
|
-
example: JSON.stringify(
|
|
71
|
-
{
|
|
72
|
-
primaryDomain: 'backend',
|
|
73
|
-
secondaryDomains: ['database'],
|
|
74
|
-
confidence: 0.9,
|
|
75
|
-
filePatterns: ['src/api/**'],
|
|
76
|
-
relevantAgents: ['backend.md'],
|
|
77
|
-
},
|
|
78
|
-
null,
|
|
79
|
-
2
|
|
80
|
-
),
|
|
81
|
-
},
|
|
82
|
-
agentAssignment: {
|
|
83
|
-
schema: AgentAssignmentSchema,
|
|
84
|
-
example: JSON.stringify(
|
|
85
|
-
{
|
|
86
|
-
agentName: 'backend.md',
|
|
87
|
-
reasoning: 'Task involves API endpoint creation',
|
|
88
|
-
confidence: 0.85,
|
|
89
|
-
},
|
|
90
|
-
null,
|
|
91
|
-
2
|
|
92
|
-
),
|
|
93
|
-
},
|
|
94
|
-
subtaskBreakdown: {
|
|
95
|
-
schema: SubtaskBreakdownSchema,
|
|
96
|
-
example: JSON.stringify(
|
|
97
|
-
{
|
|
98
|
-
subtasks: [
|
|
99
|
-
{
|
|
100
|
-
description: 'Add schema validation',
|
|
101
|
-
domain: 'backend',
|
|
102
|
-
agent: 'backend.md',
|
|
103
|
-
dependsOn: [],
|
|
104
|
-
},
|
|
105
|
-
{
|
|
106
|
-
description: 'Add unit tests',
|
|
107
|
-
domain: 'testing',
|
|
108
|
-
agent: 'testing.md',
|
|
109
|
-
dependsOn: [0],
|
|
110
|
-
},
|
|
111
|
-
],
|
|
112
|
-
effort: 'medium',
|
|
113
|
-
},
|
|
114
|
-
null,
|
|
115
|
-
2
|
|
116
|
-
),
|
|
117
|
-
},
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
/**
|
|
121
|
-
* Render a schema as prompt instructions.
|
|
122
|
-
* Returns a markdown block that tells the LLM exactly what format to use.
|
|
123
|
-
*/
|
|
124
|
-
export function renderSchemaForPrompt(schemaType: string): string | null {
|
|
125
|
-
const entry = OUTPUT_SCHEMAS[schemaType]
|
|
126
|
-
if (!entry) return null
|
|
127
|
-
|
|
128
|
-
return `## OUTPUT FORMAT
|
|
129
|
-
|
|
130
|
-
Return ONLY valid JSON matching this schema (no markdown, no explanation):
|
|
131
|
-
|
|
132
|
-
\`\`\`json
|
|
133
|
-
${entry.example}
|
|
134
|
-
\`\`\`
|
|
135
|
-
|
|
136
|
-
Fields:
|
|
137
|
-
${describeSchema(entry.schema)}`
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
/**
|
|
141
|
-
* Extract field descriptions from a Zod object schema.
|
|
142
|
-
*/
|
|
143
|
-
function describeSchema(schema: z.ZodTypeAny): string {
|
|
144
|
-
if (schema instanceof z.ZodObject) {
|
|
145
|
-
const shape = schema.shape as Record<string, z.ZodTypeAny>
|
|
146
|
-
return Object.entries(shape)
|
|
147
|
-
.map(([key, field]) => `- \`${key}\`: ${describeField(field)}`)
|
|
148
|
-
.join('\n')
|
|
149
|
-
}
|
|
150
|
-
return '(see example above)'
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
/**
|
|
154
|
-
* Describe a single Zod field type for prompt injection.
|
|
155
|
-
*/
|
|
156
|
-
function describeField(field: z.ZodTypeAny): string {
|
|
157
|
-
if (field instanceof z.ZodString) return 'string'
|
|
158
|
-
if (field instanceof z.ZodNumber) return 'number'
|
|
159
|
-
if (field instanceof z.ZodEnum) return `one of: ${(field.options as string[]).join(', ')}`
|
|
160
|
-
if (field instanceof z.ZodArray) return `array of ${describeField(field.element)}`
|
|
161
|
-
if (field instanceof z.ZodObject) return 'object'
|
|
162
|
-
return 'any'
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
// =============================================================================
|
|
166
|
-
// Inferred Types
|
|
167
|
-
// =============================================================================
|
|
168
|
-
|
|
169
|
-
export type AgentAssignment = z.infer<typeof AgentAssignmentSchema>
|
|
170
|
-
export type SubtaskBreakdown = z.infer<typeof SubtaskBreakdownSchema>
|
package/core/schemas/metrics.ts
DELETED
|
@@ -1,143 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Metrics Schema
|
|
3
|
-
*
|
|
4
|
-
* Defines the structure for metrics.json - value dashboard metrics.
|
|
5
|
-
* Tracks token savings, sync performance, and usage trends.
|
|
6
|
-
*
|
|
7
|
-
* Uses Zod for runtime validation and TypeScript type inference.
|
|
8
|
-
* @version 1.0.0
|
|
9
|
-
*/
|
|
10
|
-
|
|
11
|
-
import { z } from 'zod'
|
|
12
|
-
|
|
13
|
-
// =============================================================================
|
|
14
|
-
// Zod Schemas - Source of Truth
|
|
15
|
-
// =============================================================================
|
|
16
|
-
|
|
17
|
-
/**
|
|
18
|
-
* Daily stats for trend analysis
|
|
19
|
-
*/
|
|
20
|
-
export const DailyStatsSchema = z.object({
|
|
21
|
-
date: z.string(), // YYYY-MM-DD
|
|
22
|
-
tokensSaved: z.number(), // Tokens saved that day
|
|
23
|
-
syncs: z.number(), // Number of syncs
|
|
24
|
-
avgCompressionRate: z.number(), // Average compression rate (0-1)
|
|
25
|
-
totalDuration: z.number(), // Total sync time in ms
|
|
26
|
-
})
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* Agent usage tracking
|
|
30
|
-
*/
|
|
31
|
-
export const AgentUsageSchema = z.object({
|
|
32
|
-
agentName: z.string(), // e.g., "backend", "frontend"
|
|
33
|
-
usageCount: z.number(), // Times invoked
|
|
34
|
-
tokensSaved: z.number(), // Tokens saved by this agent
|
|
35
|
-
})
|
|
36
|
-
|
|
37
|
-
/**
|
|
38
|
-
* Main metrics JSON structure
|
|
39
|
-
*/
|
|
40
|
-
export const MetricsJsonSchema = z.object({
|
|
41
|
-
// Token metrics
|
|
42
|
-
totalTokensSaved: z.number(),
|
|
43
|
-
avgCompressionRate: z.number(), // 0-1 (e.g., 0.63 = 63% reduction)
|
|
44
|
-
|
|
45
|
-
// Sync metrics
|
|
46
|
-
syncCount: z.number(),
|
|
47
|
-
watchTriggers: z.number(), // Auto-syncs from watch mode
|
|
48
|
-
avgSyncDuration: z.number(), // Average in ms
|
|
49
|
-
totalSyncDuration: z.number(), // Total in ms
|
|
50
|
-
|
|
51
|
-
// Agent usage
|
|
52
|
-
agentUsage: z.array(AgentUsageSchema),
|
|
53
|
-
|
|
54
|
-
// Time series for trends
|
|
55
|
-
dailyStats: z.array(DailyStatsSchema),
|
|
56
|
-
|
|
57
|
-
// Metadata
|
|
58
|
-
firstSync: z.string(), // ISO8601 - when tracking started
|
|
59
|
-
lastUpdated: z.string(), // ISO8601
|
|
60
|
-
})
|
|
61
|
-
|
|
62
|
-
// =============================================================================
|
|
63
|
-
// Inferred Types
|
|
64
|
-
// =============================================================================
|
|
65
|
-
|
|
66
|
-
export type DailyStats = z.infer<typeof DailyStatsSchema>
|
|
67
|
-
export type AgentUsage = z.infer<typeof AgentUsageSchema>
|
|
68
|
-
export type MetricsJson = z.infer<typeof MetricsJsonSchema>
|
|
69
|
-
|
|
70
|
-
// =============================================================================
|
|
71
|
-
// Validation Helpers
|
|
72
|
-
// =============================================================================
|
|
73
|
-
|
|
74
|
-
/** Parse and validate metrics.json content */
|
|
75
|
-
export const parseMetrics = (data: unknown): MetricsJson => MetricsJsonSchema.parse(data)
|
|
76
|
-
|
|
77
|
-
/** Safe parse with error result */
|
|
78
|
-
export const safeParseMetrics = (data: unknown) => MetricsJsonSchema.safeParse(data)
|
|
79
|
-
|
|
80
|
-
// =============================================================================
|
|
81
|
-
// Defaults
|
|
82
|
-
// =============================================================================
|
|
83
|
-
|
|
84
|
-
export const DEFAULT_METRICS: MetricsJson = {
|
|
85
|
-
totalTokensSaved: 0,
|
|
86
|
-
avgCompressionRate: 0,
|
|
87
|
-
syncCount: 0,
|
|
88
|
-
watchTriggers: 0,
|
|
89
|
-
avgSyncDuration: 0,
|
|
90
|
-
totalSyncDuration: 0,
|
|
91
|
-
agentUsage: [],
|
|
92
|
-
dailyStats: [],
|
|
93
|
-
firstSync: '',
|
|
94
|
-
lastUpdated: '',
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
// =============================================================================
|
|
98
|
-
// Cost Calculation Constants (January 2026 Pricing)
|
|
99
|
-
// =============================================================================
|
|
100
|
-
|
|
101
|
-
/**
|
|
102
|
-
* Token costs per 1000 tokens (INPUT pricing)
|
|
103
|
-
* Source: https://docs.anthropic.com/en/docs/about-claude/models
|
|
104
|
-
*
|
|
105
|
-
* Used for estimating cost savings from context compression
|
|
106
|
-
*/
|
|
107
|
-
export const TOKEN_COSTS = {
|
|
108
|
-
// Current models (2026)
|
|
109
|
-
'claude-opus-4.5': 0.005, // $5/M input - flagship
|
|
110
|
-
'claude-sonnet-4.5': 0.003, // $3/M input - balanced
|
|
111
|
-
'claude-haiku-4.5': 0.001, // $1/M input - fastest
|
|
112
|
-
// Legacy models
|
|
113
|
-
'claude-opus-4': 0.015, // $15/M input
|
|
114
|
-
'claude-sonnet-4': 0.003, // $3/M input
|
|
115
|
-
'claude-3-opus': 0.015, // $15/M input (deprecated)
|
|
116
|
-
'claude-3-sonnet': 0.003, // $3/M input (deprecated)
|
|
117
|
-
// Other providers
|
|
118
|
-
'gpt-4o': 0.0025, // $2.50/M input
|
|
119
|
-
'gpt-4': 0.01, // $10/M input (legacy)
|
|
120
|
-
'gemini-pro': 0.00125, // $1.25/M input
|
|
121
|
-
// Default: Claude Sonnet (most common for Claude Code)
|
|
122
|
-
default: 0.003, // $3/M input
|
|
123
|
-
} as const
|
|
124
|
-
|
|
125
|
-
export type ModelName = keyof typeof TOKEN_COSTS
|
|
126
|
-
|
|
127
|
-
/**
|
|
128
|
-
* Calculate estimated cost saved based on tokens
|
|
129
|
-
*/
|
|
130
|
-
export function estimateCostSaved(tokens: number, model: ModelName = 'default'): number {
|
|
131
|
-
const costPer1k = TOKEN_COSTS[model] || TOKEN_COSTS.default
|
|
132
|
-
return (tokens / 1000) * costPer1k
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
/**
|
|
136
|
-
* Format cost as currency string
|
|
137
|
-
*/
|
|
138
|
-
export function formatCost(cost: number): string {
|
|
139
|
-
if (cost < 0.01) {
|
|
140
|
-
return `$${(cost * 100).toFixed(2)}¢`
|
|
141
|
-
}
|
|
142
|
-
return `$${cost.toFixed(2)}`
|
|
143
|
-
}
|
package/core/schemas/model.ts
DELETED
|
@@ -1,153 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Model Schema
|
|
3
|
-
*
|
|
4
|
-
* Defines model specification types for AI providers.
|
|
5
|
-
* Records which model was used for each analysis and task,
|
|
6
|
-
* enabling consistency tracking and mismatch warnings.
|
|
7
|
-
*
|
|
8
|
-
* @see PRJ-265
|
|
9
|
-
*/
|
|
10
|
-
|
|
11
|
-
import { z } from 'zod'
|
|
12
|
-
|
|
13
|
-
// =============================================================================
|
|
14
|
-
// Provider-Specific Model Identifiers
|
|
15
|
-
// =============================================================================
|
|
16
|
-
|
|
17
|
-
/** Claude model identifiers (short names matching agent frontmatter convention) */
|
|
18
|
-
export const ClaudeModelSchema = z.enum(['opus', 'sonnet', 'haiku'])
|
|
19
|
-
|
|
20
|
-
/** Gemini model identifiers */
|
|
21
|
-
export const GeminiModelSchema = z.enum(['2.5-pro', '2.5-flash', '2.0-flash'])
|
|
22
|
-
|
|
23
|
-
/** Generic model identifier - allows any string for future providers */
|
|
24
|
-
export const AIModelSchema = z.string().min(1)
|
|
25
|
-
|
|
26
|
-
// =============================================================================
|
|
27
|
-
// Supported Models Per Provider
|
|
28
|
-
// =============================================================================
|
|
29
|
-
|
|
30
|
-
export const SUPPORTED_MODELS: Record<string, readonly string[]> = {
|
|
31
|
-
claude: ['opus', 'sonnet', 'haiku'],
|
|
32
|
-
gemini: ['2.5-pro', '2.5-flash', '2.0-flash'],
|
|
33
|
-
cursor: [], // Multi-model IDE, user selects model
|
|
34
|
-
windsurf: [], // Multi-model IDE, user selects model
|
|
35
|
-
antigravity: [], // Platform-managed
|
|
36
|
-
} as const
|
|
37
|
-
|
|
38
|
-
export const DEFAULT_MODELS: Record<string, string> = {
|
|
39
|
-
claude: 'sonnet',
|
|
40
|
-
gemini: '2.5-flash',
|
|
41
|
-
} as const
|
|
42
|
-
|
|
43
|
-
// =============================================================================
|
|
44
|
-
// Minimum CLI Versions
|
|
45
|
-
// =============================================================================
|
|
46
|
-
|
|
47
|
-
export const MIN_CLI_VERSIONS: Record<string, string> = {
|
|
48
|
-
claude: '1.0.0',
|
|
49
|
-
gemini: '1.0.0',
|
|
50
|
-
} as const
|
|
51
|
-
|
|
52
|
-
// =============================================================================
|
|
53
|
-
// Model Metadata - Recorded Per Operation
|
|
54
|
-
// =============================================================================
|
|
55
|
-
|
|
56
|
-
/** Model metadata recorded with each analysis or task */
|
|
57
|
-
export const ModelMetadataSchema = z.object({
|
|
58
|
-
/** Provider name (e.g., 'claude', 'gemini') */
|
|
59
|
-
provider: z.string(),
|
|
60
|
-
/** Model identifier (e.g., 'opus', 'sonnet', '2.5-pro') */
|
|
61
|
-
model: z.string(),
|
|
62
|
-
/** CLI version used */
|
|
63
|
-
cliVersion: z.string().optional(),
|
|
64
|
-
/** When this was recorded */
|
|
65
|
-
recordedAt: z.string(),
|
|
66
|
-
})
|
|
67
|
-
|
|
68
|
-
// =============================================================================
|
|
69
|
-
// Model Configuration - Per Project
|
|
70
|
-
// =============================================================================
|
|
71
|
-
|
|
72
|
-
/** Per-project model preference */
|
|
73
|
-
export const ModelPreferenceSchema = z.object({
|
|
74
|
-
/** Preferred model for this project */
|
|
75
|
-
preferredModel: z.string().optional(),
|
|
76
|
-
/** Model used for last analysis (for mismatch detection) */
|
|
77
|
-
lastAnalysisModel: ModelMetadataSchema.optional(),
|
|
78
|
-
})
|
|
79
|
-
|
|
80
|
-
// =============================================================================
|
|
81
|
-
// Inferred Types
|
|
82
|
-
// =============================================================================
|
|
83
|
-
|
|
84
|
-
export type ClaudeModel = z.infer<typeof ClaudeModelSchema>
|
|
85
|
-
export type GeminiModel = z.infer<typeof GeminiModelSchema>
|
|
86
|
-
export type ModelMetadata = z.infer<typeof ModelMetadataSchema>
|
|
87
|
-
export type ModelPreference = z.infer<typeof ModelPreferenceSchema>
|
|
88
|
-
|
|
89
|
-
// =============================================================================
|
|
90
|
-
// Validation Helpers
|
|
91
|
-
// =============================================================================
|
|
92
|
-
|
|
93
|
-
/** Check if a model is valid for a given provider */
|
|
94
|
-
export function isValidModelForProvider(provider: string, model: string): boolean {
|
|
95
|
-
const supported = SUPPORTED_MODELS[provider]
|
|
96
|
-
if (!supported || supported.length === 0) return true // No restriction for multi-model IDEs
|
|
97
|
-
return supported.includes(model)
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
/** Get the default model for a provider */
|
|
101
|
-
export function getDefaultModel(provider: string): string | null {
|
|
102
|
-
return DEFAULT_MODELS[provider] ?? null
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
/** Get supported models for a provider */
|
|
106
|
-
export function getSupportedModels(provider: string): readonly string[] {
|
|
107
|
-
return SUPPORTED_MODELS[provider] ?? []
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
/** Get minimum CLI version for a provider */
|
|
111
|
-
export function getMinCliVersion(provider: string): string | null {
|
|
112
|
-
return MIN_CLI_VERSIONS[provider] ?? null
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
/**
|
|
116
|
-
* Compare semver versions. Returns:
|
|
117
|
-
* -1 if a < b
|
|
118
|
-
* 0 if a == b
|
|
119
|
-
* 1 if a > b
|
|
120
|
-
*/
|
|
121
|
-
export function compareSemver(a: string, b: string): -1 | 0 | 1 {
|
|
122
|
-
const pa = a.split('.').map(Number)
|
|
123
|
-
const pb = b.split('.').map(Number)
|
|
124
|
-
for (let i = 0; i < 3; i++) {
|
|
125
|
-
const va = pa[i] ?? 0
|
|
126
|
-
const vb = pb[i] ?? 0
|
|
127
|
-
if (va < vb) return -1
|
|
128
|
-
if (va > vb) return 1
|
|
129
|
-
}
|
|
130
|
-
return 0
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
/** Check if a CLI version meets minimum requirements */
|
|
134
|
-
export function meetsMinVersion(provider: string, version: string): boolean {
|
|
135
|
-
const min = MIN_CLI_VERSIONS[provider]
|
|
136
|
-
if (!min) return true // No minimum defined
|
|
137
|
-
return compareSemver(version, min) >= 0
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
/**
|
|
141
|
-
* Check for model mismatch between analysis and current task.
|
|
142
|
-
* Returns a warning message if the models differ, or null if they match.
|
|
143
|
-
*/
|
|
144
|
-
export function checkModelMismatch(
|
|
145
|
-
analysisModel: ModelMetadata | undefined,
|
|
146
|
-
taskModel: ModelMetadata | undefined
|
|
147
|
-
): string | null {
|
|
148
|
-
if (!analysisModel || !taskModel) return null
|
|
149
|
-
if (analysisModel.provider !== taskModel.provider || analysisModel.model !== taskModel.model) {
|
|
150
|
-
return `⚠️ Model mismatch: analysis used ${analysisModel.provider}/${analysisModel.model}, but task is using ${taskModel.provider}/${taskModel.model}. Results may differ.`
|
|
151
|
-
}
|
|
152
|
-
return null
|
|
153
|
-
}
|