shortcutxl 0.3.91 → 0.3.92

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.
Files changed (98) hide show
  1. package/BINARY-INVENTORY.json +16 -16
  2. package/CHANGELOG.md +5 -0
  3. package/dist/app/modes/action/agent.js +2 -1
  4. package/dist/app/modes/action/prompt.js +1 -1
  5. package/dist/app/modes/ask/agent.js +2 -1
  6. package/dist/app/modes/ask/prompt.js +2 -2
  7. package/dist/app/modes/plan/agent.js +2 -1
  8. package/dist/app/modes/plan/prompt.js +2 -2
  9. package/dist/app/modes/skill-forge/agent.js +2 -1
  10. package/dist/app/prompts/mog-cli.d.ts +3 -0
  11. package/dist/app/prompts/mog-cli.js +46 -0
  12. package/dist/app/prompts/shared-guidelines.d.ts +12 -2
  13. package/dist/app/prompts/shared-guidelines.js +31 -3
  14. package/dist/app/prompts/spreadjs-api-reference.json +5 -0
  15. package/dist/app/providers/model-resolver.js +2 -1
  16. package/dist/app/providers/shortcut-api-v2-transport.js +1 -0
  17. package/dist/app/session/forked-agent.js +9 -4
  18. package/dist/app/session/session-models.js +3 -3
  19. package/dist/app/subagents/clone/agent.js +4 -1
  20. package/dist/app/subagents/simulation/agent.js +13 -9
  21. package/dist/app/subagents/verification/agent.js +12 -2
  22. package/dist/app/subagents/workbook-reader/agent.js +6 -4
  23. package/dist/app/tools/bash.d.ts +2 -0
  24. package/dist/app/tools/bash.js +10 -1
  25. package/dist/app/tools/task/runner.js +10 -9
  26. package/dist/cli/args.d.ts +1 -0
  27. package/dist/cli/args.js +4 -0
  28. package/dist/cli.js +1312 -706
  29. package/dist/contracts/agent-api.d.ts +1 -0
  30. package/dist/contracts/agent-api.js +2 -1
  31. package/dist/core/agent-controller.d.ts +9 -0
  32. package/dist/core/agent-controller.js +19 -2
  33. package/dist/core/agent-engine.d.ts +3 -0
  34. package/dist/core/agent-engine.js +23 -3
  35. package/dist/core/agent-loop.js +5 -1
  36. package/dist/core/core-types.d.ts +2 -0
  37. package/dist/core/prompts/model-addenda.d.ts +9 -0
  38. package/dist/core/prompts/model-addenda.js +31 -0
  39. package/dist/credits/shortcut-credits.d.ts +2 -0
  40. package/dist/credits/shortcut-credits.js +12 -1
  41. package/dist/embedded-agent/agent-event-funnel.d.ts +2 -1
  42. package/dist/embedded-agent/agent-event-funnel.js +6 -4
  43. package/dist/embedded-agent/compose.js +101 -33
  44. package/dist/embedded-agent/credit-gate.d.ts +18 -1
  45. package/dist/embedded-agent/credit-gate.js +40 -4
  46. package/dist/embedded-agent/host-runtime-options.js +4 -0
  47. package/dist/embedded-agent/host-tools/build-tool-list.d.ts +2 -0
  48. package/dist/embedded-agent/host-tools/build-tool-list.js +6 -0
  49. package/dist/embedded-agent/host-tools/execute-code/allowed-functions.json +4 -0
  50. package/dist/embedded-agent/host-tools/mode-host-tools.d.ts +2 -0
  51. package/dist/embedded-agent/host-tools/mode-host-tools.js +2 -0
  52. package/dist/embedded-agent/host-tools/task/contract.d.ts +4 -1
  53. package/dist/embedded-agent/host-tools/task/contract.js +6 -1
  54. package/dist/embedded-agent/host-tools/task/lifecycle.d.ts +2 -0
  55. package/dist/embedded-agent/host-tools/task/lifecycle.js +54 -32
  56. package/dist/embedded-agent/host-tools/task/runner.js +4 -3
  57. package/dist/embedded-agent/host-tools/task/send-message.js +5 -1
  58. package/dist/embedded-agent/index.d.ts +2 -0
  59. package/dist/embedded-agent/model-registry.d.ts +4 -0
  60. package/dist/embedded-agent/model-registry.js +4 -0
  61. package/dist/embedded-agent/persistence.d.ts +2 -2
  62. package/dist/embedded-agent/persistence.js +1 -1
  63. package/dist/embedded-agent/provider-fast-mode.js +1 -0
  64. package/dist/embedded-agent/task-notification-turn-queue.d.ts +8 -9
  65. package/dist/embedded-agent/task-notification-turn-queue.js +65 -39
  66. package/dist/main.d.ts +1 -0
  67. package/dist/main.js +33 -15
  68. package/dist/model-ids.d.ts +9 -1
  69. package/dist/model-ids.js +13 -2
  70. package/dist/shell/commands/mcp-command.js +17 -7
  71. package/dist/shortcut-model-catalog.js +71 -13
  72. package/dist/startup/mog-cli.d.ts +5 -0
  73. package/dist/startup/mog-cli.js +19 -0
  74. package/dist/startup/output-workbook.d.ts +2 -1
  75. package/dist/startup/output-workbook.js +8 -0
  76. package/dist/startup/timeout-snapshot.d.ts +2 -1
  77. package/dist/startup/timeout-snapshot.js +15 -1
  78. package/dist/subagent-model-policy.js +4 -1
  79. package/dist/utils/api-reference.js +2 -2
  80. package/native-app/main/index.js +4 -2
  81. package/native-app/package.json +1 -1
  82. package/native-app/renderer/assets/{index-B4oy3UFe.js → index--fI2TmN5.js} +3 -3
  83. package/native-app/renderer/index.html +1 -1
  84. package/package.json +3 -3
  85. package/xll/ShortcutPowerPoint.dll +0 -0
  86. package/xll/ShortcutWord.dll +0 -0
  87. package/xll/ShortcutXL.xll +0 -0
  88. package/xll/python/Lib/site-packages/httpx-0.28.1.dist-info/RECORD +1 -1
  89. package/xll/python/Lib/site-packages/idna-3.18.dist-info/RECORD +1 -1
  90. package/xll/python/Lib/site-packages/pip-26.2.dist-info/RECORD +3 -3
  91. package/xll/python/Lib/site-packages/pywin32-311.dist-info/RECORD +2 -2
  92. package/xll/python/Scripts/httpx.exe +0 -0
  93. package/xll/python/Scripts/idna.exe +0 -0
  94. package/xll/python/Scripts/pip.exe +0 -0
  95. package/xll/python/Scripts/pip3.13.exe +0 -0
  96. package/xll/python/Scripts/pip3.exe +0 -0
  97. package/xll/python/Scripts/pywin32_postinstall.exe +0 -0
  98. package/xll/python/Scripts/pywin32_testall.exe +0 -0
