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.
Files changed (39) hide show
  1. package/CHANGELOG.md +128 -0
  2. package/README.md +38 -56
  3. package/bin/loom-bun.js +2 -10
  4. package/bin/loom.js +0 -10
  5. package/package.json +126 -126
  6. package/src/connectors/convex.js +356 -0
  7. package/src/connectors/deploy.js +390 -0
  8. package/src/connectors/index.js +23 -0
  9. package/src/connectors/supabase.js +279 -0
  10. package/src/core/agents.js +32 -2
  11. package/src/core/cli.js +30 -5
  12. package/src/core/permissions.js +12 -1
  13. package/src/core/plugin-cmd.js +1 -0
  14. package/src/core/sandbox.js +400 -0
  15. package/src/core/session-store.js +245 -167
  16. package/src/core/session.js +157 -11
  17. package/src/providers/anthropic.js +10 -5
  18. package/src/providers/openai-compat.js +12 -4
  19. package/src/tools/browser.js +204 -0
  20. package/src/tools/index.js +35 -1
  21. package/src/tui/App.tsx +103 -8
  22. package/src/tui/components/BreadcrumbBar.tsx +10 -9
  23. package/src/tui/components/ChatArea.tsx +3 -3
  24. package/src/tui/components/InputBar.tsx +22 -11
  25. package/src/tui/components/MdText.tsx +2 -1
  26. package/src/tui/components/Modals.tsx +191 -17
  27. package/src/tui/components/PermissionPopup.tsx +15 -12
  28. package/src/tui/components/Sidebar.tsx +6 -2
  29. package/src/tui/components/SplashScreen.tsx +17 -24
  30. package/src/tui/components/SubagentPanel.tsx +1 -1
  31. package/src/tui/components/ToastOverlay.tsx +23 -12
  32. package/src/tui/store.ts +38 -35
  33. package/src/tui/theme.ts +45 -30
  34. package/src/tui/tool-display.ts +13 -2
  35. package/docs/web.md +0 -205
  36. package/src/web/attach.js +0 -242
  37. package/src/web/graph-view.html +0 -262
  38. package/src/web/index.html +0 -824
  39. 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
  [![npm version](https://img.shields.io/npm/v/loom-agent?style=flat&color=blue)](https://www.npmjs.com/package/loom-agent)
11
11
  [![License: MIT](https://img.shields.io/npm/l/loom-agent?style=flat&color=green)](LICENSE)
12
12
  [![Platform: Win/Mac/Linux](https://img.shields.io/badge/platform-Win--Mac--Linux-orange)](#)
13
+ [![Website: loomcluster.in](https://img.shields.io/badge/website-loomcluster.in-success)](https://loomcluster.in/)
13
14
 
14
15
  ![Loom Code splash — connected to NVIDIA](docs/screenshot.png)
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
- - Browser interface via `loom web` — a zero-dependency Node HTTP server (chat in the browser, password auth, CORS) plus `loom attach` to share the same server from the terminal; optional mDNS advertising as `loom.local` via [bonjour-service](https://www.npmjs.com/package/bonjour-service)
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-code
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 (35 total)
131
+ ## Slash Commands (36 total)
157
132
 
158
133
  | Command | Args | Description |
159
134
  |---------|------|-------------|
160
- | `/help` | — | Show all commands |
161
- | `/build` | — | Build mode — all tools |
162
- | `/plan` | — | Plan mode — read-only analysis |
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
- | `/agents` | — | List primary agents and subagents |
165
- | `/connect` | `[provider]` | Add/connect a provider |
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
- | `/model` | `[model-id]` | Pick active model |
169
- | `/models` | — | List available models |
170
- | `/providers` | — | List supported providers |
171
- | `/status` | — | Show connection status |
172
- | `/usage` | — | Show token usage and billing |
173
- | `/new` | — | Start a new session |
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
- | `/compact` | — | Compact conversation |
176
- | `/undo` | — | Undo last exchange |
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
- | `/share` | — | Export current session to JSON |
182
- | `/export` | — | Export to markdown |
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
- | `/debug` | — | Show debug info |
191
- | `/fork` | — | Fork conversation |
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", "web", "attach", "graph"].includes(args[0]);
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 (`loom web` painted the splash instead of serving HTTP).
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.36",
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/web/web-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.3",
39
- "@opentui/solid": "0.5.3",
40
- "@shikijs/themes": "4.4.3",
41
- "bonjour-service": "^1.4.4",
42
- "boxen": "^8.0.0",
43
- "chalk": "^5.3.0",
44
- "cli-spinners": "^3.2.0",
45
- "commander": "^12.1.0",
46
- "dayjs": "^1.11.0",
47
- "diff": "^7.0.0",
48
- "dotenv": "^16.4.0",
49
- "glob": "^13.0.6",
50
- "inquirer": "^12.1.0",
51
- "openai": "^5.23.2",
52
- "ora": "^8.0.0",
53
- "shell-quote": "^1.8.1",
54
- "solid-js": "1.9.12",
55
- "strip-ansi": "^7.1.0",
56
- "tiktoken": "^1.0.22",
57
- "uuid": "^11.0.0",
58
- "wrap-ansi": "^9.0.0"
59
- },
60
- "optionalDependencies": {
61
- "@opentui/core-darwin-arm64": "0.5.3",
62
- "@opentui/core-darwin-x64": "0.5.3",
63
- "@opentui/core-linux-arm64": "0.5.3",
64
- "@opentui/core-linux-x64": "0.5.3",
65
- "@opentui/core-win32-x64": "0.5.3",
66
- "@oven/bun-darwin-aarch64": "1.3.14",
67
- "@oven/bun-darwin-x64": "1.3.14",
68
- "@oven/bun-linux-aarch64": "1.3.14",
69
- "@oven/bun-linux-x64": "1.3.14",
70
- "@oven/bun-windows-aarch64": "1.3.14",
71
- "@oven/bun-windows-x64": "1.3.14"
72
- },
73
- "overrides": {
74
- "glob": "^13.0.6"
75
- },
76
- "devDependencies": {
77
- "@types/bun": "^1.2.0",
78
- "typescript": "^5.7.3"
79
- },
80
- "files": [
81
- "bunfig.toml",
82
- "tsconfig.json",
83
- "bin/loom-bun.js",
84
- "bin/loom.js",
85
- "bin/loom-tui.js",
86
- "src/**/*.js",
87
- "src/**/*.tsx",
88
- "src/**/*.ts",
89
- "!src/**/test-*",
90
- "!src/**/*.test.*",
91
- "!src/test-loop.js",
92
- "!src/test-tools.js",
93
- "README.md",
94
- "CHANGELOG.md",
95
- "LICENSE",
96
- ".env.example",
97
- "LOOM.md",
98
- "docs/acp.md",
99
- "scripts/acp-smoke.js",
100
- "scripts/postinstall.js",
101
- "docs/web.md",
102
- "src/web/index.html",
103
- "src/web/graph-view.html"
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
+ }