@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.
Files changed (207) hide show
  1. package/README.md +59 -8
  2. package/bin/brain-ingest.js +30 -13
  3. package/dist/cjs/cli/hostHooks.d.ts +38 -7
  4. package/dist/cjs/cli/hostHooks.d.ts.map +1 -1
  5. package/dist/cjs/cli/hostHooks.js +189 -9
  6. package/dist/cjs/cli/hostHooks.js.map +1 -1
  7. package/dist/cjs/cli/lemma-proxy.d.ts.map +1 -1
  8. package/dist/cjs/cli/lemma-proxy.js +13 -16
  9. package/dist/cjs/cli/lemma-proxy.js.map +1 -1
  10. package/dist/cjs/cloud/billing/stripeApi.d.ts.map +1 -1
  11. package/dist/cjs/cloud/billing/stripeApi.js +6 -1
  12. package/dist/cjs/cloud/billing/stripeApi.js.map +1 -1
  13. package/dist/cjs/cloud/billing/stripeWebhook.d.ts.map +1 -1
  14. package/dist/cjs/cloud/billing/stripeWebhook.js +5 -0
  15. package/dist/cjs/cloud/billing/stripeWebhook.js.map +1 -1
  16. package/dist/cjs/cloud/console/consoleRouter.d.ts +2 -2
  17. package/dist/cjs/cloud/console/consoleRouter.d.ts.map +1 -1
  18. package/dist/cjs/cloud/console/consoleRouter.js +39 -1
  19. package/dist/cjs/cloud/console/consoleRouter.js.map +1 -1
  20. package/dist/cjs/cloud/console/mailer.d.ts +2 -0
  21. package/dist/cjs/cloud/console/mailer.d.ts.map +1 -1
  22. package/dist/cjs/cloud/console/mailer.js +3 -1
  23. package/dist/cjs/cloud/console/mailer.js.map +1 -1
  24. package/dist/cjs/cloud/identity/PlanPolicy.d.ts +26 -5
  25. package/dist/cjs/cloud/identity/PlanPolicy.d.ts.map +1 -1
  26. package/dist/cjs/cloud/identity/PlanPolicy.js +56 -16
  27. package/dist/cjs/cloud/identity/PlanPolicy.js.map +1 -1
  28. package/dist/cjs/cloud/identity/TenantResolver.d.ts +2 -0
  29. package/dist/cjs/cloud/identity/TenantResolver.d.ts.map +1 -1
  30. package/dist/cjs/cloud/identity/TenantResolver.js +1 -1
  31. package/dist/cjs/cloud/identity/TenantResolver.js.map +1 -1
  32. package/dist/cjs/cloud/identity/authenticateV2.js +1 -1
  33. package/dist/cjs/cloud/identity/authenticateV2.js.map +1 -1
  34. package/dist/cjs/cloud/identity/identityStore.d.ts +11 -0
  35. package/dist/cjs/cloud/identity/identityStore.d.ts.map +1 -1
  36. package/dist/cjs/cloud/identity/identityStore.js +26 -9
  37. package/dist/cjs/cloud/identity/identityStore.js.map +1 -1
  38. package/dist/cjs/cloud/metering/PostgresLedgerStore.d.ts +3 -1
  39. package/dist/cjs/cloud/metering/PostgresLedgerStore.d.ts.map +1 -1
  40. package/dist/cjs/cloud/metering/PostgresLedgerStore.js +12 -0
  41. package/dist/cjs/cloud/metering/PostgresLedgerStore.js.map +1 -1
  42. package/dist/cjs/cloud/metering/UsageLedger.d.ts +37 -0
  43. package/dist/cjs/cloud/metering/UsageLedger.d.ts.map +1 -1
  44. package/dist/cjs/cloud/metering/UsageLedger.js +42 -0
  45. package/dist/cjs/cloud/metering/UsageLedger.js.map +1 -1
  46. package/dist/cjs/cloud/store/FileBrainStore.d.ts +5 -1
  47. package/dist/cjs/cloud/store/FileBrainStore.d.ts.map +1 -1
  48. package/dist/cjs/cloud/store/FileBrainStore.js +5 -0
  49. package/dist/cjs/cloud/store/FileBrainStore.js.map +1 -1
  50. package/dist/cjs/cloud/store/PostgresBrainStore.d.ts +10 -1
  51. package/dist/cjs/cloud/store/PostgresBrainStore.d.ts.map +1 -1
  52. package/dist/cjs/cloud/store/PostgresBrainStore.js +28 -0
  53. package/dist/cjs/cloud/store/PostgresBrainStore.js.map +1 -1
  54. package/dist/cjs/cloud/store/memorySummary.d.ts +29 -0
  55. package/dist/cjs/cloud/store/memorySummary.d.ts.map +1 -0
  56. package/dist/cjs/cloud/store/memorySummary.js +66 -0
  57. package/dist/cjs/cloud/store/memorySummary.js.map +1 -0
  58. package/dist/cjs/cloud/v2/routes/admin.d.ts.map +1 -1
  59. package/dist/cjs/cloud/v2/routes/admin.js +20 -5
  60. package/dist/cjs/cloud/v2/routes/admin.js.map +1 -1
  61. package/dist/cjs/cloud/v2/routes/memories.js +1 -1
  62. package/dist/cjs/cloud/v2/routes/memories.js.map +1 -1
  63. package/dist/cjs/cloud/v2/routes/tenant.d.ts +1 -0
  64. package/dist/cjs/cloud/v2/routes/tenant.d.ts.map +1 -1
  65. package/dist/cjs/cloud/v2/routes/tenant.js +4 -1
  66. package/dist/cjs/cloud/v2/routes/tenant.js.map +1 -1
  67. package/dist/cjs/contracts/api-v2.types.d.ts +2 -0
  68. package/dist/cjs/contracts/api-v2.types.d.ts.map +1 -1
  69. package/dist/cjs/contracts/store.d.ts +35 -0
  70. package/dist/cjs/contracts/store.d.ts.map +1 -1
  71. package/dist/cjs/mcp/index.js +4 -1
  72. package/dist/cjs/mcp/index.js.map +1 -1
  73. package/dist/cjs/mcp/tools/misc.d.ts.map +1 -1
  74. package/dist/cjs/mcp/tools/misc.js +2 -1
  75. package/dist/cjs/mcp/tools/misc.js.map +1 -1
  76. package/dist/cjs/mcp/tools/workspace.d.ts.map +1 -1
  77. package/dist/cjs/mcp/tools/workspace.js +4 -1
  78. package/dist/cjs/mcp/tools/workspace.js.map +1 -1
  79. package/dist/cjs/mcp/tools.d.ts +10 -0
  80. package/dist/cjs/mcp/tools.d.ts.map +1 -1
  81. package/dist/cjs/mcp/tools.js +47 -12
  82. package/dist/cjs/mcp/tools.js.map +1 -1
  83. package/dist/cjs/subconscious/HostRecall.d.ts.map +1 -1
  84. package/dist/cjs/subconscious/HostRecall.js +11 -4
  85. package/dist/cjs/subconscious/HostRecall.js.map +1 -1
  86. package/dist/cjs/utils/FixCapture.d.ts +7 -5
  87. package/dist/cjs/utils/FixCapture.d.ts.map +1 -1
  88. package/dist/cjs/utils/FixCapture.js +64 -32
  89. package/dist/cjs/utils/FixCapture.js.map +1 -1
  90. package/dist/cjs/utils/NoTerminal.d.ts +27 -0
  91. package/dist/cjs/utils/NoTerminal.d.ts.map +1 -0
  92. package/dist/cjs/utils/NoTerminal.js +37 -0
  93. package/dist/cjs/utils/NoTerminal.js.map +1 -0
  94. package/dist/cjs/utils/OpenCodeSession.d.ts +70 -0
  95. package/dist/cjs/utils/OpenCodeSession.d.ts.map +1 -0
  96. package/dist/cjs/utils/OpenCodeSession.js +154 -0
  97. package/dist/cjs/utils/OpenCodeSession.js.map +1 -0
  98. package/dist/cjs/utils/SessionCapture.d.ts +29 -7
  99. package/dist/cjs/utils/SessionCapture.d.ts.map +1 -1
  100. package/dist/cjs/utils/SessionCapture.js +180 -32
  101. package/dist/cjs/utils/SessionCapture.js.map +1 -1
  102. package/dist/cjs/utils/TestAutofixInterceptor.d.ts.map +1 -1
  103. package/dist/cjs/utils/TestAutofixInterceptor.js +2 -0
  104. package/dist/cjs/utils/TestAutofixInterceptor.js.map +1 -1
  105. package/dist/esm/cli/hostHooks.d.ts +38 -7
  106. package/dist/esm/cli/hostHooks.d.ts.map +1 -1
  107. package/dist/esm/cli/hostHooks.js +187 -8
  108. package/dist/esm/cli/hostHooks.js.map +1 -1
  109. package/dist/esm/cli/lemma-proxy.d.ts.map +1 -1
  110. package/dist/esm/cli/lemma-proxy.js +14 -17
  111. package/dist/esm/cli/lemma-proxy.js.map +1 -1
  112. package/dist/esm/cloud/billing/stripeApi.d.ts.map +1 -1
  113. package/dist/esm/cloud/billing/stripeApi.js +6 -1
  114. package/dist/esm/cloud/billing/stripeApi.js.map +1 -1
  115. package/dist/esm/cloud/billing/stripeWebhook.d.ts.map +1 -1
  116. package/dist/esm/cloud/billing/stripeWebhook.js +5 -0
  117. package/dist/esm/cloud/billing/stripeWebhook.js.map +1 -1
  118. package/dist/esm/cloud/console/consoleRouter.d.ts +2 -2
  119. package/dist/esm/cloud/console/consoleRouter.d.ts.map +1 -1
  120. package/dist/esm/cloud/console/consoleRouter.js +39 -1
  121. package/dist/esm/cloud/console/consoleRouter.js.map +1 -1
  122. package/dist/esm/cloud/console/mailer.d.ts +2 -0
  123. package/dist/esm/cloud/console/mailer.d.ts.map +1 -1
  124. package/dist/esm/cloud/console/mailer.js +3 -1
  125. package/dist/esm/cloud/console/mailer.js.map +1 -1
  126. package/dist/esm/cloud/identity/PlanPolicy.d.ts +26 -5
  127. package/dist/esm/cloud/identity/PlanPolicy.d.ts.map +1 -1
  128. package/dist/esm/cloud/identity/PlanPolicy.js +54 -15
  129. package/dist/esm/cloud/identity/PlanPolicy.js.map +1 -1
  130. package/dist/esm/cloud/identity/TenantResolver.d.ts +2 -0
  131. package/dist/esm/cloud/identity/TenantResolver.d.ts.map +1 -1
  132. package/dist/esm/cloud/identity/TenantResolver.js +1 -1
  133. package/dist/esm/cloud/identity/TenantResolver.js.map +1 -1
  134. package/dist/esm/cloud/identity/authenticateV2.js +1 -1
  135. package/dist/esm/cloud/identity/authenticateV2.js.map +1 -1
  136. package/dist/esm/cloud/identity/identityStore.d.ts +11 -0
  137. package/dist/esm/cloud/identity/identityStore.d.ts.map +1 -1
  138. package/dist/esm/cloud/identity/identityStore.js +26 -9
  139. package/dist/esm/cloud/identity/identityStore.js.map +1 -1
  140. package/dist/esm/cloud/metering/PostgresLedgerStore.d.ts +3 -1
  141. package/dist/esm/cloud/metering/PostgresLedgerStore.d.ts.map +1 -1
  142. package/dist/esm/cloud/metering/PostgresLedgerStore.js +12 -0
  143. package/dist/esm/cloud/metering/PostgresLedgerStore.js.map +1 -1
  144. package/dist/esm/cloud/metering/UsageLedger.d.ts +37 -0
  145. package/dist/esm/cloud/metering/UsageLedger.d.ts.map +1 -1
  146. package/dist/esm/cloud/metering/UsageLedger.js +41 -0
  147. package/dist/esm/cloud/metering/UsageLedger.js.map +1 -1
  148. package/dist/esm/cloud/store/FileBrainStore.d.ts +5 -1
  149. package/dist/esm/cloud/store/FileBrainStore.d.ts.map +1 -1
  150. package/dist/esm/cloud/store/FileBrainStore.js +5 -0
  151. package/dist/esm/cloud/store/FileBrainStore.js.map +1 -1
  152. package/dist/esm/cloud/store/PostgresBrainStore.d.ts +10 -1
  153. package/dist/esm/cloud/store/PostgresBrainStore.d.ts.map +1 -1
  154. package/dist/esm/cloud/store/PostgresBrainStore.js +28 -0
  155. package/dist/esm/cloud/store/PostgresBrainStore.js.map +1 -1
  156. package/dist/esm/cloud/store/memorySummary.d.ts +29 -0
  157. package/dist/esm/cloud/store/memorySummary.d.ts.map +1 -0
  158. package/dist/esm/cloud/store/memorySummary.js +60 -0
  159. package/dist/esm/cloud/store/memorySummary.js.map +1 -0
  160. package/dist/esm/cloud/v2/routes/admin.d.ts.map +1 -1
  161. package/dist/esm/cloud/v2/routes/admin.js +20 -5
  162. package/dist/esm/cloud/v2/routes/admin.js.map +1 -1
  163. package/dist/esm/cloud/v2/routes/memories.js +1 -1
  164. package/dist/esm/cloud/v2/routes/memories.js.map +1 -1
  165. package/dist/esm/cloud/v2/routes/tenant.d.ts +1 -0
  166. package/dist/esm/cloud/v2/routes/tenant.d.ts.map +1 -1
  167. package/dist/esm/cloud/v2/routes/tenant.js +4 -1
  168. package/dist/esm/cloud/v2/routes/tenant.js.map +1 -1
  169. package/dist/esm/contracts/api-v2.types.d.ts +2 -0
  170. package/dist/esm/contracts/api-v2.types.d.ts.map +1 -1
  171. package/dist/esm/contracts/store.d.ts +35 -0
  172. package/dist/esm/contracts/store.d.ts.map +1 -1
  173. package/dist/esm/mcp/index.js +5 -2
  174. package/dist/esm/mcp/index.js.map +1 -1
  175. package/dist/esm/mcp/tools/misc.d.ts.map +1 -1
  176. package/dist/esm/mcp/tools/misc.js +2 -1
  177. package/dist/esm/mcp/tools/misc.js.map +1 -1
  178. package/dist/esm/mcp/tools/workspace.d.ts.map +1 -1
  179. package/dist/esm/mcp/tools/workspace.js +4 -1
  180. package/dist/esm/mcp/tools/workspace.js.map +1 -1
  181. package/dist/esm/mcp/tools.d.ts +10 -0
  182. package/dist/esm/mcp/tools.d.ts.map +1 -1
  183. package/dist/esm/mcp/tools.js +46 -12
  184. package/dist/esm/mcp/tools.js.map +1 -1
  185. package/dist/esm/subconscious/HostRecall.d.ts.map +1 -1
  186. package/dist/esm/subconscious/HostRecall.js +11 -4
  187. package/dist/esm/subconscious/HostRecall.js.map +1 -1
  188. package/dist/esm/utils/FixCapture.d.ts +7 -5
  189. package/dist/esm/utils/FixCapture.d.ts.map +1 -1
  190. package/dist/esm/utils/FixCapture.js +64 -33
  191. package/dist/esm/utils/FixCapture.js.map +1 -1
  192. package/dist/esm/utils/NoTerminal.d.ts +27 -0
  193. package/dist/esm/utils/NoTerminal.d.ts.map +1 -0
  194. package/dist/esm/utils/NoTerminal.js +33 -0
  195. package/dist/esm/utils/NoTerminal.js.map +1 -0
  196. package/dist/esm/utils/OpenCodeSession.d.ts +70 -0
  197. package/dist/esm/utils/OpenCodeSession.d.ts.map +1 -0
  198. package/dist/esm/utils/OpenCodeSession.js +146 -0
  199. package/dist/esm/utils/OpenCodeSession.js.map +1 -0
  200. package/dist/esm/utils/SessionCapture.d.ts +29 -7
  201. package/dist/esm/utils/SessionCapture.d.ts.map +1 -1
  202. package/dist/esm/utils/SessionCapture.js +180 -32
  203. package/dist/esm/utils/SessionCapture.js.map +1 -1
  204. package/dist/esm/utils/TestAutofixInterceptor.d.ts.map +1 -1
  205. package/dist/esm/utils/TestAutofixInterceptor.js +2 -0
  206. package/dist/esm/utils/TestAutofixInterceptor.js.map +1 -1
  207. package/package.json +1 -1
