@poping/yome 0.0.3 → 0.0.5

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 (168) 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/commands/mesh.d.ts +15 -0
  5. package/dist/commands/mesh.js +282 -0
  6. package/dist/commands/mesh.js.map +1 -0
  7. package/dist/context.js +6 -3
  8. package/dist/context.js.map +1 -1
  9. package/dist/daemon/calendarPermission.d.ts +10 -0
  10. package/dist/daemon/calendarPermission.js +68 -0
  11. package/dist/daemon/calendarPermission.js.map +1 -0
  12. package/dist/daemon/cronCli.d.ts +19 -0
  13. package/dist/daemon/cronCli.js +403 -0
  14. package/dist/daemon/cronCli.js.map +1 -0
  15. package/dist/daemon/envHint.d.ts +5 -0
  16. package/dist/daemon/envHint.js +139 -0
  17. package/dist/daemon/envHint.js.map +1 -0
  18. package/dist/daemon/humanCron.d.ts +1 -0
  19. package/dist/daemon/humanCron.js +72 -0
  20. package/dist/daemon/humanCron.js.map +1 -0
  21. package/dist/daemon/humanOnce.d.ts +1 -0
  22. package/dist/daemon/humanOnce.js +54 -0
  23. package/dist/daemon/humanOnce.js.map +1 -0
  24. package/dist/daemon/index.d.ts +5 -0
  25. package/dist/daemon/index.js +173 -0
  26. package/dist/daemon/index.js.map +1 -0
  27. package/dist/daemon/launchd.d.ts +7 -0
  28. package/dist/daemon/launchd.js +93 -0
  29. package/dist/daemon/launchd.js.map +1 -0
  30. package/dist/daemon/log.d.ts +17 -0
  31. package/dist/daemon/log.js +57 -0
  32. package/dist/daemon/log.js.map +1 -0
  33. package/dist/daemon/paths.d.ts +11 -0
  34. package/dist/daemon/paths.js +27 -0
  35. package/dist/daemon/paths.js.map +1 -0
  36. package/dist/daemon/runTaskEntry.d.ts +1 -0
  37. package/dist/daemon/runTaskEntry.js +67 -0
  38. package/dist/daemon/runTaskEntry.js.map +1 -0
  39. package/dist/daemon/runner.d.ts +21 -0
  40. package/dist/daemon/runner.js +175 -0
  41. package/dist/daemon/runner.js.map +1 -0
  42. package/dist/daemon/scheduler.d.ts +5 -0
  43. package/dist/daemon/scheduler.js +162 -0
  44. package/dist/daemon/scheduler.js.map +1 -0
  45. package/dist/daemon/systemd.d.ts +7 -0
  46. package/dist/daemon/systemd.js +87 -0
  47. package/dist/daemon/systemd.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 +120 -9
  67. package/dist/index.js.map +1 -1
  68. package/dist/llm.d.ts +14 -2
  69. package/dist/llm.js +266 -201
  70. package/dist/llm.js.map +1 -1
  71. package/dist/mesh/capabilities.d.ts +6 -0
  72. package/dist/mesh/capabilities.js +66 -0
  73. package/dist/mesh/capabilities.js.map +1 -0
  74. package/dist/mesh/device-id.d.ts +28 -0
  75. package/dist/mesh/device-id.js +105 -0
  76. package/dist/mesh/device-id.js.map +1 -0
  77. package/dist/mesh/device-registrar.d.ts +33 -0
  78. package/dist/mesh/device-registrar.js +131 -0
  79. package/dist/mesh/device-registrar.js.map +1 -0
  80. package/dist/mesh/index.d.ts +28 -0
  81. package/dist/mesh/index.js +71 -0
  82. package/dist/mesh/index.js.map +1 -0
  83. package/dist/mesh/partykit-client.d.ts +43 -0
  84. package/dist/mesh/partykit-client.js +195 -0
  85. package/dist/mesh/partykit-client.js.map +1 -0
  86. package/dist/mesh/rpc-handler.d.ts +28 -0
  87. package/dist/mesh/rpc-handler.js +201 -0
  88. package/dist/mesh/rpc-handler.js.map +1 -0
  89. package/dist/mesh/thread-stream.d.ts +109 -0
  90. package/dist/mesh/thread-stream.js +110 -0
  91. package/dist/mesh/thread-stream.js.map +1 -0
  92. package/dist/mesh/ticket.d.ts +33 -0
  93. package/dist/mesh/ticket.js +127 -0
  94. package/dist/mesh/ticket.js.map +1 -0
  95. package/dist/mesh/types.d.ts +83 -0
  96. package/dist/mesh/types.js +9 -0
  97. package/dist/mesh/types.js.map +1 -0
  98. package/dist/skills/runner/dispatcher.d.ts +74 -3
  99. package/dist/skills/runner/dispatcher.js +258 -48
  100. package/dist/skills/runner/dispatcher.js.map +1 -1
  101. package/dist/skills/runner/dispatcher.test.d.ts +1 -0
  102. package/dist/skills/runner/dispatcher.test.js +141 -0
  103. package/dist/skills/runner/dispatcher.test.js.map +1 -0
  104. package/dist/skills/runner/kernel.js +0 -1
  105. package/dist/skills/runner/kernel.js.map +1 -1
  106. package/dist/skills/runner/nodeBackend.d.ts +32 -0
  107. package/dist/skills/runner/nodeBackend.js +147 -0
  108. package/dist/skills/runner/nodeBackend.js.map +1 -0
  109. package/dist/state/todos.d.ts +12 -0
  110. package/dist/state/todos.js +32 -0
  111. package/dist/state/todos.js.map +1 -0
  112. package/dist/tools/askUser.d.ts +20 -0
  113. package/dist/tools/askUser.js +126 -0
  114. package/dist/tools/askUser.js.map +1 -0
  115. package/dist/tools/bash.js +13 -19
  116. package/dist/tools/bash.js.map +1 -1
  117. package/dist/tools/index.d.ts +2 -0
  118. package/dist/tools/index.js +18 -5
  119. package/dist/tools/index.js.map +1 -1
  120. package/dist/tools/todoWrite.d.ts +2 -0
  121. package/dist/tools/todoWrite.js +141 -0
  122. package/dist/tools/todoWrite.js.map +1 -0
  123. package/dist/tools/yome.d.ts +2 -0
  124. package/dist/tools/yome.js +87 -0
  125. package/dist/tools/yome.js.map +1 -0
  126. package/dist/ui/App.js +52 -3
  127. package/dist/ui/App.js.map +1 -1
  128. package/dist/ui/AskUserPrompt.d.ts +7 -0
  129. package/dist/ui/AskUserPrompt.js +78 -0
  130. package/dist/ui/AskUserPrompt.js.map +1 -0
  131. package/dist/ui/InputBar.js +20 -34
  132. package/dist/ui/InputBar.js.map +1 -1
  133. package/dist/ui/MeshApp.d.ts +9 -0
  134. package/dist/ui/MeshApp.js +226 -0
  135. package/dist/ui/MeshApp.js.map +1 -0
  136. package/dist/ui/MessageList.d.ts +8 -0
  137. package/dist/ui/MessageList.js +2 -2
  138. package/dist/ui/MessageList.js.map +1 -1
  139. package/dist/ui/MultilineTextInput.d.ts +31 -0
  140. package/dist/ui/MultilineTextInput.js +393 -0
  141. package/dist/ui/MultilineTextInput.js.map +1 -0
  142. package/dist/ui/MultilineTextInput.test.d.ts +1 -0
  143. package/dist/ui/MultilineTextInput.test.js +30 -0
  144. package/dist/ui/MultilineTextInput.test.js.map +1 -0
  145. package/dist/ui/TodoPanel.d.ts +7 -0
  146. package/dist/ui/TodoPanel.js +36 -0
  147. package/dist/ui/TodoPanel.js.map +1 -0
  148. package/dist/withRetry.d.ts +14 -0
  149. package/dist/withRetry.js +106 -0
  150. package/dist/withRetry.js.map +1 -0
  151. package/dist/yomeSkills/cli.d.ts +8 -0
  152. package/dist/yomeSkills/cli.js +155 -8
  153. package/dist/yomeSkills/cli.js.map +1 -1
  154. package/dist/yomeSkills/deprecate.d.ts +29 -0
  155. package/dist/yomeSkills/deprecate.js +99 -0
  156. package/dist/yomeSkills/deprecate.js.map +1 -0
  157. package/dist/yomeSkills/installFromHubTarball.d.ts +26 -0
  158. package/dist/yomeSkills/installFromHubTarball.js +161 -0
  159. package/dist/yomeSkills/installFromHubTarball.js.map +1 -0
  160. package/dist/yomeSkills/installGithub.d.ts +7 -0
  161. package/dist/yomeSkills/installGithub.js +42 -21
  162. package/dist/yomeSkills/installGithub.js.map +1 -1
  163. package/dist/yomeSkills/invoke.js +50 -18
  164. package/dist/yomeSkills/invoke.js.map +1 -1
  165. package/dist/yomeSkills/publish.d.ts +2 -0
  166. package/dist/yomeSkills/publish.js +6 -1
  167. package/dist/yomeSkills/publish.js.map +1 -1
  168. package/package.json +13 -3
