Skip to content

v1.1.11

Choose a tag to compare

@github-actions github-actions released this 04 Aug 02:27
649199c

Fixed

  • The documented backend split was wrong on every agent-facing surface, and the correction reaches the shipped tool descriptions. CLAUDE.md, skills/apple-numbers/SKILL.md, docs/LIMITATIONS.md, docs/AUTOMATION-PERMISSION.md and the README's Requirements bullet all described the divide as reads use numbers-parser, writes drive Numbers.app via AppleScript. The real divide is values vs. formatting: eleven write tools — create-spreadsheet, set-cell, set-cells-batch, add-rows, update-rows, delete-rows, add-sheet, add-table, rename-sheet, rename-table, import-csv — run entirely on the Python sidecar and never send an Apple event, so they need neither Numbers.app nor an Automation grant. Only eight reach AppleScript: set-formula(s), set-cell(s)-style, set-column-width/set-row-height, merge-cells/unmerge-cells. The cost was concrete — an agent reading CLAUDE.md would gate or refuse a perfectly executable headless set-cell or import-csv on a missing Numbers.app, or send a user through the Automation-permission ritual for a call that never consults it, and would misread an unrelated sidecar error as a TCC failure. The repo also contradicted itself (README:156 and four tool descriptions already had it right), so a caller had no way to tell which statement to trust. All surfaces repartitioned, doctor's numbers_app / automation_permission details rescoped, and the seven sidecar tool descriptions that named no backend now say "via the numbers-parser sidecar (does not require Numbers.app)" like the other four already did.
  • docs/AUTOMATION-PERMISSION.md prescribed set-cell as the "definitive test" of the Automation grant — a probe that cannot fail for lack of it. set-cell goes to the sidecar, so it succeeds whether the permission is granted, denied, or never prompted for; a user following the page concluded the grant was in place and then hit "Not authorized to send Apple events" on their first set-formula, which is exactly the failure that page exists to prevent. The probe is now set-cell-style (or set-formula), with an explicit note that value writes prove nothing.
  • The eight AppleScript tools' Safety: lines said Numbers.app must "be running". Backwards: buildScript() issues open POSIX file, which launches Numbers.app and opens the document — the app must be installed, not running. Corrected on all eight, and the seven that lacked it now carry the disclosure set-formula already had, plus two side effects no doc mentioned: the call saves the whole document (committing any unsaved hand edits the user has open in it) and leaves it open, which then races every later numbers-parser read of that file.
  • README documented set-formulas-batch's array parameter as entries; the schema requires formulas. A call written from the README fails Zod validation before the handler runs — the unknown entries key is stripped and the required formulas is missing. entries is correct for the adjacent set-cells-style-batch, which is where the copy-paste came from.
  • README's "Iterative Edits" example styled a header row with bold: true, a field cellStyleSchema does not have. The unknown key is stripped to {}, buildStyleCommands() returns [], runAppleScript() is skipped entirely — and the tool still reports "Styled 1 cells". The example now uses fontName: "Helvetica-Bold", matching the parameter table at README:509, which already documented that there is no bold/italic flag.
  • skills/apple-numbers/SKILL.md's import-csv example passed path. The tool has no path parameter and requires both inputPath and outputPath; the neighbouring search example (which really does take path) is what seeded it. Fixed in the canonical skills/ copy and re-synced to codex/skills and .antigravity-plugin/skills.
  • CLAUDE.md still said doctor reports three checks. python_interpreter made it four in 1.1.6 — and it is the check that surfaces the single most common setup failure, a stock macOS Python 3.9. README and docs/AUTOMATION-PERMISSION.md were updated then; CLAUDE.md and its "Tools at a glance" row were missed.
  • docs/LIMITATIONS.md and CLAUDE.md advertised Linux support that package.json makes impossible. LIMITATIONS.md gave Linux read-only deployment a dedicated section heading and named it as a supported fallback, but "os": ["darwin"] has been in package.json since the initial commit, so npm install hard-fails there with EBADPLATFORM. The read path genuinely is platform-independent (there is no process.platform branch anywhere in src/) — the package is not, and the pin is correct, since the formula/format tools cannot work off macOS. Reworded to match README:156 rather than dropping the pin.
  • .github/PULL_REQUEST_TEMPLATE.md's CONTRIBUTING link 404'd. GitHub resolves a PR template's relative links against .github/, and .github/CONTRIBUTING.md has never existed — the file is at the repo root. Contributors lost the "rebuild and commit build/index.js" instruction, which ci.yml's Verify committed build/ matches source step then fails them on. Now an absolute URL, per the house standard for cross-file links.
  • The Antigravity marketplace still advertised a Hermes plugin. .hermes-plugin/ was removed in #42 precisely to stop that misreading, and the README, CHANGELOG and both sync scripts already say there is no Hermes drop-in. The Codex manifest's longDescription likewise still called the sidecar "cross-platform" and attributed all writes to AppleScript.

Added

  • Documented export-table's destructive write. It was the only file-writing tool with no Safety: line in its description and no ⚠️ note in the README, despite writing outputPath unconditionally — outputPath: "~/.zshrc" truncates that file — while both sibling file-creating tools carry one.
  • Documented import-csv's type coercion and column-set rules. CSV/TSV fields are auto-typed, so 01234 imports as the number 1234 and 1e5 as the number 100000 — the opposite of the conservative coercion the write tools were given in 1.1.4, and irreversible once written. JSON values pass through untouched, but an array of objects takes its column set from the first object only, silently dropping keys that appear later, and an array of arrays gets synthetic Column_N headers with the first row kept as data. format: "auto" also falls back to CSV for any unrecognized extension. None of this was stated in the README, the skill, the docs or the tool description.
  • Documented add-sheet/add-table geometry. Omit headers and you get a 12 × 8 grid of empty cells; pass them and you get 1 × headers.length. The numRows/numCols overrides exist all the way down the stack but are not exposed through MCP, so the extra rows can only be removed afterwards with delete-rows.
  • Clarified that read-table returns the dimensions of the selection. Its numRows/numCols count what came back, not the table — under the exact field names get-file-info uses for the table's real size. The description called them "dimensions"; it now names the fields and points at get-file-info.
  • Documented the fixed per-call timeouts — 30 s for sidecar calls, 60 s for AppleScript — and that neither is configurable. APPLE_NUMBERS_MCP_SETUP_TIMEOUT sits one row below in the same README table and governs only the venv bootstrap, which sent anyone hitting Operation timed out after 30000ms looking for a knob that does not exist.
  • findSystemPython()'s "Python 3 not found on PATH" error now names the doctor tool, matching setupHint() eight lines away in the same file and the house standard for setup-failure messages.
  • Plugin/marketplace manifest descriptions now mention formulas and formatting — roughly a third of the tool surface, and one of the two capabilities package.json's description leads with. The strings were written before the AppleScript formatting tools landed and were never revisited.