@spacefast/common 0.0.24 → 0.2.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.
Files changed (320) hide show
  1. package/brand-assets/LICENSE-Haskoy.txt +93 -0
  2. package/brand-assets/haskoy-latin-variable.woff2 +0 -0
  3. package/brand-assets/spacefast-favicon.svg +4 -4
  4. package/brand-assets/spacefast-sf-full-bleed.svg +3 -3
  5. package/brand-assets/spacefast-wordmark.svg +2 -4
  6. package/dist/agents/connect-targets.d.ts +6 -146
  7. package/dist/agents/connect-targets.js +63 -295
  8. package/dist/agents/private-key-oauth.d.ts +31 -2
  9. package/dist/agents/private-key-oauth.js +166 -92
  10. package/dist/agents/registry/core.d.ts +292 -0
  11. package/dist/agents/registry/core.js +1388 -0
  12. package/dist/agents/registry/deeplink-probes.d.ts +23 -0
  13. package/dist/agents/registry/deeplink-probes.js +18 -0
  14. package/dist/agents/registry/node.d.ts +56 -0
  15. package/dist/agents/registry/node.js +339 -0
  16. package/dist/brand-assets-build.js +3 -6
  17. package/dist/brand-assets.d.ts +5 -15
  18. package/dist/brand-assets.js +12 -14
  19. package/dist/brand.d.ts +17 -0
  20. package/dist/brand.js +24 -4
  21. package/dist/config/domains.d.ts +79 -12
  22. package/dist/config/domains.js +128 -29
  23. package/dist/config/index.js +1 -2
  24. package/dist/contracts/abuse.js +9 -24
  25. package/dist/contracts/access-profiles.d.ts +86 -0
  26. package/dist/contracts/access-profiles.js +89 -0
  27. package/dist/contracts/access.d.ts +24 -30
  28. package/dist/contracts/access.js +33 -64
  29. package/dist/contracts/activity.d.ts +18 -1
  30. package/dist/contracts/activity.js +72 -26
  31. package/dist/contracts/analytics.js +8 -10
  32. package/dist/contracts/api-keys.d.ts +77 -52
  33. package/dist/contracts/api-keys.js +44 -24
  34. package/dist/contracts/application-journal.d.ts +216 -0
  35. package/dist/contracts/application-journal.js +167 -0
  36. package/dist/contracts/auth.d.ts +90 -17
  37. package/dist/contracts/auth.js +86 -17
  38. package/dist/contracts/beta.d.ts +9 -4
  39. package/dist/contracts/beta.js +20 -16
  40. package/dist/contracts/billing.d.ts +2 -1
  41. package/dist/contracts/billing.js +37 -11
  42. package/dist/contracts/bootstrap.d.ts +791 -0
  43. package/dist/contracts/bootstrap.js +51 -0
  44. package/dist/contracts/builds.d.ts +209 -18
  45. package/dist/contracts/builds.js +93 -27
  46. package/dist/contracts/channels.d.ts +43 -0
  47. package/dist/contracts/channels.js +25 -9
  48. package/dist/contracts/cli.d.ts +7 -0
  49. package/dist/contracts/cli.js +6 -0
  50. package/dist/contracts/collab-public.d.ts +1 -1
  51. package/dist/contracts/collab-public.js +5 -8
  52. package/dist/contracts/comments.d.ts +44 -34
  53. package/dist/contracts/comments.js +107 -77
  54. package/dist/contracts/commerce.d.ts +165 -0
  55. package/dist/contracts/commerce.js +146 -0
  56. package/dist/contracts/common.d.ts +3 -3
  57. package/dist/contracts/common.js +20 -31
  58. package/dist/contracts/content-contract-verification.d.ts +521 -0
  59. package/dist/contracts/content-contract-verification.js +320 -0
  60. package/dist/contracts/content-platform-fixture.d.ts +1278 -0
  61. package/dist/contracts/content-platform-fixture.js +44 -0
  62. package/dist/contracts/content-program.d.ts +994 -0
  63. package/dist/contracts/content-program.js +658 -0
  64. package/dist/contracts/content-sync.d.ts +290 -0
  65. package/dist/contracts/content-sync.js +167 -0
  66. package/dist/contracts/content.d.ts +432 -0
  67. package/dist/contracts/content.js +303 -0
  68. package/dist/contracts/continuation.d.ts +17 -1
  69. package/dist/contracts/continuation.js +23 -23
  70. package/dist/contracts/countries.js +3 -4
  71. package/dist/contracts/crons.d.ts +52 -0
  72. package/dist/contracts/crons.js +60 -0
  73. package/dist/contracts/dashboard-prefs.d.ts +56 -0
  74. package/dist/contracts/dashboard-prefs.js +51 -0
  75. package/dist/contracts/device-auth.d.ts +234 -37
  76. package/dist/contracts/device-auth.js +267 -53
  77. package/dist/contracts/docs.d.ts +1 -5
  78. package/dist/contracts/docs.js +7 -15
  79. package/dist/contracts/domains.d.ts +501 -93
  80. package/dist/contracts/domains.js +193 -55
  81. package/dist/contracts/email-preferences.d.ts +3 -3
  82. package/dist/contracts/email-preferences.js +6 -7
  83. package/dist/contracts/enums.d.ts +27 -26
  84. package/dist/contracts/enums.js +68 -61
  85. package/dist/contracts/error-code-meta.d.ts +283 -7
  86. package/dist/contracts/error-code-meta.js +97 -5
  87. package/dist/contracts/error-codes.d.ts +5 -5
  88. package/dist/contracts/error-codes.js +82 -17
  89. package/dist/contracts/events.d.ts +100 -20
  90. package/dist/contracts/events.js +107 -20
  91. package/dist/contracts/execution.d.ts +48 -64
  92. package/dist/contracts/execution.js +52 -62
  93. package/dist/contracts/feature-lifecycle.d.ts +73 -27
  94. package/dist/contracts/feature-lifecycle.js +86 -26
  95. package/dist/contracts/features.d.ts +68 -19
  96. package/dist/contracts/features.js +42 -41
  97. package/dist/contracts/fixtures/content-platform-v1.json +1108 -0
  98. package/dist/contracts/frame-session.d.ts +192 -0
  99. package/dist/contracts/frame-session.js +164 -0
  100. package/dist/contracts/functions.d.ts +338 -164
  101. package/dist/contracts/functions.js +367 -198
  102. package/dist/contracts/git.d.ts +27 -33
  103. package/dist/contracts/git.js +10 -11
  104. package/dist/contracts/grant-copy.d.ts +43 -0
  105. package/dist/contracts/grant-copy.js +44 -0
  106. package/dist/contracts/grants.d.ts +62 -54
  107. package/dist/contracts/grants.js +124 -23
  108. package/dist/contracts/ids.d.ts +4 -1
  109. package/dist/contracts/ids.js +6 -3
  110. package/dist/contracts/internal.d.ts +8 -18
  111. package/dist/contracts/internal.js +13 -14
  112. package/dist/contracts/mcp.d.ts +28 -0
  113. package/dist/contracts/mcp.js +28 -0
  114. package/dist/contracts/me.d.ts +6 -1
  115. package/dist/contracts/me.js +12 -6
  116. package/dist/contracts/notifications.d.ts +27 -29
  117. package/dist/contracts/notifications.js +9 -4
  118. package/dist/contracts/oauth-resources.d.ts +112 -10
  119. package/dist/contracts/oauth-resources.js +116 -11
  120. package/dist/contracts/oauth-scope-actions.d.ts +90 -0
  121. package/dist/contracts/oauth-scope-actions.js +126 -0
  122. package/dist/contracts/operations.d.ts +27 -4
  123. package/dist/contracts/operations.js +12 -6
  124. package/dist/contracts/pages.d.ts +31 -7
  125. package/dist/contracts/pages.js +22 -5
  126. package/dist/contracts/partner-notifications.d.ts +3 -0
  127. package/dist/contracts/partner-notifications.js +65 -0
  128. package/dist/contracts/{platform.d.ts → partner.d.ts} +29 -42
  129. package/dist/contracts/{platform.js → partner.js} +27 -40
  130. package/dist/contracts/plan-policy.js +1 -1
  131. package/dist/contracts/principal-assertion.d.ts +43 -0
  132. package/dist/contracts/principal-assertion.js +67 -0
  133. package/dist/contracts/principals.d.ts +73 -0
  134. package/dist/contracts/principals.js +59 -0
  135. package/dist/contracts/privacy.d.ts +11 -0
  136. package/dist/contracts/privacy.js +17 -0
  137. package/dist/contracts/problem-document.js +3 -4
  138. package/dist/contracts/publish-archive.d.ts +269 -161
  139. package/dist/contracts/publish-archive.js +11 -1
  140. package/dist/contracts/push-new.d.ts +8 -8
  141. package/dist/contracts/quotas.js +5 -5
  142. package/dist/contracts/realtime.d.ts +52 -0
  143. package/dist/contracts/realtime.js +54 -0
  144. package/dist/contracts/repository-connections.d.ts +44 -31
  145. package/dist/contracts/repository-connections.js +17 -5
  146. package/dist/contracts/resources.d.ts +105 -14
  147. package/dist/contracts/resources.js +150 -26
  148. package/dist/contracts/route-inventory.d.ts +358 -0
  149. package/dist/contracts/route-inventory.js +141 -0
  150. package/dist/contracts/runtime-api.d.ts +206 -82
  151. package/dist/contracts/runtime-api.js +131 -70
  152. package/dist/contracts/runtime-app.d.ts +13 -23
  153. package/dist/contracts/runtime-app.js +39 -24
  154. package/dist/contracts/runtime-components.d.ts +143 -0
  155. package/dist/contracts/runtime-components.js +199 -0
  156. package/dist/contracts/runtime-db.d.ts +49 -23
  157. package/dist/contracts/runtime-db.js +87 -22
  158. package/dist/contracts/runtime-purge.d.ts +8 -0
  159. package/dist/contracts/runtime-purge.js +5 -0
  160. package/dist/contracts/runtime-services.d.ts +43 -75
  161. package/dist/contracts/runtime-services.js +29 -49
  162. package/dist/contracts/runtime-storage.d.ts +15 -14
  163. package/dist/contracts/runtime-storage.js +30 -14
  164. package/dist/contracts/sf-config-v1.d.ts +48 -14
  165. package/dist/contracts/slugs.js +13 -4
  166. package/dist/contracts/space-config.d.ts +283 -19
  167. package/dist/contracts/space-config.js +430 -80
  168. package/dist/contracts/spaces.d.ts +376 -290
  169. package/dist/contracts/spaces.js +200 -135
  170. package/dist/contracts/superadmin-activity.d.ts +3 -43
  171. package/dist/contracts/superadmin-activity.js +6 -30
  172. package/dist/contracts/superadmin-emails.d.ts +1 -0
  173. package/dist/contracts/superadmin-emails.js +17 -1
  174. package/dist/contracts/superadmin-runtime.d.ts +199 -0
  175. package/dist/contracts/superadmin-runtime.js +141 -0
  176. package/dist/contracts/superadmin-search.d.ts +22 -2
  177. package/dist/contracts/superadmin-search.js +14 -6
  178. package/dist/contracts/superadmin-spaces.d.ts +438 -189
  179. package/dist/contracts/superadmin-spaces.js +131 -25
  180. package/dist/contracts/superadmin-teams.d.ts +5 -2
  181. package/dist/contracts/superadmin-teams.js +1 -2
  182. package/dist/contracts/superadmin-tenants.d.ts +627 -12
  183. package/dist/contracts/superadmin-tenants.js +32 -13
  184. package/dist/contracts/superadmin.d.ts +232 -37
  185. package/dist/contracts/superadmin.js +106 -22
  186. package/dist/contracts/tags.d.ts +85 -58
  187. package/dist/contracts/tags.js +47 -37
  188. package/dist/contracts/teams.d.ts +86 -26
  189. package/dist/contracts/teams.js +90 -31
  190. package/dist/contracts/tenants.d.ts +135 -0
  191. package/dist/contracts/tenants.js +120 -0
  192. package/dist/contracts/test-triggers.d.ts +70 -0
  193. package/dist/contracts/test-triggers.js +116 -0
  194. package/dist/contracts/theme-json.js +3 -8
  195. package/dist/contracts/transfers.d.ts +1 -0
  196. package/dist/contracts/transfers.js +3 -2
  197. package/dist/contracts/usage.d.ts +209 -0
  198. package/dist/contracts/usage.js +124 -12
  199. package/dist/contracts/variables.d.ts +2 -2
  200. package/dist/contracts/variables.js +9 -13
  201. package/dist/contracts/webhooks.d.ts +13 -5
  202. package/dist/contracts/webhooks.js +3 -1
  203. package/dist/contracts/zero.d.ts +72 -81
  204. package/dist/contracts/zero.js +80 -78
  205. package/dist/dashboard-paths/index.d.ts +24 -21
  206. package/dist/dashboard-paths/index.js +35 -47
  207. package/dist/dashboard-paths/route-reservations.generated.d.ts +2 -0
  208. package/dist/dashboard-paths/route-reservations.generated.js +36 -0
  209. package/dist/docs/agent-arrival.d.ts +92 -0
  210. package/dist/docs/agent-arrival.js +227 -0
  211. package/dist/docs/agent-output-policy.d.ts +6 -0
  212. package/dist/docs/agent-output-policy.js +22 -0
  213. package/dist/docs/agent-prose.d.ts +12 -18
  214. package/dist/docs/agent-prose.js +73 -51
  215. package/dist/docs/agent-setup.d.ts +72 -41
  216. package/dist/docs/agent-setup.js +339 -436
  217. package/dist/docs/catalog.d.ts +153 -95
  218. package/dist/docs/catalog.js +163 -48
  219. package/dist/docs/error-docs.d.ts +2098 -1
  220. package/dist/docs/error-docs.js +421 -144
  221. package/dist/docs/index-build.d.ts +0 -1
  222. package/dist/docs/index-build.js +2 -3
  223. package/dist/docs/page-context-prompt.d.ts +77 -0
  224. package/dist/docs/page-context-prompt.js +131 -0
  225. package/dist/docs/reference-urls.d.ts +46 -0
  226. package/dist/docs/reference-urls.js +79 -0
  227. package/dist/docs/search.d.ts +6 -8
  228. package/dist/docs/search.js +10 -13
  229. package/dist/docs/skill-distribution.d.ts +4 -1
  230. package/dist/docs/skill-distribution.js +10 -5
  231. package/dist/docs/skills.d.ts +120 -120
  232. package/dist/docs/skills.js +121 -73
  233. package/dist/docs/start-prompts.d.ts +45 -0
  234. package/dist/docs/start-prompts.js +62 -0
  235. package/dist/domain-exploration.js +9 -13
  236. package/dist/og-template.d.ts +56 -0
  237. package/dist/og-template.js +56 -0
  238. package/dist/slug-policy/index.js +5 -11
  239. package/dist/test-helpers/fetch-stub.js +1 -0
  240. package/dist/utils/browser-credential.d.ts +13 -6
  241. package/dist/utils/browser-credential.js +14 -7
  242. package/dist/utils/build-settings.d.ts +21 -1
  243. package/dist/utils/build-settings.js +133 -15
  244. package/dist/utils/canonical-json.d.ts +3 -5
  245. package/dist/utils/canonical-json.js +4 -5
  246. package/dist/utils/cast-transport.d.ts +5 -17
  247. package/dist/utils/cast-transport.js +6 -19
  248. package/dist/utils/claim-token.js +1 -2
  249. package/dist/utils/comment-avatars.js +4 -6
  250. package/dist/utils/concurrency.js +3 -3
  251. package/dist/utils/content-type.d.ts +7 -6
  252. package/dist/utils/content-type.js +73 -51
  253. package/dist/utils/credential-policy.d.ts +50 -6
  254. package/dist/utils/credential-policy.js +126 -59
  255. package/dist/utils/dns-instructions.js +9 -9
  256. package/dist/utils/egress-policy.fixtures.json +1 -1
  257. package/dist/utils/error-code.js +1 -0
  258. package/dist/utils/generate-space-name.d.ts +3 -8
  259. package/dist/utils/generate-space-name.js +3 -8
  260. package/dist/utils/grant-decision.fixtures.json +2 -2
  261. package/dist/utils/grants.d.ts +0 -1
  262. package/dist/utils/grants.js +7 -8
  263. package/dist/utils/gravatar.d.ts +2 -4
  264. package/dist/utils/gravatar.js +6 -12
  265. package/dist/utils/id-hints.js +14 -23
  266. package/dist/utils/idempotency.d.ts +3 -3
  267. package/dist/utils/idempotency.js +6 -7
  268. package/dist/utils/local-space-state.d.ts +23 -26
  269. package/dist/utils/local-space-state.js +46 -46
  270. package/dist/utils/oauth-signed-query.d.ts +3 -5
  271. package/dist/utils/oauth-signed-query.js +6 -9
  272. package/dist/utils/one-shot-replay.d.ts +7 -6
  273. package/dist/utils/one-shot-replay.js +3 -5
  274. package/dist/utils/page-colors.d.ts +15 -19
  275. package/dist/utils/page-colors.js +23 -45
  276. package/dist/utils/page-fonts.d.ts +1 -1
  277. package/dist/utils/page-fonts.js +8 -20
  278. package/dist/utils/page-preview.d.ts +0 -1
  279. package/dist/utils/page-preview.js +0 -1
  280. package/dist/utils/pages.d.ts +33 -3
  281. package/dist/utils/pages.js +83 -30
  282. package/dist/utils/privacy-regions.d.ts +19 -0
  283. package/dist/utils/privacy-regions.js +91 -0
  284. package/dist/utils/publish-form-data.d.ts +4 -5
  285. package/dist/utils/publish-form-data.js +2 -3
  286. package/dist/utils/publish-policy.d.ts +11 -17
  287. package/dist/utils/publish-policy.fixtures.json +11 -5
  288. package/dist/utils/publish-policy.js +65 -110
  289. package/dist/utils/query-client.d.ts +2 -0
  290. package/dist/utils/query-client.js +10 -1
  291. package/dist/utils/runtime-paths.d.ts +4 -4
  292. package/dist/utils/runtime-paths.js +6 -8
  293. package/dist/utils/runtime-upload.d.ts +9 -0
  294. package/dist/utils/runtime-upload.js +12 -0
  295. package/dist/utils/secure-local-file.d.ts +3 -3
  296. package/dist/utils/secure-local-file.js +23 -40
  297. package/dist/utils/space-config.d.ts +12 -15
  298. package/dist/utils/space-config.js +13 -16
  299. package/dist/utils/static-runtime-policy.d.ts +10 -7
  300. package/dist/utils/static-runtime-policy.fixtures.json +38 -41
  301. package/dist/utils/static-runtime-policy.generated.d.ts +16 -0
  302. package/dist/utils/static-runtime-policy.generated.js +70 -0
  303. package/dist/utils/static-runtime-policy.js +31 -132
  304. package/dist/utils/storage-policy.js +1 -2
  305. package/dist/utils/upload-session.d.ts +4 -1
  306. package/dist/utils/upload-session.js +41 -19
  307. package/dist/utils/version-path.js +11 -19
  308. package/dist/utils/wpcom-auth-redirects.d.ts +5 -14
  309. package/dist/utils/wpcom-auth-redirects.js +1 -4
  310. package/dist/vocabulary.d.ts +13 -13
  311. package/dist/vocabulary.js +52 -27
  312. package/package.json +15 -18
  313. package/dist/agents/client-registry.d.ts +0 -22
  314. package/dist/agents/client-registry.js +0 -41
  315. package/dist/docs/agent-handoff-document.d.ts +0 -15
  316. package/dist/docs/agent-handoff-document.js +0 -180
  317. package/dist/docs/agent-solutions.d.ts +0 -110
  318. package/dist/docs/agent-solutions.js +0 -183
  319. package/dist/utils/query-keys.d.ts +0 -84
  320. package/dist/utils/query-keys.js +0 -108