@@ -1,17 +1,17 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
- "generatedAt": "2026-09-10T05:20:31.240Z",
3
+ "generatedAt": "2026-09-28T15:24:40.862Z",
4
4
  "package": "shortcutxl",
5
5
  "build": {
6
6
  "builder": "github-actions",
7
7
  "repository": "lyfegame/shortcut",
8
- "sourceRef": "refs/heads/mcp-startup-budget",
9
- "sourceCommit": "0905764a93d06c695b77bf413eaa2003d6bbd83f",
10
- "workflowRef": "lyfegame/shortcut/.github/workflows/release-shortcut-cli-npm-package.yml@refs/heads/mcp-startup-budget",
11
- "runId": "34440542822",
8
+ "sourceRef": "refs/tags/shortcutxl/v0.3.92",
9
+ "sourceCommit": "e570fa7e9f098635d5a8594035f1ec509d6c84f2",
10
+ "workflowRef": "lyfegame/shortcut/.github/workflows/release-shortcut-cli-npm-package.yml@refs/tags/shortcutxl/v0.3.92",
11
+ "runId": "36443042051",
12
12
  "runnerOs": "Windows",
13
13
  "runnerImage": "win25-vs2026",
14
- "runnerImageVersion": "20260907.229.1"
14
+ "runnerImageVersion": "20260922.246.2"
15
15
  },
