@saleso.innovations/bridge 0.1.31 → 0.1.33

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.
@@ -1,7 +1,7 @@
1
1
  export declare const EXIT_SENTINEL_PREFIX = "__CLEOS_EXIT_";
2
2
  export declare const EXIT_SENTINEL_SUFFIX = "__";
3
3
  export declare const MAX_OUTPUT_BYTES: number;
4
- export declare const DEFAULT_COMMAND_TIMEOUT_MS = 120000;
4
+ export declare const DEFAULT_COMMAND_TIMEOUT_MS = 60000;
5
5
  export type ShellDeltaEmitter = (stream: "stdout" | "stderr", delta: string, sequence: number) => void;
6
6
  export type ParsedShellFooter = {
7
7
  output: string;
@@ -1 +1 @@
1
- {"version":3,"file":"shellSession.d.ts","sourceRoot":"","sources":["../src/shellSession.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,oBAAoB,kBAAkB,CAAC;AACpD,eAAO,MAAM,oBAAoB,OAAO,CAAC;AACzC,eAAO,MAAM,gBAAgB,QAAa,CAAC;AAC3C,eAAO,MAAM,0BAA0B,SAAU,CAAC;AAGlD,MAAM,MAAM,iBAAiB,GAAG,CAAC,MAAM,EAAE,QAAQ,GAAG,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;AAEvG,MAAM,MAAM,iBAAiB,GAAG;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;CACb,CAAC;AAmBF,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAG/D;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI,CAWtE;AAmJD,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,OAAO,EAAE,iBAAiB,EAC1B,SAAS,GAAE,MAAmC,GAC7C,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CAwClD;AAED,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,CAU1E;AAED,wBAAgB,0BAA0B,IAAI,IAAI,CAOjD"}
1
+ {"version":3,"file":"shellSession.d.ts","sourceRoot":"","sources":["../src/shellSession.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,oBAAoB,kBAAkB,CAAC;AACpD,eAAO,MAAM,oBAAoB,OAAO,CAAC;AACzC,eAAO,MAAM,gBAAgB,QAAa,CAAC;AAC3C,eAAO,MAAM,0BAA0B,QAAS,CAAC;AAGjD,MAAM,MAAM,iBAAiB,GAAG,CAAC,MAAM,EAAE,QAAQ,GAAG,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;AAEvG,MAAM,MAAM,iBAAiB,GAAG;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;CACb,CAAC;AAmBF,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAG/D;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI,CAWtE;AAmJD,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,OAAO,EAAE,iBAAiB,EAC1B,SAAS,GAAE,MAAmC,GAC7C,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CAwClD;AAED,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,CAU1E;AAED,wBAAgB,0BAA0B,IAAI,IAAI,CAOjD"}
@@ -3,7 +3,7 @@ import { homedir } from "node:os";
3
3
  export const EXIT_SENTINEL_PREFIX = "__CLEOS_EXIT_";
4
4
  export const EXIT_SENTINEL_SUFFIX = "__";
5
5
  export const MAX_OUTPUT_BYTES = 512 * 1024;
6
- export const DEFAULT_COMMAND_TIMEOUT_MS = 120_000;
6
+ export const DEFAULT_COMMAND_TIMEOUT_MS = 60_000;
7
7
  const SENTINEL_TAIL_RESERVE = 64;
8
8
  const sessions = new Map();
9
9
  export function buildWrappedCommand(userCommand) {
@@ -11,7 +11,7 @@ export function buildWrappedCommand(userCommand) {
11
11
  return `{ eval "$(printf '%s' '${encoded}' | base64 -d)"; ec=$?; echo "${EXIT_SENTINEL_PREFIX}\${ec}${EXIT_SENTINEL_SUFFIX}"; pwd; } 2>&1\n`;
12
12
  }
13
13
  export function parseShellFooter(raw) {
14
- const pattern = new RegExp(`\\n${EXIT_SENTINEL_PREFIX}(\\d+)${EXIT_SENTINEL_SUFFIX}\\n([^\\n]*)\\n?$`);
14
+ const pattern = new RegExp(`(?:^|\\n)${EXIT_SENTINEL_PREFIX}(\\d+)${EXIT_SENTINEL_SUFFIX}\\n([^\\n]*)\\n?$`);
15
15
  const match = raw.match(pattern);
16
16
  if (!match || match.index === undefined)
17
17
  return null;
@@ -121,7 +121,7 @@ function attachSessionHandlers(sessionId, session) {
121
121
  });
122
122
  }
123
123
  function createSession(sessionId) {
124
- const child = spawn("bash", ["--login"], {
124
+ const child = spawn("bash", ["--noprofile", "--norc"], {
125
125
  cwd: homedir(),
126
126
  env: process.env,
127
127
  stdio: ["pipe", "pipe", "pipe"],
@@ -193,7 +193,7 @@ export function resetShellSession(sessionId) {
193
193
  const existing = sessions.get(sessionId);
194
194
  if (existing) {
195
195
  if (existing.busy) {
196
- throw new Error("Shell session is busy");
196
+ failPending(existing, new Error("Shell session reset"));
197
197
  }
198
198
  existing.process.kill("SIGTERM");
199
199
  sessions.delete(sessionId);
@@ -19,6 +19,14 @@ test("parseShellFooter handles exit code zero", () => {
19
19
  assert.equal(parsed.exitCode, 0);
20
20
  assert.equal(parsed.cwd, "/home/user");
21
21
  });
22
+ test("parseShellFooter handles empty command output", () => {
23
+ const raw = `${EXIT_SENTINEL_PREFIX}0${EXIT_SENTINEL_SUFFIX}\n/home/user\n`;
24
+ const parsed = parseShellFooter(raw);
25
+ assert.ok(parsed);
26
+ assert.equal(parsed.output, "");
27
+ assert.equal(parsed.exitCode, 0);
28
+ assert.equal(parsed.cwd, "/home/user");
29
+ });
22
30
  test("buildWrappedCommand base64-encodes user input", () => {
23
31
  const wrapped = buildWrappedCommand("echo hello");
24
32
  assert.match(wrapped, /base64 -d/);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@saleso.innovations/bridge",
3
- "version": "0.1.31",
3
+ "version": "0.1.33",
4
4
  "description": "Connect your Hermes agent to the Cleos iOS app via pairing code.",
5
5
  "type": "module",
6
6
  "license": "MIT",