instar 1.2.34 → 1.2.36

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 (33) hide show
  1. package/dist/commands/server.d.ts.map +1 -1
  2. package/dist/commands/server.js +20 -67
  3. package/dist/commands/server.js.map +1 -1
  4. package/dist/tunnel/CloudflareNamedProvider.d.ts +51 -0
  5. package/dist/tunnel/CloudflareNamedProvider.d.ts.map +1 -0
  6. package/dist/tunnel/CloudflareNamedProvider.js +258 -0
  7. package/dist/tunnel/CloudflareNamedProvider.js.map +1 -0
  8. package/dist/tunnel/CloudflareQuickProvider.d.ts +48 -0
  9. package/dist/tunnel/CloudflareQuickProvider.d.ts.map +1 -0
  10. package/dist/tunnel/CloudflareQuickProvider.js +201 -0
  11. package/dist/tunnel/CloudflareQuickProvider.js.map +1 -0
  12. package/dist/tunnel/TunnelLifecycle.d.ts +190 -0
  13. package/dist/tunnel/TunnelLifecycle.d.ts.map +1 -0
  14. package/dist/tunnel/TunnelLifecycle.js +222 -0
  15. package/dist/tunnel/TunnelLifecycle.js.map +1 -0
  16. package/dist/tunnel/TunnelManager.d.ts +99 -62
  17. package/dist/tunnel/TunnelManager.d.ts.map +1 -1
  18. package/dist/tunnel/TunnelManager.js +340 -395
  19. package/dist/tunnel/TunnelManager.js.map +1 -1
  20. package/dist/tunnel/TunnelNotifier.d.ts +110 -0
  21. package/dist/tunnel/TunnelNotifier.d.ts.map +1 -0
  22. package/dist/tunnel/TunnelNotifier.js +268 -0
  23. package/dist/tunnel/TunnelNotifier.js.map +1 -0
  24. package/dist/tunnel/TunnelProvider.d.ts +80 -0
  25. package/dist/tunnel/TunnelProvider.d.ts.map +1 -0
  26. package/dist/tunnel/TunnelProvider.js +28 -0
  27. package/dist/tunnel/TunnelProvider.js.map +1 -0
  28. package/package.json +1 -1
  29. package/src/data/builtin-manifest.json +2 -2
  30. package/upgrades/1.2.35.md +96 -0
  31. package/upgrades/1.2.36.md +111 -0
  32. package/upgrades/side-effects/tunnel-failure-resilience.md +118 -0
  33. package/upgrades/side-effects/tunnel-manager-rewrite.md +129 -0