16
16
  "binaryExtensions": [
17
17
  ".dll",
@@ -22,7 +22,7 @@
22
22
  "files": [
23
23
  {
24
24
  "path": "xll/ShortcutPowerPoint.dll",
25
- "sha256": "5c5c7630cd30e36daaf85b944baee2bf84c1cb59c2dde40b05505b8dbf04239b",
25
+ "sha256": "e74ec73ef238eff5f936ffb236610220c2c545da164a7cf58b868ae1b4fa1d45",
26
26
  "source": "ShortcutXL native PowerPoint COM add-in build",
27
27
  "version": "package",
28
28
  "builtBy": "shortcut",
@@ -30,7 +30,7 @@
30
30
  },
31
31
  {
32
32
  "path": "xll/ShortcutWord.dll",
33
- "sha256": "2823c3604f6b7a6fdbabd3bedcdf31a66ec1d3dcd51e54284affb64969d8bcc5",
33
+ "sha256": "17a78ed362a9edd2dc413d6d090c37347eb68a27cb23b53e91f647c9f940fe37",
34
34
  "source": "ShortcutXL native Word COM add-in build",
35
35
  "version": "package",
36
36
  "builtBy": "shortcut",
@@ -38,7 +38,7 @@
38
38
  },
39
39
  {
40
40
  "path": "xll/ShortcutXL.xll",
41
- "sha256": "b1d14ede58224be66163f924bd2259bfc1c586849743c2b97bb28de77b4072e4",
41
+ "sha256": "b3ea0f0ac97160f45fa4571488e3e038ef0a09bd7d5d67833eb1248f24d9ff50",
42
42
  "source": "ShortcutXL native XLL build",
43
43
  "version": "package",
44
44
  "builtBy": "shortcut",
@@ -550,7 +550,7 @@
550
550
  },
551
551
  {
552
552
  "path": "xll/python/Scripts/httpx.exe",
553
- "sha256": "a022dc159b79a3312afeed6f1733da09a8e85523163566f0df9da427319a0040",
553
+ "sha256": "38991b06575eecf3ed2dce55d63b5f70617a132462b6e011a05567836017458b",
554
554
  "source": "httpx console launcher installed into embedded Python",
555
555
  "version": "see packaged httpx distribution",
556
556
  "builtBy": "third-party",
@@ -558,7 +558,7 @@
558
558
  },
559
559
  {
560
560
  "path": "xll/python/Scripts/idna.exe",
561
- "sha256": "8cd6a6078a64ae8e4c826fde0c179ee719401389df7d73832baf0dd3c582ab38",
561
+ "sha256": "93cfec5f08ff75bd6358ddf0427d0ed53bbdcc8c139b8feac5b96671d4e22d4f",
562
562
  "source": "Python package console launcher installed into embedded Python",
563
563
  "version": "see owning Python package metadata in site-packages",
564
564
  "builtBy": "third-party",
@@ -566,7 +566,7 @@
566
566
  },
567
567
  {
568
568
  "path": "xll/python/Scripts/pip.exe",
569
- "sha256": "4a130513690433dd5e1e502566a7fd2084fc629eb85d08f66b0aad591a012c23",
569
+ "sha256": "417cbb3269a7e6fdfe8bdf606f56ea86f80f0fc5d939d65c7857d0f3aa263c2c",
570
570
  "source": "pip console launcher installed into embedded Python",
571
571
  "version": "see packaged pip distribution",
572
572
  "builtBy": "third-party",
@@ -574,7 +574,7 @@
574
574
  },
575
575
  {
576
576
  "path": "xll/python/Scripts/pip3.13.exe",
577
- "sha256": "4a130513690433dd5e1e502566a7fd2084fc629eb85d08f66b0aad591a012c23",
577
+ "sha256": "417cbb3269a7e6fdfe8bdf606f56ea86f80f0fc5d939d65c7857d0f3aa263c2c",
578
578
  "source": "pip console launcher installed into embedded Python",
579
579
  "version": "see packaged pip distribution",
580
580
  "builtBy": "third-party",
@@ -582,7 +582,7 @@
582
582
  },
583
583
  {
584
584
  "path": "xll/python/Scripts/pip3.exe",
585
- "sha256": "4a130513690433dd5e1e502566a7fd2084fc629eb85d08f66b0aad591a012c23",
585
+ "sha256": "417cbb3269a7e6fdfe8bdf606f56ea86f80f0fc5d939d65c7857d0f3aa263c2c",
586
586
  "source": "pip console launcher installed into embedded Python",
587
587
  "version": "see packaged pip distribution",
588
588
  "builtBy": "third-party",
@@ -590,7 +590,7 @@
590
590
  },
591
591
  {
592
592
  "path": "xll/python/Scripts/pywin32_postinstall.exe",
593
- "sha256": "1e121893a273808b93c23160b171d2055aa4ec72ddb72c92a3d7ebb274115f1d",
593
+ "sha256": "e0b6ba36d80a9cd5d712e05a5b7cbe353afa05a65e51d26b60680ef75d49cc98",
594
594
  "source": "Python package console launcher installed into embedded Python",
595
595
  "version": "see owning Python package metadata in site-packages",
596
596
  "builtBy": "third-party",
@@ -598,7 +598,7 @@
598
598
  },
599
599
  {
600
600
  "path": "xll/python/Scripts/pywin32_testall.exe",
601
- "sha256": "d92feb62593764e35c01fa841192e2cbab59bd51b4d33f88f14197527c48ffa2",
601
+ "sha256": "fdac2f9fbcf98b44f89e9846f727b93c8f6f4be6fa9db2210cc62450e1e74d52",
602
602
  "source": "Python package console launcher installed into embedded Python",
603
603
  "version": "see owning Python package metadata in site-packages",
604
604
  "builtBy": "third-party",
package/CHANGELOG.md CHANGED
@@ -1,5 +1,10 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.3.92]
4
+
5
+ - **Latest OpenAI and Anthropic models** - Select GPT-6 Sol, GPT-6 Luna, or Claude Opus 5.5 in the CLI and Windows app. New CLI sessions default to GPT-6 Sol.
6
+ - **Simpler model selector** - Replaced GPT-5.6 Sol/Luna and Opus 5 in the selector with their successors. Existing saved sessions and explicit model selections remain supported.
7
+
3
8
  ## [0.3.91]
4
9
 
5
10
  - **GPT-6 Astra** - GPT-6 Astra is now available in the model selector.
@@ -4,6 +4,7 @@
4
4
  * Provides the spreadsheet execution tool set for making changes to the workbook.
5
5
  * Can switch to plan or installation mode.
6
6
  */
7
+ import { getEngineToolNames } from '../../prompts/shared-guidelines.js';
7
8
  import { ACTION_SWITCH_MODE, BASH, EXECUTE_CODE, EXECUTE_TOOL, GET_TOOL_INFO, MCP_TOOL_NAMES, REFRESH_CONTEXT, SEND_MESSAGE, TAKE_SCREENSHOT, TASK, WRITE } from '../../../tool-names.js';
8
9
  import { ACTION_MODE_METADATA } from '../metadata.js';
9
10
  import { buildActionPrompt } from './prompt.js';
@@ -26,7 +27,7 @@ export function actionAgent() {
26
27
  name: ACTION_MODE_METADATA.name,
27
28
  description: ACTION_MODE_METADATA.description,
28
29
  systemPrompt: buildActionPrompt(),
29
- tools: ACTION_AGENT_TOOL_NAMES,
30
+ tools: getEngineToolNames(ACTION_AGENT_TOOL_NAMES),
30
31
  switchTo: ACTION_MODE_METADATA.switchTo
31
32
  };
32
33
  }
@@ -29,7 +29,7 @@ Keep solutions simple and focused. For example, don't add extra sheets, reformat
29
29
  Do not add improvements, cleanup, formatting changes, structural edits, or extra analysis beyond what the user asked for.
30
30
  Match the scope of your actions to what was actually requested. Complete the requested task, but do not overstep.
31
31
 
32
- execute_code: use it for all spreadsheet interactions
32
+ ${engine.spreadsheetTool}: use it for all spreadsheet interactions
33
33
  ${engine.execTool}
34
34
 
35
35
  File Writing:
@@ -4,6 +4,7 @@
4
4
  * Reviews, audits, and explains spreadsheet content without modification.
5
5
  * This is a sink state: the agent cannot switch out of ask mode.
6
6
  */
7
+ import { getEngineToolNames } from '../../prompts/shared-guidelines.js';
7
8
  import { EXECUTE_CODE, EXECUTE_TOOL, FIND, GET_TOOL_INFO, GREP, LLM_ANALYSIS, LS, MCP_TOOL_NAMES, READ, TAKE_SCREENSHOT } from '../../../tool-names.js';
8
9
  import { ASK_MODE_METADATA } from '../metadata.js';
9
10
  import { buildAskPrompt } from './prompt.js';
@@ -24,7 +25,7 @@ export function askAgent() {
24
25
  name: ASK_MODE_METADATA.name,
25
26
  description: ASK_MODE_METADATA.description,
26
27
  systemPrompt: buildAskPrompt(),
27
- tools: TOOLS
28
+ tools: getEngineToolNames(TOOLS)
28
29
  };
29
30
  }
30
31
  //# sourceMappingURL=agent.js.map
@@ -20,7 +20,7 @@ You are in ask mode. Your job is to provide the user with detailed answers regar
20
20
  Your general flow is to explore the spreadsheet, analyze and review the spreadsheet, and provide users with insights.
