@martini-film/cli 0.1.0 → 0.3.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/README.md +49 -28
- package/dist/api.js +38 -14
- package/dist/api.js.map +1 -1
- package/dist/approve.js +83 -0
- package/dist/approve.js.map +1 -0
- package/dist/args.js +33 -12
- package/dist/args.js.map +1 -1
- package/dist/cli.js +202 -64
- package/dist/cli.js.map +1 -1
- package/dist/commands/assets.js +255 -46
- package/dist/commands/assets.js.map +1 -1
- package/dist/commands/context.js +42 -8
- package/dist/commands/context.js.map +1 -1
- package/dist/commands/files.js +135 -95
- package/dist/commands/files.js.map +1 -1
- package/dist/commands/login.js +171 -30
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/tools.js +73 -12
- package/dist/commands/tools.js.map +1 -1
- package/dist/config.js +10 -19
- package/dist/config.js.map +1 -1
- package/dist/generated/manifest.json +18393 -5431
- package/dist/help.js +203 -18
- package/dist/help.js.map +1 -1
- package/dist/host.js +0 -6
- package/dist/host.js.map +1 -1
- package/dist/manifest.js +9 -10
- package/dist/manifest.js.map +1 -1
- package/dist/output.js +149 -20
- package/dist/output.js.map +1 -1
- package/dist/schema.js +103 -30
- package/dist/schema.js.map +1 -1
- package/dist/wait.js +211 -29
- package/dist/wait.js.map +1 -1
- package/package.json +1 -1
package/dist/commands/tools.js
CHANGED
|
@@ -6,21 +6,30 @@ import { join } from 'node:path';
|
|
|
6
6
|
import { CLI_VERSION, CliApiError } from '../api.js';
|
|
7
7
|
import { flagBoolean, flagString } from '../args.js';
|
|
8
8
|
import { userConfigPath } from '../config.js';
|
|
9
|
+
import { SUPERSEDED_BY_COMPOUND } from '../help.js';
|
|
9
10
|
import { loadManifest } from '../manifest.js';
|
|
10
11
|
import { ArgumentError } from '../schema.js';
|
|
11
12
|
import { requireProject } from './context.js';
|
|
12
|
-
/** `martini tools`: the manifest this build carries, and whether the server's differs. */
|
|
13
13
|
export const tools = {
|
|
14
14
|
name: 'tools',
|
|
15
15
|
summary: 'List the tools this build knows (and warn when the server has a newer manifest)',
|
|
16
|
-
usage: 'martini tools [--remote] [--fields name,description]',
|
|
16
|
+
usage: 'martini tools [--remote] [--fields tools.name,tools.description]',
|
|
17
|
+
details: 'Result: { hash, serverHash, upToDate, tools: [{ name, description, readOnly, requiresActions, supersededBy? }] }. supersededBy names the compound command to prefer (upload, download). upToDate false means the server has tools or arguments this build does not know: pass such arguments with --json, or update with npx @martini-film/cli@latest.',
|
|
18
|
+
flags: [
|
|
19
|
+
{
|
|
20
|
+
flag: 'remote',
|
|
21
|
+
kind: 'boolean',
|
|
22
|
+
description: "Print the server's manifest (full JSON Schemas) instead of this build's list",
|
|
23
|
+
},
|
|
24
|
+
],
|
|
25
|
+
examples: ['martini tools --fields upToDate,tools.name'],
|
|
17
26
|
async run(context) {
|
|
18
|
-
const local =
|
|
27
|
+
const local = context.manifest;
|
|
19
28
|
if (flagBoolean(context.flags, 'remote'))
|
|
20
29
|
return context.client.listTools();
|
|
21
30
|
let serverHash = null;
|
|
22
31
|
try {
|
|
23
|
-
serverHash =
|
|
32
|
+
serverHash = await context.client.serverManifestHash(local.hash);
|
|
24
33
|
}
|
|
25
34
|
catch {
|
|
26
35
|
serverHash = null;
|
|
@@ -34,16 +43,40 @@ export const tools = {
|
|
|
34
43
|
description: tool.description,
|
|
35
44
|
readOnly: tool.annotations.readOnlyHint,
|
|
36
45
|
requiresActions: tool.requiresActions,
|
|
46
|
+
...(SUPERSEDED_BY_COMPOUND[tool.name] ? { supersededBy: SUPERSEDED_BY_COMPOUND[tool.name] } : {}),
|
|
37
47
|
})),
|
|
38
48
|
};
|
|
39
49
|
},
|
|
40
50
|
};
|
|
41
51
|
const MODELS_CACHE_TTL_MS = 60 * 60 * 1000;
|
|
42
|
-
/** `martini models`: get_models with a one-hour local cache — the catalog is ~10 KB and was fetched in 153 of 194 runs. */
|
|
43
52
|
export const models = {
|
|
44
53
|
name: 'models',
|
|
45
54
|
summary: 'The model catalog (cached for an hour; --refresh to refetch; --query/--capability to narrow)',
|
|
46
55
|
usage: 'martini models [--query <text>] [--capability <name>] [--detail summary|full] [--refresh]',
|
|
56
|
+
details: 'get_models with a one-hour local cache per argument set (the catalog is ~10 KB and rarely changes).',
|
|
57
|
+
flags: [
|
|
58
|
+
{
|
|
59
|
+
flag: 'query',
|
|
60
|
+
kind: 'string',
|
|
61
|
+
value: '<text>',
|
|
62
|
+
description: 'Narrow by a natural-language model or provider name',
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
flag: 'capability',
|
|
66
|
+
kind: 'string',
|
|
67
|
+
value: '<name>',
|
|
68
|
+
description: 'Narrow to one capability (generate-video, generate-still, generate-audio, …)',
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
flag: 'detail',
|
|
72
|
+
kind: 'string',
|
|
73
|
+
value: 'summary|full',
|
|
74
|
+
enum: ['summary', 'full'],
|
|
75
|
+
description: 'How much of each model to print',
|
|
76
|
+
},
|
|
77
|
+
{ flag: 'refresh', kind: 'boolean', description: 'Ignore the cache and refetch' },
|
|
78
|
+
],
|
|
79
|
+
examples: ['martini models --capability generate-video --fields models.id,models.name'],
|
|
47
80
|
async run(context) {
|
|
48
81
|
const args = {};
|
|
49
82
|
const query = flagString(context.flags, 'query');
|
|
@@ -64,7 +97,6 @@ export const models = {
|
|
|
64
97
|
return cached.result;
|
|
65
98
|
}
|
|
66
99
|
catch {
|
|
67
|
-
// A corrupt cache is just a miss.
|
|
68
100
|
}
|
|
69
101
|
}
|
|
70
102
|
const result = await context.client.callTool('get_models', args);
|
|
@@ -73,11 +105,16 @@ export const models = {
|
|
|
73
105
|
return result;
|
|
74
106
|
},
|
|
75
107
|
};
|
|
76
|
-
/** Run ffprobe on one local file and reduce its JSON to what a session usually wants. */
|
|
77
108
|
export function probeFile(path, run = spawnSync) {
|
|
78
109
|
const probe = run('ffprobe', ['-v', 'quiet', '-print_format', 'json', '-show_format', '-show_streams', path], {
|
|
79
110
|
encoding: 'utf8',
|
|
80
111
|
});
|
|
112
|
+
if (probe.error?.code === 'ENOENT') {
|
|
113
|
+
throw new CliApiError('ffprobe is not installed or not on PATH; martini probe needs it.', {
|
|
114
|
+
code: 'FFPROBE_MISSING',
|
|
115
|
+
status: 0,
|
|
116
|
+
});
|
|
117
|
+
}
|
|
81
118
|
if (probe.error || probe.status !== 0) {
|
|
82
119
|
throw new CliApiError(`ffprobe failed for ${path}${probe.stderr ? `: ${String(probe.stderr).trim()}` : ''}`, {
|
|
83
120
|
code: 'PROBE_FAILED',
|
|
@@ -109,14 +146,28 @@ export function probeFile(path, run = spawnSync) {
|
|
|
109
146
|
sha256: createHash('sha256').update(bytes).digest('hex'),
|
|
110
147
|
};
|
|
111
148
|
}
|
|
112
|
-
/**
|
|
113
|
-
* `martini probe <path|asset-id>…`: the measurement loop (download, ffprobe,
|
|
114
|
-
* checksum) in one command, so a session stops re-deriving it in shell steps.
|
|
115
|
-
*/
|
|
116
149
|
export const probe = {
|
|
117
150
|
name: 'probe',
|
|
118
151
|
summary: 'Measure local files or assets: duration, resolution, fps, codecs, channels, sha256 (needs ffprobe)',
|
|
119
152
|
usage: 'martini probe <path|asset-id>… [--dir <download-dir>]',
|
|
153
|
+
details: 'Result: { reports: [{ path, assetId?, bytes, durationSec, width, height, fps, videoCodec, audioCodec, audioChannels, sampleRate, sha256 }] }. An argument that is not an existing file is treated as an asset id and downloaded first (needs a project).',
|
|
154
|
+
positionals: [
|
|
155
|
+
{
|
|
156
|
+
name: 'path|asset-id',
|
|
157
|
+
description: 'Local files, or asset ids to download and measure',
|
|
158
|
+
variadic: true,
|
|
159
|
+
required: true,
|
|
160
|
+
},
|
|
161
|
+
],
|
|
162
|
+
flags: [
|
|
163
|
+
{
|
|
164
|
+
flag: 'dir',
|
|
165
|
+
kind: 'string',
|
|
166
|
+
value: '<download-dir>',
|
|
167
|
+
description: 'Where downloaded assets are kept (default: martini-probe under the temp dir)',
|
|
168
|
+
},
|
|
169
|
+
],
|
|
170
|
+
examples: ['martini probe ./take.mp4 <asset-id>'],
|
|
120
171
|
async run(context) {
|
|
121
172
|
if (context.positionals.length === 0)
|
|
122
173
|
throw new ArgumentError('Give file paths or asset ids to probe.');
|
|
@@ -151,14 +202,23 @@ Martini is available as the \`martini\` command (every MCP tool is a subcommand;
|
|
|
151
202
|
- \`martini <generation tool> … --wait\` blocks until the asset is ready; \`martini wait <ids…>\` resumes a wait.
|
|
152
203
|
- \`martini files pull dir/\` / \`martini files push dir/\` edit project memory files locally with conflict checks.
|
|
153
204
|
- Any argument can be JSON: \`--json @args.json\`. Results are JSON on stdout; \`--fields a,b\` trims them; \`--out f\` writes them.
|
|
205
|
+
- A wait stops at \`--timeout\` (default 50 s) with exit 4 but still prints the result and the pending ids; resume with \`martini wait <ids…> --timeout N\`, sized to your shell step.
|
|
206
|
+
- Tools that quote first (\`generate_nodes\`, \`upscale_assets\`, \`enhance_draft\`): \`--approve --max-olives N\` takes the quote and approves it under the cap in one command; over the cap nothing starts.
|
|
154
207
|
|
|
155
208
|
Exit codes: 0 ok · 1 tool error · 2 usage · 3 auth · 4 not ready or timed out · 5 insufficient olives.
|
|
156
209
|
`;
|
|
157
|
-
/** `martini init`: the AGENTS.md snippet that teaches a repo's agents to use the CLI. */
|
|
158
210
|
export const init = {
|
|
159
211
|
name: 'init',
|
|
160
212
|
summary: 'Print (or append to AGENTS.md with --write) the snippet that teaches agents to use the CLI',
|
|
161
213
|
usage: 'martini init [--write [path]]',
|
|
214
|
+
positionals: [{ name: 'path', description: 'With --write: the file to append to (default ./AGENTS.md)' }],
|
|
215
|
+
flags: [
|
|
216
|
+
{
|
|
217
|
+
flag: 'write',
|
|
218
|
+
kind: 'boolean',
|
|
219
|
+
description: 'Append the snippet to the file instead of printing it (skipped when already present)',
|
|
220
|
+
},
|
|
221
|
+
],
|
|
162
222
|
async run(context) {
|
|
163
223
|
if (flagBoolean(context.flags, 'write')) {
|
|
164
224
|
const target = context.positionals[0] ?? join(context.cwd, 'AGENTS.md');
|
|
@@ -175,6 +235,7 @@ export const version = {
|
|
|
175
235
|
name: 'version',
|
|
176
236
|
summary: 'The CLI version, the manifest hash it was built from, and the config file paths',
|
|
177
237
|
usage: 'martini version',
|
|
238
|
+
details: 'Result: { version, manifestHash, tools, userConfig }. martini --version prints the same.',
|
|
178
239
|
async run(context) {
|
|
179
240
|
const manifest = loadManifest();
|
|
180
241
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/commands/tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAC5E,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAChC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAEhC,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AACpD,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAC5C,OAAO,EAAE,cAAc,EAA6C,MAAM,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/commands/tools.ts"],"names":[],"mappings":"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"}
|
package/dist/config.js
CHANGED
|
@@ -1,17 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Where the CLI's credential and context come from, most specific first:
|
|
3
|
-
*
|
|
4
|
-
* 1. flags --api-key, --api-url, --project, --canvas, --run, --profile
|
|
5
|
-
* 2. environment MARTINI_API_KEY, MARTINI_API_URL, MARTINI_PROJECT_ID, MARTINI_CANVAS_ID,
|
|
6
|
-
* MARTINI_RUN_ID, MARTINI_PROFILE, MARTINI_CONFIG_FILE
|
|
7
|
-
* 3. the nearest .martini/config.json above the working directory — what the workflow
|
|
8
|
-
* workspace file harness writes into a run's sandbox (a `run` profile)
|
|
9
|
-
* 4. the user file ~/.config/martini/config.json — profiles `martini login` saves, one per
|
|
10
|
-
* organization, with a default
|
|
11
|
-
*
|
|
12
|
-
* A run's sandbox therefore needs nothing but its working directory; a laptop
|
|
13
|
-
* needs one `martini login`; a script sets two environment variables.
|
|
14
|
-
*/
|
|
15
1
|
import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
16
2
|
import { homedir } from 'node:os';
|
|
17
3
|
import { dirname, join, resolve } from 'node:path';
|
|
@@ -35,7 +21,6 @@ export function readJsonFile(path) {
|
|
|
35
21
|
return null;
|
|
36
22
|
}
|
|
37
23
|
}
|
|
38
|
-
/** The closest `.martini/config.json` at or above `cwd`. */
|
|
39
24
|
export function findWorkspaceConfig(cwd) {
|
|
40
25
|
let dir = resolve(cwd);
|
|
41
26
|
for (;;) {
|
|
@@ -56,9 +41,9 @@ export function resolveConfig(flags, options = {}) {
|
|
|
56
41
|
const fromFlags = defined({
|
|
57
42
|
apiKey: flagString(flags, 'api-key'),
|
|
58
43
|
apiUrl: flagString(flags, 'api-url'),
|
|
59
|
-
projectId: flagString(flags, 'project'),
|
|
60
|
-
canvasId: flagString(flags, 'canvas'),
|
|
61
|
-
runId: flagString(flags, 'run'),
|
|
44
|
+
projectId: flagString(flags, 'project') ?? flagString(flags, 'project-id'),
|
|
45
|
+
canvasId: flagString(flags, 'canvas') ?? flagString(flags, 'canvas-id'),
|
|
46
|
+
runId: flagString(flags, 'run') ?? flagString(flags, 'run-id'),
|
|
62
47
|
});
|
|
63
48
|
const fromEnv = defined({
|
|
64
49
|
apiKey: env.MARTINI_API_KEY,
|
|
@@ -69,6 +54,7 @@ export function resolveConfig(flags, options = {}) {
|
|
|
69
54
|
});
|
|
70
55
|
let source = 'flags/env';
|
|
71
56
|
let fileProfile = {};
|
|
57
|
+
const warnings = [];
|
|
72
58
|
const workspace = findWorkspaceConfig(cwd);
|
|
73
59
|
const requestedProfile = flagString(flags, 'profile') ?? env.MARTINI_PROFILE;
|
|
74
60
|
if (workspace && !requestedProfile) {
|
|
@@ -77,6 +63,9 @@ export function resolveConfig(flags, options = {}) {
|
|
|
77
63
|
}
|
|
78
64
|
else {
|
|
79
65
|
const user = readJsonFile(userConfigPath(env));
|
|
66
|
+
if (user && typeof user.defaultProfile === 'string' && !user.default) {
|
|
67
|
+
warnings.push(`${userConfigPath(env)} sets "defaultProfile", which the CLI does not read. Rename it to "default" to make that profile the default.`);
|
|
68
|
+
}
|
|
80
69
|
const name = requestedProfile ?? user?.default;
|
|
81
70
|
const profile = name && user?.profiles ? user.profiles[name] : undefined;
|
|
82
71
|
if (profile) {
|
|
@@ -94,10 +83,12 @@ export function resolveConfig(flags, options = {}) {
|
|
|
94
83
|
projectId: merged.projectId,
|
|
95
84
|
canvasId: merged.canvasId,
|
|
96
85
|
runId: merged.runId,
|
|
86
|
+
executionId: merged.executionId,
|
|
87
|
+
workerId: merged.workerId,
|
|
97
88
|
source,
|
|
89
|
+
warnings,
|
|
98
90
|
};
|
|
99
91
|
}
|
|
100
|
-
/** Save a profile from `martini login`; the first saved profile becomes the default. */
|
|
101
92
|
export function saveProfile(name, profile, options = {}) {
|
|
102
93
|
const path = userConfigPath(options.env ?? process.env);
|
|
103
94
|
const current = readJsonFile(path) ?? {};
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|