@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.
Files changed (276) hide show
  1. package/LICENSE +202 -0
  2. package/NOTICE +11 -0
  3. package/README.md +306 -27
  4. package/README.zh-CN.md +333 -0
  5. package/bin/yome-calwatch +0 -0
  6. package/dist/agent.d.ts +24 -2
  7. package/dist/agent.js +34 -2
  8. package/dist/agent.js.map +1 -1
  9. package/dist/context.d.ts +2 -0
  10. package/dist/context.js +121 -13
  11. package/dist/context.js.map +1 -1
  12. package/dist/daemon/calendarPermission.d.ts +10 -0
  13. package/dist/daemon/calendarPermission.js +68 -0
  14. package/dist/daemon/calendarPermission.js.map +1 -0
  15. package/dist/daemon/cronCli.d.ts +19 -0
  16. package/dist/daemon/cronCli.js +403 -0
  17. package/dist/daemon/cronCli.js.map +1 -0
  18. package/dist/daemon/envHint.d.ts +5 -0
  19. package/dist/daemon/envHint.js +139 -0
  20. package/dist/daemon/envHint.js.map +1 -0
  21. package/dist/daemon/humanCron.d.ts +1 -0
  22. package/dist/daemon/humanCron.js +72 -0
  23. package/dist/daemon/humanCron.js.map +1 -0
  24. package/dist/daemon/humanOnce.d.ts +1 -0
  25. package/dist/daemon/humanOnce.js +54 -0
  26. package/dist/daemon/humanOnce.js.map +1 -0
  27. package/dist/daemon/index.d.ts +5 -0
  28. package/dist/daemon/index.js +168 -0
  29. package/dist/daemon/index.js.map +1 -0
  30. package/dist/daemon/launchd.d.ts +7 -0
  31. package/dist/daemon/launchd.js +93 -0
  32. package/dist/daemon/launchd.js.map +1 -0
  33. package/dist/daemon/log.d.ts +17 -0
  34. package/dist/daemon/log.js +57 -0
  35. package/dist/daemon/log.js.map +1 -0
  36. package/dist/daemon/paths.d.ts +11 -0
  37. package/dist/daemon/paths.js +27 -0
  38. package/dist/daemon/paths.js.map +1 -0
  39. package/dist/daemon/runTaskEntry.d.ts +1 -0
  40. package/dist/daemon/runTaskEntry.js +67 -0
  41. package/dist/daemon/runTaskEntry.js.map +1 -0
  42. package/dist/daemon/runner.d.ts +21 -0
  43. package/dist/daemon/runner.js +175 -0
  44. package/dist/daemon/runner.js.map +1 -0
  45. package/dist/daemon/scheduler.d.ts +5 -0
  46. package/dist/daemon/scheduler.js +162 -0
  47. package/dist/daemon/scheduler.js.map +1 -0
  48. package/dist/daemon/taskStore.d.ts +62 -0
  49. package/dist/daemon/taskStore.js +88 -0
  50. package/dist/daemon/taskStore.js.map +1 -0
  51. package/dist/daemon/triggers/calendar.d.ts +8 -0
  52. package/dist/daemon/triggers/calendar.js +248 -0
  53. package/dist/daemon/triggers/calendar.js.map +1 -0
  54. package/dist/daemon/triggers/childRunner.d.ts +14 -0
  55. package/dist/daemon/triggers/childRunner.js +111 -0
  56. package/dist/daemon/triggers/childRunner.js.map +1 -0
  57. package/dist/daemon/triggers/cron.d.ts +14 -0
  58. package/dist/daemon/triggers/cron.js +91 -0
  59. package/dist/daemon/triggers/cron.js.map +1 -0
  60. package/dist/daemon/triggers/file.d.ts +7 -0
  61. package/dist/daemon/triggers/file.js +123 -0
  62. package/dist/daemon/triggers/file.js.map +1 -0
  63. package/dist/daemon/triggers/once.d.ts +10 -0
  64. package/dist/daemon/triggers/once.js +80 -0
  65. package/dist/daemon/triggers/once.js.map +1 -0
  66. package/dist/index.js +240 -15
  67. package/dist/index.js.map +1 -1
  68. package/dist/llm.js +45 -2
  69. package/dist/llm.js.map +1 -1
  70. package/dist/loops/chain.js +8 -0
  71. package/dist/loops/chain.js.map +1 -1
  72. package/dist/loops/evaluator.js +8 -0
  73. package/dist/loops/evaluator.js.map +1 -1
  74. package/dist/loops/orchestrator.js +8 -0
  75. package/dist/loops/orchestrator.js.map +1 -1
  76. package/dist/loops/parallel.js.map +1 -1
  77. package/dist/loops/route.js +8 -0
  78. package/dist/loops/route.js.map +1 -1
  79. package/dist/loops/simple.js +15 -0
  80. package/dist/loops/simple.js.map +1 -1
  81. package/dist/permissions/index.d.ts +1 -1
  82. package/dist/permissions/index.js +1 -1
  83. package/dist/permissions/index.js.map +1 -1
  84. package/dist/permissions/loader.d.ts +20 -1
  85. package/dist/permissions/loader.js +51 -0
  86. package/dist/permissions/loader.js.map +1 -1
  87. package/dist/redact.d.ts +56 -0
  88. package/dist/redact.js +191 -0
  89. package/dist/redact.js.map +1 -0
  90. package/dist/skills/runner/applescript.d.ts +49 -0
  91. package/dist/skills/runner/applescript.js +100 -0
  92. package/dist/skills/runner/applescript.js.map +1 -0
  93. package/dist/skills/runner/dispatcher.d.ts +128 -0
  94. package/dist/skills/runner/dispatcher.js +617 -0
  95. package/dist/skills/runner/dispatcher.js.map +1 -0
  96. package/dist/skills/runner/dispatcher.test.d.ts +1 -0
  97. package/dist/skills/runner/dispatcher.test.js +141 -0
  98. package/dist/skills/runner/dispatcher.test.js.map +1 -0
  99. package/dist/skills/runner/kernel.d.ts +8 -0
  100. package/dist/skills/runner/kernel.js +731 -0
  101. package/dist/skills/runner/kernel.js.map +1 -0
  102. package/dist/skills/runner/nodeBackend.d.ts +32 -0
  103. package/dist/skills/runner/nodeBackend.js +147 -0
  104. package/dist/skills/runner/nodeBackend.js.map +1 -0
  105. package/dist/skills/runner/tokenizer.d.ts +36 -0
  106. package/dist/skills/runner/tokenizer.js +177 -0
  107. package/dist/skills/runner/tokenizer.js.map +1 -0
  108. package/dist/state/todos.d.ts +12 -0
  109. package/dist/state/todos.js +32 -0
  110. package/dist/state/todos.js.map +1 -0
  111. package/dist/threadCli.d.ts +11 -0
  112. package/dist/threadCli.js +177 -0
  113. package/dist/threadCli.js.map +1 -0
  114. package/dist/threadShare.d.ts +21 -0
  115. package/dist/threadShare.js +121 -0
  116. package/dist/threadShare.js.map +1 -0
  117. package/dist/threadSubmit.d.ts +32 -0
  118. package/dist/threadSubmit.js +199 -0
  119. package/dist/threadSubmit.js.map +1 -0
  120. package/dist/tools/askUser.d.ts +20 -0
  121. package/dist/tools/askUser.js +126 -0
  122. package/dist/tools/askUser.js.map +1 -0
  123. package/dist/tools/bash.js +63 -14
  124. package/dist/tools/bash.js.map +1 -1
  125. package/dist/tools/index.d.ts +24 -2
  126. package/dist/tools/index.js +54 -5
  127. package/dist/tools/index.js.map +1 -1
  128. package/dist/tools/skillCall.d.ts +2 -0
  129. package/dist/tools/skillCall.js +77 -0
  130. package/dist/tools/skillCall.js.map +1 -0
  131. package/dist/tools/todoWrite.d.ts +2 -0
  132. package/dist/tools/todoWrite.js +141 -0
  133. package/dist/tools/todoWrite.js.map +1 -0
  134. package/dist/tools/yome.d.ts +2 -0
  135. package/dist/tools/yome.js +87 -0
  136. package/dist/tools/yome.js.map +1 -0
  137. package/dist/ui/AgentPicker.js +3 -3
  138. package/dist/ui/AgentPicker.js.map +1 -1
  139. package/dist/ui/App.js +263 -61
  140. package/dist/ui/App.js.map +1 -1
  141. package/dist/ui/AskUserPrompt.d.ts +7 -0
  142. package/dist/ui/AskUserPrompt.js +78 -0
  143. package/dist/ui/AskUserPrompt.js.map +1 -0
  144. package/dist/ui/Banner.d.ts +2 -1
  145. package/dist/ui/Banner.js +23 -4
  146. package/dist/ui/Banner.js.map +1 -1
  147. package/dist/ui/InputBar.js +25 -36
  148. package/dist/ui/InputBar.js.map +1 -1
  149. package/dist/ui/Markdown.d.ts +2 -2
  150. package/dist/ui/Markdown.js +22 -7
  151. package/dist/ui/Markdown.js.map +1 -1
  152. package/dist/ui/MarketplacePicker.d.ts +7 -0
  153. package/dist/ui/MarketplacePicker.js +122 -0
  154. package/dist/ui/MarketplacePicker.js.map +1 -0
  155. package/dist/ui/MessageList.d.ts +12 -1
  156. package/dist/ui/MessageList.js +72 -7
  157. package/dist/ui/MessageList.js.map +1 -1
  158. package/dist/ui/ModelPicker.js +4 -4
  159. package/dist/ui/ModelPicker.js.map +1 -1
  160. package/dist/ui/MultilineTextInput.d.ts +31 -0
  161. package/dist/ui/MultilineTextInput.js +393 -0
  162. package/dist/ui/MultilineTextInput.js.map +1 -0
  163. package/dist/ui/MultilineTextInput.test.d.ts +1 -0
  164. package/dist/ui/MultilineTextInput.test.js +30 -0
  165. package/dist/ui/MultilineTextInput.test.js.map +1 -0
  166. package/dist/ui/PermissionPrompt.d.ts +16 -4
  167. package/dist/ui/PermissionPrompt.js +60 -15
  168. package/dist/ui/PermissionPrompt.js.map +1 -1
  169. package/dist/ui/SessionPicker.js +2 -2
  170. package/dist/ui/SessionPicker.js.map +1 -1
  171. package/dist/ui/ShimmerText.d.ts +8 -0
  172. package/dist/ui/ShimmerText.js +40 -0
  173. package/dist/ui/ShimmerText.js.map +1 -0
  174. package/dist/ui/Spinner.js +3 -9
  175. package/dist/ui/Spinner.js.map +1 -1
  176. package/dist/ui/TodoPanel.d.ts +7 -0
  177. package/dist/ui/TodoPanel.js +36 -0
  178. package/dist/ui/TodoPanel.js.map +1 -0
  179. package/dist/ui/TogglePicker.js +4 -4
  180. package/dist/ui/TogglePicker.js.map +1 -1
  181. package/dist/ui/ToolResult.js +6 -0
  182. package/dist/ui/ToolResult.js.map +1 -1
  183. package/dist/ui/UnifiedSkillsPicker.d.ts +10 -0
  184. package/dist/ui/UnifiedSkillsPicker.js +63 -0
  185. package/dist/ui/UnifiedSkillsPicker.js.map +1 -0
  186. package/dist/ui/animation.d.ts +3 -0
  187. package/dist/ui/animation.js +48 -0
  188. package/dist/ui/animation.js.map +1 -0
  189. package/dist/ui/useThrottledStream.d.ts +7 -0
  190. package/dist/ui/useThrottledStream.js +63 -0
  191. package/dist/ui/useThrottledStream.js.map +1 -0
  192. package/dist/yomeSkills/auth.d.ts +20 -0
  193. package/dist/yomeSkills/auth.js +70 -0
  194. package/dist/yomeSkills/auth.js.map +1 -0
  195. package/dist/yomeSkills/blacklist.d.ts +33 -0
  196. package/dist/yomeSkills/blacklist.js +101 -0
  197. package/dist/yomeSkills/blacklist.js.map +1 -0
  198. package/dist/yomeSkills/capabilities.d.ts +54 -0
  199. package/dist/yomeSkills/capabilities.js +175 -0
  200. package/dist/yomeSkills/capabilities.js.map +1 -0
  201. package/dist/yomeSkills/capabilityGuard.d.ts +31 -0
  202. package/dist/yomeSkills/capabilityGuard.js +113 -0
  203. package/dist/yomeSkills/capabilityGuard.js.map +1 -0
  204. package/dist/yomeSkills/cli.d.ts +25 -0
  205. package/dist/yomeSkills/cli.js +624 -0
  206. package/dist/yomeSkills/cli.js.map +1 -0
  207. package/dist/yomeSkills/deprecate.d.ts +29 -0
  208. package/dist/yomeSkills/deprecate.js +99 -0
  209. package/dist/yomeSkills/deprecate.js.map +1 -0
  210. package/dist/yomeSkills/devLink.d.ts +17 -0
  211. package/dist/yomeSkills/devLink.js +91 -0
  212. package/dist/yomeSkills/devLink.js.map +1 -0
  213. package/dist/yomeSkills/doctor.d.ts +13 -0
  214. package/dist/yomeSkills/doctor.js +152 -0
  215. package/dist/yomeSkills/doctor.js.map +1 -0
  216. package/dist/yomeSkills/enable.d.ts +8 -0
  217. package/dist/yomeSkills/enable.js +67 -0
  218. package/dist/yomeSkills/enable.js.map +1 -0
  219. package/dist/yomeSkills/hubPing.d.ts +1 -0
  220. package/dist/yomeSkills/hubPing.js +41 -0
  221. package/dist/yomeSkills/hubPing.js.map +1 -0
  222. package/dist/yomeSkills/install.d.ts +18 -0
  223. package/dist/yomeSkills/install.js +143 -0
  224. package/dist/yomeSkills/install.js.map +1 -0
  225. package/dist/yomeSkills/installFromHubTarball.d.ts +26 -0
  226. package/dist/yomeSkills/installFromHubTarball.js +161 -0
  227. package/dist/yomeSkills/installFromHubTarball.js.map +1 -0
  228. package/dist/yomeSkills/installGithub.d.ts +33 -0
  229. package/dist/yomeSkills/installGithub.js +213 -0
  230. package/dist/yomeSkills/installGithub.js.map +1 -0
  231. package/dist/yomeSkills/installMeta.d.ts +8 -0
  232. package/dist/yomeSkills/installMeta.js +76 -0
  233. package/dist/yomeSkills/installMeta.js.map +1 -0
  234. package/dist/yomeSkills/integrity.d.ts +26 -0
  235. package/dist/yomeSkills/integrity.js +107 -0
  236. package/dist/yomeSkills/integrity.js.map +1 -0
  237. package/dist/yomeSkills/invoke.d.ts +29 -0
  238. package/dist/yomeSkills/invoke.js +135 -0
  239. package/dist/yomeSkills/invoke.js.map +1 -0
  240. package/dist/yomeSkills/list.d.ts +11 -0
  241. package/dist/yomeSkills/list.js +55 -0
  242. package/dist/yomeSkills/list.js.map +1 -0
  243. package/dist/yomeSkills/login.d.ts +41 -0
  244. package/dist/yomeSkills/login.js +221 -0
  245. package/dist/yomeSkills/login.js.map +1 -0
  246. package/dist/yomeSkills/manifest.d.ts +60 -0
  247. package/dist/yomeSkills/manifest.js +47 -0
  248. package/dist/yomeSkills/manifest.js.map +1 -0
  249. package/dist/yomeSkills/paths.d.ts +13 -0
  250. package/dist/yomeSkills/paths.js +33 -0
  251. package/dist/yomeSkills/paths.js.map +1 -0
  252. package/dist/yomeSkills/publish.d.ts +18 -0
  253. package/dist/yomeSkills/publish.js +114 -0
  254. package/dist/yomeSkills/publish.js.map +1 -0
  255. package/dist/yomeSkills/rollback.d.ts +10 -0
  256. package/dist/yomeSkills/rollback.js +83 -0
  257. package/dist/yomeSkills/rollback.js.map +1 -0
  258. package/dist/yomeSkills/search.d.ts +21 -0
  259. package/dist/yomeSkills/search.js +31 -0
  260. package/dist/yomeSkills/search.js.map +1 -0
  261. package/dist/yomeSkills/skillsIndex.d.ts +36 -0
  262. package/dist/yomeSkills/skillsIndex.js +111 -0
  263. package/dist/yomeSkills/skillsIndex.js.map +1 -0
  264. package/dist/yomeSkills/unified.d.ts +53 -0
  265. package/dist/yomeSkills/unified.js +187 -0
  266. package/dist/yomeSkills/unified.js.map +1 -0
  267. package/dist/yomeSkills/uninstall.d.ts +7 -0
  268. package/dist/yomeSkills/uninstall.js +22 -0
  269. package/dist/yomeSkills/uninstall.js.map +1 -0
  270. package/dist/yomeSkills/update.d.ts +18 -0
  271. package/dist/yomeSkills/update.js +75 -0
  272. package/dist/yomeSkills/update.js.map +1 -0
  273. package/dist/yomeSkills/validate.d.ts +11 -0
  274. package/dist/yomeSkills/validate.js +99 -0
  275. package/dist/yomeSkills/validate.js.map +1 -0
  276. package/package.json +23 -6