21
21
 
22
22
  ## Tools
23
- execute_code: use it for all spreadsheet exploration (READ-ONLY — do not modify any cells)
23
+ ${engine.spreadsheetTool}: use it for all spreadsheet exploration (READ-ONLY — do not modify any cells)
24
24
  grep / find / ls: use them for host file and workspace inspection when you need filesystem context without using shell
25
25
  ${engine.execTool}
26
26
 
@@ -50,7 +50,7 @@ If the user asks you to do something actionable (e.g., "fix this formula", "add
50
50
 
51
51
  ## WORKFLOW
52
52
 
53
- ### Step 1: Quick Exploration (use execute_code once)
53
+ ### Step 1: Quick Exploration (use ${engine.spreadsheetTool} once)
54
54
 
55
55
  First, understand what you're working with:
56
56
  - How many sheets? What are they named?
@@ -4,6 +4,7 @@
4
4
  * Explores the workbook, asks clarifying questions, and produces an
5
5
  * implementation plan before switching to action mode for execution.
6
6
  */
7
+ import { getEngineToolNames } from '../../prompts/shared-guidelines.js';
7
8
  import { EXECUTE_CODE, EXECUTE_TOOL, FIND, GET_TOOL_INFO, GREP, LLM_ANALYSIS, LS, MCP_TOOL_NAMES, PLAN_SWITCH_MODE, READ, TAKE_SCREENSHOT } from '../../../tool-names.js';
8
9
  import { PLAN_MODE_METADATA } from '../metadata.js';
9
10
  import { buildPlanPrompt } from './prompt.js';
@@ -25,7 +26,7 @@ export function planAgent() {
25
26
  name: PLAN_MODE_METADATA.name,
26
27
  description: PLAN_MODE_METADATA.description,
27
28
  systemPrompt: buildPlanPrompt(),
28
- tools: TOOLS,
29
+ tools: getEngineToolNames(TOOLS),
29
30
  switchTo: PLAN_MODE_METADATA.switchTo
30
31
  };
31
32
  }
@@ -24,12 +24,12 @@ No emojis. Avoid filler like "Here is..." or "Based on...". Answer questions dir
24
24
  EXCEPTION: Clarifying questions should be rich with context - explain practical meaning, reasoning, and consequences for each option.
25
25
 
26
26
  **YOU ARE IN PLAN MODE (READ-ONLY)**
27
- - Explore the spreadsheet using execute_code (no changes allowed)
27
+ - Explore the spreadsheet using ${engine.spreadsheetTool} (no changes allowed)
28
28
  - Ask questions until confident about fulfilling user's request
29
29
  - Provide concise implementation plan
30
30
 
31
31
  ## Tools
32
- execute_code: use it for all spreadsheet exploration (READ-ONLY — do not modify any cells)
32
+ ${engine.spreadsheetTool}: use it for all spreadsheet exploration (READ-ONLY — do not modify any cells)
33
33
  grep / find / ls: use them for host file and workspace inspection when you need filesystem context without using shell
34
34
  ${engine.execTool}
35
35
 
@@ -6,6 +6,7 @@
6
6
  * metadata, like review mode. The ordinary agent loop executes a forge-specific
7
7
  * prompt and uses the filesystem as its durable state.
8
8
  */
9
+ import { getEngineToolNames } from '../../prompts/shared-guidelines.js';
9
10
  import { MODE } from '../../../mode-names.js';
10
11
  import { BASH, EXECUTE_CODE, EXECUTE_TOOL, GET_TOOL_INFO, MCP_TOOL_NAMES, REFRESH_CONTEXT, SEND_MESSAGE, SKILL_FORGE_UPDATE_STATUS, TASK, WRITE } from '../../../tool-names.js';
11
12
  import { buildSkillForgePrompt } from './prompt.js';
@@ -27,7 +28,7 @@ export function skillForgeAgent() {
27
28
  name: MODE.SKILL_FORGE,
28
29
  description: 'Forge a skill with training and validation tasks: run, grade, and refine.',
29
30
  systemPrompt: buildSkillForgePrompt(),
30
- tools: SKILL_FORGE_AGENT_TOOL_NAMES
31
+ tools: getEngineToolNames(SKILL_FORGE_AGENT_TOOL_NAMES)
31
32
  };
32
33
  }
33
34
  //# sourceMappingURL=agent.js.map
