@treeseed/sdk 0.1.1 → 0.3.0

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 (228) hide show
  1. package/README.md +97 -494
  2. package/dist/{src/cli-tools.d.ts → cli-tools.d.ts} +1 -1
  3. package/dist/cli-tools.js +5 -3
  4. package/dist/{src/content-store.d.ts → content-store.d.ts} +3 -2
  5. package/dist/content-store.js +52 -20
  6. package/dist/{src/d1-store.d.ts → d1-store.d.ts} +62 -1
  7. package/dist/d1-store.js +625 -65
  8. package/dist/field-aliases.d.ts +11 -0
  9. package/dist/field-aliases.js +41 -0
  10. package/dist/graph/build.d.ts +19 -0
  11. package/dist/graph/build.js +949 -0
  12. package/dist/graph/dsl.d.ts +2 -0
  13. package/dist/graph/dsl.js +243 -0
  14. package/dist/graph/query.d.ts +47 -0
  15. package/dist/graph/query.js +447 -0
  16. package/dist/graph/ranking.d.ts +3 -0
  17. package/dist/graph/ranking.js +483 -0
  18. package/dist/graph/schema.d.ts +142 -0
  19. package/dist/graph/schema.js +133 -0
  20. package/dist/graph.d.ts +52 -0
  21. package/dist/graph.js +133 -0
  22. package/dist/index.d.ts +27 -0
  23. package/dist/index.js +90 -2
  24. package/dist/model-registry.d.ts +8 -0
  25. package/dist/model-registry.js +351 -25
  26. package/dist/operations/providers/default.d.ts +10 -0
  27. package/dist/operations/providers/default.js +514 -0
  28. package/dist/operations/runtime.d.ts +7 -0
  29. package/dist/operations/runtime.js +60 -0
  30. package/dist/operations/services/config-runtime.d.ts +269 -0
  31. package/dist/operations/services/config-runtime.js +1397 -0
  32. package/dist/operations/services/d1-migration.d.ts +6 -0
  33. package/dist/operations/services/d1-migration.js +89 -0
  34. package/dist/operations/services/deploy.d.ts +371 -0
  35. package/dist/operations/services/deploy.js +981 -0
  36. package/dist/operations/services/git-workflow.d.ts +49 -0
  37. package/dist/operations/services/git-workflow.js +218 -0
  38. package/dist/operations/services/github-automation.d.ts +156 -0
  39. package/dist/operations/services/github-automation.js +256 -0
  40. package/dist/operations/services/local-dev.d.ts +9 -0
  41. package/dist/operations/services/local-dev.js +106 -0
  42. package/dist/operations/services/mailpit-runtime.d.ts +4 -0
  43. package/dist/operations/services/mailpit-runtime.js +59 -0
  44. package/dist/operations/services/railway-deploy.d.ts +53 -0
  45. package/dist/operations/services/railway-deploy.js +123 -0
  46. package/dist/operations/services/runtime-paths.d.ts +19 -0
  47. package/dist/operations/services/runtime-paths.js +54 -0
  48. package/dist/operations/services/runtime-tools.d.ts +117 -0
  49. package/dist/operations/services/runtime-tools.js +358 -0
  50. package/dist/operations/services/save-deploy-preflight.d.ts +34 -0
  51. package/dist/operations/services/save-deploy-preflight.js +76 -0
  52. package/dist/operations/services/template-registry.d.ts +88 -0
  53. package/dist/operations/services/template-registry.js +407 -0
  54. package/dist/operations/services/watch-dev.d.ts +21 -0
  55. package/dist/operations/services/watch-dev.js +284 -0
  56. package/dist/operations/services/workspace-preflight.d.ts +40 -0
  57. package/dist/operations/services/workspace-preflight.js +165 -0
  58. package/dist/operations/services/workspace-save.d.ts +42 -0
  59. package/dist/operations/services/workspace-save.js +235 -0
  60. package/dist/operations/services/workspace-tools.d.ts +16 -0
  61. package/dist/operations/services/workspace-tools.js +270 -0
  62. package/dist/operations-registry.d.ts +5 -0
  63. package/dist/operations-registry.js +68 -0
  64. package/dist/operations-types.d.ts +71 -0
  65. package/dist/operations-types.js +17 -0
  66. package/dist/operations.d.ts +6 -0
  67. package/dist/operations.js +16 -0
  68. package/dist/platform/books-data.d.ts +1 -0
  69. package/dist/platform/books-data.js +1 -0
  70. package/dist/platform/contracts.d.ts +158 -0
  71. package/dist/platform/contracts.js +0 -0
  72. package/dist/platform/deploy/config.d.ts +4 -0
  73. package/dist/platform/deploy/config.js +222 -0
  74. package/dist/platform/deploy-config.d.ts +1 -0
  75. package/dist/platform/deploy-config.js +1 -0
  76. package/dist/platform/env.yaml +394 -0
  77. package/dist/platform/environment.d.ts +130 -0
  78. package/dist/platform/environment.js +331 -0
  79. package/dist/platform/plugin.d.ts +2 -0
  80. package/dist/platform/plugin.js +4 -0
  81. package/dist/platform/plugins/constants.d.ts +22 -0
  82. package/dist/platform/plugins/constants.js +29 -0
  83. package/dist/platform/plugins/plugin.d.ts +51 -0
  84. package/dist/platform/plugins/plugin.js +6 -0
  85. package/dist/platform/plugins/runtime.d.ts +35 -0
  86. package/dist/platform/plugins/runtime.js +142 -0
  87. package/dist/platform/plugins.d.ts +5 -0
  88. package/dist/platform/plugins.js +16 -0
  89. package/dist/platform/site-config-schema.js +1 -0
  90. package/dist/platform/tenant/config.d.ts +9 -0
  91. package/dist/platform/tenant/config.js +154 -0
  92. package/dist/platform/tenant/runtime-config.d.ts +4 -0
  93. package/dist/platform/tenant/runtime-config.js +20 -0
  94. package/dist/platform/tenant-config.d.ts +1 -0
  95. package/dist/platform/tenant-config.js +1 -0
  96. package/dist/platform/utils/books-data.d.ts +29 -0
  97. package/dist/platform/utils/books-data.js +82 -0
  98. package/dist/platform/utils/site-config-schema.js +321 -0
  99. package/dist/remote.d.ts +175 -0
  100. package/dist/remote.js +202 -0
  101. package/dist/runtime.js +50 -3
  102. package/dist/scripts/aggregate-book.js +121 -0
  103. package/dist/scripts/build-dist.js +57 -13
  104. package/dist/scripts/build-tenant-worker.js +36 -0
  105. package/dist/scripts/cleanup-markdown.js +373 -0
  106. package/dist/scripts/cli-test-fixtures.js +48 -0
  107. package/dist/scripts/config-treeseed.js +95 -0
  108. package/dist/scripts/ensure-mailpit.js +29 -0
  109. package/dist/scripts/local-dev.js +129 -0
  110. package/dist/scripts/logs-mailpit.js +2 -0
  111. package/dist/scripts/patch-starlight-content-path.js +172 -0
  112. package/dist/scripts/release-verify.js +34 -5
  113. package/dist/scripts/run-fixture-astro-command.js +18 -0
  114. package/dist/scripts/scaffold-site.js +65 -0
  115. package/dist/scripts/stop-mailpit.js +5 -0
  116. package/dist/scripts/sync-dev-vars.js +6 -0
  117. package/dist/scripts/sync-template.js +20 -0
  118. package/dist/scripts/template-catalog.test.js +100 -0
  119. package/dist/scripts/template-command.js +31 -0
  120. package/dist/scripts/tenant-astro-command.js +3 -0
  121. package/dist/scripts/tenant-build.js +16 -0
  122. package/dist/scripts/tenant-check.js +7 -0
  123. package/dist/scripts/tenant-d1-migrate-local.js +11 -0
  124. package/dist/scripts/tenant-deploy.js +180 -0
  125. package/dist/scripts/tenant-destroy.js +104 -0
  126. package/dist/scripts/tenant-dev.js +171 -0
  127. package/dist/scripts/tenant-lint.js +4 -0
  128. package/dist/scripts/tenant-test.js +4 -0
  129. package/dist/scripts/test-cloudflare-local.js +212 -0
  130. package/dist/scripts/test-scaffold.js +314 -0
  131. package/dist/scripts/test-smoke.js +71 -13
  132. package/dist/scripts/treeseed-assert-release-tag-version.js +21 -0
  133. package/dist/scripts/treeseed-build-dist.js +134 -0
  134. package/dist/scripts/treeseed-publish-package.js +19 -0
  135. package/dist/scripts/treeseed-release-verify.js +131 -0
  136. package/dist/scripts/treeseed-run-ts.js +45 -0
  137. package/dist/scripts/validate-templates.js +6 -0
  138. package/dist/scripts/verify-driver.js +29 -0
  139. package/dist/scripts/workflow-commands.test.js +39 -0
  140. package/dist/scripts/workspace-close.js +24 -0
  141. package/dist/scripts/workspace-command-e2e.js +718 -0
  142. package/dist/scripts/workspace-lint.js +9 -0
  143. package/dist/scripts/workspace-preflight.js +22 -0
  144. package/dist/scripts/workspace-publish-changed-packages.js +16 -0
  145. package/dist/scripts/workspace-release-verify.js +81 -0
  146. package/dist/scripts/workspace-release.js +42 -0
  147. package/dist/scripts/workspace-save.js +124 -0
  148. package/dist/scripts/workspace-start-warning.js +3 -0
  149. package/dist/scripts/workspace-start.js +71 -0
  150. package/dist/scripts/workspace-test-unit.js +4 -0
  151. package/dist/scripts/workspace-test.js +11 -0
  152. package/dist/sdk-fields.d.ts +11 -0
  153. package/dist/sdk-fields.js +169 -0
  154. package/dist/sdk-filters.d.ts +4 -0
  155. package/dist/sdk-filters.js +12 -15
  156. package/dist/sdk-types.d.ts +796 -0
  157. package/dist/sdk-types.js +7 -1
  158. package/dist/sdk-version.d.ts +2 -0
  159. package/dist/sdk-version.js +42 -0
  160. package/dist/sdk.d.ts +215 -0
  161. package/dist/sdk.js +235 -11
  162. package/dist/stores/cursor-store.js +9 -3
  163. package/dist/stores/lease-store.js +8 -2
  164. package/dist/{src/stores → stores}/message-store.d.ts +1 -1
  165. package/dist/stores/message-store.js +27 -3
  166. package/dist/stores/operational-store.d.ts +24 -0
  167. package/dist/stores/operational-store.js +279 -0
  168. package/dist/stores/run-store.js +8 -1
  169. package/dist/stores/subscription-store.js +7 -5
  170. package/dist/template-catalog.d.ts +13 -0
  171. package/dist/template-catalog.js +141 -0
  172. package/dist/treeseed/services/compose.yml +7 -0
  173. package/dist/treeseed/template-catalog/catalog.fixture.json +55 -0
  174. package/dist/treeseed/template-catalog/templates/starter-basic/template/astro.config.d.ts +2 -0
  175. package/dist/treeseed/template-catalog/templates/starter-basic/template/astro.config.ts +3 -0
  176. package/dist/treeseed/template-catalog/templates/starter-basic/template/package.json +32 -0
  177. package/dist/treeseed/template-catalog/templates/starter-basic/template/src/config.yaml +40 -0
  178. package/dist/treeseed/template-catalog/templates/starter-basic/template/src/content/empty/.gitkeep +1 -0
  179. package/dist/treeseed/template-catalog/templates/starter-basic/template/src/content/knowledge/handbook/index.mdx +11 -0
  180. package/dist/treeseed/template-catalog/templates/starter-basic/template/src/content/pages/welcome.mdx +11 -0
  181. package/dist/treeseed/template-catalog/templates/starter-basic/template/src/content.config.d.ts +1 -0
  182. package/dist/treeseed/template-catalog/templates/starter-basic/template/src/content.config.ts +3 -0
  183. package/dist/treeseed/template-catalog/templates/starter-basic/template/src/env.yaml +1 -0
  184. package/dist/treeseed/template-catalog/templates/starter-basic/template/src/manifest.yaml +19 -0
  185. package/dist/treeseed/template-catalog/templates/starter-basic/template/treeseed.site.yaml +26 -0
  186. package/dist/treeseed/template-catalog/templates/starter-basic/template/tsconfig.json +9 -0
  187. package/dist/treeseed/template-catalog/templates/starter-basic/template.config.json +90 -0
  188. package/dist/verification.d.ts +20 -0
  189. package/dist/verification.js +98 -0
  190. package/dist/workflow/operations.d.ts +396 -0
  191. package/dist/workflow/operations.js +841 -0
  192. package/dist/workflow-state.d.ts +56 -0
  193. package/dist/workflow-state.js +195 -0
  194. package/dist/workflow-support.d.ts +9 -0
  195. package/dist/workflow-support.js +176 -0
  196. package/dist/workflow.d.ts +111 -0
  197. package/dist/workflow.js +97 -0
  198. package/package.json +97 -5
  199. package/scripts/verify-driver.mjs +29 -0
  200. package/dist/scripts/.ts-run-1775616845195-odh4xzphk3l.js +0 -22
  201. package/dist/scripts/.ts-run-1775616848931-9386s6kwrl.js +0 -126
  202. package/dist/scripts/assert-release-tag-version.d.ts +0 -1
  203. package/dist/scripts/build-dist.d.ts +0 -1
  204. package/dist/scripts/package-tools.d.ts +0 -15
  205. package/dist/scripts/publish-package.d.ts +0 -1
  206. package/dist/scripts/release-verify.d.ts +0 -1
  207. package/dist/scripts/test-smoke.d.ts +0 -1
  208. package/dist/src/index.d.ts +0 -6
  209. package/dist/src/model-registry.d.ts +0 -4
  210. package/dist/src/sdk-filters.d.ts +0 -4
  211. package/dist/src/sdk-types.d.ts +0 -285
  212. package/dist/src/sdk.d.ts +0 -109
  213. package/dist/test/test-fixture.d.ts +0 -1
  214. package/dist/test/utils/envelopes.test.d.ts +0 -1
  215. package/dist/test/utils/sdk.test.d.ts +0 -1
  216. package/dist/vitest.config.d.ts +0 -2
  217. /package/dist/{src/frontmatter.d.ts → frontmatter.d.ts} +0 -0
  218. /package/dist/{src/git-runtime.d.ts → git-runtime.d.ts} +0 -0
  219. /package/dist/{src/runtime.d.ts → runtime.d.ts} +0 -0
  220. /package/dist/{src/stores → stores}/cursor-store.d.ts +0 -0
  221. /package/dist/{src/stores → stores}/envelopes.d.ts +0 -0
  222. /package/dist/{src/stores → stores}/helpers.d.ts +0 -0
  223. /package/dist/{src/stores → stores}/lease-store.d.ts +0 -0
  224. /package/dist/{src/stores → stores}/run-store.d.ts +0 -0
  225. /package/dist/{src/stores → stores}/subscription-store.d.ts +0 -0
  226. /package/dist/{src/types → types}/agents.d.ts +0 -0
  227. /package/dist/{src/types → types}/cloudflare.d.ts +0 -0
  228. /package/dist/{src/wrangler-d1.d.ts → wrangler-d1.d.ts} +0 -0
