@intentic/sandbox-contract 1.307.0 → 1.308.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 (251) hide show
  1. package/README.md +12 -0
  2. package/dist/contracts/accounts.contract.d.ts +6 -6
  3. package/dist/contracts/accounts.contract.js +7 -7
  4. package/dist/contracts/accounts.contract.js.map +1 -1
  5. package/dist/contracts/activity.contract.d.ts +2 -2
  6. package/dist/contracts/activity.contract.js +3 -3
  7. package/dist/contracts/activity.contract.js.map +1 -1
  8. package/dist/contracts/agent.contract.d.ts +10 -10
  9. package/dist/contracts/agent.contract.d.ts.map +1 -1
  10. package/dist/contracts/agent.contract.js +21 -11
  11. package/dist/contracts/agent.contract.js.map +1 -1
  12. package/dist/contracts/agents.contract.d.ts +41 -27
  13. package/dist/contracts/agents.contract.d.ts.map +1 -1
  14. package/dist/contracts/agents.contract.js +44 -28
  15. package/dist/contracts/agents.contract.js.map +1 -1
  16. package/dist/contracts/approvals.contract.d.ts +3 -3
  17. package/dist/contracts/approvals.contract.js +4 -4
  18. package/dist/contracts/approvals.contract.js.map +1 -1
  19. package/dist/contracts/areas.contract.d.ts +3 -3
  20. package/dist/contracts/areas.contract.d.ts.map +1 -1
  21. package/dist/contracts/areas.contract.js +5 -4
  22. package/dist/contracts/areas.contract.js.map +1 -1
  23. package/dist/contracts/automations.contract.d.ts +11 -11
  24. package/dist/contracts/automations.contract.js +12 -12
  25. package/dist/contracts/automations.contract.js.map +1 -1
  26. package/dist/contracts/capabilities.contract.d.ts +13 -13
  27. package/dist/contracts/capabilities.contract.d.ts.map +1 -1
  28. package/dist/contracts/capabilities.contract.js +18 -14
  29. package/dist/contracts/capabilities.contract.js.map +1 -1
  30. package/dist/contracts/chores.contract.d.ts +3 -3
  31. package/dist/contracts/chores.contract.js +4 -4
  32. package/dist/contracts/chores.contract.js.map +1 -1
  33. package/dist/contracts/ci.contract.d.ts +5 -5
  34. package/dist/contracts/ci.contract.js +6 -6
  35. package/dist/contracts/ci.contract.js.map +1 -1
  36. package/dist/contracts/diff.contract.d.ts +1 -1
  37. package/dist/contracts/diff.contract.js +2 -2
  38. package/dist/contracts/diff.contract.js.map +1 -1
  39. package/dist/contracts/endpoints.contract.d.ts +4 -4
  40. package/dist/contracts/endpoints.contract.js +5 -5
  41. package/dist/contracts/endpoints.contract.js.map +1 -1
  42. package/dist/contracts/exit.contract.d.ts +7 -7
  43. package/dist/contracts/exit.contract.d.ts.map +1 -1
  44. package/dist/contracts/exit.contract.js +9 -8
  45. package/dist/contracts/exit.contract.js.map +1 -1
  46. package/dist/contracts/extensions.contract.d.ts +17 -17
  47. package/dist/contracts/extensions.contract.js +18 -18
  48. package/dist/contracts/extensions.contract.js.map +1 -1
  49. package/dist/contracts/git.contract.d.ts +47 -45
  50. package/dist/contracts/git.contract.d.ts.map +1 -1
  51. package/dist/contracts/git.contract.js +46 -46
  52. package/dist/contracts/git.contract.js.map +1 -1
  53. package/dist/contracts/history.contract.d.ts +4 -4
  54. package/dist/contracts/history.contract.js +5 -5
  55. package/dist/contracts/history.contract.js.map +1 -1
  56. package/dist/contracts/intentic.contract.d.ts +3 -3
  57. package/dist/contracts/intentic.contract.d.ts.map +1 -1
  58. package/dist/contracts/intentic.contract.js +5 -4
  59. package/dist/contracts/intentic.contract.js.map +1 -1
  60. package/dist/contracts/inventory.contract.d.ts +3 -3
  61. package/dist/contracts/inventory.contract.js +4 -4
  62. package/dist/contracts/inventory.contract.js.map +1 -1
  63. package/dist/contracts/issues.contract.d.ts +5 -5
  64. package/dist/contracts/issues.contract.js +6 -6
  65. package/dist/contracts/issues.contract.js.map +1 -1
  66. package/dist/contracts/logs.contract.d.ts +3 -3
  67. package/dist/contracts/logs.contract.d.ts.map +1 -1
  68. package/dist/contracts/logs.contract.js +6 -4
  69. package/dist/contracts/logs.contract.js.map +1 -1
  70. package/dist/contracts/loops.contract.d.ts +6 -6
  71. package/dist/contracts/loops.contract.js +7 -7
  72. package/dist/contracts/loops.contract.js.map +1 -1
  73. package/dist/contracts/netdisk.contract.d.ts +3 -3
  74. package/dist/contracts/netdisk.contract.d.ts.map +1 -1
  75. package/dist/contracts/netdisk.contract.js +5 -4
  76. package/dist/contracts/netdisk.contract.js.map +1 -1
  77. package/dist/contracts/panels.contract.d.ts +3 -3
  78. package/dist/contracts/panels.contract.js +4 -4
  79. package/dist/contracts/panels.contract.js.map +1 -1
  80. package/dist/contracts/personas.contract.d.ts +8 -8
  81. package/dist/contracts/personas.contract.d.ts.map +1 -1
  82. package/dist/contracts/personas.contract.js +10 -9
  83. package/dist/contracts/personas.contract.js.map +1 -1
  84. package/dist/contracts/ports.contract.d.ts +3 -3
  85. package/dist/contracts/ports.contract.d.ts.map +1 -1
  86. package/dist/contracts/ports.contract.js +5 -4
  87. package/dist/contracts/ports.contract.js.map +1 -1
  88. package/dist/contracts/prepush.contract.d.ts +3 -3
  89. package/dist/contracts/prepush.contract.js +4 -4
  90. package/dist/contracts/prepush.contract.js.map +1 -1
  91. package/dist/contracts/providers.contract.d.ts +2 -2
  92. package/dist/contracts/providers.contract.d.ts.map +1 -1
  93. package/dist/contracts/providers.contract.js +5 -3
  94. package/dist/contracts/providers.contract.js.map +1 -1
  95. package/dist/contracts/public.contract.d.ts +3 -3
  96. package/dist/contracts/public.contract.js +4 -4
  97. package/dist/contracts/public.contract.js.map +1 -1
  98. package/dist/contracts/push.contract.d.ts +4 -4
  99. package/dist/contracts/push.contract.d.ts.map +1 -1
  100. package/dist/contracts/push.contract.js +9 -5
  101. package/dist/contracts/push.contract.js.map +1 -1
  102. package/dist/contracts/safety.contract.d.ts +3 -3
  103. package/dist/contracts/safety.contract.js +4 -4
  104. package/dist/contracts/safety.contract.js.map +1 -1
  105. package/dist/contracts/secrets.contract.d.ts +9 -9
  106. package/dist/contracts/secrets.contract.d.ts.map +1 -1
  107. package/dist/contracts/secrets.contract.js +13 -10
  108. package/dist/contracts/secrets.contract.js.map +1 -1
  109. package/dist/contracts/sessions.contract.d.ts +2 -2
  110. package/dist/contracts/sessions.contract.d.ts.map +1 -1
  111. package/dist/contracts/sessions.contract.js +5 -3
  112. package/dist/contracts/sessions.contract.js.map +1 -1
  113. package/dist/contracts/settings.contract.d.ts +11 -9
  114. package/dist/contracts/settings.contract.d.ts.map +1 -1
  115. package/dist/contracts/settings.contract.js +11 -10
  116. package/dist/contracts/settings.contract.js.map +1 -1
  117. package/dist/contracts/share.contract.d.ts +4 -4
  118. package/dist/contracts/share.contract.js +5 -5
  119. package/dist/contracts/share.contract.js.map +1 -1
  120. package/dist/contracts/skills.contract.d.ts +5 -5
  121. package/dist/contracts/skills.contract.js +6 -6
  122. package/dist/contracts/skills.contract.js.map +1 -1
  123. package/dist/contracts/system.contract.d.ts +22 -19
  124. package/dist/contracts/system.contract.d.ts.map +1 -1
  125. package/dist/contracts/system.contract.js +27 -20
  126. package/dist/contracts/system.contract.js.map +1 -1
  127. package/dist/contracts/translator.contract.d.ts +5 -5
  128. package/dist/contracts/translator.contract.js +6 -6
  129. package/dist/contracts/translator.contract.js.map +1 -1
  130. package/dist/contracts/usage.contract.d.ts +4 -4
  131. package/dist/contracts/usage.contract.js +5 -5
  132. package/dist/contracts/usage.contract.js.map +1 -1
  133. package/dist/contracts/vpn.contract.d.ts +4 -4
  134. package/dist/contracts/vpn.contract.d.ts.map +1 -1
  135. package/dist/contracts/vpn.contract.js +6 -5
  136. package/dist/contracts/vpn.contract.js.map +1 -1
  137. package/dist/contracts/workflows.contract.d.ts +9 -9
  138. package/dist/contracts/workflows.contract.js +10 -10
  139. package/dist/contracts/workflows.contract.js.map +1 -1
  140. package/dist/contracts/workspace.contract.d.ts +30 -30
  141. package/dist/contracts/workspace.contract.d.ts.map +1 -1
  142. package/dist/contracts/workspace.contract.js +46 -31
  143. package/dist/contracts/workspace.contract.js.map +1 -1
  144. package/dist/events/land-breakage.d.ts +4 -0
  145. package/dist/events/land-breakage.d.ts.map +1 -0
  146. package/dist/events/land-breakage.js +4 -0
  147. package/dist/events/land-breakage.js.map +1 -0
  148. package/dist/events/system-events.d.ts +2 -0
  149. package/dist/events/system-events.d.ts.map +1 -1
  150. package/dist/index.d.ts +9379 -9350
  151. package/dist/index.d.ts.map +1 -1
  152. package/dist/index.js +13 -1
  153. package/dist/index.js.map +1 -1
  154. package/dist/protocol/procedure-types.d.ts +10 -0
  155. package/dist/protocol/procedure-types.d.ts.map +1 -0
  156. package/dist/protocol/procedure-types.js +2 -0
  157. package/dist/protocol/procedure-types.js.map +1 -0
  158. package/dist/protocol/raw-routes.d.ts +417 -0
  159. package/dist/protocol/raw-routes.d.ts.map +1 -0
  160. package/dist/protocol/raw-routes.js +140 -0
  161. package/dist/protocol/raw-routes.js.map +1 -0
  162. package/dist/protocol/route-meta.d.ts +18 -0
  163. package/dist/protocol/route-meta.d.ts.map +1 -0
  164. package/dist/protocol/route-meta.js +3 -0
  165. package/dist/protocol/route-meta.js.map +1 -0
  166. package/dist/protocol/routes.d.ts +3 -0
  167. package/dist/protocol/routes.d.ts.map +1 -1
  168. package/dist/protocol/routes.js +47 -14
  169. package/dist/protocol/routes.js.map +1 -1
  170. package/dist/schemas/agent.d.ts +33 -0
  171. package/dist/schemas/agent.d.ts.map +1 -1
  172. package/dist/schemas/agent.js +22 -3
  173. package/dist/schemas/agent.js.map +1 -1
  174. package/dist/schemas/agents.d.ts +4 -0
  175. package/dist/schemas/agents.d.ts.map +1 -1
  176. package/dist/schemas/agents.js +4 -0
  177. package/dist/schemas/agents.js.map +1 -1
  178. package/dist/schemas/automations.d.ts +1 -0
  179. package/dist/schemas/automations.d.ts.map +1 -1
  180. package/dist/schemas/git/git.d.ts +3 -0
  181. package/dist/schemas/git/git.d.ts.map +1 -1
  182. package/dist/schemas/settings.d.ts +1 -0
  183. package/dist/schemas/settings.d.ts.map +1 -1
  184. package/dist/schemas/settings.js +4 -0
  185. package/dist/schemas/settings.js.map +1 -1
  186. package/dist/state/definition.d.ts +4 -0
  187. package/dist/state/definition.d.ts.map +1 -1
  188. package/dist/state/history-state.d.ts.map +1 -1
  189. package/dist/state/history-state.js +2 -12
  190. package/dist/state/history-state.js.map +1 -1
  191. package/dist/state/landed-commit.d.ts +4 -0
  192. package/dist/state/landed-commit.d.ts.map +1 -0
  193. package/dist/state/landed-commit.js +12 -0
  194. package/dist/state/landed-commit.js.map +1 -0
  195. package/package.json +5 -5
  196. package/src/contracts/accounts.contract.ts +7 -7
  197. package/src/contracts/activity.contract.ts +3 -3
  198. package/src/contracts/agent.contract.ts +25 -11
  199. package/src/contracts/agents.contract.ts +48 -30
  200. package/src/contracts/approvals.contract.ts +4 -4
  201. package/src/contracts/areas.contract.ts +5 -4
  202. package/src/contracts/automations.contract.ts +12 -12
  203. package/src/contracts/capabilities.contract.ts +23 -14
  204. package/src/contracts/chores.contract.ts +4 -4
  205. package/src/contracts/ci.contract.ts +6 -6
  206. package/src/contracts/diff.contract.ts +2 -2
  207. package/src/contracts/endpoints.contract.ts +5 -5
  208. package/src/contracts/exit.contract.ts +11 -8
  209. package/src/contracts/extensions.contract.ts +18 -18
  210. package/src/contracts/git.contract.ts +46 -46
  211. package/src/contracts/history.contract.ts +5 -5
  212. package/src/contracts/intentic.contract.ts +5 -4
  213. package/src/contracts/inventory.contract.ts +4 -4
  214. package/src/contracts/issues.contract.ts +6 -6
  215. package/src/contracts/logs.contract.ts +8 -4
  216. package/src/contracts/loops.contract.ts +7 -7
  217. package/src/contracts/netdisk.contract.ts +7 -4
  218. package/src/contracts/panels.contract.ts +4 -4
  219. package/src/contracts/personas.contract.ts +10 -9
  220. package/src/contracts/ports.contract.ts +6 -4
  221. package/src/contracts/prepush.contract.ts +4 -4
  222. package/src/contracts/providers.contract.ts +5 -3
  223. package/src/contracts/public.contract.ts +4 -4
  224. package/src/contracts/push.contract.ts +12 -5
  225. package/src/contracts/safety.contract.ts +4 -4
  226. package/src/contracts/secrets.contract.ts +16 -10
  227. package/src/contracts/sessions.contract.ts +6 -3
  228. package/src/contracts/settings.contract.ts +11 -10
  229. package/src/contracts/share.contract.ts +5 -5
  230. package/src/contracts/skills.contract.ts +6 -6
  231. package/src/contracts/system.contract.ts +32 -20
  232. package/src/contracts/translator.contract.ts +6 -6
  233. package/src/contracts/usage.contract.ts +5 -5
  234. package/src/contracts/vpn.contract.ts +8 -5
  235. package/src/contracts/workflows.contract.ts +10 -10
  236. package/src/contracts/workspace.contract.ts +49 -31
  237. package/src/events/land-breakage.ts +11 -0
  238. package/src/index.ts +23 -1
  239. package/src/models/capability-ledger.test.ts +1 -1
  240. package/src/protocol/procedure-types.ts +24 -0
  241. package/src/protocol/raw-routes.ts +191 -0
  242. package/src/protocol/route-meta.ts +39 -0
  243. package/src/protocol/routes.test.ts +65 -2
  244. package/src/protocol/routes.ts +88 -27
  245. package/src/schemas/agent.test.ts +66 -0
  246. package/src/schemas/agent.ts +184 -154
  247. package/src/schemas/agents.ts +6 -0
  248. package/src/schemas/settings.ts +9 -0
  249. package/src/state/history-state.ts +14 -29
  250. package/src/state/landed-commit.test.ts +18 -0
  251. package/src/state/landed-commit.ts +17 -0