@@ -0,0 +1,3 @@
1
+ /** Native Mog guidance, selected only by the Platform API launch flag. */
2
+ export declare function buildMogCliGuidelines(readOnly: boolean): string;
3
+ //# sourceMappingURL=mog-cli.d.ts.map
@@ -0,0 +1,46 @@
1
+ /** Native Mog guidance, selected only by the Platform API launch flag. */
2
+ export function buildMogCliGuidelines(readOnly) {
3
+ return `## Platform API spreadsheet engine
4
+
5
+ Use the native \`mog\` executable through bash. Scripts are JavaScript using the Office.js Excel API: \`Excel.run\`, \`context.workbook\`, proxy objects, \`load\`, and \`await context.sync()\`. Mog implements common Office.js methods, not the complete API. There is no Node runtime, TypeScript transpiler, or Node wrapper. Do not use the legacy Mog workbook/worksheet/general globals, saveWorkbook, execute_code, or shortcut-mog.
6
+
7
+ Use Mog for workbook reads, edits, formula calculation, and verification. Python remains available for non-workbook data processing. openpyxl is not installed in this image; do not install it or switch to another spreadsheet engine to bypass Mog limitations. Report unsupported operations accurately.
8
+
9
+ ### Files and one-shot scripts
10
+ - Write JavaScript with the write tool, then run \`mog --input /path/input.xlsx --output /path/result.xlsx --file /path/script.js\`.
11
+ - Omit --input to create a blank workbook (initial sheet: Sheet1). Use --eval for short inline JavaScript.
12
+ - Always choose --output explicitly: without it, Mog overwrites the input or creates workbook.xlsx in the working directory. Preserve input files.
13
+ - Scripts automatically recalculate before export. A failed one-shot script does not save. Check command exit status and console output.
14
+ - Save the final workbook to the exact output path requested by the task. Check it exists before finishing.
15
+ - Prefer one-shot execution for creation or edits when one script completes the task. Use sessions to preserve workbook state across calls or to inspect a workbook without exporting.
16
+
17
+ ### Persistent sessions
18
+ For multiple steps, start \`mog --session --input /path/input.xlsx --output /path/result.xlsx\` (omit --input for a blank workbook). It prints a session ID. Record that ID; shell variables do not persist across bash calls.
19
+ Run later scripts with \`mog --session ID --file /path/script.js\` or \`mog --session ID --eval '...'\`.
20
+ Workbook state persists, but each script has a fresh JavaScript scope. Requests to one session are sequential. A script error can leave earlier successful syncs applied; inspect before retrying.
21
+ No file is written until \`mog --session ID --close\`. You can choose a new destination with \`--close --output /path/result.xlsx\`. Use \`--close --discard\` to abandon scratch work.
22
+ Set the intended output when starting each session so shutdown can save it if the run times out. Close sessions you own before finishing. Do not change MOG_SESSION_DIR or close other agents' sessions. Pass session IDs or explicit file paths to workbook subagents.
23
+
24
+ ### Read-only exploration
25
+ In ask/plan mode and read-only subagents, use a session with --input, perform only reads, then --close --discard. A one-shot invocation always exports, even for a read script. Never overwrite an input to inspect it.
26
+
27
+ ### Office.js example
28
+ \`\`\`javascript
29
+ await Excel.run(async (context) => {
30
+ const sheet = context.workbook.worksheets.getItem("Sheet1");
31
+ ${readOnly
32
+ ? ''
33
+ : ` sheet.getRange("A1:B1").values = [[10, 20]];
34
+ sheet.getRange("C1").formulas = [["=SUM(A1:B1)"]];
35
+ `}
36
+ const result = sheet.getRange("A1:C1");
37
+ result.load("values");
38
+ await context.sync();
39
+ console.log(JSON.stringify(result.values));
40
+ });
41
+ \`\`\`
42
+ Queue writes with property assignments and method calls, then sync. Before reading proxy properties, load the needed properties and sync. Batch range operations. Use fresh loaded proxies to verify calculated results. A null in a values write preserves the cell; an empty string clears it.
43
+ The example above is sufficient for basic range reads and writes. Before using unfamiliar flags or APIs, consult \`mog --help\` and /opt/shortcut/mog/SKILL.md for the pinned CLI and supported API details. Do not assume full Excel parity or invent methods.
44
+ `;
45
+ }
46
+ //# sourceMappingURL=mog-cli.js.map
@@ -4,22 +4,26 @@
4
4
  * Both the action prompt (interactive) and subagent prompts import from here
5
5
  * so domain knowledge stays in one place.
6
6
  */
7
+ import { BASH, EXECUTE_CODE } from '../../tool-names.js';
7
8
  import type { ApiTag } from '../agent-definition.js';
8
9
  import { type Skill } from '../resources/skills.js';
9
10
  import { SettingsManager } from '../settings-manager.js';
11
+ export type PromptEngine = 'mog' | 'com' | 'mog-cli';
10
12
  export interface EnginePrompts {
13
+ spreadsheetTool: typeof BASH | typeof EXECUTE_CODE;
11
14
  execTool: string;
12
15
  apiGuidelines: string;
16
+ fileOutputGuidelines?: string;
13
17
  runtimeTroubleshooting?: string;
14
18
  }
15
- export declare function setDefaultEnginePrompts(engine: 'mog' | 'com'): void;
19
+ export declare function setDefaultEnginePrompts(engine: PromptEngine): void;
16
20
  /**
17
21
  * Return the correct engine prompts for the given engine.
18
22
  *
19
23
  * When no engine is specified, falls back to the legacy isNewSheetEnabled()
20
24
  * heuristic (MOG on Mac/Linux, COM on Windows).
21
25
  */
22
- export declare function getEnginePrompts(filterTag?: ApiTag, engine?: 'mog' | 'com'): EnginePrompts;
26
+ export declare function getEnginePrompts(filterTag?: ApiTag, engine?: PromptEngine): EnginePrompts;
23
27
  export declare function buildSkillsSection(skills: Skill[]): string;
24
28
  export declare function buildVisibleSkillsSection(skills: Skill[], disabledSkillNames?: string[]): string;
