superbee 0.4.4-pre.15 → 0.4.4-pre.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -78,7 +78,7 @@ first-party support promise for native Windows. An older installed version is no
78
78
  removed by this source change, and existing bundle files are not migrated by it. Review the affected release's notes before changing an existing
79
79
  Windows installation. macOS/Linux users can continue using the normal installation and setup flow.
80
80
 
81
- Run `superbee version --check` to compare your install with the current stable release.
81
+ Run `superbee version` to see which build you have. `superbee version --check` is not available on published builds yet: it exits 1 with `policy_disabled` and makes no network request. Check the npm page or `npm view superbee version` for the current release.
82
82
 
83
83
  ## First run: let your agent finish setup
84
84
 
package/SKILL.md CHANGED
@@ -93,7 +93,7 @@ When the tone fits, a single 🐝 may mark a successful Superbee outcome.
93
93
 
94
94
  ## Sync conflicts
95
95
 
96
- - A Git board and a hosted checkout share one playbook. When `superbee sync` exits 5 with conflict rows, run `superbee sync --inspect --doc <id>` to see your version and theirs, then `superbee sync --resolve keep|take|revise --doc <id>`: keep writes yours over theirs, take keeps theirs, revise keeps the document as you edited it to the merged result. `--resolve` never sends: run `superbee sync` after keep or revise. A Git board has already kept the teammate's version and saved yours aside; a hosted checkout keeps your file, treats any concurrent change to one document (even different frontmatter keys) as a conflict, and is explained in `$REFS/hosted-checkout.md`.
96
+ - A Git board and a hosted checkout share one playbook. When `superbee sync` exits 5 with conflict rows, run `superbee sync --inspect --doc <id>` to see your version and theirs, then `superbee sync --resolve keep|take|revise --doc <id>`: keep writes yours over theirs, take keeps theirs, revise keeps the document as you edited it to the merged result. `--resolve` never sends: run `superbee sync` after keep or revise. A Git board has already kept the teammate's version and saved yours aside, and only the new conflict exits 5: `status` and later `sync` runs keep naming the saved copy, with the command that discards it, until it is settled; keep is refused when your copy also differs in frontmatter, so edit the document to the result and use revise. A hosted checkout keeps your file, treats any concurrent change to one document (even different frontmatter keys) as a conflict, and is explained in `$REFS/hosted-checkout.md`.
97
97
 
98
98
  ## Host setup
99
99
 
@@ -3278,6 +3278,17 @@ function isReservedFile(relPath) {
3278
3278
  const base = toPosix(relPath).split("/").pop() ?? "";
3279
3279
  return RESERVED_FILENAMES.includes(base);
3280
3280
  }
