@martini-film/cli 0.2.0 → 0.4.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 +173 -56
- package/dist/api.js +69 -2
- package/dist/api.js.map +1 -1
- package/dist/approve.js +2 -1
- package/dist/approve.js.map +1 -1
- package/dist/args.js +31 -6
- package/dist/args.js.map +1 -1
- package/dist/cli.js +457 -110
- package/dist/cli.js.map +1 -1
- package/dist/commands/assets.js +297 -45
- package/dist/commands/assets.js.map +1 -1
- package/dist/commands/call.js +99 -0
- package/dist/commands/call.js.map +1 -0
- package/dist/commands/context.js +16 -3
- package/dist/commands/context.js.map +1 -1
- package/dist/commands/files.js +208 -83
- package/dist/commands/files.js.map +1 -1
- package/dist/commands/guide.js +67 -0
- package/dist/commands/guide.js.map +1 -0
- package/dist/commands/init.js +196 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/login.js +69 -15
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/tools.js +63 -78
- package/dist/commands/tools.js.map +1 -1
- package/dist/commands/use.js +143 -0
- package/dist/commands/use.js.map +1 -0
- package/dist/config.js +87 -6
- package/dist/config.js.map +1 -1
- package/dist/generated/guide.json +104 -0
- package/dist/generated/manifest.json +3885 -241
- package/dist/guideCache.js +204 -0
- package/dist/guideCache.js.map +1 -0
- package/dist/help.js +391 -34
- package/dist/help.js.map +1 -1
- package/dist/manifest.js +34 -3
- package/dist/manifest.js.map +1 -1
- package/dist/manifestCache.js +196 -0
- package/dist/manifestCache.js.map +1 -0
- package/dist/output.js +251 -28
- package/dist/output.js.map +1 -1
- package/dist/schema.js +132 -15
- package/dist/schema.js.map +1 -1
- package/dist/wait.js +181 -8
- package/dist/wait.js.map +1 -1
- package/package.json +2 -2
package/dist/commands/tools.js
CHANGED
|
@@ -5,46 +5,63 @@ import { tmpdir } from 'node:os';
|
|
|
5
5
|
import { join } from 'node:path';
|
|
6
6
|
import { CLI_VERSION, CliApiError } from '../api.js';
|
|
7
7
|
import { flagBoolean, flagString } from '../args.js';
|
|
8
|
-
import { userConfigPath } from '../config.js';
|
|
8
|
+
import { cacheDir, userConfigPath } from '../config.js';
|
|
9
9
|
import { SUPERSEDED_BY_COMPOUND } from '../help.js';
|
|
10
|
-
import {
|
|
11
|
-
import { ArgumentError } from '../schema.js';
|
|
12
|
-
import { requireProject } from './context.js';
|
|
10
|
+
import { compareManifests } from '../manifest.js';
|
|
11
|
+
import { ArgumentError, bareAssetId } from '../schema.js';
|
|
12
|
+
import { requireProject, selectedFields } from './context.js';
|
|
13
13
|
export const tools = {
|
|
14
14
|
name: 'tools',
|
|
15
|
-
summary:
|
|
16
|
-
usage: 'martini tools [--remote] [--fields tools.name
|
|
17
|
-
details:
|
|
15
|
+
summary: "How the server's tool list differs from this build's (--list adds every tool commands run with)",
|
|
16
|
+
usage: 'martini tools [--list] [--refresh] [--remote] [--fields serverOnly,changed,tools.name]',
|
|
17
|
+
details: "Asks the server for its tool list first (one conditional request; MARTINI_MANIFEST_REFRESH=0 skips it) and keeps it in the local cache, so a tool or argument the server added since this build works as a command. Result: { source, hash, serverHash, fetchedAt?, upToDate, serverOnly, buildOnly, changed, count } — a few hundred bytes. --list (or a tools.… path in --fields) adds tools: [{ name, description, readOnly, requiresActions, supersededBy? }], every tool with its description, about 70 KB: ask for it with --fields tools.name when the names are enough, and read one tool with martini <tool> --help. source: cache when commands run with the server's list (fetched at fetchedAt), baked when with this build's. hash: this build's manifest hash; serverHash: the server's for this key. serverOnly: tools the server has that this build lacks; buildOnly: tools this build has that the server does not list for this key (Actions tools without access, or retired ones); changed: tools whose arguments differ. upToDate: true when serverOnly and changed are both empty. Those four and serverHash are null while the server's list is unknown (offline, or MARTINI_MANIFEST_REFRESH=0 with nothing cached). With the list cached, serverOnly and changed already work as commands and flags; npx @martini-film/cli@latest updates the build itself. count is how many tools commands run with; supersededBy names the compound command to prefer (upload, download).",
|
|
18
|
+
readOnly: true,
|
|
18
19
|
flags: [
|
|
20
|
+
{
|
|
21
|
+
flag: 'list',
|
|
22
|
+
kind: 'boolean',
|
|
23
|
+
description: 'Add tools: every tool commands run with, with its description (large; narrow it with --fields)',
|
|
24
|
+
},
|
|
25
|
+
{ flag: 'refresh', kind: 'boolean', description: "Fetch the server's whole tool list, ignoring the cached one" },
|
|
19
26
|
{
|
|
20
27
|
flag: 'remote',
|
|
21
28
|
kind: 'boolean',
|
|
22
|
-
description: "Print the server's manifest (full JSON Schemas) instead of
|
|
29
|
+
description: "Print the server's manifest (full JSON Schemas) instead of the summary",
|
|
23
30
|
},
|
|
24
31
|
],
|
|
25
|
-
examples: ['martini tools --fields
|
|
32
|
+
examples: ['martini tools', 'martini tools --fields tools.name', 'martini tools --refresh --fields source,fetchedAt'],
|
|
26
33
|
async run(context) {
|
|
27
|
-
const
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
serverHash = (await context.client.listTools()).hash;
|
|
33
|
-
}
|
|
34
|
-
catch {
|
|
35
|
-
serverHash = null;
|
|
34
|
+
const remote = flagBoolean(context.flags, 'remote') === true;
|
|
35
|
+
await context.manifests.refresh({ force: remote || flagBoolean(context.flags, 'refresh') === true });
|
|
36
|
+
if (remote) {
|
|
37
|
+
const known = context.manifests.state;
|
|
38
|
+
return known.server ?? { ...known.manifest, source: known.source };
|
|
36
39
|
}
|
|
40
|
+
const state = context.manifests.state;
|
|
41
|
+
const diff = state.server ? compareManifests(state.baked, state.server) : null;
|
|
42
|
+
const listed = flagBoolean(context.flags, 'list') === true ||
|
|
43
|
+
selectedFields(context).some(path => path === 'tools' || path.startsWith('tools.'));
|
|
37
44
|
return {
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
45
|
+
source: state.source,
|
|
46
|
+
hash: state.baked.hash,
|
|
47
|
+
serverHash: state.server?.hash ?? null,
|
|
48
|
+
...(state.fetchedAt ? { fetchedAt: state.fetchedAt } : {}),
|
|
49
|
+
upToDate: diff ? diff.serverOnly.length === 0 && diff.changed.length === 0 : null,
|
|
50
|
+
serverOnly: diff?.serverOnly ?? null,
|
|
51
|
+
buildOnly: diff?.buildOnly ?? null,
|
|
52
|
+
changed: diff?.changed ?? null,
|
|
53
|
+
count: state.manifest.tools.length,
|
|
54
|
+
...(listed
|
|
55
|
+
? {
|
|
56
|
+
tools: state.manifest.tools.map(tool => ({
|
|
57
|
+
name: tool.name,
|
|
58
|
+
description: tool.description,
|
|
59
|
+
readOnly: tool.annotations.readOnlyHint,
|
|
60
|
+
requiresActions: tool.requiresActions,
|
|
61
|
+
...(SUPERSEDED_BY_COMPOUND[tool.name] ? { supersededBy: SUPERSEDED_BY_COMPOUND[tool.name] } : {}),
|
|
62
|
+
})),
|
|
63
|
+
}
|
|
64
|
+
: {}),
|
|
48
65
|
};
|
|
49
66
|
},
|
|
50
67
|
};
|
|
@@ -54,6 +71,7 @@ export const models = {
|
|
|
54
71
|
summary: 'The model catalog (cached for an hour; --refresh to refetch; --query/--capability to narrow)',
|
|
55
72
|
usage: 'martini models [--query <text>] [--capability <name>] [--detail summary|full] [--refresh]',
|
|
56
73
|
details: 'get_models with a one-hour local cache per argument set (the catalog is ~10 KB and rarely changes).',
|
|
74
|
+
readOnly: true,
|
|
57
75
|
flags: [
|
|
58
76
|
{
|
|
59
77
|
flag: 'query',
|
|
@@ -88,8 +106,8 @@ export const models = {
|
|
|
88
106
|
args.capability = capability;
|
|
89
107
|
if (detail)
|
|
90
108
|
args.detailLevel = detail;
|
|
91
|
-
const
|
|
92
|
-
const cachePath = join(
|
|
109
|
+
const directory = cacheDir(context.env);
|
|
110
|
+
const cachePath = join(directory, `models-${Buffer.from(JSON.stringify(args)).toString('base64url')}.json`);
|
|
93
111
|
if (!flagBoolean(context.flags, 'refresh') && existsSync(cachePath)) {
|
|
94
112
|
try {
|
|
95
113
|
const cached = JSON.parse(readFileSync(cachePath, 'utf8'));
|
|
@@ -100,7 +118,7 @@ export const models = {
|
|
|
100
118
|
}
|
|
101
119
|
}
|
|
102
120
|
const result = await context.client.callTool('get_models', args);
|
|
103
|
-
mkdirSync(
|
|
121
|
+
mkdirSync(directory, { recursive: true });
|
|
104
122
|
writeFileSync(cachePath, JSON.stringify({ fetchedAt: context.now(), result }));
|
|
105
123
|
return result;
|
|
106
124
|
},
|
|
@@ -179,69 +197,36 @@ export const probe = {
|
|
|
179
197
|
continue;
|
|
180
198
|
}
|
|
181
199
|
const projectId = requireProject(context);
|
|
200
|
+
const assetId = bareAssetId(target);
|
|
182
201
|
const link = await context.client.callTool('get_asset_download_url', {
|
|
183
202
|
projectId,
|
|
184
|
-
assetId
|
|
203
|
+
assetId,
|
|
185
204
|
});
|
|
186
205
|
const { bytes } = await context.client.fetchBytes(link.downloadUrl);
|
|
187
206
|
mkdirSync(dir, { recursive: true });
|
|
188
|
-
const path = join(dir, link.suggestedFilename ??
|
|
207
|
+
const path = join(dir, link.suggestedFilename ?? assetId);
|
|
189
208
|
writeFileSync(path, bytes);
|
|
190
|
-
reports.push({ ...probeFile(path), assetId
|
|
209
|
+
reports.push({ ...probeFile(path), assetId });
|
|
191
210
|
}
|
|
192
211
|
return { reports };
|
|
193
212
|
},
|
|
194
213
|
};
|
|
195
|
-
const AGENTS_SNIPPET = `## Martini CLI
|
|
196
|
-
|
|
197
|
-
Martini is available as the \`martini\` command (every MCP tool is a subcommand; \`martini --help\` lists them,
|
|
198
|
-
\`martini <tool> --help\` shows a tool's flags). Prefer it over MCP tool calls for bulk, file, and wait work:
|
|
199
|
-
|
|
200
|
-
- \`martini upload <files…> --canvas <id>\` uploads local files as assets in one step.
|
|
201
|
-
- \`martini download <asset-id…> --dir out/\` saves completed assets; \`martini probe <path|id>\` measures them.
|
|
202
|
-
- \`martini <generation tool> … --wait\` blocks until the asset is ready; \`martini wait <ids…>\` resumes a wait.
|
|
203
|
-
- \`martini files pull dir/\` / \`martini files push dir/\` edit project memory files locally with conflict checks.
|
|
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.
|
|
207
|
-
|
|
208
|
-
Exit codes: 0 ok · 1 tool error · 2 usage · 3 auth · 4 not ready or timed out · 5 insufficient olives.
|
|
209
|
-
`;
|
|
210
|
-
export const init = {
|
|
211
|
-
name: 'init',
|
|
212
|
-
summary: 'Print (or append to AGENTS.md with --write) the snippet that teaches agents to use the CLI',
|
|
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
|
-
],
|
|
222
|
-
async run(context) {
|
|
223
|
-
if (flagBoolean(context.flags, 'write')) {
|
|
224
|
-
const target = context.positionals[0] ?? join(context.cwd, 'AGENTS.md');
|
|
225
|
-
const existing = existsSync(target) ? readFileSync(target, 'utf8') : '';
|
|
226
|
-
if (existing.includes('## Martini CLI'))
|
|
227
|
-
return { ok: true, path: target, changed: false };
|
|
228
|
-
writeFileSync(target, `${existing.trimEnd()}${existing ? '\n\n' : ''}${AGENTS_SNIPPET}`);
|
|
229
|
-
return { ok: true, path: target, changed: true };
|
|
230
|
-
}
|
|
231
|
-
return AGENTS_SNIPPET;
|
|
232
|
-
},
|
|
233
|
-
};
|
|
234
214
|
export const version = {
|
|
235
215
|
name: 'version',
|
|
236
|
-
summary: 'The CLI version,
|
|
216
|
+
summary: 'The CLI version, which tool manifest commands run with, and the config file paths',
|
|
237
217
|
usage: 'martini version',
|
|
238
|
-
|
|
218
|
+
readOnly: true,
|
|
219
|
+
details: "Result: { version, manifestSource, manifestHash, cachedManifestHash, fetchedAt?, tools, manifestCache, userConfig }. manifestSource is cache when commands run with the server's tool list cached for this credential (cachedManifestHash, fetched at fetchedAt), baked when with the one this build carries (manifestHash, always this build's). tools counts the list in use; manifestCache is the cache file for this API URL and credential (null for a workflow run key or no key). Reads only local files: martini tools refreshes. martini --version prints the same.",
|
|
239
220
|
async run(context) {
|
|
240
|
-
const
|
|
221
|
+
const state = context.manifests.state;
|
|
241
222
|
return {
|
|
242
223
|
version: CLI_VERSION,
|
|
243
|
-
|
|
244
|
-
|
|
224
|
+
manifestSource: state.source,
|
|
225
|
+
manifestHash: state.baked.hash,
|
|
226
|
+
cachedManifestHash: state.source === 'cache' ? state.manifest.hash : null,
|
|
227
|
+
...(state.fetchedAt ? { fetchedAt: state.fetchedAt } : {}),
|
|
228
|
+
tools: state.manifest.tools.length,
|
|
229
|
+
manifestCache: state.cachePath,
|
|
245
230
|
userConfig: userConfigPath(context.env),
|
|
246
231
|
};
|
|
247
232
|
},
|
|
@@ -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;
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/commands/tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
import { CliApiError } from '../api.js';
|
|
2
|
+
import { flagBoolean } from '../args.js';
|
|
3
|
+
import { clearWorkspaceContext, findWorkspaceContext, saveWorkspaceContext } from '../config.js';
|
|
4
|
+
import { ArgumentError } from '../schema.js';
|
|
5
|
+
import { contextFlag } from './context.js';
|
|
6
|
+
const UUID = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
|
|
7
|
+
function pickCanvas(canvases, wanted) {
|
|
8
|
+
const named = (canvas) => (typeof canvas.name === 'string' ? canvas.name : '');
|
|
9
|
+
const matches = canvases.filter(canvas => canvas.id === wanted || named(canvas).toLowerCase() === wanted.trim().toLowerCase());
|
|
10
|
+
if (matches.length === 1)
|
|
11
|
+
return matches[0];
|
|
12
|
+
const listed = canvases.map(canvas => `${named(canvas) || '(unnamed)'} (${String(canvas.id)})`).join(', ');
|
|
13
|
+
throw new ArgumentError(matches.length === 0
|
|
14
|
+
? `No canvas "${wanted}" in this project. Canvases: ${listed || 'none yet — martini create_canvas makes one'}.`
|
|
15
|
+
: `${matches.length} canvases are named "${wanted}"; pass the id. Canvases: ${listed}.`);
|
|
16
|
+
}
|
|
17
|
+
function projectMatchesOf(error) {
|
|
18
|
+
if (!(error instanceof CliApiError))
|
|
19
|
+
return null;
|
|
20
|
+
try {
|
|
21
|
+
const body = JSON.parse(error.message);
|
|
22
|
+
if (!Array.isArray(body.projectMatches))
|
|
23
|
+
return null;
|
|
24
|
+
return body.projectMatches.filter((match) => typeof match?.id === 'string' && typeof match.name === 'string');
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
return null;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
async function overviewByName(context, name, select) {
|
|
31
|
+
try {
|
|
32
|
+
return await context.client.callTool('get_board_overview', { projectQuery: name }, { select });
|
|
33
|
+
}
|
|
34
|
+
catch (error) {
|
|
35
|
+
const matches = projectMatchesOf(error);
|
|
36
|
+
if (!matches || matches.length === 0)
|
|
37
|
+
throw error;
|
|
38
|
+
const exact = matches.filter(match => match.name.trim().toLowerCase() === name.trim().toLowerCase());
|
|
39
|
+
if (exact.length === 1) {
|
|
40
|
+
const match = exact[0];
|
|
41
|
+
const overview = await context.client.callTool('get_board_overview', { projectId: match.id }, { select });
|
|
42
|
+
return { ...overview, project: { name: match.name, ...overview.project } };
|
|
43
|
+
}
|
|
44
|
+
const listed = matches
|
|
45
|
+
.map(match => `${match.name} (${match.id}${match.workspace ? `, ${match.workspace}` : ''})`)
|
|
46
|
+
.join(', ');
|
|
47
|
+
throw new ArgumentError(`${matches.length} projects match "${name}"; pass the id. Projects: ${listed}.`, {
|
|
48
|
+
hint: 'martini use <project-id>',
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
export const use = {
|
|
53
|
+
name: 'use',
|
|
54
|
+
summary: 'Choose the project and canvas for this directory, so commands stop needing --project and --canvas',
|
|
55
|
+
usage: 'martini use [<project-id|name>] [--canvas <id|name>] [--clear]',
|
|
56
|
+
details: 'Writes .martini/context.json in the working directory (or updates the one already in effect above it): { projectId, projectName, canvasId?, canvasName?, apiUrl }. Every later command run in this directory tree takes its project and canvas from it, under --project / --canvas and MARTINI_PROJECT_ID / MARTINI_CANVAS_ID; it holds no credential and is ignored under another --api-url. A name is matched by get_board_overview; when several projects match, the one called exactly that is used, and otherwise the command lists them so you can pass an id. With one canvas in the project that canvas is chosen; with several, name one with --canvas, or leave it and pass --canvas where a command needs it. Without arguments, prints the context in effect. --clear forgets it. Result: { projectId, projectName, canvasId, canvasName, canvases: [{ id, name }], file }.',
|
|
57
|
+
positionals: [{ name: 'project-id|name', description: 'The project: its id, or its name' }],
|
|
58
|
+
flags: [
|
|
59
|
+
{
|
|
60
|
+
flag: 'canvas',
|
|
61
|
+
kind: 'string',
|
|
62
|
+
value: '<id|name>',
|
|
63
|
+
description: 'The canvas to use with it (default: the only canvas, when the project has one)',
|
|
64
|
+
},
|
|
65
|
+
{ flag: 'clear', kind: 'boolean', description: 'Forget the context for this directory' },
|
|
66
|
+
],
|
|
67
|
+
examples: [
|
|
68
|
+
'martini use "Harbor film"',
|
|
69
|
+
'martini use <project-id> --canvas Storyboard',
|
|
70
|
+
'martini use',
|
|
71
|
+
'martini use --clear',
|
|
72
|
+
],
|
|
73
|
+
async run(context) {
|
|
74
|
+
const [wanted, ...extra] = context.positionals;
|
|
75
|
+
if (extra.length > 0) {
|
|
76
|
+
throw new ArgumentError(`Unexpected argument ${JSON.stringify(extra[0])}: martini use takes one project; quote a name that has spaces.`);
|
|
77
|
+
}
|
|
78
|
+
if (flagBoolean(context.flags, 'clear') === true) {
|
|
79
|
+
if (wanted !== undefined)
|
|
80
|
+
throw new ArgumentError('Give either a project or --clear, not both.');
|
|
81
|
+
if (contextFlag(context.flags, 'canvas') !== undefined)
|
|
82
|
+
throw new ArgumentError('Give either --canvas or --clear, not both.');
|
|
83
|
+
return { cleared: clearWorkspaceContext(context.cwd) };
|
|
84
|
+
}
|
|
85
|
+
const found = findWorkspaceContext(context.cwd);
|
|
86
|
+
const current = found &&
|
|
87
|
+
(typeof found.context.apiUrl !== 'string' || found.context.apiUrl.replace(/\/+$/, '') === context.config.apiUrl)
|
|
88
|
+
? found
|
|
89
|
+
: null;
|
|
90
|
+
const canvasFlag = contextFlag(context.flags, 'canvas');
|
|
91
|
+
if (wanted === undefined && canvasFlag === undefined) {
|
|
92
|
+
if (!current) {
|
|
93
|
+
throw new ArgumentError('No project is set for this directory. Run martini use <project-id|name>.', {
|
|
94
|
+
hint: 'martini get_projects --query "<name>" finds a project; martini create_project makes one.',
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
return { ...current.context, file: current.path };
|
|
98
|
+
}
|
|
99
|
+
const target = wanted ?? current?.context.projectId;
|
|
100
|
+
if (!target)
|
|
101
|
+
throw new ArgumentError('Name the project first: martini use <project-id|name> --canvas <id|name>.');
|
|
102
|
+
const select = ['project.id', 'project.name', 'canvases'];
|
|
103
|
+
const overview = wanted === undefined || UUID.test(target)
|
|
104
|
+
? await context.client.callTool('get_board_overview', { projectId: target }, { select })
|
|
105
|
+
: await overviewByName(context, target, select);
|
|
106
|
+
const projectId = overview.project?.id;
|
|
107
|
+
if (typeof projectId !== 'string' || !projectId) {
|
|
108
|
+
throw new CliApiError(`get_board_overview did not name a project for "${target}".`, {
|
|
109
|
+
code: 'INVALID_RESPONSE',
|
|
110
|
+
status: 0,
|
|
111
|
+
tool: 'get_board_overview',
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
const canvases = Object.values(overview.canvases ?? {});
|
|
115
|
+
const canvas = canvasFlag !== undefined ? pickCanvas(canvases, canvasFlag) : canvases.length === 1 ? canvases[0] : undefined;
|
|
116
|
+
const next = {
|
|
117
|
+
projectId,
|
|
118
|
+
...(typeof overview.project?.name === 'string' ? { projectName: overview.project.name } : {}),
|
|
119
|
+
...(typeof canvas?.id === 'string' ? { canvasId: canvas.id } : {}),
|
|
120
|
+
...(typeof canvas?.name === 'string' ? { canvasName: canvas.name } : {}),
|
|
121
|
+
apiUrl: context.config.apiUrl,
|
|
122
|
+
setAt: new Date(context.now()).toISOString(),
|
|
123
|
+
};
|
|
124
|
+
const file = saveWorkspaceContext(context.cwd, next);
|
|
125
|
+
return {
|
|
126
|
+
projectId,
|
|
127
|
+
projectName: next.projectName ?? null,
|
|
128
|
+
canvasId: next.canvasId ?? null,
|
|
129
|
+
canvasName: next.canvasName ?? null,
|
|
130
|
+
canvases: canvases.map(entry => ({ id: entry.id ?? null, name: entry.name ?? null })),
|
|
131
|
+
file,
|
|
132
|
+
...(canvases.length > 1 && !canvas
|
|
133
|
+
? {
|
|
134
|
+
note: 'Several canvases: pass --canvas <id|name> here to choose one, or --canvas on the commands that need it.',
|
|
135
|
+
}
|
|
136
|
+
: {}),
|
|
137
|
+
...(canvases.length === 0
|
|
138
|
+
? { note: 'No canvas yet: martini create_canvas --name "<name>", then martini use --canvas "<name>".' }
|
|
139
|
+
: {}),
|
|
140
|
+
};
|
|
141
|
+
},
|
|
142
|
+
};
|
|
143
|
+
//# sourceMappingURL=use.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use.js","sourceRoot":"","sources":["../../src/commands/use.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AACvC,OAAO,EAAE,WAAW,EAAc,MAAM,YAAY,CAAA;AACpD,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,oBAAoB,EAAyB,MAAM,cAAc,CAAA;AACvH,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAC5C,OAAO,EAAE,WAAW,EAA6C,MAAM,cAAc,CAAA;AAErF,MAAM,IAAI,GAAG,iEAAiE,CAAA;AAa9E,SAAS,UAAU,CAAC,QAA0B,EAAE,MAAc;IAC5D,MAAM,KAAK,GAAG,CAAC,MAAsB,EAAE,EAAE,CAAC,CAAC,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;IAC9F,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAC7B,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAC9F,CAAA;IACD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,OAAO,CAAC,CAAC,CAAE,CAAA;IAC5C,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,WAAW,KAAK,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAC1G,MAAM,IAAI,aAAa,CACrB,OAAO,CAAC,MAAM,KAAK,CAAC;QAClB,CAAC,CAAC,cAAc,MAAM,gCAAgC,MAAM,IAAI,4CAA4C,GAAG;QAC/G,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,wBAAwB,MAAM,6BAA6B,MAAM,GAAG,CAC1F,CAAA;AACH,CAAC;AASD,SAAS,gBAAgB,CAAC,KAAc;IACtC,IAAI,CAAC,CAAC,KAAK,YAAY,WAAW,CAAC;QAAE,OAAO,IAAI,CAAA;IAChD,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAiC,CAAA;QACtE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC;YAAE,OAAO,IAAI,CAAA;QACpD,OAAO,IAAI,CAAC,cAAc,CAAC,MAAM,CAC/B,CAAC,KAAK,EAAyB,EAAE,CAC/B,OAAQ,KAA6B,EAAE,EAAE,KAAK,QAAQ,IAAI,OAAQ,KAAsB,CAAC,IAAI,KAAK,QAAQ,CAC7G,CAAA;IACH,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC;AAOD,KAAK,UAAU,cAAc,CAAC,OAAuB,EAAE,IAAY,EAAE,MAAgB;IACnF,IAAI,CAAC;QACH,OAAO,MAAM,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAW,oBAAoB,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAA;IAC1G,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAA;QACvC,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,MAAM,KAAK,CAAA;QACjD,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAA;QACpG,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAE,CAAA;YACvB,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,QAAQ,CAC5C,oBAAoB,EACpB,EAAE,SAAS,EAAE,KAAK,CAAC,EAAE,EAAE,EACvB,EAAE,MAAM,EAAE,CACX,CAAA;YAED,OAAO,EAAE,GAAG,QAAQ,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,GAAG,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAA;QAC5E,CAAC;QACD,MAAM,MAAM,GAAG,OAAO;aACnB,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,EAAE,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC;aAC3F,IAAI,CAAC,IAAI,CAAC,CAAA;QACb,MAAM,IAAI,aAAa,CAAC,GAAG,OAAO,CAAC,MAAM,oBAAoB,IAAI,6BAA6B,MAAM,GAAG,EAAE;YACvG,IAAI,EAAE,0BAA0B;SACjC,CAAC,CAAA;IACJ,CAAC;AACH,CAAC;AAOD,MAAM,CAAC,MAAM,GAAG,GAAoB;IAClC,IAAI,EAAE,KAAK;IACX,OAAO,EAAE,mGAAmG;IAC5G,KAAK,EAAE,gEAAgE;IACvE,OAAO,EACL,y1BAAy1B;IAC31B,WAAW,EAAE,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,WAAW,EAAE,kCAAkC,EAAE,CAAC;IAC3F,KAAK,EAAE;QACL;YACE,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,WAAW;YAClB,WAAW,EAAE,gFAAgF;SAC9F;QACD,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,uCAAuC,EAAE;KACzF;IACD,QAAQ,EAAE;QACR,2BAA2B;QAC3B,8CAA8C;QAC9C,aAAa;QACb,qBAAqB;KACtB;IACD,KAAK,CAAC,GAAG,CAAC,OAAuB;QAC/B,MAAM,CAAC,MAAM,EAAE,GAAG,KAAK,CAAC,GAAG,OAAO,CAAC,WAAW,CAAA;QAC9C,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrB,MAAM,IAAI,aAAa,CACrB,uBAAuB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,gEAAgE,CAChH,CAAA;QACH,CAAC;QACD,IAAI,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC;YACjD,IAAI,MAAM,KAAK,SAAS;gBAAE,MAAM,IAAI,aAAa,CAAC,6CAA6C,CAAC,CAAA;YAChG,IAAI,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,SAAS;gBACpD,MAAM,IAAI,aAAa,CAAC,4CAA4C,CAAC,CAAA;YACvE,OAAO,EAAE,OAAO,EAAE,qBAAqB,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAA;QACxD,CAAC;QAID,MAAM,KAAK,GAAG,oBAAoB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;QAC/C,MAAM,OAAO,GACX,KAAK;YACL,CAAC,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,KAAK,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC;YAC9G,CAAC,CAAC,KAAK;YACP,CAAC,CAAC,IAAI,CAAA;QACV,MAAM,UAAU,GAAG,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;QACvD,IAAI,MAAM,KAAK,SAAS,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;YACrD,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,MAAM,IAAI,aAAa,CAAC,0EAA0E,EAAE;oBAClG,IAAI,EAAE,0FAA0F;iBACjG,CAAC,CAAA;YACJ,CAAC;YACD,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAA;QACnD,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,IAAI,OAAO,EAAE,OAAO,CAAC,SAAS,CAAA;QACnD,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,aAAa,CAAC,2EAA2E,CAAC,CAAA;QAIjH,MAAM,MAAM,GAAG,CAAC,YAAY,EAAE,cAAc,EAAE,UAAU,CAAC,CAAA;QACzD,MAAM,QAAQ,GACZ,MAAM,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;YACvC,CAAC,CAAC,MAAM,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAW,oBAAoB,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC;YAClG,CAAC,CAAC,MAAM,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;QACnD,MAAM,SAAS,GAAG,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAA;QACtC,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,CAAC,SAAS,EAAE,CAAC;YAChD,MAAM,IAAI,WAAW,CAAC,kDAAkD,MAAM,IAAI,EAAE;gBAClF,IAAI,EAAE,kBAAkB;gBACxB,MAAM,EAAE,CAAC;gBACT,IAAI,EAAE,oBAAoB;aAC3B,CAAC,CAAA;QACJ,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAA;QACvD,MAAM,MAAM,GACV,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;QAC/G,MAAM,IAAI,GAAqB;YAC7B,SAAS;YACT,GAAG,CAAC,OAAO,QAAQ,CAAC,OAAO,EAAE,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7F,GAAG,CAAC,OAAO,MAAM,EAAE,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAClE,GAAG,CAAC,OAAO,MAAM,EAAE,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACxE,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM;YAC7B,KAAK,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,WAAW,EAAE;SAC7C,CAAA;QACD,MAAM,IAAI,GAAG,oBAAoB,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;QACpD,OAAO;YACL,SAAS;YACT,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,IAAI;YACrC,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,IAAI;YAC/B,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI,IAAI;YACnC,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,IAAI,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC;YACrF,IAAI;YACJ,GAAG,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM;gBAChC,CAAC,CAAC;oBACE,IAAI,EAAE,yGAAyG;iBAChH;gBACH,CAAC,CAAC,EAAE,CAAC;YACP,GAAG,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC;gBACvB,CAAC,CAAC,EAAE,IAAI,EAAE,2FAA2F,EAAE;gBACvG,CAAC,CAAC,EAAE,CAAC;SACR,CAAA;IACH,CAAC;CACF,CAAA"}
|
package/dist/config.js
CHANGED
|
@@ -1,10 +1,17 @@
|
|
|
1
|
-
import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
2
|
-
import { homedir } from 'node:os';
|
|
1
|
+
import { existsSync, mkdirSync, readFileSync, unlinkSync, writeFileSync } from 'node:fs';
|
|
2
|
+
import { homedir, tmpdir } from 'node:os';
|
|
3
3
|
import { dirname, join, resolve } from 'node:path';
|
|
4
4
|
import { flagString } from './args.js';
|
|
5
5
|
export const DEFAULT_API_URL = 'https://api.martini.film';
|
|
6
6
|
export const WORKSPACE_CONFIG_DIR = '.martini';
|
|
7
7
|
export const WORKSPACE_CONFIG_FILE = 'config.json';
|
|
8
|
+
export const WORKSPACE_CONTEXT_FILE = 'context.json';
|
|
9
|
+
export function isRunKey(apiKey) {
|
|
10
|
+
return typeof apiKey === 'string' && apiKey.startsWith('mtn_run_');
|
|
11
|
+
}
|
|
12
|
+
export function cacheDir(env = process.env) {
|
|
13
|
+
return join(env.XDG_CACHE_HOME || join(env.HOME || tmpdir(), '.cache'), 'martini');
|
|
14
|
+
}
|
|
8
15
|
export function userConfigPath(env = process.env) {
|
|
9
16
|
if (env.MARTINI_CONFIG_FILE)
|
|
10
17
|
return env.MARTINI_CONFIG_FILE;
|
|
@@ -34,6 +41,37 @@ export function findWorkspaceConfig(cwd) {
|
|
|
34
41
|
dir = parent;
|
|
35
42
|
}
|
|
36
43
|
}
|
|
44
|
+
export function findWorkspaceContext(cwd) {
|
|
45
|
+
let dir = resolve(cwd);
|
|
46
|
+
for (;;) {
|
|
47
|
+
const candidate = join(dir, WORKSPACE_CONFIG_DIR, WORKSPACE_CONTEXT_FILE);
|
|
48
|
+
const context = readJsonFile(candidate);
|
|
49
|
+
if (context && typeof context.projectId === 'string' && context.projectId)
|
|
50
|
+
return { path: candidate, context };
|
|
51
|
+
const parent = dirname(dir);
|
|
52
|
+
if (parent === dir)
|
|
53
|
+
return null;
|
|
54
|
+
dir = parent;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
export function saveWorkspaceContext(cwd, context) {
|
|
58
|
+
const found = findWorkspaceContext(cwd);
|
|
59
|
+
const sameApi = found &&
|
|
60
|
+
(typeof found.context.apiUrl !== 'string' ||
|
|
61
|
+
normalizeApiUrl(found.context.apiUrl) === normalizeApiUrl(context.apiUrl));
|
|
62
|
+
const path = sameApi ? found.path : join(resolve(cwd), WORKSPACE_CONFIG_DIR, WORKSPACE_CONTEXT_FILE);
|
|
63
|
+
mkdirSync(dirname(path), { recursive: true });
|
|
64
|
+
writeFileSync(path, JSON.stringify(context, null, 2) + '\n');
|
|
65
|
+
return path;
|
|
66
|
+
}
|
|
67
|
+
export function clearWorkspaceContext(cwd) {
|
|
68
|
+
const found = findWorkspaceContext(cwd);
|
|
69
|
+
if (!found)
|
|
70
|
+
return null;
|
|
71
|
+
unlinkSync(found.path);
|
|
72
|
+
return found.path;
|
|
73
|
+
}
|
|
74
|
+
const normalizeApiUrl = (url) => url.replace(/\/+$/, '');
|
|
37
75
|
export function resolveConfig(flags, options = {}) {
|
|
38
76
|
const env = options.env ?? process.env;
|
|
39
77
|
const cwd = options.cwd ?? process.cwd();
|
|
@@ -54,14 +92,19 @@ export function resolveConfig(flags, options = {}) {
|
|
|
54
92
|
});
|
|
55
93
|
let source = 'flags/env';
|
|
56
94
|
let fileProfile = {};
|
|
95
|
+
const warnings = [];
|
|
57
96
|
const workspace = findWorkspaceConfig(cwd);
|
|
58
97
|
const requestedProfile = flagString(flags, 'profile') ?? env.MARTINI_PROFILE;
|
|
59
|
-
|
|
60
|
-
|
|
98
|
+
const workspaceProfile = workspace && !requestedProfile ? defined(workspace.profile) : null;
|
|
99
|
+
if (workspaceProfile?.apiKey) {
|
|
100
|
+
fileProfile = workspaceProfile;
|
|
61
101
|
source = workspace.path;
|
|
62
102
|
}
|
|
63
103
|
else {
|
|
64
104
|
const user = readJsonFile(userConfigPath(env));
|
|
105
|
+
if (user && typeof user.defaultProfile === 'string' && !user.default) {
|
|
106
|
+
warnings.push(`${userConfigPath(env)} sets "defaultProfile", which the CLI does not read. Rename it to "default" to make that profile the default.`);
|
|
107
|
+
}
|
|
65
108
|
const name = requestedProfile ?? user?.default;
|
|
66
109
|
const profile = name && user?.profiles ? user.profiles[name] : undefined;
|
|
67
110
|
if (profile) {
|
|
@@ -71,19 +114,57 @@ export function resolveConfig(flags, options = {}) {
|
|
|
71
114
|
else if (requestedProfile) {
|
|
72
115
|
source = `profile ${requestedProfile} (not found)`;
|
|
73
116
|
}
|
|
117
|
+
if (workspaceProfile) {
|
|
118
|
+
const named = workspaceProfile.apiUrl;
|
|
119
|
+
fileProfile = layered(fileProfile, defined({ projectId: workspaceProfile.projectId, canvasId: workspaceProfile.canvasId }));
|
|
120
|
+
const inUse = fromFlags.apiUrl ?? fromEnv.apiUrl ?? fileProfile.apiUrl ?? DEFAULT_API_URL;
|
|
121
|
+
if (named !== undefined && normalizeApiUrl(named) !== normalizeApiUrl(inUse)) {
|
|
122
|
+
warnings.push(`${workspace.path} names ${named} but holds no key; it is ignored there, so no saved or environment key is sent to it. Pass --api-url or MARTINI_API_URL to use that API.`);
|
|
123
|
+
}
|
|
124
|
+
source = profile ? `${source} + ${workspace.path}` : workspace.path;
|
|
125
|
+
}
|
|
74
126
|
}
|
|
75
|
-
const
|
|
127
|
+
const credentials = { ...fileProfile, ...fromEnv, ...fromFlags };
|
|
128
|
+
const apiUrl = normalizeApiUrl(credentials.apiUrl ?? DEFAULT_API_URL);
|
|
129
|
+
let context = null;
|
|
130
|
+
let fromContext = {};
|
|
131
|
+
const found = isRunKey(credentials.apiKey) ? null : findWorkspaceContext(cwd);
|
|
132
|
+
if (found) {
|
|
133
|
+
if (typeof found.context.apiUrl === 'string' && normalizeApiUrl(found.context.apiUrl) !== apiUrl) {
|
|
134
|
+
warnings.push(`${found.path} was set for ${found.context.apiUrl}, not ${apiUrl}; its project is ignored. Run martini use <project> to set one for this API.`);
|
|
135
|
+
}
|
|
136
|
+
else {
|
|
137
|
+
fromContext = defined({ projectId: found.context.projectId, canvasId: found.context.canvasId });
|
|
138
|
+
context = { path: found.path, projectName: found.context.projectName, canvasName: found.context.canvasName };
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
const explicit = layered(fromEnv, fromFlags);
|
|
142
|
+
const usesContext = context !== null && (explicit.projectId === undefined || explicit.projectId === fromContext.projectId);
|
|
143
|
+
if (!usesContext)
|
|
144
|
+
context = null;
|
|
145
|
+
const merged = layered(layered(fileProfile, usesContext ? fromContext : {}), explicit);
|
|
146
|
+
if (context && merged.canvasId !== fromContext.canvasId)
|
|
147
|
+
context = { ...context, canvasName: undefined };
|
|
76
148
|
return {
|
|
77
149
|
apiKey: merged.apiKey ?? null,
|
|
78
|
-
apiUrl
|
|
150
|
+
apiUrl,
|
|
79
151
|
projectId: merged.projectId,
|
|
80
152
|
canvasId: merged.canvasId,
|
|
81
153
|
runId: merged.runId,
|
|
82
154
|
executionId: merged.executionId,
|
|
83
155
|
workerId: merged.workerId,
|
|
84
156
|
source,
|
|
157
|
+
context,
|
|
158
|
+
warnings,
|
|
85
159
|
};
|
|
86
160
|
}
|
|
161
|
+
function layered(base, over) {
|
|
162
|
+
const next = { ...base, ...over };
|
|
163
|
+
const otherProject = over.projectId !== undefined && base.projectId !== undefined && over.projectId !== base.projectId;
|
|
164
|
+
if (otherProject && over.canvasId === undefined)
|
|
165
|
+
delete next.canvasId;
|
|
166
|
+
return next;
|
|
167
|
+
}
|
|
87
168
|
export function saveProfile(name, profile, options = {}) {
|
|
88
169
|
const path = userConfigPath(options.env ?? process.env);
|
|
89
170
|
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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"}
|