clisbot 0.1.45-beta.8 → 0.1.45-beta.9

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 (3) hide show
  1. package/README.md +1 -1
  2. package/dist/main.js +26 -27
  3. package/package.json +1 -1
package/README.md CHANGED
@@ -320,7 +320,7 @@ If the quick start does not work, check these in order:
320
320
  trust_level = "trusted"
321
321
  ```
322
322
 
323
- - If that trust screen is still blocking, attach directly and continue from tmux with `tmux -S ~/.clisbot/state/clisbot.sock attach -t agent-default-main`.
323
+ - If that trust screen is still blocking, inspect the live session name with `clisbot runner list`, then attach directly with `tmux -S ~/.clisbot/state/clisbot.sock attach -t <session-name>`.
324
324
  - If Gemini startup says it is waiting for manual authorization, authenticate Gemini directly first or provide a headless auth path such as `GEMINI_API_KEY` or Vertex AI credentials; `clisbot` now treats that screen as a startup blocker instead of a healthy ready session.
325
325
  - If Codex warns that `bubblewrap` is missing on Linux, install `bubblewrap` in the runtime environment.
326
326
  - If the bot does not answer, check `clisbot status` first. Healthy channels should show `connection=active`; if a channel stays `starting`, inspect `clisbot logs`.
package/dist/main.js CHANGED
@@ -32451,7 +32451,7 @@ var require_websocket = __commonJS((exports, module) => {
32451
32451
  var http = __require("http");
32452
32452
  var net = __require("net");
32453
32453
  var tls = __require("tls");
32454
- var { randomBytes, createHash } = __require("crypto");
32454
+ var { randomBytes, createHash: createHash2 } = __require("crypto");
32455
32455
  var { Duplex, Readable } = __require("stream");
32456
32456
  var { URL: URL2 } = __require("url");
32457
32457
  var PerMessageDeflate = require_permessage_deflate();
@@ -32990,7 +32990,7 @@ var require_websocket = __commonJS((exports, module) => {
32990
32990
  abortHandshake(websocket, socket, "Invalid Upgrade header");
32991
32991
  return;
32992
32992
  }
32993
- const digest = createHash("sha1").update(key + GUID).digest("base64");
32993
+ const digest = createHash2("sha1").update(key + GUID).digest("base64");
32994
32994
  if (res.headers["sec-websocket-accept"] !== digest) {
32995
32995
  abortHandshake(websocket, socket, "Invalid Sec-WebSocket-Accept header");
32996
32996
  return;
@@ -33363,7 +33363,7 @@ var require_websocket_server = __commonJS((exports, module) => {
33363
33363
  var EventEmitter = __require("events");
33364
33364
  var http = __require("http");
33365
33365
  var { Duplex } = __require("stream");
33366
- var { createHash } = __require("crypto");
33366
+ var { createHash: createHash2 } = __require("crypto");
33367
33367
  var extension = require_extension();
33368
33368
  var PerMessageDeflate = require_permessage_deflate();
33369
33369
  var subprotocol = require_subprotocol();
@@ -33576,7 +33576,7 @@ var require_websocket_server = __commonJS((exports, module) => {
33576
33576
  }
33577
33577
  if (this._state > RUNNING)
33578
33578
  return abortHandshake(socket, 503);
33579
- const digest = createHash("sha1").update(key + GUID).digest("base64");
33579
+ const digest = createHash2("sha1").update(key + GUID).digest("base64");
33580
33580
  const headers = [
33581
33581
  "HTTP/1.1 101 Switching Protocols",
33582
33582
  "Upgrade: websocket",
@@ -65267,14 +65267,20 @@ class TmuxClient {
65267
65267
  }
65268
65268
  return result.stdout;
65269
65269
  }
65270
+ sessionTarget(sessionName) {
65271
+ return `=${sessionName}`;
65272
+ }
65270
65273
  target(sessionName) {
65271
- return `${sessionName}:${MAIN_WINDOW_NAME}`;
65274
+ return `${this.sessionTarget(sessionName)}:${MAIN_WINDOW_NAME}`;
65275
+ }
65276
+ windowTarget(sessionName, windowName) {
65277
+ return `${this.sessionTarget(sessionName)}:${windowName}`;
65272
65278
  }
65273
65279
  rawTarget(target) {
65274
65280
  return target;
65275
65281
  }
65276
65282
  async hasSession(sessionName) {
65277
- const result = await this.exec(["has-session", "-t", sessionName]);
65283
+ const result = await this.exec(["has-session", "-t", this.sessionTarget(sessionName)]);
65278
65284
  return result.exitCode === 0;
65279
65285
  }
65280
65286
  async listSessions() {
@@ -65370,14 +65376,14 @@ ${result.stdout}`.trim();
65370
65376
  "-F",
65371
65377
  "#{pane_id}",
65372
65378
  "-t",
65373
- params.sessionName,
65379
+ this.sessionTarget(params.sessionName),
65374
65380
  "-n",
65375
65381
  params.name,
65376
65382
  "-c",
65377
65383
  params.cwd,
65378
65384
  params.command
65379
65385
  ]);
