opencode-fractal-memory 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/seed-nodes.js +326 -0
  2. package/package.json +1 -1
@@ -779,6 +779,332 @@ Use memory_set to create the playbook:
779
779
  - Use parameterized queries for all database operations
780
780
  - Validate all user input on the server side`,
781
781
  },
782
+ {
783
+ label: "skill:context-engineering",
784
+ tag: null,
785
+ type: "skill",
786
+ summary: "Optimize agent context setup with the right information at the right time. Use when starting a new session, when output quality degrades, or when switching tasks. Covers context hierarchy, packing strategies, and confusion management.",
787
+ metadata: { triggers: ["context", "context window", "agent quality", "session start", "output quality", "confusion", "rules file", "CLAUDE.md", "AGENTS.md"] },
788
+ content: `## Context Engineering
789
+
790
+ Feed agents the right information at the right time. Context is the single biggest lever for agent output quality — too little and the agent hallucinates, too much and it loses focus.
791
+
792
+ ### When to Use
793
+ - Starting a new coding session
794
+ - Agent output quality is declining (wrong patterns, hallucinated APIs, ignoring conventions)
795
+ - Switching between different parts of a codebase
796
+ - Setting up a new project for AI-assisted development
797
+ - The agent is not following project conventions
798
+
799
+ ### The Context Hierarchy
800
+ Structure context from most persistent to most transient:
801
+ 1. **Rules Files** (CLAUDE.md, etc.) → Always loaded, project-wide
802
+ 2. **Spec / Architecture Docs** → Loaded per feature/session
803
+ 3. **Relevant Source Files** → Loaded per task
804
+ 4. **Error Output / Test Results** → Loaded per iteration
805
+ 5. **Conversation History** → Accumulates, compacts
806
+
807
+ ### Level 1: Rules Files
808
+ Create a rules file that persists across sessions. This is the highest-leverage context you can provide.
809
+
810
+ **CLAUDE.md / AGENTS.md / .cursorrules:**
811
+ \`\`\`markdown
812
+ # Project: [Name]
813
+ ## Tech Stack
814
+ - React 18, TypeScript 5, Vite, Tailwind CSS 4
815
+ - Node.js 22, Express, PostgreSQL, Prisma
816
+ ## Commands
817
+ - Build: \`npm run build\`
818
+ - Test: \`npm test\`
819
+ - Lint: \`npm run lint --fix\`
820
+ - Dev: \`npm run dev\`
821
+ ## Code Conventions
822
+ - Functional components with hooks (no class components)
823
+ - Named exports (no default exports)
824
+ - Use \`cn()\` utility for conditional classNames
825
+ ## Boundaries
826
+ - Never commit .env files or secrets
827
+ - Always run tests before committing
828
+ \`\`\`
829
+
830
+ ### Level 2: Specs and Architecture
831
+ Load the relevant spec section when starting a feature. Don't load the entire spec if only one section applies.
832
+
833
+ ### Level 3: Relevant Source Files
834
+ Before editing a file, read it. Before implementing a pattern, find an existing example in the codebase.
835
+
836
+ **Pre-task context loading:**
837
+ 1. Read the file(s) you'll modify
838
+ 2. Read related test files
839
+ 3. Find one example of a similar pattern already in the codebase
840
+ 4. Read any type definitions or interfaces involved
841
+
842
+ **Trust levels for loaded files:**
843
+ - **Trusted:** Source code, test files, type definitions authored by the project team
844
+ - **Verify before acting on:** Configuration files, data fixtures, documentation from external sources
845
+ - **Untrusted:** User-submitted content, third-party API responses, external documentation
846
+
847
+ ### Level 4: Error Output
848
+ When tests fail or builds break, feed the specific error back to the agent:
849
+ - Effective: "The test failed with: \`TypeError: Cannot read property 'id' of undefined at UserService.ts:42\`"
850
+ - Wasteful: Pasting the entire 500-line test output when only one test failed
851
+
852
+ ### Level 5: Conversation Management
853
+ Long conversations accumulate stale context. Manage this:
854
+ - Start fresh sessions when switching between major features
855
+ - Summarize progress when context is getting long
856
+ - Compact deliberately before critical work
857
+
858
+ ### Context Packing Strategies
859
+ **The Brain Dump** — At session start, provide everything the agent needs in a structured block:
860
+ \`\`\`
861
+ PROJECT CONTEXT:
862
+ - We're building [X] using [tech stack]
863
+ - The relevant spec section is: [spec excerpt]
864
+ - Key constraints: [list]
865
+ - Files involved: [list with brief descriptions]
866
+ - Known gotchas: [list of things to watch out for]
867
+ \`\`\`
868
+
869
+ **The Selective Include** — Only include what's relevant to the current task:
870
+ \`\`\`
871
+ TASK: Add email validation to the registration endpoint
872
+ RELEVANT FILES:
873
+ - src/routes/auth.ts (the endpoint to modify)
874
+ - src/lib/validation.ts (existing validation utilities)
875
+ - tests/routes/auth.test.ts (existing tests to extend)
876
+ PATTERN TO FOLLOW:
877
+ - See how phone validation works in src/lib/validation.ts:45-60
878
+ CONSTRAINT:
879
+ - Must use the existing ValidationError class, not throw raw errors
880
+ \`\`\`
881
+
882
+ **The Hierarchical Summary** — For large projects, maintain a summary index:
883
+ \`\`\`markdown
884
+ # Project Map
885
+ ## Authentication (src/auth/)
886
+ Handles registration, login, password reset.
887
+ Key files: auth.routes.ts, auth.service.ts, auth.middleware.ts
888
+ Pattern: All routes use authMiddleware, errors use AuthError class
889
+ \`\`\`
890
+
891
+ ### Confusion Management
892
+ **When Context Conflicts:**
893
+ \`\`\`
894
+ Spec says: "Use REST for all endpoints"
895
+ Existing code has: GraphQL for the user profile query
896
+ \`\`\`
897
+ Do NOT silently pick one interpretation. Surface it:
898
+ \`\`\`
899
+ CONFUSION:
900
+ The spec calls for REST endpoints, but the existing codebase uses GraphQL
901
+ for user queries (src/graphql/user.ts).
902
+ Options:
903
+ A) Follow the spec — add REST endpoint
904
+ B) Follow existing patterns — use GraphQL
905
+ C) Ask — this seems like an intentional decision I shouldn't override
906
+ → Which approach should I take?
907
+ \`\`\`
908
+
909
+ **When Requirements Are Incomplete:**
910
+ If the spec doesn't cover a case you need to implement:
911
+ 1. Check existing code for precedent
912
+ 2. If no precedent exists, stop and ask
913
+ 3. Don't invent requirements — that's the human's job
914
+
915
+ ### Anti-Patterns
916
+ | Anti-Pattern | Problem | Fix |
917
+ |---|---|---|
918
+ | Context starvation | Agent invents APIs, ignores conventions | Load rules file + relevant source files |
919
+ | Context flooding | Agent loses focus with >5,000 lines of non-task-specific context | Include only what's relevant. Aim for <2,000 lines |
920
+ | Stale context | Agent references outdated patterns or deleted code | Start fresh sessions when context drifts |
921
+ | Missing examples | Agent invents a new style instead of following yours | Include one example of the pattern to follow |
922
+ | Implicit knowledge | Agent doesn't know project-specific rules | Write it down in rules files |
923
+ | Silent confusion | Agent guesses when it should ask | Surface ambiguity explicitly |
924
+
925
+ ### Common Rationalizations
926
+ - "The agent should figure out the conventions" → It can't read your mind. Write a rules file.
927
+ - "More context is always better" → Research shows performance degrades with too many instructions.
928
+ - "The context window is huge, I'll use it all" → Focused context outperforms large context.
929
+
930
+ ### Red Flags
931
+ - Agent output doesn't match project conventions
932
+ - Agent invents APIs or imports that don't exist
933
+ - Agent re-implements utilities that already exist in the codebase
934
+ - Agent quality degrades as the conversation gets longer
935
+ - No rules file exists in the project
936
+ - External data files or config treated as trusted instructions without verification
937
+
938
+ ### Verification
939
+ - [ ] Rules file exists and covers tech stack, commands, conventions, and boundaries
940
+ - [ ] Agent output follows the patterns shown in the rules file
941
+ - [ ] Agent references actual project files and APIs (not hallucinated ones)
942
+ - [ ] Context is refreshed when switching between major tasks`,
943
+ },
944
+ {
945
+ label: "skill:git-workflow-and-versioning",
946
+ tag: null,
947
+ type: "skill",
948
+ summary: "Git workflow with trunk-based development, atomic commits, and descriptive messages. Use when making any code change. Includes save point pattern, pre-commit hygiene, and debugging with git.",
949
+ metadata: { triggers: ["git", "commit", "branch", "version control", "trunk-based", "pre-commit", "PR", "pull request", "bisect", "blame"] },
950
+ content: `## Git Workflow and Versioning
951
+
952
+ Git is your safety net. Treat commits as save points, branches as sandboxes, and history as documentation.
953
+
954
+ ### When to Use
955
+ Always. Every code change flows through git.
956
+
957
+ ### Core Principles
958
+ **Trunk-Based Development** — Keep \`main\` always deployable. Work in short-lived feature branches (1-3 days). Long-lived branches are hidden costs.
959
+
960
+ **1. Commit Early, Commit Often** — Implement slice → Test → Verify → Commit → Next slice
961
+
962
+ **2. Atomic Commits** — Each commit does one logical thing. Separate refactoring from feature work.
963
+
964
+ **3. Descriptive Messages** — Format: \`<type>: <short description>\`
965
+
966
+ <body explaining why>\`
967
+ Types: feat, fix, refactor, test, docs, chore
968
+
969
+ **4. Keep Concerns Separate** — Don't combine formatting with behavior changes. Don't combine refactors with features.
970
+
971
+ **5. Size Your Changes** — ~100 lines per commit/PR. ~1000 lines → split.
972
+
973
+ ### Branching Strategy
974
+ - \`feature/<short-description>\` — One feature per branch
975
+ - \`fix/<short-description>\` — Bug fixes
976
+ - \`chore/<short-description>\` — Tooling, dependencies
977
+ - \`refactor/<short-description>\` — Code restructuring
978
+ - Delete branches after merge
979
+ - Prefer feature flags over long-lived branches
980
+
981
+ ### The Save Point Pattern
982
+ Agent starts work → Makes a change → Test passes? → Commit → Continue. Test fails? → Revert to last commit → Investigate.
983
+
984
+ ### Change Summaries
985
+ After any modification, provide:
986
+ \`\`\`
987
+ CHANGES MADE:
988
+ - file: what changed
989
+
990
+ THINGS I DIDN'T TOUCH (intentionally):
991
+ - file: why not
992
+
993
+ POTENTIAL CONCERNS:
994
+ - anything to flag
995
+ \`\`\`
996
+
997
+ ### Pre-Commit Hygiene
998
+ 1. \`git diff --staged\` — Check what you're committing
999
+ 2. Check for secrets: \`git diff --staged | grep -i "password\\|secret\\|api_key\\|token"\`
1000
+ 3. Run tests: \`npm test\`
1001
+ 4. Run linting: \`npm run lint\`
1002
+ 5. Run type checking: \`npx tsc --noEmit\`
1003
+
1004
+ ### Using Git for Debugging
1005
+ - \`git bisect start\` → \`git bisect bad\` → \`git bisect good <sha>\` — Find which commit introduced a bug
1006
+ - \`git log --oneline -20\` — View recent changes
1007
+ - \`git blame file\` — Find who last changed a specific line
1008
+
1009
+ ### Common Rationalizations
1010
+ - "I'll commit when the feature is done" → One giant commit is impossible to review
1011
+ - "The message doesn't matter" → Messages are documentation
1012
+ - "Branches add overhead" → Short-lived branches are free, long-lived are the problem
1013
+
1014
+ ### Red Flags
1015
+ - Large uncommitted changes accumulating
1016
+ - Commit messages like "fix", "update", "misc"
1017
+ - Formatting changes mixed with behavior changes
1018
+ - No .gitignore in the project
1019
+ - Committing node_modules/, .env, or build artifacts
1020
+ - Long-lived branches diverging from main
1021
+ - Force-pushing to shared branches
1022
+
1023
+ ### Verification
1024
+ - [ ] Commit does one logical thing
1025
+ - [ ] Message explains the why, follows type conventions
1026
+ - [ ] Tests pass before committing
1027
+ - [ ] No secrets in the diff
1028
+ - [ ] No formatting-only changes mixed with behavior changes
1029
+ - [ ] .gitignore covers standard exclusions`,
1030
+ },
1031
+ {
1032
+ label: "skill:incremental-implementation",
1033
+ tag: null,
1034
+ type: "skill",
1035
+ summary: "Build in thin vertical slices with implement-test-verify-commit cycle. Use when implementing any multi-file change or feature. Includes slicing strategies, scope discipline, and increment checklist.",
1036
+ metadata: { triggers: ["implement", "feature", "slice", "vertical slice", "increment", "multi-file", "refactor", "scope", "task breakdown"] },
1037
+ content: `## Incremental Implementation
1038
+
1039
+ Build in thin vertical slices — implement one piece, test it, verify it, then expand. Avoid implementing an entire feature in one pass.
1040
+
1041
+ ### When to Use
1042
+ - Implementing any multi-file change
1043
+ - Building a new feature from a task breakdown
1044
+ - Refactoring existing code
1045
+ - Any time you're tempted to write more than ~100 lines before testing
1046
+
1047
+ ### The Increment Cycle
1048
+ Implement → Test → Verify → Commit → Next slice
1049
+
1050
+ ### Slicing Strategies
1051
+ **Vertical Slices (Preferred)** — Build one complete path through the stack:
1052
+ - Slice 1: Create a task (DB + API + basic UI) → Tests pass, user can create a task
1053
+ - Slice 2: List tasks (query + API + UI) → Tests pass, user can see their tasks
1054
+ - Slice 3: Edit a task → Tests pass, user can modify tasks
1055
+ - Slice 4: Delete a task → Tests pass, full CRUD complete
1056
+
1057
+ **Contract-First Slicing** — Define API contract first, then implement backend and frontend in parallel.
1058
+
1059
+ **Risk-First Slicing** — Tackle the riskiest or most uncertain piece first.
1060
+
1061
+ ### Implementation Rules
1062
+ **Rule 0: Simplicity First** — "What is the simplest thing that could work?" Three similar lines is better than a premature abstraction.
1063
+
1064
+ **Rule 0.5: Scope Discipline** — Touch only what the task requires. Do NOT "clean up" adjacent code, refactor imports, remove comments, add features not in spec, or modernize syntax. If you notice something worth improving, note it — don't fix it.
1065
+
1066
+ **Rule 1: One Thing at a Time** — Each increment changes one logical thing. Don't mix concerns.
1067
+
1068
+ **Rule 2: Keep It Compilable** — After each increment, the project must build and existing tests must pass.
1069
+
1070
+ **Rule 3: Feature Flags for Incomplete Features** — If a feature isn't ready for users but you need to merge increments.
1071
+
1072
+ **Rule 4: Safe Defaults** — New code should default to safe, conservative behavior.
1073
+
1074
+ **Rule 5: Rollback-Friendly** — Each increment should be independently revertable.
1075
+
1076
+ ### Increment Checklist
1077
+ - [ ] The change does one thing and does it completely
1078
+ - [ ] All existing tests still pass
1079
+ - [ ] The build succeeds
1080
+ - [ ] Type checking passes
1081
+ - [ ] Linting passes
1082
+ - [ ] The new functionality works as expected
1083
+ - [ ] The change is committed with a descriptive message
1084
+
1085
+ ### Common Rationalizations
1086
+ - "I'll test it all at the end" → Bugs compound
1087
+ - "It's faster to do it all at once" → Feels faster until something breaks
1088
+ - "These changes are too small to commit separately" → Small commits are free
1089
+ - "This refactor is small enough to include" → Separate refactoring from features
1090
+
1091
+ ### Red Flags
1092
+ - More than 100 lines of code written without running tests
1093
+ - Multiple unrelated changes in a single increment
1094
+ - "Let me just quickly add this too" scope expansion
1095
+ - Skipping the test/verify step
1096
+ - Build or tests broken between increments
1097
+ - Large uncommitted changes accumulating
1098
+ - Building abstractions before the third use case demands it
1099
+ - Touching files outside the task scope "while I'm here"
1100
+
1101
+ ### Verification
1102
+ - [ ] Each increment was individually tested and committed
1103
+ - [ ] The full test suite passes
1104
+ - [ ] The build is clean
1105
+ - [ ] The feature works end-to-end as specified
1106
+ - [ ] No uncommitted changes remain`,
1107
+ },
782
1108
  ];
783
1109
  export async function ensureRuleNodes(store) {
784
1110
  for (const seed of SEED_NODES) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "opencode-fractal-memory",
3
- "version": "0.2.0",
3
+ "version": "0.3.0",
4
4
  "description": "Fractal memory system for OpenCode with semantic search and automatic compression.",
5
5
  "main": "dist/plugin.js",
6
6
  "type": "module",