codetrap 0.1.1 → 0.1.3

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 (48) hide show
  1. package/.agents/plugins/marketplace.json +20 -0
  2. package/README.md +121 -38
  3. package/docs/installation.md +18 -10
  4. package/package.json +4 -1
  5. package/plugins/codetrap-agent/.codex-plugin/plugin.json +34 -0
  6. package/plugins/codetrap-agent/hooks/post-flight-capture.example.md +25 -0
  7. package/plugins/codetrap-agent/hooks/pre-edit.example.sh +10 -0
  8. package/plugins/codetrap-agent/hooks.json +11 -0
  9. package/plugins/codetrap-agent/skills/codetrap-capture/SKILL.md +19 -0
  10. package/plugins/codetrap-agent/skills/codetrap-check/SKILL.md +14 -0
  11. package/plugins/codetrap-agent/templates/AGENTS.codetrap.md +25 -0
  12. package/scripts/release-preflight.ts +55 -0
  13. package/skills/codetrap-add/SKILL.md +4 -1
  14. package/skills/codetrap-check/SKILL.md +24 -4
  15. package/skills/codetrap-search/SKILL.md +32 -12
  16. package/src/commands/command-result.ts +29 -0
  17. package/src/commands/router.ts +6 -400
  18. package/src/commands/workflow.ts +466 -0
  19. package/src/db/embedding-queries.ts +33 -0
  20. package/src/db/queries.ts +119 -20
  21. package/src/db/repository.ts +39 -2
  22. package/src/db/schema.ts +35 -0
  23. package/src/domain/trap.ts +31 -2
  24. package/src/index.ts +13 -1
  25. package/src/lib/config.ts +102 -0
  26. package/src/lib/constants.ts +1 -1
  27. package/src/lib/doctor.ts +76 -0
  28. package/src/lib/embedding-health.ts +49 -0
  29. package/src/lib/format.ts +5 -1
  30. package/src/lib/output-json.ts +116 -0
  31. package/src/lib/scope-context.ts +116 -0
  32. package/src/lib/scope-migration.ts +360 -0
  33. package/src/lib/scope.ts +6 -4
  34. package/src/lib/search-normalizer.ts +6 -0
  35. package/src/lib/search-policy.ts +276 -0
  36. package/src/lib/search-result-card.ts +1 -0
  37. package/src/lib/search-service.ts +36 -98
  38. package/src/lib/store.ts +96 -107
  39. package/src/lib/trap-archive.ts +9 -42
  40. package/src/lib/trap-codec.ts +113 -0
  41. package/src/lib/trap-json-fields.ts +12 -0
  42. package/src/lib/trap-mutation-result.ts +36 -0
  43. package/src/lib/trap-operations.ts +27 -6
  44. package/src/lib/trap-scope-match.ts +112 -0
  45. package/src/lib/trap-search-document.ts +8 -1
  46. package/src/lib/trap-transfer.ts +88 -0
  47. package/src/mcp/server.ts +75 -57
  48. package/src/mcp/tools.ts +32 -5
@@ -0,0 +1,20 @@
1
+ {
2
+ "name": "codetrap-local",
3
+ "interface": {
4
+ "displayName": "codetrap Local"
5
+ },
6
+ "plugins": [
7
+ {
8
+ "name": "codetrap-agent",
9
+ "source": {
10
+ "source": "local",
11
+ "path": "./plugins/codetrap-agent"
12
+ },
13
+ "policy": {
14
+ "installation": "AVAILABLE",
15
+ "authentication": "ON_INSTALL"
16
+ },
17
+ "category": "Productivity"
18
+ }
19
+ ]
20
+ }
package/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  > A local-first coding pitfall memory bank — record mistakes once, never repeat them twice.
4
4
 
5
- **codetrap** records structured coding pitfalls ("traps") and provides search across them before you write code. It serves both human developers via CLI and AI coding agents via MCP (Model Context Protocol).
5
+ **codetrap** records structured coding pitfalls ("traps") and provides search across them before you write code. It is CLI-first for humans and AI coding agents, with an optional MCP (Model Context Protocol) adapter for clients that prefer tool schemas.
6
6
 
7
7
  ## Why?
8
8
 
@@ -10,7 +10,7 @@ AI coding agents make the same mistakes repeatedly across sessions and projects.
10
10
 
11
11
  ## Quick Start
12
12
 