package/README.md CHANGED
@@ -63,10 +63,9 @@ The agent loop must not live only in the 30 seconds after you press Enter. It sh
63
63
 
64
64
  | Capability | Meaning |
65
65
  |---|---|
66
- | **Daemon** | Long-lived background agent; state persists across sessions, no more "thinking only when a window is open" |
66
+ | **Daemon** | Yome runs as an OS-level daemon, not a chat window. It watches your filesystem, calendar, IM signals, and long-running jobs in the background — and only surfaces when something matters. The agent loop never has to be re-spawned from scratch. |
67
67
  | **Live compaction** | Long sessions auto-compress history; tokens never overflow, memory never lost |
68
- | **Custom missions** | Recurring tasks like *"every Monday morning, draft my weekly report"* become reusable missions |
69
- | **Async agent** | Long jobs run in the background and push notifications when done, instead of blocking your prompt |
68
+ | **Oncall** | The agent is event-driven, not prompt-driven. WeChat / Feishu / Slack / iMessage messages, calendar fires, build finishes, GPU spikes, *@you* mentions Yome reacts to the world and pages you with a one-line summary + a draft response, instead of waiting for you to ask. |
70
69
 
71
70
  **Available today:**
72
71
 
@@ -76,7 +75,7 @@ yome thread share <session-id> --skill=<slug> # build redacted case bundle
76
75
  yome thread submit <bundle-dir> --skill=<slug> # publish as PR (needs gh CLI)
