@poping/yome 0.0.3 → 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 (126) hide show
  1. package/README.md +5 -7
  2. package/README.zh-CN.md +5 -7
  3. package/bin/yome-calwatch +0 -0
  4. package/dist/context.js +6 -3
  5. package/dist/context.js.map +1 -1
  6. package/dist/daemon/calendarPermission.d.ts +10 -0
  7. package/dist/daemon/calendarPermission.js +68 -0
  8. package/dist/daemon/calendarPermission.js.map +1 -0
  9. package/dist/daemon/cronCli.d.ts +19 -0
  10. package/dist/daemon/cronCli.js +403 -0
  11. package/dist/daemon/cronCli.js.map +1 -0
  12. package/dist/daemon/envHint.d.ts +5 -0
  13. package/dist/daemon/envHint.js +139 -0
  14. package/dist/daemon/envHint.js.map +1 -0
  15. package/dist/daemon/humanCron.d.ts +1 -0
  16. package/dist/daemon/humanCron.js +72 -0
  17. package/dist/daemon/humanCron.js.map +1 -0
  18. package/dist/daemon/humanOnce.d.ts +1 -0
  19. package/dist/daemon/humanOnce.js +54 -0
  20. package/dist/daemon/humanOnce.js.map +1 -0
  21. package/dist/daemon/index.d.ts +5 -0
  22. package/dist/daemon/index.js +168 -0
  23. package/dist/daemon/index.js.map +1 -0
  24. package/dist/daemon/launchd.d.ts +7 -0
  25. package/dist/daemon/launchd.js +93 -0
  26. package/dist/daemon/launchd.js.map +1 -0
  27. package/dist/daemon/log.d.ts +17 -0
  28. package/dist/daemon/log.js +57 -0
  29. package/dist/daemon/log.js.map +1 -0
  30. package/dist/daemon/paths.d.ts +11 -0
  31. package/dist/daemon/paths.js +27 -0
  32. package/dist/daemon/paths.js.map +1 -0
  33. package/dist/daemon/runTaskEntry.d.ts +1 -0
  34. package/dist/daemon/runTaskEntry.js +67 -0
  35. package/dist/daemon/runTaskEntry.js.map +1 -0
  36. package/dist/daemon/runner.d.ts +21 -0
  37. package/dist/daemon/runner.js +175 -0
  38. package/dist/daemon/runner.js.map +1 -0
  39. package/dist/daemon/scheduler.d.ts +5 -0
  40. package/dist/daemon/scheduler.js +162 -0
  41. package/dist/daemon/scheduler.js.map +1 -0
  42. package/dist/daemon/taskStore.d.ts +62 -0
  43. package/dist/daemon/taskStore.js +88 -0
  44. package/dist/daemon/taskStore.js.map +1 -0
  45. package/dist/daemon/triggers/calendar.d.ts +8 -0
  46. package/dist/daemon/triggers/calendar.js +248 -0
  47. package/dist/daemon/triggers/calendar.js.map +1 -0
  48. package/dist/daemon/triggers/childRunner.d.ts +14 -0
  49. package/dist/daemon/triggers/childRunner.js +111 -0
  50. package/dist/daemon/triggers/childRunner.js.map +1 -0
  51. package/dist/daemon/triggers/cron.d.ts +14 -0
  52. package/dist/daemon/triggers/cron.js +91 -0
  53. package/dist/daemon/triggers/cron.js.map +1 -0
  54. package/dist/daemon/triggers/file.d.ts +7 -0
  55. package/dist/daemon/triggers/file.js +123 -0
  56. package/dist/daemon/triggers/file.js.map +1 -0
  57. package/dist/daemon/triggers/once.d.ts +10 -0
  58. package/dist/daemon/triggers/once.js +80 -0
  59. package/dist/daemon/triggers/once.js.map +1 -0
  60. package/dist/index.js +96 -9
  61. package/dist/index.js.map +1 -1
  62. package/dist/skills/runner/dispatcher.d.ts +74 -3
  63. package/dist/skills/runner/dispatcher.js +258 -48
  64. package/dist/skills/runner/dispatcher.js.map +1 -1
  65. package/dist/skills/runner/dispatcher.test.d.ts +1 -0
  66. package/dist/skills/runner/dispatcher.test.js +141 -0
  67. package/dist/skills/runner/dispatcher.test.js.map +1 -0
  68. package/dist/skills/runner/kernel.js +0 -1
  69. package/dist/skills/runner/kernel.js.map +1 -1
  70. package/dist/skills/runner/nodeBackend.d.ts +32 -0
  71. package/dist/skills/runner/nodeBackend.js +147 -0
  72. package/dist/skills/runner/nodeBackend.js.map +1 -0
  73. package/dist/state/todos.d.ts +12 -0
  74. package/dist/state/todos.js +32 -0
  75. package/dist/state/todos.js.map +1 -0
  76. package/dist/tools/askUser.d.ts +20 -0
  77. package/dist/tools/askUser.js +126 -0
  78. package/dist/tools/askUser.js.map +1 -0
  79. package/dist/tools/bash.js +13 -19
  80. package/dist/tools/bash.js.map +1 -1
  81. package/dist/tools/index.d.ts +2 -0
  82. package/dist/tools/index.js +18 -5
  83. package/dist/tools/index.js.map +1 -1
  84. package/dist/tools/todoWrite.d.ts +2 -0
  85. package/dist/tools/todoWrite.js +141 -0
  86. package/dist/tools/todoWrite.js.map +1 -0
  87. package/dist/tools/yome.d.ts +2 -0
  88. package/dist/tools/yome.js +87 -0
  89. package/dist/tools/yome.js.map +1 -0
  90. package/dist/ui/App.js +52 -3
  91. package/dist/ui/App.js.map +1 -1
  92. package/dist/ui/AskUserPrompt.d.ts +7 -0
  93. package/dist/ui/AskUserPrompt.js +78 -0
  94. package/dist/ui/AskUserPrompt.js.map +1 -0
  95. package/dist/ui/InputBar.js +20 -34
  96. package/dist/ui/InputBar.js.map +1 -1
  97. package/dist/ui/MessageList.d.ts +8 -0
  98. package/dist/ui/MessageList.js +2 -2
  99. package/dist/ui/MessageList.js.map +1 -1
  100. package/dist/ui/MultilineTextInput.d.ts +31 -0
  101. package/dist/ui/MultilineTextInput.js +393 -0
  102. package/dist/ui/MultilineTextInput.js.map +1 -0
  103. package/dist/ui/MultilineTextInput.test.d.ts +1 -0
  104. package/dist/ui/MultilineTextInput.test.js +30 -0
  105. package/dist/ui/MultilineTextInput.test.js.map +1 -0
  106. package/dist/ui/TodoPanel.d.ts +7 -0
  107. package/dist/ui/TodoPanel.js +36 -0
  108. package/dist/ui/TodoPanel.js.map +1 -0
  109. package/dist/yomeSkills/cli.d.ts +8 -0
  110. package/dist/yomeSkills/cli.js +155 -8
  111. package/dist/yomeSkills/cli.js.map +1 -1
  112. package/dist/yomeSkills/deprecate.d.ts +29 -0
  113. package/dist/yomeSkills/deprecate.js +99 -0
  114. package/dist/yomeSkills/deprecate.js.map +1 -0
  115. package/dist/yomeSkills/installFromHubTarball.d.ts +26 -0
  116. package/dist/yomeSkills/installFromHubTarball.js +161 -0
  117. package/dist/yomeSkills/installFromHubTarball.js.map +1 -0
  118. package/dist/yomeSkills/installGithub.d.ts +7 -0
  119. package/dist/yomeSkills/installGithub.js +42 -21
  120. package/dist/yomeSkills/installGithub.js.map +1 -1
  121. package/dist/yomeSkills/invoke.js +50 -18
  122. package/dist/yomeSkills/invoke.js.map +1 -1
  123. package/dist/yomeSkills/publish.d.ts +2 -0
  124. package/dist/yomeSkills/publish.js +6 -1
  125. package/dist/yomeSkills/publish.js.map +1 -1
  126. package/package.json +10 -2