3281
+ function isHiddenWalkEntry(name) {
3282
+ return name.startsWith(".");
3283
+ }
3284
+ function hasMarkdownExtension(name) {
3285
+ return name.toLowerCase().endsWith(".md");
3286
+ }
3287
+ function classifyWalkPath(relPath) {
3288
+ const segments = toPosix(relPath).split("/").filter((segment) => segment !== "");
3289
+ if (segments.some(isHiddenWalkEntry)) return "hidden";
3290
+ return hasMarkdownExtension(segments.at(-1) ?? "") ? "markdown" : "other";
3291
+ }
3281
3292
  function conceptIdFromPath(relPath) {
3282
3293
  const norm = toPosix(relPath).replace(/^\.?\//, "").split("/").filter((segment) => segment !== ".").join("/");
3283
3294
  return norm.endsWith(".md") ? norm.slice(0, -3) : norm;
@@ -5333,7 +5344,7 @@ async function walkFiles(port, root, keep, sub = "") {
5333
5344
  const entries = await port.entries(path3.join(root, sub)) ?? [];
5334
5345
  const out = [];
5335
5346
  for (const entry of entries) {
5336
- if (entry.name.startsWith(".")) continue;
5347
+ if (isHiddenWalkEntry(entry.name)) continue;
5337
5348
  const rel = sub === "" ? entry.name : `${sub}/${entry.name}`;
5338
5349
  if (entry.kind === "directory") {
5339
5350
  out.push(...await walkFiles(port, root, keep, rel));
@@ -5592,12 +5603,15 @@ var FilesystemBackend = class _FilesystemBackend {
5592
5603
  return observed.state === "exact" && observed.value.kind === "file";
5593
5604
  }
5594
5605
  async listBlobs(prefix) {
5595
- const files = await walkFiles(this.#port, this.#root, (name) => !name.toLowerCase().endsWith(".md"));
5606
+ const files = await walkFiles(this.#port, this.#root, (name) => !hasMarkdownExtension(name));
5596
5607
  const keys2 = files.map(toPosix);
5597
5608
  const filtered = prefix ? keys2.filter((k) => k.startsWith(prefix)) : keys2;
5598
5609
  filtered.sort(compareStorageKeys);
5599
5610
  return filtered;
5600
5611
  }
5612
+ classifyChangedPath(relPath) {
5613
+ return classifyWalkPath(relPath);
5614
+ }
5601
5615
  capabilities() {
5602
5616
  return {
5603
5617
  history: false,
@@ -31232,6 +31232,17 @@ function isReservedFile(relPath) {
31232
31232
  const base = toPosix(relPath).split("/").pop() ?? "";
31233
31233
  return RESERVED_FILENAMES.includes(base);
31234
31234
  }
31235
+ function isHiddenWalkEntry(name) {
31236
+ return name.startsWith(".");
31237
+ }
31238
+ function hasMarkdownExtension(name) {
31239
+ return name.toLowerCase().endsWith(".md");
31240
+ }
31241
+ function classifyWalkPath(relPath) {
31242
+ const segments = toPosix(relPath).split("/").filter((segment) => segment !== "");
31243
+ if (segments.some(isHiddenWalkEntry)) return "hidden";
31244
+ return hasMarkdownExtension(segments.at(-1) ?? "") ? "markdown" : "other";
31245
+ }
31235
31246
  function conceptIdFromPath(relPath) {
31236
31247
  const norm = toPosix(relPath).replace(/^\.?\//, "").split("/").filter((segment) => segment !== ".").join("/");
31237
31248
  return norm.endsWith(".md") ? norm.slice(0, -3) : norm;
@@ -33294,7 +33305,7 @@ async function walkFiles(port, root, keep, sub = "") {
33294
33305
  const entries = await port.entries(path3.join(root, sub)) ?? [];
33295
33306
  const out = [];
33296
33307
  for (const entry of entries) {
33297
- if (entry.name.startsWith(".")) continue;
33308
+ if (isHiddenWalkEntry(entry.name)) continue;
33298
33309
  const rel = sub === "" ? entry.name : `${sub}/${entry.name}`;
33299
33310
  if (entry.kind === "directory") {
33300
33311
  out.push(...await walkFiles(port, root, keep, rel));
@@ -33553,12 +33564,15 @@ var FilesystemBackend = class _FilesystemBackend {
33553
33564
  return observed.state === "exact" && observed.value.kind === "file";
33554
33565
  }
33555
33566
  async listBlobs(prefix) {
33556
- const files = await walkFiles(this.#port, this.#root, (name) => !name.toLowerCase().endsWith(".md"));
33567
+ const files = await walkFiles(this.#port, this.#root, (name) => !hasMarkdownExtension(name));
33557
33568
  const keys2 = files.map(toPosix);
33558
33569
  const filtered = prefix ? keys2.filter((k) => k.startsWith(prefix)) : keys2;
33559
33570
  filtered.sort(compareStorageKeys);
33560
33571
  return filtered;
33561
33572
  }
33573
+ classifyChangedPath(relPath) {
33574
+ return classifyWalkPath(relPath);
33575
+ }
33562
33576
  capabilities() {
33563
33577
  return {
33564
33578
  history: false,