@@ -5,27 +5,31 @@
5
5
  // dashboard label, or "E2B" in marketing copy).
6
6
  //
7
7
  // This module is intentionally pure data + types: no side effects, no imports.
8
- // It is additive wiring consumers (CLI, MCP, dashboard, docs generators) onto
8
+ // It is additive. Wiring consumers (CLI, MCP, dashboard, docs generators) onto
9
9
  // it happens in later chunks. The decisions encoded here are LOCKED:
10
10
  //
11
- // - `space` is the primitive noun everywhere, user surfaces and platform API
11
+ // - `space` is the primitive noun everywhere, user surfaces and the Spacefast API
12
12
  // alike. A space IS a site: there is no second host entity to name. `site`
13
- // survives only as WP.Cloud's own word for the box, in operator surfaces
13
+ // survives only as WP Cloud's own word for the box, in operator surfaces
14
14
  // and the warm-pool inventory.
15
15
  // - `publish` is the verb. AMENDED 2026-07-02: `deploy` / `deployments` are
16
- // first-class ALIASES of `publish` / `versions` (see DEPLOY_ALIASES) — they
16
+ // first-class ALIASES of `publish` / `versions` (see DEPLOY_ALIASES). They
17
17
  // stay listed and documented, always with the sanctioned disambiguation