@@ -0,0 +1,123 @@
1
+ // File-system trigger backed by chokidar.
2
+ //
3
+ // Storage shape:
4
+ // { kind: 'file', path: '<glob>', events?: ['change'|'add'|'unlink'][] }
5
+ //
6
+ // Path can be a single file, a directory (recursive), or a glob
7
+ // ('~/Desktop/test/**/*.xlsx'). chokidar handles tilde-expansion poorly,
8
+ // so we expand it ourselves before handing the pattern over.
9
+ //
10
+ // Debouncing: chokidar fires multiple events for a single save on some
11
+ // editors (e.g. Excel writes a temp file then renames). We coalesce
12
+ // per-task into a 750ms window so the agent gets called once per logical
13
+ // change burst, not once per low-level fs syscall.
14
+ import chokidar from 'chokidar';
15
+ import { homedir } from 'os';
16
+ import { runChildTask } from './childRunner.js';
17
+ function sameEvents(a, b) {
18
+ if (a.length !== b.length)
19
+ return false;
20
+ const sa = [...a].sort();
21
+ const sb = [...b].sort();
22
+ return sa.every((v, i) => v === sb[i]);
23
+ }
24
+ const active = new Map();
25
+ const debouncers = new Map();
26
+ const DEBOUNCE_MS = 750;
27
+ const DEFAULT_EVENTS = ['add', 'change'];
28
+ export function registerFileTask(task, opts) {
29
+ if (task.trigger.kind !== 'file')
30
+ return;
31
+ if (!task.enabled)
32
+ return;
33
+ const rawPath = task.trigger.path;
34
+ if (!rawPath || typeof rawPath !== 'string') {
35
+ // eslint-disable-next-line no-console
36
+ console.error(`[file] task ${task.id}: missing path, skipping`);
37
+ return;
38
+ }
39
+ const expanded = expandTilde(rawPath);
40
+ const events = (task.trigger.events ?? DEFAULT_EVENTS);
41
+ // Idempotent re-registration: every recordRun() rewrites tasks.json
42
+ // which fires fs.watch → reloadAllTasks(). If we always tore down the
43
+ // chokidar watcher and rebuilt it, we'd waste ~tens of ms per reload
44
+ // AND briefly drop events that arrive between close() and the new
45
+ // watcher's "ready". When the path + events haven't changed, leave
46
+ // the existing watcher alone.
47
+ const existing = active.get(task.id);
48
+ if (existing && existing.path === expanded && sameEvents(existing.events, events)) {
49
+ return;
50
+ }
51
+ if (existing) {
52
+ unregisterFileTask(task.id);
53
+ }
54
+ const watcher = chokidar.watch(expanded, {
55
+ persistent: true,
56
+ ignoreInitial: true, // don't fire for files that already exist on startup
57
+ awaitWriteFinish: {
58
+ stabilityThreshold: 250,
59
+ pollInterval: 100,
60
+ },
61
+ // Use polling on macOS for network mounts / weird filesystems if
62
+ // we hit issues; default native fsevents is faster and we'll prefer
63
+ // it. The user can override via env if needed.
64
+ usePolling: process.env.YOME_FILE_WATCH_POLL === '1',
65
+ });
66
+ const onEvent = (kind, file) => {
67
+ if (!events.includes(kind))
68
+ return;
69
+ if (debouncers.has(task.id))
70
+ clearTimeout(debouncers.get(task.id));
71
+ const t = setTimeout(() => {
72
+ debouncers.delete(task.id);
73
+ runChildTask({
74
+ taskId: task.id,
75
+ yomeBinPath: opts.yomeBinPath,
76
+ task,
77
+ triggerMeta: { triggerKind: 'file', event: kind, file },
78
+ });
79
+ }, DEBOUNCE_MS);
80
+ t.unref?.();
81
+ debouncers.set(task.id, t);
82
+ };
83
+ watcher.on('add', (f) => onEvent('add', f));
84
+ watcher.on('change', (f) => onEvent('change', f));
85
+ watcher.on('unlink', (f) => onEvent('unlink', f));
86
+ watcher.on('error', (e) => {
87
+ // eslint-disable-next-line no-console
88
+ console.error(`[file] task ${task.id}: watcher error:`, e);
89
+ });
90
+ active.set(task.id, { taskId: task.id, watcher, path: expanded, events });
91
+ // eslint-disable-next-line no-console
92
+ console.log(`[file] registered ${task.id} (path="${expanded}", events=[${events.join(',')}])`);
93
+ }
94
+ export function unregisterFileTask(id) {
95
+ const entry = active.get(id);
96
+ if (!entry)
97
+ return;
98
+ try {
99
+ entry.watcher.close();
100
+ }
101
+ catch { /* noop */ }
102
+ active.delete(id);
103
+ const d = debouncers.get(id);
104
+ if (d) {
105
+ clearTimeout(d);
106
+ debouncers.delete(id);
107
+ }
108
+ }
109
+ export function listActiveFile() {
110
+ return [...active.keys()];
111
+ }
112
+ export function unregisterAllFile() {
113
+ for (const id of [...active.keys()])
114
+ unregisterFileTask(id);
115
+ }
116
+ function expandTilde(p) {
117
+ if (p === '~')
118
+ return homedir();
119
+ if (p.startsWith('~/'))
120
+ return homedir() + p.slice(1);
121
+ return p;
122
+ }
123
+ //# sourceMappingURL=file.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file.js","sourceRoot":"","sources":["../../../src/daemon/triggers/file.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { TaskRecord } from '../taskStore.js';
2
+ export declare function registerOnceTask(task: TaskRecord, opts: {
3
+ yomeBinPath: string;
4
+ }): void;
5
+ export declare function unregisterOnceTask(id: string): void;
6
+ export declare function listActiveOnce(): {
7
+ taskId: string;
8
+ scheduledFor: number;
9
+ }[];
10
+ export declare function unregisterAllOnce(): void;
@@ -0,0 +1,80 @@
1
+ // One-shot trigger: a task that fires exactly once at a specified
2
+ // wall-clock time. After firing, the task is automatically disabled so
3
+ // it won't be re-armed on daemon restart.
4
+ //
5
+ // Storage shape: { kind: 'once', atMs: <epoch_ms> }
6
+ //
7
+ // Past-due semantics: if the daemon starts AFTER atMs, we still fire
8
+ // once (immediately) — the user said "do this thing eventually", and
9
+ // silently skipping it is worse than late delivery. They can `cron rm`
10
+ // before starting the daemon if they want to cancel.
11
+ import { setEnabled } from '../taskStore.js';
12
+ import { runChildTask } from './childRunner.js';
13
+ const pending = new Map();
14
+ const PAST_DUE_DELAY_MS = 1_000; // small delay to avoid thundering at startup
15
+ export function registerOnceTask(task, opts) {
16
+ if (task.trigger.kind !== 'once')
17
+ return;
18
+ if (!task.enabled)
19
+ return;
20
+ const atMs = task.trigger.atMs;
21
+ if (typeof atMs !== 'number' || Number.isNaN(atMs)) {
22
+ // eslint-disable-next-line no-console
23
+ console.error(`[once] task ${task.id}: invalid atMs ${atMs}, skipping`);
24
+ return;
25
+ }
26
+ // Idempotent re-registration: tasks.json gets rewritten every time
27
+ // ANY task records a run (recordRun → atomic write), which triggers
28
+ // the scheduler's fs.watch and a full reloadAllTasks(). Without the
29
+ // guard below, that re-entry would clearTimeout() our pending fire
30
+ // and setTimeout() a fresh one — resetting the countdown each time,
31
+ // and (worse) racing with the just-fired callback so we'd run the
32
+ // task twice within milliseconds. Skipping when nothing changed
33
+ // makes reload a no-op for already-armed once timers.
34
+ const existing = pending.get(task.id);
35
+ if (existing && existing.scheduledFor === atMs) {
36
+ return;
37
+ }
38
+ if (existing) {
39
+ unregisterOnceTask(task.id);
40
+ }
41
+ const now = Date.now();
42
+ const delay = Math.max(PAST_DUE_DELAY_MS, atMs - now);
43
+ // eslint-disable-next-line no-console
44
+ console.log(`[once] registered ${task.id} (fires at ${new Date(atMs).toISOString()}` +
45
+ `${atMs < now ? ', past-due → firing soon' : ''})`);
46
+ const timer = setTimeout(() => {
47
+ pending.delete(task.id);
48
+ runChildTask({
49
+ taskId: task.id,
50
+ yomeBinPath: opts.yomeBinPath,
51
+ task,
52
+ triggerMeta: { triggerKind: 'once', atMs },
53
+ onComplete: () => {
54
+ // Disable the task so it doesn't re-fire if the daemon restarts.
55
+ // The lastRun summary is what survives in tasks.json.
56
+ setEnabled(task.id, false);
57
+ },
58
+ });
59
+ }, delay);
60
+ // Don't keep the daemon event loop alive solely on this timer — the
61
+ // scheduler's other mechanisms (cron jobs, file watchers) keep it
62
+ // alive, and on shutdown we want clean exit.
63
+ timer.unref?.();
64
+ pending.set(task.id, { taskId: task.id, timer, scheduledFor: atMs });
65
+ }
66
+ export function unregisterOnceTask(id) {
67
+ const entry = pending.get(id);
68
+ if (!entry)
69
+ return;
70
+ clearTimeout(entry.timer);
71
+ pending.delete(id);
72
+ }
73
+ export function listActiveOnce() {
74
+ return [...pending.values()].map((p) => ({ taskId: p.taskId, scheduledFor: p.scheduledFor }));
75
+ }
76
+ export function unregisterAllOnce() {
77
+ for (const id of [...pending.keys()])
78
+ unregisterOnceTask(id);
79
+ }
80
+ //# sourceMappingURL=once.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"once.js","sourceRoot":"","sources":["../../../src/daemon/triggers/once.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -2,9 +2,12 @@ import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { render } from 'ink';
3
3
  import meow from 'meow';
