@spacefast/common 0.0.26 → 0.2.2

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 (302) hide show
  1. package/dist/agents/connect-targets.d.ts +6 -146
  2. package/dist/agents/connect-targets.js +63 -295
  3. package/dist/agents/private-key-oauth.d.ts +31 -1
  4. package/dist/agents/private-key-oauth.js +124 -33
  5. package/dist/agents/registry/core.d.ts +292 -0
  6. package/dist/agents/registry/core.js +1388 -0
  7. package/dist/agents/registry/deeplink-probes.d.ts +23 -0
  8. package/dist/agents/registry/deeplink-probes.js +18 -0
  9. package/dist/agents/registry/node.d.ts +56 -0
  10. package/dist/agents/registry/node.js +339 -0
  11. package/dist/brand-assets-build.js +1 -2
  12. package/dist/brand-assets.js +4 -7
  13. package/dist/brand.d.ts +17 -0
  14. package/dist/brand.js +24 -4
  15. package/dist/config/domains.d.ts +55 -28
  16. package/dist/config/domains.js +85 -41
  17. package/dist/config/index.js +1 -2
  18. package/dist/contracts/abuse.js +9 -24
  19. package/dist/contracts/access-profiles.d.ts +86 -0
  20. package/dist/contracts/access-profiles.js +89 -0
  21. package/dist/contracts/access.d.ts +21 -27
  22. package/dist/contracts/access.js +33 -64
  23. package/dist/contracts/activity.d.ts +18 -1
  24. package/dist/contracts/activity.js +70 -26
  25. package/dist/contracts/analytics.js +8 -10
  26. package/dist/contracts/api-keys.d.ts +77 -52
  27. package/dist/contracts/api-keys.js +44 -24
  28. package/dist/contracts/application-journal.d.ts +216 -0
  29. package/dist/contracts/application-journal.js +167 -0
  30. package/dist/contracts/auth.d.ts +90 -17
  31. package/dist/contracts/auth.js +86 -17
  32. package/dist/contracts/beta.d.ts +9 -4
  33. package/dist/contracts/beta.js +20 -16
  34. package/dist/contracts/billing.js +7 -11
  35. package/dist/contracts/bootstrap.d.ts +791 -0
  36. package/dist/contracts/bootstrap.js +51 -0
  37. package/dist/contracts/builds.d.ts +192 -7
  38. package/dist/contracts/builds.js +84 -21
  39. package/dist/contracts/channels.d.ts +43 -0
  40. package/dist/contracts/channels.js +25 -9
  41. package/dist/contracts/cli.d.ts +7 -0
  42. package/dist/contracts/cli.js +6 -0
  43. package/dist/contracts/collab-public.d.ts +1 -1
  44. package/dist/contracts/collab-public.js +5 -8
  45. package/dist/contracts/comments.d.ts +45 -35
  46. package/dist/contracts/comments.js +107 -77
  47. package/dist/contracts/commerce.d.ts +165 -0
  48. package/dist/contracts/commerce.js +146 -0
  49. package/dist/contracts/common.d.ts +3 -3
  50. package/dist/contracts/common.js +18 -29
  51. package/dist/contracts/content-contract-verification.d.ts +521 -0
  52. package/dist/contracts/content-contract-verification.js +320 -0
  53. package/dist/contracts/content-platform-fixture.d.ts +1278 -0
  54. package/dist/contracts/content-platform-fixture.js +44 -0
  55. package/dist/contracts/content-program.d.ts +994 -0
  56. package/dist/contracts/content-program.js +658 -0
  57. package/dist/contracts/content-sync.d.ts +290 -0
  58. package/dist/contracts/content-sync.js +167 -0
  59. package/dist/contracts/content.d.ts +432 -0
  60. package/dist/contracts/content.js +303 -0
  61. package/dist/contracts/continuation.d.ts +17 -1
  62. package/dist/contracts/continuation.js +23 -23
  63. package/dist/contracts/countries.js +3 -4
  64. package/dist/contracts/crons.d.ts +17 -0
  65. package/dist/contracts/crons.js +33 -15
  66. package/dist/contracts/dashboard-prefs.d.ts +56 -0
  67. package/dist/contracts/dashboard-prefs.js +51 -0
  68. package/dist/contracts/device-auth.d.ts +234 -37
  69. package/dist/contracts/device-auth.js +267 -53
  70. package/dist/contracts/docs.d.ts +6 -10
  71. package/dist/contracts/docs.js +5 -13
  72. package/dist/contracts/domains.d.ts +499 -102
  73. package/dist/contracts/domains.js +169 -58
  74. package/dist/contracts/email-preferences.d.ts +3 -3
  75. package/dist/contracts/email-preferences.js +6 -7
  76. package/dist/contracts/enums.d.ts +26 -26
  77. package/dist/contracts/enums.js +61 -54
  78. package/dist/contracts/error-code-meta.d.ts +273 -7
  79. package/dist/contracts/error-code-meta.js +81 -5
  80. package/dist/contracts/error-codes.d.ts +5 -5
  81. package/dist/contracts/error-codes.js +79 -16
  82. package/dist/contracts/events.d.ts +100 -20
  83. package/dist/contracts/events.js +107 -20
  84. package/dist/contracts/execution.d.ts +47 -66
  85. package/dist/contracts/execution.js +51 -64
  86. package/dist/contracts/feature-lifecycle.d.ts +70 -14
  87. package/dist/contracts/feature-lifecycle.js +86 -15
  88. package/dist/contracts/features.d.ts +100 -37
  89. package/dist/contracts/features.js +21 -27
  90. package/dist/contracts/fixtures/content-platform-v1.json +1108 -0
  91. package/dist/contracts/frame-session.d.ts +192 -0
  92. package/dist/contracts/frame-session.js +164 -0
  93. package/dist/contracts/functions.d.ts +218 -211
  94. package/dist/contracts/functions.js +273 -260
  95. package/dist/contracts/grant-copy.d.ts +43 -0
  96. package/dist/contracts/grant-copy.js +44 -0
  97. package/dist/contracts/grants.d.ts +64 -56
  98. package/dist/contracts/grants.js +124 -23
  99. package/dist/contracts/ids.d.ts +4 -1
  100. package/dist/contracts/ids.js +4 -1
  101. package/dist/contracts/internal.d.ts +5 -4
  102. package/dist/contracts/internal.js +12 -3
  103. package/dist/contracts/mcp.d.ts +17 -0
  104. package/dist/contracts/mcp.js +23 -0
  105. package/dist/contracts/me.d.ts +6 -1
  106. package/dist/contracts/me.js +12 -6
  107. package/dist/contracts/notifications.d.ts +27 -29
  108. package/dist/contracts/notifications.js +9 -4
  109. package/dist/contracts/oauth-resources.d.ts +121 -10
  110. package/dist/contracts/oauth-resources.js +130 -11
  111. package/dist/contracts/oauth-scope-actions.d.ts +90 -0
  112. package/dist/contracts/oauth-scope-actions.js +126 -0
  113. package/dist/contracts/operations.d.ts +27 -4
  114. package/dist/contracts/operations.js +11 -5
  115. package/dist/contracts/pages.d.ts +29 -5
  116. package/dist/contracts/pages.js +22 -5
  117. package/dist/contracts/partner-notifications.d.ts +3 -0
  118. package/dist/contracts/partner-notifications.js +65 -0
  119. package/dist/contracts/{platform.d.ts → partner.d.ts} +29 -42
  120. package/dist/contracts/{platform.js → partner.js} +27 -40
  121. package/dist/contracts/plan-policy.d.ts +1 -1
  122. package/dist/contracts/principal-assertion.d.ts +43 -0
  123. package/dist/contracts/principal-assertion.js +67 -0
  124. package/dist/contracts/principals.d.ts +73 -0
  125. package/dist/contracts/principals.js +59 -0
  126. package/dist/contracts/privacy.d.ts +11 -0
  127. package/dist/contracts/privacy.js +17 -0
  128. package/dist/contracts/problem-document.js +3 -4
  129. package/dist/contracts/publish-archive.d.ts +116 -18
  130. package/dist/contracts/publish-archive.js +6 -3
  131. package/dist/contracts/push-new.d.ts +4 -4
  132. package/dist/contracts/quotas.js +3 -3
  133. package/dist/contracts/realtime.d.ts +52 -0
  134. package/dist/contracts/realtime.js +54 -0
  135. package/dist/contracts/repository-connections.d.ts +1 -1
  136. package/dist/contracts/repository-connections.js +6 -2
  137. package/dist/contracts/resources.d.ts +105 -14
  138. package/dist/contracts/resources.js +145 -21
  139. package/dist/contracts/route-inventory.d.ts +358 -0
  140. package/dist/contracts/route-inventory.js +141 -0
  141. package/dist/contracts/runtime-api.d.ts +112 -35
  142. package/dist/contracts/runtime-api.js +86 -66
  143. package/dist/contracts/runtime-app.d.ts +11 -21
  144. package/dist/contracts/runtime-app.js +39 -24
  145. package/dist/contracts/runtime-components.d.ts +143 -0
  146. package/dist/contracts/runtime-components.js +199 -0
  147. package/dist/contracts/runtime-db.d.ts +45 -19
  148. package/dist/contracts/runtime-db.js +85 -20
  149. package/dist/contracts/runtime-purge.js +3 -5
  150. package/dist/contracts/runtime-services.d.ts +43 -75
  151. package/dist/contracts/runtime-services.js +29 -49
  152. package/dist/contracts/runtime-storage.d.ts +14 -14
  153. package/dist/contracts/runtime-storage.js +28 -13
  154. package/dist/contracts/sf-config-v1.d.ts +14 -18
  155. package/dist/contracts/slugs.js +13 -4
  156. package/dist/contracts/space-config.d.ts +235 -28
  157. package/dist/contracts/space-config.js +246 -91
  158. package/dist/contracts/spaces.d.ts +360 -255
  159. package/dist/contracts/spaces.js +190 -122
  160. package/dist/contracts/superadmin-activity.d.ts +3 -43
  161. package/dist/contracts/superadmin-activity.js +6 -30
  162. package/dist/contracts/superadmin-emails.d.ts +1 -0
  163. package/dist/contracts/superadmin-emails.js +17 -1
  164. package/dist/contracts/superadmin-runtime.d.ts +199 -0
  165. package/dist/contracts/superadmin-runtime.js +141 -0
  166. package/dist/contracts/superadmin-search.d.ts +22 -2
  167. package/dist/contracts/superadmin-search.js +14 -6
  168. package/dist/contracts/superadmin-spaces.d.ts +435 -186
  169. package/dist/contracts/superadmin-spaces.js +131 -25
  170. package/dist/contracts/superadmin-teams.d.ts +3 -0
  171. package/dist/contracts/superadmin-teams.js +1 -2
  172. package/dist/contracts/superadmin-tenants.d.ts +627 -6
  173. package/dist/contracts/superadmin-tenants.js +32 -7
  174. package/dist/contracts/superadmin.d.ts +98 -16
  175. package/dist/contracts/superadmin.js +63 -10
  176. package/dist/contracts/tags.d.ts +85 -58
  177. package/dist/contracts/tags.js +44 -34
  178. package/dist/contracts/teams.d.ts +72 -9
  179. package/dist/contracts/teams.js +84 -25
  180. package/dist/contracts/tenants.d.ts +135 -0
  181. package/dist/contracts/tenants.js +120 -0
  182. package/dist/contracts/test-triggers.d.ts +70 -0
  183. package/dist/contracts/test-triggers.js +116 -0
  184. package/dist/contracts/theme-json.js +3 -8
  185. package/dist/contracts/transfers.d.ts +1 -0
  186. package/dist/contracts/transfers.js +1 -0
  187. package/dist/contracts/usage.d.ts +209 -0
  188. package/dist/contracts/usage.js +124 -12
  189. package/dist/contracts/variables.d.ts +2 -2
  190. package/dist/contracts/variables.js +9 -13
  191. package/dist/contracts/webhooks.d.ts +13 -5
  192. package/dist/contracts/webhooks.js +3 -1
  193. package/dist/contracts/zero.d.ts +57 -64
  194. package/dist/contracts/zero.js +68 -66
  195. package/dist/dashboard-paths/index.d.ts +24 -21
  196. package/dist/dashboard-paths/index.js +35 -47
  197. package/dist/dashboard-paths/route-reservations.generated.d.ts +2 -0
  198. package/dist/dashboard-paths/route-reservations.generated.js +36 -0
  199. package/dist/docs/agent-arrival.d.ts +92 -0
  200. package/dist/docs/agent-arrival.js +227 -0
  201. package/dist/docs/agent-output-policy.d.ts +6 -0
  202. package/dist/docs/agent-output-policy.js +22 -0
  203. package/dist/docs/agent-prose.d.ts +11 -17
  204. package/dist/docs/agent-prose.js +62 -37
  205. package/dist/docs/agent-setup.d.ts +72 -41
  206. package/dist/docs/agent-setup.js +336 -436
  207. package/dist/docs/catalog.d.ts +147 -89
  208. package/dist/docs/catalog.js +157 -42
  209. package/dist/docs/error-docs.d.ts +2102 -1
  210. package/dist/docs/error-docs.js +285 -16
  211. package/dist/docs/index-build.d.ts +0 -1
  212. package/dist/docs/index-build.js +2 -3
  213. package/dist/docs/page-context-prompt.d.ts +77 -0
  214. package/dist/docs/page-context-prompt.js +131 -0
  215. package/dist/docs/reference-urls.d.ts +46 -0
  216. package/dist/docs/reference-urls.js +79 -0
  217. package/dist/docs/search.d.ts +6 -8
  218. package/dist/docs/search.js +10 -13
  219. package/dist/docs/skill-distribution.d.ts +4 -1
  220. package/dist/docs/skill-distribution.js +10 -5
  221. package/dist/docs/skills.d.ts +117 -117
  222. package/dist/docs/skills.js +120 -72
  223. package/dist/docs/start-prompts.d.ts +45 -0
  224. package/dist/docs/start-prompts.js +62 -0
  225. package/dist/domain-exploration.js +9 -13
  226. package/dist/og-template.d.ts +56 -0
  227. package/dist/og-template.js +56 -0
  228. package/dist/slug-policy/index.js +5 -11
  229. package/dist/utils/browser-credential.d.ts +13 -6
  230. package/dist/utils/browser-credential.js +14 -7
  231. package/dist/utils/build-settings.d.ts +16 -0
  232. package/dist/utils/build-settings.js +63 -17
  233. package/dist/utils/canonical-json.d.ts +3 -5
  234. package/dist/utils/canonical-json.js +3 -5
  235. package/dist/utils/cast-transport.d.ts +5 -17
  236. package/dist/utils/cast-transport.js +6 -19
  237. package/dist/utils/claim-token.js +1 -2
  238. package/dist/utils/comment-avatars.js +4 -6
  239. package/dist/utils/concurrency.js +2 -3
  240. package/dist/utils/content-type.d.ts +7 -6
  241. package/dist/utils/content-type.js +73 -51
  242. package/dist/utils/credential-policy.d.ts +50 -6
  243. package/dist/utils/credential-policy.js +123 -57
  244. package/dist/utils/egress-policy.fixtures.json +1 -1
  245. package/dist/utils/generate-space-name.d.ts +3 -8
  246. package/dist/utils/generate-space-name.js +3 -8
  247. package/dist/utils/grants.d.ts +0 -1
  248. package/dist/utils/grants.js +4 -7
  249. package/dist/utils/gravatar.d.ts +2 -4
  250. package/dist/utils/gravatar.js +6 -12
  251. package/dist/utils/id-hints.js +14 -23
  252. package/dist/utils/idempotency.d.ts +3 -3
  253. package/dist/utils/idempotency.js +6 -7
  254. package/dist/utils/local-space-state.d.ts +15 -15
  255. package/dist/utils/local-space-state.js +34 -23
  256. package/dist/utils/oauth-signed-query.d.ts +3 -5
  257. package/dist/utils/oauth-signed-query.js +6 -9
  258. package/dist/utils/one-shot-replay.d.ts +3 -5
  259. package/dist/utils/one-shot-replay.js +3 -5
  260. package/dist/utils/page-colors.d.ts +4 -10
  261. package/dist/utils/page-colors.js +11 -35
  262. package/dist/utils/page-fonts.js +6 -11
  263. package/dist/utils/page-preview.d.ts +0 -1
  264. package/dist/utils/page-preview.js +0 -1
  265. package/dist/utils/pages.d.ts +22 -11
  266. package/dist/utils/pages.js +70 -30
  267. package/dist/utils/privacy-regions.d.ts +19 -0
  268. package/dist/utils/privacy-regions.js +91 -0
  269. package/dist/utils/publish-form-data.d.ts +4 -5
  270. package/dist/utils/publish-form-data.js +2 -3
  271. package/dist/utils/publish-policy.d.ts +10 -23
  272. package/dist/utils/publish-policy.js +63 -116
  273. package/dist/utils/query-client.d.ts +2 -0
  274. package/dist/utils/query-client.js +10 -1
  275. package/dist/utils/runtime-paths.d.ts +4 -4
  276. package/dist/utils/runtime-paths.js +6 -8
  277. package/dist/utils/runtime-upload.d.ts +4 -0
  278. package/dist/utils/runtime-upload.js +5 -0
  279. package/dist/utils/secure-local-file.d.ts +3 -3
  280. package/dist/utils/secure-local-file.js +18 -24
  281. package/dist/utils/space-config.d.ts +11 -14
  282. package/dist/utils/space-config.js +10 -16
  283. package/dist/utils/static-runtime-policy.d.ts +5 -8
  284. package/dist/utils/static-runtime-policy.generated.d.ts +16 -0
  285. package/dist/utils/static-runtime-policy.generated.js +70 -0
  286. package/dist/utils/static-runtime-policy.js +17 -84
  287. package/dist/utils/storage-policy.js +1 -2
  288. package/dist/utils/upload-session.js +8 -14
  289. package/dist/utils/version-path.js +11 -19
  290. package/dist/utils/wpcom-auth-redirects.d.ts +5 -14
  291. package/dist/utils/wpcom-auth-redirects.js +1 -4
  292. package/dist/vocabulary.d.ts +7 -7
  293. package/dist/vocabulary.js +30 -16
  294. package/package.json +14 -2
  295. package/dist/agents/client-registry.d.ts +0 -22
  296. package/dist/agents/client-registry.js +0 -41
  297. package/dist/docs/agent-handoff-document.d.ts +0 -15
  298. package/dist/docs/agent-handoff-document.js +0 -180
  299. package/dist/docs/agent-solutions.d.ts +0 -110
  300. package/dist/docs/agent-solutions.js +0 -183
  301. package/dist/utils/query-keys.d.ts +0 -84
  302. package/dist/utils/query-keys.js +0 -108
