@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.
Files changed (46) hide show
  1. package/README.md +173 -56
  2. package/dist/api.js +69 -2
  3. package/dist/api.js.map +1 -1
  4. package/dist/approve.js +2 -1
  5. package/dist/approve.js.map +1 -1
  6. package/dist/args.js +31 -6
  7. package/dist/args.js.map +1 -1
  8. package/dist/cli.js +457 -110
  9. package/dist/cli.js.map +1 -1
  10. package/dist/commands/assets.js +297 -45
  11. package/dist/commands/assets.js.map +1 -1
  12. package/dist/commands/call.js +99 -0
  13. package/dist/commands/call.js.map +1 -0
  14. package/dist/commands/context.js +16 -3
  15. package/dist/commands/context.js.map +1 -1
  16. package/dist/commands/files.js +208 -83
  17. package/dist/commands/files.js.map +1 -1
  18. package/dist/commands/guide.js +67 -0
  19. package/dist/commands/guide.js.map +1 -0
  20. package/dist/commands/init.js +196 -0
  21. package/dist/commands/init.js.map +1 -0
  22. package/dist/commands/login.js +69 -15
  23. package/dist/commands/login.js.map +1 -1
  24. package/dist/commands/tools.js +63 -78
  25. package/dist/commands/tools.js.map +1 -1
  26. package/dist/commands/use.js +143 -0
  27. package/dist/commands/use.js.map +1 -0
  28. package/dist/config.js +87 -6
  29. package/dist/config.js.map +1 -1
  30. package/dist/generated/guide.json +104 -0
  31. package/dist/generated/manifest.json +3885 -241
  32. package/dist/guideCache.js +204 -0
  33. package/dist/guideCache.js.map +1 -0
  34. package/dist/help.js +391 -34
  35. package/dist/help.js.map +1 -1
  36. package/dist/manifest.js +34 -3
  37. package/dist/manifest.js.map +1 -1
  38. package/dist/manifestCache.js +196 -0
  39. package/dist/manifestCache.js.map +1 -0
  40. package/dist/output.js +251 -28
  41. package/dist/output.js.map +1 -1
  42. package/dist/schema.js +132 -15
  43. package/dist/schema.js.map +1 -1
  44. package/dist/wait.js +181 -8
  45. package/dist/wait.js.map +1 -1
  46. 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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"}
