loom-agent 1.2.36 → 1.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +128 -0
- package/README.md +38 -56
- package/bin/loom-bun.js +2 -10
- package/bin/loom.js +0 -10
- package/package.json +126 -126
- package/src/connectors/convex.js +356 -0
- package/src/connectors/deploy.js +390 -0
- package/src/connectors/index.js +23 -0
- package/src/connectors/supabase.js +279 -0
- package/src/core/agents.js +32 -2
- package/src/core/cli.js +30 -5
- package/src/core/permissions.js +12 -1
- package/src/core/plugin-cmd.js +1 -0
- package/src/core/sandbox.js +400 -0
- package/src/core/session-store.js +245 -167
- package/src/core/session.js +157 -11
- package/src/providers/anthropic.js +10 -5
- package/src/providers/openai-compat.js +12 -4
- package/src/tools/browser.js +204 -0
- package/src/tools/index.js +35 -1
- package/src/tui/App.tsx +103 -8
- package/src/tui/components/BreadcrumbBar.tsx +10 -9
- package/src/tui/components/ChatArea.tsx +3 -3
- package/src/tui/components/InputBar.tsx +22 -11
- package/src/tui/components/MdText.tsx +2 -1
- package/src/tui/components/Modals.tsx +191 -17
- package/src/tui/components/PermissionPopup.tsx +15 -12
- package/src/tui/components/Sidebar.tsx +6 -2
- package/src/tui/components/SplashScreen.tsx +17 -24
- package/src/tui/components/SubagentPanel.tsx +1 -1
- package/src/tui/components/ToastOverlay.tsx +23 -12
- package/src/tui/store.ts +38 -35
- package/src/tui/theme.ts +45 -30
- package/src/tui/tool-display.ts +13 -2
- package/docs/web.md +0 -205
- package/src/web/attach.js +0 -242
- package/src/web/graph-view.html +0 -262
- package/src/web/index.html +0 -824
- package/src/web/web-server.js +0 -535
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,134 @@ All notable changes to **Loom Code** are documented here.
|
|
|
4
4
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
5
5
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
6
6
|
|
|
7
|
+
## [Unreleased] — completion harness, specialist agents, headless browser, TUI refresh
|
|
8
|
+
|
|
9
|
+
### Security
|
|
10
|
+
- **All dependency advisories cleared — `npm audit` reports 0
|
|
11
|
+
vulnerabilities** (was 7: 4 critical, 1 high, 2 low):
|
|
12
|
+
- `@opentui/solid` / `@opentui/core` (+ all platform binaries)
|
|
13
|
+
0.5.3 → **0.5.17** — fixes the `@babel/core` arbitrary-file-read
|
|
14
|
+
advisory and the `solid-js`/`seroval` critical chain.
|
|
15
|
+
- `seroval` + `seroval-plugins` forced to **1.6.9** via npm `overrides`
|
|
16
|
+
(solid-js is peer-pinned to 1.9.12 by @opentui/solid; 1.6.9 is exactly
|
|
17
|
+
the seroval line solid 1.9.17 itself moved to — fixes the critical
|
|
18
|
+
`fromJSON()` thenable-assimilation + memory-exhaustion advisories).
|
|
19
|
+
- `shell-quote` **removed** — it was an unused direct dependency carrying
|
|
20
|
+
a critical `quote()` command-injection advisory.
|
|
21
|
+
- `diff` ^7 → **^9.0.0** (we only use `diffLines`, unchanged; 9.x ships
|
|
22
|
+
CJS exports) — fixes the parsePatch/applyPatch DoS advisory.
|
|
23
|
+
- `brace-expansion` re-resolved to **5.0.12** (transitive, via
|
|
24
|
+
`npm audit fix`) — fixes the DoS/recursion advisories.
|
|
25
|
+
|
|
26
|
+
### Added
|
|
27
|
+
- **Docker sandbox with a guided `/sandbox` wizard (`src/core/sandbox.js`,
|
|
28
|
+
`SandboxModal`).** `/sandbox` (or `/sandbox setup`) opens a three-step
|
|
29
|
+
modal: (1) Docker check — if missing, shows the platform install link with
|
|
30
|
+
an "open download page" action and remembers the pending install; (2) OS
|
|
31
|
+
pick — Alpine (~250 MB, apk), Debian Slim (~600 MB, apt) or Ubuntu
|
|
32
|
+
(~900 MB, apt); (3) live build with streamed logs. Setup pulls the chosen
|
|
33
|
+
`node:20-*` image, creates the single shared `loom-sandbox` container with
|
|
34
|
+
the project mounted at `/workspace`, installs essentials (git, bash, curl,
|
|
35
|
+
ripgrep, coreutils) plus a headless Chromium where offered (best-effort).
|
|
36
|
+
The container is global — every session and every agent routes commands
|
|
37
|
+
through it — and `ensureProjectMount()` re-creates it cheaply when the
|
|
38
|
+
active project changes. Isolation: project dir only, no host network, no
|
|
39
|
+
`--privileged`. The bash tool routes through `docker exec` when enabled;
|
|
40
|
+
`LOOM_SANDBOX=0` is a hard kill-switch. Saying "docker is ready" after
|
|
41
|
+
installing reopens the wizard at the OS step.
|
|
42
|
+
- **Drive-to-completion harness (`src/core/session.js`).** When the model ends
|
|
43
|
+
a turn with todos still pending/in_progress (the "stops between tasks"
|
|
44
|
+
failure), the loop injects a continuation listing the unfinished items — up
|
|
45
|
+
to 5 nudges per turn, build mode only, only when the turn actually wrote
|
|
46
|
+
todos. Cancelled/completed items via todowrite stop the nudging cleanly.
|
|
47
|
+
Child subagent sessions inherit the same guard.
|
|
48
|
+
- **Transient provider-error retry.** Network blips / 5xx / stream resets now
|
|
49
|
+
retry the model call twice (side-effect free) instead of killing the turn
|
|
50
|
+
mid-task.
|
|
51
|
+
- **Specialist subagents (`src/core/agents.js`)**: `research` (multi-source
|
|
52
|
+
investigation, sourced report), `coder` (isolated implementation),
|
|
53
|
+
`reviewer` (severity-ranked code review), `tester` (reproduce → test →
|
|
54
|
+
green), `web` (headless-browser work). All non-delegating (`no task tool`).
|
|
55
|
+
- **Main orchestrator prompt.** The `build` primary agent now carries an
|
|
56
|
+
orchestrator role prompt (todo-first, delegate-to-specialists, verify,
|
|
57
|
+
finish). Primary-agent prompts are actually wired into the system prompt now
|
|
58
|
+
(`Session._primaryBlock()`) — previously `build`/`plan`/`chat` prompts were
|
|
59
|
+
registry-only and never reached the model.
|
|
60
|
+
- **`browser` tool (`src/tools/browser.js`).** Headless Chromium control via
|
|
61
|
+
Playwright: goto/click/fill/press/text/eval/links/screenshot/close. Engine:
|
|
62
|
+
bundled `playwright` if installed, else `playwright-core` + system
|
|
63
|
+
Chrome/Edge. The page singleton persists across calls. Permissions: passive
|
|
64
|
+
reads allow, interactive click/fill/press ask.
|
|
65
|
+
|
|
66
|
+
### Fixed
|
|
67
|
+
- **Agent loop no longer stops in the middle of work** (`src/core/session.js`
|
|
68
|
+
continuation guards — opencode/Claude-Code parity):
|
|
69
|
+
- **Truncation auto-continue.** `finish_reason=length` (output budget
|
|
70
|
+
exhausted — the #1 cause of mid-task stops with reasoning models, where
|
|
71
|
+
thinking eats max_tokens and the answer never streams) now continues
|
|
72
|
+
the turn with a "continue exactly from where it stopped" nudge instead
|
|
73
|
+
of dead-ending with a placeholder — up to 5 continuations per turn.
|
|
74
|
+
Empty truncated replies also drop the empty assistant row from history
|
|
75
|
+
(Anthropic 400s on empty assistant messages, which silently killed
|
|
76
|
+
subsequent calls).
|
|
77
|
+
- **Empty-reply nudges raised 1 → 3 per turn** (provider hiccups repeat).
|
|
78
|
+
- **Premature-wrap-up detection broadened.** The drive guard now also
|
|
79
|
+
fires when tools ran, todos exist, and the reply LOOKS unfinished
|
|
80
|
+
(short, or ends on a promise like "Now I will…") — catching models that
|
|
81
|
+
never call todowrite. Drive nudges raised 5 → 8 per turn. Leftover
|
|
82
|
+
todos are surfaced to the UI whenever the guard engaged.
|
|
83
|
+
|
|
84
|
+
### Changed
|
|
85
|
+
- **Slash popup decluttered.** The autocomplete popup and command palette
|
|
86
|
+
now show a short one-line description per command — argument syntax is no
|
|
87
|
+
longer appended (it lives in `/help` and the README table). Duplicate
|
|
88
|
+
entries were removed from the picker while their handlers stay callable:
|
|
89
|
+
`/model` → `/models`, `/thinking` + `/details` → `/settings`, `/rewind`
|
|
90
|
+
→ `/restore` (40 → 36 entries). Every desc was shortened to ~2–35 chars
|
|
91
|
+
so rows fit on one clean line. README table regenerated from the real
|
|
92
|
+
list (it previously advertised commands that no longer exist).
|
|
93
|
+
- **TUI design overhaul.** The splash leads with the full LOOM CODE wordmark
|
|
94
|
+
in solid terracotta over a separator rule and a pill-style status
|
|
95
|
+
row; the default "Loom Dark" (and Light) palettes got deeper surface
|
|
96
|
+
stepping so panels read without borders. Every selection surface — command
|
|
97
|
+
palette, slash/file popups, select modals, permission popup — now uses a
|
|
98
|
+
tinted active row with a `▸` marker; the command palette finally renders
|
|
99
|
+
each command's description; modals gained a title divider; toasts carry a
|
|
100
|
+
kind-colored status dot (● ok / ✖ error / ◆ info) and clip long text so
|
|
101
|
+
they never cover the chat. System notices sit on a tinted surface, the
|
|
102
|
+
assistant footer is brand-colored, markdown headings get an h1/h2/h3 color
|
|
103
|
+
hierarchy, the input placeholder color-codes /commands @file !shell, and
|
|
104
|
+
hard-coded reds now follow the theme's error color. Still grid-line-free in
|
|
105
|
+
the main view — color and spacing do the work, no box frames.
|
|
106
|
+
- **Sidebar version now tracks `package.json`** (it was stuck at a hardcoded
|
|
107
|
+
v1.2.0 while the package moved on); splash and sidebar share one source.
|
|
108
|
+
- **`task` tool description now lists every built-in subagent with its specialty.**
|
|
109
|
+
- **Stop messages show the real state, not canned text.** Continuation nudges
|
|
110
|
+
now quote the model's ACTUAL last message plus the open todo list (instead
|
|
111
|
+
of one identical line every time); the empty-reply nudge reports the real
|
|
112
|
+
tool-call count; a build turn that ends with open todos returns them
|
|
113
|
+
(`resp.openTodos`) and the TUI appends "Stopped with N todo(s) still open: …"
|
|
114
|
+
with the actual items; the interrupt line reports kept chars + the
|
|
115
|
+
in-progress todo; the plan-complete line includes the planned step count;
|
|
116
|
+
"(no response)"/"(interrupted)" placeholders describe what happened.
|
|
117
|
+
- **Sessions now live in per-session folders inside the project**
|
|
118
|
+
(claude-code/opencode style): `<project>/.loom/sessions/<id>/session.json`
|
|
119
|
+
(metadata) + `messages.jsonl` (one message per line, append/rewrite-safe).
|
|
120
|
+
Old flat `~/.loom/sessions/<id>.json` files stay readable and are migrated
|
|
121
|
+
into the project folder on the next save; the /sessions picker merges both.
|
|
122
|
+
|
|
123
|
+
### Fixed
|
|
124
|
+
- **Resuming a session 400'd the next turn** (`NVIDIA error 400: missing
|
|
125
|
+
field tool_call_id`). The resume path rebuilt the in-memory message list
|
|
126
|
+
from `{role, content, toolCalls}` only — dropping `toolCallId` — so the
|
|
127
|
+
provider payload carried a tool row with no id. Resume now preserves
|
|
128
|
+
`toolCallId` (and aliases legacy snake_case `tool_calls`/`tool_call_id`
|
|
129
|
+
on load); both providers also skip orphaned tool rows defensively instead
|
|
130
|
+
of failing the turn.
|
|
131
|
+
- **"The model ended the turn without any text" now says why when it knows.**
|
|
132
|
+
`finish_reason` is captured from the stream; a truncated reply (reasoning
|
|
133
|
+
ate the output budget) reports that instead of a mystery placeholder.
|
|
134
|
+
|
|
7
135
|
## [1.2.36] — fix `loom web` / `loom acp` / `loom attach`
|
|
8
136
|
|
|
9
137
|
### Fixed
|
package/README.md
CHANGED
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
[](https://www.npmjs.com/package/loom-agent)
|
|
11
11
|
[](LICENSE)
|
|
12
12
|
[](#)
|
|
13
|
+
[](https://loomcluster.in/)
|
|
13
14
|
|
|
14
15
|

|
|
15
16
|
|
|
@@ -29,7 +30,8 @@ An AI-powered coding agent for the terminal with multi-provider support and a fu
|
|
|
29
30
|
- Session memory, /undo, /redo, /compact, /reset, /fork
|
|
30
31
|
- One-shot print mode: `loom -p "query"`
|
|
31
32
|
- Editor integration via the Agent Client Protocol (ACP): `loom acp` (JSON-RPC over stdio) so Zed, JetBrains, and Neovim plugins can drive Loom as their coding agent
|
|
32
|
-
-
|
|
33
|
+
- OpenCode-style agent harness: main orchestrator agent delegates to specialist subagents (`research`, `coder`, `reviewer`, `tester`, `web`, `explore`, `scout`) via the `task` tool, and a drive-to-completion loop keeps working while todos are still open
|
|
34
|
+
- Headless browser tool (`browser`) — navigate, click, fill, read the DOM, and screenshot real pages from the `web` agent
|
|
33
35
|
- Usage & billing tracking per session + lifetime
|
|
34
36
|
|
|
35
37
|
## Prerequisites
|
|
@@ -49,7 +51,7 @@ An AI-powered coding agent for the terminal with multi-provider support and a fu
|
|
|
49
51
|
|
|
50
52
|
Install from npm (global — installs the `loom` command):
|
|
51
53
|
```bash
|
|
52
|
-
npm install -g loom-
|
|
54
|
+
npm install -g loom-agent
|
|
53
55
|
```
|
|
54
56
|
|
|
55
57
|
Or run from source:
|
|
@@ -102,35 +104,8 @@ loom --version
|
|
|
102
104
|
loom --help
|
|
103
105
|
loom --basic # skip TUI, use line-mode REPL
|
|
104
106
|
loom acp # ACP subprocess mode for editor integrations
|
|
105
|
-
loom web # browser interface (HTTP server, opens browser)
|
|
106
|
-
loom attach http://localhost:4096 # attach the terminal to a running loom web
|
|
107
107
|
```
|
|
108
108
|
|
|
109
|
-
## Web
|
|
110
|
-
|
|
111
|
-
Loom runs in your browser with `loom web` — a zero-dependency HTTP server that
|
|
112
|
-
serves a single-page UI and drives the same core session loop as the TUI. Same
|
|
113
|
-
providers/models, tools, MCP servers, and saved sessions; chat streams live in
|
|
114
|
-
the browser, and a shared terminal client can attach to the same server.
|
|
115
|
-
|
|
116
|
-
```bash
|
|
117
|
-
loom web # 127.0.0.1, random port, opens the browser
|
|
118
|
-
loom web --port 4096 # fixed port
|
|
119
|
-
loom web --hostname 0.0.0.0 # reachable on the LAN
|
|
120
|
-
loom web --mdns # advertise as loom.local (implies 0.0.0.0)
|
|
121
|
-
loom web --mdns-domain proj.local # custom mDNS domain
|
|
122
|
-
loom web --cors https://example.com
|
|
123
|
-
LOOM_SERVER_PASSWORD=secret loom web # password-protect (user: LOOM_SERVER_USERNAME, default "loom")
|
|
124
|
-
|
|
125
|
-
# Attach the terminal (shares the server's sessions/state):
|
|
126
|
-
loom attach http://localhost:4096
|
|
127
|
-
```
|
|
128
|
-
|
|
129
|
-
Config-file equivalent (`~/.loom/config.json`): `{ "server": { "port": 4096,
|
|
130
|
-
"hostname": "0.0.0.0", "mdns": true, "cors": ["https://example.com"] } }` — CLI
|
|
131
|
-
flags take precedence. Full flags, the JSON API, and `loom attach` options are
|
|
132
|
-
documented in **[docs/web.md](docs/web.md)**.
|
|
133
|
-
|
|
134
109
|
## Editor integration (ACP)
|
|
135
110
|
|
|
136
111
|
Loom implements the [Agent Client Protocol (ACP)](https://agentclientprotocol.com)
|
|
@@ -153,44 +128,51 @@ Zed (add to `~/.config/zed/settings.json`, then Command Palette → `agent: new
|
|
|
153
128
|
Full transport spec, JetBrains/Neovim configs, the protocol walkthrough, and a
|
|
154
129
|
self-test client (`node scripts/acp-smoke.js`) live in **[docs/acp.md](docs/acp.md)**.
|
|
155
130
|
|
|
156
|
-
## Slash Commands (
|
|
131
|
+
## Slash Commands (36 total)
|
|
157
132
|
|
|
158
133
|
| Command | Args | Description |
|
|
159
134
|
|---------|------|-------------|
|
|
160
|
-
| `/help` | — | Show
|
|
161
|
-
| `/
|
|
162
|
-
| `/
|
|
135
|
+
| `/help` | — | Show help |
|
|
136
|
+
| `/agents` | — | List agents |
|
|
137
|
+
| `/build` | — | Build mode — full tools |
|
|
138
|
+
| `/plan` | — | Plan mode — read only |
|
|
163
139
|
| `/chat` | — | Chat mode — no tools |
|
|
164
|
-
| `/
|
|
165
|
-
| `/
|
|
166
|
-
| `/key` | — | Edit API key for current provider |
|
|
140
|
+
| `/connect` | `[provider]` | Connect a provider |
|
|
141
|
+
| `/key` | — | Edit API key |
|
|
167
142
|
| `/baseurl` | `[provider] [url]` | Set provider base URL |
|
|
168
|
-
| `/
|
|
169
|
-
| `/
|
|
170
|
-
| `/
|
|
171
|
-
| `/
|
|
172
|
-
| `/
|
|
173
|
-
| `/new` | — |
|
|
143
|
+
| `/models` | — | Model picker |
|
|
144
|
+
| `/providers` | — | List providers |
|
|
145
|
+
| `/status` | — | Connection status |
|
|
146
|
+
| `/usage` | — | Token usage & billing |
|
|
147
|
+
| `/budget` | `free\|cheap\|best\|auto` | Budget level |
|
|
148
|
+
| `/new` | — | New session |
|
|
174
149
|
| `/clear` | — | Clear the chat |
|
|
175
|
-
| `/
|
|
176
|
-
| `/
|
|
177
|
-
| `/redo` | — | Redo last undone exchange |
|
|
178
|
-
| `/reset` | — | Reset the session |
|
|
179
|
-
| `/settings` | — | Toggle details/sidebar/etc. |
|
|
150
|
+
| `/restore` | — | Restore earlier state |
|
|
151
|
+
| `/settings` | — | Settings — details, thinking, sidebar |
|
|
180
152
|
| `/sessions` | — | Browse saved sessions |
|
|
181
|
-
| `/
|
|
182
|
-
| `/
|
|
183
|
-
| `/thinking` | — | Toggle thinking visibility |
|
|
184
|
-
| `/details` | — | Toggle tool detail visibility |
|
|
185
|
-
| `/init` | — | Create LOOM.md |
|
|
186
|
-
| `/memory` | — | Show memory files |
|
|
187
|
-
| `/doctor` | — | Run diagnostics |
|
|
153
|
+
| `/theme` | — | Switch UI theme |
|
|
154
|
+
| `/graph` | — | Memory graph |
|
|
188
155
|
| `/skills` | `install\|remove` | Manage skills |
|
|
189
156
|
| `/mcp` | `add\|remove\|toggle` | Manage MCP servers |
|
|
190
|
-
| `/
|
|
191
|
-
| `/
|
|
157
|
+
| `/connectors` | `add\|remove\|toggle` | Manage connectors |
|
|
158
|
+
| `/permissions` | `reset\|auto` | Permission rules |
|
|
159
|
+
| `/subagents` | — | Subagent runs |
|
|
160
|
+
| `/context` | — | Context window usage |
|
|
161
|
+
| `/think` | `off\|low\|medium\|high` | Thinking budget |
|
|
162
|
+
| `/approve` | — | Approve plan → Build |
|
|
163
|
+
| `/tasks` | — | Background tasks |
|
|
164
|
+
| `/share` | — | Export chat as HTML |
|
|
165
|
+
| `/worktree` | `<name>` | New git worktree |
|
|
166
|
+
| `/sandbox` | `setup\|status\|on\|off\|rm` | Docker sandbox |
|
|
167
|
+
| `/style` | `[preset\|text]` | Output style preset |
|
|
168
|
+
| `/vim` | — | Toggle vim editing |
|
|
169
|
+
| `/remember` | `<fact>` | Save a fact to LOOM.md |
|
|
192
170
|
| `/exit` | — | Quit Loom Code |
|
|
193
171
|
|
|
172
|
+
Aliases still work when typed but are hidden from the picker to keep it
|
|
173
|
+
clean: `/model` → `/models`, `/thinking` + `/details` → `/settings`,
|
|
174
|
+
`/rewind` → `/restore`.
|
|
175
|
+
|
|
194
176
|
## Keybindings
|
|
195
177
|
|
|
196
178
|
Every key is configurable from `~/.loom/tui.json` (`keybinds`, `leader`,
|
package/bin/loom-bun.js
CHANGED
|
@@ -74,7 +74,7 @@ process.title = "loom-code";
|
|
|
74
74
|
const args = process.argv.slice(2);
|
|
75
75
|
const coreMode = args.includes("--basic") || args.includes("-p") || args.includes("--print")
|
|
76
76
|
|| args.includes("--help") || args.includes("-h") || args.includes("--version") || args.includes("-v")
|
|
77
|
-
|| ["acp", "
|
|
77
|
+
|| ["acp", "graph"].includes(args[0]);
|
|
78
78
|
if (!coreMode) {
|
|
79
79
|
await import("@opentui/solid/preload");
|
|
80
80
|
await import("../src/tui-open.tsx");
|
|
@@ -82,19 +82,11 @@ process.title = "loom-code";
|
|
|
82
82
|
}
|
|
83
83
|
// Subcommands that must never reach the interactive CLI/TUI: cli.main()
|
|
84
84
|
// has no handler for them and would fall through to launching the full
|
|
85
|
-
// screen app
|
|
86
|
-
if (args[0] === "web") {
|
|
87
|
-
require("../src/web/web-server.js").main();
|
|
88
|
-
return;
|
|
89
|
-
}
|
|
85
|
+
// screen app instead of running the requested command.
|
|
90
86
|
if (args[0] === "acp") {
|
|
91
87
|
require("../src/acp/acp-server.js").main();
|
|
92
88
|
return;
|
|
93
89
|
}
|
|
94
|
-
if (args[0] === "attach") {
|
|
95
|
-
require("../src/web/attach.js").main();
|
|
96
|
-
return;
|
|
97
|
-
}
|
|
98
90
|
const { main } = require("../src/core/cli.js");
|
|
99
91
|
await main();
|
|
100
92
|
} catch (err) {
|
package/bin/loom.js
CHANGED
|
@@ -24,16 +24,6 @@ process.on('unhandledRejection', (reason) => {
|
|
|
24
24
|
require('../src/acp/acp-server').main();
|
|
25
25
|
return;
|
|
26
26
|
}
|
|
27
|
-
if (sub === 'web') {
|
|
28
|
-
// Browser interface: HTTP server on 127.0.0.1, opens the browser.
|
|
29
|
-
require('../src/web/web-server').main();
|
|
30
|
-
return;
|
|
31
|
-
}
|
|
32
|
-
if (sub === 'attach') {
|
|
33
|
-
// Terminal client for a running `loom web` server.
|
|
34
|
-
require('../src/web/attach').main();
|
|
35
|
-
return;
|
|
36
|
-
}
|
|
37
27
|
try {
|
|
38
28
|
await updateCheck();
|
|
39
29
|
await main();
|
package/package.json
CHANGED
|
@@ -1,126 +1,126 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "loom-agent",
|
|
3
|
-
"version": "1.2
|
|
4
|
-
"repository": {
|
|
5
|
-
"type": "git",
|
|
6
|
-
"url": "git+https://github.com/toshalkumbhar8979-design/loomcode.git"
|
|
7
|
-
},
|
|
8
|
-
"homepage": "https://github.com/toshalkumbhar8979-design/loomcode#readme",
|
|
9
|
-
"bugs": {
|
|
10
|
-
"url": "https://github.com/toshalkumbhar8979-design/loomcode/issues"
|
|
11
|
-
},
|
|
12
|
-
"description": "Loom Code  AI-powered coding agent for the terminal. Multi-provider support including NVIDIA. OpenTUI interface.",
|
|
13
|
-
"main": "src/index.js",
|
|
14
|
-
"publishConfig": {
|
|
15
|
-
"access": "public",
|
|
16
|
-
"tag": "latest"
|
|
17
|
-
},
|
|
18
|
-
"bin": {
|
|
19
|
-
"loom": "bin/loom-bun.js",
|
|
20
|
-
"loom-tui": "bin/loom-tui.js"
|
|
21
|
-
},
|
|
22
|
-
"scripts": {
|
|
23
|
-
"start": "node src/index.js",
|
|
24
|
-
"dev": "node --watch src/index.js",
|
|
25
|
-
"setup": "node src/setup.js",
|
|
26
|
-
"test": "bun run src/tui/test-interactive.tsx && bun run test:unit && bun run lint:core",
|
|
27
|
-
"test:unit": "bun test src/core/agents.test.js src/core/hooks.test.js src/core/custom-commands.test.js src/core/background-tasks.test.js src/core/memory.test.js src/core/subagent-log.test.js src/core/session.test.js src/tools/index.test.js src/tools/security.test.js src/providers/providers.test.js src/providers/caching.test.js src/providers/caching-thinking.test.js src/providers/registry.test.js src/mcp/mcp-client.test.js src/mcp/mcp-manager.test.js src/core/session-store.test.js src/skills/skills-manager.test.js src/core/usage.test.js src/core/permissions.test.js src/core/format.test.js src/acp/acp-server.test.js src/
|
|
28
|
-
"lint:core": "node node_modules/typescript/bin/tsc -p tsconfig.core.json",
|
|
29
|
-
"smoke:acp": "node scripts/acp-smoke.js",
|
|
30
|
-
"tui": "bun bin/loom-tui.js",
|
|
31
|
-
"tui:win": "\"%USERPROFILE%\\..\\bun\\bin\\bun.exe\" run src/tui-open.tsx",
|
|
32
|
-
"prepublishOnly": "npm test",
|
|
33
|
-
"postinstall": "node scripts/postinstall.js",
|
|
34
|
-
"lint": "tsc --noEmit"
|
|
35
|
-
},
|
|
36
|
-
"dependencies": {
|
|
37
|
-
"@anthropic-ai/sdk": "^0.120.0",
|
|
38
|
-
"@opentui/core": "0.5.
|
|
39
|
-
"@opentui/solid": "0.5.
|
|
40
|
-
"@shikijs/themes": "4.4.3",
|
|
41
|
-
"
|
|
42
|
-
"boxen": "^8.0.0",
|
|
43
|
-
"chalk": "^5.3.0",
|
|
44
|
-
"cli-spinners": "^3.2.0",
|
|
45
|
-
"commander": "^12.1.0",
|
|
46
|
-
"
|
|
47
|
-
"
|
|
48
|
-
"
|
|
49
|
-
"
|
|
50
|
-
"
|
|
51
|
-
"
|
|
52
|
-
"
|
|
53
|
-
"
|
|
54
|
-
"
|
|
55
|
-
"
|
|
56
|
-
"
|
|
57
|
-
"
|
|
58
|
-
"
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
"@opentui/core-darwin-
|
|
63
|
-
"@opentui/core-
|
|
64
|
-
"@opentui/core-linux-
|
|
65
|
-
"@opentui/core-
|
|
66
|
-
"@
|
|
67
|
-
"@oven/bun-darwin-
|
|
68
|
-
"@oven/bun-
|
|
69
|
-
"@oven/bun-linux-
|
|
70
|
-
"@oven/bun-
|
|
71
|
-
"@oven/bun-windows-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
"
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
"
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
"
|
|
85
|
-
"
|
|
86
|
-
"
|
|
87
|
-
"
|
|
88
|
-
"
|
|
89
|
-
"
|
|
90
|
-
"
|
|
91
|
-
"
|
|
92
|
-
"!src
|
|
93
|
-
"
|
|
94
|
-
"
|
|
95
|
-
"
|
|
96
|
-
".
|
|
97
|
-
"
|
|
98
|
-
"
|
|
99
|
-
"
|
|
100
|
-
"
|
|
101
|
-
"docs/
|
|
102
|
-
"
|
|
103
|
-
"
|
|
104
|
-
],
|
|
105
|
-
"keywords": [
|
|
106
|
-
"ai",
|
|
107
|
-
"cli",
|
|
108
|
-
"coding-agent",
|
|
109
|
-
"loom-code",
|
|
110
|
-
"anthropic",
|
|
111
|
-
"openai",
|
|
112
|
-
"nvidia",
|
|
113
|
-
"terminal",
|
|
114
|
-
"opentui"
|
|
115
|
-
],
|
|
116
|
-
"engines": {
|
|
117
|
-
"node": ">=18.0.0",
|
|
118
|
-
"bun": ">=1.0.0"
|
|
119
|
-
},
|
|
120
|
-
"directories": {
|
|
121
|
-
"doc": "docs"
|
|
122
|
-
},
|
|
123
|
-
"author": "",
|
|
124
|
-
"license": "MIT",
|
|
125
|
-
"type": "commonjs"
|
|
126
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "loom-agent",
|
|
3
|
+
"version": "1.3.2",
|
|
4
|
+
"repository": {
|
|
5
|
+
"type": "git",
|
|
6
|
+
"url": "git+https://github.com/toshalkumbhar8979-design/loomcode.git"
|
|
7
|
+
},
|
|
8
|
+
"homepage": "https://github.com/toshalkumbhar8979-design/loomcode#readme",
|
|
9
|
+
"bugs": {
|
|
10
|
+
"url": "https://github.com/toshalkumbhar8979-design/loomcode/issues"
|
|
11
|
+
},
|
|
12
|
+
"description": "Loom Code  AI-powered coding agent for the terminal. Multi-provider support including NVIDIA. OpenTUI interface.",
|
|
13
|
+
"main": "src/index.js",
|
|
14
|
+
"publishConfig": {
|
|
15
|
+
"access": "public",
|
|
16
|
+
"tag": "latest"
|
|
17
|
+
},
|
|
18
|
+
"bin": {
|
|
19
|
+
"loom": "bin/loom-bun.js",
|
|
20
|
+
"loom-tui": "bin/loom-tui.js"
|
|
21
|
+
},
|
|
22
|
+
"scripts": {
|
|
23
|
+
"start": "node src/index.js",
|
|
24
|
+
"dev": "node --watch src/index.js",
|
|
25
|
+
"setup": "node src/setup.js",
|
|
26
|
+
"test": "bun run src/tui/test-interactive.tsx && bun run test:unit && bun run lint:core",
|
|
27
|
+
"test:unit": "bun test src/core/agents.test.js src/core/hooks.test.js src/core/custom-commands.test.js src/core/background-tasks.test.js src/core/memory.test.js src/core/subagent-log.test.js src/core/session.test.js src/core/sandbox.test.js src/tools/index.test.js src/tools/security.test.js src/providers/providers.test.js src/providers/caching.test.js src/providers/caching-thinking.test.js src/providers/registry.test.js src/mcp/mcp-client.test.js src/mcp/mcp-manager.test.js src/core/session-store.test.js src/skills/skills-manager.test.js src/core/usage.test.js src/core/permissions.test.js src/core/format.test.js src/acp/acp-server.test.js src/tui/keybinds.test.ts",
|
|
28
|
+
"lint:core": "node node_modules/typescript/bin/tsc -p tsconfig.core.json",
|
|
29
|
+
"smoke:acp": "node scripts/acp-smoke.js",
|
|
30
|
+
"tui": "bun bin/loom-tui.js",
|
|
31
|
+
"tui:win": "\"%USERPROFILE%\\..\\bun\\bin\\bun.exe\" run src/tui-open.tsx",
|
|
32
|
+
"prepublishOnly": "npm test",
|
|
33
|
+
"postinstall": "node scripts/postinstall.js",
|
|
34
|
+
"lint": "tsc --noEmit"
|
|
35
|
+
},
|
|
36
|
+
"dependencies": {
|
|
37
|
+
"@anthropic-ai/sdk": "^0.120.0",
|
|
38
|
+
"@opentui/core": "0.5.17",
|
|
39
|
+
"@opentui/solid": "0.5.17",
|
|
40
|
+
"@shikijs/themes": "4.4.3",
|
|
41
|
+
"@supabase/supabase-js": "^2.45.0",
|
|
42
|
+
"boxen": "^8.0.0",
|
|
43
|
+
"chalk": "^5.3.0",
|
|
44
|
+
"cli-spinners": "^3.2.0",
|
|
45
|
+
"commander": "^12.1.0",
|
|
46
|
+
"convex": "^1.14.0",
|
|
47
|
+
"dayjs": "^1.11.0",
|
|
48
|
+
"diff": "^9.0.0",
|
|
49
|
+
"dotenv": "^16.4.0",
|
|
50
|
+
"glob": "^13.0.6",
|
|
51
|
+
"inquirer": "^12.1.0",
|
|
52
|
+
"openai": "^5.23.2",
|
|
53
|
+
"ora": "^8.0.0",
|
|
54
|
+
"playwright-core": "^1.64.1",
|
|
55
|
+
"solid-js": "1.9.12",
|
|
56
|
+
"strip-ansi": "^7.1.0",
|
|
57
|
+
"tiktoken": "^1.0.22",
|
|
58
|
+
"uuid": "^11.0.0",
|
|
59
|
+
"wrap-ansi": "^9.0.0"
|
|
60
|
+
},
|
|
61
|
+
"optionalDependencies": {
|
|
62
|
+
"@opentui/core-darwin-arm64": "0.5.17",
|
|
63
|
+
"@opentui/core-darwin-x64": "0.5.17",
|
|
64
|
+
"@opentui/core-linux-arm64": "0.5.17",
|
|
65
|
+
"@opentui/core-linux-x64": "0.5.17",
|
|
66
|
+
"@opentui/core-win32-x64": "0.5.17",
|
|
67
|
+
"@oven/bun-darwin-aarch64": "1.3.14",
|
|
68
|
+
"@oven/bun-darwin-x64": "1.3.14",
|
|
69
|
+
"@oven/bun-linux-aarch64": "1.3.14",
|
|
70
|
+
"@oven/bun-linux-x64": "1.3.14",
|
|
71
|
+
"@oven/bun-windows-aarch64": "1.3.14",
|
|
72
|
+
"@oven/bun-windows-x64": "1.3.14"
|
|
73
|
+
},
|
|
74
|
+
"overrides": {
|
|
75
|
+
"glob": "^13.0.6",
|
|
76
|
+
"seroval": "1.6.9",
|
|
77
|
+
"seroval-plugins": "1.6.9"
|
|
78
|
+
},
|
|
79
|
+
"devDependencies": {
|
|
80
|
+
"@types/bun": "^1.2.0",
|
|
81
|
+
"typescript": "^5.7.3"
|
|
82
|
+
},
|
|
83
|
+
"files": [
|
|
84
|
+
"bunfig.toml",
|
|
85
|
+
"tsconfig.json",
|
|
86
|
+
"bin/loom-bun.js",
|
|
87
|
+
"bin/loom.js",
|
|
88
|
+
"bin/loom-tui.js",
|
|
89
|
+
"src/**/*.js",
|
|
90
|
+
"src/**/*.tsx",
|
|
91
|
+
"src/**/*.ts",
|
|
92
|
+
"!src/**/test-*",
|
|
93
|
+
"!src/**/*.test.*",
|
|
94
|
+
"!src/test-loop.js",
|
|
95
|
+
"!src/test-tools.js",
|
|
96
|
+
"README.md",
|
|
97
|
+
"CHANGELOG.md",
|
|
98
|
+
"LICENSE",
|
|
99
|
+
".env.example",
|
|
100
|
+
"LOOM.md",
|
|
101
|
+
"docs/acp.md",
|
|
102
|
+
"scripts/acp-smoke.js",
|
|
103
|
+
"scripts/postinstall.js"
|
|
104
|
+
],
|
|
105
|
+
"keywords": [
|
|
106
|
+
"ai",
|
|
107
|
+
"cli",
|
|
108
|
+
"coding-agent",
|
|
109
|
+
"loom-code",
|
|
110
|
+
"anthropic",
|
|
111
|
+
"openai",
|
|
112
|
+
"nvidia",
|
|
113
|
+
"terminal",
|
|
114
|
+
"opentui"
|
|
115
|
+
],
|
|
116
|
+
"engines": {
|
|
117
|
+
"node": ">=18.0.0",
|
|
118
|
+
"bun": ">=1.0.0"
|
|
119
|
+
},
|
|
120
|
+
"directories": {
|
|
121
|
+
"doc": "docs"
|
|
122
|
+
},
|
|
123
|
+
"author": "",
|
|
124
|
+
"license": "MIT",
|
|
125
|
+
"type": "commonjs"
|
|
126
|
+
}
|