veryfront 0.1.1104 → 0.1.1105

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 (34) hide show
  1. package/esm/cli/commands/build/command-help.js +2 -2
  2. package/esm/cli/commands/build/command.d.ts.map +1 -1
  3. package/esm/cli/commands/build/command.js +3 -1
  4. package/esm/cli/commands/build/config-display.js +1 -1
  5. package/esm/cli/commands/build/handler.d.ts +3 -3
  6. package/esm/cli/commands/build/handler.d.ts.map +1 -1
  7. package/esm/cli/commands/build/handler.js +5 -2
  8. package/esm/cli/commands/push/command-help.js +1 -1
  9. package/esm/cli/commands/push/command.d.ts +2 -1
  10. package/esm/cli/commands/push/command.d.ts.map +1 -1
  11. package/esm/cli/commands/push/command.js +18 -5
  12. package/esm/cli/mcp/tools/build-tool.d.ts +1 -1
  13. package/esm/cli/mcp/tools/build-tool.d.ts.map +1 -1
  14. package/esm/cli/mcp/tools/build-tool.js +2 -2
  15. package/esm/deno.js +1 -1
  16. package/esm/src/build/production-build/build/build-initializer.d.ts.map +1 -1
  17. package/esm/src/build/production-build/build/build-initializer.js +4 -1
  18. package/esm/src/build/production-build/build/build-orchestrator.d.ts +8 -0
  19. package/esm/src/build/production-build/build/build-orchestrator.d.ts.map +1 -1
  20. package/esm/src/build/production-build/build/build-orchestrator.js +27 -1
  21. package/esm/src/config/schemas/config.schema.d.ts +12 -0
  22. package/esm/src/config/schemas/config.schema.d.ts.map +1 -1
  23. package/esm/src/config/schemas/config.schema.js +6 -0
  24. package/esm/src/internal-agents/run-stream.d.ts.map +1 -1
  25. package/esm/src/internal-agents/run-stream.js +2 -3
  26. package/esm/src/registry/project-scoped-registry-manager.d.ts +7 -0
  27. package/esm/src/registry/project-scoped-registry-manager.d.ts.map +1 -1
  28. package/esm/src/registry/project-scoped-registry-manager.js +24 -0
  29. package/esm/src/skill/registry.d.ts +2 -0
  30. package/esm/src/skill/registry.d.ts.map +1 -1
  31. package/esm/src/skill/registry.js +4 -0
  32. package/esm/src/utils/version-constant.d.ts +1 -1
  33. package/esm/src/utils/version-constant.js +1 -1
  34. package/package.json +5 -5
@@ -19,11 +19,11 @@ export const buildHelp = {
19
19
  },
20
20
  {
21
21
  flag: "--ssg",
22
- description: "Enable static generation",
22
+ description: "Enable static generation (default; also configurable via build.ssg)",
23
23
  },
24
24
  {
25
25
  flag: "--no-ssg",
26
- description: "Disable static generation when another option enables it",
26
+ description: "Disable static generation (the build fails if it would emit no pages)",
27
27
  },
