@ginkoai/cli 1.0.0 → 1.4.1
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/README.md +19 -0
- package/dist/analysis/project-analyzer.d.ts.map +1 -1
- package/dist/analysis/project-analyzer.js +68 -4
- package/dist/analysis/project-analyzer.js.map +1 -1
- package/dist/commands/architecture/architecture-pipeline-enhanced.d.ts.map +1 -1
- package/dist/commands/architecture/architecture-pipeline-enhanced.js +10 -6
- package/dist/commands/architecture/architecture-pipeline-enhanced.js.map +1 -1
- package/dist/commands/backlog/base.d.ts.map +1 -1
- package/dist/commands/backlog/base.js +3 -0
- package/dist/commands/backlog/base.js.map +1 -1
- package/dist/commands/backlog/create.js +20 -20
- package/dist/commands/backlog/create.js.map +1 -1
- package/dist/commands/backlog/index.d.ts.map +1 -1
- package/dist/commands/backlog/index.js +6 -1
- package/dist/commands/backlog/index.js.map +1 -1
- package/dist/commands/changelog/changelog-reflection.d.ts.map +1 -1
- package/dist/commands/changelog/changelog-reflection.js +7 -3
- package/dist/commands/changelog/changelog-reflection.js.map +1 -1
- package/dist/commands/charter.d.ts +28 -0
- package/dist/commands/charter.d.ts.map +1 -0
- package/dist/commands/charter.js +434 -0
- package/dist/commands/charter.js.map +1 -0
- package/dist/commands/documentation/documentation-pipeline.d.ts.map +1 -1
- package/dist/commands/documentation/documentation-pipeline.js +15 -7
- package/dist/commands/documentation/documentation-pipeline.js.map +1 -1
- package/dist/commands/git/git-pipeline.d.ts.map +1 -1
- package/dist/commands/git/git-pipeline.js +3 -2
- package/dist/commands/git/git-pipeline.js.map +1 -1
- package/dist/commands/graph/api-client.d.ts +212 -0
- package/dist/commands/graph/api-client.d.ts.map +1 -0
- package/dist/commands/graph/api-client.js +143 -0
- package/dist/commands/graph/api-client.js.map +1 -0
- package/dist/commands/graph/config.d.ts +82 -0
- package/dist/commands/graph/config.d.ts.map +1 -0
- package/dist/commands/graph/config.js +113 -0
- package/dist/commands/graph/config.js.map +1 -0
- package/dist/commands/graph/explore.d.ts +19 -0
- package/dist/commands/graph/explore.d.ts.map +1 -0
- package/dist/commands/graph/explore.js +117 -0
- package/dist/commands/graph/explore.js.map +1 -0
- package/dist/commands/graph/index.d.ts +17 -0
- package/dist/commands/graph/index.d.ts.map +1 -0
- package/dist/commands/graph/index.js +104 -0
- package/dist/commands/graph/index.js.map +1 -0
- package/dist/commands/graph/init.d.ts +21 -0
- package/dist/commands/graph/init.d.ts.map +1 -0
- package/dist/commands/graph/init.js +173 -0
- package/dist/commands/graph/init.js.map +1 -0
- package/dist/commands/graph/load.d.ts +21 -0
- package/dist/commands/graph/load.d.ts.map +1 -0
- package/dist/commands/graph/load.js +224 -0
- package/dist/commands/graph/load.js.map +1 -0
- package/dist/commands/graph/query.d.ts +23 -0
- package/dist/commands/graph/query.d.ts.map +1 -0
- package/dist/commands/graph/query.js +145 -0
- package/dist/commands/graph/query.js.map +1 -0
- package/dist/commands/graph/status.d.ts +15 -0
- package/dist/commands/graph/status.d.ts.map +1 -0
- package/dist/commands/graph/status.js +88 -0
- package/dist/commands/graph/status.js.map +1 -0
- package/dist/commands/handoff.d.ts +14 -5
- package/dist/commands/handoff.d.ts.map +1 -1
- package/dist/commands/handoff.js +84 -142
- package/dist/commands/handoff.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +88 -41
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/knowledge/create.d.ts +24 -0
- package/dist/commands/knowledge/create.d.ts.map +1 -0
- package/dist/commands/knowledge/create.js +180 -0
- package/dist/commands/knowledge/create.js.map +1 -0
- package/dist/commands/knowledge/graph.d.ts +21 -0
- package/dist/commands/knowledge/graph.d.ts.map +1 -0
- package/dist/commands/knowledge/graph.js +199 -0
- package/dist/commands/knowledge/graph.js.map +1 -0
- package/dist/commands/knowledge/index.d.ts +25 -0
- package/dist/commands/knowledge/index.d.ts.map +1 -0
- package/dist/commands/knowledge/index.js +121 -0
- package/dist/commands/knowledge/index.js.map +1 -0
- package/dist/commands/knowledge/search.d.ts +23 -0
- package/dist/commands/knowledge/search.d.ts.map +1 -0
- package/dist/commands/knowledge/search.js +157 -0
- package/dist/commands/knowledge/search.js.map +1 -0
- package/dist/commands/knowledge/sync.d.ts +28 -0
- package/dist/commands/knowledge/sync.d.ts.map +1 -0
- package/dist/commands/knowledge/sync.js +251 -0
- package/dist/commands/knowledge/sync.js.map +1 -0
- package/dist/commands/log.d.ts +32 -0
- package/dist/commands/log.d.ts.map +1 -0
- package/dist/commands/log.js +632 -0
- package/dist/commands/log.js.map +1 -0
- package/dist/commands/login.d.ts +27 -0
- package/dist/commands/login.d.ts.map +1 -0
- package/dist/commands/login.js +177 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/logout.d.ts +15 -0
- package/dist/commands/logout.d.ts.map +1 -0
- package/dist/commands/logout.js +31 -0
- package/dist/commands/logout.js.map +1 -0
- package/dist/commands/project/create.d.ts +22 -0
- package/dist/commands/project/create.d.ts.map +1 -0
- package/dist/commands/project/create.js +69 -0
- package/dist/commands/project/create.js.map +1 -0
- package/dist/commands/project/delete.d.ts +19 -0
- package/dist/commands/project/delete.d.ts.map +1 -0
- package/dist/commands/project/delete.js +73 -0
- package/dist/commands/project/delete.js.map +1 -0
- package/dist/commands/project/index.d.ts +22 -0
- package/dist/commands/project/index.d.ts.map +1 -0
- package/dist/commands/project/index.js +134 -0
- package/dist/commands/project/index.js.map +1 -0
- package/dist/commands/project/info.d.ts +15 -0
- package/dist/commands/project/info.d.ts.map +1 -0
- package/dist/commands/project/info.js +92 -0
- package/dist/commands/project/info.js.map +1 -0
- package/dist/commands/project/list.d.ts +20 -0
- package/dist/commands/project/list.d.ts.map +1 -0
- package/dist/commands/project/list.js +82 -0
- package/dist/commands/project/list.js.map +1 -0
- package/dist/commands/project/members.d.ts +27 -0
- package/dist/commands/project/members.d.ts.map +1 -0
- package/dist/commands/project/members.js +140 -0
- package/dist/commands/project/members.js.map +1 -0
- package/dist/commands/project/update.d.ts +24 -0
- package/dist/commands/project/update.d.ts.map +1 -0
- package/dist/commands/project/update.js +83 -0
- package/dist/commands/project/update.js.map +1 -0
- package/dist/commands/reflect.js +0 -3
- package/dist/commands/reflect.js.map +1 -1
- package/dist/commands/ship.d.ts +3 -1
- package/dist/commands/ship.d.ts.map +1 -1
- package/dist/commands/ship.js +100 -9
- package/dist/commands/ship.js.map +1 -1
- package/dist/commands/start/index.d.ts.map +1 -1
- package/dist/commands/start/index.js +5 -3
- package/dist/commands/start/index.js.map +1 -1
- package/dist/commands/start/start-reflection.d.ts +2 -1
- package/dist/commands/start/start-reflection.d.ts.map +1 -1
- package/dist/commands/start/start-reflection.js +265 -43
- package/dist/commands/start/start-reflection.js.map +1 -1
- package/dist/commands/status.d.ts +1 -1
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +41 -1
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/team/create.d.ts +15 -0
- package/dist/commands/team/create.d.ts.map +1 -0
- package/dist/commands/team/create.js +48 -0
- package/dist/commands/team/create.js.map +1 -0
- package/dist/commands/team/index.d.ts +22 -0
- package/dist/commands/team/index.d.ts.map +1 -0
- package/dist/commands/team/index.js +109 -0
- package/dist/commands/team/index.js.map +1 -0
- package/dist/commands/team/list.d.ts +15 -0
- package/dist/commands/team/list.d.ts.map +1 -0
- package/dist/commands/team/list.js +67 -0
- package/dist/commands/team/list.js.map +1 -0
- package/dist/commands/team/members.d.ts +27 -0
- package/dist/commands/team/members.d.ts.map +1 -0
- package/dist/commands/team/members.js +135 -0
- package/dist/commands/team/members.js.map +1 -0
- package/dist/commands/team/projects.d.ts +19 -0
- package/dist/commands/team/projects.d.ts.map +1 -0
- package/dist/commands/team/projects.js +107 -0
- package/dist/commands/team/projects.js.map +1 -0
- package/dist/commands/team.d.ts +22 -0
- package/dist/commands/team.d.ts.map +1 -0
- package/dist/commands/team.js +238 -0
- package/dist/commands/team.js.map +1 -0
- package/dist/commands/testing/testing-pipeline-enhanced.d.ts.map +1 -1
- package/dist/commands/testing/testing-pipeline-enhanced.js +5 -3
- package/dist/commands/testing/testing-pipeline-enhanced.js.map +1 -1
- package/dist/commands/testing/testing-pipeline.d.ts.map +1 -1
- package/dist/commands/testing/testing-pipeline.js +5 -3
- package/dist/commands/testing/testing-pipeline.js.map +1 -1
- package/dist/commands/whoami.d.ts +15 -0
- package/dist/commands/whoami.d.ts.map +1 -0
- package/dist/commands/whoami.js +38 -0
- package/dist/commands/whoami.js.map +1 -0
- package/dist/core/reflection-pattern.d.ts +1 -1
- package/dist/core/reflection-pattern.d.ts.map +1 -1
- package/dist/core/reflection-pattern.js +2 -12
- package/dist/core/reflection-pattern.js.map +1 -1
- package/dist/core/session-log-manager.d.ts +44 -4
- package/dist/core/session-log-manager.d.ts.map +1 -1
- package/dist/core/session-log-manager.js +132 -31
- package/dist/core/session-log-manager.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +116 -17
- package/dist/index.js.map +1 -1
- package/dist/lib/api/projects-client.d.ts +119 -0
- package/dist/lib/api/projects-client.d.ts.map +1 -0
- package/dist/lib/api/projects-client.js +125 -0
- package/dist/lib/api/projects-client.js.map +1 -0
- package/dist/lib/api/teams-client.d.ts +73 -0
- package/dist/lib/api/teams-client.d.ts.map +1 -0
- package/dist/lib/api/teams-client.js +68 -0
- package/dist/lib/api/teams-client.js.map +1 -0
- package/dist/lib/charter/charter-editor.d.ts +60 -0
- package/dist/lib/charter/charter-editor.d.ts.map +1 -0
- package/dist/lib/charter/charter-editor.js +559 -0
- package/dist/lib/charter/charter-editor.js.map +1 -0
- package/dist/lib/charter/charter-storage.d.ts +92 -0
- package/dist/lib/charter/charter-storage.d.ts.map +1 -0
- package/dist/lib/charter/charter-storage.js +501 -0
- package/dist/lib/charter/charter-storage.js.map +1 -0
- package/dist/lib/charter/charter-synthesizer.d.ts +94 -0
- package/dist/lib/charter/charter-synthesizer.d.ts.map +1 -0
- package/dist/lib/charter/charter-synthesizer.js +521 -0
- package/dist/lib/charter/charter-synthesizer.js.map +1 -0
- package/dist/lib/charter/charter-versioning.d.ts +57 -0
- package/dist/lib/charter/charter-versioning.d.ts.map +1 -0
- package/dist/lib/charter/charter-versioning.js +283 -0
- package/dist/lib/charter/charter-versioning.js.map +1 -0
- package/dist/lib/charter/confidence-scorer.d.ts +263 -0
- package/dist/lib/charter/confidence-scorer.d.ts.map +1 -0
- package/dist/lib/charter/confidence-scorer.js +737 -0
- package/dist/lib/charter/confidence-scorer.js.map +1 -0
- package/dist/lib/charter/conversation-context.d.ts +99 -0
- package/dist/lib/charter/conversation-context.d.ts.map +1 -0
- package/dist/lib/charter/conversation-context.js +297 -0
- package/dist/lib/charter/conversation-context.js.map +1 -0
- package/dist/lib/charter/conversation-facilitator.d.ts +117 -0
- package/dist/lib/charter/conversation-facilitator.d.ts.map +1 -0
- package/dist/lib/charter/conversation-facilitator.js +360 -0
- package/dist/lib/charter/conversation-facilitator.js.map +1 -0
- package/dist/lib/charter/question-templates.d.ts +82 -0
- package/dist/lib/charter/question-templates.d.ts.map +1 -0
- package/dist/lib/charter/question-templates.js +355 -0
- package/dist/lib/charter/question-templates.js.map +1 -0
- package/dist/lib/charter/signal-detection.d.ts +49 -0
- package/dist/lib/charter/signal-detection.d.ts.map +1 -0
- package/dist/lib/charter/signal-detection.js +338 -0
- package/dist/lib/charter/signal-detection.js.map +1 -0
- package/dist/lib/context-loader-events.d.ts +111 -0
- package/dist/lib/context-loader-events.d.ts.map +1 -0
- package/dist/lib/context-loader-events.js +475 -0
- package/dist/lib/context-loader-events.js.map +1 -0
- package/dist/lib/event-logger.d.ts +64 -0
- package/dist/lib/event-logger.d.ts.map +1 -0
- package/dist/lib/event-logger.js +197 -0
- package/dist/lib/event-logger.js.map +1 -0
- package/dist/lib/event-queue.d.ts +104 -0
- package/dist/lib/event-queue.d.ts.map +1 -0
- package/dist/lib/event-queue.js +274 -0
- package/dist/lib/event-queue.js.map +1 -0
- package/dist/lib/session-cursor.d.ts +80 -0
- package/dist/lib/session-cursor.d.ts.map +1 -0
- package/dist/lib/session-cursor.js +250 -0
- package/dist/lib/session-cursor.js.map +1 -0
- package/dist/lib/sync/conflict-detector.d.ts +41 -0
- package/dist/lib/sync/conflict-detector.d.ts.map +1 -0
- package/dist/lib/sync/conflict-detector.js +124 -0
- package/dist/lib/sync/conflict-detector.js.map +1 -0
- package/dist/lib/sync/logger.d.ts +89 -0
- package/dist/lib/sync/logger.d.ts.map +1 -0
- package/dist/lib/sync/logger.js +202 -0
- package/dist/lib/sync/logger.js.map +1 -0
- package/dist/lib/sync/parser.d.ts +32 -0
- package/dist/lib/sync/parser.d.ts.map +1 -0
- package/dist/lib/sync/parser.js +180 -0
- package/dist/lib/sync/parser.js.map +1 -0
- package/dist/lib/sync/scanner.d.ts +34 -0
- package/dist/lib/sync/scanner.d.ts.map +1 -0
- package/dist/lib/sync/scanner.js +97 -0
- package/dist/lib/sync/scanner.js.map +1 -0
- package/dist/lib/sync/uploader.d.ts +33 -0
- package/dist/lib/sync/uploader.d.ts.map +1 -0
- package/dist/lib/sync/uploader.js +188 -0
- package/dist/lib/sync/uploader.js.map +1 -0
- package/dist/lib/write-dispatcher/adapters/graph-adapter.d.ts +77 -0
- package/dist/lib/write-dispatcher/adapters/graph-adapter.d.ts.map +1 -0
- package/dist/lib/write-dispatcher/adapters/graph-adapter.js +178 -0
- package/dist/lib/write-dispatcher/adapters/graph-adapter.js.map +1 -0
- package/dist/lib/write-dispatcher/adapters/local-adapter.d.ts +133 -0
- package/dist/lib/write-dispatcher/adapters/local-adapter.d.ts.map +1 -0
- package/dist/lib/write-dispatcher/adapters/local-adapter.js +324 -0
- package/dist/lib/write-dispatcher/adapters/local-adapter.js.map +1 -0
- package/dist/lib/write-dispatcher/write-dispatcher.d.ts +151 -0
- package/dist/lib/write-dispatcher/write-dispatcher.d.ts.map +1 -0
- package/dist/lib/write-dispatcher/write-dispatcher.js +197 -0
- package/dist/lib/write-dispatcher/write-dispatcher.js.map +1 -0
- package/dist/types/charter.d.ts +330 -0
- package/dist/types/charter.d.ts.map +1 -0
- package/dist/types/charter.js +76 -0
- package/dist/types/charter.js.map +1 -0
- package/dist/types/config.d.ts +65 -17
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/config.js +50 -21
- package/dist/types/config.js.map +1 -1
- package/dist/utils/api-client.d.ts +36 -0
- package/dist/utils/api-client.d.ts.map +1 -0
- package/dist/utils/api-client.js +97 -0
- package/dist/utils/api-client.js.map +1 -0
- package/dist/utils/auth-storage.d.ts +56 -0
- package/dist/utils/auth-storage.d.ts.map +1 -0
- package/dist/utils/auth-storage.js +133 -0
- package/dist/utils/auth-storage.js.map +1 -0
- package/dist/utils/cleanup.d.ts +21 -0
- package/dist/utils/cleanup.d.ts.map +1 -0
- package/dist/utils/cleanup.js +122 -0
- package/dist/utils/cleanup.js.map +1 -0
- package/dist/utils/config-loader.d.ts +76 -0
- package/dist/utils/config-loader.d.ts.map +1 -0
- package/dist/utils/config-loader.js +269 -0
- package/dist/utils/config-loader.js.map +1 -0
- package/dist/utils/context-loader.d.ts +154 -0
- package/dist/utils/context-loader.d.ts.map +1 -0
- package/dist/utils/context-loader.js +411 -0
- package/dist/utils/context-loader.js.map +1 -0
- package/dist/utils/dispatcher-logger.d.ts +30 -0
- package/dist/utils/dispatcher-logger.d.ts.map +1 -0
- package/dist/utils/dispatcher-logger.js +128 -0
- package/dist/utils/dispatcher-logger.js.map +1 -0
- package/dist/utils/ginko-root.d.ts +3 -2
- package/dist/utils/ginko-root.d.ts.map +1 -1
- package/dist/utils/ginko-root.js +35 -2
- package/dist/utils/ginko-root.js.map +1 -1
- package/dist/utils/helpers.d.ts +1 -0
- package/dist/utils/helpers.d.ts.map +1 -1
- package/dist/utils/helpers.js +3 -0
- package/dist/utils/helpers.js.map +1 -1
- package/dist/utils/log-quality.d.ts +55 -0
- package/dist/utils/log-quality.d.ts.map +1 -0
- package/dist/utils/log-quality.js +297 -0
- package/dist/utils/log-quality.js.map +1 -0
- package/dist/utils/reference-parser.d.ts +164 -0
- package/dist/utils/reference-parser.d.ts.map +1 -0
- package/dist/utils/reference-parser.js +363 -0
- package/dist/utils/reference-parser.js.map +1 -0
- package/dist/utils/synthesis.d.ts +180 -0
- package/dist/utils/synthesis.d.ts.map +1 -0
- package/dist/utils/synthesis.js +724 -0
- package/dist/utils/synthesis.js.map +1 -0
- package/dist/utils/team-awareness.d.ts +127 -0
- package/dist/utils/team-awareness.d.ts.map +1 -0
- package/dist/utils/team-awareness.js +385 -0
- package/dist/utils/team-awareness.js.map +1 -0
- package/package.json +6 -4
- package/dist/commands/handoff/handoff-reflection-pipeline.d.ts +0 -106
- package/dist/commands/handoff/handoff-reflection-pipeline.d.ts.map +0 -1
- package/dist/commands/handoff/handoff-reflection-pipeline.js +0 -534
- package/dist/commands/handoff/handoff-reflection-pipeline.js.map +0 -1
- package/dist/commands/handoff/handoff-save.d.ts +0 -16
- package/dist/commands/handoff/handoff-save.d.ts.map +0 -1
- package/dist/commands/handoff/handoff-save.js +0 -72
- package/dist/commands/handoff/handoff-save.js.map +0 -1
- package/dist/commands/handoff/index.d.ts +0 -19
- package/dist/commands/handoff/index.d.ts.map +0 -1
- package/dist/commands/handoff/index.js +0 -55
- package/dist/commands/handoff/index.js.map +0 -1
- package/dist/commands/handoff-ai-orig.d.ts +0 -27
- package/dist/commands/handoff-ai-orig.d.ts.map +0 -1
- package/dist/commands/handoff-ai-orig.js +0 -405
- package/dist/commands/handoff-ai-orig.js.map +0 -1
- package/dist/commands/handoff-ai.d.ts +0 -27
- package/dist/commands/handoff-ai.d.ts.map +0 -1
- package/dist/commands/handoff-ai.js +0 -405
- package/dist/commands/handoff-ai.js.map +0 -1
- package/dist/commands/handoff-enhanced-orig.d.ts +0 -25
- package/dist/commands/handoff-enhanced-orig.d.ts.map +0 -1
- package/dist/commands/handoff-enhanced-orig.js +0 -349
- package/dist/commands/handoff-enhanced-orig.js.map +0 -1
- package/dist/commands/handoff-enhanced.d.ts +0 -25
- package/dist/commands/handoff-enhanced.d.ts.map +0 -1
- package/dist/commands/handoff-enhanced.js +0 -349
- package/dist/commands/handoff-enhanced.js.map +0 -1
- package/dist/commands/handoff-orig.d.ts +0 -10
- package/dist/commands/handoff-orig.d.ts.map +0 -1
- package/dist/commands/handoff-orig.js +0 -167
- package/dist/commands/handoff-orig.js.map +0 -1
- package/dist/commands/init-enhanced.d.ts +0 -20
- package/dist/commands/init-enhanced.d.ts.map +0 -1
- package/dist/commands/init-enhanced.js +0 -430
- package/dist/commands/init-enhanced.js.map +0 -1
- package/dist/commands/prd/prd-reflection-enhanced.d.ts +0 -63
- package/dist/commands/prd/prd-reflection-enhanced.d.ts.map +0 -1
- package/dist/commands/prd/prd-reflection-enhanced.js +0 -310
- package/dist/commands/prd/prd-reflection-enhanced.js.map +0 -1
- package/dist/commands/start-enhanced.d.ts +0 -19
- package/dist/commands/start-enhanced.d.ts.map +0 -1
- package/dist/commands/start-enhanced.js +0 -434
- package/dist/commands/start-enhanced.js.map +0 -1
- package/dist/commands/start.d.ts +0 -10
- package/dist/commands/start.d.ts.map +0 -1
- package/dist/commands/start.js +0 -119
- package/dist/commands/start.js.map +0 -1
- package/dist/core/config/config-aware-reflection.d.ts +0 -37
- package/dist/core/config/config-aware-reflection.d.ts.map +0 -1
- package/dist/core/config/config-aware-reflection.js +0 -97
- package/dist/core/config/config-aware-reflection.js.map +0 -1
- package/dist/core/config/config-loader.d.ts +0 -154
- package/dist/core/config/config-loader.d.ts.map +0 -1
- package/dist/core/config/config-loader.js +0 -424
- package/dist/core/config/config-loader.js.map +0 -1
- package/dist/core/config/config-migrator.d.ts +0 -150
- package/dist/core/config/config-migrator.d.ts.map +0 -1
- package/dist/core/config/config-migrator.js +0 -423
- package/dist/core/config/config-migrator.js.map +0 -1
- package/dist/core/config/config-schema.d.ts +0 -276
- package/dist/core/config/config-schema.d.ts.map +0 -1
- package/dist/core/config/config-schema.js +0 -277
- package/dist/core/config/config-schema.js.map +0 -1
- package/dist/core/config/index.d.ts +0 -260
- package/dist/core/config/index.d.ts.map +0 -1
- package/dist/core/config/index.js +0 -283
- package/dist/core/config/index.js.map +0 -1
- package/dist/core/config/interactive-config.d.ts +0 -76
- package/dist/core/config/interactive-config.d.ts.map +0 -1
- package/dist/core/config/interactive-config.js +0 -315
- package/dist/core/config/interactive-config.js.map +0 -1
- package/dist/core/config/path-config.d.ts +0 -121
- package/dist/core/config/path-config.d.ts.map +0 -1
- package/dist/core/config/path-config.js +0 -210
- package/dist/core/config/path-config.js.map +0 -1
- package/dist/core/config/path-resolver.d.ts +0 -151
- package/dist/core/config/path-resolver.d.ts.map +0 -1
- package/dist/core/config/path-resolver.js +0 -343
- package/dist/core/config/path-resolver.js.map +0 -1
- package/dist/core/config/project-detector.d.ts +0 -58
- package/dist/core/config/project-detector.d.ts.map +0 -1
- package/dist/core/config/project-detector.js +0 -310
- package/dist/core/config/project-detector.js.map +0 -1
- package/dist/core/config-backup/config-aware-reflection.d.ts +0 -37
- package/dist/core/config-backup/config-aware-reflection.d.ts.map +0 -1
- package/dist/core/config-backup/config-aware-reflection.js +0 -97
- package/dist/core/config-backup/config-aware-reflection.js.map +0 -1
- package/dist/core/config-backup/config-loader.d.ts +0 -71
- package/dist/core/config-backup/config-loader.d.ts.map +0 -1
- package/dist/core/config-backup/config-loader.js +0 -288
- package/dist/core/config-backup/config-loader.js.map +0 -1
- package/dist/core/config-backup/interactive-config.d.ts +0 -76
- package/dist/core/config-backup/interactive-config.d.ts.map +0 -1
- package/dist/core/config-backup/interactive-config.js +0 -315
- package/dist/core/config-backup/interactive-config.js.map +0 -1
- package/dist/core/config-backup/path-config.d.ts +0 -121
- package/dist/core/config-backup/path-config.d.ts.map +0 -1
- package/dist/core/config-backup/path-config.js +0 -210
- package/dist/core/config-backup/path-config.js.map +0 -1
- package/dist/core/config-backup/project-detector.d.ts +0 -58
- package/dist/core/config-backup/project-detector.d.ts.map +0 -1
- package/dist/core/config-backup/project-detector.js +0 -310
- package/dist/core/config-backup/project-detector.js.map +0 -1
- package/dist/core/documents/document-manager.d.ts +0 -97
- package/dist/core/documents/document-manager.d.ts.map +0 -1
- package/dist/core/documents/document-manager.js +0 -441
- package/dist/core/documents/document-manager.js.map +0 -1
- package/dist/core/documents/document-migrator.d.ts +0 -138
- package/dist/core/documents/document-migrator.d.ts.map +0 -1
- package/dist/core/documents/document-migrator.js +0 -349
- package/dist/core/documents/document-migrator.js.map +0 -1
- package/dist/core/documents/document-namer.d.ts +0 -111
- package/dist/core/documents/document-namer.d.ts.map +0 -1
- package/dist/core/documents/document-namer.js +0 -225
- package/dist/core/documents/document-namer.js.map +0 -1
- package/dist/core/documents/examples.d.ts +0 -74
- package/dist/core/documents/examples.d.ts.map +0 -1
- package/dist/core/documents/examples.js +0 -273
- package/dist/core/documents/examples.js.map +0 -1
- package/dist/core/documents/file-system.d.ts +0 -93
- package/dist/core/documents/file-system.d.ts.map +0 -1
- package/dist/core/documents/file-system.js +0 -432
- package/dist/core/documents/file-system.js.map +0 -1
- package/dist/core/documents/index.d.ts +0 -97
- package/dist/core/documents/index.d.ts.map +0 -1
- package/dist/core/documents/index.js +0 -119
- package/dist/core/documents/index.js.map +0 -1
- package/dist/core/documents/markdown-processor.d.ts +0 -84
- package/dist/core/documents/markdown-processor.d.ts.map +0 -1
- package/dist/core/documents/markdown-processor.js +0 -302
- package/dist/core/documents/markdown-processor.js.map +0 -1
- package/dist/core/documents/sequence-manager.d.ts +0 -107
- package/dist/core/documents/sequence-manager.d.ts.map +0 -1
- package/dist/core/documents/sequence-manager.js +0 -246
- package/dist/core/documents/sequence-manager.js.map +0 -1
- package/dist/core/documents/template-engine.d.ts +0 -101
- package/dist/core/documents/template-engine.d.ts.map +0 -1
- package/dist/core/documents/template-engine.js +0 -440
- package/dist/core/documents/template-engine.js.map +0 -1
- package/dist/core/platform/hook-migration.d.ts +0 -73
- package/dist/core/platform/hook-migration.d.ts.map +0 -1
- package/dist/core/platform/hook-migration.js +0 -339
- package/dist/core/platform/hook-migration.js.map +0 -1
- package/dist/core/platform/hook-migrator.d.ts +0 -49
- package/dist/core/platform/hook-migrator.d.ts.map +0 -1
- package/dist/core/platform/hook-migrator.js +0 -305
- package/dist/core/platform/hook-migrator.js.map +0 -1
- package/dist/core/platform/path-resolver.d.ts +0 -120
- package/dist/core/platform/path-resolver.d.ts.map +0 -1
- package/dist/core/platform/path-resolver.js +0 -339
- package/dist/core/platform/path-resolver.js.map +0 -1
- package/dist/core/platform/platform-templates.d.ts +0 -62
- package/dist/core/platform/platform-templates.d.ts.map +0 -1
- package/dist/core/platform/platform-templates.js +0 -364
- package/dist/core/platform/platform-templates.js.map +0 -1
- package/dist/core/pressure-monitor.d.ts +0 -76
- package/dist/core/pressure-monitor.d.ts.map +0 -1
- package/dist/core/pressure-monitor.js +0 -156
- package/dist/core/pressure-monitor.js.map +0 -1
- package/dist/core/validators/git-validator.test.d.ts +0 -12
- package/dist/core/validators/git-validator.test.d.ts.map +0 -1
- package/dist/core/validators/git-validator.test.js +0 -40
- package/dist/core/validators/git-validator.test.js.map +0 -1
- package/dist/core/validators/temp_index.d.ts +0 -56
- package/dist/core/validators/temp_index.d.ts.map +0 -1
- package/dist/core/validators/temp_index.js +0 -94
- package/dist/core/validators/temp_index.js.map +0 -1
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileType: utility
|
|
3
|
+
* @status: current
|
|
4
|
+
* @updated: 2025-10-23
|
|
5
|
+
* @tags: [cleanup, housekeeping, temp-files]
|
|
6
|
+
* @related: [../commands/ship.ts]
|
|
7
|
+
* @priority: medium
|
|
8
|
+
* @complexity: low
|
|
9
|
+
* @dependencies: [fs/promises, path, ora, chalk]
|
|
10
|
+
*/
|
|
11
|
+
import * as fs from 'fs/promises';
|
|
12
|
+
import * as path from 'path';
|
|
13
|
+
import ora from 'ora';
|
|
14
|
+
import chalk from 'chalk';
|
|
15
|
+
/**
|
|
16
|
+
* Clean up temporary files and artifacts
|
|
17
|
+
*
|
|
18
|
+
* Removes:
|
|
19
|
+
* - .ginko/temp directory contents
|
|
20
|
+
* - .ginko/cache directory contents
|
|
21
|
+
* - All .tmp files in project root
|
|
22
|
+
* - node_modules/.cache directory contents
|
|
23
|
+
*/
|
|
24
|
+
export async function cleanupTempFiles() {
|
|
25
|
+
const spinner = ora('Cleaning temp files...').start();
|
|
26
|
+
try {
|
|
27
|
+
const projectRoot = process.cwd();
|
|
28
|
+
let cleaned = 0;
|
|
29
|
+
// Clean .ginko/temp
|
|
30
|
+
const tempDir = path.join(projectRoot, '.ginko', 'temp');
|
|
31
|
+
try {
|
|
32
|
+
const files = await fs.readdir(tempDir, { recursive: true });
|
|
33
|
+
for (const file of files) {
|
|
34
|
+
const filePath = path.join(tempDir, file);
|
|
35
|
+
try {
|
|
36
|
+
const stat = await fs.stat(filePath);
|
|
37
|
+
if (stat.isFile()) {
|
|
38
|
+
await fs.unlink(filePath);
|
|
39
|
+
cleaned++;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
// Skip if file doesn't exist or can't be accessed
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
// Directory doesn't exist, skip
|
|
49
|
+
}
|
|
50
|
+
// Clean .ginko/cache
|
|
51
|
+
const cacheDir = path.join(projectRoot, '.ginko', 'cache');
|
|
52
|
+
try {
|
|
53
|
+
const files = await fs.readdir(cacheDir, { recursive: true });
|
|
54
|
+
for (const file of files) {
|
|
55
|
+
const filePath = path.join(cacheDir, file);
|
|
56
|
+
try {
|
|
57
|
+
const stat = await fs.stat(filePath);
|
|
58
|
+
if (stat.isFile()) {
|
|
59
|
+
await fs.unlink(filePath);
|
|
60
|
+
cleaned++;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
// Skip if file doesn't exist or can't be accessed
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
catch {
|
|
69
|
+
// Directory doesn't exist, skip
|
|
70
|
+
}
|
|
71
|
+
// Clean *.tmp files in project root
|
|
72
|
+
try {
|
|
73
|
+
const files = await fs.readdir(projectRoot);
|
|
74
|
+
for (const file of files) {
|
|
75
|
+
if (file.endsWith('.tmp')) {
|
|
76
|
+
try {
|
|
77
|
+
await fs.unlink(path.join(projectRoot, file));
|
|
78
|
+
cleaned++;
|
|
79
|
+
}
|
|
80
|
+
catch {
|
|
81
|
+
// Skip if can't delete
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
catch {
|
|
87
|
+
// Can't read directory, skip
|
|
88
|
+
}
|
|
89
|
+
// Clean node_modules/.cache
|
|
90
|
+
const nmCacheDir = path.join(projectRoot, 'node_modules', '.cache');
|
|
91
|
+
try {
|
|
92
|
+
const files = await fs.readdir(nmCacheDir, { recursive: true });
|
|
93
|
+
for (const file of files) {
|
|
94
|
+
const filePath = path.join(nmCacheDir, file);
|
|
95
|
+
try {
|
|
96
|
+
const stat = await fs.stat(filePath);
|
|
97
|
+
if (stat.isFile()) {
|
|
98
|
+
await fs.unlink(filePath);
|
|
99
|
+
cleaned++;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
catch {
|
|
103
|
+
// Skip if file doesn't exist or can't be accessed
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
catch {
|
|
108
|
+
// Directory doesn't exist, skip
|
|
109
|
+
}
|
|
110
|
+
if (cleaned > 0) {
|
|
111
|
+
spinner.succeed(`Cleaned ${cleaned} temp files`);
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
spinner.info('No temp files to clean');
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
catch (error) {
|
|
118
|
+
spinner.fail('Cleanup failed');
|
|
119
|
+
console.log(chalk.dim(` ${error}`));
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=cleanup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cleanup.js","sourceRoot":"","sources":["../../src/utils/cleanup.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileType: utility
|
|
3
|
+
* @status: current
|
|
4
|
+
* @updated: 2025-10-22
|
|
5
|
+
* @tags: [config, loader, two-tier, adr-037, path-resolution]
|
|
6
|
+
* @related: [config.ts, init.ts, ginko-root.ts]
|
|
7
|
+
* @priority: critical
|
|
8
|
+
* @complexity: medium
|
|
9
|
+
* @dependencies: [fs-extra, path]
|
|
10
|
+
*/
|
|
11
|
+
import { GinkoConfig, LocalConfig } from '../types/config.js';
|
|
12
|
+
/**
|
|
13
|
+
* Load the team-shared ginko.json configuration
|
|
14
|
+
* Falls back to progressive search if ginko.json doesn't exist
|
|
15
|
+
*
|
|
16
|
+
* @returns GinkoConfig object
|
|
17
|
+
* @throws Error if project root cannot be determined
|
|
18
|
+
*/
|
|
19
|
+
export declare function loadProjectConfig(): Promise<GinkoConfig>;
|
|
20
|
+
/**
|
|
21
|
+
* Load the user-specific .ginko/local.json configuration
|
|
22
|
+
* Creates it if it doesn't exist
|
|
23
|
+
*
|
|
24
|
+
* @returns LocalConfig object
|
|
25
|
+
* @throws Error if project root cannot be determined
|
|
26
|
+
*/
|
|
27
|
+
export declare function loadLocalConfig(): Promise<LocalConfig>;
|
|
28
|
+
/**
|
|
29
|
+
* Resolve a relative project path to an absolute path
|
|
30
|
+
* Uses both ginko.json (structure) and local.json (root)
|
|
31
|
+
*
|
|
32
|
+
* @param relativePath - Relative path from project root or path key
|
|
33
|
+
* @returns Absolute path
|
|
34
|
+
* @throws Error if configuration cannot be loaded
|
|
35
|
+
*
|
|
36
|
+
* @example
|
|
37
|
+
* // Using path key
|
|
38
|
+
* const sprintPath = await resolveProjectPath('currentSprint');
|
|
39
|
+
* // → /Users/cnorton/Development/ginko/docs/sprints/CURRENT-SPRINT.md
|
|
40
|
+
*
|
|
41
|
+
* // Using relative path directly
|
|
42
|
+
* const customPath = await resolveProjectPath('docs/custom/file.md');
|
|
43
|
+
* // → /Users/cnorton/Development/ginko/docs/custom/file.md
|
|
44
|
+
*/
|
|
45
|
+
export declare function resolveProjectPath(relativePath: string): Promise<string>;
|
|
46
|
+
/**
|
|
47
|
+
* Get all configured paths as absolute paths
|
|
48
|
+
* Useful for displaying available paths to users
|
|
49
|
+
*
|
|
50
|
+
* @returns Record of path keys to absolute paths
|
|
51
|
+
*/
|
|
52
|
+
export declare function getAllPaths(): Promise<Record<string, string>>;
|
|
53
|
+
/**
|
|
54
|
+
* Invalidate the configuration cache
|
|
55
|
+
* Useful after updating configuration files
|
|
56
|
+
*/
|
|
57
|
+
export declare function invalidateConfigCache(): void;
|
|
58
|
+
/**
|
|
59
|
+
* Validate both configuration files exist and are valid
|
|
60
|
+
* Returns validation results with helpful error messages
|
|
61
|
+
*
|
|
62
|
+
* @returns Validation result object
|
|
63
|
+
*/
|
|
64
|
+
export declare function validateConfiguration(): Promise<{
|
|
65
|
+
valid: boolean;
|
|
66
|
+
errors: string[];
|
|
67
|
+
warnings: string[];
|
|
68
|
+
}>;
|
|
69
|
+
/**
|
|
70
|
+
* Get the project root directory
|
|
71
|
+
* Uses cached value if available, otherwise finds it
|
|
72
|
+
*
|
|
73
|
+
* @returns Absolute path to project root
|
|
74
|
+
*/
|
|
75
|
+
export declare function getProjectRoot(): Promise<string>;
|
|
76
|
+
//# sourceMappingURL=config-loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-loader.d.ts","sourceRoot":"","sources":["../../src/utils/config-loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,EAAE,WAAW,EAAE,WAAW,EAAwB,MAAM,oBAAoB,CAAC;AAmBpF;;;;;;GAMG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,WAAW,CAAC,CAwE9D;AAED;;;;;;GAMG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,WAAW,CAAC,CAuD5D;AAuCD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,kBAAkB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAa9E;AAED;;;;;GAKG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAanE;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,IAAI,IAAI,CAE5C;AAED;;;;;GAKG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC;IACrD,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB,CAAC,CAoCD;AAED;;;;;GAKG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC,CAetD"}
|
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileType: utility
|
|
3
|
+
* @status: current
|
|
4
|
+
* @updated: 2025-10-22
|
|
5
|
+
* @tags: [config, loader, two-tier, adr-037, path-resolution]
|
|
6
|
+
* @related: [config.ts, init.ts, ginko-root.ts]
|
|
7
|
+
* @priority: critical
|
|
8
|
+
* @complexity: medium
|
|
9
|
+
* @dependencies: [fs-extra, path]
|
|
10
|
+
*/
|
|
11
|
+
import fs from 'fs-extra';
|
|
12
|
+
import path from 'path';
|
|
13
|
+
import { DEFAULT_GINKO_CONFIG } from '../types/config.js';
|
|
14
|
+
import { findGinkoRoot } from './ginko-root.js';
|
|
15
|
+
/**
|
|
16
|
+
* Configuration cache for performance
|
|
17
|
+
* Cleared on process exit or explicit invalidation
|
|
18
|
+
*/
|
|
19
|
+
let configCache = {};
|
|
20
|
+
/**
|
|
21
|
+
* Cache TTL in milliseconds (10 seconds)
|
|
22
|
+
*/
|
|
23
|
+
const CACHE_TTL = 10000;
|
|
24
|
+
/**
|
|
25
|
+
* Load the team-shared ginko.json configuration
|
|
26
|
+
* Falls back to progressive search if ginko.json doesn't exist
|
|
27
|
+
*
|
|
28
|
+
* @returns GinkoConfig object
|
|
29
|
+
* @throws Error if project root cannot be determined
|
|
30
|
+
*/
|
|
31
|
+
export async function loadProjectConfig() {
|
|
32
|
+
// Check cache
|
|
33
|
+
if (configCache.ginkoConfig && configCache.timestamp) {
|
|
34
|
+
const age = Date.now() - configCache.timestamp;
|
|
35
|
+
if (age < CACHE_TTL) {
|
|
36
|
+
return configCache.ginkoConfig;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
// Find project root (where .ginko directory or ginko.json exists)
|
|
40
|
+
let projectRoot = await findGinkoRoot();
|
|
41
|
+
if (!projectRoot) {
|
|
42
|
+
// No .ginko directory found, check for ginko.json in current directory
|
|
43
|
+
const currentDir = process.cwd();
|
|
44
|
+
const ginkoJsonPath = path.join(currentDir, 'ginko.json');
|
|
45
|
+
if (await fs.pathExists(ginkoJsonPath)) {
|
|
46
|
+
projectRoot = currentDir;
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
throw new Error('Ginko not initialized. Run `ginko init` to create configuration.');
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
const ginkoJsonPath = path.join(projectRoot, 'ginko.json');
|
|
53
|
+
// Try to load ginko.json
|
|
54
|
+
if (await fs.pathExists(ginkoJsonPath)) {
|
|
55
|
+
try {
|
|
56
|
+
const config = await fs.readJSON(ginkoJsonPath);
|
|
57
|
+
// Validate config structure
|
|
58
|
+
if (!config.version || !config.project || !config.paths) {
|
|
59
|
+
throw new Error(`Invalid ginko.json structure. Missing required fields: version, project, or paths.`);
|
|
60
|
+
}
|
|
61
|
+
// Cache the config
|
|
62
|
+
configCache.ginkoConfig = config;
|
|
63
|
+
configCache.projectRoot = projectRoot;
|
|
64
|
+
configCache.timestamp = Date.now();
|
|
65
|
+
return config;
|
|
66
|
+
}
|
|
67
|
+
catch (error) {
|
|
68
|
+
if (error instanceof Error && error.message.includes('Invalid ginko.json')) {
|
|
69
|
+
throw error;
|
|
70
|
+
}
|
|
71
|
+
throw new Error(`Failed to parse ginko.json: ${error instanceof Error ? error.message : String(error)}`);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
// ginko.json doesn't exist, return default config with warning
|
|
75
|
+
console.warn('Warning: ginko.json not found. Using default configuration. ' +
|
|
76
|
+
'Run `ginko init --migrate` to create team-shared configuration.');
|
|
77
|
+
// Use default config with project name from directory
|
|
78
|
+
const defaultConfig = { ...DEFAULT_GINKO_CONFIG };
|
|
79
|
+
defaultConfig.project.name = path.basename(projectRoot);
|
|
80
|
+
// Cache the default config
|
|
81
|
+
configCache.ginkoConfig = defaultConfig;
|
|
82
|
+
configCache.projectRoot = projectRoot;
|
|
83
|
+
configCache.timestamp = Date.now();
|
|
84
|
+
return defaultConfig;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Load the user-specific .ginko/local.json configuration
|
|
88
|
+
* Creates it if it doesn't exist
|
|
89
|
+
*
|
|
90
|
+
* @returns LocalConfig object
|
|
91
|
+
* @throws Error if project root cannot be determined
|
|
92
|
+
*/
|
|
93
|
+
export async function loadLocalConfig() {
|
|
94
|
+
// Check cache
|
|
95
|
+
if (configCache.localConfig && configCache.timestamp) {
|
|
96
|
+
const age = Date.now() - configCache.timestamp;
|
|
97
|
+
if (age < CACHE_TTL) {
|
|
98
|
+
return configCache.localConfig;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
// Get project root
|
|
102
|
+
const projectRoot = configCache.projectRoot || await findGinkoRoot();
|
|
103
|
+
if (!projectRoot) {
|
|
104
|
+
throw new Error('Ginko not initialized. Run `ginko init` to create configuration.');
|
|
105
|
+
}
|
|
106
|
+
const localConfigPath = path.join(projectRoot, '.ginko', 'local.json');
|
|
107
|
+
// Try to load local.json
|
|
108
|
+
if (await fs.pathExists(localConfigPath)) {
|
|
109
|
+
try {
|
|
110
|
+
const config = await fs.readJSON(localConfigPath);
|
|
111
|
+
// Validate structure
|
|
112
|
+
if (!config.projectRoot || !config.userEmail || !config.userSlug) {
|
|
113
|
+
throw new Error(`Invalid local.json structure. Missing required fields: projectRoot, userEmail, or userSlug.`);
|
|
114
|
+
}
|
|
115
|
+
// Cache the config
|
|
116
|
+
configCache.localConfig = config;
|
|
117
|
+
configCache.timestamp = Date.now();
|
|
118
|
+
return config;
|
|
119
|
+
}
|
|
120
|
+
catch (error) {
|
|
121
|
+
if (error instanceof Error && error.message.includes('Invalid local.json')) {
|
|
122
|
+
throw error;
|
|
123
|
+
}
|
|
124
|
+
throw new Error(`Failed to parse .ginko/local.json: ${error instanceof Error ? error.message : String(error)}`);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
// local.json doesn't exist, create it
|
|
128
|
+
const localConfig = await createLocalConfig(projectRoot);
|
|
129
|
+
// Cache the new config
|
|
130
|
+
configCache.localConfig = localConfig;
|
|
131
|
+
configCache.timestamp = Date.now();
|
|
132
|
+
return localConfig;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Create a new local.json configuration file
|
|
136
|
+
*
|
|
137
|
+
* @param projectRoot - Absolute path to project root
|
|
138
|
+
* @returns LocalConfig object
|
|
139
|
+
*/
|
|
140
|
+
async function createLocalConfig(projectRoot) {
|
|
141
|
+
// Get user email from git config or use default
|
|
142
|
+
let userEmail = 'user@example.com';
|
|
143
|
+
try {
|
|
144
|
+
const { execSync } = await import('child_process');
|
|
145
|
+
userEmail = execSync('git config user.email', { encoding: 'utf8' }).trim();
|
|
146
|
+
}
|
|
147
|
+
catch (e) {
|
|
148
|
+
// Git not configured, use default
|
|
149
|
+
}
|
|
150
|
+
const userSlug = userEmail.replace('@', '-at-').replace(/\./g, '-');
|
|
151
|
+
const localConfig = {
|
|
152
|
+
projectRoot,
|
|
153
|
+
userEmail,
|
|
154
|
+
userSlug,
|
|
155
|
+
workMode: 'think-build'
|
|
156
|
+
};
|
|
157
|
+
// Ensure .ginko directory exists
|
|
158
|
+
await fs.ensureDir(path.join(projectRoot, '.ginko'));
|
|
159
|
+
// Write local.json
|
|
160
|
+
const localConfigPath = path.join(projectRoot, '.ginko', 'local.json');
|
|
161
|
+
await fs.writeJSON(localConfigPath, localConfig, { spaces: 2 });
|
|
162
|
+
console.log(`Created .ginko/local.json for user: ${userEmail}`);
|
|
163
|
+
return localConfig;
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Resolve a relative project path to an absolute path
|
|
167
|
+
* Uses both ginko.json (structure) and local.json (root)
|
|
168
|
+
*
|
|
169
|
+
* @param relativePath - Relative path from project root or path key
|
|
170
|
+
* @returns Absolute path
|
|
171
|
+
* @throws Error if configuration cannot be loaded
|
|
172
|
+
*
|
|
173
|
+
* @example
|
|
174
|
+
* // Using path key
|
|
175
|
+
* const sprintPath = await resolveProjectPath('currentSprint');
|
|
176
|
+
* // → /Users/cnorton/Development/ginko/docs/sprints/CURRENT-SPRINT.md
|
|
177
|
+
*
|
|
178
|
+
* // Using relative path directly
|
|
179
|
+
* const customPath = await resolveProjectPath('docs/custom/file.md');
|
|
180
|
+
* // → /Users/cnorton/Development/ginko/docs/custom/file.md
|
|
181
|
+
*/
|
|
182
|
+
export async function resolveProjectPath(relativePath) {
|
|
183
|
+
const [localConfig, projectConfig] = await Promise.all([
|
|
184
|
+
loadLocalConfig(),
|
|
185
|
+
loadProjectConfig()
|
|
186
|
+
]);
|
|
187
|
+
// Check if relativePath is a path key in config
|
|
188
|
+
if (projectConfig.paths[relativePath]) {
|
|
189
|
+
relativePath = projectConfig.paths[relativePath];
|
|
190
|
+
}
|
|
191
|
+
// Resolve to absolute path using Node's path module (cross-platform)
|
|
192
|
+
return path.resolve(localConfig.projectRoot, relativePath);
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Get all configured paths as absolute paths
|
|
196
|
+
* Useful for displaying available paths to users
|
|
197
|
+
*
|
|
198
|
+
* @returns Record of path keys to absolute paths
|
|
199
|
+
*/
|
|
200
|
+
export async function getAllPaths() {
|
|
201
|
+
const [localConfig, projectConfig] = await Promise.all([
|
|
202
|
+
loadLocalConfig(),
|
|
203
|
+
loadProjectConfig()
|
|
204
|
+
]);
|
|
205
|
+
const absolutePaths = {};
|
|
206
|
+
for (const [key, relativePath] of Object.entries(projectConfig.paths)) {
|
|
207
|
+
absolutePaths[key] = path.resolve(localConfig.projectRoot, relativePath);
|
|
208
|
+
}
|
|
209
|
+
return absolutePaths;
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Invalidate the configuration cache
|
|
213
|
+
* Useful after updating configuration files
|
|
214
|
+
*/
|
|
215
|
+
export function invalidateConfigCache() {
|
|
216
|
+
configCache = {};
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Validate both configuration files exist and are valid
|
|
220
|
+
* Returns validation results with helpful error messages
|
|
221
|
+
*
|
|
222
|
+
* @returns Validation result object
|
|
223
|
+
*/
|
|
224
|
+
export async function validateConfiguration() {
|
|
225
|
+
const errors = [];
|
|
226
|
+
const warnings = [];
|
|
227
|
+
try {
|
|
228
|
+
// Try to load project config
|
|
229
|
+
const projectConfig = await loadProjectConfig();
|
|
230
|
+
// Check required paths exist
|
|
231
|
+
const localConfig = await loadLocalConfig();
|
|
232
|
+
const criticalPaths = ['sessions', 'context'];
|
|
233
|
+
for (const pathKey of criticalPaths) {
|
|
234
|
+
if (projectConfig.paths[pathKey]) {
|
|
235
|
+
const absolutePath = path.resolve(localConfig.projectRoot, projectConfig.paths[pathKey]);
|
|
236
|
+
if (!(await fs.pathExists(absolutePath))) {
|
|
237
|
+
warnings.push(`Path '${pathKey}' (${projectConfig.paths[pathKey]}) does not exist. ` +
|
|
238
|
+
`Run \`ginko init\` to create missing directories.`);
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
catch (error) {
|
|
244
|
+
errors.push(error instanceof Error ? error.message : String(error));
|
|
245
|
+
}
|
|
246
|
+
return {
|
|
247
|
+
valid: errors.length === 0,
|
|
248
|
+
errors,
|
|
249
|
+
warnings
|
|
250
|
+
};
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* Get the project root directory
|
|
254
|
+
* Uses cached value if available, otherwise finds it
|
|
255
|
+
*
|
|
256
|
+
* @returns Absolute path to project root
|
|
257
|
+
*/
|
|
258
|
+
export async function getProjectRoot() {
|
|
259
|
+
if (configCache.projectRoot) {
|
|
260
|
+
return configCache.projectRoot;
|
|
261
|
+
}
|
|
262
|
+
const projectRoot = await findGinkoRoot();
|
|
263
|
+
if (!projectRoot) {
|
|
264
|
+
throw new Error('Ginko not initialized. Run `ginko init` to create configuration.');
|
|
265
|
+
}
|
|
266
|
+
configCache.projectRoot = projectRoot;
|
|
267
|
+
return projectRoot;
|
|
268
|
+
}
|
|
269
|
+
//# sourceMappingURL=config-loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-loader.js","sourceRoot":"","sources":["../../src/utils/config-loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileType: utility
|
|
3
|
+
* @status: current
|
|
4
|
+
* @updated: 2025-10-22
|
|
5
|
+
* @tags: [context-loading, progressive, strategic, performance, adr-037, task-011]
|
|
6
|
+
* @related: [config-loader.ts, reference-parser.ts, start-reflection.ts]
|
|
7
|
+
* @priority: high
|
|
8
|
+
* @complexity: high
|
|
9
|
+
* @dependencies: [fs-extra, path, reference-parser, config-loader]
|
|
10
|
+
*/
|
|
11
|
+
import { ResolvedReference } from './reference-parser.js';
|
|
12
|
+
import { WorkMode } from '../types/config.js';
|
|
13
|
+
/**
|
|
14
|
+
* Loaded document with metadata
|
|
15
|
+
*/
|
|
16
|
+
export interface LoadedDocument {
|
|
17
|
+
path: string;
|
|
18
|
+
relativePath: string;
|
|
19
|
+
content: string;
|
|
20
|
+
type: string;
|
|
21
|
+
tokens: number;
|
|
22
|
+
loadedAt: number;
|
|
23
|
+
referencedBy?: string[];
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Strategic context with efficiency metrics
|
|
27
|
+
*/
|
|
28
|
+
export interface StrategyContext {
|
|
29
|
+
documents: Map<string, LoadedDocument>;
|
|
30
|
+
references: Map<string, ResolvedReference>;
|
|
31
|
+
metrics: ContextEfficiencyMetrics;
|
|
32
|
+
loadOrder: string[];
|
|
33
|
+
workMode: WorkMode;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Context efficiency metrics
|
|
37
|
+
*/
|
|
38
|
+
export interface ContextEfficiencyMetrics {
|
|
39
|
+
documentsLoaded: number;
|
|
40
|
+
totalTokens: number;
|
|
41
|
+
bootstrapTimeMs: number;
|
|
42
|
+
cacheHits: number;
|
|
43
|
+
referenceDepth: number;
|
|
44
|
+
tokenReductionPercent: number;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Priority loading options
|
|
48
|
+
*/
|
|
49
|
+
export interface LoadingOptions {
|
|
50
|
+
workMode?: WorkMode;
|
|
51
|
+
maxDepth?: number;
|
|
52
|
+
followReferences?: boolean;
|
|
53
|
+
sessionDir?: string;
|
|
54
|
+
userSlug?: string;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Context Loader - Strategic progressive loading
|
|
58
|
+
*/
|
|
59
|
+
export declare class ContextLoader {
|
|
60
|
+
private loaded;
|
|
61
|
+
private visited;
|
|
62
|
+
private config;
|
|
63
|
+
private startTime;
|
|
64
|
+
private cacheHits;
|
|
65
|
+
private maxReferenceDepth;
|
|
66
|
+
private backlog;
|
|
67
|
+
constructor();
|
|
68
|
+
/**
|
|
69
|
+
* Load context strategically with priority ordering
|
|
70
|
+
* Priority: session log → sprint → backlog fallback → references → modules
|
|
71
|
+
*
|
|
72
|
+
* @param options - Loading options
|
|
73
|
+
* @returns StrategyContext with loaded documents and metrics
|
|
74
|
+
*/
|
|
75
|
+
loadContextStrategic(options?: LoadingOptions): Promise<StrategyContext>;
|
|
76
|
+
/**
|
|
77
|
+
* Load session log from sessions directory
|
|
78
|
+
*/
|
|
79
|
+
loadSessionContext(sessionDir: string): Promise<LoadedDocument | null>;
|
|
80
|
+
/**
|
|
81
|
+
* Load current sprint document
|
|
82
|
+
*/
|
|
83
|
+
loadSprintContext(): Promise<LoadedDocument | null>;
|
|
84
|
+
/**
|
|
85
|
+
* Load always-load core modules based on work mode (TASK-015)
|
|
86
|
+
* These provide foundational knowledge for immediate AI productivity
|
|
87
|
+
*/
|
|
88
|
+
private loadAlwaysLoadModules;
|
|
89
|
+
/**
|
|
90
|
+
* Load active backlog items as fallback when no sprint exists
|
|
91
|
+
* Only loads in-progress and high-priority items based on work mode
|
|
92
|
+
*/
|
|
93
|
+
private loadBacklogContext;
|
|
94
|
+
/**
|
|
95
|
+
* Follow reference chains recursively with depth limit
|
|
96
|
+
*/
|
|
97
|
+
private followReferences;
|
|
98
|
+
/**
|
|
99
|
+
* Filter references by work mode documentation depth
|
|
100
|
+
*/
|
|
101
|
+
private filterByWorkMode;
|
|
102
|
+
/**
|
|
103
|
+
* Load a document and add to loaded cache
|
|
104
|
+
*/
|
|
105
|
+
private loadDocument;
|
|
106
|
+
/**
|
|
107
|
+
* Estimate token count (rough approximation: 1 token ≈ 4 characters)
|
|
108
|
+
*/
|
|
109
|
+
private estimateTokens;
|
|
110
|
+
/**
|
|
111
|
+
* Get relative path from absolute path
|
|
112
|
+
*/
|
|
113
|
+
private getRelativePath;
|
|
114
|
+
/**
|
|
115
|
+
* Get current work mode (from config or default)
|
|
116
|
+
*/
|
|
117
|
+
private getCurrentWorkMode;
|
|
118
|
+
/**
|
|
119
|
+
* Calculate context efficiency metrics
|
|
120
|
+
*/
|
|
121
|
+
private calculateMetrics;
|
|
122
|
+
/**
|
|
123
|
+
* Measure context efficiency (for testing and monitoring)
|
|
124
|
+
*/
|
|
125
|
+
measureContextEfficiency(context: StrategyContext): {
|
|
126
|
+
meetsGoals: boolean;
|
|
127
|
+
issues: string[];
|
|
128
|
+
};
|
|
129
|
+
/**
|
|
130
|
+
* Reset loader state (for testing)
|
|
131
|
+
*/
|
|
132
|
+
reset(): void;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Convenience function: Load context strategically
|
|
136
|
+
*/
|
|
137
|
+
export declare function loadContextStrategic(options?: LoadingOptions): Promise<StrategyContext>;
|
|
138
|
+
/**
|
|
139
|
+
* Format context summary for display
|
|
140
|
+
*/
|
|
141
|
+
export declare function formatContextSummary(context: StrategyContext): string;
|
|
142
|
+
/**
|
|
143
|
+
* Get document content by path (convenience)
|
|
144
|
+
*/
|
|
145
|
+
export declare function getDocumentContent(context: StrategyContext, path: string): string | null;
|
|
146
|
+
/**
|
|
147
|
+
* Get all loaded document paths
|
|
148
|
+
*/
|
|
149
|
+
export declare function getLoadedPaths(context: StrategyContext): string[];
|
|
150
|
+
/**
|
|
151
|
+
* Filter documents by type
|
|
152
|
+
*/
|
|
153
|
+
export declare function getDocumentsByType(context: StrategyContext, type: string): LoadedDocument[];
|
|
154
|
+
//# sourceMappingURL=context-loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-loader.d.ts","sourceRoot":"","sources":["../../src/utils/context-loader.ts"],"names":[],"mappings":"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"}
|