@actana/sdk 0.3.3 → 0.4.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.
@@ -133,6 +133,32 @@ export type CoreSessionStartOptions = {
133
133
  */
134
134
  subscribeToEvents?: boolean;
135
135
  };
136
+ export type CoreSessionAttachOptions = {
137
+ /** The Session to join. It must have a live PTY; see {@link CoreSessionAttachError}. */
138
+ taskId: string;
139
+ /** Screen width for the transcript this attachment renders. */
140
+ cols?: number;
141
+ /** Screen height. Same. */
142
+ rows?: number;
143
+ /** How many scrolled-off lines {@link CoreSession.screen} keeps. */
144
+ scrollback?: number;
145
+ /** As {@link CoreSessionStartOptions.subscribeToEvents}. Default true. */
146
+ subscribeToEvents?: boolean;
147
+ /**
148
+ * Paint the Core's replay ring into the screen before returning. Default true.
149
+ *
150
+ * On by default because a caller that attaches to read a turn wants the
151
+ * conversation it lands in the middle of, not the tail of one turn — and the
152
+ * ring belongs to the PTY, so it is readable now and gone when the harness
153
+ * exits. Off is for a caller that wants only what this attachment saw.
154
+ *
155
+ * **It does not turn the PTY subscription off**, which is a separate thing and
156
+ * is unconditional: without one, `onData` and `onExit` never fire against a
157
+ * multi-connection Core, and an attachment that could not hear an exit is one
158
+ * whose wait outlives the process it is about.
159
+ */
160
+ replay?: boolean;
161
+ };
136
162
  /** What a Session settled on. */
