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,523 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* IndexStorage - Persistent storage for ProjectIndex (PRJ-303: SQLite-backed)
|
|
3
|
-
*
|
|
4
|
-
* Write path: SQLite index_meta (primary)
|
|
5
|
-
* Read path: SQLite index_meta → null/default
|
|
6
|
-
*
|
|
7
|
-
* Stores:
|
|
8
|
-
* - project-index: Main index data
|
|
9
|
-
* - file-scores: Calculated scores
|
|
10
|
-
* - checksums: For detecting file changes
|
|
11
|
-
* - domains: Discovered project domains
|
|
12
|
-
* - categories-cache: File categorization cache
|
|
13
|
-
*
|
|
14
|
-
* Location: SQLite DB at ~/.prjct-cli/projects/{projectId}/prjct.db
|
|
15
|
-
*/
|
|
16
|
-
|
|
17
|
-
import crypto from 'node:crypto'
|
|
18
|
-
import fs from 'node:fs/promises'
|
|
19
|
-
import path from 'node:path'
|
|
20
|
-
import pathManager from '../infrastructure/path-manager'
|
|
21
|
-
import { isNotFoundError } from '../types/fs'
|
|
22
|
-
import { getTimestamp } from '../utils/date-helper'
|
|
23
|
-
import { prjctDb } from './database'
|
|
24
|
-
|
|
25
|
-
// Note: fs, path, pathManager, isNotFoundError still needed for clearIndex, calculateChecksum
|
|
26
|
-
|
|
27
|
-
// ============================================================================
|
|
28
|
-
// TYPES
|
|
29
|
-
// ============================================================================
|
|
30
|
-
|
|
31
|
-
export interface LanguageStats {
|
|
32
|
-
count: number // Number of files
|
|
33
|
-
totalLines: number // Total lines of code
|
|
34
|
-
totalSize: number // Total bytes
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
export interface ConfigFileEntry {
|
|
38
|
-
path: string
|
|
39
|
-
type: string // "package.json", "Cargo.toml", etc.
|
|
40
|
-
checksum: string
|
|
41
|
-
parsed?: Record<string, unknown>
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
export interface DirectoryEntry {
|
|
45
|
-
path: string
|
|
46
|
-
type: 'source' | 'test' | 'config' | 'build' | 'vendor' | 'docs' | 'unknown'
|
|
47
|
-
fileCount: number
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
export interface ScoredFile {
|
|
51
|
-
path: string
|
|
52
|
-
score: number
|
|
53
|
-
size: number
|
|
54
|
-
mtime: string // ISO timestamp
|
|
55
|
-
categories?: string[] // Domain categories: ['payments', 'api', 'backend']
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
export interface DetectedPattern {
|
|
59
|
-
name: string // "monorepo", "api-first", "component-based"
|
|
60
|
-
confidence: number // 0-1
|
|
61
|
-
evidence: string[] // Files/dirs that evidence this pattern
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
export interface DetectedStack {
|
|
65
|
-
ecosystem: string // "JavaScript", "Python", "Rust", etc.
|
|
66
|
-
frameworks: string[] // Detected frameworks
|
|
67
|
-
hasTests: boolean
|
|
68
|
-
hasDocker: boolean
|
|
69
|
-
hasCi: boolean
|
|
70
|
-
buildTool: string | null
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
export interface ProjectIndex {
|
|
74
|
-
version: string
|
|
75
|
-
projectPath: string
|
|
76
|
-
lastFullScan: string // ISO timestamp
|
|
77
|
-
lastIncrementalUpdate: string // ISO timestamp
|
|
78
|
-
|
|
79
|
-
// Language detection by extension
|
|
80
|
-
languages: Record<string, LanguageStats>
|
|
81
|
-
|
|
82
|
-
// Config files found
|
|
83
|
-
configFiles: ConfigFileEntry[]
|
|
84
|
-
|
|
85
|
-
// Directory structure (top-level relevant)
|
|
86
|
-
directories: DirectoryEntry[]
|
|
87
|
-
|
|
88
|
-
// Files with score > threshold
|
|
89
|
-
relevantFiles: ScoredFile[]
|
|
90
|
-
|
|
91
|
-
// Detected patterns
|
|
92
|
-
patterns: DetectedPattern[]
|
|
93
|
-
|
|
94
|
-
// Stack detection
|
|
95
|
-
detectedStack: DetectedStack
|
|
96
|
-
|
|
97
|
-
// Metrics
|
|
98
|
-
totalFiles: number
|
|
99
|
-
totalSize: number // Total bytes
|
|
100
|
-
totalLines: number // Total LOC
|
|
101
|
-
scanDuration: number // ms
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
export interface FileChecksums {
|
|
105
|
-
version: string
|
|
106
|
-
lastUpdated: string
|
|
107
|
-
checksums: Record<string, string> // path -> checksum
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
// ============================================================================
|
|
111
|
-
// DOMAIN & CATEGORY TYPES (for Smart Context Selection)
|
|
112
|
-
// ============================================================================
|
|
113
|
-
|
|
114
|
-
/**
|
|
115
|
-
* A domain discovered by LLM analysis of the project
|
|
116
|
-
*/
|
|
117
|
-
export interface DomainDefinition {
|
|
118
|
-
name: string // "payments", "shipping", "inventory"
|
|
119
|
-
description: string // "Handles payment processing, Stripe integration"
|
|
120
|
-
keywords: string[] // ["stripe", "checkout", "billing"]
|
|
121
|
-
filePatterns: string[] // ["**/payments/**", "**/billing/**"]
|
|
122
|
-
fileCount: number // Number of files in this domain
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
/**
|
|
126
|
-
* Discovered domains for a project
|
|
127
|
-
*/
|
|
128
|
-
export interface DiscoveredDomains {
|
|
129
|
-
version: string
|
|
130
|
-
projectId: string
|
|
131
|
-
domains: DomainDefinition[]
|
|
132
|
-
discoveredAt: string // ISO timestamp
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
/**
|
|
136
|
-
* Category assignment for a single file
|
|
137
|
-
*/
|
|
138
|
-
export interface FileCategory {
|
|
139
|
-
path: string
|
|
140
|
-
categories: string[] // ['payments', 'users', 'api']
|
|
141
|
-
primaryDomain: string // 'payments'
|
|
142
|
-
confidence: number // 0-1
|
|
143
|
-
categorizedAt: string // ISO timestamp
|
|
144
|
-
method: 'llm' | 'heuristic' // How it was categorized
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
/**
|
|
148
|
-
* Cache of file categorizations
|
|
149
|
-
*/
|
|
150
|
-
export interface CategoriesCache {
|
|
151
|
-
version: string
|
|
152
|
-
lastUpdate: string
|
|
153
|
-
fileCategories: FileCategory[]
|
|
154
|
-
domainIndex: Record<string, string[]> // domain -> file paths
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
// ============================================================================
|
|
158
|
-
// DEFAULTS
|
|
159
|
-
// ============================================================================
|
|
160
|
-
|
|
161
|
-
export const INDEX_VERSION = '1.0.0'
|
|
162
|
-
|
|
163
|
-
export function getDefaultIndex(projectPath: string): ProjectIndex {
|
|
164
|
-
return {
|
|
165
|
-
version: INDEX_VERSION,
|
|
166
|
-
projectPath,
|
|
167
|
-
lastFullScan: '',
|
|
168
|
-
lastIncrementalUpdate: '',
|
|
169
|
-
languages: {},
|
|
170
|
-
configFiles: [],
|
|
171
|
-
directories: [],
|
|
172
|
-
relevantFiles: [],
|
|
173
|
-
patterns: [],
|
|
174
|
-
detectedStack: {
|
|
175
|
-
ecosystem: 'unknown',
|
|
176
|
-
frameworks: [],
|
|
177
|
-
hasTests: false,
|
|
178
|
-
hasDocker: false,
|
|
179
|
-
hasCi: false,
|
|
180
|
-
buildTool: null,
|
|
181
|
-
},
|
|
182
|
-
totalFiles: 0,
|
|
183
|
-
totalSize: 0,
|
|
184
|
-
totalLines: 0,
|
|
185
|
-
scanDuration: 0,
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
export function getDefaultChecksums(): FileChecksums {
|
|
190
|
-
return {
|
|
191
|
-
version: INDEX_VERSION,
|
|
192
|
-
lastUpdated: '',
|
|
193
|
-
checksums: {},
|
|
194
|
-
}
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
// ============================================================================
|
|
198
|
-
// INDEX STORAGE CLASS
|
|
199
|
-
// ============================================================================
|
|
200
|
-
|
|
201
|
-
class IndexStorage {
|
|
202
|
-
/**
|
|
203
|
-
* Get the index directory path for a project
|
|
204
|
-
*/
|
|
205
|
-
getIndexPath(projectId: string): string {
|
|
206
|
-
return path.join(pathManager.getGlobalProjectPath(projectId), 'index')
|
|
207
|
-
}
|
|
208
|
-
|
|
209
|
-
/**
|
|
210
|
-
* Ensure index directory exists
|
|
211
|
-
*/
|
|
212
|
-
async ensureIndexDir(projectId: string): Promise<string> {
|
|
213
|
-
const indexPath = this.getIndexPath(projectId)
|
|
214
|
-
await fs.mkdir(indexPath, { recursive: true })
|
|
215
|
-
return indexPath
|
|
216
|
-
}
|
|
217
|
-
|
|
218
|
-
// ==========================================================================
|
|
219
|
-
// PROJECT INDEX
|
|
220
|
-
// ==========================================================================
|
|
221
|
-
|
|
222
|
-
/**
|
|
223
|
-
* Read the project index.
|
|
224
|
-
* Path: SQLite index_meta → null
|
|
225
|
-
*/
|
|
226
|
-
async readIndex(projectId: string): Promise<ProjectIndex | null> {
|
|
227
|
-
try {
|
|
228
|
-
const data = this.getIndexMeta<ProjectIndex>(projectId, 'project-index')
|
|
229
|
-
if (data !== null) {
|
|
230
|
-
if (data.version !== INDEX_VERSION) return null
|
|
231
|
-
return data
|
|
232
|
-
}
|
|
233
|
-
} catch {
|
|
234
|
-
// SQLite not available
|
|
235
|
-
}
|
|
236
|
-
return null
|
|
237
|
-
}
|
|
238
|
-
|
|
239
|
-
/**
|
|
240
|
-
* Write the project index to SQLite.
|
|
241
|
-
*/
|
|
242
|
-
async writeIndex(projectId: string, index: ProjectIndex): Promise<void> {
|
|
243
|
-
this.setIndexMeta(projectId, 'project-index', index)
|
|
244
|
-
}
|
|
245
|
-
|
|
246
|
-
/**
|
|
247
|
-
* Check if index exists and is valid
|
|
248
|
-
*/
|
|
249
|
-
async hasValidIndex(projectId: string): Promise<boolean> {
|
|
250
|
-
const index = await this.readIndex(projectId)
|
|
251
|
-
return index !== null && index.lastFullScan !== ''
|
|
252
|
-
}
|
|
253
|
-
|
|
254
|
-
// ==========================================================================
|
|
255
|
-
// FILE CHECKSUMS
|
|
256
|
-
// ==========================================================================
|
|
257
|
-
|
|
258
|
-
/**
|
|
259
|
-
* Read file checksums.
|
|
260
|
-
* Path: SQLite index_meta → default
|
|
261
|
-
*/
|
|
262
|
-
async readChecksums(projectId: string): Promise<FileChecksums> {
|
|
263
|
-
try {
|
|
264
|
-
const data = this.getIndexMeta<FileChecksums>(projectId, 'checksums')
|
|
265
|
-
if (data !== null) return data
|
|
266
|
-
} catch {
|
|
267
|
-
// SQLite not available
|
|
268
|
-
}
|
|
269
|
-
return getDefaultChecksums()
|
|
270
|
-
}
|
|
271
|
-
|
|
272
|
-
/**
|
|
273
|
-
* Write file checksums to SQLite.
|
|
274
|
-
*/
|
|
275
|
-
async writeChecksums(projectId: string, checksums: FileChecksums): Promise<void> {
|
|
276
|
-
this.setIndexMeta(projectId, 'checksums', checksums)
|
|
277
|
-
}
|
|
278
|
-
|
|
279
|
-
/**
|
|
280
|
-
* Calculate checksum for a file
|
|
281
|
-
*/
|
|
282
|
-
async calculateChecksum(filePath: string): Promise<string> {
|
|
283
|
-
try {
|
|
284
|
-
const content = await fs.readFile(filePath)
|
|
285
|
-
return crypto.createHash('md5').update(content).digest('hex')
|
|
286
|
-
} catch {
|
|
287
|
-
return ''
|
|
288
|
-
}
|
|
289
|
-
}
|
|
290
|
-
|
|
291
|
-
/**
|
|
292
|
-
* Detect changed files by comparing checksums
|
|
293
|
-
*/
|
|
294
|
-
async detectChangedFiles(
|
|
295
|
-
projectId: string,
|
|
296
|
-
currentFiles: Map<string, string> // path -> checksum
|
|
297
|
-
): Promise<{
|
|
298
|
-
added: string[]
|
|
299
|
-
modified: string[]
|
|
300
|
-
deleted: string[]
|
|
301
|
-
}> {
|
|
302
|
-
const stored = await this.readChecksums(projectId)
|
|
303
|
-
const storedChecksums = stored.checksums
|
|
304
|
-
|
|
305
|
-
const added: string[] = []
|
|
306
|
-
const modified: string[] = []
|
|
307
|
-
const deleted: string[] = []
|
|
308
|
-
|
|
309
|
-
// Check current files against stored
|
|
310
|
-
for (const [filePath, checksum] of currentFiles) {
|
|
311
|
-
if (!(filePath in storedChecksums)) {
|
|
312
|
-
added.push(filePath)
|
|
313
|
-
} else if (storedChecksums[filePath] !== checksum) {
|
|
314
|
-
modified.push(filePath)
|
|
315
|
-
}
|
|
316
|
-
}
|
|
317
|
-
|
|
318
|
-
// Check for deleted files
|
|
319
|
-
for (const filePath of Object.keys(storedChecksums)) {
|
|
320
|
-
if (!currentFiles.has(filePath)) {
|
|
321
|
-
deleted.push(filePath)
|
|
322
|
-
}
|
|
323
|
-
}
|
|
324
|
-
|
|
325
|
-
return { added, modified, deleted }
|
|
326
|
-
}
|
|
327
|
-
|
|
328
|
-
// ==========================================================================
|
|
329
|
-
// FILE SCORES
|
|
330
|
-
// ==========================================================================
|
|
331
|
-
|
|
332
|
-
/**
|
|
333
|
-
* Read file scores.
|
|
334
|
-
* Path: SQLite index_meta → []
|
|
335
|
-
*/
|
|
336
|
-
async readScores(projectId: string): Promise<ScoredFile[]> {
|
|
337
|
-
try {
|
|
338
|
-
const data = this.getIndexMeta<{ scores: ScoredFile[] }>(projectId, 'file-scores')
|
|
339
|
-
if (data !== null) return data.scores || []
|
|
340
|
-
} catch {
|
|
341
|
-
// SQLite not available
|
|
342
|
-
}
|
|
343
|
-
return []
|
|
344
|
-
}
|
|
345
|
-
|
|
346
|
-
/**
|
|
347
|
-
* Write file scores to SQLite.
|
|
348
|
-
*/
|
|
349
|
-
async writeScores(projectId: string, scores: ScoredFile[]): Promise<void> {
|
|
350
|
-
const data = {
|
|
351
|
-
version: INDEX_VERSION,
|
|
352
|
-
lastUpdated: getTimestamp(),
|
|
353
|
-
scores,
|
|
354
|
-
}
|
|
355
|
-
|
|
356
|
-
this.setIndexMeta(projectId, 'file-scores', data)
|
|
357
|
-
}
|
|
358
|
-
|
|
359
|
-
// ==========================================================================
|
|
360
|
-
// UTILITY METHODS
|
|
361
|
-
// ==========================================================================
|
|
362
|
-
|
|
363
|
-
/**
|
|
364
|
-
* Clear all index data for a project (SQLite + JSON files)
|
|
365
|
-
*/
|
|
366
|
-
async clearIndex(projectId: string): Promise<void> {
|
|
367
|
-
// Clear from SQLite index_meta
|
|
368
|
-
try {
|
|
369
|
-
const db = prjctDb.getDb(projectId)
|
|
370
|
-
db.prepare('DELETE FROM index_meta').run()
|
|
371
|
-
} catch {
|
|
372
|
-
// SQLite not available — continue with JSON cleanup
|
|
373
|
-
}
|
|
374
|
-
|
|
375
|
-
// Clear JSON files
|
|
376
|
-
const indexPath = this.getIndexPath(projectId)
|
|
377
|
-
|
|
378
|
-
try {
|
|
379
|
-
const files = await fs.readdir(indexPath)
|
|
380
|
-
await Promise.all(files.map((file) => fs.unlink(path.join(indexPath, file))))
|
|
381
|
-
} catch (error) {
|
|
382
|
-
if (!isNotFoundError(error)) {
|
|
383
|
-
throw error
|
|
384
|
-
}
|
|
385
|
-
}
|
|
386
|
-
}
|
|
387
|
-
|
|
388
|
-
/**
|
|
389
|
-
* Get index age in hours
|
|
390
|
-
*/
|
|
391
|
-
async getIndexAge(projectId: string): Promise<number> {
|
|
392
|
-
const index = await this.readIndex(projectId)
|
|
393
|
-
if (!index || !index.lastFullScan) {
|
|
394
|
-
return Infinity
|
|
395
|
-
}
|
|
396
|
-
|
|
397
|
-
const lastScan = new Date(index.lastFullScan)
|
|
398
|
-
const now = new Date()
|
|
399
|
-
return (now.getTime() - lastScan.getTime()) / (1000 * 60 * 60)
|
|
400
|
-
}
|
|
401
|
-
|
|
402
|
-
// ==========================================================================
|
|
403
|
-
// DISCOVERED DOMAINS
|
|
404
|
-
// ==========================================================================
|
|
405
|
-
|
|
406
|
-
/**
|
|
407
|
-
* Read discovered domains for a project.
|
|
408
|
-
* Path: SQLite index_meta → null
|
|
409
|
-
*/
|
|
410
|
-
async readDomains(projectId: string): Promise<DiscoveredDomains | null> {
|
|
411
|
-
try {
|
|
412
|
-
const data = this.getIndexMeta<DiscoveredDomains>(projectId, 'domains')
|
|
413
|
-
if (data !== null) {
|
|
414
|
-
if (data.version !== INDEX_VERSION) return null
|
|
415
|
-
return data
|
|
416
|
-
}
|
|
417
|
-
} catch {
|
|
418
|
-
// SQLite not available
|
|
419
|
-
}
|
|
420
|
-
return null
|
|
421
|
-
}
|
|
422
|
-
|
|
423
|
-
/**
|
|
424
|
-
* Write discovered domains to SQLite.
|
|
425
|
-
*/
|
|
426
|
-
async writeDomains(projectId: string, domains: DiscoveredDomains): Promise<void> {
|
|
427
|
-
this.setIndexMeta(projectId, 'domains', domains)
|
|
428
|
-
}
|
|
429
|
-
|
|
430
|
-
// ==========================================================================
|
|
431
|
-
// CATEGORIES CACHE
|
|
432
|
-
// ==========================================================================
|
|
433
|
-
|
|
434
|
-
/**
|
|
435
|
-
* Read categories cache.
|
|
436
|
-
* Path: SQLite index_meta → null
|
|
437
|
-
*/
|
|
438
|
-
async readCategories(projectId: string): Promise<CategoriesCache | null> {
|
|
439
|
-
try {
|
|
440
|
-
const data = this.getIndexMeta<CategoriesCache>(projectId, 'categories-cache')
|
|
441
|
-
if (data !== null) {
|
|
442
|
-
if (data.version !== INDEX_VERSION) return null
|
|
443
|
-
return data
|
|
444
|
-
}
|
|
445
|
-
} catch {
|
|
446
|
-
// SQLite not available
|
|
447
|
-
}
|
|
448
|
-
return null
|
|
449
|
-
}
|
|
450
|
-
|
|
451
|
-
/**
|
|
452
|
-
* Write categories cache to SQLite.
|
|
453
|
-
*/
|
|
454
|
-
async writeCategories(projectId: string, cache: CategoriesCache): Promise<void> {
|
|
455
|
-
this.setIndexMeta(projectId, 'categories-cache', cache)
|
|
456
|
-
}
|
|
457
|
-
|
|
458
|
-
/**
|
|
459
|
-
* Get file categories for specific paths
|
|
460
|
-
*/
|
|
461
|
-
async getFileCategories(projectId: string, paths: string[]): Promise<Map<string, string[]>> {
|
|
462
|
-
const cache = await this.readCategories(projectId)
|
|
463
|
-
const result = new Map<string, string[]>()
|
|
464
|
-
|
|
465
|
-
if (!cache) {
|
|
466
|
-
return result
|
|
467
|
-
}
|
|
468
|
-
|
|
469
|
-
const pathSet = new Set(paths)
|
|
470
|
-
for (const fc of cache.fileCategories) {
|
|
471
|
-
if (pathSet.has(fc.path)) {
|
|
472
|
-
result.set(fc.path, fc.categories)
|
|
473
|
-
}
|
|
474
|
-
}
|
|
475
|
-
|
|
476
|
-
return result
|
|
477
|
-
}
|
|
478
|
-
|
|
479
|
-
/**
|
|
480
|
-
* Get files by domain
|
|
481
|
-
*/
|
|
482
|
-
async getFilesByDomain(projectId: string, domain: string): Promise<string[]> {
|
|
483
|
-
const cache = await this.readCategories(projectId)
|
|
484
|
-
if (!cache) {
|
|
485
|
-
return []
|
|
486
|
-
}
|
|
487
|
-
|
|
488
|
-
return cache.domainIndex[domain] || []
|
|
489
|
-
}
|
|
490
|
-
|
|
491
|
-
// ==========================================================================
|
|
492
|
-
// SQLite index_meta helpers
|
|
493
|
-
// ==========================================================================
|
|
494
|
-
|
|
495
|
-
/**
|
|
496
|
-
* Read a document from the index_meta table.
|
|
497
|
-
*/
|
|
498
|
-
private getIndexMeta<T>(projectId: string, key: string): T | null {
|
|
499
|
-
const db = prjctDb.getDb(projectId)
|
|
500
|
-
const row = db.prepare('SELECT data FROM index_meta WHERE key = ?').get(key) as {
|
|
501
|
-
data: string
|
|
502
|
-
} | null
|
|
503
|
-
if (!row) return null
|
|
504
|
-
return JSON.parse(row.data) as T
|
|
505
|
-
}
|
|
506
|
-
|
|
507
|
-
/**
|
|
508
|
-
* Write a document to the index_meta table.
|
|
509
|
-
*/
|
|
510
|
-
private setIndexMeta<T>(projectId: string, key: string, data: T): void {
|
|
511
|
-
const db = prjctDb.getDb(projectId)
|
|
512
|
-
const json = JSON.stringify(data)
|
|
513
|
-
const now = new Date().toISOString()
|
|
514
|
-
db.prepare('INSERT OR REPLACE INTO index_meta (key, data, updated_at) VALUES (?, ?, ?)').run(
|
|
515
|
-
key,
|
|
516
|
-
json,
|
|
517
|
-
now
|
|
518
|
-
)
|
|
519
|
-
}
|
|
520
|
-
}
|
|
521
|
-
|
|
522
|
-
export const indexStorage = new IndexStorage()
|
|
523
|
-
export default indexStorage
|
package/core/storage/index.ts
DELETED
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Storage Layer (PRJ-303: SQLite primary)
|
|
3
|
-
*
|
|
4
|
-
* All data stored in SQLite (prjct.db). Context MD files regenerated on write.
|
|
5
|
-
*
|
|
6
|
-
* 1. AGGREGATE STORAGE (StorageManager)
|
|
7
|
-
* Writes to SQLite kv_store + regenerates MD for Claude
|
|
8
|
-
* - stateStorage: kv_store['state'] → context/now.md
|
|
9
|
-
* - queueStorage: kv_store['queue'] → context/next.md
|
|
10
|
-
* - ideasStorage: kv_store['ideas'] → context/ideas.md
|
|
11
|
-
* - shippedStorage: kv_store['shipped'] → context/shipped.md
|
|
12
|
-
*
|
|
13
|
-
* 2. INDEX STORAGE
|
|
14
|
-
* Project scanning data in SQLite index_meta table
|
|
15
|
-
* - indexStorage: index_meta['project-index'], index_meta['checksums'], etc.
|
|
16
|
-
*
|
|
17
|
-
* 3. SQLITE DATABASE
|
|
18
|
-
* Single SQLite DB per project — source of truth
|
|
19
|
-
* - prjctDb: ~/.prjct-cli/projects/{projectId}/prjct.db
|
|
20
|
-
*
|
|
21
|
-
* Structure:
|
|
22
|
-
* ~/.prjct-cli/projects/{projectId}/
|
|
23
|
-
* ├── prjct.db # SQLite database (source of truth)
|
|
24
|
-
* ├── context/ # Generated MD (for Claude)
|
|
25
|
-
* │ ├── CLAUDE.md
|
|
26
|
-
* │ ├── now.md
|
|
27
|
-
* │ ├── next.md
|
|
28
|
-
* │ ├── ideas.md
|
|
29
|
-
* │ └── shipped.md
|
|
30
|
-
* ├── storage/backup/ # Pre-migration backup (one-time)
|
|
31
|
-
* └── sync/ # Backend sync
|
|
32
|
-
* ├── pending.json
|
|
33
|
-
* └── last-sync.json
|
|
34
|
-
*/
|
|
35
|
-
|
|
36
|
-
export type {
|
|
37
|
-
AgentUsage,
|
|
38
|
-
DailyStats,
|
|
39
|
-
Idea,
|
|
40
|
-
IdeaPriority,
|
|
41
|
-
IdeaStatus,
|
|
42
|
-
IdeasJson,
|
|
43
|
-
MetricsJson,
|
|
44
|
-
ShippedFeature,
|
|
45
|
-
ShippedJson,
|
|
46
|
-
Storage,
|
|
47
|
-
} from '../types'
|
|
48
|
-
export type { AnalysisStoreData, SealResult, StalenessCheck } from './analysis-storage'
|
|
49
|
-
export { analysisStorage } from './analysis-storage'
|
|
50
|
-
export type { ArchiveEntityType, ArchiveItem, ArchiveRecord, ArchiveStats } from './archive-storage'
|
|
51
|
-
export { ARCHIVE_POLICIES, archiveStorage } from './archive-storage'
|
|
52
|
-
export type { Migration, MigrationRecord } from './database'
|
|
53
|
-
export { PrjctDatabase, prjctDb } from './database'
|
|
54
|
-
export { ideasStorage } from './ideas-storage'
|
|
55
|
-
export type {
|
|
56
|
-
CategoriesCache,
|
|
57
|
-
ConfigFileEntry,
|
|
58
|
-
DetectedPattern,
|
|
59
|
-
DetectedStack,
|
|
60
|
-
DirectoryEntry,
|
|
61
|
-
DiscoveredDomains,
|
|
62
|
-
DomainDefinition,
|
|
63
|
-
FileCategory,
|
|
64
|
-
FileChecksums,
|
|
65
|
-
LanguageStats,
|
|
66
|
-
ProjectIndex,
|
|
67
|
-
ScoredFile,
|
|
68
|
-
} from './index-storage'
|
|
69
|
-
export { getDefaultChecksums, getDefaultIndex, INDEX_VERSION, indexStorage } from './index-storage'
|
|
70
|
-
export { metricsStorage } from './metrics-storage'
|
|
71
|
-
export type { MigrationResult } from './migrate-json'
|
|
72
|
-
export { migrateJsonToSqlite } from './migrate-json'
|
|
73
|
-
export { queueStorage } from './queue-storage'
|
|
74
|
-
export { shippedStorage } from './shipped-storage'
|
|
75
|
-
export { stateStorage } from './state-storage'
|
|
76
|
-
export { getStorage } from './storage'
|
|
77
|
-
export { StorageManager } from './storage-manager'
|
|
78
|
-
export type { VelocityStoreData } from './velocity-storage'
|
|
79
|
-
export { velocityStorage } from './velocity-storage'
|