package/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  [![npm version](https://img.shields.io/npm/v/@nxuss/lemma.svg?color=orange&style=flat-square)](https://www.npmjs.com/package/@nxuss/lemma)
4
4
  ![License](https://img.shields.io/npm/l/@nxuss/lemma.svg?color=blue&style=flat-square)
5
- ![MCP](https://img.shields.io/badge/MCP-91%20tools-ff69b4?style=flat-square)
5
+ ![MCP](https://img.shields.io/badge/MCP-92%20tools-ff69b4?style=flat-square)
6
6
  ![Local-first](https://img.shields.io/badge/local--first-no%20cloud%20required-success?style=flat-square)
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 built from the
47
- transcript and git, with no model tokens: the task exactly as it was given, the files changed, the last test
48
- run. The next session's briefing points at it, so "continue where we left off" has something to continue from.
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 only).** When Claude Code compacts a long conversation, a `PreCompact` hook
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. Claude Code only; the other clients have no
62
- pre-compaction event, so nothing is installed for them.
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)
@@ -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: only the leak warning)
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. It only
92
- // feeds the leak warning: a failing run that dumps its environment is the likeliest way a secret reaches the model.
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 out = formatHostOutput('claude', recall ? recall.text : '', 'SessionStart');
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
- * a failing run that dumps its environment never reached the leak warning. Only the warning is wired to it.
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: it forwards each finished tool call
78
- * to `lemma-brain-ingest --host=opencode` and appends the note it prints (if any) to the tool's
79
- * output — the only place a plugin can put text the model reads. Arguments are taken from
80
- * tool.execute.before, keyed by call id, because the after-hook's input doesn't carry them.
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;;;GAGG;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;;;;;GAKG;AACH,eAAO,MAAM,eAAe,szCA0B3B,CAAC;AAEF,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"}
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
- * a failing run that dumps its environment never reached the leak warning. Only the warning is wired to it.
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: it forwards each finished tool call
275
- * to `lemma-brain-ingest --host=opencode` and appends the note it prints (if any) to the tool's
276
- * output — the only place a plugin can put text the model reads. Arguments are taken from
277
- * tool.execute.before, keyed by call id, because the after-hook's input doesn't carry them.
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
- export const LemmaBrainRecall = async ({ directory }) => {
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":";AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;;;;;;AAgBH,kCAGC;AAyJD,gDA8BC;AAED,8CAEC;AAGD,gDAkCC;AAsCD,sDAYC;AAYD,4CAOC;AAWD,8CAWC;AA5UD,4CAAoB;AACpB,4CAAoB;AACpB,gDAAwB;AACxB,iDAA6C;AAE7C,MAAM,SAAS,GAAG,kCAAkC,CAAC;AACrD,MAAM,WAAW,GAAG,oCAAoC,CAAC;AACzD,MAAM,aAAa,GAAG,+BAA+B,CAAC;AACtD,MAAM,YAAY,GAAG,oCAAoC,CAAC;AAC1D,MAAM,gBAAgB,GAAG,kCAAkC,CAAC;AAC5D,MAAM,gBAAgB,GAAG,kCAAkC,CAAC;AAC5D,MAAM,YAAY,GAAG,mCAAmC,CAAC;AACzD,MAAM,SAAS,GAAG,2BAA2B,CAAC;AAE9C,SAAgB,WAAW,CAAC,IAAmC;IAC7D,MAAM,IAAI,GAAG,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,IAAI,EAAE,CAAC;IACxD,OAAO,oDAAoD,SAAS,GAAG,IAAI,UAAU,CAAC;AACxF,CAAC;AAEY,QAAA,mBAAmB,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;AACzD,0FAA0F;AAC7E,QAAA,0BAA0B,GAAG,oDAAoD,WAAW,UAAU,CAAC;AACpH,uGAAuG;AAC1F,QAAA,4BAA4B,GAAG,oDAAoD,aAAa,UAAU,CAAC;AAC3G,QAAA,uBAAuB,GAAG,mCAAmC,CAAC;AAC3E,4FAA4F;AAC/E,QAAA,2BAA2B,GAAG,oDAAoD,YAAY,UAAU,CAAC;AACtH,sGAAsG;AACzF,QAAA,+BAA+B,GAAG,oDAAoD,gBAAgB,UAAU,CAAC;AAC9H;;;;GAIG;AACU,QAAA,+BAA+B,GAAG,oDAAoD,gBAAgB,UAAU,CAAC;AAC9H;;;;GAIG;AACU,QAAA,wBAAwB,GAAG,oDAAoD,SAAS,UAAU,CAAC;AAChH;;;GAGG;AACU,QAAA,2BAA2B,GAAG,oDAAoD,YAAY,UAAU,CAAC;AACzG,QAAA,sBAAsB,GAAG,MAAM,CAAC;AAChC,QAAA,mBAAmB,GAAG,6CAA6C,CAAC;AACpE,QAAA,kBAAkB,GAAG,6BAA6B,CAAC;AACnD,QAAA,mBAAmB,GAAG,kBAAkB,CAAC;AACzC,QAAA,sBAAsB,GAAG,OAAO,CAAC;AAE9C;;;;GAIG;AACU,QAAA,oBAAoB,GAAG;IAClC,eAAe;IACf,YAAY;IACZ,eAAe;IACf,cAAc;IACd,eAAe;IACf,gBAAgB;IAChB,qBAAqB;IACrB,kBAAkB;IAClB,eAAe;IACf,cAAc;CACf,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;AAWjC,MAAM,UAAU,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,OAAO,KAAK,QAAQ,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC5G,MAAM,MAAM,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;AAErC,SAAS,cAAc,CAAC,IAAY;IAClC,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,CAAC;IACpC,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,YAAE,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;QACpD,OAAO,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACpE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,SAAS,CAAC,IAAY,EAAE,KAAc;IAC7C,YAAE,CAAC,SAAS,CAAC,cAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACtD,YAAE,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AAChE,CAAC;AAED;;;;GAIG;AACH,SAAS,iBAAiB,CACxB,IAAY,EACZ,KAAa,EACb,OAA2B,EAC3B,OAAe,EACf,OAAe,SAAS;IAExB,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAChC,0FAA0F;IAC1F,MAAM,MAAM,GAAG,EAAE,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;IACxG,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;IACtC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;IACxG,CAAC;IACD,QAAQ,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,IAAI,OAAO,QAAQ,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5F,MAAM,IAAI,GAAU,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACtF,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IAE/E,IAAI,MAAoC,CAAC;IACzC,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAClB,MAAM,GAAG,WAAW,CAAC;IACvB,CAAC;SAAM,IAAI,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;QACnG,MAAM,GAAG,WAAW,CAAC;IACvB,CAAC;SAAM,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;QACpC,IAAI,OAAO,KAAK,SAAS;YAAE,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QAClD,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QAC1B,MAAM,GAAG,SAAS,CAAC;IACrB,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QACvD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAClB,MAAM,GAAG,SAAS,CAAC;IACrB,CAAC;IACD,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;IAC7B,IAAI,MAAM,KAAK,WAAW;QAAE,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACtD,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;AAC1B,CAAC;AAED,sGAAsG;AACtG,SAAS,sBAAsB,CAAC,IAAY;IAC1C,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;IACtC,IAAI,CAAC,QAAQ;QAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IACjD,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,IAAI,OAAO,QAAQ,CAAC,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3G,MAAM,KAAK,GAAU,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;IACnE,MAAM,OAAO,GAAG,4BAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IACvE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;IAC/D,QAAQ,CAAC,WAAW,GAAG,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,CAAC,GAAG,KAAK,EAAE,GAAG,OAAO,CAAC,EAAE,CAAC;IACnE,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC1B,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;AACrC,CAAC;AAED,SAAS,wBAAwB,CAAC,GAAW;IAC3C,MAAM,GAAG,GAAG,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,qBAAqB,CAAC,CAAC;IACxD,IAAI,CAAC;QACH,IAAA,4BAAY,EAAC,KAAK,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,cAAc,EAAE,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QACjF,OAAO,KAAK,CAAC,CAAC,kBAAkB;IAClC,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QAChB,iFAAiF;QACjF,IAAI,CAAC,EAAE,MAAM,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;IACpC,CAAC;IACD,MAAM,SAAS,GAAG,cAAI,CAAC,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;IAC/C,MAAM,IAAI,GAAG,6BAA6B,CAAC;IAC3C,MAAM,QAAQ,GAAG,YAAE,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,YAAE,CAAC,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACpF,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IACtE,YAAE,CAAC,cAAc,CAAC,SAAS,EAAE,GAAG,QAAQ,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,IAAI,CAAC,CAAC;IAC7F,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAgB,kBAAkB,CAAC,MAAc,OAAO,CAAC,GAAG,EAAE,EAAE,UAAqC,EAAE;IACrG,MAAM,IAAI,GAAG,cAAI,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,qBAAqB,CAAC,CAAC;IAC9D,MAAM,IAAI,GAAG,iBAAiB,CAAC,IAAI,EAAE,aAAa,EAAE,2BAAmB,EAAE,2BAAmB,CAAC,CAAC;IAC9F,IAAI,IAAI,CAAC,MAAM,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC1C,MAAM,MAAM,GAAG,iBAAiB,CAAC,IAAI,EAAE,kBAAkB,EAAE,SAAS,EAAE,kCAA0B,EAAE,WAAW,CAAC,CAAC;IAC/G,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAC;IAC9C,MAAM,OAAO,GAAG,iBAAiB,CAAC,IAAI,EAAE,cAAc,EAAE,SAAS,EAAE,mCAA2B,EAAE,YAAY,CAAC,CAAC;IAC9G,IAAI,OAAO,CAAC,MAAM,KAAK,QAAQ;QAAE,OAAO,OAAO,CAAC;IAChD,MAAM,GAAG,GAAG,iBAAiB,CAAC,IAAI,EAAE,YAAY,EAAE,+BAAuB,EAAE,oCAA4B,EAAE,aAAa,CAAC,CAAC;IACxH,IAAI,GAAG,CAAC,MAAM,KAAK,QAAQ;QAAE,OAAO,GAAG,CAAC;IACxC,MAAM,UAAU,GAAG,iBAAiB,CAAC,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE,uCAA+B,EAAE,gBAAgB,CAAC,CAAC;IACvH,IAAI,UAAU,CAAC,MAAM,KAAK,QAAQ;QAAE,OAAO,UAAU,CAAC;IACtD,MAAM,UAAU,GAAG,iBAAiB,CAAC,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE,uCAA+B,EAAE,gBAAgB,CAAC,CAAC;IACvH,IAAI,UAAU,CAAC,MAAM,KAAK,QAAQ;QAAE,OAAO,UAAU,CAAC;IACtD,MAAM,OAAO,GAAG,iBAAiB,CAAC,IAAI,EAAE,oBAAoB,EAAE,8BAAsB,EAAE,mCAA2B,EAAE,YAAY,CAAC,CAAC;IACjI,IAAI,OAAO,CAAC,MAAM,KAAK,QAAQ;QAAE,OAAO,OAAO,CAAC;IAChD,MAAM,IAAI,GAAG,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,gCAAwB,EAAE,SAAS,CAAC,CAAC;IAC7F,IAAI,IAAI,CAAC,MAAM,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC1C,+FAA+F;IAC/F,kEAAkE;IAClE,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC;IAClF,MAAM,UAAU,GAAG,wBAAwB,CAAC,GAAG,CAAC,CAAC;IACjD,6FAA6F;IAC7F,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IAC1I,MAAM,MAAM,GAAiC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,WAAW,CAAC,IAAI,KAAK,EAAE,MAAM,KAAK,SAAS;QAC/G,CAAC,CAAC,WAAW;QACb,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,WAAW,CAAC;YACrC,CAAC,CAAC,WAAW;YACb,CAAC,CAAC,SAAS,CAAC;IAChB,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;AACjE,CAAC;AAED,SAAgB,iBAAiB,CAAC,OAAe,YAAE,CAAC,OAAO,EAAE;IAC3D,OAAO,iBAAiB,CAAC,cAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,YAAY,CAAC,EAAE,aAAa,EAAE,0BAAkB,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC;AAC7H,CAAC;AAED,oFAAoF;AACpF,SAAgB,kBAAkB,CAAC,OAAe,YAAE,CAAC,OAAO,EAAE;IAC5D,MAAM,IAAI,GAAG,cAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;IACtD,MAAM,OAAO,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;IACtC,MAAM,MAAM,GAAyD;QACnE,WAAW,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,2BAAmB,EAAE;QACtD,kBAAkB,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,8BAAsB,EAAE;KACjE,CAAC;IACF,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;IACpC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO;YACL,MAAM,EAAE,QAAQ;YAChB,IAAI;YACJ,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;SAC9H,CAAC;IACJ,CAAC;IACD,MAAM,KAAK,GAAG,CAAC,YAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IACnC,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ;QAAE,MAAM,CAAC,OAAO,GAAG,CAAC,CAAC;IAC3D,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;IACpF,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,IAAI,KAAK,GAAG,KAAK,CAAC;IAClB,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACpD,MAAM,IAAI,GAAU,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAClF,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACjC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YACV,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACjB,OAAO,GAAG,KAAK,GAAG,IAAI,CAAC;QACzB,CAAC;aAAM,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;YAC7D,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;YAChB,OAAO,GAAG,IAAI,CAAC;QACjB,CAAC;QACD,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;IAC7B,CAAC;IACD,IAAI,OAAO;QAAE,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACrC,OAAO,EAAE,MAAM,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC;AAC7F,CAAC;AAED,MAAM,aAAa,GAAG,yFAAyF,CAAC;AAEhH;;;;;GAKG;AACU,QAAA,eAAe,GAAG,GAAG,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;CA0B9C,CAAC;AAEF,SAAgB,qBAAqB,CAAC,OAAe,YAAE,CAAC,OAAO,EAAE;IAC/D,MAAM,IAAI,GAAG,cAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,uBAAuB,CAAC,CAAC;IACxF,IAAI,YAAE,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACxB,MAAM,OAAO,GAAG,YAAE,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC9C,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC;YAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,uBAAe,EAAE,CAAC;QACpG,IAAI,OAAO,KAAK,uBAAe;YAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;QACtE,YAAE,CAAC,aAAa,CAAC,IAAI,EAAE,uBAAe,CAAC,CAAC;QACxC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IACrC,CAAC;IACD,YAAE,CAAC,SAAS,CAAC,cAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACtD,YAAE,CAAC,aAAa,CAAC,IAAI,EAAE,uBAAe,CAAC,CAAC;IACxC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;AACvC,CAAC;AAOD;;;;GAIG;AACH,SAAgB,gBAAgB,CAAC,MAAc,OAAO,CAAC,GAAG,EAAE,EAAE,OAAe,YAAE,CAAC,OAAO,EAAE;IACvF,MAAM,GAAG,GAAqB,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC1F,MAAM,GAAG,GAAG,CAAC,GAAG,CAAW,EAAE,EAAE,CAAC,YAAE,CAAC,UAAU,CAAC,cAAI,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;IACrE,IAAI,GAAG,CAAC,QAAQ,CAAC;QAAE,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjF,IAAI,GAAG,CAAC,SAAS,CAAC;QAAE,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACpF,IAAI,GAAG,CAAC,SAAS,EAAE,UAAU,CAAC,IAAI,GAAG,CAAC,WAAW,CAAC;QAAE,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,qBAAqB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACzH,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;;;;GAQG;AACH,SAAgB,iBAAiB,CAAC,MAAc,OAAO,CAAC,GAAG,EAAE;IAC3D,MAAM,IAAI,GAAG,cAAI,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,qBAAqB,CAAC,CAAC;IAC9D,IAAI,IAAY,CAAC;IACjB,IAAI,CAAC;QACH,IAAI,GAAG,YAAE,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACvC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,CAAC,CAAC,SAAS,EAAE,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,gBAAgB,EAAE,YAAY,EAAE,gBAAgB,EAAE,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACzK,MAAM,OAAO,GAAG,kBAAkB,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC;IAChE,OAAO,OAAO,CAAC,MAAM,KAAK,WAAW,IAAI,OAAO,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC;AACxF,CAAC"}
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":";AAkdA,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;AAw1DD,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"}
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"}