@nxuss/lemma 1.44.0 → 1.45.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.
- package/README.md +59 -8
- package/bin/brain-ingest.js +30 -13
- package/dist/cjs/cli/hostHooks.d.ts +38 -7
- package/dist/cjs/cli/hostHooks.d.ts.map +1 -1
- package/dist/cjs/cli/hostHooks.js +189 -9
- package/dist/cjs/cli/hostHooks.js.map +1 -1
- package/dist/cjs/cli/lemma-proxy.d.ts.map +1 -1
- package/dist/cjs/cli/lemma-proxy.js +13 -16
- package/dist/cjs/cli/lemma-proxy.js.map +1 -1
- package/dist/cjs/cloud/billing/stripeApi.d.ts.map +1 -1
- package/dist/cjs/cloud/billing/stripeApi.js +6 -1
- package/dist/cjs/cloud/billing/stripeApi.js.map +1 -1
- package/dist/cjs/cloud/billing/stripeWebhook.d.ts.map +1 -1
- package/dist/cjs/cloud/billing/stripeWebhook.js +5 -0
- package/dist/cjs/cloud/billing/stripeWebhook.js.map +1 -1
- package/dist/cjs/cloud/console/consoleRouter.d.ts +2 -2
- package/dist/cjs/cloud/console/consoleRouter.d.ts.map +1 -1
- package/dist/cjs/cloud/console/consoleRouter.js +39 -1
- package/dist/cjs/cloud/console/consoleRouter.js.map +1 -1
- package/dist/cjs/cloud/console/mailer.d.ts +2 -0
- package/dist/cjs/cloud/console/mailer.d.ts.map +1 -1
- package/dist/cjs/cloud/console/mailer.js +3 -1
- package/dist/cjs/cloud/console/mailer.js.map +1 -1
- package/dist/cjs/cloud/identity/PlanPolicy.d.ts +26 -5
- package/dist/cjs/cloud/identity/PlanPolicy.d.ts.map +1 -1
- package/dist/cjs/cloud/identity/PlanPolicy.js +56 -16
- package/dist/cjs/cloud/identity/PlanPolicy.js.map +1 -1
- package/dist/cjs/cloud/identity/TenantResolver.d.ts +2 -0
- package/dist/cjs/cloud/identity/TenantResolver.d.ts.map +1 -1
- package/dist/cjs/cloud/identity/TenantResolver.js +1 -1
- package/dist/cjs/cloud/identity/TenantResolver.js.map +1 -1
- package/dist/cjs/cloud/identity/authenticateV2.js +1 -1
- package/dist/cjs/cloud/identity/authenticateV2.js.map +1 -1
- package/dist/cjs/cloud/identity/identityStore.d.ts +11 -0
- package/dist/cjs/cloud/identity/identityStore.d.ts.map +1 -1
- package/dist/cjs/cloud/identity/identityStore.js +26 -9
- package/dist/cjs/cloud/identity/identityStore.js.map +1 -1
- package/dist/cjs/cloud/metering/PostgresLedgerStore.d.ts +3 -1
- package/dist/cjs/cloud/metering/PostgresLedgerStore.d.ts.map +1 -1
- package/dist/cjs/cloud/metering/PostgresLedgerStore.js +12 -0
- package/dist/cjs/cloud/metering/PostgresLedgerStore.js.map +1 -1
- package/dist/cjs/cloud/metering/UsageLedger.d.ts +37 -0
- package/dist/cjs/cloud/metering/UsageLedger.d.ts.map +1 -1
- package/dist/cjs/cloud/metering/UsageLedger.js +42 -0
- package/dist/cjs/cloud/metering/UsageLedger.js.map +1 -1
- package/dist/cjs/cloud/store/FileBrainStore.d.ts +5 -1
- package/dist/cjs/cloud/store/FileBrainStore.d.ts.map +1 -1
- package/dist/cjs/cloud/store/FileBrainStore.js +5 -0
- package/dist/cjs/cloud/store/FileBrainStore.js.map +1 -1
- package/dist/cjs/cloud/store/PostgresBrainStore.d.ts +10 -1
- package/dist/cjs/cloud/store/PostgresBrainStore.d.ts.map +1 -1
- package/dist/cjs/cloud/store/PostgresBrainStore.js +28 -0
- package/dist/cjs/cloud/store/PostgresBrainStore.js.map +1 -1
- package/dist/cjs/cloud/store/memorySummary.d.ts +29 -0
- package/dist/cjs/cloud/store/memorySummary.d.ts.map +1 -0
- package/dist/cjs/cloud/store/memorySummary.js +66 -0
- package/dist/cjs/cloud/store/memorySummary.js.map +1 -0
- package/dist/cjs/cloud/v2/routes/admin.d.ts.map +1 -1
- package/dist/cjs/cloud/v2/routes/admin.js +20 -5
- package/dist/cjs/cloud/v2/routes/admin.js.map +1 -1
- package/dist/cjs/cloud/v2/routes/memories.js +1 -1
- package/dist/cjs/cloud/v2/routes/memories.js.map +1 -1
- package/dist/cjs/cloud/v2/routes/tenant.d.ts +1 -0
- package/dist/cjs/cloud/v2/routes/tenant.d.ts.map +1 -1
- package/dist/cjs/cloud/v2/routes/tenant.js +4 -1
- package/dist/cjs/cloud/v2/routes/tenant.js.map +1 -1
- package/dist/cjs/contracts/api-v2.types.d.ts +2 -0
- package/dist/cjs/contracts/api-v2.types.d.ts.map +1 -1
- package/dist/cjs/contracts/store.d.ts +35 -0
- package/dist/cjs/contracts/store.d.ts.map +1 -1
- package/dist/cjs/mcp/index.js +4 -1
- package/dist/cjs/mcp/index.js.map +1 -1
- package/dist/cjs/mcp/tools/misc.d.ts.map +1 -1
- package/dist/cjs/mcp/tools/misc.js +2 -1
- package/dist/cjs/mcp/tools/misc.js.map +1 -1
- package/dist/cjs/mcp/tools/workspace.d.ts.map +1 -1
- package/dist/cjs/mcp/tools/workspace.js +4 -1
- package/dist/cjs/mcp/tools/workspace.js.map +1 -1
- package/dist/cjs/mcp/tools.d.ts +10 -0
- package/dist/cjs/mcp/tools.d.ts.map +1 -1
- package/dist/cjs/mcp/tools.js +47 -12
- package/dist/cjs/mcp/tools.js.map +1 -1
- package/dist/cjs/subconscious/HostRecall.d.ts.map +1 -1
- package/dist/cjs/subconscious/HostRecall.js +11 -4
- package/dist/cjs/subconscious/HostRecall.js.map +1 -1
- package/dist/cjs/utils/FixCapture.d.ts +7 -5
- package/dist/cjs/utils/FixCapture.d.ts.map +1 -1
- package/dist/cjs/utils/FixCapture.js +64 -32
- package/dist/cjs/utils/FixCapture.js.map +1 -1
- package/dist/cjs/utils/NoTerminal.d.ts +27 -0
- package/dist/cjs/utils/NoTerminal.d.ts.map +1 -0
- package/dist/cjs/utils/NoTerminal.js +37 -0
- package/dist/cjs/utils/NoTerminal.js.map +1 -0
- package/dist/cjs/utils/OpenCodeSession.d.ts +70 -0
- package/dist/cjs/utils/OpenCodeSession.d.ts.map +1 -0
- package/dist/cjs/utils/OpenCodeSession.js +154 -0
- package/dist/cjs/utils/OpenCodeSession.js.map +1 -0
- package/dist/cjs/utils/SessionCapture.d.ts +29 -7
- package/dist/cjs/utils/SessionCapture.d.ts.map +1 -1
- package/dist/cjs/utils/SessionCapture.js +180 -32
- package/dist/cjs/utils/SessionCapture.js.map +1 -1
- package/dist/cjs/utils/TestAutofixInterceptor.d.ts.map +1 -1
- package/dist/cjs/utils/TestAutofixInterceptor.js +2 -0
- package/dist/cjs/utils/TestAutofixInterceptor.js.map +1 -1
- package/dist/esm/cli/hostHooks.d.ts +38 -7
- package/dist/esm/cli/hostHooks.d.ts.map +1 -1
- package/dist/esm/cli/hostHooks.js +187 -8
- package/dist/esm/cli/hostHooks.js.map +1 -1
- package/dist/esm/cli/lemma-proxy.d.ts.map +1 -1
- package/dist/esm/cli/lemma-proxy.js +14 -17
- package/dist/esm/cli/lemma-proxy.js.map +1 -1
- package/dist/esm/cloud/billing/stripeApi.d.ts.map +1 -1
- package/dist/esm/cloud/billing/stripeApi.js +6 -1
- package/dist/esm/cloud/billing/stripeApi.js.map +1 -1
- package/dist/esm/cloud/billing/stripeWebhook.d.ts.map +1 -1
- package/dist/esm/cloud/billing/stripeWebhook.js +5 -0
- package/dist/esm/cloud/billing/stripeWebhook.js.map +1 -1
- package/dist/esm/cloud/console/consoleRouter.d.ts +2 -2
- package/dist/esm/cloud/console/consoleRouter.d.ts.map +1 -1
- package/dist/esm/cloud/console/consoleRouter.js +39 -1
- package/dist/esm/cloud/console/consoleRouter.js.map +1 -1
- package/dist/esm/cloud/console/mailer.d.ts +2 -0
- package/dist/esm/cloud/console/mailer.d.ts.map +1 -1
- package/dist/esm/cloud/console/mailer.js +3 -1
- package/dist/esm/cloud/console/mailer.js.map +1 -1
- package/dist/esm/cloud/identity/PlanPolicy.d.ts +26 -5
- package/dist/esm/cloud/identity/PlanPolicy.d.ts.map +1 -1
- package/dist/esm/cloud/identity/PlanPolicy.js +54 -15
- package/dist/esm/cloud/identity/PlanPolicy.js.map +1 -1
- package/dist/esm/cloud/identity/TenantResolver.d.ts +2 -0
- package/dist/esm/cloud/identity/TenantResolver.d.ts.map +1 -1
- package/dist/esm/cloud/identity/TenantResolver.js +1 -1
- package/dist/esm/cloud/identity/TenantResolver.js.map +1 -1
- package/dist/esm/cloud/identity/authenticateV2.js +1 -1
- package/dist/esm/cloud/identity/authenticateV2.js.map +1 -1
- package/dist/esm/cloud/identity/identityStore.d.ts +11 -0
- package/dist/esm/cloud/identity/identityStore.d.ts.map +1 -1
- package/dist/esm/cloud/identity/identityStore.js +26 -9
- package/dist/esm/cloud/identity/identityStore.js.map +1 -1
- package/dist/esm/cloud/metering/PostgresLedgerStore.d.ts +3 -1
- package/dist/esm/cloud/metering/PostgresLedgerStore.d.ts.map +1 -1
- package/dist/esm/cloud/metering/PostgresLedgerStore.js +12 -0
- package/dist/esm/cloud/metering/PostgresLedgerStore.js.map +1 -1
- package/dist/esm/cloud/metering/UsageLedger.d.ts +37 -0
- package/dist/esm/cloud/metering/UsageLedger.d.ts.map +1 -1
- package/dist/esm/cloud/metering/UsageLedger.js +41 -0
- package/dist/esm/cloud/metering/UsageLedger.js.map +1 -1
- package/dist/esm/cloud/store/FileBrainStore.d.ts +5 -1
- package/dist/esm/cloud/store/FileBrainStore.d.ts.map +1 -1
- package/dist/esm/cloud/store/FileBrainStore.js +5 -0
- package/dist/esm/cloud/store/FileBrainStore.js.map +1 -1
- package/dist/esm/cloud/store/PostgresBrainStore.d.ts +10 -1
- package/dist/esm/cloud/store/PostgresBrainStore.d.ts.map +1 -1
- package/dist/esm/cloud/store/PostgresBrainStore.js +28 -0
- package/dist/esm/cloud/store/PostgresBrainStore.js.map +1 -1
- package/dist/esm/cloud/store/memorySummary.d.ts +29 -0
- package/dist/esm/cloud/store/memorySummary.d.ts.map +1 -0
- package/dist/esm/cloud/store/memorySummary.js +60 -0
- package/dist/esm/cloud/store/memorySummary.js.map +1 -0
- package/dist/esm/cloud/v2/routes/admin.d.ts.map +1 -1
- package/dist/esm/cloud/v2/routes/admin.js +20 -5
- package/dist/esm/cloud/v2/routes/admin.js.map +1 -1
- package/dist/esm/cloud/v2/routes/memories.js +1 -1
- package/dist/esm/cloud/v2/routes/memories.js.map +1 -1
- package/dist/esm/cloud/v2/routes/tenant.d.ts +1 -0
- package/dist/esm/cloud/v2/routes/tenant.d.ts.map +1 -1
- package/dist/esm/cloud/v2/routes/tenant.js +4 -1
- package/dist/esm/cloud/v2/routes/tenant.js.map +1 -1
- package/dist/esm/contracts/api-v2.types.d.ts +2 -0
- package/dist/esm/contracts/api-v2.types.d.ts.map +1 -1
- package/dist/esm/contracts/store.d.ts +35 -0
- package/dist/esm/contracts/store.d.ts.map +1 -1
- package/dist/esm/mcp/index.js +5 -2
- package/dist/esm/mcp/index.js.map +1 -1
- package/dist/esm/mcp/tools/misc.d.ts.map +1 -1
- package/dist/esm/mcp/tools/misc.js +2 -1
- package/dist/esm/mcp/tools/misc.js.map +1 -1
- package/dist/esm/mcp/tools/workspace.d.ts.map +1 -1
- package/dist/esm/mcp/tools/workspace.js +4 -1
- package/dist/esm/mcp/tools/workspace.js.map +1 -1
- package/dist/esm/mcp/tools.d.ts +10 -0
- package/dist/esm/mcp/tools.d.ts.map +1 -1
- package/dist/esm/mcp/tools.js +46 -12
- package/dist/esm/mcp/tools.js.map +1 -1
- package/dist/esm/subconscious/HostRecall.d.ts.map +1 -1
- package/dist/esm/subconscious/HostRecall.js +11 -4
- package/dist/esm/subconscious/HostRecall.js.map +1 -1
- package/dist/esm/utils/FixCapture.d.ts +7 -5
- package/dist/esm/utils/FixCapture.d.ts.map +1 -1
- package/dist/esm/utils/FixCapture.js +64 -33
- package/dist/esm/utils/FixCapture.js.map +1 -1
- package/dist/esm/utils/NoTerminal.d.ts +27 -0
- package/dist/esm/utils/NoTerminal.d.ts.map +1 -0
- package/dist/esm/utils/NoTerminal.js +33 -0
- package/dist/esm/utils/NoTerminal.js.map +1 -0
- package/dist/esm/utils/OpenCodeSession.d.ts +70 -0
- package/dist/esm/utils/OpenCodeSession.d.ts.map +1 -0
- package/dist/esm/utils/OpenCodeSession.js +146 -0
- package/dist/esm/utils/OpenCodeSession.js.map +1 -0
- package/dist/esm/utils/SessionCapture.d.ts +29 -7
- package/dist/esm/utils/SessionCapture.d.ts.map +1 -1
- package/dist/esm/utils/SessionCapture.js +180 -32
- package/dist/esm/utils/SessionCapture.js.map +1 -1
- package/dist/esm/utils/TestAutofixInterceptor.d.ts.map +1 -1
- package/dist/esm/utils/TestAutofixInterceptor.js +2 -0
- package/dist/esm/utils/TestAutofixInterceptor.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
[](https://www.npmjs.com/package/@nxuss/lemma)
|
|
4
4
|

|
|
5
|
-

|
|
6
6
|

|
|
7
7
|
|
|
8
8
|
**A memory your AI agent can verify, and a context window that only holds what matters.**
|
|
@@ -43,23 +43,26 @@ in a local index (BM25, no embeddings service, no cloud). Every memory is tied t
|
|
|
43
43
|
symbols it's about, so when the code changes it comes back **stale** instead of confidently
|
|
44
44
|
wrong — and a memory with no evidence is labelled as such, never sold as a verified answer.
|
|
45
45
|
|
|
46
|
-
**↪ Work that survives the session (Pro).** A session that edited code leaves a hand-off
|
|
47
|
-
transcript and git, with no model tokens: the task exactly as it was given, the files changed, the last
|
|
48
|
-
run
|
|
46
|
+
**↪ Work that survives the session (Pro, Claude Code and OpenCode).** A session that edited code leaves a hand-off
|
|
47
|
+
built from the transcript and git, with no model tokens: the task exactly as it was given, the files changed, the last
|
|
48
|
+
test run, and what each subagent did (its description, the files it edited, its last run), so an orchestrator that
|
|
49
|
+
delegated everything still leaves one. The next session's briefing points at it, so "continue where we left off" has
|
|
50
|
+
something to continue from.
|
|
49
51
|
An agent's own note tends to keep function names and drop their parameter lists; the hand-off keeps the plan
|
|
50
52
|
verbatim. In our benchmark (a plan said only in the first session, graded by hidden tests) agents with Lemma
|
|
51
53
|
finished it in 3 of 3 runs, Claude Code's built-in memory in 1 of 3 and another agent-memory tool in 0 of 3 (3-run
|
|
52
54
|
cells, one model, our own benchmark: a lead, not a proof). It costs more per task, not less, because the agent
|
|
53
55
|
does the work the others skip.
|
|
54
56
|
|
|
55
|
-
**↪ …and the compaction (Pro, Claude Code
|
|
57
|
+
**↪ …and the compaction (Pro, Claude Code and OpenCode).** When Claude Code compacts a long conversation, a `PreCompact` hook
|
|
56
58
|
saves the same hand-off first, and the `SessionStart` that follows puts its content (the plan exactly as it was given,
|
|
57
59
|
the files, the last run) back in context, not a pointer to it. The agent has the plan in front of it without going
|
|
58
60
|
back to the session transcript: in `bench/compaction` the agents with the hook finished the task in 15 of 15 runs
|
|
59
61
|
(Sonnet and Haiku), the Haiku ones without a single trip back to the transcript, and where the transcript could not be
|
|
60
62
|
read it was 5 of 5 against 2 of 5 without the hook (n=5 per arm). It never blocks the compaction: it prints nothing,
|
|
61
|
-
always exits 0 and takes about 0.1 s on a 1.5 MB transcript.
|
|
62
|
-
|
|
63
|
+
always exits 0 and takes about 0.1 s on a 1.5 MB transcript. OpenCode gets the same hand-off through its plugin's
|
|
64
|
+
compaction hook, added to the compaction prompt (verified live; the benchmark numbers above are Claude Code's). Codex
|
|
65
|
+
and Cursor have no pre-compaction event, so nothing is installed for them.
|
|
63
66
|
|
|
64
67
|
**✍️ It fills itself.** A test, build or lint command that goes red → green is saved as
|
|
65
68
|
`fix: <the error>` with the diff that fixed it. Commits become memories. Next time the same
|
|
@@ -111,6 +114,39 @@ Without a license, Pro tools aren't advertised to the model at all. Full list:
|
|
|
111
114
|
|
|
112
115
|
---
|
|
113
116
|
|
|
117
|
+
## Lemma Cloud: one Brain for the whole team
|
|
118
|
+
|
|
119
|
+
**Open now to founder teams.** What one developer's agent learns, every teammate's agent can recall,
|
|
120
|
+
still checked against the code on each machine: a memory goes stale on *your* checkout when the code
|
|
121
|
+
it depends on changed there.
|
|
122
|
+
|
|
123
|
+
- A shared team Brain: memories stored by one agent are recalled by everyone's.
|
|
124
|
+
- Lemma Pro included for every developer on the team.
|
|
125
|
+
- A web console with activity, shared memories, team and billing.
|
|
126
|
+
- Opt-in and narrow: Cloud stores the memories your agents choose to share (their text, with secrets
|
|
127
|
+
redacted first, and the hashes of the files they depend on). Never your repository.
|
|
128
|
+
|
|
129
|
+
| Plan | Founder price | List price | Seats |
|
|
130
|
+
| :--- | :--- | :--- | :--- |
|
|
131
|
+
| **Vinel**, for product teams | $19 / month | $39 | Up to 10 developers |
|
|
132
|
+
| **Regnum**, for high-performance teams | $79 / month | $149 | Up to 50 developers |
|
|
133
|
+
|
|
134
|
+
Founder price locked for 12 months, 14-day free trial, 10 founder spots per plan. Prices in USD,
|
|
135
|
+
before tax. **Apply at [lemma.nxus.studio/#cloud](https://lemma.nxus.studio/#cloud).**
|
|
136
|
+
|
|
137
|
+
Once your team has a key, each developer connects once:
|
|
138
|
+
|
|
139
|
+
```bash
|
|
140
|
+
lemma cloud login # verifies the key and saves it owner-only in ~/.lemma/cloud.json
|
|
141
|
+
lemma cloud status
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
Commit a secret-free `.lemma-cloud.json` (`lemma cloud link --url <your team's URL>`) and teammates
|
|
145
|
+
need nothing but `lemma cloud login`. Prefer to share without a server? `brain_team` (Pro) shares
|
|
146
|
+
verified memories through your own repo.
|
|
147
|
+
|
|
148
|
+
---
|
|
149
|
+
|
|
114
150
|
## Setup
|
|
115
151
|
|
|
116
152
|
| Client | How |
|
|
@@ -125,6 +161,21 @@ it adds a `SessionStart` briefing and a prompt-time recall too, and pre-approves
|
|
|
125
161
|
memory tools so using them never costs a permission prompt. Existing hooks are kept; `--no-hooks`
|
|
126
162
|
skips them. Health check: `lemma doctor`.
|
|
127
163
|
|
|
164
|
+
What each client gets beyond the MCP tools:
|
|
165
|
+
|
|
166
|
+
| | Claude Code | OpenCode | Codex | Cursor |
|
|
167
|
+
| :--- | :---: | :---: | :---: | :---: |
|
|
168
|
+
| 🧠 notes when a native read, edit or failing test touches a memory | ✅ | ✅ | ✅ | ✅ |
|
|
169
|
+
| red → green fix captured from the native shell | ✅ | ✅ | ✅ | ✅ |
|
|
170
|
+
| briefing at session start | ✅ | ✅ (plugin) | — | — |
|
|
171
|
+
| hand-off between sessions, with subagents (Pro) | ✅ | ✅ (plugin) | — | — |
|
|
172
|
+
| hand-off put back after a compaction (Pro) | ✅ | ✅ (plugin) | — | — |
|
|
173
|
+
| warning when a native tool prints a credential | ✅ | ✅ | ✅ | ✅ |
|
|
174
|
+
|
|
175
|
+
Windsurf and Kiro get the MCP server and the agent rules only. OpenCode's MCP server is registered in
|
|
176
|
+
`~/.config/opencode/opencode.json` (or the `.jsonc` you use); an older `lemma init` wrote `~/.opencode.json`, which
|
|
177
|
+
OpenCode does not read, so run `lemma init` again.
|
|
178
|
+
|
|
128
179
|
### After an upgrade
|
|
129
180
|
|
|
130
181
|
After `npm install -g @nxuss/lemma` and reconnecting the MCP server, a project that already ran
|
|
@@ -179,4 +230,4 @@ project, never served across projects.
|
|
|
179
230
|
|
|
180
231
|
---
|
|
181
232
|
|
|
182
|
-
MIT © Nxus Studio · [lemma.nxus.studio](https://lemma.nxus.studio) · [Lemma Pro](https://lemma.nxus.studio/upgrade)
|
|
233
|
+
MIT © Nxus Studio · [lemma.nxus.studio](https://lemma.nxus.studio) · [Lemma Pro](https://lemma.nxus.studio/upgrade) · [Lemma Cloud](https://lemma.nxus.studio/#cloud)
|
package/bin/brain-ingest.js
CHANGED
|
@@ -15,12 +15,15 @@
|
|
|
15
15
|
*
|
|
16
16
|
* Usage: lemma-brain-ingest [projectRoot] [--commits [--max N]] [--changelog] [--team-pull]
|
|
17
17
|
* lemma-brain-ingest --hook-result [--host=claude|codex|cursor|opencode] < payload.json
|
|
18
|
-
* lemma-brain-ingest --hook-failure < payload.json (PostToolUseFailure:
|
|
18
|
+
* lemma-brain-ingest --hook-failure < payload.json (PostToolUseFailure: a failing Bash run, handled like --hook-result)
|
|
19
19
|
* lemma-brain-ingest --prompt-submit < payload.json
|
|
20
20
|
* lemma-brain-ingest --pre-tool < payload.json
|
|
21
21
|
* lemma-brain-ingest --session-end < payload.json
|
|
22
22
|
* lemma-brain-ingest --pre-compact < payload.json (PreCompact: saves the hand-off; prints nothing, never blocks)
|
|
23
23
|
* lemma-brain-ingest --stop < payload.json (Stop: once per session, asks the agent to leave the team what the code cannot show)
|
|
24
|
+
* lemma-brain-ingest --opencode-idle < snapshot.json (OpenCode session.idle: saves/refreshes the hand-off; prints nothing)
|
|
25
|
+
* lemma-brain-ingest --opencode-compacting < snapshot.json (OpenCode compaction: saves the hand-off, prints it for the context)
|
|
26
|
+
* lemma-brain-ingest --session-start --host=opencode (prints the briefing as plain text)
|
|
24
27
|
*
|
|
25
28
|
* --team-pull Import the repo's shared memories from .lemma-brain/ (post-merge/post-checkout).
|
|
26
29
|
* --hook-result Read a host PostToolUse hook payload on stdin (Claude Code shape) and:
|
|
@@ -88,8 +91,10 @@ async function hookResult(args) {
|
|
|
88
91
|
} catch {
|
|
89
92
|
return;
|
|
90
93
|
}
|
|
91
|
-
// PostToolUseFailure (a command that exited non-zero) carries the output in `error`, with no tool_response.
|
|
92
|
-
//
|
|
94
|
+
// PostToolUseFailure (a command that exited non-zero) carries the output in `error`, with no tool_response. Claude Code
|
|
95
|
+
// sends EVERY failing Bash run here and never to PostToolUse, so this path must do all PostToolUse does: when it only
|
|
96
|
+
// fed the leak warning, the red half of a red → green fix was never recorded (no fix memory was ever captured from a
|
|
97
|
+
// native test run) and a failure matching a recorded fix was never recalled.
|
|
93
98
|
const failure = args.includes('--hook-failure');
|
|
94
99
|
if (failure) {
|
|
95
100
|
if (!raw || typeof raw.error !== 'string' || raw.tool_name !== 'Bash') return;
|
|
@@ -99,13 +104,6 @@ async function hookResult(args) {
|
|
|
99
104
|
const recalled = [];
|
|
100
105
|
let root;
|
|
101
106
|
for (const payload of normalizeHostPayload(host, raw)) {
|
|
102
|
-
if (failure) {
|
|
103
|
-
try {
|
|
104
|
-
const leak = leakNote(payload, payload.cwd);
|
|
105
|
-
if (leak && !notes.includes(leak)) notes.push(leak);
|
|
106
|
-
} catch { /* a warning failing must not fail the hook */ }
|
|
107
|
-
continue;
|
|
108
|
-
}
|
|
109
107
|
try {
|
|
110
108
|
const res = recordHookPayload(payload, payload.cwd);
|
|
111
109
|
if (res && res.captured) console.error(res.note.trim());
|
|
@@ -172,7 +170,7 @@ async function preTool() {
|
|
|
172
170
|
|
|
173
171
|
// SessionStart hook (Claude Code): the Brain's briefing and the Lemma playbook, in context
|
|
174
172
|
// before the first prompt — no tool call for the agent to remember or skip.
|
|
175
|
-
async function sessionStart() {
|
|
173
|
+
async function sessionStart(args = []) {
|
|
176
174
|
const dist = path.join(__dirname, '..', 'dist', 'cjs');
|
|
177
175
|
let sessionRecall, compactRecall, formatHostOutput;
|
|
178
176
|
try {
|
|
@@ -198,7 +196,9 @@ async function sessionStart() {
|
|
|
198
196
|
}
|
|
199
197
|
// After a compaction the hand-off's content goes back in; any other start (or no hand-off) is the usual briefing.
|
|
200
198
|
const recall = (payload.source === 'compact' && compactRecall(payload, payload.cwd)) || sessionRecall(payload, payload.cwd);
|
|
201
|
-
const
|
|
199
|
+
const { parseHost } = require(path.join(dist, 'subconscious', 'HostAdapters.js'));
|
|
200
|
+
const host = parseHost((args.find((a) => a.startsWith('--host=')) || '').slice('--host='.length) || undefined);
|
|
201
|
+
const out = formatHostOutput(host, recall ? recall.text : '', 'SessionStart');
|
|
202
202
|
if (out) process.stdout.write(out);
|
|
203
203
|
await reportOffered(dist, payload.cwd, [recall]);
|
|
204
204
|
}
|
|
@@ -246,12 +246,29 @@ async function stop() {
|
|
|
246
246
|
}
|
|
247
247
|
}
|
|
248
248
|
|
|
249
|
+
// OpenCode plugin (session.idle / experimental.session.compacting): the session snapshot from the SDK
|
|
250
|
+
// becomes the same hand-off a Claude Code session leaves (see OpenCodeSession). Idle prints nothing;
|
|
251
|
+
// compacting prints the hand-off for the plugin to add to the compaction context. Never fails loudly.
|
|
252
|
+
async function openCode(compacting) {
|
|
253
|
+
try {
|
|
254
|
+
const dist = path.join(__dirname, '..', 'dist', 'cjs');
|
|
255
|
+
const snap = JSON.parse(readStdin());
|
|
256
|
+
const { captureOpenCodeSession } = require(path.join(dist, 'utils', 'OpenCodeSession.js'));
|
|
257
|
+
const res = captureOpenCodeSession(snap, { compacting });
|
|
258
|
+
if (compacting && res.text) process.stdout.write(res.text);
|
|
259
|
+
} catch {
|
|
260
|
+
// no build, no snapshot: the session goes on untouched
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
|
|
249
264
|
async function main() {
|
|
250
265
|
const args = process.argv.slice(2);
|
|
266
|
+
if (args.includes('--opencode-idle')) return openCode(false);
|
|
267
|
+
if (args.includes('--opencode-compacting')) return openCode(true);
|
|
251
268
|
if (args.includes('--stop')) return stop();
|
|
252
269
|
if (args.includes('--pre-compact')) return preCompact();
|
|
253
270
|
if (args.includes('--session-end')) return sessionEnd();
|
|
254
|
-
if (args.includes('--session-start')) return sessionStart();
|
|
271
|
+
if (args.includes('--session-start')) return sessionStart(args);
|
|
255
272
|
if (args.includes('--prompt-submit')) return promptSubmit();
|
|
256
273
|
if (args.includes('--pre-tool')) return preTool();
|
|
257
274
|
if (args.includes('--hook-result') || args.includes('--hook-failure')) return hookResult(args);
|
|
@@ -44,8 +44,9 @@ export declare const CLAUDE_PRE_COMPACT_HOOK_COMMAND = "command -v lemma-brain-i
|
|
|
44
44
|
*/
|
|
45
45
|
export declare const CLAUDE_STOP_HOOK_COMMAND = "command -v lemma-brain-ingest >/dev/null 2>&1 && lemma-brain-ingest --stop || true";
|
|
46
46
|
/**
|
|
47
|
-
* PostToolUseFailure (Bash): Claude Code sends a command that exits non-zero here and NOT to PostToolUse, so
|
|
48
|
-
*
|
|
47
|
+
* PostToolUseFailure (Bash): Claude Code sends a command that exits non-zero here and NOT to PostToolUse, so a
|
|
48
|
+
* failing test run never reached FixCapture (no red, so no red → green fix memory), the recall of a recorded fix,
|
|
49
|
+
* or the leak warning. The handler treats it exactly like PostToolUse.
|
|
49
50
|
*/
|
|
50
51
|
export declare const CLAUDE_FAILURE_HOOK_COMMAND = "command -v lemma-brain-ingest >/dev/null 2>&1 && lemma-brain-ingest --hook-failure || true";
|
|
51
52
|
export declare const CLAUDE_FAILURE_MATCHER = "Bash";
|
|
@@ -74,12 +75,42 @@ export declare function installCodexHooks(home?: string): HookInstallOutcome;
|
|
|
74
75
|
/** Cursor format: `{ version: 1, hooks: { <event>: [{ command, matcher? }] } }`. */
|
|
75
76
|
export declare function installCursorHooks(home?: string): HookInstallOutcome;
|
|
76
77
|
/**
|
|
77
|
-
* OpenCode has no hook protocol, so the hook is a plugin:
|
|
78
|
-
* to `lemma-brain-ingest --host=opencode
|
|
79
|
-
*
|
|
80
|
-
* tool.execute.before, keyed by call id
|
|
78
|
+
* OpenCode has no hook protocol, so the hook is a plugin:
|
|
79
|
+
* - each finished tool call goes to `lemma-brain-ingest --host=opencode`, and the note it prints (if
|
|
80
|
+
* any) is appended to the tool's output, the only place a plugin can put text the model reads.
|
|
81
|
+
* Arguments are taken from tool.execute.before, keyed by call id: the after-hook's input lacks them.
|
|
82
|
+
* - session.idle (OpenCode has no session end) sends the session and its subagents' child sessions to
|
|
83
|
+
* `--opencode-idle`, which saves the hand-off (see OpenCodeSession); experimental.session.compacting
|
|
84
|
+
* does the same and adds the hand-off to the compaction context, so the plan survives it.
|
|
85
|
+
* - experimental.chat.system.transform adds the session briefing (what `SessionStart` gives Claude
|
|
86
|
+
* Code) to the system prompt, computed once per session and repeated on every step so the prompt
|
|
87
|
+
* stays the same between steps. Subagent sessions get none of this: they are the parent's work.
|
|
88
|
+
* The session is NOT fetched from the SDK on every turn: measured on real sessions, one message's
|
|
89
|
+
* `summary.diffs` held 99.7 MB and whole sessions 170-207 MB, all of which `client.session.messages`
|
|
90
|
+
* returns. The plugin keeps its own trimmed log from the bus events it already receives
|
|
91
|
+
* (message.updated, message.part.updated, session.created/updated). A session it joined midway (opened with
|
|
92
|
+
* -s / --continue) is not fetched either: no SDK query can leave that one message out. Its hand-off then
|
|
93
|
+
* covers what this process saw, and the previous process's hand-off carries the plan and the files over
|
|
94
|
+
* (SessionCapture's continuation). Only session.get, which is small, is asked for, to tell a subagent.
|
|
95
|
+
* The idle/compaction/briefing calls are async (a spawnSync would freeze OpenCode's UI meanwhile) and
|
|
96
|
+
* every hook swallows its errors: Lemma must never be the reason a session fails.
|
|
81
97
|
*/
|
|
82
|
-
export declare const OPENCODE_PLUGIN = "// managed by `lemma init` \u2014 delete this file to disable Lemma Brain recall in OpenCode\nimport { spawnSync } from \"node:child_process\";\n\nexport const LemmaBrainRecall = async ({ directory }) => {\n const argsByCall = new Map();\n return {\n \"tool.execute.before\": async (input, output) => {\n if (!input || !input.callID) return;\n argsByCall.set(input.callID, (output && output.args) || {});\n if (argsByCall.size > 200) argsByCall.delete(argsByCall.keys().next().value);\n },\n \"tool.execute.after\": async (input, output) => {\n try {\n const args = argsByCall.get(input.callID) || input.args || {};\n argsByCall.delete(input.callID);\n if (!output || typeof output.output !== \"string\") return;\n const payload = { tool: input.tool, sessionID: input.sessionID, args, output: output.output, metadata: output.metadata || {}, directory };\n const r = spawnSync(\"lemma-brain-ingest\", [\"--hook-result\", \"--host=opencode\"], { input: JSON.stringify(payload), encoding: \"utf8\", timeout: 5000 });\n const note = typeof r.stdout === \"string\" ? r.stdout.trim() : \"\";\n if (note) output.output += \"\\n\\n\" + note;\n } catch {\n // A recall hint must never be the reason a tool call fails.\n }\n },\n };\n};\n";
|
|
98
|
+
export declare const OPENCODE_PLUGIN = "// managed by `lemma init` \u2014 delete this file to disable Lemma Brain recall in OpenCode\nimport { spawn, spawnSync } from \"node:child_process\";\n\nconst MAX_TEXT = 8000;\nconst OUTPUT_HEAD = 1500;\nconst OUTPUT_TAIL = 4500;\nconst MAX_PARTS = 4000;\nconst INPUT_KEYS = [\"filePath\", \"file_path\", \"path\", \"command\", \"description\", \"subagent_type\", \"patchText\", \"searchContent\", \"replaceContent\", \"patches\"];\n\nconst clip = (s, n) => (typeof s === \"string\" && s.length > n ? s.slice(0, n) : s);\nconst ends = (s) => (typeof s === \"string\" && s.length > OUTPUT_HEAD + OUTPUT_TAIL ? s.slice(0, OUTPUT_HEAD) + \"\\n\u2026\\n\" + s.slice(-OUTPUT_TAIL) : s);\n\n// What Lemma reads of a part (see OpenCodeSession): nothing else crosses the process boundary.\nfunction slimPart(p) {\n if (!p || typeof p !== \"object\") return null;\n if (p.type === \"text\") return p.synthetic || typeof p.text !== \"string\" ? null : { type: \"text\", text: clip(p.text, MAX_TEXT) };\n if (p.type === \"patch\") return Array.isArray(p.files) ? { type: \"patch\", files: p.files.slice(0, 50) } : null;\n if (p.type !== \"tool\" || typeof p.tool !== \"string\") return null;\n const st = p.state || {};\n const raw = st.input && typeof st.input === \"object\" ? st.input : {};\n const input = {};\n for (const k of INPUT_KEYS) if (raw[k] !== undefined) input[k] = typeof raw[k] === \"string\" ? clip(raw[k], 20000) : raw[k];\n const meta = st.metadata || {};\n return { type: \"tool\", tool: p.tool, callID: p.callID, state: { status: st.status, input, output: ends(typeof st.output === \"string\" ? st.output : \"\"), error: clip(st.error, 2000), time: st.time, metadata: { sessionId: meta.sessionId, exit: meta.exit } } };\n}\n\nexport const LemmaBrainRecall = async ({ client, directory }) => {\n const argsByCall = new Map();\n const sessions = new Map(); // id -> { parentID, title, agent, joined, messages: Map(msgId -> { info, parts: Map(partId -> slim) }) }\n const briefings = new Map();\n const ingest = (args, payload, timeoutMs) => new Promise((resolve) => {\n let out = \"\";\n let done = false;\n const finish = () => { if (!done) { done = true; clearTimeout(timer); resolve(out.trim()); } };\n const child = spawn(\"lemma-brain-ingest\", args, { stdio: [\"pipe\", \"pipe\", \"ignore\"] });\n const timer = setTimeout(() => { try { child.kill(); } catch {} finish(); }, timeoutMs);\n child.stdout.on(\"data\", (d) => { out += d; });\n child.on(\"error\", finish);\n child.on(\"close\", finish);\n child.stdin.on(\"error\", () => {});\n child.stdin.end(JSON.stringify(payload));\n });\n const session = (id) => {\n if (!sessions.has(id)) sessions.set(id, { parentID: undefined, title: undefined, agent: undefined, joined: false, messages: new Map(), parts: 0 });\n return sessions.get(id);\n };\n const learn = (info) => {\n if (!info || typeof info.id !== \"string\") return;\n const s = session(info.id);\n s.parentID = info.parentID || null;\n s.title = info.title;\n s.agent = info.agent;\n };\n const message = (s, info) => {\n const m = s.messages.get(info.id) || { info: {}, parts: new Map() };\n // A part can arrive before its message: the placeholder's role and time are corrected here.\n m.info = { role: info.role, time: { created: info.time && info.time.created } };\n s.messages.set(info.id, m);\n return m;\n };\n const addPart = (s, messageID, part) => {\n const slim = slimPart(part);\n if (!slim || !messageID) return;\n const m = s.messages.get(messageID) || (s.messages.set(messageID, { info: { role: \"assistant\", time: {} }, parts: new Map() }), s.messages.get(messageID));\n if (!m.parts.has(part.id)) s.parts++;\n m.parts.set(part.id || String(m.parts.size), slim);\n // A runaway session keeps its first parts (the task) and its latest ones (the work at hand).\n if (s.parts > MAX_PARTS) {\n const ids = [...s.messages.keys()];\n for (const id of ids.slice(2, Math.max(2, ids.length - 300))) { s.parts -= s.messages.get(id).parts.size; s.messages.delete(id); if (s.parts <= MAX_PARTS * 0.8) break; }\n }\n };\n // A session this process did not see start (opened with -s / --continue): only ask whether it is a subagent.\n const join = async (id) => {\n const s = session(id);\n if (s.joined) return s;\n s.joined = true;\n try {\n if (s.parentID === undefined) learn(((await client.session.get({ path: { id } })).data) || { id });\n } catch { /* unknown parent: treated as a main session */ }\n return s;\n };\n const isSubagent = async (id) => !!(await join(id)).parentID;\n const plain = (s) => [...s.messages.values()].sort((a, b) => (a.info.time.created || 0) - (b.info.time.created || 0)).map((m) => ({ info: m.info, parts: [...m.parts.values()] }));\n const snapshot = async (id) => {\n const s = await join(id);\n const kids = [];\n for (const [kid, k] of sessions) if (k.parentID === id) kids.push({ session: { id: kid, title: k.title, agent: k.agent }, messages: plain(k) });\n return { sessionID: id, directory, messages: plain(s), children: kids };\n };\n return {\n \"tool.execute.before\": async (input, output) => {\n if (!input || !input.callID) return;\n argsByCall.set(input.callID, (output && output.args) || {});\n if (argsByCall.size > 200) argsByCall.delete(argsByCall.keys().next().value);\n },\n \"tool.execute.after\": async (input, output) => {\n try {\n const args = argsByCall.get(input.callID) || input.args || {};\n argsByCall.delete(input.callID);\n if (!output || typeof output.output !== \"string\") return;\n const payload = { tool: input.tool, sessionID: input.sessionID, args, output: output.output, metadata: output.metadata || {}, directory };\n const r = spawnSync(\"lemma-brain-ingest\", [\"--hook-result\", \"--host=opencode\"], { input: JSON.stringify(payload), encoding: \"utf8\", timeout: 5000 });\n const note = typeof r.stdout === \"string\" ? r.stdout.trim() : \"\";\n if (note) output.output += \"\\n\\n\" + note;\n } catch {\n // A recall hint must never be the reason a tool call fails.\n }\n },\n event: async ({ event }) => {\n try {\n if (!event || !event.properties) return;\n const props = event.properties;\n if (event.type === \"session.created\" || event.type === \"session.updated\") {\n learn(props.info);\n if (event.type === \"session.created\" && props.info) session(props.info.id).joined = true; // seen from its start\n return;\n }\n if (event.type === \"message.updated\" && props.info && props.info.sessionID) { message(session(props.info.sessionID), props.info); return; }\n if (event.type === \"message.part.updated\" && props.part && props.part.sessionID) { addPart(session(props.part.sessionID), props.part.messageID, props.part); return; }\n if (event.type !== \"session.idle\") return;\n const id = props.sessionID;\n if (!id || (await isSubagent(id))) return;\n await ingest([\"--opencode-idle\", \"--host=opencode\"], await snapshot(id), 15000);\n } catch {\n // the hand-off is a courtesy; the session is never held up by it\n }\n },\n \"experimental.session.compacting\": async (input, output) => {\n try {\n if (!input || !input.sessionID || (await isSubagent(input.sessionID))) return;\n const text = await ingest([\"--opencode-compacting\", \"--host=opencode\"], await snapshot(input.sessionID), 15000);\n if (text && output && Array.isArray(output.context)) output.context.push(text);\n } catch {\n // the compaction goes ahead without the hand-off\n }\n },\n \"experimental.chat.system.transform\": async (input, output) => {\n try {\n const id = input && input.sessionID;\n if (!id || !output || !Array.isArray(output.system)) return;\n if (!briefings.has(id)) {\n briefings.set(id, (await isSubagent(id)) ? \"\" : await ingest([\"--session-start\", \"--host=opencode\"], { cwd: directory, session_id: id, host: \"opencode\" }, 5000));\n }\n const text = briefings.get(id);\n if (text) output.system.push(text);\n } catch {\n // no briefing this time\n }\n },\n };\n};\n";
|
|
99
|
+
/** What `lemma init` registers as OpenCode's MCP server: OpenCode's local-server shape (`type`, argv array). */
|
|
100
|
+
export declare const OPENCODE_MCP_ENTRY: {
|
|
101
|
+
type: string;
|
|
102
|
+
command: string[];
|
|
103
|
+
enabled: boolean;
|
|
104
|
+
};
|
|
105
|
+
/**
|
|
106
|
+
* Register Lemma's MCP server where OpenCode reads it: `~/.config/opencode/opencode.json` (or the
|
|
107
|
+
* `.jsonc` beside it, when that is the one in use). `lemma init` used to write `~/.opencode.json`, a path
|
|
108
|
+
* OpenCode no longer reads, in the old `{command, args}` shape, so outside a repo with its own
|
|
109
|
+
* opencode.json OpenCode had no Lemma tools at all (`opencode mcp list`: "No MCP servers configured").
|
|
110
|
+
* An existing `mcp.lemma` is kept as it is (it may point at a local build on purpose); a file that is
|
|
111
|
+
* not plain JSON (a .jsonc with comments) is left alone and the caller gets the snippet to add.
|
|
112
|
+
*/
|
|
113
|
+
export declare function registerOpenCodeMcp(home?: string): HookInstallOutcome;
|
|
83
114
|
export declare function installOpenCodePlugin(home?: string): HookInstallOutcome;
|
|
84
115
|
export interface HostHookReport {
|
|
85
116
|
host: 'Claude Code' | 'Codex' | 'Cursor' | 'OpenCode';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hostHooks.d.ts","sourceRoot":"","sources":["../../../src/cli/hostHooks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAgBH,wBAAgB,WAAW,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,CAGvE;AAED,eAAO,MAAM,mBAAmB,QAAwB,CAAC;AACzD,0FAA0F;AAC1F,eAAO,MAAM,0BAA0B,gGAA4E,CAAC;AACpH,uGAAuG;AACvG,eAAO,MAAM,4BAA4B,2FAA8E,CAAC;AACxH,eAAO,MAAM,uBAAuB,sCAAsC,CAAC;AAC3E,4FAA4F;AAC5F,eAAO,MAAM,2BAA2B,gGAA6E,CAAC;AACtH,sGAAsG;AACtG,eAAO,MAAM,+BAA+B,8FAAiF,CAAC;AAC9H;;;;GAIG;AACH,eAAO,MAAM,+BAA+B,8FAAiF,CAAC;AAC9H;;;;GAIG;AACH,eAAO,MAAM,wBAAwB,uFAA0E,CAAC;AAChH
|
|
1
|
+
{"version":3,"file":"hostHooks.d.ts","sourceRoot":"","sources":["../../../src/cli/hostHooks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAgBH,wBAAgB,WAAW,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,CAGvE;AAED,eAAO,MAAM,mBAAmB,QAAwB,CAAC;AACzD,0FAA0F;AAC1F,eAAO,MAAM,0BAA0B,gGAA4E,CAAC;AACpH,uGAAuG;AACvG,eAAO,MAAM,4BAA4B,2FAA8E,CAAC;AACxH,eAAO,MAAM,uBAAuB,sCAAsC,CAAC;AAC3E,4FAA4F;AAC5F,eAAO,MAAM,2BAA2B,gGAA6E,CAAC;AACtH,sGAAsG;AACtG,eAAO,MAAM,+BAA+B,8FAAiF,CAAC;AAC9H;;;;GAIG;AACH,eAAO,MAAM,+BAA+B,8FAAiF,CAAC;AAC9H;;;;GAIG;AACH,eAAO,MAAM,wBAAwB,uFAA0E,CAAC;AAChH;;;;GAIG;AACH,eAAO,MAAM,2BAA2B,+FAA6E,CAAC;AACtH,eAAO,MAAM,sBAAsB,SAAS,CAAC;AAC7C,eAAO,MAAM,mBAAmB,gDAAgD,CAAC;AACjF,eAAO,MAAM,kBAAkB,gCAAgC,CAAC;AAChE,eAAO,MAAM,mBAAmB,qBAAqB,CAAC;AACtD,eAAO,MAAM,sBAAsB,UAAU,CAAC;AAE9C;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,UAWD,CAAC;AAEjC,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,WAAW,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAC;IACzD,IAAI,EAAE,MAAM,CAAC;IACb,8EAA8E;IAC9E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,6FAA6F;IAC7F,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AA6FD,wBAAgB,kBAAkB,CAAC,GAAG,GAAE,MAAsB,EAAE,OAAO,GAAE;IAAE,WAAW,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,kBAAkB,CA8B3H;AAED,wBAAgB,iBAAiB,CAAC,IAAI,GAAE,MAAqB,GAAG,kBAAkB,CAEjF;AAED,oFAAoF;AACpF,wBAAgB,kBAAkB,CAAC,IAAI,GAAE,MAAqB,GAAG,kBAAkB,CAkClF;AAID;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,eAAe,suQAwJ3B,CAAC;AAEF,gHAAgH;AAChH,eAAO,MAAM,kBAAkB;;;;CAAkF,CAAC;AAElH;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,GAAE,MAAqB,GAAG,kBAAkB,CAsBnF;AAED,wBAAgB,qBAAqB,CAAC,IAAI,GAAE,MAAqB,GAAG,kBAAkB,CAYrF;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,aAAa,GAAG,OAAO,GAAG,QAAQ,GAAG,UAAU,CAAC;IACtD,OAAO,EAAE,kBAAkB,CAAC;CAC7B;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,GAAE,MAAsB,EAAE,IAAI,GAAE,MAAqB,GAAG,cAAc,EAAE,CAO3G;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,GAAE,MAAsB,GAAG,kBAAkB,GAAG,IAAI,CAWxF"}
|
|
@@ -25,11 +25,12 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
25
25
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
26
26
|
};
|
|
27
27
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
28
|
-
exports.OPENCODE_PLUGIN = exports.CLAUDE_ALLOWED_TOOLS = exports.CURSOR_FAILURE_MATCHER = exports.CURSOR_POST_MATCHER = exports.CODEX_HOOK_MATCHER = exports.CLAUDE_HOOK_MATCHER = exports.CLAUDE_FAILURE_MATCHER = exports.CLAUDE_FAILURE_HOOK_COMMAND = exports.CLAUDE_STOP_HOOK_COMMAND = exports.CLAUDE_PRE_COMPACT_HOOK_COMMAND = exports.CLAUDE_SESSION_END_HOOK_COMMAND = exports.CLAUDE_SESSION_HOOK_COMMAND = exports.CLAUDE_PRE_TOOL_MATCHER = exports.CLAUDE_PRE_TOOL_HOOK_COMMAND = exports.CLAUDE_PROMPT_HOOK_COMMAND = exports.CLAUDE_HOOK_COMMAND = void 0;
|
|
28
|
+
exports.OPENCODE_MCP_ENTRY = exports.OPENCODE_PLUGIN = exports.CLAUDE_ALLOWED_TOOLS = exports.CURSOR_FAILURE_MATCHER = exports.CURSOR_POST_MATCHER = exports.CODEX_HOOK_MATCHER = exports.CLAUDE_HOOK_MATCHER = exports.CLAUDE_FAILURE_MATCHER = exports.CLAUDE_FAILURE_HOOK_COMMAND = exports.CLAUDE_STOP_HOOK_COMMAND = exports.CLAUDE_PRE_COMPACT_HOOK_COMMAND = exports.CLAUDE_SESSION_END_HOOK_COMMAND = exports.CLAUDE_SESSION_HOOK_COMMAND = exports.CLAUDE_PRE_TOOL_MATCHER = exports.CLAUDE_PRE_TOOL_HOOK_COMMAND = exports.CLAUDE_PROMPT_HOOK_COMMAND = exports.CLAUDE_HOOK_COMMAND = void 0;
|
|
29
29
|
exports.hookCommand = hookCommand;
|
|
30
30
|
exports.installClaudeHooks = installClaudeHooks;
|
|
31
31
|
exports.installCodexHooks = installCodexHooks;
|
|
32
32
|
exports.installCursorHooks = installCursorHooks;
|
|
33
|
+
exports.registerOpenCodeMcp = registerOpenCodeMcp;
|
|
33
34
|
exports.installOpenCodePlugin = installOpenCodePlugin;
|
|
34
35
|
exports.installHostHooks = installHostHooks;
|
|
35
36
|
exports.repairClaudeHooks = repairClaudeHooks;
|
|
@@ -72,8 +73,9 @@ exports.CLAUDE_PRE_COMPACT_HOOK_COMMAND = `command -v lemma-brain-ingest >/dev/n
|
|
|
72
73
|
*/
|
|
73
74
|
exports.CLAUDE_STOP_HOOK_COMMAND = `command -v lemma-brain-ingest >/dev/null 2>&1 && ${STOP_MARK} || true`;
|
|
74
75
|
/**
|
|
75
|
-
* PostToolUseFailure (Bash): Claude Code sends a command that exits non-zero here and NOT to PostToolUse, so
|
|
76
|
-
*
|
|
76
|
+
* PostToolUseFailure (Bash): Claude Code sends a command that exits non-zero here and NOT to PostToolUse, so a
|
|
77
|
+
* failing test run never reached FixCapture (no red, so no red → green fix memory), the recall of a recorded fix,
|
|
78
|
+
* or the leak warning. The handler treats it exactly like PostToolUse.
|
|
77
79
|
*/
|
|
78
80
|
exports.CLAUDE_FAILURE_HOOK_COMMAND = `command -v lemma-brain-ingest >/dev/null 2>&1 && ${FAILURE_MARK} || true`;
|
|
79
81
|
exports.CLAUDE_FAILURE_MATCHER = 'Bash';
|
|
@@ -271,16 +273,116 @@ function installCursorHooks(home = os_1.default.homedir()) {
|
|
|
271
273
|
}
|
|
272
274
|
const OPENCODE_MARK = '// managed by `lemma init` — delete this file to disable Lemma Brain recall in OpenCode';
|
|
273
275
|
/**
|
|
274
|
-
* OpenCode has no hook protocol, so the hook is a plugin:
|
|
275
|
-
* to `lemma-brain-ingest --host=opencode
|
|
276
|
-
*
|
|
277
|
-
* tool.execute.before, keyed by call id
|
|
276
|
+
* OpenCode has no hook protocol, so the hook is a plugin:
|
|
277
|
+
* - each finished tool call goes to `lemma-brain-ingest --host=opencode`, and the note it prints (if
|
|
278
|
+
* any) is appended to the tool's output, the only place a plugin can put text the model reads.
|
|
279
|
+
* Arguments are taken from tool.execute.before, keyed by call id: the after-hook's input lacks them.
|
|
280
|
+
* - session.idle (OpenCode has no session end) sends the session and its subagents' child sessions to
|
|
281
|
+
* `--opencode-idle`, which saves the hand-off (see OpenCodeSession); experimental.session.compacting
|
|
282
|
+
* does the same and adds the hand-off to the compaction context, so the plan survives it.
|
|
283
|
+
* - experimental.chat.system.transform adds the session briefing (what `SessionStart` gives Claude
|
|
284
|
+
* Code) to the system prompt, computed once per session and repeated on every step so the prompt
|
|
285
|
+
* stays the same between steps. Subagent sessions get none of this: they are the parent's work.
|
|
286
|
+
* The session is NOT fetched from the SDK on every turn: measured on real sessions, one message's
|
|
287
|
+
* `summary.diffs` held 99.7 MB and whole sessions 170-207 MB, all of which `client.session.messages`
|
|
288
|
+
* returns. The plugin keeps its own trimmed log from the bus events it already receives
|
|
289
|
+
* (message.updated, message.part.updated, session.created/updated). A session it joined midway (opened with
|
|
290
|
+
* -s / --continue) is not fetched either: no SDK query can leave that one message out. Its hand-off then
|
|
291
|
+
* covers what this process saw, and the previous process's hand-off carries the plan and the files over
|
|
292
|
+
* (SessionCapture's continuation). Only session.get, which is small, is asked for, to tell a subagent.
|
|
293
|
+
* The idle/compaction/briefing calls are async (a spawnSync would freeze OpenCode's UI meanwhile) and
|
|
294
|
+
* every hook swallows its errors: Lemma must never be the reason a session fails.
|
|
278
295
|
*/
|
|
279
296
|
exports.OPENCODE_PLUGIN = `${OPENCODE_MARK}
|
|
280
|
-
import { spawnSync } from "node:child_process";
|
|
297
|
+
import { spawn, spawnSync } from "node:child_process";
|
|
281
298
|
|
|
282
|
-
|
|
299
|
+
const MAX_TEXT = 8000;
|
|
300
|
+
const OUTPUT_HEAD = 1500;
|
|
301
|
+
const OUTPUT_TAIL = 4500;
|
|
302
|
+
const MAX_PARTS = 4000;
|
|
303
|
+
const INPUT_KEYS = ["filePath", "file_path", "path", "command", "description", "subagent_type", "patchText", "searchContent", "replaceContent", "patches"];
|
|
304
|
+
|
|
305
|
+
const clip = (s, n) => (typeof s === "string" && s.length > n ? s.slice(0, n) : s);
|
|
306
|
+
const ends = (s) => (typeof s === "string" && s.length > OUTPUT_HEAD + OUTPUT_TAIL ? s.slice(0, OUTPUT_HEAD) + "\\n…\\n" + s.slice(-OUTPUT_TAIL) : s);
|
|
307
|
+
|
|
308
|
+
// What Lemma reads of a part (see OpenCodeSession): nothing else crosses the process boundary.
|
|
309
|
+
function slimPart(p) {
|
|
310
|
+
if (!p || typeof p !== "object") return null;
|
|
311
|
+
if (p.type === "text") return p.synthetic || typeof p.text !== "string" ? null : { type: "text", text: clip(p.text, MAX_TEXT) };
|
|
312
|
+
if (p.type === "patch") return Array.isArray(p.files) ? { type: "patch", files: p.files.slice(0, 50) } : null;
|
|
313
|
+
if (p.type !== "tool" || typeof p.tool !== "string") return null;
|
|
314
|
+
const st = p.state || {};
|
|
315
|
+
const raw = st.input && typeof st.input === "object" ? st.input : {};
|
|
316
|
+
const input = {};
|
|
317
|
+
for (const k of INPUT_KEYS) if (raw[k] !== undefined) input[k] = typeof raw[k] === "string" ? clip(raw[k], 20000) : raw[k];
|
|
318
|
+
const meta = st.metadata || {};
|
|
319
|
+
return { type: "tool", tool: p.tool, callID: p.callID, state: { status: st.status, input, output: ends(typeof st.output === "string" ? st.output : ""), error: clip(st.error, 2000), time: st.time, metadata: { sessionId: meta.sessionId, exit: meta.exit } } };
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
export const LemmaBrainRecall = async ({ client, directory }) => {
|
|
283
323
|
const argsByCall = new Map();
|
|
324
|
+
const sessions = new Map(); // id -> { parentID, title, agent, joined, messages: Map(msgId -> { info, parts: Map(partId -> slim) }) }
|
|
325
|
+
const briefings = new Map();
|
|
326
|
+
const ingest = (args, payload, timeoutMs) => new Promise((resolve) => {
|
|
327
|
+
let out = "";
|
|
328
|
+
let done = false;
|
|
329
|
+
const finish = () => { if (!done) { done = true; clearTimeout(timer); resolve(out.trim()); } };
|
|
330
|
+
const child = spawn("lemma-brain-ingest", args, { stdio: ["pipe", "pipe", "ignore"] });
|
|
331
|
+
const timer = setTimeout(() => { try { child.kill(); } catch {} finish(); }, timeoutMs);
|
|
332
|
+
child.stdout.on("data", (d) => { out += d; });
|
|
333
|
+
child.on("error", finish);
|
|
334
|
+
child.on("close", finish);
|
|
335
|
+
child.stdin.on("error", () => {});
|
|
336
|
+
child.stdin.end(JSON.stringify(payload));
|
|
337
|
+
});
|
|
338
|
+
const session = (id) => {
|
|
339
|
+
if (!sessions.has(id)) sessions.set(id, { parentID: undefined, title: undefined, agent: undefined, joined: false, messages: new Map(), parts: 0 });
|
|
340
|
+
return sessions.get(id);
|
|
341
|
+
};
|
|
342
|
+
const learn = (info) => {
|
|
343
|
+
if (!info || typeof info.id !== "string") return;
|
|
344
|
+
const s = session(info.id);
|
|
345
|
+
s.parentID = info.parentID || null;
|
|
346
|
+
s.title = info.title;
|
|
347
|
+
s.agent = info.agent;
|
|
348
|
+
};
|
|
349
|
+
const message = (s, info) => {
|
|
350
|
+
const m = s.messages.get(info.id) || { info: {}, parts: new Map() };
|
|
351
|
+
// A part can arrive before its message: the placeholder's role and time are corrected here.
|
|
352
|
+
m.info = { role: info.role, time: { created: info.time && info.time.created } };
|
|
353
|
+
s.messages.set(info.id, m);
|
|
354
|
+
return m;
|
|
355
|
+
};
|
|
356
|
+
const addPart = (s, messageID, part) => {
|
|
357
|
+
const slim = slimPart(part);
|
|
358
|
+
if (!slim || !messageID) return;
|
|
359
|
+
const m = s.messages.get(messageID) || (s.messages.set(messageID, { info: { role: "assistant", time: {} }, parts: new Map() }), s.messages.get(messageID));
|
|
360
|
+
if (!m.parts.has(part.id)) s.parts++;
|
|
361
|
+
m.parts.set(part.id || String(m.parts.size), slim);
|
|
362
|
+
// A runaway session keeps its first parts (the task) and its latest ones (the work at hand).
|
|
363
|
+
if (s.parts > MAX_PARTS) {
|
|
364
|
+
const ids = [...s.messages.keys()];
|
|
365
|
+
for (const id of ids.slice(2, Math.max(2, ids.length - 300))) { s.parts -= s.messages.get(id).parts.size; s.messages.delete(id); if (s.parts <= MAX_PARTS * 0.8) break; }
|
|
366
|
+
}
|
|
367
|
+
};
|
|
368
|
+
// A session this process did not see start (opened with -s / --continue): only ask whether it is a subagent.
|
|
369
|
+
const join = async (id) => {
|
|
370
|
+
const s = session(id);
|
|
371
|
+
if (s.joined) return s;
|
|
372
|
+
s.joined = true;
|
|
373
|
+
try {
|
|
374
|
+
if (s.parentID === undefined) learn(((await client.session.get({ path: { id } })).data) || { id });
|
|
375
|
+
} catch { /* unknown parent: treated as a main session */ }
|
|
376
|
+
return s;
|
|
377
|
+
};
|
|
378
|
+
const isSubagent = async (id) => !!(await join(id)).parentID;
|
|
379
|
+
const plain = (s) => [...s.messages.values()].sort((a, b) => (a.info.time.created || 0) - (b.info.time.created || 0)).map((m) => ({ info: m.info, parts: [...m.parts.values()] }));
|
|
380
|
+
const snapshot = async (id) => {
|
|
381
|
+
const s = await join(id);
|
|
382
|
+
const kids = [];
|
|
383
|
+
for (const [kid, k] of sessions) if (k.parentID === id) kids.push({ session: { id: kid, title: k.title, agent: k.agent }, messages: plain(k) });
|
|
384
|
+
return { sessionID: id, directory, messages: plain(s), children: kids };
|
|
385
|
+
};
|
|
284
386
|
return {
|
|
285
387
|
"tool.execute.before": async (input, output) => {
|
|
286
388
|
if (!input || !input.callID) return;
|
|
@@ -300,9 +402,87 @@ export const LemmaBrainRecall = async ({ directory }) => {
|
|
|
300
402
|
// A recall hint must never be the reason a tool call fails.
|
|
301
403
|
}
|
|
302
404
|
},
|
|
405
|
+
event: async ({ event }) => {
|
|
406
|
+
try {
|
|
407
|
+
if (!event || !event.properties) return;
|
|
408
|
+
const props = event.properties;
|
|
409
|
+
if (event.type === "session.created" || event.type === "session.updated") {
|
|
410
|
+
learn(props.info);
|
|
411
|
+
if (event.type === "session.created" && props.info) session(props.info.id).joined = true; // seen from its start
|
|
412
|
+
return;
|
|
413
|
+
}
|
|
414
|
+
if (event.type === "message.updated" && props.info && props.info.sessionID) { message(session(props.info.sessionID), props.info); return; }
|
|
415
|
+
if (event.type === "message.part.updated" && props.part && props.part.sessionID) { addPart(session(props.part.sessionID), props.part.messageID, props.part); return; }
|
|
416
|
+
if (event.type !== "session.idle") return;
|
|
417
|
+
const id = props.sessionID;
|
|
418
|
+
if (!id || (await isSubagent(id))) return;
|
|
419
|
+
await ingest(["--opencode-idle", "--host=opencode"], await snapshot(id), 15000);
|
|
420
|
+
} catch {
|
|
421
|
+
// the hand-off is a courtesy; the session is never held up by it
|
|
422
|
+
}
|
|
423
|
+
},
|
|
424
|
+
"experimental.session.compacting": async (input, output) => {
|
|
425
|
+
try {
|
|
426
|
+
if (!input || !input.sessionID || (await isSubagent(input.sessionID))) return;
|
|
427
|
+
const text = await ingest(["--opencode-compacting", "--host=opencode"], await snapshot(input.sessionID), 15000);
|
|
428
|
+
if (text && output && Array.isArray(output.context)) output.context.push(text);
|
|
429
|
+
} catch {
|
|
430
|
+
// the compaction goes ahead without the hand-off
|
|
431
|
+
}
|
|
432
|
+
},
|
|
433
|
+
"experimental.chat.system.transform": async (input, output) => {
|
|
434
|
+
try {
|
|
435
|
+
const id = input && input.sessionID;
|
|
436
|
+
if (!id || !output || !Array.isArray(output.system)) return;
|
|
437
|
+
if (!briefings.has(id)) {
|
|
438
|
+
briefings.set(id, (await isSubagent(id)) ? "" : await ingest(["--session-start", "--host=opencode"], { cwd: directory, session_id: id, host: "opencode" }, 5000));
|
|
439
|
+
}
|
|
440
|
+
const text = briefings.get(id);
|
|
441
|
+
if (text) output.system.push(text);
|
|
442
|
+
} catch {
|
|
443
|
+
// no briefing this time
|
|
444
|
+
}
|
|
445
|
+
},
|
|
303
446
|
};
|
|
304
447
|
};
|
|
305
448
|
`;
|
|
449
|
+
/** What `lemma init` registers as OpenCode's MCP server: OpenCode's local-server shape (`type`, argv array). */
|
|
450
|
+
exports.OPENCODE_MCP_ENTRY = { type: 'local', command: ['npx', '-y', '@nxuss/lemma', 'mcp'], enabled: true };
|
|
451
|
+
/**
|
|
452
|
+
* Register Lemma's MCP server where OpenCode reads it: `~/.config/opencode/opencode.json` (or the
|
|
453
|
+
* `.jsonc` beside it, when that is the one in use). `lemma init` used to write `~/.opencode.json`, a path
|
|
454
|
+
* OpenCode no longer reads, in the old `{command, args}` shape, so outside a repo with its own
|
|
455
|
+
* opencode.json OpenCode had no Lemma tools at all (`opencode mcp list`: "No MCP servers configured").
|
|
456
|
+
* An existing `mcp.lemma` is kept as it is (it may point at a local build on purpose); a file that is
|
|
457
|
+
* not plain JSON (a .jsonc with comments) is left alone and the caller gets the snippet to add.
|
|
458
|
+
*/
|
|
459
|
+
function registerOpenCodeMcp(home = os_1.default.homedir()) {
|
|
460
|
+
const dir = path_1.default.join(home, '.config', 'opencode');
|
|
461
|
+
const json = path_1.default.join(dir, 'opencode.json');
|
|
462
|
+
const jsonc = path_1.default.join(dir, 'opencode.jsonc');
|
|
463
|
+
const file = fs_1.default.existsSync(json) || !fs_1.default.existsSync(jsonc) ? json : jsonc;
|
|
464
|
+
const snippet = JSON.stringify({ mcp: { lemma: exports.OPENCODE_MCP_ENTRY } }, null, 2);
|
|
465
|
+
let config = { $schema: 'https://opencode.ai/config.json' };
|
|
466
|
+
if (fs_1.default.existsSync(file)) {
|
|
467
|
+
try {
|
|
468
|
+
config = JSON.parse(fs_1.default.readFileSync(file, 'utf8'));
|
|
469
|
+
}
|
|
470
|
+
catch {
|
|
471
|
+
return { status: 'manual', file, snippet };
|
|
472
|
+
}
|
|
473
|
+
if (!config || typeof config !== 'object' || Array.isArray(config))
|
|
474
|
+
return { status: 'manual', file, snippet };
|
|
475
|
+
}
|
|
476
|
+
if (config.mcp && typeof config.mcp !== 'object')
|
|
477
|
+
return { status: 'manual', file, snippet };
|
|
478
|
+
if (config.mcp?.lemma)
|
|
479
|
+
return { status: 'unchanged', file };
|
|
480
|
+
const existed = fs_1.default.existsSync(file);
|
|
481
|
+
config.mcp = { ...(config.mcp || {}), lemma: exports.OPENCODE_MCP_ENTRY };
|
|
482
|
+
fs_1.default.mkdirSync(dir, { recursive: true });
|
|
483
|
+
fs_1.default.writeFileSync(file, `${JSON.stringify(config, null, 2)}\n`);
|
|
484
|
+
return { status: existed ? 'updated' : 'installed', file };
|
|
485
|
+
}
|
|
306
486
|
function installOpenCodePlugin(home = os_1.default.homedir()) {
|
|
307
487
|
const file = path_1.default.join(home, '.config', 'opencode', 'plugins', 'lemma-brain-recall.js');
|
|
308
488
|
if (fs_1.default.existsSync(file)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hostHooks.js","sourceRoot":"","sources":["../../../src/cli/hostHooks.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"hostHooks.js","sourceRoot":"","sources":["../../../src/cli/hostHooks.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lemma-proxy.d.ts","sourceRoot":"","sources":["../../../src/cli/lemma-proxy.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"lemma-proxy.d.ts","sourceRoot":"","sources":["../../../src/cli/lemma-proxy.ts"],"names":[],"mappings":";AAycA,wBAAgB,+BAA+B,CAAC,OAAO,CAAC,EAAE;IAAE,SAAS,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,CA+DvF;AAiiBD,eAAO,MAAM,sBAAsB,MAAM,CAAC;AAE1C,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAGtD;AA61DD,wBAAsB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CA8KhL"}
|