@vm0/cli 9.169.2 → 9.170.1
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/{chunk-CZICABIP.js → chunk-32G2S2HY.js} +9 -143
- package/{chunk-CZICABIP.js.map → chunk-32G2S2HY.js.map} +1 -1
- package/index.js +9 -9
- package/package.json +1 -1
- package/zero.js +268 -38
- package/zero.js.map +1 -1
package/index.js
CHANGED
|
@@ -69,7 +69,7 @@ import {
|
|
|
69
69
|
source_default,
|
|
70
70
|
volumeConfigSchema,
|
|
71
71
|
withErrorHandler
|
|
72
|
-
} from "./chunk-
|
|
72
|
+
} from "./chunk-32G2S2HY.js";
|
|
73
73
|
import {
|
|
74
74
|
__toESM,
|
|
75
75
|
init_esm_shims
|
|
@@ -388,7 +388,7 @@ function getConfigPath() {
|
|
|
388
388
|
return join(os.homedir(), ".vm0", "config.json");
|
|
389
389
|
}
|
|
390
390
|
var infoCommand = new Command().name("info").description("Display environment and debug information").action(async () => {
|
|
391
|
-
console.log(source_default.bold(`VM0 CLI v${"9.
|
|
391
|
+
console.log(source_default.bold(`VM0 CLI v${"9.170.1"}`));
|
|
392
392
|
console.log();
|
|
393
393
|
const config = await loadConfig();
|
|
394
394
|
const hasEnvToken = !!process.env.VM0_TOKEN;
|
|
@@ -4281,7 +4281,7 @@ var composeCommand = new Command().name("compose").description("Create or update
|
|
|
4281
4281
|
options.autoUpdate = false;
|
|
4282
4282
|
}
|
|
4283
4283
|
if (options.autoUpdate !== false) {
|
|
4284
|
-
await startSilentUpgrade("9.
|
|
4284
|
+
await startSilentUpgrade("9.170.1");
|
|
4285
4285
|
}
|
|
4286
4286
|
try {
|
|
4287
4287
|
let result;
|
|
@@ -4383,7 +4383,7 @@ var mainRunCommand = new Command().name("run").description("Run an agent").argum
|
|
|
4383
4383
|
withErrorHandler(
|
|
4384
4384
|
async (identifier, prompt, options) => {
|
|
4385
4385
|
if (options.autoUpdate !== false) {
|
|
4386
|
-
await startSilentUpgrade("9.
|
|
4386
|
+
await startSilentUpgrade("9.170.1");
|
|
4387
4387
|
}
|
|
4388
4388
|
const { name, version } = parseIdentifier(identifier);
|
|
4389
4389
|
let composeId;
|
|
@@ -6177,13 +6177,13 @@ var upgradeCommand = new Command().name("upgrade").description("Upgrade vm0 CLI
|
|
|
6177
6177
|
if (latestVersion === null) {
|
|
6178
6178
|
throw new Error("Could not check for updates. Please try again later.");
|
|
6179
6179
|
}
|
|
6180
|
-
if (latestVersion === "9.
|
|
6181
|
-
console.log(source_default.green(`\u2713 Already up to date (${"9.
|
|
6180
|
+
if (latestVersion === "9.170.1") {
|
|
6181
|
+
console.log(source_default.green(`\u2713 Already up to date (${"9.170.1"})`));
|
|
6182
6182
|
return;
|
|
6183
6183
|
}
|
|
6184
6184
|
console.log(
|
|
6185
6185
|
source_default.yellow(
|
|
6186
|
-
`Current version: ${"9.
|
|
6186
|
+
`Current version: ${"9.170.1"} -> Latest version: ${latestVersion}`
|
|
6187
6187
|
)
|
|
6188
6188
|
);
|
|
6189
6189
|
console.log();
|
|
@@ -6210,7 +6210,7 @@ var upgradeCommand = new Command().name("upgrade").description("Upgrade vm0 CLI
|
|
|
6210
6210
|
const success = await performUpgrade(packageManager);
|
|
6211
6211
|
if (success) {
|
|
6212
6212
|
console.log(
|
|
6213
|
-
source_default.green(`\u2713 Upgraded from ${"9.
|
|
6213
|
+
source_default.green(`\u2713 Upgraded from ${"9.170.1"} to ${latestVersion}`)
|
|
6214
6214
|
);
|
|
6215
6215
|
return;
|
|
6216
6216
|
}
|
|
@@ -6277,7 +6277,7 @@ var whoamiCommand = new Command().name("whoami").description("Show current ident
|
|
|
6277
6277
|
|
|
6278
6278
|
// src/index.ts
|
|
6279
6279
|
var program = new Command();
|
|
6280
|
-
program.name("vm0").description("VM0 CLI - Build and run agents with natural language").version("9.
|
|
6280
|
+
program.name("vm0").description("VM0 CLI - Build and run agents with natural language").version("9.170.1");
|
|
6281
6281
|
program.addCommand(authCommand);
|
|
6282
6282
|
program.addCommand(infoCommand);
|
|
6283
6283
|
program.addCommand(composeCommand);
|
package/package.json
CHANGED
package/zero.js
CHANGED
|
@@ -126,7 +126,6 @@ import {
|
|
|
126
126
|
resolveFirewallPolicies,
|
|
127
127
|
resolveZeroScheduleByAgent,
|
|
128
128
|
saveConfig,
|
|
129
|
-
searchConnectors,
|
|
130
129
|
searchZeroChat,
|
|
131
130
|
searchZeroConnectors,
|
|
132
131
|
searchZeroLogs,
|
|
@@ -153,7 +152,7 @@ import {
|
|
|
153
152
|
zeroAgentCustomSkillNameSchema,
|
|
154
153
|
zeroLocalAgentCommand,
|
|
155
154
|
zeroTokenAllowsFeatureSwitch
|
|
156
|
-
} from "./chunk-
|
|
155
|
+
} from "./chunk-32G2S2HY.js";
|
|
157
156
|
import {
|
|
158
157
|
__toESM,
|
|
159
158
|
init_esm_shims
|
|
@@ -1874,6 +1873,162 @@ var listCommand6 = new Command().name("list").alias("ls").description("List all
|
|
|
1874
1873
|
|
|
1875
1874
|
// src/commands/zero/connector/search.ts
|
|
1876
1875
|
init_esm_shims();
|
|
1876
|
+
|
|
1877
|
+
// ../../packages/connectors/src/connector-search.ts
|
|
1878
|
+
init_esm_shims();
|
|
1879
|
+
var TOKEN_BOUNDARY = /[_\-\s]+/;
|
|
1880
|
+
var CASE_BOUNDARY = /(?<=[a-z])(?=[A-Z])|(?<=[A-Z])(?=[A-Z][a-z])/;
|
|
1881
|
+
var MIN_SCORE = 10;
|
|
1882
|
+
function tokenize(input) {
|
|
1883
|
+
const tokens = /* @__PURE__ */ new Set();
|
|
1884
|
+
for (const chunk of input.split(TOKEN_BOUNDARY)) {
|
|
1885
|
+
if (!chunk) continue;
|
|
1886
|
+
for (const sub of chunk.split(CASE_BOUNDARY)) {
|
|
1887
|
+
const lower = sub.toLowerCase();
|
|
1888
|
+
if (lower) tokens.add(lower);
|
|
1889
|
+
}
|
|
1890
|
+
}
|
|
1891
|
+
return tokens;
|
|
1892
|
+
}
|
|
1893
|
+
function connectorAccessEnvBindings(access) {
|
|
1894
|
+
switch (access.kind) {
|
|
1895
|
+
case "static":
|
|
1896
|
+
case "refresh-token":
|
|
1897
|
+
return access.envBindings;
|
|
1898
|
+
case "none":
|
|
1899
|
+
return {};
|
|
1900
|
+
}
|
|
1901
|
+
}
|
|
1902
|
+
function getManualGrantFields(method) {
|
|
1903
|
+
return method.grant.kind === "manual" ? method.grant.fields : void 0;
|
|
1904
|
+
}
|
|
1905
|
+
function listSecretNames(config) {
|
|
1906
|
+
const names = [];
|
|
1907
|
+
for (const method of Object.values(config.authMethods)) {
|
|
1908
|
+
for (const name of Object.keys(getManualGrantFields(method) ?? {})) {
|
|
1909
|
+
names.push(name);
|
|
1910
|
+
}
|
|
1911
|
+
for (const valueRef of Object.values(
|
|
1912
|
+
connectorAccessEnvBindings(method.access)
|
|
1913
|
+
)) {
|
|
1914
|
+
if (valueRef.startsWith("$secrets.")) {
|
|
1915
|
+
names.push(valueRef.slice("$secrets.".length));
|
|
1916
|
+
}
|
|
1917
|
+
}
|
|
1918
|
+
}
|
|
1919
|
+
return names;
|
|
1920
|
+
}
|
|
1921
|
+
function findExactMatch(keywordLower, type, config) {
|
|
1922
|
+
if (type.toLowerCase() === keywordLower) {
|
|
1923
|
+
return { score: 100, matchedField: "type" };
|
|
1924
|
+
}
|
|
1925
|
+
for (const envName of Object.keys(getConnectorEnvBindings(type))) {
|
|
1926
|
+
if (envName.toLowerCase() === keywordLower) {
|
|
1927
|
+
return { score: 90, matchedField: `env:${envName}` };
|
|
1928
|
+
}
|
|
1929
|
+
}
|
|
1930
|
+
if (config.label.toLowerCase() === keywordLower) {
|
|
1931
|
+
return { score: 80, matchedField: "label" };
|
|
1932
|
+
}
|
|
1933
|
+
const tags = config.tags ?? [];
|
|
1934
|
+
for (const tag of tags) {
|
|
1935
|
+
if (tag === keywordLower) {
|
|
1936
|
+
return { score: 70, matchedField: `tag:${tag}` };
|
|
1937
|
+
}
|
|
1938
|
+
}
|
|
1939
|
+
return null;
|
|
1940
|
+
}
|
|
1941
|
+
function findSubstringMatch(keywordLower, type, config) {
|
|
1942
|
+
if (type.toLowerCase().includes(keywordLower)) {
|
|
1943
|
+
return { score: 50, matchedField: "type" };
|
|
1944
|
+
}
|
|
1945
|
+
if (config.label.toLowerCase().includes(keywordLower)) {
|
|
1946
|
+
return { score: 50, matchedField: "label" };
|
|
1947
|
+
}
|
|
1948
|
+
for (const envName of Object.keys(getConnectorEnvBindings(type))) {
|
|
1949
|
+
if (envName.toLowerCase().includes(keywordLower)) {
|
|
1950
|
+
return { score: 40, matchedField: `env:${envName}` };
|
|
1951
|
+
}
|
|
1952
|
+
}
|
|
1953
|
+
for (const name of listSecretNames(config)) {
|
|
1954
|
+
if (name.toLowerCase().includes(keywordLower)) {
|
|
1955
|
+
return { score: 30, matchedField: `secret:${name}` };
|
|
1956
|
+
}
|
|
1957
|
+
}
|
|
1958
|
+
const tags = config.tags ?? [];
|
|
1959
|
+
for (const tag of tags) {
|
|
1960
|
+
if (tag.includes(keywordLower)) {
|
|
1961
|
+
return { score: 25, matchedField: `tag:${tag}` };
|
|
1962
|
+
}
|
|
1963
|
+
}
|
|
1964
|
+
return null;
|
|
1965
|
+
}
|
|
1966
|
+
function collectCandidateTokens(type, config) {
|
|
1967
|
+
const tokens = /* @__PURE__ */ new Set();
|
|
1968
|
+
const sources = [
|
|
1969
|
+
type,
|
|
1970
|
+
config.label,
|
|
1971
|
+
...Object.keys(getConnectorEnvBindings(type)),
|
|
1972
|
+
...listSecretNames(config),
|
|
1973
|
+
...config.tags ?? []
|
|
1974
|
+
];
|
|
1975
|
+
for (const source of sources) {
|
|
1976
|
+
for (const token of tokenize(source)) {
|
|
1977
|
+
tokens.add(token);
|
|
1978
|
+
}
|
|
1979
|
+
}
|
|
1980
|
+
return tokens;
|
|
1981
|
+
}
|
|
1982
|
+
function findTokenIntersection(keywordTokens, type, config) {
|
|
1983
|
+
const candidateTokens = collectCandidateTokens(type, config);
|
|
1984
|
+
let intersection = 0;
|
|
1985
|
+
let firstCommon = "";
|
|
1986
|
+
for (const token of keywordTokens) {
|
|
1987
|
+
if (candidateTokens.has(token)) {
|
|
1988
|
+
intersection++;
|
|
1989
|
+
if (!firstCommon) firstCommon = token;
|
|
1990
|
+
}
|
|
1991
|
+
}
|
|
1992
|
+
if (intersection === 0) return null;
|
|
1993
|
+
return { score: 10 * intersection, matchedField: `token:${firstCommon}` };
|
|
1994
|
+
}
|
|
1995
|
+
function scoreConnector(keywordLower, keywordTokens, type, config) {
|
|
1996
|
+
const exact = findExactMatch(keywordLower, type, config);
|
|
1997
|
+
if (exact) return exact;
|
|
1998
|
+
const candidates = [];
|
|
1999
|
+
const substring = findSubstringMatch(keywordLower, type, config);
|
|
2000
|
+
if (substring) candidates.push(substring);
|
|
2001
|
+
const token = findTokenIntersection(keywordTokens, type, config);
|
|
2002
|
+
if (token) candidates.push(token);
|
|
2003
|
+
if (candidates.length === 0) return null;
|
|
2004
|
+
const best = candidates.reduce((a, b) => {
|
|
2005
|
+
return a.score >= b.score ? a : b;
|
|
2006
|
+
});
|
|
2007
|
+
if (best.score < MIN_SCORE) return null;
|
|
2008
|
+
return best;
|
|
2009
|
+
}
|
|
2010
|
+
function searchConnectors(keyword, limit, filter) {
|
|
2011
|
+
const trimmed = keyword.trim();
|
|
2012
|
+
if (!trimmed) return { results: [], total: 0 };
|
|
2013
|
+
const keywordLower = trimmed.toLowerCase();
|
|
2014
|
+
const keywordTokens = tokenize(trimmed);
|
|
2015
|
+
const hits = [];
|
|
2016
|
+
for (const type of CONNECTOR_TYPE_KEYS) {
|
|
2017
|
+
if (filter && !filter(type)) continue;
|
|
2018
|
+
const config = CONNECTOR_TYPES[type];
|
|
2019
|
+
const hit = scoreConnector(keywordLower, keywordTokens, type, config);
|
|
2020
|
+
if (!hit) continue;
|
|
2021
|
+
hits.push({ type, score: hit.score, matchedField: hit.matchedField });
|
|
2022
|
+
}
|
|
2023
|
+
hits.sort((a, b) => {
|
|
2024
|
+
if (b.score !== a.score) return b.score - a.score;
|
|
2025
|
+
return a.type.localeCompare(b.type);
|
|
2026
|
+
});
|
|
2027
|
+
const capped = limit > 0 ? hits.slice(0, limit) : hits;
|
|
2028
|
+
return { results: capped, total: hits.length };
|
|
2029
|
+
}
|
|
2030
|
+
|
|
2031
|
+
// src/commands/zero/connector/search.ts
|
|
1877
2032
|
var DEFAULT_LIMIT = 5;
|
|
1878
2033
|
var EXACT_MATCH_THRESHOLD = 80;
|
|
1879
2034
|
function isConnectorType2(type) {
|
|
@@ -6755,8 +6910,8 @@ init_esm_shims();
|
|
|
6755
6910
|
|
|
6756
6911
|
// src/commands/zero/shared/open-design-registry.ts
|
|
6757
6912
|
init_esm_shims();
|
|
6758
|
-
var OPEN_DESIGN_REPO = "
|
|
6759
|
-
var OPEN_DESIGN_COMMIT = "
|
|
6913
|
+
var OPEN_DESIGN_REPO = "nexu-io/open-design";
|
|
6914
|
+
var OPEN_DESIGN_COMMIT = "3fb620af423534643677c7c6fae76be088fa770a";
|
|
6760
6915
|
var VM0_SKILLS_REPO = "vm0-ai/vm0-skills";
|
|
6761
6916
|
var VM0_SKILLS_REF = "main";
|
|
6762
6917
|
var OPEN_DESIGN_REGISTRY_VERSION = `federated:${OPEN_DESIGN_REPO}@${OPEN_DESIGN_COMMIT}`;
|
|
@@ -9147,7 +9302,11 @@ var OPEN_DESIGN_REGISTRY = [
|
|
|
9147
9302
|
name: "Notion Illustration",
|
|
9148
9303
|
description: "Zero-native illustration style for hand-drawn product spot illustrations with simple ink contours and soft backgrounds.",
|
|
9149
9304
|
desc: 'Notion-editorial-style hand-drawn spot illustration. Black brush-pen ink on white, tapered confident strokes, solid-black curly hair, solid-black pants/shoes, 3/4 face turned toward viewer with closed-eye smile and soft nose hint, open breathing body outlines, and 1-3 supporting scene props + ambient marks that frame the moment. Trigger when user says /notion-illustration, asks for a "Notion-style illustration", "Notion spot illustration", or a new piece in this hand-drawn brush-pen Notion editorial style.',
|
|
9150
|
-
source: {
|
|
9305
|
+
source: {
|
|
9306
|
+
repo: VM0_SKILLS_REPO,
|
|
9307
|
+
ref: VM0_SKILLS_REF,
|
|
9308
|
+
path: "illustration-template/notion-illustration"
|
|
9309
|
+
}
|
|
9151
9310
|
},
|
|
9152
9311
|
{
|
|
9153
9312
|
id: "vm0:image-style:vm0-illustration",
|
|
@@ -9155,7 +9314,11 @@ var OPEN_DESIGN_REGISTRY = [
|
|
|
9155
9314
|
name: "vm0 Illustration",
|
|
9156
9315
|
description: "vm0 in-app spot illustration style with bold hand-drawn ink line art, white-filled interiors, and a soft rounded color backdrop.",
|
|
9157
9316
|
desc: "Generate vm0-style vm0 in-app spot illustrations: bold hand-drawn ink line art with white-filled interiors, a soft rounded color backdrop, transparent output, and simple iconic metaphors for product states.",
|
|
9158
|
-
source: {
|
|
9317
|
+
source: {
|
|
9318
|
+
repo: VM0_SKILLS_REPO,
|
|
9319
|
+
ref: VM0_SKILLS_REF,
|
|
9320
|
+
path: "illustration-template/vm0-illustration"
|
|
9321
|
+
}
|
|
9159
9322
|
},
|
|
9160
9323
|
{
|
|
9161
9324
|
id: "vm0:image-style:postcard-illustration",
|
|
@@ -9163,7 +9326,11 @@ var OPEN_DESIGN_REGISTRY = [
|
|
|
9163
9326
|
name: "Postcard Illustration",
|
|
9164
9327
|
description: "Hand-drawn editorial postcard / travel-journal illustration with fine black ink linework, flat saturated gouache fills, sharp edges, dense small repeated ink patterns, paper-grain texture, sparse white speckles, and a tall portrait composition.",
|
|
9165
9328
|
desc: 'Hand-drawn editorial postcard illustration style. Fine black marker/pen ink linework over flat saturated gouache color fills with sharp edges, dense small repeated ink patterns on surfaces (rows of windows, shingle curves, hatching, stippling), subtle paper-grain background texture, tiny scattered white speckles (snow / petals / sparkle), and a tall portrait composition with a layered foreground-midground-background. Travel-journal / urban-sketcher aesthetic. Trigger when the user says /postcard-illustration, asks for a "postcard illustration", "travel illustration", "urban sketcher style", or briefs a palette + scene archetype + complexity.',
|
|
9166
|
-
source: {
|
|
9329
|
+
source: {
|
|
9330
|
+
repo: VM0_SKILLS_REPO,
|
|
9331
|
+
ref: VM0_SKILLS_REF,
|
|
9332
|
+
path: "illustration-template/postcard-illustration"
|
|
9333
|
+
}
|
|
9167
9334
|
},
|
|
9168
9335
|
{
|
|
9169
9336
|
id: "vm0:image-style:folk-storybook",
|
|
@@ -9171,7 +9338,11 @@ var OPEN_DESIGN_REGISTRY = [
|
|
|
9171
9338
|
name: "Folk Storybook Illustration",
|
|
9172
9339
|
description: "Folk-art children's picture-book illustration \u2014 hand-painted gouache and watercolor scenes with anthropomorphic animal characters, closed-crescent-eye smiles, dusty muted folk palette, and decorative pattern surfaces.",
|
|
9173
9340
|
desc: "Folk-art children's picture-book illustration style \u2014 hand-painted gouache/watercolor scene on aged paper, anthropomorphic animal characters with closed-crescent-eye smiles, dusty muted folk palette, decorative pattern surfaces (wallpaper, rugs, textiles), and a hushed lullaby mood. Trigger when users ask for a folk-art illustration, storybook scene, cozy animal illustration, or any new piece in this Eastern European picture-book style.",
|
|
9174
|
-
source: {
|
|
9341
|
+
source: {
|
|
9342
|
+
repo: VM0_SKILLS_REPO,
|
|
9343
|
+
ref: VM0_SKILLS_REF,
|
|
9344
|
+
path: "illustration-template/folk-storybook"
|
|
9345
|
+
}
|
|
9175
9346
|
},
|
|
9176
9347
|
{
|
|
9177
9348
|
id: "vm0:image-style:papernook",
|
|
@@ -9179,7 +9350,11 @@ var OPEN_DESIGN_REGISTRY = [
|
|
|
9179
9350
|
name: "Papernook",
|
|
9180
9351
|
description: "Hand-drawn editorial illustration set in a cozy cluttered personal-studio scene with warm cream paper, scratchy ink, painterly gouache fills, dot-eye character face, and dense edge-to-edge thematic props.",
|
|
9181
9352
|
desc: 'Hand-drawn editorial illustration in the spirit of a cluttered personal-studio scene. Loose scratchy black ink outlines that wobble, textured gouache fills with visible brush marks, warm cream paper background, simplified dot-eye character face, and a DENSE edge-to-edge composition where a centered character is orbited by thematic props that visually act out the scene metaphor. Default palette: dusty cornflower blue, soft coral pink, fresh sage green, charcoal, warm cream \u2014 no mustard, no burnt-orange. Trigger when user says /papernook, asks for a "papernook illustration", a "cozy cluttered editorial scene", a "warm-cream desk scene", or a new piece in this hand-drawn studio-clutter editorial style.',
|
|
9182
|
-
source: {
|
|
9353
|
+
source: {
|
|
9354
|
+
repo: VM0_SKILLS_REPO,
|
|
9355
|
+
ref: VM0_SKILLS_REF,
|
|
9356
|
+
path: "illustration-template/papernook"
|
|
9357
|
+
}
|
|
9183
9358
|
},
|
|
9184
9359
|
{
|
|
9185
9360
|
id: "vm0:image-style:painterly-botanical",
|
|
@@ -9187,7 +9362,11 @@ var OPEN_DESIGN_REGISTRY = [
|
|
|
9187
9362
|
name: "Painterly Botanical",
|
|
9188
9363
|
description: "Painterly watercolor + gouache portrait illustration with a single figure embraced by lush botanicals, closed-eye introspective expression, and a softly tinted paper-wash background.",
|
|
9189
9364
|
desc: 'Painterly watercolor + gouache portrait illustration. Single figure (closed eyes, contemplative) embraced by botanicals \u2014 leaves, blossoms, grasses. Translucent washes with visible pigment bleeds, sparse crisp ink line accents on key edges, tiny handwritten cursive signature in an upper corner, and a tinted paper-wash background (never pure white). Eight user axes drive composition: subject, hair, pose, botanicals, palette, background wash, complexity (L1/L2/L3), and format. Trigger when a brief describes a contemplative figure with foliage, a "watercolor portrait", a "botanical embrace", or asks for a piece in this painterly editorial style.',
|
|
9190
|
-
source: {
|
|
9365
|
+
source: {
|
|
9366
|
+
repo: VM0_SKILLS_REPO,
|
|
9367
|
+
ref: VM0_SKILLS_REF,
|
|
9368
|
+
path: "illustration-template/painterly-botanical"
|
|
9369
|
+
}
|
|
9191
9370
|
},
|
|
9192
9371
|
{
|
|
9193
9372
|
id: "vm0:image-style:iso-scene",
|
|
@@ -9195,7 +9374,11 @@ var OPEN_DESIGN_REGISTRY = [
|
|
|
9195
9374
|
name: "Isometric Editorial Scene",
|
|
9196
9375
|
description: "Isometric editorial-magazine scene illustration with ultra-fine hairline outlines, flat fills, a saturated monochromatic background, and a scene-as-metaphor composition built from theme-native props.",
|
|
9197
9376
|
desc: 'Isometric editorial-magazine scene illustration in a locked flat-vector style \u2014 ultra-fine hairline outlines, monochromatic saturated background filling the canvas, and a single composed scene whose props themselves embody the theme. Trigger when users say /iso-scene, ask for an "isometric editorial illustration", a "scene illustration in the editorial machine style", or brief with palette + scene archetype + complexity.',
|
|
9198
|
-
source: {
|
|
9377
|
+
source: {
|
|
9378
|
+
repo: VM0_SKILLS_REPO,
|
|
9379
|
+
ref: VM0_SKILLS_REF,
|
|
9380
|
+
path: "illustration-template/iso-scene"
|
|
9381
|
+
}
|
|
9199
9382
|
},
|
|
9200
9383
|
{
|
|
9201
9384
|
id: "vm0:image-style:inkdab",
|
|
@@ -9203,7 +9386,11 @@ var OPEN_DESIGN_REGISTRY = [
|
|
|
9203
9386
|
name: "Inkdab Illustration",
|
|
9204
9387
|
description: "Brush-pen editorial illustration where a free-floating color dab is painted first, then loose black ink linework is drawn freely on top \u2014 never as an outline around the color. Scribbled hatched hair, open-outline bodies, pure white background.",
|
|
9205
9388
|
desc: 'Brush-pen editorial illustration style \u2014 a flat accent-color "dab" painted first, then loose black ink drawn freely on top. ONE flat accent-color shape per prop (painted-first, never outlined in black), black hand-wobbled ink on pure white background, scribbled hatched hair, open-outline bodies with zero fill, and one small solid-accent triangle floating freely as a recurring motif. Trigger when user says /inkdab, asks for an "inkdab illustration", a "brush-pen illustration with a single accent color", a "free-floating color block illustration", or briefs in the style of the included reference images.',
|
|
9206
|
-
source: {
|
|
9389
|
+
source: {
|
|
9390
|
+
repo: VM0_SKILLS_REPO,
|
|
9391
|
+
ref: VM0_SKILLS_REF,
|
|
9392
|
+
path: "illustration-template/inkdab"
|
|
9393
|
+
}
|
|
9207
9394
|
},
|
|
9208
9395
|
{
|
|
9209
9396
|
id: "vm0:image-style:riso-relic",
|
|
@@ -9211,7 +9398,11 @@ var OPEN_DESIGN_REGISTRY = [
|
|
|
9211
9398
|
name: "Riso Relic",
|
|
9212
9399
|
description: 'Pop-art retro risograph poster of a single nostalgic everyday object on a saturated single-hue field \u2014 bold black ink outlines, halftone grain, hand-drawn doodle accents, tiny "SMALL OBJECTS IN TIME" banner up top, chunky retro headline with offset drop-shadow at the bottom.',
|
|
9213
9400
|
desc: 'Pop-art retro risograph poster of a single nostalgic everyday object \u2014 saturated single-color background, bold black ink outlines, halftone/riso grain, hand-drawn doodle accents (sparkles, squiggles, dots, music notes, lightning), tiny white "SMALL OBJECTS IN TIME" banner at top, chunky retro display headline at bottom with offset black drop-shadow. Trigger when user says /riso-relic, asks for a "riso poster", a "small objects in time" illustration, or any new piece in this nostalgic pop-art relic-object style.',
|
|
9214
|
-
source: {
|
|
9401
|
+
source: {
|
|
9402
|
+
repo: VM0_SKILLS_REPO,
|
|
9403
|
+
ref: VM0_SKILLS_REF,
|
|
9404
|
+
path: "illustration-template/riso-relic"
|
|
9405
|
+
}
|
|
9215
9406
|
},
|
|
9216
9407
|
{
|
|
9217
9408
|
id: "vm0:image-style:inkstomp",
|
|
@@ -9219,7 +9410,11 @@ var OPEN_DESIGN_REGISTRY = [
|
|
|
9219
9410
|
name: "Inkstomp",
|
|
9220
9411
|
description: "Loud indie-packaging poster style \u2014 full-bleed saturated flat color, a two-line hand-lettered headline, and one weird-cute black brush-ink character.",
|
|
9221
9412
|
desc: 'Inkstomp \u2014 a loud, hand-screened indie-packaging poster style. Full-bleed saturated flat color filling the entire canvas, a two-line hand-lettered headline (thin arched caps over chunky drop-shadowed display), and one weird-cute character drawn in thick uniform black brush ink. Trigger when the user says /inkstomp, asks for an "inkstomp poster", a "Ray Fenwick / Hattie Stewart packaging poster", an "indie brush-ink flavor card", or briefs in a "palette + headline + character" shape.',
|
|
9222
|
-
source: {
|
|
9413
|
+
source: {
|
|
9414
|
+
repo: VM0_SKILLS_REPO,
|
|
9415
|
+
ref: VM0_SKILLS_REF,
|
|
9416
|
+
path: "illustration-template/inkstomp"
|
|
9417
|
+
}
|
|
9223
9418
|
},
|
|
9224
9419
|
{
|
|
9225
9420
|
id: "vm0:image-style:folk-muse",
|
|
@@ -9227,7 +9422,11 @@ var OPEN_DESIGN_REGISTRY = [
|
|
|
9227
9422
|
name: "Folk Muse",
|
|
9228
9423
|
description: "Flat folk-art gouache portrait style \u2014 a single contemplative chest-up figure framed by an asymmetric botanical surround, with painted irises, smooth flat hair, a hand against the cheek, and a patterned robe.",
|
|
9229
9424
|
desc: 'Flat folk-art gouache portrait illustration in the contemporary editorial style of Carson Ellis, Maja Tomljanovic, and Bodil Jane. A single chest-up figure with an elongated mannerist oval face, tiny almond half-lidded eyes, smooth flat hair, one hand pressed against the face, a patterned robe filling the lower frame, and an asymmetric botanical surround filling the background edge-to-edge. Hand-painted matte gouache texture, flat color blocks, no harsh outlines, no photorealism. Calm, slightly melancholic, contemplative mood. Trigger when the user says /folk-muse, asks for a "folk-art portrait", "gouache portrait", "Carson Ellis style portrait", or any new piece in this contemplative folk-portrait style.',
|
|
9230
|
-
source: {
|
|
9425
|
+
source: {
|
|
9426
|
+
repo: VM0_SKILLS_REPO,
|
|
9427
|
+
ref: VM0_SKILLS_REF,
|
|
9428
|
+
path: "illustration-template/folk-muse"
|
|
9429
|
+
}
|
|
9231
9430
|
},
|
|
9232
9431
|
{
|
|
9233
9432
|
id: "vm0:image-style:sunlit-gouache",
|
|
@@ -9235,7 +9434,11 @@ var OPEN_DESIGN_REGISTRY = [
|
|
|
9235
9434
|
name: "Sunlit Gouache",
|
|
9236
9435
|
description: "Bright pastel travel-painting illustration in opaque gouache on textured paper with chunky flat brushstrokes, vertical one-point perspective, and figures walking into warm sunlight.",
|
|
9237
9436
|
desc: 'Sunlit Gouache travel-painting illustration. Opaque gouache on textured paper, visible chunky flat brushstrokes with dry-brush highlights, locked six-color palette (cream, butter-yellow, sky-blue, sage-green, terracotta, one small red accent), vertical 2:3 one-point-perspective composition drawing the eye into a bright sunlit focal point, figures seen from behind walking into the scene, an overhead band of hanging elements (awning, prayer flags, catenary, bunting, lanterns) creating depth, dappled painterly reflections on the ground, airy optimistic warm mood. Trigger when user says /sunlit-gouache, asks for a "sunlit gouache illustration", "painterly travel scene", "gouache caf\xE9/market/temple/station scene", or a new piece in this bright pastel painted-light style.',
|
|
9238
|
-
source: {
|
|
9437
|
+
source: {
|
|
9438
|
+
repo: VM0_SKILLS_REPO,
|
|
9439
|
+
ref: VM0_SKILLS_REF,
|
|
9440
|
+
path: "illustration-template/sunlit-gouache"
|
|
9441
|
+
}
|
|
9239
9442
|
},
|
|
9240
9443
|
{
|
|
9241
9444
|
id: "vm0:image-style:mosaic-still-life",
|
|
@@ -9243,7 +9446,11 @@ var OPEN_DESIGN_REGISTRY = [
|
|
|
9243
9446
|
name: "Mosaic Still Life",
|
|
9244
9447
|
description: "Editorial still-life illustration in a mosaic-tile + painterly hybrid style \u2014 tessellated ground/sky/wall surfaces with crisp painterly objects, an animal companion, and a patterned textile peeking through.",
|
|
9245
9448
|
desc: 'Mosaic-tile + painterly hybrid editorial illustration. Tessellated/pointillist mosaic surfaces (grass, sky, sand, walls, floors) anchor the scene, with crisp painterly still-life objects rendered ON TOP. Always features a still-life centerpiece on a table, an animal companion at the heart of the scene, and at least one patterned textile peeking through. Cozy, nostalgic, bucolic mood. Trigger when user says /mosaic-still-life, asks for a "mosaic illustration", "mosaic-tile editorial illustration", "tessellated still life", or briefs with a palette + scene + animal in this style.',
|
|
9246
|
-
source: {
|
|
9449
|
+
source: {
|
|
9450
|
+
repo: VM0_SKILLS_REPO,
|
|
9451
|
+
ref: VM0_SKILLS_REF,
|
|
9452
|
+
path: "illustration-template/mosaic-still-life"
|
|
9453
|
+
}
|
|
9247
9454
|
},
|
|
9248
9455
|
{
|
|
9249
9456
|
id: "vm0:image-style:ink-mascot",
|
|
@@ -9251,7 +9458,11 @@ var OPEN_DESIGN_REGISTRY = [
|
|
|
9251
9458
|
name: "Ink Mascot",
|
|
9252
9459
|
description: "Vintage editorial marketing card. Bold serif headline and short serif descriptor over a hand-drawn black-ink anthropomorphic mascot (stick limbs, chunky white sneakers) on a single solid saturated flat color background.",
|
|
9253
9460
|
desc: 'Generate a 3:5 portrait editorial marketing card in a locked vintage-textbook style. Bold serif headline plus an optional short serif descriptor sit on a single solid saturated flat color background (no gradient, no divider, no ground line). A hand-drawn black-ink anthropomorphic hero object \u2014 paint bucket, magnifying glass, envelope, notebook, funnel, megaphone, rocket, seedling, gift box, compass, etc. \u2014 stands with two thin stick arms, two stick legs, and chunky white sneakers with black laces (the signature detail). Crosshatch and stipple shading on rounded surfaces; floating ink doodles (sparkles, arrows, hearts, percent or dollar signs, motion lines) at the requested density. Dialable along six axes: concept, palette, hero object, action, doodle density (L1 minimal, L2 balanced, L3 packed), and type layout (A title-top, B headline-bottom, C headline-only, D big-word + tiny-descriptor). Trigger when user says /ink-mascot, asks for a "marketing card illustration", a "retro editorial mascot poster", or briefs with a marketing concept plus palette plus character.',
|
|
9254
|
-
source: {
|
|
9461
|
+
source: {
|
|
9462
|
+
repo: VM0_SKILLS_REPO,
|
|
9463
|
+
ref: VM0_SKILLS_REF,
|
|
9464
|
+
path: "illustration-template/ink-mascot"
|
|
9465
|
+
}
|
|
9255
9466
|
},
|
|
9256
9467
|
{
|
|
9257
9468
|
id: "vm0:image-style:sticker-sheet",
|
|
@@ -9259,7 +9470,11 @@ var OPEN_DESIGN_REGISTRY = [
|
|
|
9259
9470
|
name: "Sticker Sheet",
|
|
9260
9471
|
description: "Hand-painted gouache sticker-sheet illustration with ~20 themed objects floating on white, punchy saturated palette, wobbly hand-drawn ink overlay, and tiny decorative marks on every item.",
|
|
9261
9472
|
desc: 'Sticker Sheet \u2014 hand-painted gouache sticker-sheet illustration. ~20 small floating themed objects on pure white, punchy saturated palette (coral, mustard, sage, dusty pink, navy, cream, warm brown), flat brushy gouache fills with wobbly hand-drawn ink linework and tiny decorative marks (dots, hatches, squiggles) on every object. Each object slightly tilted, no drop shadows, cheerful cozy lifestyle journal mood. Trigger when user says /sticker-sheet, asks for a "sticker sheet illustration", "hand-painted gouache sticker pack", "themed object sheet", or briefs with a scene theme + object count in this house style.',
|
|
9262
|
-
source: {
|
|
9473
|
+
source: {
|
|
9474
|
+
repo: VM0_SKILLS_REPO,
|
|
9475
|
+
ref: VM0_SKILLS_REF,
|
|
9476
|
+
path: "illustration-template/sticker-sheet"
|
|
9477
|
+
}
|
|
9263
9478
|
},
|
|
9264
9479
|
{
|
|
9265
9480
|
id: "vm0:image-style:flat-poster",
|
|
@@ -9267,7 +9482,11 @@ var OPEN_DESIGN_REGISTRY = [
|
|
|
9267
9482
|
name: "Flat Poster",
|
|
9268
9483
|
description: "Vertical flat-color editorial poster style \u2014 saturated solid background, one centered hand-drawn vector subject in bold deep-navy outlines with strict two-tone fill, headline pinned top-left, wordmark pinned bottom-right.",
|
|
9269
9484
|
desc: 'Flat Poster \u2014 a vertical flat-color editorial poster style for brand benefit cards, marketing posters, and in-app campaign visuals. Portrait 2:3 canvas filled edge-to-edge with one saturated hue; a single centered hand-drawn vector subject in deep-navy outlines with strict two-tone fill (pure white plus one darker bg-tint accent); a bold rounded sans-serif headline pinned top-left; a short wordmark (default VM0) pinned bottom-right; small floating accent marks around the subject; no body copy. Six creative dials: palette, subject archetype, composition preset, accent marks, headline voice, mood. Trigger when the user says /flat-poster, asks for a "flat-color editorial poster", a "brand benefit card", a "marketing card in the bold outline + flat color style", or briefs with a palette + subject + headline shape.',
|
|
9270
|
-
source: {
|
|
9485
|
+
source: {
|
|
9486
|
+
repo: VM0_SKILLS_REPO,
|
|
9487
|
+
ref: VM0_SKILLS_REF,
|
|
9488
|
+
path: "illustration-template/flat-poster"
|
|
9489
|
+
}
|
|
9271
9490
|
},
|
|
9272
9491
|
{
|
|
9273
9492
|
id: "vm0:image-style:mellow-pop",
|
|
@@ -9275,7 +9494,11 @@ var OPEN_DESIGN_REGISTRY = [
|
|
|
9275
9494
|
name: "Mellow Pop",
|
|
9276
9495
|
description: "Chill flat-vector editorial poster of a serene recurring character on a fully saturated solid color background, with a signature pop of bright leaf-green and a scene-as-metaphor composition.",
|
|
9277
9496
|
desc: 'Mellow-pop flat-vector editorial illustration: a recurring chill character with closed-eye smile, tiny nose hint, and short dark bobbed hair, posed inside a scene-as-metaphor composition on a single fully saturated solid color background, with a signature pop of bright leaf-green woven into every piece (hero prop, plants, motifs, or sweater). Thin uniform black outlines, flat solid fills only, no gradients or texture. Five dials per brief: palette, scene metaphor, complexity (L1/L2/L3), pose, outfit accent. Trigger when user says /mellow-pop, asks for a "mellow-pop illustration", "chill flat-vector poster", or briefs with a scene metaphor + palette + complexity.',
|
|
9278
|
-
source: {
|
|
9497
|
+
source: {
|
|
9498
|
+
repo: VM0_SKILLS_REPO,
|
|
9499
|
+
ref: VM0_SKILLS_REF,
|
|
9500
|
+
path: "illustration-template/mellow-pop"
|
|
9501
|
+
}
|
|
9279
9502
|
}
|
|
9280
9503
|
];
|
|
9281
9504
|
function filterByKind(kind) {
|
|
@@ -9308,16 +9531,16 @@ function selectOpenDesignCandidates() {
|
|
|
9308
9531
|
registryVersion: OPEN_DESIGN_REGISTRY_VERSION,
|
|
9309
9532
|
source: {
|
|
9310
9533
|
repo: OPEN_DESIGN_REPO,
|
|
9311
|
-
|
|
9534
|
+
ref: OPEN_DESIGN_COMMIT
|
|
9312
9535
|
},
|
|
9313
9536
|
sources: [
|
|
9314
9537
|
{
|
|
9315
9538
|
repo: OPEN_DESIGN_REPO,
|
|
9316
|
-
|
|
9539
|
+
ref: OPEN_DESIGN_COMMIT
|
|
9317
9540
|
},
|
|
9318
9541
|
{
|
|
9319
9542
|
repo: VM0_SKILLS_REPO,
|
|
9320
|
-
|
|
9543
|
+
ref: VM0_SKILLS_REF
|
|
9321
9544
|
}
|
|
9322
9545
|
],
|
|
9323
9546
|
candidates: {
|
|
@@ -9395,7 +9618,7 @@ function createStyledImageAuthoringPacket(options) {
|
|
|
9395
9618
|
`Registry: \`${candidateSlice.registryVersion}\``,
|
|
9396
9619
|
"Sources:",
|
|
9397
9620
|
...candidateSlice.sources.map((src) => {
|
|
9398
|
-
return `- \`${src.repo}@${src.
|
|
9621
|
+
return `- \`${src.repo}@${src.ref}\``;
|
|
9399
9622
|
}),
|
|
9400
9623
|
"",
|
|
9401
9624
|
"```json",
|
|
@@ -9404,7 +9627,7 @@ function createStyledImageAuthoringPacket(options) {
|
|
|
9404
9627
|
"",
|
|
9405
9628
|
"## Stage 2: Resolve Selected Resources",
|
|
9406
9629
|
"- Fetch or read the selected resource source before generation.",
|
|
9407
|
-
"-
|
|
9630
|
+
"- Each candidate carries a `source` object with `path` and optional `repo`/`ref`; when `repo`/`ref` are omitted, fall back to the registry-level source above.",
|
|
9408
9631
|
"- For directory refs, inspect the most relevant files such as `SKILL.md`, references, examples, and templates.",
|
|
9409
9632
|
"- If a source file cannot be fetched, state that limitation and fall back to the registry metadata for that resource.",
|
|
9410
9633
|
"",
|
|
@@ -9574,6 +9797,12 @@ var BUILT_IN_GENERATION_PROVIDERS = {
|
|
|
9574
9797
|
model: "fal-ai/bytedance/seedream/v4/text-to-image",
|
|
9575
9798
|
command: "zero generate image --provider built-in --model seedream4 -h",
|
|
9576
9799
|
reason: "available without connector setup"
|
|
9800
|
+
},
|
|
9801
|
+
{
|
|
9802
|
+
label: "Built-in fal.ai",
|
|
9803
|
+
model: "fal-ai/nano-banana-2",
|
|
9804
|
+
command: "zero generate image --provider built-in --model nano-banana-2 -h",
|
|
9805
|
+
reason: "available without connector setup"
|
|
9577
9806
|
}
|
|
9578
9807
|
],
|
|
9579
9808
|
presentation: [
|
|
@@ -9677,7 +9906,7 @@ var BUILT_IN_GENERATION_COMMANDS = {
|
|
|
9677
9906
|
image: {
|
|
9678
9907
|
label: "Built-in image generation",
|
|
9679
9908
|
command: "zero generate image --provider built-in -h",
|
|
9680
|
-
models: "fal.ai: gpt-image-1 (default), gpt-image-2, gpt-image-1.5, gpt-image-1-mini, flux-pro-1.1, flux-pro-1.1-ultra, qwen-image, seedream4"
|
|
9909
|
+
models: "fal.ai: gpt-image-1 (default), gpt-image-2, gpt-image-1.5, gpt-image-1-mini, flux-pro-1.1, flux-pro-1.1-ultra, qwen-image, seedream4, nano-banana-2"
|
|
9681
9910
|
},
|
|
9682
9911
|
video: {
|
|
9683
9912
|
label: "Built-in video generation",
|
|
@@ -10196,7 +10425,7 @@ function createImageGenerateCommand(config) {
|
|
|
10196
10425
|
"When listing providers (no --prompt given), include unavailable or not-yet-authorized connectors"
|
|
10197
10426
|
).option(
|
|
10198
10427
|
"--model <model>",
|
|
10199
|
-
"Model: gpt-image-1 (default), gpt-image-2, gpt-image-1.5, gpt-image-1-mini, flux-pro-1.1, flux-pro-1.1-ultra, qwen-image, or
|
|
10428
|
+
"Model: gpt-image-1 (default), gpt-image-2, gpt-image-1.5, gpt-image-1-mini, flux-pro-1.1, flux-pro-1.1-ultra, qwen-image, seedream4, or nano-banana-2",
|
|
10200
10429
|
"gpt-image-1"
|
|
10201
10430
|
).option(
|
|
10202
10431
|
"--size <size>",
|
|
@@ -10253,7 +10482,7 @@ Notes:
|
|
|
10253
10482
|
Models:
|
|
10254
10483
|
- fal.ai: gpt-image-1 (default), gpt-image-2, gpt-image-1.5,
|
|
10255
10484
|
gpt-image-1-mini, flux-pro-1.1, flux-pro-1.1-ultra, qwen-image,
|
|
10256
|
-
seedream4.
|
|
10485
|
+
seedream4, nano-banana-2.
|
|
10257
10486
|
GPT Image models bill by fal output image quality and size.
|
|
10258
10487
|
Other fal generations bill by output image or rounded-up output
|
|
10259
10488
|
megapixel, depending on the model.
|
|
@@ -10272,15 +10501,15 @@ Options:
|
|
|
10272
10501
|
- Quality: low, medium, high, or auto. Low is fastest for drafts.
|
|
10273
10502
|
- Background: auto, opaque, or transparent when supported. gpt-image-2,
|
|
10274
10503
|
Flux, Qwen, and Seedream do not support transparent backgrounds.
|
|
10275
|
-
- Format: png, jpeg, or webp for GPT Image models; png or
|
|
10276
|
-
other fal models.
|
|
10277
|
-
- fal-only controls: --seed
|
|
10504
|
+
- Format: png, jpeg, or webp for GPT Image and Nano Banana 2 models; png or
|
|
10505
|
+
jpeg for the other fal models.
|
|
10506
|
+
- fal-only controls: --seed and --safety-tolerance for supported fal models;
|
|
10278
10507
|
--enhance-prompt for flux-pro-1.1. --compression and --moderation low are
|
|
10279
10508
|
not supported on the fal-backed image path.
|
|
10280
10509
|
- Image-to-image: pass --image-url to use the model's fal edit/redux endpoint.
|
|
10281
|
-
|
|
10282
|
-
|
|
10283
|
-
accept --mask-image-url.
|
|
10510
|
+
Nano Banana 2 accepts up to 14 source images. Flux Redux accepts
|
|
10511
|
+
--image-prompt-strength to override the provider default; GPT edit models
|
|
10512
|
+
accept --input-fidelity and supported models accept --mask-image-url.
|
|
10284
10513
|
|
|
10285
10514
|
Image Styles:
|
|
10286
10515
|
${formatStyleListing(styles)}`;
|
|
@@ -10390,6 +10619,7 @@ var imageCommand = createImageGenerateCommand({
|
|
|
10390
10619
|
Pipe prompt: cat prompt.txt | zero generate image --skip-style
|
|
10391
10620
|
GPT Image model: zero generate image --skip-style --model gpt-image-1.5 --prompt "A poster" --size 1024x1536 --quality high
|
|
10392
10621
|
Flux model: zero generate image --skip-style --model flux-pro-1.1 --prompt "A product hero shot" --seed 42
|
|
10622
|
+
Nano Banana 2: zero generate image --skip-style --model nano-banana-2 --prompt "A crisp launch poster with readable typography"
|
|
10393
10623
|
Image-to-image: zero generate image --skip-style --model flux-pro-1.1 --image-url https://example.com/mockup.png --prompt "Turn this mockup into a polished product shot"
|
|
10394
10624
|
List providers: zero generate image
|
|
10395
10625
|
Use a connector: zero generate image --provider replicate`
|
|
@@ -10496,7 +10726,7 @@ function createHtmlArtifactAuthoringPacket(options) {
|
|
|
10496
10726
|
`Registry: \`${candidateSlice.registryVersion}\``,
|
|
10497
10727
|
"Sources:",
|
|
10498
10728
|
...candidateSlice.sources.map((src) => {
|
|
10499
|
-
return `- \`${src.repo}@${src.
|
|
10729
|
+
return `- \`${src.repo}@${src.ref}\``;
|
|
10500
10730
|
}),
|
|
10501
10731
|
"",
|
|
10502
10732
|
"```json",
|
|
@@ -10505,7 +10735,7 @@ function createHtmlArtifactAuthoringPacket(options) {
|
|
|
10505
10735
|
"",
|
|
10506
10736
|
"## Stage 2: Resolve Selected Resources",
|
|
10507
10737
|
"- For every selected resource, fetch or read the referenced source before authoring.",
|
|
10508
|
-
"-
|
|
10738
|
+
"- Each candidate carries a `source` object with `path` and optional `repo`/`ref`; when `repo`/`ref` are omitted, fall back to the registry-level source above.",
|
|
10509
10739
|
"- For directory refs, inspect the most relevant files such as `SKILL.md`, `DESIGN.md`, `README.md`, tokens, examples, and templates.",
|
|
10510
10740
|
"- If a source file cannot be fetched, state that limitation and fall back to the registry metadata for that resource.",
|
|
10511
10741
|
"",
|
|
@@ -12566,7 +12796,7 @@ function registerZeroCommands(prog, commands) {
|
|
|
12566
12796
|
var program = new Command();
|
|
12567
12797
|
program.name("zero").description(
|
|
12568
12798
|
"Zero CLI \u2014 interact with the zero platform from inside the sandbox"
|
|
12569
|
-
).version("9.
|
|
12799
|
+
).version("9.170.1").addHelpText("after", () => {
|
|
12570
12800
|
return buildZeroHelpText();
|
|
12571
12801
|
});
|
|
12572
12802
|
if (process.argv[1]?.endsWith("zero.js") || process.argv[1]?.endsWith("zero.ts") || process.argv[1]?.endsWith("zero")) {
|