@mnemom/mnemom 0.17.33 → 0.17.34-next.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 (236) hide show
  1. package/dist/base-url-proxy.mjs +18 -4
  2. package/dist/commands/agent-config.js +5 -1
  3. package/dist/commands/agent-doctor.d.ts +9 -0
  4. package/dist/commands/agent-doctor.js +4 -0
  5. package/dist/commands/agent-session.d.ts +1 -2
  6. package/dist/commands/agent-session.js +1 -2
  7. package/dist/commands/agent-setup.d.ts +6 -0
  8. package/dist/commands/agent-setup.js +12 -1
  9. package/dist/commands/agent-share-render.d.ts +1 -1
  10. package/dist/commands/agent-share-render.js +1 -1
  11. package/dist/commands/agent.d.ts +26 -0
  12. package/dist/commands/agent.js +228 -53
  13. package/dist/commands/durable-doctor.d.ts +50 -0
  14. package/dist/commands/durable-doctor.js +186 -0
  15. package/dist/commands/durable-lock.d.ts +254 -0
  16. package/dist/commands/durable-lock.js +595 -0
  17. package/dist/commands/durable-sessions.d.ts +87 -0
  18. package/dist/commands/durable-sessions.js +303 -0
  19. package/dist/commands/durable-verbs.d.ts +116 -0
  20. package/dist/commands/durable-verbs.js +393 -0
  21. package/dist/commands/protection.js +1 -1
  22. package/dist/commands/scan.d.ts +97 -0
  23. package/dist/commands/scan.js +238 -0
  24. package/dist/durable/flock.d.ts +26 -0
  25. package/dist/durable/flock.js +80 -0
  26. package/dist/durable/launch-spec.d.ts +7 -1
  27. package/dist/durable/launch-spec.js +10 -3
  28. package/dist/durable/seat-proxy-entry.d.ts +11 -0
  29. package/dist/durable/seat-proxy-entry.js +25 -0
  30. package/dist/durable/seat-proxy.d.ts +107 -0
  31. package/dist/durable/seat-proxy.js +599 -0
  32. package/dist/durable/seat-socket.d.ts +46 -0
  33. package/dist/durable/seat-socket.js +179 -0
  34. package/dist/durable/seat-spec-validator.d.ts +28 -0
  35. package/dist/durable/seat-spec-validator.js +59 -0
  36. package/dist/durable/test-mode.mjs +81 -0
  37. package/dist/durable/turn-chain.d.ts +55 -0
  38. package/dist/durable/turn-chain.js +178 -0
  39. package/dist/host/auto-continue.d.ts +67 -0
  40. package/dist/host/auto-continue.js +118 -0
  41. package/dist/host/bootid.d.ts +13 -0
  42. package/dist/host/bootid.js +41 -0
  43. package/dist/host/client.d.ts +123 -0
  44. package/dist/host/client.js +171 -0
  45. package/dist/host/commands.d.ts +2 -0
  46. package/dist/host/commands.js +122 -0
  47. package/dist/host/control.d.ts +33 -0
  48. package/dist/host/control.js +144 -0
  49. package/dist/host/daemon.d.ts +217 -0
  50. package/dist/host/daemon.js +606 -0
  51. package/dist/host/gate.d.ts +46 -0
  52. package/dist/host/gate.js +82 -0
  53. package/dist/host/grant.d.ts +24 -0
  54. package/dist/host/grant.js +24 -0
  55. package/dist/host/instance.d.ts +35 -0
  56. package/dist/host/instance.js +62 -0
  57. package/dist/host/integrity.d.ts +35 -0
  58. package/dist/host/integrity.js +115 -0
  59. package/dist/host/launchd.d.ts +16 -0
  60. package/dist/host/launchd.js +45 -0
  61. package/dist/host/lock.d.ts +20 -0
  62. package/dist/host/lock.js +63 -0
  63. package/dist/host/owner.d.ts +55 -0
  64. package/dist/host/owner.js +121 -0
  65. package/dist/host/plist.d.ts +16 -0
  66. package/dist/host/plist.js +85 -0
  67. package/dist/host/procs.d.ts +27 -0
  68. package/dist/host/procs.js +105 -0
  69. package/dist/host/run.d.ts +66 -0
  70. package/dist/host/run.js +314 -0
  71. package/dist/host/runtime.d.ts +8 -0
  72. package/dist/host/runtime.js +22 -0
  73. package/dist/host/s1-names.d.ts +22 -0
  74. package/dist/host/s1-names.js +21 -0
  75. package/dist/host/seat-credential.d.ts +27 -0
  76. package/dist/host/seat-credential.js +41 -0
  77. package/dist/host/seat-launch-main.d.ts +1 -0
  78. package/dist/host/seat-launch-main.js +59 -0
  79. package/dist/host/seat-launch.d.ts +116 -0
  80. package/dist/host/seat-launch.js +302 -0
  81. package/dist/host/seat.d.ts +48 -0
  82. package/dist/host/seat.js +149 -0
  83. package/dist/host/state.d.ts +33 -0
  84. package/dist/host/state.js +117 -0
  85. package/dist/host/status.d.ts +101 -0
  86. package/dist/host/status.js +307 -0
  87. package/dist/host/tmux.d.ts +56 -0
  88. package/dist/host/tmux.js +182 -0
  89. package/dist/host/transcript.d.ts +30 -0
  90. package/dist/host/transcript.js +130 -0
  91. package/dist/host/verbs.d.ts +50 -0
  92. package/dist/host/verbs.js +271 -0
  93. package/dist/index.d.ts +8 -6
  94. package/dist/index.js +232 -35
  95. package/dist/lib/agent.d.ts +8 -26
  96. package/dist/lib/agent.js +11 -26
  97. package/dist/lib/api.d.ts +13 -0
  98. package/dist/lib/api.js +8 -0
  99. package/dist/lib/claude-plugin.d.ts +11 -2
  100. package/dist/lib/claude-plugin.js +10 -1
  101. package/dist/lib/durable/api.d.ts +136 -0
  102. package/dist/lib/durable/api.js +220 -0
  103. package/dist/lib/durable/codes.d.ts +8 -0
  104. package/dist/lib/durable/codes.js +2 -0
  105. package/dist/lib/durable/first-turn.d.ts +50 -0
  106. package/dist/lib/durable/first-turn.js +102 -0
  107. package/dist/lib/durable/gate.d.ts +48 -0
  108. package/dist/lib/durable/gate.js +122 -0
  109. package/dist/lib/durable/handover.d.ts +101 -0
  110. package/dist/lib/durable/handover.js +175 -0
  111. package/dist/lib/durable/launch.d.ts +182 -0
  112. package/dist/lib/durable/launch.js +443 -0
  113. package/dist/lib/durable/launching.d.ts +15 -0
  114. package/dist/lib/durable/launching.js +70 -0
  115. package/dist/lib/durable/live.d.ts +194 -0
  116. package/dist/lib/durable/live.js +635 -0
  117. package/dist/lib/durable/refusal.d.ts +57 -0
  118. package/dist/lib/durable/refusal.js +78 -0
  119. package/dist/lib/durable/view.d.ts +83 -0
  120. package/dist/lib/durable/view.js +244 -0
  121. package/dist/lib/experimental.d.ts +0 -9
  122. package/dist/lib/experimental.js +18 -17
  123. package/dist/lib/launcher-config.d.ts +7 -0
  124. package/dist/lib/launcher-config.js +21 -0
  125. package/dist/lib/scan/caps.d.ts +35 -0
  126. package/dist/lib/scan/caps.js +67 -0
  127. package/dist/lib/scan/credential.d.ts +37 -0
  128. package/dist/lib/scan/credential.js +104 -0
  129. package/dist/lib/scan/failure.d.ts +10 -0
  130. package/dist/lib/scan/failure.js +43 -0
  131. package/dist/lib/scan/pr-source.d.ts +57 -0
  132. package/dist/lib/scan/pr-source.js +130 -0
  133. package/dist/lib/scan/record.d.ts +49 -0
  134. package/dist/lib/scan/record.js +85 -0
  135. package/dist/lib/scan/report-email.d.ts +92 -0
  136. package/dist/lib/scan/report-email.js +144 -0
  137. package/dist/lib/scan/report.d.ts +13 -0
  138. package/dist/lib/scan/report.js +30 -0
  139. package/dist/lib/scan/scan.d.ts +64 -0
  140. package/dist/lib/scan/scan.js +182 -0
  141. package/dist/lib/scan/share.d.ts +38 -0
  142. package/dist/lib/scan/share.js +47 -0
  143. package/dist/lib/scan/spend/ai-tool-detect.d.ts +6 -0
  144. package/dist/lib/scan/spend/ai-tool-detect.js +18 -0
  145. package/dist/lib/scan/spend/anthropic-usage.d.ts +57 -0
  146. package/dist/lib/scan/spend/anthropic-usage.js +244 -0
  147. package/dist/lib/scan/spend/cost-corpus.v1.d.ts +56 -0
  148. package/dist/lib/scan/spend/cost-corpus.v1.js +64 -0
  149. package/dist/lib/scan/spend/prices.d.ts +33 -0
  150. package/dist/lib/scan/spend/prices.js +57 -0
  151. package/dist/lib/scan/spend/spend-estimate.d.ts +30 -0
  152. package/dist/lib/scan/spend/spend-estimate.js +70 -0
  153. package/dist/lib/scan/spend/spend-tiers.d.ts +25 -0
  154. package/dist/lib/scan/spend/spend-tiers.js +42 -0
  155. package/dist/lib/scan/spend/token-rate.d.ts +30 -0
  156. package/dist/lib/scan/spend/token-rate.js +54 -0
  157. package/dist/lib/session-key.d.ts +41 -0
  158. package/dist/lib/session-key.js +124 -0
  159. package/dist/lib/subscription-login.d.ts +15 -0
  160. package/dist/lib/subscription-login.js +28 -1
  161. package/dist/rc-key-401.mjs +75 -0
  162. package/dist/rc-proxy.mjs +221 -25
  163. package/dist/vendor/durable-contract/index.js +240 -18
  164. package/dist/vendor/shared/durable-contract/admission.d.ts +240 -0
  165. package/dist/vendor/shared/durable-contract/admission.js +533 -0
  166. package/dist/vendor/shared/durable-contract/arm.d.ts +51 -0
  167. package/dist/vendor/shared/durable-contract/arm.js +133 -0
  168. package/dist/vendor/shared/durable-contract/canonical.d.ts +29 -0
  169. package/dist/vendor/shared/durable-contract/canonical.js +98 -0
  170. package/dist/vendor/shared/durable-contract/cell-id.d.ts +22 -0
  171. package/dist/vendor/shared/durable-contract/cell-id.js +38 -0
  172. package/dist/vendor/shared/durable-contract/cli-output.d.ts +342 -0
  173. package/dist/vendor/shared/durable-contract/cli-output.js +201 -0
  174. package/dist/vendor/shared/durable-contract/cli-surface.d.ts +119 -0
  175. package/dist/vendor/shared/durable-contract/cli-surface.js +270 -0
  176. package/dist/vendor/shared/durable-contract/codes.d.ts +537 -0
  177. package/dist/vendor/shared/durable-contract/codes.js +475 -0
  178. package/dist/vendor/shared/durable-contract/constants.d.ts +153 -0
  179. package/dist/vendor/shared/durable-contract/constants.js +179 -0
  180. package/dist/vendor/shared/durable-contract/doors.d.ts +119 -0
  181. package/dist/vendor/shared/durable-contract/doors.js +249 -0
  182. package/dist/vendor/shared/durable-contract/envelope.d.ts +103 -0
  183. package/dist/vendor/shared/durable-contract/envelope.js +317 -0
  184. package/dist/vendor/shared/durable-contract/events.d.ts +147 -0
  185. package/dist/vendor/shared/durable-contract/events.js +630 -0
  186. package/dist/vendor/shared/durable-contract/executor-state.d.ts +41 -0
  187. package/dist/vendor/shared/durable-contract/executor-state.js +32 -0
  188. package/dist/vendor/shared/durable-contract/fixlines.d.ts +318 -0
  189. package/dist/vendor/shared/durable-contract/fixlines.js +483 -0
  190. package/dist/vendor/shared/durable-contract/freeze-record.d.ts +787 -0
  191. package/dist/vendor/shared/durable-contract/freeze-record.js +361 -0
  192. package/dist/vendor/shared/durable-contract/index.d.ts +36 -0
  193. package/dist/vendor/shared/durable-contract/index.js +37 -0
  194. package/dist/vendor/shared/durable-contract/journal-approvals.d.ts +29 -0
  195. package/dist/vendor/shared/durable-contract/journal-approvals.js +60 -0
  196. package/dist/vendor/shared/durable-contract/keys.d.ts +24 -0
  197. package/dist/vendor/shared/durable-contract/keys.js +66 -0
  198. package/dist/vendor/shared/durable-contract/lock.d.ts +128 -0
  199. package/dist/vendor/shared/durable-contract/lock.js +151 -0
  200. package/dist/vendor/shared/durable-contract/names.d.ts +25 -0
  201. package/dist/vendor/shared/durable-contract/names.js +78 -0
  202. package/dist/vendor/shared/durable-contract/owner-verbs.d.ts +175 -0
  203. package/dist/vendor/shared/durable-contract/owner-verbs.js +403 -0
  204. package/dist/vendor/shared/durable-contract/paths.d.ts +23 -0
  205. package/dist/vendor/shared/durable-contract/paths.js +35 -0
  206. package/dist/vendor/shared/durable-contract/pure-fn.d.ts +48 -0
  207. package/dist/vendor/shared/durable-contract/pure-fn.js +89 -0
  208. package/dist/vendor/shared/durable-contract/routes.d.ts +205 -0
  209. package/dist/vendor/shared/durable-contract/routes.js +315 -0
  210. package/dist/vendor/shared/durable-contract/schema.d.ts +126 -0
  211. package/dist/vendor/shared/durable-contract/schema.js +441 -0
  212. package/dist/vendor/shared/durable-contract/seal.d.ts +54 -0
  213. package/dist/vendor/shared/durable-contract/seal.js +99 -0
  214. package/dist/vendor/shared/durable-contract/secret-scope.d.ts +28 -0
  215. package/dist/vendor/shared/durable-contract/secret-scope.js +76 -0
  216. package/dist/vendor/shared/durable-contract/session-id.d.ts +21 -0
  217. package/dist/vendor/shared/durable-contract/session-id.js +58 -0
  218. package/dist/vendor/shared/durable-contract/spec.d.ts +162 -0
  219. package/dist/vendor/shared/durable-contract/spec.js +286 -0
  220. package/dist/vendor/shared/durable-contract/states.d.ts +96 -0
  221. package/dist/vendor/shared/durable-contract/states.js +218 -0
  222. package/dist/vendor/shared/durable-contract/telemetry.d.ts +94 -0
  223. package/dist/vendor/shared/durable-contract/telemetry.js +180 -0
  224. package/dist/vendor/shared/durable-contract/test-mode.d.ts +62 -0
  225. package/dist/vendor/shared/durable-contract/test-mode.js +140 -0
  226. package/dist/vendor/shared/durable-contract/turn.d.ts +57 -0
  227. package/dist/vendor/shared/durable-contract/turn.js +81 -0
  228. package/dist/vendor/shared/durable-contract/vectors.d.ts +191 -0
  229. package/dist/vendor/shared/durable-contract/vectors.js +208 -0
  230. package/package.json +4 -3
  231. package/plugins/integrity-manifest.json +35 -0
  232. package/plugins/mnemom/hooks/hooks.json +15 -1
  233. package/plugins/mnemom/hooks/register.tsx +60 -2
  234. package/plugins/mnemom/hooks/seat-hello.mjs +116 -0
  235. package/dist/commands/agent-implicit-notice.d.ts +0 -31
  236. package/dist/commands/agent-implicit-notice.js +0 -73