137
163
  export type CoreSessionIdle = {
138
164
  /** The Core's status for this Session — one of {@link SETTLED_SESSION_STATUSES}. */
@@ -152,12 +178,37 @@ export type CoreSessionWaitOptions = {
152
178
  */
153
179
  timeoutMs?: number;
154
180
  };
181
+ export type CoreSessionTurnWaitOptions = CoreSessionWaitOptions & {
182
+ /**
183
+ * Only a settling status learned at an event id **strictly greater** than this
184
+ * one ends the wait — the id the Core stamped a delivery with
185
+ * ({@link CoreSession.deliver}).
186
+ *
187
+ * 0, the default, is no cursor: any settled status the Session is known to be
188
+ * in ends the wait, which is what {@link CoreSession.waitForIdle} has always
189
+ * done.
190
+ */
191
+ afterEventId?: number;
192
+ };
155
193
  /** The Core refused to start this Session. Carries the Core's own reason. */
156
194
  export declare class CoreSessionStartError extends Error {
157
195
  constructor(message: string, options?: {
158
196
  cause?: unknown;
159
197
  });
160
198
  }
199
+ /**
200
+ * There is nothing running to attach to.
201
+ *
202
+ * Its own kind because it is the one failure an attach has that a start does
203
+ * not, and because the alternative is worse than an error: a wait against a
204
+ * Session whose harness has already exited has nothing that will ever report a
205
+ * turn, so it would hang until the caller's deadline and then blame the Core.
206
+ */
207
+ export declare class CoreSessionAttachError extends Error {
208
+ constructor(message: string, options?: {
209
+ cause?: unknown;
210
+ });
211
+ }
161
212
  /**
162
213
  * One Session on one Core, driven programmatically.
163
214
  *
@@ -171,10 +222,20 @@ export declare class CoreSession {
171
222
  readonly taskId: string;
172
223
  /** The Core's id for this Session's PTY. */
173
224
  readonly ptyId: string;
174
- /** The harness running in it. */
175
- readonly harness: CoreLinkPtySpawnHarness;
176
- /** The command the Core was asked to start, after defaulting. */
177
- readonly command: string;
225
+ /**
226
+ * The harness running in it, or `null` on a Session this process did not
227
+ * start {@link attach} joins a PTY that is already running, and the Core
228
+ * publishes no harness for one. A caller that needs the name reads it off the
229
+ * Task row, which is where it lives.
230
+ */
231
+ readonly harness: CoreLinkPtySpawnHarness | null;
232
+ /**
233
+ * The command the Core was asked to start, after defaulting, or `null` on an
234
+ * {@link attach} — the command was decided by whoever spawned the PTY and the
235
+ * Core does not publish it afterwards. Null is "this side does not know",
236
+ * never "there was none".
237
+ */
238
+ readonly command: string | null;
178
239
  /**
179
240
  * Will anything move this Session to `running` when a turn begins (issue 84,
180
241
  * issue 177 finding 4)?
@@ -198,15 +259,33 @@ export declare class CoreSession {
198
259
  *
199
260
  * `false` on a Core too old to answer, which is the safe direction: a
200
261
  * redundant caveat, never a silently statusless Session.
262
+ *
263
+ * `null` on an {@link attach}, which is a different thing again: the Core
264
+ * answers this question on a **spawn**, so a Session joined after the fact has
265
+ * no answer rather than a negative one. **No wait consults this field** (#289
266
+ * A) — turn *end* is reported by every harness family, and that is what every
267
+ * wait here is waiting for.
201
268
  */
202
- readonly reportsTurnStart: boolean;
269
+ readonly reportsTurnStart: boolean | null;
203
270
  private readonly client;
204
271
  private readonly terminal;
205
272
  private readonly unsubscribes;
206
273
  private readonly dataListeners;
207
274
  private readonly exitListeners;
208
275
  private readonly statusListeners;
276
+ /**
277
+ * Everyone waiting for a turn to end, each with the event id it counts from.
278
+ * A waiter with `afterEventId: 0` takes any settled status; one carrying a
279
+ * delivery stamp takes only a status learned after it.
280
+ */
209
281
  private readonly idleWaiters;
282
+ /**
283
+ * This Session asked the Core for its PTY's stream, so {@link dispose} owes it
284
+ * a matching `ptyUnsubscribe`. False for a spawned Session: the Core
285
+ * subscribes the connection that spawned a PTY, inside the spawn, and nothing
286
+ * here asked for that.
287
+ */
288
+ private subscribedToPty;
210
289
  /**
211
290
  * The Core's last reported status, or null before one has been *observed*.
212
291
  *
@@ -217,6 +296,18 @@ export declare class CoreSession {
217
296
  * event after {@link start} lands here.
218
297
  */
219
298
  private lastStatus;
299
+ /**
300
+ * The event id {@link lastStatus} was learned at, or 0 when it was not learned
301
+ * from an event — the status {@link attach} seeded from the Task row.
302
+ *
303
+ * This is what makes a cursored wait possible (#289 A). "Has this Session
304
+ * settled?" answers with whatever it is sitting at, including last turn's
305
+ * answer; "has this Session settled **since event N**?" is the question a
306
+ * caller that just delivered a prompt is actually asking, and it needs a
307
+ * *where* as well as a *what*. A seeded status carries 0 on purpose: 0 is
308
+ * greater than nothing, so it can never satisfy a real cursor.
309
+ */
310
+ private lastStatusEventId;
220
311
  private exit;
221
312
  private disposed;
222
313
  /** A status read is in flight; another event arrived while it was. */
@@ -249,6 +340,43 @@ export declare class CoreSession {
249
340
  * installed on that machine.
250
341
  */
251
342
  static start(client: CoreClient, opts: CoreSessionStartOptions): Promise<CoreSession>;
343
+ /**
344
+ * Join a Session that is **already running**, for the length of a turn (#289).
345
+ *
346
+ * The gap this closes: {@link start} is the only way into a `CoreSession`, and
347
+ * it spawns. Everything this class offers a caller after the first turn — the
348
+ * screen, the status, the wait — was unreachable for a Session somebody else
349
+ * started, or that this process started and hung up on. Awaiting a follow-up
350
+ * turn is therefore SDK work rather than a flag on a command, and this is it.
351
+ *
352
+ * What it does, in order, and the order is the point:
353
+ *
354
+ * 1. subscribe to the event log, if nothing has, so a status change that
355
+ * lands during the rest of this is heard rather than missed;
356
+ * 2. resolve the Task's live PTY — **once**, and every write and wait made
357
+ * through the returned Session uses that resolution, so there is no
358
+ * window between delivering text and starting to wait for it;
359
+ * 3. wire the byte stream, the exit and the events **before** subscribing;
360
+ * 4. subscribe to that PTY, which is what makes the Core send this
361
+ * connection its bytes and its exit at all;
362
+ * 5. seed the screen from the Core's replay ring, and the last known status
363
+ * from the Session snapshot.
364
+ *
365
+ * **The seeded status carries event id 0**, which is what keeps it honest.
366
+ * `waitForIdle` will answer from it — that is `actana session wait` on a
367
+ * Session already sitting at `needs-input`, and answering immediately is
368
+ * right, because no turn was asked for. {@link waitForTurnEnd} with a delivery
369
+ * stamp will not: 0 can never be greater than a real cursor, so a wait for the
370
+ * turn a write starts cannot be answered by the turn before it.
371
+ *
372
+ * Rejects with {@link CoreSessionAttachError} when the Task has no live PTY —
373
+ * a harness that exited, or a Session id that is not one. **Only that.** A
374
+ * link that blinked during the subscribe, the replay or the status read
375
+ * rejects with an ordinary `Error`: the two are different next steps, and
376
+ * reporting a busy Core as a dead harness sends a caller to `resume` for a
377
+ * Session that is running perfectly well.
378
+ */
379
+ static attach(client: CoreClient, opts: CoreSessionAttachOptions): Promise<CoreSession>;
252
380
  /**
253
381
  * Write to the Session, exactly these bytes and nothing else.
254
382
  *
@@ -267,6 +395,25 @@ export declare class CoreSession {
267
395
  * exited. Rejects when another Core client holds this Session's lock.
268
396
  */
269
397
  send(text: string): Promise<boolean>;
398
+ /**
399
+ * {@link send}, with the Core stamping the delivery in its event log and
400
+ * answering with the id — the cursor {@link waitForTurnEnd} counts from
401
+ * (#289 A).
402
+ *
403
+ * Exactly the same bytes and exactly as little timing as `send`: the stamp is
404
+ * a fact recorded about a write that already happened, not a schedule imposed
405
+ * on one. A caller wanting to await the turn its text starts writes with this
406
+ * and waits from what it returns, and the two are one round trip apart with no
407
+ * window between them in which the Session could settle unobserved.
408
+ *
409
+ * `deliveryEventId` is 0 when the Core did not stamp — a write the PTY
410
+ * refused, a Core that predates the stamp, a PTY with no Task behind it. 0 is
411
+ * not a cursor: a caller that waits from it is waiting with none.
412
+ */
413
+ deliver(text: string): Promise<{
414
+ ok: boolean;
415
+ deliveryEventId: number;
416
+ }>;
270
417
  /**
271
418
  * Every chunk of this Session's output, as it arrives.
272
419
  *
@@ -335,6 +482,32 @@ export declare class CoreSession {
335
482
  * passes a deadline it chose itself.
336
483
  */
337
484
  waitForIdle(opts?: CoreSessionWaitOptions): Promise<CoreSessionIdle>;
485
+ /**
486
+ * Wait for the end of the turn that follows event `afterEventId` — the wait
487
+ * `session send --wait` is built on (#289 A, B).
488
+ *
489
+ * **Why a cursor.** {@link waitForIdle} answers from the status the Session is
490
+ * already sitting at, and for a Session that was started here that is right:
491
+ * it has observed no status yet, so anything it hears is this turn's. For a
492
+ * Session that was **already running** it is a lie waiting to be told — a
493
+ * harness parked on `needs-input` is settled, so a wait attached to it and
494
+ * started after a write would return before the harness had read a character,
495
+ * reporting the previous turn's answer as this one's. Passing the id the Core
496
+ * stamped the delivery with turns "is it settled?" into "has it settled since
497
+ * the thing I sent?", and only the second question has a truthful answer.
498
+ *
499
+ * `afterEventId: 0` (the default) is no cursor and is {@link waitForIdle}.
500
+ *
501
+ * Resolves on **any** of {@link SETTLED_SESSION_STATUSES}, not on `finished`
502
+ * alone: a turn that ended on a permission prompt, an escape or a dead harness
503
+ * ended, and a caller waiting for `finished` there waits forever on exactly the
504
+ * cases it most needs to hear about. A process exit resolves it too.
505
+ *
506
+ * Nothing here reads the byte stream, and nothing here consults
507
+ * {@link reportsTurnStart}. Turn end is reported by every harness family; turn
508
+ * *start* is not, which is why no wait is keyed on it.
509
+ */
510
+ waitForTurnEnd(opts?: CoreSessionTurnWaitOptions): Promise<CoreSessionIdle>;
338
511
  /** Resize the PTY and the screen together, so both agree about wrapping. */
339
512
  resize(cols: number, rows: number): Promise<boolean>;
340
513
  /** Kill the harness's process, then release this Session's listeners. */
@@ -360,13 +533,48 @@ export declare class CoreSession {
360
533
  * A read that fails is re-asked ({@link STATUS_READ_RETRIES}), because on
361
534
  * `needs-input`, `interrupted` and `terminated` there is no second event to
362
535
  * carry the news.
536
+ *
537
+ * **What it reads never advances the wait cursor** (#289 A). This path is
538
+ * reached for an event that did not say what it changed — a rename, an
539
+ * archive, a Core too old to name the patched status — and the row it reads
540
+ * back may be carrying the status of a turn that ended long before. Answering
541
+ * a cursored wait from that is the early resolution the cursor exists to
542
+ * prevent, so a read updates `lastStatus` and leaves the cursor where it was.
363
543
  */
364
544
  private readStatus;
545
+ /**
546
+ * Read the Core's current status for this Session once, at attach, at event
547
+ * id 0 — "what it is sitting at", never "what it did".
548
+ *
549
+ * A missing row is not an error here: the Session has a live PTY (the attach
550
+ * proved it), and a Core that does not list it yet will report its status like
551
+ * any other, through the event log this attachment is already listening to.
552
+ */
553
+ private seedStatus;
365
554
  /** The next re-ask of a read that failed. Cleared by {@link dispose}. */
366
555
  private scheduleStatusRetry;
556
+ /**
557
+ * Record a status the Core reported, and where in the log it was reported.
558
+ *
559
+ * **A repeated status is still news**, which is why the cursor moves even when
560
+ * the string does not (#289 A). A harness that never moved its Session to
561
+ * `running` ends its second turn by patching `finished` onto a row that
562
+ * already said `finished`; the value did not change, but a turn ended, and a
563
+ * waiter counting from a delivery stamp is waiting for exactly that. What
564
+ * stays gated on a change is {@link onStatus}, which is about the value.
565
+ */
367
566
  private noteStatus;
368
567
  /** What {@link waitForIdle} would answer right now, or null if it must wait. */
369
568
  private settledNow;
569
+ /**
570
+ * What a wait counting from `afterEventId` would answer right now, or null.
571
+ *
572
+ * An **exit** answers every wait, cursor or none: a harness whose process is
573
+ * gone will not report anything else, and a caller left waiting for a status
574
+ * after that waits forever. A status answers a cursored wait only when it was
575
+ * learned after the cursor — a seeded status (event id 0) never does.
576
+ */
577
+ private settledSince;
370
578
  private releaseWaiters;
371
579
  }
372
580
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"core-session.d.ts","sourceRoot":"","sources":["../src/core-session.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"core-session.d.ts","sourceRoot":"","sources":["../src/core-session.ts"],"names":[],"mappings":"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"}