approval-md 0.3.0 → 0.4.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.
- package/README.md +83 -914
- package/SPEC.md +98 -13
- package/cli.js +66 -7
- package/dist/src/adapters/smtp.d.ts +18 -0
- package/dist/src/adapters/smtp.js +24 -3
- package/dist/src/adapters/smtp.js.map +1 -1
- package/dist/src/channels/contract.d.ts +19 -0
- package/dist/src/channels/contract.js +105 -1
- package/dist/src/channels/contract.js.map +1 -1
- package/dist/src/channels/relay-server.d.ts +90 -0
- package/dist/src/channels/relay-server.js +295 -0
- package/dist/src/channels/relay-server.js.map +1 -0
- package/dist/src/channels/relay.d.ts +273 -0
- package/dist/src/channels/relay.js +564 -0
- package/dist/src/channels/relay.js.map +1 -0
- package/dist/src/channels/tagging.js +6 -1
- package/dist/src/channels/tagging.js.map +1 -1
- package/dist/src/channels/telegram-webhook.d.ts +273 -0
- package/dist/src/channels/telegram-webhook.js +536 -0
- package/dist/src/channels/telegram-webhook.js.map +1 -0
- package/dist/src/channels/telegram.d.ts +271 -1
- package/dist/src/channels/telegram.js +403 -45
- package/dist/src/channels/telegram.js.map +1 -1
- package/dist/src/cli/amend.js +350 -4
- package/dist/src/cli/amend.js.map +1 -1
- package/dist/src/cli/attest.js +43 -6
- package/dist/src/cli/attest.js.map +1 -1
- package/dist/src/cli/channel-relay.d.ts +108 -0
- package/dist/src/cli/channel-relay.js +334 -0
- package/dist/src/cli/channel-relay.js.map +1 -0
- package/dist/src/cli/channel-telegram-webhook.d.ts +273 -0
- package/dist/src/cli/channel-telegram-webhook.js +709 -0
- package/dist/src/cli/channel-telegram-webhook.js.map +1 -0
- package/dist/src/cli/channel-telegram.d.ts +272 -26
- package/dist/src/cli/channel-telegram.js +478 -41
- package/dist/src/cli/channel-telegram.js.map +1 -1
- package/dist/src/cli/channel.d.ts +1 -1
- package/dist/src/cli/channel.js +5 -1
- package/dist/src/cli/channel.js.map +1 -1
- package/dist/src/cli/daemon.js +37 -5
- package/dist/src/cli/daemon.js.map +1 -1
- package/dist/src/cli/doctor.d.ts +63 -0
- package/dist/src/cli/doctor.js +856 -111
- package/dist/src/cli/doctor.js.map +1 -1
- package/dist/src/cli/execute.d.ts +17 -1
- package/dist/src/cli/execute.js +341 -20
- package/dist/src/cli/execute.js.map +1 -1
- package/dist/src/cli/exit-codes.d.ts +12 -0
- package/dist/src/cli/exit-codes.js +13 -0
- package/dist/src/cli/exit-codes.js.map +1 -1
- package/dist/src/cli/gate.d.ts +2 -0
- package/dist/src/cli/gate.js +233 -2
- package/dist/src/cli/gate.js.map +1 -1
- package/dist/src/cli/help.d.ts +9 -1
- package/dist/src/cli/help.js +246 -38
- package/dist/src/cli/help.js.map +1 -1
- package/dist/src/cli/hook.d.ts +371 -3
- package/dist/src/cli/hook.js +1926 -44
- package/dist/src/cli/hook.js.map +1 -1
- package/dist/src/cli/init.js +16 -7
- package/dist/src/cli/init.js.map +1 -1
- package/dist/src/cli/instructions.js +24 -3
- package/dist/src/cli/instructions.js.map +1 -1
- package/dist/src/cli/log-anchor.d.ts +55 -0
- package/dist/src/cli/log-anchor.js +199 -60
- package/dist/src/cli/log-anchor.js.map +1 -1
- package/dist/src/cli/main.d.ts +0 -12
- package/dist/src/cli/main.js +51 -0
- package/dist/src/cli/main.js.map +1 -1
- package/dist/src/cli/muse.d.ts +2 -0
- package/dist/src/cli/muse.js +62 -0
- package/dist/src/cli/muse.js.map +1 -0
- package/dist/src/cli/payload.js +79 -1
- package/dist/src/cli/payload.js.map +1 -1
- package/dist/src/cli/scaffold.js +6 -0
- package/dist/src/cli/scaffold.js.map +1 -1
- package/dist/src/cli/serve.d.ts +53 -0
- package/dist/src/cli/serve.js +270 -0
- package/dist/src/cli/serve.js.map +1 -0
- package/dist/src/cli/up.js +21 -2
- package/dist/src/cli/up.js.map +1 -1
- package/dist/src/cli/verb-registry.d.ts +2 -0
- package/dist/src/cli/verb-registry.js +337 -39
- package/dist/src/cli/verb-registry.js.map +1 -1
- package/dist/src/cli/wordmark.d.ts +2 -2
- package/dist/src/cli/wordmark.js +2 -2
- package/dist/src/core/attest-bootstrap.d.ts +95 -0
- package/dist/src/core/attest-bootstrap.js +135 -0
- package/dist/src/core/attest-bootstrap.js.map +1 -0
- package/dist/src/core/attest.d.ts +20 -3
- package/dist/src/core/attest.js +25 -0
- package/dist/src/core/attest.js.map +1 -1
- package/dist/src/core/audit.d.ts +55 -3
- package/dist/src/core/audit.js +52 -5
- package/dist/src/core/audit.js.map +1 -1
- package/dist/src/core/channel-lease.d.ts +322 -0
- package/dist/src/core/channel-lease.js +663 -0
- package/dist/src/core/channel-lease.js.map +1 -0
- package/dist/src/core/command-class.d.ts +51 -0
- package/dist/src/core/command-class.js +760 -8
- package/dist/src/core/command-class.js.map +1 -1
- package/dist/src/core/daemon-host.d.ts +178 -0
- package/dist/src/core/daemon-host.js +228 -0
- package/dist/src/core/daemon-host.js.map +1 -0
- package/dist/src/core/daemon-identity.d.ts +238 -0
- package/dist/src/core/daemon-identity.js +252 -0
- package/dist/src/core/daemon-identity.js.map +1 -0
- package/dist/src/core/gate.d.ts +306 -5
- package/dist/src/core/gate.js +772 -24
- package/dist/src/core/gate.js.map +1 -1
- package/dist/src/core/harness-version.d.ts +128 -4
- package/dist/src/core/harness-version.js +179 -12
- package/dist/src/core/harness-version.js.map +1 -1
- package/dist/src/core/harness-wait.d.ts +82 -3
- package/dist/src/core/harness-wait.js +89 -3
- package/dist/src/core/harness-wait.js.map +1 -1
- package/dist/src/core/log-subscribe.d.ts +21 -0
- package/dist/src/core/log-subscribe.js +16 -6
- package/dist/src/core/log-subscribe.js.map +1 -1
- package/dist/src/core/log-write-layer.d.ts +55 -0
- package/dist/src/core/log-write-layer.js +91 -0
- package/dist/src/core/log-write-layer.js.map +1 -0
- package/dist/src/core/log.d.ts +50 -21
- package/dist/src/core/log.js +197 -19
- package/dist/src/core/log.js.map +1 -1
- package/dist/src/core/payload-census.d.ts +51 -0
- package/dist/src/core/payload-census.js +125 -2
- package/dist/src/core/payload-census.js.map +1 -1
- package/dist/src/core/payload-store.d.ts +31 -0
- package/dist/src/core/payload-store.js +113 -8
- package/dist/src/core/payload-store.js.map +1 -1
- package/dist/src/core/payload.d.ts +18 -3
- package/dist/src/core/payload.js +20 -4
- package/dist/src/core/payload.js.map +1 -1
- package/dist/src/core/policy-diff.d.ts +10 -0
- package/dist/src/core/policy-diff.js +10 -2
- package/dist/src/core/policy-diff.js.map +1 -1
- package/dist/src/core/policy-explain.d.ts +7 -1
- package/dist/src/core/policy-explain.js +16 -1
- package/dist/src/core/policy-explain.js.map +1 -1
- package/dist/src/core/policy-load.d.ts +24 -0
- package/dist/src/core/policy-load.js.map +1 -1
- package/dist/src/core/policy-match.d.ts +38 -0
- package/dist/src/core/policy-match.js +35 -0
- package/dist/src/core/policy-match.js.map +1 -1
- package/dist/src/core/policy-proposal.d.ts +23 -0
- package/dist/src/core/policy-proposal.js +8 -2
- package/dist/src/core/policy-proposal.js.map +1 -1
- package/dist/src/core/read-scope.d.ts +10 -0
- package/dist/src/core/read-scope.js +4 -0
- package/dist/src/core/read-scope.js.map +1 -1
- package/dist/src/core/run-payload.d.ts +160 -0
- package/dist/src/core/run-payload.js +304 -0
- package/dist/src/core/run-payload.js.map +1 -0
- package/dist/src/core/sender-identity.d.ts +35 -10
- package/dist/src/core/sender-identity.js +48 -11
- package/dist/src/core/sender-identity.js.map +1 -1
- package/dist/src/core/state.d.ts +52 -1
- package/dist/src/core/state.js +52 -6
- package/dist/src/core/state.js.map +1 -1
- package/dist/src/core/telegram-config.d.ts +79 -0
- package/dist/src/core/telegram-config.js +108 -0
- package/dist/src/core/telegram-config.js.map +1 -1
- package/dist/src/core/verify.d.ts +23 -1
- package/dist/src/core/verify.js +20 -2
- package/dist/src/core/verify.js.map +1 -1
- package/dist/src/daemon/audit.d.ts +80 -5
- package/dist/src/daemon/audit.js +126 -6
- package/dist/src/daemon/audit.js.map +1 -1
- package/dist/src/daemon/daemon.d.ts +174 -2
- package/dist/src/daemon/daemon.js +298 -7
- package/dist/src/daemon/daemon.js.map +1 -1
- package/dist/src/daemon/git-evidence.d.ts +2 -2
- package/dist/src/daemon/git-evidence.js +1 -1
- package/dist/src/daemon/projection.d.ts +13 -2
- package/dist/src/daemon/projection.js +39 -6
- package/dist/src/daemon/projection.js.map +1 -1
- package/dist/src/mcp/server.d.ts +39 -3
- package/dist/src/mcp/server.js +22 -3
- package/dist/src/mcp/server.js.map +1 -1
- package/dist/src/muse/server.d.ts +16 -0
- package/dist/src/muse/server.js +238 -0
- package/dist/src/muse/server.js.map +1 -0
- package/dist/src/serve/archive.d.ts +158 -0
- package/dist/src/serve/archive.js +354 -0
- package/dist/src/serve/archive.js.map +1 -0
- package/dist/src/serve/arguments.d.ts +93 -0
- package/dist/src/serve/arguments.js +228 -0
- package/dist/src/serve/arguments.js.map +1 -0
- package/dist/src/serve/credentials.d.ts +91 -0
- package/dist/src/serve/credentials.js +143 -0
- package/dist/src/serve/credentials.js.map +1 -0
- package/dist/src/serve/follow.d.ts +86 -0
- package/dist/src/serve/follow.js +101 -0
- package/dist/src/serve/follow.js.map +1 -0
- package/dist/src/serve/hook-thread.d.ts +134 -0
- package/dist/src/serve/hook-thread.js +333 -0
- package/dist/src/serve/hook-thread.js.map +1 -0
- package/dist/src/serve/hook-worker.d.ts +134 -0
- package/dist/src/serve/hook-worker.js +173 -0
- package/dist/src/serve/hook-worker.js.map +1 -0
- package/dist/src/serve/server.d.ts +412 -0
- package/dist/src/serve/server.js +1251 -0
- package/dist/src/serve/server.js.map +1 -0
- package/docs/README-extended.md +766 -0
- package/docs/cli-reference.md +1633 -43
- package/package.json +4 -2
- package/schema/event.schema.json +59 -2
- package/schema/fixtures/event/invalid/daemon-id-malformed.json +15 -0
- package/schema/fixtures/event/invalid/execution-started-truncated-policy-sha256.json +18 -0
- package/schema/fixtures/event/invalid/harness-cap-at-margin.json +16 -0
- package/schema/fixtures/event/invalid/harness-cap-fractional.json +16 -0
- package/schema/fixtures/event/invalid/harness-cap-negative.json +16 -0
- package/schema/fixtures/event/invalid/harness-cap-string.json +16 -0
- package/schema/fixtures/event/invalid/harness-cap-without-harness-execution.json +16 -0
- package/schema/fixtures/event/invalid/harness-cap-zero.json +16 -0
- package/schema/fixtures/event/valid/approval-requested-harness-cap.json +18 -0
- package/schema/fixtures/event/valid/daemon-identity-declared.json +17 -0
- package/schema/fixtures/event/valid/daemon-identity.json +15 -0
- package/schema/fixtures/event/valid/execution-started-policy-sha256.json +18 -0
- package/schema/fixtures/event/valid/harness-kind-hermes.json +23 -0
- package/schema/fixtures/policy/invalid/daemons-malformed-id.json +10 -0
- package/schema/fixtures/policy/valid/daemons-allowlist.json +19 -0
- package/schema/fixtures/policy-md/invalid/schema-invalid-agent-may-request.md +21 -0
- package/schema/fixtures/policy-md/valid/agent-may-request.md +24 -0
- package/schema/policy.schema.json +50 -6
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"channel-telegram-webhook.js","sourceRoot":"","sources":["../../../src/cli/channel-telegram-webhook.ts"],"names":[],"mappings":"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"}
|
|
@@ -107,12 +107,13 @@
|
|
|
107
107
|
* a send failure: an operator who has just mistyped a chat id or a token should
|
|
108
108
|
* learn it immediately rather than watch a listener retry forever.
|
|
109
109
|
*/
|
|
110
|
-
import type
|
|
110
|
+
import { type DecideOptions } from "../core/gate.js";
|
|
111
111
|
import { type ChannelRequest, type DeliveryId } from "../channels/contract.js";
|
|
112
112
|
import { type ChannelTagRefusalCode, type TagOptions } from "../channels/tagging.js";
|
|
113
113
|
import { type CheckpointTap } from "./checkpoint-tap.js";
|
|
114
114
|
import { TelegramChannel, type CheckpointTapResponse, type ReviewCard, type ReviewTapResponse, type TelegramCommand, type TelegramTerminalState } from "../channels/telegram.js";
|
|
115
115
|
import { type TelegramDelivery } from "../core/telegram-config.js";
|
|
116
|
+
import { type ChannelLease, type ChannelLeaseMode } from "../core/channel-lease.js";
|
|
116
117
|
import { type InstanceFinding } from "../core/instance.js";
|
|
117
118
|
import { type ChannelSender } from "../core/sender-identity.js";
|
|
118
119
|
import { type ParsedFlags } from "./args.js";
|
|
@@ -213,33 +214,94 @@ export interface ListenSetup {
|
|
|
213
214
|
checkpoint: CheckpointTap;
|
|
214
215
|
}
|
|
215
216
|
/**
|
|
216
|
-
* Claim this listener's bot before it polls (APRV-390).
|
|
217
|
+
* Claim this listener's bot before it polls (APRV-390, extended by APRV-424).
|
|
217
218
|
*
|
|
218
|
-
*
|
|
219
|
-
* come out of it: the bot's identity, which is the only thing that can tell
|
|
220
|
-
* two instances holding two differently-named copies of one token apart; and
|
|
221
|
-
* a claim in the per-machine registry, which is what makes the SECOND such
|
|
222
|
-
* listener refuse instead of joining a 409 loop.
|
|
219
|
+
* Three questions, in order, and each one has its own authority:
|
|
223
220
|
*
|
|
224
|
-
*
|
|
221
|
+
* 1. **Does anything else in THIS gate already hold the Telegram transport?**
|
|
222
|
+
* A lockfile in the gate's own `daemon/` directory (`core/channel-lease.ts`)
|
|
223
|
+
* answers it, and the answer is per PROCESS. This is the check the review of
|
|
224
|
+
* APRV-424 added, and the hole it closes is the one neither of the other two
|
|
225
|
+
* could see: an `approval up` long-polling and an `approval channel telegram
|
|
226
|
+
* webhook` started in the same project pass both of them — `getWebhookInfo`
|
|
227
|
+
* is empty while the poller is the one running, and the ownership registry
|
|
228
|
+
* compares instance ids, which are equal because it IS the same instance —
|
|
229
|
+
* and then each runs its own dispatch cycle over its own state against one
|
|
230
|
+
* log, so every request reaches the phone twice under two nonces and only
|
|
231
|
+
* one copy can resolve a tap.
|
|
232
|
+
* 2. **What is the Bot API delivering this bot's updates to?** `getWebhookInfo`
|
|
233
|
+
* answers it, and it is the only thing that can see a webhook registered
|
|
234
|
+
* from another machine. A webhook beats a poller outright — `getUpdates` is
|
|
235
|
+
* refused while one is set — so any registration refuses a poller.
|
|
236
|
+
* 3. **Does another INSTANCE on this machine hold this bot?** `getMe` plus the
|
|
237
|
+
* per-machine registry answers it (APRV-390's incident: two gates, one
|
|
238
|
+
* token, two names, a 409 on every poll).
|
|
225
239
|
*
|
|
226
|
-
*
|
|
227
|
-
*
|
|
228
|
-
*
|
|
229
|
-
*
|
|
230
|
-
*
|
|
231
|
-
*
|
|
232
|
-
*
|
|
233
|
-
*
|
|
234
|
-
*
|
|
240
|
+
* ## An unreachable Bot API: fail-soft for a poller, fail-closed for a webhook
|
|
241
|
+
*
|
|
242
|
+
* A `getMe` or a `getWebhookInfo` that fails says nothing about ownership. The
|
|
243
|
+
* machine may be behind a captive portal, the API may be rate-limiting, the
|
|
244
|
+
* network may be down for four seconds. For a POLLER, refusing on that would
|
|
245
|
+
* mean a transient network fault took the phone channel down until somebody
|
|
246
|
+
* noticed, in exchange for no safety: an unreachable Bot API is also a
|
|
247
|
+
* `getUpdates` that cannot conflict with anything, and the HTTP 409 the loop
|
|
248
|
+
* already reports is the backstop. So the poller says what happened and starts.
|
|
249
|
+
*
|
|
250
|
+
* For the WEBHOOK VERB there is no such backstop, and the review of APRV-424
|
|
251
|
+
* turned this direction around. Its next act is `setWebhook`, which overwrites
|
|
252
|
+
* whatever registration exists without asking, so proceeding on an unknown
|
|
253
|
+
* answer is proceeding to take another host's taps with no error anywhere. A
|
|
254
|
+
* probe it could not make is therefore a refusal (`webhook-probe-failed`), and
|
|
255
|
+
* the operator retries or passes `--reclaim` deliberately.
|
|
235
256
|
*/
|
|
236
|
-
export declare function claimListenerBot(setup: ListenSetup, report: (message: string) => void
|
|
257
|
+
export declare function claimListenerBot(setup: ListenSetup, report: (message: string) => void, options?: {
|
|
258
|
+
/**
|
|
259
|
+
* The webhook URL THIS process is about to register, when it is a webhook
|
|
260
|
+
* runner rather than a poller (APRV-424).
|
|
261
|
+
*
|
|
262
|
+
* Absent for a poller. Present for the webhook verb, and then it is the
|
|
263
|
+
* url a `--reclaim` is measured against: `setWebhook` is idempotent, so a
|
|
264
|
+
* restart re-registering its own url is the ordinary case, while a
|
|
265
|
+
* DIFFERENT url is a second host about to take the first host's taps.
|
|
266
|
+
*/
|
|
267
|
+
webhookUrl?: string;
|
|
268
|
+
/**
|
|
269
|
+
* Register over an existing webhook (`--reclaim`, APRV-424 review finding
|
|
270
|
+
* 6).
|
|
271
|
+
*
|
|
272
|
+
* Without it, ANY registration refuses — including one at the same url,
|
|
273
|
+
* which used to be waved through on a bare string compare. Two hosts
|
|
274
|
+
* sharing one configuration both passed that check, the second overwrote
|
|
275
|
+
* the first's `secret_token`, and from then on every real tap arrived at
|
|
276
|
+
* the first host with a secret it did not recognise: a forgery, as far as
|
|
277
|
+
* it could tell, on every press of a button that had worked an hour
|
|
278
|
+
* earlier. So taking over is now a thing the operator says out loud.
|
|
279
|
+
*/
|
|
280
|
+
reclaim?: boolean;
|
|
281
|
+
/**
|
|
282
|
+
* Which transport this process is about to run, for the lease.
|
|
283
|
+
*
|
|
284
|
+
* Derived from {@link webhookUrl} when it is not given, because the two
|
|
285
|
+
* callers that pass a url are the two that run a webhook.
|
|
286
|
+
*/
|
|
287
|
+
mode?: ChannelLeaseMode;
|
|
288
|
+
}): Promise<ClaimedListenerBot>;
|
|
289
|
+
/**
|
|
290
|
+
* What {@link claimListenerBot} answers.
|
|
291
|
+
*
|
|
292
|
+
* The lease travels with the success, because the caller is the only thing
|
|
293
|
+
* that knows when this process has stopped receiving: `runListener`,
|
|
294
|
+
* `approval up` and `runWebhook` each release it on their way out, and a
|
|
295
|
+
* refusal releases nothing because it took nothing.
|
|
296
|
+
*/
|
|
297
|
+
export type ClaimedListenerBot = {
|
|
237
298
|
ok: true;
|
|
299
|
+
lease: ChannelLease;
|
|
238
300
|
} | {
|
|
239
301
|
ok: false;
|
|
240
302
|
code: ListenRefusalCode;
|
|
241
303
|
message: string;
|
|
242
|
-
}
|
|
304
|
+
};
|
|
243
305
|
/**
|
|
244
306
|
* What to append to a runtime 409, naming the other instance if one is known.
|
|
245
307
|
*
|
|
@@ -279,7 +341,55 @@ export declare const LISTEN_REFUSAL_CODES: readonly [
|
|
|
279
341
|
* (APRV-390). Refused BEFORE the first `getUpdates`, so the operator reads
|
|
280
342
|
* which two gates are involved instead of an HTTP 409 loop.
|
|
281
343
|
*/
|
|
282
|
-
"bot-owned-elsewhere"
|
|
344
|
+
"bot-owned-elsewhere",
|
|
345
|
+
/**
|
|
346
|
+
* This bot's updates are being delivered to a webhook (APRV-424).
|
|
347
|
+
*
|
|
348
|
+
* The two transports are alternatives per bot: the Bot API refuses
|
|
349
|
+
* `getUpdates` outright while a webhook is set, so a listener that started
|
|
350
|
+
* here would print a 409 every few seconds and receive not one tap. Refused
|
|
351
|
+
* BEFORE the first poll, in the same preflight and for the same reason
|
|
352
|
+
* `bot-owned-elsewhere` is, so the operator reads which transport owns the
|
|
353
|
+
* bot instead of a status code.
|
|
354
|
+
*
|
|
355
|
+
* Since the review of APRV-424 it carries a second, local source: the
|
|
356
|
+
* transport lease in this gate's own `daemon/` directory, when the process
|
|
357
|
+
* holding it is a webhook runner. Same fact, same repair, so the same code.
|
|
358
|
+
*/
|
|
359
|
+
"webhook-registered",
|
|
360
|
+
/**
|
|
361
|
+
* A long-poll listener in THIS gate already holds the Telegram transport
|
|
362
|
+
* (APRV-424 review finding 1).
|
|
363
|
+
*
|
|
364
|
+
* The counterpart to `webhook-registered`, from the same lease. It is what
|
|
365
|
+
* the webhook verb meets when an `approval up` or an `approval channel
|
|
366
|
+
* telegram listen` is already running in the same project — the case
|
|
367
|
+
* `getWebhookInfo` cannot see (nothing is registered yet) and the ownership
|
|
368
|
+
* registry cannot see either (it is the same instance). Two of them on one
|
|
369
|
+
* log put every prompt on the phone twice, under two nonces, and only one
|
|
370
|
+
* copy can resolve a tap.
|
|
371
|
+
*/
|
|
372
|
+
"telegram-poller-running",
|
|
373
|
+
/**
|
|
374
|
+
* The transport lease could not be taken at all (APRV-424 review finding 1).
|
|
375
|
+
*
|
|
376
|
+
* A `daemon/` directory that cannot be created, a lockfile that cannot be
|
|
377
|
+
* written. Unlike the bot registry, whose absence is the status quo, this
|
|
378
|
+
* file is the only thing keeping one gate from running two transports, so a
|
|
379
|
+
* gate that cannot hold one does not start.
|
|
380
|
+
*/
|
|
381
|
+
"telegram-lease-unavailable",
|
|
382
|
+
/**
|
|
383
|
+
* The webhook verb could not learn what already holds this bot (APRV-424
|
|
384
|
+
* review finding 8).
|
|
385
|
+
*
|
|
386
|
+
* `getMe` or `getWebhookInfo` failed, and the next act would have been a
|
|
387
|
+
* `setWebhook` that overwrites a registration nobody saw. A poller keeps its
|
|
388
|
+
* fail-soft on the same failure, because an unreachable Bot API is also a
|
|
389
|
+
* `getUpdates` that cannot conflict and the HTTP 409 loop is its backstop;
|
|
390
|
+
* this verb has no backstop, so it refuses.
|
|
391
|
+
*/
|
|
392
|
+
"webhook-probe-failed"];
|
|
283
393
|
export type ListenRefusalCode = (typeof LISTEN_REFUSAL_CODES)[number];
|
|
284
394
|
/** Everything {@link prepareListen} needs, already resolved to absolute paths. */
|
|
285
395
|
export interface ListenRequest {
|
|
@@ -443,9 +553,15 @@ export interface PacedState {
|
|
|
443
553
|
/**
|
|
444
554
|
* Every pending action key, in the order this process will show them.
|
|
445
555
|
*
|
|
446
|
-
* Seeded from
|
|
447
|
-
*
|
|
448
|
-
*
|
|
556
|
+
* Seeded from `orderPending`'s order (live newest first, then stale oldest
|
|
557
|
+
* first, attestation prompts last — APRV-425; it was log order before that)
|
|
558
|
+
* and rearranged by `/skip` alone. Keys the log no longer calls pending are
|
|
559
|
+
* dropped on every cycle, and newly pending ones join the back.
|
|
560
|
+
*
|
|
561
|
+
* The ordering reaches this only through the SEEDING, which is the property
|
|
562
|
+
* that matters for `/skip`: a key already in the list keeps the place the
|
|
563
|
+
* approver's own navigation gave it, and only keys this process has not seen
|
|
564
|
+
* before are inserted in the new order.
|
|
449
565
|
*/
|
|
450
566
|
order: string[];
|
|
451
567
|
/**
|
|
@@ -666,10 +782,12 @@ export interface DispatchResult {
|
|
|
666
782
|
* Action keys dropped from the delivery bookkeeping this cycle (APRV-196),
|
|
667
783
|
* with why. Neither kind can cost a re-send: the pending queue is the log's
|
|
668
784
|
* answer, and a dropped key that is still pending is simply re-delivered.
|
|
785
|
+
* `released` (APRV-442) is the one kind that is dropped BECAUSE it is still
|
|
786
|
+
* pending: a refused tap disarmed its card, and this cycle re-offers it.
|
|
669
787
|
*/
|
|
670
788
|
pruned: {
|
|
671
789
|
action_key: string;
|
|
672
|
-
reason: "settled" | "stale";
|
|
790
|
+
reason: "settled" | "stale" | "released";
|
|
673
791
|
}[];
|
|
674
792
|
/**
|
|
675
793
|
* The collapsed re-delivery this cycle sent, when it sent one (APRV-287):
|
|
@@ -748,8 +866,118 @@ export declare function dispatchPending(setup: ListenSetup, streams: Streams, st
|
|
|
748
866
|
* it takes to say they are there.
|
|
749
867
|
*/
|
|
750
868
|
export declare const COLLAPSE_STALE_AFTER_MS: number;
|
|
751
|
-
/**
|
|
752
|
-
|
|
869
|
+
/**
|
|
870
|
+
* Pending requests a NEWER pending request has superseded (APRV-425).
|
|
871
|
+
*
|
|
872
|
+
* Two requests naming the same payload bytes and the same class are two askings
|
|
873
|
+
* of one question, and only the newer one has an asker. The shape that produces
|
|
874
|
+
* them is APRV-287's own: a hook whose wait ran out leaves its request open for
|
|
875
|
+
* the retry grace, the grace runs out, the hook withdraws it on its NEXT
|
|
876
|
+
* invocation — and if that next invocation never comes while a later session
|
|
877
|
+
* asks the same thing, both sit in the queue. Dogfooding produced exactly this
|
|
878
|
+
* complaint (APRV-118): a live prompt buried behind dead ones, and an approver
|
|
879
|
+
* rejecting the one they wanted.
|
|
880
|
+
*
|
|
881
|
+
* Keyed by `(payload_hash, class)` and not by task, because the task id a
|
|
882
|
+
* harness adapter mints is fresh per tool call (SPEC.md §10.2), so two askings
|
|
883
|
+
* of one command never share one. The bytes and the class are what a decision
|
|
884
|
+
* binds to, which is what makes them the right identity here.
|
|
885
|
+
*
|
|
886
|
+
* Computed from the pending set alone, which is re-derived from the verified log
|
|
887
|
+
* every cycle, so this decides nothing and remembers nothing. A superseded
|
|
888
|
+
* request is COLLAPSED, never closed: it stays pending in the log, listable, and
|
|
889
|
+
* decidable from any copy already delivered. Only a human's decision or the
|
|
890
|
+
* requester's own withdrawal ends it.
|
|
891
|
+
*/
|
|
892
|
+
export declare function supersededPending(requests: ChannelRequest[]): Set<string>;
|
|
893
|
+
/**
|
|
894
|
+
* The pending set in the order an approver should meet it (APRV-425).
|
|
895
|
+
*
|
|
896
|
+
* Three rules, in this order, and each is a complaint from running the gate:
|
|
897
|
+
*
|
|
898
|
+
* 1. **Attestation prompts last.** `buildPendingQueue` puts them there on
|
|
899
|
+
* purpose: a policy amendment changes the rules every entry above it was
|
|
900
|
+
* routed by, so an approver reading top to bottom answers the questions asked
|
|
901
|
+
* under the current policy before changing what the current policy is. That
|
|
902
|
+
* placement is not this function's to relitigate, so proposals are lifted
|
|
903
|
+
* out, ordered among themselves by nothing at all (log order), and put back
|
|
904
|
+
* at the end.
|
|
905
|
+
* 2. **Live requests first, newest first.** Live means younger than
|
|
906
|
+
* {@link COLLAPSE_STALE_AFTER_MS}, the hook's wait plus its retry grace,
|
|
907
|
+
* which is the same boundary the collapse uses — one number, one meaning of
|
|
908
|
+
* "somebody may still be holding this". Newest first because the newest is
|
|
909
|
+
* the one most likely to have a tool call blocked on it right now, and the
|
|
910
|
+
* observed failure was a live prompt buried behind dead ones.
|
|
911
|
+
* 3. **Stale requests after them, oldest first.** They are what the collapse
|
|
912
|
+
* takes on a first cycle, and where the collapse does not apply (fewer than
|
|
913
|
+
* {@link COLLAPSE_MIN} of them) oldest-first is the order to work through a
|
|
914
|
+
* backlog in.
|
|
915
|
+
*
|
|
916
|
+
* Stable inside each bucket, so log order breaks every tie and the result is
|
|
917
|
+
* deterministic for one log and one instant. It is an ORDER and nothing else:
|
|
918
|
+
* no request is dropped, none is decided, and the set that comes out is the set
|
|
919
|
+
* that went in.
|
|
920
|
+
*/
|
|
921
|
+
export declare function orderPending(requests: ChannelRequest[], now: string): ChannelRequest[];
|
|
922
|
+
/**
|
|
923
|
+
* The computed lines a collapsed re-delivery leads with (APRV-287).
|
|
924
|
+
*
|
|
925
|
+
* `superseded` is the subset a newer pending request replaced (APRV-425), and
|
|
926
|
+
* the first line states the split rather than claiming every member is old.
|
|
927
|
+
* Before this the line said "all older than the hook's wait plus its retry
|
|
928
|
+
* grace", which stopped being true the moment the collapse widened: a message
|
|
929
|
+
* that overstates what it collapsed is the stale-documentation failure in
|
|
930
|
+
* message form, and this one is read by the person deciding.
|
|
931
|
+
*/
|
|
932
|
+
export declare function staleLines(requests: ChannelRequest[], now: string, superseded?: ReadonlySet<string>): string[];
|
|
933
|
+
/**
|
|
934
|
+
* Put the requests nobody is waiting on into ONE message, and hand back the
|
|
935
|
+
* ones that still get a message each (APRV-287, widened by APRV-425).
|
|
936
|
+
*
|
|
937
|
+
* Called on a process's first cycle only, which is exactly a daemon start or a
|
|
938
|
+
* listener reconnect. Everything it does is bookkeeping in the sense SPEC.md
|
|
939
|
+
* §10.3 fixes: the pending set is re-derived from the verified log every cycle,
|
|
940
|
+
* so a summary that fails to send, or a process that forgets it sent one,
|
|
941
|
+
* degrades to showing those requests again, and never to a pending request
|
|
942
|
+
* nobody is shown.
|
|
943
|
+
*
|
|
944
|
+
* ## Two ways in, one exit (APRV-425)
|
|
945
|
+
*
|
|
946
|
+
* A request is collapsed when it is older than the hook's wait plus its retry
|
|
947
|
+
* grace (nobody is holding it), or when a NEWER pending request names the same
|
|
948
|
+
* payload bytes and class ({@link supersededPending} — the newer one is the live
|
|
949
|
+
* asking, whatever the age of either). The second is what answers the observed
|
|
950
|
+
* complaint that a live prompt arrives buried behind dead ones.
|
|
951
|
+
*
|
|
952
|
+
* ## This is where the sent-record is rebuilt from the log (AC3)
|
|
953
|
+
*
|
|
954
|
+
* Every collapsed member is written into `state.delivered` and `state.sentAtMs`
|
|
955
|
+
* below, and the set it is written from is the pending set re-derived from the
|
|
956
|
+
* verified log. That is the whole of the rebuilding, and it is deliberately not
|
|
957
|
+
* a second mechanism: the log is the only place the question "what is pending"
|
|
958
|
+
* is answered.
|
|
959
|
+
*
|
|
960
|
+
* What it is NOT is evidence of delivery, and the difference is load-bearing.
|
|
961
|
+
* Nothing reads this record to conclude that an approver saw anything: a
|
|
962
|
+
* collapsed request stays pending in the log, is listed by `/queue`, and is
|
|
963
|
+
* decidable from any copy already delivered, because APRV-196 made
|
|
964
|
+
* `callback_data` carry a restart-stable action ref so a button on a
|
|
965
|
+
* pre-restart copy still decides the request. Lose the record and the next
|
|
966
|
+
* cycle shows the requests again, which is the degradation SPEC.md §10.3
|
|
967
|
+
* requires and the one this code takes.
|
|
968
|
+
*/
|
|
969
|
+
/**
|
|
970
|
+
* The members a first-cycle collapse would put into one message: stale or
|
|
971
|
+
* superseded, and never a proposal (APRV-445 refutation, S2). Proposals are
|
|
972
|
+
* long-lived by design, so after a six-minute outage every one of them would
|
|
973
|
+
* otherwise land in one digest whose only bulk answer is reject-all.
|
|
974
|
+
*/
|
|
975
|
+
export declare function collapsibleStale(undecided: readonly ChannelRequest[], now: string, superseded?: ReadonlySet<string>): ChannelRequest[];
|
|
976
|
+
/**
|
|
977
|
+
* Report a steady-state cycle's problems on stderr. Startup reports its own,
|
|
978
|
+
* as exit codes, in {@link runListener}.
|
|
979
|
+
*/
|
|
980
|
+
export declare function reportCycle(result: DispatchResult, streams: Streams): void;
|
|
753
981
|
export declare function checkpointHandlerFor(setup: ListenSetup, streams: Streams): (tap: {
|
|
754
982
|
sign: boolean;
|
|
755
983
|
head: {
|
|
@@ -857,6 +1085,24 @@ export interface RunningListener {
|
|
|
857
1085
|
* queue from the verified log and re-sends everything still pending, exactly as
|
|
858
1086
|
* a restarted process would. A duplicate on the phone, never a silence.
|
|
859
1087
|
*/
|
|
1088
|
+
/**
|
|
1089
|
+
* Give the channel every handler the runtime answers a gesture with, and hand
|
|
1090
|
+
* back the fresh dispatch bookkeeping (APRV-424).
|
|
1091
|
+
*
|
|
1092
|
+
* Extracted from {@link startListener} so the webhook runner wires the SAME
|
|
1093
|
+
* four handlers rather than a second set that looks like them. This is the
|
|
1094
|
+
* CLI-side half of the property APRV-424 is about: the transport decides where
|
|
1095
|
+
* an update arrives, and nothing else. A tap that arrives by webhook is
|
|
1096
|
+
* recorded by `handlerFor`'s `recordChannelDecision` — the same actor, the
|
|
1097
|
+
* same sender resolution, the same gate — because it is the same function
|
|
1098
|
+
* object, registered here.
|
|
1099
|
+
*
|
|
1100
|
+
* A FRESH {@link DispatchState} per call, which is the whole of the restart
|
|
1101
|
+
* story: a supervisor that restarts a fallen runner re-derives the pending
|
|
1102
|
+
* queue from the verified log and re-sends everything still pending. A
|
|
1103
|
+
* duplicate on the phone, never a silence.
|
|
1104
|
+
*/
|
|
1105
|
+
export declare function wireListener(setup: ListenSetup, streams: Streams): DispatchState;
|
|
860
1106
|
export declare function startListener(setup: ListenSetup, streams: Streams): RunningListener;
|
|
861
1107
|
/**
|
|
862
1108
|
* The listener verb. Returns a promise, which is why `main` treats `channel`
|