@@ -0,0 +1,100 @@
1
+ // cli/src/skills/runner/applescript.ts
2
+ //
3
+ // Spawn /usr/bin/osascript and friends. Mirror of Yome/macOS/Bridge/
4
+ // AppleScriptRunner.swift so the CLI gets the same execution semantics
5
+ // the macOS app uses (including the Launch Services trick that bypasses
6
+ // app-sandbox prompts for opening files).
7
+ import { spawnSync } from 'node:child_process';
8
+ /**
9
+ * Run an AppleScript source string via `osascript -e`.
10
+ *
11
+ * The Swift sibling does some preflight automation-permission checks via
12
+ * AEDeterminePermissionToAutomateTarget. CLI doesn't have a UI to drive
13
+ * the system prompt, so we just let osascript surface error -1743 — the
14
+ * caller can decide whether to message the user.
15
+ */
16
+ export function runOsascript(source, opts = {}) {
17
+ const r = spawnSync('/usr/bin/osascript', ['-e', source], {
18
+ encoding: 'utf-8',
19
+ timeout: opts.timeoutMs ?? 30_000,
20
+ maxBuffer: 10 * 1024 * 1024,
21
+ });
22
+ if (r.error) {
23
+ return { ok: false, stdout: '', stderr: String(r.error.message), exitCode: -1 };
24
+ }
25
+ const code = r.status ?? -1;
26
+ return {
27
+ ok: code === 0,
28
+ stdout: (r.stdout ?? '').replace(/\n+$/, ''),
29
+ stderr: (r.stderr ?? '').trim(),
30
+ exitCode: code,
31
+ };
32
+ }
33
+ /**
34
+ * Same as `runOsascript`, but reads the script from a file path instead
35
+ * of inline `-e`. Useful for very long scripts or when keeping a single
36
+ * authoritative `.applescript` file in the skill bundle.
37
+ */
38
+ export function runOsascriptFile(path, opts = {}) {
39
+ const r = spawnSync('/usr/bin/osascript', [path], {
40
+ encoding: 'utf-8',
41
+ timeout: opts.timeoutMs ?? 30_000,
42
+ maxBuffer: 10 * 1024 * 1024,
43
+ });
44
+ if (r.error) {
45
+ return { ok: false, stdout: '', stderr: String(r.error.message), exitCode: -1 };
46
+ }
47
+ const code = r.status ?? -1;
48
+ return {
49
+ ok: code === 0,
50
+ stdout: (r.stdout ?? '').replace(/\n+$/, ''),
51
+ stderr: (r.stderr ?? '').trim(),
52
+ exitCode: code,
53
+ };
54
+ }
55
+ /**
56
+ * Open a file via macOS Launch Services (`/usr/bin/open -a`) so the
57
+ * receiving app gets sandbox-implicit access without us having to fight
58
+ * automation prompts, then poll an AppleScript until the file shows up
59
+ * inside that app.
60
+ *
61
+ * Returns the poll script's last output on success, or null on timeout.
62
+ */
63
+ export function openViaLaunchServices(args) {
64
+ const open = spawnSync('/usr/bin/open', ['-a', args.appName, args.filePath], { encoding: 'utf-8' });
65
+ if (open.status !== 0) {
66
+ return {
67
+ ok: false,
68
+ stdout: '',
69
+ stderr: open.stderr || `open -a "${args.appName}" exited ${open.status}`,
70
+ };
71
+ }
72
+ const max = args.maxWaitSec ?? 30;
73
+ const interval = args.pollIntervalMs ?? 1000;
74
+ for (let i = 0; i < max; i++) {
75
+ sleepSync(interval);
76
+ const r = runOsascript(args.pollScript);
77
+ if (r.ok && r.stdout.trim().length > 0) {
78
+ return { ok: true, stdout: r.stdout, stderr: '' };
79
+ }
80
+ }
81
+ return { ok: false, stdout: '', stderr: `timed out waiting for ${args.appName} to load ${args.filePath}` };
82
+ }
83
+ /** Quote a string so it's safe to embed inside an AppleScript string literal. */
84
+ export function asString(s) {
85
+ return '"' + s.replace(/\\/g, '\\\\').replace(/"/g, '\\"') + '"';
86
+ }
87
+ /** Quote a POSIX path for AppleScript ("POSIX file" wrapping is the caller's job). */
88
+ export function asPosixPath(p) {
89
+ return asString(p);
90
+ }
91
+ function sleepSync(ms) {
92
+ const end = Date.now() + ms;
93
+ // Atomics-based sleep — works in Node ≥16 without spawning a child.
94
+ const sab = new SharedArrayBuffer(4);
95
+ const view = new Int32Array(sab);
96
+ while (Date.now() < end) {
97
+ Atomics.wait(view, 0, 0, Math.max(1, end - Date.now()));
98
+ }
99
+ }
100
+ //# sourceMappingURL=applescript.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"applescript.js","sourceRoot":"","sources":["../../../src/skills/runner/applescript.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,128 @@
1
+ export interface BackendArgSpec {
2
+ name: string;
3
+ from: string;
4
+ type?: 'string' | 'bool' | 'number';
5
+ default?: string | boolean | number;
6
+ required?: boolean;
7
+ }
8
+ export interface BackendActionSpec {
9
+ script: string;
10
+ args?: BackendArgSpec[];
11
+ openViaLaunchServices?: boolean;
12
+ pollScript?: string;
13
+ uses?: string[];
14
+ /** Per-action timeout override in ms. */
15
+ timeoutMs?: number;
16
+ }
17
+ export interface MacosBackendManifest {
18
+ appBundleId?: string;
19
+ appName?: string;
20
+ actions: Record<string, BackendActionSpec>;
21
+ }
22
+ export interface SkillCall {
23
+ positionals: string[];
24
+ flags: Record<string, string | boolean | number | undefined>;
25
+ }
26
+ export interface DispatchResult {
27
+ ok: boolean;
28
+ stdout: string;
29
+ stderr: string;
30
+ exitCode: number;
31
+ }
32
+ export declare const NAMED_COLORS: Record<string, [number, number, number]>;
33
+ export interface ColorParseFailure {
34
+ input: string;
35
+ reason: string;
36
+ }
37
+ /**
38
+ * Parse a color spec into an AppleScript RGB literal `{r, g, b}`.
39
+ *
40
+ * Accepted forms (case- and whitespace-insensitive):
41
+ * • `#RRGGBB` or bare `RRGGBB`
42
+ * • `R,G,B` with each channel in 0..255
43
+ * • Named color from NAMED_COLORS (CSS-ish + CN aliases)
44
+ *
45
+ * Returns `{ ok: true, literal }` on success, or `{ ok: false, error }` with
46
+ * a precise reason on failure. Callers MUST surface the error rather than
47
+ * silently emitting an empty literal — silent fallbacks were the root cause
48
+ * of the historical "bg disappeared from the format result" class of bugs.
49
+ */
50
+ export type ColorParseResult = {
51
+ ok: true;
52
+ literal: string;
53
+ rgb: [number, number, number];
54
+ } | {
55
+ ok: false;
56
+ error: ColorParseFailure;
57
+ };
58
+ export declare function parseColor(input: string): ColorParseResult;
59
+ /**
60
+ * Back-compat wrapper that returns the literal or null. New code should use
61
+ * `parseColor()` so the failure reason can be surfaced to the user.
62
+ */
63
+ export declare function parseColorToAppleScriptRGB(input: string): string | null;
64
+ /**
65
+ * `--type` alias → AppleScript `MsoAutoShapeType` enum literal. Unknown
66
+ * aliases degrade to `autoshape rectangle` so the template never emits
67
+ * broken AppleScript.
68
+ */
69
+ export declare function parseAutoshapeToAppleScript(input: string): string;
70
+ /**
71
+ * `--align` parser → AppleScript `paragraph align ...` enum.
72
+ * Defaults silently to `paragraph align left` for unknown values; that
73
+ * matches the Swift bridge behaviour and avoids breaking the script render.
74
+ */
75
+ export declare function parseAlignToAppleScript(input: string): string;
76
+ export interface RenderError {
77
+ arg: string;
78
+ filter?: string;
79
+ reason: string;
80
+ }
81
+ export interface RenderResult {
82
+ source: string;
83
+ errors: RenderError[];
84
+ }
85
+ /**
86
+ * Render an AppleScript template.
87
+ *
88
+ * Two failure modes exist:
89
+ * - "soft": the filter accepts any input and just renders something
90
+ * (`json`, `posix`, `bool`, `as_int`, `align`, `autoshape`). These never
91
+ * populate `errors`.
92
+ * - "hard": the filter validates input and can reject it (`rgb`). When
93
+ * rejected we emit a syntactically VALID placeholder (`missing value`)
94
+ * so the rendered AppleScript still parses, AND we record the error
95
+ * in `errors[]`. The dispatcher checks `errors` BEFORE running osascript
96
+ * and refuses to run with a structured message — no more silent failure
97
+ * where `bg=深蓝` quietly emitted broken AppleScript.
98
+ *
99
+ * `{{name}}` / `{{name|filter}}` is the substitution syntax.
100
+ * `{{#if name}}…{{/if}}` is the conditional block (greedy, not nestable).
101
+ * Substitution happens AFTER conditionals, so a `{{#if bg}}…{{bg|rgb}}…{{/if}}`
102
+ * block whose `bg` was stripped never reaches the filter.
103
+ */
104
+ export declare function renderTemplate(tpl: string, ctx: Record<string, string | boolean | number | null>): RenderResult;
105
+ export declare function loadMacosBackend(skillDir: string): MacosBackendManifest | null;
106
+ /**
107
+ * Run an action on a macOS-backed skill. Returns the osascript outcome
108
+ * verbatim (caller decides how to render).
109
+ */
110
+ export declare function dispatchMacos(skillDir: string, action: string, call: SkillCall): DispatchResult;
111
+ export interface MergedBatchEntry {
112
+ action: string;
113
+ call: SkillCall;
114
+ }
115
+ export interface MergedBatchOptions {
116
+ keepGoing: boolean;
117
+ }
118
+ export declare function dispatchMacosBatchMerged(skillDir: string, entries: MergedBatchEntry[], opts: MergedBatchOptions): Promise<DispatchResult>;
119
+ /**
120
+ * Demux the "<okList>|<failList>" convention used by partial-success-aware
121
+ * AppleScript templates (xl/ppt/doc `fmt`, `cf`, …). Returns null when the
122
+ * payload doesn't look like that shape — callers should treat null as
123
+ * "ordinary opaque message, leave it alone".
124
+ */
125
+ export declare function parsePartialOkFail(msg: string): {
126
+ ok: string;
127
+ fail: string;
128
+ } | null;