opencodekit 0.16.21 → 0.17.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -44,65 +44,26 @@
44
44
  "autoupdate": false,
45
45
  "formatter": {
46
46
  "biome": {
47
- "command": [
48
- "npx",
49
- "@biomejs/biome",
50
- "check",
51
- "--write",
52
- "$FILE"
53
- ],
54
- "extensions": [
55
- ".js",
56
- ".jsx",
57
- ".ts",
58
- ".tsx",
59
- ".json",
60
- ".jsonc"
61
- ]
47
+ "command": ["npx", "@biomejs/biome", "check", "--write", "$FILE"],
48
+ "extensions": [".js", ".jsx", ".ts", ".tsx", ".json", ".jsonc"]
62
49
  },
63
50
  "cargo-fmt": {
64
- "command": [
65
- "cargo",
66
- "fmt",
67
- "--",
68
- "$FILE"
69
- ],
70
- "extensions": [
71
- ".rs"
72
- ]
51
+ "command": ["cargo", "fmt", "--", "$FILE"],
52
+ "extensions": [".rs"]
73
53
  },
74
54
  "java-formatter": {
75
- "command": [
76
- "google-java-format",
77
- "--replace",
78
- "$FILE"
79
- ],
55
+ "command": ["google-java-format", "--replace", "$FILE"],
80
56
  "environment": {
81
57
  "JAVA_HOME": "{env:JAVA_HOME}"
82
58
  },
83
- "extensions": [
84
- ".java"
85
- ]
59
+ "extensions": [".java"]
86
60
  },
87
61
  "laravel-pint": {
88
- "command": [
89
- "npx",
90
- "laravel-pint",
91
- "--preset",
92
- "psr12",
93
- "$FILE"
94
- ],
95
- "extensions": [
96
- ".php"
97
- ]
62
+ "command": ["npx", "laravel-pint", "--preset", "psr12", "$FILE"],
63
+ "extensions": [".php"]
98
64
  },
99
65
  "oxfmt": {
100
- "command": [
101
- "npx",
102
- "oxfmt",
103
- "--write",
104
- "$FILE"
105
- ],
66
+ "command": ["npx", "oxfmt", "--write", "$FILE"],
106
67
  "extensions": [
107
68
  ".js",
108
69
  ".jsx",
@@ -258,11 +219,12 @@
258
219
  "adaptive": {
259
220
  "options": {
260
221
  "output_config": {
261
- "effort": "high"
222
+ "effort": "max"
262
223
  },
263
224
  "thinking": {
264
225
  "type": "adaptive"
265
- }
226
+ },
227
+ "max_tokens": 64000
266
228
  }
267
229
  },
268
230
  "high": {
@@ -316,9 +278,7 @@
316
278
  "tool_call": true,
317
279
  "variants": {
318
280
  "high": {
319
- "include": [
320
- "reasoning.encrypted_content"
321
- ],
281
+ "include": ["reasoning.encrypted_content"],
322
282
  "reasoningEffort": "high",
323
283
  "reasoningSummary": "auto"
324
284
  },
@@ -347,9 +307,7 @@
347
307
  "disabled": true
348
308
  },
349
309
  "high": {
350
- "include": [
351
- "reasoning.encrypted_content"
352
- ],
310
+ "include": ["reasoning.encrypted_content"],
353
311
  "reasoningEffort": "high",
354
312
  "reasoningSummary": "auto",
355
313
  "textVerbosity": "medium"
@@ -423,17 +381,13 @@
423
381
  "disabled": true
424
382
  },
425
383
  "high": {
426
- "include": [
427
- "reasoning.encrypted_content"
428
- ],
384
+ "include": ["reasoning.encrypted_content"],
429
385
  "reasoningEffort": "high",
430
386
  "reasoningSummary": "auto",
431
387
  "textVerbosity": "low"
432
388
  },
433
389
  "medium": {
434
- "include": [
435
- "reasoning.encrypted_content"
436
- ],
390
+ "include": ["reasoning.encrypted_content"],
437
391
  "reasoningEffort": "medium",
438
392
  "reasoningSummary": "auto",
439
393
  "textVerbosity": "low"
@@ -446,17 +400,13 @@
446
400
  "disabled": true
447
401
  },
448
402
  "high": {
449
- "include": [
450
- "reasoning.encrypted_content"
451
- ],
403
+ "include": ["reasoning.encrypted_content"],
452
404
  "reasoningEffort": "high",
453
405
  "reasoningSummary": "auto",
454
406
  "textVerbosity": "low"
455
407
  },
456
408
  "medium": {
457
- "include": [
458
- "reasoning.encrypted_content"
459
- ],
409
+ "include": ["reasoning.encrypted_content"],
460
410
  "reasoningEffort": "medium",
461
411
  "reasoningSummary": "auto",
462
412
  "textVerbosity": "low"
@@ -612,14 +562,8 @@
612
562
  "output": 65536
613
563
  },
614
564
  "modalities": {
615
- "input": [
616
- "text",
617
- "image",
618
- "pdf"
619
- ],
620
- "output": [
621
- "text"
622
- ]
565
+ "input": ["text", "image", "pdf"],
566
+ "output": ["text"]
623
567
  },
624
568
  "name": "Gemini 2 5 Flash"
625
569
  },
@@ -629,14 +573,8 @@
629
573
  "output": 65536
630
574
  },
631
575
  "modalities": {
632
- "input": [
633
- "text",
634
- "image",
635
- "pdf"
636
- ],
637
- "output": [
638
- "text"
639
- ]
576
+ "input": ["text", "image", "pdf"],
577
+ "output": ["text"]
640
578
  },
641
579
  "name": "Gemini 2 5 Flash Lite"
642
580
  },
