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 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 being built for that workflow:
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
- ## Windows Quick Start (no coding required)
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
- This is the simplest cross-platform install path.
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
- **Option B Windows release (no Node.js needed)**
59
+ After `agentxl install`, open Excel → **AgentXL** appears on the **Home** ribbon. No Trust Center. No manual sideloading.
78
60
 
79
- 1. Download the latest `.zip` from [GitHub Releases](https://github.com/satish860/agentxl/releases)
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
- The release ZIP is self-contained: it bundles its own Node.js runtime, the built app, and production dependencies. No separate Node.js installation required.
63
+ ---
84
64
 
85
- ### 2. Start
65
+ ### Windows — no coding required
86
66
 
87
- ```bash
88
- agentxl start
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 CLI walks you through setup:
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
- ### 3. Choose your AI provider
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
- ### 4. Verify in browser
91
+ ---
114
92
 
115
- Open **https://localhost:3001/taskpane/** in your browser.
93
+ ### Start from a document folder
116
94
 
117
- You should see the AgentXL UI. This confirms the server, HTTPS, and UI all work before you touch Excel.
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
- ### 5. Add to Excel
99
+ Example prompts:
120
100
 
121
- Choose one method:
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
- **Option A Office Store (simplest)**
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 Option B or C in the meantime.
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 (no Trust Center needed)**
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 ask Excel a question.”
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 inspired by real document-processing systems:
209
-
210
- 1. **Parse the files**
211
- - PDFs, Excel files, CSVs, statements, agreements, support docs
212
- 2. **Search the folder agentically**
213
- - inspect filenames, structure, metadata, and contents
214
- - read the right files instead of pre-building a giant stack
215
- 3. **Ask the model to extract or answer**
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 — no API key)
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 or workbook, the relevant content is sent to your chosen model provider as part of the prompt. This is the only external communication.
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
- ## Troubleshooting
254
+ ## CLI Reference
403
255
 
404
- ### Taskpane is blank or won't load in Excel
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
- **Most common first-run issue.** Usually means Excel doesn't trust the HTTPS certificate.
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
- - UI loads server and cert are fine. Issue is Excel setup.
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
- 1. Is the server running?
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
- > If you change the port, update `manifest/manifest.xml` to match.
278
+ If that doesn't work, use the manual shared folder catalog method (see [Alternative install methods](#alternative-install-methods)).
437
279
 
438
- ### Building the Windows release
280
+ ### Port 3001 already in use
439
281
 
440
282
  ```bash
441
- npm run prepare:release:win
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
- ### Taskpane says "Waiting for credentials…"
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
- agentxl start
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 # 101 unit/integration tests
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 start
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
- // ── Post-start guidance ────────────────────────────────────────────────
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. Here's what to do next:
369
+ All systems go!
339
370
  ─────────────────────────────────────────────────
340
371
 
341
- 🌐 Test in browser (confirm everything works):
342
- https://localhost:${port}/taskpane/
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
- 📎 Load in Excel (one-time setup):
345
- 1. Excel → File → Options → Trust Center → Trust Center Settings
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 your first message:
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.2",
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