18
18
  // line (DEPLOY_ALIAS_DISAMBIGUATION) and with the canonical command named
19
19
  // first. A bare "deployment" noun in fresh prose is still discouraged (say
20
20
  // "version"), and the `dep_*` id framing stays retired.
21
21
  // - `version` / `channel` / `build` are the lifecycle nouns.
22
- // - `API key` never "access token".
22
+ // - `API key`, never "access token".
23
23
  // - `Collab` is the feature; `comment` is the unit.
24
24
  // - `Superpowers` is the page-enhancement feature.
25
- // - Provider names never leak externally: never "E2B" (say "Spacefast
26
- // Builds" / "Spacefast CI"), never "WP.Cloud" (say "infra", except the
27
- // platform API or the fixed phrase "built on WP.Cloud"), never
28
- // "code.storage" / "Pierre" (see PROVIDER_HYGIENE).
25
+ // - Provider names stay off public surfaces by default: never "E2B" (say
26
+ // "Spacefast Builds" / "Spacefast CI"), never "code.storage" / "Pierre".
27
+ // The infra brand is "WP Cloud", never "WP.Cloud"/"wp-cloud" (AMENDED
28
+ // 2026-08-13). Prefer "infra"; when an external reference is genuinely
29
+ // necessary (provider identity fields, domain conflicts), name WP Cloud
30
+ // outright, NEVER the euphemism "the hosting provider". Marketing may use
31
+ // the family line "the same infra as Automattic, WP Cloud, Pressable, and
32
+ // WordPress.com" (see PROVIDER_HYGIENE).
29
33
  export const CONCEPTS = {
30
34
  space: {
31
35
  id: "space",
@@ -33,7 +37,7 @@ export const CONCEPTS = {
33
37
  aliases: [],
34
38
  externalTerms: [],
35
39
  deprecated: ["project", "site"],
36
- description: "The primitive noun everywhere, user surfaces and platform API alike. A " +
40
+ description: "The primitive noun everywhere, user surfaces and the Spacefast API alike. A " +
37
41
  "space IS a site, so 'site' names nothing of ours; 'project' is never " +
38
42
  "the primitive.",
39
43
  },
@@ -102,10 +106,11 @@ export const CONCEPTS = {
102
106
  id: "infra",
103
107
  canonicalNoun: "infra",
104
108
  aliases: ["infrastructure"],
105
- externalTerms: ["WP.Cloud"],
106
- deprecated: ["code.storage", "Pierre"],
107
- description: "The hosting substrate. Say 'infra' externally; 'WP.Cloud' only in the " +
108
- "platform API or the phrase 'built on WP.Cloud'. Never 'code.storage'/'Pierre'.",
109
+ externalTerms: ["WP Cloud"],
110
+ deprecated: ["code.storage", "Pierre", "the hosting provider"],
111
+ description: "The hosting substrate. Prefer 'infra'; when an external reference is " +
112
+ "necessary, name 'WP Cloud' (its real spelling), never the euphemism " +
113
+ "'the hosting provider'. Never 'code.storage'/'Pierre'.",
109
114
  },
110
115
  };
111
116
  export const EXTERNAL_TERM_ALLOWLIST = [
@@ -114,7 +119,7 @@ export const EXTERNAL_TERM_ALLOWLIST = [
114
119
  concept: "publish",
115
120
  allowedContexts: ["github-integration", "platform-api"],
116
121
  replacement: "version / publish",
117
- reason: "GitHub speaks 'deployment'; the platform API keeps it for contract " +
122
+ reason: "GitHub speaks 'deployment'; the Spacefast API keeps it for contract " +
118
123
  "stability. Elsewhere it is a sanctioned alias of 'version' when paired " +
119
124
  "with DEPLOY_ALIAS_DISAMBIGUATION (see DEPLOY_ALIASES); bare fresh prose " +
120
125
  "still says 'publish a version'.",
@@ -133,18 +138,29 @@ export const EXTERNAL_TERM_ALLOWLIST = [
133
138
  concept: "space",
134
139
  allowedContexts: ["operator"],
135
140
  replacement: "space",
136
- reason: "A space IS a site, so 'site' is no longer a Spacefast noun it is only " +
137
- "WP.Cloud's word for the box, which operator surfaces and warm-pool " +
141
+ reason: "A space IS a site, so 'site' is no longer a Spacefast noun. It is only " +
142
+ "WP Cloud's word for the box, which operator surfaces and warm-pool " +
138
143
  "inventory may use. Every customer-facing surface says 'space'.",
139
144
  },
140
145
  {
141
- term: "WP.Cloud",
146
+ term: "WP Cloud",
142
147
  concept: "infra",
143
- allowedContexts: ["platform-api", "fixed-phrase"],
144
- allowedPhrases: ["built on WP.Cloud"],
148
+ allowedContexts: ["fixed-phrase"],
149
+ allowedPhrases: [
150
+ "the same infra as Automattic, WP Cloud, Pressable, and WordPress.com",
151
+ // The product-positioning line every agent-facing surface leads with
152
+ // (`SPACEFAST_POSITIONING` in brand.ts). Same licence as the family
153
+ // line above: WP Cloud is named as one of several sibling platforms,
154
+ // never as "the hosting provider" and never on its own.
155
+ "the same infrastructure as WordPress.com, Tumblr, WordPress VIP and WP Cloud",
156
+ ],
145
157
  replacement: "infra",
146
- reason: "Only the platform API or the exact phrase 'built on WP.Cloud' may name " +
147
- "the provider; general copy says 'infra'.",
158
+ reason: "AMENDED 2026-08-13: prefer 'infra'. Same day: the platform-api " +
159
+ "carve-out is revoked. API values say mysql/phpmyadmin/infra, never " +
160
+ "wpcloud. Name WP Cloud (its real spelling, never 'WP.Cloud') only " +
161
+ "where the external reference is necessary: domain-conflict copy and " +
162
+ "the marketing family line in allowedPhrases. Never the euphemism " +
163
+ "'the hosting provider'.",
148
164
  },
149
165
  ];
150
166
  export const DEPLOY_ALIASES = [
@@ -167,12 +183,21 @@ export const PROVIDER_HYGIENE = {
167
183
  reason: "The build sandbox vendor is never named; it is 'Spacefast Builds'.",
168
184
  },
169
185
  wpcloud: {
170
- internalName: "WP.Cloud",
186
+ internalName: "WP Cloud",
171
187
  replacement: "infra",
172
- allowedContexts: ["platform-api", "fixed-phrase"],
173
- allowedPhrases: ["built on WP.Cloud"],
174
- reason: "Hosting substrate; externally 'infra' except the platform API or the " +
175
- "phrase 'built on WP.Cloud'.",
188
+ allowedContexts: ["fixed-phrase"],
189
+ allowedPhrases: [
190
+ "the same infra as Automattic, WP Cloud, Pressable, and WordPress.com",
191
+ // The product-positioning line every agent-facing surface leads with
192
+ // (`SPACEFAST_POSITIONING` in brand.ts). Same licence as the family
193
+ // line above: WP Cloud is named as one of several sibling platforms,
194
+ // never as "the hosting provider" and never on its own.
195
+ "the same infrastructure as WordPress.com, Tumblr, WordPress VIP and WP Cloud",
196
+ ],
197
+ reason: "Hosting substrate; prefer 'infra' (AMENDED 2026-08-13, same day: the " +
198
+ "platform-api carve-out is revoked. API values say mysql/phpmyadmin/" +
199
+ "infra, never wpcloud). Necessary external references name WP Cloud " +
200
+ "outright, never 'the hosting provider'.",
176
201
  },
177
202
  codeStorage: {
178
203
  internalName: "code.storage",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@spacefast/common",
3
- "version": "0.0.24",
3
+ "version": "0.2.1",
4
4
  "license": "MIT",
5
5
  "description": "Shared TypeScript contracts and utilities for Spacefast packages.",
6
6
  "repository": {
@@ -20,22 +20,6 @@
20
20
  "brand-assets",
21
21
  "dist"
22
22
  ],
23
- "spacefastTestCache": {
24
- "mode": "hermetic",
25
- "inputs": [
26
- "../../apps/www/dist/.well-known/agent-card.json",
27
- "../../apps/www/dist/ai.txt",
28
- "../../apps/www/dist/llms-full.txt",
29
- "../../apps/www/dist/llms.txt",
30
- "../cli/skill.template.md",
31
- "../cli/skill.references.template.md",
32
- "../cli/scripts/generate-skill.mjs",
33
- "../../e2e-tests/fixtures/zero-all-features/api-finalize-request.json",
34
- "../../e2e-tests/fixtures/zero-all-features/runtime-compiler-finalize-input.json",
35
- "../../runtime/engine/shared/fonts",
36
- "src/docs/agent-prose.ts"
37
- ]
38
- },
39
23
  "exports": {
40
24
  "./brand": {
41
25
  "types": "./dist/brand.d.ts",
@@ -52,6 +36,11 @@
52
36
  "import": "./dist/brand-assets-build.js",
53
37
  "default": "./dist/brand-assets-build.js"
54
38
  },
39
+ "./og-template": {
40
+ "types": "./dist/og-template.d.ts",
41
+ "import": "./dist/og-template.js",
42
+ "default": "./dist/og-template.js"
43
+ },
55
44
  "./brand-assets/spacefast-wordmark.svg": "./brand-assets/spacefast-wordmark.svg",
56
45
  "./brand-assets/spacefast-sf-full-bleed.svg": "./brand-assets/spacefast-sf-full-bleed.svg",
57
46
  "./brand-assets/spacefast-favicon.svg": "./brand-assets/spacefast-favicon.svg",
@@ -112,12 +101,20 @@
112
101
  }
113
102
  },
114
103
  "dependencies": {
115
- "@tanstack/react-query": "^5.101.4",
116
104
  "culori": "^4.0.2",
117
105
  "js-yaml": "^4.1.1",
118
106
  "mime": "^4.1.0",
107
+ "oauth4webapi": "3.8.7",
119
108
  "parse5": "^7.3.0",
120
109
  "smol-toml": "^1.7.0",
121
110
  "zod": "^4.4.3"
111
+ },
112
+ "peerDependencies": {
113
+ "@tanstack/react-query": "^5.101.4"
114
+ },
115
+ "peerDependenciesMeta": {
116
+ "@tanstack/react-query": {
117
+ "optional": true
118
+ }
122
119
  }
123
120
  }
@@ -1,22 +0,0 @@
1
- export declare const MACHINE_AGENT_CLIENT_IDS: readonly ["universal", "claude-code", "codex", "opencode", "github-copilot", "factory-droid", "cursor", "vscode", "gemini-cli", "windsurf", "cline", "continue"];
2
- export declare const CONNECT_TARGET_IDS: readonly ["claude-code", "cursor", "vscode", "codex", "claude", "chatgpt"];
3
- export type MachineAgentClientId = (typeof MACHINE_AGENT_CLIENT_IDS)[number];
4
- export type ConnectTargetId = (typeof CONNECT_TARGET_IDS)[number];
5
- export type AgentProductId = MachineAgentClientId | ConnectTargetId;
6
- export declare const AGENT_PRODUCT_NAMES: {
7
- readonly universal: "Universal (.agents)";
8
- readonly "claude-code": "Claude Code";
9
- readonly codex: "Codex";
10
- readonly cursor: "Cursor";
11
- readonly vscode: "VS Code";
12
- readonly "github-copilot": "GitHub Copilot";
13
- readonly "factory-droid": "Factory Droid";
14
- readonly opencode: "OpenCode";
15
- readonly "gemini-cli": "Gemini CLI";
16
- readonly windsurf: "Windsurf";
17
- readonly cline: "Cline";
18
- readonly continue: "Continue";
19
- readonly claude: "Claude";
20
- readonly chatgpt: "ChatGPT";
21
- };
22
- export declare function agentProductName(id: AgentProductId): string;
@@ -1,41 +0,0 @@
1
- export const MACHINE_AGENT_CLIENT_IDS = [
2
- "universal",
3
- "claude-code",
4
- "codex",
5
- "opencode",
6
- "github-copilot",
7
- "factory-droid",
8
- "cursor",
9
- "vscode",
10
- "gemini-cli",
11
- "windsurf",
12
- "cline",
13
- "continue",
14
- ];
15
- export const CONNECT_TARGET_IDS = [
16
- "claude-code",
17
- "cursor",
18
- "vscode",
19
- "codex",
20
- "claude",
21
- "chatgpt",
22
- ];
23
- export const AGENT_PRODUCT_NAMES = {
24
- universal: "Universal (.agents)",
25
- "claude-code": "Claude Code",
26
- codex: "Codex",
27
- cursor: "Cursor",
28
- vscode: "VS Code",
29
- "github-copilot": "GitHub Copilot",
30
- "factory-droid": "Factory Droid",
31
- opencode: "OpenCode",
32
- "gemini-cli": "Gemini CLI",
33
- windsurf: "Windsurf",
34
- cline: "Cline",
35
- continue: "Continue",
36
- claude: "Claude",
37
- chatgpt: "ChatGPT",
38
- };
39
- export function agentProductName(id) {
40
- return AGENT_PRODUCT_NAMES[id];
41
- }
@@ -1,15 +0,0 @@
1
- /**
2
- * The exact markdown body served to agents at `/agent/<documentId>`.
3
- * Deterministic and ID-free on purpose — see the module comment.
4
- */
5
- export declare function renderAgentHandoffDocumentMarkdown(input: {
6
- mcpEndpoint: string;
7
- }): string;
8
- /**
9
- * The browser variant served at `/agent/<documentId>`: the full instructions in
10
- * the initial response body, zero scripts (nothing may ever inspect or echo a
11
- * handoff credential), same bytes for every ID.
12
- */
13
- export declare function renderAgentHandoffDocumentHtml(input: {
14
- mcpEndpoint: string;
15
- }): string;
@@ -1,180 +0,0 @@
1
- /*
2
- * The public setup document behind agent handoff links.
3
- *
4
- * Private handoff links carry a one-use path token while the durable agent
5
- * credential stays encrypted at the broker. The minted prompt tells the agent
6
- * to fetch the reconstructed clean document URL instead. This
7
- * fetch is UNAUTHENTICATED BY DESIGN — which means the response
8
- * must never become an existence oracle. The contract here is
9
- * indistinguishability: every well-formed document ID serves the exact same
10
- * bytes, with the same status and the same timing, whether or not a handoff with
11
- * that ID exists. That is why these renderers take no document ID and hit no
12
- * store: the document is one static artifact, target-agnostic, published behind
13
- * a `/agent/*` rewrite on the dashboard space. Per-target polish deliberately
14
- * loses to indistinguishability — instead of looking up the handoff's client
15
- * target (which would need a public by-ID lookup, an oracle), the document
16
- * carries a named section for every connect target and the minted prompt's
17
- * "follow the <client> setup instructions" resolves to the right section.
18
- *
19
- * Lifecycle safety stays where the secret authenticates: an expired, used, or
20
- * revoked link fails at the app-private exchange, never at fetch time (see
21
- * ./agent-setup.ts, `AGENT_HANDOFF_DECLINE_REASONS`).
22
- */
23
- import { buildConnectTargets } from "../agents/connect-targets.js";
24
- import { BRAND } from "../brand.js";
25
- import { AGENT_HANDOFF_BROWSER_APPROVAL_GUIDANCE, AGENT_HANDOFF_CLI_APPROVAL_GUIDANCE, AGENT_HANDOFF_CLI_TARGET_IDS, AGENT_HANDOFF_CREDENTIAL_HYGIENE, AGENT_HANDOFF_FETCH_SAFETY, AGENT_HANDOFF_PREAMBLE, AGENT_HANDOFF_PUBLISH_PROSE, agentHandoffConnectSections, agentSetupTextUrl, } from "./agent-setup.js";
26
- const DOCUMENT_TITLE = `Set up ${BRAND.productName} from an agent handoff`;
27
- const DOCUMENT_SCOPE = `This is the public setup document for ${BRAND.productName} agent handoff links (\`/agent/<id>\` on the dashboard origin). Every link serves this same document — fetching it never uses a handoff and reveals nothing about one.`;
28
- const CONNECT_INTRO = "Set up the client you are running in. Each section stands on its own.";
29
- /**
30
- * The exact markdown body served to agents at `/agent/<documentId>`.
31
- * Deterministic and ID-free on purpose — see the module comment.
32
- */
33
- export function renderAgentHandoffDocumentMarkdown(input) {
34
- const targets = buildConnectTargets({ mcpEndpoint: input.mcpEndpoint });
35
- const cliTargetNames = targets
36
- .filter((target) => AGENT_HANDOFF_CLI_TARGET_IDS.includes(target.id))
37
- .map((target) => target.name);
38
- const connectSections = targets.flatMap((target) => {
39
- const sections = agentHandoffConnectSections(target);
40
- sections.unshift(`### ${target.name}`);
41
- return sections;
42
- });
43
- const sections = [
44
- `# ${DOCUMENT_TITLE}`,
45
- DOCUMENT_SCOPE,
46
- AGENT_HANDOFF_PREAMBLE,
47
- ["## Connect", CONNECT_INTRO, ...connectSections].join("\n\n"),
48
- [
49
- "## Continue the approved handoff",
50
- AGENT_HANDOFF_FETCH_SAFETY,
51
- `From ${cliTargetNames.join(" or ")} (or any client with a shell): ${AGENT_HANDOFF_CLI_APPROVAL_GUIDANCE}`,
52
- `From every other client: ${AGENT_HANDOFF_BROWSER_APPROVAL_GUIDANCE}`,
53
- AGENT_HANDOFF_CREDENTIAL_HYGIENE,
54
- ].join("\n\n"),
55
- ["## Publish", AGENT_HANDOFF_PUBLISH_PROSE].join("\n\n"),
56
- `General agent instructions: ${agentSetupTextUrl}`,
57
- ];
58
- return `${sections.join("\n\n")}\n`;
59
- }
60
- function escapeHtml(value) {
61
- return value
62
- .replaceAll("&", "&amp;")
63
- .replaceAll("<", "&lt;")
64
- .replaceAll(">", "&gt;")
65
- .replaceAll('"', "&quot;");
66
- }
67
- function linkify(escaped) {
68
- return escaped.replace(/https?:\/\/[^\s<)]+/g, (url) => `<a href="${url}" rel="noopener">${url}</a>`);
69
- }
70
- /** Inline markdown: backtick code spans stay literal; bare URLs become links. */
71
- function renderInline(text) {
72
- return text
73
- .split("`")
74
- .map((part, index) => index % 2 === 1 ? `<code>${escapeHtml(part)}</code>` : linkify(escapeHtml(part)))
75
- .join("");
76
- }
77
- /**
78
- * Renders the document's own markdown grammar (headings, paragraphs, fenced
79
- * code, inline code, bare URLs) to HTML. Not a general markdown engine: the
80
- * input is our generated document above, so anything else stays literal text.
81
- */
82
- function markdownToHtmlBody(markdown) {
83
- const html = [];
84
- let paragraph = [];
85
- let codeBlock = null;
86
- const flushParagraph = () => {
87
- if (paragraph.length > 0) {
88
- html.push(`<p>${paragraph.map(renderInline).join("\n")}</p>`);
89
- paragraph = [];
90
- }
91
- };
92
- for (const line of markdown.split("\n")) {
93
- if (codeBlock !== null) {
94
- if (line.startsWith("```")) {
95
- html.push(`<pre><code>${escapeHtml(codeBlock.join("\n"))}</code></pre>`);
96
- codeBlock = null;
97
- }
98
- else {
99
- codeBlock.push(line);
100
- }
101
- continue;
102
- }
103
- if (line.startsWith("```")) {
104
- flushParagraph();
105
- codeBlock = [];
106
- continue;
107
- }
108
- const heading = /^(#{1,3}) (.*)$/.exec(line);
109
- if (heading?.[1] && heading[2] !== undefined) {
110
- flushParagraph();
111
- const level = heading[1].length;
112
- html.push(`<h${level}>${renderInline(heading[2])}</h${level}>`);
113
- continue;
114
- }
115
- if (line.trim() === "") {
116
- flushParagraph();
117
- continue;
118
- }
119
- paragraph.push(line);
120
- }
121
- flushParagraph();
122
- return html.join("\n");
123
- }
124
- const DOCUMENT_STYLES = `
125
- :root { color-scheme: light dark; }
126
- body {
127
- margin: 0 auto;
128
- padding: 3rem 1.25rem 5rem;
129
- max-width: 42rem;
130
- font: 16px/1.6 ui-sans-serif, system-ui, sans-serif;
131
- background: #ffffff;
132
- color: #1a1a1e;
133
- }
134
- h1 { font-size: 1.6rem; line-height: 1.25; margin: 0 0 1rem; }
135
- h2 { font-size: 1.2rem; margin: 2.5rem 0 0.75rem; }
136
- h3 { font-size: 1rem; margin: 2rem 0 0.5rem; }
137
- p { margin: 0.75rem 0; }
138
- a { color: inherit; text-underline-offset: 3px; word-break: break-word; }
139
- code {
140
- font: 0.875em ui-monospace, monospace;
141
- background: rgba(125, 125, 135, 0.14);
142
- border-radius: 4px;
143
- padding: 0.1em 0.35em;
144
- }
145
- pre {
146
- background: rgba(125, 125, 135, 0.1);
147
- border: 1px solid rgba(125, 125, 135, 0.25);
148
- border-radius: 8px;
149
- padding: 0.875rem 1rem;
150
- overflow-x: auto;
151
- }
152
- pre code { background: none; padding: 0; font-size: 0.8125rem; }
153
- @media (prefers-color-scheme: dark) {
154
- body { background: #0e0e10; color: #ececf1; }
155
- }
156
- `.trim();
157
- /**
158
- * The browser variant served at `/agent/<documentId>`: the full instructions in
159
- * the initial response body, zero scripts (nothing may ever inspect or echo a
160
- * handoff credential), same bytes for every ID.
161
- */
162
- export function renderAgentHandoffDocumentHtml(input) {
163
- const markdown = renderAgentHandoffDocumentMarkdown(input);
164
- return [
165
- "<!doctype html>",
166
- '<html lang="en">',
167
- "<head>",
168
- '<meta charset="utf-8">',
169
- '<meta name="viewport" content="width=device-width, initial-scale=1">',
170
- '<meta name="robots" content="noindex">',
171
- `<title>${escapeHtml(DOCUMENT_TITLE)}</title>`,
172
- `<style>${DOCUMENT_STYLES}</style>`,
173
- "</head>",
174
- "<body>",
175
- markdownToHtmlBody(markdown),
176
- "</body>",
177
- "</html>",
178
- "",
179
- ].join("\n");
180
- }
@@ -1,110 +0,0 @@
1
- export declare const hostedMcpEndpointUrl = "https://mcp.spacefast.com";
2
- export type AgentSolutionLane = "plugin" | "hosted-mcp" | "local-mcp" | "cli" | "prompt";
3
- export type AgentSolutionId = "codex" | "claude-code" | "claude-cowork" | "chatgpt" | "claude-ai" | "raycast" | "cursor" | "terminal" | "generic";
4
- export type AgentSolution = {
5
- aliases: readonly string[];
6
- commands?: readonly string[];
7
- description: string;
8
- detailGuideUrl?: string;
9
- guideUrl: string;
10
- id: AgentSolutionId;
11
- label: string;
12
- lane: AgentSolutionLane;
13
- setupText: string;
14
- summary: string;
15
- };
16
- export declare const agentSolutions: readonly [{
17
- readonly id: "codex";
18
- readonly label: "Codex";
19
- readonly aliases: readonly ["codex cli", "codex plugin", "openai codex"];
20
- readonly lane: "plugin";
21
- readonly summary: "Recommended: Codex plugin.";
22
- readonly description: "Install the Spacefast skill/plugin so Codex can publish, update, and inspect spaces from the same setup path.";
23
- readonly commands: readonly ["npx -y skills add spacefast/plugins --skill spacefast -g -a codex -y"];
24
- readonly guideUrl: `${string}/for-codex`;
25
- readonly detailGuideUrl: `${string}/guides/how-to-use-with-codex`;
26
- readonly setupText: string;
27
- }, {
28
- readonly id: "claude-code";
29
- readonly label: "Claude Code";
30
- readonly aliases: readonly ["claude code", "claude cli"];
31
- readonly lane: "plugin";
32
- readonly summary: "Recommended: Claude plugin.";
33
- readonly description: "Install the Spacefast Claude plugin once, then Claude Code can publish and operate spaces from the terminal.";
34
- readonly commands: readonly ["claude plugin marketplace add spacefast/plugins", "claude plugin install spacefast@spacefast"];
35
- readonly guideUrl: `${string}/for-claude`;
36
- readonly detailGuideUrl: `${string}/guides/how-to-use-with-claude-code`;
37
- readonly setupText: string;
38
- }, {
39
- readonly id: "claude-cowork";
40
- readonly label: "Claude Cowork";
41
- readonly aliases: readonly ["cowork", "claude cowork"];
42
- readonly lane: "plugin";
43
- readonly summary: "Recommended: Claude plugin.";
44
- readonly description: "Use the Spacefast Claude plugin path so Cowork gets the same publish instructions and MCP-aware setup as Claude Code.";
45
- readonly commands: readonly ["claude plugin marketplace add spacefast/plugins", "claude plugin install spacefast@spacefast"];
46
- readonly guideUrl: `${string}/for-claude`;
47
- readonly detailGuideUrl: `${string}/guides/how-to-use-with-claude-cowork`;
48
- readonly setupText: string;
49
- }, {
50
- readonly id: "chatgpt";
51
- readonly label: "ChatGPT";
52
- readonly aliases: readonly ["chatgpt", "custom gpt", "openai apps"];
53
- readonly lane: "hosted-mcp";
54
- readonly summary: "Recommended: direct hosted MCP.";
55
- readonly description: "Connect ChatGPT-style cloud agents to Spacefast through hosted MCP; use inline files or signed uploads instead of local paths.";
56
- readonly commands: readonly ["https://mcp.spacefast.com"];
57
- readonly guideUrl: `${string}/agents`;
58
- readonly setupText: string;
59
- }, {
60
- readonly id: "claude-ai";
61
- readonly label: "Claude.ai";
62
- readonly aliases: readonly ["claude.ai", "claude app", "claude web"];
63
- readonly lane: "hosted-mcp";
64
- readonly summary: "Recommended: direct hosted MCP.";
65
- readonly description: "Connect the web Claude app to Spacefast through hosted MCP when it cannot read your local checkout.";
66
- readonly commands: readonly ["https://mcp.spacefast.com"];
67
- readonly guideUrl: `${string}/agents`;
68
- readonly setupText: string;
69
- }, {
70
- readonly id: "raycast";
71
- readonly label: "Raycast";
72
- readonly aliases: readonly ["raycast", "raycast ai"];
73
- readonly lane: "hosted-mcp";
74
- readonly summary: "Recommended: direct hosted MCP.";
75
- readonly description: "Use hosted MCP for Raycast and similar clients that can connect to a remote MCP server but should not need a local Spacefast install.";
76
- readonly commands: readonly ["https://mcp.spacefast.com"];
77
- readonly guideUrl: `${string}/agents`;
78
- readonly setupText: string;
79
- }, {
80
- readonly id: "cursor";
81
- readonly label: "Cursor or MCP client";
82
- readonly aliases: readonly ["cursor", "mcp client", "windsurf", "opencode"];
83
- readonly lane: "local-mcp";
84
- readonly summary: "Recommended: local MCP when it needs the checkout.";
85
- readonly description: "Use On-Device MCP for editor agents that need local files; use hosted MCP instead when they only need cloud-safe tools.";
86
- readonly commands: readonly ["sf setup agent --agent auto --connect", "sf mcp install --agent auto --mode local --transport stdio --connect"];
87
- readonly guideUrl: `${string}/agents`;
88
- readonly setupText: string;
89
- }, {
90
- readonly id: "terminal";
91
- readonly label: "Terminal or CI";
92
- readonly aliases: readonly ["terminal", "cli", "ci", "github actions"];
93
- readonly lane: "cli";
94
- readonly summary: "Recommended: Spacefast CLI.";
95
- readonly description: "Use the CLI for repeat publishes, CI jobs, JSON output, rollback, logs, and domains.";
96
- readonly commands: readonly [string, "sf login", "sf publish {file-or-dir} --json"];
97
- readonly guideUrl: `${string}/cli`;
98
- readonly setupText: string;
99
- }, {
100
- readonly id: "generic";
101
- readonly label: "Generic agent prompt";
102
- readonly aliases: readonly ["generic", "unknown", "gemini"];
103
- readonly lane: "prompt";
104
- readonly summary: "Recommended: generic prompt + setup contract.";
105
- readonly description: "Use this when the client has no known plugin or MCP connector. The agent reads Spacefast's setup contract and picks the smallest working lane.";
106
- readonly guideUrl: string;
107
- readonly setupText: string;
108
- }];
109
- export declare function getAgentSolution(id: AgentSolutionId): AgentSolution;
110
- export declare function renderAgentSolutionIndexText(solutions?: readonly AgentSolution[]): string;