@@ -0,0 +1,55 @@
1
+ {
2
+ "items": [
3
+ {
4
+ "id": "starter-basic",
5
+ "displayName": "TreeSeed Basic",
6
+ "description": "Opinionated first-party TreeSeed starter for documentation-first teams.",
7
+ "summary": "A general-purpose starter for Astro, Cloudflare, docs, and the standard Treeseed workflow.",
8
+ "status": "live",
9
+ "featured": true,
10
+ "category": "starter",
11
+ "audience": [
12
+ "maintainers",
13
+ "teams"
14
+ ],
15
+ "tags": [
16
+ "starter",
17
+ "astro",
18
+ "cloudflare",
19
+ "docs"
20
+ ],
21
+ "publisher": {
22
+ "id": "treeseed",
23
+ "name": "TreeSeed",
24
+ "url": "https://treeseed.ai"
25
+ },
26
+ "publisherVerified": true,
27
+ "templateVersion": "1.0.0",
28
+ "templateApiVersion": 1,
29
+ "minCliVersion": "0.1.1",
30
+ "minCoreVersion": "0.1.2",
31
+ "fulfillment": {
32
+ "source": {
33
+ "kind": "git",
34
+ "repoUrl": "https://github.com/treeseed-ai/market.git",
35
+ "directory": "templates/starter-basic",
36
+ "ref": "main",
37
+ "integrity": "catalog-fixture"
38
+ },
39
+ "hooksPolicy": "builtin_only",
40
+ "supportsReconcile": true
41
+ },
42
+ "offer": {
43
+ "priceModel": "free",
44
+ "license": "AGPL-3.0-only",
45
+ "support": "community"
46
+ },
47
+ "relatedBooks": [],
48
+ "relatedKnowledge": [],
49
+ "relatedObjectives": []
50
+ }
51
+ ],
52
+ "meta": {
53
+ "source": "fixture"
54
+ }
55
+ }
@@ -0,0 +1,2 @@
1
+ declare const _default: any;
2
+ export default _default;
@@ -0,0 +1,3 @@
1
+ import { createTreeseedTenantSite } from '@treeseed/core/config';
2
+
3
+ export default createTreeseedTenantSite();
@@ -0,0 +1,32 @@
1
+ {
2
+ "name": "__SITE_SLUG__",
3
+ "version": "0.1.0",
4
+ "private": true,
5
+ "type": "module",
6
+ "packageManager": "npm@11.7.0",
7
+ "engines": {
8
+ "node": ">=22"
9
+ },
10
+ "scripts": {
11
+ "setup": "npm install",
12
+ "setup:ci": "npm ci",
13
+ "config": "treeseed config",
14
+ "dev": "treeseed dev",
15
+ "dev:watch": "treeseed dev --watch",
16
+ "check": "treeseed check",
17
+ "build": "treeseed build",
18
+ "deploy": "treeseed deploy",
19
+ "preview": "treeseed preview",
20
+ "sync": "treeseed sync",
21
+ "verify": "npm run check && npm run build"
22
+ },
23
+ "dependencies": {
24
+ "@treeseed/cli": "__CLI_VERSION__",
25
+ "@treeseed/core": "__CORE_VERSION__",
26
+ "yaml": "^2.8.1"
27
+ },
28
+ "devDependencies": {
29
+ "@types/node": "^24.6.0",
30
+ "typescript": "^5.9.3"
31
+ }
32
+ }
@@ -0,0 +1,40 @@
1
+ site:
2
+ name: __SITE_NAME__
3
+ statement: A Treeseed site generated from the basic starter template.
4
+ siteUrl: __SITE_URL__
5
+ githubRepository: __REPOSITORY_URL__
6
+ discordLink: __DISCORD_URL__
7
+ headerMenu:
8
+ - label: Learn
9
+ items:
10
+ - label: Handbook
11
+ href: /knowledge/handbook/
12
+ - label: Build
13
+ items:
14
+ - label: Welcome
15
+ href: /welcome/
16
+ footerMenu:
17
+ - label: Project
18
+ items:
19
+ - label: Repository
20
+ href: __REPOSITORY_URL__
21
+ forms:
22
+ apiBaseUrl: /api/form/submit
23
+ emailNotifications:
24
+ contactRouting:
25
+ default:
26
+ - __CONTACT_EMAIL__
27
+ subscribeRecipients:
28
+ - __CONTACT_EMAIL__
29
+ summary: __SITE_NAME__ is a Treeseed site generated from the basic starter.
30
+ projectStage: Initial build
31
+ projectStageDetail: Generated from the Treeseed basic starter template.
32
+ models:
33
+ pages:
34
+ defaults:
35
+ pageLayout: article
36
+ stage: starter
37
+ audience: []
38
+ docs:
39
+ defaults:
40
+ tags: []
@@ -0,0 +1,11 @@
1
+ ---
2
+ title: Handbook
3
+ description: Starter handbook for the generated Treeseed site.
4
+ tags:
5
+ - handbook
6
+ - starter
7
+ ---
8
+
9
+ `__SITE_NAME__` is connected to the Treeseed runtime through `@treeseed/core`.
10
+
11
+ Use this handbook as the first docs collection entry.
@@ -0,0 +1,11 @@
1
+ ---
2
+ title: Welcome
3
+ description: Welcome page for the generated Treeseed starter site.
4
+ slug: welcome
5
+ summary: A starter page proving the tenant content pipeline is wired correctly.
6
+ updated: 2026-04-08
7
+ ---
8
+
9
+ Welcome to `__SITE_NAME__`.
10
+
11
+ This site was generated from the TreeSeed basic starter.
@@ -0,0 +1 @@
1
+ export declare const collections: any;
@@ -0,0 +1,3 @@
1
+ import { createTreeseedTenantCollections } from '@treeseed/core/content-config';
2
+
3
+ export const collections = createTreeseedTenantCollections();
@@ -0,0 +1,19 @@
1
+ id: __SITE_SLUG__
2
+ siteConfigPath: ./src/config.yaml
3
+ content:
4
+ docs: ./src/content/knowledge
5
+ pages: ./src/content/pages
6
+ notes: ./src/content/empty
7
+ questions: ./src/content/empty
8
+ objectives: ./src/content/empty
9
+ people: ./src/content/empty
10
+ agents: ./src/content/empty
11
+ books: ./src/content/empty
12
+ features:
13
+ docs: true
14
+ books: false
15
+ notes: false
16
+ questions: false
17
+ objectives: false
18
+ agents: false
19
+ forms: false
@@ -0,0 +1,26 @@
1
+ name: __SITE_NAME__
2
+ slug: __SITE_SLUG__
3
+ siteUrl: __SITE_URL__
4
+ contactEmail: __CONTACT_EMAIL__
5
+ cloudflare:
6
+ accountId: replace-with-cloudflare-account-id
7
+ workerName: __SITE_SLUG__
8
+ plugins:
9
+ - package: '@treeseed/core/plugin-default'
10
+ providers:
11
+ forms: store_only
12
+ agents:
13
+ execution: stub
14
+ mutation: local_branch
15
+ repository: stub
16
+ verification: stub
17
+ notification: stub
18
+ research: stub
19
+ deploy: cloudflare
20
+ content:
21
+ docs: default
22
+ site: default
23
+ smtp:
24
+ enabled: false
25
+ turnstile:
26
+ enabled: false
@@ -0,0 +1,9 @@
1
+ {
2
+ "extends": "@treeseed/core/tsconfigs/strict",
3
+ "compilerOptions": {
4
+ "module": "ESNext",
5
+ "moduleResolution": "Bundler",
6
+ "types": ["node"]
7
+ },
8
+ "include": ["src/**/*", "astro.config.ts"]
9
+ }
@@ -0,0 +1,90 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "id": "starter-basic",
4
+ "displayName": "TreeSeed Basic",
5
+ "description": "Opinionated first-party TreeSeed starter for documentation-first teams.",
6
+ "category": "starter",
7
+ "tags": [
8
+ "starter",
9
+ "astro",
10
+ "cloudflare",
11
+ "docs"
12
+ ],
13
+ "templateVersion": "1.0.0",
14
+ "templateApiVersion": 1,
15
+ "minCliVersion": "0.1.1",
16
+ "minCoreVersion": "0.1.2",
17
+ "variables": [
18
+ {
19
+ "name": "Site name",
20
+ "token": "__SITE_NAME__",
21
+ "deriveFrom": "name",
22
+ "required": true
23
+ },
24
+ {
25
+ "name": "Site slug",
26
+ "token": "__SITE_SLUG__",
27
+ "deriveFrom": "slug",
28
+ "required": true
29
+ },
30
+ {
31
+ "name": "Site URL",
32
+ "token": "__SITE_URL__",
33
+ "deriveFrom": "siteUrl",
34
+ "default": "https://example.com",
35
+ "required": true
36
+ },
37
+ {
38
+ "name": "Contact email",
39
+ "token": "__CONTACT_EMAIL__",
40
+ "deriveFrom": "contactEmail",
41
+ "default": "hello@example.com",
42
+ "required": true
43
+ },
44
+ {
45
+ "name": "Repository URL",
46
+ "token": "__REPOSITORY_URL__",
47
+ "deriveFrom": "repositoryUrl",
48
+ "default": "https://github.com/example/site"
49
+ },
50
+ {
51
+ "name": "Discord URL",
52
+ "token": "__DISCORD_URL__",
53
+ "deriveFrom": "discordUrl",
54
+ "default": "https://discord.gg/example"
55
+ },
56
+ {
57
+ "name": "CLI version",
58
+ "token": "__CLI_VERSION__",
59
+ "deriveFrom": "cliVersion",
60
+ "required": true
61
+ },
62
+ {
63
+ "name": "Core version",
64
+ "token": "__CORE_VERSION__",
65
+ "deriveFrom": "coreVersion",
66
+ "required": true
67
+ }
68
+ ],
69
+ "managedSurface": {
70
+ "coreManaged": [
71
+ "package.json",
72
+ "astro.config.ts",
73
+ "tsconfig.json",
74
+ "treeseed.site.yaml",
75
+ "src/content.config.ts",
76
+ "src/config.yaml",
77
+ "src/manifest.yaml",
78
+ "src/env.yaml"
79
+ ],
80
+ "validatedOnly": [
81
+ "treeseed.site.yaml",
82
+ "src/config.yaml",
83
+ "src/manifest.yaml",
84
+ "src/env.yaml"
85
+ ]
86
+ },
87
+ "testing": {
88
+ "buildCommand": "npm run build"
89
+ }
90
+ }
@@ -0,0 +1,20 @@
1
+ export type TreeseedVerifyDriver = 'auto' | 'act' | 'direct';
2
+ export type TreeseedVerifyDriverOptions = {
3
+ packageRoot?: string;
4
+ driver?: TreeseedVerifyDriver;
5
+ eventName?: string;
6
+ write?: (message: string, stream?: 'stdout' | 'stderr') => void;
7
+ };
8
+ export type TreeseedVerifyDriverStatus = {
9
+ packageRoot: string;
10
+ workflowPath: string;
11
+ driver: TreeseedVerifyDriver;
12
+ eventName: string;
13
+ inGitHubActions: boolean;
14
+ workflowPresent: boolean;
15
+ ghActAvailable: boolean;
16
+ dockerAvailable: boolean;
17
+ canUseAct: boolean;
18
+ };
19
+ export declare function getTreeseedVerifyDriverStatus(options?: TreeseedVerifyDriverOptions): TreeseedVerifyDriverStatus;
20
+ export declare function runTreeseedVerifyDriver(options?: TreeseedVerifyDriverOptions): number;
@@ -0,0 +1,98 @@
1
+ import { existsSync } from "node:fs";
2
+ import { spawnSync } from "node:child_process";
3
+ import { basename, resolve } from "node:path";
4
+ import { fileURLToPath } from "node:url";
5
+ function defaultWrite(message, stream = "stdout") {
6
+ if (!message) return;
7
+ (stream === "stderr" ? process.stderr : process.stdout).write(`${message}
8
+ `);
9
+ }
10
+ function run(command, args, cwd) {
11
+ const result = spawnSync(command, args, {
12
+ cwd,
13
+ env: process.env,
14
+ stdio: "inherit"
15
+ });
16
+ return result.status ?? 1;
17
+ }
18
+ function check(command, args, cwd) {
19
+ const result = spawnSync(command, args, {
20
+ cwd,
21
+ env: process.env,
22
+ stdio: "pipe",
23
+ encoding: "utf8"
24
+ });
25
+ return {
26
+ ok: result.status === 0,
27
+ detail: `${result.stderr ?? ""}
28
+ ${result.stdout ?? ""}`.trim()
29
+ };
30
+ }
31
+ function getTreeseedVerifyDriverStatus(options = {}) {
32
+ const packageRoot = resolve(options.packageRoot ?? process.cwd());
33
+ const workflowPath = resolve(packageRoot, ".github", "workflows", "verify.yml");
34
+ const driver = options.driver ?? process.env.TREESEED_VERIFY_DRIVER ?? "auto";
35
+ const eventName = options.eventName ?? process.env.TREESEED_VERIFY_EVENT ?? "workflow_dispatch";
36
+ const inGitHubActions = process.env.GITHUB_ACTIONS === "true";
37
+ const workflowPresent = existsSync(workflowPath);
38
+ const ghAct = check("gh", ["act", "--version"], packageRoot);
39
+ const docker = check("docker", ["info"], packageRoot);
40
+ return {
41
+ packageRoot,
42
+ workflowPath,
43
+ driver,
44
+ eventName,
45
+ inGitHubActions,
46
+ workflowPresent,
47
+ ghActAvailable: ghAct.ok,
48
+ dockerAvailable: docker.ok,
49
+ canUseAct: workflowPresent && ghAct.ok && docker.ok
50
+ };
51
+ }
52
+ function runTreeseedVerifyDriver(options = {}) {
53
+ const write = options.write ?? defaultWrite;
54
+ const status = getTreeseedVerifyDriverStatus(options);
55
+ if (status.driver === "direct" || status.inGitHubActions) {
56
+ return run("npm", ["run", "verify:direct"], status.packageRoot);
57
+ }
58
+ if (status.driver === "act") {
59
+ if (!status.workflowPresent) {
60
+ write(`Treeseed verify requires ${status.workflowPath} when TREESEED_VERIFY_DRIVER=act.`, "stderr");
61
+ return 1;
62
+ }
63
+ if (!status.ghActAvailable) {
64
+ const detail = check("gh", ["act", "--version"], status.packageRoot).detail;
65
+ write(detail || "Treeseed verify requires `gh act` when TREESEED_VERIFY_DRIVER=act.", "stderr");
66
+ return 1;
67
+ }
68
+ if (!status.dockerAvailable) {
69
+ const detail = check("docker", ["info"], status.packageRoot).detail;
70
+ write(detail || "Treeseed verify requires a running Docker daemon when TREESEED_VERIFY_DRIVER=act.", "stderr");
71
+ return 1;
72
+ }
73
+ return run("gh", ["act", status.eventName, "-W", ".github/workflows/verify.yml", "-j", "verify"], status.packageRoot);
74
+ }
75
+ if (status.canUseAct) {
76
+ return run("gh", ["act", status.eventName, "-W", ".github/workflows/verify.yml", "-j", "verify"], status.packageRoot);
77
+ }
78
+ if (!status.workflowPresent) {
79
+ write("Treeseed verify warning: package-local verify workflow is missing; falling back to verify:direct.", "stderr");
80
+ } else if (!status.ghActAvailable) {
81
+ write("Treeseed verify warning: `gh act` is unavailable; falling back to verify:direct.", "stderr");
82
+ } else if (!status.dockerAvailable) {
83
+ write("Treeseed verify warning: Docker is unavailable; falling back to verify:direct.", "stderr");
84
+ }
85
+ return run("npm", ["run", "verify:direct"], status.packageRoot);
86
+ }
87
+ const invokedPath = process.argv[1] ? resolve(process.argv[1]) : "";
88
+ const invokedBasename = basename(invokedPath);
89
+ const modulePath = fileURLToPath(import.meta.url);
90
+ const moduleBasename = basename(modulePath);
91
+ const invokedAsVerificationEntrypoint = invokedPath === modulePath || /^verification\.(?:ts|js|mjs|cjs)$/.test(invokedBasename) || invokedBasename === moduleBasename;
92
+ if (invokedAsVerificationEntrypoint) {
93
+ process.exit(runTreeseedVerifyDriver());
94
+ }
95
+ export {
96
+ getTreeseedVerifyDriverStatus,
97
+ runTreeseedVerifyDriver
98
+ };