65380
- await this.freezeWindowName(`${params.sessionName}:${params.name}`);
65386
+ await this.freezeWindowName(this.windowTarget(params.sessionName, params.name));
65381
65387
  return paneId.trim();
65382
65388
  }
65383
65389
  async freezeWindowName(target) {
@@ -65388,7 +65394,7 @@ ${result.stdout}`.trim();
65388
65394
  const output = await this.execOrThrow([
65389
65395
  "list-windows",
65390
65396
  "-t",
65391
- sessionName,
65397
+ this.sessionTarget(sessionName),
65392
65398
  "-F",
65393
65399
  "#{window_name}\t#{pane_id}"
65394
65400
  ]);
@@ -65464,7 +65470,7 @@ ${result.stdout}`.trim();
65464
65470
  };
65465
65471
  }
65466
65472
  async killSession(sessionName) {
65467
- await this.exec(["kill-session", "-t", sessionName]);
65473
+ await this.exec(["kill-session", "-t", this.sessionTarget(sessionName)]);
65468
65474
  }
65469
65475
  async killPane(target) {
65470
65476
  await this.exec(["kill-pane", "-t", this.rawTarget(target)]);
@@ -66884,6 +66890,7 @@ function getStoredQueues(entry) {
66884
66890
  }
66885
66891
 
66886
66892
  // src/agents/session-key.ts
66893
+ import { createHash } from "node:crypto";
66887
66894
  var DEFAULT_MAIN_KEY = "main";
66888
66895
  var DEFAULT_BOT_ID = "default";
66889
66896
  var DEFAULT_ACCOUNT_ID = DEFAULT_BOT_ID;
@@ -66974,7 +66981,8 @@ function buildTmuxSessionName(params) {
66974
66981
  mainKey: normalizeMainKey(params.mainKey)
66975
66982
  });
66976
66983
  const baseName = sanitizeSessionName(rendered);
66977
- return baseName;
66984
+ const sessionHash = createHash("sha1").update(params.sessionKey).digest("hex").slice(0, 8);
66985
+ return `${baseName}-${sessionHash}`;
66978
66986
  }
66979
66987
 
66980
66988
  // src/agents/resolved-target.ts
