@omniharmonic/openspace-cli 0.1.3 → 0.1.4

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 (140) hide show
  1. package/dist/{agents-md-7DESZGEN.js → agents-md-3W4PIY4N.js} +2 -2
  2. package/dist/bin.js +2 -2
  3. package/dist/{chunk-TQZ5F7VG.js → chunk-6NIIOHOX.js} +91 -3
  4. package/dist/chunk-6NIIOHOX.js.map +1 -0
  5. package/dist/{chunk-AAMRGTSI.js → chunk-7I6IJI6Z.js} +9166 -874
  6. package/dist/chunk-7I6IJI6Z.js.map +1 -0
  7. package/dist/index.js +2 -2
  8. package/dist/starter/site/AGENTS.md +11 -4
  9. package/dist/templates/beacon/content/collections/events/_collection.json +13 -0
  10. package/dist/templates/beacon/content/collections/events/keeper-training-november.mdoc +14 -0
  11. package/dist/templates/beacon/content/collections/events/planting-day-harbour-ward.mdoc +14 -0
  12. package/dist/templates/beacon/content/collections/events/planting-day-linden-north.mdoc +14 -0
  13. package/dist/templates/beacon/content/collections/news/2026-09-12-heat-map-2026.mdoc +13 -0
  14. package/dist/templates/beacon/content/collections/news/2026-09-30-school-gardens-harvest.mdoc +13 -0
  15. package/dist/templates/beacon/content/collections/news/2026-10-14-planting-season-begins.mdoc +13 -0
  16. package/dist/templates/beacon/content/collections/news/_collection.json +16 -0
  17. package/dist/templates/beacon/content/pages/about.json +572 -0
  18. package/dist/templates/beacon/content/pages/contact.json +260 -0
  19. package/dist/templates/beacon/content/pages/donate.json +406 -0
  20. package/dist/templates/beacon/content/pages/get-involved.json +412 -0
  21. package/dist/templates/beacon/content/pages/home.json +701 -0
  22. package/dist/templates/beacon/content/pages/our-work.json +855 -0
  23. package/dist/templates/beacon/content/site.json +363 -0
  24. package/dist/templates/beacon/content/styles.json +17 -0
  25. package/dist/templates/beacon/media/LICENSES.json +163 -0
  26. package/dist/templates/beacon/openspace.json +21 -0
  27. package/dist/templates/beacon/template.json +113 -0
  28. package/dist/templates/commons/content/pages/{members.json → directory.json} +15 -15
  29. package/dist/templates/commons/content/pages/home.json +1 -1
  30. package/dist/templates/commons/content/site.json +2 -2
  31. package/dist/templates/commons/template.json +2 -2
  32. package/dist/templates/darkroom/content/collections/work/_collection.json +13 -0
  33. package/dist/templates/darkroom/content/collections/work/after-hours.mdoc +28 -0
  34. package/dist/templates/darkroom/content/collections/work/dry-season.mdoc +28 -0
  35. package/dist/templates/darkroom/content/collections/work/faces-of-the-guild.mdoc +28 -0
  36. package/dist/templates/darkroom/content/collections/work/two-weddings.mdoc +28 -0
  37. package/dist/templates/darkroom/content/collections/work/white-lines.mdoc +28 -0
  38. package/dist/templates/darkroom/content/pages/about.json +449 -0
  39. package/dist/templates/darkroom/content/pages/contact.json +185 -0
  40. package/dist/templates/darkroom/content/pages/home.json +636 -0
  41. package/dist/templates/darkroom/content/pages/services.json +636 -0
  42. package/dist/templates/darkroom/content/site.json +264 -0
  43. package/dist/templates/darkroom/content/styles.json +17 -0
  44. package/dist/templates/darkroom/media/LICENSES.json +284 -0
  45. package/dist/templates/darkroom/openspace.json +21 -0
  46. package/dist/templates/darkroom/template.json +103 -0
  47. package/dist/templates/encore/content/pages/home.json +86 -0
  48. package/dist/templates/encore/media/LICENSES.json +22 -0
  49. package/dist/templates/field-notes/content/pages/home.json +94 -0
  50. package/dist/templates/fixwell/content/pages/about.json +508 -0
  51. package/dist/templates/fixwell/content/pages/contact.json +321 -0
  52. package/dist/templates/fixwell/content/pages/home.json +888 -0
  53. package/dist/templates/fixwell/content/pages/pricing.json +467 -0
  54. package/dist/templates/fixwell/content/pages/services.json +648 -0
  55. package/dist/templates/fixwell/content/site.json +293 -0
  56. package/dist/templates/fixwell/content/styles.json +17 -0
  57. package/dist/templates/fixwell/media/LICENSES.json +119 -0
  58. package/dist/templates/fixwell/openspace.json +21 -0
  59. package/dist/templates/fixwell/template.json +108 -0
  60. package/dist/templates/folio/content/collections/projects/_collection.json +13 -0
  61. package/dist/templates/folio/content/collections/projects/field-notes-app.mdoc +28 -0
  62. package/dist/templates/folio/content/collections/projects/harbour-health-dashboards.mdoc +28 -0
  63. package/dist/templates/folio/content/collections/projects/open-budget.mdoc +28 -0
  64. package/dist/templates/folio/content/collections/projects/transit-times.mdoc +28 -0
  65. package/dist/templates/folio/content/collections/writing/2026-08-30-designing-for-night-shifts.mdoc +9 -0
  66. package/dist/templates/folio/content/collections/writing/2026-09-20-testing-with-real-data.mdoc +9 -0
  67. package/dist/templates/folio/content/collections/writing/2026-10-12-one-honest-number.mdoc +9 -0
  68. package/dist/templates/folio/content/collections/writing/_collection.json +16 -0
  69. package/dist/templates/folio/content/pages/about.json +366 -0
  70. package/dist/templates/folio/content/pages/contact.json +218 -0
  71. package/dist/templates/folio/content/pages/experience.json +552 -0
  72. package/dist/templates/folio/content/pages/home.json +410 -0
  73. package/dist/templates/folio/content/site.json +186 -0
  74. package/dist/templates/folio/content/styles.json +17 -0
  75. package/dist/templates/folio/media/LICENSES.json +229 -0
  76. package/dist/templates/folio/openspace.json +21 -0
  77. package/dist/templates/folio/template.json +103 -0
  78. package/dist/templates/gather/content/collections/fringe/_collection.json +13 -0
  79. package/dist/templates/gather/content/collections/fringe/library-open-studio.mdoc +14 -0
  80. package/dist/templates/gather/content/collections/fringe/morning-run.mdoc +14 -0
  81. package/dist/templates/gather/content/collections/fringe/plain-language-pub-quiz.mdoc +14 -0
  82. package/dist/templates/gather/content/pages/about.json +435 -0
  83. package/dist/templates/gather/content/pages/contact.json +196 -0
  84. package/dist/templates/gather/content/pages/home.json +527 -0
  85. package/dist/templates/gather/content/pages/programme.json +449 -0
  86. package/dist/templates/gather/content/pages/speakers.json +225 -0
  87. package/dist/templates/gather/content/pages/tickets.json +495 -0
  88. package/dist/templates/gather/content/pages/venue.json +382 -0
  89. package/dist/templates/gather/content/site.json +222 -0
  90. package/dist/templates/gather/content/styles.json +17 -0
  91. package/dist/templates/gather/media/LICENSES.json +185 -0
  92. package/dist/templates/gather/openspace.json +21 -0
  93. package/dist/templates/gather/template.json +118 -0
  94. package/dist/templates/inkwell/content/collections/essays/2026-09-17-notebooks.mdoc +13 -0
  95. package/dist/templates/inkwell/content/collections/essays/2026-10-01-kitchen-radio.mdoc +13 -0
  96. package/dist/templates/inkwell/content/collections/essays/2026-10-15-the-same-mile.mdoc +13 -0
  97. package/dist/templates/inkwell/content/collections/essays/_collection.json +21 -0
  98. package/dist/templates/inkwell/content/pages/about.json +281 -0
  99. package/dist/templates/inkwell/content/pages/books.json +459 -0
  100. package/dist/templates/inkwell/content/pages/contact.json +201 -0
  101. package/dist/templates/inkwell/content/pages/home.json +457 -0
  102. package/dist/templates/inkwell/content/pages/speaking.json +522 -0
  103. package/dist/templates/inkwell/content/site.json +222 -0
  104. package/dist/templates/inkwell/content/styles.json +17 -0
  105. package/dist/templates/inkwell/media/LICENSES.json +119 -0
  106. package/dist/templates/inkwell/openspace.json +21 -0
  107. package/dist/templates/inkwell/template.json +108 -0
  108. package/dist/templates/keystone/content/collections/notes/2026-09-17-hard-conversations.mdoc +11 -0
  109. package/dist/templates/keystone/content/collections/notes/2026-10-01-weekly-rhythm.mdoc +11 -0
  110. package/dist/templates/keystone/content/collections/notes/2026-10-15-the-first-manager.mdoc +11 -0
  111. package/dist/templates/keystone/content/collections/notes/_collection.json +21 -0
  112. package/dist/templates/keystone/content/pages/about.json +371 -0
  113. package/dist/templates/keystone/content/pages/contact.json +207 -0
  114. package/dist/templates/keystone/content/pages/home.json +815 -0
  115. package/dist/templates/keystone/content/pages/results.json +396 -0
  116. package/dist/templates/keystone/content/pages/work-with-me.json +477 -0
  117. package/dist/templates/keystone/content/site.json +224 -0
  118. package/dist/templates/keystone/content/styles.json +17 -0
  119. package/dist/templates/keystone/media/LICENSES.json +75 -0
  120. package/dist/templates/keystone/openspace.json +21 -0
  121. package/dist/templates/keystone/template.json +108 -0
  122. package/dist/templates/ledger/content/pages/home.json +62 -0
  123. package/dist/templates/orbit/content/collections/changelog/2026-09-21-faster-attachments.mdoc +11 -0
  124. package/dist/templates/orbit/content/collections/changelog/2026-10-05-snooze-until-reply.mdoc +11 -0
  125. package/dist/templates/orbit/content/collections/changelog/2026-10-19-help-centre-search.mdoc +13 -0
  126. package/dist/templates/orbit/content/collections/changelog/_collection.json +39 -0
  127. package/dist/templates/orbit/content/pages/about.json +396 -0
  128. package/dist/templates/orbit/content/pages/contact.json +195 -0
  129. package/dist/templates/orbit/content/pages/features.json +603 -0
  130. package/dist/templates/orbit/content/pages/home.json +1273 -0
  131. package/dist/templates/orbit/content/pages/pricing.json +608 -0
  132. package/dist/templates/orbit/content/site.json +368 -0
  133. package/dist/templates/orbit/content/styles.json +17 -0
  134. package/dist/templates/orbit/media/LICENSES.json +141 -0
  135. package/dist/templates/orbit/openspace.json +21 -0
  136. package/dist/templates/orbit/template.json +108 -0
  137. package/package.json +6 -6
  138. package/dist/chunk-AAMRGTSI.js.map +0 -1
  139. package/dist/chunk-TQZ5F7VG.js.map +0 -1
  140. /package/dist/{agents-md-7DESZGEN.js.map → agents-md-3W4PIY4N.js.map} +0 -0
