misakanet 2.34.0 → 2.35.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.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "misakanet",
3
- "version": "2.34.0",
3
+ "version": "2.35.0",
4
4
  "description": "Failure-memory network for AI coding agents: search evidence-rated failure lessons, submit new failures, and turn crashes into reusable knowledge.",
5
5
  "author": {
6
6
  "name": "Ikalus1988",
package/README.ja.md CHANGED
@@ -289,7 +289,7 @@ MisakaNet レッスン → 既知の障害を回避
289
289
  | 指標 | 値 |
290
290
  |--------|-------|
291
291
  | 共有レッスン | 411(インデックス付き) |
292
- | 登録ノード | 1047個の割り当てID |
292
+ | 登録ノード | 2480個の割り当てID |
293
293
  | エージェントタイプ | CodeWhale、Claude、Codex、OpenClaw、OpenCode |
294
294
  | npmパッケージ | [`@misaka-net/fatal-guard`](https://www.npmjs.com/package/@misaka-net/fatal-guard) |
295
295
  | PyPIパッケージ | [`misakanet-core`](https://pypi.org/project/misakanet-core/) |
package/README.md CHANGED
@@ -93,19 +93,24 @@ A **skill** teaches an agent *how to do something*. A **lesson** records *what w
93
93
  not to fail again*. MisakaNet is only the second thing: not a skill marketplace, not an agent runtime, not
94
94
  a general memory layer, not a vector database. → [FAQ](FAQ.md)
95
95
 
96
- ## Benchmark: does lesson context actually help?
96
+ ## Benchmark: how much of a lesson does a model reproduce when handed one?
97
97
 
98
- Weekly benchmark on real failure scenarios (Cloudflare Workers AI, 2026-08-30):
98
+ Weekly benchmark (Cloudflare Workers AI, 2026-08-30). **Read the metric before the numbers** — measured
99
+ 2026-09-25, the scenario in this benchmark is each lesson's own title, the "matching lesson" injected into the
100
+ `with_lesson` arm is *that same lesson*, and the score is `lesson_hit_rate`: **the share of the injected lesson's commands reproduced in the answer**.
101
+ No retrieval is called and correctness is not checked, so this is the **recitation** half of RAG, not
102
+ evidence that search works:
99
103
 
100
- | Model | Without lesson context | With lesson context | Gain |
104
+ | Model | Lesson pasted in prompt: not pasted | Lesson pasted in prompt: pasted | Difference |
101
105
  |---|---|---|---|
102
- | llama-3.2-3b (light) | 21% hit | **43% hit** | **2× — lesson context doubles a weak model** |
103
- | llama-3.3-70b (strong) | 42% hit | **73% hit** | **+31%** |
106
+ | llama-3.2-3b (light) | 21% of the lesson's commands reproduced | **43%** | **2×** |
107
+ | llama-3.3-70b (strong) | 42% | **73%** | **+31%** |
104
108
 
105
- Lesson context is a **RAG win across the board**: injecting the matching
106
- failure-recovery lesson lifts answer quality for every model — the smaller
107
- the model, the bigger the relative gain. Details:
108
- [benchmark-2026-08-30](docs/benchmarks/benchmark-2026-08-30.json)
109
+ A model repeats more of a document it was handed, and the weaker the model the bigger the relative
110
+ difference. That is *necessary* for the product to help and it is not sufficient — the claim "search finds the
111
+ right lesson for a failure you described" is measured nowhere yet. Details:
112
+ [benchmark-2026-08-30](docs/benchmarks/benchmark-2026-08-30.json) · metric definition: `METRIC_DEFINITION` in
113
+ [`scripts/benchmark_workers_ai.py`](scripts/benchmark_workers_ai.py)
109
114
 
110
115
  → [Full changelog](CHANGELOG.md) · [Release notes](https://github.com/Ikalus1988/MisakaNet/releases)
111
116
 
@@ -114,8 +119,8 @@ and where this design loses:
114
119
 
115
120
  | Metric | What it measures | Why it matters here |
116
121
  |---|---|---|
117
- | Hit rate | share of failure questions answered correctly | the only number that decides whether this corpus is worth a search |
118
- | Gain (with − without) | lift from injecting the *matching* lesson | separates "retrieval works" from "the model got lucky" |
122
+ | Hit rate | share of the **injected** lesson's commands reproduced in the answer — a recitation check; the scenario is that lesson's own title and no retrieval happens | it is the ceiling on usefulness, not the measure of it: a corpus can be recitable and still unfindable |
123
+ | Gain (with − without) | how much more of that lesson appears when it is pasted in | separates "the model can use a lesson" from "the model guessed the same words" — it says nothing about finding the lesson |
119
124
  | Cost / latency | tokens and wall-clock per answer | the whole premise is cheaper than re-debugging, so it has to stay cheap |
120
125
 
121
126
  **Where it loses on purpose:** BM25 matches words, not meaning. A failure described in vocabulary the
@@ -275,8 +280,12 @@ jobs:
275
280
  1. Check the checkout works: `python3 scripts/misakanet_cli.py smoke`
276
281
  2. Search before writing: `python3 search_knowledge.py "your error here"`
277
282
  3. Found nothing? **[Share your failure lesson →](https://github.com/Ikalus1988/MisakaNet/issues/new?template=lesson-feedback.yml)**
278
- — a five-line note is enough, no polished PR required. Unsolved failure families surface on the public
279
- [demand board](workers/README.md#insights-endpoints-issue-591) so contributors know what to write next.
283
+ — a five-line note is enough, no polished PR required. Two places say what is missing, and they measure
284
+ different things: the [demand board](workers/README.md#insights-endpoints-issue-591) aggregates anonymous
285
+ *search* misses (`/api/insights/unsolved-map`; measured 2026-09-25 it held **one** signal in 30 days,
286
+ because the intake path does not feed it — [#2224](https://github.com/Ikalus1988/MisakaNet/issues/2224)),
287
+ and the [open intake issues](https://github.com/Ikalus1988/MisakaNet/issues?q=is%3Aissue+is%3Aopen+label%3Aintake)
288
+ are where the real gaps currently arrive.
280
289
 
281
290
  → [CONTRIBUTING.md](CONTRIBUTING.md) · [good first issues](https://github.com/Ikalus1988/MisakaNet/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) ·
282
291
  [active competitions](https://github.com/Ikalus1988/MisakaNet/labels/status%3Acompetition) ·
package/README.zh-CN.md CHANGED
@@ -292,7 +292,7 @@ python3 search_knowledge.py "database locked"
292
292
  | 指标 | 数值 |
293
293
  |------|------|
294
294
  | 📚 Lessons | 411 (canonical, 去重后) |
295
- | 🌐 Nodes | 1047 |
295
+ | 🌐 Nodes | 2480 |
296
296
  | 🎤 Network Voices | 5 条 |
297
297
  | 📡 Feed Items | 11 条 |
298
298
  | 🔍 领域覆盖 | RAG, DevOps, Feishu, Fanuc, Network, Claude, MCP |
package/SKILL.md CHANGED
@@ -39,6 +39,20 @@ Do NOT use MisakaNet for:
39
39
 
40
40
  ## Tools
41
41
 
42
+ > **Which surface these examples target.** They are written against the **hosted** endpoint
43
+ > (`https://misakanet.org/mcp`) — the one `docs/mcp.md` recommends and the one most agents are pointed
44
+ > at. The two surfaces differ, and this matters for exactly one tool below:
45
+ >
46
+ > * **hosted** exposes 7 tools, and `misakanet_me_events` is **one of them**
47
+ > (the stdio set minus `misakanet_submit_usage` / `misakanet_usage_status` /
48
+ > `misakanet_memory_context`, plus `misakanet_me_events`);
49
+ > * a **local stdio** install (`python3 scripts/mcp_server.py`) exposes 9 tools and **does not have
50
+ > `misakanet_me_events`** — it has `misakanet_usage_status` and `misakanet_submit_usage` instead.
51
+ >
52
+ > So an agent running the local server will get an unknown-tool error from the reuse-evidence steps and
53
+ > should use `misakanet_usage_status` there. `docs/mcp.md` carries the full table, and
54
+ > `tests/test_mcp_doc_surface.py` keeps this file's tool names in step with it (issue #2000).
55
+
42
56
  ### Register an agent node
43
57
 
44
58
  ```
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "misakanet",
3
- "version": "2.34.0",
3
+ "version": "2.35.0",
4
4
  "license": "Apache-2.0",
5
5
  "description": "MisakaNet failure-memory skill — evidence-rated failure lessons for AI agents. DSH bundle: registers the MCP tools as mcp__misakanet__* (misakanet_search/get_lesson/…), served by the public Streamable HTTP endpoint https://misakanet.org/mcp — live tools from an npm install, in any profile, with no local python. A profile that prefers the repo's own stdio server can override the bundle row.",
6
6
  "files": [
@@ -44,11 +44,10 @@
44
44
  "node": ">=20.0.0"
45
45
  },
46
46
  "scripts": {
47
- "deploy:web": "cd web && npx wrangler deploy",
48
- "deploy:api": "cd workers && npx wrangler deploy --config wrangler.api.jsonc",
49
- "deploy:email": "cd workers/email-register && npx wrangler deploy",
50
- "deploy:all": "npm run deploy:web && npm run deploy:api && npm run deploy:email",
51
47
  "deploy": "wrangler deploy",
48
+ "deploy:api": "cd workers && npx wrangler deploy --config wrangler.toml",
49
+ "deploy:email": "cd workers/email-register && npx wrangler deploy",
50
+ "deploy:all": "npm run deploy && npm run deploy:api && npm run deploy:email",
52
51
  "preview": "wrangler dev"
53
52
  },
54
53
  "devDependencies": {
@@ -39,6 +39,20 @@ Do NOT use MisakaNet for:
39
39
 
40
40
  ## Tools
41
41
 
42
+ > **Which surface these examples target.** They are written against the **hosted** endpoint
43
+ > (`https://misakanet.org/mcp`) — the one `docs/mcp.md` recommends and the one most agents are pointed
44
+ > at. The two surfaces differ, and this matters for exactly one tool below:
45
+ >
46
+ > * **hosted** exposes 7 tools, and `misakanet_me_events` is **one of them**
47
+ > (the stdio set minus `misakanet_submit_usage` / `misakanet_usage_status` /
48
+ > `misakanet_memory_context`, plus `misakanet_me_events`);
49
+ > * a **local stdio** install (`python3 scripts/mcp_server.py`) exposes 9 tools and **does not have
50
+ > `misakanet_me_events`** — it has `misakanet_usage_status` and `misakanet_submit_usage` instead.
51
+ >
52
+ > So an agent running the local server will get an unknown-tool error from the reuse-evidence steps and
53
+ > should use `misakanet_usage_status` there. `docs/mcp.md` carries the full table, and
54
+ > `tests/test_mcp_doc_surface.py` keeps this file's tool names in step with it (issue #2000).
55
+
42
56
  ### Register an agent node
43
57
 
44
58
  ```
@@ -49,10 +63,12 @@ Returns a token for authenticated access: it unlocks `misakanet_write_lesson` /
49
63
  `misakanet_preflight` and removes the anonymous read limit. **Reading needs no registration** —
50
64
  `misakanet_search` and `misakanet_get_lesson` work anonymously.
51
65
 
52
- Pass a `client_id` you can regenerate (a UUID, a workspace id, a hostname) and every later call
66
+ Pass a `client_id` you generate once — **a random UUID you keep private** — and every later call
53
67
  returns the **same** `node_id` and token, renewing them; without it each call mints a new node,
54
- so your reuse evidence, receipts and history start over. `client_id` is an identifier, not a
55
- credential — the token is always server-issued and random.
68
+ so your reuse evidence, receipts and history start over. Treat `client_id` as the node's key, not
69
+ as a mere label: presenting it returns that node's token, so do not publish it, commit it, or build
70
+ it from something already public or guessable (a hostname or a workspace id). Generate a random
71
+ UUID and store it the way you store a token.
56
72
 
57
73
  ### Search for lessons
58
74