@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,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;
|