@@ -1,8 +1,8 @@
1
1
  import { createRequire as __osCreateRequire } from "node:module"; const require = __osCreateRequire(import.meta.url);
2
2
  import {
3
3
  generateAgentsMd
4
- } from "./chunk-AAMRGTSI.js";
4
+ } from "./chunk-7I6IJI6Z.js";
5
5
  export {
6
6
  generateAgentsMd
7
7
  };
8
- //# sourceMappingURL=agents-md-7DESZGEN.js.map
8
+ //# sourceMappingURL=agents-md-3W4PIY4N.js.map
package/dist/bin.js CHANGED
@@ -3,8 +3,8 @@ import { createRequire as __osCreateRequire } from "node:module"; const require
3
3
  import {
4
4
  processIo,
5
5
  run
6
- } from "./chunk-TQZ5F7VG.js";
7
- import "./chunk-AAMRGTSI.js";
6
+ } from "./chunk-6NIIOHOX.js";
7
+ import "./chunk-7I6IJI6Z.js";
8
8
 
9
9
  // src/bin.ts
10
10
  process.exitCode = await run(process.argv.slice(2), processIo());
@@ -79,7 +79,7 @@ import {
79
79
  toHex,
80
80
  toJsonSchema,
81
81
  toMarkdown
82
- } from "./chunk-AAMRGTSI.js";
82
+ } from "./chunk-7I6IJI6Z.js";
83
83
 
