cognitive-core 0.2.0 → 0.2.2
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/.claude/settings.json +111 -2
- package/.sessionlog/settings.json +4 -0
- package/dist/atlas.d.ts +10 -0
- package/dist/atlas.d.ts.map +1 -1
- package/dist/atlas.js +65 -0
- package/dist/atlas.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -1
- package/dist/index.js.map +1 -1
- package/dist/learning/index.d.ts +1 -1
- package/dist/learning/index.d.ts.map +1 -1
- package/dist/learning/index.js.map +1 -1
- package/dist/learning/pipeline.d.ts +4 -31
- package/dist/learning/pipeline.d.ts.map +1 -1
- package/dist/learning/pipeline.js +12 -64
- package/dist/learning/pipeline.js.map +1 -1
- package/dist/learning/unified-pipeline.d.ts +30 -0
- package/dist/learning/unified-pipeline.d.ts.map +1 -1
- package/dist/learning/unified-pipeline.js +207 -0
- package/dist/learning/unified-pipeline.js.map +1 -1
- package/dist/memory/candidate-retrieval.d.ts.map +1 -1
- package/dist/memory/candidate-retrieval.js +3 -1
- package/dist/memory/candidate-retrieval.js.map +1 -1
- package/dist/memory/curated-loader.d.ts +21 -4
- package/dist/memory/curated-loader.d.ts.map +1 -1
- package/dist/memory/curated-loader.js +53 -16
- package/dist/memory/curated-loader.js.map +1 -1
- package/dist/memory/index.d.ts +2 -1
- package/dist/memory/index.d.ts.map +1 -1
- package/dist/memory/index.js +3 -1
- package/dist/memory/index.js.map +1 -1
- package/dist/memory/playbook.d.ts +6 -0
- package/dist/memory/playbook.d.ts.map +1 -1
- package/dist/memory/playbook.js +15 -0
- package/dist/memory/playbook.js.map +1 -1
- package/dist/memory/source-resolver.d.ts +120 -0
- package/dist/memory/source-resolver.d.ts.map +1 -0
- package/dist/memory/source-resolver.js +300 -0
- package/dist/memory/source-resolver.js.map +1 -0
- package/dist/types/config.d.ts +141 -0
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/config.js +40 -0
- package/dist/types/config.js.map +1 -1
- package/dist/types/index.d.ts +1 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +1 -1
- package/dist/types/index.js.map +1 -1
- package/dist/utils/error-classifier.js +8 -8
- package/dist/utils/error-classifier.js.map +1 -1
- package/dist/workspace/efficacy-toolkit.d.ts +164 -0
- package/dist/workspace/efficacy-toolkit.d.ts.map +1 -0
- package/dist/workspace/efficacy-toolkit.js +281 -0
- package/dist/workspace/efficacy-toolkit.js.map +1 -0
- package/dist/workspace/index.d.ts +2 -1
- package/dist/workspace/index.d.ts.map +1 -1
- package/dist/workspace/index.js +3 -1
- package/dist/workspace/index.js.map +1 -1
- package/dist/workspace/templates/index.d.ts +3 -0
- package/dist/workspace/templates/index.d.ts.map +1 -1
- package/dist/workspace/templates/index.js +6 -0
- package/dist/workspace/templates/index.js.map +1 -1
- package/dist/workspace/templates/playbook-decay-detection.d.ts +46 -0
- package/dist/workspace/templates/playbook-decay-detection.d.ts.map +1 -0
- package/dist/workspace/templates/playbook-decay-detection.js +197 -0
- package/dist/workspace/templates/playbook-decay-detection.js.map +1 -0
- package/dist/workspace/templates/playbook-efficacy-audit.d.ts +46 -0
- package/dist/workspace/templates/playbook-efficacy-audit.d.ts.map +1 -0
- package/dist/workspace/templates/playbook-efficacy-audit.js +160 -0
- package/dist/workspace/templates/playbook-efficacy-audit.js.map +1 -0
- package/dist/workspace/templates/playbook-lifecycle-review.d.ts +51 -0
- package/dist/workspace/templates/playbook-lifecycle-review.d.ts.map +1 -0
- package/dist/workspace/templates/playbook-lifecycle-review.js +187 -0
- package/dist/workspace/templates/playbook-lifecycle-review.js.map +1 -0
- package/dist/workspace/types.d.ts +12 -54
- package/dist/workspace/types.d.ts.map +1 -1
- package/dist/workspace/types.js.map +1 -1
- package/package.json +8 -2
- package/playbooks/compound-engineering/adversarial-review.json +51 -0
- package/playbooks/compound-engineering/agent-native-architecture.json +59 -0
- package/playbooks/compound-engineering/agent-native-review.json +54 -0
- package/playbooks/compound-engineering/api-contract-review.json +52 -0
- package/playbooks/compound-engineering/brainstorm-requirements.json +55 -0
- package/playbooks/compound-engineering/bug-reproduction.json +62 -0
- package/playbooks/compound-engineering/confidence-calibration.json +49 -0
- package/playbooks/compound-engineering/correctness-review.json +49 -0
- package/playbooks/compound-engineering/data-migration-safety.json +59 -0
- package/playbooks/compound-engineering/deployment-verification.json +63 -0
- package/playbooks/compound-engineering/error-recovery-patterns.json +53 -0
- package/playbooks/compound-engineering/implementation-planning.json +64 -0
- package/playbooks/compound-engineering/issue-pattern-analysis.json +53 -0
- package/playbooks/compound-engineering/knowledge-compounding.json +63 -0
- package/playbooks/compound-engineering/learnings-research.json +54 -0
- package/playbooks/compound-engineering/maintainability-review.json +49 -0
- package/playbooks/compound-engineering/performance-review.json +54 -0
- package/playbooks/compound-engineering/plan-adversarial-review.json +56 -0
- package/playbooks/compound-engineering/plan-feasibility-review.json +56 -0
- package/playbooks/compound-engineering/project-standards-review.json +52 -0
- package/playbooks/compound-engineering/reliability-review.json +53 -0
- package/playbooks/compound-engineering/review-orchestration.json +64 -0
- package/playbooks/compound-engineering/security-review.json +54 -0
- package/playbooks/compound-engineering/systematic-execution.json +64 -0
- package/playbooks/compound-engineering/testing-review.json +50 -0
- package/src/atlas.ts +96 -0
- package/src/index.ts +27 -0
- package/src/learning/index.ts +1 -0
- package/src/learning/unified-pipeline.ts +271 -1
- package/src/memory/candidate-retrieval.ts +2 -1
- package/src/memory/curated-loader.ts +69 -16
- package/src/memory/index.ts +16 -0
- package/src/memory/playbook.ts +19 -0
- package/src/memory/source-resolver.ts +422 -0
- package/src/types/config.ts +46 -0
- package/src/types/index.ts +4 -0
- package/src/utils/error-classifier.ts +8 -8
- package/src/workspace/efficacy-toolkit.ts +496 -0
- package/src/workspace/index.ts +29 -0
- package/src/workspace/templates/index.ts +24 -0
- package/src/workspace/templates/playbook-decay-detection.ts +272 -0
- package/src/workspace/templates/playbook-efficacy-audit.ts +246 -0
- package/src/workspace/templates/playbook-lifecycle-review.ts +274 -0
- package/src/workspace/types.ts +22 -78
- package/tests/fixtures/behavioral-trajectories.ts +210 -0
- package/tests/integration/curated-sources-e2e.test.ts +502 -0
- package/tests/integration/pipeline-data-correctness.test.ts +794 -0
- package/tests/learning/meta-learner.test.ts +418 -0
- package/tests/learning/pipeline-memory-updates.test.ts +721 -0
- package/tests/learning/unified-pipeline-efficacy.test.ts +232 -0
- package/tests/memory/candidate-retrieval.test.ts +167 -0
- package/tests/memory/compound-engineering-seed.test.ts +338 -0
- package/tests/memory/curated-loader-extended.test.ts +225 -0
- package/tests/memory/meta.test.ts +399 -0
- package/tests/memory/playbook-quality-validation.test.ts +430 -0
- package/tests/memory/source-resolver.test.ts +700 -0
- package/tests/search/evaluator.test.ts +257 -0
- package/tests/search/verification-runner.test.ts +357 -0
- package/tests/utils/error-classifier.test.ts +149 -0
- package/tests/utils/trajectory-helpers.test.ts +163 -0
- package/tests/workspace/efficacy-toolkit.test.ts +404 -0
- package/tests/workspace/templates/playbook-efficacy.test.ts +377 -0
- package/.claude/settings.local.json +0 -11
- package/dist/learning/llm-extractor.d.ts +0 -88
- package/dist/learning/llm-extractor.d.ts.map +0 -1
- package/dist/learning/llm-extractor.js +0 -372
- package/dist/learning/llm-extractor.js.map +0 -1
- package/dist/learning/loop-coordinator.d.ts +0 -61
- package/dist/learning/loop-coordinator.d.ts.map +0 -1
- package/dist/learning/loop-coordinator.js +0 -96
- package/dist/learning/loop-coordinator.js.map +0 -1
- package/references/agent-workspace/CLAUDE.md +0 -74
- package/references/agent-workspace/README.md +0 -587
- package/references/agent-workspace/media/banner.png +0 -0
- package/references/agent-workspace/package-lock.json +0 -2061
- package/references/agent-workspace/package.json +0 -54
- package/references/agent-workspace/src/handle.ts +0 -122
- package/references/agent-workspace/src/index.ts +0 -32
- package/references/agent-workspace/src/manager.ts +0 -102
- package/references/agent-workspace/src/readers/json.ts +0 -71
- package/references/agent-workspace/src/readers/markdown.ts +0 -37
- package/references/agent-workspace/src/readers/raw.ts +0 -27
- package/references/agent-workspace/src/types.ts +0 -68
- package/references/agent-workspace/src/validation.ts +0 -93
- package/references/agent-workspace/src/writers/json.ts +0 -17
- package/references/agent-workspace/src/writers/markdown.ts +0 -27
- package/references/agent-workspace/src/writers/raw.ts +0 -22
- package/references/agent-workspace/tests/errors.test.ts +0 -652
- package/references/agent-workspace/tests/handle.test.ts +0 -144
- package/references/agent-workspace/tests/manager.test.ts +0 -124
- package/references/agent-workspace/tests/readers.test.ts +0 -205
- package/references/agent-workspace/tests/validation.test.ts +0 -196
- package/references/agent-workspace/tests/writers.test.ts +0 -108
- package/references/agent-workspace/tsconfig.json +0 -20
- package/references/agent-workspace/tsup.config.ts +0 -9
- package/references/minimem/.claude/settings.json +0 -7
- package/references/minimem/.sudocode/issues.jsonl +0 -18
- package/references/minimem/.sudocode/specs.jsonl +0 -1
- package/references/minimem/CLAUDE.md +0 -310
- package/references/minimem/README.md +0 -556
- package/references/minimem/claude-plugin/.claude-plugin/plugin.json +0 -10
- package/references/minimem/claude-plugin/.mcp.json +0 -7
- package/references/minimem/claude-plugin/README.md +0 -158
- package/references/minimem/claude-plugin/commands/recall.md +0 -47
- package/references/minimem/claude-plugin/commands/remember.md +0 -41
- package/references/minimem/claude-plugin/hooks/__tests__/hooks.test.ts +0 -272
- package/references/minimem/claude-plugin/hooks/hooks.json +0 -27
- package/references/minimem/claude-plugin/hooks/session-end.sh +0 -86
- package/references/minimem/claude-plugin/hooks/session-start.sh +0 -85
- package/references/minimem/claude-plugin/skills/memory/SKILL.md +0 -108
- package/references/minimem/package-lock.json +0 -5373
- package/references/minimem/package.json +0 -60
- package/references/minimem/scripts/postbuild.js +0 -35
- package/references/minimem/src/__tests__/edge-cases.test.ts +0 -371
- package/references/minimem/src/__tests__/errors.test.ts +0 -265
- package/references/minimem/src/__tests__/helpers.ts +0 -199
- package/references/minimem/src/__tests__/internal.test.ts +0 -407
- package/references/minimem/src/__tests__/knowledge.test.ts +0 -287
- package/references/minimem/src/__tests__/minimem.integration.test.ts +0 -1127
- package/references/minimem/src/__tests__/session.test.ts +0 -190
- package/references/minimem/src/cli/__tests__/commands.test.ts +0 -759
- package/references/minimem/src/cli/commands/__tests__/conflicts.test.ts +0 -141
- package/references/minimem/src/cli/commands/append.ts +0 -76
- package/references/minimem/src/cli/commands/config.ts +0 -262
- package/references/minimem/src/cli/commands/conflicts.ts +0 -413
- package/references/minimem/src/cli/commands/daemon.ts +0 -169
- package/references/minimem/src/cli/commands/index.ts +0 -12
- package/references/minimem/src/cli/commands/init.ts +0 -88
- package/references/minimem/src/cli/commands/mcp.ts +0 -177
- package/references/minimem/src/cli/commands/push-pull.ts +0 -213
- package/references/minimem/src/cli/commands/search.ts +0 -158
- package/references/minimem/src/cli/commands/status.ts +0 -84
- package/references/minimem/src/cli/commands/sync-init.ts +0 -290
- package/references/minimem/src/cli/commands/sync.ts +0 -70
- package/references/minimem/src/cli/commands/upsert.ts +0 -197
- package/references/minimem/src/cli/config.ts +0 -584
- package/references/minimem/src/cli/index.ts +0 -264
- package/references/minimem/src/cli/shared.ts +0 -161
- package/references/minimem/src/cli/sync/__tests__/central.test.ts +0 -152
- package/references/minimem/src/cli/sync/__tests__/conflicts.test.ts +0 -209
- package/references/minimem/src/cli/sync/__tests__/daemon.test.ts +0 -118
- package/references/minimem/src/cli/sync/__tests__/detection.test.ts +0 -207
- package/references/minimem/src/cli/sync/__tests__/integration.test.ts +0 -476
- package/references/minimem/src/cli/sync/__tests__/registry.test.ts +0 -363
- package/references/minimem/src/cli/sync/__tests__/state.test.ts +0 -255
- package/references/minimem/src/cli/sync/__tests__/validation.test.ts +0 -193
- package/references/minimem/src/cli/sync/__tests__/watcher.test.ts +0 -178
- package/references/minimem/src/cli/sync/central.ts +0 -292
- package/references/minimem/src/cli/sync/conflicts.ts +0 -204
- package/references/minimem/src/cli/sync/daemon.ts +0 -407
- package/references/minimem/src/cli/sync/detection.ts +0 -138
- package/references/minimem/src/cli/sync/index.ts +0 -107
- package/references/minimem/src/cli/sync/operations.ts +0 -373
- package/references/minimem/src/cli/sync/registry.ts +0 -279
- package/references/minimem/src/cli/sync/state.ts +0 -355
- package/references/minimem/src/cli/sync/validation.ts +0 -206
- package/references/minimem/src/cli/sync/watcher.ts +0 -234
- package/references/minimem/src/cli/version.ts +0 -34
- package/references/minimem/src/core/index.ts +0 -9
- package/references/minimem/src/core/indexer.ts +0 -628
- package/references/minimem/src/core/searcher.ts +0 -221
- package/references/minimem/src/db/schema.ts +0 -183
- package/references/minimem/src/db/sqlite-vec.ts +0 -24
- package/references/minimem/src/embeddings/__tests__/embeddings.test.ts +0 -431
- package/references/minimem/src/embeddings/batch-gemini.ts +0 -392
- package/references/minimem/src/embeddings/batch-openai.ts +0 -409
- package/references/minimem/src/embeddings/embeddings.ts +0 -434
- package/references/minimem/src/index.ts +0 -109
- package/references/minimem/src/internal.ts +0 -299
- package/references/minimem/src/minimem.ts +0 -1276
- package/references/minimem/src/search/__tests__/hybrid.test.ts +0 -247
- package/references/minimem/src/search/graph.ts +0 -234
- package/references/minimem/src/search/hybrid.ts +0 -151
- package/references/minimem/src/search/search.ts +0 -256
- package/references/minimem/src/server/__tests__/mcp.test.ts +0 -341
- package/references/minimem/src/server/__tests__/tools.test.ts +0 -364
- package/references/minimem/src/server/mcp.ts +0 -326
- package/references/minimem/src/server/tools.ts +0 -720
- package/references/minimem/src/session.ts +0 -460
- package/references/minimem/tsconfig.json +0 -19
- package/references/minimem/tsup.config.ts +0 -26
- package/references/minimem/vitest.config.ts +0 -24
- package/references/sessionlog/.husky/pre-commit +0 -1
- package/references/sessionlog/.lintstagedrc.json +0 -4
- package/references/sessionlog/.prettierignore +0 -4
- package/references/sessionlog/.prettierrc.json +0 -11
- package/references/sessionlog/LICENSE +0 -21
- package/references/sessionlog/README.md +0 -453
- package/references/sessionlog/eslint.config.js +0 -58
- package/references/sessionlog/package-lock.json +0 -3672
- package/references/sessionlog/package.json +0 -65
- package/references/sessionlog/src/__tests__/agent-hooks.test.ts +0 -570
- package/references/sessionlog/src/__tests__/agent-registry.test.ts +0 -127
- package/references/sessionlog/src/__tests__/claude-code-hooks.test.ts +0 -225
- package/references/sessionlog/src/__tests__/claude-generator.test.ts +0 -46
- package/references/sessionlog/src/__tests__/commit-msg.test.ts +0 -86
- package/references/sessionlog/src/__tests__/cursor-agent.test.ts +0 -224
- package/references/sessionlog/src/__tests__/e2e-live.test.ts +0 -890
- package/references/sessionlog/src/__tests__/event-log.test.ts +0 -183
- package/references/sessionlog/src/__tests__/flush-sentinel.test.ts +0 -105
- package/references/sessionlog/src/__tests__/gemini-agent.test.ts +0 -375
- package/references/sessionlog/src/__tests__/git-hooks.test.ts +0 -78
- package/references/sessionlog/src/__tests__/hook-managers.test.ts +0 -121
- package/references/sessionlog/src/__tests__/lifecycle-tasks.test.ts +0 -759
- package/references/sessionlog/src/__tests__/opencode-agent.test.ts +0 -338
- package/references/sessionlog/src/__tests__/redaction.test.ts +0 -136
- package/references/sessionlog/src/__tests__/session-repo.test.ts +0 -353
- package/references/sessionlog/src/__tests__/session-store.test.ts +0 -166
- package/references/sessionlog/src/__tests__/setup-ccweb.test.ts +0 -466
- package/references/sessionlog/src/__tests__/skill-live.test.ts +0 -461
- package/references/sessionlog/src/__tests__/summarize.test.ts +0 -348
- package/references/sessionlog/src/__tests__/task-plan-e2e.test.ts +0 -610
- package/references/sessionlog/src/__tests__/task-plan-live.test.ts +0 -632
- package/references/sessionlog/src/__tests__/transcript-timestamp.test.ts +0 -121
- package/references/sessionlog/src/__tests__/types.test.ts +0 -166
- package/references/sessionlog/src/__tests__/utils.test.ts +0 -333
- package/references/sessionlog/src/__tests__/validation.test.ts +0 -103
- package/references/sessionlog/src/__tests__/worktree.test.ts +0 -57
- package/references/sessionlog/src/agent/agents/claude-code.ts +0 -1089
- package/references/sessionlog/src/agent/agents/cursor.ts +0 -361
- package/references/sessionlog/src/agent/agents/gemini-cli.ts +0 -632
- package/references/sessionlog/src/agent/agents/opencode.ts +0 -540
- package/references/sessionlog/src/agent/registry.ts +0 -143
- package/references/sessionlog/src/agent/session-types.ts +0 -113
- package/references/sessionlog/src/agent/types.ts +0 -220
- package/references/sessionlog/src/cli.ts +0 -597
- package/references/sessionlog/src/commands/clean.ts +0 -133
- package/references/sessionlog/src/commands/disable.ts +0 -84
- package/references/sessionlog/src/commands/doctor.ts +0 -145
- package/references/sessionlog/src/commands/enable.ts +0 -202
- package/references/sessionlog/src/commands/explain.ts +0 -261
- package/references/sessionlog/src/commands/reset.ts +0 -105
- package/references/sessionlog/src/commands/resume.ts +0 -180
- package/references/sessionlog/src/commands/rewind.ts +0 -195
- package/references/sessionlog/src/commands/setup-ccweb.ts +0 -275
- package/references/sessionlog/src/commands/status.ts +0 -172
- package/references/sessionlog/src/config.ts +0 -165
- package/references/sessionlog/src/events/event-log.ts +0 -126
- package/references/sessionlog/src/git-operations.ts +0 -558
- package/references/sessionlog/src/hooks/git-hooks.ts +0 -165
- package/references/sessionlog/src/hooks/lifecycle.ts +0 -391
- package/references/sessionlog/src/index.ts +0 -650
- package/references/sessionlog/src/security/redaction.ts +0 -283
- package/references/sessionlog/src/session/state-machine.ts +0 -452
- package/references/sessionlog/src/store/checkpoint-store.ts +0 -509
- package/references/sessionlog/src/store/native-store.ts +0 -173
- package/references/sessionlog/src/store/provider-types.ts +0 -99
- package/references/sessionlog/src/store/session-store.ts +0 -266
- package/references/sessionlog/src/strategy/attribution.ts +0 -296
- package/references/sessionlog/src/strategy/common.ts +0 -207
- package/references/sessionlog/src/strategy/content-overlap.ts +0 -228
- package/references/sessionlog/src/strategy/manual-commit.ts +0 -988
- package/references/sessionlog/src/strategy/types.ts +0 -279
- package/references/sessionlog/src/summarize/claude-generator.ts +0 -115
- package/references/sessionlog/src/summarize/summarize.ts +0 -432
- package/references/sessionlog/src/types.ts +0 -508
- package/references/sessionlog/src/utils/chunk-files.ts +0 -49
- package/references/sessionlog/src/utils/commit-message.ts +0 -65
- package/references/sessionlog/src/utils/detect-agent.ts +0 -36
- package/references/sessionlog/src/utils/hook-managers.ts +0 -125
- package/references/sessionlog/src/utils/ide-tags.ts +0 -32
- package/references/sessionlog/src/utils/paths.ts +0 -79
- package/references/sessionlog/src/utils/preview-rewind.ts +0 -80
- package/references/sessionlog/src/utils/rewind-conflict.ts +0 -121
- package/references/sessionlog/src/utils/shadow-branch.ts +0 -109
- package/references/sessionlog/src/utils/string-utils.ts +0 -46
- package/references/sessionlog/src/utils/todo-extract.ts +0 -188
- package/references/sessionlog/src/utils/trailers.ts +0 -187
- package/references/sessionlog/src/utils/transcript-parse.ts +0 -177
- package/references/sessionlog/src/utils/transcript-timestamp.ts +0 -59
- package/references/sessionlog/src/utils/tree-ops.ts +0 -219
- package/references/sessionlog/src/utils/tty.ts +0 -72
- package/references/sessionlog/src/utils/validation.ts +0 -65
- package/references/sessionlog/src/utils/worktree.ts +0 -58
- package/references/sessionlog/src/wire-types.ts +0 -59
- package/references/sessionlog/templates/setup-env.sh +0 -153
- package/references/sessionlog/tsconfig.json +0 -18
- package/references/sessionlog/vitest.config.ts +0 -12
- package/references/skill-tree/.claude/settings.json +0 -6
- package/references/skill-tree/.sudocode/issues.jsonl +0 -19
- package/references/skill-tree/.sudocode/specs.jsonl +0 -3
- package/references/skill-tree/CLAUDE.md +0 -126
- package/references/skill-tree/README.md +0 -372
- package/references/skill-tree/docs/GAPS_v1.md +0 -221
- package/references/skill-tree/docs/INTEGRATION_PLAN.md +0 -467
- package/references/skill-tree/docs/TODOS.md +0 -91
- package/references/skill-tree/docs/anthropic_skill_guide.md +0 -1364
- package/references/skill-tree/docs/design/federated-skill-trees.md +0 -524
- package/references/skill-tree/docs/design/multi-agent-sync.md +0 -759
- package/references/skill-tree/docs/scraper/BRAINSTORM.md +0 -583
- package/references/skill-tree/docs/scraper/POC_PLAN.md +0 -420
- package/references/skill-tree/docs/scraper/README.md +0 -170
- package/references/skill-tree/examples/basic-usage.ts +0 -164
- package/references/skill-tree/package-lock.json +0 -1852
- package/references/skill-tree/package.json +0 -66
- package/references/skill-tree/scraper/README.md +0 -123
- package/references/skill-tree/scraper/docs/DESIGN.md +0 -683
- package/references/skill-tree/scraper/docs/PLAN.md +0 -336
- package/references/skill-tree/scraper/drizzle.config.ts +0 -10
- package/references/skill-tree/scraper/package-lock.json +0 -6329
- package/references/skill-tree/scraper/package.json +0 -68
- package/references/skill-tree/scraper/test/fixtures/invalid-skill/missing-description.md +0 -7
- package/references/skill-tree/scraper/test/fixtures/invalid-skill/missing-name.md +0 -7
- package/references/skill-tree/scraper/test/fixtures/minimal-skill/SKILL.md +0 -27
- package/references/skill-tree/scraper/test/fixtures/skill-json/SKILL.json +0 -21
- package/references/skill-tree/scraper/test/fixtures/skill-with-meta/SKILL.md +0 -54
- package/references/skill-tree/scraper/test/fixtures/skill-with-meta/_meta.json +0 -24
- package/references/skill-tree/scraper/test/fixtures/valid-skill/SKILL.md +0 -93
- package/references/skill-tree/scraper/test/fixtures/valid-skill/_meta.json +0 -22
- package/references/skill-tree/scraper/tsup.config.ts +0 -14
- package/references/skill-tree/scraper/vitest.config.ts +0 -17
- package/references/skill-tree/scripts/convert-to-vitest.ts +0 -166
- package/references/skill-tree/skills/skill-writer/SKILL.md +0 -339
- package/references/skill-tree/skills/skill-writer/references/examples.md +0 -326
- package/references/skill-tree/skills/skill-writer/references/patterns.md +0 -210
- package/references/skill-tree/skills/skill-writer/references/quality-checklist.md +0 -123
- package/references/skill-tree/test/run-all.ts +0 -106
- package/references/skill-tree/test/utils.ts +0 -128
- package/references/skill-tree/vitest.config.ts +0 -16
|
@@ -1,195 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Rewind Command
|
|
3
|
-
*
|
|
4
|
-
* Browse checkpoints and restore session state to a previous point.
|
|
5
|
-
* Supports both shadow branch (temporary) and committed checkpoint rewind.
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
import type { RewindPoint } from '../types.js';
|
|
9
|
-
import { git, hasUncommittedChanges } from '../git-operations.js';
|
|
10
|
-
import { createCheckpointStore } from '../store/checkpoint-store.js';
|
|
11
|
-
|
|
12
|
-
// ============================================================================
|
|
13
|
-
// Types
|
|
14
|
-
// ============================================================================
|
|
15
|
-
|
|
16
|
-
export interface RewindOptions {
|
|
17
|
-
cwd?: string;
|
|
18
|
-
/** Maximum number of rewind points to return */
|
|
19
|
-
limit?: number;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
export interface RewindResult {
|
|
23
|
-
success: boolean;
|
|
24
|
-
message: string;
|
|
25
|
-
rewindPoint?: RewindPoint;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
// ============================================================================
|
|
29
|
-
// Implementation
|
|
30
|
-
// ============================================================================
|
|
31
|
-
|
|
32
|
-
/**
|
|
33
|
-
* List available rewind points
|
|
34
|
-
*/
|
|
35
|
-
export async function listRewindPoints(options: RewindOptions = {}): Promise<RewindPoint[]> {
|
|
36
|
-
const cwd = options.cwd;
|
|
37
|
-
const limit = options.limit ?? 20;
|
|
38
|
-
const points: RewindPoint[] = [];
|
|
39
|
-
|
|
40
|
-
const checkpointStore = createCheckpointStore(cwd);
|
|
41
|
-
|
|
42
|
-
// 1. Shadow branch checkpoints (temporary, most recent)
|
|
43
|
-
const temporaryBranches = await checkpointStore.listTemporary();
|
|
44
|
-
for (const temp of temporaryBranches) {
|
|
45
|
-
points.push({
|
|
46
|
-
id: temp.latestCommit,
|
|
47
|
-
message: `Shadow checkpoint on ${temp.branchName}`,
|
|
48
|
-
date: temp.timestamp,
|
|
49
|
-
isTaskCheckpoint: false,
|
|
50
|
-
isLogsOnly: false,
|
|
51
|
-
sessionID: temp.sessionID,
|
|
52
|
-
sessionCount: 1,
|
|
53
|
-
sessionIDs: temp.sessionID ? [temp.sessionID] : [],
|
|
54
|
-
});
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
// 2. Committed checkpoints (permanent)
|
|
58
|
-
const committed = await checkpointStore.listCommitted(limit);
|
|
59
|
-
for (const cp of committed) {
|
|
60
|
-
const sessionIDs = cp.sessions
|
|
61
|
-
.map((s) => {
|
|
62
|
-
const match = s.metadata.match(/\/(\d+)\/metadata\.json$/);
|
|
63
|
-
return match ? match[1] : '';
|
|
64
|
-
})
|
|
65
|
-
.filter(Boolean);
|
|
66
|
-
|
|
67
|
-
points.push({
|
|
68
|
-
id: cp.checkpointID,
|
|
69
|
-
message: `Checkpoint ${cp.checkpointID.slice(0, 8)}`,
|
|
70
|
-
checkpointID: cp.checkpointID,
|
|
71
|
-
date: new Date().toISOString(), // Will be populated from metadata
|
|
72
|
-
isTaskCheckpoint: false,
|
|
73
|
-
isLogsOnly: true,
|
|
74
|
-
agent: undefined,
|
|
75
|
-
sessionCount: cp.sessions.length,
|
|
76
|
-
sessionIDs,
|
|
77
|
-
});
|
|
78
|
-
|
|
79
|
-
// Read detailed metadata for each committed checkpoint
|
|
80
|
-
for (let i = 0; i < cp.sessions.length; i++) {
|
|
81
|
-
const content = await checkpointStore.readSessionContent(cp.checkpointID, i);
|
|
82
|
-
if (content) {
|
|
83
|
-
const lastPoint = points[points.length - 1];
|
|
84
|
-
lastPoint.date = content.metadata.createdAt;
|
|
85
|
-
lastPoint.agent = content.metadata.agent;
|
|
86
|
-
lastPoint.sessionID = content.metadata.sessionID;
|
|
87
|
-
if (content.metadata.isTask) {
|
|
88
|
-
lastPoint.isTaskCheckpoint = true;
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
// Sort by date (most recent first) and limit
|
|
95
|
-
points.sort((a, b) => new Date(b.date).getTime() - new Date(a.date).getTime());
|
|
96
|
-
return points.slice(0, limit);
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
/**
|
|
100
|
-
* Rewind to a specific point (non-interactive)
|
|
101
|
-
*/
|
|
102
|
-
export async function rewindTo(
|
|
103
|
-
pointID: string,
|
|
104
|
-
options: { cwd?: string; logsOnly?: boolean; reset?: boolean } = {},
|
|
105
|
-
): Promise<RewindResult> {
|
|
106
|
-
const cwd = options.cwd;
|
|
107
|
-
|
|
108
|
-
// Safety check: uncommitted changes
|
|
109
|
-
if (await hasUncommittedChanges(cwd)) {
|
|
110
|
-
return {
|
|
111
|
-
success: false,
|
|
112
|
-
message: 'Cannot rewind: there are uncommitted changes. Commit or stash them first.',
|
|
113
|
-
};
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
// Find the rewind point
|
|
117
|
-
const points = await listRewindPoints({ cwd, limit: 50 });
|
|
118
|
-
const point = points.find((p) => p.id === pointID || p.checkpointID === pointID);
|
|
119
|
-
|
|
120
|
-
if (!point) {
|
|
121
|
-
return { success: false, message: `Rewind point not found: ${pointID}` };
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
if (point.isLogsOnly && !options.logsOnly && !options.reset) {
|
|
125
|
-
return {
|
|
126
|
-
success: false,
|
|
127
|
-
message:
|
|
128
|
-
'This is a logs-only checkpoint. Use --logs-only to restore logs, or --reset to reset the branch.',
|
|
129
|
-
};
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
if (options.reset) {
|
|
133
|
-
// Destructive: git reset --hard
|
|
134
|
-
try {
|
|
135
|
-
await git(['reset', '--hard', pointID], { cwd });
|
|
136
|
-
return {
|
|
137
|
-
success: true,
|
|
138
|
-
message: `Reset to ${pointID.slice(0, 8)}`,
|
|
139
|
-
rewindPoint: point,
|
|
140
|
-
};
|
|
141
|
-
} catch (e) {
|
|
142
|
-
return {
|
|
143
|
-
success: false,
|
|
144
|
-
message: `Reset failed: ${e instanceof Error ? e.message : String(e)}`,
|
|
145
|
-
};
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
if (point.isLogsOnly || options.logsOnly) {
|
|
150
|
-
// Restore logs only (no checkout)
|
|
151
|
-
return {
|
|
152
|
-
success: true,
|
|
153
|
-
message: `Logs restored for checkpoint ${point.checkpointID ?? pointID}`,
|
|
154
|
-
rewindPoint: point,
|
|
155
|
-
};
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
// Full rewind: checkout to the shadow branch commit
|
|
159
|
-
try {
|
|
160
|
-
await git(['checkout', pointID], { cwd });
|
|
161
|
-
return {
|
|
162
|
-
success: true,
|
|
163
|
-
message: `Rewound to ${pointID.slice(0, 8)}`,
|
|
164
|
-
rewindPoint: point,
|
|
165
|
-
};
|
|
166
|
-
} catch (e) {
|
|
167
|
-
return {
|
|
168
|
-
success: false,
|
|
169
|
-
message: `Rewind failed: ${e instanceof Error ? e.message : String(e)}`,
|
|
170
|
-
};
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
/**
|
|
175
|
-
* List rewind points as JSON (for CLI --list flag)
|
|
176
|
-
*/
|
|
177
|
-
export async function listRewindPointsJSON(options: RewindOptions = {}): Promise<string> {
|
|
178
|
-
const points = await listRewindPoints(options);
|
|
179
|
-
return JSON.stringify(
|
|
180
|
-
points.map((p) => ({
|
|
181
|
-
id: p.id,
|
|
182
|
-
message: p.message,
|
|
183
|
-
date: p.date,
|
|
184
|
-
is_task_checkpoint: p.isTaskCheckpoint,
|
|
185
|
-
is_logs_only: p.isLogsOnly,
|
|
186
|
-
checkpoint_id: p.checkpointID,
|
|
187
|
-
agent: p.agent,
|
|
188
|
-
session_id: p.sessionID,
|
|
189
|
-
session_prompt: p.sessionPrompt,
|
|
190
|
-
session_count: p.sessionCount,
|
|
191
|
-
})),
|
|
192
|
-
null,
|
|
193
|
-
2,
|
|
194
|
-
);
|
|
195
|
-
}
|
|
@@ -1,275 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Setup ccweb Command
|
|
3
|
-
*
|
|
4
|
-
* Configures a repository for Sessionlog integration with Claude Code Web.
|
|
5
|
-
* Creates .claude/settings.json SessionStart hook and .claude/scripts/setup-env.sh
|
|
6
|
-
* so that sessionlog is automatically installed and enabled on every ccweb session.
|
|
7
|
-
*
|
|
8
|
-
* Inspired by the entire-setup-ccweb pattern:
|
|
9
|
-
* https://github.com/aromarious/entire-setup-ccweb
|
|
10
|
-
*/
|
|
11
|
-
|
|
12
|
-
import * as fs from 'node:fs';
|
|
13
|
-
import * as path from 'node:path';
|
|
14
|
-
import { createRequire } from 'node:module';
|
|
15
|
-
import { isGitRepository, getWorktreeRoot } from '../git-operations.js';
|
|
16
|
-
|
|
17
|
-
// ============================================================================
|
|
18
|
-
// Constants
|
|
19
|
-
// ============================================================================
|
|
20
|
-
|
|
21
|
-
const CLAUDE_SCRIPTS_DIR = '.claude/scripts';
|
|
22
|
-
const CLAUDE_SETTINGS_FILE = '.claude/settings.json';
|
|
23
|
-
const SETUP_SCRIPT_FILE = '.claude/scripts/setup-env.sh';
|
|
24
|
-
const SETUP_HOOK_COMMAND = 'sh .claude/scripts/setup-env.sh';
|
|
25
|
-
|
|
26
|
-
// ============================================================================
|
|
27
|
-
// Types
|
|
28
|
-
// ============================================================================
|
|
29
|
-
|
|
30
|
-
export interface SetupCcwebOptions {
|
|
31
|
-
/** Working directory */
|
|
32
|
-
cwd?: string;
|
|
33
|
-
|
|
34
|
-
/** Allowed push prefixes (space-separated, overrides template default) */
|
|
35
|
-
pushPrefixes?: string;
|
|
36
|
-
|
|
37
|
-
/** Force overwrite existing setup */
|
|
38
|
-
force?: boolean;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
export interface SetupCcwebResult {
|
|
42
|
-
success: boolean;
|
|
43
|
-
settingsCreated: boolean;
|
|
44
|
-
scriptCreated: boolean;
|
|
45
|
-
errors: string[];
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
// ============================================================================
|
|
49
|
-
// Claude Settings Types
|
|
50
|
-
// ============================================================================
|
|
51
|
-
|
|
52
|
-
interface ClaudeHookEntry {
|
|
53
|
-
type: string;
|
|
54
|
-
command: string;
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
interface ClaudeHookMatcher {
|
|
58
|
-
matcher: string;
|
|
59
|
-
hooks: ClaudeHookEntry[];
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
interface ClaudeSettings {
|
|
63
|
-
hooks?: {
|
|
64
|
-
SessionStart?: ClaudeHookMatcher[];
|
|
65
|
-
[key: string]: ClaudeHookMatcher[] | undefined;
|
|
66
|
-
};
|
|
67
|
-
permissions?: {
|
|
68
|
-
allow?: string[];
|
|
69
|
-
[key: string]: unknown;
|
|
70
|
-
};
|
|
71
|
-
[key: string]: unknown;
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
// ============================================================================
|
|
75
|
-
// Implementation
|
|
76
|
-
// ============================================================================
|
|
77
|
-
|
|
78
|
-
/**
|
|
79
|
-
* Set up a repository for Sessionlog on Claude Code Web.
|
|
80
|
-
*
|
|
81
|
-
* This creates:
|
|
82
|
-
* 1. `.claude/settings.json` — adds a SessionStart hook that runs the setup script
|
|
83
|
-
* 2. `.claude/scripts/setup-env.sh` — installs sessionlog, enables it, configures push access
|
|
84
|
-
*
|
|
85
|
-
* After running this command, commit the `.claude/` directory and push. When the
|
|
86
|
-
* repository is opened in ccweb, sessionlog will be automatically installed and
|
|
87
|
-
* configured on every session start.
|
|
88
|
-
*/
|
|
89
|
-
export async function setupCcweb(options: SetupCcwebOptions = {}): Promise<SetupCcwebResult> {
|
|
90
|
-
const cwd = options.cwd ?? process.cwd();
|
|
91
|
-
const errors: string[] = [];
|
|
92
|
-
|
|
93
|
-
// Validate git repository
|
|
94
|
-
if (!(await isGitRepository(cwd))) {
|
|
95
|
-
return {
|
|
96
|
-
success: false,
|
|
97
|
-
settingsCreated: false,
|
|
98
|
-
scriptCreated: false,
|
|
99
|
-
errors: ['Not a git repository'],
|
|
100
|
-
};
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
const root = await getWorktreeRoot(cwd);
|
|
104
|
-
|
|
105
|
-
// Create directories
|
|
106
|
-
const scriptsDir = path.join(root, CLAUDE_SCRIPTS_DIR);
|
|
107
|
-
await fs.promises.mkdir(scriptsDir, { recursive: true });
|
|
108
|
-
|
|
109
|
-
// Update .claude/settings.json
|
|
110
|
-
let settingsCreated = false;
|
|
111
|
-
try {
|
|
112
|
-
settingsCreated = await updateClaudeSettings(root, options.force);
|
|
113
|
-
} catch (e) {
|
|
114
|
-
errors.push(`Failed to update settings: ${e instanceof Error ? e.message : String(e)}`);
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
// Create/update setup script
|
|
118
|
-
let scriptCreated = false;
|
|
119
|
-
try {
|
|
120
|
-
scriptCreated = await writeSetupScript(root, options);
|
|
121
|
-
} catch (e) {
|
|
122
|
-
errors.push(`Failed to write setup script: ${e instanceof Error ? e.message : String(e)}`);
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
return {
|
|
126
|
-
success: errors.length === 0,
|
|
127
|
-
settingsCreated,
|
|
128
|
-
scriptCreated,
|
|
129
|
-
errors,
|
|
130
|
-
};
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
// ============================================================================
|
|
134
|
-
// Settings Management
|
|
135
|
-
// ============================================================================
|
|
136
|
-
|
|
137
|
-
/**
|
|
138
|
-
* Add the SessionStart hook to .claude/settings.json
|
|
139
|
-
*/
|
|
140
|
-
async function updateClaudeSettings(root: string, force = false): Promise<boolean> {
|
|
141
|
-
const settingsPath = path.join(root, CLAUDE_SETTINGS_FILE);
|
|
142
|
-
let settings: ClaudeSettings = {};
|
|
143
|
-
|
|
144
|
-
// Read existing settings
|
|
145
|
-
try {
|
|
146
|
-
const content = await fs.promises.readFile(settingsPath, 'utf-8');
|
|
147
|
-
settings = JSON.parse(content) as ClaudeSettings;
|
|
148
|
-
} catch {
|
|
149
|
-
// No existing settings — start fresh
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
if (!settings.hooks) settings.hooks = {};
|
|
153
|
-
|
|
154
|
-
// Check if our hook is already installed
|
|
155
|
-
const sessionStartHooks = settings.hooks.SessionStart ?? [];
|
|
156
|
-
const hasOurHook = sessionStartHooks.some((m) =>
|
|
157
|
-
m.hooks.some((h) => h.command.includes('setup-env.sh')),
|
|
158
|
-
);
|
|
159
|
-
|
|
160
|
-
if (hasOurHook && !force) {
|
|
161
|
-
return false; // Already installed
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
if (hasOurHook && force) {
|
|
165
|
-
// Remove existing hook for reinstall
|
|
166
|
-
settings.hooks.SessionStart = sessionStartHooks.filter(
|
|
167
|
-
(m) => !m.hooks.some((h) => h.command.includes('setup-env.sh')),
|
|
168
|
-
);
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
// Add SessionStart hook
|
|
172
|
-
const matchers = settings.hooks.SessionStart ?? [];
|
|
173
|
-
matchers.push({
|
|
174
|
-
matcher: '',
|
|
175
|
-
hooks: [
|
|
176
|
-
{
|
|
177
|
-
type: 'command',
|
|
178
|
-
command: SETUP_HOOK_COMMAND,
|
|
179
|
-
},
|
|
180
|
-
],
|
|
181
|
-
});
|
|
182
|
-
settings.hooks.SessionStart = matchers;
|
|
183
|
-
|
|
184
|
-
// Add bash permission for the setup script
|
|
185
|
-
if (!settings.permissions) settings.permissions = {};
|
|
186
|
-
if (!settings.permissions.allow) settings.permissions.allow = [];
|
|
187
|
-
const allowEntry = `Bash(sh .claude/scripts/setup-env.sh)`;
|
|
188
|
-
if (!settings.permissions.allow.includes(allowEntry)) {
|
|
189
|
-
settings.permissions.allow.push(allowEntry);
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
// Write settings
|
|
193
|
-
const dir = path.dirname(settingsPath);
|
|
194
|
-
await fs.promises.mkdir(dir, { recursive: true });
|
|
195
|
-
await fs.promises.writeFile(settingsPath, JSON.stringify(settings, null, 2) + '\n');
|
|
196
|
-
|
|
197
|
-
return true;
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
// ============================================================================
|
|
201
|
-
// Setup Script
|
|
202
|
-
// ============================================================================
|
|
203
|
-
|
|
204
|
-
/**
|
|
205
|
-
* Write the setup-env.sh script from the bundled template.
|
|
206
|
-
* Preserves user-customized ALLOWED_PUSH_PREFIXES on update.
|
|
207
|
-
*/
|
|
208
|
-
async function writeSetupScript(root: string, options: SetupCcwebOptions): Promise<boolean> {
|
|
209
|
-
const scriptPath = path.join(root, SETUP_SCRIPT_FILE);
|
|
210
|
-
|
|
211
|
-
// Check if script already exists
|
|
212
|
-
let existingContent = '';
|
|
213
|
-
try {
|
|
214
|
-
existingContent = await fs.promises.readFile(scriptPath, 'utf-8');
|
|
215
|
-
} catch {
|
|
216
|
-
// File doesn't exist
|
|
217
|
-
}
|
|
218
|
-
|
|
219
|
-
if (existingContent && !options.force) {
|
|
220
|
-
// Preserve existing script unless --force
|
|
221
|
-
return false;
|
|
222
|
-
}
|
|
223
|
-
|
|
224
|
-
// Preserve user-customized ALLOWED_PUSH_PREFIXES from existing script
|
|
225
|
-
let pushPrefixes = options.pushPrefixes ?? 'sessionlog/ claude/';
|
|
226
|
-
if (existingContent && !options.pushPrefixes) {
|
|
227
|
-
const match = existingContent.match(/^ALLOWED_PUSH_PREFIXES="([^"]*)"$/m);
|
|
228
|
-
if (match) {
|
|
229
|
-
pushPrefixes = match[1];
|
|
230
|
-
}
|
|
231
|
-
}
|
|
232
|
-
|
|
233
|
-
// Load the template
|
|
234
|
-
const template = loadTemplate();
|
|
235
|
-
|
|
236
|
-
// Apply push prefixes customization
|
|
237
|
-
const content = template.replace(
|
|
238
|
-
/^ALLOWED_PUSH_PREFIXES="[^"]*"$/m,
|
|
239
|
-
`ALLOWED_PUSH_PREFIXES="${pushPrefixes}"`,
|
|
240
|
-
);
|
|
241
|
-
|
|
242
|
-
await fs.promises.writeFile(scriptPath, content, { mode: 0o755 });
|
|
243
|
-
|
|
244
|
-
return true;
|
|
245
|
-
}
|
|
246
|
-
|
|
247
|
-
/**
|
|
248
|
-
* Load the setup-env.sh template.
|
|
249
|
-
* Tries the bundled template first (from package dist), then falls back to
|
|
250
|
-
* the source template for development.
|
|
251
|
-
*/
|
|
252
|
-
function loadTemplate(): string {
|
|
253
|
-
const require = createRequire(import.meta.url);
|
|
254
|
-
|
|
255
|
-
// Try relative paths from the compiled output location (dist/commands/)
|
|
256
|
-
const thisDir = path.dirname(new URL(import.meta.url).pathname);
|
|
257
|
-
const candidates = [
|
|
258
|
-
// Installed via npm: template is in templates/ relative to package root
|
|
259
|
-
path.resolve(path.dirname(require.resolve('../../package.json')), 'templates', 'setup-env.sh'),
|
|
260
|
-
// Development: template is in templates/ at repo root (from dist/commands/ or src/commands/)
|
|
261
|
-
path.resolve(thisDir, '..', '..', 'templates', 'setup-env.sh'),
|
|
262
|
-
];
|
|
263
|
-
|
|
264
|
-
for (const candidate of candidates) {
|
|
265
|
-
try {
|
|
266
|
-
return fs.readFileSync(candidate, 'utf-8');
|
|
267
|
-
} catch {
|
|
268
|
-
// Try next candidate
|
|
269
|
-
}
|
|
270
|
-
}
|
|
271
|
-
|
|
272
|
-
throw new Error(
|
|
273
|
-
'Could not find setup-env.sh template. Ensure the templates/ directory is included in the package.',
|
|
274
|
-
);
|
|
275
|
-
}
|
|
@@ -1,172 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Status Command
|
|
3
|
-
*
|
|
4
|
-
* Shows the current Sessionlog setup status, active sessions,
|
|
5
|
-
* and configuration.
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
import { type SessionlogSettings, CHECKPOINTS_BRANCH } from '../types.js';
|
|
9
|
-
import {
|
|
10
|
-
isGitRepository,
|
|
11
|
-
getWorktreeRoot,
|
|
12
|
-
getCurrentBranch,
|
|
13
|
-
refExists,
|
|
14
|
-
initSessionRepo,
|
|
15
|
-
resolveSessionRepoPath,
|
|
16
|
-
getProjectID,
|
|
17
|
-
} from '../git-operations.js';
|
|
18
|
-
import { loadSettings } from '../config.js';
|
|
19
|
-
import { createSessionStore } from '../store/session-store.js';
|
|
20
|
-
import { SESSION_DIR_NAME } from '../types.js';
|
|
21
|
-
import { areGitHooksInstalled } from '../hooks/git-hooks.js';
|
|
22
|
-
import { detectAgents } from '../agent/registry.js';
|
|
23
|
-
import { hasHookSupport } from '../agent/types.js';
|
|
24
|
-
|
|
25
|
-
// ============================================================================
|
|
26
|
-
// Types
|
|
27
|
-
// ============================================================================
|
|
28
|
-
|
|
29
|
-
export interface StatusResult {
|
|
30
|
-
/** Whether Sessionlog is set up and enabled */
|
|
31
|
-
enabled: boolean;
|
|
32
|
-
|
|
33
|
-
/** Current strategy */
|
|
34
|
-
strategy: string;
|
|
35
|
-
|
|
36
|
-
/** Current branch */
|
|
37
|
-
branch: string | null;
|
|
38
|
-
|
|
39
|
-
/** Whether the checkpoints branch exists */
|
|
40
|
-
hasCheckpointsBranch: boolean;
|
|
41
|
-
|
|
42
|
-
/** Active sessions */
|
|
43
|
-
sessions: SessionStatus[];
|
|
44
|
-
|
|
45
|
-
/** Installed agents with hooks */
|
|
46
|
-
agents: string[];
|
|
47
|
-
|
|
48
|
-
/** Whether git hooks are installed */
|
|
49
|
-
gitHooksInstalled: boolean;
|
|
50
|
-
|
|
51
|
-
/** Effective settings */
|
|
52
|
-
settings: SessionlogSettings;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
export interface SessionStatus {
|
|
56
|
-
sessionID: string;
|
|
57
|
-
agentType: string;
|
|
58
|
-
phase: string;
|
|
59
|
-
startedAt: string;
|
|
60
|
-
firstPrompt?: string;
|
|
61
|
-
filesTouched: string[];
|
|
62
|
-
stepCount: number;
|
|
63
|
-
tokenUsage?: {
|
|
64
|
-
input: number;
|
|
65
|
-
output: number;
|
|
66
|
-
};
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
// ============================================================================
|
|
70
|
-
// Implementation
|
|
71
|
-
// ============================================================================
|
|
72
|
-
|
|
73
|
-
/**
|
|
74
|
-
* Get the current status of Sessionlog
|
|
75
|
-
*/
|
|
76
|
-
export async function status(cwd?: string): Promise<StatusResult> {
|
|
77
|
-
const isRepo = await isGitRepository(cwd);
|
|
78
|
-
|
|
79
|
-
if (!isRepo) {
|
|
80
|
-
return {
|
|
81
|
-
enabled: false,
|
|
82
|
-
strategy: 'manual-commit',
|
|
83
|
-
branch: null,
|
|
84
|
-
hasCheckpointsBranch: false,
|
|
85
|
-
sessions: [],
|
|
86
|
-
agents: [],
|
|
87
|
-
gitHooksInstalled: false,
|
|
88
|
-
settings: { enabled: false, strategy: 'manual-commit' },
|
|
89
|
-
};
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
const root = await getWorktreeRoot(cwd);
|
|
93
|
-
const settings = await loadSettings(cwd);
|
|
94
|
-
const branch = await getCurrentBranch(cwd);
|
|
95
|
-
const gitHooks = await areGitHooksInstalled(root);
|
|
96
|
-
|
|
97
|
-
// Resolve session repo if configured
|
|
98
|
-
let sessionRepoCwd: string | undefined;
|
|
99
|
-
let sessionsDir: string | undefined;
|
|
100
|
-
let cpBranch = CHECKPOINTS_BRANCH;
|
|
101
|
-
if (settings.sessionRepoPath) {
|
|
102
|
-
try {
|
|
103
|
-
const projectID = getProjectID(root);
|
|
104
|
-
const resolved = resolveSessionRepoPath(settings.sessionRepoPath, root);
|
|
105
|
-
sessionRepoCwd = await initSessionRepo(resolved);
|
|
106
|
-
sessionsDir = `${sessionRepoCwd}/${SESSION_DIR_NAME}/${projectID}`;
|
|
107
|
-
cpBranch = `${CHECKPOINTS_BRANCH}/${projectID}`;
|
|
108
|
-
} catch {
|
|
109
|
-
// Fall back to project repo if session repo can't be initialized
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
const checkpointsCwd = sessionRepoCwd ?? cwd;
|
|
114
|
-
const hasCheckpoints = await refExists(`refs/heads/${cpBranch}`, checkpointsCwd);
|
|
115
|
-
|
|
116
|
-
// Detect agents with hooks
|
|
117
|
-
const agents = await detectAgents(cwd);
|
|
118
|
-
const agentNames: string[] = [];
|
|
119
|
-
for (const agent of agents) {
|
|
120
|
-
if (hasHookSupport(agent)) {
|
|
121
|
-
const installed = await agent.areHooksInstalled(root);
|
|
122
|
-
if (installed) agentNames.push(agent.name);
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
// Load sessions
|
|
127
|
-
const sessionStore = createSessionStore(cwd, sessionsDir);
|
|
128
|
-
const allSessions = await sessionStore.list();
|
|
129
|
-
|
|
130
|
-
const sessions: SessionStatus[] = allSessions.map((s) => ({
|
|
131
|
-
sessionID: s.sessionID,
|
|
132
|
-
agentType: s.agentType,
|
|
133
|
-
phase: s.phase,
|
|
134
|
-
startedAt: s.startedAt,
|
|
135
|
-
firstPrompt: s.firstPrompt,
|
|
136
|
-
filesTouched: s.filesTouched,
|
|
137
|
-
stepCount: s.stepCount,
|
|
138
|
-
tokenUsage: s.tokenUsage
|
|
139
|
-
? {
|
|
140
|
-
input: s.tokenUsage.inputTokens + s.tokenUsage.cacheReadTokens,
|
|
141
|
-
output: s.tokenUsage.outputTokens,
|
|
142
|
-
}
|
|
143
|
-
: undefined,
|
|
144
|
-
}));
|
|
145
|
-
|
|
146
|
-
return {
|
|
147
|
-
enabled: settings.enabled,
|
|
148
|
-
strategy: settings.strategy,
|
|
149
|
-
branch,
|
|
150
|
-
hasCheckpointsBranch: hasCheckpoints,
|
|
151
|
-
sessions,
|
|
152
|
-
agents: agentNames,
|
|
153
|
-
gitHooksInstalled: gitHooks,
|
|
154
|
-
settings,
|
|
155
|
-
};
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
/**
|
|
159
|
-
* Format status for display (JSON output)
|
|
160
|
-
*/
|
|
161
|
-
export function formatStatusJSON(result: StatusResult): string {
|
|
162
|
-
return JSON.stringify(result, null, 2);
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
/**
|
|
166
|
-
* Format token count for display
|
|
167
|
-
*/
|
|
168
|
-
export function formatTokens(count: number): string {
|
|
169
|
-
if (count >= 1_000_000) return `${(count / 1_000_000).toFixed(1)}M`;
|
|
170
|
-
if (count >= 1_000) return `${(count / 1_000).toFixed(1)}k`;
|
|
171
|
-
return String(count);
|
|
172
|
-
}
|