lacy 1.8.15 → 1.8.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +31 -201
- package/{packages/lacy/index.mjs → index.mjs} +0 -0
- package/package.json +27 -42
- package/.claude/settings.local.json +0 -26
- package/.github/FUNDING.yml +0 -3
- package/.github/ISSUE_TEMPLATE/bug_report.yml +0 -49
- package/.github/ISSUE_TEMPLATE/config.yml +0 -5
- package/.github/ISSUE_TEMPLATE/feature_request.yml +0 -28
- package/.github/PULL_REQUEST_TEMPLATE.md +0 -17
- package/.github/SECURITY.md +0 -32
- package/.github/assets/logo-horizontal-dark.png +0 -0
- package/.github/assets/logo-horizontal-dark.svg +0 -17
- package/.github/assets/logo-horizontal.png +0 -0
- package/.github/assets/logo-horizontal.svg +0 -17
- package/.github/assets/logo.png +0 -0
- package/.github/assets/logo.svg +0 -12
- package/.github/assets/social-preview.png +0 -0
- package/.github/assets/social-preview.svg +0 -50
- package/.github/dependabot.yml +0 -21
- package/.github/workflows/ci.yml +0 -80
- package/.github/workflows/dependabot-auto-merge.yml +0 -32
- package/CHANGELOG.md +0 -366
- package/CLAUDE.md +0 -340
- package/CONTRIBUTING.md +0 -141
- package/LICENSE +0 -110
- package/RELEASING.md +0 -148
- package/STYLE.md +0 -202
- package/assets/hero.jpeg +0 -0
- package/assets/mode-indicators.jpeg +0 -0
- package/assets/real-time-indicator.jpeg +0 -0
- package/assets/supported-tools.jpeg +0 -0
- package/bin/lacy +0 -1028
- package/docs/ADDING-BACKENDS.md +0 -124
- package/docs/DEVTO-ARTICLE.md +0 -94
- package/docs/DOCS.md +0 -68
- package/docs/GROWTH-STRATEGY.md +0 -119
- package/docs/HN-RESPONSES.md +0 -122
- package/docs/LAUNCH-COPY-FINAL.md +0 -105
- package/docs/MARKETING.md +0 -411
- package/docs/NATURAL_LANGUAGE_DETECTION.md +0 -204
- package/docs/UGC_VIDEO_SCRIPT.md +0 -114
- package/docs/articles/devto-how-i-made-my-terminal-understand-english.md +0 -117
- package/docs/demo-color-transition.gif +0 -0
- package/docs/demo-full.gif +0 -0
- package/docs/demo-indicator.gif +0 -0
- package/docs/launch-thread-may6.sh +0 -158
- package/docs/videos/README.md +0 -189
- package/docs/videos/generate_frames.py +0 -510
- package/docs/videos/generate_frames_v2.py +0 -729
- package/docs/videos/generate_short.py +0 -328
- package/docs/videos/generate_short_v2.py +0 -526
- package/docs/videos/lacy-shell-demo-v2.mp4 +0 -0
- package/docs/videos/lacy-shell-demo.mp4 +0 -0
- package/docs/videos/lacy-shell-short-v2.mp4 +0 -0
- package/docs/videos/lacy-shell-short.mp4 +0 -0
- package/install.sh +0 -1009
- package/lacy.plugin.bash +0 -75
- package/lacy.plugin.fish +0 -43
- package/lacy.plugin.zsh +0 -65
- package/lib/animations.zsh +0 -3
- package/lib/bash/completions.bash +0 -40
- package/lib/bash/execute.bash +0 -233
- package/lib/bash/init.bash +0 -40
- package/lib/bash/keybindings.bash +0 -134
- package/lib/bash/prompt.bash +0 -85
- package/lib/commands/info.sh +0 -25
- package/lib/config.zsh +0 -3
- package/lib/constants.zsh +0 -3
- package/lib/core/animations.sh +0 -271
- package/lib/core/commands.sh +0 -297
- package/lib/core/config.sh +0 -340
- package/lib/core/constants.sh +0 -366
- package/lib/core/context.sh +0 -260
- package/lib/core/detection.sh +0 -417
- package/lib/core/mcp.sh +0 -741
- package/lib/core/modes.sh +0 -123
- package/lib/core/preheat.sh +0 -496
- package/lib/core/spinner.sh +0 -174
- package/lib/core/telemetry.sh +0 -99
- package/lib/detection.zsh +0 -3
- package/lib/execute.zsh +0 -3
- package/lib/fish/config.fish +0 -66
- package/lib/fish/detection.fish +0 -90
- package/lib/fish/execute.fish +0 -105
- package/lib/fish/keybindings.fish +0 -42
- package/lib/fish/prompt.fish +0 -30
- package/lib/keybindings.zsh +0 -3
- package/lib/mcp.zsh +0 -3
- package/lib/modes.zsh +0 -3
- package/lib/preheat.zsh +0 -3
- package/lib/prompt.zsh +0 -3
- package/lib/spinner.zsh +0 -3
- package/lib/zsh/completions.zsh +0 -60
- package/lib/zsh/execute.zsh +0 -294
- package/lib/zsh/init.zsh +0 -26
- package/lib/zsh/keybindings.zsh +0 -551
- package/lib/zsh/prompt.zsh +0 -90
- package/packages/lacy/README.md +0 -61
- package/packages/lacy/commands/info.sh +0 -25
- package/packages/lacy/package-lock.json +0 -71
- package/packages/lacy/package.json +0 -42
- package/script/release.ts +0 -487
- package/squirrel.toml +0 -36
- package/tests/test_bash.bash +0 -163
- package/tests/test_core.sh +0 -607
- package/tests/test_gemini.sh +0 -119
- package/tests/test_gemini_mcp.sh +0 -126
- package/tests/test_preheat_server.zsh +0 -446
- package/uninstall.sh +0 -52
package/README.md
CHANGED
|
@@ -1,231 +1,61 @@
|
|
|
1
|
-
|
|
2
|
-
<a href="https://lacy.sh">
|
|
3
|
-
<picture>
|
|
4
|
-
<source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/lacymorrow/lacy/HEAD/.github/assets/logo-horizontal-dark.svg">
|
|
5
|
-
<img src="https://raw.githubusercontent.com/lacymorrow/lacy/HEAD/.github/assets/logo-horizontal.svg" alt="Lacy" width="220">
|
|
6
|
-
</picture>
|
|
7
|
-
</a>
|
|
8
|
-
</p>
|
|
1
|
+
# lacy
|
|
9
2
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
<p align="center">
|
|
13
|
-
<a href="https://www.npmjs.com/package/lacy"><img alt="npm version" src="https://img.shields.io/npm/v/lacy?style=flat"></a>
|
|
14
|
-
<a href="https://www.npmjs.com/package/lacy"><img alt="npm downloads" src="https://img.shields.io/npm/dm/lacy?style=flat"></a>
|
|
15
|
-
<a href="https://github.com/lacymorrow/lacy/actions/workflows/ci.yml"><img alt="CI" src="https://img.shields.io/github/actions/workflow/status/lacymorrow/lacy/ci.yml?style=flat&label=CI"></a>
|
|
16
|
-
<a href="https://github.com/lacymorrow/lacy/stargazers"><img alt="GitHub stars" src="https://img.shields.io/github/stars/lacymorrow/lacy?style=flat"></a>
|
|
17
|
-
<a href="https://fsl.software"><img alt="License: FSL-1.1-MIT" src="https://img.shields.io/badge/License-FSL--1.1--MIT-blue?style=flat"></a>
|
|
18
|
-
</p>
|
|
19
|
-
|
|
20
|
-
<p align="center">
|
|
21
|
-
<img src="https://raw.githubusercontent.com/lacymorrow/lacy/HEAD/docs/demo-full.gif" alt="Lacy Shell demo — commands run in shell, questions go to AI" width="680" />
|
|
22
|
-
</p>
|
|
23
|
-
|
|
24
|
-
## Why Lacy?
|
|
25
|
-
|
|
26
|
-
- **No new tools to learn** — Lacy works with your existing AI CLI (Claude Code, Gemini, OpenCode, Codex, Lash). It's a complement, not a replacement.
|
|
27
|
-
- **Zero friction** — No slash commands, no hotkeys, no separate terminal. Type naturally and Lacy routes it. A real-time color indicator shows you what will happen before you press enter.
|
|
28
|
-
- **Smart detection** — Lacy classifies input using word analysis, not AI. It's instant. Commands like `ls -la` stay green (shell). Questions like `what files are here` turn magenta (AI). If a command fails with natural language patterns, it silently reroutes to AI.
|
|
29
|
-
|
|
30
|
-
> *Works with ZSH and Bash 4+ on macOS, Linux, and WSL.*
|
|
3
|
+
Interactive installer for [Lacy Shell](https://github.com/lacymorrow/lacy) — talk directly to your shell.
|
|
31
4
|
|
|
32
5
|
## Install
|
|
33
6
|
|
|
34
|
-
> Supported installation methods: `npm`, `curl`, `homebrew`, `git`
|
|
35
|
-
|
|
36
|
-
#### Install using `npx`
|
|
37
|
-
|
|
38
7
|
```bash
|
|
39
8
|
npx lacy
|
|
40
9
|
```
|
|
41
10
|
|
|
42
|
-
|
|
11
|
+
Features:
|
|
12
|
+
- Arrow-key tool selection
|
|
13
|
+
- Auto-detects installed AI CLI tools
|
|
14
|
+
- Offers to install lash if selected
|
|
15
|
+
- Automatic shell restart
|
|
43
16
|
|
|
44
|
-
|
|
45
|
-
curl -fsSL https://lacy.sh/install | bash
|
|
46
|
-
```
|
|
47
|
-
|
|
48
|
-
<details>
|
|
49
|
-
<summary>Other methods</summary>
|
|
17
|
+
## Uninstall
|
|
50
18
|
|
|
51
19
|
```bash
|
|
52
|
-
|
|
53
|
-
brew tap lacymorrow/tap
|
|
54
|
-
brew install lacy
|
|
55
|
-
|
|
56
|
-
# Manual
|
|
57
|
-
git clone https://github.com/lacymorrow/lacy.git ~/.lacy
|
|
58
|
-
echo 'source ~/.lacy/lacy.plugin.zsh' >> ~/.zshrc
|
|
20
|
+
npx lacy --uninstall
|
|
59
21
|
```
|
|
60
22
|
|
|
61
|
-
|
|
23
|
+
## Options
|
|
62
24
|
|
|
63
|
-
## How It Works
|
|
64
|
-
|
|
65
|
-
Real-time visual feedback shows what will happen before you hit enter:
|
|
66
|
-
|
|
67
|
-
<p align="center">
|
|
68
|
-
<img src="https://raw.githubusercontent.com/lacymorrow/lacy/HEAD/docs/demo-indicator.gif" alt="Green indicator for shell commands, magenta for AI" width="680" />
|
|
69
|
-
</p>
|
|
70
|
-
|
|
71
|
-
Commands execute in your shell. Natural language goes to your AI agent. No prefixes, no context switching — you just type.
|
|
72
|
-
|
|
73
|
-
| Input | Routes to | Why |
|
|
74
|
-
| ------------------------------ | ---------- | ------------------------------------------- |
|
|
75
|
-
| `ls -la` | Shell | Valid command |
|
|
76
|
-
| `what files are here` | AI | Natural language |
|
|
77
|
-
| `git status` | Shell | Valid command |
|
|
78
|
-
| `do we have a way to install?` | AI | Reserved word — never a real command |
|
|
79
|
-
| `fix the bug` | AI | Multi-word, not a command |
|
|
80
|
-
| `kill the process on 3000` | Shell → AI | Valid command, but fails — rerouted |
|
|
81
|
-
| `go ahead and fix it` | Shell → AI | "go" is valid, but "ahead" triggers reroute |
|
|
82
|
-
| `!rm -rf *` | Shell | `!` prefix forces shell |
|
|
83
|
-
|
|
84
|
-
The first word of your input is also syntax-highlighted in real-time: **green** for shell commands, **magenta** for AI queries.
|
|
85
|
-
|
|
86
|
-
**Smart rerouting** (auto mode): When a valid command contains natural language patterns (3+ bare words with articles, pronouns, etc.) and fails, lacy shows a hint and automatically re-sends it to the AI agent. Shell reserved words like `do`, `then`, `in`, `else` are routed directly to the agent — they pass `command -v` but are never standalone commands.
|
|
87
|
-
|
|
88
|
-
**Terminal context**: When you ask the AI a question, lacy automatically includes your current directory, git branch, recent commands, and exit codes, but only what changed since your last query. In supported terminals (tmux, screen, iTerm2, Terminal.app), it also captures the visible screen output so the agent can see error messages and stack traces.
|
|
89
|
-
|
|
90
|
-
## Modes
|
|
91
|
-
|
|
92
|
-
<p align="center">
|
|
93
|
-
<img src="https://raw.githubusercontent.com/lacymorrow/lacy/HEAD/assets/mode-indicators.jpeg" alt="Shell and Agent mode indicators" width="480" />
|
|
94
|
-
</p>
|
|
95
|
-
|
|
96
|
-
| Mode | Behavior | Activate |
|
|
97
|
-
| --------- | ----------------------- | ---------------------------- |
|
|
98
|
-
| **Auto** | Smart routing (default) | `mode auto` |
|
|
99
|
-
| **Shell** | Everything to shell | `mode shell` or `Ctrl+Space` |
|
|
100
|
-
| **Agent** | Everything to AI | `mode agent` or `Ctrl+Space` |
|
|
101
|
-
|
|
102
|
-
## Supported Tools
|
|
103
|
-
|
|
104
|
-
Lacy auto-detects your installed AI CLI. All tools handle their own auth — no API keys needed.
|
|
105
|
-
|
|
106
|
-
<p align="center">
|
|
107
|
-
<img src="https://raw.githubusercontent.com/lacymorrow/lacy/HEAD/assets/supported-tools.jpeg" alt="Supported AI CLI tools" width="680" />
|
|
108
|
-
</p>
|
|
109
|
-
|
|
110
|
-
```bash
|
|
111
|
-
tool set claude # Use Claude Code
|
|
112
|
-
tool set lash # Use Lash
|
|
113
|
-
tool set auto # Auto-detect (first available)
|
|
114
25
|
```
|
|
26
|
+
Usage:
|
|
27
|
+
npx lacy Install Lacy Shell
|
|
28
|
+
npx lacy --uninstall Uninstall Lacy Shell
|
|
115
29
|
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
agent_tools:
|
|
120
|
-
active: claude # lash, claude, opencode, gemini, codex, custom, or empty for auto
|
|
30
|
+
Options:
|
|
31
|
+
-h, --help Show help message
|
|
32
|
+
-u, --uninstall Uninstall Lacy Shell
|
|
121
33
|
```
|
|
122
34
|
|
|
123
|
-
##
|
|
124
|
-
|
|
125
|
-
| Command | Description |
|
|
126
|
-
| --------------------------- | -------------------- |
|
|
127
|
-
| `mode` | Show current mode |
|
|
128
|
-
| `mode [shell\|agent\|auto]` | Switch mode |
|
|
129
|
-
| `tool` | Show active AI tool |
|
|
130
|
-
| `tool set <name>` | Set AI tool |
|
|
131
|
-
| `ask "query"` | Direct query to AI |
|
|
132
|
-
| `Ctrl+Space` | Toggle between modes |
|
|
35
|
+
## What is Lacy Shell?
|
|
133
36
|
|
|
134
|
-
|
|
37
|
+
Lacy routes natural language to AI and commands to your shell — automatically.
|
|
135
38
|
|
|
136
|
-
After installation, the `lacy` command is available (no Node required):
|
|
137
|
-
|
|
138
|
-
```bash
|
|
139
|
-
lacy setup # Interactive settings (tool, mode, config)
|
|
140
|
-
lacy status # Show installation status
|
|
141
|
-
lacy doctor # Diagnose common issues
|
|
142
|
-
lacy update # Pull latest changes
|
|
143
|
-
lacy config edit # Open config in $EDITOR
|
|
144
|
-
lacy uninstall # Remove Lacy Shell
|
|
145
|
-
lacy help # Show all commands
|
|
146
39
|
```
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
lacy uninstall
|
|
152
|
-
# or
|
|
153
|
-
npx lacy --uninstall
|
|
154
|
-
# or
|
|
155
|
-
curl -fsSL https://lacy.sh/install | bash -s -- --uninstall
|
|
40
|
+
❯ ls -la → runs in shell
|
|
41
|
+
❯ what files are here → AI answers
|
|
42
|
+
❯ git status → runs in shell
|
|
43
|
+
❯ fix the build error → AI answers
|
|
156
44
|
```
|
|
157
45
|
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
Config file: `~/.lacy/config.yaml`
|
|
161
|
-
|
|
162
|
-
```yaml
|
|
163
|
-
agent_tools:
|
|
164
|
-
active: claude # lash, claude, opencode, gemini, codex, or empty for auto
|
|
165
|
-
|
|
166
|
-
modes:
|
|
167
|
-
default: auto # shell, agent, auto
|
|
168
|
-
|
|
169
|
-
api_keys:
|
|
170
|
-
openai: "sk-..." # Only needed if no CLI tool installed
|
|
171
|
-
anthropic: "sk-ant-..."
|
|
172
|
-
```
|
|
173
|
-
|
|
174
|
-
## Troubleshooting
|
|
175
|
-
|
|
176
|
-
**No AI response** — Check `tool` to see if a tool is detected. Install one: `npm i -g lashcode` or `brew install claude`.
|
|
177
|
-
|
|
178
|
-
**Colors not showing** — Ensure your terminal supports 256 colors (green=34, magenta=200, blue=75).
|
|
179
|
-
|
|
180
|
-
**Command rerouted unexpectedly** — In auto mode, commands with natural language patterns that fail are re-sent to the AI. Switch to `mode shell` to disable this, or prefix with `!`.
|
|
181
|
-
|
|
182
|
-
**Emergency bypass** — Prefix any command with `!` to force shell execution: `!rm -rf node_modules`
|
|
46
|
+
Works with: **lash**, **claude**, **opencode**, **gemini**, **codex**
|
|
183
47
|
|
|
184
|
-
##
|
|
185
|
-
|
|
186
|
-
Requires [Bun](https://bun.sh), [gh](https://cli.github.com), and `npm login`.
|
|
48
|
+
## Alternative Install Methods
|
|
187
49
|
|
|
188
50
|
```bash
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
bun run release minor # minor bump (1.5.3 → 1.6.0)
|
|
192
|
-
bun run release major # major bump (1.5.3 → 2.0.0)
|
|
193
|
-
bun run release 2.0.0 # explicit version
|
|
194
|
-
```
|
|
195
|
-
|
|
196
|
-
The script handles the full release flow:
|
|
197
|
-
|
|
198
|
-
1. Bumps version in both `package.json` files
|
|
199
|
-
2. Commits with `release: v<version>` and tags
|
|
200
|
-
3. Pushes to GitHub and creates a GitHub release
|
|
201
|
-
4. Publishes the npm package (prompts for OTP if required)
|
|
202
|
-
|
|
203
|
-
## Support This Project
|
|
204
|
-
|
|
205
|
-
Lacy Shell is free and open source. If it saves you time, consider sponsoring the project:
|
|
206
|
-
|
|
207
|
-
[](https://github.com/sponsors/lacymorrow)
|
|
208
|
-
|
|
209
|
-
Your support keeps development active and helps cover infrastructure costs.
|
|
210
|
-
|
|
211
|
-
## Contributors Welcome
|
|
212
|
-
|
|
213
|
-
Lacy is open source and contributions are welcome! Whether you're fixing a typo, adding a feature, or improving docs, we'd love your help.
|
|
214
|
-
|
|
215
|
-
- **[Good First Issues](https://github.com/lacymorrow/lacy/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22)** -- great starting points for new contributors
|
|
216
|
-
- **[Contributing Guide](CONTRIBUTING.md)** -- dev setup, code style, and PR process
|
|
217
|
-
- **[Discussions](https://github.com/lacymorrow/lacy/discussions)** -- questions, ideas, and general chat
|
|
218
|
-
|
|
219
|
-
## Star History
|
|
51
|
+
# curl
|
|
52
|
+
curl -fsSL https://lacy.sh/install | bash
|
|
220
53
|
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
<img alt="Star History Chart" src="https://api.star-history.com/svg?repos=lacymorrow/lacy&type=Date" />
|
|
226
|
-
</picture>
|
|
227
|
-
</a>
|
|
54
|
+
# Homebrew
|
|
55
|
+
brew tap lacymorrow/tap
|
|
56
|
+
brew install lacy
|
|
57
|
+
```
|
|
228
58
|
|
|
229
59
|
## License
|
|
230
60
|
|
|
231
|
-
|
|
61
|
+
MIT
|
|
File without changes
|
package/package.json
CHANGED
|
@@ -1,57 +1,42 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lacy",
|
|
3
|
-
"version": "1.8.
|
|
4
|
-
"description": "
|
|
5
|
-
"
|
|
3
|
+
"version": "1.8.19",
|
|
4
|
+
"description": "Install lacy — talk to your terminal",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"bin": {
|
|
7
|
+
"lacy": "index.mjs"
|
|
8
|
+
},
|
|
9
|
+
"files": [
|
|
10
|
+
"index.mjs"
|
|
11
|
+
],
|
|
6
12
|
"scripts": {
|
|
7
|
-
"
|
|
8
|
-
"release": "
|
|
9
|
-
"release:beta": "
|
|
13
|
+
"start": "node index.mjs",
|
|
14
|
+
"release": "npm publish",
|
|
15
|
+
"release:beta": "npm version prerelease --preid=beta && npm publish --tag beta"
|
|
10
16
|
},
|
|
11
17
|
"keywords": [
|
|
18
|
+
"lacy",
|
|
12
19
|
"shell",
|
|
13
20
|
"terminal",
|
|
14
|
-
"zsh",
|
|
15
|
-
"bash",
|
|
16
|
-
"shell-plugin",
|
|
17
|
-
"cli",
|
|
18
21
|
"ai",
|
|
22
|
+
"cli",
|
|
23
|
+
"developer-tools",
|
|
19
24
|
"ai-agent",
|
|
20
|
-
"
|
|
21
|
-
"mcp",
|
|
22
|
-
"natural-language",
|
|
23
|
-
"claude",
|
|
24
|
-
"gemini",
|
|
25
|
-
"opencode",
|
|
26
|
-
"codex",
|
|
27
|
-
"developer-tools"
|
|
25
|
+
"natural-language"
|
|
28
26
|
],
|
|
29
|
-
"author": "Lacy
|
|
30
|
-
"license": "
|
|
31
|
-
"dependencies": {},
|
|
32
|
-
"devDependencies": {
|
|
33
|
-
"@clack/prompts": "^1.0.0",
|
|
34
|
-
"picocolors": "^1.0.0"
|
|
35
|
-
},
|
|
36
|
-
"engines": {
|
|
37
|
-
"node": ">=18.0.0"
|
|
38
|
-
},
|
|
27
|
+
"author": "Lacy Morrow",
|
|
28
|
+
"license": "MIT",
|
|
39
29
|
"repository": {
|
|
40
30
|
"type": "git",
|
|
41
|
-
"url": "https://github.com/lacymorrow/lacy.git"
|
|
42
|
-
|
|
43
|
-
"bugs": {
|
|
44
|
-
"url": "https://github.com/lacymorrow/lacy/issues"
|
|
31
|
+
"url": "git+https://github.com/lacymorrow/lacy.git",
|
|
32
|
+
"directory": "packages/lacy"
|
|
45
33
|
},
|
|
46
34
|
"homepage": "https://lacy.sh",
|
|
47
|
-
"
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
"url": "https://www.buymeacoffee.com/lm"
|
|
55
|
-
}
|
|
56
|
-
]
|
|
35
|
+
"dependencies": {
|
|
36
|
+
"@clack/prompts": "^0.7.0",
|
|
37
|
+
"picocolors": "^1.0.0"
|
|
38
|
+
},
|
|
39
|
+
"engines": {
|
|
40
|
+
"node": ">=18"
|
|
41
|
+
}
|
|
57
42
|
}
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"permissions": {
|
|
3
|
-
"allow": [
|
|
4
|
-
"mcp__obs__get_obs_status",
|
|
5
|
-
"mcp__obs__list_tool_groups",
|
|
6
|
-
"mcp__obs__list_scenes",
|
|
7
|
-
"WebSearch",
|
|
8
|
-
"WebFetch(domain:syntax.fm)",
|
|
9
|
-
"WebFetch(domain:www.mux.com)",
|
|
10
|
-
"Bash(lsof:*)",
|
|
11
|
-
"Bash(/opt/homebrew/bin/bash:*)",
|
|
12
|
-
"Bash(npx next build:*)",
|
|
13
|
-
"WebFetch(domain:github.com)",
|
|
14
|
-
"WebFetch(domain:opencode.ai)",
|
|
15
|
-
"WebFetch(domain:deepwiki.com)",
|
|
16
|
-
"WebFetch(domain:opencodeguide.com)",
|
|
17
|
-
"WebFetch(domain:developers.openai.com)",
|
|
18
|
-
"WebFetch(domain:geminicli.com)"
|
|
19
|
-
]
|
|
20
|
-
},
|
|
21
|
-
"enabledMcpjsonServers": [
|
|
22
|
-
"obs",
|
|
23
|
-
"dns-analytics"
|
|
24
|
-
],
|
|
25
|
-
"enableAllProjectMcpServers": true
|
|
26
|
-
}
|
package/.github/FUNDING.yml
DELETED
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
name: Bug Report
|
|
2
|
-
description: Something isn't working as expected
|
|
3
|
-
labels: ["bug"]
|
|
4
|
-
body:
|
|
5
|
-
- type: input
|
|
6
|
-
id: shell
|
|
7
|
-
attributes:
|
|
8
|
-
label: Shell
|
|
9
|
-
description: Which shell are you using?
|
|
10
|
-
placeholder: "zsh 5.9 / bash 5.2"
|
|
11
|
-
validations:
|
|
12
|
-
required: true
|
|
13
|
-
- type: input
|
|
14
|
-
id: os
|
|
15
|
-
attributes:
|
|
16
|
-
label: OS
|
|
17
|
-
placeholder: "macOS 15.1 / Ubuntu 24.04 / WSL2"
|
|
18
|
-
validations:
|
|
19
|
-
required: true
|
|
20
|
-
- type: input
|
|
21
|
-
id: ai-tool
|
|
22
|
-
attributes:
|
|
23
|
-
label: AI tool
|
|
24
|
-
description: Which AI CLI are you using with Lacy?
|
|
25
|
-
placeholder: "claude / lash / opencode / gemini / codex / none yet"
|
|
26
|
-
- type: input
|
|
27
|
-
id: version
|
|
28
|
-
attributes:
|
|
29
|
-
label: Lacy version
|
|
30
|
-
description: "Run `lacy version` to check"
|
|
31
|
-
placeholder: "1.8.11"
|
|
32
|
-
- type: textarea
|
|
33
|
-
id: what-happened
|
|
34
|
-
attributes:
|
|
35
|
-
label: What happened?
|
|
36
|
-
description: What did you type and what went wrong?
|
|
37
|
-
validations:
|
|
38
|
-
required: true
|
|
39
|
-
- type: textarea
|
|
40
|
-
id: expected
|
|
41
|
-
attributes:
|
|
42
|
-
label: Expected behavior
|
|
43
|
-
description: What should have happened?
|
|
44
|
-
- type: textarea
|
|
45
|
-
id: doctor
|
|
46
|
-
attributes:
|
|
47
|
-
label: "lacy doctor output"
|
|
48
|
-
description: "Paste the output of `lacy doctor` if relevant"
|
|
49
|
-
render: shell
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
name: Feature Request
|
|
2
|
-
description: Suggest an improvement or new feature
|
|
3
|
-
labels: ["enhancement"]
|
|
4
|
-
body:
|
|
5
|
-
- type: textarea
|
|
6
|
-
id: description
|
|
7
|
-
attributes:
|
|
8
|
-
label: What would you like?
|
|
9
|
-
description: Describe the feature or improvement
|
|
10
|
-
validations:
|
|
11
|
-
required: true
|
|
12
|
-
- type: textarea
|
|
13
|
-
id: use-case
|
|
14
|
-
attributes:
|
|
15
|
-
label: Use case
|
|
16
|
-
description: When would you use this? What problem does it solve?
|
|
17
|
-
- type: dropdown
|
|
18
|
-
id: area
|
|
19
|
-
attributes:
|
|
20
|
-
label: Area
|
|
21
|
-
options:
|
|
22
|
-
- Detection (how Lacy classifies input)
|
|
23
|
-
- Indicator (visual feedback)
|
|
24
|
-
- Tool integration (Claude, Gemini, etc.)
|
|
25
|
-
- Installation / setup
|
|
26
|
-
- Configuration
|
|
27
|
-
- Shell compatibility
|
|
28
|
-
- Other
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
<!-- Thanks for the PR! Quick checklist below. -->
|
|
2
|
-
|
|
3
|
-
## Summary
|
|
4
|
-
|
|
5
|
-
<!-- What does this change, and why? -->
|
|
6
|
-
|
|
7
|
-
## How to test
|
|
8
|
-
|
|
9
|
-
```bash
|
|
10
|
-
npm test
|
|
11
|
-
```
|
|
12
|
-
|
|
13
|
-
## Checklist
|
|
14
|
-
|
|
15
|
-
- [ ] `npm test` passes locally
|
|
16
|
-
- [ ] Updated the README if a public option changed
|
|
17
|
-
- [ ] PR is focused (one logical change)
|
package/.github/SECURITY.md
DELETED
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
# Security Policy
|
|
2
|
-
|
|
3
|
-
## Reporting a vulnerability
|
|
4
|
-
|
|
5
|
-
Lacy intercepts every command you type and routes it either to the shell or to an AI backend. The security-relevant surfaces are:
|
|
6
|
-
|
|
7
|
-
- Command classification / routing logic (does a destructive command stay shell-side as intended?)
|
|
8
|
-
- Backend command construction (no shell injection when forwarding to `claude`, `gemini`, `opencode`, `codex`, `lash`)
|
|
9
|
-
- Credential leakage in fallback paths or panic logs
|
|
10
|
-
|
|
11
|
-
If you've found a security issue, please report it privately:
|
|
12
|
-
|
|
13
|
-
➔ https://github.com/lacymorrow/lacy/security/advisories/new
|
|
14
|
-
|
|
15
|
-
Or email **lacy@lacymorrow.com** with `[lacy security]` in the subject line.
|
|
16
|
-
|
|
17
|
-
Expect an acknowledgement within 72 hours.
|
|
18
|
-
|
|
19
|
-
## Supported versions
|
|
20
|
-
|
|
21
|
-
Only the latest published version on npm / Homebrew / install.sh receives security updates.
|
|
22
|
-
|
|
23
|
-
## Scope
|
|
24
|
-
|
|
25
|
-
In scope:
|
|
26
|
-
- The `lacy` zsh/bash/fish plugins
|
|
27
|
-
- `install.sh` / `uninstall.sh`
|
|
28
|
-
- The Node CLI shim (`lib/`)
|
|
29
|
-
|
|
30
|
-
Out of scope:
|
|
31
|
-
- Vulnerabilities in upstream AI CLIs (`claude`, `gemini`, `opencode`, `codex`, `lash`) — report to those repos
|
|
32
|
-
- Issues that require an attacker who already has shell access on your machine
|
|
Binary file
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 480 200" fill="none">
|
|
2
|
-
<title>lacy</title>
|
|
3
|
-
<g transform="translate(20, 20)">
|
|
4
|
-
<rect x="0" y="0" width="160" height="160" rx="34" fill="#10b981"/>
|
|
5
|
-
<path d="M45 50 L75 80 L45 110" stroke="#ffffff" stroke-width="14" stroke-linecap="round" stroke-linejoin="round" fill="none"/>
|
|
6
|
-
<rect x="82" y="104" width="44" height="10" rx="3" fill="#ffffff"/>
|
|
7
|
-
</g>
|
|
8
|
-
<text
|
|
9
|
-
x="210"
|
|
10
|
-
y="132"
|
|
11
|
-
font-family="ui-sans-serif, system-ui, -apple-system, 'Inter', 'Segoe UI', Roboto, sans-serif"
|
|
12
|
-
font-size="120"
|
|
13
|
-
font-weight="800"
|
|
14
|
-
letter-spacing="-6"
|
|
15
|
-
fill="#fafafa"
|
|
16
|
-
>lacy</text>
|
|
17
|
-
</svg>
|
|
Binary file
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 480 200" fill="none">
|
|
2
|
-
<title>lacy</title>
|
|
3
|
-
<g transform="translate(20, 20)">
|
|
4
|
-
<rect x="0" y="0" width="160" height="160" rx="34" fill="#10b981"/>
|
|
5
|
-
<path d="M45 50 L75 80 L45 110" stroke="#ffffff" stroke-width="14" stroke-linecap="round" stroke-linejoin="round" fill="none"/>
|
|
6
|
-
<rect x="82" y="104" width="44" height="10" rx="3" fill="#ffffff"/>
|
|
7
|
-
</g>
|
|
8
|
-
<text
|
|
9
|
-
x="210"
|
|
10
|
-
y="132"
|
|
11
|
-
font-family="ui-sans-serif, system-ui, -apple-system, 'Inter', 'Segoe UI', Roboto, sans-serif"
|
|
12
|
-
font-size="120"
|
|
13
|
-
font-weight="800"
|
|
14
|
-
letter-spacing="-6"
|
|
15
|
-
fill="#1a0b1f"
|
|
16
|
-
>lacy</text>
|
|
17
|
-
</svg>
|
package/.github/assets/logo.png
DELETED
|
Binary file
|
package/.github/assets/logo.svg
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 256 256" fill="none">
|
|
2
|
-
<title>lacy</title>
|
|
3
|
-
<!-- Rounded square — terminal emerald -->
|
|
4
|
-
<rect x="16" y="16" width="224" height="224" rx="48" fill="#10b981"/>
|
|
5
|
-
<!-- Shell prompt: `>_` glyph -->
|
|
6
|
-
<g fill="#ffffff">
|
|
7
|
-
<!-- Chevron > -->
|
|
8
|
-
<path d="M70 80 L110 128 L70 176" stroke="#ffffff" stroke-width="20" stroke-linecap="round" stroke-linejoin="round" fill="none"/>
|
|
9
|
-
<!-- Underscore cursor -->
|
|
10
|
-
<rect x="124" y="166" width="68" height="14" rx="4"/>
|
|
11
|
-
</g>
|
|
12
|
-
</svg>
|
|
Binary file
|