13
- For detailed setup options, see [Installation](docs/installation.md).
13
+ For detailed setup options, see [Installation](docs/installation.md). Maintainers can use the Chinese [Release Playbook](docs/release-playbook.zh-CN.md) when publishing updates.
14
14
 
15
15
  ```bash
16
16
  # Prerequisites: Bun >= 1.x (https://bun.sh)
@@ -36,9 +36,12 @@ codetrap add --json '{
36
36
  "tags": ["fetch", "timeout", "http"]
37
37
  }'
38
38
 
39
- # Search for relevant traps
39
+ # Search for relevant traps as a human
40
40
  codetrap search "HTTP request timeout" --mode hybrid
41
41
 
42
+ # Search for relevant traps as an agent
43
+ codetrap search "HTTP request timeout" --mode hybrid --json
44
+
42
45
  # List all traps
43
46
  codetrap list
44
47
 
@@ -48,13 +51,15 @@ codetrap show 1
48
51
 
49
52
  ## Features
50
53
 
51
- - **Structured trap recording** — title, category, context, mistake, fix, severity, tags, before/after code
54
+ - **Structured trap recording** — title, category, context, mistake, fix, severity, tags, lifecycle, evidence, before/after code
52
55
  - **Dual scope** — project-scoped (`.codetrap/traps.db`) and global (`~/.codetrap/traps.db`)
56
+ - **CLI-first agent API** — `search/show/list/stats/doctor --json` and stdin query support for shell-friendly automation
53
57
  - **Three search modes** — FTS (SQLite FTS5), semantic (Jina embeddings), hybrid (RRF fusion)
54
58
  - **Chinese + mixed-language search** — CJK bigram tokenizer, synonym map for Chinese-English terms
55
- - **MCP server** — 10 tools + 4 resources for AI agent integration
59
+ - **MCP server** — optional tools + resources for AI agent integration
56
60
  - **Embedding cache** with freshness tracking — embeddings are rebuildable, stale ones auto-invalidated
57
- - **Schema migrations** — in-code migration system from v0 through current v3
61
+ - **Doctor diagnostics** — scope, database, and embedding health in text or JSON
62
+ - **Schema migrations** — in-code migration system from v0 through current v5
58
63
  - **Single-binary builds** — `bun build --compile` produces standalone binaries in `dist/`
59
64
 
60
65
  ## Directory Structure
@@ -64,22 +69,39 @@ codetrap/
64
69
  ├── src/
65
70
  │ ├── index.ts CLI entry point
66
71
  │ ├── mcp-server.ts MCP server entry point
67
- │ ├── commands/router.ts CLI command dispatch
72
+ │ ├── commands/router.ts Thin CLI adapter + renderer
73
+ │ ├── commands/workflow.ts CLI command behavior
74
+ │ ├── commands/command-result.ts CLI command results + rendering
68
75
  │ ├── mcp/
69
76
  │ │ ├── server.ts MCP stdio transport + handlers
70
- │ │ ├── tools.ts 7 MCP tool definitions
77
+ │ │ ├── tools.ts 10 MCP tool definitions
71
78
  │ │ └── resources.ts 4 MCP resource URIs
72
79
  │ ├── domain/trap.ts Trap types, builders, schemas
73
80
  │ ├── lib/
74
81
  │ │ ├── store.ts Project/global scope orchestration
75
- │ │ ├── search-service.ts FTS/semantic/hybrid search, RRF fusion
82
+ │ │ ├── trap-operations.ts Shared CLI/MCP operation semantics
83
+ │ │ ├── output-json.ts Shared CLI/MCP JSON presenters
84
+ │ │ ├── scope-context.ts cwd/project/global DB context + repo selection
85
+ │ │ ├── scope-migration.ts Safe project trap scope repair/migration
86
+ │ │ ├── doctor.ts Scope and embedding health diagnostics
87
+ │ │ ├── embedding-health.ts Fresh/stale/missing embedding summaries
88
+ │ │ ├── search-service.ts FTS/semantic/hybrid candidate retrieval
89
+ │ │ ├── search-policy.ts Applicability filtering, rerank, fusion signals
90
+ │ │ ├── search-result-card.ts Compact agent-facing result cards
76
91
  │ │ ├── search-normalizer.ts CJK bigram, synonyms, search_text
77
92
  │ │ ├── fts-query.ts Safe FTS5 literal query compiler
93
+ │ │ ├── trap-search-document.ts Derived search text + embedding passage
94
+ │ │ ├── trap-json-fields.ts Tags/path/evidence JSON array codec
95
+ │ │ ├── trap-codec.ts Storage/JSON/archive/import shape conversion
96
+ │ │ ├── trap-mutation-result.ts Mutation result + scope fallback semantics
97
+ │ │ ├── trap-scope-match.ts Path/module/owner applicability matching
98
+ │ │ ├── trap-archive.ts Import/export compatibility
99
+ │ │ ├── trap-transfer.ts DB-to-DB transfer for scope migration
78
100
  │ │ ├── embedder.ts Jina Embeddings adapter
79
101
  │ │ ├── embedding-job.ts Batch embedding generation
80
102
  │ │ ├── format.ts CLI output formatting
81
103
  │ │ ├── scope.ts Project root detection
82
- │ │ └── constants.ts Categories, severities, defaults
104
+ │ │ └── constants.ts Categories, severities, statuses, defaults
83
105
  │ ├── db/
84
106
  │ │ ├── connection.ts SQLite connection + PRAGMAs
85
107
  │ │ ├── schema.ts Schema init + migrations
@@ -87,13 +109,16 @@ codetrap/
87
109
  │ │ ├── embedding-queries.ts Embedding storage SQL
88
110
  │ │ └── repository.ts Single-DB facade
89
111
  │ └── tests/
90
- │ ├── search-safety.test.ts
91
- │ ├── search-normalizer.test.ts
92
- │ ├── search-chinese.test.ts
93
- │ ├── search-semantic.test.ts
94
- │ ├── search-eval.test.ts
112
+ │ ├── search-*.test.ts
113
+ │ ├── trap-*.test.ts
114
+ │ ├── mcp-tools.test.ts
115
+ │ ├── scope.test.ts
116
+ │ ├── scope-migration-cli.test.ts
117
+ │ ├── import-export-cli.test.ts
95
118
  │ └── fixtures/search-eval.json
96
119
  ├── skills/ Agent skill definitions
120
+ ├── plugins/codetrap-agent/ Sample Codex plugin bundle
121
+ ├── scripts/ Release asset and preflight scripts
97
122
  ├── docs/ Architecture + reference docs
98
123
  ├── package.json
99
124
  ├── tsconfig.json
@@ -105,27 +130,33 @@ codetrap/
105
130
  | Command | Description |
106
131
  |---|---|
107
132
  | `init` | Initialize `.codetrap/` in current project |
108
- | `add` | Record a new trap (JSON or interactive) |
109
- | `search <query>` | Search traps (--mode fts\|semantic\|hybrid) |
110
- | `list` | List traps (--category, --severity, --scope, --limit) |
111
- | `show <id>` | Show full trap details |
112
- | `edit <id>` | Edit a trap |
113
- | `delete <id>` | Delete a trap |
133
+ | `add` | Record a new trap (`--json` structured input; interactive mode is not implemented) |
134
+ | `search <query>` | Search traps (--mode fts\|semantic\|hybrid, --category, --scope, --status, --limit, --path, --module, --owner, --no-rerank, --ranking-signals, --json; query can come from stdin) |
135
+ | `list` | List traps (--category, --scope, --status, --path, --module, --owner, --limit, --json) |
136
+ | `show <id>` | Show full trap details (--json) |
137
+ | `edit <id>` | Edit a trap (`--json` input, `--output-json` output) |
138
+ | `delete <id>` | Delete a trap (--json) |
139
+ | `add_trap_evidence <id>` | Attach source/evidence metadata (--output-json) |
140
+ | `archive_trap <id>` | Archive a trap so default search skips it (--json) |
141
+ | `supersede_trap <old_id> <new_id>` | Mark one trap as replaced by another (--json) |
114
142
  | `export` | Export traps to JSON |
115
- | `import` | Import traps from JSON |
116
- | `stats` | Show database statistics |
143
+ | `import` | Import traps from JSON (--json) |
144
+ | `stats` | Show database statistics (--json includes embedding health) |
145
+ | `doctor` | Diagnose cwd, scope, database paths, trap counts, and embedding health (--json) |
146
+ | `repair-scope` | Move legacy mis-scoped project traps into the current project (dry-run by default, `--apply` to mutate, `--json`) |
147
+ | `migrate-project` | Move project traps between initialized projects (`--from-project-path`, `--to-project-path`, dry-run by default, `--apply`, `--json`) |
117
148
  | `embed` | Generate embeddings (requires JINA_API_KEY) |
118
149
  | `serve` | Start MCP server |
119
150
 
120
151
  ## Agent Integration
121
152
 
122
- For AI coding agents, use three layers:
153
+ For AI coding agents, use the CLI as the default integration path:
123
154
 
124
- - **MCP** gives the agent structured tools like `search_traps` and `add_trap`.
155
+ - **CLI JSON** is the primary agent API and works in any client that can run shell commands.
125
156
  - **AGENTS.md / CLAUDE.md** tells the agent when to use codetrap.
126
- - **CLI** is the fallback that works even when MCP is unavailable.
157
+ - **MCP** is an optional adapter for clients that prefer tool schemas.
127
158
 
128
- MCP and project guidance are complementary. MCP tells the agent what it can call; `AGENTS.md` or `CLAUDE.md` tells it when to call it.
159
+ CLI and project guidance are the main path. MCP should stay thin and share the same store/search behavior.
129
160
 
130
161
  ### MCP Setup
131
162
 
@@ -157,26 +188,37 @@ Add this to `AGENTS.md` for Codex, or to `CLAUDE.md` for Claude Code:
157
188
 
158
189
  Before non-trivial code edits, check codetrap for relevant pitfalls.
159
190
 
160
- Prefer MCP tools when available:
161
- - `search_traps`
162
- - `get_trap`
163
- - `add_trap`
191
+ Default to CLI JSON from the current project cwd:
164
192
 
165
- Fallback to CLI:
193
+ ```bash
194
+ codetrap search "<keywords>" --mode hybrid --json
195
+ ```
196
+
197
+ Read the top 3 action cards before deciding no trap applies. If a card is highly relevant, or has `critical`/`error` severity and is plausibly related, inspect it before editing:
166
198
 
167
199
  ```bash