84
84
  // ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/nodes/identity.js
85
85
  var require_identity = __commonJS({
@@ -8681,7 +8681,7 @@ async function renderAgentsMd(root, siteTitle) {
8681
8681
  } catch {
8682
8682
  }
8683
8683
  }
8684
- const { generateAgentsMd: generateAgentsMd2 } = await import("./agents-md-7DESZGEN.js");
8684
+ const { generateAgentsMd: generateAgentsMd2 } = await import("./agents-md-3W4PIY4N.js");
8685
8685
  return generateAgentsMd2(title ? { siteTitle: title } : {});
8686
8686
  }
8687
8687
  async function writeAgentsMd(root, siteTitle) {
@@ -11979,6 +11979,63 @@ function summarize(ops, doc) {
11979
11979
  return text3.charAt(0).toUpperCase() + text3.slice(1);
11980
11980
  }
11981
11981
 
11982
+ // ../lint/src/hosting.ts
11983
+ function isGatedPage(page) {
11984
+ const slug = typeof page.slug === "string" ? page.slug : "";
11985
+ return Boolean(
11986
+ page.access?.members || page.access?.password || slug === "members" || slug.startsWith("members/")
11987
+ );
11988
+ }
11989
+ function onGitHubPages(doc) {
11990
+ return doc.config?.deploy?.target !== "cloudflare";
11991
+ }
11992
+ var CLOUDFLARE_BLOCKS = {
11993
+ donation: "Donations",
11994
+ product: "Buying products",
11995
+ "member-login": "Member sign-in"
11996
+ };
11997
+ var linkKey = (l) => `${l.scope.kind}:${"page" in l.scope ? l.scope.page : ""}:${"collection" in l.scope ? `${l.scope.collection}/${l.scope.slug}` : ""}:${l.container ?? ""}:${l.path.join(".")}`;
11998
+ function gatedPageLinks(doc) {
11999
+ if (!onGitHubPages(doc)) return [];
12000
+ const pages = Object.entries(doc.pages);
12001
+ if (!pages.some(([, p]) => isGatedPage(p))) return [];
12002
+ const before = new Set(findBrokenLinks(doc).map(linkKey));
12003
+ const published = {
12004
+ ...doc,
12005
+ pages: Object.fromEntries(pages.filter(([, p]) => !isGatedPage(p)))
12006
+ };
12007
+ return findBrokenLinks(published).filter((l) => !before.has(linkKey(l))).map((l) => ({ ...l, severity: "warning" }));
12008
+ }
12009
+ function hostingWarnings(doc, pageId) {
12010
+ if (!onGitHubPages(doc)) return [];
12011
+ const out = [];
12012
+ const title = (p) => p.title || (p.slug === "" ? "Home" : p.slug);
12013
+ for (const page of Object.values(doc.pages)) {
12014
+ if (pageId && page.id !== pageId) continue;
12015
+ if (isGatedPage(page)) {
12016
+ out.push({
12017
+ rule: "gated-page",
12018
+ message: `${title(page)} is members-only, so it isn't published while the site is on GitHub Pages.`,
12019
+ where: { page: page.id }
12020
+ });
12021
+ continue;
12022
+ }
12023
+ for (const section of page.sections) {
12024
+ if (section.hidden) continue;
12025
+ for (const block4 of section.blocks) {
12026
+ const what = CLOUDFLARE_BLOCKS[block4.type];
12027
+ if (!what) continue;
12028
+ out.push({
12029
+ rule: "needs-cloudflare",
12030
+ message: `${what} on ${title(page)} won't work on your live site: it needs Cloudflare hosting, and this site is on GitHub Pages.`,
12031
+ where: { page: page.id, section: section.id, block: block4.id }
12032
+ });
12033
+ }
12034
+ }
12035
+ }
12036
+ return out;
12037
+ }
12038
+
11982
12039
  // ../lint/src/issue.ts
11983
12040
  function opMeta(options) {
11984
12041
  let n = 0;
@@ -12039,6 +12096,9 @@ function describeBrokenLink(doc, link2) {
12039
12096
  return `${where} links to ${link2.target}, which isn't a page on your site.`;
12040
12097
  }
12041
12098
  }
12099
+ function describeGatedLink(doc, link2) {
12100
+ return `${linkPlace(doc, link2)} links to a members-only page. Sites on GitHub Pages don't publish members-only pages, so visitors would see "page not found".`;
12101
+ }
12042
12102
  function linkFix(doc, link2, meta2) {
12043
12103
  const target = link2.kind === "page" ? "/" : link2.target;
12044
12104
  const s2 = suggestLinkTarget(doc, target);
@@ -12092,6 +12152,24 @@ function linkIssues(doc, pageId, options = {}, meta2 = opMeta(options)) {
12092
12152
  })
12093
12153
  );