@@ -1,55 +1,31 @@
1
+ import { DERIVED_SPACE_SLUG_ROUTE_RESERVATIONS, DERIVED_TEAM_SLUG_ROUTE_RESERVATIONS, } from "./route-reservations.generated.js";
1
2
  /**
2
- * Dashboard route first-segments that cannot be used as team slugs.
3
- *
4
- * Append-only: add a new top-level static dashboard route's first segment here
5
- * before its route module lands. A repository structural test enforces this.
3
+ * Reservations for a dashboard surface that has not shipped yet. Shipped
4
+ * surfaces are derived in route-reservations.generated.ts, so this is the only
5
+ * hand-authored list. Delete an entry once the generator starts deriving it;
6
+ * leaving both is a duplicate that fails this module's own test.
6
7
  */
7
- export const TEAM_SLUG_ROUTE_RESERVATIONS = [
8
- "accept-beta-invite",
9
- "accept-invitation",
10
- "account",
11
- "access",
12
- // Not a TanStack route module: /agent* is the edge-served handoff-document
13
- // surface (apps/my/public/_redirects + vite middleware, #417). Those rewrite
14
- // rules deliberately swallow every /agent-prefixed path, so a team named
15
- // "agent" could never reach its canonical dashboard. Reserved per the spec's
16
- // own rule that a static first segment is reserved before the surface owning
17
- // it ships (#417 predates this set; this closes that drift).
18
- "agent",
19
- "claim",
20
- "device",
21
- "drop",
22
- "new-team",
23
- "oauth",
24
- "push",
25
- "sign-in",
26
- "start",
27
- "terminal",
28
- "two-factor",
29
- ];
8
+ const UNBUILT_TEAM_SLUG_ROUTE_RESERVATIONS = [];
30
9
  /**
31
- * Dashboard route first-segments that cannot be used as space slugs.
32
- *
33
- * Append-only: add a new static route directly below a team's first segment
34
- * here before its route module lands. A repository structural test enforces
35
- * this.
10
+ * `connect` is held for the team-level connect page (see
11
+ * `reservedSegmentActivationContract` in apps/my's dashboard route ledger).
36
12
  */
