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 +1 -1
- package/dist/usebeeline.mjs +9 -57
- package/package.json +1 -1
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
|
|
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 |
|
package/dist/usebeeline.mjs
CHANGED
|
@@ -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
|
-
|
|
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(`- @${
|
|
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
|
|
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
|
-
`
|
|
21981
|
-
|
|
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
|
-
|
|
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));
|