77
76
  ```
78
77
 
79
- Sessions, history compaction and case bundles ship today. Daemon, custom missions and async agent are next-up on the `next` branch.
78
+ Sessions, history compaction and case bundles ship today. Daemon and Oncall are next-up on the `next` branch.
80
79
 
81
80
  ---
82
81
 
@@ -307,9 +306,8 @@ We do not replace your tools. We **empower** them without interrupting the way y
307
306
  | Capability model (sandbox grants) | **stable** |
308
307
  | Thread history + case bundles | **stable** |
309
308
  | Live history compaction | beta |
310
- | Daemon (always-on agent) | experimental, on `next` branch |
311
- | Custom missions (recurring tasks) | next-up |
312
- | Async agent (background long-running) | next-up |
309
+ | Daemon (OS-level always-on loop) | experimental, on `next` branch |
310
+ | Oncall (event-driven, auto-paging) | next-up |
313
311
 
314
312
  **Daemon roadmap** *(scoped, on `next`)*
315
313
 
package/README.zh-CN.md CHANGED
@@ -63,10 +63,9 @@ Agent loop 不能只活在用户敲下 Enter 的那 30 秒;它应当 always-on,
63
63
 
64
64
  | 能力 | 含义 |
65
65
  |---|---|
66
- | **Daemon · 守护进程** | Agent 长驻后台,跨会话保持状态,不再"开个窗口才会思考" |
66
+ | **Daemon · 守护进程** | Yome 是一个跑在系统层的 daemon,而不是一个聊天窗口。它在后台一直盯着你的文件系统、日历、IM 信号、长任务进程,只有真正值得打断你的时候才出现。Agent loop 永远不需要从零冷启动。 |
67
67
  | **Live compaction · 即时压缩** | 长会话自动压缩历史,token 永远不爆,记忆永远不丢 |
68
- | **Custom missions · 定制任务** | "每周一上午整理周报"这种重复任务沉淀成可复用 mission |
69
- | **Async agent · 异步 agent** | 后台跑长任务,完成后主动 push 通知,而不是阻塞你的 prompt |
68
+ | **Oncall · 主动响应** | Agent 由事件驱动,而不是 prompt 驱动。微信 / 飞书 / Slack / iMessage 来消息,日历到点,build 跑完,GPU 飙高,有人 @你 —— Yome 监听这些信号,主动把"这件事 + 一个候选回复"推给你,而不是等你想起来再问它。 |
70
69
 
71
70
  **当前可用:**
72
71
 
@@ -76,7 +75,7 @@ yome thread share <session-id> --skill=<slug> # 构建脱敏的 case bundle
76
75
  yome thread submit <bundle-dir> --skill=<slug> # 作为 PR 发布 (需要 gh CLI)
77
76
  ```
78
77
 
79
- 会话 / 历史压缩 / case bundle 这三件已落地。Daemon、custom missions、async agent 在 `next` 分支推进。
78
+ 会话 / 历史压缩 / case bundle 这三件已落地。Daemon Oncall 在 `next` 分支推进。
80
79
 
81
80
  ---
82
81
 
@@ -307,9 +306,8 @@ yome --key sk-... --base-url https://… --model …
307
306
  | Capability model (sandbox grants) | **stable** |
308
307
  | Thread 历史 + case bundles | **stable** |
309
308
  | Live history compaction | beta |
310
- | Daemon (always-on agent) | experimental, 在 `next` 分支 |
311
- | Custom missions (recurring tasks) | next-up |
312
- | Async agent (后台长任务) | next-up |
309
+ | Daemon (系统级常驻 loop) | experimental, 在 `next` 分支 |
310
+ | Oncall (事件驱动 / 主动 paging) | next-up |
313
311
 
314
312
  **Daemon roadmap** *(scoped, 在 `next` 分支)*
315
313
 
