prjct-cli 1.22.0 → 1.24.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +230 -0
- package/bin/prjct +30 -13
- package/dist/bin/prjct-core.mjs +1748 -0
- package/dist/bin/prjct.mjs +17 -36672
- package/dist/cli/linear.mjs +14 -0
- package/dist/daemon/entry.mjs +1429 -0
- package/dist/templates.json +1 -0
- package/package.json +4 -5
- package/bin/prjct.ts +0 -342
- package/core/__tests__/agentic/analysis-injection.test.ts +0 -377
- package/core/__tests__/agentic/cache-eviction.test.ts +0 -294
- package/core/__tests__/agentic/command-context.test.ts +0 -281
- package/core/__tests__/agentic/command-executor.test.ts +0 -659
- package/core/__tests__/agentic/domain-classifier.test.ts +0 -330
- package/core/__tests__/agentic/injection-validator.test.ts +0 -255
- package/core/__tests__/agentic/memory-system.test.ts +0 -281
- package/core/__tests__/agentic/plan-mode.test.ts +0 -386
- package/core/__tests__/agentic/prompt-assembly.test.ts +0 -298
- package/core/__tests__/agentic/prompt-builder.test.ts +0 -243
- package/core/__tests__/agentic/response-validator.test.ts +0 -263
- package/core/__tests__/agentic/semantic-matching.test.ts +0 -131
- package/core/__tests__/agentic/smart-context.test.ts +0 -372
- package/core/__tests__/agentic/tech-normalizer.test.ts +0 -136
- package/core/__tests__/agentic/token-budget.test.ts +0 -294
- package/core/__tests__/ai-tools/formatters.test.ts +0 -476
- package/core/__tests__/domain/bm25.test.ts +0 -225
- package/core/__tests__/domain/change-propagator.test.ts +0 -100
- package/core/__tests__/domain/fibonacci.test.ts +0 -113
- package/core/__tests__/domain/file-hasher.test.ts +0 -146
- package/core/__tests__/domain/file-ranker.test.ts +0 -169
- package/core/__tests__/domain/git-cochange.test.ts +0 -121
- package/core/__tests__/domain/import-graph.test.ts +0 -156
- package/core/__tests__/domain/velocity.test.ts +0 -623
- package/core/__tests__/infrastructure/performance-tracker.test.ts +0 -328
- package/core/__tests__/schemas/model.test.ts +0 -272
- package/core/__tests__/services/dependency-validator.test.ts +0 -175
- package/core/__tests__/services/hierarchical-agent-resolver.test.ts +0 -359
- package/core/__tests__/services/nested-context-resolver.test.ts +0 -443
- package/core/__tests__/services/project-index.test.ts +0 -355
- package/core/__tests__/services/staleness-checker.test.ts +0 -204
- package/core/__tests__/storage/analysis-storage.test.ts +0 -641
- package/core/__tests__/storage/archive-storage.test.ts +0 -455
- package/core/__tests__/storage/safe-reader.test.ts +0 -262
- package/core/__tests__/storage/sqlite-migration.test.ts +0 -1016
- package/core/__tests__/storage/state-storage-feedback.test.ts +0 -463
- package/core/__tests__/storage/state-storage-history.test.ts +0 -469
- package/core/__tests__/storage/storage-manager.test.ts +0 -383
- package/core/__tests__/storage/subtask-handoff.test.ts +0 -237
- package/core/__tests__/types/fs.test.ts +0 -125
- package/core/__tests__/utils/date-helper.test.ts +0 -449
- package/core/__tests__/utils/output.test.ts +0 -278
- package/core/__tests__/utils/preserve-sections.test.ts +0 -216
- package/core/__tests__/utils/project-commands.test.ts +0 -71
- package/core/__tests__/utils/retry.test.ts +0 -381
- package/core/__tests__/workflow/state-machine.test.ts +0 -216
- package/core/agentic/agent-router.ts +0 -150
- package/core/agentic/anti-hallucination.ts +0 -141
- package/core/agentic/chain-of-thought.ts +0 -234
- package/core/agentic/command-classifier.ts +0 -141
- package/core/agentic/command-context.ts +0 -168
- package/core/agentic/command-executor.ts +0 -471
- package/core/agentic/context-builder.ts +0 -285
- package/core/agentic/domain-classifier.ts +0 -525
- package/core/agentic/environment-block.ts +0 -102
- package/core/agentic/ground-truth.ts +0 -706
- package/core/agentic/index.ts +0 -193
- package/core/agentic/injection-validator.ts +0 -208
- package/core/agentic/loop-detector.ts +0 -451
- package/core/agentic/memory-system.ts +0 -1547
- package/core/agentic/orchestrator-executor.ts +0 -579
- package/core/agentic/plan-mode.ts +0 -525
- package/core/agentic/prompt-builder.ts +0 -1069
- package/core/agentic/response-validator.ts +0 -98
- package/core/agentic/services.ts +0 -167
- package/core/agentic/skill-loader.ts +0 -106
- package/core/agentic/smart-context.ts +0 -393
- package/core/agentic/tech-normalizer.ts +0 -167
- package/core/agentic/template-executor.ts +0 -272
- package/core/agentic/template-loader.ts +0 -109
- package/core/agentic/token-budget.ts +0 -226
- package/core/agentic/tool-registry.ts +0 -146
- package/core/agents/index.ts +0 -28
- package/core/agents/performance.ts +0 -429
- package/core/ai-tools/formatters.ts +0 -341
- package/core/ai-tools/generator.ts +0 -144
- package/core/ai-tools/index.ts +0 -15
- package/core/ai-tools/registry.ts +0 -201
- package/core/bus/bus.ts +0 -314
- package/core/bus/index.ts +0 -8
- package/core/cli/linear.ts +0 -500
- package/core/cli/lint-meta-commentary.ts +0 -177
- package/core/cli/start.ts +0 -386
- package/core/commands/analysis.ts +0 -1274
- package/core/commands/analytics.ts +0 -342
- package/core/commands/base.ts +0 -118
- package/core/commands/cleanup.ts +0 -157
- package/core/commands/command-data.ts +0 -463
- package/core/commands/commands.ts +0 -306
- package/core/commands/context.ts +0 -238
- package/core/commands/design.ts +0 -77
- package/core/commands/index.ts +0 -19
- package/core/commands/maintenance.ts +0 -77
- package/core/commands/performance.ts +0 -114
- package/core/commands/planning.ts +0 -662
- package/core/commands/register.ts +0 -127
- package/core/commands/registry.ts +0 -444
- package/core/commands/setup.ts +0 -280
- package/core/commands/shipping.ts +0 -267
- package/core/commands/snapshots.ts +0 -297
- package/core/commands/uninstall.ts +0 -542
- package/core/commands/velocity.ts +0 -149
- package/core/commands/workflow.ts +0 -505
- package/core/config/command-context.config.json +0 -66
- package/core/constants/index.ts +0 -379
- package/core/context/generator.ts +0 -368
- package/core/context-tools/files-tool.ts +0 -577
- package/core/context-tools/imports-tool.ts +0 -400
- package/core/context-tools/index.ts +0 -434
- package/core/context-tools/recent-tool.ts +0 -301
- package/core/context-tools/signatures-tool.ts +0 -495
- package/core/context-tools/summary-tool.ts +0 -301
- package/core/context-tools/token-counter.ts +0 -273
- package/core/context-tools/types.ts +0 -253
- package/core/domain/agent-generator.ts +0 -186
- package/core/domain/agent-loader.ts +0 -419
- package/core/domain/analyzer.ts +0 -387
- package/core/domain/architecture-generator.ts +0 -108
- package/core/domain/bm25.ts +0 -525
- package/core/domain/change-propagator.ts +0 -162
- package/core/domain/context-estimator.ts +0 -175
- package/core/domain/fibonacci.ts +0 -128
- package/core/domain/file-hasher.ts +0 -296
- package/core/domain/file-ranker.ts +0 -151
- package/core/domain/git-cochange.ts +0 -250
- package/core/domain/import-graph.ts +0 -315
- package/core/domain/snapshot-manager.ts +0 -415
- package/core/domain/task-stack.ts +0 -578
- package/core/domain/velocity.ts +0 -470
- package/core/errors.ts +0 -335
- package/core/events/events.ts +0 -85
- package/core/events/index.ts +0 -8
- package/core/index.ts +0 -481
- package/core/infrastructure/agent-detector.ts +0 -135
- package/core/infrastructure/ai-provider.ts +0 -578
- package/core/infrastructure/author-detector.ts +0 -133
- package/core/infrastructure/capability-installer.ts +0 -76
- package/core/infrastructure/claude-agent.ts +0 -297
- package/core/infrastructure/command-installer.ts +0 -752
- package/core/infrastructure/config-manager.ts +0 -364
- package/core/infrastructure/editors-config.ts +0 -172
- package/core/infrastructure/path-manager.ts +0 -571
- package/core/infrastructure/performance-tracker.ts +0 -326
- package/core/infrastructure/permission-manager.ts +0 -289
- package/core/infrastructure/setup.ts +0 -1061
- package/core/infrastructure/update-checker.ts +0 -246
- package/core/integrations/issue-tracker/enricher.ts +0 -271
- package/core/integrations/issue-tracker/index.ts +0 -8
- package/core/integrations/issue-tracker/manager.ts +0 -286
- package/core/integrations/issue-tracker/types.ts +0 -310
- package/core/integrations/jira/cache.ts +0 -57
- package/core/integrations/jira/client.ts +0 -688
- package/core/integrations/jira/index.ts +0 -23
- package/core/integrations/jira/service.ts +0 -244
- package/core/integrations/linear/cache.ts +0 -68
- package/core/integrations/linear/client.ts +0 -436
- package/core/integrations/linear/index.ts +0 -20
- package/core/integrations/linear/service.ts +0 -260
- package/core/integrations/linear/sync.ts +0 -314
- package/core/outcomes/analyzer.ts +0 -286
- package/core/outcomes/index.ts +0 -34
- package/core/outcomes/recorder.ts +0 -195
- package/core/plugin/builtin/webhook.ts +0 -148
- package/core/plugin/hooks.ts +0 -315
- package/core/plugin/index.ts +0 -50
- package/core/plugin/loader.ts +0 -354
- package/core/plugin/registry.ts +0 -326
- package/core/schemas/agents.ts +0 -27
- package/core/schemas/analysis.ts +0 -530
- package/core/schemas/classification.ts +0 -91
- package/core/schemas/command-context.ts +0 -29
- package/core/schemas/enriched-task.ts +0 -291
- package/core/schemas/ideas.ts +0 -114
- package/core/schemas/index.ts +0 -53
- package/core/schemas/issues.ts +0 -159
- package/core/schemas/llm-output.ts +0 -170
- package/core/schemas/metrics.ts +0 -143
- package/core/schemas/model.ts +0 -153
- package/core/schemas/outcomes.ts +0 -487
- package/core/schemas/performance.ts +0 -128
- package/core/schemas/permissions.ts +0 -180
- package/core/schemas/prd.ts +0 -450
- package/core/schemas/project.ts +0 -57
- package/core/schemas/roadmap.ts +0 -322
- package/core/schemas/schemas.ts +0 -38
- package/core/schemas/shipped.ts +0 -109
- package/core/schemas/state.ts +0 -284
- package/core/schemas/velocity.ts +0 -103
- package/core/server/index.ts +0 -21
- package/core/server/routes-extended.ts +0 -566
- package/core/server/routes.ts +0 -176
- package/core/server/server.ts +0 -149
- package/core/server/sse.ts +0 -192
- package/core/services/agent-generator.ts +0 -385
- package/core/services/agent-service.ts +0 -168
- package/core/services/breakdown-service.ts +0 -124
- package/core/services/context-generator.ts +0 -445
- package/core/services/context-selector.ts +0 -429
- package/core/services/dependency-validator.ts +0 -318
- package/core/services/diff-generator.ts +0 -313
- package/core/services/doctor-service.ts +0 -423
- package/core/services/file-categorizer.ts +0 -448
- package/core/services/file-scorer.ts +0 -270
- package/core/services/git-analyzer.ts +0 -293
- package/core/services/hierarchical-agent-resolver.ts +0 -236
- package/core/services/hooks-service.ts +0 -685
- package/core/services/index.ts +0 -46
- package/core/services/local-state-generator.ts +0 -158
- package/core/services/memory-service.ts +0 -181
- package/core/services/nested-context-resolver.ts +0 -842
- package/core/services/project-index.ts +0 -911
- package/core/services/project-service.ts +0 -155
- package/core/services/session-tracker.ts +0 -287
- package/core/services/skill-installer.ts +0 -447
- package/core/services/skill-lock.ts +0 -132
- package/core/services/skill-service.ts +0 -306
- package/core/services/stack-detector.ts +0 -229
- package/core/services/staleness-checker.ts +0 -327
- package/core/services/sync-service.ts +0 -1515
- package/core/services/sync-verifier.ts +0 -253
- package/core/services/watch-service.ts +0 -312
- package/core/session/compaction.ts +0 -248
- package/core/session/index.ts +0 -35
- package/core/session/log-migration.ts +0 -88
- package/core/session/metrics.ts +0 -323
- package/core/session/session-log-manager.ts +0 -307
- package/core/session/task-session-manager.ts +0 -404
- package/core/session/utils.ts +0 -51
- package/core/storage/analysis-storage.ts +0 -373
- package/core/storage/archive-storage.ts +0 -205
- package/core/storage/database.ts +0 -575
- package/core/storage/ideas-storage.ts +0 -298
- package/core/storage/index-storage.ts +0 -523
- package/core/storage/index.ts +0 -79
- package/core/storage/metrics-storage.ts +0 -321
- package/core/storage/migrate-json.ts +0 -720
- package/core/storage/queue-storage.ts +0 -336
- package/core/storage/safe-reader.ts +0 -105
- package/core/storage/shipped-storage.ts +0 -253
- package/core/storage/state-storage.ts +0 -1035
- package/core/storage/storage-manager.ts +0 -205
- package/core/storage/storage.ts +0 -177
- package/core/storage/velocity-storage.ts +0 -149
- package/core/sync/auth-config.ts +0 -138
- package/core/sync/index.ts +0 -31
- package/core/sync/oauth-handler.ts +0 -143
- package/core/sync/sync-client.ts +0 -251
- package/core/sync/sync-manager.ts +0 -327
- package/core/tsconfig.json +0 -22
- package/core/types/agentic.ts +0 -760
- package/core/types/agents.ts +0 -150
- package/core/types/bus.ts +0 -193
- package/core/types/citations.ts +0 -22
- package/core/types/commands.ts +0 -399
- package/core/types/config.ts +0 -92
- package/core/types/core.ts +0 -96
- package/core/types/diff.ts +0 -41
- package/core/types/domain.ts +0 -71
- package/core/types/errors.ts +0 -111
- package/core/types/events.ts +0 -42
- package/core/types/fs.ts +0 -72
- package/core/types/index.ts +0 -510
- package/core/types/infrastructure.ts +0 -210
- package/core/types/integrations.ts +0 -31
- package/core/types/jira.ts +0 -51
- package/core/types/logger.ts +0 -17
- package/core/types/memory.ts +0 -313
- package/core/types/outcomes.ts +0 -190
- package/core/types/output.ts +0 -47
- package/core/types/plugin.ts +0 -25
- package/core/types/project-sync.ts +0 -129
- package/core/types/provider.ts +0 -163
- package/core/types/server.ts +0 -71
- package/core/types/services.ts +0 -84
- package/core/types/session.ts +0 -135
- package/core/types/stack.ts +0 -19
- package/core/types/storage.ts +0 -318
- package/core/types/sync-verifier.ts +0 -33
- package/core/types/sync.ts +0 -121
- package/core/types/task.ts +0 -72
- package/core/types/template.ts +0 -24
- package/core/types/utils.ts +0 -92
- package/core/types/workflow.ts +0 -23
- package/core/utils/agent-stream.ts +0 -140
- package/core/utils/animations.ts +0 -251
- package/core/utils/branding.ts +0 -88
- package/core/utils/cache.ts +0 -187
- package/core/utils/citations.ts +0 -39
- package/core/utils/collection-filters.ts +0 -209
- package/core/utils/date-helper.ts +0 -176
- package/core/utils/error-messages.ts +0 -38
- package/core/utils/file-helper.ts +0 -277
- package/core/utils/fs-helpers.ts +0 -14
- package/core/utils/help.ts +0 -314
- package/core/utils/jsonl-helper.ts +0 -290
- package/core/utils/keychain.ts +0 -127
- package/core/utils/logger.ts +0 -77
- package/core/utils/markdown-builder.ts +0 -280
- package/core/utils/next-steps.ts +0 -95
- package/core/utils/output.ts +0 -403
- package/core/utils/preserve-sections.ts +0 -218
- package/core/utils/project-commands.ts +0 -126
- package/core/utils/project-credentials.ts +0 -143
- package/core/utils/provider-cache.ts +0 -49
- package/core/utils/retry.ts +0 -318
- package/core/utils/runtime.ts +0 -108
- package/core/utils/session-helper.ts +0 -278
- package/core/utils/subtask-table.ts +0 -227
- package/core/utils/version.ts +0 -128
- package/core/wizard/index.ts +0 -13
- package/core/wizard/onboarding.ts +0 -633
- package/core/workflow/index.ts +0 -7
- package/core/workflow/state-machine.ts +0 -198
- package/core/workflow/workflow-preferences.ts +0 -294
- package/dist/core/infrastructure/command-installer.js +0 -1141
- package/dist/core/infrastructure/editors-config.js +0 -177
- package/dist/core/infrastructure/setup.js +0 -2244
- package/dist/core/utils/version.js +0 -141
- package/templates/agentic/agent-routing.md +0 -45
- package/templates/agentic/agents/uxui.md +0 -63
- package/templates/agentic/checklist-routing.md +0 -98
- package/templates/agentic/orchestrator.md +0 -68
- package/templates/agentic/task-fragmentation.md +0 -89
- package/templates/agents/AGENTS.md +0 -68
- package/templates/analysis/analyze.md +0 -84
- package/templates/analysis/patterns.md +0 -60
- package/templates/antigravity/SKILL.md +0 -39
- package/templates/architect/discovery.md +0 -67
- package/templates/architect/phases.md +0 -59
- package/templates/checklists/architecture.md +0 -28
- package/templates/checklists/code-quality.md +0 -28
- package/templates/checklists/data.md +0 -33
- package/templates/checklists/documentation.md +0 -33
- package/templates/checklists/infrastructure.md +0 -33
- package/templates/checklists/performance.md +0 -33
- package/templates/checklists/security.md +0 -33
- package/templates/checklists/testing.md +0 -33
- package/templates/checklists/ux-ui.md +0 -37
- package/templates/commands/analyze.md +0 -56
- package/templates/commands/auth.md +0 -234
- package/templates/commands/bug.md +0 -163
- package/templates/commands/cleanup.md +0 -19
- package/templates/commands/dash.md +0 -99
- package/templates/commands/design.md +0 -15
- package/templates/commands/done.md +0 -291
- package/templates/commands/enrich.md +0 -174
- package/templates/commands/git.md +0 -295
- package/templates/commands/history.md +0 -389
- package/templates/commands/idea.md +0 -88
- package/templates/commands/impact.md +0 -864
- package/templates/commands/init.md +0 -54
- package/templates/commands/jira.md +0 -278
- package/templates/commands/linear.md +0 -288
- package/templates/commands/merge.md +0 -206
- package/templates/commands/next.md +0 -80
- package/templates/commands/p.md +0 -67
- package/templates/commands/p.toml +0 -37
- package/templates/commands/pause.md +0 -136
- package/templates/commands/plan.md +0 -696
- package/templates/commands/prd.md +0 -356
- package/templates/commands/resume.md +0 -171
- package/templates/commands/review.md +0 -276
- package/templates/commands/serve.md +0 -118
- package/templates/commands/setup.md +0 -91
- package/templates/commands/ship.md +0 -475
- package/templates/commands/skill.md +0 -259
- package/templates/commands/spec.md +0 -218
- package/templates/commands/status.md +0 -207
- package/templates/commands/sync.md +0 -104
- package/templates/commands/task.md +0 -312
- package/templates/commands/test.md +0 -93
- package/templates/commands/update.md +0 -63
- package/templates/commands/verify.md +0 -204
- package/templates/commands/workflow.md +0 -150
- package/templates/config/skill-mappings.json +0 -82
- package/templates/context/dashboard.md +0 -256
- package/templates/context/roadmap.md +0 -221
- package/templates/cursor/commands/bug.md +0 -8
- package/templates/cursor/commands/done.md +0 -4
- package/templates/cursor/commands/pause.md +0 -6
- package/templates/cursor/commands/resume.md +0 -4
- package/templates/cursor/commands/ship.md +0 -8
- package/templates/cursor/commands/sync.md +0 -4
- package/templates/cursor/commands/task.md +0 -8
- package/templates/cursor/p.md +0 -29
- package/templates/cursor/router.mdc +0 -28
- package/templates/design/api.md +0 -95
- package/templates/design/architecture.md +0 -77
- package/templates/design/component.md +0 -89
- package/templates/design/database.md +0 -78
- package/templates/design/flow.md +0 -94
- package/templates/global/ANTIGRAVITY.md +0 -254
- package/templates/global/CLAUDE.md +0 -497
- package/templates/global/CURSOR.mdc +0 -266
- package/templates/global/GEMINI.md +0 -293
- package/templates/global/STORAGE-SPEC.md +0 -391
- package/templates/global/WINDSURF.md +0 -266
- package/templates/global/modules/CLAUDE-commands.md +0 -70
- package/templates/global/modules/CLAUDE-core.md +0 -105
- package/templates/global/modules/CLAUDE-git.md +0 -50
- package/templates/global/modules/CLAUDE-intelligence.md +0 -92
- package/templates/global/modules/CLAUDE-storage.md +0 -50
- package/templates/global/modules/module-config.json +0 -36
- package/templates/mcp-config.json +0 -19
- package/templates/permissions/default.jsonc +0 -60
- package/templates/permissions/permissive.jsonc +0 -49
- package/templates/permissions/strict.jsonc +0 -58
- package/templates/planning-methodology.md +0 -195
- package/templates/skills/code-review.md +0 -47
- package/templates/skills/debug.md +0 -61
- package/templates/skills/refactor.md +0 -47
- package/templates/subagents/agent-base.md +0 -20
- package/templates/subagents/domain/backend.md +0 -109
- package/templates/subagents/domain/database.md +0 -121
- package/templates/subagents/domain/devops.md +0 -152
- package/templates/subagents/domain/frontend.md +0 -103
- package/templates/subagents/domain/testing.md +0 -169
- package/templates/subagents/pm-expert.md +0 -366
- package/templates/subagents/workflow/chief-architect.md +0 -657
- package/templates/subagents/workflow/prjct-planner.md +0 -159
- package/templates/subagents/workflow/prjct-shipper.md +0 -188
- package/templates/subagents/workflow/prjct-workflow.md +0 -98
- package/templates/tools/bash.txt +0 -22
- package/templates/tools/edit.txt +0 -18
- package/templates/tools/glob.txt +0 -19
- package/templates/tools/grep.txt +0 -21
- package/templates/tools/read.txt +0 -14
- package/templates/tools/task.txt +0 -20
- package/templates/tools/webfetch.txt +0 -16
- package/templates/tools/websearch.txt +0 -18
- package/templates/tools/write.txt +0 -17
- package/templates/windsurf/router.md +0 -28
- package/templates/windsurf/workflows/bug.md +0 -8
- package/templates/windsurf/workflows/done.md +0 -4
- package/templates/windsurf/workflows/pause.md +0 -4
- package/templates/windsurf/workflows/resume.md +0 -4
- package/templates/windsurf/workflows/ship.md +0 -8
- package/templates/windsurf/workflows/sync.md +0 -4
- package/templates/windsurf/workflows/task.md +0 -8
|
@@ -1,434 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Context Tools - Smart context filtering for AI agents
|
|
3
|
-
*
|
|
4
|
-
* Provides terminal tools that Claude can use to explore codebases
|
|
5
|
-
* efficiently WITHOUT consuming tokens for filtering.
|
|
6
|
-
*
|
|
7
|
-
* Tools:
|
|
8
|
-
* - files: Find relevant files for a task
|
|
9
|
-
* - signatures: Extract code structure without implementation
|
|
10
|
-
* - imports: Build dependency graphs
|
|
11
|
-
* - recent: Find hot files from git history
|
|
12
|
-
* - summary: Intelligent file summarization
|
|
13
|
-
*
|
|
14
|
-
* @module context-tools
|
|
15
|
-
* @version 1.0.0
|
|
16
|
-
*/
|
|
17
|
-
|
|
18
|
-
import { metricsStorage } from '../storage/metrics-storage'
|
|
19
|
-
import { getErrorMessage } from '../types/fs'
|
|
20
|
-
import { getTimestamp } from '../utils/date-helper'
|
|
21
|
-
import { findRelevantFiles } from './files-tool'
|
|
22
|
-
import { analyzeImports } from './imports-tool'
|
|
23
|
-
import { getRecentFiles } from './recent-tool'
|
|
24
|
-
import { extractDirectorySignatures, extractSignatures } from './signatures-tool'
|
|
25
|
-
import { summarizeDirectory, summarizeFile } from './summary-tool'
|
|
26
|
-
import { combineMetrics } from './token-counter'
|
|
27
|
-
import type { ContextToolOutput, ContextToolUsage } from './types'
|
|
28
|
-
|
|
29
|
-
// =============================================================================
|
|
30
|
-
// CLI Dispatcher
|
|
31
|
-
// =============================================================================
|
|
32
|
-
|
|
33
|
-
/**
|
|
34
|
-
* Run a context tool from CLI arguments
|
|
35
|
-
*
|
|
36
|
-
* Usage:
|
|
37
|
-
* prjct context files "add authentication"
|
|
38
|
-
* prjct context signatures core/auth/service.ts
|
|
39
|
-
* prjct context imports core/auth/service.ts --reverse
|
|
40
|
-
* prjct context recent 50
|
|
41
|
-
* prjct context recent --branch
|
|
42
|
-
* prjct context summary core/auth/service.ts
|
|
43
|
-
*
|
|
44
|
-
* @param args - CLI arguments (tool name + args)
|
|
45
|
-
* @param projectId - Project ID for metrics tracking
|
|
46
|
-
* @param projectPath - Project root path
|
|
47
|
-
* @returns JSON output for Claude
|
|
48
|
-
*/
|
|
49
|
-
export async function runContextTool(
|
|
50
|
-
args: string[],
|
|
51
|
-
projectId: string,
|
|
52
|
-
projectPath: string
|
|
53
|
-
): Promise<ContextToolOutput> {
|
|
54
|
-
const startTime = Date.now()
|
|
55
|
-
const [toolName, ...toolArgs] = args
|
|
56
|
-
|
|
57
|
-
try {
|
|
58
|
-
let result: ContextToolOutput
|
|
59
|
-
|
|
60
|
-
switch (toolName) {
|
|
61
|
-
case 'files':
|
|
62
|
-
result = await runFilesTool(toolArgs, projectPath)
|
|
63
|
-
break
|
|
64
|
-
|
|
65
|
-
case 'signatures':
|
|
66
|
-
result = await runSignaturesTool(toolArgs, projectPath)
|
|
67
|
-
break
|
|
68
|
-
|
|
69
|
-
case 'imports':
|
|
70
|
-
result = await runImportsTool(toolArgs, projectPath)
|
|
71
|
-
break
|
|
72
|
-
|
|
73
|
-
case 'recent':
|
|
74
|
-
result = await runRecentTool(toolArgs, projectPath)
|
|
75
|
-
break
|
|
76
|
-
|
|
77
|
-
case 'summary':
|
|
78
|
-
result = await runSummaryTool(toolArgs, projectPath)
|
|
79
|
-
break
|
|
80
|
-
|
|
81
|
-
case 'help':
|
|
82
|
-
return {
|
|
83
|
-
tool: 'error',
|
|
84
|
-
result: {
|
|
85
|
-
error: getHelpText(),
|
|
86
|
-
code: 'HELP',
|
|
87
|
-
},
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
default:
|
|
91
|
-
return {
|
|
92
|
-
tool: 'error',
|
|
93
|
-
result: {
|
|
94
|
-
error: `Unknown tool: ${toolName}. Use 'prjct context help' for usage.`,
|
|
95
|
-
code: 'UNKNOWN_TOOL',
|
|
96
|
-
},
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
// Record usage metrics
|
|
101
|
-
const duration = Date.now() - startTime
|
|
102
|
-
const tokensSaved = getTokensSaved(result)
|
|
103
|
-
const compressionRate = getCompressionRate(result)
|
|
104
|
-
|
|
105
|
-
await recordToolUsage(projectId, {
|
|
106
|
-
tool: toolName as ContextToolUsage['tool'],
|
|
107
|
-
timestamp: getTimestamp(),
|
|
108
|
-
inputArgs: toolArgs.join(' '),
|
|
109
|
-
tokensSaved,
|
|
110
|
-
compressionRate,
|
|
111
|
-
duration,
|
|
112
|
-
})
|
|
113
|
-
|
|
114
|
-
return result
|
|
115
|
-
} catch (error) {
|
|
116
|
-
return {
|
|
117
|
-
tool: 'error',
|
|
118
|
-
result: {
|
|
119
|
-
error: getErrorMessage(error),
|
|
120
|
-
code: 'EXECUTION_ERROR',
|
|
121
|
-
},
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
// =============================================================================
|
|
127
|
-
// Tool Runners
|
|
128
|
-
// =============================================================================
|
|
129
|
-
|
|
130
|
-
async function runFilesTool(args: string[], projectPath: string): Promise<ContextToolOutput> {
|
|
131
|
-
// Parse options
|
|
132
|
-
const options: { maxFiles?: number; minScore?: number; includeTests?: boolean } = {}
|
|
133
|
-
const taskParts: string[] = []
|
|
134
|
-
|
|
135
|
-
for (let i = 0; i < args.length; i++) {
|
|
136
|
-
if (args[i] === '--max' && args[i + 1]) {
|
|
137
|
-
options.maxFiles = parseInt(args[++i], 10)
|
|
138
|
-
} else if (args[i] === '--min-score' && args[i + 1]) {
|
|
139
|
-
options.minScore = parseFloat(args[++i])
|
|
140
|
-
} else if (args[i] === '--include-tests') {
|
|
141
|
-
options.includeTests = true
|
|
142
|
-
} else {
|
|
143
|
-
taskParts.push(args[i])
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
const taskDescription = taskParts.join(' ')
|
|
148
|
-
if (!taskDescription) {
|
|
149
|
-
return {
|
|
150
|
-
tool: 'error',
|
|
151
|
-
result: {
|
|
152
|
-
error: 'Usage: prjct context files "<task description>"',
|
|
153
|
-
code: 'MISSING_ARG',
|
|
154
|
-
},
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
const result = await findRelevantFiles(taskDescription, projectPath, options)
|
|
159
|
-
return { tool: 'files', result }
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
async function runSignaturesTool(args: string[], projectPath: string): Promise<ContextToolOutput> {
|
|
163
|
-
const filePath = args[0]
|
|
164
|
-
if (!filePath) {
|
|
165
|
-
return {
|
|
166
|
-
tool: 'error',
|
|
167
|
-
result: {
|
|
168
|
-
error: 'Usage: prjct context signatures <file_or_directory>',
|
|
169
|
-
code: 'MISSING_ARG',
|
|
170
|
-
},
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
// Check if it's a directory
|
|
175
|
-
const fs = await import('node:fs/promises')
|
|
176
|
-
const path = await import('node:path')
|
|
177
|
-
const fullPath = path.isAbsolute(filePath) ? filePath : path.join(projectPath, filePath)
|
|
178
|
-
|
|
179
|
-
try {
|
|
180
|
-
const stat = await fs.stat(fullPath)
|
|
181
|
-
if (stat.isDirectory()) {
|
|
182
|
-
// Return multiple results
|
|
183
|
-
const results = await extractDirectorySignatures(filePath, projectPath, {
|
|
184
|
-
recursive: args.includes('--recursive') || args.includes('-r'),
|
|
185
|
-
})
|
|
186
|
-
// Combine into single output with cost savings
|
|
187
|
-
const combinedMetrics = combineMetrics(results.map((r) => r.metrics))
|
|
188
|
-
const combined = {
|
|
189
|
-
file: filePath,
|
|
190
|
-
language: 'multiple',
|
|
191
|
-
signatures: results.flatMap((r) => r.signatures.map((s) => ({ ...s, file: r.file }))),
|
|
192
|
-
fallback: false,
|
|
193
|
-
metrics: combinedMetrics,
|
|
194
|
-
}
|
|
195
|
-
return { tool: 'signatures', result: combined }
|
|
196
|
-
}
|
|
197
|
-
} catch {
|
|
198
|
-
// Not a directory, try as file
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
const result = await extractSignatures(filePath, projectPath)
|
|
202
|
-
return { tool: 'signatures', result }
|
|
203
|
-
}
|
|
204
|
-
|
|
205
|
-
async function runImportsTool(args: string[], projectPath: string): Promise<ContextToolOutput> {
|
|
206
|
-
const filePath = args[0]
|
|
207
|
-
if (!filePath) {
|
|
208
|
-
return {
|
|
209
|
-
tool: 'error',
|
|
210
|
-
result: {
|
|
211
|
-
error: 'Usage: prjct context imports <file> [--reverse] [--depth N]',
|
|
212
|
-
code: 'MISSING_ARG',
|
|
213
|
-
},
|
|
214
|
-
}
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
// Parse options
|
|
218
|
-
const options: { reverse?: boolean; depth?: number } = {}
|
|
219
|
-
for (let i = 1; i < args.length; i++) {
|
|
220
|
-
if (args[i] === '--reverse' || args[i] === '-r') {
|
|
221
|
-
options.reverse = true
|
|
222
|
-
} else if ((args[i] === '--depth' || args[i] === '-d') && args[i + 1]) {
|
|
223
|
-
options.depth = parseInt(args[++i], 10)
|
|
224
|
-
}
|
|
225
|
-
}
|
|
226
|
-
|
|
227
|
-
const result = await analyzeImports(filePath, projectPath, options)
|
|
228
|
-
return { tool: 'imports', result }
|
|
229
|
-
}
|
|
230
|
-
|
|
231
|
-
async function runRecentTool(args: string[], projectPath: string): Promise<ContextToolOutput> {
|
|
232
|
-
const options: { commits?: number; branch?: boolean; maxFiles?: number } = {}
|
|
233
|
-
|
|
234
|
-
for (let i = 0; i < args.length; i++) {
|
|
235
|
-
if (args[i] === '--branch' || args[i] === '-b') {
|
|
236
|
-
options.branch = true
|
|
237
|
-
} else if (args[i] === '--max' && args[i + 1]) {
|
|
238
|
-
options.maxFiles = parseInt(args[++i], 10)
|
|
239
|
-
} else if (/^\d+$/.test(args[i])) {
|
|
240
|
-
options.commits = parseInt(args[i], 10)
|
|
241
|
-
}
|
|
242
|
-
}
|
|
243
|
-
|
|
244
|
-
const result = await getRecentFiles(projectPath, options)
|
|
245
|
-
return { tool: 'recent', result }
|
|
246
|
-
}
|
|
247
|
-
|
|
248
|
-
async function runSummaryTool(args: string[], projectPath: string): Promise<ContextToolOutput> {
|
|
249
|
-
const targetPath = args[0]
|
|
250
|
-
if (!targetPath) {
|
|
251
|
-
return {
|
|
252
|
-
tool: 'error',
|
|
253
|
-
result: {
|
|
254
|
-
error: 'Usage: prjct context summary <file_or_directory> [--recursive]',
|
|
255
|
-
code: 'MISSING_ARG',
|
|
256
|
-
},
|
|
257
|
-
}
|
|
258
|
-
}
|
|
259
|
-
|
|
260
|
-
// Check if it's a directory
|
|
261
|
-
const fs = await import('node:fs/promises')
|
|
262
|
-
const path = await import('node:path')
|
|
263
|
-
const fullPath = path.isAbsolute(targetPath) ? targetPath : path.join(projectPath, targetPath)
|
|
264
|
-
|
|
265
|
-
try {
|
|
266
|
-
const stat = await fs.stat(fullPath)
|
|
267
|
-
if (stat.isDirectory()) {
|
|
268
|
-
const results = await summarizeDirectory(targetPath, projectPath, {
|
|
269
|
-
recursive: args.includes('--recursive') || args.includes('-r'),
|
|
270
|
-
})
|
|
271
|
-
// Combine into aggregate output
|
|
272
|
-
const combined = {
|
|
273
|
-
file: targetPath,
|
|
274
|
-
purpose: `Directory with ${results.length} files`,
|
|
275
|
-
publicAPI: results.flatMap((r) => r.publicAPI.map((api) => ({ ...api, file: r.file }))),
|
|
276
|
-
dependencies: [...new Set(results.flatMap((r) => r.dependencies))],
|
|
277
|
-
metrics: combineMetrics(results.map((r) => r.metrics)),
|
|
278
|
-
}
|
|
279
|
-
return { tool: 'summary', result: combined }
|
|
280
|
-
}
|
|
281
|
-
} catch {
|
|
282
|
-
// Not a directory, try as file
|
|
283
|
-
}
|
|
284
|
-
|
|
285
|
-
const result = await summarizeFile(targetPath, projectPath)
|
|
286
|
-
return { tool: 'summary', result }
|
|
287
|
-
}
|
|
288
|
-
|
|
289
|
-
// =============================================================================
|
|
290
|
-
// Metrics Helpers
|
|
291
|
-
// =============================================================================
|
|
292
|
-
|
|
293
|
-
function getTokensSaved(result: ContextToolOutput): number {
|
|
294
|
-
if (result.tool === 'error') return 0
|
|
295
|
-
|
|
296
|
-
switch (result.tool) {
|
|
297
|
-
case 'signatures':
|
|
298
|
-
case 'summary':
|
|
299
|
-
return result.result.metrics.tokens.saved
|
|
300
|
-
case 'files':
|
|
301
|
-
// Estimate tokens saved by returning fewer files
|
|
302
|
-
return result.result.metrics.filesScanned * 50 - result.result.metrics.filesReturned * 50
|
|
303
|
-
case 'imports':
|
|
304
|
-
// Estimate based on not needing to read full files
|
|
305
|
-
return result.result.metrics.totalImports * 20
|
|
306
|
-
case 'recent':
|
|
307
|
-
// Estimate based on focused file list
|
|
308
|
-
return result.result.metrics.totalFilesChanged * 30
|
|
309
|
-
default:
|
|
310
|
-
return 0
|
|
311
|
-
}
|
|
312
|
-
}
|
|
313
|
-
|
|
314
|
-
function getCompressionRate(result: ContextToolOutput): number {
|
|
315
|
-
if (result.tool === 'error') return 0
|
|
316
|
-
|
|
317
|
-
switch (result.tool) {
|
|
318
|
-
case 'signatures':
|
|
319
|
-
case 'summary':
|
|
320
|
-
return result.result.metrics.compression
|
|
321
|
-
case 'files': {
|
|
322
|
-
const scanned = result.result.metrics.filesScanned
|
|
323
|
-
const returned = result.result.metrics.filesReturned
|
|
324
|
-
return scanned > 0 ? (scanned - returned) / scanned : 0
|
|
325
|
-
}
|
|
326
|
-
default:
|
|
327
|
-
return 0
|
|
328
|
-
}
|
|
329
|
-
}
|
|
330
|
-
|
|
331
|
-
async function recordToolUsage(projectId: string, usage: ContextToolUsage): Promise<void> {
|
|
332
|
-
try {
|
|
333
|
-
// Record to metrics storage
|
|
334
|
-
await metricsStorage.recordSync(projectId, {
|
|
335
|
-
originalSize: usage.tokensSaved + 100, // Estimate original
|
|
336
|
-
filteredSize: 100, // Estimate filtered
|
|
337
|
-
duration: usage.duration,
|
|
338
|
-
isWatch: false,
|
|
339
|
-
agents: [`context-${usage.tool}`],
|
|
340
|
-
})
|
|
341
|
-
} catch {
|
|
342
|
-
// Metrics recording failure is non-fatal
|
|
343
|
-
}
|
|
344
|
-
}
|
|
345
|
-
|
|
346
|
-
// =============================================================================
|
|
347
|
-
// Help Text
|
|
348
|
-
// =============================================================================
|
|
349
|
-
|
|
350
|
-
function getHelpText(): string {
|
|
351
|
-
return `
|
|
352
|
-
Context Tools - Smart context filtering for AI agents
|
|
353
|
-
|
|
354
|
-
USAGE:
|
|
355
|
-
prjct context <tool> [args] [options]
|
|
356
|
-
|
|
357
|
-
TOOLS:
|
|
358
|
-
|
|
359
|
-
files <task>
|
|
360
|
-
Find files relevant to a task description.
|
|
361
|
-
Options:
|
|
362
|
-
--max N Maximum files to return (default: 30)
|
|
363
|
-
--min-score N Minimum relevance score 0-1 (default: 0.1)
|
|
364
|
-
--include-tests Include test files
|
|
365
|
-
|
|
366
|
-
Example:
|
|
367
|
-
prjct context files "add user authentication"
|
|
368
|
-
|
|
369
|
-
signatures <path>
|
|
370
|
-
Extract code structure without implementation (~90% compression).
|
|
371
|
-
Path can be a file or directory.
|
|
372
|
-
Options:
|
|
373
|
-
--recursive, -r Process directories recursively
|
|
374
|
-
|
|
375
|
-
Example:
|
|
376
|
-
prjct context signatures core/auth/service.ts
|
|
377
|
-
prjct context signatures core/auth/ --recursive
|
|
378
|
-
|
|
379
|
-
imports <file>
|
|
380
|
-
Analyze import/dependency relationships.
|
|
381
|
-
Options:
|
|
382
|
-
--reverse, -r Show files that import this file
|
|
383
|
-
--depth N, -d N Build dependency tree to depth N
|
|
384
|
-
|
|
385
|
-
Example:
|
|
386
|
-
prjct context imports core/auth/service.ts --reverse
|
|
387
|
-
prjct context imports core/auth/service.ts --depth 2
|
|
388
|
-
|
|
389
|
-
recent [commits]
|
|
390
|
-
Find recently modified "hot" files.
|
|
391
|
-
Options:
|
|
392
|
-
--branch, -b Only files changed in current branch vs main
|
|
393
|
-
--max N Maximum files to return (default: 50)
|
|
394
|
-
|
|
395
|
-
Example:
|
|
396
|
-
prjct context recent
|
|
397
|
-
prjct context recent 50
|
|
398
|
-
prjct context recent --branch
|
|
399
|
-
|
|
400
|
-
summary <path>
|
|
401
|
-
Generate intelligent file summary (public API + docs).
|
|
402
|
-
Options:
|
|
403
|
-
--recursive, -r Process directories recursively
|
|
404
|
-
|
|
405
|
-
Example:
|
|
406
|
-
prjct context summary core/auth/service.ts
|
|
407
|
-
prjct context summary core/services/ --recursive
|
|
408
|
-
|
|
409
|
-
OUTPUT:
|
|
410
|
-
All tools output JSON for easy parsing by AI agents.
|
|
411
|
-
Each output includes metrics showing token savings.
|
|
412
|
-
`.trim()
|
|
413
|
-
}
|
|
414
|
-
|
|
415
|
-
// =============================================================================
|
|
416
|
-
// Exports
|
|
417
|
-
// =============================================================================
|
|
418
|
-
|
|
419
|
-
export {
|
|
420
|
-
// Individual tools for programmatic use
|
|
421
|
-
findRelevantFiles,
|
|
422
|
-
extractSignatures,
|
|
423
|
-
extractDirectorySignatures,
|
|
424
|
-
analyzeImports,
|
|
425
|
-
getRecentFiles,
|
|
426
|
-
summarizeFile,
|
|
427
|
-
summarizeDirectory,
|
|
428
|
-
}
|
|
429
|
-
|
|
430
|
-
// Note: runContextTool is already exported at its definition (line 48)
|
|
431
|
-
|
|
432
|
-
export * from './token-counter'
|
|
433
|
-
// Re-export types
|
|
434
|
-
export * from './types'
|