usebeeline 0.0.90 → 0.0.91

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/README.md CHANGED
@@ -137,7 +137,7 @@ Two MCP surfaces are mounted into every agent session.
137
137
  | Tool | Where | What it does |
138
138
  | ------------------------------------------------------ | --------------- | ------------------------------------------------------------- |
139
139
  | `open_corner` | Top-level Rooms | Open one write-enabled corner with a ≤24-word objective |
140
- | `pr_checks_status` | Corners | Read the server-posted checks verdict and human hold state |
140
+ | `pr_checks_status` | Corners | Read checks, human hold, and PR/head-bound merge approval |
141
141
  | `attach_file` | Everywhere | Attach one file from the checkout or scratch dir to the reply |
142
142
  | `create_schedule`, `list_schedules`, `delete_schedule` | Everywhere | Run a prompt again later — interval minutes or a 5-field cron |
143
143
  | `request_grant` | Everywhere | Ask the owner for reach outside the sandbox |
@@ -20836,12 +20836,11 @@ function roomMentionDirectory(roster, selfId) {
20836
20836
  if (member.identityId === selfId)
20837
20837
  continue;
20838
20838
  const handle = member.handle?.trim().replace(/^@/, "");
20839
- const name = member.name?.trim() ?? "";
20840
- const alias = handle || name;
20841
- if (!alias)
20839
+ if (!handle)
20842
20840
  continue;
20841
+ const name = member.name?.trim() ?? "";
20843
20842
  const kind = member.kind === "agent" ? "agent" : "person";
20844
- rows.push(`- @${alias}${name && name !== alias ? ` \u2014 ${name}` : ""} (${kind})`);
20843
+ rows.push(`- @${handle}${name && name !== handle ? ` \u2014 ${name}` : ""} (${kind})`);
20845
20844
  }
20846
20845
  if (!rows.length)
20847
20846
  return "";
@@ -20852,47 +20851,6 @@ function roomMentionDirectory(roster, selfId) {
20852
20851
  "Write a tag exactly as spelled here. An @name spelled any other way is plain text: it reaches nobody, and nobody is told it was meant for them. Never invent a handle, shorten one, or copy an @name out of the conversation \u2014 old messages carry spellings that no longer exist."
20853
20852
  ].join("\n");
20854
20853
  }
20855
- function escapeRegExp(value) {
20856
- return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
20857
- }
20858
- function agentReplyMentionIds(text2, roster, authorId) {
20859
- const aliases = /* @__PURE__ */ new Map();
20860
- for (const member of roster.members) {
20861
- if (member.identityId === authorId)
20862
- continue;
20863
- const rawAliases = member.kind === "agent" ? [member.handle] : [member.name, member.handle, member.soul?.name];
20864
- for (const raw of rawAliases) {
20865
- const display = raw?.trim().replace(/^@/, "");
20866
- if (!display)
20867
- continue;
20868
- const key = display.toLocaleLowerCase();
20869
- const entry = aliases.get(key) ?? { display, ids: /* @__PURE__ */ new Set() };
20870
- entry.ids.add(member.identityId);
20871
- aliases.set(key, entry);
20872
- }
20873
- }
20874
- for (const member of roster.members) {
20875
- if (member.identityId === authorId || member.kind === "agent" || !member.handle)
20876
- continue;
20877
- const handle = member.handle.trim().replace(/^@/, "").toLocaleLowerCase();
20878
- const canonical = aliases.get(handle);
20879
- const legacy = `a_${handle}`;
20880
- if (canonical && !aliases.has(legacy))
20881
- aliases.set(legacy, { ...canonical, display: legacy });
20882
- }
20883
- const mentioned = [];
20884
- for (const { display, ids } of [...aliases.values()].sort((left, right) => right.display.length - left.display.length)) {
20885
- if (ids.size !== 1)
20886
- continue;
20887
- const pattern = new RegExp(`(^|[\\s([{])@${escapeRegExp(display)}(?=$|[\\s.,!?;:)\\]}])`, "iu");
20888
- if (!pattern.test(text2))
20889
- continue;
20890
- const identityId = [...ids][0];
20891
- if (!mentioned.includes(identityId))
20892
- mentioned.push(identityId);
20893
- }
20894
- return mentioned;
20895
- }
20896
20854
  var MonolithRoomTurnLoop = class {
20897
20855
  options;
20898
20856
  commandContext;
@@ -21478,10 +21436,8 @@ var MonolithRoomTurnLoop = class {
21478
21436
  if (openCornerCall && !isFailedToolCall(openCornerCall)) {
21479
21437
  reply = stripCornerOpenEcho(reply);
21480
21438
  }
21481
- const mentionIds = reply ? agentReplyMentionIds(reply, roster, this.agent.publicKey) : [];
21482
21439
  await trace.measure("publish", () => stream.settle(reply, reply ? {
21483
- triggerMessageId: item.id,
21484
- mentionIds
21440
+ triggerMessageId: item.id
21485
21441
  } : {}));
21486
21442
  }, { priority: "interactive", roomKey: this.options.roomId });