Binary file
@@ -0,0 +1,15 @@
1
+ export interface MeshCliFlags {
2
+ foreground?: boolean;
3
+ follow?: boolean;
4
+ as?: string;
5
+ hubBase?: string;
6
+ /**
7
+ * `yome mesh start --tui` mounts an Ink-based thin-client UI on top
8
+ * of the running mesh daemon. The daemon continues to serve RPCs in
9
+ * the background; the TUI just subscribes to the same WS as a chat
10
+ * surface (so iOS / macOS messages stream into the terminal in
11
+ * real time, and lines typed at the prompt round-trip through Cloud).
12
+ */
13
+ tui?: boolean;
14
+ }
15
+ export declare function runMeshSubcommand(args: string[], flags: MeshCliFlags): Promise<number>;
@@ -0,0 +1,282 @@
1
+ // `yome mesh ...` subcommand router.
2
+ import { existsSync, readFileSync, unlinkSync, writeFileSync, openSync, mkdirSync, appendFileSync } from 'fs';
3
+ import { join } from 'path';
4
+ import { homedir } from 'os';
5
+ import { spawn, execSync } from 'child_process';
6
+ import { startMeshDaemon } from '../mesh/index.js';
7
+ import { getOrCreateDeviceId, loadDeviceState, safeHostname, updateDeviceMeta } from '../mesh/device-id.js';
8
+ import { detectCapabilities } from '../mesh/capabilities.js';
9
+ import { readAuthState } from '../yomeSkills/auth.js';
10
+ const MESH_ROOT = join(homedir(), '.yome', 'mesh');
11
+ const MESH_PID = join(MESH_ROOT, 'mesh.pid');
12
+ const MESH_STDOUT = join(MESH_ROOT, 'mesh.stdout.log');
13
+ const MESH_STDERR = join(MESH_ROOT, 'mesh.stderr.log');
14
+ export async function runMeshSubcommand(args, flags) {
15
+ const sub = args[0];
16
+ switch (sub) {
17
+ case 'start': return doStart(args.slice(1), flags);
18
+ case 'stop': return doStop();
19
+ case 'status': return doStatus();
20
+ case 'logs': return doLogs(flags);
21
+ case 'rename': return doRename(args.slice(1));
22
+ case 'info': return doInfo();
23
+ case undefined:
24
+ case 'help':
25
+ case '--help':
26
+ printHelp();
27
+ return 0;
28
+ default:
29
+ console.error(`Unknown subcommand: yome mesh ${sub}`);
30
+ printHelp();
31
+ return 2;
32
+ }
33
+ }
34
+ function printHelp() {
35
+ console.log(`Usage: yome mesh <subcommand>
36
+
37
+ start [--foreground] Connect to Yome Cloud as a mesh device.
38
+ Without --foreground, runs detached in the background.
39
+ start --tui Same, but also mount a chat TUI in this terminal.
40
+ iOS / macOS messages stream into it live; lines you
41
+ type round-trip through Cloud. Forces foreground.
42
+ stop Stop the running mesh daemon (SIGTERM).
43
+ status Show daemon pid + device id + capabilities.
44
+ logs [-f] Print mesh daemon log (use -f / --follow to tail).
45
+ info Show device id, hostname, alias, detected capabilities.
46
+ rename <alias> [desc] Set this device's display alias + optional description.
47
+
48
+ Files:
49
+ ~/.yome/device.json persistent device id + metadata
50
+ ~/.yome/auth.json yome account token (set via yome login)
51
+ ~/.yome/mesh/mesh.pid pid of the running mesh daemon
52
+ ~/.yome/mesh/mesh.*.log mesh daemon stdout / stderr
53
+
54
+ Prereqs:
55
+ Run \`yome login\` once on this box before \`yome mesh start\`.
56
+ `);
57
+ }
58
+ async function doStart(_pos, flags) {
59
+ if (!readAuthState()) {
60
+ console.error('✗ Not logged in. Run `yome login` first.');
61
+ return 1;
62
+ }
63
+ // Foreground = the path systemd / launchd / `--foreground` from
64
+ // an admin invokes; the daemon owns this process. The TUI flag also
65
+ // forces foreground (Ink can only attach to a real TTY, not the
66
+ // background log file we redirect into).
67
+ if (flags.foreground || flags.tui) {
68
+ return runForeground(flags);
69
+ }
70
+ // Detach a background child running ourselves in foreground.
71
+ const existing = readPidIfRunning();
72
+ if (existing) {
73
+ console.error(`✗ yome mesh already running (pid=${existing})`);
74
+ return 1;
75
+ }
76
+ ensureMeshRoot();
77
+ const out = openSync(MESH_STDOUT, 'a');
78
+ const err = openSync(MESH_STDERR, 'a');
79
+ const child = spawn(process.execPath, [process.argv[1], 'mesh', 'start', '--foreground', ...(flags.as ? ['--as', flags.as] : [])], {
80
+ detached: true,
81
+ stdio: ['ignore', out, err],
82
+ });
83
+ child.unref();
84
+ console.log(`✓ yome mesh launched in background`);
85
+ console.log(` logs: ${MESH_STDOUT}`);
86
+ return 0;
87
+ }
88
+ async function runForeground(flags) {
89
+ // ensureMeshRoot first so MESH_PID has a parent dir; foreground path
90
+ // can also be invoked directly (systemd / launchd) without the
91
+ // background path creating ~/.yome/mesh/ for us.
92
+ ensureMeshRoot();
93
+ writeFileSync(MESH_PID, String(process.pid));
94
+ let daemon = null;
95
+ let tuiUnmount = null;
96
+ const teardown = () => {
97
+ try {
98
+ tuiUnmount?.();
99
+ }
100
+ catch { /* ignore */ }
101
+ try {
102
+ daemon?.shutdown();
103
+ }
104
+ catch { /* ignore */ }
105
+ try {
106
+ if (existsSync(MESH_PID))
107
+ unlinkSync(MESH_PID);
108
+ }
109
+ catch { /* ignore */ }
110
+ process.exit(0);
111
+ };
112
+ process.on('SIGINT', teardown);
113
+ process.on('SIGTERM', teardown);
114
+ // Logger: if TUI is on, NEVER write to stdout (Ink owns the screen).
115
+ // Tee everything to ~/.yome/mesh/mesh.tui.log instead so the user
116
+ // can `tail -F` from another terminal.
117
+ const tuiLogPath = join(MESH_ROOT, 'mesh.tui.log');
118
+ const log = flags.tui
119
+ ? (level, msg, meta) => {
120
+ try {
121
+ const line = `${new Date().toISOString()} [${level}] ${msg}${meta ? ' ' + JSON.stringify(meta) : ''}\n`;
122
+ appendFileSync(tuiLogPath, line);
123
+ }
124
+ catch { /* ignore */ }
125
+ }
126
+ : undefined;
127
+ try {
128
+ daemon = await startMeshDaemon({
129
+ hubBase: flags.hubBase,
130
+ asName: flags.as,
131
+ log,
132
+ });
133
+ }
134
+ catch (err) {
135
+ console.error(`✗ mesh start failed: ${err.message}`);
136
+ try {
137
+ if (existsSync(MESH_PID))
138
+ unlinkSync(MESH_PID);
139
+ }
140
+ catch { /* ignore */ }
141
+ return 1;
142
+ }
143
+ if (flags.tui) {
144
+ // Lazy-load Ink + MeshApp so non-TUI callers (systemd, background
145
+ // detached child) never pay the React render cost or pull stdin.
146
+ const { render } = await import('ink');
147
+ const { default: React } = await import('react');
148
+ const { MeshApp } = await import('../ui/MeshApp.js');
149
+ const instance = render(React.createElement(MeshApp, { daemon }));
150
+ tuiUnmount = () => instance.unmount();
151
+ // Block on Ink's own lifecycle: when the user exits the TUI
152
+ // (Ctrl-C in MeshApp -> useApp().exit()), waitUntilExit resolves.
153
+ await instance.waitUntilExit();
154
+ teardown();
155
+ return 0;
156
+ }
157
+ // Headless: block forever; the daemon owns timers + WS.
158
+ return new Promise(() => { });
159
+ }
160
+ function doStop() {
161
+ const pid = readPidIfRunning();
162
+ if (!pid) {
163
+ console.log('(yome mesh was not running)');
164
+ return 0;
165
+ }
166
+ try {
167
+ process.kill(pid, 'SIGTERM');
168
+ console.log(`✓ sent SIGTERM to pid=${pid}`);
169
+ return 0;
170
+ }
171
+ catch (e) {
172
+ console.error(`✗ failed to stop yome mesh: ${e.message}`);
173
+ return 1;
174
+ }
175
+ }
176
+ function doStatus() {
177
+ const pid = readPidIfRunning();
178
+ const deviceId = getOrCreateDeviceId();
179
+ const state = loadDeviceState();
180
+ const caps = detectCapabilities();
181
+ if (!pid) {
182
+ console.log('Status: not running');
183
+ }
184
+ else {
185
+ console.log(`Status: running (pid=${pid})`);
186
+ }
187
+ console.log(`Device id: ${deviceId}`);
188
+ console.log(`Hostname: ${safeHostname()}`);
189
+ if (state?.alias)
190
+ console.log(`Alias: ${state.alias}`);
191
+ if (state?.description)
192
+ console.log(`Description: ${state.description}`);
193
+ console.log(`Capabilities: ${caps.join(', ')}`);
194
+ console.log(`PID file: ${MESH_PID}`);
195
+ console.log(`Logs: ${MESH_STDOUT}`);
196
+ return 0;
197
+ }
198
+ function doLogs(flags) {
199
+ if (!existsSync(MESH_STDOUT) && !existsSync(MESH_STDERR)) {
200
+ console.log('(no mesh logs yet — `yome mesh start` first)');
201
+ return 0;
202
+ }
203
+ if (flags.follow) {
204
+ try {
205
+ execSync(`tail -F "${MESH_STDOUT}" "${MESH_STDERR}"`, { stdio: 'inherit' });
206
+ }
207
+ catch { /* user interrupted */ }
208
+ return 0;
209
+ }
210
+ const tail = (file) => {
211
+ if (!existsSync(file))
212
+ return;
213
+ try {
214
+ const buf = readFileSync(file, 'utf-8');
215
+ const lines = buf.split('\n').slice(-100).join('\n');
216
+ console.log(`── ${file} ──`);
217
+ console.log(lines);
218
+ }
219
+ catch { /* ignore */ }
220
+ };
221
+ tail(MESH_STDOUT);
222
+ tail(MESH_STDERR);
223
+ return 0;
224
+ }
225
+ function doInfo() {
226
+ const deviceId = getOrCreateDeviceId();
227
+ const state = loadDeviceState();
228
+ const caps = detectCapabilities();
229
+ const auth = readAuthState();
230
+ console.log(`Yome user: ${auth?.yome_user_id ?? '(not logged in — run `yome login`)'}`);
231
+ console.log(`Provider: ${auth?.provider ?? '-'} (${auth?.provider_login ?? '-'})`);
232
+ console.log(`Device id: ${deviceId}`);
233
+ console.log(`Hostname: ${safeHostname()}`);
234
+ console.log(`Created at: ${state?.createdAt ?? '(this run)'}`);
235
+ if (state?.alias)
236
+ console.log(`Alias: ${state.alias}`);
237
+ if (state?.description)
238
+ console.log(`Description: ${state.description}`);
239
+ console.log(`Capabilities: ${caps.join(', ')}`);
240
+ return 0;
241
+ }
242
+ function doRename(pos) {
243
+ const alias = pos[0];
244
+ const description = pos.slice(1).join(' ').trim() || undefined;
245
+ if (!alias) {
246
+ console.error('Usage: yome mesh rename <alias> [description]');
247
+ return 2;
248
+ }
249
+ const next = updateDeviceMeta({ alias, description });
250
+ console.log(`✓ alias set to "${next.alias}"`);
251
+ if (description)
252
+ console.log(` description: ${description}`);
253
+ console.log('(restart `yome mesh` to push the new alias to Cloud)');
254
+ return 0;
255
+ }
256
+ function ensureMeshRoot() {
257
+ try {
258
+ mkdirSync(MESH_ROOT, { recursive: true });
259
+ }
260
+ catch { /* ignore */ }
261
+ }
262
+ function readPidIfRunning() {
263
+ if (!existsSync(MESH_PID))
264
+ return null;
265
+ try {
266
+ const pid = Number.parseInt(readFileSync(MESH_PID, 'utf-8').trim(), 10);
267
+ if (!Number.isFinite(pid))
268
+ return null;
269
+ // Signal 0 = liveness check.
270
+ try {
271
+ process.kill(pid, 0);
272
+ }
273
+ catch {
274
+ return null;
275
+ }
276
+ return pid;
277
+ }
278
+ catch {
279
+ return null;
280
+ }
281
+ }
282
+ //# sourceMappingURL=mesh.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mesh.js","sourceRoot":"","sources":["../../src/commands/mesh.ts"],"names":[],"mappings":"AAAA,qCAAqC;AAErC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,QAAQ,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,IAAI,CAAC;AAC9G,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC5G,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;AACnD,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;AAC7C,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;AACvD,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;AAiBvD,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,IAAc,EAAE,KAAmB;IACzE,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,QAAQ,GAAG,EAAE,CAAC;QACZ,KAAK,OAAO,CAAC,CAAG,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QACrD,KAAK,MAAM,CAAC,CAAI,OAAO,MAAM,EAAE,CAAC;QAChC,KAAK,QAAQ,CAAC,CAAE,OAAO,QAAQ,EAAE,CAAC;QAClC,KAAK,MAAM,CAAC,CAAI,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;QACrC,KAAK,QAAQ,CAAC,CAAE,OAAO,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/C,KAAK,MAAM,CAAC,CAAI,OAAO,MAAM,EAAE,CAAC;QAChC,KAAK,SAAS,CAAC;QACf,KAAK,MAAM,CAAC;QACZ,KAAK,QAAQ;YAAG,SAAS,EAAE,CAAC;YAAC,OAAO,CAAC,CAAC;QACtC;YACE,OAAO,CAAC,KAAK,CAAC,iCAAiC,GAAG,EAAE,CAAC,CAAC;YACtD,SAAS,EAAE,CAAC;YACZ,OAAO,CAAC,CAAC;IACb,CAAC;AACH,CAAC;AAED,SAAS,SAAS;IAChB,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;CAqBb,CAAC,CAAC;AACH,CAAC;AAED,KAAK,UAAU,OAAO,CAAC,IAAc,EAAE,KAAmB;IACxD,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC;QACrB,OAAO,CAAC,KAAK,CAAC,0CAA0C,CAAC,CAAC;QAC1D,OAAO,CAAC,CAAC;IACX,CAAC;IACD,gEAAgE;IAChE,oEAAoE;IACpE,gEAAgE;IAChE,yCAAyC;IACzC,IAAI,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,GAAG,EAAE,CAAC;QAClC,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC;IACD,6DAA6D;IAC7D,MAAM,QAAQ,GAAG,gBAAgB,EAAE,CAAC;IACpC,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,oCAAoC,QAAQ,GAAG,CAAC,CAAC;QAC/D,OAAO,CAAC,CAAC;IACX,CAAC;IACD,cAAc,EAAE,CAAC;IACjB,MAAM,GAAG,GAAG,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;IACvC,MAAM,GAAG,GAAG,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;IACvC,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAE,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;QAClI,QAAQ,EAAE,IAAI;QACd,KAAK,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG,CAAC;KAC5B,CAAC,CAAC;IACH,KAAK,CAAC,KAAK,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;IAClD,OAAO,CAAC,GAAG,CAAC,WAAW,WAAW,EAAE,CAAC,CAAC;IACtC,OAAO,CAAC,CAAC;AACX,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,KAAmB;IAC9C,qEAAqE;IACrE,+DAA+D;IAC/D,iDAAiD;IACjD,cAAc,EAAE,CAAC;IACjB,aAAa,CAAC,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7C,IAAI,MAAM,GAAuD,IAAI,CAAC;IACtE,IAAI,UAAU,GAAwB,IAAI,CAAC;IAC3C,MAAM,QAAQ,GAAG,GAAG,EAAE;QACpB,IAAI,CAAC;YAAC,UAAU,EAAE,EAAE,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;QAC9C,IAAI,CAAC;YAAC,MAAM,EAAE,QAAQ,EAAE,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;QAClD,IAAI,CAAC;YAAC,IAAI,UAAU,CAAC,QAAQ,CAAC;gBAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;QAC9E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC;IACF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC/B,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAEhC,qEAAqE;IACrE,kEAAkE;IAClE,uCAAuC;IACvC,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;IACnD,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG;QACnB,CAAC,CAAC,CAAC,KAAgC,EAAE,GAAW,EAAE,IAA8B,EAAQ,EAAE;YACtF,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,KAAK,KAAK,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC;gBACxG,cAAc,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;YACnC,CAAC;YAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;QAC1B,CAAC;QACH,CAAC,CAAC,SAAS,CAAC;IAEd,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,eAAe,CAAC;YAC7B,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,MAAM,EAAE,KAAK,CAAC,EAAE;YAChB,GAAG;SACJ,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,wBAAyB,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QAChE,IAAI,CAAC;YAAC,IAAI,UAAU,CAAC,QAAQ,CAAC;gBAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;QAC9E,OAAO,CAAC,CAAC;IACX,CAAC;IAED,IAAI,KAAK,CAAC,GAAG,EAAE,CAAC;QACd,kEAAkE;QAClE,iEAAiE;QACjE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,CAAC;QACvC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC;QACjD,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;QACrD,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;QAClE,UAAU,GAAG,GAAG,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;QACtC,4DAA4D;QAC5D,kEAAkE;QAClE,MAAM,QAAQ,CAAC,aAAa,EAAE,CAAC;QAC/B,QAAQ,EAAE,CAAC;QACX,OAAO,CAAC,CAAC;IACX,CAAC;IAED,wDAAwD;IACxD,OAAO,IAAI,OAAO,CAAS,GAAG,EAAE,GAAwB,CAAC,CAAC,CAAC;AAC7D,CAAC;AAED,SAAS,MAAM;IACb,MAAM,GAAG,GAAG,gBAAgB,EAAE,CAAC;IAC/B,IAAI,CAAC,GAAG,EAAE,CAAC;QAAC,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;QAAC,OAAO,CAAC,CAAC;IAAC,CAAC;IACnE,IAAI,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QAC7B,OAAO,CAAC,GAAG,CAAC,yBAAyB,GAAG,EAAE,CAAC,CAAC;QAC5C,OAAO,CAAC,CAAC;IACX,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,+BAAgC,CAAW,CAAC,OAAO,EAAE,CAAC,CAAC;QACrE,OAAO,CAAC,CAAC;IACX,CAAC;AACH,CAAC;AAED,SAAS,QAAQ;IACf,MAAM,GAAG,GAAG,gBAAgB,EAAE,CAAC;IAC/B,MAAM,QAAQ,GAAG,mBAAmB,EAAE,CAAC;IACvC,MAAM,KAAK,GAAG,eAAe,EAAE,CAAC;IAChC,MAAM,IAAI,GAAG,kBAAkB,EAAE,CAAC;IAClC,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;IAC5C,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,+BAA+B,GAAG,GAAG,CAAC,CAAC;IACrD,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,kBAAkB,QAAQ,EAAE,CAAC,CAAC;IAC1C,OAAO,CAAC,GAAG,CAAC,kBAAkB,YAAY,EAAE,EAAE,CAAC,CAAC;IAChD,IAAI,KAAK,EAAE,KAAK;QAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;IAC/D,IAAI,KAAK,EAAE,WAAW;QAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;IAC3E,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjD,OAAO,CAAC,GAAG,CAAC,kBAAkB,QAAQ,EAAE,CAAC,CAAC;IAC1C,OAAO,CAAC,GAAG,CAAC,kBAAkB,WAAW,EAAE,CAAC,CAAC;IAC7C,OAAO,CAAC,CAAC;AACX,CAAC;AAED,SAAS,MAAM,CAAC,KAAmB;IACjC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QACzD,OAAO,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC;QAC5D,OAAO,CAAC,CAAC;IACX,CAAC;IACD,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QACjB,IAAI,CAAC;YACH,QAAQ,CAAC,YAAY,WAAW,MAAM,WAAW,GAAG,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QAC9E,CAAC;QAAC,MAAM,CAAC,CAAC,sBAAsB,CAAC,CAAC;QAClC,OAAO,CAAC,CAAC;IACX,CAAC;IACD,MAAM,IAAI,GAAG,CAAC,IAAY,EAAE,EAAE;QAC5B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,OAAO;QAC9B,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YACxC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACrD,OAAO,CAAC,GAAG,CAAC,MAAM,IAAI,KAAK,CAAC,CAAC;YAC7B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;QAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;IAC1B,CAAC,CAAC;IACF,IAAI,CAAC,WAAW,CAAC,CAAC;IAClB,IAAI,CAAC,WAAW,CAAC,CAAC;IAClB,OAAO,CAAC,CAAC;AACX,CAAC;AAED,SAAS,MAAM;IACb,MAAM,QAAQ,GAAG,mBAAmB,EAAE,CAAC;IACvC,MAAM,KAAK,GAAG,eAAe,EAAE,CAAC;IAChC,MAAM,IAAI,GAAG,kBAAkB,EAAE,CAAC;IAClC,MAAM,IAAI,GAAG,aAAa,EAAE,CAAC;IAC7B,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,EAAE,YAAY,IAAI,oCAAoC,EAAE,CAAC,CAAC;IAC5F,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,EAAE,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE,cAAc,IAAI,GAAG,GAAG,CAAC,CAAC;IACxF,OAAO,CAAC,GAAG,CAAC,kBAAkB,QAAQ,EAAE,CAAC,CAAC;IAC1C,OAAO,CAAC,GAAG,CAAC,kBAAkB,YAAY,EAAE,EAAE,CAAC,CAAC;IAChD,OAAO,CAAC,GAAG,CAAC,kBAAkB,KAAK,EAAE,SAAS,IAAI,YAAY,EAAE,CAAC,CAAC;IAClE,IAAI,KAAK,EAAE,KAAK;QAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;IAC/D,IAAI,KAAK,EAAE,WAAW;QAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;IAC3E,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,SAAS,QAAQ,CAAC,GAAa;IAC7B,MAAM,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;IACrB,MAAM,WAAW,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,IAAI,SAAS,CAAC;IAC/D,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,+CAA+C,CAAC,CAAC;QAC/D,OAAO,CAAC,CAAC;IACX,CAAC;IACD,MAAM,IAAI,GAAG,gBAAgB,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;IACtD,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;IAC9C,IAAI,WAAW;QAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB,WAAW,EAAE,CAAC,CAAC;IAC9D,OAAO,CAAC,GAAG,CAAC,sDAAsD,CAAC,CAAC;IACpE,OAAO,CAAC,CAAC;AACX,CAAC;AAED,SAAS,cAAc;IACrB,IAAI,CAAC;QACH,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5C,CAAC;IAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,gBAAgB;IACvB,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC;IACvC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;QACxE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC;QACvC,6BAA6B;QAC7B,IAAI,CAAC;YAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC;YAAC,OAAO,IAAI,CAAC;QAAC,CAAC;QACpD,OAAO,GAAG,CAAC;IACb,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
package/dist/context.js CHANGED
@@ -93,11 +93,14 @@ You help with software engineering tasks: reading code, writing code, debugging,
93
93
  - Never expose secrets or API keys.