@@ -646,14 +584,8 @@
646
584
  "output": 65536
647
585
  },
648
586
  "modalities": {
649
- "input": [
650
- "text",
651
- "image",
652
- "pdf"
653
- ],
654
- "output": [
655
- "text"
656
- ]
587
+ "input": ["text", "image", "pdf"],
588
+ "output": ["text"]
657
589
  },
658
590
  "name": "Gemini 2 5 Pro"
659
591
  },
@@ -663,14 +595,8 @@
663
595
  "output": 65536
664
596
  },
665
597
  "modalities": {
666
- "input": [
667
- "text",
668
- "image",
669
- "pdf"
670
- ],
671
- "output": [
672
- "text"
673
- ]
598
+ "input": ["text", "image", "pdf"],
599
+ "output": ["text"]
674
600
  },
675
601
  "name": "Gemini 3 Flash",
676
602
  "options": {
@@ -700,14 +626,8 @@
700
626
  "output": 65536
701
627
  },
702
628
  "modalities": {
703
- "input": [
704
- "text",
705
- "image",
706
- "pdf"
707
- ],
708
- "output": [
709
- "text"
710
- ]
629
+ "input": ["text", "image", "pdf"],
630
+ "output": ["text"]
711
631
  },
712
632
  "name": "Gemini 3 Flash Preview",
713
633
  "options": {
@@ -737,14 +657,8 @@
737
657
  "output": 65536
738
658
  },
739
659
  "modalities": {
740
- "input": [
741
- "text",
742
- "image",
743
- "pdf"
744
- ],
745
- "output": [
746
- "text"
747
- ]
660
+ "input": ["text", "image", "pdf"],
661
+ "output": ["text"]
748
662
  },
749
663
  "name": "Gemini 3 Pro High",
750
664
  "options": {
@@ -781,14 +695,8 @@
781
695
  "output": 65536
782
696
  },
783
697
  "modalities": {
784
- "input": [
785
- "text",
786
- "image",
787
- "pdf"
788
- ],
789
- "output": [
790
- "text"
791
- ]
698
+ "input": ["text", "image", "pdf"],
699
+ "output": ["text"]
792
700
  },
793
701
  "name": "Gemini 3 Pro Preview",
794
702
  "options": {
@@ -1079,6 +987,21 @@
1079
987
  }
1080
988
  },
1081
989
  "reasoning": true
990
+ },
991
+ "glm-5": {
992
+ "name": "GLM-5",
993
+ "reasoning": true,
994
+ "options": {
995
+ "reasoningEffort": "high",
996
+ "reasoningSummary": "true",
997
+ "temperature": 1.0,
998
+ "top_k": 40,
999
+ "top_p": 0.95,
1000
+ "maxOutputTokens": 131072,
1001
+ "thinking": {
1002
+ "type": "enabled"
1003
+ }
1004
+ }
1082
1005
  }
