@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,411 @@
|
|
|
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
|
+
/**
|
|
12
|
+
* Progressive Context Loader (TASK-011)
|
|
13
|
+
*
|
|
14
|
+
* Implements strategic priority-ordered context loading that follows reference chains
|
|
15
|
+
* to achieve 80% of needed context from 3-5 core documents instead of 50+ files.
|
|
16
|
+
*
|
|
17
|
+
* Goals:
|
|
18
|
+
* - Load context in <1 second
|
|
19
|
+
* - Achieve 80% context from ≤5 documents
|
|
20
|
+
* - Reduce token usage by 70% vs full-scan approach
|
|
21
|
+
* - Follow reference chains with depth limit
|
|
22
|
+
* - Work mode filtering for documentation depth
|
|
23
|
+
*
|
|
24
|
+
* Based on PRD-009, ADR-037, and TASK-011
|
|
25
|
+
*/
|
|
26
|
+
import fs from 'fs-extra';
|
|
27
|
+
import path from 'path';
|
|
28
|
+
import { extractReferences, resolveReference } from './reference-parser.js';
|
|
29
|
+
import { loadProjectConfig, loadLocalConfig, resolveProjectPath } from './config-loader.js';
|
|
30
|
+
import { BacklogBase } from '../commands/backlog/base.js';
|
|
31
|
+
/**
|
|
32
|
+
* Context Loader - Strategic progressive loading
|
|
33
|
+
*/
|
|
34
|
+
export class ContextLoader {
|
|
35
|
+
loaded = new Map();
|
|
36
|
+
visited = new Set(); // Circular reference detection
|
|
37
|
+
config = null;
|
|
38
|
+
startTime = 0;
|
|
39
|
+
cacheHits = 0;
|
|
40
|
+
maxReferenceDepth = 0;
|
|
41
|
+
backlog = null;
|
|
42
|
+
constructor() {
|
|
43
|
+
this.startTime = Date.now();
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Load context strategically with priority ordering
|
|
47
|
+
* Priority: session log → sprint → backlog fallback → references → modules
|
|
48
|
+
*
|
|
49
|
+
* @param options - Loading options
|
|
50
|
+
* @returns StrategyContext with loaded documents and metrics
|
|
51
|
+
*/
|
|
52
|
+
async loadContextStrategic(options = {}) {
|
|
53
|
+
this.startTime = Date.now();
|
|
54
|
+
const config = await loadProjectConfig();
|
|
55
|
+
const localConfig = await loadLocalConfig();
|
|
56
|
+
this.config = config;
|
|
57
|
+
// Initialize backlog for task status checking
|
|
58
|
+
this.backlog = new BacklogBase();
|
|
59
|
+
try {
|
|
60
|
+
await this.backlog.init();
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
// Backlog not available, continue without it
|
|
64
|
+
this.backlog = null;
|
|
65
|
+
}
|
|
66
|
+
const workMode = options.workMode || config.workMode.default;
|
|
67
|
+
const maxDepth = options.maxDepth ?? config.contextLoading.maxDepth;
|
|
68
|
+
const followRefs = options.followReferences ?? config.contextLoading.followReferences;
|
|
69
|
+
const references = new Map();
|
|
70
|
+
const loadOrder = [];
|
|
71
|
+
// 0. Load always-load core modules (TASK-015)
|
|
72
|
+
await this.loadAlwaysLoadModules(config, workMode, loadOrder, localConfig.projectRoot);
|
|
73
|
+
// 1. Load session log (short-term memory)
|
|
74
|
+
const sessionLog = await this.loadSessionContext(options.sessionDir || path.join(localConfig.projectRoot, '.ginko/sessions', localConfig.userSlug));
|
|
75
|
+
if (sessionLog) {
|
|
76
|
+
loadOrder.push('session-log');
|
|
77
|
+
}
|
|
78
|
+
// 2. Load current sprint (long-term bootstrap)
|
|
79
|
+
const sprint = await this.loadSprintContext();
|
|
80
|
+
if (sprint) {
|
|
81
|
+
loadOrder.push('current-sprint');
|
|
82
|
+
}
|
|
83
|
+
// 3. Fallback: If no sprint, load active backlog items
|
|
84
|
+
if (!sprint && this.backlog) {
|
|
85
|
+
await this.loadBacklogContext(loadOrder, workMode);
|
|
86
|
+
}
|
|
87
|
+
// 4. Extract references from loaded docs
|
|
88
|
+
if (followRefs) {
|
|
89
|
+
const combinedContent = [
|
|
90
|
+
sessionLog?.content || '',
|
|
91
|
+
sprint?.content || ''
|
|
92
|
+
].join('\n');
|
|
93
|
+
const extractedRefs = extractReferences(combinedContent);
|
|
94
|
+
// 5. Follow references with depth limit, work mode, and status filtering
|
|
95
|
+
const filteredRefs = this.filterByWorkMode(extractedRefs, workMode);
|
|
96
|
+
await this.followReferences(filteredRefs, maxDepth, references, loadOrder);
|
|
97
|
+
}
|
|
98
|
+
// Calculate metrics
|
|
99
|
+
const metrics = this.calculateMetrics();
|
|
100
|
+
return {
|
|
101
|
+
documents: this.loaded,
|
|
102
|
+
references,
|
|
103
|
+
metrics,
|
|
104
|
+
loadOrder,
|
|
105
|
+
workMode
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Load session log from sessions directory
|
|
110
|
+
*/
|
|
111
|
+
async loadSessionContext(sessionDir) {
|
|
112
|
+
const sessionLogPath = path.join(sessionDir, 'current-session-log.md');
|
|
113
|
+
if (!(await fs.pathExists(sessionLogPath))) {
|
|
114
|
+
return null;
|
|
115
|
+
}
|
|
116
|
+
return this.loadDocument(sessionLogPath, 'session-log');
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Load current sprint document
|
|
120
|
+
*/
|
|
121
|
+
async loadSprintContext() {
|
|
122
|
+
try {
|
|
123
|
+
const sprintPath = await resolveProjectPath('currentSprint');
|
|
124
|
+
if (!(await fs.pathExists(sprintPath))) {
|
|
125
|
+
return null;
|
|
126
|
+
}
|
|
127
|
+
return this.loadDocument(sprintPath, 'sprint');
|
|
128
|
+
}
|
|
129
|
+
catch {
|
|
130
|
+
return null;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Load always-load core modules based on work mode (TASK-015)
|
|
135
|
+
* These provide foundational knowledge for immediate AI productivity
|
|
136
|
+
*/
|
|
137
|
+
async loadAlwaysLoadModules(config, workMode, loadOrder, projectRoot) {
|
|
138
|
+
const alwaysLoadConfig = config.contextLoading.alwaysLoad;
|
|
139
|
+
if (!alwaysLoadConfig) {
|
|
140
|
+
return; // No always-load configuration
|
|
141
|
+
}
|
|
142
|
+
const modulePaths = alwaysLoadConfig[workMode] || [];
|
|
143
|
+
for (const modulePath of modulePaths) {
|
|
144
|
+
const absolutePath = path.join(projectRoot, modulePath);
|
|
145
|
+
if (await fs.pathExists(absolutePath)) {
|
|
146
|
+
const doc = await this.loadDocument(absolutePath, 'core-module');
|
|
147
|
+
if (doc) {
|
|
148
|
+
loadOrder.push(path.basename(modulePath, '.md'));
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Load active backlog items as fallback when no sprint exists
|
|
155
|
+
* Only loads in-progress and high-priority items based on work mode
|
|
156
|
+
*/
|
|
157
|
+
async loadBacklogContext(loadOrder, workMode) {
|
|
158
|
+
if (!this.backlog)
|
|
159
|
+
return;
|
|
160
|
+
try {
|
|
161
|
+
// Load in-progress items (always relevant)
|
|
162
|
+
const inProgress = await this.backlog.listItems({ status: 'in-progress' });
|
|
163
|
+
// Load high-priority todo items (limited by work mode)
|
|
164
|
+
const highPriority = await this.backlog.listItems({
|
|
165
|
+
status: 'todo',
|
|
166
|
+
priority: 'critical'
|
|
167
|
+
});
|
|
168
|
+
// Combine and limit based on work mode
|
|
169
|
+
const itemsToLoad = [...inProgress, ...highPriority];
|
|
170
|
+
const limit = workMode === 'hack-ship' ? 1 : workMode === 'think-build' ? 3 : 5;
|
|
171
|
+
for (const item of itemsToLoad.slice(0, limit)) {
|
|
172
|
+
const itemPath = path.join(this.backlog['itemsDir'], `${item.id}.md`);
|
|
173
|
+
if (await fs.pathExists(itemPath)) {
|
|
174
|
+
await this.loadDocument(itemPath, 'backlog-item');
|
|
175
|
+
loadOrder.push(item.id);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
catch (error) {
|
|
180
|
+
// Backlog loading failed, continue without it
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Follow reference chains recursively with depth limit
|
|
185
|
+
*/
|
|
186
|
+
async followReferences(refs, maxDepth, referencesMap, loadOrder, currentDepth = 0) {
|
|
187
|
+
if (currentDepth >= maxDepth) {
|
|
188
|
+
return;
|
|
189
|
+
}
|
|
190
|
+
// Track maximum depth reached
|
|
191
|
+
this.maxReferenceDepth = Math.max(this.maxReferenceDepth, currentDepth);
|
|
192
|
+
for (const ref of refs) {
|
|
193
|
+
const refKey = `${ref.type}:${ref.id}`;
|
|
194
|
+
// Skip if already visited (circular reference)
|
|
195
|
+
if (this.visited.has(refKey)) {
|
|
196
|
+
this.cacheHits++;
|
|
197
|
+
continue;
|
|
198
|
+
}
|
|
199
|
+
this.visited.add(refKey);
|
|
200
|
+
// Check backlog status for tasks/features (skip completed)
|
|
201
|
+
if (this.backlog && (ref.type === 'task' || ref.type === 'feature')) {
|
|
202
|
+
const item = await this.backlog.loadItem(ref.id);
|
|
203
|
+
if (item && item.status === 'done') {
|
|
204
|
+
// Skip completed items - they're not relevant to current work
|
|
205
|
+
this.visited.add(refKey); // Mark as visited to avoid re-checking
|
|
206
|
+
continue;
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
// Resolve reference
|
|
210
|
+
const resolved = await resolveReference(ref);
|
|
211
|
+
referencesMap.set(refKey, resolved);
|
|
212
|
+
if (!resolved.exists || !resolved.filePath) {
|
|
213
|
+
continue;
|
|
214
|
+
}
|
|
215
|
+
// Load referenced document
|
|
216
|
+
const doc = await this.loadDocument(resolved.filePath, ref.type);
|
|
217
|
+
if (!doc)
|
|
218
|
+
continue;
|
|
219
|
+
loadOrder.push(ref.rawText);
|
|
220
|
+
// Extract nested references and follow recursively
|
|
221
|
+
const nestedRefs = extractReferences(doc.content);
|
|
222
|
+
const filteredNestedRefs = this.filterByWorkMode(nestedRefs, this.getCurrentWorkMode());
|
|
223
|
+
await this.followReferences(filteredNestedRefs, maxDepth, referencesMap, loadOrder, currentDepth + 1);
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Filter references by work mode documentation depth
|
|
228
|
+
*/
|
|
229
|
+
filterByWorkMode(refs, workMode) {
|
|
230
|
+
if (!this.config)
|
|
231
|
+
return refs;
|
|
232
|
+
const allowedTypes = this.config.workMode.documentationDepth[workMode];
|
|
233
|
+
// Map reference types to config path keys
|
|
234
|
+
const typeMapping = {
|
|
235
|
+
task: 'backlog',
|
|
236
|
+
feature: 'backlog',
|
|
237
|
+
prd: 'prds',
|
|
238
|
+
adr: 'adrs',
|
|
239
|
+
sprint: 'sprints'
|
|
240
|
+
};
|
|
241
|
+
return refs.filter(ref => {
|
|
242
|
+
const pathKey = typeMapping[ref.type];
|
|
243
|
+
// Check if this reference type should be loaded for this work mode
|
|
244
|
+
if (workMode === 'hack-ship') {
|
|
245
|
+
// Only load sprints and tasks in hack-ship mode
|
|
246
|
+
return ref.type === 'sprint' || ref.type === 'task';
|
|
247
|
+
}
|
|
248
|
+
if (workMode === 'think-build') {
|
|
249
|
+
// Load sprints, tasks, PRDs, ADRs
|
|
250
|
+
return ['sprint', 'task', 'prd', 'adr'].includes(ref.type);
|
|
251
|
+
}
|
|
252
|
+
// full-planning: load everything
|
|
253
|
+
return true;
|
|
254
|
+
});
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* Load a document and add to loaded cache
|
|
258
|
+
*/
|
|
259
|
+
async loadDocument(filePath, type) {
|
|
260
|
+
// Check if already loaded (cache)
|
|
261
|
+
if (this.loaded.has(filePath)) {
|
|
262
|
+
this.cacheHits++;
|
|
263
|
+
return this.loaded.get(filePath);
|
|
264
|
+
}
|
|
265
|
+
try {
|
|
266
|
+
const content = await fs.readFile(filePath, 'utf-8');
|
|
267
|
+
const tokens = this.estimateTokens(content);
|
|
268
|
+
const relativePath = this.getRelativePath(filePath);
|
|
269
|
+
const doc = {
|
|
270
|
+
path: filePath,
|
|
271
|
+
relativePath,
|
|
272
|
+
content,
|
|
273
|
+
type,
|
|
274
|
+
tokens,
|
|
275
|
+
loadedAt: Date.now(),
|
|
276
|
+
referencedBy: []
|
|
277
|
+
};
|
|
278
|
+
this.loaded.set(filePath, doc);
|
|
279
|
+
return doc;
|
|
280
|
+
}
|
|
281
|
+
catch (error) {
|
|
282
|
+
// File doesn't exist or can't be read
|
|
283
|
+
return null;
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
/**
|
|
287
|
+
* Estimate token count (rough approximation: 1 token ≈ 4 characters)
|
|
288
|
+
*/
|
|
289
|
+
estimateTokens(content) {
|
|
290
|
+
return Math.ceil(content.length / 4);
|
|
291
|
+
}
|
|
292
|
+
/**
|
|
293
|
+
* Get relative path from absolute path
|
|
294
|
+
*/
|
|
295
|
+
getRelativePath(absolutePath) {
|
|
296
|
+
try {
|
|
297
|
+
const projectRoot = process.cwd();
|
|
298
|
+
return path.relative(projectRoot, absolutePath);
|
|
299
|
+
}
|
|
300
|
+
catch {
|
|
301
|
+
return absolutePath;
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
/**
|
|
305
|
+
* Get current work mode (from config or default)
|
|
306
|
+
*/
|
|
307
|
+
getCurrentWorkMode() {
|
|
308
|
+
return this.config?.workMode.default || 'think-build';
|
|
309
|
+
}
|
|
310
|
+
/**
|
|
311
|
+
* Calculate context efficiency metrics
|
|
312
|
+
*/
|
|
313
|
+
calculateMetrics() {
|
|
314
|
+
const totalTokens = Array.from(this.loaded.values())
|
|
315
|
+
.reduce((sum, doc) => sum + doc.tokens, 0);
|
|
316
|
+
const bootstrapTimeMs = Date.now() - this.startTime;
|
|
317
|
+
// Baseline: full-scan would load ~50 documents × 500 tokens = 25,000 tokens
|
|
318
|
+
const baselineTokens = 25000;
|
|
319
|
+
const tokenReductionPercent = Math.round(((baselineTokens - totalTokens) / baselineTokens) * 100);
|
|
320
|
+
return {
|
|
321
|
+
documentsLoaded: this.loaded.size,
|
|
322
|
+
totalTokens,
|
|
323
|
+
bootstrapTimeMs,
|
|
324
|
+
cacheHits: this.cacheHits,
|
|
325
|
+
referenceDepth: this.maxReferenceDepth,
|
|
326
|
+
tokenReductionPercent: Math.max(0, tokenReductionPercent)
|
|
327
|
+
};
|
|
328
|
+
}
|
|
329
|
+
/**
|
|
330
|
+
* Measure context efficiency (for testing and monitoring)
|
|
331
|
+
*/
|
|
332
|
+
measureContextEfficiency(context) {
|
|
333
|
+
const { metrics } = context;
|
|
334
|
+
const issues = [];
|
|
335
|
+
// Goal: Context loading completes in <1 second
|
|
336
|
+
if (metrics.bootstrapTimeMs > 1000) {
|
|
337
|
+
issues.push(`Bootstrap time ${metrics.bootstrapTimeMs}ms exceeds 1000ms target`);
|
|
338
|
+
}
|
|
339
|
+
// Goal: 80% context from ≤5 documents
|
|
340
|
+
if (metrics.documentsLoaded > 5) {
|
|
341
|
+
issues.push(`Loaded ${metrics.documentsLoaded} documents, target is ≤5 for 80% context`);
|
|
342
|
+
}
|
|
343
|
+
// Goal: 70% token reduction
|
|
344
|
+
if (metrics.tokenReductionPercent < 70) {
|
|
345
|
+
issues.push(`Token reduction ${metrics.tokenReductionPercent}% below 70% target`);
|
|
346
|
+
}
|
|
347
|
+
return {
|
|
348
|
+
meetsGoals: issues.length === 0,
|
|
349
|
+
issues
|
|
350
|
+
};
|
|
351
|
+
}
|
|
352
|
+
/**
|
|
353
|
+
* Reset loader state (for testing)
|
|
354
|
+
*/
|
|
355
|
+
reset() {
|
|
356
|
+
this.loaded.clear();
|
|
357
|
+
this.visited.clear();
|
|
358
|
+
this.config = null;
|
|
359
|
+
this.startTime = Date.now();
|
|
360
|
+
this.cacheHits = 0;
|
|
361
|
+
this.maxReferenceDepth = 0;
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
/**
|
|
365
|
+
* Convenience function: Load context strategically
|
|
366
|
+
*/
|
|
367
|
+
export async function loadContextStrategic(options = {}) {
|
|
368
|
+
const loader = new ContextLoader();
|
|
369
|
+
return loader.loadContextStrategic(options);
|
|
370
|
+
}
|
|
371
|
+
/**
|
|
372
|
+
* Format context summary for display
|
|
373
|
+
*/
|
|
374
|
+
export function formatContextSummary(context) {
|
|
375
|
+
const { metrics, loadOrder, documents } = context;
|
|
376
|
+
const lines = [];
|
|
377
|
+
lines.push(`📊 Context Loading Summary`);
|
|
378
|
+
lines.push(` Work Mode: ${context.workMode}`);
|
|
379
|
+
lines.push(` Documents: ${metrics.documentsLoaded}`);
|
|
380
|
+
lines.push(` Tokens: ${metrics.totalTokens.toLocaleString()}`);
|
|
381
|
+
lines.push(` Time: ${metrics.bootstrapTimeMs}ms`);
|
|
382
|
+
lines.push(` Token Reduction: ${metrics.tokenReductionPercent}%`);
|
|
383
|
+
lines.push(` Reference Depth: ${metrics.referenceDepth}`);
|
|
384
|
+
lines.push(` Cache Hits: ${metrics.cacheHits}`);
|
|
385
|
+
lines.push('');
|
|
386
|
+
lines.push(`📄 Load Order:`);
|
|
387
|
+
loadOrder.forEach((item, index) => {
|
|
388
|
+
lines.push(` ${index + 1}. ${item}`);
|
|
389
|
+
});
|
|
390
|
+
return lines.join('\n');
|
|
391
|
+
}
|
|
392
|
+
/**
|
|
393
|
+
* Get document content by path (convenience)
|
|
394
|
+
*/
|
|
395
|
+
export function getDocumentContent(context, path) {
|
|
396
|
+
const doc = context.documents.get(path);
|
|
397
|
+
return doc?.content || null;
|
|
398
|
+
}
|
|
399
|
+
/**
|
|
400
|
+
* Get all loaded document paths
|
|
401
|
+
*/
|
|
402
|
+
export function getLoadedPaths(context) {
|
|
403
|
+
return Array.from(context.documents.keys());
|
|
404
|
+
}
|
|
405
|
+
/**
|
|
406
|
+
* Filter documents by type
|
|
407
|
+
*/
|
|
408
|
+
export function getDocumentsByType(context, type) {
|
|
409
|
+
return Array.from(context.documents.values()).filter(doc => doc.type === type);
|
|
410
|
+
}
|
|
411
|
+
//# sourceMappingURL=context-loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-loader.js","sourceRoot":"","sources":["../../src/utils/context-loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileType: utility
|
|
3
|
+
* @status: current
|
|
4
|
+
* @updated: 2025-11-02
|
|
5
|
+
* @tags: [write-dispatch, logging, session-log, adr-041]
|
|
6
|
+
* @related: [../core/session-log-manager.ts, ../../../../src/write-dispatcher.ts, ../../../../src/adapters/graph-adapter.ts]
|
|
7
|
+
* @priority: high
|
|
8
|
+
* @complexity: medium
|
|
9
|
+
* @dependencies: []
|
|
10
|
+
*/
|
|
11
|
+
import { type LogEntry } from '../core/session-log-manager.js';
|
|
12
|
+
/**
|
|
13
|
+
* Write log entry using WriteDispatcher if available, fallback to SessionLogManager
|
|
14
|
+
*
|
|
15
|
+
* Strategy:
|
|
16
|
+
* 1. If dispatcher is initialized and enabled, use it for dual-write
|
|
17
|
+
* 2. Otherwise, use SessionLogManager directly (legacy mode)
|
|
18
|
+
*
|
|
19
|
+
* This enables gradual migration to graph-first writes while maintaining
|
|
20
|
+
* backward compatibility.
|
|
21
|
+
*/
|
|
22
|
+
export declare function appendLogEntry(sessionDir: string, entry: LogEntry, userEmail?: string): Promise<void>;
|
|
23
|
+
/**
|
|
24
|
+
* Initialize WriteDispatcher for CLI commands
|
|
25
|
+
*
|
|
26
|
+
* Call this at the start of commands that need write dispatch.
|
|
27
|
+
* Safe to call multiple times (idempotent).
|
|
28
|
+
*/
|
|
29
|
+
export declare function initializeWriteDispatcher(ginkoDir: string): Promise<void>;
|
|
30
|
+
//# sourceMappingURL=dispatcher-logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dispatcher-logger.d.ts","sourceRoot":"","sources":["../../src/utils/dispatcher-logger.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAEL,KAAK,QAAQ,EACd,MAAM,gCAAgC,CAAC;AAOxC;;;;;;;;;GASG;AACH,wBAAsB,cAAc,CAClC,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,QAAQ,EACf,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC,CAwBf;AA+DD;;;;;GAKG;AACH,wBAAsB,yBAAyB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAyC/E"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileType: utility
|
|
3
|
+
* @status: current
|
|
4
|
+
* @updated: 2025-11-02
|
|
5
|
+
* @tags: [write-dispatch, logging, session-log, adr-041]
|
|
6
|
+
* @related: [../core/session-log-manager.ts, ../../../../src/write-dispatcher.ts, ../../../../src/adapters/graph-adapter.ts]
|
|
7
|
+
* @priority: high
|
|
8
|
+
* @complexity: medium
|
|
9
|
+
* @dependencies: []
|
|
10
|
+
*/
|
|
11
|
+
import { SessionLogManager, } from '../core/session-log-manager.js';
|
|
12
|
+
import { getDispatcher, isDispatcherInitialized, } from '../lib/write-dispatcher/write-dispatcher.js';
|
|
13
|
+
/**
|
|
14
|
+
* Write log entry using WriteDispatcher if available, fallback to SessionLogManager
|
|
15
|
+
*
|
|
16
|
+
* Strategy:
|
|
17
|
+
* 1. If dispatcher is initialized and enabled, use it for dual-write
|
|
18
|
+
* 2. Otherwise, use SessionLogManager directly (legacy mode)
|
|
19
|
+
*
|
|
20
|
+
* This enables gradual migration to graph-first writes while maintaining
|
|
21
|
+
* backward compatibility.
|
|
22
|
+
*/
|
|
23
|
+
export async function appendLogEntry(sessionDir, entry, userEmail) {
|
|
24
|
+
// Check if dispatcher is available
|
|
25
|
+
if (isDispatcherInitialized()) {
|
|
26
|
+
try {
|
|
27
|
+
const dispatcher = getDispatcher();
|
|
28
|
+
// Convert LogEntry to KnowledgeDocument
|
|
29
|
+
const document = convertLogEntryToDocument(entry, userEmail);
|
|
30
|
+
// Dispatch write (will route to graph and/or local based on config)
|
|
31
|
+
await dispatcher.dispatch(document);
|
|
32
|
+
return; // Success via dispatcher
|
|
33
|
+
}
|
|
34
|
+
catch (error) {
|
|
35
|
+
// Log dispatcher error but don't block
|
|
36
|
+
console.warn('[DispatcherLogger] Dispatcher write failed, falling back to local:', error instanceof Error ? error.message : String(error));
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
// Fallback to SessionLogManager (legacy mode or dispatcher failure)
|
|
40
|
+
await SessionLogManager.appendEntry(sessionDir, entry);
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Convert LogEntry to KnowledgeDocument for dispatcher
|
|
44
|
+
*/
|
|
45
|
+
function convertLogEntryToDocument(entry, userEmail) {
|
|
46
|
+
// Generate unique ID for log entry
|
|
47
|
+
const timestamp = new Date(entry.timestamp).getTime();
|
|
48
|
+
const id = `log_${timestamp}_${entry.category}`;
|
|
49
|
+
// Generate title from description (first 60 chars)
|
|
50
|
+
const title = entry.description.substring(0, 60).trim() + (entry.description.length > 60 ? '...' : '');
|
|
51
|
+
// Format content with all entry details
|
|
52
|
+
const content = formatLogEntryContent(entry);
|
|
53
|
+
return {
|
|
54
|
+
type: 'LogEntry',
|
|
55
|
+
id,
|
|
56
|
+
title,
|
|
57
|
+
content,
|
|
58
|
+
data: {
|
|
59
|
+
category: entry.category,
|
|
60
|
+
impact: entry.impact,
|
|
61
|
+
timestamp: entry.timestamp,
|
|
62
|
+
},
|
|
63
|
+
metadata: {
|
|
64
|
+
category: entry.category,
|
|
65
|
+
impact: entry.impact,
|
|
66
|
+
files: entry.files || [],
|
|
67
|
+
timestamp: entry.timestamp,
|
|
68
|
+
userEmail,
|
|
69
|
+
tags: [entry.category, entry.impact],
|
|
70
|
+
},
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Format log entry content as markdown
|
|
75
|
+
*/
|
|
76
|
+
function formatLogEntryContent(entry) {
|
|
77
|
+
const timestamp = new Date(entry.timestamp).toLocaleTimeString('en-US', {
|
|
78
|
+
hour: '2-digit',
|
|
79
|
+
minute: '2-digit',
|
|
80
|
+
hour12: false,
|
|
81
|
+
});
|
|
82
|
+
const filesSection = entry.files && entry.files.length > 0
|
|
83
|
+
? `\n\n**Files:**\n${entry.files.map(f => `- ${f}`).join('\n')}`
|
|
84
|
+
: '';
|
|
85
|
+
return `# [${entry.category.toUpperCase()}] ${timestamp}
|
|
86
|
+
|
|
87
|
+
${entry.description}${filesSection}
|
|
88
|
+
|
|
89
|
+
**Impact:** ${entry.impact}
|
|
90
|
+
**Timestamp:** ${entry.timestamp}
|
|
91
|
+
`;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Initialize WriteDispatcher for CLI commands
|
|
95
|
+
*
|
|
96
|
+
* Call this at the start of commands that need write dispatch.
|
|
97
|
+
* Safe to call multiple times (idempotent).
|
|
98
|
+
*/
|
|
99
|
+
export async function initializeWriteDispatcher(ginkoDir) {
|
|
100
|
+
if (isDispatcherInitialized()) {
|
|
101
|
+
return; // Already initialized
|
|
102
|
+
}
|
|
103
|
+
try {
|
|
104
|
+
const { initializeDispatcher, } = await import('../lib/write-dispatcher/write-dispatcher.js');
|
|
105
|
+
const { createGraphAdapterFromEnv, } = await import('../lib/write-dispatcher/adapters/graph-adapter.js');
|
|
106
|
+
const { createLocalAdapterFromEnv, } = await import('../lib/write-dispatcher/adapters/local-adapter.js');
|
|
107
|
+
// Initialize dispatcher with graph as primary
|
|
108
|
+
const dispatcher = initializeDispatcher({
|
|
109
|
+
primaryAdapter: 'graph',
|
|
110
|
+
dualWrite: process.env.GINKO_DUAL_WRITE === 'true',
|
|
111
|
+
});
|
|
112
|
+
// Register adapters
|
|
113
|
+
const graphAdapter = createGraphAdapterFromEnv();
|
|
114
|
+
const localAdapter = await createLocalAdapterFromEnv(ginkoDir);
|
|
115
|
+
dispatcher.registerAdapter(graphAdapter);
|
|
116
|
+
dispatcher.registerAdapter(localAdapter);
|
|
117
|
+
// Validate configuration
|
|
118
|
+
const validation = dispatcher.validate();
|
|
119
|
+
if (!validation.valid) {
|
|
120
|
+
console.warn('[DispatcherLogger] Dispatcher validation warnings:', validation.errors);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
catch (error) {
|
|
124
|
+
// Dispatcher initialization failed - will fallback to SessionLogManager
|
|
125
|
+
console.warn('[DispatcherLogger] Failed to initialize dispatcher, using local writes only:', error instanceof Error ? error.message : String(error));
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=dispatcher-logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dispatcher-logger.js","sourceRoot":"","sources":["../../src/utils/dispatcher-logger.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EACL,iBAAiB,GAElB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EACL,aAAa,EACb,uBAAuB,GAExB,MAAM,6CAA6C,CAAC;AAErD;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,UAAkB,EAClB,KAAe,EACf,SAAkB;IAElB,mCAAmC;IACnC,IAAI,uBAAuB,EAAE,EAAE,CAAC;QAC9B,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,aAAa,EAAE,CAAC;YAEnC,wCAAwC;YACxC,MAAM,QAAQ,GAAsB,yBAAyB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;YAEhF,oEAAoE;YACpE,MAAM,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YAEpC,OAAO,CAAC,yBAAyB;QACnC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,uCAAuC;YACvC,OAAO,CAAC,IAAI,CACV,oEAAoE,EACpE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CACvD,CAAC;QACJ,CAAC;IACH,CAAC;IAED,oEAAoE;IACpE,MAAM,iBAAiB,CAAC,WAAW,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;AACzD,CAAC;AAED;;GAEG;AACH,SAAS,yBAAyB,CAChC,KAAe,EACf,SAAkB;IAElB,mCAAmC;IACnC,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC;IACtD,MAAM,EAAE,GAAG,OAAO,SAAS,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;IAEhD,mDAAmD;IACnD,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAEvG,wCAAwC;IACxC,MAAM,OAAO,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;IAE7C,OAAO;QACL,IAAI,EAAE,UAAU;QAChB,EAAE;QACF,KAAK;QACL,OAAO;QACP,IAAI,EAAE;YACJ,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,SAAS,EAAE,KAAK,CAAC,SAAS;SAC3B;QACD,QAAQ,EAAE;YACR,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,EAAE;YACxB,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,SAAS;YACT,IAAI,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC;SACrC;KACF,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,qBAAqB,CAAC,KAAe;IAC5C,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,kBAAkB,CAAC,OAAO,EAAE;QACtE,IAAI,EAAE,SAAS;QACf,MAAM,EAAE,SAAS;QACjB,MAAM,EAAE,KAAK;KACd,CAAC,CAAC;IAEH,MAAM,YAAY,GAAG,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;QACxD,CAAC,CAAC,mBAAmB,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;QAChE,CAAC,CAAC,EAAE,CAAC;IAEP,OAAO,MAAM,KAAK,CAAC,QAAQ,CAAC,WAAW,EAAE,KAAK,SAAS;;EAEvD,KAAK,CAAC,WAAW,GAAG,YAAY;;cAEpB,KAAK,CAAC,MAAM;iBACT,KAAK,CAAC,SAAS;CAC/B,CAAC;AACF,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAAC,QAAgB;IAC9D,IAAI,uBAAuB,EAAE,EAAE,CAAC;QAC9B,OAAO,CAAC,sBAAsB;IAChC,CAAC;IAED,IAAI,CAAC;QACH,MAAM,EACJ,oBAAoB,GACrB,GAAG,MAAM,MAAM,CAAC,6CAA6C,CAAC,CAAC;QAChE,MAAM,EACJ,yBAAyB,GAC1B,GAAG,MAAM,MAAM,CAAC,mDAAmD,CAAC,CAAC;QACtE,MAAM,EACJ,yBAAyB,GAC1B,GAAG,MAAM,MAAM,CAAC,mDAAmD,CAAC,CAAC;QAEtE,8CAA8C;QAC9C,MAAM,UAAU,GAAG,oBAAoB,CAAC;YACtC,cAAc,EAAE,OAAO;YACvB,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB,KAAK,MAAM;SACnD,CAAC,CAAC;QAEH,oBAAoB;QACpB,MAAM,YAAY,GAAG,yBAAyB,EAAE,CAAC;QACjD,MAAM,YAAY,GAAG,MAAM,yBAAyB,CAAC,QAAQ,CAAC,CAAC;QAE/D,UAAU,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;QACzC,UAAU,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;QAEzC,yBAAyB;QACzB,MAAM,UAAU,GAAG,UAAU,CAAC,QAAQ,EAAE,CAAC;QACzC,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;YACtB,OAAO,CAAC,IAAI,CAAC,oDAAoD,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;QACxF,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,wEAAwE;QACxE,OAAO,CAAC,IAAI,CACV,8EAA8E,EAC9E,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CACvD,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -9,8 +9,9 @@
|
|
|
9
9
|
* @dependencies: [fs-extra, path]
|
|
10
10
|
*/
|
|
11
11
|
/**
|
|
12
|
-
* Find the ginko root directory
|
|
13
|
-
*
|
|
12
|
+
* Find the ginko root directory
|
|
13
|
+
* Prefers git repository root for monorepo compatibility,
|
|
14
|
+
* falls back to walking up directory tree
|
|
14
15
|
*
|
|
15
16
|
* @param startDir - Directory to start searching from (defaults to cwd)
|
|
16
17
|
* @returns Path to ginko root directory, or null if not found
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ginko-root.d.ts","sourceRoot":"","sources":["../../src/utils/ginko-root.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;
|
|
1
|
+
{"version":3,"file":"ginko-root.d.ts","sourceRoot":"","sources":["../../src/utils/ginko-root.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAyBH;;;;;;;GAOG;AACH,wBAAsB,aAAa,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA8C7E;AAED;;;;;;GAMG;AACH,wBAAsB,gBAAgB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAQzE;AAED;;;;;GAKG;AACH,wBAAsB,cAAc,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAGxE;AAED;;;;;;;GAOG;AACH,wBAAsB,YAAY,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAG3F;AAED;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAG9F"}
|
package/dist/utils/ginko-root.js
CHANGED
|
@@ -10,14 +10,47 @@
|
|
|
10
10
|
*/
|
|
11
11
|
import fs from 'fs-extra';
|
|
12
12
|
import path from 'path';
|
|
13
|
+
import { execSync } from 'child_process';
|
|
13
14
|
/**
|
|
14
|
-
*
|
|
15
|
-
*
|
|
15
|
+
* Get git repository root using git command
|
|
16
|
+
*
|
|
17
|
+
* @param startDir - Directory to start searching from (defaults to cwd)
|
|
18
|
+
* @returns Path to git root directory, or null if not in a git repo
|
|
19
|
+
*/
|
|
20
|
+
function getGitRoot(startDir) {
|
|
21
|
+
try {
|
|
22
|
+
const gitRoot = execSync('git rev-parse --show-toplevel', {
|
|
23
|
+
encoding: 'utf8',
|
|
24
|
+
cwd: startDir || process.cwd(),
|
|
25
|
+
stdio: ['pipe', 'pipe', 'ignore'] // Suppress stderr
|
|
26
|
+
}).trim();
|
|
27
|
+
return path.resolve(gitRoot);
|
|
28
|
+
}
|
|
29
|
+
catch (error) {
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Find the ginko root directory
|
|
35
|
+
* Prefers git repository root for monorepo compatibility,
|
|
36
|
+
* falls back to walking up directory tree
|
|
16
37
|
*
|
|
17
38
|
* @param startDir - Directory to start searching from (defaults to cwd)
|
|
18
39
|
* @returns Path to ginko root directory, or null if not found
|
|
19
40
|
*/
|
|
20
41
|
export async function findGinkoRoot(startDir) {
|
|
42
|
+
// First, try to use git repository root (preferred for monorepos)
|
|
43
|
+
const gitRoot = getGitRoot(startDir);
|
|
44
|
+
if (gitRoot) {
|
|
45
|
+
const gitGinkoPath = path.join(gitRoot, '.ginko');
|
|
46
|
+
if (await fs.pathExists(gitGinkoPath)) {
|
|
47
|
+
const stats = await fs.stat(gitGinkoPath);
|
|
48
|
+
if (stats.isDirectory()) {
|
|
49
|
+
return gitRoot;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
// Fall back to walking up directory tree (for non-git projects)
|
|
21
54
|
let currentDir = startDir || process.cwd();
|
|
22
55
|
const root = path.parse(currentDir).root;
|
|
23
56
|
while (currentDir !== root) {
|