@poping/yome 0.0.2 → 0.0.4
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/LICENSE +202 -0
- package/NOTICE +11 -0
- package/README.md +306 -27
- package/README.zh-CN.md +333 -0
- package/bin/yome-calwatch +0 -0
- package/dist/agent.d.ts +24 -2
- package/dist/agent.js +34 -2
- package/dist/agent.js.map +1 -1
- package/dist/context.d.ts +2 -0
- package/dist/context.js +121 -13
- package/dist/context.js.map +1 -1
- package/dist/daemon/calendarPermission.d.ts +10 -0
- package/dist/daemon/calendarPermission.js +68 -0
- package/dist/daemon/calendarPermission.js.map +1 -0
- package/dist/daemon/cronCli.d.ts +19 -0
- package/dist/daemon/cronCli.js +403 -0
- package/dist/daemon/cronCli.js.map +1 -0
- package/dist/daemon/envHint.d.ts +5 -0
- package/dist/daemon/envHint.js +139 -0
- package/dist/daemon/envHint.js.map +1 -0
- package/dist/daemon/humanCron.d.ts +1 -0
- package/dist/daemon/humanCron.js +72 -0
- package/dist/daemon/humanCron.js.map +1 -0
- package/dist/daemon/humanOnce.d.ts +1 -0
- package/dist/daemon/humanOnce.js +54 -0
- package/dist/daemon/humanOnce.js.map +1 -0
- package/dist/daemon/index.d.ts +5 -0
- package/dist/daemon/index.js +168 -0
- package/dist/daemon/index.js.map +1 -0
- package/dist/daemon/launchd.d.ts +7 -0
- package/dist/daemon/launchd.js +93 -0
- package/dist/daemon/launchd.js.map +1 -0
- package/dist/daemon/log.d.ts +17 -0
- package/dist/daemon/log.js +57 -0
- package/dist/daemon/log.js.map +1 -0
- package/dist/daemon/paths.d.ts +11 -0
- package/dist/daemon/paths.js +27 -0
- package/dist/daemon/paths.js.map +1 -0
- package/dist/daemon/runTaskEntry.d.ts +1 -0
- package/dist/daemon/runTaskEntry.js +67 -0
- package/dist/daemon/runTaskEntry.js.map +1 -0
- package/dist/daemon/runner.d.ts +21 -0
- package/dist/daemon/runner.js +175 -0
- package/dist/daemon/runner.js.map +1 -0
- package/dist/daemon/scheduler.d.ts +5 -0
- package/dist/daemon/scheduler.js +162 -0
- package/dist/daemon/scheduler.js.map +1 -0
- package/dist/daemon/taskStore.d.ts +62 -0
- package/dist/daemon/taskStore.js +88 -0
- package/dist/daemon/taskStore.js.map +1 -0
- package/dist/daemon/triggers/calendar.d.ts +8 -0
- package/dist/daemon/triggers/calendar.js +248 -0
- package/dist/daemon/triggers/calendar.js.map +1 -0
- package/dist/daemon/triggers/childRunner.d.ts +14 -0
- package/dist/daemon/triggers/childRunner.js +111 -0
- package/dist/daemon/triggers/childRunner.js.map +1 -0
- package/dist/daemon/triggers/cron.d.ts +14 -0
- package/dist/daemon/triggers/cron.js +91 -0
- package/dist/daemon/triggers/cron.js.map +1 -0
- package/dist/daemon/triggers/file.d.ts +7 -0
- package/dist/daemon/triggers/file.js +123 -0
- package/dist/daemon/triggers/file.js.map +1 -0
- package/dist/daemon/triggers/once.d.ts +10 -0
- package/dist/daemon/triggers/once.js +80 -0
- package/dist/daemon/triggers/once.js.map +1 -0
- package/dist/index.js +240 -15
- package/dist/index.js.map +1 -1
- package/dist/llm.js +45 -2
- package/dist/llm.js.map +1 -1
- package/dist/loops/chain.js +8 -0
- package/dist/loops/chain.js.map +1 -1
- package/dist/loops/evaluator.js +8 -0
- package/dist/loops/evaluator.js.map +1 -1
- package/dist/loops/orchestrator.js +8 -0
- package/dist/loops/orchestrator.js.map +1 -1
- package/dist/loops/parallel.js.map +1 -1
- package/dist/loops/route.js +8 -0
- package/dist/loops/route.js.map +1 -1
- package/dist/loops/simple.js +15 -0
- package/dist/loops/simple.js.map +1 -1
- package/dist/permissions/index.d.ts +1 -1
- package/dist/permissions/index.js +1 -1
- package/dist/permissions/index.js.map +1 -1
- package/dist/permissions/loader.d.ts +20 -1
- package/dist/permissions/loader.js +51 -0
- package/dist/permissions/loader.js.map +1 -1
- package/dist/redact.d.ts +56 -0
- package/dist/redact.js +191 -0
- package/dist/redact.js.map +1 -0
- package/dist/skills/runner/applescript.d.ts +49 -0
- package/dist/skills/runner/applescript.js +100 -0
- package/dist/skills/runner/applescript.js.map +1 -0
- package/dist/skills/runner/dispatcher.d.ts +128 -0
- package/dist/skills/runner/dispatcher.js +617 -0
- package/dist/skills/runner/dispatcher.js.map +1 -0
- package/dist/skills/runner/dispatcher.test.d.ts +1 -0
- package/dist/skills/runner/dispatcher.test.js +141 -0
- package/dist/skills/runner/dispatcher.test.js.map +1 -0
- package/dist/skills/runner/kernel.d.ts +8 -0
- package/dist/skills/runner/kernel.js +731 -0
- package/dist/skills/runner/kernel.js.map +1 -0
- package/dist/skills/runner/nodeBackend.d.ts +32 -0
- package/dist/skills/runner/nodeBackend.js +147 -0
- package/dist/skills/runner/nodeBackend.js.map +1 -0
- package/dist/skills/runner/tokenizer.d.ts +36 -0
- package/dist/skills/runner/tokenizer.js +177 -0
- package/dist/skills/runner/tokenizer.js.map +1 -0
- package/dist/state/todos.d.ts +12 -0
- package/dist/state/todos.js +32 -0
- package/dist/state/todos.js.map +1 -0
- package/dist/threadCli.d.ts +11 -0
- package/dist/threadCli.js +177 -0
- package/dist/threadCli.js.map +1 -0
- package/dist/threadShare.d.ts +21 -0
- package/dist/threadShare.js +121 -0
- package/dist/threadShare.js.map +1 -0
- package/dist/threadSubmit.d.ts +32 -0
- package/dist/threadSubmit.js +199 -0
- package/dist/threadSubmit.js.map +1 -0
- package/dist/tools/askUser.d.ts +20 -0
- package/dist/tools/askUser.js +126 -0
- package/dist/tools/askUser.js.map +1 -0
- package/dist/tools/bash.js +63 -14
- package/dist/tools/bash.js.map +1 -1
- package/dist/tools/index.d.ts +24 -2
- package/dist/tools/index.js +54 -5
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/skillCall.d.ts +2 -0
- package/dist/tools/skillCall.js +77 -0
- package/dist/tools/skillCall.js.map +1 -0
- package/dist/tools/todoWrite.d.ts +2 -0
- package/dist/tools/todoWrite.js +141 -0
- package/dist/tools/todoWrite.js.map +1 -0
- package/dist/tools/yome.d.ts +2 -0
- package/dist/tools/yome.js +87 -0
- package/dist/tools/yome.js.map +1 -0
- package/dist/ui/AgentPicker.js +3 -3
- package/dist/ui/AgentPicker.js.map +1 -1
- package/dist/ui/App.js +263 -61
- package/dist/ui/App.js.map +1 -1
- package/dist/ui/AskUserPrompt.d.ts +7 -0
- package/dist/ui/AskUserPrompt.js +78 -0
- package/dist/ui/AskUserPrompt.js.map +1 -0
- package/dist/ui/Banner.d.ts +2 -1
- package/dist/ui/Banner.js +23 -4
- package/dist/ui/Banner.js.map +1 -1
- package/dist/ui/InputBar.js +25 -36
- package/dist/ui/InputBar.js.map +1 -1
- package/dist/ui/Markdown.d.ts +2 -2
- package/dist/ui/Markdown.js +22 -7
- package/dist/ui/Markdown.js.map +1 -1
- package/dist/ui/MarketplacePicker.d.ts +7 -0
- package/dist/ui/MarketplacePicker.js +122 -0
- package/dist/ui/MarketplacePicker.js.map +1 -0
- package/dist/ui/MessageList.d.ts +12 -1
- package/dist/ui/MessageList.js +72 -7
- package/dist/ui/MessageList.js.map +1 -1
- package/dist/ui/ModelPicker.js +4 -4
- package/dist/ui/ModelPicker.js.map +1 -1
- package/dist/ui/MultilineTextInput.d.ts +31 -0
- package/dist/ui/MultilineTextInput.js +393 -0
- package/dist/ui/MultilineTextInput.js.map +1 -0
- package/dist/ui/MultilineTextInput.test.d.ts +1 -0
- package/dist/ui/MultilineTextInput.test.js +30 -0
- package/dist/ui/MultilineTextInput.test.js.map +1 -0
- package/dist/ui/PermissionPrompt.d.ts +16 -4
- package/dist/ui/PermissionPrompt.js +60 -15
- package/dist/ui/PermissionPrompt.js.map +1 -1
- package/dist/ui/SessionPicker.js +2 -2
- package/dist/ui/SessionPicker.js.map +1 -1
- package/dist/ui/ShimmerText.d.ts +8 -0
- package/dist/ui/ShimmerText.js +40 -0
- package/dist/ui/ShimmerText.js.map +1 -0
- package/dist/ui/Spinner.js +3 -9
- package/dist/ui/Spinner.js.map +1 -1
- package/dist/ui/TodoPanel.d.ts +7 -0
- package/dist/ui/TodoPanel.js +36 -0
- package/dist/ui/TodoPanel.js.map +1 -0
- package/dist/ui/TogglePicker.js +4 -4
- package/dist/ui/TogglePicker.js.map +1 -1
- package/dist/ui/ToolResult.js +6 -0
- package/dist/ui/ToolResult.js.map +1 -1
- package/dist/ui/UnifiedSkillsPicker.d.ts +10 -0
- package/dist/ui/UnifiedSkillsPicker.js +63 -0
- package/dist/ui/UnifiedSkillsPicker.js.map +1 -0
- package/dist/ui/animation.d.ts +3 -0
- package/dist/ui/animation.js +48 -0
- package/dist/ui/animation.js.map +1 -0
- package/dist/ui/useThrottledStream.d.ts +7 -0
- package/dist/ui/useThrottledStream.js +63 -0
- package/dist/ui/useThrottledStream.js.map +1 -0
- package/dist/yomeSkills/auth.d.ts +20 -0
- package/dist/yomeSkills/auth.js +70 -0
- package/dist/yomeSkills/auth.js.map +1 -0
- package/dist/yomeSkills/blacklist.d.ts +33 -0
- package/dist/yomeSkills/blacklist.js +101 -0
- package/dist/yomeSkills/blacklist.js.map +1 -0
- package/dist/yomeSkills/capabilities.d.ts +54 -0
- package/dist/yomeSkills/capabilities.js +175 -0
- package/dist/yomeSkills/capabilities.js.map +1 -0
- package/dist/yomeSkills/capabilityGuard.d.ts +31 -0
- package/dist/yomeSkills/capabilityGuard.js +113 -0
- package/dist/yomeSkills/capabilityGuard.js.map +1 -0
- package/dist/yomeSkills/cli.d.ts +25 -0
- package/dist/yomeSkills/cli.js +624 -0
- package/dist/yomeSkills/cli.js.map +1 -0
- package/dist/yomeSkills/deprecate.d.ts +29 -0
- package/dist/yomeSkills/deprecate.js +99 -0
- package/dist/yomeSkills/deprecate.js.map +1 -0
- package/dist/yomeSkills/devLink.d.ts +17 -0
- package/dist/yomeSkills/devLink.js +91 -0
- package/dist/yomeSkills/devLink.js.map +1 -0
- package/dist/yomeSkills/doctor.d.ts +13 -0
- package/dist/yomeSkills/doctor.js +152 -0
- package/dist/yomeSkills/doctor.js.map +1 -0
- package/dist/yomeSkills/enable.d.ts +8 -0
- package/dist/yomeSkills/enable.js +67 -0
- package/dist/yomeSkills/enable.js.map +1 -0
- package/dist/yomeSkills/hubPing.d.ts +1 -0
- package/dist/yomeSkills/hubPing.js +41 -0
- package/dist/yomeSkills/hubPing.js.map +1 -0
- package/dist/yomeSkills/install.d.ts +18 -0
- package/dist/yomeSkills/install.js +143 -0
- package/dist/yomeSkills/install.js.map +1 -0
- package/dist/yomeSkills/installFromHubTarball.d.ts +26 -0
- package/dist/yomeSkills/installFromHubTarball.js +161 -0
- package/dist/yomeSkills/installFromHubTarball.js.map +1 -0
- package/dist/yomeSkills/installGithub.d.ts +33 -0
- package/dist/yomeSkills/installGithub.js +213 -0
- package/dist/yomeSkills/installGithub.js.map +1 -0
- package/dist/yomeSkills/installMeta.d.ts +8 -0
- package/dist/yomeSkills/installMeta.js +76 -0
- package/dist/yomeSkills/installMeta.js.map +1 -0
- package/dist/yomeSkills/integrity.d.ts +26 -0
- package/dist/yomeSkills/integrity.js +107 -0
- package/dist/yomeSkills/integrity.js.map +1 -0
- package/dist/yomeSkills/invoke.d.ts +29 -0
- package/dist/yomeSkills/invoke.js +135 -0
- package/dist/yomeSkills/invoke.js.map +1 -0
- package/dist/yomeSkills/list.d.ts +11 -0
- package/dist/yomeSkills/list.js +55 -0
- package/dist/yomeSkills/list.js.map +1 -0
- package/dist/yomeSkills/login.d.ts +41 -0
- package/dist/yomeSkills/login.js +221 -0
- package/dist/yomeSkills/login.js.map +1 -0
- package/dist/yomeSkills/manifest.d.ts +60 -0
- package/dist/yomeSkills/manifest.js +47 -0
- package/dist/yomeSkills/manifest.js.map +1 -0
- package/dist/yomeSkills/paths.d.ts +13 -0
- package/dist/yomeSkills/paths.js +33 -0
- package/dist/yomeSkills/paths.js.map +1 -0
- package/dist/yomeSkills/publish.d.ts +18 -0
- package/dist/yomeSkills/publish.js +114 -0
- package/dist/yomeSkills/publish.js.map +1 -0
- package/dist/yomeSkills/rollback.d.ts +10 -0
- package/dist/yomeSkills/rollback.js +83 -0
- package/dist/yomeSkills/rollback.js.map +1 -0
- package/dist/yomeSkills/search.d.ts +21 -0
- package/dist/yomeSkills/search.js +31 -0
- package/dist/yomeSkills/search.js.map +1 -0
- package/dist/yomeSkills/skillsIndex.d.ts +36 -0
- package/dist/yomeSkills/skillsIndex.js +111 -0
- package/dist/yomeSkills/skillsIndex.js.map +1 -0
- package/dist/yomeSkills/unified.d.ts +53 -0
- package/dist/yomeSkills/unified.js +187 -0
- package/dist/yomeSkills/unified.js.map +1 -0
- package/dist/yomeSkills/uninstall.d.ts +7 -0
- package/dist/yomeSkills/uninstall.js +22 -0
- package/dist/yomeSkills/uninstall.js.map +1 -0
- package/dist/yomeSkills/update.d.ts +18 -0
- package/dist/yomeSkills/update.js +75 -0
- package/dist/yomeSkills/update.js.map +1 -0
- package/dist/yomeSkills/validate.d.ts +11 -0
- package/dist/yomeSkills/validate.js +99 -0
- package/dist/yomeSkills/validate.js.map +1 -0
- package/package.json +23 -6
|
@@ -0,0 +1,617 @@
|
|
|
1
|
+
// cli/src/skills/runner/dispatcher.ts
|
|
2
|
+
//
|
|
3
|
+
// Generic backend dispatcher for installed yome skills. Reads a skill's
|
|
4
|
+
// `backends/macos/manifest.json` (declarative — no JS code in the skill
|
|
5
|
+
// bundle) and translates an action invocation into an osascript run.
|
|
6
|
+
//
|
|
7
|
+
// A skill author publishes:
|
|
8
|
+
//
|
|
9
|
+
// ~/.yome/skills/@owner/foo/
|
|
10
|
+
// backends/macos/
|
|
11
|
+
// manifest.json
|
|
12
|
+
// new.applescript
|
|
13
|
+
// open.applescript
|
|
14
|
+
// open.poll.applescript
|
|
15
|
+
// slides.applescript
|
|
16
|
+
// ...
|
|
17
|
+
//
|
|
18
|
+
// `manifest.json` shape (this file is the contract):
|
|
19
|
+
//
|
|
20
|
+
// {
|
|
21
|
+
// "appBundleId": "com.microsoft.Powerpoint",
|
|
22
|
+
// "appName": "Microsoft PowerPoint",
|
|
23
|
+
// "actions": {
|
|
24
|
+
// "<action>": {
|
|
25
|
+
// "script": "new.applescript", // template file (required)
|
|
26
|
+
// "args": [ { "name", "from", "type?", "default?", "required?" } ],
|
|
27
|
+
// "openViaLaunchServices": false, // for `open` style
|
|
28
|
+
// "pollScript": "open.poll.applescript", // when openViaLaunchServices
|
|
29
|
+
// "uses": [ "applescript", "fs:write" ] // capabilities required
|
|
30
|
+
// }
|
|
31
|
+
// }
|
|
32
|
+
// }
|
|
33
|
+
//
|
|
34
|
+
// `args[].from` is one of:
|
|
35
|
+
// - "positional" → call.positionals[0]
|
|
36
|
+
// - "positional|--X" → positional, fall back to --X flag
|
|
37
|
+
// - "--X" → call.flags["X"]
|
|
38
|
+
//
|
|
39
|
+
// The .applescript file is rendered with mustache-ish placeholders:
|
|
40
|
+
// {{name}} → raw substitution (caller must escape)
|
|
41
|
+
// {{name|json}} → JSON-stringify (safe for AppleScript string literal)
|
|
42
|
+
// {{name|posix}} → wrap in `POSIX file "..."`
|
|
43
|
+
// {{name|bool}} → `true` / `false` AppleScript literal
|
|
44
|
+
import { readFileSync, existsSync } from 'node:fs';
|
|
45
|
+
import { join } from 'node:path';
|
|
46
|
+
import { runOsascript, openViaLaunchServices, } from './applescript.js';
|
|
47
|
+
// ──────────────────────────────────────────────────────────────────────
|
|
48
|
+
// Argument resolution
|
|
49
|
+
// ──────────────────────────────────────────────────────────────────────
|
|
50
|
+
function resolveArg(spec, call) {
|
|
51
|
+
const sources = spec.from.split('|').map((s) => s.trim());
|
|
52
|
+
for (const src of sources) {
|
|
53
|
+
if (src === 'positional') {
|
|
54
|
+
const v = call.positionals[0];
|
|
55
|
+
if (v !== undefined && v !== '')
|
|
56
|
+
return v;
|
|
57
|
+
}
|
|
58
|
+
else if (src.startsWith('--')) {
|
|
59
|
+
const key = src.slice(2);
|
|
60
|
+
const v = call.flags[key];
|
|
61
|
+
if (v !== undefined && v !== '')
|
|
62
|
+
return v;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
if (spec.default !== undefined)
|
|
66
|
+
return spec.default;
|
|
67
|
+
if (spec.required)
|
|
68
|
+
return null;
|
|
69
|
+
return spec.type === 'bool' ? false : '';
|
|
70
|
+
}
|
|
71
|
+
// ──────────────────────────────────────────────────────────────────────
|
|
72
|
+
// Template rendering
|
|
73
|
+
// ──────────────────────────────────────────────────────────────────────
|
|
74
|
+
function isTruthy(v) {
|
|
75
|
+
if (v === true || v === 1)
|
|
76
|
+
return true;
|
|
77
|
+
if (typeof v === 'string')
|
|
78
|
+
return v !== '' && v !== 'false' && v !== '0';
|
|
79
|
+
if (typeof v === 'number')
|
|
80
|
+
return v !== 0;
|
|
81
|
+
return false;
|
|
82
|
+
}
|
|
83
|
+
// Named colors that map to RGB triples. Superset of the CSS named-color list,
|
|
84
|
+
// extended with a few CN-friendly aliases. Single source of truth on the CLI
|
|
85
|
+
// side; the Swift bridges (PowerPointBridge / WordBridge / NumbersBridge /
|
|
86
|
+
// PagesBridge / KeynoteBridge) intentionally mirror this table — when adding
|
|
87
|
+
// or renaming an entry here, update those Swift maps in lockstep.
|
|
88
|
+
export const NAMED_COLORS = {
|
|
89
|
+
// grayscale
|
|
90
|
+
black: [0, 0, 0],
|
|
91
|
+
white: [255, 255, 255],
|
|
92
|
+
gray: [128, 128, 128],
|
|
93
|
+
grey: [128, 128, 128],
|
|
94
|
+
silver: [192, 192, 192],
|
|
95
|
+
lightgray: [211, 211, 211],
|
|
96
|
+
lightgrey: [211, 211, 211],
|
|
97
|
+
darkgray: [169, 169, 169],
|
|
98
|
+
darkgrey: [169, 169, 169],
|
|
99
|
+
// primaries / secondaries
|
|
100
|
+
red: [255, 0, 0],
|
|
101
|
+
green: [0, 128, 0],
|
|
102
|
+
lime: [0, 255, 0],
|
|
103
|
+
blue: [0, 0, 255],
|
|
104
|
+
yellow: [255, 255, 0],
|
|
105
|
+
cyan: [0, 255, 255],
|
|
106
|
+
aqua: [0, 255, 255],
|
|
107
|
+
magenta: [255, 0, 255],
|
|
108
|
+
fuchsia: [255, 0, 255],
|
|
109
|
+
// common css
|
|
110
|
+
navy: [0, 51, 102],
|
|
111
|
+
darkblue: [0, 51, 102],
|
|
112
|
+
royalblue: [65, 105, 225],
|
|
113
|
+
midnightblue: [25, 25, 112],
|
|
114
|
+
steelblue: [70, 130, 180],
|
|
115
|
+
skyblue: [135, 206, 235],
|
|
116
|
+
lightblue: [173, 216, 230],
|
|
117
|
+
teal: [0, 128, 128],
|
|
118
|
+
darkgreen: [0, 100, 0],
|
|
119
|
+
lightgreen: [144, 238, 144],
|
|
120
|
+
olive: [128, 128, 0],
|
|
121
|
+
orange: [255, 165, 0],
|
|
122
|
+
darkorange: [255, 140, 0],
|
|
123
|
+
gold: [255, 215, 0],
|
|
124
|
+
brown: [165, 42, 42],
|
|
125
|
+
maroon: [128, 0, 0],
|
|
126
|
+
crimson: [220, 20, 60],
|
|
127
|
+
pink: [255, 192, 203],
|
|
128
|
+
hotpink: [255, 105, 180],
|
|
129
|
+
purple: [128, 0, 128],
|
|
130
|
+
violet: [238, 130, 238],
|
|
131
|
+
indigo: [75, 0, 130],
|
|
132
|
+
beige: [245, 245, 220],
|
|
133
|
+
ivory: [255, 255, 240],
|
|
134
|
+
khaki: [240, 230, 140],
|
|
135
|
+
tan: [210, 180, 140],
|
|
136
|
+
// CN aliases (commonly used in prompts / docs)
|
|
137
|
+
'黑': [0, 0, 0],
|
|
138
|
+
'黑色': [0, 0, 0],
|
|
139
|
+
'白': [255, 255, 255],
|
|
140
|
+
'白色': [255, 255, 255],
|
|
141
|
+
'红': [255, 0, 0],
|
|
142
|
+
'红色': [255, 0, 0],
|
|
143
|
+
'蓝': [0, 0, 255],
|
|
144
|
+
'蓝色': [0, 0, 255],
|
|
145
|
+
'深蓝': [0, 51, 102],
|
|
146
|
+
'海军蓝': [0, 51, 102],
|
|
147
|
+
'绿': [0, 128, 0],
|
|
148
|
+
'绿色': [0, 128, 0],
|
|
149
|
+
'深绿': [0, 100, 0],
|
|
150
|
+
'黄': [255, 255, 0],
|
|
151
|
+
'黄色': [255, 255, 0],
|
|
152
|
+
'橙': [255, 165, 0],
|
|
153
|
+
'橙色': [255, 165, 0],
|
|
154
|
+
'紫': [128, 0, 128],
|
|
155
|
+
'紫色': [128, 0, 128],
|
|
156
|
+
'粉': [255, 192, 203],
|
|
157
|
+
'粉色': [255, 192, 203],
|
|
158
|
+
'灰': [128, 128, 128],
|
|
159
|
+
'灰色': [128, 128, 128],
|
|
160
|
+
'浅灰': [211, 211, 211],
|
|
161
|
+
'深灰': [169, 169, 169],
|
|
162
|
+
'青': [0, 255, 255],
|
|
163
|
+
'青色': [0, 255, 255],
|
|
164
|
+
};
|
|
165
|
+
export function parseColor(input) {
|
|
166
|
+
const raw = String(input ?? '');
|
|
167
|
+
const s = raw.trim();
|
|
168
|
+
if (!s)
|
|
169
|
+
return { ok: false, error: { input: raw, reason: 'color is empty' } };
|
|
170
|
+
// R,G,B
|
|
171
|
+
if (s.includes(',')) {
|
|
172
|
+
const csv = s.split(',').map((p) => p.trim());
|
|
173
|
+
if (csv.length === 3) {
|
|
174
|
+
const [r, g, b] = csv.map(Number);
|
|
175
|
+
if ([r, g, b].every((n) => Number.isInteger(n) && n >= 0 && n <= 255)) {
|
|
176
|
+
return { ok: true, literal: `{${r}, ${g}, ${b}}`, rgb: [r, g, b] };
|
|
177
|
+
}
|
|
178
|
+
return {
|
|
179
|
+
ok: false,
|
|
180
|
+
error: {
|
|
181
|
+
input: raw,
|
|
182
|
+
reason: 'looks like R,G,B but channels must be integers in 0..255',
|
|
183
|
+
},
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
// #RRGGBB or RRGGBB (only when the string is hex-shaped — never accept a
|
|
188
|
+
// bare named color as hex by accident, e.g. `cab` is not a color, `bed`
|
|
189
|
+
// would otherwise parse as #00bed0).
|
|
190
|
+
let hex = s.toLowerCase();
|
|
191
|
+
if (hex.startsWith('#'))
|
|
192
|
+
hex = hex.slice(1);
|
|
193
|
+
if (/^[0-9a-f]{6}$/.test(hex) && (s.startsWith('#') || /^[0-9a-f]{6}$/.test(s.toLowerCase()))) {
|
|
194
|
+
const v = parseInt(hex, 16);
|
|
195
|
+
const r = (v >> 16) & 0xff, g = (v >> 8) & 0xff, b = v & 0xff;
|
|
196
|
+
return { ok: true, literal: `{${r}, ${g}, ${b}}`, rgb: [r, g, b] };
|
|
197
|
+
}
|
|
198
|
+
// named
|
|
199
|
+
const key = s.toLowerCase();
|
|
200
|
+
const named = NAMED_COLORS[key] ?? NAMED_COLORS[s]; // CN keys aren't lowercased
|
|
201
|
+
if (named) {
|
|
202
|
+
return { ok: true, literal: `{${named[0]}, ${named[1]}, ${named[2]}}`, rgb: named };
|
|
203
|
+
}
|
|
204
|
+
return {
|
|
205
|
+
ok: false,
|
|
206
|
+
error: {
|
|
207
|
+
input: raw,
|
|
208
|
+
reason: 'unrecognised color (use #RRGGBB, R,G,B, or a named color like ' +
|
|
209
|
+
'red/blue/navy/teal/gray; full list in NAMED_COLORS)',
|
|
210
|
+
},
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Back-compat wrapper that returns the literal or null. New code should use
|
|
215
|
+
* `parseColor()` so the failure reason can be surfaced to the user.
|
|
216
|
+
*/
|
|
217
|
+
export function parseColorToAppleScriptRGB(input) {
|
|
218
|
+
const r = parseColor(input);
|
|
219
|
+
return r.ok ? r.literal : null;
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* `--type` alias → AppleScript `MsoAutoShapeType` enum literal. Unknown
|
|
223
|
+
* aliases degrade to `autoshape rectangle` so the template never emits
|
|
224
|
+
* broken AppleScript.
|
|
225
|
+
*/
|
|
226
|
+
export function parseAutoshapeToAppleScript(input) {
|
|
227
|
+
switch (input.trim().toLowerCase()) {
|
|
228
|
+
case 'rectangle': return 'autoshape rectangle';
|
|
229
|
+
case 'oval': return 'autoshape oval';
|
|
230
|
+
case 'roundedrect':
|
|
231
|
+
case 'roundedrectangle': return 'autoshape rounded rectangle';
|
|
232
|
+
case 'triangle': return 'autoshape isosceles triangle';
|
|
233
|
+
case 'rightarrow': return 'autoshape right arrow';
|
|
234
|
+
case 'star5':
|
|
235
|
+
case 'star': return 'autoshape five point star';
|
|
236
|
+
case 'pentagon': return 'autoshape regular pentagon';
|
|
237
|
+
case 'diamond': return 'autoshape diamond';
|
|
238
|
+
case 'hexagon': return 'autoshape hexagon';
|
|
239
|
+
case 'cloud': return 'autoshape cloud';
|
|
240
|
+
case 'lightningbolt': return 'autoshape lightning bolt';
|
|
241
|
+
case 'heart': return 'autoshape heart';
|
|
242
|
+
default: return 'autoshape rectangle';
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* `--align` parser → AppleScript `paragraph align ...` enum.
|
|
247
|
+
* Defaults silently to `paragraph align left` for unknown values; that
|
|
248
|
+
* matches the Swift bridge behaviour and avoids breaking the script render.
|
|
249
|
+
*/
|
|
250
|
+
export function parseAlignToAppleScript(input) {
|
|
251
|
+
switch (input.trim().toLowerCase()) {
|
|
252
|
+
case 'right': return 'paragraph align right';
|
|
253
|
+
case 'center': return 'paragraph align center';
|
|
254
|
+
case 'left':
|
|
255
|
+
default: return 'paragraph align left';
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* Render an AppleScript template.
|
|
260
|
+
*
|
|
261
|
+
* Two failure modes exist:
|
|
262
|
+
* - "soft": the filter accepts any input and just renders something
|
|
263
|
+
* (`json`, `posix`, `bool`, `as_int`, `align`, `autoshape`). These never
|
|
264
|
+
* populate `errors`.
|
|
265
|
+
* - "hard": the filter validates input and can reject it (`rgb`). When
|
|
266
|
+
* rejected we emit a syntactically VALID placeholder (`missing value`)
|
|
267
|
+
* so the rendered AppleScript still parses, AND we record the error
|
|
268
|
+
* in `errors[]`. The dispatcher checks `errors` BEFORE running osascript
|
|
269
|
+
* and refuses to run with a structured message — no more silent failure
|
|
270
|
+
* where `bg=深蓝` quietly emitted broken AppleScript.
|
|
271
|
+
*
|
|
272
|
+
* `{{name}}` / `{{name|filter}}` is the substitution syntax.
|
|
273
|
+
* `{{#if name}}…{{/if}}` is the conditional block (greedy, not nestable).
|
|
274
|
+
* Substitution happens AFTER conditionals, so a `{{#if bg}}…{{bg|rgb}}…{{/if}}`
|
|
275
|
+
* block whose `bg` was stripped never reaches the filter.
|
|
276
|
+
*/
|
|
277
|
+
export function renderTemplate(tpl, ctx) {
|
|
278
|
+
const errors = [];
|
|
279
|
+
// {{#if name}}...{{/if}} — block emitted only when ctx[name] is truthy.
|
|
280
|
+
let out = tpl.replace(/\{\{#if\s+([\w-]+)\s*\}\}([\s\S]*?)\{\{\/if\}\}/g, (_, name, body) => {
|
|
281
|
+
return isTruthy(ctx[name]) ? body : '';
|
|
282
|
+
});
|
|
283
|
+
// {{name}} / {{name|filter}} substitution.
|
|
284
|
+
out = out.replace(/\{\{\s*([\w-]+)(?:\s*\|\s*(\w+))?\s*\}\}/g, (_, name, filter) => {
|
|
285
|
+
const raw = ctx[name];
|
|
286
|
+
if (raw === null || raw === undefined)
|
|
287
|
+
return '';
|
|
288
|
+
if (filter === 'json' || filter === 'string') {
|
|
289
|
+
return '"' + String(raw).replace(/\\/g, '\\\\').replace(/"/g, '\\"') + '"';
|
|
290
|
+
}
|
|
291
|
+
if (filter === 'posix') {
|
|
292
|
+
const s = String(raw).replace(/\\/g, '\\\\').replace(/"/g, '\\"');
|
|
293
|
+
return `POSIX file "${s}"`;
|
|
294
|
+
}
|
|
295
|
+
if (filter === 'bool') {
|
|
296
|
+
return isTruthy(raw) ? 'true' : 'false';
|
|
297
|
+
}
|
|
298
|
+
if (filter === 'as_int') {
|
|
299
|
+
const n = parseInt(String(raw), 10);
|
|
300
|
+
return Number.isFinite(n) ? String(n) : '0';
|
|
301
|
+
}
|
|
302
|
+
if (filter === 'rgb') {
|
|
303
|
+
// An empty/false value means "user didn't pass this optional flag" —
|
|
304
|
+
// emit an empty literal so templates that do `set x to {{c|rgb}}`
|
|
305
|
+
// followed by `if x is not "" then …` keep working. We only validate
|
|
306
|
+
// when the user ACTUALLY provided a value.
|
|
307
|
+
const s = String(raw);
|
|
308
|
+
if (s === '' || raw === false)
|
|
309
|
+
return '""';
|
|
310
|
+
const r = parseColor(s);
|
|
311
|
+
if (r.ok)
|
|
312
|
+
return r.literal;
|
|
313
|
+
errors.push({ arg: name, filter: 'rgb', reason: `--${name}=${r.error.input}: ${r.error.reason}` });
|
|
314
|
+
// Emit a syntactically VALID AppleScript token so the surrounding
|
|
315
|
+
// script still parses — the dispatcher sees `errors[]` populated and
|
|
316
|
+
// refuses to run osascript anyway, but we want render to be total.
|
|
317
|
+
return 'missing value';
|
|
318
|
+
}
|
|
319
|
+
if (filter === 'align') {
|
|
320
|
+
return parseAlignToAppleScript(String(raw));
|
|
321
|
+
}
|
|
322
|
+
if (filter === 'autoshape') {
|
|
323
|
+
return parseAutoshapeToAppleScript(String(raw));
|
|
324
|
+
}
|
|
325
|
+
return String(raw);
|
|
326
|
+
});
|
|
327
|
+
return { source: out, errors };
|
|
328
|
+
}
|
|
329
|
+
// ──────────────────────────────────────────────────────────────────────
|
|
330
|
+
// Dispatcher
|
|
331
|
+
// ──────────────────────────────────────────────────────────────────────
|
|
332
|
+
export function loadMacosBackend(skillDir) {
|
|
333
|
+
const f = join(skillDir, 'backends', 'macos', 'manifest.json');
|
|
334
|
+
if (!existsSync(f))
|
|
335
|
+
return null;
|
|
336
|
+
try {
|
|
337
|
+
const obj = JSON.parse(readFileSync(f, 'utf-8'));
|
|
338
|
+
if (!obj || typeof obj !== 'object' || !obj.actions)
|
|
339
|
+
return null;
|
|
340
|
+
return obj;
|
|
341
|
+
}
|
|
342
|
+
catch {
|
|
343
|
+
return null;
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
/**
|
|
347
|
+
* Run an action on a macOS-backed skill. Returns the osascript outcome
|
|
348
|
+
* verbatim (caller decides how to render).
|
|
349
|
+
*/
|
|
350
|
+
export function dispatchMacos(skillDir, action, call) {
|
|
351
|
+
const backend = loadMacosBackend(skillDir);
|
|
352
|
+
if (!backend) {
|
|
353
|
+
return { ok: false, stdout: '', stderr: 'no macos backend installed for this skill', exitCode: 2 };
|
|
354
|
+
}
|
|
355
|
+
const actionSpec = backend.actions[action];
|
|
356
|
+
if (!actionSpec) {
|
|
357
|
+
return { ok: false, stdout: '', stderr: `unknown action: ${action}`, exitCode: 2 };
|
|
358
|
+
}
|
|
359
|
+
// Resolve named args.
|
|
360
|
+
const ctx = {};
|
|
361
|
+
for (const arg of actionSpec.args ?? []) {
|
|
362
|
+
const v = resolveArg(arg, call);
|
|
363
|
+
if (v === null) {
|
|
364
|
+
return {
|
|
365
|
+
ok: false, stdout: '',
|
|
366
|
+
stderr: `missing required argument: ${arg.name} (from ${arg.from})`,
|
|
367
|
+
exitCode: 2,
|
|
368
|
+
};
|
|
369
|
+
}
|
|
370
|
+
ctx[arg.name] = v;
|
|
371
|
+
}
|
|
372
|
+
// Read + render the AppleScript template.
|
|
373
|
+
const scriptPath = join(skillDir, 'backends', 'macos', actionSpec.script);
|
|
374
|
+
if (!existsSync(scriptPath)) {
|
|
375
|
+
return { ok: false, stdout: '', stderr: `script not found: ${scriptPath}`, exitCode: 2 };
|
|
376
|
+
}
|
|
377
|
+
let tpl = '';
|
|
378
|
+
try {
|
|
379
|
+
tpl = readFileSync(scriptPath, 'utf-8');
|
|
380
|
+
}
|
|
381
|
+
catch (e) {
|
|
382
|
+
return { ok: false, stdout: '', stderr: `read script failed: ${e.message}`, exitCode: 2 };
|
|
383
|
+
}
|
|
384
|
+
const rendered = renderTemplate(tpl, ctx);
|
|
385
|
+
if (rendered.errors.length > 0) {
|
|
386
|
+
return {
|
|
387
|
+
ok: false,
|
|
388
|
+
stdout: '',
|
|
389
|
+
stderr: rendered.errors.map((e) => `[${action}] bad argument: ${e.reason}`).join('\n'),
|
|
390
|
+
exitCode: 2,
|
|
391
|
+
};
|
|
392
|
+
}
|
|
393
|
+
const source = rendered.source;
|
|
394
|
+
if (process.env.YOME_DEBUG_SKILL === '1') {
|
|
395
|
+
process.stderr.write(`── rendered ${actionSpec.script} ──\n${source}\n── end ──\n`);
|
|
396
|
+
}
|
|
397
|
+
// Two execution modes:
|
|
398
|
+
// 1) openViaLaunchServices — for actions that open a file in an app
|
|
399
|
+
// and then need to wait until the app reports it loaded.
|
|
400
|
+
// 2) plain osascript -e — everything else.
|
|
401
|
+
if (actionSpec.openViaLaunchServices) {
|
|
402
|
+
const filePath = String(ctx.path ?? ctx.positional ?? '');
|
|
403
|
+
const appName = backend.appName ?? '';
|
|
404
|
+
if (!filePath || !appName) {
|
|
405
|
+
return { ok: false, stdout: '', stderr: 'openViaLaunchServices requires {{path}} arg and backend.appName', exitCode: 2 };
|
|
406
|
+
}
|
|
407
|
+
let pollSrc = '';
|
|
408
|
+
if (actionSpec.pollScript) {
|
|
409
|
+
const p = join(skillDir, 'backends', 'macos', actionSpec.pollScript);
|
|
410
|
+
if (existsSync(p)) {
|
|
411
|
+
const r = renderTemplate(readFileSync(p, 'utf-8'), ctx);
|
|
412
|
+
if (r.errors.length > 0) {
|
|
413
|
+
return {
|
|
414
|
+
ok: false, stdout: '',
|
|
415
|
+
stderr: r.errors.map((e) => `[${action}.poll] bad argument: ${e.reason}`).join('\n'),
|
|
416
|
+
exitCode: 2,
|
|
417
|
+
};
|
|
418
|
+
}
|
|
419
|
+
pollSrc = r.source;
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
if (!pollSrc)
|
|
423
|
+
pollSrc = source; // fallback: poll with the main script
|
|
424
|
+
const r = openViaLaunchServices({
|
|
425
|
+
filePath,
|
|
426
|
+
appName,
|
|
427
|
+
pollScript: pollSrc,
|
|
428
|
+
});
|
|
429
|
+
return { ok: r.ok, stdout: r.stdout, stderr: r.stderr, exitCode: r.ok ? 0 : 1 };
|
|
430
|
+
}
|
|
431
|
+
return adapt(runOsascript(source, { timeoutMs: actionSpec.timeoutMs }));
|
|
432
|
+
}
|
|
433
|
+
function adapt(r) {
|
|
434
|
+
return { ok: r.ok, stdout: r.stdout, stderr: r.stderr, exitCode: r.exitCode };
|
|
435
|
+
}
|
|
436
|
+
export async function dispatchMacosBatchMerged(skillDir, entries, opts) {
|
|
437
|
+
const backend = loadMacosBackend(skillDir);
|
|
438
|
+
if (!backend) {
|
|
439
|
+
return { ok: false, stdout: '', stderr: 'no macos backend installed for this skill', exitCode: 2 };
|
|
440
|
+
}
|
|
441
|
+
// Render every entry. We fail fast on render errors (missing arg / unknown
|
|
442
|
+
// action) — those are user-facing bugs in the batch body, not runtime.
|
|
443
|
+
const blocks = [];
|
|
444
|
+
for (let i = 0; i < entries.length; i++) {
|
|
445
|
+
const e = entries[i];
|
|
446
|
+
const spec = backend.actions[e.action];
|
|
447
|
+
if (!spec) {
|
|
448
|
+
return {
|
|
449
|
+
ok: false, stdout: '',
|
|
450
|
+
stderr: `merge: unknown action '${e.action}' (line ${i + 1})`,
|
|
451
|
+
exitCode: 2,
|
|
452
|
+
};
|
|
453
|
+
}
|
|
454
|
+
if (spec.openViaLaunchServices) {
|
|
455
|
+
return {
|
|
456
|
+
ok: false, stdout: '',
|
|
457
|
+
stderr: `merge: action '${e.action}' uses Launch Services and cannot be merged ` +
|
|
458
|
+
`(line ${i + 1}). Re-run without --merge, or move it to its own batch.`,
|
|
459
|
+
exitCode: 2,
|
|
460
|
+
};
|
|
461
|
+
}
|
|
462
|
+
// Resolve args.
|
|
463
|
+
const ctx = {};
|
|
464
|
+
for (const arg of spec.args ?? []) {
|
|
465
|
+
const v = resolveArg(arg, e.call);
|
|
466
|
+
if (v === null) {
|
|
467
|
+
return {
|
|
468
|
+
ok: false, stdout: '',
|
|
469
|
+
stderr: `merge: line ${i + 1} (${e.action}): missing required arg ${arg.name}`,
|
|
470
|
+
exitCode: 2,
|
|
471
|
+
};
|
|
472
|
+
}
|
|
473
|
+
ctx[arg.name] = v;
|
|
474
|
+
}
|
|
475
|
+
const scriptPath = join(skillDir, 'backends', 'macos', spec.script);
|
|
476
|
+
if (!existsSync(scriptPath)) {
|
|
477
|
+
return {
|
|
478
|
+
ok: false, stdout: '',
|
|
479
|
+
stderr: `merge: script not found for ${e.action}: ${scriptPath}`,
|
|
480
|
+
exitCode: 2,
|
|
481
|
+
};
|
|
482
|
+
}
|
|
483
|
+
const tpl = readFileSync(scriptPath, 'utf-8');
|
|
484
|
+
const rendered = renderTemplate(tpl, ctx);
|
|
485
|
+
if (rendered.errors.length > 0) {
|
|
486
|
+
// Fail the whole batch BEFORE running osascript: a render error in
|
|
487
|
+
// one step (e.g. a bad color name) used to silently emit broken
|
|
488
|
+
// AppleScript and produce a confusing "OK" line. Surface it loudly.
|
|
489
|
+
return {
|
|
490
|
+
ok: false, stdout: '',
|
|
491
|
+
stderr: `merge: line ${i + 1} (${e.action}): ` +
|
|
492
|
+
rendered.errors.map((er) => er.reason).join('; '),
|
|
493
|
+
exitCode: 2,
|
|
494
|
+
};
|
|
495
|
+
}
|
|
496
|
+
// Wrap each rendered block in a try so a single failure doesn't kill
|
|
497
|
+
// the whole script. We capture per-step result into a list so the
|
|
498
|
+
// outer return can report the full status TSV.
|
|
499
|
+
blocks.push(buildMergedBlock(i, e.action, rendered.source, opts.keepGoing));
|
|
500
|
+
}
|
|
501
|
+
const finalSource = `
|
|
502
|
+
-- yome-merged-batch (${entries.length} steps)
|
|
503
|
+
set results to {}
|
|
504
|
+
${blocks.join('\n')}
|
|
505
|
+
set AppleScript's text item delimiters to linefeed
|
|
506
|
+
return results as string
|
|
507
|
+
`;
|
|
508
|
+
if (process.env.YOME_DEBUG_SKILL === '1') {
|
|
509
|
+
process.stderr.write(`── merged batch (${entries.length} steps) ──\n${finalSource}\n── end ──\n`);
|
|
510
|
+
}
|
|
511
|
+
const r = runOsascript(finalSource);
|
|
512
|
+
if (!r.ok && !r.stdout) {
|
|
513
|
+
return { ok: false, stdout: '', stderr: r.stderr, exitCode: r.exitCode };
|
|
514
|
+
}
|
|
515
|
+
// Parse per-step lines from osascript stdout. Each line:
|
|
516
|
+
// "<status>\t<idx>\t<action>\t<msg>"
|
|
517
|
+
//
|
|
518
|
+
// The `<msg>` for partial-success-aware actions (xl/ppt/doc fmt, cf, …)
|
|
519
|
+
// follows the convention "<okList>|<failList>" — when failList is non-empty
|
|
520
|
+
// the step is reported as a partial failure even though osascript itself
|
|
521
|
+
// returned without throwing. Without this demux a `fmt` whose `bg` silently
|
|
522
|
+
// failed would still be counted as ✓ in the batch summary.
|
|
523
|
+
const lines = r.stdout.split(/\n/).filter(Boolean);
|
|
524
|
+
let okCount = 0, partialCount = 0, failCount = 0;
|
|
525
|
+
const summary = [];
|
|
526
|
+
for (const line of lines) {
|
|
527
|
+
const parts = line.split('\t');
|
|
528
|
+
const status = parts[0];
|
|
529
|
+
const idx = parts[1] ?? '?';
|
|
530
|
+
const action = parts[2] ?? '?';
|
|
531
|
+
const msg = parts.slice(3).join('\t');
|
|
532
|
+
if (status === 'OK') {
|
|
533
|
+
const partial = parsePartialOkFail(msg);
|
|
534
|
+
if (partial && partial.fail) {
|
|
535
|
+
partialCount++;
|
|
536
|
+
const okPart = partial.ok ? `ok=[${partial.ok}] ` : '';
|
|
537
|
+
summary.push(`⚠ [${idx}] ${action}: ${okPart}failed=[${partial.fail}]`);
|
|
538
|
+
}
|
|
539
|
+
else {
|
|
540
|
+
okCount++;
|
|
541
|
+
summary.push(`✓ [${idx}] ${action}${msg ? ': ' + msg : ''}`);
|
|
542
|
+
}
|
|
543
|
+
}
|
|
544
|
+
else {
|
|
545
|
+
failCount++;
|
|
546
|
+
summary.push(`✗ [${idx}] ${action}: ${msg}`);
|
|
547
|
+
}
|
|
548
|
+
}
|
|
549
|
+
const totalFail = failCount + partialCount;
|
|
550
|
+
const tail = totalFail === 0
|
|
551
|
+
? `\n— merged batch ok (${entries.length} commands, single osascript)`
|
|
552
|
+
: `\n— merged batch: ${okCount}/${entries.length} ok` +
|
|
553
|
+
(partialCount ? `, ${partialCount} partial` : '') +
|
|
554
|
+
(failCount ? `, ${failCount} failed` : '');
|
|
555
|
+
const stderrParts = [];
|
|
556
|
+
if (failCount)
|
|
557
|
+
stderrParts.push(`${failCount} step(s) failed`);
|
|
558
|
+
if (partialCount)
|
|
559
|
+
stderrParts.push(`${partialCount} step(s) partially failed`);
|
|
560
|
+
return {
|
|
561
|
+
ok: totalFail === 0,
|
|
562
|
+
stdout: summary.join('\n') + tail,
|
|
563
|
+
stderr: stderrParts.length ? stderrParts.join('; ') + ' (see stdout for details)' : '',
|
|
564
|
+
exitCode: totalFail === 0 ? 0 : 1,
|
|
565
|
+
};
|
|
566
|
+
}
|
|
567
|
+
/**
|
|
568
|
+
* Demux the "<okList>|<failList>" convention used by partial-success-aware
|
|
569
|
+
* AppleScript templates (xl/ppt/doc `fmt`, `cf`, …). Returns null when the
|
|
570
|
+
* payload doesn't look like that shape — callers should treat null as
|
|
571
|
+
* "ordinary opaque message, leave it alone".
|
|
572
|
+
*/
|
|
573
|
+
export function parsePartialOkFail(msg) {
|
|
574
|
+
// Conservative: only one '|' separator at the top level. We don't try to
|
|
575
|
+
// be clever about escaping because the templates that emit this shape only
|
|
576
|
+
// produce comma-separated identifiers + AppleScript error messages on the
|
|
577
|
+
// right (which never contain `|` in practice).
|
|
578
|
+
const i = msg.indexOf('|');
|
|
579
|
+
if (i < 0)
|
|
580
|
+
return null;
|
|
581
|
+
return { ok: msg.slice(0, i), fail: msg.slice(i + 1) };
|
|
582
|
+
}
|
|
583
|
+
/**
|
|
584
|
+
* Wrap a rendered .applescript snippet so:
|
|
585
|
+
* - Its return value (if any) is captured into the outer `results` list
|
|
586
|
+
* prefixed with status + idx + action so the TS side can demux.
|
|
587
|
+
* - Errors are caught and recorded as "FAIL".
|
|
588
|
+
* - When keepGoing is false the first failure throws to abort the rest.
|
|
589
|
+
*
|
|
590
|
+
* The trick: the rendered snippets are top-level AppleScript with their
|
|
591
|
+
* own `tell` blocks; we can't directly assign their `return` to a var.
|
|
592
|
+
* We wrap them in `run script` of a freshly-built handler instead — that
|
|
593
|
+
* lets us catch errors AND collect the result.
|
|
594
|
+
*/
|
|
595
|
+
function buildMergedBlock(idx, action, source, keepGoing) {
|
|
596
|
+
// Escape source for embedding inside an AppleScript string literal.
|
|
597
|
+
const escaped = source.replace(/\\/g, '\\\\').replace(/"/g, '\\"');
|
|
598
|
+
const tag = `[${idx + 1}] ${action}`;
|
|
599
|
+
const onError = keepGoing
|
|
600
|
+
? '' // swallow + continue
|
|
601
|
+
: 'error errMsg'; // re-throw to abort the rest of the batch
|
|
602
|
+
return `
|
|
603
|
+
try
|
|
604
|
+
set stepSrc to "${escaped}"
|
|
605
|
+
set stepResult to (run script stepSrc)
|
|
606
|
+
if stepResult is missing value then
|
|
607
|
+
set end of results to "OK\t${idx + 1}\t${action}\t"
|
|
608
|
+
else
|
|
609
|
+
set end of results to "OK\t${idx + 1}\t${action}\t" & (stepResult as string)
|
|
610
|
+
end if
|
|
611
|
+
on error errMsg
|
|
612
|
+
set end of results to "FAIL\t${idx + 1}\t${action}\t" & errMsg
|
|
613
|
+
${onError}
|
|
614
|
+
end try
|
|
615
|
+
`;
|
|
616
|
+
}
|
|
617
|
+
//# sourceMappingURL=dispatcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dispatcher.js","sourceRoot":"","sources":["../../../src/skills/runner/dispatcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|