@nodetool-ai/cli 0.8.4-a24.3 → 0.8.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 +34 -8
- package/dist/.nodetool-build-stamp +1 -1
- package/dist/commands/__tests__/runtime.test.js +2 -1
- package/dist/commands/__tests__/runtime.test.js.map +1 -1
- package/dist/commands/app.d.ts.map +1 -1
- package/dist/commands/app.js +5 -2
- package/dist/commands/app.js.map +1 -1
- package/dist/commands/deploy-helpers.d.ts +7 -0
- package/dist/commands/deploy-helpers.d.ts.map +1 -1
- package/dist/commands/deploy-helpers.js +32 -1
- package/dist/commands/deploy-helpers.js.map +1 -1
- package/dist/commands/generate.d.ts.map +1 -1
- package/dist/commands/generate.js +3 -1
- package/dist/commands/generate.js.map +1 -1
- package/dist/commands/harness.d.ts.map +1 -1
- package/dist/commands/harness.js +120 -30
- package/dist/commands/harness.js.map +1 -1
- package/dist/commands/js-script.d.ts.map +1 -1
- package/dist/commands/js-script.js +28 -1
- package/dist/commands/js-script.js.map +1 -1
- package/dist/commands/node.d.ts.map +1 -1
- package/dist/commands/node.js +46 -0
- package/dist/commands/node.js.map +1 -1
- package/dist/commands/package.d.ts.map +1 -1
- package/dist/commands/package.js +8 -4
- package/dist/commands/package.js.map +1 -1
- package/dist/commands/runtime.d.ts.map +1 -1
- package/dist/commands/runtime.js +53 -6
- package/dist/commands/runtime.js.map +1 -1
- package/dist/commands/telemetry.d.ts +24 -0
- package/dist/commands/telemetry.d.ts.map +1 -0
- package/dist/commands/telemetry.js +116 -0
- package/dist/commands/telemetry.js.map +1 -0
- package/dist/commands/tools.d.ts +11 -0
- package/dist/commands/tools.d.ts.map +1 -0
- package/dist/commands/tools.js +206 -0
- package/dist/commands/tools.js.map +1 -0
- package/dist/harness/capability-table.js +8 -8
- package/dist/harness/capability-table.js.map +1 -1
- package/dist/harness/registry.d.ts.map +1 -1
- package/dist/harness/registry.js +22 -0
- package/dist/harness/registry.js.map +1 -1
- package/dist/interaction-script.d.ts.map +1 -1
- package/dist/interaction-script.js +13 -5
- package/dist/interaction-script.js.map +1 -1
- package/dist/js-script-debug/harness.d.ts.map +1 -1
- package/dist/js-script-debug/harness.js +13 -2
- package/dist/js-script-debug/harness.js.map +1 -1
- package/dist/nodetool-main.js +51 -1
- package/dist/nodetool-main.js.map +1 -1
- package/dist/packs/command-service.d.ts.map +1 -1
- package/dist/packs/command-service.js +7 -2
- package/dist/packs/command-service.js.map +1 -1
- package/dist/providers.d.ts +8 -1
- package/dist/providers.d.ts.map +1 -1
- package/dist/providers.js +42 -6
- package/dist/providers.js.map +1 -1
- package/dist/telemetry.d.ts +38 -0
- package/dist/telemetry.d.ts.map +1 -0
- package/dist/telemetry.js +158 -0
- package/dist/telemetry.js.map +1 -0
- package/package.json +40 -32
package/dist/commands/runtime.js
CHANGED
|
@@ -6,17 +6,23 @@
|
|
|
6
6
|
* The specs are `RUNTIME_NPM_PACKAGES` from `@nodetool-ai/protocol`, the same
|
|
7
7
|
* pinned list the desktop Package Manager installs. A feature that needs a
|
|
8
8
|
* missing one fails with a message naming `nodetool runtime add <id>`.
|
|
9
|
+
*
|
|
10
|
+
* `sd-cpp` is the one binary here: the stable-diffusion.cpp `sd-server`
|
|
11
|
+
* release, unpacked into `runtimeLocations().sdCpp` by the installer the
|
|
12
|
+
* desktop app shares.
|
|
9
13
|
*/
|
|
10
14
|
import { existsSync } from "node:fs";
|
|
11
15
|
import { mkdir, readFile, writeFile } from "node:fs/promises";
|
|
12
16
|
import { join } from "node:path";
|
|
13
17
|
import { z } from "zod";
|
|
18
|
+
import { installSdCpp, runtimeLocations, sdCppInstallStatus, uninstallSdCpp } from "@nodetool-ai/config";
|
|
14
19
|
import { RUNTIME_NPM_PACKAGES, RUNTIME_PACKAGE_NAMES, isRuntimeNpmPackageId } from "@nodetool-ai/protocol";
|
|
15
20
|
import { optionalNodeModulesDir, optionalNodeRoot } from "../optional-node-root.js";
|
|
16
21
|
import { asJson, printTable } from "./output.js";
|
|
17
22
|
import { runNpm } from "../npm-runner.js";
|
|
18
23
|
import { withInstallLock } from "../install-lock.js";
|
|
19
24
|
const installedManifestSchema = z.object({ version: z.string() });
|
|
25
|
+
const SD_CPP_ID = "sd-cpp";
|
|
20
26
|
/** The version installed in the optional-node root, or null. */
|
|
21
27
|
async function installedVersion(packageName) {
|
|
22
28
|
const manifest = join(optionalNodeModulesDir(), packageName, "package.json");
|
|
@@ -32,9 +38,26 @@ async function installedVersion(packageName) {
|
|
|
32
38
|
return null;
|
|
33
39
|
}
|
|
34
40
|
}
|
|
41
|
+
function sdCppDir() {
|
|
42
|
+
const dir = runtimeLocations().sdCpp;
|
|
43
|
+
if (!dir) {
|
|
44
|
+
throw new Error("This host has no sd-server install directory. Set SD_CPP_SERVER_PATH instead.");
|
|
45
|
+
}
|
|
46
|
+
return dir;
|
|
47
|
+
}
|
|
48
|
+
async function sdCppRow() {
|
|
49
|
+
const status = await sdCppInstallStatus(sdCppDir(), process.platform);
|
|
50
|
+
return {
|
|
51
|
+
id: SD_CPP_ID,
|
|
52
|
+
name: RUNTIME_PACKAGE_NAMES[SD_CPP_ID],
|
|
53
|
+
installed: status.installed,
|
|
54
|
+
version: status.version ?? "",
|
|
55
|
+
description: "Local image generation server (sd-server) for the stable-diffusion.cpp provider."
|
|
56
|
+
};
|
|
57
|
+
}
|
|
35
58
|
async function runtimeRows() {
|
|
36
59
|
const ids = Object.keys(RUNTIME_NPM_PACKAGES).filter(isRuntimeNpmPackageId);
|
|
37
|
-
|
|
60
|
+
const npmRows = await Promise.all(ids.map(async (id) => {
|
|
38
61
|
const spec = RUNTIME_NPM_PACKAGES[id];
|
|
39
62
|
const versions = await Promise.all(spec.packageNames.map(installedVersion));
|
|
40
63
|
const installed = versions.every((version) => version !== null);
|
|
@@ -46,15 +69,16 @@ async function runtimeRows() {
|
|
|
46
69
|
description: spec.description
|
|
47
70
|
};
|
|
48
71
|
}));
|
|
72
|
+
return runtimeLocations().sdCpp ? [...npmRows, await sdCppRow()] : npmRows;
|
|
49
73
|
}
|
|
50
74
|
/** Parse the ids a user typed, failing on any id the catalog lacks. */
|
|
51
75
|
function parseIds(ids) {
|
|
52
|
-
const unknown = ids.filter((id) => !isRuntimeNpmPackageId(id));
|
|
76
|
+
const unknown = ids.filter((id) => id !== SD_CPP_ID && !isRuntimeNpmPackageId(id));
|
|
53
77
|
if (unknown.length > 0) {
|
|
54
|
-
const known = Object.keys(RUNTIME_NPM_PACKAGES).join(", ");
|
|
78
|
+
const known = [...Object.keys(RUNTIME_NPM_PACKAGES), SD_CPP_ID].join(", ");
|
|
55
79
|
throw new Error(`Unknown runtime package: ${unknown.join(", ")}. Known: ${known}.`);
|
|
56
80
|
}
|
|
57
|
-
return ids.filter(isRuntimeNpmPackageId);
|
|
81
|
+
return { npm: ids.filter(isRuntimeNpmPackageId), sdCpp: ids.includes(SD_CPP_ID) };
|
|
58
82
|
}
|
|
59
83
|
/** Create the root with a private manifest, so npm installs into it. */
|
|
60
84
|
async function ensureRoot() {
|
|
@@ -87,7 +111,24 @@ export function registerRuntimeCommands(program) {
|
|
|
87
111
|
.description("Install one or more runtime packages by id")
|
|
88
112
|
.argument("<ids...>", "Runtime package ids, from `nodetool runtime list`")
|
|
89
113
|
.action(async (ids) => {
|
|
90
|
-
const parsed = parseIds(ids);
|
|
114
|
+
const { npm: parsed, sdCpp } = parseIds(ids);
|
|
115
|
+
if (sdCpp) {
|
|
116
|
+
const installDir = sdCppDir();
|
|
117
|
+
console.error(`Installing sd-cpp into ${installDir}`);
|
|
118
|
+
await installSdCpp({
|
|
119
|
+
installDir,
|
|
120
|
+
platform: process.platform,
|
|
121
|
+
arch: process.arch,
|
|
122
|
+
onEvent: (event) => {
|
|
123
|
+
if (event.type === "stage") {
|
|
124
|
+
console.error(event.label);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
if (parsed.length === 0) {
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
91
132
|
const specs = parsed.flatMap((id) => RUNTIME_NPM_PACKAGES[id].npmPackages);
|
|
92
133
|
const root = optionalNodeRoot();
|
|
93
134
|
console.error(`Installing ${parsed.join(", ")} into ${root}`);
|
|
@@ -103,7 +144,13 @@ export function registerRuntimeCommands(program) {
|
|
|
103
144
|
.description("Uninstall one or more runtime packages by id")
|
|
104
145
|
.argument("<ids...>", "Runtime package ids")
|
|
105
146
|
.action(async (ids) => {
|
|
106
|
-
const parsed = parseIds(ids);
|
|
147
|
+
const { npm: parsed, sdCpp } = parseIds(ids);
|
|
148
|
+
if (sdCpp) {
|
|
149
|
+
await uninstallSdCpp(sdCppDir());
|
|
150
|
+
}
|
|
151
|
+
if (parsed.length === 0) {
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
107
154
|
const names = parsed.flatMap((id) => RUNTIME_NPM_PACKAGES[id].packageNames);
|
|
108
155
|
const root = optionalNodeRoot();
|
|
109
156
|
if (!existsSync(join(root, "package.json"))) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/commands/runtime.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/commands/runtime.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `nodetool telemetry` — the CLI's consent controls for anonymous usage
|
|
3
|
+
* analytics. Nothing is sent until `enable` runs, and nothing here ever
|
|
4
|
+
* prompts. See docs/analytics.md.
|
|
5
|
+
*/
|
|
6
|
+
import type { Command } from "commander";
|
|
7
|
+
import { type AnalyticsClient } from "@nodetool-ai/analytics";
|
|
8
|
+
type Env = Readonly<Record<string, string | undefined>>;
|
|
9
|
+
export declare const NEVER_COLLECTED: readonly ["command lines, arguments and flags", "file paths, file names and the working directory", "environment variables, API keys and tokens", "stdin, stdout and stderr", "prompts, workflow contents and outputs", "URLs you pass to commands", "account, project and workflow IDs"];
|
|
10
|
+
export interface TelemetryStatus {
|
|
11
|
+
enabled: boolean;
|
|
12
|
+
consent: string;
|
|
13
|
+
disabledByEnv: boolean;
|
|
14
|
+
configFile: string;
|
|
15
|
+
endpoint: string;
|
|
16
|
+
pendingEvents: number;
|
|
17
|
+
}
|
|
18
|
+
export declare function telemetryStatus(client: AnalyticsClient, env: Env, configFile: string): Promise<TelemetryStatus>;
|
|
19
|
+
export declare function registerTelemetryCommands(program: Command, deps?: {
|
|
20
|
+
env?: Env;
|
|
21
|
+
configFile?: string;
|
|
22
|
+
}): void;
|
|
23
|
+
export {};
|
|
24
|
+
//# sourceMappingURL=telemetry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../../src/commands/telemetry.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAGL,KAAK,eAAe,EACrB,MAAM,wBAAwB,CAAC;AAMhC,KAAK,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC;AAExD,eAAO,MAAM,eAAe,YAC1B,oCAAoC,EACpC,kDAAkD,EAClD,4CAA4C,EAC5C,0BAA0B,EAC1B,wCAAwC,EACxC,2BAA2B,EAC3B,mCAAmC,CAC3B,CAAC;AAEX,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,OAAO,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,wBAAsB,eAAe,CACnC,MAAM,EAAE,eAAe,EACvB,GAAG,EAAE,GAAG,EACR,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,eAAe,CAAC,CAY1B;AAeD,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,OAAO,EAChB,IAAI,GAAE;IAAE,GAAG,CAAC,EAAE,GAAG,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAO,GAC5C,IAAI,CAoFN"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import { ANALYTICS_EVENTS, isAnalyticsDisabledByEnv } from "@nodetool-ai/analytics";
|
|
2
|
+
import { defaultCliAnalyticsPath } from "@nodetool-ai/analytics/node";
|
|
3
|
+
import { asJson, printKv } from "./output.js";
|
|
4
|
+
import { cliAnalyticsEndpoint, createCliAnalyticsClient } from "../telemetry.js";
|
|
5
|
+
export const NEVER_COLLECTED = [
|
|
6
|
+
"command lines, arguments and flags",
|
|
7
|
+
"file paths, file names and the working directory",
|
|
8
|
+
"environment variables, API keys and tokens",
|
|
9
|
+
"stdin, stdout and stderr",
|
|
10
|
+
"prompts, workflow contents and outputs",
|
|
11
|
+
"URLs you pass to commands",
|
|
12
|
+
"account, project and workflow IDs"
|
|
13
|
+
];
|
|
14
|
+
export async function telemetryStatus(client, env, configFile) {
|
|
15
|
+
await client.ready;
|
|
16
|
+
const disabledByEnv = isAnalyticsDisabledByEnv(env);
|
|
17
|
+
const consent = client.getConsent().productAnalytics;
|
|
18
|
+
return {
|
|
19
|
+
enabled: consent === "granted" && !disabledByEnv,
|
|
20
|
+
consent,
|
|
21
|
+
disabledByEnv,
|
|
22
|
+
configFile,
|
|
23
|
+
endpoint: cliAnalyticsEndpoint(env),
|
|
24
|
+
pendingEvents: client.pendingEvents().length
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
function printStatus(status) {
|
|
28
|
+
printKv({
|
|
29
|
+
"Anonymous usage analytics": status.enabled ? "enabled" : "disabled",
|
|
30
|
+
Consent: status.consent,
|
|
31
|
+
"Disabled by environment": status.disabledByEnv
|
|
32
|
+
? "yes (NODETOOL_TELEMETRY or DO_NOT_TRACK)"
|
|
33
|
+
: "no",
|
|
34
|
+
"Config file": status.configFile,
|
|
35
|
+
Endpoint: status.endpoint,
|
|
36
|
+
"Unsent events": status.pendingEvents
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
export function registerTelemetryCommands(program, deps = {}) {
|
|
40
|
+
const env = deps.env ?? process.env;
|
|
41
|
+
const configFile = deps.configFile ?? defaultCliAnalyticsPath();
|
|
42
|
+
const client = () => createCliAnalyticsClient({ env, storePath: configFile });
|
|
43
|
+
const telemetry = program
|
|
44
|
+
.command("telemetry")
|
|
45
|
+
.description("Anonymous usage analytics for the CLI: off until you enable it");
|
|
46
|
+
telemetry
|
|
47
|
+
.command("enable")
|
|
48
|
+
.description("Share anonymous, coarse usage events")
|
|
49
|
+
.action(async () => {
|
|
50
|
+
const c = client();
|
|
51
|
+
await c.setConsent("productAnalytics", "granted");
|
|
52
|
+
console.log("Anonymous usage analytics enabled. The CLI sends the command category, " +
|
|
53
|
+
"platform, version and bucketed run counts and durations.");
|
|
54
|
+
console.log(`Never collected: ${NEVER_COLLECTED.join("; ")}.`);
|
|
55
|
+
if (isAnalyticsDisabledByEnv(env)) {
|
|
56
|
+
console.log("NODETOOL_TELEMETRY or DO_NOT_TRACK is set, so nothing is sent while it stays set.");
|
|
57
|
+
}
|
|
58
|
+
console.log("Run `nodetool telemetry disable` to turn it off.");
|
|
59
|
+
c.shutdown();
|
|
60
|
+
});
|
|
61
|
+
telemetry
|
|
62
|
+
.command("disable")
|
|
63
|
+
.description("Stop sending and delete unsent events and the anonymous ID")
|
|
64
|
+
.action(async () => {
|
|
65
|
+
const c = client();
|
|
66
|
+
await c.setConsent("productAnalytics", "denied");
|
|
67
|
+
console.log("Anonymous usage analytics disabled. Unsent events and the anonymous ID were deleted.");
|
|
68
|
+
c.shutdown();
|
|
69
|
+
});
|
|
70
|
+
telemetry
|
|
71
|
+
.command("status")
|
|
72
|
+
.description("Show whether telemetry is on and why")
|
|
73
|
+
.option("--json", "Output as JSON")
|
|
74
|
+
.action(async (opts) => {
|
|
75
|
+
const c = client();
|
|
76
|
+
const status = await telemetryStatus(c, env, configFile);
|
|
77
|
+
if (opts.json)
|
|
78
|
+
asJson(status);
|
|
79
|
+
else
|
|
80
|
+
printStatus(status);
|
|
81
|
+
c.shutdown();
|
|
82
|
+
});
|
|
83
|
+
telemetry
|
|
84
|
+
.command("inspect")
|
|
85
|
+
.description("Print unsent events and an example event exactly as they would be sent, without sending")
|
|
86
|
+
.option("--json", "Output as JSON")
|
|
87
|
+
.action(async (opts) => {
|
|
88
|
+
const c = client();
|
|
89
|
+
const status = await telemetryStatus(c, env, configFile);
|
|
90
|
+
const example = c.preview({
|
|
91
|
+
event: "cli_started",
|
|
92
|
+
properties: { commandCategory: "run" }
|
|
93
|
+
});
|
|
94
|
+
const report = {
|
|
95
|
+
status,
|
|
96
|
+
pending: c.pendingEvents(),
|
|
97
|
+
example,
|
|
98
|
+
events: Object.keys(ANALYTICS_EVENTS),
|
|
99
|
+
neverCollected: NEVER_COLLECTED
|
|
100
|
+
};
|
|
101
|
+
if (opts.json) {
|
|
102
|
+
asJson(report);
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
printStatus(status);
|
|
106
|
+
console.log("\nExample event (not sent):");
|
|
107
|
+
console.log(JSON.stringify(example, null, 2));
|
|
108
|
+
console.log(`\nUnsent events (${report.pending.length}):`);
|
|
109
|
+
for (const event of report.pending)
|
|
110
|
+
console.log(JSON.stringify(event));
|
|
111
|
+
console.log(`\nNever collected: ${NEVER_COLLECTED.join("; ")}.`);
|
|
112
|
+
}
|
|
113
|
+
c.shutdown();
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=telemetry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../../src/commands/telemetry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/** Direct local access to the same tools and guides as CLI agent sessions. */
|
|
2
|
+
import type { Command } from "commander";
|
|
3
|
+
import type { Tool } from "@nodetool-ai/agents";
|
|
4
|
+
export interface AuthoringTools {
|
|
5
|
+
list(): Promise<Tool[]>;
|
|
6
|
+
call(name: string, args: Record<string, unknown>): Promise<unknown>;
|
|
7
|
+
}
|
|
8
|
+
export declare function parseToolArguments(raw: string): Promise<Record<string, unknown>>;
|
|
9
|
+
export declare const AUTHORING_HELP = "\nAuthoring tools and starting documents:\n nodetool tools list timeline\n nodetool tools info create_timeline\n nodetool skills list\n nodetool skills read storyboard-core\n nodetool skills read motion-graphics\n nodetool skills read nodetool-workflow-builder\n nodetool skills read nodetool-app-builder\n nodetool skills read native-game\n nodetool tools call list_projects\n nodetool tools call create_timeline --args '{\"name\":\"My timeline\"}'\n nodetool tools call <name> --args @arguments.json\n\nTools expose their current input schemas. Read the matching shipped guide\nbefore creating workflows, timelines, motion graphics, mini apps, or games.\n";
|
|
10
|
+
export declare function registerAuthoringCommands(program: Command, load?: () => Promise<AuthoringTools>): void;
|
|
11
|
+
//# sourceMappingURL=tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/commands/tools.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEzC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAShD,MAAM,WAAW,cAAc;IAC7B,IAAI,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IACxB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACrE;AA6ED,wBAAsB,kBAAkB,CACtC,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAUlC;AA0CD,eAAO,MAAM,cAAc,iqBAgB1B,CAAC;AAEF,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,OAAO,EAChB,IAAI,GAAE,MAAM,OAAO,CAAC,cAAc,CAAc,GAC/C,IAAI,CAmGN"}
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
import { readFile } from "node:fs/promises";
|
|
2
|
+
import { asJson } from "./output.js";
|
|
3
|
+
import { commandFailureExitCode, printCommandError } from "../command-errors.js";
|
|
4
|
+
import { isRecord } from "../predicates.js";
|
|
5
|
+
import { setupLocalDb, LOCAL_USER_ID } from "./local-db.js";
|
|
6
|
+
async function localTools() {
|
|
7
|
+
const { buildCliToolbelt } = await import("../agent-toolbelt.js");
|
|
8
|
+
const { buildFullRegistry } = await import("../node-registry.js");
|
|
9
|
+
const registry = await buildFullRegistry();
|
|
10
|
+
const { toolForCapabilityName } = await import("@nodetool-ai/agents");
|
|
11
|
+
const byName = new Map(buildCliToolbelt({}, registry).map((tool) => [tool.name, tool]));
|
|
12
|
+
// Model discovery is provider-backed at invocation, but its schema is static.
|
|
13
|
+
for (const name of ["find_model", "list_models"]) {
|
|
14
|
+
if (!byName.has(name)) {
|
|
15
|
+
byName.set(name, toolForCapabilityName(name));
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
const tools = [...byName.values()];
|
|
19
|
+
return {
|
|
20
|
+
list: async () => tools,
|
|
21
|
+
call: async (name, args) => {
|
|
22
|
+
if (!tools.some((candidate) => candidate.name === name)) {
|
|
23
|
+
throw new Error(`Unknown tool: ${name}. Use nodetool tools list to discover names.`);
|
|
24
|
+
}
|
|
25
|
+
const { getDefaultDbPath } = await import("@nodetool-ai/config");
|
|
26
|
+
const { migrateSqliteDb, Project } = await import("@nodetool-ai/models");
|
|
27
|
+
await migrateSqliteDb(getDefaultDbPath());
|
|
28
|
+
await setupLocalDb();
|
|
29
|
+
await Project.ensurePersonal(LOCAL_USER_ID);
|
|
30
|
+
const { buildConfiguredProviders } = await import("../providers.js");
|
|
31
|
+
const providers = await buildConfiguredProviders();
|
|
32
|
+
const tool = buildCliToolbelt(providers, registry).find((candidate) => candidate.name === name);
|
|
33
|
+
if (!tool) {
|
|
34
|
+
throw new Error(`No configured providers are available for ${name}. Configure a provider before calling this tool.`);
|
|
35
|
+
}
|
|
36
|
+
const { createChatContext } = await import("../chat-context.js");
|
|
37
|
+
const context = await createChatContext({
|
|
38
|
+
workspaceDir: process.cwd(),
|
|
39
|
+
userId: LOCAL_USER_ID
|
|
40
|
+
});
|
|
41
|
+
for (const [id, provider] of Object.entries(providers)) {
|
|
42
|
+
context.registerProvider(id, provider);
|
|
43
|
+
}
|
|
44
|
+
const { RUN_BUDGET_CONTEXT_KEY } = await import("@nodetool-ai/runtime");
|
|
45
|
+
const { PERMISSION_GATE_CONTEXT_KEY, headlessGate } = await import("@nodetool-ai/agents");
|
|
46
|
+
const { createCliRunBudget } = await import("../run-budget.js");
|
|
47
|
+
context.set(RUN_BUDGET_CONTEXT_KEY, await createCliRunBudget());
|
|
48
|
+
context.set(PERMISSION_GATE_CONTEXT_KEY, headlessGate("CLI tool call"));
|
|
49
|
+
const { attachRunCostLedger } = await import("@nodetool-ai/execution");
|
|
50
|
+
const ledger = attachRunCostLedger(context, {
|
|
51
|
+
userId: LOCAL_USER_ID,
|
|
52
|
+
workflowId: null
|
|
53
|
+
});
|
|
54
|
+
const controller = new AbortController();
|
|
55
|
+
const cancel = () => controller.abort(new Error("Tool call interrupted"));
|
|
56
|
+
context.signal = controller.signal;
|
|
57
|
+
process.once("SIGINT", cancel);
|
|
58
|
+
process.once("SIGTERM", cancel);
|
|
59
|
+
try {
|
|
60
|
+
return await tool.execute(context, args);
|
|
61
|
+
}
|
|
62
|
+
finally {
|
|
63
|
+
await ledger.settled();
|
|
64
|
+
ledger();
|
|
65
|
+
process.removeListener("SIGINT", cancel);
|
|
66
|
+
process.removeListener("SIGTERM", cancel);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
export async function parseToolArguments(raw) {
|
|
72
|
+
const value = JSON.parse(raw.startsWith("@") ? await readFile(raw.slice(1), "utf8") : raw);
|
|
73
|
+
if (!isRecord(value)) {
|
|
74
|
+
throw new Error("--args must be a JSON object or @path to a JSON object file.");
|
|
75
|
+
}
|
|
76
|
+
return value;
|
|
77
|
+
}
|
|
78
|
+
/** Inspect only result envelopes whose tool contracts define failure statuses. */
|
|
79
|
+
function toolCallFailed(name, result) {
|
|
80
|
+
if (!isRecord(result)) {
|
|
81
|
+
return false;
|
|
82
|
+
}
|
|
83
|
+
if (commandFailureExitCode(result) === 3 ||
|
|
84
|
+
result.error ||
|
|
85
|
+
result.isError === true ||
|
|
86
|
+
result.success === false ||
|
|
87
|
+
result.ok === false) {
|
|
88
|
+
return true;
|
|
89
|
+
}
|
|
90
|
+
switch (name) {
|
|
91
|
+
case "get_node_info":
|
|
92
|
+
case "search_nodes":
|
|
93
|
+
return result.status === "error";
|
|
94
|
+
case "run_node":
|
|
95
|
+
case "run_workflow":
|
|
96
|
+
case "resolve_workflow_escalation":
|
|
97
|
+
return result.status === "failed" || result.status === "error";
|
|
98
|
+
case "debug_app":
|
|
99
|
+
return (result.status === "failed" ||
|
|
100
|
+
(isRecord(result.verdict) && result.verdict.ok === false));
|
|
101
|
+
case "debug_workflow":
|
|
102
|
+
return (isRecord(result.run) &&
|
|
103
|
+
(result.run.status === "failed" ||
|
|
104
|
+
result.run.status === "error" ||
|
|
105
|
+
Boolean(result.run.error) ||
|
|
106
|
+
(isRecord(result.run.verdict) && result.run.verdict.ok === false)));
|
|
107
|
+
default:
|
|
108
|
+
return false;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
export const AUTHORING_HELP = `
|
|
112
|
+
Authoring tools and starting documents:
|
|
113
|
+
nodetool tools list timeline
|
|
114
|
+
nodetool tools info create_timeline
|
|
115
|
+
nodetool skills list
|
|
116
|
+
nodetool skills read storyboard-core
|
|
117
|
+
nodetool skills read motion-graphics
|
|
118
|
+
nodetool skills read nodetool-workflow-builder
|
|
119
|
+
nodetool skills read nodetool-app-builder
|
|
120
|
+
nodetool skills read native-game
|
|
121
|
+
nodetool tools call list_projects
|
|
122
|
+
nodetool tools call create_timeline --args '{"name":"My timeline"}'
|
|
123
|
+
nodetool tools call <name> --args @arguments.json
|
|
124
|
+
|
|
125
|
+
Tools expose their current input schemas. Read the matching shipped guide
|
|
126
|
+
before creating workflows, timelines, motion graphics, mini apps, or games.
|
|
127
|
+
`;
|
|
128
|
+
export function registerAuthoringCommands(program, load = localTools) {
|
|
129
|
+
const run = async (name, args) => {
|
|
130
|
+
try {
|
|
131
|
+
const result = await (await load()).call(name, args);
|
|
132
|
+
asJson(result);
|
|
133
|
+
if (toolCallFailed(name, result)) {
|
|
134
|
+
const failure = name === "debug_workflow" && isRecord(result) && isRecord(result.run)
|
|
135
|
+
? result.run
|
|
136
|
+
: result;
|
|
137
|
+
process.exitCode = commandFailureExitCode(failure);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
catch (error) {
|
|
141
|
+
process.exitCode = printCommandError(error, true);
|
|
142
|
+
}
|
|
143
|
+
};
|
|
144
|
+
const tools = program
|
|
145
|
+
.command("tools")
|
|
146
|
+
.description("Discover tool schemas and call local authoring tools")
|
|
147
|
+
.addHelpText("after", AUTHORING_HELP);
|
|
148
|
+
tools
|
|
149
|
+
.command("list [query]")
|
|
150
|
+
.description("List tool names and descriptions, optionally filtered")
|
|
151
|
+
.action(async (query) => {
|
|
152
|
+
const matches = (await (await load()).list()).filter((tool) => !query ||
|
|
153
|
+
`${tool.name} ${tool.description}`
|
|
154
|
+
.toLowerCase()
|
|
155
|
+
.includes(query.toLowerCase()));
|
|
156
|
+
asJson(matches.map((tool) => ({
|
|
157
|
+
name: tool.name,
|
|
158
|
+
description: tool.description
|
|
159
|
+
})));
|
|
160
|
+
});
|
|
161
|
+
tools
|
|
162
|
+
.command("info <name>")
|
|
163
|
+
.description("Print the authoritative input schema for a tool")
|
|
164
|
+
.action(async (name) => {
|
|
165
|
+
const tool = (await (await load()).list()).find((candidate) => candidate.name === name);
|
|
166
|
+
if (!tool) {
|
|
167
|
+
throw new Error(`Unknown tool: ${name}. Use nodetool tools list.`);
|
|
168
|
+
}
|
|
169
|
+
asJson({
|
|
170
|
+
name: tool.name,
|
|
171
|
+
description: tool.description,
|
|
172
|
+
inputSchema: tool.inputSchema
|
|
173
|
+
});
|
|
174
|
+
});
|
|
175
|
+
tools
|
|
176
|
+
.command("call <name>")
|
|
177
|
+
.description("Execute a local tool. Calls can save documents, run jobs, or use configured providers.")
|
|
178
|
+
.option("--args <json|@file>", "JSON arguments, inline or read from a file", "{}")
|
|
179
|
+
.action(async (name, options) => run(name, await parseToolArguments(options.args)));
|
|
180
|
+
const skills = program
|
|
181
|
+
.command("skills")
|
|
182
|
+
.description("Find and read installed authoring guides and user skills");
|
|
183
|
+
skills
|
|
184
|
+
.command("list [query]")
|
|
185
|
+
.description("Search the installed skill catalog")
|
|
186
|
+
.action(async (query) => run("list_skills", query ? { query } : {}));
|
|
187
|
+
skills
|
|
188
|
+
.command("read <name>")
|
|
189
|
+
.description("Read a guide, including its starting examples and tool instructions")
|
|
190
|
+
.action(async (name) => run("load_skill", { name }));
|
|
191
|
+
program.addHelpText("after", AUTHORING_HELP);
|
|
192
|
+
for (const name of [
|
|
193
|
+
"timeline",
|
|
194
|
+
"game",
|
|
195
|
+
"app",
|
|
196
|
+
"apps",
|
|
197
|
+
"workflows",
|
|
198
|
+
"jsscript",
|
|
199
|
+
"sketch"
|
|
200
|
+
]) {
|
|
201
|
+
program.commands
|
|
202
|
+
.find((command) => command.name() === name)
|
|
203
|
+
?.addHelpText("after", AUTHORING_HELP);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
//# sourceMappingURL=tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/commands/tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -242,7 +242,7 @@ export const CAPABILITY_COVERAGE = [
|
|
|
242
242
|
name: "export_workflow_digraph",
|
|
243
243
|
module: "workflows",
|
|
244
244
|
impl: "packages/agents/src/capabilities/workflows.ts",
|
|
245
|
-
contract: "
|
|
245
|
+
contract: "e77dc5f2c0d1",
|
|
246
246
|
selfcheck: "capability-suites",
|
|
247
247
|
suites: [
|
|
248
248
|
"packages/agents/tests/mcp-tools.test.ts",
|
|
@@ -1271,7 +1271,7 @@ export const CAPABILITY_COVERAGE = [
|
|
|
1271
1271
|
name: "edit_app",
|
|
1272
1272
|
module: "apps",
|
|
1273
1273
|
impl: "packages/agents/src/capabilities/apps.ts",
|
|
1274
|
-
contract: "
|
|
1274
|
+
contract: "5d71cf4b7e8e",
|
|
1275
1275
|
selfcheck: "capability-suites",
|
|
1276
1276
|
suites: [
|
|
1277
1277
|
"packages/agents/tests/capabilities-apps.test.ts",
|
|
@@ -2644,8 +2644,8 @@ export const CAPABILITY_COVERAGE = [
|
|
|
2644
2644
|
suites: [
|
|
2645
2645
|
"packages/agents/tests/capabilities-game.test.ts",
|
|
2646
2646
|
"packages/agents/tests/capabilities-game3d.test.ts",
|
|
2647
|
+
"packages/agents/tests/capabilities-game-assertions.test.ts",
|
|
2647
2648
|
"packages/agents/tests/capabilities-game-asset-browser.test.ts",
|
|
2648
|
-
"packages/agents/tests/capabilities-game-authoring.test.ts",
|
|
2649
2649
|
],
|
|
2650
2650
|
evals: [
|
|
2651
2651
|
{
|
|
@@ -2702,13 +2702,13 @@ export const CAPABILITY_COVERAGE = [
|
|
|
2702
2702
|
name: "playtest_native_game",
|
|
2703
2703
|
module: "game",
|
|
2704
2704
|
impl: "packages/agents/src/capabilities/game.ts",
|
|
2705
|
-
contract: "
|
|
2705
|
+
contract: "7b0863b4985f",
|
|
2706
2706
|
selfcheck: "capability-suites",
|
|
2707
2707
|
suites: [
|
|
2708
2708
|
"packages/agents/tests/capabilities-game.test.ts",
|
|
2709
2709
|
"packages/agents/tests/capabilities-game3d.test.ts",
|
|
2710
|
+
"packages/agents/tests/capabilities-game-assertions.test.ts",
|
|
2710
2711
|
"packages/agents/tests/capabilities-game-autoplay.test.ts",
|
|
2711
|
-
"packages/agents/tests/game-asset-pipeline.test.ts",
|
|
2712
2712
|
],
|
|
2713
2713
|
},
|
|
2714
2714
|
{
|
|
@@ -2731,8 +2731,8 @@ export const CAPABILITY_COVERAGE = [
|
|
|
2731
2731
|
suites: [
|
|
2732
2732
|
"packages/agents/tests/capabilities-game.test.ts",
|
|
2733
2733
|
"packages/agents/tests/capabilities-game3d.test.ts",
|
|
2734
|
+
"packages/agents/tests/capabilities-game-assertions.test.ts",
|
|
2734
2735
|
"packages/agents/tests/capabilities-game-authoring.test.ts",
|
|
2735
|
-
"packages/agents/tests/capabilities-game-autoplay.test.ts",
|
|
2736
2736
|
],
|
|
2737
2737
|
evals: [
|
|
2738
2738
|
{
|
|
@@ -2741,7 +2741,7 @@ export const CAPABILITY_COVERAGE = [
|
|
|
2741
2741
|
},
|
|
2742
2742
|
{
|
|
2743
2743
|
file: "packages/agents/src/evals/surfaces/game.ts",
|
|
2744
|
-
cases: ["audio-mixer-buses", "cascaded-shadows", "collision-layer-matrix", "entity-tags-properties", "environment-preset-3d", "forces-and-torques-3d", "hud-widget-tree", "hud-widget-tree-3d", "input-bindings", "lifecycle-timer-script", "material-system-3d", "particle-emitter", "particle-rendering", "particle-rendering-3d", "physics-materials", "player-saves-script", "post-processing", "procedural-sky", "render-culling", "script-parameters", "spatial-audio-source", "typed-event-script"],
|
|
2744
|
+
cases: ["audio-mixer-buses", "cascaded-shadows", "collision-layer-matrix", "entity-tags-properties", "environment-preset-3d", "forces-and-torques-3d", "height-fog-and-decals-3d", "hud-widget-tree", "hud-widget-tree-3d", "input-bindings", "lifecycle-timer-script", "material-system-3d", "particle-emitter", "particle-rendering", "particle-rendering-3d", "physics-materials", "player-saves-script", "post-processing", "procedural-sky", "render-culling", "script-parameters", "spatial-audio-source", "typed-event-script"],
|
|
2745
2745
|
},
|
|
2746
2746
|
],
|
|
2747
2747
|
},
|
|
@@ -3086,7 +3086,7 @@ export const CAPABILITY_COVERAGE = [
|
|
|
3086
3086
|
name: "edit_storyboard",
|
|
3087
3087
|
module: "storyboards",
|
|
3088
3088
|
impl: "packages/agents/src/capabilities/storyboards.ts",
|
|
3089
|
-
contract: "
|
|
3089
|
+
contract: "a2f214d7936b",
|
|
3090
3090
|
selfcheck: "capability-suites",
|
|
3091
3091
|
suites: [
|
|
3092
3092
|
"packages/agents/tests/capabilities-storyboards.test.ts",
|