@@ -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, pick the organization, approve; the CLI collects the key and saves it as a profile named after the organization (the first profile becomes the default). 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. An agent therefore runs martini login --no-wait, tells the person the code, and runs martini login again once they have approved.',
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
- await context.sleep(intervalMs);
124
- const polled = await context.client.pollLogin(pending.pollToken);
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 me = await context
156
- .clientFor({ ...context.config, apiKey: polled.key })
157
- .me()
158
- .catch(() => null);
159
- const organizationName = me?.organization.name ?? null;
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, polled.organizationId, readJsonFile(userConfigPath(env)));
200
+ profileNameFor(organizationName, organizationId, readJsonFile(userConfigPath(env)));
162
201
  const path = saveProfile(profileName, {
163
202
  apiKey: polled.key,
164
203
  apiUrl,
165
- organizationId: polled.organizationId,
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
- organizationId: polled.organizationId,
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 organization and key this CLI acts as, and where the config came from',
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":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAC1E,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAClC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAEzC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AACvC,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AACpD,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,cAAc,EAAuB,MAAM,cAAc,CAAA;AAC5G,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAC5C,OAAO,EAAE,SAAS,EAAE,SAAS,EAA6C,MAAM,cAAc,CAAA;AAE9F,MAAM,UAAU,kBAAkB,CAAC,MAAyB,OAAO,CAAC,GAAG;IACrE,MAAM,IAAI,GAAG,eAAe,CAAC,GAAG,CAAC,CAAA;IACjC,OAAO,GAAG,QAAQ,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAA;AACnD,CAAC;AAmBD,MAAM,UAAU,gBAAgB,CAAC,MAAyB,OAAO,CAAC,GAAG;IACnE,OAAO,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,EAAE,oBAAoB,CAAC,CAAA;AACjE,CAAC;AAMD,MAAM,CAAC,MAAM,wBAAwB,GAAG,OAAO,CAAA;AAG/C,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,CAAC,yBAAyB,EAAE,uBAAuB,CAAC,CAAC,CAAA;AAElF,SAAS,WAAW,CAAC,SAAiB,EAAE,GAAW;IACjD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,CAAA;AAC9E,CAAC;AAED,SAAS,gBAAgB,CAAC,GAAsB,EAAE,MAAc,EAAE,GAAW;IAC3E,MAAM,OAAO,GAAG,YAAY,CAAe,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAA;IACjE,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,IAAI,OAAO,OAAO,CAAC,SAAS,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAA;IAC/F,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,IAAI,GAAG,EAAE,CAAC;QACjD,iBAAiB,CAAC,GAAG,CAAC,CAAA;QACtB,OAAO,IAAI,CAAA;IACb,CAAC;IACD,OAAO,OAAO,CAAA;AAChB,CAAC;AAED,SAAS,iBAAiB,CAAC,GAAsB,EAAE,OAAqB;IACtE,MAAM,IAAI,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAA;IAClC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;IAC1D,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;AAC/E,CAAC;AAED,SAAS,iBAAiB,CAAC,GAAsB;IAC/C,MAAM,IAAI,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAA;IAClC,IAAI,UAAU,CAAC,IAAI,CAAC;QAAE,UAAU,CAAC,IAAI,CAAC,CAAA;AACxC,CAAC;AAGD,MAAM,CAAC,MAAM,oBAAoB,GAAG,SAAS,CAAA;AAU7C,MAAM,UAAU,cAAc,CAC5B,gBAA2C,EAC3C,cAA6B,EAC7B,QAA+B;IAE/B,IAAI,cAAc,KAAK,IAAI,EAAE,CAAC;QAC5B,MAAM,QAAQ,GAAG,QAAQ,EAAE,QAAQ,IAAI,EAAE,CAAA;QACzC,MAAM,QAAQ,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,EAAE,KAAK,KAAK,MAAM,CAAA;QACtF,IAAI,QAAQ,CAAC,oBAAoB,CAAC;YAAE,OAAO,oBAAoB,CAAA;QAC/D,KAAK,IAAI,CAAC,GAAG,CAAC,GAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACzB,MAAM,SAAS,GAAG,GAAG,oBAAoB,IAAI,CAAC,EAAE,CAAA;YAChD,IAAI,QAAQ,CAAC,SAAS,CAAC;gBAAE,OAAO,SAAS,CAAA;QAC3C,CAAC;IACH,CAAC;IACD,MAAM,IAAI,GAAG,CAAC,gBAAgB,IAAI,EAAE,CAAC;SAClC,WAAW,EAAE;SACb,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;SAC3B,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAA;IAC1B,IAAI,CAAC,IAAI;QAAE,OAAO,cAAc,CAAA;IAChC,MAAM,KAAK,GAAG,QAAQ,EAAE,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAA;IACxC,IAAI,KAAK,EAAE,cAAc,IAAI,KAAK,CAAC,cAAc,KAAK,cAAc;QAAE,OAAO,GAAG,IAAI,IAAI,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAA;IACpH,OAAO,IAAI,CAAA;AACb,CAAC;AAQD,MAAM,CAAC,MAAM,KAAK,GAAoB;IACpC,IAAI,EAAE,OAAO;IACb,OAAO,EAAE,qEAAqE;IAC9E,KAAK,EAAE,sGAAsG;IAC7G,OAAO,EACL,06BAA06B;IAC56B,KAAK,EAAE;QACL;YACE,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,SAAS;YAChB,WAAW,EACT,gHAAgH;SACnH;QACD;YACE,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,QAAQ;YACf,WAAW,EAAE,4DAA4D;SAC1E;QACD,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,gDAAgD,EAAE;KACpG;IACD,QAAQ,EAAE;QACR,eAAe;QACf,kGAAkG;QAClG,6CAA6C;KAC9C;IACD,KAAK,CAAC,GAAG,CAAC,OAAuB;QAC/B,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAA;QACvB,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAA;QACpC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAA;QAE5E,IAAI,OAAO,GAAG,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAA;QAG1D,IAAI,SAAS,GAAgE,IAAI,CAAA;QACjF,IAAI,OAAO,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,wBAAwB,EAAE,CAAC;YAChG,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;gBAExF,IAAI,KAAK,YAAY,WAAW,IAAI,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;oBAAE,OAAO,EAAE,MAAM,EAAE,SAAkB,EAAE,CAAA;gBAGvG,MAAM,KAAK,CAAA;YACb,CAAC,CAAC,CAAA;YACF,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBAC/D,iBAAiB,CAAC,GAAG,CAAC,CAAA;gBACtB,OAAO,GAAG,IAAI,CAAA;YAChB,CAAC;iBAAM,CAAC;gBAEN,SAAS,GAAG,MAAM,CAAA;YACpB,CAAC;QACH,CAAC;QACD,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,CACJ;gBACE,EAAE;gBACF,kCAAkC,OAAO,CAAC,SAAS,KAAK,WAAW,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,WAAW;gBAChH,UAAU,OAAO,CAAC,eAAe,EAAE;gBACnC,yBAAyB,OAAO,CAAC,IAAI,EAAE;gBACvC,EAAE;aACH,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAA;QACH,CAAC;aAAM,CAAC;YACN,MAAM,WAAW,GAAG,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,kBAAkB,CAAC,GAAG,CAAC,CAAA;YAClF,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,CAAA;YAC5D,OAAO,GAAG;gBACR,MAAM;gBACN,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,eAAe,EAAE,OAAO,CAAC,eAAe;gBACxC,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,WAAW,EAAE,OAAO,CAAC,QAAQ;gBAC7B,WAAW;gBACX,SAAS,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,WAAW,EAAE;aACjD,CAAA;YACD,iBAAiB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;YAC/B,MAAM,CAAC,CAAC,EAAE,EAAE,UAAU,OAAO,CAAC,eAAe,EAAE,EAAE,yBAAyB,OAAO,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;QAC3G,CAAC;QAED,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YAC5C,OAAO;gBACL,MAAM,EAAE,SAAS;gBACjB,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,eAAe,EAAE,OAAO,CAAC,eAAe;gBACxC,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,gBAAgB,EAAE,WAAW,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;gBAC/D,IAAI,EAAE,mFAAmF;aAC1F,CAAA;QACH,CAAC;QAED,MAAM,CAAC,iCAAiC,OAAO,CAAC,SAAS,0DAA0D,CAAC,CAAA;QACpH,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAA;QACpD,MAAM,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,SAAS,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,OAAO,CAAC,CAAA;QACjH,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAA;QACpE,SAAS,CAAC;YACR,IAAI,OAAO,CAAC,GAAG,EAAE,IAAI,MAAM,EAAE,CAAC;gBAC5B,MAAM,IAAI,WAAW,CAAC,4DAA4D,EAAE;oBAClF,IAAI,EAAE,eAAe;oBACrB,MAAM,EAAE,CAAC;iBACV,CAAC,CAAA;YACJ,CAAC;YAED,IAAI,CAAC,SAAS;gBAAE,MAAM,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAA;YAC/C,MAAM,MAAM,GAAG,SAAS,IAAI,CAAC,MAAM,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAA;YAC/E,SAAS,GAAG,IAAI,CAAA;YAChB,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBAChC,IAAI,OAAO,CAAC,GAAG,EAAE,GAAG,MAAM,EAAE,CAAC;oBAC3B,iBAAiB,CAAC,GAAG,CAAC,CAAA;oBACtB,MAAM,IAAI,WAAW,CAAC,mDAAmD,EAAE;wBACzE,IAAI,EAAE,eAAe;wBACrB,MAAM,EAAE,CAAC;qBACV,CAAC,CAAA;gBACJ,CAAC;gBACD,SAAQ;YACV,CAAC;YACD,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAC/B,iBAAiB,CAAC,GAAG,CAAC,CAAA;gBACtB,MAAM,IAAI,WAAW,CAAC,sCAAsC,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAA;YACpG,CAAC;YACD,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBAChC,iBAAiB,CAAC,GAAG,CAAC,CAAA;gBACtB,MAAM,IAAI,WAAW,CAAC,qDAAqD,EAAE;oBAC3E,IAAI,EAAE,eAAe;oBACrB,MAAM,EAAE,CAAC;iBACV,CAAC,CAAA;YACJ,CAAC;YACD,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBAChC,iBAAiB,CAAC,GAAG,CAAC,CAAA;gBACtB,MAAM,IAAI,WAAW,CAAC,sEAAsE,EAAE;oBAC5F,IAAI,EAAE,eAAe;oBACrB,MAAM,EAAE,CAAC;iBACV,CAAC,CAAA;YACJ,CAAC;YACD,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU;gBAAE,SAAQ;YAG1C,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,cAAc,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,CAAA;YACxF,MAAM,cAAc,GAAG,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,cAAc,CAAA;YAEtE,MAAM,EAAE,GACN,KAAK,KAAK,cAAc;gBACtB,CAAC,CAAC,MAAM,OAAO;qBACV,SAAS,CAAC,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,EAAE,CAAC;qBACpD,EAAE,EAAE;qBACJ,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;gBACtB,CAAC,CAAC,IAAI,CAAA;YACV,MAAM,gBAAgB,GAAG,EAAE,EAAE,YAAY,EAAE,IAAI,IAAI,IAAI,CAAA;YACvD,MAAM,WAAW,GACf,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,SAAS,CAAC;gBACpC,cAAc,CAAC,gBAAgB,EAAE,cAAc,EAAE,YAAY,CAAiB,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;YACrG,MAAM,IAAI,GAAG,WAAW,CACtB,WAAW,EACX;gBACE,MAAM,EAAE,MAAM,CAAC,GAAG;gBAClB,MAAM;gBACN,KAAK;gBACL,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC7C,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACjD,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC7D,EACD,EAAE,GAAG,EAAE,WAAW,EAAE,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE,SAAS,CAAC,IAAI,IAAI,EAAE,CACpE,CAAA;YAED,iBAAiB,CAAC,GAAG,CAAC,CAAA;YACtB,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;gBACrB,MAAM,CACJ,mLAAmL,CACpL,CAAA;YACH,CAAC;YACD,OAAO;gBACL,EAAE,EAAE,IAAI;gBACR,OAAO,EAAE,WAAW;gBACpB,KAAK;gBACL,cAAc;gBACd,gBAAgB;gBAChB,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,SAAS,EAAE,MAAM,CAAC,SAAS;gBAC3B,OAAO,EAAE,IAAI;aACd,CAAA;QACH,CAAC;IACH,CAAC;CACF,CAAA;AAED,MAAM,CAAC,MAAM,MAAM,GAAoB;IACrC,IAAI,EAAE,QAAQ;IACd,OAAO,EAAE,gFAAgF;IACzF,KAAK,EAAE,mCAAmC;IAC1C,KAAK,EAAE;QACL;YACE,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,QAAQ;YACf,WAAW,EAAE,iDAAiD;SAC/D;KACF;IACD,KAAK,CAAC,GAAG,CAAC,OAAuB;QAC/B,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,SAAS,CAAC,CAAA;QACjD,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAA;YACpC,MAAM,KAAK,GAAG,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;YAC9C,IAAI,CAAC,KAAK;gBAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,8CAA8C,EAAE,CAAA;YACzF,OAAO,EAAE,EAAE,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC,CAAE,EAAE,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAA;QAClF,CAAC;QACD,OAAO,EAAE,EAAE,EAAE,aAAa,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAA;IACzE,CAAC;CACF,CAAA;AAED,MAAM,CAAC,MAAM,MAAM,GAAoB;IACrC,IAAI,EAAE,QAAQ;IACd,OAAO,EACL,6GAA6G;IAC/G,KAAK,EAAE,gBAAgB;IACvB,OAAO,EACL,ifAAif;IACnf,QAAQ,EAAE,IAAI;IACd,KAAK,CAAC,GAAG,CAAC,OAAuB;QAC/B,MAAM,EAAE,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,CAAA;QACpC,OAAO;YACL,KAAK,EAAE,EAAE,CAAC,KAAK;YACf,YAAY,EAAE,EAAE,CAAC,YAAY;YAC7B,aAAa,EAAE,EAAE,CAAC,aAAa;YAC/B,GAAG,EAAE,EAAE,CAAC,GAAG;YACX,UAAU,EAAE,EAAE,CAAC,UAAU;YACzB,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM;YAC7B,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,SAAS,IAAI,IAAI;YAC3C,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,QAAQ,IAAI,IAAI;YACzC,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK,IAAI,IAAI;YACnC,WAAW,EAAE,OAAO,CAAC,MAAM,CAAC,WAAW,IAAI,IAAI;YAC/C,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,QAAQ,IAAI,IAAI;YACzC,YAAY,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM;YACnC,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO;gBAC7B,CAAC,CAAC;oBACE,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI;oBACjC,WAAW,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,IAAI,IAAI;oBACvD,UAAU,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,IAAI,IAAI;iBACtD;gBACH,CAAC,CAAC,IAAI;SACT,CAAA;IACH,CAAC;CACF,CAAA"}