@@ -0,0 +1,537 @@
1
+ /**
2
+ * Durable error codes, their HTTP statuses and their closed body fields (BACKBONE codes list,
3
+ * amendments; C06, C10, C11, C16, C19). The body is the shipped error envelope (ruling 14; mnemom-api
4
+ * src/http-errors.ts buildErrorBody, which the gateway uses too):
5
+ * `{error: {code: <code>, message, details?: {fix?, ...closed fields}}}`; durableErrorBody builds it.
6
+ * The RFC 8628 poll endpoints (ENROLL_POLL_ERRORS, the OAuth device token poll) keep
7
+ * `{error: <string>}`.
8
+ */
9
+ export declare const CLAIM_UNAVAILABLE_CAUSES: readonly ["schema", "arm_probe", "entitlement_lookup", "protection_probe", "guard", "lease_cap_config"];
10
+ export type ClaimUnavailableCause = (typeof CLAIM_UNAVAILABLE_CAUSES)[number];
11
+ export declare const UNSUPPORTED_FEATURES: readonly ["tool_classes", "launch_spec_change", "above_limit_raise", "remote_control"];
12
+ export type UnsupportedFeature = (typeof UNSUPPORTED_FEATURES)[number];
13
+ export declare const CWD_KINDS: readonly ["subdirectory", "not_git", "symlink_transcript"];
14
+ export type CwdKind = (typeof CWD_KINDS)[number];
15
+ /** Attestation check `cwd` (spawn-time) causes. */
16
+ export declare const CWD_CHECK_CAUSES: readonly ["missing", "not_toplevel"];
17
+ export type CwdCheckCause = (typeof CWD_CHECK_CAUSES)[number];
18
+ /** Claim attestation checks in M1 order (3 observe-only; 6, 9, 13 cut). `cwd` is the daemon's spawn-time check. */
19
+ export declare const ATTESTATION_CHECKS_M1: readonly ["1", "2", "3", "4", "5", "7", "8", "10", "11", "12", "cwd"];
20
+ export type AttestationCheck = (typeof ATTESTATION_CHECKS_M1)[number];
21
+ export declare const AGENT_CONTAINED_STATUSES: readonly ["paused", "killed"];
22
+ export type DurableSurface = "gateway" | "api" | "cli";
23
+ export interface CodeSpec {
24
+ /** HTTP status; null for a CLI-side refusal that sends no request. */
25
+ readonly status: number | null;
26
+ readonly surfaces: readonly DurableSurface[];
27
+ /** Body fields beyond {error, message, fix}. */
28
+ readonly fields: readonly string[];
29
+ }
30
+ /**
31
+ * Every durable code reachable in M1. `goal_contract_enforce_refused` is the existing gateway 429
32
+ * (gateway/src/index.ts enforce path), listed because durable fixes ride on it (G2 budget variants).
33
+ * Cut codes (durable_wrong_cell 421, durable_host_unattended_off 423, durable_goal_unsealed) are
34
+ * deliberately absent: an M1 build that emits one fails the code-closure check.
35
+ */
36
+ export declare const DURABLE_CODES: {
37
+ readonly durable_admission_unavailable: {
38
+ readonly status: 503;
39
+ readonly surfaces: readonly ["gateway"];
40
+ readonly fields: readonly [];
41
+ };
42
+ readonly durable_key_revoked: {
43
+ readonly status: 401;
44
+ readonly surfaces: readonly ["gateway"];
45
+ readonly fields: readonly [];
46
+ };
47
+ readonly durable_identity_mismatch: {
48
+ readonly status: 409;
49
+ readonly surfaces: readonly ["gateway"];
50
+ readonly fields: readonly [];
51
+ };
52
+ readonly durable_unlocked: {
53
+ readonly status: 410;
54
+ readonly surfaces: readonly ["gateway"];
55
+ readonly fields: readonly [];
56
+ };
57
+ readonly durable_session_ended: {
58
+ readonly status: 410;
59
+ readonly surfaces: readonly ["gateway", "api"];
60
+ readonly fields: readonly ["state", "state_reason"];
61
+ };
62
+ readonly durable_lease_fenced: {
63
+ readonly status: 409;
64
+ readonly surfaces: readonly ["gateway", "api"];
65
+ readonly fields: readonly [];
66
+ };
67
+ readonly durable_session_stopped: {
68
+ readonly status: 423;
69
+ readonly surfaces: readonly ["gateway"];
70
+ readonly fields: readonly ["state", "state_reason"];
71
+ };
72
+ readonly durable_guard_unavailable: {
73
+ readonly status: 503;
74
+ readonly surfaces: readonly ["gateway"];
75
+ readonly fields: readonly [];
76
+ };
77
+ readonly durable_unattended_unavailable: {
78
+ readonly status: 503;
79
+ readonly surfaces: readonly ["gateway"];
80
+ readonly fields: readonly [];
81
+ };
82
+ /** The existing gateway enforce 429 (goal-contract.ts); durable adds only its fix lines. */
83
+ readonly goal_contract_enforce_refused: {
84
+ readonly status: 429;
85
+ readonly surfaces: readonly ["gateway"];
86
+ readonly fields: readonly [];
87
+ };
88
+ /** An mnm_ds_ key on a control route the arm did not run for, on /router (router-auth) or on org metering. */
89
+ readonly durable_route_refused: {
90
+ readonly status: 403;
91
+ readonly surfaces: readonly ["gateway"];
92
+ readonly fields: readonly [];
93
+ };
94
+ /**
95
+ * An executor (or bridge) key presented at any gateway entry point (model routes, control
96
+ * routes, /router, org metering: C04 claim "refused at every gateway entry point").
97
+ */
98
+ readonly durable_executor_key_refused: {
99
+ readonly status: 403;
100
+ readonly surfaces: readonly ["gateway"];
101
+ readonly fields: readonly [];
102
+ };
103
+ readonly durable_only_agent: {
104
+ readonly status: 409;
105
+ readonly surfaces: readonly ["gateway", "api", "cli"];
106
+ readonly fields: readonly [];
107
+ };
108
+ readonly machine_principal_refused: {
109
+ readonly status: 403;
110
+ readonly surfaces: readonly ["api"];
111
+ readonly fields: readonly [];
112
+ };
113
+ /** A device-step verb (unlock, budget raise, contained unpause) with an API-key-only owner credential (final F06). */
114
+ readonly durable_session_login_required: {
115
+ readonly status: 403;
116
+ readonly surfaces: readonly ["api", "cli"];
117
+ readonly fields: readonly [];
118
+ };
119
+ readonly durable_not_owner: {
120
+ readonly status: 403;
121
+ readonly surfaces: readonly ["api"];
122
+ readonly fields: readonly ["owner"];
123
+ };
124
+ readonly durable_agent_contained: {
125
+ readonly status: 409;
126
+ readonly surfaces: readonly ["api"];
127
+ readonly fields: readonly ["status"];
128
+ };
129
+ readonly durable_invalid_transition: {
130
+ readonly status: 409;
131
+ readonly surfaces: readonly ["api"];
132
+ readonly fields: readonly ["from_state", "state_reason", "verb"];
133
+ };
134
+ readonly durable_unsupported: {
135
+ readonly status: 422;
136
+ readonly surfaces: readonly ["api"];
137
+ readonly fields: readonly ["feature"];
138
+ };
139
+ /** An own_lock body key outside LOCK_BODY_KEYS, or a malformed known field (ruling 33.24(1)); field null = not an object. */
140
+ readonly durable_lock_body_invalid: {
141
+ readonly status: 422;
142
+ readonly surfaces: readonly ["api"];
143
+ readonly fields: readonly ["field"];
144
+ };
145
+ /** A non-budget raise or loosening on amend (C07-R07); also a budget raise mixed with one. */
146
+ readonly durable_amend_raise_refused: {
147
+ readonly status: 409;
148
+ readonly surfaces: readonly ["api"];
149
+ readonly fields: readonly ["field"];
150
+ };
151
+ readonly durable_lock_not_entitled: {
152
+ readonly status: 403;
153
+ readonly surfaces: readonly ["api"];
154
+ readonly fields: readonly [];
155
+ };
156
+ readonly durable_lock_mfa_required: {
157
+ readonly status: 403;
158
+ readonly surfaces: readonly ["api"];
159
+ readonly fields: readonly [];
160
+ };
161
+ readonly durable_lock_branch_unprotected: {
162
+ readonly status: 409;
163
+ readonly surfaces: readonly ["api"];
164
+ readonly fields: readonly ["refusals"];
165
+ };
166
+ readonly durable_lock_agent_shared: {
167
+ readonly status: 409;
168
+ readonly surfaces: readonly ["api"];
169
+ readonly fields: readonly ["reason"];
170
+ };
171
+ readonly durable_no_executor: {
172
+ readonly status: 409;
173
+ readonly surfaces: readonly ["api"];
174
+ readonly fields: readonly [];
175
+ };
176
+ /** Retryable: a precondition source (IdP, GitHub, entitlement, schema probe, executor lookup) faulted. */
177
+ readonly durable_precondition_unavailable: {
178
+ readonly status: 503;
179
+ readonly surfaces: readonly ["api"];
180
+ readonly fields: readonly ["retryable"];
181
+ };
182
+ /** CLI-side lock refusal: no request is sent. */
183
+ readonly durable_cwd_not_root: {
184
+ readonly status: null;
185
+ readonly surfaces: readonly ["cli"];
186
+ readonly fields: readonly ["cwd_kind"];
187
+ };
188
+ /** normalizeCellId(CELL_ID) is null at create: fail closed, no row. */
189
+ readonly durable_cell_unmapped: {
190
+ readonly status: 503;
191
+ readonly surfaces: readonly ["api"];
192
+ readonly fields: readonly [];
193
+ };
194
+ readonly invalid_session_name: {
195
+ readonly status: 400;
196
+ readonly surfaces: readonly ["api", "cli"];
197
+ readonly fields: readonly [];
198
+ };
199
+ readonly session_name_in_use: {
200
+ readonly status: 409;
201
+ readonly surfaces: readonly ["api", "cli"];
202
+ readonly fields: readonly [];
203
+ };
204
+ readonly session_locked: {
205
+ readonly status: 409;
206
+ readonly surfaces: readonly ["api", "cli"];
207
+ readonly fields: readonly [];
208
+ };
209
+ readonly session_homed_elsewhere: {
210
+ readonly status: null;
211
+ readonly surfaces: readonly ["cli"];
212
+ readonly fields: readonly ["machine"];
213
+ };
214
+ readonly session_transcript_missing: {
215
+ readonly status: null;
216
+ readonly surfaces: readonly ["cli"];
217
+ readonly fields: readonly [];
218
+ };
219
+ readonly session_registry_unavailable: {
220
+ readonly status: null;
221
+ readonly surfaces: readonly ["cli"];
222
+ readonly fields: readonly [];
223
+ };
224
+ readonly session_resume_conflict: {
225
+ readonly status: null;
226
+ readonly surfaces: readonly ["cli"];
227
+ readonly fields: readonly [];
228
+ };
229
+ readonly session_goal_immutable: {
230
+ readonly status: null;
231
+ readonly surfaces: readonly ["cli"];
232
+ readonly fields: readonly [];
233
+ };
234
+ readonly durable_claim_unavailable: {
235
+ readonly status: 503;
236
+ readonly surfaces: readonly ["api"];
237
+ readonly fields: readonly ["cause"];
238
+ };
239
+ readonly durable_hello_late: {
240
+ readonly status: 409;
241
+ readonly surfaces: readonly ["api"];
242
+ readonly fields: readonly [];
243
+ };
244
+ readonly durable_claim_needs_key: {
245
+ readonly status: 409;
246
+ readonly surfaces: readonly ["api"];
247
+ readonly fields: readonly [];
248
+ };
249
+ readonly durable_claim_lost_race: {
250
+ readonly status: 409;
251
+ readonly surfaces: readonly ["api"];
252
+ readonly fields: readonly ["reason", "live", "cap"];
253
+ };
254
+ readonly durable_claim_ineligible: {
255
+ readonly status: 403;
256
+ readonly surfaces: readonly ["api"];
257
+ readonly fields: readonly ["reason", "state_reason", "check", "state", "wait_reason"];
258
+ };
259
+ readonly durable_claim_rate_limited: {
260
+ readonly status: 429;
261
+ readonly surfaces: readonly ["api"];
262
+ readonly fields: readonly ["retry_after_s"];
263
+ };
264
+ /** Lost CAS race on (session_id, seq). */
265
+ readonly durable_append_conflict: {
266
+ readonly status: 409;
267
+ readonly surfaces: readonly ["api"];
268
+ readonly fields: readonly ["tip_seq"];
269
+ };
270
+ /** Same idempotency key, different content: always this one result (C10-R0 (j)). */
271
+ readonly durable_idempotency_conflict: {
272
+ readonly status: 409;
273
+ readonly surfaces: readonly ["api"];
274
+ readonly fields: readonly ["seq"];
275
+ };
276
+ readonly durable_unknown_kind: {
277
+ readonly status: 422;
278
+ readonly surfaces: readonly ["api"];
279
+ readonly fields: readonly ["kind"];
280
+ };
281
+ /** The caller's writer class may not append this kind (executor, gateway, api lists). */
282
+ readonly durable_writer_refused: {
283
+ readonly status: 403;
284
+ readonly surfaces: readonly ["api"];
285
+ readonly fields: readonly ["kind"];
286
+ };
287
+ readonly durable_refs_invalid: {
288
+ readonly status: 422;
289
+ readonly surfaces: readonly ["api"];
290
+ readonly fields: readonly ["kind", "reason"];
291
+ };
292
+ readonly durable_approval_no_session: {
293
+ readonly status: 401;
294
+ readonly surfaces: readonly ["api"];
295
+ readonly fields: readonly [];
296
+ };
297
+ readonly durable_approval_not_eligible: {
298
+ readonly status: 403;
299
+ readonly surfaces: readonly ["api"];
300
+ readonly fields: readonly [];
301
+ };
302
+ readonly durable_approval_aal_required: {
303
+ readonly status: 403;
304
+ readonly surfaces: readonly ["api"];
305
+ readonly fields: readonly [];
306
+ };
307
+ readonly durable_approval_step_up_stale: {
308
+ readonly status: 403;
309
+ readonly surfaces: readonly ["api"];
310
+ readonly fields: readonly [];
311
+ };
312
+ readonly durable_approval_requester_not_distinct: {
313
+ readonly status: 403;
314
+ readonly surfaces: readonly ["api"];
315
+ readonly fields: readonly [];
316
+ };
317
+ readonly durable_approval_expired: {
318
+ readonly status: 410;
319
+ readonly surfaces: readonly ["api"];
320
+ readonly fields: readonly [];
321
+ };
322
+ readonly durable_approval_consumed: {
323
+ readonly status: 409;
324
+ readonly surfaces: readonly ["api"];
325
+ readonly fields: readonly [];
326
+ };
327
+ /** unlock refused at apply time because another locked session keeps the durable-only flag. */
328
+ readonly durable_unlock_refused: {
329
+ readonly status: 409;
330
+ readonly surfaces: readonly ["api"];
331
+ readonly fields: readonly [];
332
+ };
333
+ /** The caller lacks the entitlement durable.locked. */
334
+ readonly not_entitled: {
335
+ readonly status: 403;
336
+ readonly surfaces: readonly ["api"];
337
+ readonly fields: readonly [];
338
+ };
339
+ /** The declared kind is not in durable.executors (M1 allows 'host' only). */
340
+ readonly kind_not_allowed: {
341
+ readonly status: 403;
342
+ readonly surfaces: readonly ["api"];
343
+ readonly fields: readonly [];
344
+ };
345
+ /** durable_schema_version() does not answer; retryable. */
346
+ readonly schema_unavailable: {
347
+ readonly status: 503;
348
+ readonly surfaces: readonly ["api"];
349
+ readonly fields: readonly ["retryable"];
350
+ };
351
+ /**
352
+ * An mnm_ds_ request whose x-mnemom-contract names another contract than the session's current
353
+ * charter version; refused before any upstream call, with no turn and no event.
354
+ */
355
+ readonly contract_mismatch: {
356
+ readonly status: 409;
357
+ readonly surfaces: readonly ["gateway"];
358
+ readonly fields: readonly ["expected_version"];
359
+ };
360
+ /**
361
+ * POST ROUTES.int_charter names an unknown session, a hash that is not one of its charter
362
+ * versions, or no charter at all (a malformed body). The gateway refuses admission on it.
363
+ */
364
+ readonly durable_charter_not_found: {
365
+ readonly status: 404;
366
+ readonly surfaces: readonly ["api"];
367
+ readonly fields: readonly [];
368
+ };
369
+ };
370
+ export type DurableCode = keyof typeof DURABLE_CODES;
371
+ export declare function isDurableCode(v: unknown): v is DurableCode;
372
+ export declare function statusOf(code: DurableCode): number | null;
373
+ /** A durable refusal's `error.details`: the fix line and the code's closed fields (CodeSpec.fields). */
374
+ export interface DurableErrorDetails {
375
+ readonly fix?: string;
376
+ readonly [field: string]: unknown;
377
+ }
378
+ /** The shipped error envelope for a durable code (ruling 14). */
379
+ export interface DurableErrorBody<C extends DurableCode = DurableCode> {
380
+ readonly error: {
381
+ readonly code: C;
382
+ readonly message: string;
383
+ readonly details?: DurableErrorDetails;
384
+ };
385
+ }
386
+ /**
387
+ * Build the error envelope for `code`, as buildErrorBody does: `details` only when given. Throws
388
+ * when details carries a field outside `fix` and DURABLE_CODES[code].fields, or a non-string fix.
389
+ */
390
+ export declare function durableErrorBody<C extends DurableCode>(code: C, message: string, details?: DurableErrorDetails): DurableErrorBody<C>;
391
+ /** Gateway refusal codes reachable in M1 on an mnm_ds_ request (C19 durable_refusal value set, plus `none` and `unknown_key`). */
392
+ export declare const GATEWAY_REFUSAL_CODES: readonly ["durable_admission_unavailable", "durable_key_revoked", "durable_identity_mismatch", "durable_unlocked", "durable_session_ended", "durable_lease_fenced", "durable_session_stopped", "durable_guard_unavailable", "durable_unattended_unavailable", "goal_contract_enforce_refused", "durable_route_refused", "durable_executor_key_refused", "contract_mismatch"];
393
+ export type GatewayRefusalCode = (typeof GATEWAY_REFUSAL_CODES)[number];
394
+ /**
395
+ * Retry rule (BACKBONE): every gateway durable refusal carries `x-should-retry: false`, except
396
+ * 503 durable_admission_unavailable on an attended chain, which carries no x-should-retry header
397
+ * (attended chains keep today's availability). Returns the header value, or null for "omit".
398
+ * durable_claim_unavailable belongs to the daemon backoff, not to this rule.
399
+ */
400
+ export declare function shouldRetryHeader(code: GatewayRefusalCode, attended: boolean): "false" | null;
401
+ /** Codes named by the design but CUT from M1. No M1 build may emit them (code-closure check). */
402
+ export declare const CUT_CODES_M1: readonly ["durable_wrong_cell", "durable_host_unattended_off", "durable_goal_unsealed", "durable_arm_unavailable", "durable_attestation_unavailable"];
403
+ /** Claim outcomes (design §4.3 plus S1 `unavailable`), the value set of `durable_claim_outcome`. */
404
+ export declare const CLAIM_OUTCOMES: readonly ["acquired", "reclaimed", "epoch_bump", "needs_key", "lost_race", "ineligible", "unavailable", "rate_limited"];
405
+ export type ClaimOutcome = (typeof CLAIM_OUTCOMES)[number];
406
+ /**
407
+ * HTTP status of each claim outcome at POST /v1/executor/sessions/{id}/claim (C05 OQ0 proposal,
408
+ * frozen). A foreign or unknown session is the existing 404 before any outcome is computed.
409
+ */
410
+ export declare const CLAIM_OUTCOME_STATUS: {
411
+ readonly [O in ClaimOutcome]: number;
412
+ };
413
+ /** durable_claim_lost_race details.reason: A1 durable_claim_lease step 2 and step 4 (24.22.1). */
414
+ export declare const CLAIM_LOST_RACE_REASONS: readonly ["stale_tokens", "lease_live", "org_lease_cap"];
415
+ export type ClaimLostRaceReason = (typeof CLAIM_LOST_RACE_REASONS)[number];
416
+ /** durable_claim_ineligible details.reason: every value A1 durable_claim_lease returns (24.22.1). */
417
+ export declare const CLAIM_INELIGIBLE_REASONS: readonly ["bad_nonce", "bad_attest_failure", "not_found", "not_locked", "not_home", "not_owner", "executor_revoked", "executor_breakglass", "terminal", "expired", "cell_unmapped", "agent_killed", "paused", "agent_contained", "suspended", "profile", "respawn_failed", "attestation_failed", "identity_mismatch", "budget_reached", "grant_expired", "not_pool_member", "waiting"];
418
+ export type ClaimIneligibleReason = (typeof CLAIM_INELIGIBLE_REASONS)[number];
419
+ /**
420
+ * What a durable_claim_ineligible refusal carries beside reason, per reason (24.22.1). A field not
421
+ * named is absent. state_reason: `paused` / `suspended` = the row's existing state_reason for that
422
+ * state; `reason` = equal to reason (a suspension the claim writes); `agent_contained` = that
423
+ * literal. check: an ATTESTATION_CHECKS_M1 value, on an attestation-driven suspension the claim
424
+ * writes ('4' for grant_expired). state: a TERMINAL_STATES value, for terminal only. wait_reason: a
425
+ * PARKED_ONLY_WAIT_REASONS value, for waiting only (ruling 34.06 (3)).
426
+ */
427
+ export declare const CLAIM_INELIGIBLE_DETAILS: Readonly<{
428
+ readonly bad_nonce: {};
429
+ readonly bad_attest_failure: {};
430
+ readonly not_found: {};
431
+ readonly not_locked: {};
432
+ readonly not_home: {};
433
+ readonly not_owner: {};
434
+ readonly executor_revoked: {};
435
+ readonly executor_breakglass: {};
436
+ readonly terminal: {
437
+ readonly state: "terminal_state";
438
+ };
439
+ readonly expired: {};
440
+ readonly cell_unmapped: {};
441
+ readonly agent_killed: {};
442
+ readonly paused: {
443
+ readonly state_reason: "paused";
444
+ };
445
+ readonly agent_contained: {
446
+ readonly state_reason: "agent_contained";
447
+ };
448
+ readonly suspended: {
449
+ readonly state_reason: "suspended";
450
+ };
451
+ readonly profile: {};
452
+ readonly respawn_failed: {
453
+ readonly state_reason: "reason";
454
+ };
455
+ readonly attestation_failed: {
456
+ readonly state_reason: "reason";
457
+ readonly check: "attestation_check";
458
+ };
459
+ readonly identity_mismatch: {
460
+ readonly state_reason: "reason";
461
+ readonly check: "attestation_check";
462
+ };
463
+ readonly budget_reached: {
464
+ readonly state_reason: "reason";
465
+ readonly check: "attestation_check";
466
+ };
467
+ readonly grant_expired: {
468
+ readonly state_reason: "reason";
469
+ readonly check: "attestation_check";
470
+ };
471
+ readonly not_pool_member: {};
472
+ readonly waiting: {
473
+ readonly wait_reason: "parked_only";
474
+ };
475
+ }>;
476
+ /**
477
+ * durable_claim_lost_race's details: a CLAIM_LOST_RACE_REASONS reason, an optional fix, and live and
478
+ * cap (non-negative and positive integers) both present exactly when the reason is org_lease_cap
479
+ * (ruling 34.05 (3)).
480
+ */
481
+ export declare function claimLostRaceDetailsOk(details: DurableErrorDetails): boolean;
482
+ /**
483
+ * durable_claim_rate_limited's details (ruling 34.24): retry_after_s, a non-negative finite number
484
+ * of seconds, required; an optional fix; nothing else.
485
+ */
486
+ export declare function claimRateLimitedDetailsOk(details: DurableErrorDetails): boolean;
487
+ /** durable_claim_ineligible's details against CLAIM_INELIGIBLE_DETAILS; an optional fix; nothing else. */
488
+ export declare function claimIneligibleDetailsOk(details: DurableErrorDetails): boolean;
489
+ /**
490
+ * durable_refs_invalid details.reason for a release whose wait cannot park (rulings 34.06.3,
491
+ * 34.06.3.1): the named approval is not open or is past expires_at, belongs to another session, or
492
+ * has the wrong subject, or wait_ref is not the canonical WAIT_REF_KEYS text for its reason.
493
+ */
494
+ export declare const PARK_REFUSAL_REASONS: readonly ["approval_not_open", "approval_wrong_session", "approval_wrong_subject", "wait_ref_shape"];
495
+ export type ParkRefusalReason = (typeof PARK_REFUSAL_REASONS)[number];
496
+ /**
497
+ * durable_refs_invalid's details: a string kind, an optional fix, and an optional reason that is
498
+ * a PARK_REFUSAL_REASONS value and may appear only when kind is session.waiting (34.06.3.1).
499
+ */
500
+ export declare function refsInvalidDetailsOk(details: DurableErrorDetails): boolean;
501
+ /** Reasons a heartbeat entry answers extended=false (C05 OQ0; the per-session batched array). */
502
+ export declare const HEARTBEAT_REASONS: readonly ["extended", "revived", "fenced", "not_hello_spawn", "not_revivable", "contained", "terminal", "waiting"];
503
+ export type HeartbeatReason = (typeof HEARTBEAT_REASONS)[number];
504
+ /**
505
+ * The heartbeat wire shape (ruling 24.15; A1 durable_heartbeat). The request names each session as
506
+ * {session_id, epoch, spawn_id}; the response body is {results: [...]}, one entry per session,
507
+ * {session_id, extended, reason, lease_expires_at?}, lease_expires_at present exactly when extended.
508
+ * Entry order is NOT promised (A1 answers in session_id order): match entries by session_id.
509
+ */
510
+ export declare const HEARTBEAT_ENTRY_FIELDS: readonly ["session_id", "epoch", "spawn_id"];
511
+ export declare const HEARTBEAT_RESULT_FIELDS: readonly ["session_id", "extended", "reason", "lease_expires_at"];
512
+ export interface HeartbeatEntry {
513
+ readonly session_id: string;
514
+ readonly epoch: number;
515
+ readonly spawn_id: string;
516
+ }
517
+ export type HeartbeatResult = {
518
+ readonly session_id: string;
519
+ readonly extended: true;
520
+ readonly reason: HeartbeatReason;
521
+ readonly lease_expires_at: string;
522
+ } | {
523
+ readonly session_id: string;
524
+ readonly extended: false;
525
+ readonly reason: HeartbeatReason;
526
+ };
527
+ /** One response entry: the frozen keys only, a uuid session_id, a HEARTBEAT_REASONS reason. */
528
+ export declare function heartbeatResultOk(v: unknown): v is HeartbeatResult;
529
+ /**
530
+ * The enroll poll's errors (POST ROUTES.exec_enroll_poll), in the RFC 8628 section 3.5 poll
531
+ * vocabulary plus `already_consumed` (wave-0 fix 3b). Each answers HTTP ENROLL_POLL_ERROR_STATUS
532
+ * with body {error: <value>}; they are not DURABLE_CODES. The CLI turns already_consumed into a
533
+ * non-zero exit naming `mnemom agent host install`.
534
+ */
535
+ export declare const ENROLL_POLL_ERRORS: readonly ["authorization_pending", "slow_down", "access_denied", "expired_token", "already_consumed"];
536
+ export type EnrollPollError = (typeof ENROLL_POLL_ERRORS)[number];
537
+ export declare const ENROLL_POLL_ERROR_STATUS = 400;