@tidegap/cli 0.0.0-stage → 0.19.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/LICENSE +201 -0
- package/README.md +136 -2
- package/dist/commands/clients.d.ts +20 -0
- package/dist/commands/clients.d.ts.map +1 -0
- package/dist/commands/clients.js +36 -0
- package/dist/commands/clients.js.map +1 -0
- package/dist/commands/env-file.d.ts +54 -0
- package/dist/commands/env-file.d.ts.map +1 -0
- package/dist/commands/env-file.js +153 -0
- package/dist/commands/env-file.js.map +1 -0
- package/dist/commands/install.d.ts +83 -0
- package/dist/commands/install.d.ts.map +1 -0
- package/dist/commands/install.js +297 -0
- package/dist/commands/install.js.map +1 -0
- package/dist/commands/queue.d.ts +139 -0
- package/dist/commands/queue.d.ts.map +1 -0
- package/dist/commands/queue.js +491 -0
- package/dist/commands/queue.js.map +1 -0
- package/dist/commands/receipts.d.ts +15 -0
- package/dist/commands/receipts.d.ts.map +1 -0
- package/dist/commands/receipts.js +70 -0
- package/dist/commands/receipts.js.map +1 -0
- package/dist/commands/register-wake.d.ts +21 -0
- package/dist/commands/register-wake.d.ts.map +1 -0
- package/dist/commands/register-wake.js +76 -0
- package/dist/commands/register-wake.js.map +1 -0
- package/dist/commands/stats.d.ts +31 -0
- package/dist/commands/stats.d.ts.map +1 -0
- package/dist/commands/stats.js +165 -0
- package/dist/commands/stats.js.map +1 -0
- package/dist/commands/tick.d.ts +73 -0
- package/dist/commands/tick.d.ts.map +1 -0
- package/dist/commands/tick.js +294 -0
- package/dist/commands/tick.js.map +1 -0
- package/dist/commands/ui.d.ts +33 -0
- package/dist/commands/ui.d.ts.map +1 -0
- package/dist/commands/ui.js +119 -0
- package/dist/commands/ui.js.map +1 -0
- package/dist/commands/verify.d.ts +32 -0
- package/dist/commands/verify.d.ts.map +1 -0
- package/dist/commands/verify.js +135 -0
- package/dist/commands/verify.js.map +1 -0
- package/dist/env.d.ts +57 -0
- package/dist/env.d.ts.map +1 -0
- package/dist/env.js +105 -0
- package/dist/env.js.map +1 -0
- package/dist/index.d.ts +25 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +366 -0
- package/dist/index.js.map +1 -0
- package/dist/platform/index.d.ts +30 -0
- package/dist/platform/index.d.ts.map +1 -0
- package/dist/platform/index.js +66 -0
- package/dist/platform/index.js.map +1 -0
- package/dist/platform/linux.d.ts +81 -0
- package/dist/platform/linux.d.ts.map +1 -0
- package/dist/platform/linux.js +158 -0
- package/dist/platform/linux.js.map +1 -0
- package/dist/platform/macos.d.ts +69 -0
- package/dist/platform/macos.d.ts.map +1 -0
- package/dist/platform/macos.js +151 -0
- package/dist/platform/macos.js.map +1 -0
- package/dist/platform/windows.d.ts +31 -0
- package/dist/platform/windows.d.ts.map +1 -0
- package/dist/platform/windows.js +58 -0
- package/dist/platform/windows.js.map +1 -0
- package/dist/ui/api.d.ts +66 -0
- package/dist/ui/api.d.ts.map +1 -0
- package/dist/ui/api.js +613 -0
- package/dist/ui/api.js.map +1 -0
- package/dist/ui/clients.d.ts +65 -0
- package/dist/ui/clients.d.ts.map +1 -0
- package/dist/ui/clients.js +179 -0
- package/dist/ui/clients.js.map +1 -0
- package/dist/ui/discovery.d.ts +25 -0
- package/dist/ui/discovery.d.ts.map +1 -0
- package/dist/ui/discovery.js +46 -0
- package/dist/ui/discovery.js.map +1 -0
- package/dist/ui/dispatcher.d.ts +84 -0
- package/dist/ui/dispatcher.d.ts.map +1 -0
- package/dist/ui/dispatcher.js +150 -0
- package/dist/ui/dispatcher.js.map +1 -0
- package/dist/ui/events.d.ts +27 -0
- package/dist/ui/events.d.ts.map +1 -0
- package/dist/ui/events.js +85 -0
- package/dist/ui/events.js.map +1 -0
- package/dist/ui/server.d.ts +84 -0
- package/dist/ui/server.d.ts.map +1 -0
- package/dist/ui/server.js +322 -0
- package/dist/ui/server.js.map +1 -0
- package/dist/ui/summary.d.ts +47 -0
- package/dist/ui/summary.d.ts.map +1 -0
- package/dist/ui/summary.js +120 -0
- package/dist/ui/summary.js.map +1 -0
- package/package.json +53 -3
- package/ui/agenda.js +256 -0
- package/ui/api.js +114 -0
- package/ui/app.css +713 -0
- package/ui/app.js +599 -0
- package/ui/clients.js +104 -0
- package/ui/detail.js +431 -0
- package/ui/dialog.js +284 -0
- package/ui/dnd.js +131 -0
- package/ui/dom.js +255 -0
- package/ui/index.html +38 -0
- package/ui/journal.js +207 -0
- package/ui/keys.js +92 -0
- package/ui/row.js +153 -0
- package/ui/state.js +412 -0
- package/ui/timeline.js +202 -0
- package/ui/toast.js +69 -0
- package/ui/tokens.css +108 -0
- package/ui/views.js +31 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tick.js","sourceRoot":"","sources":["../../src/commands/tick.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `tidegap ui` — serve the local task page (timeline, inbox, task detail) on
|
|
3
|
+
* 127.0.0.1 with a per-run bearer token. The page can cancel, reschedule,
|
|
4
|
+
* run now and reply (ui v2): each action writes the ledger through a
|
|
5
|
+
* Scheduler with no adapters. It never dispatches; `tidegap tick` (or the
|
|
6
|
+
* OpenClaw loop) does, and the page can start `tidegap tick --daemon` when no
|
|
7
|
+
* dispatcher is running.
|
|
8
|
+
*/
|
|
9
|
+
import { type UiServer } from "../ui/server.js";
|
|
10
|
+
export interface UiCommandOptions {
|
|
11
|
+
db?: string;
|
|
12
|
+
/** Explicit port (0 = any free one). Absent: DEFAULT_UI_PORT, else a free port. */
|
|
13
|
+
port?: number;
|
|
14
|
+
/** Port tried when `port` is absent; default DEFAULT_UI_PORT (tests inject one). */
|
|
15
|
+
defaultPort?: number;
|
|
16
|
+
/** Directory of `ui.json` and `ui-clients.json`; default: the Tidegap home. */
|
|
17
|
+
stateDir?: string;
|
|
18
|
+
/** CLI version written to `ui.json`. */
|
|
19
|
+
cliVersion?: string;
|
|
20
|
+
/** `false` (`--no-open`) only prints the URL. */
|
|
21
|
+
open?: boolean;
|
|
22
|
+
region?: string;
|
|
23
|
+
}
|
|
24
|
+
/** Open a URL in the default browser; failure is silent (the URL is printed). */
|
|
25
|
+
export declare function openBrowser(url: string, platform?: NodeJS.Platform): void;
|
|
26
|
+
export declare function newToken(): string;
|
|
27
|
+
export declare function startUi(opts?: UiCommandOptions): Promise<{
|
|
28
|
+
server: UiServer;
|
|
29
|
+
link: string;
|
|
30
|
+
warning?: string;
|
|
31
|
+
}>;
|
|
32
|
+
export declare function runUi(opts?: UiCommandOptions): Promise<number>;
|
|
33
|
+
//# sourceMappingURL=ui.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../../src/commands/ui.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAeH,OAAO,EAAiB,KAAK,QAAQ,EAAwB,MAAM,iBAAiB,CAAC;AAMrF,MAAM,WAAW,gBAAgB;IAC/B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,mFAAmF;IACnF,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,oFAAoF;IACpF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,+EAA+E;IAC/E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,wCAAwC;IACxC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iDAAiD;IACjD,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,iFAAiF;AACjF,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAM,CAAC,QAA2B,GAAG,IAAI,CAc3F;AAED,wBAAgB,QAAQ,IAAI,MAAM,CAEjC;AAyBD,wBAAsB,OAAO,CAC3B,IAAI,GAAE,gBAAqB,GAC1B,OAAO,CAAC;IAAE,MAAM,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CA6C/D;AAED,wBAAsB,KAAK,CAAC,IAAI,GAAE,gBAAqB,GAAG,OAAO,CAAC,MAAM,CAAC,CAkBxE"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `tidegap ui` — serve the local task page (timeline, inbox, task detail) on
|
|
3
|
+
* 127.0.0.1 with a per-run bearer token. The page can cancel, reschedule,
|
|
4
|
+
* run now and reply (ui v2): each action writes the ledger through a
|
|
5
|
+
* Scheduler with no adapters. It never dispatches; `tidegap tick` (or the
|
|
6
|
+
* OpenClaw loop) does, and the page can start `tidegap tick --daemon` when no
|
|
7
|
+
* dispatcher is running.
|
|
8
|
+
*/
|
|
9
|
+
import { spawn } from "node:child_process";
|
|
10
|
+
import { randomBytes } from "node:crypto";
|
|
11
|
+
import { buildDefaultGridFeed, loadQuotaResetConfig, resolveRegion, resolveTidegapHome, } from "@tidegap/core";
|
|
12
|
+
import { readEnvCredentials } from "../env.js";
|
|
13
|
+
import { daemonStatus } from "../platform/index.js";
|
|
14
|
+
import { DEFAULT_UI_PORT, removeDiscovery, writeDiscovery } from "../ui/discovery.js";
|
|
15
|
+
import { startUiServer } from "../ui/server.js";
|
|
16
|
+
import { loadEnvFileIntoProcess } from "./env-file.js";
|
|
17
|
+
import { resolveLauncher } from "./install.js";
|
|
18
|
+
import { actionScheduler } from "./queue.js";
|
|
19
|
+
import { defaultDbPath } from "./tick.js";
|
|
20
|
+
/** Open a URL in the default browser; failure is silent (the URL is printed). */
|
|
21
|
+
export function openBrowser(url, platform = process.platform) {
|
|
22
|
+
const [cmd, args] = platform === "darwin"
|
|
23
|
+
? ["open", [url]]
|
|
24
|
+
: platform === "win32"
|
|
25
|
+
? ["cmd", ["/c", "start", "", url]]
|
|
26
|
+
: ["xdg-open", [url]];
|
|
27
|
+
try {
|
|
28
|
+
const child = spawn(cmd, args, { stdio: "ignore", detached: true });
|
|
29
|
+
child.on("error", () => { });
|
|
30
|
+
child.unref();
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
// ignore: the URL is on the terminal
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
export function newToken() {
|
|
37
|
+
return randomBytes(32).toString("base64url");
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Start the server on `port`. When `fallback` is true and that port is
|
|
41
|
+
* taken, serve on a free port and return the warning to print.
|
|
42
|
+
*/
|
|
43
|
+
async function listenWithFallback(opts, port, fallback) {
|
|
44
|
+
try {
|
|
45
|
+
return { server: await startUiServer({ ...opts, port }) };
|
|
46
|
+
}
|
|
47
|
+
catch (err) {
|
|
48
|
+
if (!fallback || err.code !== "EADDRINUSE")
|
|
49
|
+
throw err;
|
|
50
|
+
const server = await startUiServer({ ...opts, port: 0 });
|
|
51
|
+
return {
|
|
52
|
+
server,
|
|
53
|
+
warning: `tidegap ui: port ${port} is in use, serving on ${server.port} instead. ` +
|
|
54
|
+
`The browser extension and the Mac app look for port ${port} and will not find this server.`,
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
export async function startUi(opts = {}) {
|
|
59
|
+
// Grid-feed credentials live in the same secrets file the tick reads.
|
|
60
|
+
loadEnvFileIntoProcess();
|
|
61
|
+
const env = readEnvCredentials();
|
|
62
|
+
const token = newToken();
|
|
63
|
+
const dbPath = opts.db ?? defaultDbPath();
|
|
64
|
+
const stateDir = opts.stateDir ?? resolveTidegapHome();
|
|
65
|
+
const feed = buildDefaultGridFeed(env.grid);
|
|
66
|
+
const defaultRegion = resolveRegion(undefined, opts.region).region;
|
|
67
|
+
const scheduler = actionScheduler({ dbPath, feed, region: defaultRegion });
|
|
68
|
+
const { server, warning } = await listenWithFallback({
|
|
69
|
+
token,
|
|
70
|
+
dbPath,
|
|
71
|
+
stateDir,
|
|
72
|
+
feed,
|
|
73
|
+
defaultRegion,
|
|
74
|
+
...(env.defaultModel ? { defaultModel: env.defaultModel } : {}),
|
|
75
|
+
quota: () => loadQuotaResetConfig(),
|
|
76
|
+
daemonStatus: () => daemonStatus(),
|
|
77
|
+
// Writes only: this scheduler has no adapters and never dispatches.
|
|
78
|
+
scheduler,
|
|
79
|
+
// Start dispatcher spawns this same binary: `<launcher> tick --daemon`.
|
|
80
|
+
launcher: resolveLauncher(undefined, []),
|
|
81
|
+
}, opts.port ?? opts.defaultPort ?? DEFAULT_UI_PORT, opts.port === undefined).catch((err) => {
|
|
82
|
+
scheduler.shutdown();
|
|
83
|
+
throw err;
|
|
84
|
+
});
|
|
85
|
+
writeDiscovery(stateDir, {
|
|
86
|
+
pid: process.pid,
|
|
87
|
+
port: server.port,
|
|
88
|
+
url: server.url,
|
|
89
|
+
started_at: new Date().toISOString(),
|
|
90
|
+
cli_version: opts.cliVersion ?? "0.0.0",
|
|
91
|
+
});
|
|
92
|
+
const close = server.close.bind(server);
|
|
93
|
+
server.close = async () => {
|
|
94
|
+
removeDiscovery(stateDir, process.pid);
|
|
95
|
+
await close();
|
|
96
|
+
scheduler.shutdown();
|
|
97
|
+
};
|
|
98
|
+
return { server, link: `${server.url}#token=${token}`, ...(warning ? { warning } : {}) };
|
|
99
|
+
}
|
|
100
|
+
export async function runUi(opts = {}) {
|
|
101
|
+
const { server, link, warning } = await startUi(opts);
|
|
102
|
+
// eslint-disable-next-line no-console
|
|
103
|
+
if (warning)
|
|
104
|
+
console.warn(warning);
|
|
105
|
+
// eslint-disable-next-line no-console
|
|
106
|
+
console.log(`tidegap ui: ${link}\n` +
|
|
107
|
+
`Serving on 127.0.0.1 only. The link carries a one-run access token; ` +
|
|
108
|
+
`do not share it. Press Ctrl-C to stop.`);
|
|
109
|
+
if (opts.open !== false)
|
|
110
|
+
openBrowser(link);
|
|
111
|
+
await new Promise((resolve) => {
|
|
112
|
+
const stop = () => resolve();
|
|
113
|
+
process.once("SIGINT", stop);
|
|
114
|
+
process.once("SIGTERM", stop);
|
|
115
|
+
});
|
|
116
|
+
await server.close();
|
|
117
|
+
return 0;
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=ui.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ui.js","sourceRoot":"","sources":["../../src/commands/ui.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `tidegap verify <task-id | --file path>` — verify the Ed25519 signature
|
|
3
|
+
* on a carbon receipt.
|
|
4
|
+
*
|
|
5
|
+
* - From the local ledger: `tidegap verify <task_id>` (looks up
|
|
6
|
+
* `~/.tidegap/queue.db`, or `--db` if set).
|
|
7
|
+
* - From a JSON receipt: `tidegap verify --file ./receipt.json`.
|
|
8
|
+
*
|
|
9
|
+
* Exit code reflects the outcome so CI / batch jobs can branch:
|
|
10
|
+
* 0 = valid; 1 = tampered; 2 = legacy-unsigned; 3 = key-mismatch;
|
|
11
|
+
* 4 = not-found / parse error.
|
|
12
|
+
*/
|
|
13
|
+
export interface VerifyOptions {
|
|
14
|
+
taskId?: string;
|
|
15
|
+
file?: string;
|
|
16
|
+
db?: string;
|
|
17
|
+
trustedPublicKey?: string;
|
|
18
|
+
json?: boolean;
|
|
19
|
+
}
|
|
20
|
+
export interface VerifyResult {
|
|
21
|
+
exitCode: number;
|
|
22
|
+
rendered: string;
|
|
23
|
+
/** Structured payload returned when `--json` is set. */
|
|
24
|
+
payload: {
|
|
25
|
+
taskId?: string;
|
|
26
|
+
outcome: string;
|
|
27
|
+
signerPublicKey?: string;
|
|
28
|
+
reason: string;
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
export declare function runVerify(opts: VerifyOptions): Promise<VerifyResult>;
|
|
32
|
+
//# sourceMappingURL=verify.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../src/commands/verify.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AASH,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,wDAAwD;IACxD,OAAO,EAAE;QACP,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;QAChB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;CACH;AAED,wBAAsB,SAAS,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,CA2C1E"}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `tidegap verify <task-id | --file path>` — verify the Ed25519 signature
|
|
3
|
+
* on a carbon receipt.
|
|
4
|
+
*
|
|
5
|
+
* - From the local ledger: `tidegap verify <task_id>` (looks up
|
|
6
|
+
* `~/.tidegap/queue.db`, or `--db` if set).
|
|
7
|
+
* - From a JSON receipt: `tidegap verify --file ./receipt.json`.
|
|
8
|
+
*
|
|
9
|
+
* Exit code reflects the outcome so CI / batch jobs can branch:
|
|
10
|
+
* 0 = valid; 1 = tampered; 2 = legacy-unsigned; 3 = key-mismatch;
|
|
11
|
+
* 4 = not-found / parse error.
|
|
12
|
+
*/
|
|
13
|
+
import { readFileSync } from "node:fs";
|
|
14
|
+
import { TaskStore, verifyReceipt } from "@tidegap/core";
|
|
15
|
+
import { defaultDbPath } from "./tick.js";
|
|
16
|
+
export async function runVerify(opts) {
|
|
17
|
+
const receipt = loadReceipt(opts);
|
|
18
|
+
if (!receipt) {
|
|
19
|
+
const reason = opts.file
|
|
20
|
+
? `verify: file ${opts.file} did not contain a valid CarbonReceipt JSON object`
|
|
21
|
+
: `verify: no receipt found for task ${opts.taskId ?? "<missing>"} in ${opts.db ?? defaultDbPath()}`;
|
|
22
|
+
return {
|
|
23
|
+
exitCode: 4,
|
|
24
|
+
rendered: reason,
|
|
25
|
+
payload: { taskId: opts.taskId, outcome: "not-found", reason },
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
const res = verifyReceipt(receipt, {
|
|
29
|
+
trustedPublicKey: opts.trustedPublicKey,
|
|
30
|
+
});
|
|
31
|
+
const exitCode = res.outcome === "valid"
|
|
32
|
+
? 0
|
|
33
|
+
: res.outcome === "tampered"
|
|
34
|
+
? 1
|
|
35
|
+
: res.outcome === "legacy-unsigned"
|
|
36
|
+
? 2
|
|
37
|
+
: /* key-mismatch */ 3;
|
|
38
|
+
const payload = {
|
|
39
|
+
taskId: receipt.taskId,
|
|
40
|
+
outcome: res.outcome,
|
|
41
|
+
signerPublicKey: res.signerPublicKey,
|
|
42
|
+
reason: res.reason,
|
|
43
|
+
};
|
|
44
|
+
if (opts.json) {
|
|
45
|
+
return {
|
|
46
|
+
exitCode,
|
|
47
|
+
rendered: JSON.stringify(payload, null, 2),
|
|
48
|
+
payload,
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
const rendered = renderHuman(receipt, res);
|
|
52
|
+
return { exitCode, rendered, payload };
|
|
53
|
+
}
|
|
54
|
+
function loadReceipt(opts) {
|
|
55
|
+
if (opts.file) {
|
|
56
|
+
try {
|
|
57
|
+
const raw = readFileSync(opts.file, "utf8");
|
|
58
|
+
const parsed = JSON.parse(raw);
|
|
59
|
+
// Accept either a bare receipt or a wrapper {receipt: ...} shape
|
|
60
|
+
// (matches what `writeOutputFile` emits in the scheduler).
|
|
61
|
+
const receipt = parsed && typeof parsed === "object" && "receipt" in parsed
|
|
62
|
+
? parsed.receipt
|
|
63
|
+
: parsed;
|
|
64
|
+
if (!receipt || typeof receipt.taskId !== "string")
|
|
65
|
+
return undefined;
|
|
66
|
+
return receipt;
|
|
67
|
+
}
|
|
68
|
+
catch {
|
|
69
|
+
return undefined;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
if (!opts.taskId)
|
|
73
|
+
return undefined;
|
|
74
|
+
const store = new TaskStore({ dbPath: opts.db ?? defaultDbPath() });
|
|
75
|
+
try {
|
|
76
|
+
const record = store.get(opts.taskId);
|
|
77
|
+
return record?.receipt;
|
|
78
|
+
}
|
|
79
|
+
finally {
|
|
80
|
+
store.close();
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
function renderHuman(receipt, res) {
|
|
84
|
+
const status = res.outcome === "valid"
|
|
85
|
+
? "✓ VALID"
|
|
86
|
+
: res.outcome === "tampered"
|
|
87
|
+
? "✗ TAMPERED"
|
|
88
|
+
: res.outcome === "key-mismatch"
|
|
89
|
+
? "✗ KEY MISMATCH"
|
|
90
|
+
: "○ LEGACY UNSIGNED";
|
|
91
|
+
const lines = [
|
|
92
|
+
status,
|
|
93
|
+
];
|
|
94
|
+
if (receipt.gridSource === "mock") {
|
|
95
|
+
lines.push("!! MOCK DATA — grid intensity is synthetic, not from a real feed");
|
|
96
|
+
}
|
|
97
|
+
lines.push("", `task_id ${receipt.taskId}`, `region ${receipt.region}`, `ran_at ${receipt.ranAt}`);
|
|
98
|
+
if (receipt.actualCarbonGCo2 !== undefined) {
|
|
99
|
+
lines.push(`actual_g_co2 ${receipt.actualCarbonGCo2}`);
|
|
100
|
+
}
|
|
101
|
+
if (receipt.estimatedCarbonGCo2 !== undefined) {
|
|
102
|
+
lines.push(`estimated_g_co2 ${receipt.estimatedCarbonGCo2}`);
|
|
103
|
+
}
|
|
104
|
+
if (receipt.deltaPct !== undefined) {
|
|
105
|
+
lines.push(`delta_pct ${receipt.deltaPct >= 0 ? "+" : ""}${receipt.deltaPct}`);
|
|
106
|
+
}
|
|
107
|
+
if (receipt.intensityGCo2PerKwh !== undefined) {
|
|
108
|
+
lines.push(`intensity_g_kwh ${receipt.intensityGCo2PerKwh}`);
|
|
109
|
+
}
|
|
110
|
+
if (receipt.gridSource !== undefined) {
|
|
111
|
+
const mock = receipt.gridSource === "mock";
|
|
112
|
+
const marginal = receipt.signalType === "marginal"
|
|
113
|
+
? " (marginal-emissions signal — not an average-grid figure)"
|
|
114
|
+
: "";
|
|
115
|
+
lines.push(`grid_source ${receipt.gridSource}${mock ? " !! MOCK DATA (synthetic — carbon is illustrative, not measured)" : ""}${marginal}`);
|
|
116
|
+
}
|
|
117
|
+
if (receipt.energySource !== undefined) {
|
|
118
|
+
lines.push(`energy_source ${receipt.energySource}`);
|
|
119
|
+
}
|
|
120
|
+
if (receipt.energyResolution !== undefined) {
|
|
121
|
+
lines.push(`energy_resolution ${receipt.energyResolution}`);
|
|
122
|
+
}
|
|
123
|
+
if (receipt.model)
|
|
124
|
+
lines.push(`model ${receipt.model}`);
|
|
125
|
+
if (receipt.provider)
|
|
126
|
+
lines.push(`provider ${receipt.provider}`);
|
|
127
|
+
if (res.signerPublicKey) {
|
|
128
|
+
lines.push("", `signer_public_key ${res.signerPublicKey}`);
|
|
129
|
+
}
|
|
130
|
+
if (receipt.signedAt)
|
|
131
|
+
lines.push(`signed_at ${receipt.signedAt}`);
|
|
132
|
+
lines.push("", res.reason);
|
|
133
|
+
return lines.join("\n");
|
|
134
|
+
}
|
|
135
|
+
//# sourceMappingURL=verify.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verify.js","sourceRoot":"","sources":["../../src/commands/verify.ts"],"names":[],"mappings":"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"}
|
package/dist/env.d.ts
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The `tidegap` CLI's environment boundary.
|
|
3
|
+
*
|
|
4
|
+
* `@tidegap/core` is an environment-pure library: it reads no environment
|
|
5
|
+
* variables and takes every credential as an explicit argument. The CLI is a
|
|
6
|
+
* HOST, so reading the environment is its job — and this module is the single
|
|
7
|
+
* place it happens. Every variable is read BY NAME into a closed shape; the
|
|
8
|
+
* whole `process` environment object is never bound to a local or handed to
|
|
9
|
+
* core.
|
|
10
|
+
*
|
|
11
|
+
* Behaviour is unchanged from before core became environment-pure: the same
|
|
12
|
+
* variables, the same precedence (GEMINI_API_KEY before GOOGLE_API_KEY).
|
|
13
|
+
*
|
|
14
|
+
* The Tidegap variables are named `TIDEGAP_*`. 0.19 removed the 0.17 `EBB_*`
|
|
15
|
+
* fallback: a left-over `EBB_*` variable (or `EBB_*` key in
|
|
16
|
+
* `~/.tidegap/config`) is never used, and the process prints one stderr line
|
|
17
|
+
* naming every such name and its new name.
|
|
18
|
+
*
|
|
19
|
+
* See also: `packages/mcp-server/src/env.ts` (the MCP server's copy of this
|
|
20
|
+
* boundary) and `packages/openclaw-plugin` — which has NO environment
|
|
21
|
+
* boundary at all, taking everything from OpenClaw plugin config so its
|
|
22
|
+
* published bundle contains zero environment reads.
|
|
23
|
+
*/
|
|
24
|
+
import { type CarbonBudgetEnv, type GridFeedCredentials } from "@tidegap/core";
|
|
25
|
+
/** Provider credentials the CLI forwards to `@tidegap/core`'s adapters. */
|
|
26
|
+
export interface ProviderCredentials {
|
|
27
|
+
/** `ANTHROPIC_API_KEY` */
|
|
28
|
+
anthropicApiKey?: string;
|
|
29
|
+
/** `OPENAI_API_KEY` */
|
|
30
|
+
openaiApiKey?: string;
|
|
31
|
+
/** `GEMINI_API_KEY`, else `GOOGLE_API_KEY` */
|
|
32
|
+
geminiApiKey?: string;
|
|
33
|
+
/** `OLLAMA_HOST` (opt-in: unset means "do not register the Ollama adapter") */
|
|
34
|
+
ollamaHost?: string;
|
|
35
|
+
}
|
|
36
|
+
export interface EnvCredentials extends ProviderCredentials {
|
|
37
|
+
/** Grid-feed credentials for `buildDefaultGridFeed`. */
|
|
38
|
+
grid: GridFeedCredentials;
|
|
39
|
+
/** Aggregate carbon-budget overrides for `loadCarbonBudgetConfig`. */
|
|
40
|
+
carbonBudget: CarbonBudgetEnv;
|
|
41
|
+
/** `TIDEGAP_BINARY`: launcher override for `tidegap install`. */
|
|
42
|
+
binary?: string;
|
|
43
|
+
/** `TIDEGAP_NO_NOTIFY=1` (or true/yes/on): `tidegap tick` posts no OS notification. */
|
|
44
|
+
noNotify: boolean;
|
|
45
|
+
/** `TIDEGAP_DEFAULT_MODEL`: Anthropic model for tasks queued without one (`tidegap ui` quick add). */
|
|
46
|
+
defaultModel?: string;
|
|
47
|
+
}
|
|
48
|
+
/** Receives the one line about left-over `EBB_*` names. */
|
|
49
|
+
export type NoticeWriter = (line: string) => void;
|
|
50
|
+
/**
|
|
51
|
+
* Snapshot every environment variable the CLI recognizes, by name.
|
|
52
|
+
* Call this at an entry point and pass the result down — never re-read the
|
|
53
|
+
* environment deeper in the call tree. Left-over `EBB_*` names go to `write`
|
|
54
|
+
* (default: one stderr line per process).
|
|
55
|
+
*/
|
|
56
|
+
export declare function readEnvCredentials(write?: NoticeWriter): EnvCredentials;
|
|
57
|
+
//# sourceMappingURL=env.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../src/env.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAGH,OAAO,EAA0C,KAAK,eAAe,EAAE,KAAK,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAEvH,2EAA2E;AAC3E,MAAM,WAAW,mBAAmB;IAClC,0BAA0B;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,uBAAuB;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,8CAA8C;IAC9C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,+EAA+E;IAC/E,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,cAAe,SAAQ,mBAAmB;IACzD,wDAAwD;IACxD,IAAI,EAAE,mBAAmB,CAAC;IAC1B,sEAAsE;IACtE,YAAY,EAAE,eAAe,CAAC;IAC9B,iEAAiE;IACjE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,uFAAuF;IACvF,QAAQ,EAAE,OAAO,CAAC;IAClB,sGAAsG;IACtG,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAQD,2DAA2D;AAC3D,MAAM,MAAM,YAAY,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;AA+ClD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,GAAE,YAAwB,GAAG,cAAc,CAuBlF"}
|
package/dist/env.js
ADDED
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The `tidegap` CLI's environment boundary.
|
|
3
|
+
*
|
|
4
|
+
* `@tidegap/core` is an environment-pure library: it reads no environment
|
|
5
|
+
* variables and takes every credential as an explicit argument. The CLI is a
|
|
6
|
+
* HOST, so reading the environment is its job — and this module is the single
|
|
7
|
+
* place it happens. Every variable is read BY NAME into a closed shape; the
|
|
8
|
+
* whole `process` environment object is never bound to a local or handed to
|
|
9
|
+
* core.
|
|
10
|
+
*
|
|
11
|
+
* Behaviour is unchanged from before core became environment-pure: the same
|
|
12
|
+
* variables, the same precedence (GEMINI_API_KEY before GOOGLE_API_KEY).
|
|
13
|
+
*
|
|
14
|
+
* The Tidegap variables are named `TIDEGAP_*`. 0.19 removed the 0.17 `EBB_*`
|
|
15
|
+
* fallback: a left-over `EBB_*` variable (or `EBB_*` key in
|
|
16
|
+
* `~/.tidegap/config`) is never used, and the process prints one stderr line
|
|
17
|
+
* naming every such name and its new name.
|
|
18
|
+
*
|
|
19
|
+
* See also: `packages/mcp-server/src/env.ts` (the MCP server's copy of this
|
|
20
|
+
* boundary) and `packages/openclaw-plugin` — which has NO environment
|
|
21
|
+
* boundary at all, taking everything from OpenClaw plugin config so its
|
|
22
|
+
* published bundle contains zero environment reads.
|
|
23
|
+
*/
|
|
24
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
25
|
+
import { carbonBudgetConfigPath, parseKeyValues } from "@tidegap/core";
|
|
26
|
+
/** Trim and collapse an empty string to `undefined`. */
|
|
27
|
+
function val(raw) {
|
|
28
|
+
const v = raw?.trim();
|
|
29
|
+
return v ? v : undefined;
|
|
30
|
+
}
|
|
31
|
+
let noticeReported = false;
|
|
32
|
+
/** Default writer: stderr, once per process. */
|
|
33
|
+
const writeOnce = (line) => {
|
|
34
|
+
if (noticeReported)
|
|
35
|
+
return;
|
|
36
|
+
noticeReported = true;
|
|
37
|
+
process.stderr.write(`${line}\n`);
|
|
38
|
+
};
|
|
39
|
+
/** The `TIDEGAP_<NAME>` suffixes whose 0.17 `EBB_<NAME>` twin is reported when left over. */
|
|
40
|
+
const RENAMED = ["ELECTRICITY_MAPS_API_KEY", "EIA_API_KEY", "ENTSOE_SECURITY_TOKEN", "CARBON_BUDGET_G", "CARBON_BUDGET_WINDOW", "BINARY", "NO_NOTIFY", "DEFAULT_MODEL"];
|
|
41
|
+
/**
|
|
42
|
+
* The 0.17 names that are set but no longer read: an `EBB_<NAME>` variable
|
|
43
|
+
* whose `TIDEGAP_<NAME>` twin is unset, and every `EBB_*` key in
|
|
44
|
+
* `~/.tidegap/config`. Values are never read.
|
|
45
|
+
*/
|
|
46
|
+
function leftOverNames() {
|
|
47
|
+
const out = [];
|
|
48
|
+
for (const name of RENAMED) {
|
|
49
|
+
if (val(process.env[`EBB_${name}`]) !== undefined && val(process.env[`TIDEGAP_${name}`]) === undefined) {
|
|
50
|
+
out.push(`EBB_${name}`);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
try {
|
|
54
|
+
const path = carbonBudgetConfigPath();
|
|
55
|
+
if (existsSync(path)) {
|
|
56
|
+
for (const key of Object.keys(parseKeyValues(readFileSync(path, "utf8")))) {
|
|
57
|
+
if (key.startsWith("EBB_") && !out.includes(key))
|
|
58
|
+
out.push(key);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
// An unreadable config is the loaders' concern, not this notice's.
|
|
64
|
+
}
|
|
65
|
+
return out;
|
|
66
|
+
}
|
|
67
|
+
/** One line naming every left-over `EBB_*` name and its new name. */
|
|
68
|
+
function reportLeftOverNames(write) {
|
|
69
|
+
const names = leftOverNames();
|
|
70
|
+
if (names.length === 0)
|
|
71
|
+
return;
|
|
72
|
+
const renames = names.map((n) => `${n} -> TIDEGAP_${n.slice(4)}`).join(", ");
|
|
73
|
+
write(`tidegap: EBB_* names are no longer read (removed in 0.19); rename ${renames}.`);
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Snapshot every environment variable the CLI recognizes, by name.
|
|
77
|
+
* Call this at an entry point and pass the result down — never re-read the
|
|
78
|
+
* environment deeper in the call tree. Left-over `EBB_*` names go to `write`
|
|
79
|
+
* (default: one stderr line per process).
|
|
80
|
+
*/
|
|
81
|
+
export function readEnvCredentials(write = writeOnce) {
|
|
82
|
+
const out = {
|
|
83
|
+
anthropicApiKey: val(process.env.ANTHROPIC_API_KEY),
|
|
84
|
+
openaiApiKey: val(process.env.OPENAI_API_KEY),
|
|
85
|
+
geminiApiKey: val(process.env.GEMINI_API_KEY) ?? val(process.env.GOOGLE_API_KEY),
|
|
86
|
+
ollamaHost: val(process.env.OLLAMA_HOST),
|
|
87
|
+
grid: {
|
|
88
|
+
electricityMapsApiKey: val(process.env.TIDEGAP_ELECTRICITY_MAPS_API_KEY),
|
|
89
|
+
eiaApiKey: val(process.env.TIDEGAP_EIA_API_KEY),
|
|
90
|
+
entsoeSecurityToken: val(process.env.TIDEGAP_ENTSOE_SECURITY_TOKEN),
|
|
91
|
+
wattTimeUsername: val(process.env.WATTTIME_USERNAME),
|
|
92
|
+
wattTimePassword: val(process.env.WATTTIME_PASSWORD),
|
|
93
|
+
},
|
|
94
|
+
carbonBudget: {
|
|
95
|
+
TIDEGAP_CARBON_BUDGET_G: process.env.TIDEGAP_CARBON_BUDGET_G,
|
|
96
|
+
TIDEGAP_CARBON_BUDGET_WINDOW: process.env.TIDEGAP_CARBON_BUDGET_WINDOW,
|
|
97
|
+
},
|
|
98
|
+
binary: val(process.env.TIDEGAP_BINARY),
|
|
99
|
+
noNotify: /^(1|true|yes|on)$/i.test(val(process.env.TIDEGAP_NO_NOTIFY) ?? ""),
|
|
100
|
+
defaultModel: val(process.env.TIDEGAP_DEFAULT_MODEL),
|
|
101
|
+
};
|
|
102
|
+
reportLeftOverNames(write);
|
|
103
|
+
return out;
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=env.js.map
|
package/dist/env.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env.js","sourceRoot":"","sources":["../src/env.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* `tidegap` — CLI entry point.
|
|
4
|
+
*
|
|
5
|
+
* tidegap tick drain due tasks (one-shot or --daemon)
|
|
6
|
+
* tidegap install write launchd plist or print systemd/schtasks templates
|
|
7
|
+
* tidegap queue list print queued/scheduled/running/completed tasks
|
|
8
|
+
* tidegap queue cancel | reschedule | run-now | reply change a task (the
|
|
9
|
+
* next tick runs it; these commands never dispatch)
|
|
10
|
+
* tidegap receipts list print carbon receipts for completed tasks
|
|
11
|
+
* tidegap stats local-only personal-impact summary
|
|
12
|
+
* tidegap register-wake schedule a macOS wake event 30s before a task
|
|
13
|
+
* tidegap ui local task page (timeline, inbox, detail, actions) on 127.0.0.1
|
|
14
|
+
* tidegap clients add, list or revoke the tokens of the extension and Mac app
|
|
15
|
+
*/
|
|
16
|
+
import { Command } from "commander";
|
|
17
|
+
/**
|
|
18
|
+
* CLI version — read from this package's own `package.json` so there is
|
|
19
|
+
* a single source of truth and `tidegap --version` never drifts from the
|
|
20
|
+
* published version. `createRequire` resolves relative to this module,
|
|
21
|
+
* so it works from both `src` (tests) and `dist` (published bin).
|
|
22
|
+
*/
|
|
23
|
+
export declare function readCliVersion(): string;
|
|
24
|
+
export declare function buildProgram(): Command;
|
|
25
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;GAaG;AAIH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAmBpC;;;;;GAKG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAQvC;AAID,wBAAgB,YAAY,IAAI,OAAO,CAsUtC"}
|