4
4
  import { App } from './ui/App.js';
5
- import { resolveConfig, saveStoredConfig, CONFIG_PATH } from './config.js';
5
+ import { resolveConfig, saveStoredConfig, CONFIG_PATH, loadModelEntries, modelEntryToConfig } from './config.js';
6
6
  import { runSkillSubcommand, runLogin, runLogout, runWhoami } from './yomeSkills/cli.js';
7
7
  import { runThreadSubcommand } from './threadCli.js';
8
+ import { runDaemonSubcommand } from './daemon/index.js';
9
+ import { runCronSubcommand } from './daemon/cronCli.js';
10
+ import { runTaskById } from './daemon/runTaskEntry.js';
8
11
  const cli = meow(`
9
12
  Usage
10
13
  $ yome [prompt]
@@ -19,6 +22,15 @@ const cli = meow(`
19
22
  $ yome skill uninstall <slug> Uninstall an installed skill (e.g. @yome/ppt)
20
23
  $ yome skill list List installed skills
21
24
 
25
+ Daemon / Cron Subcommands
26
+ $ yome daemon install Install LaunchAgent (auto-starts on login)
27
+ $ yome daemon start Start the daemon in the background
28
+ $ yome daemon status Show daemon pid + active task count
29
+ $ yome cron add "<prompt>" --at "0 9 * * *"
30
+ Schedule an unattended agent task
31
+ $ yome cron list List scheduled tasks
32
+ $ yome cron logs <id> -f Tail audit log for a task
33
+
22
34
  Thread Subcommands
23
35
  $ yome thread list List sessions in the current cwd
24
36
  $ yome thread share <session-id> --skill=<slug>
@@ -72,6 +84,27 @@ const cli = meow(`
72
84
  grant: { type: 'string' },
73
85
  revoke: { type: 'string' },
74
86
  skipVerify: { type: 'boolean' },
87
+ reason: { type: 'string' },
88
+ replacedBy: { type: 'string' },
89
+ version: { type: 'string' },
90
+ allowDeprecated: { type: 'boolean' },
91
+ // daemon / cron flags
92
+ foreground: { type: 'boolean' },
93
+ follow: { type: 'boolean', shortFlag: 'f' },
94
+ at: { type: 'string' },
95
+ human: { type: 'string' },
96
+ once: { type: 'string' },
97
+ on: { type: 'string' },
98
+ path: { type: 'string' },
99
+ within: { type: 'string' }, // calendar lead time, e.g. "10m"
100
+ titleRegex: { type: 'string' }, // calendar title filter
101
+ calendar: { type: 'string' }, // calendar name filter
102
+ tz: { type: 'string' },
103
+ cwd: { type: 'string' },
104
+ allow: { type: 'string', isMultiple: true },
105
+ deny: { type: 'string', isMultiple: true },
106
+ maxMs: { type: 'string' },
107
+ env: { type: 'string', isMultiple: true }, // KEY=VAL, repeatable
75
108
  },
76
109
  });
77
110
  // Subcommand router (kept as plain dispatch — meow doesn't do nested commands).
@@ -85,6 +118,10 @@ if (cli.input[0] === 'skill') {
85
118
  grant: cli.flags.grant,
86
119
  revoke: cli.flags.revoke,
87
120
  skipVerify: !!cli.flags.skipVerify,
121
+ reason: cli.flags.reason,
122
+ replacedBy: cli.flags.replacedBy,
123
+ version: cli.flags.version,
124
+ allowDeprecated: !!cli.flags.allowDeprecated,
88
125
  });
89
126
  process.exit(exit);
90
127
  }
@@ -110,6 +147,44 @@ if (cli.input[0] === 'thread') {
110
147
  });
111
148
  process.exit(exit);
112
149
  }
150
+ // Internal: scheduler spawns `yome __run-task <id>` per fire.
151
+ // Not exposed in --help; users go through `yome cron run`.
152
+ if (cli.input[0] === '__run-task') {
153
+ const id = cli.input[1];
154
+ if (!id) {
155
+ console.error('usage: yome __run-task <id>');
156
+ process.exit(2);
157
+ }
158
+ process.exit(await runTaskById(id));
159
+ }
160
+ if (cli.input[0] === 'daemon') {
161
+ const exit = await runDaemonSubcommand(cli.input.slice(1), {
162
+ foreground: !!cli.flags.foreground,
163
+ follow: !!cli.flags.follow,
164
+ });
165
+ process.exit(exit);
166
+ }
167
+ if (cli.input[0] === 'cron') {
168
+ const exit = await runCronSubcommand(cli.input.slice(1), {
169
+ at: cli.flags.at,
170
+ human: cli.flags.human,
171
+ once: cli.flags.once,
172
+ on: cli.flags.on,
173
+ path: cli.flags.path,
174
+ within: cli.flags.within,
175
+ titleRegex: cli.flags.titleRegex,
176
+ calendar: cli.flags.calendar,
177
+ tz: cli.flags.tz,
178
+ cwd: cli.flags.cwd,
179
+ allow: cli.flags.allow,
180
+ deny: cli.flags.deny,
181
+ maxMs: cli.flags.maxMs,
182
+ env: cli.flags.env,
183
+ follow: !!cli.flags.follow,
184
+ json: !!cli.flags.json,
185
+ });
186
+ process.exit(exit);
187
+ }
113
188
  if (cli.input[0] === 'doctor') {
114
189
  const { runDoctor } = await import('./yomeSkills/doctor.js');
115
190
  const report = runDoctor();
@@ -144,7 +219,7 @@ if (cli.input[0] === 'doctor') {
144
219
  //
145
220
  // Routes BEFORE the API-key check because skill calls don't need an LLM key.
146
221
  const RESERVED_TOP_LEVEL_DOMAINS = new Set([
147
- 'skill', 'login', 'logout', 'whoami', 'doctor', 'thread',
222
+ 'skill', 'login', 'logout', 'whoami', 'doctor', 'thread', 'daemon', 'cron', '__run-task',
148
223
  ]);
149
224
  if (cli.input.length >= 1 &&
150
225
  !RESERVED_TOP_LEVEL_DOMAINS.has(cli.input[0]) &&
@@ -155,7 +230,11 @@ if (cli.input.length >= 1 &&
155
230
  // but argv preserves the user's exact tokens.
156
231
  const raw = process.argv.slice(2).filter((a) => {
157
232
  // Drop CLI-global flags so they don't leak into the skill call.
158
- return !/^--?(key|base-url|baseUrl|model|provider|force|verbose|skill|out|no-redact|noRedact|submit|case-id|caseId|dry-run|dryRun|json|yes|grant|revoke|skip-verify|skipVerify)(=|$)/.test(a);
233
+ // NOTE: do NOT strip `--force` here. Skills (e.g. `ppt slide.delete 3 --force`)
234
+ // legitimately use --force as a per-action flag, and it's their semantics
235
+ // — not the CLI-global `--force` of `yome skill install --force` — that
236
+ // matters once we've decided this is a skill invocation.
237
+ return !/^--?(key|base-url|baseUrl|model|provider|verbose|skill|out|no-redact|noRedact|submit|case-id|caseId|dry-run|dryRun|json|yes|grant|revoke|skip-verify|skipVerify|reason|replaced-by|replacedBy|version|allow-deprecated|allowDeprecated|foreground|follow|f|at|human|once|on|path|tz|cwd|allow|deny|max-ms|maxMs)(=|$)/.test(a);
159
238
  });
160
239
  const commandLine = raw.map((a) => /\s/.test(a) ? `"${a.replace(/"/g, '\\"')}"` : a).join(' ');
