@aistastudio/myc 0.2.0 → 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.
Files changed (3) hide show
  1. package/README.md +40 -9
  2. package/dist/myc.js +539 -423
  3. package/package.json +1 -1
package/README.md CHANGED
@@ -27,19 +27,18 @@ Install Bun: https://bun.sh
27
27
 
28
28
  ## Install
29
29
 
30
- Once published, installation is one command — the package is built and verified
31
- from a tarball today, but nothing has been pushed to the registry yet:
30
+ Installation is one command:
32
31
 
33
32
  ```bash
34
- bun install -g @aistastudio/myc # 3.17 MB, 10 files, no models pulled at install
35
- bunx myc --version
33
+ bun install -g @aistastudio/myc # 3.20 MB, 10 files, no models pulled at install
34
+ myc --version # myc 0.2.1 (schema 1)
36
35
  ```
37
36
 
38
37
  The embedding model is **not** downloaded during install. Semantic search is
39
38
  opt-in and explicit: `myc models fetch` (129 MB, ~7 s). Until then search is
40
39
  lexical and says so.
41
40
 
42
- Until it is published, build from source:
41
+ To run the newest code instead of the published release, build from source:
43
42
 
44
43
  ```bash
45
44
  git clone <repo> && cd myc
@@ -56,11 +55,12 @@ writing a config that silently won't start.
56
55
 
57
56
  ```bash
58
57
  ./dist/myc init # .myc/ + SQLite + migrations in this repo
59
- ./dist/myc wire # hooks for Claude Code / Codex / opencode
58
+ ./dist/myc wire # hooks for Claude Code / Codex / opencode / Kimi
60
59
  ./dist/myc ready # what can be picked up right now
61
60
  ./dist/myc remember "why X, not Y" # record a fact or decision
62
61
  ./dist/myc recall "how retrieval works"
63
62
  ./dist/myc prime # session context packet (agents call it)
63
+ ./dist/myc doctor # schema, counters, hooks — says "don't know" where it doesn't
64
64
  ```
65
65
 
66
66
  Full command list: `./dist/myc --help`.
@@ -94,6 +94,34 @@ cheaper than a miss — 252× in the run of 2026-09-07, ≈27 000× for embeddin
94
94
  the ratio is wall-clock and moves with the machine. The ranking does not: same
95
95
  MRR to three decimals, zero rank differences.
96
96
 
97
+ **Memory survives context compaction.** `myc wire` installs a pre-compact hook,
98
+ so the moment before an agent's context is squeezed the session episode is
99
+ written to disk — raw, `L0`, `acl private`, secrets masked — and a rescue
100
+ packet is printed back into the context that survives. Distillation is queued,
101
+ never done on the write path. The episode is on disk before anything else is
102
+ attempted, so exceeding the hook's timeout costs the summary, not the record:
103
+
104
+ ```
105
+ $ myc absorb-session --reason manual --transcript … --agent claude
106
+ # myc: контекст сжимается — вот что нельзя потерять
107
+ эпизод sess-5jh8je4g050m сохранён (265 Б)
108
+ ДАЛЬШЕ myc show sess-5jh8je4g050m · myc ready --claim
109
+ ```
110
+
111
+ **Memory is separated by session, and the separation is visible.** Every note
112
+ carries a reach: `session` (this conversation) or `project` (everyone). The
113
+ automatic context packet — `prime` — only carries the current session's notes;
114
+ another agent's session does not leak into yours. An explicit `myc recall`
115
+ still finds them, because hiding knowledge is not the same as scoping it, and
116
+ marks each row for what it is: `ses` own session, `ses*` someone else's, `prj`
117
+ project-wide.
118
+
119
+ ```
120
+ $ MYC_SESSION_ID=s1 myc recall "ретраи" $ MYC_SESSION_ID=s2 myc recall "ретраи"
121
+ 1.30 … ses сессионное: ретраи… 1.30 … ses* сессионное: ретраи…
122
+ 1.10 … ses* в сессии один: ретраи… 1.10 … ses* в сессии один: ретраи…
123
+ ```
124
+
97
125
  **Memory has three independent axes**, and the surface says what it hid:
98
126
  tier (project vs personal), session reach, repository reach. `prime` prints
99
127
  `N notes from other repositories hidden` rather than quietly narrowing results.
@@ -113,9 +141,12 @@ last-writer-wins over whole records.
113
141
  889 ms: 796 tasks, 972 dependencies, 265 notes, 41 memories — with unknown
114
142
  issue types carried over verbatim and named, and out-of-range priorities
115
143
  clamped and named, instead of one odd row aborting the import. On that same
116
- graph `myc ready` offers 195 tasks and `bd ready` offers 144: beads inherits
117
- blockers down the parent chain and myc does not yet, so beads is right about
118
- those 51 (open bug `memory-atcm254ry6c7`).
144
+ graph both queues now return the same 152 tasks. They did not always: myc used
145
+ to offer 195 against beads' 144, because beads inherits blockers down the
146
+ parent chain and myc looked only at a task's own. Those 51 were inside a
147
+ still-blocked epic and beads was right to hide them; `memory-atcm254ry6c7` is
148
+ closed, `anc_blockers` is materialised by trigger, and the queue now says
149
+ `281 blocked (51 through an ancestor)` rather than quietly offering them.
119
150
 
120
151
  **Guards are proved by mutation.** Every refusal and every invariant is
121
152
  accompanied by a mutation that removes it; a guard whose removal breaks no test