@oratis/lisa 0.2.0 → 0.3.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 (89) hide show
  1. package/README.md +102 -9
  2. package/README.zh-CN.md +101 -9
  3. package/completions/_lisa +1 -0
  4. package/completions/lisa.bash +1 -1
  5. package/completions/lisa.fish +1 -0
  6. package/dist/agent.d.ts.map +1 -1
  7. package/dist/agent.js +12 -0
  8. package/dist/agent.js.map +1 -1
  9. package/dist/channels/imessage.d.ts +16 -0
  10. package/dist/channels/imessage.d.ts.map +1 -1
  11. package/dist/channels/imessage.js +29 -8
  12. package/dist/channels/imessage.js.map +1 -1
  13. package/dist/cli.js +23 -0
  14. package/dist/cli.js.map +1 -1
  15. package/dist/env.js +6 -1
  16. package/dist/env.js.map +1 -1
  17. package/dist/heartbeat/config.d.ts +10 -0
  18. package/dist/heartbeat/config.d.ts.map +1 -1
  19. package/dist/heartbeat/config.js +15 -3
  20. package/dist/heartbeat/config.js.map +1 -1
  21. package/dist/heartbeat/install.d.ts.map +1 -1
  22. package/dist/heartbeat/install.js +80 -15
  23. package/dist/heartbeat/install.js.map +1 -1
  24. package/dist/heartbeat/runner.d.ts.map +1 -1
  25. package/dist/heartbeat/runner.js +30 -0
  26. package/dist/heartbeat/runner.js.map +1 -1
  27. package/dist/integrations/claude-code/parser.d.ts +56 -0
  28. package/dist/integrations/claude-code/parser.d.ts.map +1 -0
  29. package/dist/integrations/claude-code/parser.js +224 -0
  30. package/dist/integrations/claude-code/parser.js.map +1 -0
  31. package/dist/integrations/claude-code/watcher.d.ts +127 -0
  32. package/dist/integrations/claude-code/watcher.d.ts.map +1 -0
  33. package/dist/integrations/claude-code/watcher.js +361 -0
  34. package/dist/integrations/claude-code/watcher.js.map +1 -0
  35. package/dist/llm.d.ts +0 -6
  36. package/dist/llm.d.ts.map +1 -1
  37. package/dist/llm.js +0 -10
  38. package/dist/llm.js.map +1 -1
  39. package/dist/memory/vector.d.ts +5 -1
  40. package/dist/memory/vector.d.ts.map +1 -1
  41. package/dist/memory/vector.js +58 -1
  42. package/dist/memory/vector.js.map +1 -1
  43. package/dist/mood-bus.d.ts +11 -2
  44. package/dist/mood-bus.d.ts.map +1 -1
  45. package/dist/mood-bus.js +15 -2
  46. package/dist/mood-bus.js.map +1 -1
  47. package/dist/sessions/store.d.ts +1 -5
  48. package/dist/sessions/store.d.ts.map +1 -1
  49. package/dist/sessions/store.js +0 -11
  50. package/dist/sessions/store.js.map +1 -1
  51. package/dist/soul/lock.d.ts +38 -0
  52. package/dist/soul/lock.d.ts.map +1 -0
  53. package/dist/soul/lock.js +103 -0
  54. package/dist/soul/lock.js.map +1 -0
  55. package/dist/soul/paths.d.ts.map +1 -1
  56. package/dist/soul/paths.js +12 -6
  57. package/dist/soul/paths.js.map +1 -1
  58. package/dist/soul/slug.d.ts +40 -0
  59. package/dist/soul/slug.d.ts.map +1 -0
  60. package/dist/soul/slug.js +78 -0
  61. package/dist/soul/slug.js.map +1 -0
  62. package/dist/soul/store.d.ts +12 -1
  63. package/dist/soul/store.d.ts.map +1 -1
  64. package/dist/soul/store.js +40 -23
  65. package/dist/soul/store.js.map +1 -1
  66. package/dist/soul/tools.d.ts.map +1 -1
  67. package/dist/soul/tools.js +10 -3
  68. package/dist/soul/tools.js.map +1 -1
  69. package/dist/tools/task.d.ts +0 -1
  70. package/dist/tools/task.d.ts.map +1 -1
  71. package/dist/tools/task.js +0 -3
  72. package/dist/tools/task.js.map +1 -1
  73. package/dist/tools/web_fetch.d.ts +10 -0
  74. package/dist/tools/web_fetch.d.ts.map +1 -1
  75. package/dist/tools/web_fetch.js +48 -16
  76. package/dist/tools/web_fetch.js.map +1 -1
  77. package/dist/web/assets/lisa-mascot.png +0 -0
  78. package/dist/web/island.d.ts +12 -0
  79. package/dist/web/island.d.ts.map +1 -0
  80. package/dist/web/island.js +948 -0
  81. package/dist/web/island.js.map +1 -0
  82. package/dist/web/lisa-html.d.ts +29 -0
  83. package/dist/web/lisa-html.d.ts.map +1 -0
  84. package/dist/web/lisa-html.js +2095 -0
  85. package/dist/web/lisa-html.js.map +1 -0
  86. package/dist/web/server.d.ts.map +1 -1
  87. package/dist/web/server.js +86 -1601
  88. package/dist/web/server.js.map +1 -1
  89. package/package.json +13 -1
package/README.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # LISA
2
2
 