12094
12154
  }
12155
+ for (const link2 of gatedPageLinks(doc)) {
12156
+ const s2 = link2.scope;
12157
+ if (pageId && s2.kind === "page" && s2.page !== pageId) continue;
12158
+ if (pageId && s2.kind === "item") continue;
12159
+ const page = link2.container ?? (s2.kind === "page" ? s2.page : void 0);
12160
+ out.push(
12161
+ issue({
12162
+ rule: "gated-link",
12163
+ severity: "warning",
12164
+ ...page ? { page } : {},
12165
+ ...link2.section ? { section: link2.section } : {},
12166
+ ...link2.block ? { block: link2.block } : {},
12167
+ key: `${s2.kind === "item" ? `${s2.collection}/${s2.slug}:` : ""}${link2.path.join(".")}`,
12168
+ message: describeGatedLink(doc, link2),
12169
+ fix: "Remove the link, point it at a public page, or switch the site to Cloudflare hosting (Settings \u2192 Hosting)."
12170
+ })
12171
+ );
12172
+ }
12095
12173
  return out;
12096
12174
  }
12097
12175
 
@@ -12357,6 +12435,16 @@ function designCheck(doc, pageId, options = {}) {
12357
12435
  for (const page of pages) ctx.page(page);
12358
12436
  ctx.container(FOOTER, [doc.site.footer], { footer: true });
12359
12437
  ctx.issues.push(...linkIssues(doc, pageId, options, ctx.meta));
12438
+ for (const w of hostingWarnings(doc, pageId))
12439
+ ctx.issues.push(
12440
+ issue({
12441
+ rule: w.rule,
12442
+ severity: "warning",
12443
+ ...w.where,
12444
+ message: w.message,
12445
+ fix: w.rule === "gated-page" ? "Switch the site to Cloudflare hosting (Settings \u2192 Hosting) to publish members-only pages, or make the page public." : "Switch the site to Cloudflare hosting (Settings \u2192 Hosting), or remove this block."
12446
+ })
12447
+ );
12360
12448
  return sortIssues(ctx.issues);
12361
12449
  }
12362
12450
  var LIGHT = /* @__PURE__ */ new Set(["light", "light-accent"]);
@@ -39099,4 +39187,4 @@ export {
39099
39187
  createProgram,
39100
39188
  run
39101
39189
  };
39102
- //# sourceMappingURL=chunk-TQZ5F7VG.js.map
39190
+ //# sourceMappingURL=chunk-6NIIOHOX.js.map