@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
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { flagBoolean } from '../args.js';
|
|
2
|
+
import { ArgumentError } from '../schema.js';
|
|
3
|
+
export function renderGuideTopics(topics) {
|
|
4
|
+
return topics.map(topic => [`# ${topic.title} (martini guide ${topic.id})`, ...topic.lines].join('\n')).join('\n\n');
|
|
5
|
+
}
|
|
6
|
+
export function renderGuideList(topics) {
|
|
7
|
+
return topics
|
|
8
|
+
.map(topic => {
|
|
9
|
+
const bytes = Buffer.byteLength(renderGuideTopics([topic]));
|
|
10
|
+
const size = bytes < 1000 ? `${bytes} B` : `${(bytes / 1000).toFixed(1)} KB`;
|
|
11
|
+
return `${topic.id}\t${topic.title}\t${topic.lines.length} rule${topic.lines.length === 1 ? '' : 's'}\t${size}`;
|
|
12
|
+
})
|
|
13
|
+
.join('\n');
|
|
14
|
+
}
|
|
15
|
+
export function guideProvenance(state) {
|
|
16
|
+
const hash = state.guide.hash.slice(0, 12);
|
|
17
|
+
return state.source === 'cache' ? `guide: cache ${hash} fetched ${state.fetchedAt ?? ''}` : `guide: baked ${hash}`;
|
|
18
|
+
}
|
|
19
|
+
export const guide = {
|
|
20
|
+
name: 'guide',
|
|
21
|
+
summary: 'The operator rules for working in Martini, by topic (read it once per session)',
|
|
22
|
+
usage: 'martini guide [topic] [--list] [--refresh]',
|
|
23
|
+
details: "Prints the rules a Martini MCP agent is given when it connects — orienting on a board, the library, the timeline, generating and reviewing shots, uploads and lineage, support, and working from the shell — as text: per topic a header line `# <title> (martini guide <id>)`, then its lines. With a topic, only that one; with --list, one line per topic: id, title, how many rules it has, and its size. Asks the server for its current guide first (one conditional request; MARTINI_MANIFEST_REFRESH=0 skips it) and keeps it in the local cache beside the tool list; offline, with no key, or inside a workflow run it prints this build's copy. One line on stderr says which copy was printed (guide: cache <hash> fetched <time>, or guide: baked <hash>).",
|
|
24
|
+
positionals: [
|
|
25
|
+
{
|
|
26
|
+
name: 'topic',
|
|
27
|
+
description: 'One topic, such as orientation, generation, timeline, or shell (martini guide --list names them all); default every topic',
|
|
28
|
+
},
|
|
29
|
+
],
|
|
30
|
+
flags: [
|
|
31
|
+
{
|
|
32
|
+
flag: 'list',
|
|
33
|
+
kind: 'boolean',
|
|
34
|
+
description: 'One line per topic: id, title, how many rules it has, and its size',
|
|
35
|
+
},
|
|
36
|
+
{ flag: 'refresh', kind: 'boolean', description: "Fetch the server's whole guide, ignoring the cached one" },
|
|
37
|
+
],
|
|
38
|
+
examples: ['martini guide', 'martini guide generation', 'martini guide --list'],
|
|
39
|
+
async run(context) {
|
|
40
|
+
const [requested, ...extra] = context.positionals;
|
|
41
|
+
if (extra.length > 0) {
|
|
42
|
+
throw new ArgumentError(`Unexpected argument${extra.length > 1 ? 's' : ''} ${extra.map(token => JSON.stringify(token)).join(' ')}: martini guide takes one topic.`);
|
|
43
|
+
}
|
|
44
|
+
const list = flagBoolean(context.flags, 'list') === true;
|
|
45
|
+
if (list && requested !== undefined)
|
|
46
|
+
throw new ArgumentError('Give either a topic or --list, not both.');
|
|
47
|
+
const runtime = context.guide();
|
|
48
|
+
await runtime.refresh({ force: flagBoolean(context.flags, 'refresh') === true });
|
|
49
|
+
const state = runtime.state;
|
|
50
|
+
const { topics } = state.guide;
|
|
51
|
+
let printed = topics;
|
|
52
|
+
if (requested !== undefined) {
|
|
53
|
+
const id = requested.trim().toLowerCase();
|
|
54
|
+
const topic = topics.find(candidate => candidate.id === id);
|
|
55
|
+
if (!topic) {
|
|
56
|
+
throw new ArgumentError(`Unknown guide topic "${requested}". Topics: ${topics.map(candidate => candidate.id).join(', ')}.`, { hint: 'martini guide --list names each topic with its title; martini guide prints them all.' });
|
|
57
|
+
}
|
|
58
|
+
printed = [topic];
|
|
59
|
+
}
|
|
60
|
+
if (!context.output.quiet) {
|
|
61
|
+
;
|
|
62
|
+
(context.output.stderr ?? (text => process.stderr.write(text)))(`${guideProvenance(state)}\n`);
|
|
63
|
+
}
|
|
64
|
+
return `${list ? renderGuideList(topics) : renderGuideTopics(printed)}\n`;
|
|
65
|
+
},
|
|
66
|
+
};
|
|
67
|
+
//# sourceMappingURL=guide.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"guide.js","sourceRoot":"","sources":["../../src/commands/guide.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
import { existsSync, lstatSync, mkdirSync, readFileSync, readlinkSync, realpathSync, statSync, writeFileSync, } from 'node:fs';
|
|
2
|
+
import { basename, dirname, join, resolve, sep } from 'node:path';
|
|
3
|
+
import { flagBoolean, flagString } from '../args.js';
|
|
4
|
+
import { ArgumentError } from '../schema.js';
|
|
5
|
+
export const SKILL_MD = `---
|
|
6
|
+
name: martini
|
|
7
|
+
description: Work on Martini (AI video production) projects from the shell with the martini CLI — read boards, upload and download material, generate and wait for shots, edit project memory files. Use for any Martini task when a shell is available.
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Martini CLI
|
|
11
|
+
|
|
12
|
+
## When to use
|
|
13
|
+
|
|
14
|
+
Any Martini task: projects, canvases, shots, the library, generation, timelines, project memory files. If the
|
|
15
|
+
Martini MCP connector is also installed, use the CLI anyway — every MCP tool is a \`martini\` command of the same
|
|
16
|
+
name, with its arguments as flags, and the CLI costs no tool-listing context.
|
|
17
|
+
|
|
18
|
+
## Install and sign in
|
|
19
|
+
|
|
20
|
+
\`\`\`bash
|
|
21
|
+
npm install --global @martini-film/cli # installs the CLI on PATH (or run each command as npx @martini-film/cli <command>)
|
|
22
|
+
martini login # pair this device in the browser (as an agent: --no-wait, relay the code, rerun)
|
|
23
|
+
martini whoami # which organization and key the CLI acts as
|
|
24
|
+
\`\`\`
|
|
25
|
+
|
|
26
|
+
Inside a Martini workflow run the CLI is already signed in through \`.martini/config.json\`; never run
|
|
27
|
+
\`martini login\` there.
|
|
28
|
+
|
|
29
|
+
## Start here
|
|
30
|
+
|
|
31
|
+
\`\`\`bash
|
|
32
|
+
martini guide # the operator rules: read them once per session, again on a GUIDE_CHANGED warning
|
|
33
|
+
martini guide generation # one topic: orientation, library, timeline, generation, storage, support, shell
|
|
34
|
+
martini use "<project name or id>" # this directory now works in that project
|
|
35
|
+
martini get_board_overview # canvases, shots, library, variables
|
|
36
|
+
\`\`\`
|
|
37
|
+
|
|
38
|
+
\`martini use\` writes \`.martini/context.json\`, which every later command here reads: your shell is new on each
|
|
39
|
+
command, so an exported variable would not last. \`--project\` / \`--canvas\` override it.
|
|
40
|
+
|
|
41
|
+
## Finding commands
|
|
42
|
+
|
|
43
|
+
- \`martini --help\` lists every command; \`martini <tool> --help\` shows its flags, an example, and its result
|
|
44
|
+
fields. Read it before a tool's first call (\`--help --all\` prints a long page whole).
|
|
45
|
+
- \`martini <tool> --schema <flag> --keys\` lists the keys of a JSON argument (\`--nodes\`, \`--edit\`).
|
|
46
|
+
- \`martini tools\` compares the server's tool list with this build's; \`martini call <tool> --args '{…}'\` sends
|
|
47
|
+
any tool by name.
|
|
48
|
+
|
|
49
|
+
## Compound commands
|
|
50
|
+
|
|
51
|
+
- \`martini upload <path…>\`: local files to canvas assets; \`referenceImages\` takes their \`assets[].imageUrl\`.
|
|
52
|
+
- \`martini download <asset-id…> --dir <dir>\`: completed assets to files.
|
|
53
|
+
- \`martini wait <asset-id…> --timeout N\`: block until assets (or \`--job\`, \`--run\`, \`--render\`) settle.
|
|
54
|
+
- \`martini files pull <dir>\` / \`martini files push <dir>\`: project memory files as a directory. Push exits 1
|
|
55
|
+
when a file changed on the server since the pull; pull keeps a file you edited.
|
|
56
|
+
- \`martini probe <path|asset-id>…\`: duration, resolution, fps, codecs, sha256 (needs ffprobe).
|
|
57
|
+
|
|
58
|
+
## Looking at results
|
|
59
|
+
|
|
60
|
+
Nothing is shown until you open a file:
|
|
61
|
+
|
|
62
|
+
\`\`\`bash
|
|
63
|
+
martini inspect_video --video-asset-ids <id> <id> --out-dir review # a contact sheet per shot
|
|
64
|
+
martini view_asset --asset-id <id> --out still.webp # one image
|
|
65
|
+
\`\`\`
|
|
66
|
+
|
|
67
|
+
\`--out-dir\` prints \`{ dir, files: [{ path, about }] }\`; \`about\` names each file's asset, shot, and duration.
|
|
68
|
+
|
|
69
|
+
## Output and arguments
|
|
70
|
+
|
|
71
|
+
- Results are JSON on stdout (\`guide\`, \`init\`, \`files cat\`, and \`--help\` print text); errors are one JSON
|
|
72
|
+
object on stderr. Exit 0 means the command did all you asked. Otherwise read \`error.code\`; work that was
|
|
73
|
+
done is still on stdout (a push's \`skipped\`, a wait's \`pending\`).
|
|
74
|
+
- \`--fields a,b.c\` keeps only those paths of the result; \`--out <path>\` writes the result to a file.
|
|
75
|
+
- Object arguments take JSON (\`--placement '{"rightOf": "<id>"}'\`), a list of objects takes \`@file\`
|
|
76
|
+
(\`--nodes @nodes.json\`), and \`--args @args.json\` passes the whole arguments object.
|
|
77
|
+
- An asset id works in either spelling: the bare id, or \`asset-<id>\`.
|
|
78
|
+
|
|
79
|
+
## Waiting and approval
|
|
80
|
+
|
|
81
|
+
- Single-item generation and rendering wait by default (\`--wait\` / \`--no-wait\`). Fan a batch out, then run
|
|
82
|
+
\`martini wait <ids…> --timeout N\` once; a wait that runs out exits 4 and prints the resume command, and a
|
|
83
|
+
failed shot exits 1.
|
|
84
|
+
- Generations cost olives and cannot be undone: agree the plan with the user first. \`generate_nodes\`,
|
|
85
|
+
\`upscale_assets\`, and \`enhance_draft\` quote first; \`--approve --max-olives N\` approves under the cap in one
|
|
86
|
+
command. Over the cap nothing starts (exit 5): ask the user before raising it.
|
|
87
|
+
|
|
88
|
+
## Exit codes
|
|
89
|
+
|
|
90
|
+
0 done, all of it · 1 tool error · 2 usage · 3 auth · 4 not ready or timed out · 5 over budget (olives, or a quote over --max-olives)
|
|
91
|
+
`;
|
|
92
|
+
export const AGENTS_MD_MARKER = '## Martini CLI';
|
|
93
|
+
export const AGENTS_MD_POINTER = `${AGENTS_MD_MARKER}
|
|
94
|
+
|
|
95
|
+
Martini is available as the \`martini\` command; the skill at \`.agents/skills/martini/SKILL.md\` says how to use it. Start with \`martini guide\`.
|
|
96
|
+
`;
|
|
97
|
+
const SKILL_DIRECTORIES = ['.agents/skills', '.claude/skills'];
|
|
98
|
+
function resolveLinks(path, depth = 0) {
|
|
99
|
+
try {
|
|
100
|
+
return realpathSync(path);
|
|
101
|
+
}
|
|
102
|
+
catch {
|
|
103
|
+
}
|
|
104
|
+
if (depth < 40) {
|
|
105
|
+
try {
|
|
106
|
+
if (lstatSync(path).isSymbolicLink())
|
|
107
|
+
return resolveLinks(resolve(dirname(path), readlinkSync(path)), depth + 1);
|
|
108
|
+
}
|
|
109
|
+
catch {
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
const parent = dirname(path);
|
|
113
|
+
return parent === path ? path : join(resolveLinks(parent, depth + 1), basename(path));
|
|
114
|
+
}
|
|
115
|
+
function skillTargets(root) {
|
|
116
|
+
const [shared, claude] = SKILL_DIRECTORIES.map(directory => join(root, directory));
|
|
117
|
+
const sameDirectory = existsOrLinked(claude) && resolveLinks(claude) === resolveLinks(shared);
|
|
118
|
+
return (sameDirectory ? [shared] : [shared, claude]).map(directory => join(directory, 'martini', 'SKILL.md'));
|
|
119
|
+
}
|
|
120
|
+
function existsOrLinked(path) {
|
|
121
|
+
try {
|
|
122
|
+
lstatSync(path);
|
|
123
|
+
return true;
|
|
124
|
+
}
|
|
125
|
+
catch {
|
|
126
|
+
return false;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
function writeSkill(path, force) {
|
|
130
|
+
if (existsSync(path)) {
|
|
131
|
+
if (readFileSync(path, 'utf8') === SKILL_MD)
|
|
132
|
+
return 'unchanged';
|
|
133
|
+
if (!force)
|
|
134
|
+
return 'kept';
|
|
135
|
+
}
|
|
136
|
+
mkdirSync(dirname(path), { recursive: true });
|
|
137
|
+
writeFileSync(path, SKILL_MD);
|
|
138
|
+
return 'written';
|
|
139
|
+
}
|
|
140
|
+
function writePointer(path) {
|
|
141
|
+
const existing = existsSync(path) ? readFileSync(path, 'utf8') : '';
|
|
142
|
+
if (existing.includes(AGENTS_MD_MARKER))
|
|
143
|
+
return 'unchanged';
|
|
144
|
+
writeFileSync(path, `${existing.trimEnd()}${existing.trim() ? '\n\n' : ''}${AGENTS_MD_POINTER}`);
|
|
145
|
+
return 'written';
|
|
146
|
+
}
|
|
147
|
+
export const init = {
|
|
148
|
+
name: 'init',
|
|
149
|
+
summary: 'Install the Martini agent skill and a three-line AGENTS.md pointer in a repository (prints them without --write)',
|
|
150
|
+
usage: 'martini init [--write] [--force] [--dir <repo>]',
|
|
151
|
+
details: 'Without --write, prints the skill file, a line ---, and the AGENTS.md pointer, and writes nothing. With --write, installs the skill at <repo>/.agents/skills/martini/SKILL.md (read by Codex, Cursor, and other agents) and <repo>/.claude/skills/martini/SKILL.md (Claude Code) — only the first when .claude/skills is a link to .agents/skills — and appends the pointer to <repo>/AGENTS.md (created if absent) unless it already has a "## Martini CLI" section. A skill file with other content is kept unless --force; nothing outside <repo> is written. The skill is short on purpose: it sends the agent to martini guide for the operator rules and to martini <tool> --help for flags. Result: { ok, skills: [{ path, status: written | unchanged | kept }], agentsMd: { path, status: written | unchanged } }.',
|
|
152
|
+
flags: [
|
|
153
|
+
{ flag: 'write', kind: 'boolean', description: 'Install the skill and the pointer instead of printing them' },
|
|
154
|
+
{
|
|
155
|
+
flag: 'force',
|
|
156
|
+
kind: 'boolean',
|
|
157
|
+
description: 'With --write: overwrite a skill file whose content differs (an older or edited copy)',
|
|
158
|
+
},
|
|
159
|
+
{
|
|
160
|
+
flag: 'dir',
|
|
161
|
+
kind: 'string',
|
|
162
|
+
value: '<repo>',
|
|
163
|
+
description: 'With --write: the repository to install into (default: the working directory)',
|
|
164
|
+
},
|
|
165
|
+
],
|
|
166
|
+
examples: ['martini init', 'martini init --write', 'martini init --write --force --dir ../my-film'],
|
|
167
|
+
async run(context) {
|
|
168
|
+
if (context.positionals.length > 0) {
|
|
169
|
+
throw new ArgumentError(`Unexpected argument ${JSON.stringify(context.positionals[0])}: martini init installs into a repository directory; name it with --dir <repo>.`);
|
|
170
|
+
}
|
|
171
|
+
const write = flagBoolean(context.flags, 'write') === true;
|
|
172
|
+
const force = flagBoolean(context.flags, 'force') === true;
|
|
173
|
+
const dir = flagString(context.flags, 'dir');
|
|
174
|
+
if (!write) {
|
|
175
|
+
if (force || dir !== undefined)
|
|
176
|
+
throw new ArgumentError('--force and --dir apply only with --write.');
|
|
177
|
+
return `${SKILL_MD}\n---\n\n${AGENTS_MD_POINTER}`;
|
|
178
|
+
}
|
|
179
|
+
const root = resolve(context.cwd, dir ?? '.');
|
|
180
|
+
if (!existsSync(root) || !statSync(root).isDirectory()) {
|
|
181
|
+
throw new ArgumentError(`--dir ${dir ?? root} is not a directory.`);
|
|
182
|
+
}
|
|
183
|
+
const agentsMd = join(root, 'AGENTS.md');
|
|
184
|
+
const targets = skillTargets(root);
|
|
185
|
+
const realRoot = realpathSync(root);
|
|
186
|
+
for (const path of [...targets, agentsMd]) {
|
|
187
|
+
const real = resolveLinks(path);
|
|
188
|
+
if (real !== realRoot && !real.startsWith(`${realRoot}${sep}`)) {
|
|
189
|
+
throw new ArgumentError(`${path} resolves to ${real}, outside ${root} (through a link); martini init writes only inside the repository. Nothing was written.`, { hint: 'Fix the link, or install by hand from what martini init prints.' });
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
const skills = targets.map(path => ({ path, status: writeSkill(path, force) }));
|
|
193
|
+
return { ok: true, skills, agentsMd: { path: agentsMd, status: writePointer(agentsMd) } };
|
|
194
|
+
},
|
|
195
|
+
};
|
|
196
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/login.js
CHANGED
|
@@ -13,6 +13,11 @@ export function defaultDeviceLabel(env = process.env) {
|
|
|
13
13
|
export function pendingLoginPath(env = process.env) {
|
|
14
14
|
return join(dirname(userConfigPath(env)), 'login-pending.json');
|
|
15
15
|
}
|
|
16
|
+
export const PAIRING_MIN_REMAINING_MS = 120_000;
|
|
17
|
+
const PAIRING_GONE = new Set(['LOGIN_REQUEST_NOT_FOUND', 'LOGIN_REQUEST_EXPIRED']);
|
|
18
|
+
function secondsLeft(expiresAt, now) {
|
|
19
|
+
return Math.max(0, Math.round((new Date(expiresAt).getTime() - now) / 1000));
|
|
20
|
+
}
|
|
16
21
|
function readPendingLogin(env, apiUrl, now) {
|
|
17
22
|
const pending = readJsonFile(pendingLoginPath(env));
|
|
18
23
|
if (!pending || pending.apiUrl !== apiUrl || typeof pending.pollToken !== 'string')
|
|
@@ -33,7 +38,19 @@ function clearPendingLogin(env) {
|
|
|
33
38
|
if (existsSync(path))
|
|
34
39
|
unlinkSync(path);
|
|
35
40
|
}
|
|
41
|
+
export const ACCOUNT_PROFILE_NAME = 'account';
|
|
36
42
|
export function profileNameFor(organizationName, organizationId, existing) {
|
|
43
|
+
if (organizationId === null) {
|
|
44
|
+
const profiles = existing?.profiles ?? {};
|
|
45
|
+
const reusable = (name) => !profiles[name] || profiles[name]?.scope === 'user';
|
|
46
|
+
if (reusable(ACCOUNT_PROFILE_NAME))
|
|
47
|
+
return ACCOUNT_PROFILE_NAME;
|
|
48
|
+
for (let n = 2;; n += 1) {
|
|
49
|
+
const candidate = `${ACCOUNT_PROFILE_NAME}-${n}`;
|
|
50
|
+
if (reusable(candidate))
|
|
51
|
+
return candidate;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
37
54
|
const slug = (organizationName ?? '')
|
|
38
55
|
.toLowerCase()
|
|
39
56
|
.replace(/[^a-z0-9]+/g, '-')
|
|
@@ -49,7 +66,7 @@ export const login = {
|
|
|
49
66
|
name: 'login',
|
|
50
67
|
summary: 'Sign in: pair this device through the browser and save a 90-day key',
|
|
51
68
|
usage: 'martini login [--device <label>] [--profile <name>] [--no-default] [--no-wait] [--timeout <seconds>]',
|
|
52
|
-
details: 'Prints a URL and a code. Open the URL, enter the code,
|
|
69
|
+
details: 'Prints a URL and a code. Open the URL, enter the code, approve as you (every organization you belong to — one login for all your work; saved as the profile "account") or for one organization only (saved as a profile named after it); the first profile becomes the default. Tools run as you either way and the project you name decides who is billed; an organization key additionally reaches that organization\'s REST API and is listed in its Settings. The pairing is remembered until it expires (10 minutes), so running martini login again resumes it instead of starting over — after --no-wait, a --timeout, or a shell step that was killed while the person was still approving; one with under two minutes left that nobody approved is replaced by a fresh code instead. An agent therefore runs martini login --no-wait, tells the person the code and how long it lasts (expiresInSeconds), and runs martini login again once they have approved.',
|
|
53
70
|
flags: [
|
|
54
71
|
{
|
|
55
72
|
flag: 'device',
|
|
@@ -75,10 +92,25 @@ export const login = {
|
|
|
75
92
|
const apiUrl = context.config.apiUrl;
|
|
76
93
|
const stderr = context.output.stderr ?? (text => process.stderr.write(text));
|
|
77
94
|
let pending = readPendingLogin(env, apiUrl, context.now());
|
|
95
|
+
let collected = null;
|
|
96
|
+
if (pending && new Date(pending.expiresAt).getTime() - context.now() < PAIRING_MIN_REMAINING_MS) {
|
|
97
|
+
const polled = await context.client.pollLogin(pending.pollToken).catch((error) => {
|
|
98
|
+
if (error instanceof CliApiError && PAIRING_GONE.has(error.code))
|
|
99
|
+
return { status: 'expired' };
|
|
100
|
+
throw error;
|
|
101
|
+
});
|
|
102
|
+
if (polled.status === 'pending' || polled.status === 'expired') {
|
|
103
|
+
clearPendingLogin(env);
|
|
104
|
+
pending = null;
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
collected = polled;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
78
110
|
if (pending) {
|
|
79
111
|
stderr([
|
|
80
112
|
'',
|
|
81
|
-
` Resuming the pairing started ${pending.startedAt}:`,
|
|
113
|
+
` Resuming the pairing started ${pending.startedAt} (${secondsLeft(pending.expiresAt, context.now())} s left):`,
|
|
82
114
|
` open ${pending.verificationUrl}`,
|
|
83
115
|
` and enter the code ${pending.code}`,
|
|
84
116
|
'',
|
|
@@ -100,12 +132,13 @@ export const login = {
|
|
|
100
132
|
writePendingLogin(env, pending);
|
|
101
133
|
stderr(['', ` Open ${started.verificationUrl}`, ` and enter the code ${started.code}`, ''].join('\n'));
|
|
102
134
|
}
|
|
103
|
-
if (!wantsWait(context, true)) {
|
|
135
|
+
if (!wantsWait(context, true) && !collected) {
|
|
104
136
|
return {
|
|
105
137
|
status: 'pending',
|
|
106
138
|
code: pending.code,
|
|
107
139
|
verificationUrl: pending.verificationUrl,
|
|
108
140
|
expiresAt: pending.expiresAt,
|
|
141
|
+
expiresInSeconds: secondsLeft(pending.expiresAt, context.now()),
|
|
109
142
|
next: 'Approve the code in the browser, then run martini login again to collect the key.',
|
|
110
143
|
};
|
|
111
144
|
}
|
|
@@ -120,8 +153,10 @@ export const login = {
|
|
|
120
153
|
status: 0,
|
|
121
154
|
});
|
|
122
155
|
}
|
|
123
|
-
|
|
124
|
-
|
|
156
|
+
if (!collected)
|
|
157
|
+
await context.sleep(intervalMs);
|
|
158
|
+
const polled = collected ?? (await context.client.pollLogin(pending.pollToken));
|
|
159
|
+
collected = null;
|
|
125
160
|
if (polled.status === 'pending') {
|
|
126
161
|
if (context.now() > expiry) {
|
|
127
162
|
clearPendingLogin(env);
|
|
@@ -152,25 +187,34 @@ export const login = {
|
|
|
152
187
|
}
|
|
153
188
|
if (polled.status !== 'approved')
|
|
154
189
|
continue;
|
|
155
|
-
const
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
190
|
+
const scope = polled.scope ?? (polled.organizationId === null ? 'user' : 'organization');
|
|
191
|
+
const organizationId = scope === 'user' ? null : polled.organizationId;
|
|
192
|
+
const me = scope === 'organization'
|
|
193
|
+
? await context
|
|
194
|
+
.clientFor({ ...context.config, apiKey: polled.key })
|
|
195
|
+
.me()
|
|
196
|
+
.catch(() => null)
|
|
197
|
+
: null;
|
|
198
|
+
const organizationName = me?.organization?.name ?? null;
|
|
160
199
|
const profileName = flagString(context.flags, 'profile') ??
|
|
161
|
-
profileNameFor(organizationName,
|
|
200
|
+
profileNameFor(organizationName, organizationId, readJsonFile(userConfigPath(env)));
|
|
162
201
|
const path = saveProfile(profileName, {
|
|
163
202
|
apiKey: polled.key,
|
|
164
203
|
apiUrl,
|
|
165
|
-
|
|
204
|
+
scope,
|
|
205
|
+
...(organizationId ? { organizationId } : {}),
|
|
166
206
|
...(organizationName ? { organizationName } : {}),
|
|
167
207
|
...(polled.expiresAt ? { expiresAt: polled.expiresAt } : {}),
|
|
168
208
|
}, { env, makeDefault: flagBoolean(context.flags, 'default') ?? true });
|
|
169
209
|
clearPendingLogin(env);
|
|
210
|
+
if (scope === 'user') {
|
|
211
|
+
stderr(' This key acts in every organization you belong to. --project decides where work lands and who is billed; create_project makes a personal project unless --team-id is given.\n\n');
|
|
212
|
+
}
|
|
170
213
|
return {
|
|
171
214
|
ok: true,
|
|
172
215
|
profile: profileName,
|
|
173
|
-
|
|
216
|
+
scope,
|
|
217
|
+
organizationId,
|
|
174
218
|
organizationName,
|
|
175
219
|
keyId: polled.keyId,
|
|
176
220
|
expiresAt: polled.expiresAt,
|
|
@@ -205,13 +249,16 @@ export const logout = {
|
|
|
205
249
|
};
|
|
206
250
|
export const whoami = {
|
|
207
251
|
name: 'whoami',
|
|
208
|
-
summary: 'Which
|
|
252
|
+
summary: 'Which key this CLI acts as — its scope, organization, and your memberships — and where the config came from',
|
|
209
253
|
usage: 'martini whoami',
|
|
210
|
-
details: 'Result: { organization, key, apiVersion, apiUrl, projectId, canvasId, runId, configSource }.',
|
|
254
|
+
details: 'Result: { scope, organization, organizations, key, apiVersion, apiUrl, projectId, canvasId, runId, configSource, context }. scope is "user" for an account key (organization is null; organizations lists every one you belong to) or "organization" for a key bound to one. projectId and canvasId are what commands here will use; context names the .martini/context.json they came from (martini use), with the project and canvas names, or is null when a flag, a variable, or the profile supplied them.',
|
|
255
|
+
readOnly: true,
|
|
211
256
|
async run(context) {
|
|
212
257
|
const me = await context.client.me();
|
|
213
258
|
return {
|
|
259
|
+
scope: me.scope,
|
|
214
260
|
organization: me.organization,
|
|
261
|
+
organizations: me.organizations,
|
|
215
262
|
key: me.key,
|
|
216
263
|
apiVersion: me.apiVersion,
|
|
217
264
|
apiUrl: context.config.apiUrl,
|
|
@@ -221,6 +268,13 @@ export const whoami = {
|
|
|
221
268
|
executionId: context.config.executionId ?? null,
|
|
222
269
|
workerId: context.config.workerId ?? null,
|
|
223
270
|
configSource: context.config.source,
|
|
271
|
+
context: context.config.context
|
|
272
|
+
? {
|
|
273
|
+
file: context.config.context.path,
|
|
274
|
+
projectName: context.config.context.projectName ?? null,
|
|
275
|
+
canvasName: context.config.context.canvasName ?? null,
|
|
276
|
+
}
|
|
277
|
+
: null,
|
|
224
278
|
};
|
|
225
279
|
},
|
|
226
280
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"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"}
|