168
- codetrap search "<keywords>" --mode hybrid
200
+ codetrap show <id> --scope <project|global> --json
169
201
  ```
170
202
 
203
+ When `.codetrap/` exists, prefer project scope for project conventions. Use global for cross-project rules.
204
+
205
+ MCP tools are optional:
206
+ - `search_traps`
207
+ - `get_trap`
208
+ - `add_trap`
209
+
171
210
  When a new recurring mistake or project convention is discovered, ask whether to record it with codetrap.
172
211
  ````
173
212
 
174
213
  Recommended behavior:
175
214
 
176
- - Use `search_traps` or `codetrap search` before risky edits in APIs, auth, database, security, migrations, or project conventions.
177
- - Call `get_trap` for highly relevant results before editing code.
215
+ - Use `codetrap search --json` before risky edits in APIs, auth, database, security, migrations, or project conventions.
216
+ - Read the top 3 returned action cards, or all returned cards if fewer than 3, before deciding there is no relevant trap.
217
+ - Run the returned `next_action.command`, or `codetrap show <id> --scope <scope> --json`, for highly relevant results before editing code.
218
+ - Treat `critical` or `error` traps as worth drilling into when they are plausibly related, even if they are not ranked first.
219
+ - When editing a known area, pass applicability hints such as `--path src/db/repository.ts --module db`.
178
220
  - Apply the recorded `avoid` and `do_instead` guidance while making changes.
179
- - Ask before recording a new trap unless the user explicitly requested it.
221
+ - After user corrections, repeated test failures, or review feedback, propose a post-flight trap capture. Ask before recording a new trap unless the user explicitly requested it.
180
222
 
181
223
  ### Codex Skills
182
224
 
@@ -188,6 +230,8 @@ Codex users can optionally install the bundled skills from `skills/`:
188
230
 
189
231
  Skills are a convenience layer for Codex users. They do not replace MCP or `AGENTS.md`; they make manual triggers like "run codetrap-check" easier.
190
232
 
233
+ The repo also includes a sample Codex plugin bundle at `plugins/codetrap-agent` with skills, optional MCP config, hook templates, and an `AGENTS.md` snippet.
234
+
191
235
  ### MCP Tools
192
236
 
193
237
  | Tool | Description |
@@ -211,13 +255,50 @@ Skills are a convenience layer for Codex users. They do not replace MCP or `AGEN
211
255
  - `codetrap://global/top` — Most-hit global traps
