agentxl 1.1.2 → 1.1.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 +77 -303
- package/bin/agentxl.js +125 -17
- package/package.json +3 -1
- package/scripts/enable-excel-addin.mjs +59 -0
- package/scripts/setup-and-start.cmd +59 -0
package/README.md
CHANGED
|
@@ -17,9 +17,6 @@
|
|
|
17
17
|
<img src="https://img.shields.io/badge/node-%3E%3D20-brightgreen" alt="Node 20+" />
|
|
18
18
|
</p>
|
|
19
19
|
|
|
20
|
-
<!-- TODO: Replace with actual demo GIF showing: select local folder → ask question → trace answer to source → map into Excel -->
|
|
21
|
-
<!-- <p align="center"><img src="https://raw.githubusercontent.com/satish860/agentxl/master/docs/demo.gif" alt="AgentXL demo" width="600" /></p> -->
|
|
22
|
-
|
|
23
20
|
<p align="center">
|
|
24
21
|
<a href="#quick-start">Quick Start</a> •
|
|
25
22
|
<a href="#the-method">The Method</a> •
|
|
@@ -32,7 +29,7 @@
|
|
|
32
29
|
|
|
33
30
|
Most spreadsheet work does not start in Excel. It starts in messy PDFs, statements, exports, agreements, and support folders.
|
|
34
31
|
|
|
35
|
-
AgentXL is
|
|
32
|
+
AgentXL is built for that workflow:
|
|
36
33
|
|
|
37
34
|
- **point to a local folder of source documents**
|
|
38
35
|
- **ask a question or give an instruction**
|
|
@@ -41,62 +38,43 @@ AgentXL is being built for that workflow:
|
|
|
41
38
|
|
|
42
39
|
Built for audit and diligence workflows first — useful anywhere document-heavy work ends in spreadsheets.
|
|
43
40
|
|
|
44
|
-
```bash
|
|
45
|
-
npm install -g agentxl
|
|
46
|
-
agentxl start
|
|
47
|
-
```
|
|
48
|
-
|
|
49
|
-
No server. No cloud account with us. No classic RAG stack. You bring your own AI model.
|
|
50
|
-
|
|
51
41
|
---
|
|
52
42
|
|
|
53
43
|
## Quick Start
|
|
54
44
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
1. Download the latest `.zip` from [GitHub Releases](https://github.com/satish860/agentxl/releases)
|
|
58
|
-
2. Extract to a folder (e.g. `Desktop\AgentXL`)
|
|
59
|
-
3. Double-click **AgentXL.vbs**
|
|
60
|
-
4. If sign-in is needed, run **AgentXL Login.vbs** first
|
|
61
|
-
5. Excel opens with AgentXL in the **Home** ribbon
|
|
62
|
-
|
|
63
|
-
The Windows release is self-contained — bundled Node.js, no system install required.
|
|
64
|
-
|
|
65
|
-
Alternatively, install the add-in directly from Excel (see [Install the Excel add-in](#5-add-to-excel) below).
|
|
66
|
-
|
|
67
|
-
### 1. Install
|
|
68
|
-
|
|
69
|
-
**Option A — npm**
|
|
45
|
+
### 3 commands. That's it.
|
|
70
46
|
|
|
71
47
|
```bash
|
|
72
48
|
npm install -g agentxl
|
|
49
|
+
agentxl install
|
|
50
|
+
agentxl start
|
|
73
51
|
```
|
|
74
52
|
|
|
75
|
-
|
|
53
|
+
| Command | What it does | When |
|
|
54
|
+
|---------|-------------|------|
|
|
55
|
+
| `npm install -g agentxl` | Installs AgentXL | Once |
|
|
56
|
+
| `agentxl install` | Registers the add-in with Excel (certs + manifest + loopback) | Once |
|
|
57
|
+
| `agentxl start` | Starts the local server | Every time |
|
|
76
58
|
|
|
77
|
-
**
|
|
59
|
+
After `agentxl install`, open Excel → **AgentXL** appears on the **Home** ribbon. No Trust Center. No manual sideloading.
|
|
78
60
|
|
|
79
|
-
|
|
80
|
-
2. Extract to a folder
|
|
81
|
-
3. Double-click **AgentXL.vbs**
|
|
61
|
+
> On first run, `agentxl start` will ask you to sign in with your AI provider.
|
|
82
62
|
|
|
83
|
-
|
|
63
|
+
---
|
|
84
64
|
|
|
85
|
-
###
|
|
65
|
+
### Windows — no coding required
|
|
86
66
|
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
67
|
+
1. Download the latest `.zip` from [GitHub Releases](https://github.com/satish860/agentxl/releases)
|
|
68
|
+
2. Extract to a folder (e.g. `Desktop\AgentXL`)
|
|
69
|
+
3. Double-click **AgentXL.vbs**
|
|
70
|
+
4. If sign-in is needed, run **AgentXL Login.vbs** first
|
|
71
|
+
5. Excel opens with AgentXL in the **Home** ribbon
|
|
90
72
|
|
|
91
|
-
The
|
|
73
|
+
The release ZIP is self-contained — bundled Node.js, no system install required.
|
|
92
74
|
|
|
93
|
-
|
|
94
|
-
✅ Auth ready
|
|
95
|
-
✅ HTTPS certificate ready
|
|
96
|
-
✅ Server running at https://localhost:3001
|
|
97
|
-
```
|
|
75
|
+
---
|
|
98
76
|
|
|
99
|
-
###
|
|
77
|
+
### Choose your AI provider
|
|
100
78
|
|
|
101
79
|
On first run, the CLI asks how to connect:
|
|
102
80
|
|
|
@@ -110,23 +88,34 @@ On first run, the CLI asks how to connect:
|
|
|
110
88
|
|
|
111
89
|
> **Already use Pi?** AgentXL shares credentials from `~/.pi/agent/auth.json`. No extra login needed.
|
|
112
90
|
|
|
113
|
-
|
|
91
|
+
---
|
|
114
92
|
|
|
115
|
-
|
|
93
|
+
### Start from a document folder
|
|
116
94
|
|
|
117
|
-
|
|
95
|
+
1. Open Excel → click **AgentXL** on the Home ribbon
|
|
96
|
+
2. Link a **local folder** containing your source documents
|
|
97
|
+
3. Ask a question — the agent searches the folder, reads the files, returns grounded answers
|
|
118
98
|
|
|
119
|
-
|
|
99
|
+
Example prompts:
|
|
120
100
|
|
|
121
|
-
|
|
101
|
+
- **"Extract the relevant values from the source documents and map them into Excel."**
|
|
102
|
+
- **"Compare this trial balance folder to the lead sheet and flag mismatches."**
|
|
103
|
+
- **"Pull lease terms from these agreements into the lease schedule."**
|
|
104
|
+
- **"Show me which workbook cells came from which source files."**
|
|
105
|
+
|
|
106
|
+
---
|
|
122
107
|
|
|
123
|
-
|
|
108
|
+
## Alternative install methods
|
|
109
|
+
|
|
110
|
+
### Install the Excel add-in only (if you already have the server)
|
|
111
|
+
|
|
112
|
+
**Option A — Office Store (coming soon)**
|
|
124
113
|
1. Open Excel → **Insert** → **Get Add-ins**
|
|
125
114
|
2. Search **"AgentXL"** → click **Add**
|
|
126
115
|
|
|
127
|
-
> The Office Store listing is pending review. Use
|
|
116
|
+
> The Office Store listing is pending review. Use the `agentxl install` command or Option B/C below.
|
|
128
117
|
|
|
129
|
-
**Option B — Upload hosted manifest
|
|
118
|
+
**Option B — Upload hosted manifest**
|
|
130
119
|
1. Download [`manifest.xml`](https://satish860.github.io/agentxl/manifest/manifest.xml)
|
|
131
120
|
2. Open Excel → **Insert** → **Get Add-ins** → **My Add-ins** → **Upload My Add-in**
|
|
132
121
|
3. Browse to the downloaded `manifest.xml` → **Upload**
|
|
@@ -139,33 +128,6 @@ Choose one method:
|
|
|
139
128
|
5. **Restart Excel**
|
|
140
129
|
6. **Insert** → **My Add-ins** → **SHARED FOLDER** → **AgentXL** → **Add**
|
|
141
130
|
|
|
142
|
-
**Option D — Windows release auto-setup**
|
|
143
|
-
- Double-click **AgentXL.vbs** from the extracted release folder
|
|
144
|
-
- It handles certificate trust, add-in registration, and opens Excel automatically
|
|
145
|
-
|
|
146
|
-
### 6. Start from a document folder
|
|
147
|
-
|
|
148
|
-
Open Excel, launch **AgentXL**, and the first-run taskpane now guides the user through:
|
|
149
|
-
|
|
150
|
-
1. **Connect** — sign in with your model provider if needed
|
|
151
|
-
2. **Folder** — choose the local folder with supporting documents
|
|
152
|
-
3. **Ask** — send a grounded question about that folder
|
|
153
|
-
|
|
154
|
-
From there, the working flow is:
|
|
155
|
-
|
|
156
|
-
1. select the workbook you want to populate
|
|
157
|
-
2. point AgentXL at a local folder of supporting files
|
|
158
|
-
3. ask a grounded question
|
|
159
|
-
4. review the answer and source traceability
|
|
160
|
-
5. map the output into Excel
|
|
161
|
-
|
|
162
|
-
Example prompts:
|
|
163
|
-
|
|
164
|
-
- **"Compare this trial balance folder to the lead sheet and flag mismatches."**
|
|
165
|
-
- **"Extract the cash balance from the bank statement folder and map it to the cash workpaper."**
|
|
166
|
-
- **"Pull lease terms from these agreements into the lease schedule."**
|
|
167
|
-
- **"Show me which workbook cells came from which source files."**
|
|
168
|
-
|
|
169
131
|
---
|
|
170
132
|
|
|
171
133
|
## What AgentXL Is
|
|
@@ -197,7 +159,7 @@ This makes it a fit for:
|
|
|
197
159
|
## What AgentXL Is Not
|
|
198
160
|
|
|
199
161
|
- **Not classic RAG.** No need to start with embeddings, vector DBs, and a retrieval stack.
|
|
200
|
-
- **Not generic spreadsheet chat.** The primary action is not
|
|
162
|
+
- **Not generic spreadsheet chat.** The primary action is not "ask Excel a question."
|
|
201
163
|
- **Not automation theater.** The goal is reviewable outputs with sources, not flashy demos.
|
|
202
164
|
- **Not a 36-tool architecture diagram.** One parser, one model, direct file search, and an eval loop beat unnecessary layers.
|
|
203
165
|
|
|
@@ -205,117 +167,23 @@ This makes it a fit for:
|
|
|
205
167
|
|
|
206
168
|
## The Method
|
|
207
169
|
|
|
208
|
-
AgentXL follows a simple method
|
|
209
|
-
|
|
210
|
-
1. **Parse the files**
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
- one grounded task at a time
|
|
217
|
-
4. **Map the result into Excel**
|
|
218
|
-
- workpapers, schedules, exception lists, summaries
|
|
219
|
-
5. **Measure whether it was right**
|
|
220
|
-
- evals, failure analysis, correction loops
|
|
221
|
-
6. **Improve the system**
|
|
222
|
-
- fix repeated failure patterns, then measure again
|
|
170
|
+
AgentXL follows a simple method:
|
|
171
|
+
|
|
172
|
+
1. **Parse the files** — PDFs, Excel files, CSVs, statements, agreements
|
|
173
|
+
2. **Search the folder agentically** — inspect filenames, structure, metadata, and contents
|
|
174
|
+
3. **Ask the model to extract or answer** — one grounded task at a time
|
|
175
|
+
4. **Map the result into Excel** — workpapers, schedules, exception lists
|
|
176
|
+
5. **Measure whether it was right** — evals, failure analysis, correction loops
|
|
177
|
+
6. **Improve the system** — fix repeated failure patterns, then measure again
|
|
223
178
|
|
|
224
179
|
### The core loop
|
|
225
180
|
|
|
226
181
|
**Parse → Search → Ask → Evaluate → Fix → Repeat**
|
|
227
182
|
|
|
228
|
-
That is the product.
|
|
229
|
-
|
|
230
|
-
---
|
|
231
|
-
|
|
232
|
-
## Core Workflow
|
|
233
|
-
|
|
234
|
-
AgentXL is designed around a folder-first workflow:
|
|
235
|
-
|
|
236
|
-
1. **Link a local folder** — point AgentXL at a folder of source documents (PDFs, CSVs, Excel files, text)
|
|
237
|
-
2. **AgentXL scans the folder** — builds an inventory of supported files, shows counts in the UI
|
|
238
|
-
3. **Ask a question or give an instruction** — the agent knows what files are available
|
|
239
|
-
4. **The agent searches and reads the relevant files** — using `read`, `grep`, `find`, `ls` tools (visible as live badges in the UI)
|
|
240
|
-
5. **Review the grounded result** — answers cite the source file and content
|
|
241
|
-
6. **Write the output into Excel** — as a workpaper, schedule, or exception list *(coming next)*
|
|
242
|
-
|
|
243
|
-
The agent's working directory is set to your linked folder. When you say "list the files," it lists *your documents*, not the AgentXL project.
|
|
244
|
-
|
|
245
|
-
---
|
|
246
|
-
|
|
247
|
-
## Current Build Status
|
|
248
|
-
|
|
249
|
-
| Area | Status |
|
|
250
|
-
|------|--------|
|
|
251
|
-
| Excel taskpane shell | ✅ Done |
|
|
252
|
-
| Local server + auth flow | ✅ Done |
|
|
253
|
-
| Model connection | ✅ Done |
|
|
254
|
-
| Workbook identity resolution | ✅ Done |
|
|
255
|
-
| Folder linking + native picker | ✅ Done |
|
|
256
|
-
| Folder scanning + file inventory | ✅ Done |
|
|
257
|
-
| Folder-aware agent (cwd, context) | ✅ Done |
|
|
258
|
-
| Agentic file search (read, grep, find, ls) | ✅ Done |
|
|
259
|
-
| Tool call visibility in UI | ✅ Done |
|
|
260
|
-
| Source traceability into Excel | 🔜 Next |
|
|
261
|
-
| Excel write tools | Planned |
|
|
262
|
-
| Eval-driven extraction improvement loop | Planned |
|
|
263
|
-
|
|
264
|
-
---
|
|
265
|
-
|
|
266
|
-
## What It Does
|
|
267
|
-
|
|
268
|
-
The target behavior looks like this:
|
|
269
|
-
|
|
270
|
-
| You ask | AgentXL does |
|
|
271
|
-
|---------|---------------|
|
|
272
|
-
| "Extract the ending cash balance from the bank statement folder and map it to the cash workpaper" | Finds the relevant statement, extracts the value, and writes it into Excel |
|
|
273
|
-
| "Compare this trial balance export folder to the lead sheet and flag mismatches" | Reconciles source documents against the workbook and surfaces exceptions |
|
|
274
|
-
| "Pull lease start date, end date, and monthly payment from these agreements into the lease schedule" | Reads the agreements and maps structured fields into the schedule |
|
|
275
|
-
| "Show me which cells in this sheet came from which source files" | Returns traceability for mapped workbook values |
|
|
276
|
-
| "Create a support summary for this balance from the source folder" | Searches the folder, answers from evidence, and structures the output for review |
|
|
277
|
-
| "Format this output as a clean review-ready workpaper" | Applies spreadsheet formatting after the data is mapped |
|
|
278
|
-
|
|
279
|
-
### Underlying Excel Tools
|
|
280
|
-
|
|
281
|
-
These are implementation tools, not the product story:
|
|
282
|
-
|
|
283
|
-
| Tool | What It Does |
|
|
284
|
-
|------|-------------|
|
|
285
|
-
| `excel_read_range` | Read data, values, formulas from any range |
|
|
286
|
-
| `excel_write_range` | Write values or formulas to ranges |
|
|
287
|
-
| `excel_create_table` | Convert ranges to structured Excel tables |
|
|
288
|
-
| `excel_create_chart` | Create charts (column, bar, line, pie, scatter, area, doughnut) |
|
|
289
|
-
| `excel_get_workbook_info` | Get workbook metadata — sheets, tables, named ranges |
|
|
290
|
-
| `excel_format_range` | Apply formatting — fonts, colors, borders, number formats |
|
|
291
|
-
| `excel_insert_rows` | Insert rows into worksheets |
|
|
292
|
-
| `excel_delete_rows` | Delete rows from worksheets |
|
|
293
|
-
| `excel_add_worksheet` | Add new worksheets |
|
|
294
|
-
| `excel_run_formula` | Evaluate formulas without writing to cells |
|
|
295
|
-
|
|
296
183
|
---
|
|
297
184
|
|
|
298
185
|
## How It Works
|
|
299
186
|
|
|
300
|
-
```text
|
|
301
|
-
agentxl start
|
|
302
|
-
→ Local HTTPS server on localhost:3001
|
|
303
|
-
→ Serves taskpane UI at /taskpane
|
|
304
|
-
→ Connects to your chosen model
|
|
305
|
-
|
|
306
|
-
You point AgentXL at a local folder
|
|
307
|
-
→ PDFs, statements, exports, agreements, support files
|
|
308
|
-
→ Agent searches the folder
|
|
309
|
-
→ Agent reads the relevant documents
|
|
310
|
-
→ You ask a question or request a mapping
|
|
311
|
-
|
|
312
|
-
Excel loads the taskpane
|
|
313
|
-
→ Agent returns a grounded result with source traceability
|
|
314
|
-
→ Taskpane writes the output into Excel via Office.js
|
|
315
|
-
```
|
|
316
|
-
|
|
317
|
-
### Architecture
|
|
318
|
-
|
|
319
187
|
```text
|
|
320
188
|
┌─────────────────────────────────────────────────────────────┐
|
|
321
189
|
│ YOUR MACHINE │
|
|
@@ -326,7 +194,7 @@ Excel loads the taskpane
|
|
|
326
194
|
│ ▼ │
|
|
327
195
|
│ ┌─────────────────┐ ┌───────────────────────────┐ │
|
|
328
196
|
│ │ Excel │ HTTPS │ AgentXL Server │ │
|
|
329
|
-
│ │ │◄──────►│ localhost:3001
|
|
197
|
+
│ │ │◄──────►│ localhost:3001 │ │
|
|
330
198
|
│ │ Taskpane UI │ │ │ │
|
|
331
199
|
│ │ Office.js │ │ agentic file search │ │
|
|
332
200
|
│ │ │ │ selective file reading │ │
|
|
@@ -338,32 +206,17 @@ Excel loads the taskpane
|
|
|
338
206
|
│ model API
|
|
339
207
|
▼
|
|
340
208
|
┌──────────────────────────┐
|
|
341
|
-
│ Anthropic / OpenAI /
|
|
342
|
-
│ OpenRouter / Azure /
|
|
343
|
-
│ Google / Copilot
|
|
209
|
+
│ Anthropic / OpenAI / │
|
|
210
|
+
│ OpenRouter / Azure / │
|
|
211
|
+
│ Google / Copilot │
|
|
344
212
|
└──────────────────────────┘
|
|
345
213
|
```
|
|
346
214
|
|
|
347
|
-
### Why no classic RAG?
|
|
348
|
-
|
|
349
|
-
Because most teams do not need a 9-layer retrieval stack to answer grounded questions from a folder of documents.
|
|
350
|
-
|
|
351
|
-
AgentXL starts simpler:
|
|
352
|
-
|
|
353
|
-
- local files
|
|
354
|
-
- direct parsing
|
|
355
|
-
- agentic search
|
|
356
|
-
- selective reading
|
|
357
|
-
- one model
|
|
358
|
-
- explicit evals
|
|
359
|
-
|
|
360
|
-
If scale later demands heavier infrastructure, add it later. Measure first.
|
|
361
|
-
|
|
362
215
|
---
|
|
363
216
|
|
|
364
217
|
## Supported Providers
|
|
365
218
|
|
|
366
|
-
### Subscriptions (sign in with your browser
|
|
219
|
+
### Subscriptions (sign in with your browser)
|
|
367
220
|
|
|
368
221
|
| Provider | What You Need | Best for |
|
|
369
222
|
|----------|---------------|----------|
|
|
@@ -389,94 +242,60 @@ If scale later demands heavier infrastructure, add it later. Measure first.
|
|
|
389
242
|
## Privacy & Security
|
|
390
243
|
|
|
391
244
|
- **Local-only server.** Binds to `127.0.0.1` — not accessible from your network.
|
|
392
|
-
- **Folder-first workflow.** You start from a local document folder on your machine.
|
|
393
245
|
- **No telemetry.** No analytics. No data collection. No phone-home.
|
|
394
246
|
- **No account required.** No sign-up with us. Ever.
|
|
395
247
|
- **Your API key stays local.** Stored in `~/.pi/agent/auth.json` on your machine.
|
|
396
248
|
- **Open source.** Read every line of code. MIT license.
|
|
397
249
|
|
|
398
|
-
When you ask the agent about your documents
|
|
250
|
+
When you ask the agent about your documents, the relevant content is sent to your chosen model provider as part of the prompt. This is the only external communication.
|
|
399
251
|
|
|
400
252
|
---
|
|
401
253
|
|
|
402
|
-
##
|
|
254
|
+
## CLI Reference
|
|
403
255
|
|
|
404
|
-
|
|
256
|
+
```text
|
|
257
|
+
agentxl start [--port 3001] [--verbose] Start the server
|
|
258
|
+
agentxl install [--open] Register add-in with Excel (one-time)
|
|
259
|
+
agentxl login Set up or change authentication
|
|
260
|
+
agentxl --version Print version
|
|
261
|
+
agentxl --help Show help
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
---
|
|
405
265
|
|
|
406
|
-
|
|
266
|
+
## Troubleshooting
|
|
267
|
+
|
|
268
|
+
### Taskpane is blank or won't load
|
|
407
269
|
|
|
408
270
|
1. **Is the server running?** Check for `✅ Server running` in your terminal.
|
|
409
271
|
2. **Does it work in the browser?** Open https://localhost:3001/taskpane/
|
|
410
|
-
|
|
411
|
-
- ❌ Browser warns about certificate → cert isn't trusted yet.
|
|
412
|
-
3. **Certificate not trusted?**
|
|
413
|
-
```bash
|
|
414
|
-
npx office-addin-dev-certs install
|
|
415
|
-
```
|
|
416
|
-
Then restart Excel.
|
|
417
|
-
4. **Browser works but not Excel?** Excel uses the OS trust store. Make sure the certificate authority is installed system-wide.
|
|
272
|
+
3. **Certificate not trusted?** Run `agentxl install` again — it handles cert trust.
|
|
418
273
|
|
|
419
274
|
### Add-in doesn't appear in Excel
|
|
420
275
|
|
|
421
|
-
|
|
422
|
-
2. Did you try the automated Windows onboarding path first?
|
|
423
|
-
- Start Menu: `Launch AgentXL onboarding`
|
|
424
|
-
- zip build: `Launch AgentXL Onboarding.cmd`
|
|
425
|
-
3. If automatic setup failed, did you add the catalog path in Trust Center → Trusted Add-in Catalogs?
|
|
426
|
-
4. Did you check **Show in Menu**?
|
|
427
|
-
5. Did you restart Excel?
|
|
428
|
-
6. Look in **Insert → My Add-ins → SHARED FOLDER**
|
|
429
|
-
|
|
430
|
-
### Port 3001 is already in use
|
|
431
|
-
|
|
432
|
-
```bash
|
|
433
|
-
agentxl start --port 3002
|
|
434
|
-
```
|
|
276
|
+
Run `agentxl install` — it registers the manifest automatically. Then restart Excel.
|
|
435
277
|
|
|
436
|
-
|
|
278
|
+
If that doesn't work, use the manual shared folder catalog method (see [Alternative install methods](#alternative-install-methods)).
|
|
437
279
|
|
|
438
|
-
###
|
|
280
|
+
### Port 3001 already in use
|
|
439
281
|
|
|
440
282
|
```bash
|
|
441
|
-
|
|
283
|
+
agentxl start --port 3002
|
|
442
284
|
```
|
|
443
285
|
|
|
444
|
-
This creates a self-contained ZIP in `release/windows/dist/` containing:
|
|
445
|
-
- Portable Node.js runtime (no system install needed)
|
|
446
|
-
- Built AgentXL app + production dependencies
|
|
447
|
-
- Manifest for Excel sideloading
|
|
448
|
-
- VBScript launchers (double-click to start)
|
|
449
|
-
|
|
450
|
-
GitHub Actions builds and publishes this automatically on tagged releases.
|
|
451
|
-
|
|
452
286
|
### "No model available"
|
|
453
287
|
|
|
454
288
|
```bash
|
|
455
289
|
agentxl login
|
|
456
290
|
```
|
|
457
291
|
|
|
458
|
-
###
|
|
459
|
-
|
|
460
|
-
Run `agentxl login` in another terminal. The taskpane detects the change automatically.
|
|
461
|
-
|
|
462
|
-
### "Server disconnected — reconnecting…"
|
|
463
|
-
|
|
464
|
-
Restart the server:
|
|
292
|
+
### Building the Windows release
|
|
465
293
|
|
|
466
294
|
```bash
|
|
467
|
-
|
|
295
|
+
npm run prepare:release:win
|
|
468
296
|
```
|
|
469
297
|
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
## CLI Reference
|
|
473
|
-
|
|
474
|
-
```text
|
|
475
|
-
agentxl start [--port 3001] [--verbose] Start the server
|
|
476
|
-
agentxl login Set up or change authentication
|
|
477
|
-
agentxl --version Print version
|
|
478
|
-
agentxl --help Show help
|
|
479
|
-
```
|
|
298
|
+
Creates a self-contained ZIP in `release/windows/dist/` — portable Node.js + app + launchers. GitHub Actions builds this automatically on tagged releases.
|
|
480
299
|
|
|
481
300
|
---
|
|
482
301
|
|
|
@@ -486,8 +305,6 @@ agentxl --help Show help
|
|
|
486
305
|
- **Microsoft Excel** desktop (Windows or Mac)
|
|
487
306
|
- **An AI provider** — subscription or API key
|
|
488
307
|
|
|
489
|
-
> Excel for the web is not supported (Office add-in limitation).
|
|
490
|
-
|
|
491
308
|
---
|
|
492
309
|
|
|
493
310
|
## Development
|
|
@@ -497,35 +314,10 @@ git clone https://github.com/satish860/agentxl.git
|
|
|
497
314
|
cd agentxl
|
|
498
315
|
npm install
|
|
499
316
|
npm run build
|
|
500
|
-
npm test
|
|
501
|
-
npm run test:e2e # 12 end-to-end tests (Playwright)
|
|
317
|
+
npm test
|
|
502
318
|
node bin/agentxl.js start
|
|
503
319
|
```
|
|
504
320
|
|
|
505
|
-
### Project Structure
|
|
506
|
-
|
|
507
|
-
```text
|
|
508
|
-
bin/agentxl.js CLI entry point
|
|
509
|
-
bin/agentxl-folder-picker.exe Native folder picker (Windows)
|
|
510
|
-
src/server/index.ts HTTPS server + API endpoints
|
|
511
|
-
src/server/certs.ts Certificate generation
|
|
512
|
-
src/server/workbook-identity.ts Workbook identity resolution
|
|
513
|
-
src/server/workbook-folder-store.ts Workbook → folder mapping (JSON)
|
|
514
|
-
src/server/folder-scanner.ts Recursive file scanner + inventory
|
|
515
|
-
src/server/folder-picker.ts Native/PowerShell folder picker
|
|
516
|
-
src/agent/session.ts Pi SDK agent session (cwd-aware)
|
|
517
|
-
src/agent/models.ts Model selection
|
|
518
|
-
taskpane/src/app.tsx Taskpane UI orchestrator
|
|
519
|
-
taskpane/src/hooks/ useAgentStatus, useChatStream,
|
|
520
|
-
useWorkbookIdentity, useFolderLink
|
|
521
|
-
taskpane/src/components/ WelcomeScreen, FolderLinkScreen,
|
|
522
|
-
MessageBubble (tool call badges),
|
|
523
|
-
ChatInput, ThinkingBlock
|
|
524
|
-
taskpane/src/lib/ API client, stream handler, types
|
|
525
|
-
manifest/manifest.xml Office add-in manifest
|
|
526
|
-
tests/ 105 tests (unit + integration + e2e)
|
|
527
|
-
```
|
|
528
|
-
|
|
529
321
|
---
|
|
530
322
|
|
|
531
323
|
## Roadmap
|
|
@@ -539,24 +331,6 @@ tests/ 105 tests (unit + integration + e2e)
|
|
|
539
331
|
|
|
540
332
|
---
|
|
541
333
|
|
|
542
|
-
## Contributing
|
|
543
|
-
|
|
544
|
-
Contributions welcome. MIT license.
|
|
545
|
-
|
|
546
|
-
```bash
|
|
547
|
-
npm test # 101 tests should pass
|
|
548
|
-
npm run test:e2e # 12 e2e tests should pass
|
|
549
|
-
```
|
|
550
|
-
|
|
551
|
-
If you contribute, keep the philosophy simple:
|
|
552
|
-
|
|
553
|
-
- fewer layers
|
|
554
|
-
- grounded outputs
|
|
555
|
-
- explicit traceability
|
|
556
|
-
- evals before infrastructure
|
|
557
|
-
|
|
558
|
-
---
|
|
559
|
-
|
|
560
334
|
## License
|
|
561
335
|
|
|
562
336
|
MIT — [DeltaXY](https://deltaxy.ai)
|
package/bin/agentxl.js
CHANGED
|
@@ -226,6 +226,7 @@ AgentXL v${VERSION} — AI agent for Microsoft Excel
|
|
|
226
226
|
|
|
227
227
|
Usage:
|
|
228
228
|
agentxl start [options] Start the AgentXL server
|
|
229
|
+
agentxl install Register the add-in with Excel (one-time)
|
|
229
230
|
agentxl login Set up or change API credentials
|
|
230
231
|
agentxl --version Print version
|
|
231
232
|
agentxl --help Show this help
|
|
@@ -235,7 +236,8 @@ Options:
|
|
|
235
236
|
--verbose Log all HTTP requests
|
|
236
237
|
|
|
237
238
|
Examples:
|
|
238
|
-
agentxl
|
|
239
|
+
agentxl install # one-time: register with Excel
|
|
240
|
+
agentxl start # run the server
|
|
239
241
|
agentxl start --port 3002
|
|
240
242
|
agentxl login
|
|
241
243
|
`);
|
|
@@ -329,30 +331,51 @@ async function start() {
|
|
|
329
331
|
step("ℹ️", `Folder picker: ${pickerLabel}`);
|
|
330
332
|
}
|
|
331
333
|
|
|
332
|
-
// ──
|
|
334
|
+
// ── Step 7: Auto-register add-in with Excel (first run) ─────────────
|
|
333
335
|
const manifestPath = resolve(__dirname, "..", "manifest", "manifest.xml");
|
|
334
|
-
const manifestExists = existsSync(manifestPath);
|
|
335
336
|
|
|
337
|
+
if (existsSync(manifestPath)) {
|
|
338
|
+
let alreadyRegistered = false;
|
|
339
|
+
try {
|
|
340
|
+
const devSettings = await import("office-addin-dev-settings");
|
|
341
|
+
const registered = await devSettings.getRegisteredAddIns();
|
|
342
|
+
alreadyRegistered = registered.some(a => a.manifestPath === manifestPath);
|
|
343
|
+
} catch (_) {}
|
|
344
|
+
|
|
345
|
+
if (!alreadyRegistered) {
|
|
346
|
+
step("⏳", "First run — registering AgentXL with Excel...");
|
|
347
|
+
try {
|
|
348
|
+
const devSettings = await import("office-addin-dev-settings");
|
|
349
|
+
await devSettings.registerAddIn(manifestPath);
|
|
350
|
+
step("✅", "Add-in registered with Excel");
|
|
351
|
+
} catch (err) {
|
|
352
|
+
step("⚠️", `Auto-registration failed: ${err.message}`);
|
|
353
|
+
step(" ", "Run 'agentxl install' manually, or add the manifest folder to Excel Trust Center:");
|
|
354
|
+
step(" ", ` ${dirname(manifestPath)}`);
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
try {
|
|
358
|
+
const devSettings = await import("office-addin-dev-settings");
|
|
359
|
+
await devSettings.ensureLoopbackIsEnabled(manifestPath, false);
|
|
360
|
+
} catch (_) {}
|
|
361
|
+
} else {
|
|
362
|
+
step("✅", "Excel add-in registered");
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
// ── Post-start guidance ────────────────────────────────────────────────
|
|
336
367
|
console.log(`
|
|
337
368
|
─────────────────────────────────────────────────
|
|
338
|
-
All systems go
|
|
369
|
+
All systems go!
|
|
339
370
|
─────────────────────────────────────────────────
|
|
340
371
|
|
|
341
|
-
|
|
342
|
-
|
|
372
|
+
📎 Open Excel → AgentXL is on the Home ribbon
|
|
373
|
+
(If you don't see it: Insert → My Add-ins → SHARED FOLDER → AgentXL)
|
|
343
374
|
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
2. Trusted Add-in Catalogs → add path: ${manifestExists ? dirname(manifestPath) : "[manifest folder]"}
|
|
347
|
-
3. Check "Show in Menu" → OK → OK
|
|
348
|
-
4. Restart Excel
|
|
349
|
-
5. Insert → My Add-ins → SHARED FOLDER → AgentXL → Add
|
|
350
|
-
|
|
351
|
-
After setup, just run 'agentxl start' and click
|
|
352
|
-
AgentXL on the Home ribbon. No re-sideloading needed.
|
|
375
|
+
🌐 Or test in browser first:
|
|
376
|
+
https://localhost:${port}/taskpane/
|
|
353
377
|
|
|
354
|
-
💬 Try
|
|
355
|
-
"What can you help me with in this workbook?"
|
|
378
|
+
💬 Try: "What can you help me with in this workbook?"
|
|
356
379
|
`);
|
|
357
380
|
|
|
358
381
|
// ── Graceful shutdown ──────────────────────────────────────────────────
|
|
@@ -370,6 +393,86 @@ async function start() {
|
|
|
370
393
|
process.on("SIGTERM", shutdown);
|
|
371
394
|
}
|
|
372
395
|
|
|
396
|
+
async function install() {
|
|
397
|
+
console.log(`
|
|
398
|
+
┌──────────────────────────────────────┐
|
|
399
|
+
│ AgentXL Excel Registration │
|
|
400
|
+
└──────────────────────────────────────┘
|
|
401
|
+
`);
|
|
402
|
+
|
|
403
|
+
const manifestPath = resolve(__dirname, "..", "manifest", "manifest.xml");
|
|
404
|
+
if (!existsSync(manifestPath)) {
|
|
405
|
+
step("❌", `Manifest not found: ${manifestPath}`);
|
|
406
|
+
process.exit(1);
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
// ── Step 1: HTTPS certificates ─────────────────────────────────────────
|
|
410
|
+
try {
|
|
411
|
+
step("⏳", "Ensuring HTTPS certificates are trusted...");
|
|
412
|
+
const devCerts = await import("office-addin-dev-certs");
|
|
413
|
+
await devCerts.ensureCertificatesAreInstalled();
|
|
414
|
+
step("✅", "HTTPS certificate trusted");
|
|
415
|
+
} catch (err) {
|
|
416
|
+
step("⚠️", `Certificate setup: ${err.message}`);
|
|
417
|
+
}
|
|
418
|
+
|
|
419
|
+
// ── Step 2: Register add-in ────────────────────────────────────────────
|
|
420
|
+
try {
|
|
421
|
+
step("⏳", "Registering AgentXL with Excel...");
|
|
422
|
+
const devSettings = await import("office-addin-dev-settings");
|
|
423
|
+
await devSettings.registerAddIn(manifestPath);
|
|
424
|
+
step("✅", "Add-in registered with Excel");
|
|
425
|
+
} catch (err) {
|
|
426
|
+
step("❌", `Registration failed: ${err.message}`);
|
|
427
|
+
console.log(`
|
|
428
|
+
Fallback: manually add this folder to Excel's Trusted Add-in Catalogs:
|
|
429
|
+
${dirname(manifestPath)}
|
|
430
|
+
|
|
431
|
+
Steps:
|
|
432
|
+
1. Excel → File → Options → Trust Center → Trust Center Settings
|
|
433
|
+
2. Trusted Add-in Catalogs → paste the path above
|
|
434
|
+
3. Check "Show in Menu" → OK → OK
|
|
435
|
+
4. Restart Excel
|
|
436
|
+
5. Insert → My Add-ins → SHARED FOLDER → AgentXL → Add
|
|
437
|
+
`);
|
|
438
|
+
process.exit(1);
|
|
439
|
+
}
|
|
440
|
+
|
|
441
|
+
// ── Step 3: Enable loopback ────────────────────────────────────────────
|
|
442
|
+
try {
|
|
443
|
+
const devSettings = await import("office-addin-dev-settings");
|
|
444
|
+
await devSettings.ensureLoopbackIsEnabled(manifestPath, false);
|
|
445
|
+
step("✅", "Localhost loopback enabled");
|
|
446
|
+
} catch (err) {
|
|
447
|
+
step("⚠️", `Loopback: ${err.message}`);
|
|
448
|
+
}
|
|
449
|
+
|
|
450
|
+
console.log(`
|
|
451
|
+
─────────────────────────────────────────────────
|
|
452
|
+
Done! AgentXL is registered with Excel.
|
|
453
|
+
─────────────────────────────────────────────────
|
|
454
|
+
|
|
455
|
+
Next steps:
|
|
456
|
+
1. Run: agentxl start
|
|
457
|
+
2. Open Excel → AgentXL appears on the Home ribbon
|
|
458
|
+
|
|
459
|
+
To open Excel with AgentXL right now:
|
|
460
|
+
agentxl install --open
|
|
461
|
+
`);
|
|
462
|
+
|
|
463
|
+
// Optionally open Excel
|
|
464
|
+
if (hasFlag("open")) {
|
|
465
|
+
try {
|
|
466
|
+
const devSettings = await import("office-addin-dev-settings");
|
|
467
|
+
const manifestLib = await import("office-addin-manifest");
|
|
468
|
+
step("⏳", "Opening Excel with AgentXL...");
|
|
469
|
+
await devSettings.sideloadAddIn(manifestPath, manifestLib.OfficeApp.Excel, false, devSettings.AppType.Desktop);
|
|
470
|
+
} catch (err) {
|
|
471
|
+
step("⚠️", `Could not open Excel: ${err.message}`);
|
|
472
|
+
}
|
|
473
|
+
}
|
|
474
|
+
}
|
|
475
|
+
|
|
373
476
|
async function login() {
|
|
374
477
|
console.log("");
|
|
375
478
|
const authed = await runAuthFlow();
|
|
@@ -398,6 +501,11 @@ if (command === "start") {
|
|
|
398
501
|
console.error(`\n ❌ ${err.message || err}\n`);
|
|
399
502
|
process.exit(1);
|
|
400
503
|
});
|
|
504
|
+
} else if (command === "install") {
|
|
505
|
+
install().catch((err) => {
|
|
506
|
+
console.error(`\n ❌ ${err.message || err}\n`);
|
|
507
|
+
process.exit(1);
|
|
508
|
+
});
|
|
401
509
|
} else if (command === "login") {
|
|
402
510
|
login().catch((err) => {
|
|
403
511
|
console.error(`\n ❌ ${err.message || err}\n`);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "agentxl",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.3",
|
|
4
4
|
"description": "Local-first document-to-Excel agent for traceable workpapers and evidence-heavy workflows",
|
|
5
5
|
"author": "DeltaXY <hello@deltaxy.ai>",
|
|
6
6
|
"license": "MIT",
|
|
@@ -33,6 +33,8 @@
|
|
|
33
33
|
"files": [
|
|
34
34
|
"bin/",
|
|
35
35
|
"dist/",
|
|
36
|
+
"scripts/enable-excel-addin.mjs",
|
|
37
|
+
"scripts/setup-and-start.cmd",
|
|
36
38
|
"taskpane/dist/",
|
|
37
39
|
"manifest/",
|
|
38
40
|
"package.json",
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { existsSync } from "fs";
|
|
2
|
+
import { resolve } from "path";
|
|
3
|
+
import * as devCerts from "office-addin-dev-certs";
|
|
4
|
+
import * as devSettings from "office-addin-dev-settings";
|
|
5
|
+
import * as manifestLib from "office-addin-manifest";
|
|
6
|
+
|
|
7
|
+
function log(message) {
|
|
8
|
+
console.log(`[enable-excel-addin] ${message}`);
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
function fail(message) {
|
|
12
|
+
console.error(`[enable-excel-addin] ${message}`);
|
|
13
|
+
process.exit(1);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
const rawManifestPath = process.argv[2];
|
|
17
|
+
if (!rawManifestPath) {
|
|
18
|
+
fail("Missing manifest path argument.");
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
const manifestPath = resolve(rawManifestPath);
|
|
22
|
+
if (!existsSync(manifestPath)) {
|
|
23
|
+
fail(`Manifest not found: ${manifestPath}`);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
const openExcel = process.argv.includes("--open-excel");
|
|
27
|
+
const machineCert = process.argv.includes("--machine-cert");
|
|
28
|
+
|
|
29
|
+
try {
|
|
30
|
+
log(`Ensuring Office localhost certificate is trusted (${machineCert ? "machine" : "user"} scope)...`);
|
|
31
|
+
await devCerts.ensureCertificatesAreInstalled(undefined, undefined, machineCert);
|
|
32
|
+
} catch (error) {
|
|
33
|
+
log(`Certificate setup warning: ${error instanceof Error ? error.message : String(error)}`);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
try {
|
|
37
|
+
log("Registering AgentXL with Office developer settings...");
|
|
38
|
+
await devSettings.registerAddIn(manifestPath);
|
|
39
|
+
} catch (error) {
|
|
40
|
+
fail(`Could not register add-in: ${error instanceof Error ? error.message : String(error)}`);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
try {
|
|
44
|
+
log("Ensuring Office loopback access for localhost...");
|
|
45
|
+
await devSettings.ensureLoopbackIsEnabled(manifestPath, false);
|
|
46
|
+
} catch (error) {
|
|
47
|
+
log(`Loopback setup warning: ${error instanceof Error ? error.message : String(error)}`);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
if (openExcel) {
|
|
51
|
+
try {
|
|
52
|
+
log("Opening Excel with AgentXL sideloaded...");
|
|
53
|
+
await devSettings.sideloadAddIn(manifestPath, manifestLib.OfficeApp.Excel, false, devSettings.AppType.Desktop);
|
|
54
|
+
} catch (error) {
|
|
55
|
+
fail(`Could not open Excel with AgentXL: ${error instanceof Error ? error.message : String(error)}`);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
log("AgentXL is ready for Excel.");
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
@echo off
|
|
2
|
+
title AgentXL Setup
|
|
3
|
+
echo.
|
|
4
|
+
echo ┌──────────────────────────────────────┐
|
|
5
|
+
echo │ AgentXL Quick Setup │
|
|
6
|
+
echo └──────────────────────────────────────┘
|
|
7
|
+
echo.
|
|
8
|
+
|
|
9
|
+
:: ── Step 1: Check Node.js ─────────────────────────────────────────────
|
|
10
|
+
where node >nul 2>nul
|
|
11
|
+
if %ERRORLEVEL% neq 0 (
|
|
12
|
+
echo ❌ Node.js not found. Install Node.js 20+ from https://nodejs.org
|
|
13
|
+
echo.
|
|
14
|
+
pause
|
|
15
|
+
exit /b 1
|
|
16
|
+
)
|
|
17
|
+
for /f "tokens=*" %%i in ('node -v') do set NODE_VER=%%i
|
|
18
|
+
echo ✅ Node.js %NODE_VER%
|
|
19
|
+
|
|
20
|
+
:: ── Step 2: Install AgentXL ───────────────────────────────────────────
|
|
21
|
+
echo.
|
|
22
|
+
echo 📦 Installing AgentXL...
|
|
23
|
+
call npm install -g agentxl
|
|
24
|
+
if %ERRORLEVEL% neq 0 (
|
|
25
|
+
echo ❌ npm install failed
|
|
26
|
+
pause
|
|
27
|
+
exit /b 1
|
|
28
|
+
)
|
|
29
|
+
echo ✅ AgentXL installed
|
|
30
|
+
|
|
31
|
+
:: ── Step 3: Find manifest path ────────────────────────────────────────
|
|
32
|
+
for /f "tokens=*" %%i in ('npm root -g') do set NPM_GLOBAL=%%i
|
|
33
|
+
set MANIFEST=%NPM_GLOBAL%\agentxl\manifest\manifest.xml
|
|
34
|
+
if not exist "%MANIFEST%" (
|
|
35
|
+
echo ❌ Could not find manifest at %MANIFEST%
|
|
36
|
+
pause
|
|
37
|
+
exit /b 1
|
|
38
|
+
)
|
|
39
|
+
echo ✅ Manifest: %MANIFEST%
|
|
40
|
+
|
|
41
|
+
:: ── Step 4: Register add-in with Excel ────────────────────────────────
|
|
42
|
+
echo.
|
|
43
|
+
echo 📎 Registering AgentXL with Excel...
|
|
44
|
+
set ENABLE_SCRIPT=%NPM_GLOBAL%\agentxl\scripts\enable-excel-addin.mjs
|
|
45
|
+
if exist "%ENABLE_SCRIPT%" (
|
|
46
|
+
node "%ENABLE_SCRIPT%" "%MANIFEST%"
|
|
47
|
+
echo ✅ Add-in registered
|
|
48
|
+
) else (
|
|
49
|
+
echo ⚠️ enable-excel-addin.mjs not found, skipping auto-registration
|
|
50
|
+
echo You can manually add the manifest folder to Excel Trust Center:
|
|
51
|
+
echo %NPM_GLOBAL%\agentxl\manifest
|
|
52
|
+
)
|
|
53
|
+
|
|
54
|
+
:: ── Step 5: Start server ──────────────────────────────────────────────
|
|
55
|
+
echo.
|
|
56
|
+
echo 🚀 Starting AgentXL server...
|
|
57
|
+
echo ─────────────────────────────────────────
|
|
58
|
+
echo.
|
|
59
|
+
call agentxl start
|