@threadbase-sh/streamer 1.70.0 → 1.70.1

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/dist/index.js CHANGED
@@ -9741,7 +9741,7 @@ var PromptRegistry = class {
9741
9741
  this.maxRecordsPerSession = options.maxRecordsPerSession ?? PROMPT_MAX_RECORDS_PER_SESSION;
9742
9742
  }
9743
9743
  open(draft, adapter, promptId = this.createId()) {
9744
- this.prune(draft.sessionId);
9744
+ this.sweepExpired(draft.sessionId);
9745
9745
  const held = this.byId.get(promptId);
9746
9746
  if (held && (held.prompt.state === "open" || held.prompt.state === "updated")) {
9747
9747
  throw new Error(`Prompt id already exists: ${promptId}`);
@@ -9843,17 +9843,17 @@ var PromptRegistry = class {
9843
9843
  get(promptId) {
9844
9844
  const entry = this.byId.get(promptId);
9845
9845
  if (!entry) return null;
9846
- this.prune(entry.prompt.sessionId);
9846
+ this.sweepExpired(entry.prompt.sessionId);
9847
9847
  return this.byId.has(promptId) ? copyPrompt(entry.prompt) : null;
9848
9848
  }
9849
9849
  hasActionable(sessionId) {
9850
- this.prune(sessionId);
9850
+ this.sweepExpired(sessionId);
9851
9851
  return [...this.bySession.get(sessionId)?.values() ?? []].some(
9852
9852
  (entry) => entry.prompt.state === "open" || entry.prompt.state === "updated"
9853
9853
  );
9854
9854
  }
9855
9855
  snapshot(sessionId) {
9856
- this.prune(sessionId);
9856
+ this.sweepExpired(sessionId);
9857
9857
  return {
9858
9858
  type: "prompt_snapshot",
9859
9859
  schemaVersion: PROMPT_SCHEMA_VERSION,
@@ -9868,7 +9868,7 @@ var PromptRegistry = class {
9868
9868
  for (const entry of this.byId.values()) this.clearExpiration(entry);
9869
9869
  }
9870
9870
  answer(sessionId, answer) {
9871
- this.prune(sessionId);
9871
+ this.sweepExpired(sessionId);
9872
9872
  const entry = this.byId.get(answer.promptId);
9873
9873
  if (!entry || entry.prompt.sessionId !== sessionId) {
9874
9874
  return Promise.resolve({ ok: false, code: "prompt_not_found" });
@@ -9998,7 +9998,7 @@ var PromptRegistry = class {
9998
9998
  if (!entry) throw new Error(`Unknown prompt: ${promptId}`);
9999
9999
  return entry;
10000
10000
  }
10001
- prune(sessionId) {
10001
+ sweepExpired(sessionId) {
10002
10002
  const now = this.now();
10003
10003
  const session = this.bySession.get(sessionId);
10004
10004
  if (!session) return;
@@ -11022,19 +11022,26 @@ var SessionHandlers = class {
11022
11022
  json(res, 400, { error: "Missing input field" });
11023
11023
  return;
11024
11024
  }
11025
- this.promptRegistry.hasActionable(sessionId);
11025
+ this.promptRegistry.sweepExpired(sessionId);
11026
11026
  const openPrompt = this.pendingPermission.has(sessionId) ? "permission" : this.pendingQuestions.has(sessionId) ? "question" : null;
11027
11027
  if (openPrompt) {
11028
- this.log.info(`[input.prompt_pending] ${sessionId.slice(0, 8)} kind=${openPrompt}`, {
11029
- event: "input.prompt_pending",
11030
- sessionId,
11031
- promptKind: openPrompt
11032
- });
11028
+ const pendingGate = openPrompt === "permission" ? this.pendingPermission.get(sessionId) : void 0;
11029
+ const promptState = pendingGate?.promptId !== void 0 && this.promptRegistry.get(pendingGate.promptId)?.state === "resolved" ? "answered" : "open";
11030
+ this.log.info(
11031
+ `[input.prompt_pending] ${sessionId.slice(0, 8)} kind=${openPrompt} state=${promptState}`,
11032
+ {
11033
+ event: "input.prompt_pending",
11034
+ sessionId,
11035
+ promptKind: openPrompt,
11036
+ promptState
11037
+ }
11038
+ );
11033
11039
  json(res, 409, {
11034
11040
  ok: false,
11035
11041
  reason: "prompt_pending",
11036
11042
  promptKind: openPrompt,
11037
- error: "A prompt is waiting for an answer; answer or dismiss it before sending text"
11043
+ promptState,
11044
+ error: promptState === "answered" ? "Your answer was sent; wait for the prompt to close before sending text" : "A prompt is waiting for an answer; answer or dismiss it before sending text"
11038
11045
  });
11039
11046
  return;
11040
11047
  }