212
256
  - `codetrap://{scope}/trap/{id}` — Individual trap by ID
213
257
 
258
+ Resources can accept an optional encoded `cwd` query parameter when the client knows the target workspace:
259
+
260
+ ```text
261
+ codetrap://project/recent?cwd=%2Fpath%2Fto%2Fproject
262
+ ```
263
+
214
264
  ## Configuration
215
265
 
216
266
  | Env Variable | Required | Description |
217
267
  |---|---|---|
218
268
  | `JINA_API_KEY` | No | Jina AI API key for semantic/hybrid search. Without it, hybrid falls back to FTS. Get one at [jina.ai](https://jina.ai/api-dashboard/) |
269
+ | `CODETRAP_SEARCH_MODE` | No | Default search mode: `fts`, `semantic`, or `hybrid` |
270
+ | `CODETRAP_SEARCH_LIMIT` | No | Default search result limit |
271
+ | `CODETRAP_SEARCH_SCOPE` | No | Default search scope: `project` or `global` |
272
+ | `CODETRAP_RERANK` | No | Enable query-aware reranking (`true`/`false`) |
273
+
274
+ Behavior preferences can also live in `~/.codetrap/config.json`; CLI args override config, config overrides env vars, and env vars override built-in defaults.
275
+
276
+ ```json
277
+ {
278
+ "search": {
279
+ "mode": "hybrid",
280
+ "limit": 20,
281
+ "scope": "project",
282
+ "rerank": true
283
+ }
284
+ }
285
+ ```
286
+
287
+ API keys still belong in environment variables, not config files.
288
+
289
+ ### Scoped Traps
290
+
291
+ Trap JSON supports optional applicability fields:
292
+
293
+ ```json
294
+ {
295
+ "path_globs": ["src/db/**"],
296
+ "module": "db",
297
+ "owner": "platform"
298
+ }
299
+ ```
219
300
 
220
- All other behavior is configured via sensible defaults see `src/lib/constants.ts`.
301
+ Empty applicability fields mean the trap applies everywhere. `search` and `list` can filter with `--path`, `--module`, and `--owner`; matching scoped traps receive a small rerank boost.
221
302
 
222
303
  ### Jina Embeddings Setup
223
304
 
@@ -281,6 +362,8 @@ If `JINA_API_KEY` is not set:
281
362
  bun run build # Build CLI + MCP server binaries → dist/
282
363
  bun run build:cli # dist/codetrap
283
364
  bun run build:serve # dist/codetrap-serve
365
+ bunx tsc --noEmit # Type-check without emitting files
366
+ bun run release:preflight # tests, builds, release assets, smoke test, npm dry-runs
284
367
  ```
285
368
 
286
369
  ## Test
@@ -298,7 +381,7 @@ bun test src/tests/search-eval.test.ts # Recall@5 evaluation
298
381
  | Database | SQLite (bun:sqlite) + FTS5 |
299
382
  | Embeddings | Jina AI (`jina-embeddings-v5-text-small`) |
300
383
  | MCP | `@modelcontextprotocol/sdk` |
301
- | Search | FTS5 + cosine similarity + RRF fusion |
384
+ | Search | FTS5 + cosine similarity + RRF fusion + generic rerank |
302
385
 
303
386
  ## License
304
387
 
@@ -1,6 +1,6 @@
1
1
  # Installation
2
2
 
3
- codetrap supports three installation paths. Use source installation while developing the tool, binary installation for users who do not want a Bun toolchain, and package-manager installation after publishing the package.
3
+ codetrap supports three installation paths. Use source installation while developing the tool, binary installation for users who do not want a Bun toolchain, and package-manager installation for the published `codetrap` package.
4
4
 
5
5
  ## Method 1: Source Install
6
6
 
@@ -72,11 +72,11 @@ Release binaries are built by `.github/workflows/release.yml` when a version tag
72
72
  3. Create and push a matching tag:
73
73
 
74
74
  ```bash
75
- git tag v0.1.1
76
- git push origin v0.1.1
75
+ git tag v0.1.2
76
+ git push origin v0.1.2
77
77
  ```
78
78
 
79
- The release tag must match `package.json` exactly. For example, package version `0.1.1` must use tag `v0.1.1`.
79
+ The release tag must match `package.json` exactly. For example, package version `0.1.2` must use tag `v0.1.2`.
80
80
 
81
81
  The workflow runs:
82
82
 
@@ -158,7 +158,7 @@ Then add `%USERPROFILE%\bin` to your user `Path`.
158
158
 
159
159
  ## Method 3: Package-Manager Install
160
160
 
161
- Best for long-term use after codetrap is published as a package.
161
+ Best for long-term use with the published `codetrap` package.
162
162
 
163
163
  ### For maintainers
164
164
 
@@ -202,7 +202,7 @@ npm pack --dry-run
202
202
 
203
203
  ### For users
204
204
 
205
- Bun users can install it globally after publishing:
205
+ Bun users can install it globally:
206
206
 
207
207
  ```bash
208
208
  bun add -g codetrap
@@ -216,7 +216,7 @@ npm install -g codetrap
216
216
  codetrap --help
217
217
  ```
218
218
 
219
- Until the package is published, use the source install method:
219
+ For local development or unpublished branch testing, use the source install method:
220
220
 
221
221
  ```bash
222
222
  git clone <repo-url>
@@ -296,11 +296,19 @@ codex mcp add codetrap -- "$(bun pm bin -g)/codetrap" serve
296
296
  Agents can also use the CLI directly from `AGENTS.md`:
297
297
 
298
298
  ```md
299
- Before non-trivial code edits, check codetrap:
299
+ Before non-trivial code edits, check codetrap from the current project cwd:
300
300
 
301
- codetrap search "<keywords>" --mode hybrid
301
+ codetrap search "<keywords>" --mode hybrid --json
302
+
303
+ Review the top 3 action cards before deciding no trap applies. If a critical/error result is plausibly related, inspect it before editing:
304
+
305
+ codetrap show <id> --scope <project|global> --json
306
+
307
+ When editing a known area, pass applicability hints:
308
+
309
+ codetrap search "<keywords>" --path src/db/repository.ts --module db --json
302
310
 
303
311
  To add a lesson:
304
312
 
305
- codetrap add --json '{...}'
313
+ codetrap add --json '{...}' --output-json
306
314
  ```
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "codetrap",
3
- "version": "0.1.1",
3
+ "version": "0.1.3",
4
4
  "description": "Capture and retrieve coding pitfalls so AI doesn't repeat mistakes",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -33,6 +33,8 @@
33
33
  "src/index.ts",
34
34
  "src/mcp-server.ts",
35
35
  "skills",
36
+ "plugins",
37
+ ".agents/plugins/marketplace.json",
36
38
  "scripts",
37
39
  "docs/installation.md",
38
40
  ".env.example",
@@ -46,6 +48,7 @@
46
48
  "dev": "bun run src/index.ts",
47
49
  "install:cli": "ln -sf \"$PWD/bin/codetrap\" \"$(bun pm bin -g)/codetrap\"",
48
50
  "build:release": "bun run scripts/build-release.ts",
51
+ "release:preflight": "bun run scripts/release-preflight.ts",
49
52
  "check:release-version": "bun run scripts/check-release-version.ts",
50
53
  "build": "bun build ./src/index.ts --compile --outfile dist/codetrap && bun build ./src/mcp-server.ts --compile --outfile dist/codetrap-serve",
51
54
  "build:cli": "bun build ./src/index.ts --compile --outfile dist/codetrap",
@@ -0,0 +1,34 @@
1
+ {
2
+ "name": "codetrap-agent",
3
+ "version": "0.1.2",
4
+ "description": "CLI-first codetrap integration bundle for coding agents.",
5
+ "author": {
6
+ "name": "codetrap maintainers",
7
+ "email": "maintainers@example.com",
8
+ "url": "https://github.com/woertedetiankong/codetrap"
9
+ },
10
+ "homepage": "https://github.com/woertedetiankong/codetrap#readme",
11
+ "repository": "https://github.com/woertedetiankong/codetrap",
12
+ "license": "MIT",
13
+ "keywords": ["agent", "memory", "cli", "mcp", "pitfalls"],
14
+ "skills": "./skills/",
15
+ "hooks": "./hooks.json",
16
+ "mcpServers": "./.mcp.json",
17
+ "interface": {
18
+ "displayName": "codetrap Agent",
19
+ "shortDescription": "Check local pitfall memory before code changes.",
20
+ "longDescription": "Installs CLI-first guidance, optional MCP config, and example hooks so coding agents can search codetrap before risky edits and propose new trap captures after failures.",
21
+ "developerName": "codetrap maintainers",
22
+ "category": "Productivity",
23
+ "capabilities": ["Tools", "Memory", "Code"],
24
+ "websiteURL": "https://github.com/woertedetiankong/codetrap",
25
+ "privacyPolicyURL": "https://github.com/woertedetiankong/codetrap#readme",
26
+ "termsOfServiceURL": "https://github.com/woertedetiankong/codetrap/blob/main/LICENSE",
27
+ "defaultPrompt": [
28
+ "Check codetrap before editing this code.",
29
+ "Search prior pitfalls for this task.",
30
+ "Propose a codetrap for this failure."
31
+ ],
32
+ "brandColor": "#2563EB"
33
+ }
34
+ }
@@ -0,0 +1,25 @@
1
+ # Post-flight Codetrap Capture
2
+
3
+ Use this template after a task reveals a reusable pitfall. Do not write the trap automatically; ask the user to confirm first.
4
+
5
+ ```json
6
+ {
7
+ "title": "Short pitfall title",
8
+ "category": "bug",
9
+ "scope": "project",
10
+ "context": "When this situation appears...",
11
+ "mistake": "The agent tends to...",
12
+ "fix": "Do this instead...",
13
+ "tags": ["area", "tool"],
14
+ "severity": "warning",
15
+ "path_globs": ["src/example/**"],
16
+ "module": "example",
17
+ "owner": "platform"
18
+ }
19
+ ```
20
+
21
+ After confirmation:
22
+
23
+ ```bash
24
+ codetrap add --json '<json above>' --output-json
25
+ ```
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env sh
2
+ set -eu
3
+
4
+ query="${CODETRAP_QUERY:-${1:-}}"
5
+ if [ -z "$query" ]; then
6
+ echo "CODETRAP_QUERY or first argument is required" >&2
7
+ exit 2
8
+ fi
9
+
10
+ codetrap search "$query" --mode hybrid --json
@@ -0,0 +1,11 @@
1
+ {
2
+ "description": "Example codetrap hook bundle. Treat these commands as templates for clients with hook support.",
3
+ "pre_edit": {
4
+ "description": "Before non-trivial edits, search local pitfalls from the target project cwd.",
5
+ "command": "codetrap search \"$CODETRAP_QUERY\" --mode hybrid --json"
6
+ },
7
+ "post_task": {
8
+ "description": "After repeated failures or user corrections, propose a structured trap; write only after user confirmation.",
9
+ "command": "codetrap add --json '{...}' --output-json"
10
+ }
11
+ }
@@ -0,0 +1,19 @@
1
+ ---
2
+ name: codetrap-capture
3
+ description: Propose a new codetrap after repeated failures, user corrections, or review feedback.
4
+ ---
5
+
6
+ Use this after a task exposes a recurring mistake pattern. Draft a candidate trap with:
7
+
8
+ - triggering context
9
+ - mistake to avoid
10
+ - fix to apply next time
11
+ - severity
12
+ - tags
13
+ - optional `path_globs`, `module`, and `owner`
14
+
15
+ Ask the user to confirm before writing. After confirmation, run:
16
+
17
+ ```bash
18
+ codetrap add --json '{...}' --output-json
19
+ ```
@@ -0,0 +1,14 @@
1
+ ---
2
+ name: codetrap-check
3
+ description: Check codetrap from the current project cwd before non-trivial code edits.
4
+ ---
5
+
6
+ Before risky code changes, run:
7
+
8
+ ```bash
9
+ codetrap search "<task keywords>" --mode hybrid --json
10
+ ```
11
+
12
+ Review the top 3 action cards. If a card is highly relevant, or has `critical` or `error` severity and is plausibly related, run its `next_action.command` before editing.
13
+
14
+ Use MCP only as an optional adapter. When calling MCP tools, pass `cwd` when the client supports it.
@@ -0,0 +1,25 @@
1
+ ## Codetrap
2
+
3
+ Before non-trivial code edits, check local pitfall memory from the current project cwd:
4
+
5
+ ```bash
6
+ codetrap search "<keywords>" --mode hybrid --json
7
+ ```
8
+
9
+ Review the top 3 action cards before deciding no trap applies. If a card is highly relevant, or has `critical` or `error` severity and is plausibly related, inspect it before editing:
10
+
11
+ ```bash
12
+ codetrap show <id> --scope <project|global> --json
13
+ ```
14
+
15
+ When editing a specific area, pass applicability hints:
16
+
17
+ ```bash
18
+ codetrap search "<keywords>" --path src/db/repository.ts --module db --json
19
+ ```
20
+
21
+ After user corrections, repeated test failures, or review feedback, propose a new trap. Only write it after user confirmation:
22
+
23
+ ```bash
24
+ codetrap add --json '{...}' --output-json
25
+ ```
@@ -0,0 +1,55 @@
1
+ #!/usr/bin/env bun
2
+
3
+ const tag = process.argv[2] ?? process.env.RELEASE_TAG;
4
+ const packageJson = await Bun.file("package.json").json() as { name?: string; version?: string };
5
+ const published = await packageVersionExists(packageJson.name, packageJson.version);
6
+
7
+ const commands: { name: string; cmd: string[]; optional?: boolean }[] = [
8
+ ...(tag ? [{ name: "check release version", cmd: ["bun", "run", "check:release-version", tag] }] : []),
9
+ { name: "test", cmd: ["bun", "test", "src/tests"] },
10
+ { name: "build", cmd: ["bun", "run", "build"] },
11
+ { name: "build release assets", cmd: ["bun", "run", "build:release"] },
12
+ { name: "smoke test release binary", cmd: [hostBinaryPath(), "--help"] },
13
+ { name: "npm pack dry-run", cmd: ["npm", "pack", "--dry-run"] },
14
+ ...(!published ? [{ name: "npm publish dry-run", cmd: ["npm", "publish", "--dry-run", "--access", "public"] }] : []),
15
+ ];
16
+
17
+ for (const step of commands) {
18
+ console.log(`\n==> ${step.name}`);
19
+ const proc = Bun.spawnSync({
20
+ cmd: step.cmd,
21
+ stdout: "inherit",
22
+ stderr: "inherit",
23
+ });
24
+ if (!proc.success) {
25
+ console.error(`Release preflight failed at: ${step.name}`);
26
+ process.exit(proc.exitCode ?? 1);
27
+ }
28
+ }
29
+
30
+ if (published) {
31
+ console.log(`\nSkipped npm publish dry-run because ${packageJson.name}@${packageJson.version} is already published.`);
32
+ }
33
+ console.log("\nRelease preflight passed. No package was published and no GitHub release was created.");
34
+
35
+ function hostBinaryPath(): string {
36
+ const platform = process.platform;
37
+ const arch = process.arch;
38
+ if (platform === "darwin" && arch === "arm64") return "./dist/release/codetrap-darwin-arm64";
39
+ if (platform === "darwin" && arch === "x64") return "./dist/release/codetrap-darwin-x64";
40
+ if (platform === "linux" && arch === "arm64") return "./dist/release/codetrap-linux-arm64";
41
+ if (platform === "linux" && arch === "x64") return "./dist/release/codetrap-linux-x64";
42
+ if (platform === "win32" && arch === "x64") return "./dist/release/codetrap-windows-x64.exe";
43
+ throw new Error(`Unsupported release smoke-test platform: ${platform}/${arch}`);
44
+ }
45
+
46
+ async function packageVersionExists(name?: string, version?: string): Promise<boolean> {
47
+ if (!name || !version) return false;
48
+ const proc = Bun.spawnSync({
49
+ cmd: ["npm", "view", `${name}@${version}`, "version", "--json"],
50
+ stdout: "pipe",
51
+ stderr: "pipe",
52
+ });
53
+ if (!proc.success) return false;
54
+ return new TextDecoder().decode(proc.stdout).trim().replace(/^"|"$/g, "") === version;
55
+ }
@@ -50,9 +50,12 @@ codetrap add --json '{
50
50
  "fix": "<what should be done instead>",
51
51
  "tags": ["<tag1>", "<tag2>"],
52
52
  "severity": "<warning|error|critical>",
53
+ "path_globs": ["src/example/**"],
54
+ "module": "<optional subsystem>",
55
+ "owner": "<optional team>",
53
56
  "before_code": "<wrong code snippet (optional)>",
54
57
  "after_code": "<correct code snippet (optional)>"
55
- }'
58
+ }' --output-json
56
59
  ```
57
60
 
58
61
  If the CLI is not available, use the MCP tool `add_trap` instead.