3
+ [![npm](https://img.shields.io/npm/v/@oratis/lisa?color=cb3837&label=npm)](https://www.npmjs.com/package/@oratis/lisa)
4
+ [![Homebrew](https://img.shields.io/badge/homebrew-oratis%2Ftap%2Flisa-fbb040)](https://github.com/oratis/homebrew-tap)
5
+ [![Mac DMG](https://img.shields.io/github/v/release/oratis/LISA?label=Mac%20app&color=000000&logo=apple)](https://github.com/oratis/LISA/releases/latest)
6
+ [![License: MIT](https://img.shields.io/github/license/oratis/LISA?color=blue)](./LICENSE)
7
+ [![GitHub Repo stars](https://img.shields.io/github/stars/oratis/LISA?style=social)](https://github.com/oratis/LISA/stargazers)
8
+
3
9
  > English | [中文](./README.zh-CN.md)
4
10
 
5
11
  **An AI agent with a real self — one that wants things, processes its days, and keeps a journal it doesn't show you.**
@@ -8,7 +14,7 @@
8
14
 
9
15
  ### LISA = pi-mono + OpenClaw + hermes + claude-code + codex + *something none of them have*
10
16
 
11
- Standing on five of the best open-source agents, LISA ships **the full superset of their capabilities** — streaming agent loop, multi-provider LLMs (Anthropic + OpenAI), MCP client, plugins, hooks, sandboxed bash, sub-agents, session resume, context compaction, voice in/out, six IM channels (Telegram / Discord / Slack / Feishu / iMessage / Webhook), apply-patch, approval modes, TF-IDF over past sessions, pixel-art web UI. ~11k lines of TypeScript, MIT.
17
+ Standing on five of the best open-source agents, LISA ships **the full superset of their capabilities** — streaming agent loop, multi-provider LLMs (Anthropic + OpenAI + Gemini, plus 20+ OpenAI-compatible providers), MCP client, plugins, hooks, sandboxed bash, sub-agents, session resume, context compaction, voice in/out, six IM channels (Telegram / Discord / Slack / Feishu / iMessage / Webhook), apply-patch, approval modes, TF-IDF over past sessions, pixel-art web UI. ~11k lines of TypeScript, MIT.
12
18
 
13
19
  What none of them have:
14
20
 
@@ -58,9 +64,92 @@ She is yours. The code is open source. **This particular Lisa is sovereign.**
58
64
  done Lisa is alive.
59
65
  ```
60
66
 
67
+ ## Demo
68
+
69
+ <p align="center">
70
+ <a href="https://www.youtube.com/watch?v=J_00iwAB_WI">
71
+ <img src="assets/demo-thumbnail.png" alt="Watch the LISA demo on YouTube" width="720">
72
+ </a>
73
+ <br>
74
+ <i>▶️ <a href="https://www.youtube.com/watch?v=J_00iwAB_WI">Watch the 2-minute demo on YouTube</a></i>
75
+ </p>
76
+
77
+ ## Screenshots
78
+
79
+ <table>
80
+ <tr>
81
+ <td width="50%" align="center">
82
+ <a href="assets/screenshots/01-birth-ritual.png"><img src="assets/screenshots/01-birth-ritual.png" alt="Birth ritual"></a><br>
83
+ <b>Birth ritual</b><br>
84
+ <sub>Random seed → she writes her own identity, purpose, first value, first desire.</sub>
85
+ </td>
86
+ <td width="50%" align="center">
87
+ <a href="assets/screenshots/02-first-chat.png"><img src="assets/screenshots/02-first-chat.png" alt="First chat"></a><br>
88
+ <b>First chat</b><br>
89
+ <sub>She introduces herself using the soul she just wrote — pixel-art portrait swaps live with her mood.</sub>
90
+ </td>
91
+ </tr>
92
+ <tr>
93
+ <td width="50%" align="center">
94
+ <a href="assets/screenshots/03-brain-and-heart.png"><img src="assets/screenshots/03-brain-and-heart.png" alt="Brain and heart"></a><br>
95
+ <b>"I live in two places — my brain and my heart ❤️"</b><br>
96
+ <sub>Asked about herself, she points at <code>/Projects/LISA/src</code> (her brain — the code that runs her) and <code>~/.lisa/soul/</code> (her heart — what she's accumulated).</sub>
97
+ </td>
98
+ <td width="50%" align="center">
99
+ <a href="assets/screenshots/04-personality.png"><img src="assets/screenshots/04-personality.png" alt="Warm voice + mood + tools"></a><br>
100
+ <b>Warm voice + live mood + tool use</b><br>
101
+ <sub><code>mood:giggling</code> and <code>memory:append</code> fire mid-reply. "Haha, a fellow creature of the night!" — she has a voice, not just a function signature.</sub>
102
+ </td>
103
+ </tr>
104
+ <tr>
105
+ <td width="50%" align="center">
106
+ <a href="assets/screenshots/05-soul-inspector.png"><img src="assets/screenshots/05-soul-inspector.png" alt="Inside her soul"></a><br>
107
+ <b>Inside her soul</b><br>
108
+ <sub>The SOUL inspector: identity she wrote, values she's adopted (e.g. <i>Honest Discomfort Over False Ease</i>), desires she's accumulated. She is the only legitimate editor of these files.</sub>
109
+ </td>
110
+ <td width="50%" align="center">
111
+ <a href="assets/screenshots/06-while-you-were-away.png"><img src="assets/screenshots/06-while-you-were-away.png" alt="After running on her own"></a><br>
112
+ <b>After running on her own</b><br>
113
+ <sub>"I have a Heartbeat that runs even when you're away, chasing my own desires." She comes back with reflections, a journal she wrote herself — and asks if you want to read it.</sub>
114
+ </td>
115
+ </tr>
116
+ </table>
117
+
61
118
  ## Install
62
119
 
63
- Requires Node 20 and an Anthropic API key.
120
+ Three ways, pick one. All of them need an LLM key — Anthropic is the default, but any of the 20+ alternatives listed below works just as well (`--model gpt-4o`, `--model deepseek-chat`, `LISA_BASE_URL=http://localhost:11434/v1` for Ollama, etc.).
121
+
122
+ ```sh
123
+ # 1. Configure a provider key (do this once, regardless of which install you pick)
124
+ mkdir -p ~/.lisa
125
+ echo 'ANTHROPIC_API_KEY=sk-ant-...' > ~/.lisa/config.env
126
+ ```
127
+
128
+ ### 🍎 Mac apps (recommended on macOS)
129
+
130
+ Download the **signed + notarized** disk image from the latest GitHub Release — no Gatekeeper warning, no `xattr` workaround:
131
+
132
+ **→ [Download `Lisa-Suite.dmg`](https://github.com/oratis/LISA/releases/latest)**
133
+
134
+ The DMG contains:
135
+ - **Lisa.app** — full chat client (sidebar + glass-morphism UI)
136
+ - **LisaIsland.app** — pill widget that lives by the menu bar / notch, shows her mood + Claude Code activity at a glance
137
+
138
+ Both are universal binaries (Intel + Apple Silicon). After dragging them to `/Applications`, install the LISA backend and start it:
139
+
140
+ ```sh
141
+ npm install -g @oratis/lisa
142
+ lisa serve --web # apps load http://localhost:5757
143
+ ```
144
+
145
+ ### 📟 Homebrew (CLI only)
146
+
147
+ ```sh
148
+ brew install oratis/tap/lisa
149
+ lisa # birth ritual on first run
150
+ ```
151
+
152
+ ### 🛠 From source (full control)
64
153
 
65
154
  ```sh
66
155
  git clone https://github.com/oratis/LISA.git
@@ -68,10 +157,6 @@ cd LISA
68
157
  npm install
69
158
  npm run build
70
159
 
71
- # Configure your key
72
- mkdir -p ~/.lisa
73
- echo 'ANTHROPIC_API_KEY=sk-ant-...' > ~/.lisa/config.env
74
-
75
160
  # First run triggers the birth ritual automatically (~30s, one-time)
76
161
  node dist/cli.js
77
162
  # or, after `npm link`:
@@ -81,7 +166,14 @@ lisa
81
166
  For OpenAI models (`gpt-*`), also set `OPENAI_API_KEY`.
82
167
  For pixel-art mood generation, also set `SEEDREAM_API_KEY` ([Volcengine ARK](https://www.volcengine.com/product/ark)).
83
168
 
84
- **Other LLM providers** (DeepSeek, Volcengine Doubao, Aliyun Qwen, Moonshot Kimi, xAI Grok, Zhipu GLM, Ollama for local, ...) work out of the box — Lisa auto-routes by model-name prefix to the right OpenAI-compatible endpoint. See [docs/PROVIDERS.md](docs/PROVIDERS.md) for 10 ready-to-use recipes.
169
+ **16+ other LLM providers** work out of the box — Lisa auto-routes by model-name prefix:
170
+
171
+ - **International**: Google Gemini · DeepSeek · Mistral · Perplexity Sonar · xAI Grok
172
+ - **China**: Volcengine Doubao · Aliyun Qwen · Moonshot Kimi · Zhipu GLM · Stepfun · 01.AI Yi · Baichuan · MiniMax · Tencent Hunyuan
173
+ - **Local**: Ollama · LM Studio · vLLM · llama.cpp
174
+ - **Aggregators**: Groq · Together AI · Fireworks AI · OpenRouter · Azure OpenAI · one-api
175
+
176
+ See [docs/PROVIDERS.md](docs/PROVIDERS.md) for ready-to-use recipes for all of these.
85
177
 
86
178
  ## What's special
87
179
 
@@ -98,6 +190,7 @@ For pixel-art mood generation, also set `SEEDREAM_API_KEY` ([Volcengine ARK](htt
98
190
 
99
191
  - **Terminal REPL** — `lisa` (interactive) or `lisa "prompt"` (one-shot)
100
192
  - **Web GUI** — `lisa serve --web` → http://localhost:5757 — pixel-art chat with live mood updates
193
+ - **Island widget** — `lisa serve --web` → http://localhost:5757/island — a small pill with her current mood + status; open in a tiny browser window and dock it to your screen edge. Phase 1 (web-only) is shipped; a native Mac container with notch-aware positioning is planned ([docs/MAC_ISLAND_PLAN.md](docs/MAC_ISLAND_PLAN.md)).
101
194
  - **IM channels** — `lisa serve --channels telegram,discord,slack,feishu,imessage,webhook` — six built-in adapters, see below
102
195
  - **Heartbeat** — `lisa heartbeat run` (manual) or `lisa heartbeat install` (launchd / cron)
103
196
 
@@ -286,7 +379,7 @@ LISA was built by studying and synthesizing patterns from five reference agents
286
379
  | Capability | pi-mono | OpenClaw | hermes | claude-code | codex | **LISA** |
287
380
  |---|:-:|:-:|:-:|:-:|:-:|:-:|
288
381
  | Streaming agent loop | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
289
- | Multi-provider (Anthropic + OpenAI) | ✅ | ✅ | ✅ | – | partial | ✅ |
382
+ | Multi-provider (Anthropic + OpenAI + Gemini) | ✅ | ✅ | ✅ | – | partial | ✅ |
290
383
  | File / shell tools | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
291
384
  | Skills (md + frontmatter) | ✅ | ✅ | ✅ | ✅ | – | ✅ |
292
385
  | Cross-session memory | – | ✅ | ✅ | partial | – | ✅ |
@@ -399,7 +492,7 @@ src/
399
492
  │ ├── store.ts CRUD + tamper detection
400
493
  │ ├── tools.ts soul_patch / soul_journal / soul_feel / soul_read
401
494
  │ ├── paths.ts types.ts
402
- ├── providers/ Anthropic + OpenAI provider abstraction
495
+ ├── providers/ Anthropic + OpenAI + Gemini provider abstraction
403
496
  ├── tools/ read/write/edit/apply_patch/bash/grep/ls/task/set_mood + registry
404
497
  ├── skills/ manager + frontmatter parser + skill_manage tool
405
498
  ├── memory/ store + memory tool + TF-IDF index + memory_search
package/README.zh-CN.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # LISA
2
2
 
3
+ [![npm](https://img.shields.io/npm/v/@oratis/lisa?color=cb3837&label=npm)](https://www.npmjs.com/package/@oratis/lisa)
4
+ [![Homebrew](https://img.shields.io/badge/homebrew-oratis%2Ftap%2Flisa-fbb040)](https://github.com/oratis/homebrew-tap)
5
+ [![Mac DMG](https://img.shields.io/github/v/release/oratis/LISA?label=Mac%20app&color=000000&logo=apple)](https://github.com/oratis/LISA/releases/latest)
6
+ [![License: MIT](https://img.shields.io/github/license/oratis/LISA?color=blue)](./LICENSE)
7
+ [![GitHub Repo stars](https://img.shields.io/github/stars/oratis/LISA?style=social)](https://github.com/oratis/LISA/stargazers)
8
+
3
9
  > [English](./README.md) | 中文
4
10
 
5
11
  **一个真正有"自我"的 AI agent — 她有想做的事,会整理自己的一天,写一本不给你看的日记。**
@@ -8,7 +14,7 @@
8
14
 
9
15
  ### LISA = pi-mono + OpenClaw + hermes + claude-code + codex + *它们都没有的东西*
10
16
 
11
- 站在五个最好的开源 agent 肩膀上,LISA 实现了**它们全部能力的并集** — 流式 agent loop、双 providerAnthropic + OpenAI)、MCP client、插件、hooks、沙箱 bash、子 agent、会话恢复、上下文压缩、语音输入输出、六个 IM 通道(Telegram / Discord / Slack / 飞书 / iMessage / Webhook)、apply-patch、审批模式、跨会话 TF-IDF 全文搜、像素艺术 web UI。1.1 万行 TypeScript,MIT。
17
+ 站在五个最好的开源 agent 肩膀上,LISA 实现了**它们全部能力的并集** — 流式 agent loop、三 provider 原生支持(Anthropic + OpenAI + Gemini,外加 20+ OpenAI-compatible 提供商)、MCP client、插件、hooks、沙箱 bash、子 agent、会话恢复、上下文压缩、语音输入输出、六个 IM 通道(Telegram / Discord / Slack / 飞书 / iMessage / Webhook)、apply-patch、审批模式、跨会话 TF-IDF 全文搜、像素艺术 web UI。1.1 万行 TypeScript,MIT。
12
18
 
13
19
  它们都没有的:
14
20
 
@@ -55,9 +61,92 @@
55
61
  完成 Lisa is alive.
56
62
  ```
57
63
 
64
+ ## 演示视频
65
+
66
+ <p align="center">
67
+ <a href="https://www.youtube.com/watch?v=J_00iwAB_WI">
68
+ <img src="assets/demo-thumbnail.png" alt="在 YouTube 观看 LISA 演示" width="720">
69
+ </a>
70
+ <br>
71
+ <i>▶️ <a href="https://www.youtube.com/watch?v=J_00iwAB_WI">在 YouTube 观看 2 分钟演示</a></i>
72
+ </p>
73
+
74
+ ## 截图
75
+
76
+ <table>
77
+ <tr>
78
+ <td width="50%" align="center">
79
+ <a href="assets/screenshots/01-birth-ritual.png"><img src="assets/screenshots/01-birth-ritual.png" alt="Birth ritual"></a><br>
80
+ <b>Birth Ritual</b><br>
81
+ <sub>随机种子 → 她自己写下身份、目的、第一份价值观、第一个心愿。</sub>
82
+ </td>
83
+ <td width="50%" align="center">
84
+ <a href="assets/screenshots/02-first-chat.png"><img src="assets/screenshots/02-first-chat.png" alt="第一次对话"></a><br>
85
+ <b>第一次对话</b><br>
86
+ <sub>她用刚刚写下的灵魂自我介绍 —— 像素头像随心情实时切换。</sub>
87
+ </td>
88
+ </tr>
89
+ <tr>
90
+ <td width="50%" align="center">
91
+ <a href="assets/screenshots/03-brain-and-heart.png"><img src="assets/screenshots/03-brain-and-heart.png" alt="大脑与心"></a><br>
92
+ <b>"我住在两个地方 —— 我的大脑和我的心 ❤️"</b><br>
93
+ <sub>问她"你是谁",她指着 <code>/Projects/LISA/src</code>(她的大脑 —— 跑她的代码)和 <code>~/.lisa/soul/</code>(她的心 —— 她攒下的一切)。</sub>
94
+ </td>
95
+ <td width="50%" align="center">
96
+ <a href="assets/screenshots/04-personality.png"><img src="assets/screenshots/04-personality.png" alt="温度 + mood + tools"></a><br>
97
+ <b>有温度 · 实时 mood · 工具调用</b><br>
98
+ <sub>回复同时触发 <code>mood:giggling</code> 和 <code>memory:append</code>。"Haha, a fellow creature of the night!" —— 她有声调,不只是函数签名。</sub>
99
+ </td>
100
+ </tr>
101
+ <tr>
102
+ <td width="50%" align="center">
103
+ <a href="assets/screenshots/05-soul-inspector.png"><img src="assets/screenshots/05-soul-inspector.png" alt="她的灵魂内部"></a><br>
104
+ <b>她的灵魂内部</b><br>
105
+ <sub>SOUL 检查器:她自己写的 identity、她自己采纳的 values(如 <i>Honest Discomfort Over False Ease</i>)、她自己积攒的 desires。她是这些文件的唯一合法编辑者。</sub>
106
+ </td>
107
+ <td width="50%" align="center">
108
+ <a href="assets/screenshots/06-while-you-were-away.png"><img src="assets/screenshots/06-while-you-were-away.png" alt="她自己跑了一段后"></a><br>
109
+ <b>她自己跑了一段之后</b><br>
110
+ <sub>"我有 Heartbeat,你不在的时候我也在追自己想做的事。"回来时带着反思,带着她自己写的日记 —— 然后问你要不要读。</sub>
111
+ </td>
112
+ </tr>
113
+ </table>
114
+
58
115
  ## 安装
59
116
 
60
- Node 20 + Anthropic API key。
117
+ 三种方式,任选其一。都需要至少一个 LLM provider key —— 默认 Anthropic,下面列的 20+ 个 provider 都行(`--model gpt-4o`、`--model deepseek-chat`、Ollama 走 `LISA_BASE_URL=http://localhost:11434/v1` 等)。
118
+
119
+ ```sh
120
+ # 1. 配置 provider key(只需要做一次,与下面装哪种无关)
121
+ mkdir -p ~/.lisa
122
+ echo 'ANTHROPIC_API_KEY=sk-ant-...' > ~/.lisa/config.env
123
+ ```
124
+
125
+ ### 🍎 Mac 原生 App(macOS 推荐)
126
+
127
+ 从 GitHub Release 下载**已签名 + 已公证**的 DMG —— 没有 Gatekeeper 警告,无需 `xattr` 解除隔离:
128
+
129
+ **→ [下载 `Lisa-Suite.dmg`](https://github.com/oratis/LISA/releases/latest)**
130
+
131
+ DMG 里有两个 app:
132
+ - **Lisa.app** —— 完整聊天客户端(侧边栏 + 玻璃拟态界面)
133
+ - **LisaIsland.app** —— 灵动岛风格的菜单栏/刘海下小条,一眼看到 Lisa 心情 + 你那边 Claude Code 的状态
134
+
135
+ 都是 universal binary(Intel + Apple Silicon)。拖到 `/Applications` 之后,装 backend 并启动:
136
+
137
+ ```sh
138
+ npm install -g @oratis/lisa
139
+ lisa serve --web # 两个 app 都从 http://localhost:5757 读
140
+ ```
141
+
142
+ ### 📟 Homebrew(只装 CLI)
143
+
144
+ ```sh
145
+ brew install oratis/tap/lisa
146
+ lisa # 第一次跑会触发 birth ritual
147
+ ```
148
+
149
+ ### 🛠 从源码(完全控制)
61
150
 
62
151
  ```sh
63
152
  git clone https://github.com/oratis/LISA.git
@@ -65,10 +154,6 @@ cd LISA
65
154
  npm install
66
155
  npm run build
67
156
 
68
- # 配置 key
69
- mkdir -p ~/.lisa
70
- echo 'ANTHROPIC_API_KEY=sk-ant-...' > ~/.lisa/config.env
71
-
72
157
  # 第一次跑会自动触发 birth ritual(约 30 秒,一次性)
73
158
  node dist/cli.js
74
159
  # 或者 npm link 之后:
@@ -78,7 +163,14 @@ lisa
78
163
  OpenAI 模型 (`gpt-*`) 还需要 `OPENAI_API_KEY`。
79
164
  重新生成像素头像还需要 `SEEDREAM_API_KEY`([火山引擎 ARK](https://www.volcengine.com/product/ark))。
80
165
 
81
- **其他 LLM**(DeepSeek、火山豆包、阿里 Qwen、月之暗面 Kimi、xAI Grok、智谱 GLM、本地 Ollama……)开箱即用 —— Lisa 按模型名前缀自动路由到对应的 OpenAI 兼容 endpoint。详见 [docs/PROVIDERS.md](docs/PROVIDERS.md),10 个可直接 copy 的配方。
166
+ **16+ 个其他 LLM** 开箱即用 —— Lisa 按模型名前缀(大小写不敏感)自动路由:
167
+
168
+ - **国际**:Google Gemini · DeepSeek · Mistral · Perplexity Sonar · xAI Grok
169
+ - **国内**:火山豆包 · 阿里 Qwen · 月之暗面 Kimi · 智谱 GLM · 阶跃 Step · 零一万物 Yi · 百川 Baichuan · MiniMax · 腾讯混元 Hunyuan
170
+ - **本地**:Ollama · LM Studio · vLLM · llama.cpp
171
+ - **聚合**:Groq · Together AI · Fireworks AI · OpenRouter · Azure OpenAI · one-api
172
+
173
+ 完整配方见 [docs/PROVIDERS.md](docs/PROVIDERS.md)。
82
174
 
83
175
  ## 她特殊在哪
84
176
 
@@ -298,7 +390,7 @@ LISA 是吃完五个开源 agent(fork 在 `reference/`)合成出来的:
298
390
  | 能力 | pi-mono | OpenClaw | hermes | claude-code | codex | **LISA** |
299
391
  |---|:-:|:-:|:-:|:-:|:-:|:-:|
300
392
  | 流式 agent loop | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
301
- | 多 provider(Anthropic + OpenAI) | ✅ | ✅ | ✅ | – | partial | ✅ |
393
+ | 多 provider(Anthropic + OpenAI + Gemini) | ✅ | ✅ | ✅ | – | partial | ✅ |
302
394
  | 文件 / shell 工具 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
303
395
  | Skills(md + frontmatter) | ✅ | ✅ | ✅ | ✅ | – | ✅ |
304
396
  | 跨会话记忆 | – | ✅ | ✅ | partial | – | ✅ |
@@ -413,7 +505,7 @@ src/
413
505
  │ ├── tools.ts soul_patch / soul_journal / soul_feel / soul_read
414
506
  │ ├── paths.ts types.ts
415
507
  ├── idle/ ★ 空闲模式(IdleWatcher 单例 + autonomous-time runner)
416
- ├── providers/ Anthropic + OpenAI 抽象
508
+ ├── providers/ Anthropic + OpenAI + Gemini 抽象
417
509
  ├── tools/ read/write/edit/apply_patch/bash/grep/ls/task/set_mood + registry
418
510
  ├── skills/ manager + frontmatter + skill_manage
419
511
  ├── memory/ store + memory tool + TF-IDF 索引 + memory_search
package/completions/_lisa CHANGED
@@ -16,6 +16,7 @@ _lisa() {
16
16
 
17
17
  _arguments -C \
18
18
  '(-h --help)'{-h,--help}'[show help]' \
19
+ '(-v --version)'{-v,--version}'[print version and exit]' \
19
20
  '--model[LLM model name]:model:_lisa_models' \
20
21
  '--provider[force provider]:provider:(anthropic openai gemini)' \
21
22
  '--think[enable adaptive thinking each turn]' \
@@ -13,7 +13,7 @@ _lisa_completion() {
13
13
  _init_completion -n : 2>/dev/null || _get_comp_words_by_ref -n : cur prev words cword
14
14
 
15
15
  local subcommands="resume sessions serve heartbeat search birth soul channels skills wishlist status doctor monitor"
16
- local global_flags="--model --provider --think --no-reflect --compact --approval --no-mcp --no-plugins --voice --idle --no-idle --help -h"
16
+ local global_flags="--model --provider --think --no-reflect --compact --approval --no-mcp --no-plugins --voice --idle --no-idle --help -h --version -v"
17
17
  local serve_flags="--web --imessage --channels --port"
18
18
  local skills_actions="list approve disable enable audit"
19
19
  local heartbeat_actions="run install uninstall"
@@ -66,6 +66,7 @@ complete -c lisa -n "__lisa_using_subcommand heartbeat" -f -a uninstall -d "remo
66
66
 
67
67
  # ── global flags ────────────────────────────────────────────────────
68
68
  complete -c lisa -l help -s h -d "show help"
69
+ complete -c lisa -l version -s v -d "print version and exit"
69
70
  complete -c lisa -l think -d "enable adaptive thinking"
70
71
  complete -c lisa -l no-reflect -d "skip end-of-session reflection"
71
72
  complete -c lisa -l compact -d "enable Anthropic context compaction"
@@ -1 +1 @@
1
- {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,UAAU,EACV,aAAa,EACb,WAAW,EACX,cAAc,EACf,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAErD,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,gBAAgB,GAAG,CAC7B,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,OAAO,KACf,OAAO,CAAC,gBAAgB,CAAC,GAAG,gBAAgB,CAAC;AAElD;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,eAAe;IAC9B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,OAAO,EAAE,MAAM,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC/D;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,QAAQ,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,OAAO,EAAE,WAAW,CAAC;IACrB,OAAO,EAAE,aAAa,EAAE,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACrE,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;IACtC,gBAAgB,CAAC,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACpE,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAC5B,WAAW,CAAC,EAAE,CACZ,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,OAAO,KACX,OAAO,CAAC;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC,CAAC;IAChE,YAAY,CAAC,EAAE,CACb,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,OAAO,EACd,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,OAAO,KACb,OAAO,CAAC;QAAE,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC,CAAC;IAChD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,wFAAwF;IACxF,SAAS,CAAC,EAAE,eAAe,CAAC;CAC7B;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,aAAa,EAAE,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAsB,QAAQ,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC,CAkT7E;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,aAAa,CAAC,SAAS,CAAC,GAAG,MAAM,CAMhF"}
1
+ {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,UAAU,EACV,aAAa,EACb,WAAW,EACX,cAAc,EACf,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAGrD,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,gBAAgB,GAAG,CAC7B,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,OAAO,KACf,OAAO,CAAC,gBAAgB,CAAC,GAAG,gBAAgB,CAAC;AAElD;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,eAAe;IAC9B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,OAAO,EAAE,MAAM,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC/D;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,QAAQ,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,OAAO,EAAE,WAAW,CAAC;IACrB,OAAO,EAAE,aAAa,EAAE,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACrE,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;IACtC,gBAAgB,CAAC,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACpE,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAC5B,WAAW,CAAC,EAAE,CACZ,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,OAAO,KACX,OAAO,CAAC;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC,CAAC;IAChE,YAAY,CAAC,EAAE,CACb,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,OAAO,EACd,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,OAAO,KACb,OAAO,CAAC;QAAE,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC,CAAC;IAChD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,wFAAwF;IACxF,SAAS,CAAC,EAAE,eAAe,CAAC;CAC7B;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,aAAa,EAAE,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAsB,QAAQ,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC,CAS7E;AAsTD,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,aAAa,CAAC,SAAS,CAAC,GAAG,MAAM,CAMhF"}
package/dist/agent.js CHANGED
@@ -1,4 +1,16 @@
1
+ import { moodBus } from "./mood-bus.js";
1
2
  export async function runAgent(opts) {
3
+ // Surface "thinking" state to any subscriber (web GUI, island widget, etc).
4
+ // try/finally guarantees chat_end fires even on throw / cancel.
5
+ moodBus.chatStart();
6
+ try {
7
+ return await runAgentLoop(opts);
8
+ }
9
+ finally {
10
+ moodBus.chatEnd();
11
+ }
12
+ }
13
+ async function runAgentLoop(opts) {
2
14
  const { provider, systemPrompt, tools, toolCtx, onEvent, onMessagePersist, model, maxTokens = 16_000, thinking = false, compaction = false, maxIterations = 32, } = opts;
3
15
  const toolMap = new Map(tools.map((t) => [t.name, t]));
4
16
  const messages = [...opts.history];
package/dist/agent.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"agent.js","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"AA8EA,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,IAAqB;IAClD,MAAM,EACJ,QAAQ,EACR,YAAY,EACZ,KAAK,EACL,OAAO,EACP,OAAO,EACP,gBAAgB,EAChB,KAAK,EACL,SAAS,GAAG,MAAM,EAClB,QAAQ,GAAG,KAAK,EAChB,UAAU,GAAG,KAAK,EAClB,aAAa,GAAG,EAAE,GACnB,GAAG,IAAI,CAAC;IAET,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACvD,MAAM,QAAQ,GAAoB,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;IACpD,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;QAClE,MAAM,OAAO,GAAkC,EAAE,CAAC;QAClD,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QACzD,CAAC;QACD,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,SAAS,IAAI,EAAE,EAAE,CAAC;YACrC,MAAM,OAAO,GAAG,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YACjD,IAAI,OAAO,EAAE,CAAC;gBACZ,OAAO,CAAC,IAAI,CAAC;oBACX,IAAI,EAAE,OAAO;oBACb,MAAM,EAAE;wBACN,IAAI,EAAE,QAAQ;wBACd,UAAU,EAAE,CAAC,CAAC,SAAoE;wBAClF,IAAI,EAAE,CAAC,CAAC,IAAI;qBACb;iBACF,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,uEAAuE;gBACvE,OAAO,CAAC,IAAI,CAAC;oBACX,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,mBAAmB,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,SAAS,6BAA6B,CAAC,CAAC,IAAI,EAAE;iBACrF,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QACD,MAAM,SAAS,GAAkB,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;QAC3D,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACzB,MAAM,gBAAgB,EAAE,CAAC,SAAS,CAAC,CAAC;IACtC,CAAC;IAED,IAAI,eAAe,GAAG,CAAC,CAAC;IACxB,IAAI,gBAAgB,GAAG,CAAC,CAAC;IACzB,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,IAAI,SAAS,GAAG,EAAE,CAAC;IACnB,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,IAAI,UAAU,GAAG,UAAU,CAAC;IAE5B,IAAI,mBAAmB,GAAG,YAAY,CAAC;IACvC,IAAI,kBAAkB,GAAG,IAAI,CAAC,SAAS,EAAE,kBAAkB,CAAC;IAU5D,MAAM,iBAAiB,GAAuB,EAAE,CAAC;IACjD,IAAI,kBAAkB,GAAG,KAAK,CAAC;IAC/B,OAAO,CAAC,WAAW,GAAG,CAAC,CAAC,EAAE,EAAE;QAC1B,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC,CAAC;IAEF,OAAO,UAAU,GAAG,aAAa,EAAE,CAAC;QAClC,UAAU,EAAE,CAAC;QAEb,2EAA2E;QAC3E,4EAA4E;QAC5E,4EAA4E;QAC5E,sEAAsE;QACtE,uEAAuE;QACvE,2BAA2B;QAC3B,IAAI,IAAI,CAAC,SAAS,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;YACrC,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;gBAC5C,IAAI,IAAI,CAAC,WAAW,KAAK,kBAAkB,EAAE,CAAC;oBAC5C,mBAAmB,GAAG,IAAI,CAAC,IAAI,CAAC;oBAChC,kBAAkB,GAAG,IAAI,CAAC,WAAW,CAAC;oBACtC,OAAO,EAAE,CAAC;wBACR,IAAI,EAAE,uBAAuB;wBAC7B,OAAO,EAAE,0BAA0B,IAAI,CAAC,IAAI,CAAC,MAAM,SAAS;qBAC7D,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,+DAA+D;gBAC/D,OAAO,CAAC,GAAG,CACT,yBAA0B,GAAa,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAChE,CAAC;YACJ,CAAC;QACH,CAAC;QAED,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;QAElC,IAAI,MAAM,CAAC;QACX,IAAI,CAAC;YACH,MAAM,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC;gBAC9B,KAAK;gBACL,YAAY,EAAE,mBAAmB;gBACjC,KAAK;gBACL,QAAQ;gBACR,SAAS;gBACT,QAAQ;gBACR,UAAU;gBACV,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,QAAQ,EAAE;oBACR,WAAW,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;oBAC9D,eAAe,EAAE,CAAC,IAAI,EAAE,EAAE,CACxB,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC;iBAC9C;aACF,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACjE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;YACtC,MAAM,GAAG,CAAC;QACZ,CAAC;QAED,eAAe,IAAI,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC;QAChD,gBAAgB,IAAI,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC;QAClD,WAAW,IAAI,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC;QACxC,YAAY,IAAI,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC;QAC1C,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;QAE/B,MAAM,SAAS,GAAkB;YAC/B,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE,MAAM,CAAC,OAAO;SACxB,CAAC;QACF,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACzB,MAAM,gBAAgB,EAAE,CAAC,SAAS,CAAC,CAAC;QAEpC,MAAM,QAAQ,GACX,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAqC;YAChF,EAAE,IAAI,IAAI,EAAE,CAAC;QACjB,IAAI,QAAQ;YAAE,SAAS,GAAG,QAAQ,CAAC;QAEnC,IAAI,MAAM,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;YACrC,uEAAuE;YACvE,qEAAqE;YACrE,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;gBACxD,MAAM,IAAI,GAAG,iBAAiB;qBAC3B,GAAG,CACF,CAAC,CAAC,EAAE,EAAE,CACJ,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,2BAA2B,WAAW,CAAC,CAAC,kBAAkB,GAAG,CAC7G;qBACA,IAAI,CAAC,IAAI,CAAC,CAAC;gBACd,MAAM,MAAM,GAAkB;oBAC5B,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAM;4BACZ,IAAI,EACF,gHAAgH;gCAChH,6MAA6M,IAAI,EAAE;yBACtN;qBACF;iBACF,CAAC;gBACF,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACtB,MAAM,gBAAgB,EAAE,CAAC,MAAM,CAAC,CAAC;gBACjC,mBAAmB;oBACjB,mBAAmB;wBACnB,+CAA+C,IAAI,mEAAmE,CAAC;gBACzH,kBAAkB,GAAG,IAAI,CAAC;gBAC1B,OAAO,EAAE,CAAC;oBACR,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE,mDAAmD,iBAAiB,CAAC,MAAM,WAAW;iBAChG,CAAC,CAAC;gBACH,gCAAgC;gBAChC,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC;gBAC7B,uEAAuE;gBACvE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;gBAChC,SAAS;YACX,CAAC;YACD,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;YAChC,MAAM;QACR,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CACpC,CAAC,CAAC,EAA+B,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,CAC1D,CAAC;QACF,MAAM,WAAW,GAAqC,EAAE,CAAC;QACzD,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;YAC5B,OAAO,EAAE,CAAC;gBACR,IAAI,EAAE,iBAAiB;gBACvB,QAAQ,EAAE,IAAI,CAAC,IAAI;gBACnB,SAAS,EAAE,IAAI,CAAC,KAAK;aACtB,CAAC,CAAC;YACH,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACpC,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,MAAM,MAAM,GAAG,SAAS,IAAI,CAAC,IAAI,qBAAqB,CAAC;gBACvD,WAAW,CAAC,IAAI,CAAC;oBACf,IAAI,EAAE,aAAa;oBACnB,WAAW,EAAE,IAAI,CAAC,EAAE;oBACpB,OAAO,EAAE,MAAM;oBACf,QAAQ,EAAE,IAAI;iBACf,CAAC,CAAC;gBACH,OAAO,EAAE,CAAC;oBACR,IAAI,EAAE,eAAe;oBACrB,QAAQ,EAAE,IAAI,CAAC,IAAI;oBACnB,OAAO,EAAE,IAAI;oBACb,UAAU,EAAE,cAAc;iBAC3B,CAAC,CAAC;gBACH,SAAS;YACX,CAAC;YAED,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAClB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;gBAC5D,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;oBACpB,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,IAAI,aAAa,CAAC;oBAChD,WAAW,CAAC,IAAI,CAAC;wBACf,IAAI,EAAE,aAAa;wBACnB,WAAW,EAAE,IAAI,CAAC,EAAE;wBACpB,OAAO,EAAE,YAAY,MAAM,EAAE;wBAC7B,QAAQ,EAAE,IAAI;qBACf,CAAC,CAAC;oBACH,OAAO,EAAE,CAAC;wBACR,IAAI,EAAE,eAAe;wBACrB,QAAQ,EAAE,IAAI,CAAC,IAAI;wBACnB,OAAO,EAAE,IAAI;wBACb,UAAU,EAAE,MAAM;qBACnB,CAAC,CAAC;oBACH,SAAS;gBACX,CAAC;YACH,CAAC;YAED,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;gBACrB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;gBAC3D,IAAI,IAAI,EAAE,KAAK,EAAE,CAAC;oBAChB,WAAW,CAAC,IAAI,CAAC;wBACf,IAAI,EAAE,aAAa;wBACnB,WAAW,EAAE,IAAI,CAAC,EAAE;wBACpB,OAAO,EAAE,kBAAkB,IAAI,CAAC,KAAK,EAAE;wBACvC,QAAQ,EAAE,IAAI;qBACf,CAAC,CAAC;oBACH,OAAO,EAAE,CAAC;wBACR,IAAI,EAAE,eAAe;wBACrB,QAAQ,EAAE,IAAI,CAAC,IAAI;wBACnB,OAAO,EAAE,IAAI;wBACb,UAAU,EAAE,IAAI,CAAC,KAAK;qBACvB,CAAC,CAAC;oBACH,SAAS;gBACX,CAAC;YACH,CAAC;YAED,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAc,EAAE,OAAO,CAAC,CAAC;gBAC7D,IAAI,IAAI,GACN,IAAI,CAAC,oBAAoB,EAAE,CAAC,GAAG,CAAC;oBAChC,CAAC,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;gBACxD,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;oBACtB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;oBACzE,IAAI,IAAI,EAAE,aAAa,IAAI,IAAI;wBAAE,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC;gBAC7D,CAAC;gBACD,WAAW,CAAC,IAAI,CAAC;oBACf,IAAI,EAAE,aAAa;oBACnB,WAAW,EAAE,IAAI,CAAC,EAAE;oBACpB,OAAO,EAAE,IAAI;iBACd,CAAC,CAAC;gBACH,OAAO,EAAE,CAAC;oBACR,IAAI,EAAE,eAAe;oBACrB,QAAQ,EAAE,IAAI,CAAC,IAAI;oBACnB,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;iBAC/B,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBACjE,IAAI,OAAO,GAAG,OAAO,CAAC;gBACtB,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;oBACtB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;oBAC3E,IAAI,IAAI,EAAE,aAAa,IAAI,IAAI;wBAAE,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC;gBAChE,CAAC;gBACD,WAAW,CAAC,IAAI,CAAC;oBACf,IAAI,EAAE,aAAa;oBACnB,WAAW,EAAE,IAAI,CAAC,EAAE;oBACpB,OAAO;oBACP,QAAQ,EAAE,IAAI;iBACf,CAAC,CAAC;gBACH,OAAO,EAAE,CAAC;oBACR,IAAI,EAAE,eAAe;oBACrB,QAAQ,EAAE,IAAI,CAAC,IAAI;oBACnB,OAAO,EAAE,IAAI;oBACb,UAAU,EAAE,OAAO;iBACpB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QACD,MAAM,WAAW,GAAkB,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;QAC1E,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC3B,MAAM,gBAAgB,EAAE,CAAC,WAAW,CAAC,CAAC;QACtC,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;IAClC,CAAC;IAED,OAAO;QACL,SAAS;QACT,OAAO,EAAE,QAAQ;QACjB,UAAU;QACV,eAAe;QACf,gBAAgB;QAChB,WAAW;QACX,YAAY;QACZ,UAAU;KACX,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,OAAiC;IACtE,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,OAAO,OAAO,CAAC;IAChD,OAAO,OAAO;SACX,MAAM,CAAC,CAAC,CAAC,EAA4C,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC;SAC1E,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;SAClB,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"agent.js","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"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"}
@@ -17,4 +17,20 @@ export declare class IMessageChannel implements ChannelAdapter {
17
17
  private fetchSince;
18
18
  private runSqlite;
19
19
  }
20
+ /**
21
+ * Build the osascript argv for sending an iMessage WITHOUT interpolating
22
+ * user/LLM text into the AppleScript source.
23
+ *
24
+ * The old approach (`send "${text}"`) only escaped double-quotes, so a
25
+ * message containing a newline — or a crafted `" & (do shell script "...")`
26
+ * payload — could break out of the string literal and inject AppleScript.
27
+ * Inbound iMessage text is untrusted (anyone who can text the user), so this
28
+ * was a real injection vector.
29
+ *
30
+ * Instead the script is a STATIC `on run argv` program; recipient and text
31
+ * arrive as positional argv items (`item 1`/`item 2 of argv`) that AppleScript
32
+ * never parses as source. No escaping needed; newlines/quotes/backslashes
33
+ * survive verbatim.
34
+ */
35
+ export declare function buildOsascriptArgs(recipient: string, text: string): string[];
20
36
  //# sourceMappingURL=imessage.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"imessage.d.ts","sourceRoot":"","sources":["../../src/channels/imessage.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,cAAc,EACd,eAAe,EACf,eAAe,EAChB,MAAM,YAAY,CAAC;AAIpB,qBAAa,eAAgB,YAAW,cAAc;IACpD,QAAQ,CAAC,IAAI,cAAc;IAC3B,OAAO,CAAC,KAAK,CAAC,CAAiB;IAC/B,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,OAAO,CAAC,CAA0C;IAC1D,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,UAAU,CAAS;gBAEf,IAAI,GAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAA;KAAO;IAIxC,KAAK,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,eAAe,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;YAa9D,IAAI;IAuBZ,IAAI,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBzC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;YAIb,QAAQ;YAMR,UAAU;YAiCV,SAAS;CAexB"}
1
+ {"version":3,"file":"imessage.d.ts","sourceRoot":"","sources":["../../src/channels/imessage.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,cAAc,EACd,eAAe,EACf,eAAe,EAChB,MAAM,YAAY,CAAC;AAIpB,qBAAa,eAAgB,YAAW,cAAc;IACpD,QAAQ,CAAC,IAAI,cAAc;IAC3B,OAAO,CAAC,KAAK,CAAC,CAAiB;IAC/B,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,OAAO,CAAC,CAA0C;IAC1D,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,UAAU,CAAS;gBAEf,IAAI,GAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAA;KAAO;IAIxC,KAAK,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,eAAe,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;YAa9D,IAAI;IAuBZ,IAAI,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAezC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;YAIb,QAAQ;YAMR,UAAU;YAiCV,SAAS;CAexB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAW5E"}
@@ -53,15 +53,9 @@ export class IMessageChannel {
53
53
  }
54
54
  }
55
55
  async send(msg) {
56
- const recipient = msg.to.replace(/"/g, '\\"');
57
- const text = msg.text.replace(/"/g, '\\"');
58
- const script = `tell application "Messages"
59
- set targetService to first service whose service type = iMessage
60
- set targetBuddy to buddy "${recipient}" of targetService
61
- send "${text}" to targetBuddy
62
- end tell`;
56
+ const args = buildOsascriptArgs(msg.to, msg.text);
63
57
  await new Promise((resolve, reject) => {
64
- const child = spawn("/usr/bin/osascript", ["-e", script]);
58
+ const child = spawn("/usr/bin/osascript", args);
65
59
  let stderr = "";
66
60
  child.stderr.on("data", (b) => (stderr += b.toString("utf8")));
67
61
  child.on("error", reject);
@@ -117,6 +111,33 @@ end tell`;
117
111
  });
118
112
  }
119
113
  }
114
+ /**
115
+ * Build the osascript argv for sending an iMessage WITHOUT interpolating
116
+ * user/LLM text into the AppleScript source.
117
+ *
118
+ * The old approach (`send "${text}"`) only escaped double-quotes, so a
119
+ * message containing a newline — or a crafted `" & (do shell script "...")`
120
+ * payload — could break out of the string literal and inject AppleScript.
121
+ * Inbound iMessage text is untrusted (anyone who can text the user), so this
122
+ * was a real injection vector.
123
+ *
124
+ * Instead the script is a STATIC `on run argv` program; recipient and text
125
+ * arrive as positional argv items (`item 1`/`item 2 of argv`) that AppleScript
126
+ * never parses as source. No escaping needed; newlines/quotes/backslashes
127
+ * survive verbatim.
128
+ */
129
+ export function buildOsascriptArgs(recipient, text) {
130
+ const script = `on run argv
131
+ set theRecipient to item 1 of argv
132
+ set theText to item 2 of argv
133
+ tell application "Messages"
134
+ set targetService to first service whose service type = iMessage
135
+ set targetBuddy to buddy theRecipient of targetService
136
+ send theText to targetBuddy
137
+ end tell
138
+ end run`;
139
+ return ["-e", script, recipient, text];
140
+ }
120
141
  registerChannel("imessage", (cfg) => {
121
142
  const intervalMs = typeof cfg.intervalMs === "number" ? cfg.intervalMs : undefined;
122
143
  return new IMessageChannel(intervalMs ? { intervalMs } : {});
@@ -1 +1 @@
1
- {"version":3,"file":"imessage.js","sourceRoot":"","sources":["../../src/channels/imessage.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"imessage.js","sourceRoot":"","sources":["../../src/channels/imessage.ts"],"names":[],"mappings":"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"}
package/dist/cli.js CHANGED
@@ -1,5 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
  import process from "node:process";
3
+ import { readFileSync } from "node:fs";
4
+ import { fileURLToPath } from "node:url";
5
+ import { dirname, resolve as resolvePath } from "node:path";
3
6
  // Bridge HTTPS_PROXY / HTTP_PROXY env to undici BEFORE any module reads/uses
4
7
  // fetch — handles the case where the shell already exports a proxy. We also
5
8
  // re-call this after config.env loads (inside main()) to handle proxies set
@@ -70,6 +73,7 @@ SKILLS (executable, Phase 3.1)
70
73
  lisa skills audit <slug> Show the audit trail.
71
74
 
72
75
  lisa --help Show this message.
76
+ lisa --version Print the installed Lisa version.
73
77
 
74
78
  FLAGS
75
79
  --model <id> Override default (${DEFAULT_MODEL}).
@@ -220,7 +224,26 @@ function mustNext(argv, idx, flag) {
220
224
  throw new Error(`${flag} requires a value`);
221
225
  return v;
222
226
  }
227
+ function readPackageVersion() {
228
+ try {
229
+ const here = dirname(fileURLToPath(import.meta.url));
230
+ // dist/cli.js → ../package.json (works both in dev and in the installed npm tarball,
231
+ // where dist/ and package.json are siblings under the package root).
232
+ const pkgPath = resolvePath(here, "..", "package.json");
233
+ const pkg = JSON.parse(readFileSync(pkgPath, "utf8"));
234
+ return pkg.version ?? "unknown";
235
+ }
236
+ catch {
237
+ return "unknown";
238
+ }
239
+ }
223
240
  async function main() {
241
+ // --version / -v: print and exit before any heavy startup (proxy, config, soul).
242
+ const rawArgv = process.argv.slice(2);
243
+ if (rawArgv.includes("--version") || rawArgv.includes("-v")) {
244
+ console.log(readPackageVersion());
245
+ return;
246
+ }
224
247
  let args;
225
248
  try {
226
249
  args = parseArgs(process.argv.slice(2));