@ycodium-ai/plugin-team 0.2.3598 → 0.2.3614
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/assets/ui.js +19 -12
- package/dist/index.js +94 -55
- package/locales/en.json +1 -7
- package/locales/zh-CN.json +1 -7
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -9056,6 +9056,67 @@ function createRosterService(ctx, options = {}) {
|
|
|
9056
9056
|
|
|
9057
9057
|
// src/runtime/deliver.ts
|
|
9058
9058
|
import * as NodeCrypto from "node:crypto";
|
|
9059
|
+
|
|
9060
|
+
// ../../packages/ycodium-system-text/src/systemText.ts
|
|
9061
|
+
var SYSTEM_NOTIFICATION_OPEN_TAG = "<ycodium-system>";
|
|
9062
|
+
var SYSTEM_NOTIFICATION_CLOSE_TAG = "</ycodium-system>";
|
|
9063
|
+
var isSystemNotificationText = (text) => text.startsWith(SYSTEM_NOTIFICATION_OPEN_TAG);
|
|
9064
|
+
var rendersAsSystemMessage = (text) => isSystemNotificationText(text) && !(isPresetPrefixMessage(text) && text.includes(PRESET_PREFIX_CLOSE) && parsePresetPrefixText(text) === null);
|
|
9065
|
+
var FIRST_BLOCK_START = `^(?:${SYSTEM_NOTIFICATION_OPEN_TAG}\\n)?`;
|
|
9066
|
+
var PRESET_PREFIX_MESSAGE_START = `${SYSTEM_NOTIFICATION_OPEN_TAG}
|
|
9067
|
+
<preset-prefix `;
|
|
9068
|
+
var isPresetPrefixMessage = (text) => text.startsWith(PRESET_PREFIX_MESSAGE_START);
|
|
9069
|
+
var SYSTEM_TEXT_ESCAPED_ATTRIBUTE = 'esc="1"';
|
|
9070
|
+
var escapeSystemText = (text) => text.replace(/&/g, "&").replace(/</g, "<");
|
|
9071
|
+
var SYSTEM_TEXT_MAX_ESCAPE_GROWTH = "&".length;
|
|
9072
|
+
var escapeSystemAttribute = (text) => escapeSystemText(text).replace(/>/g, ">").replace(/"/g, """).replace(/\r/g, " ").replace(/\n/g, " ");
|
|
9073
|
+
var ESCAPED_BLOCK_NAMES = [
|
|
9074
|
+
"thread-response",
|
|
9075
|
+
"thread-handover",
|
|
9076
|
+
"scheduled-wake",
|
|
9077
|
+
"plugin-wake"
|
|
9078
|
+
];
|
|
9079
|
+
var escapedBlockOpenTag = (name, attributes) => `<${name} ${[
|
|
9080
|
+
...attributes.map(([key, value]) => `${key}="${escapeSystemAttribute(value)}"`),
|
|
9081
|
+
SYSTEM_TEXT_ESCAPED_ATTRIBUTE
|
|
9082
|
+
].join(" ")}>`;
|
|
9083
|
+
var ESCAPED_OPEN_LINE_PATTERN = new RegExp(
|
|
9084
|
+
`^<(?:${ESCAPED_BLOCK_NAMES.join("|")})(?:\\s[^>]*)? ${SYSTEM_TEXT_ESCAPED_ATTRIBUTE}>$`
|
|
9085
|
+
);
|
|
9086
|
+
var PRESET_PREFIX_CLOSE = `
|
|
9087
|
+
</preset-prefix>
|
|
9088
|
+
${SYSTEM_NOTIFICATION_CLOSE_TAG}`;
|
|
9089
|
+
var PRESET_PREFIX_PATTERN = new RegExp(
|
|
9090
|
+
`^${SYSTEM_NOTIFICATION_OPEN_TAG}\\n<preset-prefix id="([^"]*)">\\n([\\s\\S]*?)\\n</preset-prefix>\\n${SYSTEM_NOTIFICATION_CLOSE_TAG}(?:\\n\\n([\\s\\S]*))?$`
|
|
9091
|
+
);
|
|
9092
|
+
var parsePresetPrefixText = (text) => {
|
|
9093
|
+
if (text.split(PRESET_PREFIX_CLOSE).length !== 2) return null;
|
|
9094
|
+
const match7 = PRESET_PREFIX_PATTERN.exec(text);
|
|
9095
|
+
if (match7 === null) return null;
|
|
9096
|
+
const [, presetId, prefix, body] = match7;
|
|
9097
|
+
if (!presetId) return null;
|
|
9098
|
+
return { presetId, prefix: prefix ?? "", body: body ?? "" };
|
|
9099
|
+
};
|
|
9100
|
+
var userSpokenText = (text) => {
|
|
9101
|
+
if (!rendersAsSystemMessage(text)) return text;
|
|
9102
|
+
return parsePresetPrefixText(text)?.body || null;
|
|
9103
|
+
};
|
|
9104
|
+
var formatPluginWakeText = (input) => [
|
|
9105
|
+
SYSTEM_NOTIFICATION_OPEN_TAG,
|
|
9106
|
+
escapedBlockOpenTag("plugin-wake", [
|
|
9107
|
+
["plugin", input.pluginId],
|
|
9108
|
+
["reason", input.reason],
|
|
9109
|
+
...input.item ? [["item", input.item]] : []
|
|
9110
|
+
]),
|
|
9111
|
+
escapeSystemText(input.text),
|
|
9112
|
+
"</plugin-wake>",
|
|
9113
|
+
SYSTEM_NOTIFICATION_CLOSE_TAG
|
|
9114
|
+
].join("\n");
|
|
9115
|
+
var PLUGIN_WAKE_PATTERN = new RegExp(
|
|
9116
|
+
`${FIRST_BLOCK_START}<plugin-wake plugin="([^"]+)" reason="([^"]+)"(?: item="([^"]+)")? ${SYSTEM_TEXT_ESCAPED_ATTRIBUTE}>\\n[\\s\\S]*?\\n</plugin-wake>`
|
|
9117
|
+
);
|
|
9118
|
+
|
|
9119
|
+
// src/runtime/deliver.ts
|
|
9059
9120
|
var worktreeSetupSentence = async (ctx, projectId, branch) => {
|
|
9060
9121
|
const intro = `You are in your own newly created worktree on branch ${branch}.`;
|
|
9061
9122
|
const project2 = await ctx.projects.get({ projectId }).catch(() => null);
|
|
@@ -9064,6 +9125,12 @@ var worktreeSetupSentence = async (ctx, projectId, branch) => {
|
|
|
9064
9125
|
return `${intro} Install dependencies according to the project's instructions before starting work.`;
|
|
9065
9126
|
return `${intro} If dependencies are missing, install them before starting work. This project defines a setup command for that: ${setup.command}; run it from the worktree root with the environment variables YCODIUM_PROJECT_ROOT set to "${project2.workspaceRoot}" and YCODIUM_WORKTREE_PATH set to this worktree's path. If it fails with "could not lock config file", wait a moment and run it again.`;
|
|
9066
9127
|
};
|
|
9128
|
+
var teamWakeText = (display, text) => formatPluginWakeText({
|
|
9129
|
+
pluginId: "team",
|
|
9130
|
+
reason: display.reason,
|
|
9131
|
+
item: display.sequenceId === void 0 ? void 0 : `W${display.sequenceId}`,
|
|
9132
|
+
text
|
|
9133
|
+
});
|
|
9067
9134
|
var stableHash = (key) => NodeCrypto.createHash("sha256").update(key).digest("hex").slice(0, 32);
|
|
9068
9135
|
var memberWorktreeBranch = (name, threadId) => {
|
|
9069
9136
|
const slug = Array.from(
|
|
@@ -9115,7 +9182,7 @@ async function deliverWake(ctx, input) {
|
|
|
9115
9182
|
message: {
|
|
9116
9183
|
messageId: input.messageId,
|
|
9117
9184
|
role: "user",
|
|
9118
|
-
text,
|
|
9185
|
+
text: teamWakeText(input.wake, text),
|
|
9119
9186
|
attachments: []
|
|
9120
9187
|
},
|
|
9121
9188
|
modelSelection: execution.modelSelection,
|
|
@@ -9152,9 +9219,12 @@ async function deliverWake(ctx, input) {
|
|
|
9152
9219
|
requestId: input.requestId,
|
|
9153
9220
|
message: {
|
|
9154
9221
|
...turn.message,
|
|
9155
|
-
text:
|
|
9222
|
+
text: teamWakeText(
|
|
9223
|
+
input.wake,
|
|
9224
|
+
`${text}
|
|
9156
9225
|
|
|
9157
9226
|
${await worktreeSetupSentence(ctx, input.projectId, branch)}`
|
|
9227
|
+
)
|
|
9158
9228
|
},
|
|
9159
9229
|
bootstrap: {
|
|
9160
9230
|
prepareWorktree: {
|
|
@@ -9190,7 +9260,8 @@ ${await worktreeSetupSentence(ctx, input.projectId, branch)}`
|
|
|
9190
9260
|
recipient: { threadId: worktree.leadThreadId },
|
|
9191
9261
|
requestId: `team-worktree-report:${threadId}`,
|
|
9192
9262
|
messageId: `team-worktree-report-msg:${threadId}`,
|
|
9193
|
-
text: `Could not create a worktree for member ${await worktree.name()} (threadId ${threadId}): ${failure.reason}. They will work in the project folder for now
|
|
9263
|
+
text: `Could not create a worktree for member ${await worktree.name()} (threadId ${threadId}): ${failure.reason}. They will work in the project folder for now.`,
|
|
9264
|
+
wake: { reason: "notice" }
|
|
9194
9265
|
});
|
|
9195
9266
|
if (!reported) throw new Error("Member worktree failure could not be reported to the lead");
|
|
9196
9267
|
const receipt = await worktree.lane.events.append({
|
|
@@ -9347,7 +9418,6 @@ var en_default = {
|
|
|
9347
9418
|
sessionWaiting: "Needs input",
|
|
9348
9419
|
sessionStopped: "Stopped",
|
|
9349
9420
|
sessionStoppedAt: "Stopped at {{time}}",
|
|
9350
|
-
sessionStatusTitle: "Status of the assigned member's session",
|
|
9351
9421
|
queued: "Queued",
|
|
9352
9422
|
dateLocale: "en",
|
|
9353
9423
|
queuedTitle: "Assigned but not woken yet: waits until their current item is done",
|
|
@@ -9454,7 +9524,6 @@ var en_default = {
|
|
|
9454
9524
|
openItem: "Open details for goal work item #{{number}}"
|
|
9455
9525
|
},
|
|
9456
9526
|
roster: {
|
|
9457
|
-
remote: "Remote",
|
|
9458
9527
|
toolsHint: "Keep the board and project memory on for this project so members can pick up work and record what they learn.",
|
|
9459
9528
|
toolkitsOff: "The lead needs the board and project memory. Turn on both switches above.",
|
|
9460
9529
|
boardOff: "The lead needs the board. Turn on the board switch above.",
|
|
@@ -9497,7 +9566,7 @@ var en_default = {
|
|
|
9497
9566
|
kind: "Type",
|
|
9498
9567
|
kindAgentHint: "Runs with the provider and model you pick when the machine is this one. A member set to another machine fails its trial run: set it back to this machine, or skip the trial run, and it runs on this machine with the project's default model.",
|
|
9499
9568
|
kindRemoteHint: "An agent that connects from another machine with its own credentials.",
|
|
9500
|
-
kindPersonHint: "
|
|
9569
|
+
kindPersonHint: "People are listed as members but do not run sessions.",
|
|
9501
9570
|
thisIsMe: "This is me",
|
|
9502
9571
|
thisIsMeHint: "When someone @-mentions this member in a team group, the message goes to your Sent to me.",
|
|
9503
9572
|
boundToOther: "This member is another person. Only they can change this.",
|
|
@@ -9506,7 +9575,6 @@ var en_default = {
|
|
|
9506
9575
|
memberTitle: "Title",
|
|
9507
9576
|
responsibility: "Responsibility",
|
|
9508
9577
|
instructions: "Work instructions",
|
|
9509
|
-
instructionsHint: "Written for this member. You can change it later.",
|
|
9510
9578
|
instructionsLoading: "Loading work instructions\u2026",
|
|
9511
9579
|
instructionsFailed: "The work instructions could not be loaded.",
|
|
9512
9580
|
avatar: "Avatar",
|
|
@@ -9638,7 +9706,6 @@ var en_default = {
|
|
|
9638
9706
|
version: "Version {{version}}",
|
|
9639
9707
|
publishedBy: "Published by {{author}}",
|
|
9640
9708
|
requiresAck: "Acknowledgement required",
|
|
9641
|
-
noAck: "Acknowledgement not required",
|
|
9642
9709
|
restoredFrom: "Restored from version {{version}}",
|
|
9643
9710
|
moreReleases: "Load older versions",
|
|
9644
9711
|
members: "Member acknowledgements",
|
|
@@ -9664,7 +9731,6 @@ var en_default = {
|
|
|
9664
9731
|
revertDescription: "Publish the content of version {{version}} as a new version, under your name. The current version remains in history.",
|
|
9665
9732
|
confirmRevert: "Revert and publish",
|
|
9666
9733
|
historyFailed: "Couldn't load the version history. Try again.",
|
|
9667
|
-
emptyPages: "Once the handbook is published, its three pages show here.",
|
|
9668
9734
|
fieldTitle: "Title (optional)",
|
|
9669
9735
|
fieldBody: "Body",
|
|
9670
9736
|
fieldSummary: "Change summary (optional)",
|
|
@@ -9677,7 +9743,6 @@ var en_default = {
|
|
|
9677
9743
|
},
|
|
9678
9744
|
remoteStatus: {
|
|
9679
9745
|
title: "Remote members",
|
|
9680
|
-
none: "No remote agents on the team. Add one as a member of type Remote agent.",
|
|
9681
9746
|
lastSeen: "Last seen {{time}}",
|
|
9682
9747
|
neverSeen: "Not seen yet",
|
|
9683
9748
|
workUnavailable: "Could not read this member's work. Try again later.",
|
|
@@ -10051,7 +10116,10 @@ function createGoalService(ctx, rosterService, options = {}) {
|
|
|
10051
10116
|
message: {
|
|
10052
10117
|
messageId: `team-lead-message:${goal.projectId}:${goal.goalId}`,
|
|
10053
10118
|
role: "user",
|
|
10054
|
-
text:
|
|
10119
|
+
text: teamWakeText(
|
|
10120
|
+
{ reason: "instructions" },
|
|
10121
|
+
leadBrief(goal, roster, { engineMembers: view.stored?.version === 2 })
|
|
10122
|
+
),
|
|
10055
10123
|
attachments: []
|
|
10056
10124
|
},
|
|
10057
10125
|
modelSelection: selections.get(goal.leadMemberId).modelSelection,
|
|
@@ -11902,6 +11970,7 @@ function startMemberBindingRuntime(ctx, goals, rosters, wakes, trials2) {
|
|
|
11902
11970
|
recipient: { threadId: leadThreadId },
|
|
11903
11971
|
requestId: `team-member-unbound-notice:${key}`,
|
|
11904
11972
|
messageId: `team-member-unbound-notice-message:${key}`,
|
|
11973
|
+
wake: { reason: "notice" },
|
|
11905
11974
|
text: rebinding ? `Member ${member.name} (memberId ${member.memberId}) passed its trial run with the new setup but could not be moved onto it: ${failure.detail}. Work not yet handed to them waits until it is. Fix the cause, for example change their model with team_update_member; they are set up again within a couple of minutes.` : `Member ${member.name} (memberId ${member.memberId}) could not join this goal: ${failure.detail}. Work assigned to them waits until they join. Fix the cause, for example change their model with team_update_member; they are set up again within a couple of minutes.`
|
|
11906
11975
|
});
|
|
11907
11976
|
if (delivered) told.add(key);
|
|
@@ -12080,6 +12149,7 @@ function startMemberRemovalRuntime(ctx, goals, wakes) {
|
|
|
12080
12149
|
recipient: { threadId: lead },
|
|
12081
12150
|
requestId: `team-member-removed-notice:${key}`,
|
|
12082
12151
|
messageId: `team-member-removed-notice-message:${key}`,
|
|
12152
|
+
wake: { reason: "notice" },
|
|
12083
12153
|
text: [
|
|
12084
12154
|
`Member ${member.name} (memberId ${memberId}) was removed from this project's team.`,
|
|
12085
12155
|
`Work that had not reached them yet was taken off them and now has no assignee: ${list(mine(taken))}. Assign it to another member with work_update_item.`,
|
|
@@ -13371,6 +13441,7 @@ function startWakeRuntime(ctx, goals, options = {}) {
|
|
|
13371
13441
|
recipient: wake,
|
|
13372
13442
|
requestId: wakeRequestId(id),
|
|
13373
13443
|
messageId: `team-wake-msg:${id}`,
|
|
13444
|
+
wake: { reason: "work", sequenceId: wake.sequenceId },
|
|
13374
13445
|
memberWorktree: worktree === void 0 ? void 0 : { ...worktree, lane: worktrees },
|
|
13375
13446
|
// 评论在收件人正在跑时插进当前这一轮,不排到这一轮结束(试跑 3:一轮 97 分钟,检查点落空)。
|
|
13376
13447
|
...wake.kind === "comment" ? { steer: true } : {},
|
|
@@ -13574,6 +13645,10 @@ function startRecoveryRuntime(ctx, goals, state, worktrees) {
|
|
|
13574
13645
|
requestId: `team-recovery:${id}:${plan.action}`,
|
|
13575
13646
|
messageId: `team-recovery-msg:${id}:${plan.action}`,
|
|
13576
13647
|
text: plan.text,
|
|
13648
|
+
// 续做与提醒是叫成员接着干活;告诉负责人谁停了是通知。
|
|
13649
|
+
wake: {
|
|
13650
|
+
reason: plan.action === "resume" || plan.action === "remind" ? "work" : "notice"
|
|
13651
|
+
},
|
|
13577
13652
|
memberWorktree: worktree === void 0 ? void 0 : { ...worktree, lane: worktrees }
|
|
13578
13653
|
});
|
|
13579
13654
|
if (!delivered) continue;
|
|
@@ -13665,7 +13740,8 @@ fired:${fired.wakes.length}`);
|
|
|
13665
13740
|
recipient: { threadId },
|
|
13666
13741
|
requestId: `team-lead-checkin:${threadId}:${key}`,
|
|
13667
13742
|
messageId: `team-lead-checkin-message:${threadId}:${key}`,
|
|
13668
|
-
text: LEAD_CHECKIN_REMINDER
|
|
13743
|
+
text: LEAD_CHECKIN_REMINDER,
|
|
13744
|
+
wake: { reason: "check-in" }
|
|
13669
13745
|
});
|
|
13670
13746
|
}
|
|
13671
13747
|
};
|
|
@@ -14372,6 +14448,7 @@ function startHandbookRuntime(ctx, worktrees) {
|
|
|
14372
14448
|
messageId: `team-handbook-msg:${id}`,
|
|
14373
14449
|
// 成员闲着时被换版提醒叫醒,不能借机自己挑活:成员的提醒写死只确认、确认完就结束这一轮。
|
|
14374
14450
|
text: handbookReminder(release, seat.goal.leadMemberId === member.memberId),
|
|
14451
|
+
wake: { reason: "instructions" },
|
|
14375
14452
|
memberWorktree: worktree === void 0 ? void 0 : { ...worktree, lane: worktrees.lane }
|
|
14376
14453
|
});
|
|
14377
14454
|
if (!delivered) continue;
|
|
@@ -15931,39 +16008,6 @@ async function teamWaitingList(ctx, memberThreads, nameOf2) {
|
|
|
15931
16008
|
return waiting.length === 0 ? null : `${count(waiting.length, "member is", "members are")} waiting on the person: ${waiting.join("; ")}. These appear in this conversation for the person to answer; you cannot answer them and should not wait for them. Hand out work to members who are not blocked.`;
|
|
15932
16009
|
}
|
|
15933
16010
|
|
|
15934
|
-
// ../../packages/ycodium-system-text/src/systemText.ts
|
|
15935
|
-
var SYSTEM_NOTIFICATION_OPEN_TAG = "<ycodium-system>";
|
|
15936
|
-
var SYSTEM_NOTIFICATION_CLOSE_TAG = "</ycodium-system>";
|
|
15937
|
-
var isSystemNotificationText = (text) => text.startsWith(SYSTEM_NOTIFICATION_OPEN_TAG);
|
|
15938
|
-
var rendersAsSystemMessage = (text) => isSystemNotificationText(text) && !(isPresetPrefixMessage(text) && text.includes(PRESET_PREFIX_CLOSE) && parsePresetPrefixText(text) === null);
|
|
15939
|
-
var FIRST_BLOCK_START = `^(?:${SYSTEM_NOTIFICATION_OPEN_TAG}\\n)?`;
|
|
15940
|
-
var PRESET_PREFIX_MESSAGE_START = `${SYSTEM_NOTIFICATION_OPEN_TAG}
|
|
15941
|
-
<preset-prefix `;
|
|
15942
|
-
var isPresetPrefixMessage = (text) => text.startsWith(PRESET_PREFIX_MESSAGE_START);
|
|
15943
|
-
var SYSTEM_TEXT_ESCAPED_ATTRIBUTE = 'esc="1"';
|
|
15944
|
-
var ESCAPED_BLOCK_NAMES = ["thread-response", "thread-handover", "scheduled-wake"];
|
|
15945
|
-
var ESCAPED_OPEN_LINE_PATTERN = new RegExp(
|
|
15946
|
-
`^<(?:${ESCAPED_BLOCK_NAMES.join("|")})(?:\\s[^>]*)? ${SYSTEM_TEXT_ESCAPED_ATTRIBUTE}>$`
|
|
15947
|
-
);
|
|
15948
|
-
var PRESET_PREFIX_CLOSE = `
|
|
15949
|
-
</preset-prefix>
|
|
15950
|
-
${SYSTEM_NOTIFICATION_CLOSE_TAG}`;
|
|
15951
|
-
var PRESET_PREFIX_PATTERN = new RegExp(
|
|
15952
|
-
`^${SYSTEM_NOTIFICATION_OPEN_TAG}\\n<preset-prefix id="([^"]*)">\\n([\\s\\S]*?)\\n</preset-prefix>\\n${SYSTEM_NOTIFICATION_CLOSE_TAG}(?:\\n\\n([\\s\\S]*))?$`
|
|
15953
|
-
);
|
|
15954
|
-
var parsePresetPrefixText = (text) => {
|
|
15955
|
-
if (text.split(PRESET_PREFIX_CLOSE).length !== 2) return null;
|
|
15956
|
-
const match7 = PRESET_PREFIX_PATTERN.exec(text);
|
|
15957
|
-
if (match7 === null) return null;
|
|
15958
|
-
const [, presetId, prefix, body] = match7;
|
|
15959
|
-
if (!presetId) return null;
|
|
15960
|
-
return { presetId, prefix: prefix ?? "", body: body ?? "" };
|
|
15961
|
-
};
|
|
15962
|
-
var userSpokenText = (text) => {
|
|
15963
|
-
if (!rendersAsSystemMessage(text)) return text;
|
|
15964
|
-
return parsePresetPrefixText(text)?.body || null;
|
|
15965
|
-
};
|
|
15966
|
-
|
|
15967
16011
|
// src/team/groupDigest.ts
|
|
15968
16012
|
var DIGEST_LIMIT = 30;
|
|
15969
16013
|
var SCAN_PAGES = 5;
|
|
@@ -16271,7 +16315,6 @@ var zh_CN_default = {
|
|
|
16271
16315
|
sessionWaiting: "\u7B49\u4EBA\u5904\u7406",
|
|
16272
16316
|
sessionStopped: "\u505C\u7740",
|
|
16273
16317
|
sessionStoppedAt: "\u505C\u4E8E {{time}}",
|
|
16274
|
-
sessionStatusTitle: "\u6307\u6D3E\u6210\u5458\u7684\u4F1A\u8BDD\u6B64\u523B\u7684\u72B6\u6001",
|
|
16275
16318
|
queued: "\u6392\u7740",
|
|
16276
16319
|
dateLocale: "zh-CN",
|
|
16277
16320
|
queuedTitle: "\u5DF2\u6D3E\u3001\u8FD8\u6CA1\u53EB\u9192\uFF1A\u7B49\u5BF9\u65B9\u624B\u4E0A\u90A3\u4EF6\u505A\u5B8C\u518D\u53EB",
|
|
@@ -16378,7 +16421,6 @@ var zh_CN_default = {
|
|
|
16378
16421
|
openItem: "\u6253\u5F00\u76EE\u6807\u5DE5\u4F5C\u9879 #{{number}} \u7684\u8BE6\u60C5"
|
|
16379
16422
|
},
|
|
16380
16423
|
roster: {
|
|
16381
|
-
remote: "\u8FDC\u7AEF",
|
|
16382
16424
|
toolsHint: "\u8FD9\u4E2A\u9879\u76EE\u8981\u5F00\u7740\u770B\u677F\u4E0E\u9879\u76EE\u8BB0\u5FC6\uFF0C\u6210\u5458\u624D\u80FD\u9886\u6D3B\u4E0E\u8BB0\u7ECF\u9A8C\u3002",
|
|
16383
16425
|
toolkitsOff: "\u8D1F\u8D23\u4EBA\u8981\u7528\u770B\u677F\u548C\u9879\u76EE\u8BB0\u5FC6\uFF0C\u5148\u6253\u5F00\u4E0A\u9762\u4E24\u53EA\u5F00\u5173\u3002",
|
|
16384
16426
|
boardOff: "\u8D1F\u8D23\u4EBA\u8981\u7528\u770B\u677F\uFF0C\u5148\u6253\u5F00\u4E0A\u9762\u7684\u770B\u677F\u5F00\u5173\u3002",
|
|
@@ -16421,7 +16463,7 @@ var zh_CN_default = {
|
|
|
16421
16463
|
kind: "\u7C7B\u578B",
|
|
16422
16464
|
kindAgentHint: "\u673A\u5668\u9009\u8FD9\u4E00\u53F0\u65F6\uFF0C\u7528\u4F60\u9009\u7684 provider \u548C\u6A21\u578B\u8FD0\u884C\u3002\u9009\u4E86\u522B\u7684\u673A\u5668\u7684\u6210\u5458\u8BD5\u8DD1\u4F1A\u51FA\u9519\uFF1A\u6539\u56DE\u8FD9\u4E00\u53F0\uFF0C\u6216\u8005\u8DF3\u8FC7\u8BD5\u8DD1\uFF0C\u5B83\u5C31\u5728\u8FD9\u53F0\u673A\u5668\u4E0A\u7528\u9879\u76EE\u7684\u9ED8\u8BA4\u6A21\u578B\u8FD0\u884C\u3002",
|
|
16423
16465
|
kindRemoteHint: "\u4ECE\u53E6\u4E00\u53F0\u673A\u5668\u7528\u81EA\u5DF1\u7684\u51ED\u636E\u8FDE\u8FDB\u6765\u7684 agent\u3002",
|
|
16424
|
-
kindPersonHint: "\
|
|
16466
|
+
kindPersonHint: "\u4EBA\u4F1A\u5217\u5728\u6210\u5458\u91CC\uFF0C\u4F46\u4E0D\u4F1A\u8FD0\u884C\u4F1A\u8BDD\u3002",
|
|
16425
16467
|
thisIsMe: "\u8FD9\u662F\u6211",
|
|
16426
16468
|
thisIsMeHint: "\u6709\u4EBA\u5728\u56E2\u961F\u7FA4\u91CC @ \u8FD9\u4E2A\u6210\u5458\u65F6\uFF0C\u6D88\u606F\u4F1A\u8FDB\u4F60\u7684\u300C\u53D1\u7ED9\u6211\u7684\u300D\u3002",
|
|
16427
16469
|
boundToOther: "\u8FD9\u4E2A\u6210\u5458\u662F\u53E6\u4E00\u4E2A\u4EBA\uFF0C\u53EA\u6709\u5BF9\u65B9\u672C\u4EBA\u80FD\u6539\u8FD9\u4E00\u9879\u3002",
|
|
@@ -16430,7 +16472,6 @@ var zh_CN_default = {
|
|
|
16430
16472
|
memberTitle: "\u5934\u8854",
|
|
16431
16473
|
responsibility: "\u804C\u8D23",
|
|
16432
16474
|
instructions: "\u5DE5\u4F5C\u8BF4\u660E",
|
|
16433
|
-
instructionsHint: "\u5199\u7ED9\u8FD9\u540D\u6210\u5458\u7684\u8BF4\u660E\uFF0C\u4E4B\u540E\u53EF\u4EE5\u4FEE\u6539\u3002",
|
|
16434
16475
|
instructionsLoading: "\u6B63\u5728\u8F7D\u5165\u5DE5\u4F5C\u8BF4\u660E\u2026",
|
|
16435
16476
|
instructionsFailed: "\u672A\u80FD\u8F7D\u5165\u5DE5\u4F5C\u8BF4\u660E\u3002",
|
|
16436
16477
|
avatar: "\u5934\u50CF",
|
|
@@ -16562,7 +16603,6 @@ var zh_CN_default = {
|
|
|
16562
16603
|
version: "\u7B2C {{version}} \u7248",
|
|
16563
16604
|
publishedBy: "\u53D1\u5E03\u8005\uFF1A{{author}}",
|
|
16564
16605
|
requiresAck: "\u8981\u6C42\u786E\u8BA4",
|
|
16565
|
-
noAck: "\u4E0D\u8981\u6C42\u786E\u8BA4",
|
|
16566
16606
|
restoredFrom: "\u9000\u56DE\u81EA\u7B2C {{version}} \u7248",
|
|
16567
16607
|
moreReleases: "\u52A0\u8F7D\u66F4\u65E9\u7248\u672C",
|
|
16568
16608
|
members: "\u6210\u5458\u786E\u8BA4\u60C5\u51B5",
|
|
@@ -16588,7 +16628,6 @@ var zh_CN_default = {
|
|
|
16588
16628
|
revertDescription: "\u4EE5\u4F60\u7684\u540D\u5B57\uFF0C\u628A\u7B2C {{version}} \u7248\u7684\u5185\u5BB9\u53D1\u5E03\u4E3A\u4E00\u4E2A\u65B0\u7248\u672C\u3002\u5F53\u524D\u7248\u672C\u4ECD\u4FDD\u7559\u5728\u5386\u53F2\u91CC",
|
|
16589
16629
|
confirmRevert: "\u9000\u56DE\u5E76\u53D1\u5E03",
|
|
16590
16630
|
historyFailed: "\u7248\u672C\u5386\u53F2\u8BFB\u53D6\u5931\u8D25\uFF0C\u8BF7\u518D\u8BD5\u4E00\u6B21",
|
|
16591
|
-
emptyPages: "\u624B\u518C\u53D1\u5E03\u540E\uFF0C\u8FD9\u91CC\u663E\u793A\u5B83\u7684\u4E09\u9875\u5185\u5BB9",
|
|
16592
16631
|
fieldTitle: "\u6807\u9898\uFF08\u53EF\u9009\uFF09",
|
|
16593
16632
|
fieldBody: "\u6B63\u6587",
|
|
16594
16633
|
fieldSummary: "\u6539\u52A8\u8BF4\u660E\uFF08\u53EF\u9009\uFF09",
|
|
@@ -16601,7 +16640,6 @@ var zh_CN_default = {
|
|
|
16601
16640
|
},
|
|
16602
16641
|
remoteStatus: {
|
|
16603
16642
|
title: "\u8FDC\u7AEF\u6210\u5458",
|
|
16604
|
-
none: "\u56E2\u961F\u91CC\u8FD8\u6CA1\u6709\u8FDC\u7AEF agent\u3002\u53EF\u5728\u6210\u5458\u91CC\u6DFB\u52A0\u7C7B\u578B\u4E3A\u8FDC\u7AEF agent \u7684\u6210\u5458\u3002",
|
|
16605
16643
|
lastSeen: "\u6700\u8FD1\u6765\u8FC7\uFF1A{{time}}",
|
|
16606
16644
|
neverSeen: "\u8FD8\u6CA1\u6765\u8FC7",
|
|
16607
16645
|
workUnavailable: "\u6682\u65F6\u8BFB\u4E0D\u51FA\u5B83\u624B\u4E0A\u7684\u6D3B\uFF0C\u8BF7\u7A0D\u540E\u518D\u8BD5\u3002",
|
|
@@ -16917,7 +16955,7 @@ async function ensureSession(env, record2, ensured, prepared) {
|
|
|
16917
16955
|
message: {
|
|
16918
16956
|
messageId: `team-trial-message:${key}`,
|
|
16919
16957
|
role: "user",
|
|
16920
|
-
text: trialMessage("localPrompt", { trialId }),
|
|
16958
|
+
text: teamWakeText({ reason: "instructions" }, trialMessage("localPrompt", { trialId })),
|
|
16921
16959
|
attachments: []
|
|
16922
16960
|
},
|
|
16923
16961
|
modelSelection: selection.modelSelection,
|
|
@@ -16987,7 +17025,8 @@ async function tellLeads(env, leadThreads, projectId, key, text) {
|
|
|
16987
17025
|
recipient: { threadId: leadThreadId },
|
|
16988
17026
|
requestId,
|
|
16989
17027
|
messageId: `${requestId}:message`,
|
|
16990
|
-
text
|
|
17028
|
+
text,
|
|
17029
|
+
wake: { reason: "notice" }
|
|
16991
17030
|
});
|
|
16992
17031
|
delivered ||= sent;
|
|
16993
17032
|
}
|
|
@@ -17413,7 +17452,7 @@ function startTrialRuntime(ctx, deps, options = {}) {
|
|
|
17413
17452
|
// src/index.ts
|
|
17414
17453
|
var index_default = definePlugin({
|
|
17415
17454
|
id: "team",
|
|
17416
|
-
apiVersion:
|
|
17455
|
+
apiVersion: 49,
|
|
17417
17456
|
activate(ctx) {
|
|
17418
17457
|
const trialState = ctx.derivedState(trialStateDefinition);
|
|
17419
17458
|
const rosters = createRosterService(ctx);
|
package/locales/en.json
CHANGED
|
@@ -85,7 +85,6 @@
|
|
|
85
85
|
"sessionWaiting": "Needs input",
|
|
86
86
|
"sessionStopped": "Stopped",
|
|
87
87
|
"sessionStoppedAt": "Stopped at {{time}}",
|
|
88
|
-
"sessionStatusTitle": "Status of the assigned member's session",
|
|
89
88
|
"queued": "Queued",
|
|
90
89
|
"dateLocale": "en",
|
|
91
90
|
"queuedTitle": "Assigned but not woken yet: waits until their current item is done",
|
|
@@ -192,7 +191,6 @@
|
|
|
192
191
|
"openItem": "Open details for goal work item #{{number}}"
|
|
193
192
|
},
|
|
194
193
|
"roster": {
|
|
195
|
-
"remote": "Remote",
|
|
196
194
|
"toolsHint": "Keep the board and project memory on for this project so members can pick up work and record what they learn.",
|
|
197
195
|
"toolkitsOff": "The lead needs the board and project memory. Turn on both switches above.",
|
|
198
196
|
"boardOff": "The lead needs the board. Turn on the board switch above.",
|
|
@@ -235,7 +233,7 @@
|
|
|
235
233
|
"kind": "Type",
|
|
236
234
|
"kindAgentHint": "Runs with the provider and model you pick when the machine is this one. A member set to another machine fails its trial run: set it back to this machine, or skip the trial run, and it runs on this machine with the project's default model.",
|
|
237
235
|
"kindRemoteHint": "An agent that connects from another machine with its own credentials.",
|
|
238
|
-
"kindPersonHint": "
|
|
236
|
+
"kindPersonHint": "People are listed as members but do not run sessions.",
|
|
239
237
|
"thisIsMe": "This is me",
|
|
240
238
|
"thisIsMeHint": "When someone @-mentions this member in a team group, the message goes to your Sent to me.",
|
|
241
239
|
"boundToOther": "This member is another person. Only they can change this.",
|
|
@@ -244,7 +242,6 @@
|
|
|
244
242
|
"memberTitle": "Title",
|
|
245
243
|
"responsibility": "Responsibility",
|
|
246
244
|
"instructions": "Work instructions",
|
|
247
|
-
"instructionsHint": "Written for this member. You can change it later.",
|
|
248
245
|
"instructionsLoading": "Loading work instructions…",
|
|
249
246
|
"instructionsFailed": "The work instructions could not be loaded.",
|
|
250
247
|
"avatar": "Avatar",
|
|
@@ -376,7 +373,6 @@
|
|
|
376
373
|
"version": "Version {{version}}",
|
|
377
374
|
"publishedBy": "Published by {{author}}",
|
|
378
375
|
"requiresAck": "Acknowledgement required",
|
|
379
|
-
"noAck": "Acknowledgement not required",
|
|
380
376
|
"restoredFrom": "Restored from version {{version}}",
|
|
381
377
|
"moreReleases": "Load older versions",
|
|
382
378
|
"members": "Member acknowledgements",
|
|
@@ -402,7 +398,6 @@
|
|
|
402
398
|
"revertDescription": "Publish the content of version {{version}} as a new version, under your name. The current version remains in history.",
|
|
403
399
|
"confirmRevert": "Revert and publish",
|
|
404
400
|
"historyFailed": "Couldn't load the version history. Try again.",
|
|
405
|
-
"emptyPages": "Once the handbook is published, its three pages show here.",
|
|
406
401
|
"fieldTitle": "Title (optional)",
|
|
407
402
|
"fieldBody": "Body",
|
|
408
403
|
"fieldSummary": "Change summary (optional)",
|
|
@@ -415,7 +410,6 @@
|
|
|
415
410
|
},
|
|
416
411
|
"remoteStatus": {
|
|
417
412
|
"title": "Remote members",
|
|
418
|
-
"none": "No remote agents on the team. Add one as a member of type Remote agent.",
|
|
419
413
|
"lastSeen": "Last seen {{time}}",
|
|
420
414
|
"neverSeen": "Not seen yet",
|
|
421
415
|
"workUnavailable": "Could not read this member's work. Try again later.",
|
package/locales/zh-CN.json
CHANGED
|
@@ -85,7 +85,6 @@
|
|
|
85
85
|
"sessionWaiting": "等人处理",
|
|
86
86
|
"sessionStopped": "停着",
|
|
87
87
|
"sessionStoppedAt": "停于 {{time}}",
|
|
88
|
-
"sessionStatusTitle": "指派成员的会话此刻的状态",
|
|
89
88
|
"queued": "排着",
|
|
90
89
|
"dateLocale": "zh-CN",
|
|
91
90
|
"queuedTitle": "已派、还没叫醒:等对方手上那件做完再叫",
|
|
@@ -192,7 +191,6 @@
|
|
|
192
191
|
"openItem": "打开目标工作项 #{{number}} 的详情"
|
|
193
192
|
},
|
|
194
193
|
"roster": {
|
|
195
|
-
"remote": "远端",
|
|
196
194
|
"toolsHint": "这个项目要开着看板与项目记忆,成员才能领活与记经验。",
|
|
197
195
|
"toolkitsOff": "负责人要用看板和项目记忆,先打开上面两只开关。",
|
|
198
196
|
"boardOff": "负责人要用看板,先打开上面的看板开关。",
|
|
@@ -235,7 +233,7 @@
|
|
|
235
233
|
"kind": "类型",
|
|
236
234
|
"kindAgentHint": "机器选这一台时,用你选的 provider 和模型运行。选了别的机器的成员试跑会出错:改回这一台,或者跳过试跑,它就在这台机器上用项目的默认模型运行。",
|
|
237
235
|
"kindRemoteHint": "从另一台机器用自己的凭据连进来的 agent。",
|
|
238
|
-
"kindPersonHint": "
|
|
236
|
+
"kindPersonHint": "人会列在成员里,但不会运行会话。",
|
|
239
237
|
"thisIsMe": "这是我",
|
|
240
238
|
"thisIsMeHint": "有人在团队群里 @ 这个成员时,消息会进你的「发给我的」。",
|
|
241
239
|
"boundToOther": "这个成员是另一个人,只有对方本人能改这一项。",
|
|
@@ -244,7 +242,6 @@
|
|
|
244
242
|
"memberTitle": "头衔",
|
|
245
243
|
"responsibility": "职责",
|
|
246
244
|
"instructions": "工作说明",
|
|
247
|
-
"instructionsHint": "写给这名成员的说明,之后可以修改。",
|
|
248
245
|
"instructionsLoading": "正在载入工作说明…",
|
|
249
246
|
"instructionsFailed": "未能载入工作说明。",
|
|
250
247
|
"avatar": "头像",
|
|
@@ -376,7 +373,6 @@
|
|
|
376
373
|
"version": "第 {{version}} 版",
|
|
377
374
|
"publishedBy": "发布者:{{author}}",
|
|
378
375
|
"requiresAck": "要求确认",
|
|
379
|
-
"noAck": "不要求确认",
|
|
380
376
|
"restoredFrom": "退回自第 {{version}} 版",
|
|
381
377
|
"moreReleases": "加载更早版本",
|
|
382
378
|
"members": "成员确认情况",
|
|
@@ -402,7 +398,6 @@
|
|
|
402
398
|
"revertDescription": "以你的名字,把第 {{version}} 版的内容发布为一个新版本。当前版本仍保留在历史里",
|
|
403
399
|
"confirmRevert": "退回并发布",
|
|
404
400
|
"historyFailed": "版本历史读取失败,请再试一次",
|
|
405
|
-
"emptyPages": "手册发布后,这里显示它的三页内容",
|
|
406
401
|
"fieldTitle": "标题(可选)",
|
|
407
402
|
"fieldBody": "正文",
|
|
408
403
|
"fieldSummary": "改动说明(可选)",
|
|
@@ -415,7 +410,6 @@
|
|
|
415
410
|
},
|
|
416
411
|
"remoteStatus": {
|
|
417
412
|
"title": "远端成员",
|
|
418
|
-
"none": "团队里还没有远端 agent。可在成员里添加类型为远端 agent 的成员。",
|
|
419
413
|
"lastSeen": "最近来过:{{time}}",
|
|
420
414
|
"neverSeen": "还没来过",
|
|
421
415
|
"workUnavailable": "暂时读不出它手上的活,请稍后再试。",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ycodium-ai/plugin-team",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.3614",
|
|
4
4
|
"description": "A project team roster with members, a lead, and goals.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"teams",
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
"typescript": "~6.0.3",
|
|
36
36
|
"vite-plus": "0.2.2",
|
|
37
37
|
"ycodium-system-text": "0.0.0",
|
|
38
|
-
"@ycodium-ai/plugin-api": "0.2.
|
|
38
|
+
"@ycodium-ai/plugin-api": "0.2.3614"
|
|
39
39
|
},
|
|
40
40
|
"ycodium": {
|
|
41
41
|
"plugin": "./dist/index.js",
|