@bendyline/gezel-catalog 0.1.0 → 1.0.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/dist/index.d.ts CHANGED
@@ -79,10 +79,16 @@ interface BundledSourceOptions {
79
79
  */
80
80
  noIndex?: boolean;
81
81
  /**
82
- * The running app's version, compared against content `minGezelVersion`
83
- * floors. Defaults to `GEZEL_VERSION`; injectable so tests can exercise
84
- * gating against a stamped version (`GEZEL_VERSION` is `0.0.0` in dev
85
- * checkouts, which bypasses all filtering).
82
+ * The calendar line this build sits on, compared against content
83
+ * `minGezelVersion` floors. Defaults to `GEZEL_CONTENT_COMPAT`; injectable so
84
+ * tests can exercise gating against a stamped build (both constants are
85
+ * `0.0.0` in dev checkouts, which bypasses all filtering).
86
+ *
87
+ * Deliberately **not** `GEZEL_VERSION`. Floors are authored as `1.YYDDD`, and
88
+ * npm releases are semver: `0.1.0` and `1.0.0` fall below every floor while a
89
+ * later `2.0.0` clears all of them, so gating on the published version made
90
+ * npm builds hide floored content and would eventually have made them accept
91
+ * content they cannot run.
86
92
  */
87
93
  gezelVersion?: string;
88
94
  }