13
+ export const UNBUILT_SPACE_SLUG_ROUTE_RESERVATIONS = ["connect"];
14
+ /** Dashboard route first-segments that cannot be used as team slugs. */
15
+ export const TEAM_SLUG_ROUTE_RESERVATIONS = [
16
+ ...DERIVED_TEAM_SLUG_ROUTE_RESERVATIONS,
17
+ ...UNBUILT_TEAM_SLUG_ROUTE_RESERVATIONS,
18
+ ];
19
+ /** Dashboard route first-segments that cannot be used as space slugs. */
37
20
  export const SPACE_SLUG_ROUTE_RESERVATIONS = [
38
- "billing",
39
- "connect",
40
- "domains",
41
- "drop",
42
- "members",
43
- "new",
44
- "resume",
45
- "settings",
21
+ ...DERIVED_SPACE_SLUG_ROUTE_RESERVATIONS,
22
+ ...UNBUILT_SPACE_SLUG_ROUTE_RESERVATIONS,
46
23
  ];
47
24
  export const TEAM_SLUG_ROUTE_RESERVATION_SET = new Set(TEAM_SLUG_ROUTE_RESERVATIONS);
48
25
  export const SPACE_SLUG_ROUTE_RESERVATION_SET = new Set(SPACE_SLUG_ROUTE_RESERVATIONS);