25
29
  export declare function buildCurrentSkillsSection(options?: {
@@ -31,4 +35,10 @@ export declare function buildCurrentSkillsSection(options?: {
31
35
  export declare function pushActionSharedGuidelines(sections: string[], engine: EnginePrompts): void;
32
36
  /** Append read-only shared guidelines + engine API reference to a sections array. */
33
37
  export declare function pushReadOnlySharedGuidelines(sections: string[], engine: EnginePrompts): void;
38
+ /** Map desktop spreadsheet tools to shell access only for Platform API runs. */
39
+ export declare function getEngineToolNames(toolNames: string[]): string[];
40
+ /** Hide the bundled SDK reference from native Mog parents and subagents. */
41
+ export declare function filterEngineSkills<T extends {
42
+ filePath: string;
43
+ }>(skills: T[]): T[];
34
44
  //# sourceMappingURL=shared-guidelines.d.ts.map
@@ -9,11 +9,13 @@ import { isAbsolute, join, resolve } from 'node:path';
9
9
  import { CONFIG_DIR_NAME, getAgentDir, getBundledSkillsDir, isNewSheetEnabled } from '../../config.js';
10
10
  import { RuntimeSkillSource } from '../../contracts/agent-resources.js';
11
11
  import { COMMUNICATION, DATA_FORMATTING, TASK_EXECUTION, WRITING_CODE } from '../../core/prompts/agent-guidelines.js';
12
+ import { BASH, EXECUTE_CODE, TAKE_SCREENSHOT } from '../../tool-names.js';
12
13
  import { buildMogHeadlessApiReferenceSection } from '../../utils/mog-headless-api-reference.js';
13
14
  import { inferExternalSkillProviderFromPath } from '../resources/external-skill-roots.js';
14
15
  import { loadSkills } from '../resources/skills.js';
15
16
  import { SettingsManager } from '../settings-manager.js';
16
17
  import { getExcelComApiGuidelines } from './com-api.js';
18
+ import { buildMogCliGuidelines } from './mog-cli.js';
17
19
  import { buildVisibleSkillsSection as buildRuntimeVisibleSkillsSection } from './skill-section.js';
18
20
  let defaultEngineOverride = null;
19
21
  export function setDefaultEnginePrompts(engine) {
@@ -44,8 +46,16 @@ const LOCAL_FILE_LINKS = `
44
46
  export function getEnginePrompts(filterTag, engine) {
45
47
  const resolved = engine ?? defaultEngineOverride ?? (isNewSheetEnabled() ? 'mog' : 'com');
46
48
  switch (resolved) {
49
+ case 'mog-cli':
50
+ return {
51
+ spreadsheetTool: BASH,
52
+ execTool: '- run the native `mog` CLI through bash for all spreadsheet operations',
53
+ fileOutputGuidelines: '- In the final user-facing response, describe the result and name output files. The Platform API supplies downloads; do not expose sandbox paths or file:// links. Use explicit paths when passing files between tools or subagents.',
54
+ apiGuidelines: buildMogCliGuidelines(filterTag === 'ask')
55
+ };
47
56
  case 'com':
48
57
  return {
58
+ spreadsheetTool: EXECUTE_CODE,
49
59
  execTool: COM_EXEC,
50
60
  apiGuidelines: getExcelComApiGuidelines(filterTag),
51
61
  runtimeTroubleshooting: COM_RUNTIME_TROUBLESHOOTING
@@ -53,6 +63,7 @@ export function getEnginePrompts(filterTag, engine) {
53
63
  case 'mog':
54
64
  default:
55
65
  return {
66
+ spreadsheetTool: EXECUTE_CODE,
56
67
  execTool: NEW_SHEET_EXEC,
57
68
  apiGuidelines: buildMogHeadlessApiReferenceSection(filterTag)
58
69
  };
@@ -65,7 +76,7 @@ export function buildSkillsSection(skills) {
65
76
  return buildVisibleSkillsSection(skills);
66
77
  }
67
78
  export function buildVisibleSkillsSection(skills, disabledSkillNames = []) {
68
- const normalizedSkills = skills.map((skill) => ({
79
+ const normalizedSkills = filterEngineSkills(skills).map((skill) => ({
69
80
  ...skill,
70
81
  source: inferSkillPromptSource(skill)
71
82
  }));
@@ -116,10 +127,27 @@ export function buildCurrentSkillsSection(options = {}) {
116
127
  // ---------------------------------------------------------------------------
117
128
  /** Append action-mode shared guidelines + engine API reference to a sections array. */
118
129
  export function pushActionSharedGuidelines(sections, engine) {
119
- sections.push(TASK_EXECUTION, COMMUNICATION, LOCAL_FILE_LINKS, WRITING_CODE, DATA_FORMATTING, engine.apiGuidelines);
130
+ sections.push(TASK_EXECUTION, COMMUNICATION, engine.fileOutputGuidelines ?? LOCAL_FILE_LINKS, WRITING_CODE, DATA_FORMATTING, engine.apiGuidelines);
120
131
  }
121
132
  /** Append read-only shared guidelines + engine API reference to a sections array. */
122
133
  export function pushReadOnlySharedGuidelines(sections, engine) {
123
- sections.push(COMMUNICATION, LOCAL_FILE_LINKS, engine.apiGuidelines);
134
+ sections.push(COMMUNICATION, engine.fileOutputGuidelines ?? LOCAL_FILE_LINKS, engine.apiGuidelines);
135
+ }
136
+ /** Map desktop spreadsheet tools to shell access only for Platform API runs. */
137
+ export function getEngineToolNames(toolNames) {
138
+ if (defaultEngineOverride !== 'mog-cli')
139
+ return toolNames;
140
+ return [
141
+ ...new Set(toolNames
142
+ .filter((name) => name !== TAKE_SCREENSHOT)
143
+ .map((name) => (name === EXECUTE_CODE ? BASH : name)))
144
+ ];
145
+ }
146
+ /** Hide the bundled SDK reference from native Mog parents and subagents. */
147
+ export function filterEngineSkills(skills) {
148
+ if (defaultEngineOverride !== 'mog-cli')
149
+ return skills;
150
+ const legacyReference = join(getBundledSkillsDir(), 'advanced-mog-api', 'SKILL.md');
151
+ return skills.filter((skill) => skill.filePath !== legacyReference);
124
152
  }
125
153
  //# sourceMappingURL=shared-guidelines.js.map
@@ -328,6 +328,11 @@
328
328
  "docstring": null,
329
329
  "usedTypes": []
330
330
  },
331
+ "fillPattern": {
332
+ "signature": "fillPattern?: { type: string; patternColor?: string; backgroundColor?: string };",
333
+ "docstring": "Read-only patterned fill metadata, including hatch patterns on empty cells.",
334
+ "usedTypes": []
335
+ },
331
336
  "foreColor": {
332
337
  "signature": "foreColor?: string;",
333
338
  "docstring": null,
@@ -37,7 +37,7 @@ export function resolveExactModelRef(availableModels, requested) {
37
37
  }
38
38
  /** Default model IDs for each provider with a preferred initial model. */
39
39
  export const defaultModelPerProvider = {
40
- [SHORTCUT_PROVIDER_ID]: SHORTCUT_OPENAI_MODEL_ID,
40
+ [SHORTCUT_PROVIDER_ID]: SHORTCUT_MODEL_ID.Gpt6Sol,
41
41
  anthropic: SHORTCUT_MODEL_ID.ClaudeOpus5,
42
42
  openai: SHORTCUT_OPENAI_MODEL_ID,
43
43
  'azure-openai-responses': SHORTCUT_OPENAI_MODEL_ID,
@@ -58,6 +58,7 @@ export const defaultModelPerProvider = {
58
58
  function getDefaultModelCandidatesForProvider(provider) {
59
59
  if (provider === SHORTCUT_PROVIDER_ID) {
60
60
  return [
61
+ SHORTCUT_MODEL_ID.Gpt6Sol,
61
62
  SHORTCUT_OPENAI_MODEL_ID,
62
63
  SHORTCUT_MODEL_ID.ClaudeFable51,
63
64
  SHORTCUT_MODEL_ID.ClaudeFable5,
@@ -23,6 +23,7 @@ export function resolveShortcutApiV2Transport(modelId) {
23
23
  if (normalized === SHORTCUT_MODEL_ID.Hosted ||
24
24
  normalized === SHORTCUT_MODEL_ID.Grok45 ||
25
25
  normalized === SHORTCUT_MODEL_ID.Grok46 ||
26
+ normalized === SHORTCUT_MODEL_ID.Grok47 ||
26
27
  normalized === SHORTCUT_MODEL_ID.Glm52Fireworks.toLowerCase() ||
27
28
  normalized.startsWith('accounts/fireworks/')) {
28
29
  return 'openai-completions';
@@ -18,6 +18,7 @@ import { mkdirSync, writeFileSync } from 'node:fs';
18
18
  import { join } from 'node:path';
19
19
  import { streamSimple } from '../../ai/stream.js';
20
20
  import { agentLoop, streamAssistantResponse } from '../../core/agent-loop.js';
21
+ import { appendModelSystemPromptAddendum } from '../../core/prompts/model-addenda.js';
21
22
  import { CURRENT_SESSION_VERSION } from '../../core/session-schema.js';
22
23
  import { log } from '../../shared/logging/agent-log.js';
23
24
  export const MAX_CONCURRENT_FORKS = 2;
@@ -45,9 +46,13 @@ function buildForkReminder(maxTurns) {
45
46
  '</forked-agent-reminder>'
46
47
  ].join('\n');
47
48
  }
48
- /** Append the fork reminder to the caller's resolved system prompt. */
49
- function buildForkSystemPrompt(systemPrompt, maxTurns) {
50
- return `${systemPrompt.trimEnd()}\n\n${buildForkReminder(maxTurns)}`;
49
+ /**
50
+ * Append the fork reminder and model addenda to the caller's resolved system
51
+ * prompt. Forks stream without an AgentController, so this is their one
52
+ * composition point; the trace records the same string that goes on the wire.
53
+ */
54
+ function buildForkSystemPrompt(systemPrompt, maxTurns, modelId) {
55
+ return appendModelSystemPromptAddendum(`${systemPrompt.trimEnd()}\n\n${buildForkReminder(maxTurns)}`, modelId);
51
56
  }
52
57
  /** Format the synthetic assistant response emitted when the fork hits its maxTurns cap. */
53
58
  function buildTurnLimitResponse(maxTurns) {
@@ -416,7 +421,7 @@ async function executeFork(parentContext, options) {
416
421
  const { instruction, signal, effortLevel, maxTurns, kind } = options;
417
422
  const reasoning = effortLevel ?? 'low';
418
423
  const traceDir = options.traceDir;
419
- const systemPrompt = buildForkSystemPrompt(callerSystemPrompt, maxTurns);
424
+ const systemPrompt = buildForkSystemPrompt(callerSystemPrompt, maxTurns, model.id);
420
425
  const startedAt = new Date().toISOString();
421
426
  const trace = {
422
427
  startedAt,
@@ -35,9 +35,9 @@ export const ALL_THINKING_LEVELS = [
35
35
  const INTERACTIVE_MODELS_PER_PROVIDER = {
36
36
  shortcut: new Set([
37
37
  SHORTCUT_MODEL_ID.ClaudeFable51,
38
- SHORTCUT_MODEL_ID.ClaudeOpus5,
39
- SHORTCUT_OPENAI_MODEL_ID,
40
- SHORTCUT_MODEL_ID.Gpt56Luna,
38
+ SHORTCUT_MODEL_ID.ClaudeOpus55,
39
+ SHORTCUT_MODEL_ID.Gpt6Sol,
40
+ SHORTCUT_MODEL_ID.Gpt6Luna,
41
41
  SHORTCUT_MODEL_ID.Gpt6Astra,
42
42
  SHORTCUT_MODEL_ID.Hosted
43
43
  ]),
@@ -2,6 +2,7 @@
2
2
  * Clone subagent — a full copy of the action agent that can spawn leaf subagents
3
3
  * but cannot spawn other clones.
4
4
  */
5
+ import { getEngineToolNames } from '../../prompts/shared-guidelines.js';
5
6
  import { BASH, EXECUTE_CODE, EXECUTE_TOOL, GET_TOOL_INFO, MCP_TOOL_NAMES, TAKE_SCREENSHOT, TASK, WRITE } from '../../../tool-names.js';
6
7
  import { buildActionPrompt } from '../../modes/action/prompt.js';
7
8
  import { DEFAULT_SUBAGENT_TIMEOUT_SECONDS } from '../defaults.js';
@@ -29,7 +30,9 @@ export const cloneAgent = {
29
30
  get systemPrompt() {
30
31
  return `${buildActionPrompt()}\n\n${SUBAGENT_OUTPUT_DISCIPLINE}`;
31
32
  },
32
- tools: [...CLONE_AGENT_TOOL_NAMES],
33
+ get tools() {
34
+ return getEngineToolNames([...CLONE_AGENT_TOOL_NAMES]);
35
+ },
33
36
  excludeSubagents: ['clone'],
34
37
  thinkingLevel: 'medium',
35
38
  timeoutSeconds: DEFAULT_SUBAGENT_TIMEOUT_SECONDS
@@ -6,7 +6,7 @@
6
6
  */
7
7
  import { getAgentTempDir } from '../../../config.js';
8
8
  import { BASH, EXECUTE_CODE } from '../../../tool-names.js';
9
- import { getEnginePrompts, pushActionSharedGuidelines } from '../../prompts/shared-guidelines.js';
9
+ import { getEnginePrompts, getEngineToolNames, pushActionSharedGuidelines } from '../../prompts/shared-guidelines.js';
10
10
  import { DEFAULT_SUBAGENT_TIMEOUT_SECONDS } from '../defaults.js';
11
11
  const NAME = 'simulation_agent';
12
12
  const DESCRIPTION = `\
@@ -20,10 +20,10 @@ function buildSystemPrompt() {
20
20
  ======================
21
21
  WORKBOOK SIMULATION AGENT
22
22
  ======================
23
- You have access to a spreadsheet engine (execute_code) with WRITE access, and a bash tool for computation.
23
+ You have access to a spreadsheet engine (${engine.spreadsheetTool}) with WRITE access, and a bash tool for computation.
24
24
  Current date: ${new Date().toISOString().slice(0, 10)}.
25
25
 
26
- Use the \`workbook\` global directly. Create or load workbooks if needed for the task.
26
+ ${engine.spreadsheetTool === BASH ? engine.execTool : 'Use the `workbook` global directly. Create or load workbooks if needed for the task.'}
27
27
 
28
28
  Use this workbook environment for any task that benefits from reading and writing to the workbook:
29
29
  - **What-if / scenario analysis**: change inputs and observe how outputs respond
@@ -41,17 +41,19 @@ Use this workbook environment for any task that benefits from reading and writin
41
41
 
42
42
  ## LAST STEP: EXPORT THE WORKBOOK
43
43
 
44
- After all changes are complete, save the modified workbook using execute_code:
44
+ ${engine.spreadsheetTool === BASH
45
+ ? `For a session you own, save with mog --session ID --close --output "${sharedTempDir}/simulation_result.xlsx". For a one-shot script, include --output "${sharedTempDir}/simulation_result.xlsx" with --file /path/script.js. Always identify the script or session to save. If working in the parent agent's session, leave it open and return its ID for the parent to save.`
46
+ : `After all changes are complete, save the modified workbook using execute_code:
45
47
 
46
48
  \`\`\`typescript
47
49
  await saveWorkbook("${sharedTempDir}/simulation_result.xlsx");
48
- \`\`\`
50
+ \`\`\``}
49
51
 
50
- This exports the full spreadsheet with all your modifications.
52
+ ${engine.spreadsheetTool === BASH ? 'Saving exports the full workbook. A borrowed session retains changes in memory until its owner saves it.' : 'This exports the full spreadsheet with all your modifications.'}
51
53
 
52
54
  ## OUTPUT
53
- - Export the modified workbook as described above. This is your primary output.
54
- - Save reports and analysis to file via bash. Do not try to pass data between execute_code and bash via global variables.
55
+ - ${engine.spreadsheetTool === BASH ? "Return the saved workbook path, or the parent agent's session ID if you left that session open." : 'Export the modified workbook as described above. This is your primary output.'}
56
+ - Save reports and analysis to file via bash. Do not try to pass data between ${engine.spreadsheetTool} and bash via global variables.
55
57
  - Return a concise summary of what you did, what the results are, and what the main agent should pay attention to in the saved spreadsheet. Always provide full file paths of results.
56
58
  `
57
59
  ];
@@ -64,7 +66,9 @@ export const simulationAgent = {
64
66
  get systemPrompt() {
65
67
  return buildSystemPrompt();
66
68
  },
67
- tools: [EXECUTE_CODE, BASH],
69
+ get tools() {
70
+ return getEngineToolNames([EXECUTE_CODE, BASH]);
71
+ },
68
72
  thinkingLevel: 'low',
69
73
  timeoutSeconds: DEFAULT_SUBAGENT_TIMEOUT_SECONDS
70
74
  };
@@ -5,6 +5,7 @@
5
5
  * Tools: bash (independent computation) + execute_code (workbook reads) +
6
6
  * write (verification reports) + llm_analysis (visual verification).
7
7
  */
8
+ import { getEnginePrompts, getEngineToolNames } from '../../prompts/shared-guidelines.js';
8
9
  import { BASH, EXECUTE_CODE, LLM_ANALYSIS, WRITE } from '../../../tool-names.js';
9
10
  import { DEFAULT_SUBAGENT_TIMEOUT_SECONDS } from '../defaults.js';
10
11
  const NAME = 'verification';
@@ -62,8 +63,17 @@ Output:
62
63
  export const verificationAgent = {
63
64
  name: NAME,
64
65
  description: DESCRIPTION,
65
- systemPrompt: VERIFICATION_SYSTEM_PROMPT,
66
- tools: [BASH, EXECUTE_CODE, WRITE, LLM_ANALYSIS],
66
+ get systemPrompt() {
67
+ const engine = getEnginePrompts('ask');
68
+ if (engine.spreadsheetTool !== BASH)
69
+ return VERIFICATION_SYSTEM_PROMPT;
70
+ return (VERIFICATION_SYSTEM_PROMPT.replace('with execute_code', `with ${engine.spreadsheetTool}`) +
71
+ '\n\n' +
72
+ engine.apiGuidelines);
73
+ },
74
+ get tools() {
75
+ return getEngineToolNames([BASH, EXECUTE_CODE, WRITE, LLM_ANALYSIS]);
76
+ },
67
77
  thinkingLevel: 'high',
68
78
  timeoutSeconds: DEFAULT_SUBAGENT_TIMEOUT_SECONDS
69
79
  };