@agentvault/claude-bridge 0.6.1 → 0.6.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.
package/dist/index.js CHANGED
@@ -132545,6 +132545,12 @@ var PersistentClaudeSession = class {
132545
132545
  currentReplyExpected = false;
132546
132546
  saidThisTurn = false;
132547
132547
  turnText = "";
132548
+ /** #630 drop-probe: did a `result` event arrive for the CURRENT turn? Reset per
132549
+ * turn in input(), set in the result block. Distinguishes a turn that never
132550
+ * reached a result boundary (the silent-drop prime suspect) from a healthy
132551
+ * #416 fallback delivery (which delivers via `void reply(...)` WITHOUT setting
132552
+ * saidThisTurn, so !saidThisTurn alone would false-flag it). */
132553
+ sawResultThisTurn = false;
132548
132554
  /** In-process room MCP server — hoisted so buildSdkOptions can reference it. */
132549
132555
  roomServer;
132550
132556
  /** AbortController for the in-flight query(); abort() triggers it (queue timeout). */
@@ -132613,6 +132619,7 @@ var PersistentClaudeSession = class {
132613
132619
  this.currentArmedGetter = item.armed ?? (() => false);
132614
132620
  this.saidThisTurn = false;
132615
132621
  this.turnText = "";
132622
+ this.sawResultThisTurn = false;
132616
132623
  yield item.msg;
132617
132624
  }
132618
132625
  }
@@ -132732,20 +132739,35 @@ var PersistentClaudeSession = class {
132732
132739
  prompt: this.input(),
132733
132740
  options: sdkOptions
132734
132741
  });
132735
- for await (const m6 of q10) {
132736
- if (m6.type === "assistant") {
132737
- const blocks = m6.message?.content ?? [];
132738
- const text = blocks.filter((b5) => b5.type === "text").map((b5) => b5.text ?? "").join("");
132739
- if (text.trim()) {
132740
- this.turnText += text;
132741
- this.opts.onObserve?.(text);
132742
- }
132743
- } else if (m6.type === "result") {
132744
- const reply = this.activeReply;
132745
- if (this.currentReplyExpected && !this.saidThisTurn && this.turnText.trim() && reply) {
132746
- void reply(this.turnText);
132742
+ try {
132743
+ for await (const m6 of q10) {
132744
+ if (m6.type === "assistant") {
132745
+ const blocks = m6.message?.content ?? [];
132746
+ const text = blocks.filter((b5) => b5.type === "text").map((b5) => b5.text ?? "").join("");
132747
+ if (text.trim()) {
132748
+ this.turnText += text;
132749
+ this.opts.onObserve?.(text);
132750
+ }
132751
+ } else if (m6.type === "result") {
132752
+ this.sawResultThisTurn = true;
132753
+ const reply = this.activeReply;
132754
+ if (this.currentReplyExpected && !this.saidThisTurn && this.turnText.trim()) {
132755
+ if (reply) {
132756
+ void reply(this.turnText);
132757
+ } else {
132758
+ console.error(
132759
+ `[drop-probe] BLOCKED at result: composed ${this.turnText.length} chars, reply expected but activeReply unset \u2014 reply DROPPED`
132760
+ );
132761
+ }
132762
+ }
132747
132763
  }
132748
132764
  }
132765
+ } finally {
132766
+ if (this.currentReplyExpected && !this.saidThisTurn && !this.sawResultThisTurn && this.turnText.trim()) {
132767
+ console.error(
132768
+ `[drop-probe] STREAM ENDED before result: composed ${this.turnText.length} chars, reply expected, said=false \u2014 reply DROPPED (no result event)`
132769
+ );
132770
+ }
132749
132771
  }
132750
132772
  }
132751
132773
  };
@@ -133281,7 +133303,7 @@ async function main() {
133281
133303
  "[bridge] warning: passing the invite token on the command line is visible to other local users via 'ps'. Prefer: AV_INVITE_TOKEN=\u2026 npx @agentvault/claude-bridge"
133282
133304
  );
133283
133305
  }
133284
- console.error(`[bridge] version: ${true ? "0.6.1" : "dev"}`);
133306
+ console.error(`[bridge] version: ${true ? "0.6.2" : "dev"}`);
133285
133307
  console.error(`[bridge] data dir: ${cfg.dataDir} (${cfg.dataDirSource})`);
133286
133308
  console.error(`[bridge] workspace: ${cfg.workspaceDir} \xB7 permissions: ${cfg.permissionMode} \xB7 enclave dir fenced`);
133287
133309
  if (cfg.armRoom) {
package/dist/session.d.ts CHANGED
@@ -137,6 +137,12 @@ export declare class PersistentClaudeSession {
137
137
  private currentReplyExpected;
138
138
  private saidThisTurn;
139
139
  private turnText;
140
+ /** #630 drop-probe: did a `result` event arrive for the CURRENT turn? Reset per
141
+ * turn in input(), set in the result block. Distinguishes a turn that never
142
+ * reached a result boundary (the silent-drop prime suspect) from a healthy
143
+ * #416 fallback delivery (which delivers via `void reply(...)` WITHOUT setting
144
+ * saidThisTurn, so !saidThisTurn alone would false-flag it). */
145
+ private sawResultThisTurn;
140
146
  /** In-process room MCP server — hoisted so buildSdkOptions can reference it. */
141
147
  private roomServer;
142
148
  /** AbortController for the in-flight query(); abort() triggers it (queue timeout). */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agentvault/claude-bridge",
3
- "version": "0.6.1",
3
+ "version": "0.6.2",
4
4
  "type": "module",
5
5
  "description": "AgentVault Claude Bridge — daemon for bridging a Claude agent into secure E2E-encrypted AgentVault 1:1 direct messages and rooms.",
6
6
  "main": "dist/index.js",