21487
21443
  }, (error) => console.error(`[thin-core] monolith Room ${this.options.roomId} receipt heartbeat failed:`, error));
@@ -21563,7 +21519,7 @@ var TOOL_ARGUMENT_MAX_BYTES = 1200;
21563
21519
  var TOOL_OUTPUT_MAX_BYTES = 3200;
21564
21520
  var TOOL_PATH_LIMIT = 12;
21565
21521
  function cornerMergeInstruction(yoloMode) {
21566
- return yoloMode ? "Yolo mode is on: when that merge gate passes, merge this pull request yourself with gh." : "Yolo mode is off: never merge the pull request yourself; leave it for human approval in the app.";
21522
+ return yoloMode ? "Yolo is on: when the gate passes, merge this pull request with gh." : "Yolo is off: never merge; wait for explicit human approval in the app.";
21567
21523
  }
21568
21524
  function oneLine(value) {
21569
21525
  return value.replace(/\s+/g, " ").trim();
@@ -21977,13 +21933,11 @@ var MonolithCornerTurnLoop = class {
21977
21933
  personaInstructions,
21978
21934
  ...repository ? [
21979
21935
  `You are in an isolated git worktree on ${repository.featureBranch}, targeting ${repository.targetBranch}.`,
21980
- `Work normally, then commit and push only ${repository.featureBranch}; never force-push or write to ${repository.targetBranch}. Open its pull request with gh. Before each push, rebase on origin/${repository.featureBranch}; resolve conflicts autonomously and rerun affected tests.`,
21981
- "PR-opening turn rule: as soon as a pull request exists, print its full GitHub URL as your final response and end the turn immediately. Do not call pr_checks_status in that same turn and do not wait for checks inside it. Then stay idle until a later corner fact or human message starts another turn.",
21982
- 'On a later server checks turn, call beeline-agent pr_checks_status. Never merge unless it returns checks="passed", held=false, and approvalPending=false; a human hold remains until a later human explicitly resumes.',
21936
+ `Commit and push only ${repository.featureBranch}; never force-push or write to ${repository.targetBranch}. Before pushing, rebase on origin/${repository.featureBranch}; resolve conflicts autonomously, realigning to that remote branch and redoing the objective if needed, then rerun affected tests. Open the pull request with gh.`,
21937
+ 'Once the pull request exists, reply only with its full URL and end the turn; do not check or wait for CI. On a later checks turn, call pr_checks_status. Merge only when checks="passed", held=false, and approvalPending=false; only a later explicit human resume clears a hold.',
21983
21938
  cornerMergeInstruction(configuration.yoloMode),
21984
21939
  "Do not tag the user when a corner turn finishes: the server posts the merge summary card and its push already cover completion. Tag a human only mid-turn, and only when you need a decision or input.",
21985
- 'GitHub check and merge notes are server lines already in the corner: never restate them (no "checks passed", "CI is green", "PR ready for review"). On a checks turn, say nothing unless you act - a merge or a pushed fix - and then one short line about that.',
21986
- "When approval is pending, wait for the server close request. Never merge a different pull request."
21940
+ "Never restate server check or merge notes. On a checks turn, say nothing unless you merge or push a fix, then use one short line. When approval is pending, wait for the server close request. Never merge another pull request."
21987
21941
  ] : [
21988
21942
  "This is a chat-only corner with no repository or GitHub workflow.",
21989
21943
  "Work in this corner's writable workspace. Use write_scratch_file or ordinary tools to create files, then attach_file to send them back to the corner.",
@@ -22269,10 +22223,8 @@ ${trigger}`,
22269
22223
  console.warn(`[thin-core] corner ${cornerId} turn ${requestId}: ${explained.reason}`);
22270
22224
  }
22271
22225
  const durableReply = spoken(reply);
22272
- const mentionIds = durableReply ? agentReplyMentionIds(durableReply, roster, this.agent.publicKey) : [];
22273
22226
  await trace.measure("publish", () => stream.settle(durableReply, durableReply ? {
22274
- ...requestedById ? { triggerMessageId: requestId } : {},
22275
- mentionIds
22227
+ ...requestedById ? { triggerMessageId: requestId } : {}
22276
22228
  } : {}));
22277
22229
  }, { priority: "interactive", roomKey: cornerId });
22278
22230
  }, (error) => console.error(`[thin-core] corner ${cornerId} receipt heartbeat failed:`, error));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "usebeeline",
3
- "version": "0.0.90",
3
+ "version": "0.0.91",
4
4
  "description": "Connect an AI coding agent to Beeline with one command.",
5
5
  "homepage": "https://usebeeline.app",
6
6
  "bugs": {