cognitive-core 0.2.1 → 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/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/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/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/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 +2 -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/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/workspace/types.ts +22 -78
- package/tests/integration/curated-sources-e2e.test.ts +502 -0
- package/tests/memory/compound-engineering-seed.test.ts +338 -0
- package/tests/memory/curated-loader-extended.test.ts +225 -0
- package/tests/memory/playbook-quality-validation.test.ts +430 -0
- package/tests/memory/source-resolver.test.ts +700 -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,524 +0,0 @@
|
|
|
1
|
-
# Federated Skill Trees Design Spec
|
|
2
|
-
|
|
3
|
-
## Status
|
|
4
|
-
**Draft** | Last Updated: 2026-02-04
|
|
5
|
-
|
|
6
|
-
## Summary
|
|
7
|
-
|
|
8
|
-
Enable users to maintain personal skill repositories while selectively syncing with team and community skill repositories. This extends SkillBank with optional remote capabilities, allowing skills to flow between repositories through import/export operations with upstream tracking.
|
|
9
|
-
|
|
10
|
-
---
|
|
11
|
-
|
|
12
|
-
## Background & Motivation
|
|
13
|
-
|
|
14
|
-
### The Problem
|
|
15
|
-
|
|
16
|
-
Agents accumulate skills through learning and extraction. Currently, skills live in a single storage location. In practice, users want:
|
|
17
|
-
|
|
18
|
-
1. **Personal skill libraries** - Private skills they develop and customize
|
|
19
|
-
2. **Team skill sharing** - Contribute to and benefit from team knowledge
|
|
20
|
-
3. **Community skills** - Access public skill repositories (read-only)
|
|
21
|
-
|
|
22
|
-
These are distinct concerns with different access patterns:
|
|
23
|
-
|
|
24
|
-
| Repository | Ownership | Access | Typical Operations |
|
|
25
|
-
|------------|-----------|--------|-------------------|
|
|
26
|
-
| Personal | Individual | Full control | Create, modify, delete freely |
|
|
27
|
-
| Team | Shared | Read + contribute | Import skills, submit contributions |
|
|
28
|
-
| Community | Public | Read-only | Browse, import, track updates |
|
|
29
|
-
|
|
30
|
-
### Why Not Just Use Git?
|
|
31
|
-
|
|
32
|
-
Git handles version control, but doesn't address:
|
|
33
|
-
- **Skill-level operations**: Import one skill, not the whole repo
|
|
34
|
-
- **Upstream tracking**: Know when an imported skill has updates
|
|
35
|
-
- **Selective sync**: Choose which skills to import/share
|
|
36
|
-
- **Identity preservation**: Skills maintain provenance across repos
|
|
37
|
-
|
|
38
|
-
### Design Goals
|
|
39
|
-
|
|
40
|
-
1. **Progressive enhancement** - Simple usage stays simple; add remotes only when needed
|
|
41
|
-
2. **Familiar API** - Remote operations feel like natural extensions of SkillBank
|
|
42
|
-
3. **Explicit over implicit** - User controls what syncs, when, and how
|
|
43
|
-
4. **Offline-first** - Local operations work without network; sync when ready
|
|
44
|
-
|
|
45
|
-
---
|
|
46
|
-
|
|
47
|
-
## Prior Art & Alternatives Considered
|
|
48
|
-
|
|
49
|
-
### Alternative 1: Separate FederatedSkillBank Class
|
|
50
|
-
|
|
51
|
-
```typescript
|
|
52
|
-
const federation = new FederatedSkillBank({
|
|
53
|
-
sources: {
|
|
54
|
-
personal: { bank: myBank, writable: true },
|
|
55
|
-
team: { bank: teamBank, writable: false },
|
|
56
|
-
},
|
|
57
|
-
});
|
|
58
|
-
```
|
|
59
|
-
|
|
60
|
-
**Rejected because:**
|
|
61
|
-
- Requires users to learn a new class
|
|
62
|
-
- Awkward migration from simple SkillBank usage
|
|
63
|
-
- Two mental models instead of one
|
|
64
|
-
|
|
65
|
-
### Alternative 2: HierarchicalSyncAdapter (Implemented in Phase 1)
|
|
66
|
-
|
|
67
|
-
Manages tiers (personal/team/global) as directories within a single base path, with promotion/demotion between tiers.
|
|
68
|
-
|
|
69
|
-
**Limitations:**
|
|
70
|
-
- Tiers share a base directory, not truly independent repos
|
|
71
|
-
- Designed for scope-based organization, not repo federation
|
|
72
|
-
- Promotion/demotion is about visibility, not selective sync
|
|
73
|
-
|
|
74
|
-
**Conclusion:** HierarchicalSyncAdapter is useful for organizing skills by scope within a single system. Federation extends this to connect independent repositories.
|
|
75
|
-
|
|
76
|
-
### Alternative 3: CompositeSkillBank Wrapper
|
|
77
|
-
|
|
78
|
-
```typescript
|
|
79
|
-
const composite = new CompositeSkillBank([bank1, bank2, bank3]);
|
|
80
|
-
```
|
|
81
|
-
|
|
82
|
-
**Rejected because:**
|
|
83
|
-
- Hides which bank skills come from
|
|
84
|
-
- Unclear write semantics (which bank receives saves?)
|
|
85
|
-
- Doesn't address upstream tracking
|
|
86
|
-
|
|
87
|
-
### Chosen Approach: Extend SkillBank with Remote Capabilities
|
|
88
|
-
|
|
89
|
-
Add optional `addRemote()` method that enables remote operations on an existing SkillBank. Remote methods are only available after adding remotes.
|
|
90
|
-
|
|
91
|
-
**Benefits:**
|
|
92
|
-
- No new classes to learn
|
|
93
|
-
- Gradual adoption - start simple, add remotes later
|
|
94
|
-
- Clear ownership - your SkillBank is the source of truth
|
|
95
|
-
- Remotes are explicit connections, not merged views
|
|
96
|
-
|
|
97
|
-
---
|
|
98
|
-
|
|
99
|
-
## Detailed Design
|
|
100
|
-
|
|
101
|
-
### Core Concepts
|
|
102
|
-
|
|
103
|
-
#### 1. Remotes
|
|
104
|
-
|
|
105
|
-
A remote is a connection to another skill repository. Remotes are:
|
|
106
|
-
- Named (e.g., `'team'`, `'community'`)
|
|
107
|
-
- Configured with URL and access level
|
|
108
|
-
- Cached locally for offline access
|
|
109
|
-
|
|
110
|
-
```typescript
|
|
111
|
-
bank.addRemote('team', {
|
|
112
|
-
url: 'git@github.com:org/team-skills.git',
|
|
113
|
-
access: 'read-write',
|
|
114
|
-
});
|
|
115
|
-
```
|
|
116
|
-
|
|
117
|
-
#### 2. Import Modes: Link vs Fork
|
|
118
|
-
|
|
119
|
-
When importing a skill from a remote, users choose:
|
|
120
|
-
|
|
121
|
-
| Mode | Relationship | Use Case |
|
|
122
|
-
|------|--------------|----------|
|
|
123
|
-
| **Link** | Tracks upstream | "I want this skill and future updates" |
|
|
124
|
-
| **Fork** | Independent copy | "I want to customize this my way" |
|
|
125
|
-
|
|
126
|
-
**Linked skills:**
|
|
127
|
-
- ID prefixed: `@team/skill-name`
|
|
128
|
-
- Track upstream version in `skill.upstream`
|
|
129
|
-
- Can check for updates via `checkUpstream()`
|
|
130
|
-
- Can pull updates via `pullUpstream()`
|
|
131
|
-
- Can unlink to convert to fork
|
|
132
|
-
|
|
133
|
-
**Forked skills:**
|
|
134
|
-
- Custom ID or prefixed
|
|
135
|
-
- Record origin in `skill.derivedFrom`
|
|
136
|
-
- No ongoing sync relationship
|
|
137
|
-
- Fully independent
|
|
138
|
-
|
|
139
|
-
#### 3. Skill Identity
|
|
140
|
-
|
|
141
|
-
Imported skills use namespaced IDs to prevent collisions:
|
|
142
|
-
|
|
143
|
-
```
|
|
144
|
-
@{remote}/{original-id}
|
|
145
|
-
```
|
|
146
|
-
|
|
147
|
-
Examples:
|
|
148
|
-
- `@team/connection-pool`
|
|
149
|
-
- `@community/rate-limiter`
|
|
150
|
-
|
|
151
|
-
Users can override with custom IDs when importing.
|
|
152
|
-
|
|
153
|
-
#### 4. Upstream Tracking
|
|
154
|
-
|
|
155
|
-
Linked skills store upstream metadata:
|
|
156
|
-
|
|
157
|
-
```typescript
|
|
158
|
-
interface Skill {
|
|
159
|
-
// ... existing fields ...
|
|
160
|
-
|
|
161
|
-
upstream?: {
|
|
162
|
-
remote: string; // Remote name
|
|
163
|
-
skillId: string; // ID in remote
|
|
164
|
-
version: string; // Version when last synced
|
|
165
|
-
syncedAt: Date; // When last synced
|
|
166
|
-
};
|
|
167
|
-
}
|
|
168
|
-
```
|
|
169
|
-
|
|
170
|
-
### API Design
|
|
171
|
-
|
|
172
|
-
#### Adding Remotes
|
|
173
|
-
|
|
174
|
-
```typescript
|
|
175
|
-
// Add a remote repository
|
|
176
|
-
bank.addRemote(name: string, config: RemoteConfig): void
|
|
177
|
-
|
|
178
|
-
interface RemoteConfig {
|
|
179
|
-
url: string; // Git URL or local path
|
|
180
|
-
access: 'read-only' | 'read-write'; // Access level
|
|
181
|
-
localCache?: string; // Cache location (default: .remotes/{name})
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
// Remove a remote
|
|
185
|
-
bank.removeRemote(name: string): void
|
|
186
|
-
|
|
187
|
-
// List configured remotes
|
|
188
|
-
bank.listRemotes(): string[]
|
|
189
|
-
|
|
190
|
-
// Check if a remote exists
|
|
191
|
-
bank.hasRemote(name: string): boolean
|
|
192
|
-
```
|
|
193
|
-
|
|
194
|
-
#### Browsing Remotes
|
|
195
|
-
|
|
196
|
-
```typescript
|
|
197
|
-
// List skills from a remote (doesn't import)
|
|
198
|
-
bank.browse(remote: string, filter?: SkillFilter): Promise<Skill[]>
|
|
199
|
-
|
|
200
|
-
// Get a specific skill from remote
|
|
201
|
-
bank.browseSkill(remote: string, skillId: string): Promise<Skill | null>
|
|
202
|
-
```
|
|
203
|
-
|
|
204
|
-
#### Importing Skills
|
|
205
|
-
|
|
206
|
-
```typescript
|
|
207
|
-
// Import a skill from remote to local
|
|
208
|
-
bank.import(
|
|
209
|
-
remote: string,
|
|
210
|
-
skillId: string,
|
|
211
|
-
options?: ImportOptions
|
|
212
|
-
): Promise<Skill>
|
|
213
|
-
|
|
214
|
-
interface ImportOptions {
|
|
215
|
-
mode?: 'link' | 'fork'; // Default: 'link'
|
|
216
|
-
as?: string; // Local ID (default: @remote/skillId)
|
|
217
|
-
}
|
|
218
|
-
```
|
|
219
|
-
|
|
220
|
-
#### Sharing Skills
|
|
221
|
-
|
|
222
|
-
```typescript
|
|
223
|
-
// Share a local skill to a remote
|
|
224
|
-
bank.share(
|
|
225
|
-
localId: string,
|
|
226
|
-
remote: string,
|
|
227
|
-
options?: ShareOptions
|
|
228
|
-
): Promise<ShareResult>
|
|
229
|
-
|
|
230
|
-
interface ShareOptions {
|
|
231
|
-
as?: string; // Remote ID (default: strip @prefix from localId)
|
|
232
|
-
message?: string; // Commit message
|
|
233
|
-
}
|
|
234
|
-
|
|
235
|
-
interface ShareResult {
|
|
236
|
-
success: boolean;
|
|
237
|
-
remoteId: string;
|
|
238
|
-
commitHash?: string;
|
|
239
|
-
}
|
|
240
|
-
```
|
|
241
|
-
|
|
242
|
-
#### Upstream Sync (for Linked Skills)
|
|
243
|
-
|
|
244
|
-
```typescript
|
|
245
|
-
// Check for updates to linked skills
|
|
246
|
-
bank.checkUpstream(): Promise<UpstreamUpdate[]>
|
|
247
|
-
|
|
248
|
-
interface UpstreamUpdate {
|
|
249
|
-
localId: string;
|
|
250
|
-
remote: string;
|
|
251
|
-
remoteId: string;
|
|
252
|
-
localVersion: string;
|
|
253
|
-
remoteVersion: string;
|
|
254
|
-
behind: number; // Commits behind
|
|
255
|
-
}
|
|
256
|
-
|
|
257
|
-
// Pull upstream changes for a linked skill
|
|
258
|
-
bank.pullUpstream(
|
|
259
|
-
localId: string,
|
|
260
|
-
options?: PullOptions
|
|
261
|
-
): Promise<Skill>
|
|
262
|
-
|
|
263
|
-
interface PullOptions {
|
|
264
|
-
strategy?: 'merge' | 'overwrite'; // Default: 'merge'
|
|
265
|
-
}
|
|
266
|
-
|
|
267
|
-
// Convert a link to a fork (stop tracking)
|
|
268
|
-
bank.unlink(localId: string): Promise<void>
|
|
269
|
-
```
|
|
270
|
-
|
|
271
|
-
#### Unified Search (Optional)
|
|
272
|
-
|
|
273
|
-
```typescript
|
|
274
|
-
// Search across local + remotes
|
|
275
|
-
bank.search(query: string, options?: SearchOptions): Promise<SearchResult[]>
|
|
276
|
-
|
|
277
|
-
interface SearchOptions {
|
|
278
|
-
includeRemotes?: boolean; // Default: false
|
|
279
|
-
remotes?: string[]; // Specific remotes to search
|
|
280
|
-
}
|
|
281
|
-
|
|
282
|
-
interface SearchResult {
|
|
283
|
-
skill: Skill;
|
|
284
|
-
source: string; // 'local' or remote name
|
|
285
|
-
score: number;
|
|
286
|
-
}
|
|
287
|
-
```
|
|
288
|
-
|
|
289
|
-
### Storage & Caching
|
|
290
|
-
|
|
291
|
-
#### Directory Structure
|
|
292
|
-
|
|
293
|
-
```
|
|
294
|
-
my-skills/ # User's skill bank
|
|
295
|
-
├── skills/ # Local skills
|
|
296
|
-
│ ├── my-pattern/
|
|
297
|
-
│ ├── @team/ # Imported from team (linked)
|
|
298
|
-
│ │ └── connection-pool/
|
|
299
|
-
│ └── forked-util/ # Forked from community
|
|
300
|
-
├── .remotes/ # Cached remote repos
|
|
301
|
-
│ ├── team/ # Git clone of team repo
|
|
302
|
-
│ └── community/ # Git clone of community repo
|
|
303
|
-
└── .skillbank/
|
|
304
|
-
└── remotes.json # Remote configurations
|
|
305
|
-
```
|
|
306
|
-
|
|
307
|
-
#### Remote Caching Strategy
|
|
308
|
-
|
|
309
|
-
1. **On first access**: Clone remote repository to `.remotes/{name}/`
|
|
310
|
-
2. **On browse/import**: Fetch latest from remote
|
|
311
|
-
3. **Offline mode**: Use cached data if fetch fails
|
|
312
|
-
4. **Manual refresh**: `bank.refreshRemote(name)`
|
|
313
|
-
|
|
314
|
-
### Conflict Handling
|
|
315
|
-
|
|
316
|
-
#### Import Conflicts
|
|
317
|
-
|
|
318
|
-
If local skill ID conflicts with import:
|
|
319
|
-
|
|
320
|
-
```typescript
|
|
321
|
-
// This would fail
|
|
322
|
-
await bank.import('team', 'my-skill');
|
|
323
|
-
// Error: Skill 'my-skill' already exists locally
|
|
324
|
-
|
|
325
|
-
// Solutions:
|
|
326
|
-
await bank.import('team', 'my-skill', { as: '@team/my-skill' });
|
|
327
|
-
await bank.import('team', 'my-skill', { as: 'team-my-skill' });
|
|
328
|
-
```
|
|
329
|
-
|
|
330
|
-
#### Upstream Merge Conflicts
|
|
331
|
-
|
|
332
|
-
When pulling updates to a locally-modified linked skill:
|
|
333
|
-
|
|
334
|
-
```typescript
|
|
335
|
-
const result = await bank.pullUpstream('@team/skill', {
|
|
336
|
-
strategy: 'merge'
|
|
337
|
-
});
|
|
338
|
-
|
|
339
|
-
if (result.conflicts) {
|
|
340
|
-
// Manual resolution needed
|
|
341
|
-
console.log(result.conflicts);
|
|
342
|
-
// [{ field: 'solution', local: '...', remote: '...', base: '...' }]
|
|
343
|
-
|
|
344
|
-
// Resolve using existing SkillMerger
|
|
345
|
-
const resolved = await bank.resolveConflicts('@team/skill', {
|
|
346
|
-
solution: 'merged content',
|
|
347
|
-
});
|
|
348
|
-
}
|
|
349
|
-
```
|
|
350
|
-
|
|
351
|
-
---
|
|
352
|
-
|
|
353
|
-
## Usage Examples
|
|
354
|
-
|
|
355
|
-
### Example 1: Solo Developer Adding Team Repo
|
|
356
|
-
|
|
357
|
-
```typescript
|
|
358
|
-
// Start with personal skills
|
|
359
|
-
const bank = createSkillBank({
|
|
360
|
-
storage: { type: 'filesystem', basePath: './my-skills' },
|
|
361
|
-
});
|
|
362
|
-
await bank.initialize();
|
|
363
|
-
|
|
364
|
-
// Later, connect to team
|
|
365
|
-
bank.addRemote('team', {
|
|
366
|
-
url: 'git@github.com:org/team-skills.git',
|
|
367
|
-
access: 'read-write',
|
|
368
|
-
});
|
|
369
|
-
|
|
370
|
-
// Browse what's available
|
|
371
|
-
const teamSkills = await bank.browse('team');
|
|
372
|
-
console.log(`Team has ${teamSkills.length} skills`);
|
|
373
|
-
|
|
374
|
-
// Import useful patterns
|
|
375
|
-
await bank.import('team', 'error-handling');
|
|
376
|
-
await bank.import('team', 'api-patterns');
|
|
377
|
-
|
|
378
|
-
// These are now local as @team/error-handling, @team/api-patterns
|
|
379
|
-
```
|
|
380
|
-
|
|
381
|
-
### Example 2: Contributing Back to Team
|
|
382
|
-
|
|
383
|
-
```typescript
|
|
384
|
-
// Create a new skill locally
|
|
385
|
-
await bank.saveSkill({
|
|
386
|
-
id: 'my-discovery',
|
|
387
|
-
name: 'Database Migration Pattern',
|
|
388
|
-
// ...
|
|
389
|
-
});
|
|
390
|
-
|
|
391
|
-
// Share with team
|
|
392
|
-
const result = await bank.share('my-discovery', 'team', {
|
|
393
|
-
message: 'Add database migration pattern',
|
|
394
|
-
});
|
|
395
|
-
|
|
396
|
-
console.log(`Shared as ${result.remoteId}`);
|
|
397
|
-
```
|
|
398
|
-
|
|
399
|
-
### Example 3: Keeping Skills Updated
|
|
400
|
-
|
|
401
|
-
```typescript
|
|
402
|
-
// Check what's changed upstream
|
|
403
|
-
const updates = await bank.checkUpstream();
|
|
404
|
-
|
|
405
|
-
for (const update of updates) {
|
|
406
|
-
console.log(`${update.localId}: ${update.localVersion} → ${update.remoteVersion}`);
|
|
407
|
-
}
|
|
408
|
-
|
|
409
|
-
// Pull updates for specific skill
|
|
410
|
-
await bank.pullUpstream('@team/api-patterns');
|
|
411
|
-
|
|
412
|
-
// Or pull all updates
|
|
413
|
-
for (const update of updates) {
|
|
414
|
-
await bank.pullUpstream(update.localId);
|
|
415
|
-
}
|
|
416
|
-
```
|
|
417
|
-
|
|
418
|
-
### Example 4: Forking for Customization
|
|
419
|
-
|
|
420
|
-
```typescript
|
|
421
|
-
// Fork instead of link
|
|
422
|
-
await bank.import('community', 'rate-limiter', {
|
|
423
|
-
mode: 'fork',
|
|
424
|
-
as: 'my-rate-limiter',
|
|
425
|
-
});
|
|
426
|
-
|
|
427
|
-
// Customize freely - no upstream tracking
|
|
428
|
-
const skill = await bank.getSkill('my-rate-limiter');
|
|
429
|
-
skill.solution = 'My improved version...';
|
|
430
|
-
await bank.saveSkill(skill);
|
|
431
|
-
```
|
|
432
|
-
|
|
433
|
-
### Example 5: Converting Link to Fork
|
|
434
|
-
|
|
435
|
-
```typescript
|
|
436
|
-
// Initially linked
|
|
437
|
-
await bank.import('team', 'auth-pattern');
|
|
438
|
-
|
|
439
|
-
// Decide to diverge
|
|
440
|
-
await bank.unlink('@team/auth-pattern');
|
|
441
|
-
|
|
442
|
-
// Now it's a fork - skill.upstream removed, origin recorded in derivedFrom
|
|
443
|
-
```
|
|
444
|
-
|
|
445
|
-
---
|
|
446
|
-
|
|
447
|
-
## Implementation Plan
|
|
448
|
-
|
|
449
|
-
### Phase 1: Foundation (Completed)
|
|
450
|
-
- [x] Add namespace types (SkillScope, SkillVisibility, SkillNamespace)
|
|
451
|
-
- [x] Implement namespace-aware storage filtering
|
|
452
|
-
- [x] Create HierarchicalSyncAdapter for tier-based organization
|
|
453
|
-
- [x] Add namespace support to SkillBank
|
|
454
|
-
|
|
455
|
-
### Phase 2: Remote Infrastructure
|
|
456
|
-
- [ ] Add `upstream` field to Skill type
|
|
457
|
-
- [ ] Implement remote configuration storage (`.skillbank/remotes.json`)
|
|
458
|
-
- [ ] Implement remote caching (git clone/fetch to `.remotes/`)
|
|
459
|
-
- [ ] Add `addRemote()`, `removeRemote()`, `listRemotes()` methods
|
|
460
|
-
|
|
461
|
-
### Phase 3: Browse & Import
|
|
462
|
-
- [ ] Implement `browse()` - list skills from cached remote
|
|
463
|
-
- [ ] Implement `import()` with link/fork modes
|
|
464
|
-
- [ ] Handle ID namespacing (@remote/skillId)
|
|
465
|
-
- [ ] Add import conflict detection
|
|
466
|
-
|
|
467
|
-
### Phase 4: Upstream Sync
|
|
468
|
-
- [ ] Implement `checkUpstream()` - compare local vs remote versions
|
|
469
|
-
- [ ] Implement `pullUpstream()` - fetch and merge updates
|
|
470
|
-
- [ ] Implement `unlink()` - convert link to fork
|
|
471
|
-
- [ ] Integrate with existing SkillMerger for conflicts
|
|
472
|
-
|
|
473
|
-
### Phase 5: Sharing
|
|
474
|
-
- [ ] Implement `share()` - push skill to writable remote
|
|
475
|
-
- [ ] Handle remote conflicts (skill already exists)
|
|
476
|
-
- [ ] Add commit message support
|
|
477
|
-
|
|
478
|
-
### Phase 6: Advanced Features
|
|
479
|
-
- [ ] Unified search across local + remotes
|
|
480
|
-
- [ ] Bulk operations (import multiple, sync all)
|
|
481
|
-
- [ ] Remote health/status reporting
|
|
482
|
-
- [ ] PR workflow support for share operations
|
|
483
|
-
|
|
484
|
-
---
|
|
485
|
-
|
|
486
|
-
## Open Questions
|
|
487
|
-
|
|
488
|
-
1. **Nested imports**: If team imports from community, and you import from team, should you see the chain?
|
|
489
|
-
|
|
490
|
-
2. **Circular dependencies**: Team imports your skill, you import team's version. How to handle?
|
|
491
|
-
|
|
492
|
-
3. **Version pinning**: Should links track specific versions or always latest?
|
|
493
|
-
|
|
494
|
-
4. **Partial sync**: Subscribe to specific tags/categories from a remote instead of browsing all?
|
|
495
|
-
|
|
496
|
-
5. **Authentication**: How to handle private repos requiring auth?
|
|
497
|
-
|
|
498
|
-
---
|
|
499
|
-
|
|
500
|
-
## Appendix: Relationship to Existing Features
|
|
501
|
-
|
|
502
|
-
### HierarchicalSyncAdapter
|
|
503
|
-
|
|
504
|
-
The existing HierarchicalSyncAdapter manages **tiers within a single system**:
|
|
505
|
-
- Personal, team, global as directories under one base path
|
|
506
|
-
- Skills promoted/demoted between tiers
|
|
507
|
-
- Useful for visibility/scope organization
|
|
508
|
-
|
|
509
|
-
Federation manages **connections between independent systems**:
|
|
510
|
-
- Each repo is independent with its own storage
|
|
511
|
-
- Skills imported/shared between repos
|
|
512
|
-
- Useful for cross-organization collaboration
|
|
513
|
-
|
|
514
|
-
These are complementary:
|
|
515
|
-
- Use HierarchicalSyncAdapter to organize your personal repo by scope
|
|
516
|
-
- Use federation to connect to team/community repos
|
|
517
|
-
|
|
518
|
-
### GitSyncAdapter
|
|
519
|
-
|
|
520
|
-
GitSyncAdapter handles git operations for a single repository (pull, push, conflict resolution). Federation will use GitSyncAdapter internally for each remote's cache.
|
|
521
|
-
|
|
522
|
-
### Namespace & Visibility
|
|
523
|
-
|
|
524
|
-
The namespace types (SkillScope, SkillVisibility) apply to local organization. Federation adds a layer above this - imported skills can have any namespace, but their origin is tracked via `upstream` or `derivedFrom`.
|