28
28
  {
29
29
  flag: "--include <paths>",
@@ -1 +1 @@
1
- {"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/build/command.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAI/C,gBAAgB;AAChB,wBAAsB,sBAAsB,CAAC,CAAC,EAC5C,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAC3B,WAAW,GAAE,MAAM,OAAO,CAAC,IAAI,CAG9B,GACA,OAAO,CAAC,CAAC,CAAC,CAiBZ;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAkFjE"}
1
+ {"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/build/command.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAI/C,gBAAgB;AAChB,wBAAsB,sBAAsB,CAAC,CAAC,EAC5C,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAC3B,WAAW,GAAE,MAAM,OAAO,CAAC,IAAI,CAG9B,GACA,OAAO,CAAC,CAAC,CAAC,CAiBZ;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAoFjE"}
@@ -61,7 +61,9 @@ export function buildCommand(options) {
61
61
  enableSplitting: options.splitting ?? true,
62
62
  enableCompression: options.compress ?? true,
63
63
  enablePrefetch: options.prefetch ?? true,
64
- ssg: options.ssg ?? false,
64
+ // Tri-state: buildProduction resolves an omitted flag against
65
+ // build.ssg in veryfront.config.ts, then defaults to enabled.
66
+ ssg: options.ssg,
65
67
  include: options.include,
66
68
  exclude: options.exclude,
67
69
  dryRun,
@@ -1,7 +1,7 @@
1
1
  import { bold, cyan, dim, green, red, yellow } from "../../ui/index.js";
2
2
  import { cliLogger } from "../../utils/index.js";
3
3
  export function displayBuildConfig(options) {
4
- const { projectDir, outputDir, splitting = true, compress = true, prefetch = true, ssg = false, include, exclude, dryRun = false, } = options;
4
+ const { projectDir, outputDir, splitting = true, compress = true, prefetch = true, ssg = true, include, exclude, dryRun = false, } = options;
5
5
  cliLogger.info(bold(cyan("\nšŸš€ Veryfront Production Build\n")));
6
6
  cliLogger.info("Starting production build");
7
7
  cliLogger.info(yellow("\nBuild Configuration:"));
@@ -11,7 +11,7 @@ export declare const getBuildArgsSchema: () => import("../../../src/internal-age
11
11
  compress: import("../../../src/internal-agents/schema.js").Schema<boolean>;
12
12
  noCompress: import("../../../src/internal-agents/schema.js").Schema<boolean>;
13
13
  prefetch: import("../../../src/internal-agents/schema.js").Schema<boolean>;
14
- ssg: import("../../../src/internal-agents/schema.js").Schema<boolean>;
14
+ ssg: import("../../../src/internal-agents/schema.js").Schema<boolean | undefined>;
15
15
  noSsg: import("../../../src/internal-agents/schema.js").Schema<boolean>;
16
16
  include: import("../../../src/internal-agents/schema.js").Schema<string[] | undefined>;
17
17
  exclude: import("../../../src/internal-agents/schema.js").Schema<string[] | undefined>;
@@ -25,7 +25,7 @@ export declare const BuildArgsSchema: import("../../../src/internal-agents/schem
25
25
  compress: import("../../../src/internal-agents/schema.js").Schema<boolean>;
26
26
  noCompress: import("../../../src/internal-agents/schema.js").Schema<boolean>;
27
27
  prefetch: import("../../../src/internal-agents/schema.js").Schema<boolean>;
28
- ssg: import("../../../src/internal-agents/schema.js").Schema<boolean>;
28
+ ssg: import("../../../src/internal-agents/schema.js").Schema<boolean | undefined>;
29
29
  noSsg: import("../../../src/internal-agents/schema.js").Schema<boolean>;
30
30
  include: import("../../../src/internal-agents/schema.js").Schema<string[] | undefined>;
31
31
  exclude: import("../../../src/internal-agents/schema.js").Schema<string[] | undefined>;
@@ -46,7 +46,7 @@ export declare const parseBuildArgs: (args: ParsedArgs) => import("../../shared/
46
46
  compress: import("../../../src/internal-agents/schema.js").Schema<boolean>;
47
47
  noCompress: import("../../../src/internal-agents/schema.js").Schema<boolean>;
48
48
  prefetch: import("../../../src/internal-agents/schema.js").Schema<boolean>;
49
- ssg: import("../../../src/internal-agents/schema.js").Schema<boolean>;
49
+ ssg: import("../../../src/internal-agents/schema.js").Schema<boolean | undefined>;
50
50
  noSsg: import("../../../src/internal-agents/schema.js").Schema<boolean>;
51
51
  include: import("../../../src/internal-agents/schema.js").Schema<string[] | undefined>;
52
52
  exclude: import("../../../src/internal-agents/schema.js").Schema<string[] | undefined>;
@@ -1 +1 @@
1
- {"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/build/handler.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yCAAyC,CAAC;AAQ3E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAGxD;;GAEG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;GAe9B,CAAC;AAEF,eAAO,MAAM,eAAe;;;;;;;;;;;;;GAAiC,CAAC;AAE9D;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,WAAW,CAAC,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAC,CAAC;AAE9E;;GAEG;AACH,eAAO,MAAM,cAAc;;;;;;;;;;;;;GAazB,CAAC;AAEH,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAyBxE"}
1
+ {"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/build/handler.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yCAAyC,CAAC;AAQ3E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAGxD;;GAEG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;GAe9B,CAAC;AAEF,eAAO,MAAM,eAAe;;;;;;;;;;;;;GAAiC,CAAC;AAE9D;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,WAAW,CAAC,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAC,CAAC;AAE9E;;GAEG;AACH,eAAO,MAAM,cAAc;;;;;;;;;;;;;GAazB,CAAC;AAEH,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CA4BxE"}
@@ -18,7 +18,7 @@ export const getBuildArgsSchema = defineSchema((v) => v.object({
18
18
  compress: v.boolean().default(true),
19
19
  noCompress: v.boolean().default(false),
20
20
  prefetch: v.boolean().default(true),
21
- ssg: v.boolean().default(false),
21
+ ssg: v.boolean().optional(),
22
22
  noSsg: v.boolean().default(false),
23
23
  include: v.array(v.string()).optional(),
24
24
  exclude: v.array(v.string()).optional(),
@@ -60,7 +60,10 @@ export async function handleBuildCommand(args) {
60
60
  splitting: opts.split && !opts.noSplit,
61
61
  compress: opts.compress && !opts.noCompress,
62
62
  prefetch: opts.prefetch,
63
- ssg: opts.ssg && !opts.noSsg,
63
+ // Tri-state: explicit --no-ssg wins, an explicit --ssg / --ssg=false is
64
+ // passed through, and an omitted flag stays undefined so the build can
65
+ // fall back to build.ssg from veryfront.config.ts (and its default).
66
+ ssg: opts.noSsg ? false : opts.ssg,
64
67
  include: opts.include,
65
68
  exclude: opts.exclude,
66
69
  dryRun: opts.dryRun,
@@ -43,7 +43,7 @@ export const pushHelp = {
43
43
  "Without --branch, creates a timestamped branch that you can review in Studio",
44
44
  "Use --branch main to update the existing Veryfront main branch",
45
45
  "Uploads supported text source files using their relative paths",
46
- ".vfignore controls which supported files are excluded",
46
+ ".vfignore excludes matching local files and preserves matching remote files",
47
47
  "--dry-run never creates a project or branch, changes remote files, or writes a Push receipt",
48
48
  "If an upload fails, Push does not delete remote files",
49
49
  ],
@@ -86,6 +86,7 @@ interface BranchListItem {
86
86
  }
87
87
  interface RemoteFile {
88
88
  path: string;
89
+ content?: string;
89
90
  }
90
91
  export declare function scanLocalFiles(projectDir: string, ignoreChecker: IgnoreChecker): Promise<UploadOp[]>;
91
92
  export declare function capturePushSourceSnapshot(projectDir: string, ignoreChecker: IgnoreChecker): Promise<PushSourceSnapshot>;
@@ -105,7 +106,7 @@ export declare function deleteFiles(client: ApiClient, projectSlug: string, bran
105
106
  deleted: number;
106
107
  failed: number;
107
108
  }>;
108
- export declare function recordPushReceipt(client: ApiClient, config: ResolvedConfig, projectDir: string, branch: string, snapshot: PushSourceSnapshot, ignoreChecker: IgnoreChecker): Promise<void>;
109
+ export declare function recordPushReceipt(client: ApiClient, config: ResolvedConfig, projectDir: string, branch: string, snapshot: PushSourceSnapshot, ignoreChecker: IgnoreChecker, pushedSourceDigest?: string): Promise<void>;
109
110
  export declare function pushCommand(options?: PushOptions): Promise<void>;
110
111
  export {};
111
112
  //# sourceMappingURL=command.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/push/command.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yCAAyC,CAAC;AAK3E,OAAO,EACL,KAAK,SAAS,EAId,KAAK,cAAc,EAEpB,MAAM,wBAAwB,CAAC;AAKhC,OAAO,EAAuB,KAAK,aAAa,EAAsB,MAAM,sBAAsB,CAAC;AACnG,OAAO,EAAgB,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAGjE,OAAO,EAKL,KAAK,SAAS,EAIf,MAAM,uCAAuC,CAAC;AAE/C;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;;;;;GAS7B,CAAC;AAEF,eAAO,MAAM,cAAc;;;;;;;GAAgC,CAAC;AAE5D,MAAM,MAAM,QAAQ,GAAG,WAAW,CAAC,UAAU,CAAC,OAAO,iBAAiB,CAAC,CAAC,CAAC;AAEzE;;GAEG;AACH,eAAO,MAAM,aAAa;;;;;;;GAOxB,CAAC;AAEH;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,iDAAiD;IACjD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0CAA0C;IAC1C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,6DAA6D;IAC7D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,wDAAwD;IACxD,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,8DAA8D;IAC9D,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,oDAAoD;IACpD,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,oDAAoD;IACpD,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,SAAS,EAAE,SAAS,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,UAAU,cAAc;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CACd;AASD,UAAU,UAAU;IAClB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,wBAAsB,cAAc,CAClC,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,aAAa,GAC3B,OAAO,CAAC,QAAQ,EAAE,CAAC,CAoCrB;AAsED,wBAAsB,yBAAyB,CAC7C,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,aAAa,GAC3B,OAAO,CAAC,kBAAkB,CAAC,CAgB7B;AAED,wBAAgB,kBAAkB,IAAI,MAAM,CAG3C;AAED,wBAAgB,YAAY,CAC1B,MAAM,EAAE,SAAS,EACjB,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,cAAc,CAAC,CAIzB;AAoCD,wBAAsB,YAAY,CAChC,MAAM,EAAE,SAAS,EACjB,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,cAAc,CAAC,CAWzB;AAED,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,SAAS,EACjB,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,UAAU,EAAE,GACtB,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,WAAW,EAAE,UAAU,EAAE,CAAC;IAAC,MAAM,EAAE,UAAU,CAAA;CAAE,CAAC,CAUrF;AAQD,wBAAsB,WAAW,CAC/B,MAAM,EAAE,SAAS,EACjB,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,GAAG,IAAI,EACvB,GAAG,EAAE,QAAQ,EAAE,EACf,MAAM,EAAE,OAAO,GACd,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAqB/C;AAED,wBAAsB,WAAW,CAC/B,MAAM,EAAE,SAAS,EACjB,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,GAAG,IAAI,EACvB,KAAK,EAAE,MAAM,EAAE,EACf,MAAM,EAAE,OAAO,GACd,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAqB9C;AA+BD,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,cAAc,EACtB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,kBAAkB,EAC5B,aAAa,EAAE,aAAa,GAC3B,OAAO,CAAC,IAAI,CAAC,CAoBf;AAED,wBAAgB,WAAW,CAAC,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAsQpE"}
1
+ {"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/push/command.ts"],"names":[],"mappings":"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"}
@@ -258,7 +258,7 @@ function buildSummaryParts(ops, toDelete) {
258
258
  function buildConfirmParts(ops, toDelete) {
259
259
  return buildOpParts(ops, toDelete, (count) => `upload ${count}`, (count) => `delete ${count}`);
260
260
  }
261
- export async function recordPushReceipt(client, config, projectDir, branch, snapshot, ignoreChecker) {
261
+ export async function recordPushReceipt(client, config, projectDir, branch, snapshot, ignoreChecker, pushedSourceDigest = snapshot.sourceDigest) {
262
262
  const project = await getProjectTarget(client, config.projectSlug);
263
263
  let currentSnapshot;
264
264
  try {
@@ -276,7 +276,7 @@ export async function recordPushReceipt(client, config, projectDir, branch, snap
276
276
  projectSlug: project.slug,
277
277
  branch,
278
278
  commitSha: snapshot.gitSource.commitSha,
279
- sourceDigest: snapshot.sourceDigest,
279
+ sourceDigest: pushedSourceDigest,
280
280
  clean: snapshot.gitSource.clean,
281
281
  });
282
282
  }
@@ -372,13 +372,26 @@ export function pushCommand(options = {}) {
372
372
  remoteFiles: mainFiles,
373
373
  source: { type: "main" },
374
374
  };
375
- const toDelete = target.remoteFiles.map((f) => f.path).filter((p) => !localPaths.has(p));
375
+ const toDelete = target.remoteFiles
376
+ .map((file) => file.path)
377
+ .filter((path) => !ignoreChecker.isIgnored(path) && !localPaths.has(path));
378
+ const preservedRemoteFiles = target.remoteFiles
379
+ .filter((file) => ignoreChecker.isIgnored(file.path))
380
+ .map((file) => {
381
+ if (typeof file.content !== "string") {
382
+ throw new Error(`Veryfront returned invalid content for ignored file "${file.path}".`);
383
+ }
384
+ return { path: file.path, content: file.content };
385
+ });
386
+ const pushedSourceDigest = preservedRemoteFiles.length === 0
387
+ ? sourceSnapshot.sourceDigest
388
+ : await computeSourceDigest([...ops, ...preservedRemoteFiles]);
376
389
  if (ops.length === 0 && toDelete.length === 0) {
377
390
  try {
378
391
  if (!dryRun) {
379
392
  await clearPushReceipt(projectDir);
380
393
  spinner.update("Verifying push target...");
381
- await recordPushReceipt(client, config, projectDir, branchName, sourceSnapshot, ignoreChecker);
394
+ await recordPushReceipt(client, config, projectDir, branchName, sourceSnapshot, ignoreChecker, pushedSourceDigest);
382
395
  }
383
396
  }
384
397
  finally {
@@ -458,7 +471,7 @@ export function pushCommand(options = {}) {
458
471
  }
459
472
  spinner.update("Verifying push target...");
460
473
  try {
461
- await recordPushReceipt(client, config, projectDir, branchName, sourceSnapshot, ignoreChecker);
474
+ await recordPushReceipt(client, config, projectDir, branchName, sourceSnapshot, ignoreChecker, pushedSourceDigest);
462
475
  }
463
476
  finally {
464
477
  spinner.stop();
@@ -7,7 +7,7 @@ declare const getBuildInput: () => import("../../../src/internal-agents/schema.j
7
7
  outputDir: import("../../../src/internal-agents/schema.js").Schema<string | undefined>;
8
8
  splitting: import("../../../src/internal-agents/schema.js").Schema<boolean>;
9
9
  compress: import("../../../src/internal-agents/schema.js").Schema<boolean>;
10
- ssg: import("../../../src/internal-agents/schema.js").Schema<boolean>;
10
+ ssg: import("../../../src/internal-agents/schema.js").Schema<boolean | undefined>;
11
11
  dryRun: import("../../../src/internal-agents/schema.js").Schema<boolean>;
12
12
  }>>;
13
13
  type BuildInput = InferSchema<ReturnType<typeof getBuildInput>>;
@@ -1 +1 @@
1
- {"version":3,"file":"build-tool.d.ts","sourceRoot":"","sources":["../../../../src/cli/mcp/tools/build-tool.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yCAAyC,CAAC;AAK3E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAM3C,QAAA,MAAM,aAAa;;;;;;GA2BlB,CAAC;AAGF,KAAK,UAAU,GAAG,WAAW,CAAC,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC,CAAC;AAEhE,UAAU,WAAW;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,eAAO,MAAM,OAAO,EAAE,OAAO,CAAC,UAAU,EAAE,WAAW,CAyDpD,CAAC"}
1
+ {"version":3,"file":"build-tool.d.ts","sourceRoot":"","sources":["../../../../src/cli/mcp/tools/build-tool.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yCAAyC,CAAC;AAK3E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAM3C,QAAA,MAAM,aAAa;;;;;;GA6BlB,CAAC;AAGF,KAAK,UAAU,GAAG,WAAW,CAAC,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC,CAAC;AAEhE,UAAU,WAAW;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,eAAO,MAAM,OAAO,EAAE,OAAO,CAAC,UAAU,EAAE,WAAW,CAyDpD,CAAC"}
@@ -27,8 +27,8 @@ const getBuildInput = defineSchema((v) => v.object({
27
27
  ssg: v
28
28
  .boolean()
29
29
  .optional()
30
- .default(false)
31
- .describe("Enable static site generation. Defaults to false."),
30
+ .describe("Enable static site generation. Defaults to build.ssg from veryfront.config.ts, " +
31
+ "then true; disabling it produces no pages."),
32
32
  dryRun: v
33
33
  .boolean()
34
34
  .optional()
package/esm/deno.js CHANGED
@@ -1,6 +1,6 @@
1
1
  export default {
2
2
  "name": "veryfront",
3
- "version": "0.1.1104",
3
+ "version": "0.1.1105",
4
4
  "license": "Apache-2.0",
5
5
  "nodeModulesDir": "auto",
6
6
  "minimumDependencyAge": {
@@ -1 +1 @@
1
- {"version":3,"file":"build-initializer.d.ts","sourceRoot":"","sources":["../../../../../src/src/build/production-build/build/build-initializer.ts"],"names":[],"mappings":"AAGA,OAAO,EAAkB,KAAK,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AACrF,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAC/E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAEhE,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,cAAc,CAAC;IACxB,MAAM,EAAE,eAAe,CAAC;IACxB,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,OAAO,EAAE,YAAY,CAAC;IACtB,KAAK,EAAE,UAAU,CAAC;CACnB;AAED,wBAAsB,sBAAsB,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,CAgBzF;AAaD,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,YAAY,GAAG,YAAY,CAYzE"}
1
+ {"version":3,"file":"build-initializer.d.ts","sourceRoot":"","sources":["../../../../../src/src/build/production-build/build/build-initializer.ts"],"names":[],"mappings":"AAGA,OAAO,EAAkB,KAAK,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AACrF,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAC/E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAEhE,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,cAAc,CAAC;IACxB,MAAM,EAAE,eAAe,CAAC;IACxB,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,OAAO,EAAE,YAAY,CAAC;IACtB,KAAK,EAAE,UAAU,CAAC;CACnB;AAED,wBAAsB,sBAAsB,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,CAgBzF;AAaD,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,YAAY,GAAG,YAAY,CAezE"}
@@ -35,7 +35,10 @@ export function normalizeBuildOptions(options) {
35
35
  enableSplitting: options.enableSplitting ?? true,
36
36
  enableCompression: options.enableCompression ?? true,
37
37
  enablePrefetch: options.enablePrefetch ?? true,
38
- ssg: options.ssg ?? false,
38
+ // Deliberately left undefined when the caller did not choose: the
39
+ // orchestrator resolves it against build.ssg from veryfront.config.ts
40
+ // (loaded in initializeBuildContext), then defaults to enabled.
41
+ ssg: options.ssg,
39
42
  include: options.include,
40
43
  exclude: options.exclude,
41
44
  dryRun: options.dryRun ?? false,
@@ -1,5 +1,13 @@
1
1
  import type { BuildOptions, BuildStats } from "../../../server/build-types.js";
2
2
  import { cleanupCaches, cleanupRenderer, logBuildCompletion } from "./build-cleanup.js";
3
+ import { type CollectedRoutes } from "./route-collector.js";
3
4
  export declare function buildProduction(options: BuildOptions): Promise<BuildStats>;
5
+ /**
6
+ * A build that emits zero pages and zero chunks is not a deployable artifact,
7
+ * so reporting it as a success lets broken releases through (an empty dist/
8
+ * deployed behind a "Build completed successfully" message serves only 404s).
9
+ * Fail the build instead, with a message that points at the actual cause.
10
+ */
11
+ export declare function assertBuildProducedOutput(stats: BuildStats, routes: CollectedRoutes, ssg: boolean, dryRun: boolean): void;
4
12
  export { cleanupCaches, cleanupRenderer, logBuildCompletion };
5
13
  //# sourceMappingURL=build-orchestrator.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"build-orchestrator.d.ts","sourceRoot":"","sources":["../../../../../src/src/build/production-build/build/build-orchestrator.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAG/E,OAAO,EACL,aAAa,EACb,eAAe,EACf,kBAAkB,EAEnB,MAAM,oBAAoB,CAAC;AAU5B,wBAAgB,eAAe,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,UAAU,CAAC,CAyI1E;AAED,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,kBAAkB,EAAE,CAAC"}
1
+ {"version":3,"file":"build-orchestrator.d.ts","sourceRoot":"","sources":["../../../../../src/src/build/production-build/build/build-orchestrator.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAG/E,OAAO,EACL,aAAa,EACb,eAAe,EACf,kBAAkB,EAEnB,MAAM,oBAAoB,CAAC;AAM5B,OAAO,EAAoB,KAAK,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAI9E,wBAAgB,eAAe,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,UAAU,CAAC,CAiJ1E;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,UAAU,EACjB,MAAM,EAAE,eAAe,EACvB,GAAG,EAAE,OAAO,EACZ,MAAM,EAAE,OAAO,GACd,IAAI,CAcN;AAED,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,kBAAkB,EAAE,CAAC"}
@@ -35,7 +35,12 @@ export function buildProduction(options) {
35
35
  const enableSplitting = normalizedOptions.enableSplitting ?? true;
36
36
  const enablePrefetch = normalizedOptions.enablePrefetch ?? true;
37
37
  const enableCompression = normalizedOptions.enableCompression ?? true;
38
- const ssg = normalizedOptions.ssg ?? false;
38
+ // Explicit caller option > build.ssg in veryfront.config.ts > enabled.
39
+ // Resolved here (after initializeBuildContext loads the config) so
40
+ // every entry point — CLI, MCP tool, direct API — honors the config.
41
+ // Default to SSG because a non-SSG build collects no routes and
42
+ // therefore emits no pages, which is never a servable artifact.
43
+ const ssg = normalizedOptions.ssg ?? context.config.build?.ssg ?? true;
39
44
  await withSpan("build.setupDirectories", () => setupBuildDirectories(context.adapter, outputDir, dryRun), {});
40
45
  const releaseAssetManifest = await withSpan("build.localReleaseAssets", () => generateLocalReleaseAssetManifest({
41
46
  adapter: context.adapter,
@@ -78,6 +83,7 @@ export function buildProduction(options) {
78
83
  releaseAssetManifest,
79
84
  }), {});
80
85
  context.stats.duration = Date.now() - startTime;
86
+ assertBuildProducedOutput(context.stats, routes, ssg, dryRun);
81
87
  logBuildCompletion(context.stats);
82
88
  return context.stats;
83
89
  }
@@ -86,4 +92,24 @@ export function buildProduction(options) {
86
92
  }
87
93
  }, { "build.projectDir": options.projectDir });
88
94
  }
95
+ /**
96
+ * A build that emits zero pages and zero chunks is not a deployable artifact,
97
+ * so reporting it as a success lets broken releases through (an empty dist/
98
+ * deployed behind a "Build completed successfully" message serves only 404s).
99
+ * Fail the build instead, with a message that points at the actual cause.
100
+ */
101
+ export function assertBuildProducedOutput(stats, routes, ssg, dryRun) {
102
+ if (dryRun || stats.pages > 0 || stats.chunks > 0)
103
+ return;
104
+ const routeCount = routes.pages.length + routes.app.length;
105
+ const message = !ssg
106
+ ? "Build produced no pages because static site generation is disabled. " +
107
+ "Remove --no-ssg (or set `build: { ssg: true }` in veryfront.config.ts) and rebuild."
108
+ : routeCount === 0
109
+ ? "Build produced no pages: no routes were found. " +
110
+ "Add a page (e.g. pages/index.tsx or app/page.tsx), or loosen the --include/--exclude filters."
111
+ : `Build produced no pages even though ${routeCount} route(s) were collected. ` +
112
+ "Check the build log for per-route errors.";
113
+ throw toError(createError({ type: "build", message }));
114
+ }
89
115
  export { cleanupCaches, cleanupRenderer, logBuildCompletion };
@@ -30,6 +30,12 @@ export declare const getVeryfrontConfigSchema: () => import("../../internal-agen
30
30
  build: import("../../internal-agents/schema.js").Schema<Partial<import("../../extensions/schema/schema-validator.js").InferShape<{
31
31
  outDir: import("../../internal-agents/schema.js").Schema<string | undefined>;
32
32
  trailingSlash: import("../../internal-agents/schema.js").Schema<boolean | undefined>;
33
+ /**
34
+ * Generate static HTML for all routes during `veryfront build`.
35
+ * Defaults to true; disabling it produces no pages, so only turn it
36
+ * off for builds that intentionally skip static generation.
37
+ */
38
+ ssg: import("../../internal-agents/schema.js").Schema<boolean | undefined>;
33
39
  esbuild: import("../../internal-agents/schema.js").Schema<Partial<import("../../extensions/schema/schema-validator.js").InferShape<{
34
40
  wasmURL: import("../../internal-agents/schema.js").Schema<string | undefined>;
35
41
  worker: import("../../internal-agents/schema.js").Schema<boolean | undefined>;
@@ -454,6 +460,12 @@ export declare const veryfrontConfigSchema: import("../../internal-agents/schema
454
460
  build: import("../../internal-agents/schema.js").Schema<Partial<import("../../extensions/schema/schema-validator.js").InferShape<{
455
461
  outDir: import("../../internal-agents/schema.js").Schema<string | undefined>;
456
462
  trailingSlash: import("../../internal-agents/schema.js").Schema<boolean | undefined>;
463
+ /**
464
+ * Generate static HTML for all routes during `veryfront build`.
465
+ * Defaults to true; disabling it produces no pages, so only turn it
466
+ * off for builds that intentionally skip static generation.
467
+ */
468
+ ssg: import("../../internal-agents/schema.js").Schema<boolean | undefined>;
457
469
  esbuild: import("../../internal-agents/schema.js").Schema<Partial<import("../../extensions/schema/schema-validator.js").InferShape<{
458
470
  wasmURL: import("../../internal-agents/schema.js").Schema<string | undefined>;
459
471
  worker: import("../../internal-agents/schema.js").Schema<boolean | undefined>;
@@ -1 +1 @@
1
- {"version":3,"file":"config.schema.d.ts","sourceRoot":"","sources":["../../../../src/src/config/schemas/config.schema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.schema.d.ts","sourceRoot":"","sources":["../../../../src/src/config/schemas/config.schema.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAGhF,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,qCAAqC,CAAC;AAkCzF,eAAO,MAAM,wBAAwB;;;;;QAQ3B,2GAA2G;;;;;;;;;;;;;;;IAuB/G,wFAAwF;;IAExF,0FAA0F;;;;;;;;QAOtF;;;;WAIG;;;;;;;;;;;;;;;;;;;;;;;;QAoCH;;;;;;;;;;;;;;;;;WAiBG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAgDH;;;;;;;;;;WAUG;;;;;;;;;;QAaH;;;;;WAKG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;YA4HC,kFAAkF;;YAElF,oFAAoF;;YAEpF,+EAA+E;;YAE/E,mEAAmE;;;;;;;;;;;;;;;;;YA8BnE,mCAAmC;;YAEnC,8CAA8C;;YAE9C,sBAAsB;;YAEtB,mDAAmD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAqLvD,yDAAyD;;QAEzD,iDAAiD;;;YAI7C,iEAAiE;;;;;;;IAgBzE,uCAAuC;;QAGnC,2CAA2C;;;;QAO3C,6DAA6D;;QAE7D,gGAAgG;;QAGhG,iEAAiE;;;;QAOjE,sEAAsE;;;IAK1E;;;;;;OAMG;;;YAUO,+DAA+D;;;;IAezE;;;;;;;;;OASG;;IAEH,0CAA0C;;QAGtC,8CAA8C;;QAE9C,gEAAgE;;QAEhE,yCAAyC;;QAEzC,qCAAqC;;QAErC,sBAAsB;;QAEtB,gCAAgC;;YAG5B,qDAAqD;;YAErD,qDAAqD;;YAErD,oDAAoD;;;QAKxD,oCAAoC;;YAGhC,4EAA4E;;YAE5E,8DAA8D;;YAE9D,8EAA8E;;;;IAU3F,CAAC;AACF,eAAO,MAAM,qBAAqB;;;;;QAtoBxB,2GAA2G;;;;;;;;;;;;;;;IAuB/G,wFAAwF;;IAExF,0FAA0F;;;;;;;;QAOtF;;;;WAIG;;;;;;;;;;;;;;;;;;;;;;;;QAoCH;;;;;;;;;;;;;;;;;WAiBG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAgDH;;;;;;;;;;WAUG;;;;;;;;;;QAaH;;;;;WAKG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;YA4HC,kFAAkF;;YAElF,oFAAoF;;YAEpF,+EAA+E;;YAE/E,mEAAmE;;;;;;;;;;;;;;;;;YA8BnE,mCAAmC;;YAEnC,8CAA8C;;YAE9C,sBAAsB;;YAEtB,mDAAmD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAqLvD,yDAAyD;;QAEzD,iDAAiD;;;YAI7C,iEAAiE;;;;;;;IAgBzE,uCAAuC;;QAGnC,2CAA2C;;;;QAO3C,6DAA6D;;QAE7D,gGAAgG;;QAGhG,iEAAiE;;;;QAOjE,sEAAsE;;;IAK1E;;;;;;OAMG;;;YAUO,+DAA+D;;;;IAezE;;;;;;;;;OASG;;IAEH,0CAA0C;;QAGtC,8CAA8C;;QAE9C,gEAAgE;;QAEhE,yCAAyC;;QAEzC,qCAAqC;;QAErC,sBAAsB;;QAEtB,gCAAgC;;YAG5B,qDAAqD;;YAErD,qDAAqD;;YAErD,oDAAoD;;;QAKxD,oCAAoC;;YAGhC,4EAA4E;;YAE5E,8DAA8D;;YAE9D,8EAA8E;;;;IAWnB,CAAC;AAG1E,KAAK,uBAAuB,GAAG,WAAW,CAAC,UAAU,CAAC,OAAO,wBAAwB,CAAC,CAAC,CAAC;AACxF,KAAK,4BAA4B,GAAG,UAAU,CAAC,UAAU,CAAC,OAAO,wBAAwB,CAAC,CAAC,CAAC;AAE5F,iFAAiF;AACjF,MAAM,MAAM,eAAe,GAAG,IAAI,CAAC,uBAAuB,EAAE,cAAc,CAAC,GAAG;IAC5E,YAAY,CAAC,EAAE,6BAA6B,CAAC;CAC9C,CAAC;AACF,yEAAyE;AACzE,MAAM,MAAM,oBAAoB,GAAG,IAAI,CAAC,4BAA4B,EAAE,cAAc,CAAC,GAAG;IACtF,YAAY,CAAC,EAAE,6BAA6B,CAAC;CAC9C,CAAC;AAGF,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,GAAG,eAAe,CA0BvE;AAqCD,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,EAAE,CAEhF"}
@@ -59,6 +59,12 @@ export const getVeryfrontConfigSchema = defineSchema((v) => v
59
59
  .object({
60
60
  outDir: v.string().optional(),
61
61
  trailingSlash: v.boolean().optional(),
62
+ /**
63
+ * Generate static HTML for all routes during `veryfront build`.
64
+ * Defaults to true; disabling it produces no pages, so only turn it
65
+ * off for builds that intentionally skip static generation.
66
+ */
67
+ ssg: v.boolean().optional(),
62
68
  esbuild: v
63
69
  .object({
64
70
  wasmURL: v.string().url().optional(),
@@ -1 +1 @@
1
- {"version":3,"file":"run-stream.d.ts","sourceRoot":"","sources":["../../../src/src/internal-agents/run-stream.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,KAAK,EACV,KAAK,YAAY,IAAI,OAAO,EAC5B,KAAK,aAAa,EAEnB,MAAM,mBAAmB,CAAC;AAc3B,OAAO,KAAK,EACV,+BAA+B,EAC/B,8BAA8B,EAC/B,MAAM,qBAAqB,CAAC;AAS7B,OAAO,EAGL,KAAK,IAAI,EAGV,MAAM,kBAAkB,CAAC;AAgB1B,OAAO,EAA0B,KAAK,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAE3F,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAsCxD,MAAM,WAAW,+BAA+B;IAC9C,cAAc,EAAE,sBAAsB,CAAC;IACvC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,GAAG,OAAO,CAAC,CAAC;IAC5C,mBAAmB,CAAC,EAAE;QACpB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACzB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;KAC1B,CAAC;IACF,cAAc,CAAC,EAAE,+BAA+B,CAAC,gBAAgB,CAAC,CAAC;IACnE,8BAA8B,CAAC,EAAE,CAC/B,KAAK,EAAE,+BAA+B,KACnC,OAAO,CAAC,8BAA8B,CAAC,CAAC;IAC7C,aAAa,CAAC,EAAE,CACd,KAAK,EAAE,KAAK,EACZ,WAAW,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,KAClC;QACH,MAAM,EAAE,CACN,QAAQ,EAAE,OAAO,EAAE,EACnB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,SAAS,CAAC,EAAE;YACV,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,aAAa,KAAK,IAAI,CAAC;SAC9C,EACD,aAAa,CAAC,EAAE,MAAM,EACtB,uBAAuB,CAAC,EAAE,MAAM,EAChC,WAAW,CAAC,EAAE,WAAW,KACtB,OAAO,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC;KAC1C,CAAC;CACH;AAoCD,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,oBAAoB,EAC3B,cAAc,EAAE,sBAAsB,EACtC,2BAA2B,CAAC,EAAE,MAAM,EAAE,EACtC,mBAAmB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,GAAG,OAAO,CAAC;;cAmFrD;AAkXD,wBAAsB,gCAAgC,CACpD,KAAK,EAAE,oBAAoB,EAC3B,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,+BAA+B,GACpC,OAAO,CAAC,QAAQ,CAAC,CAqdnB"}
1
+ {"version":3,"file":"run-stream.d.ts","sourceRoot":"","sources":["../../../src/src/internal-agents/run-stream.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,KAAK,EACV,KAAK,YAAY,IAAI,OAAO,EAC5B,KAAK,aAAa,EAEnB,MAAM,mBAAmB,CAAC;AAc3B,OAAO,KAAK,EACV,+BAA+B,EAC/B,8BAA8B,EAC/B,MAAM,qBAAqB,CAAC;AAS7B,OAAO,EAGL,KAAK,IAAI,EAGV,MAAM,kBAAkB,CAAC;AAgB1B,OAAO,EAA0B,KAAK,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAE3F,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAsCxD,MAAM,WAAW,+BAA+B;IAC9C,cAAc,EAAE,sBAAsB,CAAC;IACvC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,GAAG,OAAO,CAAC,CAAC;IAC5C,mBAAmB,CAAC,EAAE;QACpB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACzB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;KAC1B,CAAC;IACF,cAAc,CAAC,EAAE,+BAA+B,CAAC,gBAAgB,CAAC,CAAC;IACnE,8BAA8B,CAAC,EAAE,CAC/B,KAAK,EAAE,+BAA+B,KACnC,OAAO,CAAC,8BAA8B,CAAC,CAAC;IAC7C,aAAa,CAAC,EAAE,CACd,KAAK,EAAE,KAAK,EACZ,WAAW,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,KAClC;QACH,MAAM,EAAE,CACN,QAAQ,EAAE,OAAO,EAAE,EACnB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,SAAS,CAAC,EAAE;YACV,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,aAAa,KAAK,IAAI,CAAC;SAC9C,EACD,aAAa,CAAC,EAAE,MAAM,EACtB,uBAAuB,CAAC,EAAE,MAAM,EAChC,WAAW,CAAC,EAAE,WAAW,KACtB,OAAO,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC;KAC1C,CAAC;CACH;AAoCD,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,oBAAoB,EAC3B,cAAc,EAAE,sBAAsB,EACtC,2BAA2B,CAAC,EAAE,MAAM,EAAE,EACtC,mBAAmB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,GAAG,OAAO,CAAC;;cAmFrD;AAiXD,wBAAsB,gCAAgC,CACpD,KAAK,EAAE,oBAAoB,EAC3B,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,+BAA+B,GACpC,OAAO,CAAC,QAAQ,CAAC,CAqdnB"}
@@ -289,12 +289,11 @@ function applyRuntimeToolAllowlist(mergedTools, toolAllowlist, agent) {
289
289
  // rather than silently skipping enforcement.
290
290
  return {};
291
291
  }
292
- const visibleSkills = skillRegistry.resolveForAgent(true, { agentId: agent.id });
293
- const availableSkillIds = visibleSkills.size > 0 ? [...visibleSkills.keys()] : undefined;
292
+ const hasVisibleSkills = skillRegistry.hasVisibleSkills({ agentId: agent.id });
294
293
  const allowedToolNames = resolveHostedRuntimeAllowedToolNames({
295
294
  allowedToolNames: toolAllowlist,
296
295
  localToolNames: Object.keys(mergedTools),
297
- ...(availableSkillIds ? { availableSkillIds } : {}),
296
+ ...(hasVisibleSkills ? { availableSkillIds: ["*"] } : {}),
298
297
  });
299
298
  if (!allowedToolNames) {
300
299
  return mergedTools;
@@ -95,6 +95,13 @@ export declare class ProjectScopedRegistryManager<T> {
95
95
  * Check if item exists for the current project.
96
96
  */
97
97
  has(id: string): boolean;
98
+ /**
99
+ * Test effective items without materializing the merged registry.
100
+ *
101
+ * Project items shadow shared items with the same id, matching `getAll()`.
102
+ * Iteration stops after the first match.
103
+ */
104
+ some(predicate: (item: T, id: string) => boolean): boolean;
98
105
  /**
99
106
  * Get all IDs for the current project (includes shared items).
100
107
  */
@@ -1 +1 @@
1
- {"version":3,"file":"project-scoped-registry-manager.d.ts","sourceRoot":"","sources":["../../../src/src/registry/project-scoped-registry-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AA4BH,UAAU,mCAAmC,CAAC,CAAC;IAC7C,6EAA6E;IAC7E,oBAAoB,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,CAAC;CACnE;AAsCD;;;;;;;;;;;;;GAaG;AACH,wBAAsB,0BAA0B,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAyCpF;AAED;;;;GAIG;AACH,qBAAa,4BAA4B,CAAC,CAAC;IAMvC,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,OAAO;IANjB,OAAO,CAAC,iBAAiB,CAAqC;IAC9D,OAAO,CAAC,cAAc,CAAwB;IAC9C,OAAO,CAAC,mBAAmB,CAA8D;gBAG/E,YAAY,EAAE,MAAM,EACpB,OAAO,GAAE,mCAAmC,CAAC,CAAC,CAAM;IAG9D,OAAO,CAAC,oBAAoB;IAS5B,OAAO,CAAC,aAAa;IAqBrB;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAIzB,qEAAqE;IACrE,OAAO,CAAC,mBAAmB;IA0E3B,0EAA0E;IAC1E,OAAO,CAAC,kBAAkB;IAM1B,+EAA+E;IAC/E,OAAO,CAAC,sBAAsB;IAI9B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IASxB;;OAEG;IACH,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI;IAoBnC;;;OAGG;IACH,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI;IAYzC;;;OAGG;IACH,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS;IAK9B;;;;;OAKG;IACH,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS;IAKjC;;OAEG;IACH,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAMxB;;OAEG;IACH,SAAS,IAAI,MAAM,EAAE;IAOrB;;OAEG;IACH,MAAM,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;IAUxB;;OAEG;IACH,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAe3B;;OAEG;IACH,KAAK,IAAI,IAAI;IAWb;;OAEG;IACH,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAyBrC;;OAEG;IACH,QAAQ,IAAI,IAAI;IAoBhB;;OAEG;IACH,QAAQ,IAAI;QACV,YAAY,EAAE,MAAM,CAAC;QACrB,WAAW,EAAE,MAAM,CAAC;QACpB,UAAU,EAAE,MAAM,CAAC;QACnB,mBAAmB,EAAE,MAAM,CAAC;KAC7B;CAeF"}
1
+ {"version":3,"file":"project-scoped-registry-manager.d.ts","sourceRoot":"","sources":["../../../src/src/registry/project-scoped-registry-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AA4BH,UAAU,mCAAmC,CAAC,CAAC;IAC7C,6EAA6E;IAC7E,oBAAoB,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,CAAC;CACnE;AAsCD;;;;;;;;;;;;;GAaG;AACH,wBAAsB,0BAA0B,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAyCpF;AAED;;;;GAIG;AACH,qBAAa,4BAA4B,CAAC,CAAC;IAMvC,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,OAAO;IANjB,OAAO,CAAC,iBAAiB,CAAqC;IAC9D,OAAO,CAAC,cAAc,CAAwB;IAC9C,OAAO,CAAC,mBAAmB,CAA8D;gBAG/E,YAAY,EAAE,MAAM,EACpB,OAAO,GAAE,mCAAmC,CAAC,CAAC,CAAM;IAG9D,OAAO,CAAC,oBAAoB;IAS5B,OAAO,CAAC,aAAa;IAqBrB;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAIzB,qEAAqE;IACrE,OAAO,CAAC,mBAAmB;IA0E3B,0EAA0E;IAC1E,OAAO,CAAC,kBAAkB;IAM1B,+EAA+E;IAC/E,OAAO,CAAC,sBAAsB;IAI9B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IASxB;;OAEG;IACH,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI;IAoBnC;;;OAGG;IACH,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI;IAYzC;;;OAGG;IACH,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS;IAK9B;;;;;OAKG;IACH,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS;IAKjC;;OAEG;IACH,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAMxB;;;;;OAKG;IACH,IAAI,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,MAAM,KAAK,OAAO,GAAG,OAAO;IAiB1D;;OAEG;IACH,SAAS,IAAI,MAAM,EAAE;IAOrB;;OAEG;IACH,MAAM,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;IAUxB;;OAEG;IACH,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAe3B;;OAEG;IACH,KAAK,IAAI,IAAI;IAWb;;OAEG;IACH,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAyBrC;;OAEG;IACH,QAAQ,IAAI,IAAI;IAoBhB;;OAEG;IACH,QAAQ,IAAI;QACV,YAAY,EAAE,MAAM,CAAC;QACrB,WAAW,EAAE,MAAM,CAAC;QACpB,UAAU,EAAE,MAAM,CAAC;QACnB,mBAAmB,EAAE,MAAM,CAAC;KAC7B;CAeF"}
@@ -298,6 +298,30 @@ export class ProjectScopedRegistryManager {
298
298
  return (this.getActiveScopeRegistry(scopeId)?.has(id) ?? false) ||
299
299
  this.sharedRegistry.has(id);
300
300
  }
301
+ /**
302
+ * Test effective items without materializing the merged registry.
303
+ *
304
+ * Project items shadow shared items with the same id, matching `getAll()`.
305
+ * Iteration stops after the first match.
306
+ */
307
+ some(predicate) {
308
+ const scopeId = this.getCurrentScopeId();
309
+ const projectRegistry = this.getActiveScopeRegistry(scopeId);
310
+ for (const [id, sharedItem] of this.sharedRegistry) {
311
+ const item = projectRegistry?.has(id) ? projectRegistry.get(id) : sharedItem;
312
+ if (predicate(item, id))
313
+ return true;
314
+ }
315
+ if (!projectRegistry)
316
+ return false;
317
+ for (const [id, item] of projectRegistry) {
318
+ if (this.sharedRegistry.has(id))
319
+ continue;
320
+ if (predicate(item, id))
321
+ return true;
322
+ }
323
+ return false;
324
+ }
301
325
  /**
302
326
  * Get all IDs for the current project (includes shared items).
303
327
  */
@@ -42,6 +42,8 @@ declare class SkillRegistryClass extends ScopedRegistryFacade<Skill> {
42
42
  resolveVisibleSkill(requested: string, scope?: AgentCapabilityScope): Skill | undefined;
43
43
  /** Ids of every skill visible to the caller (for manifests and error messages). */
44
44
  getVisibleSkillIds(scope?: AgentCapabilityScope): string[];
45
+ /** Whether at least one skill is visible without materializing a catalog. */
46
+ hasVisibleSkills(scope?: AgentCapabilityScope): boolean;
45
47
  }
46
48
  export declare const skillRegistry: SkillRegistryClass;
47
49
  export declare function registerSkill(id: string, skill: Skill): void;
@@ -1 +1 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/src/skill/registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAK7E,+DAA+D;AAC/D,MAAM,MAAM,oBAAoB,GAAG;IACjC,0EAA0E;IAC1E,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,wEAAwE;AACxE,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAEpF;AAED,cAAM,kBAAmB,SAAQ,oBAAoB,CAAC,KAAK,CAAC;IAC1D;;;;;;;;;;;;OAYG;IACH,eAAe,CACb,YAAY,EAAE,IAAI,GAAG,MAAM,EAAE,EAC7B,KAAK,CAAC,EAAE,oBAAoB,GAC3B,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC;IAqBrB;;;OAGG;IACH,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,oBAAoB,GAAG,KAAK,GAAG,SAAS;IAgBvF,mFAAmF;IACnF,kBAAkB,CAAC,KAAK,CAAC,EAAE,oBAAoB,GAAG,MAAM,EAAE;CAS3D;AAED,eAAO,MAAM,aAAa,oBAAuC,CAAC;AAElE,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI,CAE5D;AAED,wBAAgB,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS,CAEtD;AAED,wBAAgB,YAAY,IAAI,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAEjD"}
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/src/skill/registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAK7E,+DAA+D;AAC/D,MAAM,MAAM,oBAAoB,GAAG;IACjC,0EAA0E;IAC1E,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,wEAAwE;AACxE,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAEpF;AAED,cAAM,kBAAmB,SAAQ,oBAAoB,CAAC,KAAK,CAAC;IAC1D;;;;;;;;;;;;OAYG;IACH,eAAe,CACb,YAAY,EAAE,IAAI,GAAG,MAAM,EAAE,EAC7B,KAAK,CAAC,EAAE,oBAAoB,GAC3B,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC;IAqBrB;;;OAGG;IACH,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,oBAAoB,GAAG,KAAK,GAAG,SAAS;IAgBvF,mFAAmF;IACnF,kBAAkB,CAAC,KAAK,CAAC,EAAE,oBAAoB,GAAG,MAAM,EAAE;IAU1D,6EAA6E;IAC7E,gBAAgB,CAAC,KAAK,CAAC,EAAE,oBAAoB,GAAG,OAAO;CAGxD;AAED,eAAO,MAAM,aAAa,oBAAuC,CAAC;AAElE,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI,CAE5D;AAED,wBAAgB,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS,CAEtD;AAED,wBAAgB,YAAY,IAAI,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAEjD"}
@@ -78,6 +78,10 @@ class SkillRegistryClass extends ScopedRegistryFacade {
78
78
  }
79
79
  return ids;
80
80
  }
81
+ /** Whether at least one skill is visible without materializing a catalog. */
82
+ hasVisibleSkills(scope) {
83
+ return this.manager.some((skill) => isSkillVisibleTo(skill, scope));
84
+ }
81
85
  }
82
86
  export const skillRegistry = new SkillRegistryClass(skillManager);
83
87
  export function registerSkill(id, skill) {
@@ -1,3 +1,3 @@
1
1
  /** Shared version value. */
2
- export declare const VERSION = "0.1.1104";
2
+ export declare const VERSION = "0.1.1105";
3
3
  //# sourceMappingURL=version-constant.d.ts.map
@@ -1,4 +1,4 @@
1
1
  // Keep in sync with deno.json version.
2
2
  // scripts/release.ts updates this constant during releases.
3
3
  /** Shared version value. */
4
- export const VERSION = "0.1.1104";
4
+ export const VERSION = "0.1.1105";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "veryfront",
3
- "version": "0.1.1104",
3
+ "version": "0.1.1105",
4
4
  "description": "The simplest way to build AI-powered apps",
5
5
  "keywords": [
6
6
  "react",
@@ -328,10 +328,10 @@
328
328
  "@types/react": "19.2.14",
329
329
  "@types/react-dom": "19.2.3",
330
330
  "ws": "8.21.0",
331
- "@veryfront/ext-bundler-esbuild": "0.1.1104",
332
- "@veryfront/ext-content-mdx": "0.1.1104",
333
- "@veryfront/ext-css-tailwind": "0.1.1104",
334
- "@veryfront/ext-parser-babel": "0.1.1104"
331
+ "@veryfront/ext-bundler-esbuild": "0.1.1105",
332
+ "@veryfront/ext-content-mdx": "0.1.1105",
333
+ "@veryfront/ext-css-tailwind": "0.1.1105",
334
+ "@veryfront/ext-parser-babel": "0.1.1105"
335
335
  },
336
336
  "devDependencies": {
337
337
  "@types/node": "20.9.0"