49
26
  /**
50
- * The Runtime page's sections. They are search params rather than path
51
- * segments, so `runtime` stays a single route (and a single ledger row) and a
52
- * space slugged "runtime" keeps its own Runtime page at
27
+ * The Runtime page's sections. Search params, not path segments, so `runtime`
28
+ * stays one route and a space slugged "runtime" keeps its own Runtime page at
53
29
  * `/<team>/runtime/runtime`.
54
30
  */
55
31
  export const SPACE_RUNTIME_SECTIONS = ["overview", "database", "storage", "logs"];
@@ -72,10 +48,19 @@ export function buildDetailPath(teamSlug, spaceSlug, buildId) {
72
48
  export function spaceDomainsPath(teamSlug, spaceSlug) {
73
49
  return `${spacePath(teamSlug, spaceSlug)}/domains`;
74
50
  }
51
+ /** Build runs and the repository connection that produces them. */
52
+ export function spaceBuildsPath(teamSlug, spaceSlug) {
53
+ return `${spacePath(teamSlug, spaceSlug)}/builds`;
54
+ }
55
+ export function spaceIntegrationsPath(teamSlug, spaceSlug) {
56
+ return `${spacePath(teamSlug, spaceSlug)}/integrations`;
57
+ }
58
+ export function spaceVariablesPath(teamSlug, spaceSlug) {
59
+ return `${spacePath(teamSlug, spaceSlug)}/variables`;
60
+ }
75
61
  /**
76
- * The space's Runtime page. The default section is the bare URL — the route
77
- * strips it back out of the address bar so a link to "overview" and a link to
78
- * the page itself are the same link.
62
+ * The space's Runtime page. The route strips the default section back out of the
63
+ * address bar, so a link to "overview" and a link to the page are the same link.
79
64
  */
80
65
  export function spaceRuntimePath(teamSlug, spaceSlug, section = DEFAULT_SPACE_RUNTIME_SECTION) {
81
66
  const root = `${spacePath(teamSlug, spaceSlug)}/runtime`;
@@ -89,7 +74,10 @@ export function teamDomainsPath(teamSlug) {
89
74
  return `${teamPath(teamSlug)}/domains`;
90
75
  }
91
76
  export function teamBillingPath(teamSlug) {
92
- return `${teamPath(teamSlug)}/billing`;
77
+ return teamSettingsPath(teamSlug, "billing");
78
+ }
79
+ export function teamDeveloperSurfacePath(teamSlug, surface) {
80
+ return `${teamPath(teamSlug)}/${surface}`;
93
81
  }
94
82
  export function teamDomainDetailPath(teamSlug, domainRef) {
95
83
  return `${teamDomainsPath(teamSlug)}/${dynamicSegment(domainRef)}`;
@@ -0,0 +1,2 @@
1
+ export declare const DERIVED_TEAM_SLUG_ROUTE_RESERVATIONS: readonly ["accept-beta-invite", "accept-invitation", "access", "account", "approvals", "claim", "device", "drop", "new-team", "oauth", "push", "sign-in", "start", "terminal", "two-factor"];
2
+ export declare const DERIVED_SPACE_SLUG_ROUTE_RESERVATIONS: readonly ["agents", "api-keys", "billing", "domains", "drop", "handoffs", "members", "new", "resume", "settings", "variables", "webhooks"];
@@ -0,0 +1,36 @@
1
+ // @generated by `bun run check:dashboard-route-reservations -- --write`.
2
+ // Source: apps/my/src/routes (static first segments of route modules) and
3
+ // apps/my/public/_redirects (same-origin edge rules that claim a path before the
4
+ // router sees it). Add the route or the rule, regenerate, and the slug stops
5
+ // being claimable. Hand edits are overwritten.
6
+ export const DERIVED_TEAM_SLUG_ROUTE_RESERVATIONS = [
7
+ "accept-beta-invite",
8
+ "accept-invitation",
9
+ "access",
10
+ "account",
11
+ "approvals",
12
+ "claim",
13
+ "device",
14
+ "drop",
15
+ "new-team",
16
+ "oauth",
17
+ "push",
18
+ "sign-in",
19
+ "start",
20
+ "terminal",
21
+ "two-factor",
22
+ ];
23
+ export const DERIVED_SPACE_SLUG_ROUTE_RESERVATIONS = [
24
+ "agents",
25
+ "api-keys",
26
+ "billing",
27
+ "domains",
28
+ "drop",
29
+ "handoffs",
30
+ "members",
31
+ "new",
32
+ "resume",
33
+ "settings",
34
+ "variables",
35
+ "webhooks",
36
+ ];
@@ -0,0 +1,92 @@
1
+ import { type AnonymousAgentHandoffStatus } from "../contracts/device-auth.js";
2
+ export declare const AGENT_HANDOFF_REQUEST_FAILED_MESSAGE = "Request failed.";
3
+ export declare const AGENT_HANDOFF_INVALID_RESPONSE_MESSAGE = "Invalid agent handoff response.";
4
+ /**
5
+ * The messages that say nothing a person can act on. A UI showing an error
6
+ * detail line suppresses these, so it never renders "failed: Request failed."
7
+ */
8
+ export declare const AGENT_HANDOFF_GENERIC_MESSAGES: ReadonlySet<string>;
9
+ export declare class AgentHandoffRequestError extends Error {
10
+ readonly code: string | null;
11
+ constructor(message: string, code?: string | null);
12
+ }
13
+ export type AgentArrivalConfig = {
14
+ /** Origin the anonymous handoff endpoints live on. */
15
+ apiOrigin: string;
16
+ /**
17
+ * Origins a minted link may legitimately carry, most likely first. A deploy
18
+ * may mint on the API origin or on a front-end origin that proxies
19
+ * `/handoffs/*` to it, so this is a list, not a guess. Defaults to the API
20
+ * origin alone.
21
+ */
22
+ allowedOrigins?: readonly string[];
23
+ /** Transport seam: tests and the dashboard's attributed client swap it. */
24
+ fetch?: typeof globalThis.fetch;
25
+ /** Clock seam for the cadence and reuse policies. */
26
+ now?: () => number;
27
+ };
28
+ export type MintedAnonymousArrival = {
29
+ /** Ledger id of the handoff. Not a secret — the poll and analytics key off it. */
30
+ id: string;
31
+ /**
32
+ * Composes the copy-ready prompt for the task selected RIGHT NOW. It is a
33
+ * function, not a stored string, for two reasons: one handoff is reused
34
+ * across a visit while the task behind the prompt keeps changing, and the
35
+ * bearer stays captured in this closure instead of sitting in caller state.
36
+ * The result contains the one-use URL: clipboard only.
37
+ */
38
+ promptFor: (context: string) => string;
39
+ /** Epoch ms. */
40
+ expiresAt: number;
41
+ };
42
+ /**
43
+ * Mints the signed-out handoff a copied prompt carries.
44
+ *
45
+ * The anonymous surface is anonymous by contract, so this deliberately sends no
46
+ * credentials: it works signed out, and a mint that carried a session would
47
+ * answer differently for gated accounts.
48
+ */
49
+ export declare function mintAnonymousArrival(config: AgentArrivalConfig): Promise<MintedAnonymousArrival>;
50
+ /** Reads one anonymous handoff's fetch state by its non-secret ledger id. */
51
+ export declare function readAnonymousArrivalStatus(id: string, config: AgentArrivalConfig): Promise<AnonymousAgentHandoffStatus>;
52
+ export declare const AGENT_ARRIVAL_EAGER_POLL_MS = 2000;
53
+ export declare const AGENT_ARRIVAL_EAGER_WINDOW_MS: number;
54
+ export declare const AGENT_ARRIVAL_RELAXED_POLL_MS = 10000;
55
+ /**
56
+ * The handoff's own TTL is the clock: with no `since` to carry, "how much
57
+ * runway is left" says how long ago it was minted.
58
+ */
59
+ export declare const AGENT_ARRIVAL_RELAXED_AFTER_MS: number;
60
+ /**
61
+ * One live handoff per visit is reused while it still has this much runway.
62
+ * Every copy gesture minting its own would spend rows against the caller's
63
+ * budget for a signal that only has to flip once.
64
+ */
65
+ export declare const AGENT_ARRIVAL_REFRESH_RUNWAY_MS: number;
66
+ /** How long to wait before the next status read, or `false` to stop polling. */
67
+ export declare function anonymousArrivalPollDelayMs(status: AnonymousAgentHandoffStatus | undefined, now?: number): number | false;
68
+ /** The arrival itself: one fetch of the private URL is the whole signal. */
69
+ export declare function hasAgentArrived(status: AnonymousAgentHandoffStatus | undefined): boolean;
70
+ export type ComposedAnonymousPrompt = {
71
+ /** Ledger id to watch for the arrival. */
72
+ id: string;
73
+ /** Copy-ready text carrying the one-use URL. Clipboard only. */
74
+ prompt: string;
75
+ /** Epoch ms. */
76
+ expiresAt: number;
77
+ };
78
+ export type AnonymousArrival = {
79
+ /** The visit's handoff: minted once, reused while it still has runway. */
80
+ ensureMinted: () => Promise<MintedAnonymousArrival>;
81
+ /** ensureMinted, then the prompt for the task selected at this moment. */
82
+ promptFor: (context: string) => Promise<ComposedAnonymousPrompt>;
83
+ readStatus: (id: string) => Promise<AnonymousAgentHandoffStatus>;
84
+ nextPollDelayMs: (status: AnonymousAgentHandoffStatus | undefined) => number | false;
85
+ hasArrived: (status: AnonymousAgentHandoffStatus | undefined) => boolean;
86
+ };
87
+ /**
88
+ * One visit's arrival flow. Hold one of these for as long as the visitor is on
89
+ * the surface: the reuse discipline lives in the instance, so re-copies keep
90
+ * the same handoff instead of piling fresh rows behind one signal.
91
+ */
92
+ export declare function createAnonymousArrival(config: AgentArrivalConfig): AnonymousArrival;
@@ -0,0 +1,227 @@
1
+ import { z } from "zod";
2
+ import { ANONYMOUS_AGENT_HANDOFF_TTL_MS, AnonymousAgentHandoffSchema, AnonymousAgentHandoffStatusSchema, } from "../contracts/device-auth.js";
3
+ import { buildAnonymousAgentHandoff, parseAgentHandoffUrl } from "./agent-setup.js";
4
+ /*
5
+ * Agent arrival, signed out: the whole flow behind "your agent picked the
6
+ * prompt up", framework-free so the dashboard and the marketing site run one
7
+ * implementation instead of two that drift.
8
+ *
9
+ * The shape of the flow: mint an anonymous handoff, compose the copied prompt
10
+ * around its one-use URL, then poll that handoff's own fetch state until the
11
+ * counter leaves zero. The handoff carries no team, no Space, and nothing to
12
+ * redeem — its only job is to make the fetch observable — so the visitor learns
13
+ * their agent arrived without signing up first.
14
+ *
15
+ * Everything here is a plain function: no React, no query client, no clock but
16
+ * the one the caller passes. Cadence and reuse are policy, so they live here
17
+ * with the numbers rather than in whichever UI happens to render the wait.
18
+ */
19
+ const ANONYMOUS_ARRIVAL_PATH = "/v1/auth/agent-handoffs/anonymous";
20
+ export const AGENT_HANDOFF_REQUEST_FAILED_MESSAGE = "Request failed.";
21
+ export const AGENT_HANDOFF_INVALID_RESPONSE_MESSAGE = "Invalid agent handoff response.";
22
+ /**
23
+ * The messages that say nothing a person can act on. A UI showing an error
24
+ * detail line suppresses these, so it never renders "failed: Request failed."
25
+ */
26
+ export const AGENT_HANDOFF_GENERIC_MESSAGES = new Set([
27
+ AGENT_HANDOFF_REQUEST_FAILED_MESSAGE,
28
+ AGENT_HANDOFF_INVALID_RESPONSE_MESSAGE,
29
+ ]);
30
+ export class AgentHandoffRequestError extends Error {
31
+ code;
32
+ constructor(message, code = null) {
33
+ super(message);
34
+ this.name = "AgentHandoffRequestError";
35
+ this.code = code;
36
+ }
37
+ }
38
+ /**
39
+ * The parts of an RFC 9457 problem document that may reach a person. Anything
40
+ * else the server sent is dropped here rather than carried on an error: a
41
+ * malformed field costs the reader a detail line, never a leaked credential.
42
+ */
43
+ const AgentHandoffProblemSchema = z.object({
44
+ code: z.string().optional().catch(undefined),
45
+ detail: z.string().optional().catch(undefined),
46
+ });
47
+ // Codes are lowercase snake tokens; anything else (including a secret-shaped
48
+ // blob smuggled into the field) is dropped rather than carried on the error.
49
+ const SAFE_ERROR_CODE = /^[a-z][a-z0-9_.-]{0,63}$/;
50
+ function safeProblemDetail(detail) {
51
+ if (detail === undefined || !detail.trim())
52
+ return AGENT_HANDOFF_REQUEST_FAILED_MESSAGE;
53
+ // Error copy must never echo a handoff URL or a secret-shaped opaque credential.
54
+ if (/https?:\/\/|[A-Za-z0-9_-]{16,}/i.test(detail))
55
+ return AGENT_HANDOFF_REQUEST_FAILED_MESSAGE;
56
+ return detail;
57
+ }
58
+ /** The failure a non-2xx answer becomes, sanitized at the boundary that read it. */
59
+ async function agentHandoffErrorFromResponse(response) {
60
+ const parsed = AgentHandoffProblemSchema.safeParse(await response.json().catch(() => null));
61
+ const problem = parsed.success ? parsed.data : {};
62
+ const code = problem.code !== undefined && SAFE_ERROR_CODE.test(problem.code) ? problem.code : null;
63
+ return new AgentHandoffRequestError(safeProblemDetail(problem.detail), code);
64
+ }
65
+ function invalidResponse() {
66
+ return new AgentHandoffRequestError(AGENT_HANDOFF_INVALID_RESPONSE_MESSAGE);
67
+ }
68
+ /*
69
+ * The success envelope, parsed as one shape. `{ data }` is the API's contract
70
+ * and the payload schema is the handoff's, so a response that is neither never
71
+ * reaches a caller as a half-parsed object.
72
+ */
73
+ const MintEnvelopeSchema = z.object({ data: AnonymousAgentHandoffSchema });
74
+ const StatusEnvelopeSchema = z.object({ data: AnonymousAgentHandoffStatusSchema });
75
+ function endpoint(config, path) {
76
+ return `${config.apiOrigin.replace(/\/+$/, "")}${path}`;
77
+ }
78
+ function transport(config) {
79
+ return config.fetch ?? globalThis.fetch;
80
+ }
81
+ function clock(config) {
82
+ return config.now ? config.now() : Date.now();
83
+ }
84
+ /**
85
+ * Mints the signed-out handoff a copied prompt carries.
86
+ *
87
+ * The anonymous surface is anonymous by contract, so this deliberately sends no
88
+ * credentials: it works signed out, and a mint that carried a session would
89
+ * answer differently for gated accounts.
90
+ */
91
+ export async function mintAnonymousArrival(config) {
92
+ const response = await transport(config)(endpoint(config, ANONYMOUS_ARRIVAL_PATH), {
93
+ method: "POST",
94
+ credentials: "omit",
95
+ headers: { accept: "application/json" },
96
+ });
97
+ if (!response.ok)
98
+ throw await agentHandoffErrorFromResponse(response);
99
+ const parsed = MintEnvelopeSchema.safeParse(await response.json().catch(() => null));
100
+ if (!parsed.success)
101
+ throw invalidResponse();
102
+ const data = parsed.data.data;
103
+ let handoffUrl = null;
104
+ let secret = null;
105
+ for (const origin of config.allowedOrigins ?? [config.apiOrigin]) {
106
+ try {
107
+ ({ handoffUrl, secret } = parseAgentHandoffUrl(data.url, origin));
108
+ break;
109
+ }
110
+ catch {
111
+ // Try the next explicitly allowed origin.
112
+ }
113
+ }
114
+ // Sanitization boundary: the ledger id is rendered and polled on, so it must
115
+ // be provably free of the bearer whatever the server fed us.
116
+ if (handoffUrl === null || secret === null || data.id.includes(secret)) {
117
+ throw invalidResponse();
118
+ }
119
+ const url = handoffUrl;
120
+ const bearer = secret;
121
+ return {
122
+ id: data.id,
123
+ expiresAt: Date.parse(data.expiresAt),
124
+ promptFor: (context) => {
125
+ // The caller's text is authored before the mint, so it can only contain
126
+ // the bearer if something upstream is already broken.
127
+ if (context.includes(bearer))
128
+ throw invalidResponse();
129
+ return buildAnonymousAgentHandoff({
130
+ expectedOrigin: new URL(url).origin,
131
+ url,
132
+ context,
133
+ }).prompt;
134
+ },
135
+ };
136
+ }
137
+ /** Reads one anonymous handoff's fetch state by its non-secret ledger id. */
138
+ export async function readAnonymousArrivalStatus(id, config) {
139
+ const path = `${ANONYMOUS_ARRIVAL_PATH}/${encodeURIComponent(id)}`;
140
+ const response = await transport(config)(endpoint(config, path), {
141
+ method: "GET",
142
+ credentials: "omit",
143
+ headers: { accept: "application/json" },
144
+ });
145
+ if (!response.ok)
146
+ throw await agentHandoffErrorFromResponse(response);
147
+ const parsed = StatusEnvelopeSchema.safeParse(await response.json().catch(() => null));
148
+ if (!parsed.success)
149
+ throw invalidResponse();
150
+ return parsed.data.data;
151
+ }
152
+ /*
153
+ * Cadence, owned in one place with its numbers.
154
+ *
155
+ * The answer being waited on is one counter that leaves zero exactly once, and
156
+ * it changes from outside this browser, so polling is the whole mechanism.
157
+ * Eager while an agent is plausibly still landing, relaxed for the rest of the
158
+ * handoff's life, stopped once nothing can change.
159
+ */
160
+ export const AGENT_ARRIVAL_EAGER_POLL_MS = 2_000;
161
+ export const AGENT_ARRIVAL_EAGER_WINDOW_MS = 2 * 60_000;
162
+ export const AGENT_ARRIVAL_RELAXED_POLL_MS = 10_000;
163
+ /**
164
+ * The handoff's own TTL is the clock: with no `since` to carry, "how much
165
+ * runway is left" says how long ago it was minted.
166
+ */
167
+ export const AGENT_ARRIVAL_RELAXED_AFTER_MS = ANONYMOUS_AGENT_HANDOFF_TTL_MS - AGENT_ARRIVAL_EAGER_WINDOW_MS;
168
+ /**
169
+ * One live handoff per visit is reused while it still has this much runway.
170
+ * Every copy gesture minting its own would spend rows against the caller's
171
+ * budget for a signal that only has to flip once.
172
+ */
173
+ export const AGENT_ARRIVAL_REFRESH_RUNWAY_MS = 2 * 60_000;
174
+ /** How long to wait before the next status read, or `false` to stop polling. */
175
+ export function anonymousArrivalPollDelayMs(status, now = Date.now()) {
176
+ if (status === undefined)
177
+ return AGENT_ARRIVAL_EAGER_POLL_MS;
178
+ if (hasAgentArrived(status))
179
+ return false;
180
+ const remaining = Date.parse(status.expiresAt) - now;
181
+ if (remaining <= 0)
182
+ return false;
183
+ return remaining > AGENT_ARRIVAL_RELAXED_AFTER_MS
184
+ ? AGENT_ARRIVAL_EAGER_POLL_MS
185
+ : AGENT_ARRIVAL_RELAXED_POLL_MS;
186
+ }
187
+ /** The arrival itself: one fetch of the private URL is the whole signal. */
188
+ export function hasAgentArrived(status) {
189
+ return (status?.fetchCount ?? 0) > 0;
190
+ }
191
+ /**
192
+ * One visit's arrival flow. Hold one of these for as long as the visitor is on
193
+ * the surface: the reuse discipline lives in the instance, so re-copies keep
194
+ * the same handoff instead of piling fresh rows behind one signal.
195
+ */
196
+ export function createAnonymousArrival(config) {
197
+ let inflight = null;
198
+ const fresh = () => {
199
+ const pending = mintAnonymousArrival(config);
200
+ inflight = pending;
201
+ // A mint that failed is not the visit's handoff; the next copy mints anew.
202
+ void pending.catch(() => {
203
+ if (inflight === pending)
204
+ inflight = null;
205
+ });
206
+ return pending;
207
+ };
208
+ const ensureMinted = () => {
209
+ const cached = inflight;
210
+ if (!cached)
211
+ return fresh();
212
+ return cached.then((minted) => minted.expiresAt - clock(config) > AGENT_ARRIVAL_REFRESH_RUNWAY_MS ? minted : fresh());
213
+ };
214
+ return {
215
+ ensureMinted,
216
+ promptFor: (context) => ensureMinted().then((minted) => ({
217
+ id: minted.id,
218
+ // Composed from THIS copy's context, never the one the handoff was
219
+ // first minted for: one handoff spans the visit, the task does not.
220
+ prompt: minted.promptFor(context),
221
+ expiresAt: minted.expiresAt,
222
+ })),
223
+ readStatus: (id) => readAnonymousArrivalStatus(id, config),
224
+ nextPollDelayMs: (status) => anonymousArrivalPollDelayMs(status, clock(config)),
225
+ hasArrived: hasAgentArrived,
226
+ };
227
+ }
@@ -0,0 +1,6 @@
1
+ export type AgentOutput = {
2
+ readonly source: string;
3
+ readonly text: string;
4
+ };
5
+ /** Reject commercial plan promotion in text that an agent can receive. */
6
+ export declare function assertNoCommercialUpsell(outputs: readonly AgentOutput[]): void;
@@ -0,0 +1,22 @@
1
+ const COMMERCIAL_UPSELL_PATTERNS = [
2
+ /\bpricing\b/i,
3
+ /\bpaid plans?\b/i,
4
+ /\bupgrade (?:your|the|this) (?:account|plan|subscription)\b/i,
5
+ /\bupgrade to (?:a )?(?:paid|premium|pro)\b/i,
6
+ /\bsubscribe now\b/i,
7
+ /\bstart (?:a )?(?:free )?trial\b/i,
8
+ /\bbuy now\b/i,
9
+ /\bcontact sales\b/i,
10
+ /\bcheckout\b/i,
11
+ ];
12
+ /** Reject commercial plan promotion in text that an agent can receive. */
13
+ export function assertNoCommercialUpsell(outputs) {
14
+ for (const output of outputs) {
15
+ for (const pattern of COMMERCIAL_UPSELL_PATTERNS) {
16
+ const match = pattern.exec(output.text);
17
+ if (match) {
18
+ throw new Error(`${output.source} contains commercial upsell text: ${match[0]}`);
19
+ }
20
+ }
21
+ }
22
+ }
@@ -1,8 +1,5 @@
1
1
  export declare const ARCHIVE_SECRET_GLOBS: readonly [".env*", ".npmrc", ".netrc", "*/.git/*", "*/.spacefast/*", "*/.ssh/*", "*/.aws/*", "*/.kube/*", "*/.docker/*", "credentials.json", "*.pem", "*.key", "*.p12", "*.pfx", "*.crt", "*id_rsa*"];
2
- /**
3
- * The credential rules every surface must repeat. Treat tokens as secrets, keep
4
- * them out of logs and transcripts, and never echo them back.
5
- */
2
+ /** The credential rules every surface must repeat. */
6
3
  export declare const SECRET_RULES_PROSE: string;
7
4
  export declare const POSITIONING_PROSE: string;
8
5
  export declare const EXPLAIN_TO_USER_PROSE: string;
@@ -10,16 +7,15 @@ export declare const FEEDBACK_PROSE = "With user approval, send feedback with `s
10
7
  export declare const FAILURE_CONDUCT_PROSE: string;
11
8
  export declare const LANE_PICKER_PROSE: string;
12
9
  export declare const HOW_TO_RESEARCH_PROSE: string;
13
- /** Curl/API skill lane: docs URLs only no MCP or CLI tools required. */
10
+ /** Curl/API skill lane: docs URLs only, no MCP or CLI tools required. */
14
11
  export declare const HOW_TO_RESEARCH_API_PROSE: string;
15
12
  /** MCP plugin skill lane: prefer skills for workflows and execute for the OpenAPI catalog. */
16
13
  export declare const HOW_TO_RESEARCH_MCP_PROSE: string;
17
14
  export declare const ENV_NOTES_PROSE: string;
18
15
  export declare const ENV_NOTES_API_PROSE: string;
19
16
  /**
20
- * The CHECK verb: before ever creating a space, look for the one the project
21
- * already has. This is what keeps a returning agent from pushing a duplicate
22
- * anonymous space instead of a new version.
17
+ * The CHECK verb: look for an existing space before creating one, so a returning
18
+ * agent publishes a new version instead of a duplicate anonymous space.
23
19
  */
24
20
  export declare const CHECK_BEFORE_PUBLISH_PROSE: string;
25
21
  export declare const CHECK_BEFORE_PUBLISH_API_PROSE: string;
@@ -38,6 +34,7 @@ export declare const SAVE_STATE_MCP_PROSE: string;
38
34
  * The UPDATE verb: a new version to the SAME space. Never re-run the
39
35
  * first-publish recipe when saved state exists.
40
36
  */
37
+ export declare const PUSH_TO_DEPLOY_PROSE: string;
41
38
  export declare const UPDATE_SPACE_PROSE: string;
42
39
  /**
43
40
  * The CLAIM / CONTINUE verb: show the claim link, and after the user claims,
@@ -46,7 +43,7 @@ export declare const UPDATE_SPACE_PROSE: string;
46
43
  export declare const CONTINUE_AFTER_CLAIM_PROSE: string;
47
44
  /**
48
45
  * The zero-install publish sequence: a replay-safe curl loop for a file, a
49
- * secret-preflighted zip for a folder. This is the load-bearing rung 0 — an
46
+ * secret-preflighted zip for a folder. This is the load-bearing rung 0. An
50
47
  * agent that stops here must still succeed.
51
48
  */
52
49
  export declare const PUBLISH_SEQUENCE_PROSE: string;
@@ -54,19 +51,15 @@ export declare const PUBLISH_SEQUENCE_PROSE: string;
54
51
  * What the JSON publish receipt contains and how to read it. The receipt is the
55
52
  * source of truth; never invent a separate success signal.
56
53
  */
57
- export declare const RECEIPT_SHAPE_PROSE: string;
54
+ export declare const RECEIPT_CONTRACT_PROSE: string;
58
55
  /**
59
56
  * The large/cloud-agent path. This keeps file bytes out of MCP JSON and chat
60
57
  * transcripts while still giving agents a way to upload arbitrary artifacts.
61
58
  */
62
59
  export declare const SIGNED_UPLOAD_PROSE: string;
63
60
  /**
64
- * Named fragments for the skill-template generator. The templates carry
65
- * `{{prose.secretRules}}`, `{{prose.publishSequence}}`,
66
- * `{{prose.receiptShape}}`, `{{prose.signedUpload}}`,
67
- * `{{prose.checkBeforePublish}}`, `{{prose.saveState}}`,
68
- * `{{prose.updateSpace}}`, and `{{prose.continueAfterClaim}}` placeholders;
69
- * generate-skill.mjs substitutes these.
61
+ * Named fragments for the skill-template generator: the templates carry
62
+ * `{{prose.<key>}}` placeholders and generate-skill.mjs substitutes these.
70
63
  */
71
64
  export declare const AGENT_PROSE: {
72
65
  readonly positioning: string;
@@ -74,7 +67,7 @@ export declare const AGENT_PROSE: {
74
67
  readonly explainToUser: string;
75
68
  readonly failureConduct: string;
76
69
  readonly publishSequence: string;
77
- readonly receiptShape: string;
70
+ readonly receiptContract: string;
78
71
  readonly signedUpload: string;
79
72
  readonly checkBeforePublish: string;
80
73
  readonly checkBeforePublishApi: string;
@@ -84,6 +77,7 @@ export declare const AGENT_PROSE: {
84
77
  readonly saveStateApi: string;
85
78
  readonly saveStateMcp: string;
86
79
  readonly updateSpace: string;
80
+ readonly pushToDeploy: string;
87
81
  readonly continueAfterClaim: string;
88
82
  readonly lanePicker: string;
89
83
  readonly howToResearch: string;