@@ -67298,7 +67306,6 @@ function createStoredLoopBase(params) {
67298
67306
  updatedAt: now,
67299
67307
  nextRunAt: params.nextRunAt,
67300
67308
  promptText: params.promptText,
67301
- canonicalPromptText: params.canonicalPromptText,
67302
67309
  protectedControlMutationRule: params.protectedControlMutationRule,
67303
67310
  promptSummary: params.promptSummary,
67304
67311
  promptSource: params.promptSource,
@@ -67329,7 +67336,6 @@ function createStoredIntervalLoop(params) {
67329
67336
  ...createStoredLoopBase({
67330
67337
  nextRunAt: Date.now(),
67331
67338
  promptText: params.promptText,
67332
- canonicalPromptText: params.canonicalPromptText,
67333
67339
  protectedControlMutationRule: params.protectedControlMutationRule,
67334
67340
  promptSummary: params.promptSummary,
67335
67341
  promptSource: params.promptSource,
@@ -67360,7 +67366,6 @@ function createStoredCalendarLoop(params) {
67360
67366
  ...createStoredLoopBase({
67361
67367
  nextRunAt,
67362
67368
  promptText: params.promptText,
67363
- canonicalPromptText: params.canonicalPromptText,
67364
67369
  protectedControlMutationRule: params.protectedControlMutationRule,
67365
67370
  promptSummary: params.promptSummary,
67366
67371
  promptSource: params.promptSource,
@@ -72197,7 +72202,7 @@ class SurfaceRuntime {
72197
72202
  }
72198
72203
  }
72199
72204
  async buildManagedLoopPrompt(agentId, loop) {
72200
- if (!loop.canonicalPromptText || !loop.surfaceBinding) {
72205
+ if (!loop.surfaceBinding) {
72201
72206
  return loop.promptText;
72202
72207
  }
72203
72208
  const identity = this.buildLoopChannelIdentity(loop);
@@ -72212,7 +72217,7 @@ class SurfaceRuntime {
72212
72217
  scheduledLoopId: loop.id
72213
72218
  });
72214
72219
  return buildAgentPromptText({
72215
- text: loop.canonicalPromptText,
72220
+ text: loop.promptText,
72216
72221
  identity,
72217
72222
  config: channelConfig.agentPrompt,
72218
72223
  cliTool: getAgentEntry2(this.loadedConfig, agentId)?.cli,
@@ -72226,7 +72231,7 @@ class SurfaceRuntime {
72226
72231
  });
72227
72232
  }
72228
72233
  async buildManagedQueuePrompt(agentId, item) {
72229
- if (!item.canonicalPromptText || !item.surfaceBinding) {
72234
+ if (!item.surfaceBinding) {
72230
72235
  return item.promptText;
72231
72236
  }
72232
72237
  const identity = this.buildQueueChannelIdentity(item);
@@ -72240,7 +72245,7 @@ class SurfaceRuntime {
72240
72245
  time: promptTime
72241
72246
  });
72242
72247
  return buildAgentPromptText({
72243
- text: item.canonicalPromptText,
72248
+ text: item.promptText,
72244
72249
  identity,
72245
72250
  config: channelConfig.agentPrompt,
72246
72251
  cliTool: getAgentEntry2(this.loadedConfig, agentId)?.cli,
@@ -72719,9 +72724,8 @@ function createStoredQueueItem(params) {
72719
72724
  createdAt: now,
72720
72725
  updatedAt: now,
72721
72726
  promptText: params.promptText,
72722
- canonicalPromptText: params.canonicalPromptText,
72723
72727
  protectedControlMutationRule: params.protectedControlMutationRule,
72724
- promptSummary: params.promptSummary ?? summarizeQueuePrompt(params.canonicalPromptText ?? params.promptText),
72728
+ promptSummary: params.promptSummary ?? summarizeQueuePrompt(params.promptText),
72725
72729
  promptSource: "custom",
72726
72730
  createdBy: params.createdBy,
72727
72731
  sender: params.sender,
@@ -73786,7 +73790,6 @@ async function processChannelInteraction(params) {
73786
73790
  };
73787
73791
  const queueItem = forceQueuedDelivery ? createStoredQueueItem({
73788
73792
  promptText: delayedPromptQueueText,
73789
- canonicalPromptText: delayedPromptQueueText,
73790
73793
  promptSummary: explicitQueueMessage ?? summarizeQueuePrompt(delayedPromptQueueText),
73791
73794
  createdBy: params.senderId,
73792
73795
  sender: buildLoopSender(params.identity),
@@ -74184,7 +74187,6 @@ ${renderLoopUsage()}`);
74184
74187
  const createdLoop2 = await params.agentService.createCalendarLoop({
74185
74188
  target: params.sessionTarget,
74186
74189
  promptText: resolvedLoopPrompt.text,
74187
- canonicalPromptText: resolvedLoopPrompt.text,
74188
74190
  promptSummary: summarizeLoopPrompt(resolvedLoopPrompt.text, resolvedLoopPrompt.maintenancePrompt),
74189
74191
  promptSource: resolvedLoopPrompt.maintenancePrompt ? "LOOP.md" : "custom",
74190
74192
  loopStart: slashCommand.params.loopStart,
@@ -74224,7 +74226,6 @@ ${renderLoopUsage()}`);
74224
74226
  const createdLoop = await params.agentService.createIntervalLoop({
74225
74227
  target: params.sessionTarget,
74226
74228
  promptText: resolvedLoopPrompt.text,
74227
- canonicalPromptText: resolvedLoopPrompt.text,
74228
74229
  promptSummary: summarizeLoopPrompt(resolvedLoopPrompt.text, resolvedLoopPrompt.maintenancePrompt),
74229
74230
  promptSource: resolvedLoopPrompt.maintenancePrompt ? "LOOP.md" : "custom",
74230
74231
  loopStart: slashCommand.params.loopStart,
@@ -75713,9 +75714,9 @@ function getSlackMaxChars(maxMessageChars) {
75713
75714
  }
75714
75715
 
75715
75716
  // src/channels/runtime-identity.ts
75716
- import { createHash } from "node:crypto";
75717
+ import { createHash as createHash2 } from "node:crypto";
75717
75718
  function buildTokenHint(token) {
75718
- return createHash("sha256").update(token.trim()).digest("hex").slice(0, 8);
75719
+ return createHash2("sha256").update(token.trim()).digest("hex").slice(0, 8);
75719
75720
  }
75720
75721
 
75721
75722
  // src/channels/slack/service.ts
@@ -82114,7 +82115,6 @@ function buildRecurringLoopCreateBase(state, request) {
82114
82115
  function buildRecurringLoopPromptMetadata(request) {
82115
82116
  return {
82116
82117
  promptText: request.resolvedPrompt.text,
82117
- canonicalPromptText: request.resolvedPrompt.text,
82118
82118
  promptSummary: summarizeLoopPrompt(request.resolvedPrompt.text, request.resolvedPrompt.maintenancePrompt),
82119
82119
  promptSource: request.resolvedPrompt.maintenancePrompt ? "LOOP.md" : "custom",
82120
82120
  loopStart: request.parsed.mode === "times" ? undefined : request.parsed.loopStart,
@@ -82785,7 +82785,6 @@ function resolveProtectedControlMutationRule(state, agentId, sender) {
82785
82785
  function createQueueItemForContext(params) {
82786
82786
  return createStoredQueueItem({
82787
82787
  promptText: params.promptText,
82788
- canonicalPromptText: params.promptText,
82789
82788
  protectedControlMutationRule: resolveProtectedControlMutationRule(params.state, params.context.sessionTarget.agentId, params.sender),
82790
82789
  promptSummary: params.promptText,
82791
82790
  createdBy: params.sender.providerId,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "clisbot",
3
- "version": "0.1.45-beta.8",
3
+ "version": "0.1.45-beta.9",
4
4
  "private": false,
5
5
  "description": "Chat surfaces for durable AI coding agents running in tmux",
6
6
  "license": "MIT",