@@ -186,10 +192,12 @@ declare class CatalogService {
186
192
  * bundled + community tiers, re-read on every disk access. The live
187
193
  * gilde update mechanism flips it without reconstructing this service
188
194
  * (which is built once at boot and held by many subsystems).
189
- * @param opts.gezelVersion the running app's version, compared against
190
- * content `minGezelVersion` floors. Defaults to `GEZEL_VERSION`
191
- * inside each source; injectable so tests can exercise gating (dev
192
- * checkouts report `0.0.0`, which bypasses all filtering).
195
+ * @param opts.gezelVersion the calendar line this build sits on, compared
196
+ * against content `minGezelVersion` floors. Defaults to
197
+ * `GEZEL_CONTENT_COMPAT` inside each source *not* `GEZEL_VERSION`, which
198
+ * is semver on the npm channel and not on the axis floors are authored
199
+ * against. Injectable so tests can exercise gating (dev checkouts report
200
+ * `0.0.0`, which bypasses all filtering).
193
201
  */
194
202
  constructor(sources?: CatalogSource[], opts?: {
195
203
  localRoot?: string;
package/dist/index.js CHANGED
@@ -1,6 +1,9 @@
1
1
  // src/service.ts
2
2
  import { join as join4 } from "path";
3
3
 
4
+ // src/builtin-toolsets.ts
5
+ import { sanitizePresentationSvg } from "@bendyline/gezel/svg";
6
+
4
7
  // src/builtin-toolset-icons.ts
5
8
  var SVG_ATTRS = 'xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"';
6
9
  var BUILTIN_TOOLSET_ICONS = {
@@ -50,6 +53,10 @@ var BUILTIN_TOOLSET_ICONS = {
50
53
  // src/builtin-toolsets.ts
51
54
  var BUILTIN_VERSION = "1.0.0";
52
55
  var BUILTIN_RELEASED_AT = "2026-04-25T00:00:00Z";
56
+ function builtinIconSvg(id) {
57
+ const raw = BUILTIN_TOOLSET_ICONS[id];
58
+ return raw ? sanitizePresentationSvg(raw) ?? void 0 : void 0;
59
+ }
53
60
  var BUILTIN_TOOLSETS = [
54
61
  {
55
62
  id: "memory",
@@ -60,7 +67,7 @@ var BUILTIN_TOOLSETS = [
60
67
  {
61
68
  id: "workspace-fs-read",
62
69
  name: "Workspace File Reading",
63
- description: "Read, list, search, and diff files in the project workspace. Mirrors Node's `fs` reads plus content/glob search. Diagnose-only \u2014 pair with `workspace-fs-write` to actually mutate.",
70
+ description: "Read, list, search, and diff files in the project workspace, and retrieve a referenced Boekwachter issue's durable metadata. Mirrors Node's `fs` reads plus content/glob search. Diagnose-only \u2014 pair with `workspace-fs-write` to actually mutate.",
64
71
  tools: [
65
72
  "list_dir",
66
73
  "read_file",
@@ -69,7 +76,8 @@ var BUILTIN_TOOLSETS = [
69
76
  "validate",
70
77
  "grep_files",
71
78
  "find_files",
72
- "diff_files"
79
+ "diff_files",
80
+ "get_file_issue"
73
81
  ]
74
82
  },
75
83
  {
@@ -84,7 +92,8 @@ var BUILTIN_TOOLSETS = [
84
92
  "map_repo",
85
93
  "search_code",
86
94
  "file_review",
87
- "list_file_issues"
95
+ "list_file_issues",
96
+ "set_file_issue_status"
88
97
  ]
89
98
  },
90
99
  {
@@ -401,11 +410,12 @@ var BuiltinToolsetsSource = class {
401
410
  if (kind !== "toolset") return [];
402
411
  return BUILTIN_TOOLSETS.map((g) => {
403
412
  const manifest = manifestForGroup(g);
413
+ const iconSvg = builtinIconSvg(g.id);
404
414
  return {
405
415
  sourceId: this.id,
406
416
  kind,
407
417
  manifest,
408
- ...BUILTIN_TOOLSET_ICONS[g.id] ? { iconSvg: BUILTIN_TOOLSET_ICONS[g.id] } : {}
418
+ ...iconSvg ? { iconSvg } : {}
409
419
  };
410
420
  });
411
421
  }
@@ -417,11 +427,12 @@ var BuiltinToolsetsSource = class {
417
427
  const g = BUILTIN_BY_ID.get(groupId);
418
428
  if (!g) return null;
419
429
  const manifest = manifestForGroup(g);
430
+ const iconSvg = builtinIconSvg(g.id);
420
431
  return {
421
432
  sourceId: this.id,
422
433
  kind,
423
434
  manifest,
424
- ...BUILTIN_TOOLSET_ICONS[g.id] ? { iconSvg: BUILTIN_TOOLSET_ICONS[g.id] } : {}
435
+ ...iconSvg ? { iconSvg } : {}
425
436
  };
426
437
  }
427
438
  async listVersions(kind, id) {
@@ -465,7 +476,7 @@ import {
465
476
  ChatModelVersionManifestSchema,
466
477
  ConnectorTypeVersionManifestSchema,
467
478
  CraftbookTemplateVersionManifestSchema,
468
- GEZEL_VERSION,
479
+ GEZEL_CONTENT_COMPAT,
469
480
  GezelTemplateVersionManifestSchema,
470
481
  ImageModelVersionManifestSchema,
471
482
  ProjectTypeVersionManifestSchema,
@@ -480,6 +491,7 @@ import {
480
491
  parseCraftbookTestSpec,
481
492
  satisfiesMinGezelVersion
482
493
  } from "@bendyline/gezel";
494
+ import { sanitizePresentationSvg as sanitizePresentationSvg2 } from "@bendyline/gezel/svg";
483
495
  var KINDS = [
484
496
  "toolset",
485
497
  "gezel-template",
@@ -528,7 +540,7 @@ var BundledSource = class {
528
540
  this.id = opts.id ?? "bundled";
529
541
  this.label = opts.label ?? "Bundled";
530
542
  this.useIndex = !opts.noIndex;
531
- this.gezelVersion = opts.gezelVersion ?? GEZEL_VERSION;
543
+ this.gezelVersion = opts.gezelVersion ?? GEZEL_CONTENT_COMPAT;
532
544
  }
533
545
  get root() {
534
546
  return this.rootProvider();
@@ -587,11 +599,12 @@ var BundledSource = class {
587
599
  if (!reResolved) continue;
588
600
  manifest = reResolved;
589
601
  }
602
+ const iconSvg = typeof e.iconSvg === "string" ? sanitizePresentationSvg2(e.iconSvg) : null;
590
603
  const item = {
591
604
  sourceId: this.id,
592
605
  kind,
593
606
  manifest,
594
- ...typeof e.iconSvg === "string" ? { iconSvg: e.iconSvg } : {}
607
+ ...iconSvg ? { iconSvg } : {}
595
608
  };
596
609
  const logo = this.logoUrlFor(kind, manifest.id, manifest);
597
610
  if (logo) item.logoUrl = logo;
@@ -1402,10 +1415,12 @@ var CatalogService = class {
1402
1415
  * bundled + community tiers, re-read on every disk access. The live
1403
1416
  * gilde update mechanism flips it without reconstructing this service
1404
1417
  * (which is built once at boot and held by many subsystems).
1405
- * @param opts.gezelVersion the running app's version, compared against
1406
- * content `minGezelVersion` floors. Defaults to `GEZEL_VERSION`
1407
- * inside each source; injectable so tests can exercise gating (dev
1408
- * checkouts report `0.0.0`, which bypasses all filtering).
1418
+ * @param opts.gezelVersion the calendar line this build sits on, compared
1419
+ * against content `minGezelVersion` floors. Defaults to
1420
+ * `GEZEL_CONTENT_COMPAT` inside each source *not* `GEZEL_VERSION`, which
1421
+ * is semver on the npm channel and not on the axis floors are authored
1422
+ * against. Injectable so tests can exercise gating (dev checkouts report
1423
+ * `0.0.0`, which bypasses all filtering).
1409
1424
  */
1410
1425
  constructor(sources, opts) {
1411
1426
  this.contentRootProvider = opts?.contentRoot ?? null;
@@ -1826,6 +1841,7 @@ import {
1826
1841
  resolvePnpmInvocation,
1827
1842
  retryTransient
1828
1843
  } from "@bendyline/gezel";
1844
+ import { windowsHeadlessSpawnOptions } from "@bendyline/gezel/native";
1829
1845
  import * as tar from "tar";
1830
1846
  var DEFAULT_NPM_REGISTRY = "https://registry.npmjs.org";
1831
1847
  var MAX_PACKUMENT_BYTES = 5 * 1024 * 1024;
@@ -2147,12 +2163,11 @@ function runAndWait(command, args, cwd, shell) {
2147
2163
  const child = spawn(command, args, {
2148
2164
  cwd,
2149
2165
  stdio: ["ignore", "pipe", "pipe"],
2150
- // DETACHED_PROCESS on Windows / a new process group on POSIX. The
2151
- // Windows half is load-bearing: the machine service's restricted SID
2152
- // cannot allocate a console, so a console-subsystem child started any
2153
- // other way dies as `spawn EPERM`. `windowsHide` (CREATE_NO_WINDOW)
2154
- // does not help — it still allocates one.
2155
- detached: true,
2166
+ // Keep the process-group boundary used by POSIX timeout cleanup. On
2167
+ // Windows, taskkill follows parent PIDs, so the owned installer stays
2168
+ // attached and its console window stays hidden.
2169
+ detached: process.platform !== "win32",
2170
+ ...windowsHeadlessSpawnOptions(),
2156
2171
  shell
2157
2172
  });
2158
2173
  let output = "";
@@ -2186,8 +2201,8 @@ function runAndWait(command, args, cwd, shell) {
2186
2201
  function killProcessTree(child) {
2187
2202
  if (process.platform === "win32" && child.pid) {
2188
2203
  const killer = spawn("taskkill.exe", ["/PID", String(child.pid), "/T", "/F"], {
2189
- detached: true,
2190
- stdio: "ignore"
2204
+ stdio: "ignore",
2205
+ ...windowsHeadlessSpawnOptions()
2191
2206
  });
2192
2207
  killer.once("error", () => child.kill("SIGKILL"));
2193
2208
  killer.unref();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bendyline/gezel-catalog",
3
- "version": "0.1.0",
3
+ "version": "1.0.1",
4
4
  "description": "Gezel catalog loader: sources, install pipeline, and authoring scripts over the external @bendyline/gilde content package.",
5
5
  "license": "MIT",
6
6
  "keywords": [
@@ -47,10 +47,10 @@
47
47
  "!dist/**/*.map"
48
48
  ],
49
49
  "dependencies": {
50
- "@bendyline/gilde": "0.1.20",
50
+ "@bendyline/gilde": "0.1.23",
51
51
  "tar": "7.5.21",
52
52
  "zod": "^4.4.3",
53
- "@bendyline/gezel": "0.1.0"
53
+ "@bendyline/gezel": "1.0.0"
54
54
  },
55
55
  "devDependencies": {
56
56
  "esbuild": "^0.28.1",