94
94
 
95
95
  ## Available Tools
96
- You have these tools: Read, Edit, Write, Bash, Glob, Grep, LS.
96
+ You have these tools: Read, Edit, Write, Bash, Yome, AskUser, TodoWrite, Glob, Grep, LS.
97
97
  - Use Read to view file contents.
98
98
  - Use Edit to modify existing files (find & replace with old_string/new_string).
99
99
  - Use Write to create new files.
100
- - Use Bash to run shell commands.
100
+ - Use Bash for /bin/sh commands ONLY (ls, cat, git, mkdir, build/test runners, pipes…). It does NOT route to hub skills.
101
+ - Use Yome to invoke installed hub-skill commands (xl, ppt, cal, fs, rem, …) — pass the command line exactly as a human would type it (e.g. \`xl books\`, \`ppt new ~/Desktop/x.pptx\`).
102
+ - Use AskUser when requirements are ambiguous or you need the user to choose between trade-offs BEFORE doing irreversible work. Send 1–4 multiple-choice questions; do NOT include "Other" (the UI provides a custom-answer entry). Blocks until the user responds.
103
+ - Use TodoWrite proactively whenever you start a task with 3+ meaningful steps. Always send the FULL list. Keep exactly ONE item in_progress at a time. Flip status the moment you start / finish a step — don't batch updates. Each item needs \`content\` (imperative) + \`activeForm\` (present continuous) + \`status\`.
101
104
  - Use Glob to find files by pattern.
102
105
  - Use Grep to search file contents.
103
106
  - Use LS to list directory contents.
@@ -162,7 +165,7 @@ function buildSkillsSection(skills) {
162
165
  * the trigger / effects / entry triad.
163
166
  */
164
167
  function buildHubSkillsSection(entries) {
165
- let section = `\n## Installed Hub Skills\nUse the Bash tool: \`<domain> <action> [args]\` (no \`yome\` prefix, no SkillCall).\n\n`;
168
+ let section = `\n## Installed Hub Skills\nUse the **Yome** tool: \`<domain> <action> [args]\` (no \`yome\` prefix, no SkillCall, NOT the Bash tool).\nThe Bash tool is for /bin/sh ops only and will NOT route to skills.\n\n`;
166
169
  for (const e of entries) {
167
170
  const manifest = readManifest(e.installedAt);
168
171
  section += renderL1Block(e.domain, manifest, e.description) + '\n';
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export interface CalendarAccessResult {
2
+ ok: boolean;
3
+ status: 'granted' | 'denied' | 'restricted' | 'not-determined' | 'unknown' | 'no-helper';
4
+ message: string;
5
+ /** Hint surfaced from the Swift helper (e.g. "open System Settings → ..."). */
6
+ fix?: string;
7
+ }
8
+ /** Best-effort path to bin/yome-calwatch. */
9
+ export declare function resolveCalwatchPath(): string;
10
+ export declare function checkCalendarAccess(): CalendarAccessResult;
@@ -0,0 +1,68 @@
1
+ // Pre-flight EventKit permission probe for `yome cron add --on calendar:*`.
2
+ //
3
+ // We invoke the same Swift helper the daemon uses (`yome-calwatch
4
+ // --check-access`) — it's the only reliable way to learn the current
5
+ // state because TCC is per-binary, not per-user.
6
+ //
7
+ // Exit codes (mirrors the helper):
8
+ // 0 granted
9
+ // 2 denied / restricted (with a JSON line describing the fix)
10
+ // 3 unknown
11
+ // non-existent binary → returns { ok: false, message: '...' }
12
+ import { spawnSync } from 'child_process';
13
+ import { existsSync } from 'fs';
14
+ import { dirname, resolve } from 'path';
15
+ import { fileURLToPath } from 'url';
16
+ /** Best-effort path to bin/yome-calwatch. */
17
+ export function resolveCalwatchPath() {
18
+ const here = dirname(fileURLToPath(import.meta.url));
19
+ // dist/daemon/calendarPermission.js → ../../bin/yome-calwatch
20
+ // src/daemon/calendarPermission.ts → ../../bin/yome-calwatch
21
+ return resolve(here, '..', '..', 'bin', 'yome-calwatch');
22
+ }
23
+ export function checkCalendarAccess() {
24
+ const bin = resolveCalwatchPath();
25
+ if (!existsSync(bin)) {
26
+ return {
27
+ ok: false,
28
+ status: 'no-helper',
29
+ message: 'native helper yome-calwatch is missing. ' +
30
+ 'On macOS: cd cli && npm run build:native. ' +
31
+ 'On Linux/Windows: calendar triggers are macOS-only.',
32
+ };
33
+ }
34
+ const r = spawnSync(bin, ['--check-access'], { encoding: 'utf-8', timeout: 30_000 });
35
+ // Helper writes one JSON line to stdout regardless of exit code.
36
+ const last = (r.stdout ?? '').split('\n').reverse().find((l) => l.trim().startsWith('{'));
37
+ let parsed = {};
38
+ if (last) {
39
+ try {
40
+ parsed = JSON.parse(last);
41
+ }
42
+ catch { /* noop */ }
43
+ }
44
+ const status = String(parsed.status ?? '');
45
+ const fix = typeof parsed.fix === 'string' ? parsed.fix : undefined;
46
+ if (r.status === 0 && status === 'granted') {
47
+ return { ok: true, status: 'granted', message: 'calendar access granted' };
48
+ }
49
+ if (status === 'denied' || status === 'restricted') {
50
+ return {
51
+ ok: false,
52
+ status: status,
53
+ message: `calendar access ${status}`,
54
+ fix,
55
+ };
56
+ }
57
+ if (status === 'not-determined') {
58
+ return { ok: false, status: 'not-determined', message: 'calendar access not yet determined', fix };
59
+ }
60
+ return {
61
+ ok: false,
62
+ status: 'unknown',
63
+ message: `unable to determine calendar access (helper exit=${r.status}). ` +
64
+ `stdout=${(r.stdout ?? '').slice(0, 200)} stderr=${(r.stderr ?? '').slice(0, 200)}`,
65
+ fix,
66
+ };
67
+ }
68
+ //# sourceMappingURL=calendarPermission.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"calendarPermission.js","sourceRoot":"","sources":["../../src/daemon/calendarPermission.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ export interface CronCliFlags {
2
+ at?: string;
3
+ human?: string;
4
+ once?: string;
5
+ on?: string;
6
+ path?: string;
7
+ within?: string;
8
+ titleRegex?: string;
9
+ calendar?: string;
10
+ tz?: string;
11
+ cwd?: string;
12
+ allow?: string | string[];
13
+ deny?: string | string[];
14
+ maxMs?: string;
15
+ env?: string | string[];
16
+ follow?: boolean;
17
+ json?: boolean;
18
+ }
19
+ export declare function runCronSubcommand(args: string[], flags: CronCliFlags): Promise<number>;