1083
1006
  },
1084
1007
  "name": "Z.AI Coding Plan"
@@ -11,7 +11,7 @@
11
11
  "type-check": "tsc --noEmit"
12
12
  },
13
13
  "dependencies": {
14
- "@opencode-ai/plugin": "1.1.53"
14
+ "@opencode-ai/plugin": "1.1.59"
15
15
  },
16
16
  "devDependencies": {
17
17
  "@types/node": "^25.1.0",
@@ -3,27 +3,103 @@ name: memory-system
3
3
  description: Use when persisting learnings, loading previous context, or searching past decisions - covers memory file structure, tools, and when to update each file
4
4
  ---
5
5
 
6
- # Memory System
6
+ # Memory System Best Practices
7
7
 
8
- Persistent context that survives across sessions. Uses **SQLite + FTS5** as single source of truth.
8
+ Persistent context that survives across sessions. Uses **SQLite + FTS5** for searchable observations.
9
9
 
10
- ## Architecture
10
+ ## Core Principle
11
11
 
12
+ **Progressive disclosure** — search compactly, fetch fully, timeline chronologically. Never load all memory at once.
13
+
14
+ ---
15
+
16
+ ## The Ritual
17
+
18
+ Follow this every session. Memory is not optional — it's how knowledge compounds.
19
+
20
+ ### 1. Ground — Search Before You Start
21
+
22
+ Always search memory first.
23
+
24
+ ```typescript
25
+ // Search for relevant past work
26
+ memory_search({ query: "<task keywords>", limit: 5 });
27
+ memory_search({ query: "bugfix <component>", type: "observations" });
28
+
29
+ // Check recent handoffs
30
+ memory_search({ query: "handoff", type: "handoffs", limit: 3 });
12
31
  ```
13
- SQLite Database: .opencode/memory/memory.sqlite
14
- ├── observations table (FTS5 indexed)
15
- ├── handoffs/ subdirectory
16
- ├── research/ subdirectory
17
- └── project/ subdirectory (commands, conventions, gotchas, architecture)
32
+
33
+ **Why:** Past you already solved this. Don't rediscover.
34
+
35
+ ### 2. Calibrate — Progressive Disclosure
36
+
37
+ Don't fetch full content until you know you need it.
38
+
39
+ ```typescript
40
+ // 1. Search returns compact index (50-100 tokens per result)
41
+ const results = memory_search({ query: "auth patterns" });
42
+ // Returns: [{id: 42, title: "Auth bug fixed", ...}]
43
+
44
+ // 2. Fetch full details ONLY for relevant IDs
45
+ memory_get({ ids: "42,45" });
46
+
47
+ // 3. See what led to this decision
48
+ memory_timeline({ anchor_id: 42, depth_before: 3 });
18
49
  ```
19
50
 
20
- **Key principle:** All writes go to SQLite. No dual-write pattern. No markdown fallbacks.
51
+ **Why:** Prevents context bloat. High signal, low noise.
52
+
53
+ ### 3. Transform — Record Discoveries
54
+
55
+ Create observations for anything non-obvious. Don't wait until the end.
56
+
57
+ ```typescript
58
+ observation({
59
+ type: "pattern", // decision | bugfix | pattern | discovery | warning
60
+ title: "Brief description",
61
+ narrative: "Context and reasoning...",
62
+ facts: "key, facts, here",
63
+ concepts: "searchable, keywords",
64
+ files_modified: "src/file.ts",
65
+ });
66
+ ```
21
67
 
22
- ## Memory Tools
68
+ | Type | Use When | Example |
69
+ | ----------- | -------------------------- | ---------------------------------- |
70
+ | `decision` | Architectural choice made | "Use zod over yup" |
71
+ | `bugfix` | Root cause found & fixed | "Race condition in async init" |
72
+ | `pattern` | Reusable code pattern | "Repository with error boundaries" |
73
+ | `discovery` | New capability learned | "Bun.test supports mocking" |
74
+ | `warning` | Dangerous pattern to avoid | "Don't use fs.watch in Docker" |
75
+ | `learning` | General insight | "Always validate at boundary" |
76
+
77
+ ### 4. Reset — Handoff for Next Session
78
+
79
+ Document completion state for future you.
80
+
81
+ ```typescript
82
+ memory_update({
83
+ file: "handoffs/YYYY-MM-DD-task",
84
+ content: `## Completed
85
+ - X
86
+
87
+ ## Blockers
88
+ - Y
89
+
90
+ ## Next
91
+ - Z`,
92
+ mode: "append",
93
+ });
94
+ ```
95
+
96
+ ---
97
+
98
+ ## Memory Tools Reference
23
99
 
24
100
  ### memory-search (Start Here)
25
101
 
26
- Fast FTS5 full-text search. Returns **compact index** (50-100 tokens per result) for progressive disclosure.
102
+ Fast FTS5 full-text search. Returns **compact index** for progressive disclosure.
27
103
 
28
104
  ```typescript
29
105
  memory_search({ query: "authentication" });
@@ -41,7 +117,7 @@ memory_search({ query: "patterns", type: "all" }); // Search everything
41
117
 
42
118
  ### memory-get (Progressive Disclosure)
43
119
 
44
- Fetch full observation details after identifying relevant IDs from search:
120
+ Fetch full observation details after identifying relevant IDs:
45
121
 
46
122
  ```typescript
47
123
  memory_get({ ids: "42" }); // Single observation
@@ -61,7 +137,7 @@ memory_timeline({ anchor_id: 42, depth_before: 5, depth_after: 5 });
61
137
  Load project files, handoffs, or templates:
62
138
 
63
139
  ```typescript
64
- memory_read({ file: "project/commands" });
140
+ memory_read({ file: "project/gotchas" });
65
141
  memory_read({ file: "handoffs/2024-01-20-phase-1" });
66
142
  memory_read({ file: "research/auth-patterns" });
67
143
  ```
@@ -78,68 +154,67 @@ memory_update({
78
154
  });
79
155
  ```
80
156
 
81
- ## Observations
157
+ ---
82
158
 
83
- Record structured findings to SQLite with FTS5 indexing:
159
+ ## What Goes Where
84
160
 
85
- ```typescript
86
- observation({
87
- type: "decision", // decision, bugfix, feature, pattern, discovery, learning, warning
88
- title: "Use JWT auth",
89
- narrative: "Decided to use JWT because it's stateless and scales well...",
90
- facts: "stateless, scalable, industry standard", // Key facts (comma-separated)
91
- concepts: "auth, jwt, security", // Keywords for search
92
- confidence: "high", // high, medium, low
93
- files_read: "src/auth.ts, src/middleware.ts", // Files consulted
94
- files_modified: "src/auth.ts", // Files changed
95
- bead_id: "br-abc123", // Link to task (optional)
96
- });
97
- ```
161
+ ### SQLite (observations)
98
162
 
99
- **When to create observations:**
163
+ - Events: decisions, bugfixes, patterns discovered
164
+ - Searchable via FTS5
165
+ - Use `observation()` to create
100
166
 
101
- - Major architectural decisions
102
- - Bug root causes discovered
103
- - Patterns worth reusing
104
- - Gotchas and warnings for future
167
+ ### Markdown Files
105
168
 
106
- ## Standard Project Files
169
+ - Static knowledge: user preferences, tech stack
170
+ - Handoffs: session summaries
171
+ - Research: deep-dive documents
172
+ - Use `memory_read()` / `memory_update()`
107
173
 
108
- | File | Purpose | Update When |
109
- | ------------------------- | ------------------------ | --------------------------- |
110
- | `project/commands.md` | Build/test/lint commands | Discovering new command |
111
- | `project/conventions.md` | Code patterns, style | Learning team pattern |
112
- | `project/gotchas.md` | Footguns, warnings | Hitting unexpected behavior |
113
- | `project/architecture.md` | Key modules, structure | Mapping new area |
174
+ | Location | Content | Tool |
175
+ | -------------------------- | -------------------------- | --------------------------------- |
176
+ | `project/user.md` | User identity, preferences | `memory_read()` |
177
+ | `project/tech-stack.md` | Frameworks, constraints | `memory_read()` |
178
+ | `project/gotchas.md` | Footguns, warnings | `memory_update({mode: "append"})` |
179
+ | `handoffs/YYYY-MM-DD-*.md` | Session summaries | `memory_update()` |
180
+ | `research/*.md` | Deep-dive analysis | `memory_update()` |
181
+ | SQLite | Observations, events | `observation()` |
114
182
 
115
- ## Progressive Disclosure Pattern
183
+ ---
116
184
 
117
- Memory search returns **compact results** to avoid context bloat. Follow this pattern:
185
+ ## Observations Schema
118
186
 
119
187
  ```typescript
120
- // 1. Search for relevant context
121
- memory_search({ query: "auth patterns" });
188
+ observation({
189
+ type: "decision", // decision, bugfix, pattern, discovery, warning, learning
190
+ title: "Use JWT auth",
191
+ narrative: "Decided to use JWT because it's stateless...",
192
+ facts: "stateless, scalable, industry standard",
193
+ concepts: "auth, jwt, security",
194
+ confidence: "high", // high, medium, low
195
+ files_read: "src/auth.ts, src/middleware.ts",
196
+ files_modified: "src/auth.ts",
197
+ bead_id: "br-abc123", // Link to task (optional)
198
+ });
199
+ ```
122
200
 
123
- // 2. Identify relevant observation IDs from compact index
124
- // 3. Fetch full details only for what you need
125
- memory_get({ ids: "42,45" });
201
+ ---
126
202
 
127
- // 4. See chronological context if needed
128
- memory_timeline({ anchor_id: 42 });
129
- ```
203
+ ## Anti-Patterns (Don't Do This)
130
204
 
131
- ## Best Practices
205
+ | Don't | ✅ Do Instead |
206
+ | ----------------------------------- | -------------------------------------- |
207
+ | Load full memory at session start | Use progressive disclosure |
208
+ | Create observations for everything | Only non-obvious decisions |
209
+ | Duplicate in files AND observations | Files = static, SQLite = events |
210
+ | Vague search queries | Use specific keywords, file paths |
211
+ | Subagents writing to memory | Only leader agents create observations |
212
+ | Wait until end to record | Create observations as you discover |
132
213
 
133
- 1. **Search before work** - Run `memory_search` at session start
134
- 2. **Progressive disclosure** - Use search → get → timeline pattern
135
- 3. **Record decisions** - Create observations for non-obvious choices
136
- 4. **Be specific** - Include file paths, function names, concrete examples
137
- 5. **Keep it actionable** - Future agents should know what to do with the info
214
+ ---
138
215
 
139
216
  ## Maintenance
140
217
 
141
- For long-term storage health:
142
-
143
218
  ```typescript
144
219
  // Check current status
145
220
  memory_admin({ operation: "status" });
@@ -151,12 +226,20 @@ memory_admin({ operation: "full" });
151
226
  memory_admin({ operation: "archive", older_than_days: 60, dry_run: true });
152
227
  ```
153
228
 
154
- **Automatic maintenance** runs at session end:
229
+ **Automatic:** Runs at session end (FTS5 optimize, WAL checkpoint if >1MB)
230
+
231
+ **Manual:** Run monthly or when storage grows
232
+
233
+ ---
234
+
235
+ ## Philosophy
236
+
237
+ **Memory is not a dumping ground. It's curated signal.**
155
238
 
156
- - FTS5 index optimization
157
- - WAL checkpoint (if WAL > 1MB)
239
+ - Search before you build
240
+ - Record what you learned
241
+ - Hand off to future you
158
242
 
159
- **Manual maintenance** (run monthly or when storage grows):
243
+ > "The body is architecture. The breath is wiring. The rhythm is survival."
160
244
 
161
- - `archive`: Move old observations to archive table
162
- - `vacuum`: Defragment and reclaim space
245
+ Memory is rhythm it carries knowledge across the silence between sessions.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "opencodekit",
3
- "version": "0.16.21",
3
+ "version": "0.17.1",
4
4
  "description": "CLI tool for bootstrapping and managing OpenCodeKit projects",
5
5
  "keywords": ["agents", "cli", "mcp", "opencode", "opencodekit", "template"],
6
6
  "license": "MIT",