@@ -1 +1 @@
1
- {"version":3,"file":"TunnelManager.js","sourceRoot":"","sources":["../../src/tunnel/TunnelManager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TunnelManager.js","sourceRoot":"","sources":["../../src/tunnel/TunnelManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,110 @@
1
+ /**
2
+ * TunnelNotifier — two-channel routing of tunnel lifecycle events to
3
+ * the user.
4
+ *
5
+ * Per spec specs/dev-infrastructure/tunnel-failure-resilience.md Part 3.
6
+ *
7
+ * Strict channel separation (the GPT external review's CRITICAL finding):
8
+ * - GROUP topic (Dashboard / Lifeline fallback / General fallback):
9
+ * status text only. NEVER the URL, NEVER the PIN, NEVER a signed
10
+ * view link. Anyone in the group can read those, which would defeat
11
+ * the owner-only consent gate.
12
+ * - OWNER DM (private bot chat with the owner principal): the actual
13
+ * URL + PIN + signed view links. The only credential-bearing channel.
14
+ *
15
+ * Class-based throttling (verification finding V2 + GPT finding #5):
16
+ * - action-required: NEVER throttled within an episode. Cross-episode
17
+ * cooldown applies (consent prompts) but the lifecycle decides that,
18
+ * not the notifier.
19
+ * - state-change: light — at most one per (episode, state) pair, and
20
+ * at most one per 15 minutes within an episode on re-entry of the
21
+ * same state.
22
+ * - noise: heavy — flapping episodes collapse into one "tunnel
23
+ * unstable" message, suppressed for the rest of the episode.
24
+ *
25
+ * Dedup by transition epoch (the lifecycle's monotonic counter): the
26
+ * notifier never emits twice for the same epoch, even if the same
27
+ * event fires through multiple listeners.
28
+ */
29
+ import type { TransitionEvent } from './TunnelLifecycle.js';
30
+ import type { ProviderName } from './TunnelProvider.js';
31
+ /** Message class — drives throttling policy. */
32
+ export type NotificationClass = 'action-required' | 'state-change' | 'noise';
33
+ /** Channel — drives credential-handling policy. */
34
+ export type NotificationChannel = 'group' | 'owner-dm';
35
+ export interface NotifierMessage {
36
+ channel: NotificationChannel;
37
+ class: NotificationClass;
38
+ text: string;
39
+ /** Episode this message belongs to (for cross-episode dedup). */
40
+ episodeId: string | null;
41
+ /** Transition epoch — never emit twice for the same epoch. */
42
+ epoch: number;
43
+ }
44
+ export interface NotifierSink {
45
+ /** Send a status-text message to the group topic (Dashboard preferred, Lifeline/General fallback). */
46
+ sendGroup(text: string): Promise<void>;
47
+ /** Send a credential-bearing message to the owner's private bot DM. */
48
+ sendOwnerDM(text: string): Promise<void>;
49
+ }
50
+ export interface NotifierClock {
51
+ now(): number;
52
+ }
53
+ export interface TunnelNotifierOptions {
54
+ sink: NotifierSink;
55
+ clock?: NotifierClock;
56
+ /** Within-episode same-state re-entry throttle (default 15 min). */
57
+ stateChangeMinIntervalMs?: number;
58
+ /** Flap threshold — N connect/drop cycles within an episode → noise-collapse. */
59
+ flapThreshold?: number;
60
+ }
61
+ export declare class TunnelNotifier {
62
+ private readonly sink;
63
+ private readonly clock;
64
+ private readonly stateChangeMinIntervalMs;
65
+ private readonly flapThreshold;
66
+ private lastEmittedEpoch;
67
+ private currentEpisodeId;
68
+ /** Last-emitted timestamps keyed by `<state>::<channel>` so the group
69
+ * pointer and the owner-DM credential delivery are throttled
70
+ * independently — otherwise the DM gets swallowed after the group
71
+ * pointer fires for the same state-change. */
72
+ private lastEmittedAt;
73
+ /** Track noise-collapse emission per episode. Once emitted, further
74
+ * noise messages in the same episode are suppressed. */
75
+ private noiseEmittedThisEpisode;
76
+ private flapCycles;
77
+ private flapCollapsed;
78
+ constructor(opts: TunnelNotifierOptions);
79
+ /**
80
+ * Drive the notifier from a lifecycle transition. Idempotent on the
81
+ * transition epoch — repeated calls with the same epoch are no-ops.
82
+ */
83
+ onTransition(e: TransitionEvent): Promise<void>;
84
+ /**
85
+ * Compose the user-facing messages for a transition. May return zero,
86
+ * one, or two messages (some transitions emit to BOTH channels, e.g.
87
+ * "back online — link in your DM" + DM with the URL).
88
+ *
89
+ * The DM credential payload is filled in by the manager via a callback
90
+ * (the notifier itself doesn't know URLs/PINs); for now the DM strings
91
+ * are placeholders that the manager substitutes before send. Future:
92
+ * extend onTransition signature to accept the credential payload.
93
+ */
94
+ private composeMessages;
95
+ /**
96
+ * Throttle decision per spec Part 3:
97
+ * - action-required: NEVER throttled within an episode.
98
+ * - state-change: at most one per (episode, state, channel) combo
99
+ * within `stateChangeMinIntervalMs`. The channel scoping is
100
+ * load-bearing: the group pointer and the owner-DM credential
101
+ * delivery are TWO messages for the same state-change; they must
102
+ * both emit, not throttle each other out.
103
+ * - noise: emits at most once per episode. The flap-collapse
104
+ * message goes out the first time the threshold is crossed; all
105
+ * subsequent noise in the same episode is suppressed.
106
+ */
107
+ private allow;
108
+ }
109
+ export type { ProviderName };
110
+ //# sourceMappingURL=TunnelNotifier.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TunnelNotifier.d.ts","sourceRoot":"","sources":["../../src/tunnel/TunnelNotifier.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAwB,MAAM,sBAAsB,CAAC;AAClF,OAAO,KAAK,EAAE,YAAY,EAAyB,MAAM,qBAAqB,CAAC;AAE/E,gDAAgD;AAChD,MAAM,MAAM,iBAAiB,GAAG,iBAAiB,GAAG,cAAc,GAAG,OAAO,CAAC;AAE7E,mDAAmD;AACnD,MAAM,MAAM,mBAAmB,GAAG,OAAO,GAAG,UAAU,CAAC;AAEvD,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,mBAAmB,CAAC;IAC7B,KAAK,EAAE,iBAAiB,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,iEAAiE;IACjE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,8DAA8D;IAC9D,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,YAAY;IAC3B,sGAAsG;IACtG,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACvC,uEAAuE;IACvE,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1C;AAED,MAAM,WAAW,aAAa;IAC5B,GAAG,IAAI,MAAM,CAAC;CACf;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,YAAY,CAAC;IACnB,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,oEAAoE;IACpE,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,iFAAiF;IACjF,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAe;IACpC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAgB;IACtC,OAAO,CAAC,QAAQ,CAAC,wBAAwB,CAAS;IAClD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IAIvC,OAAO,CAAC,gBAAgB,CAAM;IAG9B,OAAO,CAAC,gBAAgB,CAAuB;IAC/C;;;kDAG8C;IAC9C,OAAO,CAAC,aAAa,CAAkC;IACvD;4DACwD;IACxD,OAAO,CAAC,uBAAuB,CAAS;IACxC,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,aAAa,CAAS;gBAElB,IAAI,EAAE,qBAAqB;IAOvC;;;OAGG;IACG,YAAY,CAAC,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAyCrD;;;;;;;;;OASG;IACH,OAAO,CAAC,eAAe;IA6HvB;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,KAAK;CAWd;AAmBD,YAAY,EAAE,YAAY,EAAE,CAAC"}
@@ -0,0 +1,268 @@
1
+ /**
2
+ * TunnelNotifier — two-channel routing of tunnel lifecycle events to
3
+ * the user.
4
+ *
5
+ * Per spec specs/dev-infrastructure/tunnel-failure-resilience.md Part 3.
6
+ *
7
+ * Strict channel separation (the GPT external review's CRITICAL finding):
8
+ * - GROUP topic (Dashboard / Lifeline fallback / General fallback):
9
+ * status text only. NEVER the URL, NEVER the PIN, NEVER a signed
10
+ * view link. Anyone in the group can read those, which would defeat
11
+ * the owner-only consent gate.
12
+ * - OWNER DM (private bot chat with the owner principal): the actual
13
+ * URL + PIN + signed view links. The only credential-bearing channel.
14
+ *
15
+ * Class-based throttling (verification finding V2 + GPT finding #5):
16
+ * - action-required: NEVER throttled within an episode. Cross-episode
17
+ * cooldown applies (consent prompts) but the lifecycle decides that,
18
+ * not the notifier.
19
+ * - state-change: light — at most one per (episode, state) pair, and
20
+ * at most one per 15 minutes within an episode on re-entry of the
21
+ * same state.
22
+ * - noise: heavy — flapping episodes collapse into one "tunnel
23
+ * unstable" message, suppressed for the rest of the episode.
24
+ *
25
+ * Dedup by transition epoch (the lifecycle's monotonic counter): the
26
+ * notifier never emits twice for the same epoch, even if the same
27
+ * event fires through multiple listeners.
28
+ */
29
+ export class TunnelNotifier {
30
+ sink;
31
+ clock;
32
+ stateChangeMinIntervalMs;
33
+ flapThreshold;
34
+ // Dedup state. The lifecycle's epoch is monotonic per manager instance,
35
+ // so once we've emitted for epoch N we never re-emit for N.
36
+ lastEmittedEpoch = -1;
37
+ // Per-episode bookkeeping.
38
+ currentEpisodeId = null;
39
+ /** Last-emitted timestamps keyed by `<state>::<channel>` so the group
40
+ * pointer and the owner-DM credential delivery are throttled
41
+ * independently — otherwise the DM gets swallowed after the group
42
+ * pointer fires for the same state-change. */
43
+ lastEmittedAt = new Map();
44
+ /** Track noise-collapse emission per episode. Once emitted, further
45
+ * noise messages in the same episode are suppressed. */
46
+ noiseEmittedThisEpisode = false;
47
+ flapCycles = 0;
48
+ flapCollapsed = false;
49
+ constructor(opts) {
50
+ this.sink = opts.sink;
51
+ this.clock = opts.clock ?? { now: () => Date.now() };
52
+ this.stateChangeMinIntervalMs = opts.stateChangeMinIntervalMs ?? 15 * 60_000;
53
+ this.flapThreshold = opts.flapThreshold ?? 3;
54
+ }
55
+ /**
56
+ * Drive the notifier from a lifecycle transition. Idempotent on the
57
+ * transition epoch — repeated calls with the same epoch are no-ops.
58
+ */
59
+ async onTransition(e) {
60
+ // Dedup on epoch FIRST: never emit twice for the same epoch even if
61
+ // the listener fires multiple times.
62
+ if (e.epoch <= this.lastEmittedEpoch)
63
+ return;
64
+ this.lastEmittedEpoch = e.epoch;
65
+ // Reset per-episode bookkeeping when the episode id changes.
66
+ const newEpisodeId = e.episode?.episodeId ?? null;
67
+ if (newEpisodeId !== this.currentEpisodeId) {
68
+ this.currentEpisodeId = newEpisodeId;
69
+ this.lastEmittedAt = new Map();
70
+ this.noiseEmittedThisEpisode = false;
71
+ this.flapCycles = 0;
72
+ this.flapCollapsed = false;
73
+ }
74
+ // Build the message for THIS transition (if any).
75
+ const messages = this.composeMessages(e);
76
+ for (const m of messages) {
77
+ const allowed = this.allow(m, e.to);
78
+ if (!allowed)
79
+ continue;
80
+ try {
81
+ if (m.channel === 'group') {
82
+ await this.sink.sendGroup(m.text);
83
+ }
84
+ else {
85
+ await this.sink.sendOwnerDM(m.text);
86
+ }
87
+ // Update bookkeeping AFTER successful send (cheap-best-effort).
88
+ const key = throttleKey(e.to, m.channel);
89
+ this.lastEmittedAt.set(key, this.clock.now());
90
+ if (m.class === 'noise') {
91
+ this.noiseEmittedThisEpisode = true;
92
+ }
93
+ }
94
+ catch {
95
+ // Never throw into the tunnel path — preserves existing
96
+ // .catch(() => {}) semantics from server.ts.
97
+ }
98
+ }
99
+ }
100
+ /**
101
+ * Compose the user-facing messages for a transition. May return zero,
102
+ * one, or two messages (some transitions emit to BOTH channels, e.g.
103
+ * "back online — link in your DM" + DM with the URL).
104
+ *
105
+ * The DM credential payload is filled in by the manager via a callback
106
+ * (the notifier itself doesn't know URLs/PINs); for now the DM strings
107
+ * are placeholders that the manager substitutes before send. Future:
108
+ * extend onTransition signature to accept the credential payload.
109
+ */
110
+ composeMessages(e) {
111
+ const ep = e.episode?.episodeId ?? null;
112
+ const reason = e.lastFailureReason;
113
+ const messages = [];
114
+ switch (e.to) {
115
+ case 'retrying':
116
+ // First Tier-1 failure — describe the cause, no DM.
117
+ messages.push({
118
+ channel: 'group',
119
+ class: 'state-change',
120
+ text: `Couldn't reach the usual Cloudflare tunnel${reasonSuffix(reason)}; still retrying.`,
121
+ episodeId: ep,
122
+ epoch: e.epoch,
123
+ });
124
+ // Track for flap detection.
125
+ this.flapCycles += 1;
126
+ if (this.flapCycles >= this.flapThreshold && !this.flapCollapsed) {
127
+ this.flapCollapsed = true;
128
+ messages.push({
129
+ channel: 'group',
130
+ class: 'noise',
131
+ text: `Tunnel is unstable right now — still working on it. I'll stop re-pinging this until something changes.`,
132
+ episodeId: ep,
133
+ epoch: e.epoch,
134
+ });
135
+ }
136
+ break;
137
+ case 'active':
138
+ if (e.from === 'self-healing' || e.from === 'relay-active') {
139
+ // Self-healed back to Tier 1.
140
+ messages.push({
141
+ channel: 'group',
142
+ class: 'state-change',
143
+ text: `Your permanent link is back. New link in your DM.`,
144
+ episodeId: ep,
145
+ epoch: e.epoch,
146
+ });
147
+ messages.push({
148
+ channel: 'owner-dm',
149
+ class: 'state-change',
150
+ text: `__OWNER_DM_RESTORED_URL_PLACEHOLDER__`,
151
+ episodeId: ep,
152
+ epoch: e.epoch,
153
+ });
154
+ }
155
+ else if (e.from === 'retrying') {
156
+ // Cloudflare came back during retry.
157
+ messages.push({
158
+ channel: 'group',
159
+ class: 'state-change',
160
+ text: `Back online. Link in your DM.`,
161
+ episodeId: ep,
162
+ epoch: e.epoch,
163
+ });
164
+ messages.push({
165
+ channel: 'owner-dm',
166
+ class: 'state-change',
167
+ text: `__OWNER_DM_RECOVERED_URL_PLACEHOLDER__`,
168
+ episodeId: ep,
169
+ epoch: e.epoch,
170
+ });
171
+ }
172
+ // Other 'active' arrivals (initial startup) are non-events from the user's perspective.
173
+ break;
174
+ case 'awaiting-consent':
175
+ // Consent prompt: owner DM only, brief group pointer.
176
+ messages.push({
177
+ channel: 'group',
178
+ class: 'state-change',
179
+ text: `Cloudflare is down. I've messaged you in DM about a possible backup.`,
180
+ episodeId: ep,
181
+ epoch: e.epoch,
182
+ });
183
+ messages.push({
184
+ channel: 'owner-dm',
185
+ class: 'action-required',
186
+ text: `__OWNER_DM_CONSENT_PROMPT_PLACEHOLDER__`,
187
+ episodeId: ep,
188
+ epoch: e.epoch,
189
+ });
190
+ break;
191
+ case 'relay-active':
192
+ // A Tier-2 relay is up: group pointer + DM with URL + rotated PIN.
193
+ messages.push({
194
+ channel: 'group',
195
+ class: 'state-change',
196
+ text: `Backup tunnel is up. New link in your DM.`,
197
+ episodeId: ep,
198
+ epoch: e.epoch,
199
+ });
200
+ messages.push({
201
+ channel: 'owner-dm',
202
+ class: 'state-change',
203
+ text: `__OWNER_DM_RELAY_URL_PLACEHOLDER__`,
204
+ episodeId: ep,
205
+ epoch: e.epoch,
206
+ });
207
+ break;
208
+ case 'exhausted':
209
+ messages.push({
210
+ channel: 'group',
211
+ class: 'state-change',
212
+ text: `All tunnel options are unavailable right now. I'll keep retrying Cloudflare in the background and switch back the moment it recovers — no restart needed.`,
213
+ episodeId: ep,
214
+ epoch: e.epoch,
215
+ });
216
+ break;
217
+ case 'self-healing':
218
+ // No user-visible message at entry. The "permanent link is back"
219
+ // emits on self-healing → active (above).
220
+ break;
221
+ // No notification on idle / starting transitions.
222
+ case 'idle':
223
+ case 'starting':
224
+ break;
225
+ }
226
+ return messages;
227
+ }
228
+ /**
229
+ * Throttle decision per spec Part 3:
230
+ * - action-required: NEVER throttled within an episode.
231
+ * - state-change: at most one per (episode, state, channel) combo
232
+ * within `stateChangeMinIntervalMs`. The channel scoping is
233
+ * load-bearing: the group pointer and the owner-DM credential
234
+ * delivery are TWO messages for the same state-change; they must
235
+ * both emit, not throttle each other out.
236
+ * - noise: emits at most once per episode. The flap-collapse
237
+ * message goes out the first time the threshold is crossed; all
238
+ * subsequent noise in the same episode is suppressed.
239
+ */
240
+ allow(m, toState) {
241
+ if (m.class === 'action-required')
242
+ return true;
243
+ if (m.class === 'noise') {
244
+ return !this.noiseEmittedThisEpisode;
245
+ }
246
+ // state-change: keyed per (state, channel).
247
+ const key = throttleKey(toState, m.channel);
248
+ const lastAt = this.lastEmittedAt.get(key);
249
+ if (lastAt === undefined)
250
+ return true;
251
+ return this.clock.now() - lastAt >= this.stateChangeMinIntervalMs;
252
+ }
253
+ }
254
+ function throttleKey(state, channel) {
255
+ return `${state}::${channel}`;
256
+ }
257
+ function reasonSuffix(reason) {
258
+ switch (reason) {
259
+ case 'rate-limited': return ' (Cloudflare is rate-limiting us)';
260
+ case 'binary-missing': return ' (the tunnel software is missing)';
261
+ case 'network': return ' (network is unreachable)';
262
+ case 'timeout': return ' (it timed out connecting)';
263
+ case 'process-exit': return ' (the tunnel process exited)';
264
+ case 'reachability-failed': return ' (the link did not respond)';
265
+ default: return '';
266
+ }
267
+ }
268
+ //# sourceMappingURL=TunnelNotifier.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TunnelNotifier.js","sourceRoot":"","sources":["../../src/tunnel/TunnelNotifier.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,80 @@
1
+ /**
2
+ * TunnelProvider — abstraction over the underlying tunnel implementation.
3
+ *
4
+ * Per spec specs/dev-infrastructure/tunnel-failure-resilience.md Part 1:
5
+ * the TunnelManager is the single owner of the lifecycle state machine,
6
+ * and each backend (cloudflared quick, cloudflared named, localtunnel,
7
+ * bore) implements this interface. The manager treats providers as
8
+ * interchangeable units; trust-tier ordering (Tier 1 vs Tier 2) and the
9
+ * consent gate live in the manager, NOT in the providers themselves.
10
+ *
11
+ * Two tiers:
12
+ * - Tier 1: automatic, secure. Cloudflare providers. Tried silently.
13
+ * - Tier 2: consent-gated relays. localtunnel, bore. Never activated
14
+ * without explicit owner approval recorded against the episode.
15
+ *
16
+ * Every provider's `start()` MUST resolve only after the URL has passed
17
+ * a post-start reachability probe (verified by the manager via the
18
+ * /health endpoint through the public URL). A URL that emits from
19
+ * cloudflared but doesn't actually serve (e.g. localtunnel interstitial,
20
+ * bore.pub down) is NOT counted as `active` — that prevents a false
21
+ * "back online" broadcast for a dead link.
22
+ *
23
+ * The provider does NOT decide retry, fallback, or notification — those
24
+ * are the manager's responsibility. Provider responsibilities are
25
+ * narrowly: spawn the backend, surface the URL, surface a stop handle.
26
+ */
27
+ /** Trust tier — Tier 1 is automatic/secure, Tier 2 is consent-gated. */
28
+ export type ProviderTier = 1 | 2;
29
+ /** Stable identifier the manager uses to route episode/consent records. */
30
+ export type ProviderName = 'cloudflare-named' | 'cloudflare-quick' | 'localtunnel' | 'bore';
31
+ export interface TunnelProviderHandle {
32
+ /** The public URL the provider exposes. */
33
+ readonly url: string;
34
+ /**
35
+ * Stop the provider. MUST escalate SIGINT → SIGKILL with PID
36
+ * verification (mirror the existing `forceStop()` pattern) so the
37
+ * manager can guarantee no relay child lingers across a self-heal
38
+ * switch-back. Tunnel teardown is security-load-bearing for Tier 2.
39
+ */
40
+ stop(): Promise<void>;
41
+ }
42
+ export interface TunnelProvider {
43
+ /** Stable name routed through episode/consent records and audit logs. */
44
+ readonly name: ProviderName;
45
+ /** Trust tier — manager uses this to decide whether the consent gate applies. */
46
+ readonly tier: ProviderTier;
47
+ /**
48
+ * True if the provider can be started in this environment without further
49
+ * user setup. Used by the manager to filter the provider pool BEFORE
50
+ * declaring `exhausted`. Reasons for `false`: required binary missing,
51
+ * required token/credentials not configured, OS unsupported, etc.
52
+ *
53
+ * The manager calls this once per episode (cheap signal), not per attempt.
54
+ */
55
+ isAvailable(): Promise<boolean>;
56
+ /**
57
+ * Start the provider against the given local port. Resolves with the
58
+ * URL + a stop handle when the URL is emitted by the backend. The
59
+ * manager performs the reachability probe AFTER resolution and before
60
+ * transitioning to `active`; providers MUST NOT do their own probing
61
+ * here (the manager owns post-start verification per spec Part 1).
62
+ *
63
+ * Implementations should reject with a structured Error whose `message`
64
+ * carries the classification the manager will surface to the notifier
65
+ * (e.g. "rate-limited (HTTP 429 / Cloudflare 1015)", "binary missing",
66
+ * "network unreachable", "process exited code 1"). The manager parses
67
+ * these strings into ProviderFailureReason classifications.
68
+ */
69
+ start(localPort: number): Promise<TunnelProviderHandle>;
70
+ }
71
+ /**
72
+ * Classification the manager applies to a provider failure for the
73
+ * notifier and for deciding whether to advance to the next provider.
74
+ *
75
+ * The classification is owned by the manager (not the provider) per the
76
+ * signal-vs-authority discipline: providers raise errors with reason
77
+ * strings; the manager classifies into this enum and routes accordingly.
78
+ */
79
+ export type ProviderFailureReason = 'rate-limited' | 'binary-missing' | 'network' | 'process-exit' | 'timeout' | 'reachability-failed' | 'unknown';
80
+ //# sourceMappingURL=TunnelProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TunnelProvider.d.ts","sourceRoot":"","sources":["../../src/tunnel/TunnelProvider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,wEAAwE;AACxE,MAAM,MAAM,YAAY,GAAG,CAAC,GAAG,CAAC,CAAC;AAEjC,2EAA2E;AAC3E,MAAM,MAAM,YAAY,GACpB,kBAAkB,GAClB,kBAAkB,GAClB,aAAa,GACb,MAAM,CAAC;AAEX,MAAM,WAAW,oBAAoB;IACnC,2CAA2C;IAC3C,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB;;;;;OAKG;IACH,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACvB;AAED,MAAM,WAAW,cAAc;IAC7B,yEAAyE;IACzE,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAE5B,iFAAiF;IACjF,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAE5B;;;;;;;OAOG;IACH,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAEhC;;;;;;;;;;;;OAYG;IACH,KAAK,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;CACzD;AAED;;;;;;;GAOG;AACH,MAAM,MAAM,qBAAqB,GAC7B,cAAc,GACd,gBAAgB,GAChB,SAAS,GACT,cAAc,GACd,SAAS,GACT,qBAAqB,GACrB,SAAS,CAAC"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * TunnelProvider — abstraction over the underlying tunnel implementation.
3
+ *
4
+ * Per spec specs/dev-infrastructure/tunnel-failure-resilience.md Part 1:
5
+ * the TunnelManager is the single owner of the lifecycle state machine,
6
+ * and each backend (cloudflared quick, cloudflared named, localtunnel,
7
+ * bore) implements this interface. The manager treats providers as
8
+ * interchangeable units; trust-tier ordering (Tier 1 vs Tier 2) and the
9
+ * consent gate live in the manager, NOT in the providers themselves.
10
+ *
11
+ * Two tiers:
12
+ * - Tier 1: automatic, secure. Cloudflare providers. Tried silently.
13
+ * - Tier 2: consent-gated relays. localtunnel, bore. Never activated
14
+ * without explicit owner approval recorded against the episode.
15
+ *
16
+ * Every provider's `start()` MUST resolve only after the URL has passed
17
+ * a post-start reachability probe (verified by the manager via the
18
+ * /health endpoint through the public URL). A URL that emits from
19
+ * cloudflared but doesn't actually serve (e.g. localtunnel interstitial,
20
+ * bore.pub down) is NOT counted as `active` — that prevents a false
21
+ * "back online" broadcast for a dead link.
22
+ *
23
+ * The provider does NOT decide retry, fallback, or notification — those
24
+ * are the manager's responsibility. Provider responsibilities are
25
+ * narrowly: spawn the backend, surface the URL, surface a stop handle.
26
+ */
27
+ export {};
28
+ //# sourceMappingURL=TunnelProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TunnelProvider.js","sourceRoot":"","sources":["../../src/tunnel/TunnelProvider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "instar",
3
- "version": "1.2.34",
3
+ "version": "1.2.36",
4
4
  "description": "Persistent autonomy infrastructure for AI agents",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "$schema": "./builtin-manifest.schema.json",
3
3
  "schemaVersion": 1,
4
- "generatedAt": "2026-05-22T21:51:00.191Z",
5
- "instarVersion": "1.2.34",
4
+ "generatedAt": "2026-05-22T23:00:24.085Z",
5
+ "instarVersion": "1.2.36",
6
6
  "entryCount": 191,
7
7
  "entries": {
8
8
  "hook:session-start": {