@agent-loom/loom 1.0.1 → 1.0.3
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 +69 -0
- package/dist/acp/client.d.ts +182 -0
- package/dist/acp/client.d.ts.map +1 -0
- package/dist/acp/client.js +432 -0
- package/dist/acp/client.js.map +1 -0
- package/dist/acp/index.d.ts +5 -0
- package/dist/acp/index.d.ts.map +1 -0
- package/dist/acp/index.js +3 -0
- package/dist/acp/index.js.map +1 -0
- package/dist/acp/run.d.ts +41 -0
- package/dist/acp/run.d.ts.map +1 -0
- package/dist/acp/run.js +32 -0
- package/dist/acp/run.js.map +1 -0
- package/dist/apply.d.ts +17 -6
- package/dist/apply.d.ts.map +1 -1
- package/dist/apply.js +85 -47
- package/dist/apply.js.map +1 -1
- package/dist/chat/chat.d.ts +108 -0
- package/dist/chat/chat.d.ts.map +1 -0
- package/dist/chat/chat.js +221 -0
- package/dist/chat/chat.js.map +1 -0
- package/dist/chat/discovery.d.ts +30 -0
- package/dist/chat/discovery.d.ts.map +1 -0
- package/dist/chat/discovery.js +68 -0
- package/dist/chat/discovery.js.map +1 -0
- package/dist/chat/frontmatter.d.ts +12 -0
- package/dist/chat/frontmatter.d.ts.map +1 -0
- package/dist/chat/frontmatter.js +11 -0
- package/dist/chat/frontmatter.js.map +1 -0
- package/dist/chat/index.d.ts +16 -0
- package/dist/chat/index.d.ts.map +1 -0
- package/dist/chat/index.js +11 -0
- package/dist/chat/index.js.map +1 -0
- package/dist/chat/registry.d.ts +73 -0
- package/dist/chat/registry.d.ts.map +1 -0
- package/dist/chat/registry.js +118 -0
- package/dist/chat/registry.js.map +1 -0
- package/dist/chat/resolve-agent.d.ts +39 -0
- package/dist/chat/resolve-agent.d.ts.map +1 -0
- package/dist/chat/resolve-agent.js +36 -0
- package/dist/chat/resolve-agent.js.map +1 -0
- package/dist/chat/suggest.d.ts +20 -0
- package/dist/chat/suggest.d.ts.map +1 -0
- package/dist/chat/suggest.js +55 -0
- package/dist/chat/suggest.js.map +1 -0
- package/dist/cli.js +628 -75
- package/dist/cli.js.map +1 -1
- package/dist/clone.d.ts +21 -3
- package/dist/clone.d.ts.map +1 -1
- package/dist/clone.js +240 -12
- package/dist/clone.js.map +1 -1
- package/dist/copilot/mcp.d.ts +48 -0
- package/dist/copilot/mcp.d.ts.map +1 -0
- package/dist/copilot/mcp.js +146 -0
- package/dist/copilot/mcp.js.map +1 -0
- package/dist/copilot/resolve.d.ts +33 -0
- package/dist/copilot/resolve.d.ts.map +1 -0
- package/dist/copilot/resolve.js +96 -0
- package/dist/copilot/resolve.js.map +1 -0
- package/dist/copilot/spawn.d.ts +51 -0
- package/dist/copilot/spawn.d.ts.map +1 -0
- package/dist/copilot/spawn.js +132 -0
- package/dist/copilot/spawn.js.map +1 -0
- package/dist/index.d.ts +19 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +15 -0
- package/dist/index.js.map +1 -0
- package/dist/launch/index.d.ts +10 -0
- package/dist/launch/index.d.ts.map +1 -0
- package/dist/launch/index.js +9 -0
- package/dist/launch/index.js.map +1 -0
- package/dist/launch/stage.d.ts +62 -0
- package/dist/launch/stage.d.ts.map +1 -0
- package/dist/launch/stage.js +108 -0
- package/dist/launch/stage.js.map +1 -0
- package/dist/manifest.d.ts +165 -18
- package/dist/manifest.d.ts.map +1 -1
- package/dist/manifest.js +980 -225
- package/dist/manifest.js.map +1 -1
- package/dist/renderers/claude.d.ts +5 -0
- package/dist/renderers/claude.d.ts.map +1 -1
- package/dist/renderers/claude.js +17 -3
- package/dist/renderers/claude.js.map +1 -1
- package/dist/renderers/copilot.d.ts +1 -1
- package/dist/renderers/copilot.d.ts.map +1 -1
- package/dist/renderers/copilot.js +205 -22
- package/dist/renderers/copilot.js.map +1 -1
- package/dist/repo-clone.js +17 -11
- package/dist/repo-clone.js.map +1 -1
- package/dist/resolve-template.d.ts +12 -4
- package/dist/resolve-template.d.ts.map +1 -1
- package/dist/resolve-template.js +39 -8
- package/dist/resolve-template.js.map +1 -1
- package/dist/run/index.d.ts +4 -0
- package/dist/run/index.d.ts.map +1 -0
- package/dist/run/index.js +2 -0
- package/dist/run/index.js.map +1 -0
- package/dist/run/run.d.ts +143 -0
- package/dist/run/run.d.ts.map +1 -0
- package/dist/run/run.js +406 -0
- package/dist/run/run.js.map +1 -0
- package/dist/search-registry.d.ts +10 -3
- package/dist/search-registry.d.ts.map +1 -1
- package/dist/search-registry.js +16 -16
- package/dist/search-registry.js.map +1 -1
- package/dist/sessions/index.d.ts +16 -0
- package/dist/sessions/index.d.ts.map +1 -0
- package/dist/sessions/index.js +15 -0
- package/dist/sessions/index.js.map +1 -0
- package/dist/sessions/store.d.ts +56 -0
- package/dist/sessions/store.d.ts.map +1 -0
- package/dist/sessions/store.js +220 -0
- package/dist/sessions/store.js.map +1 -0
- package/dist/sessions/types.d.ts +62 -0
- package/dist/sessions/types.d.ts.map +1 -0
- package/dist/sessions/types.js +5 -0
- package/dist/sessions/types.js.map +1 -0
- package/dist/skill-fetcher.d.ts.map +1 -1
- package/dist/skill-fetcher.js +5 -6
- package/dist/skill-fetcher.js.map +1 -1
- package/dist/types.d.ts +123 -41
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +12 -0
- package/dist/types.js.map +1 -1
- package/dist/util/binary-cache.d.ts +53 -0
- package/dist/util/binary-cache.d.ts.map +1 -0
- package/dist/util/binary-cache.js +211 -0
- package/dist/util/binary-cache.js.map +1 -0
- package/dist/util/frontmatter.d.ts +53 -0
- package/dist/util/frontmatter.d.ts.map +1 -0
- package/dist/util/frontmatter.js +85 -0
- package/dist/util/frontmatter.js.map +1 -0
- package/dist/util/loom-home.d.ts +19 -0
- package/dist/util/loom-home.d.ts.map +1 -0
- package/dist/util/loom-home.js +37 -0
- package/dist/util/loom-home.js.map +1 -0
- package/dist/util/workspace-folder.d.ts +29 -0
- package/dist/util/workspace-folder.d.ts.map +1 -0
- package/dist/util/workspace-folder.js +43 -0
- package/dist/util/workspace-folder.js.map +1 -0
- package/dist/validate.d.ts +7 -1
- package/dist/validate.d.ts.map +1 -1
- package/dist/validate.js +90 -17
- package/dist/validate.js.map +1 -1
- package/package.json +31 -2
package/README.md
CHANGED
|
@@ -45,6 +45,58 @@ Apply the functions-dev template to this workspace
|
|
|
45
45
|
|
|
46
46
|
The agent handles the whole workflow — searching, selecting, and applying the template to your workspace.
|
|
47
47
|
|
|
48
|
+
## Launch an agent (`loom <agent>`)
|
|
49
|
+
|
|
50
|
+
Once a template is applied (or in any workspace with `.github/agents/<id>.agent.md` files), start a single agent in your terminal:
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
# From inside a workspace (walks up to find .github/agents/)
|
|
54
|
+
loom my-agent
|
|
55
|
+
|
|
56
|
+
# Pass extra args through to the runtime after `--`
|
|
57
|
+
loom my-agent -- --model=claude-sonnet-4.5
|
|
58
|
+
|
|
59
|
+
# Or use the dedicated --model / --add-dir flags directly:
|
|
60
|
+
loom my-agent --model=claude-sonnet-4.5
|
|
61
|
+
|
|
62
|
+
# Launch from anywhere by pointing at a workspace
|
|
63
|
+
loom my-agent --workspace /path/to/workspace
|
|
64
|
+
|
|
65
|
+
# Launch an agent that isn't in any local workspace — stages it from a
|
|
66
|
+
# configured registry into ~/.loom/sessions/<id>/workspace/
|
|
67
|
+
loom some-registry-agent
|
|
68
|
+
|
|
69
|
+
# Headless single-shot execution (no TTY): give a prompt, exit when done
|
|
70
|
+
loom my-agent -p "investigate failing test" --no-interactive
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
The verb-less form (`loom <agent>`) is the **interactive** surface — it inherits
|
|
74
|
+
your tty and lets you talk to the agent (mirrors the `copilot` CLI). For
|
|
75
|
+
**scripted / structured** one-shot execution, use either the `loom run`
|
|
76
|
+
subcommand or the `run()` SDK from `@agent-loom/loom/run`, both of which
|
|
77
|
+
capture stdout, honor a hard timeout, and return structured results
|
|
78
|
+
(`SESSION:`, `REPORT:`, `PROGRESS:` artifact paths).
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
# Run a template-instantiated agent headlessly and collect artifacts
|
|
82
|
+
loom run my-template my-agent \
|
|
83
|
+
--prompt "what's broken?" \
|
|
84
|
+
--work-dir /tmp/loom-run-1 \
|
|
85
|
+
--timeout-ms 300000
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
Every launch is recorded under `~/.loom/sessions/<id>/`. Inspect past runs:
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
loom sessions list # recent sessions
|
|
92
|
+
loom sessions show <id> # full metadata
|
|
93
|
+
loom sessions tag <id> bug-repro
|
|
94
|
+
loom sessions note <id> "this one reproduced #1234"
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
Escape hatches: `--no-session` (skip recording), `--no-registry-fallback`
|
|
98
|
+
(disable the registry fallback), `--registry <name>` (restrict to one registry).
|
|
99
|
+
|
|
48
100
|
## Available Skills
|
|
49
101
|
|
|
50
102
|
Loom ships with 5 skills that teach your coding agent how to use the system:
|
|
@@ -139,6 +191,23 @@ npm test
|
|
|
139
191
|
node dist/cli.js --help
|
|
140
192
|
```
|
|
141
193
|
|
|
194
|
+
### Working on a branch
|
|
195
|
+
|
|
196
|
+
To dogfood a local build globally:
|
|
197
|
+
|
|
198
|
+
```bash
|
|
199
|
+
cd <your-loom-worktree>
|
|
200
|
+
npm run build
|
|
201
|
+
npm link # exposes `loom` from this worktree on PATH
|
|
202
|
+
loom some-agent # uses your local build
|
|
203
|
+
|
|
204
|
+
# When done:
|
|
205
|
+
npm unlink -g @agent-loom/loom # restore the published `loom`
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
`npm link` pins `loom` to the current worktree path. If you switch branches or
|
|
209
|
+
blow away `node_modules`, re-run `npm run build` (no need to re-link).
|
|
210
|
+
|
|
142
211
|
## License
|
|
143
212
|
|
|
144
213
|
ISC
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
export interface SpecialistSession {
|
|
2
|
+
sessionId: string;
|
|
3
|
+
agentId: string;
|
|
4
|
+
response: string;
|
|
5
|
+
activity: string;
|
|
6
|
+
plan: Array<{
|
|
7
|
+
content: string;
|
|
8
|
+
priority: string;
|
|
9
|
+
status: string;
|
|
10
|
+
}>;
|
|
11
|
+
toolCalls: Map<string, {
|
|
12
|
+
title: string;
|
|
13
|
+
status: string;
|
|
14
|
+
}>;
|
|
15
|
+
done: boolean;
|
|
16
|
+
stopReason: string | null;
|
|
17
|
+
startTime: number;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* MCP server config consumed by `AcpClient.newSession` / `loadSession`.
|
|
21
|
+
*
|
|
22
|
+
* **Note:** This is intentionally distinct from the canonical
|
|
23
|
+
* `McpServerConfig` exported from `@agent-loom/loom` (which lives in
|
|
24
|
+
* `src/copilot/mcp.ts`). The two shapes differ — Copilot expects a map
|
|
25
|
+
* keyed by name with `env` as a `Record<string, string>`; ACP expects an
|
|
26
|
+
* array of entries with `name` as a field and `env` as `[{name,value}]`.
|
|
27
|
+
* Don't try to unify them — the divergence is in the underlying protocols.
|
|
28
|
+
*/
|
|
29
|
+
export interface AcpMcpServerConfig {
|
|
30
|
+
name: string;
|
|
31
|
+
command?: string;
|
|
32
|
+
args?: string[];
|
|
33
|
+
env?: Array<{
|
|
34
|
+
name: string;
|
|
35
|
+
value: string;
|
|
36
|
+
}>;
|
|
37
|
+
type?: string;
|
|
38
|
+
url?: string;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Discriminated update surfaced through `onSessionUpdate`. One callback sees
|
|
42
|
+
* every notification -- consumers filter by `type`. Text-only consumers
|
|
43
|
+
* (console, headless agents) care about `'message'`; chat consumers
|
|
44
|
+
* switch on all variants to render tool calls, thoughts, and plans.
|
|
45
|
+
*/
|
|
46
|
+
export type SessionUpdateEvent = {
|
|
47
|
+
type: 'message';
|
|
48
|
+
text: string;
|
|
49
|
+
} | {
|
|
50
|
+
type: 'thought';
|
|
51
|
+
text: string;
|
|
52
|
+
} | {
|
|
53
|
+
type: 'tool_call';
|
|
54
|
+
toolCallId: string;
|
|
55
|
+
title: string;
|
|
56
|
+
status: string;
|
|
57
|
+
} | {
|
|
58
|
+
type: 'tool_update';
|
|
59
|
+
toolCallId: string;
|
|
60
|
+
status: string;
|
|
61
|
+
title?: string;
|
|
62
|
+
} | {
|
|
63
|
+
type: 'plan';
|
|
64
|
+
entries: Array<{
|
|
65
|
+
content: string;
|
|
66
|
+
priority: string;
|
|
67
|
+
status: string;
|
|
68
|
+
}>;
|
|
69
|
+
};
|
|
70
|
+
export interface AcpClientOptions {
|
|
71
|
+
/** Path to an MCP config JSON file passed via `--additional-mcp-config @<path>`. */
|
|
72
|
+
additionalMcpConfigPath?: string;
|
|
73
|
+
/** Copilot CLI `--agent <id>` value. Selects the agent definition at spawn time. */
|
|
74
|
+
agentId?: string;
|
|
75
|
+
/**
|
|
76
|
+
* Per-protocol-call timeout in milliseconds. Applied to `initialize`,
|
|
77
|
+
* `newSession`, `loadSession`, and `prompt`. When a call exceeds the
|
|
78
|
+
* budget the returned promise rejects with `AcpTimeoutError` and the
|
|
79
|
+
* client is left for the caller to `dispose()`. `undefined` or `0`
|
|
80
|
+
* disables the timeout (default -- matches pre-0.x behaviour).
|
|
81
|
+
*/
|
|
82
|
+
timeoutMs?: number;
|
|
83
|
+
}
|
|
84
|
+
/** Thrown when the child CLI exits or errors while a protocol call is in flight. */
|
|
85
|
+
export declare class AcpConnectionClosedError extends Error {
|
|
86
|
+
constructor(message: string);
|
|
87
|
+
}
|
|
88
|
+
/** Thrown when a protocol call exceeds its `timeoutMs` budget. */
|
|
89
|
+
export declare class AcpTimeoutError extends Error {
|
|
90
|
+
constructor(message: string);
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Drives an Agent Client Protocol (ACP) compatible CLI (e.g. `copilot --acp`)
|
|
94
|
+
* over stdio. Owns the child process, the JSON-RPC connection, and per-session
|
|
95
|
+
* state. One `AcpClient` instance = one child process; create multiple clients
|
|
96
|
+
* to run multiple CLIs in parallel.
|
|
97
|
+
*
|
|
98
|
+
* **Security posture (interim):** the client currently advertises
|
|
99
|
+
* `fs.readTextFile` / `fs.writeTextFile` capabilities unconditionally and
|
|
100
|
+
* auto-allows every `requestPermission`. This is safe for the trusted
|
|
101
|
+
* consumers shipping today (in-tree CLIs and the smoke script) but will not
|
|
102
|
+
* generalise. A pluggable `AcpClientOptions.policy` surface is being designed
|
|
103
|
+
* in serverless-paas-balam/loom#64 and will replace these defaults once the
|
|
104
|
+
* first external consumer lands.
|
|
105
|
+
*
|
|
106
|
+
* Typical flow:
|
|
107
|
+
* const client = new AcpClient('copilot', { agentId: 'my-agent' });
|
|
108
|
+
* await client.connect();
|
|
109
|
+
* const session = await client.newSession('my-agent', cwd, mcpServers);
|
|
110
|
+
* const unsubscribe = client.onSessionUpdate(session.sessionId, (u) => {
|
|
111
|
+
* if (u.type === 'message') process.stdout.write(u.text);
|
|
112
|
+
* });
|
|
113
|
+
* await client.prompt(session.sessionId, 'Investigate X');
|
|
114
|
+
* unsubscribe();
|
|
115
|
+
* client.dispose();
|
|
116
|
+
*/
|
|
117
|
+
export declare class AcpClient {
|
|
118
|
+
private process;
|
|
119
|
+
private connection;
|
|
120
|
+
private sessions;
|
|
121
|
+
/** Per-session subscribers for full session update events. */
|
|
122
|
+
private updateSubscribers;
|
|
123
|
+
/**
|
|
124
|
+
* Tracks in-flight protocol calls (`connect`, `newSession`, `loadSession`,
|
|
125
|
+
* `prompt`) so we can reject them if the child process exits or errors
|
|
126
|
+
* before they complete. Without this, any caller awaiting the promise
|
|
127
|
+
* hangs forever on crash.
|
|
128
|
+
*/
|
|
129
|
+
private inFlight;
|
|
130
|
+
private _isClosed;
|
|
131
|
+
private cliBin;
|
|
132
|
+
private opts;
|
|
133
|
+
/**
|
|
134
|
+
* @param cliBin Path or command name of the ACP-capable CLI (e.g. `copilot`).
|
|
135
|
+
* @param opts Constructor options. For back-compat a bare string in the
|
|
136
|
+
* second position is treated as `additionalMcpConfigPath`.
|
|
137
|
+
*/
|
|
138
|
+
constructor(cliBin: string, opts?: AcpClientOptions | string);
|
|
139
|
+
get isClosed(): boolean;
|
|
140
|
+
/**
|
|
141
|
+
* Spawn the CLI with `--acp`, wire up the ACP JSON-RPC stream, and complete
|
|
142
|
+
* protocol initialization. Must be called before any session operation.
|
|
143
|
+
* Throws if the client has already connected or been disposed -- one
|
|
144
|
+
* `AcpClient` instance owns exactly one child process for its lifetime.
|
|
145
|
+
*/
|
|
146
|
+
connect(): Promise<void>;
|
|
147
|
+
/** Create a new session rooted at `cwd` with the given MCP servers. */
|
|
148
|
+
newSession(agentId: string, cwd: string, mcpServers: AcpMcpServerConfig[]): Promise<SpecialistSession>;
|
|
149
|
+
/**
|
|
150
|
+
* Resume an existing CLI session by ID. Requires `loadSession` capability.
|
|
151
|
+
* Throws on failure -- callers should fall back to `newSession()`.
|
|
152
|
+
*/
|
|
153
|
+
loadSession(sessionId: string, agentId: string, cwd: string, mcpServers: AcpMcpServerConfig[]): Promise<SpecialistSession>;
|
|
154
|
+
/**
|
|
155
|
+
* Send a prompt to an existing session and block until the turn completes.
|
|
156
|
+
* Live deltas arrive via `onSessionUpdate` subscribers during the await.
|
|
157
|
+
* Rejects with `AcpConnectionClosedError` if the child exits mid-turn.
|
|
158
|
+
*/
|
|
159
|
+
prompt(sessionId: string, text: string): Promise<SpecialistSession>;
|
|
160
|
+
/** Cancel an in-flight prompt on the given session. Safe if already closed. */
|
|
161
|
+
cancelSession(sessionId: string): Promise<void>;
|
|
162
|
+
getSession(sessionId: string): SpecialistSession | undefined;
|
|
163
|
+
/**
|
|
164
|
+
* Subscribe to all session updates (message/thought chunks, tool calls,
|
|
165
|
+
* plans) for one session. Consumers filter by `event.type`.
|
|
166
|
+
*/
|
|
167
|
+
onSessionUpdate(sessionId: string, cb: (event: SessionUpdateEvent) => void): () => void;
|
|
168
|
+
/** Kill the child process and release all state. Idempotent. */
|
|
169
|
+
dispose(): void;
|
|
170
|
+
/**
|
|
171
|
+
* Wrap a protocol promise so that if the child process ends before it
|
|
172
|
+
* settles, the returned promise rejects instead of hanging. When
|
|
173
|
+
* `opts.timeoutMs` is set, also rejects with `AcpTimeoutError` after the
|
|
174
|
+
* configured budget.
|
|
175
|
+
*/
|
|
176
|
+
private withInFlight;
|
|
177
|
+
/** Invoked on child exit, process error, or ACP stream close. Idempotent. */
|
|
178
|
+
private handleProcessEnd;
|
|
179
|
+
private emit;
|
|
180
|
+
private createClient;
|
|
181
|
+
}
|
|
182
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/acp/client.ts"],"names":[],"mappings":"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"}
|