@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.
- package/README.md +5 -7
- package/README.zh-CN.md +5 -7
- package/bin/yome-calwatch +0 -0
- package/dist/commands/mesh.d.ts +15 -0
- package/dist/commands/mesh.js +282 -0
- package/dist/commands/mesh.js.map +1 -0
- package/dist/context.js +6 -3
- 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 +173 -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/systemd.d.ts +7 -0
- package/dist/daemon/systemd.js +87 -0
- package/dist/daemon/systemd.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 +120 -9
- package/dist/index.js.map +1 -1
- package/dist/llm.d.ts +14 -2
- package/dist/llm.js +266 -201
- package/dist/llm.js.map +1 -1
- package/dist/mesh/capabilities.d.ts +6 -0
- package/dist/mesh/capabilities.js +66 -0
- package/dist/mesh/capabilities.js.map +1 -0
- package/dist/mesh/device-id.d.ts +28 -0
- package/dist/mesh/device-id.js +105 -0
- package/dist/mesh/device-id.js.map +1 -0
- package/dist/mesh/device-registrar.d.ts +33 -0
- package/dist/mesh/device-registrar.js +131 -0
- package/dist/mesh/device-registrar.js.map +1 -0
- package/dist/mesh/index.d.ts +28 -0
- package/dist/mesh/index.js +71 -0
- package/dist/mesh/index.js.map +1 -0
- package/dist/mesh/partykit-client.d.ts +43 -0
- package/dist/mesh/partykit-client.js +195 -0
- package/dist/mesh/partykit-client.js.map +1 -0
- package/dist/mesh/rpc-handler.d.ts +28 -0
- package/dist/mesh/rpc-handler.js +201 -0
- package/dist/mesh/rpc-handler.js.map +1 -0
- package/dist/mesh/thread-stream.d.ts +109 -0
- package/dist/mesh/thread-stream.js +110 -0
- package/dist/mesh/thread-stream.js.map +1 -0
- package/dist/mesh/ticket.d.ts +33 -0
- package/dist/mesh/ticket.js +127 -0
- package/dist/mesh/ticket.js.map +1 -0
- package/dist/mesh/types.d.ts +83 -0
- package/dist/mesh/types.js +9 -0
- package/dist/mesh/types.js.map +1 -0
- package/dist/skills/runner/dispatcher.d.ts +74 -3
- package/dist/skills/runner/dispatcher.js +258 -48
- package/dist/skills/runner/dispatcher.js.map +1 -1
- 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.js +0 -1
- package/dist/skills/runner/kernel.js.map +1 -1
- 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/state/todos.d.ts +12 -0
- package/dist/state/todos.js +32 -0
- package/dist/state/todos.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 +13 -19
- package/dist/tools/bash.js.map +1 -1
- package/dist/tools/index.d.ts +2 -0
- package/dist/tools/index.js +18 -5
- package/dist/tools/index.js.map +1 -1
- 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/App.js +52 -3
- 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/InputBar.js +20 -34
- package/dist/ui/InputBar.js.map +1 -1
- package/dist/ui/MeshApp.d.ts +9 -0
- package/dist/ui/MeshApp.js +226 -0
- package/dist/ui/MeshApp.js.map +1 -0
- package/dist/ui/MessageList.d.ts +8 -0
- package/dist/ui/MessageList.js +2 -2
- package/dist/ui/MessageList.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/TodoPanel.d.ts +7 -0
- package/dist/ui/TodoPanel.js +36 -0
- package/dist/ui/TodoPanel.js.map +1 -0
- package/dist/withRetry.d.ts +14 -0
- package/dist/withRetry.js +106 -0
- package/dist/withRetry.js.map +1 -0
- package/dist/yomeSkills/cli.d.ts +8 -0
- package/dist/yomeSkills/cli.js +155 -8
- package/dist/yomeSkills/cli.js.map +1 -1
- 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/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 +7 -0
- package/dist/yomeSkills/installGithub.js +42 -21
- package/dist/yomeSkills/installGithub.js.map +1 -1
- package/dist/yomeSkills/invoke.js +50 -18
- package/dist/yomeSkills/invoke.js.map +1 -1
- package/dist/yomeSkills/publish.d.ts +2 -0
- package/dist/yomeSkills/publish.js +6 -1
- package/dist/yomeSkills/publish.js.map +1 -1
- package/package.json +13 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"thread-stream.js","sourceRoot":"","sources":["../../src/mesh/thread-stream.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { WsTicketResponse } from './types.js';
|
|
2
|
+
export declare class MintTicketError extends Error {
|
|
3
|
+
code: string;
|
|
4
|
+
httpStatus?: number | undefined;
|
|
5
|
+
constructor(message: string, code: string, httpStatus?: number | undefined);
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Request a fresh WS ticket. The caller is responsible for caching
|
|
9
|
+
* (TicketCache below). Throws MintTicketError on any failure.
|
|
10
|
+
*/
|
|
11
|
+
export declare function mintWsTicket(opts?: {
|
|
12
|
+
hubBase?: string;
|
|
13
|
+
fetcher?: typeof fetch;
|
|
14
|
+
cliVersion?: string;
|
|
15
|
+
}): Promise<WsTicketResponse>;
|
|
16
|
+
/**
|
|
17
|
+
* Tiny in-memory cache that proactively refreshes the ticket before it
|
|
18
|
+
* expires. Owned by the long-running mesh daemon process. NOT persisted
|
|
19
|
+
* to disk — short-lived JWTs are deliberately ephemeral.
|
|
20
|
+
*
|
|
21
|
+
* Refresh strategy: re-mint when ≤ 60s remains. PartyKit only checks
|
|
22
|
+
* the JWT at WS handshake time (not per message), so we don't strictly
|
|
23
|
+
* need to refresh during a live connection — but we cache for reconnects.
|
|
24
|
+
*/
|
|
25
|
+
export declare class TicketCache {
|
|
26
|
+
private mintFn;
|
|
27
|
+
private current;
|
|
28
|
+
private expiresAtMs;
|
|
29
|
+
private inflight;
|
|
30
|
+
constructor(mintFn?: () => Promise<WsTicketResponse>);
|
|
31
|
+
get(): Promise<WsTicketResponse>;
|
|
32
|
+
invalidate(): void;
|
|
33
|
+
}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
// PAT → short-lived WS ticket exchange.
|
|
2
|
+
//
|
|
3
|
+
// We hold a long-lived opaque `yome_token` (from `yome login`) on disk
|
|
4
|
+
// and use it to mint short-lived JWTs that PartyKit can verify with the
|
|
5
|
+
// existing Supabase-JWT HS256 path. This is the same pattern GitHub
|
|
6
|
+
// CLI / Vercel CLI / Supabase CLI use: never put a service-grade JWT
|
|
7
|
+
// or refresh_token on disk; only ever hold a revocable PAT.
|
|
8
|
+
//
|
|
9
|
+
// See cli/MIGRATION.md "Auth design" for the full rationale.
|
|
10
|
+
import { readAuthState } from '../yomeSkills/auth.js';
|
|
11
|
+
import { getHubBase } from '../yomeSkills/login.js';
|
|
12
|
+
import { getOrCreateDeviceId, safeHostname, currentPlatform } from './device-id.js';
|
|
13
|
+
const TICKET_ENDPOINT_PATH = '/api/cli/mesh/ws-ticket';
|
|
14
|
+
/** Stable User-Agent for hub logs. */
|
|
15
|
+
function userAgent() {
|
|
16
|
+
// Bumping is fine; this is a label, not a contract.
|
|
17
|
+
return `yome-cli/0.x mesh/1 ${currentPlatform()}`;
|
|
18
|
+
}
|
|
19
|
+
export class MintTicketError extends Error {
|
|
20
|
+
code;
|
|
21
|
+
httpStatus;
|
|
22
|
+
constructor(message, code, httpStatus) {
|
|
23
|
+
super(message);
|
|
24
|
+
this.code = code;
|
|
25
|
+
this.httpStatus = httpStatus;
|
|
26
|
+
this.name = 'MintTicketError';
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Request a fresh WS ticket. The caller is responsible for caching
|
|
31
|
+
* (TicketCache below). Throws MintTicketError on any failure.
|
|
32
|
+
*/
|
|
33
|
+
export async function mintWsTicket(opts = {}) {
|
|
34
|
+
const auth = readAuthState();
|
|
35
|
+
if (!auth?.yome_token) {
|
|
36
|
+
throw new MintTicketError('Not logged in. Run `yome login` first.', 'not_logged_in');
|
|
37
|
+
}
|
|
38
|
+
const hubBase = (opts.hubBase ?? getHubBase()).replace(/\/+$/, '');
|
|
39
|
+
const fetcher = opts.fetcher ?? fetch;
|
|
40
|
+
const body = {
|
|
41
|
+
deviceId: getOrCreateDeviceId(),
|
|
42
|
+
hostname: safeHostname(),
|
|
43
|
+
platform: currentPlatform(),
|
|
44
|
+
cliVersion: opts.cliVersion,
|
|
45
|
+
};
|
|
46
|
+
const controller = new AbortController();
|
|
47
|
+
const timer = setTimeout(() => controller.abort(), 30_000);
|
|
48
|
+
let resp;
|
|
49
|
+
try {
|
|
50
|
+
resp = await fetcher(`${hubBase}${TICKET_ENDPOINT_PATH}`, {
|
|
51
|
+
method: 'POST',
|
|
52
|
+
headers: {
|
|
53
|
+
'Content-Type': 'application/json',
|
|
54
|
+
'Authorization': `Bearer ${auth.yome_token}`,
|
|
55
|
+
'User-Agent': userAgent(),
|
|
56
|
+
},
|
|
57
|
+
body: JSON.stringify(body),
|
|
58
|
+
signal: controller.signal,
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
catch (err) {
|
|
62
|
+
throw new MintTicketError(`Network error contacting hub: ${err.message}`, 'network');
|
|
63
|
+
}
|
|
64
|
+
finally {
|
|
65
|
+
clearTimeout(timer);
|
|
66
|
+
}
|
|
67
|
+
let json;
|
|
68
|
+
try {
|
|
69
|
+
json = await resp.json();
|
|
70
|
+
}
|
|
71
|
+
catch {
|
|
72
|
+
throw new MintTicketError(`Hub returned non-JSON (HTTP ${resp.status}).`, 'bad_response', resp.status);
|
|
73
|
+
}
|
|
74
|
+
if (!resp.ok || !json.ok) {
|
|
75
|
+
const e = json;
|
|
76
|
+
throw new MintTicketError(e.error ?? `Hub rejected ticket request (HTTP ${resp.status}).`, e.code ?? 'hub_error', resp.status);
|
|
77
|
+
}
|
|
78
|
+
const ok = json;
|
|
79
|
+
if (!ok.ws_token || !ok.userId || !ok.partykit_host) {
|
|
80
|
+
throw new MintTicketError('Hub response missing required fields (ws_token / userId / partykit_host).', 'bad_response', resp.status);
|
|
81
|
+
}
|
|
82
|
+
return ok;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Tiny in-memory cache that proactively refreshes the ticket before it
|
|
86
|
+
* expires. Owned by the long-running mesh daemon process. NOT persisted
|
|
87
|
+
* to disk — short-lived JWTs are deliberately ephemeral.
|
|
88
|
+
*
|
|
89
|
+
* Refresh strategy: re-mint when ≤ 60s remains. PartyKit only checks
|
|
90
|
+
* the JWT at WS handshake time (not per message), so we don't strictly
|
|
91
|
+
* need to refresh during a live connection — but we cache for reconnects.
|
|
92
|
+
*/
|
|
93
|
+
export class TicketCache {
|
|
94
|
+
mintFn;
|
|
95
|
+
current = null;
|
|
96
|
+
expiresAtMs = 0;
|
|
97
|
+
inflight = null;
|
|
98
|
+
constructor(mintFn = mintWsTicket) {
|
|
99
|
+
this.mintFn = mintFn;
|
|
100
|
+
}
|
|
101
|
+
async get() {
|
|
102
|
+
const now = Date.now();
|
|
103
|
+
const safetyWindowMs = 60_000;
|
|
104
|
+
if (this.current && now < this.expiresAtMs - safetyWindowMs) {
|
|
105
|
+
return this.current;
|
|
106
|
+
}
|
|
107
|
+
if (this.inflight)
|
|
108
|
+
return this.inflight;
|
|
109
|
+
this.inflight = (async () => {
|
|
110
|
+
const fresh = await this.mintFn();
|
|
111
|
+
this.current = fresh;
|
|
112
|
+
this.expiresAtMs = Date.now() + fresh.expires_in * 1000;
|
|
113
|
+
return fresh;
|
|
114
|
+
})();
|
|
115
|
+
try {
|
|
116
|
+
return await this.inflight;
|
|
117
|
+
}
|
|
118
|
+
finally {
|
|
119
|
+
this.inflight = null;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
invalidate() {
|
|
123
|
+
this.current = null;
|
|
124
|
+
this.expiresAtMs = 0;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
//# sourceMappingURL=ticket.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ticket.js","sourceRoot":"","sources":["../../src/mesh/ticket.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
export type CommandDomain = 'bash' | 'fs' | 'git' | 'docker' | 'k8s' | 'systemd' | 'pkg' | 'log' | 'net' | 'svc' | 'cal' | 'rem' | 'note' | 'xl' | 'ppt' | 'doc' | 'kn' | 'num' | 'pg' | 'web' | 'mind' | 'term' | 'lark' | 'ps' | 'sp' | 'notif' | 'chat' | 'app' | 'cur' | 'cap' | 'wf' | 'watch';
|
|
2
|
+
export interface WsDeviceRegister {
|
|
3
|
+
type: 'mesh:register';
|
|
4
|
+
hostname: string;
|
|
5
|
+
model: string;
|
|
6
|
+
capabilities: string[];
|
|
7
|
+
installedApps: string[];
|
|
8
|
+
alias?: string;
|
|
9
|
+
deviceDescription?: string;
|
|
10
|
+
}
|
|
11
|
+
export interface WsDeviceUpdate {
|
|
12
|
+
type: 'mesh:update-device';
|
|
13
|
+
deviceId?: string;
|
|
14
|
+
alias?: string;
|
|
15
|
+
deviceDescription?: string;
|
|
16
|
+
}
|
|
17
|
+
export interface WsHeartbeat {
|
|
18
|
+
type: 'mesh:heartbeat';
|
|
19
|
+
deviceId: string;
|
|
20
|
+
}
|
|
21
|
+
export interface WsRpcResponse {
|
|
22
|
+
type: 'rpc:cal-response';
|
|
23
|
+
requestId: string;
|
|
24
|
+
stdout: string;
|
|
25
|
+
stderr: string;
|
|
26
|
+
exitCode: number;
|
|
27
|
+
}
|
|
28
|
+
export type WsClientFrame = WsDeviceRegister | WsDeviceUpdate | WsHeartbeat | WsRpcResponse;
|
|
29
|
+
export interface WsConnected {
|
|
30
|
+
type: 'connected';
|
|
31
|
+
clientType: 'ios' | 'mac' | 'web' | 'desktop';
|
|
32
|
+
userId: string;
|
|
33
|
+
}
|
|
34
|
+
export interface WsRpcRequest {
|
|
35
|
+
type: 'rpc:cal-request';
|
|
36
|
+
requestId: string;
|
|
37
|
+
command: string;
|
|
38
|
+
parsed: {
|
|
39
|
+
domain: CommandDomain;
|
|
40
|
+
action: string;
|
|
41
|
+
args: Record<string, string>;
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
export interface WsDeviceUpdated {
|
|
45
|
+
type: 'device-updated';
|
|
46
|
+
devices: Array<{
|
|
47
|
+
deviceId: string;
|
|
48
|
+
userId: string;
|
|
49
|
+
hostname: string;
|
|
50
|
+
model: string;
|
|
51
|
+
status: 'online' | 'busy' | 'offline';
|
|
52
|
+
capabilities: string[];
|
|
53
|
+
installedApps: string[];
|
|
54
|
+
currentTask?: string;
|
|
55
|
+
lastHeartbeat: number;
|
|
56
|
+
alias?: string;
|
|
57
|
+
deviceDescription?: string;
|
|
58
|
+
}>;
|
|
59
|
+
}
|
|
60
|
+
export type WsServerFrame = WsConnected | WsRpcRequest | WsDeviceUpdated | {
|
|
61
|
+
type: string;
|
|
62
|
+
[k: string]: unknown;
|
|
63
|
+
};
|
|
64
|
+
export interface WsTicketRequest {
|
|
65
|
+
deviceId: string;
|
|
66
|
+
hostname: string;
|
|
67
|
+
platform: 'linux' | 'darwin' | 'win32' | string;
|
|
68
|
+
/** Optional cli version string for hub-side analytics. */
|
|
69
|
+
cliVersion?: string;
|
|
70
|
+
}
|
|
71
|
+
export interface WsTicketResponse {
|
|
72
|
+
ok: boolean;
|
|
73
|
+
/** Short-lived JWT (HS256 by Supabase JWT secret), sub=userId, aud=partykit. */
|
|
74
|
+
ws_token: string;
|
|
75
|
+
/** Seconds until ws_token expires. */
|
|
76
|
+
expires_in: number;
|
|
77
|
+
userId: string;
|
|
78
|
+
deviceId: string;
|
|
79
|
+
/** Host + room hint. e.g. "yome.party.yome.work". Room id is userId. */
|
|
80
|
+
partykit_host: string;
|
|
81
|
+
error?: string;
|
|
82
|
+
code?: string;
|
|
83
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
// Mesh wire-protocol types.
|
|
2
|
+
//
|
|
3
|
+
// Mirror of the relevant subset of `Server/agent/types.ts` so that
|
|
4
|
+
// cli ↔ PartyKit speak the same JSON frames as iOS / macOS already do.
|
|
5
|
+
// Kept manually-maintained (not generated) because cli is a separate npm
|
|
6
|
+
// package and we want this protocol surface to be stable + reviewable as
|
|
7
|
+
// part of the cli PR.
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/mesh/types.ts"],"names":[],"mappings":"AAAA,4BAA4B;AAC5B,EAAE;AACF,mEAAmE;AACnE,uEAAuE;AACvE,yEAAyE;AACzE,yEAAyE;AACzE,sBAAsB"}
|
|
@@ -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
|
-
*
|
|
34
|
-
*
|
|
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;
|