@bilig/workpaper 0.157.0 → 0.160.0
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/AGENTS.md +12 -5
- package/README.md +4 -0
- package/SKILL.md +9 -0
- package/dist/work-paper-mcp-stdio-bin.js +11 -1
- package/dist/work-paper-mcp-stdio-bin.js.map +1 -1
- package/package.json +6 -6
- package/server.json +3 -3
- package/dist/ai-sdk.test.d.ts +0 -1
- package/dist/ai-sdk.test.js +0 -69
- package/dist/ai-sdk.test.js.map +0 -1
package/AGENTS.md
CHANGED
|
@@ -15,18 +15,23 @@ Use this file when an AI coding agent, MCP client, or tool host needs workbook f
|
|
|
15
15
|
`npx --yes skills@latest add proompteng/bilig --skill bilig-workpaper --list`.
|
|
16
16
|
8. If you are using GitHub Copilot or VS Code agent mode in a cloned checkout,
|
|
17
17
|
use `.github/copilot-instructions.md`,
|
|
18
|
+
`.github/instructions/bilig-workpaper.instructions.md`,
|
|
18
19
|
`.github/prompts/bilig-workpaper-proof.prompt.md`, and
|
|
19
20
|
`.vscode/mcp.json`.
|
|
20
|
-
9. If you are inside a cloned Bilig repository with Claude Code,
|
|
21
|
-
|
|
22
|
-
|
|
21
|
+
9. If you are inside a cloned Bilig repository with Claude Code, read
|
|
22
|
+
`CLAUDE.md` first, then use the project skill at
|
|
23
|
+
`.claude/skills/bilig-workpaper/SKILL.md` or invoke the explicit
|
|
24
|
+
formula-proof command from
|
|
23
25
|
`.claude/commands/bilig-workpaper-proof.md`.
|
|
24
|
-
10. If you are using
|
|
26
|
+
10. If you are using OpenCode, use `opencode.jsonc` and
|
|
27
|
+
`.opencode/agents/bilig-workpaper.md`.
|
|
28
|
+
11. If you are using Cursor, Windsurf/Cascade, Cline, or Continue, use
|
|
25
29
|
`.cursor/rules/bilig-workpaper.mdc` or
|
|
30
|
+
`.devin/rules/bilig-workpaper.md`,
|
|
26
31
|
`.windsurf/rules/bilig-workpaper.md`,
|
|
27
32
|
`.clinerules/bilig-workpaper.md`, or
|
|
28
33
|
`.continue/rules/bilig-workpaper.md`.
|
|
29
|
-
|
|
34
|
+
12. Start the MCP server or import `@bilig/workpaper` directly.
|
|
30
35
|
|
|
31
36
|
Remote MCP clients that support Streamable HTTP can smoke-test the stateless
|
|
32
37
|
demo endpoint at `https://bilig.proompteng.ai/mcp`. Directory scanners that inspect the
|
|
@@ -61,10 +66,12 @@ npm exec --yes --package @bilig/workpaper@latest -- bilig-agent-start --json
|
|
|
61
66
|
npm exec --yes --package @bilig/workpaper@latest -- bilig-evaluate --door workpaper-service --json
|
|
62
67
|
npm exec --yes --package @bilig/workpaper@latest -- bilig-evaluate --door agent-mcp --json
|
|
63
68
|
npm exec --yes --package @bilig/workpaper@latest -- bilig-evaluate --door agent-mcp --scenario provider-backed --json
|
|
69
|
+
npm exec --yes --package @bilig/xlsx-formula-recalc@latest -- bilig-evaluate --door workbook-compatibility --json
|
|
64
70
|
npm exec --yes --package @bilig/xlsx-formula-recalc@latest -- bilig-evaluate --door xlsx-cache --json
|
|
65
71
|
npm exec --package @bilig/workpaper@latest -- bilig-agent-challenge --json
|
|
66
72
|
npm exec --package @bilig/workpaper@latest -- bilig-mcp-challenge --json
|
|
67
73
|
npm exec --package @bilig/workpaper@latest -- bilig-workpaper-mcp --workpaper ./pricing.workpaper.json --init-demo-workpaper --writable
|
|
74
|
+
npm exec --package @bilig/workpaper@latest -- bilig-workpaper-mcp --from-xlsx ./pricing.xlsx --workpaper ./.bilig/pricing.workpaper.json --writable
|
|
68
75
|
npm exec --package @bilig/workpaper@latest -- bilig-formula-clinic ./reduced.xlsx --cells "Summary!B7,Inputs!B2"
|
|
69
76
|
```
|
|
70
77
|
|
package/README.md
CHANGED
|
@@ -120,6 +120,7 @@ not the first-run path:
|
|
|
120
120
|
| FastMCP Python client for hosted and local stdio checks | <https://proompteng.github.io/bilig/fastmcp-workpaper-client.html> |
|
|
121
121
|
| Agno MCPTools workbook readback | <https://proompteng.github.io/bilig/agno-workpaper-mcp.html> |
|
|
122
122
|
| Pydantic AI MCPToolset typed readback | <https://proompteng.github.io/bilig/pydantic-ai-workpaper-mcp.html> |
|
|
123
|
+
| Google ADK McpToolset workbook readback | <https://proompteng.github.io/bilig/google-adk-workpaper-mcp.html> |
|
|
123
124
|
| Hugging Face smolagents tool | <https://proompteng.github.io/bilig/smolagents-workpaper-tool.html> |
|
|
124
125
|
| Hugging Face Gradio MCP Space | <https://proompteng.github.io/bilig/huggingface-workpaper-space.html> |
|
|
125
126
|
|
|
@@ -250,6 +251,9 @@ The challenge commands edit one input, recalculate dependent formulas, export
|
|
|
250
251
|
WorkPaper JSON, restore it, and print a `verified: true` proof object.
|
|
251
252
|
Use `--from-xlsx` when the agent already has an XLSX file: Bilig imports it once
|
|
252
253
|
into persisted WorkPaper JSON, then starts the same file-backed MCP server.
|
|
254
|
+
That XLSX-backed MCP path also lists `analyze_workbook_risk`, a read-only tool
|
|
255
|
+
fixed to the source workbook passed at startup. It reports workbook risk
|
|
256
|
+
indicators before an agent trusts the imported WorkPaper and does not certify Excel compatibility.
|
|
253
257
|
|
|
254
258
|
## Agent Adoption Kit
|
|
255
259
|
|
package/SKILL.md
CHANGED
|
@@ -111,6 +111,12 @@ treat its returned `tools` array as the source of truth for the currently publis
|
|
|
111
111
|
- `export_workpaper_document`
|
|
112
112
|
- `validate_formula`
|
|
113
113
|
|
|
114
|
+
When the server is started through `@bilig/workpaper@latest` with
|
|
115
|
+
`--from-xlsx ./pricing.xlsx --workpaper ./.bilig/pricing.workpaper.json`,
|
|
116
|
+
`tools/list` also includes `analyze_workbook_risk`. That tool is fixed to
|
|
117
|
+
the source XLSX passed at startup and reports workbook risk indicators before an
|
|
118
|
+
agent trusts the imported WorkPaper. It does not certify Excel compatibility.
|
|
119
|
+
|
|
114
120
|
After a write, always read the dependent output cell and export the WorkPaper
|
|
115
121
|
document. If the listed tool set includes `set_cell_contents_and_readback`,
|
|
116
122
|
prefer it for stateless clients because the edit and dependent readback happen
|
|
@@ -203,6 +209,8 @@ If any readback step fails, report the blocker instead of claiming the workbook
|
|
|
203
209
|
- Agent handbook: https://proompteng.github.io/bilig/headless-workpaper-agent-handbook.html
|
|
204
210
|
- Agent workbook challenge: https://proompteng.github.io/bilig/agent-workbook-challenge.html
|
|
205
211
|
- MCP server guide: https://proompteng.github.io/bilig/mcp-workpaper-tool-server.html
|
|
212
|
+
- OpenHands MCP setup: https://proompteng.github.io/bilig/openhands-workpaper-mcp.html
|
|
213
|
+
- OpenCode MCP setup: https://proompteng.github.io/bilig/opencode-workpaper-mcp.html
|
|
206
214
|
- Open WebUI tool setup: https://proompteng.github.io/bilig/open-webui-workpaper-mcp.html
|
|
207
215
|
- LobeHub MCP setup: https://proompteng.github.io/bilig/lobehub-workpaper-mcp.html
|
|
208
216
|
- AnythingLLM MCP setup: https://proompteng.github.io/bilig/anythingllm-workpaper-mcp.html
|
|
@@ -223,5 +231,6 @@ If any readback step fails, report the blocker instead of claiming the workbook
|
|
|
223
231
|
- Kestra Node flow: https://proompteng.github.io/bilig/kestra-workpaper-flow.html
|
|
224
232
|
- Prefect flow: https://proompteng.github.io/bilig/prefect-workpaper-flow.html
|
|
225
233
|
- XLSX formula clinic: https://proompteng.github.io/bilig/formula-bug-clinic.html
|
|
234
|
+
- Stale XLSX fixture command: npm exec --package @bilig/xlsx-formula-recalc@latest -- xlsx-cache-doctor ./reduced.xlsx --json
|
|
226
235
|
- Compatibility limits: https://proompteng.github.io/bilig/where-bilig-is-not-excel-compatible-yet.html
|
|
227
236
|
- Repository: https://github.com/proompteng/bilig
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { buildDemoWorkPaper, createFileBackedWorkPaperMcpToolServer, createFileBackedWorkPaperMcpToolServerFromFile, parseWorkPaperMcpStdioCliArgs, runDemoWorkPaperMcpStdioServer, workPaperMcpStdioHelpText, } from '
|
|
2
|
+
import { buildDemoWorkPaper, createFileBackedWorkPaperMcpToolServer, createFileBackedWorkPaperMcpToolServerFromFile, createFileBackedWorkPaperMcpToolServerFromXlsxFile, parseWorkPaperMcpStdioCliArgs, runDemoWorkPaperMcpStdioServer, withXlsxWorkbookRiskTool, workPaperMcpStdioHelpText, } from 'bilig-workpaper/mcp';
|
|
3
3
|
const cliOptions = parseWorkPaperMcpStdioCliArgs(process.argv.slice(2));
|
|
4
4
|
if (cliOptions.help) {
|
|
5
5
|
process.stdout.write(workPaperMcpStdioHelpText());
|
|
@@ -17,6 +17,16 @@ if (cliOptions.demoWorkPaperTools) {
|
|
|
17
17
|
else if (cliOptions.workpaperPath === undefined) {
|
|
18
18
|
runDemoWorkPaperMcpStdioServer();
|
|
19
19
|
}
|
|
20
|
+
else if (cliOptions.fromXlsxPath !== undefined) {
|
|
21
|
+
runDemoWorkPaperMcpStdioServer({
|
|
22
|
+
server: withXlsxWorkbookRiskTool(createFileBackedWorkPaperMcpToolServerFromXlsxFile({
|
|
23
|
+
fromXlsxPath: cliOptions.fromXlsxPath,
|
|
24
|
+
overwriteWorkPaper: cliOptions.overwriteWorkPaper,
|
|
25
|
+
workpaperPath: cliOptions.workpaperPath,
|
|
26
|
+
writable: cliOptions.writable,
|
|
27
|
+
}), { xlsxPath: cliOptions.fromXlsxPath }),
|
|
28
|
+
});
|
|
29
|
+
}
|
|
20
30
|
else {
|
|
21
31
|
runDemoWorkPaperMcpStdioServer({
|
|
22
32
|
server: createFileBackedWorkPaperMcpToolServerFromFile({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"work-paper-mcp-stdio-bin.js","sourceRoot":"","sources":["../src/work-paper-mcp-stdio-bin.ts"],"names":[],"mappings":";AACA,OAAO,EACL,kBAAkB,EAClB,sCAAsC,EACtC,8CAA8C,EAC9C,6BAA6B,EAC7B,8BAA8B,EAC9B,yBAAyB,GAC1B,MAAM,qBAAqB,CAAA;AAE5B,MAAM,UAAU,GAAG,6BAA6B,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;AACvE,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC;IACpB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,yBAAyB,EAAE,CAAC,CAAA;IACjD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACjB,CAAC;AAED,IAAI,UAAU,CAAC,kBAAkB,EAAE,CAAC;IAClC,8BAA8B,CAAC;QAC7B,MAAM,EAAE,sCAAsC,CAAC;YAC7C,QAAQ,EAAE,kBAAkB,EAAE;YAC9B,UAAU,EAAE,wBAAwB;YACpC,QAAQ,EAAE,KAAK;SAChB,CAAC;KACH,CAAC,CAAA;AACJ,CAAC;KAAM,IAAI,UAAU,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;IAClD,8BAA8B,EAAE,CAAA;AAClC,CAAC;KAAM,CAAC;IACN,8BAA8B,CAAC;QAC7B,MAAM,EAAE,8CAA8C,CAAC;YACrD,iBAAiB,EAAE,UAAU,CAAC,iBAAiB;YAC/C,aAAa,EAAE,UAAU,CAAC,aAAa;YACvC,QAAQ,EAAE,UAAU,CAAC,QAAQ;SAC9B,CAAC;KACH,CAAC,CAAA;AACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"work-paper-mcp-stdio-bin.js","sourceRoot":"","sources":["../src/work-paper-mcp-stdio-bin.ts"],"names":[],"mappings":";AACA,OAAO,EACL,kBAAkB,EAClB,sCAAsC,EACtC,8CAA8C,EAC9C,kDAAkD,EAClD,6BAA6B,EAC7B,8BAA8B,EAC9B,wBAAwB,EACxB,yBAAyB,GAC1B,MAAM,qBAAqB,CAAA;AAE5B,MAAM,UAAU,GAAG,6BAA6B,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;AACvE,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC;IACpB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,yBAAyB,EAAE,CAAC,CAAA;IACjD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACjB,CAAC;AAED,IAAI,UAAU,CAAC,kBAAkB,EAAE,CAAC;IAClC,8BAA8B,CAAC;QAC7B,MAAM,EAAE,sCAAsC,CAAC;YAC7C,QAAQ,EAAE,kBAAkB,EAAE;YAC9B,UAAU,EAAE,wBAAwB;YACpC,QAAQ,EAAE,KAAK;SAChB,CAAC;KACH,CAAC,CAAA;AACJ,CAAC;KAAM,IAAI,UAAU,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;IAClD,8BAA8B,EAAE,CAAA;AAClC,CAAC;KAAM,IAAI,UAAU,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;IACjD,8BAA8B,CAAC;QAC7B,MAAM,EAAE,wBAAwB,CAC9B,kDAAkD,CAAC;YACjD,YAAY,EAAE,UAAU,CAAC,YAAY;YACrC,kBAAkB,EAAE,UAAU,CAAC,kBAAkB;YACjD,aAAa,EAAE,UAAU,CAAC,aAAa;YACvC,QAAQ,EAAE,UAAU,CAAC,QAAQ;SAC9B,CAAC,EACF,EAAE,QAAQ,EAAE,UAAU,CAAC,YAAY,EAAE,CACtC;KACF,CAAC,CAAA;AACJ,CAAC;KAAM,CAAC;IACN,8BAA8B,CAAC;QAC7B,MAAM,EAAE,8CAA8C,CAAC;YACrD,iBAAiB,EAAE,UAAU,CAAC,iBAAiB;YAC/C,aAAa,EAAE,UAAU,CAAC,aAAa;YACvC,QAAQ,EAAE,UAAU,CAAC,QAAQ;SAC9B,CAAC;KACH,CAAC,CAAA;AACJ,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bilig/workpaper",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.160.0",
|
|
4
4
|
"description": "WorkPaper API, CLI evaluator, and MCP server for headless spreadsheet formulas in Node.js services and agents.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"agent-tools",
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
"workpaper",
|
|
29
29
|
"xlsx"
|
|
30
30
|
],
|
|
31
|
-
"homepage": "https://proompteng.github.io/bilig/",
|
|
31
|
+
"homepage": "https://proompteng.github.io/bilig/agent-framework-workbook-tools.html",
|
|
32
32
|
"bugs": {
|
|
33
33
|
"url": "https://github.com/proompteng/bilig/issues"
|
|
34
34
|
},
|
|
@@ -89,12 +89,12 @@
|
|
|
89
89
|
"build": "pnpm --dir ../.. --filter bilig-workpaper build && rm -rf dist tsconfig.tsbuildinfo && tsc -p tsconfig.json"
|
|
90
90
|
},
|
|
91
91
|
"dependencies": {
|
|
92
|
-
"@bilig/headless": "0.
|
|
93
|
-
"@bilig/xlsx-formula-recalc": "0.
|
|
94
|
-
"bilig-workpaper": "0.
|
|
92
|
+
"@bilig/headless": "0.160.0",
|
|
93
|
+
"@bilig/xlsx-formula-recalc": "0.160.0",
|
|
94
|
+
"bilig-workpaper": "0.160.0"
|
|
95
95
|
},
|
|
96
96
|
"devDependencies": {
|
|
97
|
-
"ai": "6.0.
|
|
97
|
+
"ai": "6.0.195",
|
|
98
98
|
"zod": "4.3.6"
|
|
99
99
|
},
|
|
100
100
|
"peerDependencies": {
|
package/server.json
CHANGED
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
|
|
3
3
|
"name": "io.github.proompteng/bilig-workpaper",
|
|
4
4
|
"title": "Bilig WorkPaper",
|
|
5
|
-
"description": "
|
|
6
|
-
"version": "0.
|
|
5
|
+
"description": "Formula readback, input edits, JSON persistence, and workbook risk preflight for agents.",
|
|
6
|
+
"version": "0.160.0",
|
|
7
7
|
"repository": {
|
|
8
8
|
"url": "https://github.com/proompteng/bilig",
|
|
9
9
|
"source": "github"
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
{
|
|
19
19
|
"registryType": "npm",
|
|
20
20
|
"identifier": "@bilig/workpaper",
|
|
21
|
-
"version": "0.
|
|
21
|
+
"version": "0.160.0",
|
|
22
22
|
"transport": {
|
|
23
23
|
"type": "stdio"
|
|
24
24
|
}
|
package/dist/ai-sdk.test.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
package/dist/ai-sdk.test.js
DELETED
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
import { describe, expect, it } from 'vitest';
|
|
2
|
-
import { WorkPaper } from './index.js';
|
|
3
|
-
import { createWorkPaperToolHandlers } from './ai-sdk.js';
|
|
4
|
-
describe('@bilig/workpaper AI SDK handlers', () => {
|
|
5
|
-
it('edits a WorkPaper input and returns computed restore proof', () => {
|
|
6
|
-
const workpaper = WorkPaper.buildFromSheets({
|
|
7
|
-
Inputs: [
|
|
8
|
-
['Metric', 'Value'],
|
|
9
|
-
['Qualified opportunities', 20],
|
|
10
|
-
['Win rate', 0.25],
|
|
11
|
-
['Average ARR', 12000],
|
|
12
|
-
],
|
|
13
|
-
Summary: [
|
|
14
|
-
['Metric', 'Value'],
|
|
15
|
-
['Expected customers', '=Inputs!B2*Inputs!B3'],
|
|
16
|
-
['Expected ARR', '=B2*Inputs!B4'],
|
|
17
|
-
],
|
|
18
|
-
});
|
|
19
|
-
const handlers = createWorkPaperToolHandlers({
|
|
20
|
-
workpaper,
|
|
21
|
-
defaultReadRange: 'Summary!A1:B3',
|
|
22
|
-
proofRange: 'Summary!A1:B3',
|
|
23
|
-
writableSheets: ['Inputs'],
|
|
24
|
-
});
|
|
25
|
-
const before = handlers.readWorkPaperSummary();
|
|
26
|
-
const write = handlers.setWorkPaperInputCell({
|
|
27
|
-
sheetName: 'Inputs',
|
|
28
|
-
address: 'B3',
|
|
29
|
-
value: 0.4,
|
|
30
|
-
});
|
|
31
|
-
expect(readNumber(before.values, 2, 1)).toBe(60000);
|
|
32
|
-
expect(write.editedCell).toBe('Inputs!B3');
|
|
33
|
-
expect(readNumber(write.after.values, 2, 1)).toBe(96000);
|
|
34
|
-
expect(readNumber(write.restored.values, 2, 1)).toBe(96000);
|
|
35
|
-
expect(write.checks).toMatchObject({
|
|
36
|
-
previousValue: 0.25,
|
|
37
|
-
newValue: 0.4,
|
|
38
|
-
formulasPersisted: true,
|
|
39
|
-
restoredMatchesAfter: true,
|
|
40
|
-
proofRangeChanged: true,
|
|
41
|
-
});
|
|
42
|
-
expect(write.checks.serializedBytes).toBeGreaterThan(100);
|
|
43
|
-
});
|
|
44
|
-
it('blocks writes outside the configured input sheet boundary', () => {
|
|
45
|
-
const workpaper = WorkPaper.buildFromSheets({
|
|
46
|
-
Inputs: [['Metric', 'Value']],
|
|
47
|
-
Summary: [['Metric', '=1+1']],
|
|
48
|
-
});
|
|
49
|
-
const handlers = createWorkPaperToolHandlers({
|
|
50
|
-
workpaper,
|
|
51
|
-
defaultReadRange: 'Summary!A1:B1',
|
|
52
|
-
proofRange: 'Summary!A1:B1',
|
|
53
|
-
writableSheets: ['Inputs'],
|
|
54
|
-
});
|
|
55
|
-
expect(() => handlers.setWorkPaperInputCell({
|
|
56
|
-
sheetName: 'Summary',
|
|
57
|
-
address: 'B1',
|
|
58
|
-
value: 3,
|
|
59
|
-
})).toThrow('Sheet "Summary" is not writable');
|
|
60
|
-
});
|
|
61
|
-
});
|
|
62
|
-
function readNumber(values, row, col) {
|
|
63
|
-
const cell = values[row]?.[col];
|
|
64
|
-
if (!cell || typeof cell !== 'object' || !('value' in cell) || typeof cell.value !== 'number') {
|
|
65
|
-
throw new Error(`Expected numeric cell at row ${row}, col ${col}; received ${JSON.stringify(cell)}`);
|
|
66
|
-
}
|
|
67
|
-
return Math.round(cell.value * 100) / 100;
|
|
68
|
-
}
|
|
69
|
-
//# sourceMappingURL=ai-sdk.test.js.map
|
package/dist/ai-sdk.test.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ai-sdk.test.js","sourceRoot":"","sources":["../src/ai-sdk.test.ts"],"names":[],"mappings":"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"}
|