161
240
  const k = await tryKernel(commandLine);
@@ -184,16 +263,24 @@ if (cli.flags.key || cli.flags.baseUrl || cli.flags.provider) {
184
263
  if (!cli.input.length)
185
264
  process.exit(0);
186
265
  }
187
- const config = resolveConfig(cli.flags);
266
+ let config = resolveConfig(cli.flags);
188
267
  if (!config.apiKey) {
189
- console.error('No API key found.');
190
- console.error('Set via: yome --key sk-xxx');
191
- console.error('Or set YOME_API_KEY environment variable.');
192
- process.exit(1);
268
+ // Fall back to the first entry in ~/.yome/settings.json customModels if present.
269
+ const entries = loadModelEntries();
270
+ if (entries.length > 0) {
271
+ config = modelEntryToConfig(entries[0]);
272
+ }
273
+ else {
274
+ console.error('No API key found.');
275
+ console.error('Set via: yome --key sk-xxx');
276
+ console.error('Or set YOME_API_KEY environment variable.');
277
+ console.error('Or add a model to ~/.yome/settings.json (customModels).');
278
+ process.exit(1);
279
+ }
193
280
  }
194
281
  // Only enter interactive mode if no recognized subcommand was provided
195
282
  if (cli.input.length === 0 ||
196
- !['skill', 'login', 'logout', 'whoami', 'doctor', 'thread'].includes(cli.input[0])) {
283
+ !['skill', 'login', 'logout', 'whoami', 'doctor', 'thread', 'daemon', 'cron', '__run-task'].includes(cli.input[0])) {
197
284
  const initialPrompt = cli.input.join(' ') || undefined;
198
285
  const appConfig = initialPrompt
199
286
  ? Object.assign({}, config, { __initialPrompt: initialPrompt })
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"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"}
@@ -29,18 +29,79 @@ export interface DispatchResult {
29
29
  stderr: string;
30
30
  exitCode: number;
31
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;
32
59
  /**
33
- * Parse `red` | `#003366` | `003366` | `0, 51, 102` into an AppleScript
34
- * RGB literal `{r, g, b}`. Returns null if the input doesn't match any of
35
- * those three forms — callers should treat null as "user gave a bad color".
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.
36
62
  */
37
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;
38
70
  /**
39
71
  * `--align` parser → AppleScript `paragraph align ...` enum.
40
72
  * Defaults silently to `paragraph align left` for unknown values; that
41
73
  * matches the Swift bridge behaviour and avoids breaking the script render.
42
74
  */
43
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;
44
105
  export declare function loadMacosBackend(skillDir: string): MacosBackendManifest | null;
45
106
  /**
46
107
  * Run an action on a macOS-backed skill. Returns the osascript outcome
@@ -55,3 +116,13 @@ export interface MergedBatchOptions {
55
116
  keepGoing: boolean;
56
117
  }
57
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;