tapline-host 1.6.2 → 1.7.0
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/dist/accounts.d.ts +129 -12
- package/dist/accounts.js +844 -75
- package/dist/accounts.js.map +1 -1
- package/dist/actionlog.d.ts +11 -4
- package/dist/actionlog.js +22 -1
- package/dist/actionlog.js.map +1 -1
- package/dist/animations.d.ts +4 -2
- package/dist/animations.js +7 -7
- package/dist/animations.js.map +1 -1
- package/dist/api.d.ts +7 -1
- package/dist/api.js +12 -1
- package/dist/api.js.map +1 -1
- package/dist/audit.d.ts +1 -0
- package/dist/auditlog.d.ts +40 -0
- package/dist/auditlog.js +150 -0
- package/dist/auditlog.js.map +1 -0
- package/dist/cli.d.ts +8 -0
- package/dist/cli.js +143 -7
- package/dist/cli.js.map +1 -1
- package/dist/control.d.ts +51 -0
- package/dist/control.js +110 -0
- package/dist/control.js.map +1 -1
- package/dist/doctor.d.ts +6 -0
- package/dist/doctor.js +61 -4
- package/dist/doctor.js.map +1 -1
- package/dist/drive.d.ts +5 -2
- package/dist/drive.js +50 -13
- package/dist/drive.js.map +1 -1
- package/dist/elicit.d.ts +47 -0
- package/dist/elicit.js +87 -0
- package/dist/elicit.js.map +1 -1
- package/dist/format.d.ts +6 -0
- package/dist/format.js +25 -4
- package/dist/format.js.map +1 -1
- package/dist/grants.d.ts +297 -0
- package/dist/grants.js +938 -0
- package/dist/grants.js.map +1 -0
- package/dist/grantscmd.d.ts +34 -0
- package/dist/grantscmd.js +100 -0
- package/dist/grantscmd.js.map +1 -0
- package/dist/hostfacts.d.ts +23 -0
- package/dist/hostfacts.js +65 -0
- package/dist/hostfacts.js.map +1 -0
- package/dist/inspect.d.ts +3 -2
- package/dist/inspect.js +20 -8
- package/dist/inspect.js.map +1 -1
- package/dist/mapcmd.d.ts +2 -2
- package/dist/mcp.js +1 -1
- package/dist/nochange.d.ts +1 -0
- package/dist/otpclient.d.ts +79 -0
- package/dist/otpclient.js +362 -0
- package/dist/otpclient.js.map +1 -0
- package/dist/pidlock.d.ts +99 -0
- package/dist/pidlock.js +382 -0
- package/dist/pidlock.js.map +1 -0
- package/dist/places.d.ts +11 -0
- package/dist/places.js +28 -2
- package/dist/places.js.map +1 -1
- package/dist/policy.d.ts +2 -1
- package/dist/policy.js +5 -2
- package/dist/policy.js.map +1 -1
- package/dist/protocol.d.ts +4 -0
- package/dist/protocol.js +2 -0
- package/dist/protocol.js.map +1 -1
- package/dist/report.d.ts +8 -0
- package/dist/report.js +34 -1
- package/dist/report.js.map +1 -1
- package/dist/routes.d.ts +1 -1
- package/dist/routes.js +27 -11
- package/dist/routes.js.map +1 -1
- package/dist/runschedule.d.ts +119 -0
- package/dist/runschedule.js +281 -0
- package/dist/runschedule.js.map +1 -0
- package/dist/runtime.d.ts +48 -1
- package/dist/runtime.js +214 -18
- package/dist/runtime.js.map +1 -1
- package/dist/schedule.d.ts +145 -0
- package/dist/schedule.js +401 -0
- package/dist/schedule.js.map +1 -0
- package/dist/schedulehost.d.ts +73 -0
- package/dist/schedulehost.js +391 -0
- package/dist/schedulehost.js.map +1 -0
- package/dist/script.d.ts +2 -0
- package/dist/script.js +2 -0
- package/dist/script.js.map +1 -1
- package/dist/server.d.ts +6 -0
- package/dist/server.js +3 -1
- package/dist/server.js.map +1 -1
- package/dist/thincall.d.ts +13 -0
- package/dist/thincall.js +139 -59
- package/dist/thincall.js.map +1 -1
- package/dist/tool-text-data.d.ts +1 -1
- package/dist/tool-text-data.js +1 -1
- package/dist/tool-text-data.js.map +1 -1
- package/dist/tool-text.d.ts +1 -1
- package/dist/tools.d.ts +116 -6
- package/dist/tools.js +758 -134
- package/dist/tools.js.map +1 -1
- package/dist/unlockcmd.d.ts +44 -0
- package/dist/unlockcmd.js +80 -0
- package/dist/unlockcmd.js.map +1 -0
- package/dist/uxcheck.d.ts +1 -0
- package/dist/vault.d.ts +75 -0
- package/dist/vault.js +395 -0
- package/dist/vault.js.map +1 -0
- package/package.json +1 -1
- package/skills/tapline/SKILL.md +34 -6
- package/skills/tapline/references/setup.md +11 -1
package/dist/runtime.d.ts
CHANGED
|
@@ -1,10 +1,42 @@
|
|
|
1
1
|
import { type HostConfig, type ResolveOptions } from "./config.js";
|
|
2
|
-
import { type GitProbe } from "./accounts.js";
|
|
2
|
+
import { type AccountsLoad, type GitProbe } from "./accounts.js";
|
|
3
|
+
import type { VaultDeps } from "./vault.js";
|
|
4
|
+
import { type OtpService } from "./otpclient.js";
|
|
3
5
|
import { Confirmations } from "./confirm.js";
|
|
6
|
+
import { MapRegistry } from "./places.js";
|
|
7
|
+
import { type PolicyFile } from "./policy.js";
|
|
4
8
|
import { TaplineHost, type ListenResult } from "./server.js";
|
|
5
9
|
import { TaplineTools } from "./tools.js";
|
|
6
10
|
/** How long a client of the thin call may stay silent before its tools (its report, its journey) are dropped. */
|
|
7
11
|
export declare const CLIENT_IDLE_MS: number;
|
|
12
|
+
/** The pseudo-tools of `/api` a scheduled run uses on a running host (read-only facts, and the run-wide lease). */
|
|
13
|
+
export declare const HOST_FACTS_TOOL = "_host_facts";
|
|
14
|
+
export declare const LEASE_TOOL = "_lease";
|
|
15
|
+
/** How long a run-wide lease stands without a renewal. */
|
|
16
|
+
export declare const LEASE_TTL_MS = 45000;
|
|
17
|
+
/** A path as one spelling for a comparison: its real path when it exists, else the absolute one; case folded on Windows. */
|
|
18
|
+
export declare function canonicalPath(path: string): string;
|
|
19
|
+
/**
|
|
20
|
+
* What a running host was started with: paths and flags, and hashes of what it has LOADED (never the content). The same path is not
|
|
21
|
+
* the same policy: asked for its facts, the host first reloads its policy, vault and maps from disk into its live state and reports
|
|
22
|
+
* hashes of that, and a run compares them with what it would load itself.
|
|
23
|
+
*/
|
|
24
|
+
export interface HostFacts {
|
|
25
|
+
version: 3;
|
|
26
|
+
/** Random, made when this host started: a run pins it and every later call must reach this very host. */
|
|
27
|
+
instance: string;
|
|
28
|
+
/** The policy file's canonical path; null for the built-in policy. */
|
|
29
|
+
policy: string | null;
|
|
30
|
+
noPolicy: boolean;
|
|
31
|
+
accounts: string | null;
|
|
32
|
+
maps: string;
|
|
33
|
+
/** sha256 of the loaded policy's canonical JSON; null for the built-in policy. */
|
|
34
|
+
policyHash: string | null;
|
|
35
|
+
/** HMAC-SHA256, keyed with the host token, of the decrypted vault's canonical JSON (values and per-app permissions); null when there is no vault. */
|
|
36
|
+
accountsHash: string | null;
|
|
37
|
+
/** sha256 over the canonical JSON of every map the host now holds (read from disk again). */
|
|
38
|
+
mapsHash: string;
|
|
39
|
+
}
|
|
8
40
|
/** The client id of a thin call that names none. */
|
|
9
41
|
export declare const ANONYMOUS_CLIENT = "anonymous";
|
|
10
42
|
export interface RuntimeOptions extends ResolveOptions {
|
|
@@ -21,14 +53,20 @@ export interface RuntimeOptions extends ResolveOptions {
|
|
|
21
53
|
accounts?: string;
|
|
22
54
|
/** Tests: the git questions the accounts file is checked with. */
|
|
23
55
|
gitProbe?: GitProbe;
|
|
56
|
+
/** Tests: how a one-time code is asked of Tapwright's daemon (AGENT-TOOLS 1.14 §20.4). Default: the real daemon. */
|
|
57
|
+
otp?: OtpService;
|
|
24
58
|
/** `--brief`: actions answer briefly unless a call says `brief: false` (AGENT-TOOLS 1.13 §13.4). */
|
|
25
59
|
brief?: boolean;
|
|
60
|
+
/** Tests: how a protected vault is opened (DPAPI, keychain). Default: this system's own. */
|
|
61
|
+
vaultDeps?: VaultDeps;
|
|
26
62
|
/** `--maps DIR`: where the apps' maps live, `<DIR>/<app id>/` (AGENT-TOOLS 1.13 §18.9). Default `~/.tapline/maps`. */
|
|
27
63
|
maps?: string;
|
|
28
64
|
/** Serve `POST /api/<tool>`: set by a standalone `tapline host`, never by an agent's MCP server (AGENT-TOOLS 1.13 §18.10). */
|
|
29
65
|
api?: boolean;
|
|
30
66
|
/** Where the host's own lines go. Default: stderr with a `[tapline]` prefix (stdout is the MCP protocol's). */
|
|
31
67
|
log?: (message: string) => void;
|
|
68
|
+
/** Tests: how long another client's action waits for a scheduled run's lease before it answers `busy`. Default 30 s. */
|
|
69
|
+
leaseGiveUpMs?: number;
|
|
32
70
|
/** Clock for the idle sweep (tests). Default Date.now. */
|
|
33
71
|
clock?: () => number;
|
|
34
72
|
/** Opens the live view in a browser (tests). Default: this computer's default browser. */
|
|
@@ -45,11 +83,20 @@ export interface Runtime {
|
|
|
45
83
|
port: number;
|
|
46
84
|
viewerLinks: string[];
|
|
47
85
|
remoteViewer: boolean;
|
|
86
|
+
/** The maps this host holds, one per app. */
|
|
87
|
+
maps: MapRegistry;
|
|
88
|
+
/** The policy and the vault as the host holds them now (they change when a scheduled run's facts query reloads them). */
|
|
89
|
+
live: {
|
|
90
|
+
policy(): PolicyFile;
|
|
91
|
+
accounts(): AccountsLoad | undefined;
|
|
92
|
+
};
|
|
48
93
|
/**
|
|
49
94
|
* A tools object for one client; the same object for the same id. `undefined` is the connection itself (one MCP
|
|
50
95
|
* server). Other ids are dropped after 30 minutes without a call.
|
|
51
96
|
*/
|
|
52
97
|
toolsFor(clientId: string | undefined): TaplineTools;
|
|
98
|
+
/** True while a person (live view) or an agent is driving the phone, or the live view has paused agents (a scheduled run waits, §22.3). */
|
|
99
|
+
phoneInUse(): boolean;
|
|
53
100
|
close(): Promise<void>;
|
|
54
101
|
}
|
|
55
102
|
/**
|
package/dist/runtime.js
CHANGED
|
@@ -1,22 +1,44 @@
|
|
|
1
1
|
import { spawn } from "node:child_process";
|
|
2
2
|
import { randomBytes } from "node:crypto";
|
|
3
|
-
import {
|
|
3
|
+
import { realpathSync } from "node:fs";
|
|
4
|
+
import { join, resolve } from "node:path";
|
|
4
5
|
import { configDir, hostUrl, markPaired, pairedBefore, reachableHost, resolveConfig, screenshotMode, viewerMode, } from "./config.js";
|
|
5
|
-
import { loadAccounts } from "./accounts.js";
|
|
6
|
+
import { historyStore, loadAccounts, redactAll } from "./accounts.js";
|
|
7
|
+
import { bounded, ScheduleTimeout, VAULT_LOAD_TIMEOUT_MS } from "./runschedule.js";
|
|
8
|
+
import { createOtpService } from "./otpclient.js";
|
|
6
9
|
import { Confirmations } from "./confirm.js";
|
|
7
|
-
import { ControlQueue } from "./control.js";
|
|
8
|
-
import { isToolName, callTool } from "./dispatch.js";
|
|
10
|
+
import { ControlQueue, PhoneLease } from "./control.js";
|
|
11
|
+
import { isToolName, callTool, TOOL_META } from "./dispatch.js";
|
|
12
|
+
import { hashMapsLoaded, policyFingerprint } from "./hostfacts.js";
|
|
9
13
|
import { realRunner } from "./journeyexport.js";
|
|
10
14
|
import { MapRegistry } from "./places.js";
|
|
15
|
+
import { AuditLog } from "./auditlog.js";
|
|
16
|
+
import { GrantBook } from "./grants.js";
|
|
11
17
|
import { DEFAULT_POLICY, NO_POLICY, loadPolicy } from "./policy.js";
|
|
12
|
-
import { TaplineHost } from "./server.js";
|
|
18
|
+
import { TaplineError, TaplineHost } from "./server.js";
|
|
13
19
|
import { restoreAnimations } from "./animations.js";
|
|
14
|
-
import { TaplineTools } from "./tools.js";
|
|
20
|
+
import { TaplineTools, describeError } from "./tools.js";
|
|
15
21
|
import { NO_UX_RULES, loadUxRules } from "./uxcheck.js";
|
|
16
22
|
import { VIEWER_ACCEPTS, ViewerHub, viewerStatusForHost } from "./viewer.js";
|
|
17
23
|
import { VIEWER_HTML } from "./viewer-page.js";
|
|
18
24
|
/** How long a client of the thin call may stay silent before its tools (its report, its journey) are dropped. */
|
|
19
25
|
export const CLIENT_IDLE_MS = 30 * 60 * 1000;
|
|
26
|
+
/** The pseudo-tools of `/api` a scheduled run uses on a running host (read-only facts, and the run-wide lease). */
|
|
27
|
+
export const HOST_FACTS_TOOL = "_host_facts";
|
|
28
|
+
export const LEASE_TOOL = "_lease";
|
|
29
|
+
/** How long a run-wide lease stands without a renewal. */
|
|
30
|
+
export const LEASE_TTL_MS = 45_000;
|
|
31
|
+
/** A path as one spelling for a comparison: its real path when it exists, else the absolute one; case folded on Windows. */
|
|
32
|
+
export function canonicalPath(path) {
|
|
33
|
+
let full;
|
|
34
|
+
try {
|
|
35
|
+
full = realpathSync.native(path);
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
full = resolve(path);
|
|
39
|
+
}
|
|
40
|
+
return process.platform === "win32" ? full.toLowerCase() : full;
|
|
41
|
+
}
|
|
20
42
|
/** What a queued call answers when its client left before it started (nobody reads it). */
|
|
21
43
|
const CANCELLED = { content: [{ type: "text", text: "Error cancelled: the client left before this call started, so it never ran." }], isError: true };
|
|
22
44
|
/** The client id of a thin call that names none. */
|
|
@@ -57,24 +79,74 @@ export async function createRuntime(options = {}) {
|
|
|
57
79
|
// house rules (1.12 §17.3): --ux-rules FILE; a bad file stops the host with a plain message.
|
|
58
80
|
screenshots = screenshotMode(options.screenshots, options.env);
|
|
59
81
|
viewer = viewerMode(options.viewer, options.env);
|
|
82
|
+
const instanceId = randomBytes(16).toString("hex");
|
|
60
83
|
policy = options.noPolicy === true ? NO_POLICY : options.policy !== undefined ? loadPolicy(options.policy) : DEFAULT_POLICY;
|
|
61
84
|
if (options.uxRules !== undefined)
|
|
62
85
|
uxRules = loadUxRules(options.uxRules);
|
|
63
86
|
// The test accounts (AGENT-TOOLS 1.13 §18.6). A refused file still starts the server, with no accounts and the reason.
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
87
|
+
// The load is bounded: a keychain or DPAPI call that stalls is killed, and the host starts with no accounts and says why (never hangs).
|
|
88
|
+
let accounts;
|
|
89
|
+
if (options.accounts !== undefined) {
|
|
90
|
+
const file = options.accounts;
|
|
91
|
+
try {
|
|
92
|
+
accounts = await bounded("loading the vault", VAULT_LOAD_TIMEOUT_MS, (signal) => loadAccounts(file, options.gitProbe, options.vaultDeps, signal));
|
|
93
|
+
}
|
|
94
|
+
catch (error) {
|
|
95
|
+
if (!(error instanceof ScheduleTimeout))
|
|
96
|
+
throw error;
|
|
97
|
+
accounts = { store: null, blocked: `the vault file can't be opened: ${error.message}` };
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
if (accounts !== undefined) {
|
|
101
|
+
const said = accounts.store === null ? accounts.blocked : accounts.note;
|
|
102
|
+
if (said !== undefined)
|
|
103
|
+
log(said);
|
|
104
|
+
}
|
|
67
105
|
const config = await resolveConfig(options);
|
|
68
106
|
const clients = new Map();
|
|
107
|
+
// One-time codes (AGENT-TOOLS 1.14 §20.4): a code typed in this session is scrubbed from everything the host passes on, as a vault value is.
|
|
108
|
+
const otp = options.otp ?? createOtpService({ env: options.env });
|
|
109
|
+
// The policy and vault the host runs under now: a facts query reloads them from disk (reloadLive below).
|
|
110
|
+
// Redaction is cumulative for the session (§20.3): a vault value that was loaded once stays scrubbed until the process ends, even
|
|
111
|
+
// after a reload replaced it; only the current values can be typed. `retired` holds the stores a reload replaced.
|
|
112
|
+
const retired = [];
|
|
113
|
+
const retiredPrints = new Set();
|
|
114
|
+
const withHistory = (load) => {
|
|
115
|
+
if (load.store === null)
|
|
116
|
+
return load;
|
|
117
|
+
// One scrubber over the current and every retired value, matched together against the original text (never chained).
|
|
118
|
+
return { ...load, store: historyStore(load.store, retired) };
|
|
119
|
+
};
|
|
120
|
+
let currentRaw = accounts;
|
|
121
|
+
const live = { policy, accounts: accounts === undefined ? undefined : withHistory(accounts) };
|
|
69
122
|
const host = new TaplineHost({
|
|
70
|
-
|
|
123
|
+
redact: (text) => redactAll(live.accounts?.store, otp.codes, text),
|
|
124
|
+
redactsVault: accounts?.store != null,
|
|
71
125
|
token: config.token,
|
|
72
126
|
port: config.port,
|
|
73
127
|
portFallback: config.portFallback,
|
|
74
128
|
hosts: config.hosts,
|
|
75
129
|
...(options.api === true
|
|
76
130
|
? {
|
|
77
|
-
api: async (tool, args, clientId, signal
|
|
131
|
+
api: async (tool, args, clientId, signal, credentials) => {
|
|
132
|
+
// A caller that pinned an instance is refused by any other host: the run never falls through to one with other settings.
|
|
133
|
+
if (credentials.instance !== undefined && credentials.instance !== instanceId) {
|
|
134
|
+
return { content: [{ type: "text", text: "Error wrong_host: this is not the host the schedule checked (another instance answers here); nothing was run." }], isError: true };
|
|
135
|
+
}
|
|
136
|
+
if (tool === HOST_FACTS_TOOL) {
|
|
137
|
+
// Reload first, then report what is loaded: a vault that can't be read, or a policy that no longer loads, is an error.
|
|
138
|
+
try {
|
|
139
|
+
return { content: [{ type: "text", text: JSON.stringify({ ...facts, ...(await reloadLive()) }) }] };
|
|
140
|
+
}
|
|
141
|
+
catch (error) {
|
|
142
|
+
const why = error instanceof Error ? error.message : String(error);
|
|
143
|
+
return { content: [{ type: "text", text: `Error facts_unavailable: the host could not reload what it runs under (${why}); don't reuse it.` }], isError: true };
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
if (tool === LEASE_TOOL)
|
|
147
|
+
return leaseCall(args, clientId, credentials.lease);
|
|
148
|
+
return isToolName(tool) ? thinCall(tool, args, clientId, signal, credentials.lease) : undefined;
|
|
149
|
+
},
|
|
78
150
|
}
|
|
79
151
|
: {}),
|
|
80
152
|
});
|
|
@@ -110,17 +182,38 @@ export async function createRuntime(options = {}) {
|
|
|
110
182
|
...(remoteViewer ? [`http://${config.tailscaleIp}:${port}/viewer?token=${viewerToken} (from your own devices on Tailscale)`] : []),
|
|
111
183
|
];
|
|
112
184
|
const control = new ControlQueue();
|
|
185
|
+
const lease = new PhoneLease({ now: clock, ...(options.leaseGiveUpMs !== undefined ? { giveUpMs: options.leaseGiveUpMs } : {}) });
|
|
186
|
+
const mapsDir = options.maps ?? join(configDir(options.env), "maps");
|
|
187
|
+
const facts = {
|
|
188
|
+
version: 3,
|
|
189
|
+
instance: instanceId,
|
|
190
|
+
policy: options.noPolicy !== true && options.policy !== undefined ? canonicalPath(options.policy) : null,
|
|
191
|
+
noPolicy: options.noPolicy === true,
|
|
192
|
+
accounts: options.accounts !== undefined ? canonicalPath(options.accounts) : null,
|
|
193
|
+
maps: canonicalPath(mapsDir),
|
|
194
|
+
};
|
|
113
195
|
const confirmations = new Confirmations();
|
|
114
196
|
let hub;
|
|
115
197
|
const openBrowser = options.openBrowser ?? openInBrowser;
|
|
116
198
|
// One map per app for every client of this host: places, roads and links grow as agents drive (§18.9).
|
|
117
199
|
const maps = new MapRegistry({ mapsDir: options.maps ?? join(configDir(options.env), "maps") });
|
|
118
|
-
|
|
200
|
+
// Grants (AGENT-TOOLS 1.14 §19) live in the policy file: no file, no grants. The audit log (§23) has no off switch.
|
|
201
|
+
const audit = new AuditLog(join(configDir(options.env), "audit"));
|
|
202
|
+
audit.open();
|
|
203
|
+
let grants;
|
|
204
|
+
if (options.noPolicy !== true && options.policy !== undefined) {
|
|
205
|
+
grants = new GrantBook({ policyPath: options.policy, audit });
|
|
206
|
+
// Prune at start (§19.4): the uses of a grant that has ended or was revoked.
|
|
207
|
+
void grants.prune().catch(() => undefined);
|
|
208
|
+
}
|
|
209
|
+
const fixedOptions = {
|
|
119
210
|
maps,
|
|
211
|
+
audit,
|
|
212
|
+
otp,
|
|
213
|
+
lease,
|
|
214
|
+
...(grants !== undefined ? { grants } : {}),
|
|
120
215
|
...(options.brief === true ? { brief: true } : {}),
|
|
121
|
-
policy,
|
|
122
216
|
uxRules,
|
|
123
|
-
...(accounts !== undefined ? { accounts } : {}),
|
|
124
217
|
confirmations,
|
|
125
218
|
canConfirm: viewer !== "off",
|
|
126
219
|
connect: { url, name: config.name },
|
|
@@ -147,20 +240,120 @@ export async function createRuntime(options = {}) {
|
|
|
147
240
|
viewerFeed: () => hub?.feed() ?? { on: false, quality: "balanced" },
|
|
148
241
|
}),
|
|
149
242
|
};
|
|
243
|
+
// Every tools object reads the policy and the vault through these getters, so a reload reaches the ones already made.
|
|
244
|
+
const optionsWith = (extra) => ({
|
|
245
|
+
...fixedOptions,
|
|
246
|
+
...extra,
|
|
247
|
+
get policy() {
|
|
248
|
+
return live.policy;
|
|
249
|
+
},
|
|
250
|
+
get accounts() {
|
|
251
|
+
return live.accounts;
|
|
252
|
+
},
|
|
253
|
+
});
|
|
150
254
|
// The connection's own tools: what an MCP server uses, and what the live viewer's person input goes through.
|
|
151
|
-
const primary = new TaplineTools(host,
|
|
255
|
+
const primary = new TaplineTools(host, optionsWith({}));
|
|
256
|
+
// Serialized: two facts queries must not discard each other's freshly loaded maps.
|
|
257
|
+
let reloading = Promise.resolve();
|
|
258
|
+
/**
|
|
259
|
+
* Reads the policy, the vault (decrypting it again) and the maps from disk into the live state, and answers hashes of what is now
|
|
260
|
+
* loaded. Rejects, changing nothing that was loaded before, when the policy or the vault can't be read.
|
|
261
|
+
*/
|
|
262
|
+
function reloadLive() {
|
|
263
|
+
const run = async () => {
|
|
264
|
+
const nextPolicy = options.noPolicy !== true && options.policy !== undefined ? loadPolicy(options.policy) : null;
|
|
265
|
+
let nextAccounts;
|
|
266
|
+
let accountsHash = null;
|
|
267
|
+
if (options.accounts !== undefined) {
|
|
268
|
+
const loaded = await bounded("loading the vault", VAULT_LOAD_TIMEOUT_MS, (signal) => loadAccounts(options.accounts, options.gitProbe, options.vaultDeps, signal));
|
|
269
|
+
if (loaded.store === null)
|
|
270
|
+
throw new Error(loaded.blocked.replace(/[.\s]+$/, ""));
|
|
271
|
+
if (loaded.fingerprint === undefined)
|
|
272
|
+
throw new Error("the vault can't be fingerprinted");
|
|
273
|
+
accountsHash = loaded.fingerprint(config.token);
|
|
274
|
+
nextAccounts = loaded;
|
|
275
|
+
}
|
|
276
|
+
if (nextPolicy !== null)
|
|
277
|
+
live.policy = nextPolicy;
|
|
278
|
+
if (nextAccounts !== undefined) {
|
|
279
|
+
const before = currentRaw;
|
|
280
|
+
if (before?.store != null && nextAccounts.store !== null) {
|
|
281
|
+
const oldPrint = before.fingerprint?.(config.token);
|
|
282
|
+
const newPrint = nextAccounts.fingerprint?.(config.token);
|
|
283
|
+
if ((oldPrint === undefined || oldPrint !== newPrint) && (oldPrint === undefined || !retiredPrints.has(oldPrint))) {
|
|
284
|
+
retired.push(before.store);
|
|
285
|
+
if (oldPrint !== undefined)
|
|
286
|
+
retiredPrints.add(oldPrint);
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
currentRaw = nextAccounts;
|
|
290
|
+
live.accounts = withHistory(nextAccounts);
|
|
291
|
+
}
|
|
292
|
+
await maps.reload();
|
|
293
|
+
const mapsHash = hashMapsLoaded(mapsDir, (app) => {
|
|
294
|
+
const map = maps.forApp({ id: app, name: app });
|
|
295
|
+
return map === undefined ? null : { status: map.loadedStatus(), data: map.data() };
|
|
296
|
+
});
|
|
297
|
+
return { policyHash: nextPolicy === null ? null : policyFingerprint(nextPolicy), accountsHash, mapsHash };
|
|
298
|
+
};
|
|
299
|
+
const answer = reloading.then(run, run);
|
|
300
|
+
reloading = answer.catch(() => undefined);
|
|
301
|
+
return answer;
|
|
302
|
+
}
|
|
152
303
|
/** Every call through `/api` is a thin call: the log says so, and the report flags a run of them (§16.1). */
|
|
153
|
-
function thinCall(tool, args, clientId, signal) {
|
|
304
|
+
function thinCall(tool, args, clientId, signal, leaseCredential) {
|
|
305
|
+
// A credential that is not the standing holder's (expired included) is a run that lost the phone: refused, even when no one holds the lease now.
|
|
306
|
+
try {
|
|
307
|
+
lease.assertCurrent(leaseCredential);
|
|
308
|
+
}
|
|
309
|
+
catch (error) {
|
|
310
|
+
if (!(error instanceof TaplineError))
|
|
311
|
+
throw error;
|
|
312
|
+
return Promise.resolve({ content: [{ type: "text", text: describeError(error) }], isError: true });
|
|
313
|
+
}
|
|
154
314
|
// A thin call never uses the MCP server's tools: those hold its dialog and the OKs given for its calls.
|
|
155
315
|
const tools = toolsFor(clientId ?? ANONYMOUS_CLIENT);
|
|
156
316
|
// Calls that share a tools object run one after another: they share its per-call state (a run's account).
|
|
157
317
|
const before = lanes.get(tools) ?? Promise.resolve();
|
|
158
318
|
// A call whose client left while it waited in the line is dropped before it starts; a running one is told to stop waiting.
|
|
159
|
-
|
|
319
|
+
// Every tool that changes anything waits behind a scheduled run's lease (not only the touches); the holder's credential goes through.
|
|
320
|
+
const run = () => tools.asThinCall(() => callTool(tools, tool, args));
|
|
321
|
+
const mutating = !TOOL_META[tool].readOnly;
|
|
322
|
+
// A lease that stays held for the whole wait answers `busy`, as a tool does for its own refusals.
|
|
323
|
+
const gated = () => tools.leaseGate(run).catch((error) => {
|
|
324
|
+
if (!(error instanceof TaplineError))
|
|
325
|
+
throw error;
|
|
326
|
+
return { content: [{ type: "text", text: describeError(error) }], isError: true };
|
|
327
|
+
});
|
|
328
|
+
const answer = before.then(() => (signal.aborted ? CANCELLED : tools.withCall(signal, () => (mutating ? gated() : run()), leaseCredential)));
|
|
160
329
|
lanes.set(tools, answer.then(() => undefined, () => undefined));
|
|
161
330
|
return answer;
|
|
162
331
|
}
|
|
163
332
|
const lanes = new WeakMap();
|
|
333
|
+
/**
|
|
334
|
+
* `_lease {action: "acquire" | "renew" | "release"}`: a scheduled run's hold on the phone (§22.3). The first acquire answers an
|
|
335
|
+
* unguessable credential; renew and release (and every call the run makes) must present it, and a client label alone never counts.
|
|
336
|
+
*/
|
|
337
|
+
function leaseCall(args, clientId, credential) {
|
|
338
|
+
const owner = clientId ?? ANONYMOUS_CLIENT;
|
|
339
|
+
const reply = (body, isError = false) => ({
|
|
340
|
+
content: [{ type: "text", text: JSON.stringify(body) }],
|
|
341
|
+
...(isError ? { isError: true } : {}),
|
|
342
|
+
});
|
|
343
|
+
const action = args["action"];
|
|
344
|
+
if (action === "release")
|
|
345
|
+
return reply({ ok: lease.release(credential) });
|
|
346
|
+
if (action === "acquire" || action === "renew") {
|
|
347
|
+
const ttl = typeof args["ttl_ms"] === "number" ? args["ttl_ms"] : LEASE_TTL_MS;
|
|
348
|
+
if (action === "renew")
|
|
349
|
+
return reply(lease.renew(credential, ttl) ? { ok: true } : { ok: false, by: "lost" });
|
|
350
|
+
const taken = lease.acquire(owner, ttl, control.driver() === "person" || control.paused(), credential);
|
|
351
|
+
if (!taken.ok)
|
|
352
|
+
return reply({ ok: false, by: taken.by });
|
|
353
|
+
return reply(credential === undefined ? { ok: true, credential: taken.credential } : { ok: true });
|
|
354
|
+
}
|
|
355
|
+
return reply({ error: "action is acquire, renew or release" }, true);
|
|
356
|
+
}
|
|
164
357
|
function toolsFor(clientId) {
|
|
165
358
|
if (clientId === undefined)
|
|
166
359
|
return primary;
|
|
@@ -177,7 +370,7 @@ export async function createRuntime(options = {}) {
|
|
|
177
370
|
return known.tools;
|
|
178
371
|
}
|
|
179
372
|
// The call log names the agent by this id.
|
|
180
|
-
const tools = new TaplineTools(host, {
|
|
373
|
+
const tools = new TaplineTools(host, optionsWith({ clientId: () => clientId, confirmScope: "api" }));
|
|
181
374
|
clients.set(clientId, { tools, lastUsed: now });
|
|
182
375
|
return tools;
|
|
183
376
|
}
|
|
@@ -238,7 +431,10 @@ export async function createRuntime(options = {}) {
|
|
|
238
431
|
port,
|
|
239
432
|
viewerLinks,
|
|
240
433
|
remoteViewer,
|
|
434
|
+
maps,
|
|
435
|
+
live: { policy: () => live.policy, accounts: () => live.accounts },
|
|
241
436
|
toolsFor,
|
|
437
|
+
phoneInUse: () => control.driver() !== null || control.paused(),
|
|
242
438
|
// The maps are written at most once a second while driving, and in full here.
|
|
243
439
|
close: async () => {
|
|
244
440
|
await maps.flushAll().catch(() => undefined);
|
package/dist/runtime.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
/**
|
|
3
|
+
* AGENT-TOOLS 1.14 §22.1: the schedule file and `tapline schedule add|list|remove`. One file per schedule in
|
|
4
|
+
* `~/.tapline/schedules/<name>.json`; on Windows each schedule is a Task Scheduler task that runs
|
|
5
|
+
* `tapline run-schedule <name>`. A time schedule wakes the PC to run; a file trigger's once-a-minute check never wakes the PC. The task is registered through an injected runner, so a test sees the exact command.
|
|
6
|
+
*/
|
|
7
|
+
export declare const SCHEDULE_NAME: RegExp;
|
|
8
|
+
export declare const scheduleSchema: z.ZodObject<{
|
|
9
|
+
version: z.ZodLiteral<1>;
|
|
10
|
+
tool: z.ZodString;
|
|
11
|
+
route: z.ZodString;
|
|
12
|
+
with: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
13
|
+
at: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
14
|
+
trigger: z.ZodOptional<z.ZodNullable<z.ZodUnion<readonly [z.ZodObject<{
|
|
15
|
+
file: z.ZodString;
|
|
16
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
17
|
+
notification: z.ZodString;
|
|
18
|
+
}, z.core.$strict>]>>>;
|
|
19
|
+
policy: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
20
|
+
accounts: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
21
|
+
maps: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
22
|
+
}, z.core.$loose>;
|
|
23
|
+
export interface Schedule {
|
|
24
|
+
version: 1;
|
|
25
|
+
tool: "tapline";
|
|
26
|
+
route: string;
|
|
27
|
+
with: Record<string, string>;
|
|
28
|
+
at: string | null;
|
|
29
|
+
trigger: {
|
|
30
|
+
file: string;
|
|
31
|
+
} | null;
|
|
32
|
+
policy: string | null;
|
|
33
|
+
accounts: string | null;
|
|
34
|
+
maps: string | null;
|
|
35
|
+
}
|
|
36
|
+
export declare function schedulesDir(configDir: string): string;
|
|
37
|
+
export declare function schedulePath(configDir: string, name: string): string;
|
|
38
|
+
export type ParsedAt = {
|
|
39
|
+
kind: "daily" | "weekdays";
|
|
40
|
+
hour: number;
|
|
41
|
+
minute: number;
|
|
42
|
+
} | {
|
|
43
|
+
kind: "once";
|
|
44
|
+
date: Date;
|
|
45
|
+
};
|
|
46
|
+
/** `HH:MM daily`, `HH:MM weekdays` or an ISO date-time (a single run; no zone means this computer's time). Null when it is none of them. */
|
|
47
|
+
export declare function parseAt(raw: string): ParsedAt | null;
|
|
48
|
+
export declare function clock24(at: {
|
|
49
|
+
hour: number;
|
|
50
|
+
minute: number;
|
|
51
|
+
}): string;
|
|
52
|
+
/** A date as this computer's local `yyyy-MM-ddTHH:mm:ss`, the form the task registration reads. */
|
|
53
|
+
export declare function localIso(date: Date): string;
|
|
54
|
+
export type ReadResult = {
|
|
55
|
+
ok: true;
|
|
56
|
+
schedule: Schedule;
|
|
57
|
+
} | {
|
|
58
|
+
ok: false;
|
|
59
|
+
message: string;
|
|
60
|
+
};
|
|
61
|
+
/** Reads and checks a schedule file. A relative `policy`, `accounts`, `maps` or trigger folder is relative to the file's folder. */
|
|
62
|
+
export declare function readScheduleFile(path: string): ReadResult;
|
|
63
|
+
/** The file as it is written: the spec's key order, `null` for what is unset. */
|
|
64
|
+
export declare function scheduleText(schedule: Schedule): string;
|
|
65
|
+
/**
|
|
66
|
+
* `@file` values (§22.1) become the text of that file, read when a run starts; a relative path is relative to the schedule file's
|
|
67
|
+
* folder. One trailing line ending is dropped (a caption file ends its last line, and that is not part of the caption).
|
|
68
|
+
*/
|
|
69
|
+
export declare function resolveWith(values: Record<string, string>, scheduleFolder: string): {
|
|
70
|
+
ok: true;
|
|
71
|
+
values: Record<string, string>;
|
|
72
|
+
} | {
|
|
73
|
+
ok: false;
|
|
74
|
+
message: string;
|
|
75
|
+
};
|
|
76
|
+
export interface ProcResult {
|
|
77
|
+
code: number;
|
|
78
|
+
stdout: string;
|
|
79
|
+
stderr: string;
|
|
80
|
+
}
|
|
81
|
+
/** Runs a program with arguments (never a shell line) and extra environment variables; the registration passes every user value in the environment. */
|
|
82
|
+
export type SchedRunner = (command: string, args: string[], env: Record<string, string>) => Promise<ProcResult>;
|
|
83
|
+
export declare function taskName(name: string): string;
|
|
84
|
+
/**
|
|
85
|
+
* The registration script. It is a constant: the name, the paths and the time reach it as environment variables, never as text
|
|
86
|
+
* built into the script. The settings' `WakeToRun` is what wakes the PC, set for the time
|
|
87
|
+
* schedules only. A file trigger has no Task Scheduler form, so its task fires every minute and `run-schedule --check-trigger` runs
|
|
88
|
+
* only when a new file has appeared; it never wakes the PC (a laptop would never sleep).
|
|
89
|
+
*/
|
|
90
|
+
export declare const REGISTER_SCRIPT: string;
|
|
91
|
+
export declare const UNREGISTER_SCRIPT: string;
|
|
92
|
+
export interface TaskEntry {
|
|
93
|
+
/** The node program that runs the CLI. */
|
|
94
|
+
exe: string;
|
|
95
|
+
/** The CLI's script (bin.js). */
|
|
96
|
+
script: string;
|
|
97
|
+
}
|
|
98
|
+
export declare function registerCall(entry: TaskEntry, name: string, schedule: Schedule): {
|
|
99
|
+
command: string;
|
|
100
|
+
args: string[];
|
|
101
|
+
env: Record<string, string>;
|
|
102
|
+
};
|
|
103
|
+
export declare function unregisterCall(name: string): {
|
|
104
|
+
command: string;
|
|
105
|
+
args: string[];
|
|
106
|
+
env: Record<string, string>;
|
|
107
|
+
};
|
|
108
|
+
export declare function triggerStatePath(configDir: string, name: string): string;
|
|
109
|
+
/** The files in a folder that appeared after `sinceMs` (by modified time), oldest first, and the newest time seen. Dotfiles are left out. */
|
|
110
|
+
export declare function newFilesSince(folder: string, sinceMs: number): {
|
|
111
|
+
files: string[];
|
|
112
|
+
newest: number;
|
|
113
|
+
};
|
|
114
|
+
export declare function readSeen(configDir: string, name: string): number | null;
|
|
115
|
+
export declare function writeSeen(configDir: string, name: string, t: number): void;
|
|
116
|
+
export interface ScheduleDeps {
|
|
117
|
+
configDir: string;
|
|
118
|
+
platform: NodeJS.Platform;
|
|
119
|
+
now: () => Date;
|
|
120
|
+
cwd: string;
|
|
121
|
+
run: SchedRunner;
|
|
122
|
+
entry: TaskEntry;
|
|
123
|
+
}
|
|
124
|
+
export interface AddOptions {
|
|
125
|
+
route: string | undefined;
|
|
126
|
+
name?: string | undefined;
|
|
127
|
+
at?: string | undefined;
|
|
128
|
+
with?: string[] | undefined;
|
|
129
|
+
onFile?: string | undefined;
|
|
130
|
+
onNotification?: string | undefined;
|
|
131
|
+
policy?: string | undefined;
|
|
132
|
+
accounts?: string | undefined;
|
|
133
|
+
maps?: string | undefined;
|
|
134
|
+
}
|
|
135
|
+
type Outcome = {
|
|
136
|
+
text: string;
|
|
137
|
+
code: number;
|
|
138
|
+
};
|
|
139
|
+
/** `tapline schedule add`: writes the file, then registers the task. A task that can't be registered leaves no file. */
|
|
140
|
+
export declare function scheduleAdd(options: AddOptions, deps: ScheduleDeps): Promise<Outcome>;
|
|
141
|
+
/** `tapline schedule list`: one line per schedule. */
|
|
142
|
+
export declare function scheduleList(configDir: string): Outcome;
|
|
143
|
+
/** `tapline schedule remove NAME`: unregisters the task, then deletes the file. A task that is already gone is not an error. */
|
|
144
|
+
export declare function scheduleRemove(name: string | undefined, deps: ScheduleDeps): Promise<Outcome>;
|
|
145
|
+
export {};
|