@@ -1,4 +1,4 @@
1
- import { oc } from "@orpc/contract";
1
+ import { procedure } from "../protocol/route-meta.js";
2
2
  import { streamOf } from "../protocol/routes.js";
3
3
  import { IntenticLineSchema } from "../events/system-events.js";
4
4
  import {
@@ -18,10 +18,13 @@ import { MarketplaceRequestSchema, MarketplaceSchema } from "../schemas/marketpl
18
18
  import { RemoteRefsRequestSchema, RemoteRefsSchema } from "../schemas/git/remote-refs.js";
19
19
  import { OkSchema } from "../schemas/shared.js";
20
20
 
21
+ // Connected services name accounts and what this sandbox reaches: the operating tier's, reads included, and no token's.
22
+ const capabilityRoute = procedure.meta({ floor: "maintainer", control: "never" });
23
+
21
24
  // The sandbox's unified capability manifest, spanning `list`/`add`/`remove`/`status`/`marketplace`. A VAULTED marker
22
25
  // with nothing stored behind it is refused rather than silently written.
23
26
  export const capabilitiesContract = {
24
- list: oc
27
+ list: capabilityRoute
25
28
  .route({
26
29
  method: "GET",
27
30
  path: "/capabilities",
@@ -30,7 +33,7 @@ export const capabilitiesContract = {
30
33
  "Each connection with its live state, the settings that are safe to show, and the names of the credentials it holds. The values of those credentials are never in the answer, on any route but one.",
31
34
  })
32
35
  .output(CapabilitiesListSchema),
33
- add: oc
36
+ add: capabilityRoute
34
37
  .route({
35
38
  method: "POST",
36
39
  path: "/capabilities",
@@ -41,7 +44,7 @@ export const capabilitiesContract = {
41
44
  .input(CapabilitySchema)
42
45
  .output(streamOf(IntenticLineSchema)),
43
46
  // A credential the caller is keeping arrives as VAULTED here too, so an edit can be tested without retyping a key.
44
- probe: oc
47
+ probe: capabilityRoute
45
48
  .route({
46
49
  method: "POST",
47
50
  path: "/capabilities/probe",
@@ -49,9 +52,11 @@ export const capabilitiesContract = {
49
52
  description:
50
53
  "Dials the service the way this connection would and hands back what it said, before anything is written. The answer is the service's own confirmation or its exact refusal, so a wrong token or an unreachable host is found on the form rather than on a card afterwards.",
51
54
  })
55
+ // Sends a stored key to a caller-supplied host: withheld from the panel token every panel process holds.
56
+ .meta({ panel: false })
52
57
  .input(CapabilitySchema)
53
58
  .output(CapabilityProbeSchema),
54
- remove: oc
59
+ remove: capabilityRoute
55
60
  .route({
56
61
  method: "DELETE",
57
62
  path: "/capabilities/{id}",
@@ -61,7 +66,7 @@ export const capabilitiesContract = {
61
66
  })
62
67
  .input(CapabilityIdParamSchema)
63
68
  .output(OkSchema),
64
- rename: oc
69
+ rename: capabilityRoute
65
70
  .route({
66
71
  method: "POST",
67
72
  path: "/capabilities/{id}/rename",
@@ -72,7 +77,7 @@ export const capabilitiesContract = {
72
77
  .input(CapabilityRenameSchema)
73
78
  .output(OkSchema),
74
79
  // Called by the /secrets page's edit action.
75
- setSecret: oc
80
+ setSecret: capabilityRoute
76
81
  .route({
77
82
  method: "POST",
78
83
  path: "/capabilities/{id}/secret",
@@ -81,7 +86,7 @@ export const capabilitiesContract = {
81
86
  })
82
87
  .input(CapabilitySecretInputSchema)
83
88
  .output(OkSchema),
84
- status: oc
89
+ status: capabilityRoute
85
90
  .route({
86
91
  method: "GET",
87
92
  path: "/capabilities/{id}/status",
@@ -91,7 +96,7 @@ export const capabilitiesContract = {
91
96
  .input(CapabilityIdParamSchema)
92
97
  .output(CapabilityStatusSchema),
93
98
  // Gated by `permissions.daemon` in the manifest (ext-deployments reads its Komodo key pair this way).
94
- connection: oc
99
+ connection: capabilityRoute
95
100
  .route({
96
101
  method: "GET",
97
102
  path: "/capabilities/{id}/connection",
@@ -99,9 +104,11 @@ export const capabilitiesContract = {
99
104
  description:
100
105
  "The one call that hands back stored secrets, so an extension's own backend can dial the service behind a connection. Never answered for a signed-in person: only a machine credential reaches it, and an extension's only if its manifest asked for this route out loud at install time.",
101
106
  })
107
+ // Answers with the secrets included: withheld from the panel token every panel process holds.
108
+ .meta({ panel: false })
102
109
  .input(CapabilityIdParamSchema)
103
110
  .output(CapabilityConnectionSchema),
104
- marketplace: oc
111
+ marketplace: capabilityRoute
105
112
  .route({
106
113
  method: "POST",
107
114
  path: "/capabilities/marketplace",
@@ -111,7 +118,7 @@ export const capabilitiesContract = {
111
118
  .input(MarketplaceRequestSchema)
112
119
  .output(MarketplaceSchema),
113
120
  // What the install form pins to, so nobody has to read a commit sha off a web page and paste it.
114
- refs: oc
121
+ refs: capabilityRoute
115
122
  .route({
116
123
  method: "POST",
117
124
  path: "/capabilities/refs",
@@ -121,7 +128,7 @@ export const capabilitiesContract = {
121
128
  })
122
129
  .input(RemoteRefsRequestSchema)
123
130
  .output(RemoteRefsSchema),
124
- dismiss: oc
131
+ dismiss: capabilityRoute
125
132
  .route({
126
133
  method: "DELETE",
127
134
  path: "/capabilities/recommendations/{entry}",
@@ -132,7 +139,7 @@ export const capabilitiesContract = {
132
139
  .input(CapabilityEntryParamSchema)
133
140
  .output(OkSchema),
134
141
  // Runs the capability's declared `loginCommand` in the terminal session the panel attaches to.
135
- login: oc
142
+ login: capabilityRoute
136
143
  .route({
137
144
  method: "POST",
138
145
  path: "/capabilities/{id}/login",
@@ -143,7 +150,7 @@ export const capabilitiesContract = {
143
150
  .input(CapabilityIdParamSchema)
144
151
  .output(CapabilityLoginSchema),
145
152
  // The seed comes from the config field the card marks `totp`.
146
- otp: oc
153
+ otp: capabilityRoute
147
154
  .route({
148
155
  method: "GET",
149
156
  path: "/capabilities/{id}/otp",
@@ -151,6 +158,8 @@ export const capabilitiesContract = {
151
158
  description:
152
159
  "Generates a single two-factor code from a stored seed. The one credential-adjacent read an agent is allowed, and it is safe because a code expires in seconds and never reveals the seed, so an agent can answer a prompt without ever holding the factor.",
153
160
  })
161
+ // The `otp` CLI mints a code on the agent token; it never reads the seed behind it.
162
+ .meta({ agent: true })
154
163
  .input(CapabilityIdParamSchema)
155
164
  .output(CapabilityOtpSchema),
156
165
  };
@@ -1,4 +1,4 @@
1
- import { oc } from "@orpc/contract";
1
+ import { procedure } from "../protocol/route-meta.js";
2
2
  import { ChoreLedgerWriteSchema, ChoreProbeRequestSchema, ChoresReportSchema } from "../schemas/maintenance.js";
3
3
  import { OkSchema } from "../schemas/shared.js";
4
4
 
@@ -6,7 +6,7 @@ import { OkSchema } from "../schemas/shared.js";
6
6
  // agent (`POST /agent`), reusing its worktree, status, cost and transcript rather than duplicating a launcher here.
7
7
  export const choresContract = {
8
8
  // Polled by both the rail badge and the panel.
9
- list: oc
9
+ list: procedure
10
10
  .route({
11
11
  method: "GET",
12
12
  path: "/chores",
@@ -15,7 +15,7 @@ export const choresContract = {
15
15
  "Every repo's standing evidence in one read: what the last measurement found and how old it is, the cheap signals that are always current, and what has already been decided about each.",
16
16
  })
17
17
  .output(ChoresReportSchema),
18
- probe: oc
18
+ probe: procedure
19
19
  .route({
20
20
  method: "POST",
21
21
  path: "/chores/probe",
@@ -26,7 +26,7 @@ export const choresContract = {
26
26
  .input(ChoreProbeRequestSchema)
27
27
  .output(OkSchema),
28
28
  // Also how a snooze is recorded, upserted the same way as a verdict.
29
- record: oc
29
+ record: procedure
30
30
  .route({
31
31
  method: "POST",
32
32
  path: "/chores/ledger",
@@ -1,4 +1,4 @@
1
- import { oc } from "@orpc/contract";
1
+ import { procedure } from "../protocol/route-meta.js";
2
2
  import {
3
3
  CiFixParamSchema,
4
4
  CiFixResponseSchema,
@@ -14,7 +14,7 @@ import { OkSchema } from "../schemas/shared.js";
14
14
  // (/ci/webhook/:host) is a plain Hono route, vendors can't do Google ID tokens, so it lives outside this
15
15
  // contract, like /automations/{id}/fire.
16
16
  export const ciContract = {
17
- runs: oc
17
+ runs: procedure
18
18
  .route({
19
19
  method: "GET",
20
20
  path: "/ci/runs",
@@ -23,7 +23,7 @@ export const ciContract = {
23
23
  "What the forges are reporting for every workspace repo that has a remote, served from a cache and filled in on demand. Repos whose notifications are not wired up say so.",
24
24
  })
25
25
  .output(CiRunsResponseSchema),
26
- rerun: oc
26
+ rerun: procedure
27
27
  .route({
28
28
  method: "POST",
29
29
  path: "/ci/runs/rerun",
@@ -32,7 +32,7 @@ export const ciContract = {
32
32
  })
33
33
  .input(CiRunParamSchema)
34
34
  .output(OkSchema),
35
- cancel: oc
35
+ cancel: procedure
36
36
  .route({
37
37
  method: "POST",
38
38
  path: "/ci/runs/cancel",
@@ -41,7 +41,7 @@ export const ciContract = {
41
41
  })
42
42
  .input(CiRunParamSchema)
43
43
  .output(OkSchema),
44
- jobs: oc
44
+ jobs: procedure
45
45
  .route({
46
46
  method: "POST",
47
47
  path: "/ci/runs/jobs",
@@ -50,7 +50,7 @@ export const ciContract = {
50
50
  })
51
51
  .input(CiRunParamSchema)
52
52
  .output(CiJobsResponseSchema),
53
- fix: oc
53
+ fix: procedure
54
54
  .route({
55
55
  method: "POST",
56
56
  path: "/ci/fix",
@@ -1,10 +1,10 @@
1
- import { oc } from "@orpc/contract";
1
+ import { procedure } from "../protocol/route-meta.js";
2
2
  import { DerivedDiffSchema, DiffSourceQuerySchema } from "../schemas/diff.js";
3
3
 
4
4
  // What a diff's two sides are besides text: the byte route (/diff/raw) is plain Hono since it streams a body; the
5
5
  // derived-text route is here, answering both sides in one call so they render together.
6
6
  export const diffContract = {
7
- derived: oc
7
+ derived: procedure
8
8
  .route({
9
9
  method: "GET",
10
10
  path: "/diff/derived",
@@ -1,4 +1,4 @@
1
- import { oc } from "@orpc/contract";
1
+ import { procedure } from "../protocol/route-meta.js";
2
2
  import { z } from "zod";
3
3
  import { CapabilityIdParamSchema } from "../schemas/capabilities.js";
4
4
  import { ModelsSchema } from "../schemas/providers/provider-oauth.js";
@@ -87,7 +87,7 @@ export const LocalModelFitSchema = z.object({
87
87
  export type LocalModelFitResponse = z.infer<typeof LocalModelFitSchema>;
88
88
 
89
89
  export const endpointsContract = {
90
- models: oc
90
+ models: procedure
91
91
  .route({
92
92
  method: "GET",
93
93
  path: "/endpoints/{id}/models",
@@ -97,7 +97,7 @@ export const endpointsContract = {
97
97
  })
98
98
  .input(CapabilityIdParamSchema)
99
99
  .output(ModelsSchema),
100
- trial: oc
100
+ trial: procedure
101
101
  .route({
102
102
  method: "GET",
103
103
  path: "/endpoints/trial/status",
@@ -108,7 +108,7 @@ export const endpointsContract = {
108
108
  .output(TrialStatusSchema),
109
109
  // Sized against this machine rather than a table in the browser, because the numbers that matter (a cgroup cap, a
110
110
  // GPU that may not be passed through, weights already on disk) are only knowable in here.
111
- localModelFit: oc
111
+ localModelFit: procedure
112
112
  .route({
113
113
  method: "GET",
114
114
  path: "/endpoints/local-model/fit",
@@ -119,7 +119,7 @@ export const endpointsContract = {
119
119
  .output(LocalModelFitSchema),
120
120
  // Start or stop fetching the instant model's weights before anyone has asked for them, so the first local turn does
121
121
  // not begin with a download. Idempotent: starting twice joins the transfer already running.
122
- localModelPrefetch: oc
122
+ localModelPrefetch: procedure
123
123
  .route({
124
124
  method: "POST",
125
125
  path: "/endpoints/local-model/prefetch",
@@ -1,15 +1,18 @@
1
- import { oc } from "@orpc/contract";
1
+ import { procedure } from "../protocol/route-meta.js";
2
2
  import { streamOf } from "../protocol/routes.js";
3
3
  import { IntenticLineSchema } from "../events/system-events.js";
4
4
  import { ExitCountriesSchema, ExitIdParamSchema, ExitListSchema, ExitObservationSchema, ExitUseInputSchema } from "../schemas/exit.js";
5
5
  import { OkSchema } from "../schemas/shared.js";
6
6
 
7
+ // The agent's `exit` CLI operates these on the agent token; a control token never reaches them.
8
+ const exitRoute = procedure.meta({ agent: true, control: "never" });
9
+
7
10
  // An exit is added as an `exit` capability; started, moved and rotated here, since switching country is a
8
11
  // runtime operation done both by the operator and by the agent's `exit` command on PATH. Each exit publishes an opt-in
9
12
  // SOCKS proxy; the sandbox's default route, model endpoint and reachability tunnel never move.
10
13
  export const exitContract = {
11
14
  // Drives the capability card, the account picker and `geo list` (the CLI is `geo`; `exit` is a shell builtin).
12
- list: oc
15
+ list: exitRoute
13
16
  .route({
14
17
  method: "GET",
15
18
  path: "/exit",
@@ -19,7 +22,7 @@ export const exitContract = {
19
22
  })
20
23
  .output(ExitListSchema),
21
24
  // "Provider" is Tor's directory, VPN Gate's CSV, or pasted confs; this is what auto-fills the country picker.
22
- countries: oc
25
+ countries: exitRoute
23
26
  .route({
24
27
  method: "GET",
25
28
  path: "/exit/{id}/countries",
@@ -29,7 +32,7 @@ export const exitContract = {
29
32
  })
30
33
  .input(ExitIdParamSchema)
31
34
  .output(ExitCountriesSchema),
32
- start: oc
35
+ start: exitRoute
33
36
  .route({
34
37
  method: "POST",
35
38
  path: "/exit/{id}/start",
@@ -39,7 +42,7 @@ export const exitContract = {
39
42
  })
40
43
  .input(ExitIdParamSchema)
41
44
  .output(streamOf(IntenticLineSchema)),
42
- use: oc
45
+ use: exitRoute
43
46
  .route({
44
47
  method: "POST",
45
48
  path: "/exit/{id}/use",
@@ -50,7 +53,7 @@ export const exitContract = {
50
53
  .input(ExitUseInputSchema)
51
54
  .output(streamOf(IntenticLineSchema)),
52
55
  // Cheap on tor (a control-port signal); a re-dial to another server for everything else.
53
- rotate: oc
56
+ rotate: exitRoute
54
57
  .route({
55
58
  method: "POST",
56
59
  path: "/exit/{id}/rotate",
@@ -60,7 +63,7 @@ export const exitContract = {
60
63
  })
61
64
  .input(ExitIdParamSchema)
62
65
  .output(streamOf(IntenticLineSchema)),
63
- check: oc
66
+ check: exitRoute
64
67
  .route({
65
68
  method: "POST",
66
69
  path: "/exit/{id}/check",
@@ -70,7 +73,7 @@ export const exitContract = {
70
73
  })
71
74
  .input(ExitIdParamSchema)
72
75
  .output(ExitObservationSchema),
73
- stop: oc
76
+ stop: exitRoute
74
77
  .route({
75
78
  method: "POST",
76
79
  path: "/exit/{id}/stop",
@@ -1,4 +1,4 @@
1
- import { oc } from "@orpc/contract";
1
+ import { procedure } from "../protocol/route-meta.js";
2
2
  import { CapabilityIdParamSchema } from "../schemas/capabilities.js";
3
3
  import {
4
4
  ExtensionEnabledInputSchema,
@@ -24,7 +24,7 @@ import { OkSchema } from "../schemas/shared.js";
24
24
  // Installed extensions resolved to their approved manifests. The bundle itself is a plain Hono route, `GET
25
25
  // /extensions/{id}/bundle`, not part of this oRPC contract: raw ESM bytes aren't a JSON payload.
26
26
  export const extensionsContract = {
27
- list: oc
27
+ list: procedure
28
28
  .route({
29
29
  method: "GET",
30
30
  path: "/extensions",
@@ -34,7 +34,7 @@ export const extensionsContract = {
34
34
  })
35
35
  .output(ExtensionsListSchema),
36
36
  // Writes into `.intentic/config/workspace-extensions/<name>/`.
37
- create: oc
37
+ create: procedure
38
38
  .route({
39
39
  method: "POST",
40
40
  path: "/extensions/workspace",
@@ -46,7 +46,7 @@ export const extensionsContract = {
46
46
  .output(WorkspaceExtensionCreatedSchema),
47
47
  // Read the plan first, then send the removal: the plan is the only place the owner is told what else goes, and the
48
48
  // connections it names are not derivable from the manifest alone.
49
- removalPlan: oc
49
+ removalPlan: procedure
50
50
  .route({
51
51
  method: "GET",
52
52
  path: "/extensions/{id}/removal",
@@ -56,7 +56,7 @@ export const extensionsContract = {
56
56
  })
57
57
  .input(CapabilityIdParamSchema)
58
58
  .output(ExtensionRemovalPlanSchema),
59
- remove: oc
59
+ remove: procedure
60
60
  .route({
61
61
  method: "POST",
62
62
  path: "/extensions/{id}/remove",
@@ -66,7 +66,7 @@ export const extensionsContract = {
66
66
  })
67
67
  .input(CapabilityIdParamSchema)
68
68
  .output(ExtensionRemovedSchema),
69
- settings: oc
69
+ settings: procedure
70
70
  .route({
71
71
  method: "GET",
72
72
  path: "/extensions/{id}/settings",
@@ -75,7 +75,7 @@ export const extensionsContract = {
75
75
  })
76
76
  .input(CapabilityIdParamSchema)
77
77
  .output(ExtensionSettingsSchema),
78
- setSettings: oc
78
+ setSettings: procedure
79
79
  .route({
80
80
  method: "POST",
81
81
  path: "/extensions/{id}/settings",
@@ -86,7 +86,7 @@ export const extensionsContract = {
86
86
  .input(ExtensionSettingsInputSchema)
87
87
  .output(OkSchema),
88
88
  // The Extensions tab states which of these apply to a given extension.
89
- setEnabled: oc
89
+ setEnabled: procedure
90
90
  .route({
91
91
  method: "POST",
92
92
  path: "/extensions/{id}/enabled",
@@ -97,7 +97,7 @@ export const extensionsContract = {
97
97
  .input(ExtensionEnabledInputSchema)
98
98
  .output(OkSchema),
99
99
  // The permission gate that produces these counts runs in the browser (apiImpl.ts).
100
- recordUsage: oc
100
+ recordUsage: procedure
101
101
  .route({
102
102
  method: "POST",
103
103
  path: "/extensions/usage",
@@ -107,7 +107,7 @@ export const extensionsContract = {
107
107
  })
108
108
  .input(ExtensionUsageBatchSchema)
109
109
  .output(OkSchema),
110
- readiness: oc
110
+ readiness: procedure
111
111
  .route({
112
112
  method: "GET",
113
113
  path: "/extensions/{id}/readiness",
@@ -119,7 +119,7 @@ export const extensionsContract = {
119
119
  .output(ExtensionReadinessSchema),
120
120
  // The extensions list itself carries what the periodic registry check found (update/advisory/health per row); these
121
121
  // routes are the verbs around it.
122
- checkUpdates: oc
122
+ checkUpdates: procedure
123
123
  .route({
124
124
  method: "POST",
125
125
  path: "/extensions/updates/check",
@@ -128,7 +128,7 @@ export const extensionsContract = {
128
128
  "Compares every installed extension against its source and reports what is newer, what carries an advisory and what looks unhealthy. This also happens on a schedule; call it to check on demand.",
129
129
  })
130
130
  .output(ExtensionUpdatesCheckedSchema),
131
- updatePreview: oc
131
+ updatePreview: procedure
132
132
  .route({
133
133
  method: "POST",
134
134
  path: "/extensions/{id}/update/preview",
@@ -138,7 +138,7 @@ export const extensionsContract = {
138
138
  })
139
139
  .input(ExtensionUpdateActionSchema)
140
140
  .output(ExtensionUpdatePreviewSchema),
141
- applyUpdate: oc
141
+ applyUpdate: procedure
142
142
  .route({
143
143
  method: "POST",
144
144
  path: "/extensions/{id}/update",
@@ -148,7 +148,7 @@ export const extensionsContract = {
148
148
  })
149
149
  .input(ExtensionUpdateActionSchema)
150
150
  .output(ExtensionUpdateAppliedSchema),
151
- revert: oc
151
+ revert: procedure
152
152
  .route({
153
153
  method: "POST",
154
154
  path: "/extensions/{id}/revert",
@@ -157,7 +157,7 @@ export const extensionsContract = {
157
157
  })
158
158
  .input(CapabilityIdParamSchema)
159
159
  .output(ExtensionUpdateAppliedSchema),
160
- setUpdatePolicy: oc
160
+ setUpdatePolicy: procedure
161
161
  .route({
162
162
  method: "POST",
163
163
  path: "/extensions/{id}/update-policy",
@@ -168,7 +168,7 @@ export const extensionsContract = {
168
168
  .input(ExtensionUpdatePolicyInputSchema)
169
169
  .output(OkSchema),
170
170
  // Declared via `contributes.processes`; the terminals list shows each one's log as `svc-ext-<id>-<name>`.
171
- processStatus: oc
171
+ processStatus: procedure
172
172
  .route({
173
173
  method: "GET",
174
174
  path: "/extensions/{id}/processes/{name}",
@@ -177,7 +177,7 @@ export const extensionsContract = {
177
177
  })
178
178
  .input(ExtensionProcessParamSchema)
179
179
  .output(ExtensionProcessStatusSchema),
180
- processStart: oc
180
+ processStart: procedure
181
181
  .route({
182
182
  method: "POST",
183
183
  path: "/extensions/{id}/processes/{name}/start",
@@ -186,7 +186,7 @@ export const extensionsContract = {
186
186
  })
187
187
  .input(ExtensionProcessParamSchema)
188
188
  .output(OkSchema),
189
- processStop: oc
189
+ processStop: procedure
190
190
  .route({
191
191
  method: "POST",
192
192
  path: "/extensions/{id}/processes/{name}/stop",