@dsh-enhanced/assistant-delivery 0.1.18 → 0.1.19
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 +2 -2
- package/lib/agent-runtime.d.ts +1 -0
- package/lib/agent-runtime.d.ts.map +1 -1
- package/lib/agent-runtime.js +73 -9
- package/lib/agent-runtime.js.map +1 -1
- package/lib/service.d.ts.map +1 -1
- package/lib/service.js +1 -0
- package/lib/service.js.map +1 -1
- package/lib/version.d.ts +1 -1
- package/lib/version.js +1 -1
- package/package.json +7 -7
package/README.md
CHANGED
|
@@ -159,7 +159,7 @@ ownerRoutes:
|
|
|
159
159
|
|
|
160
160
|
`apiProxy` 始终是 `ctx.userQuestions` 的唯一 provider;Delivery 不注册第二个 provider。可选的 rc.8 `apiProxy.events.mux()` 将 pending `question/requested` 帧交给 Delivery,Delivery 只在其 session 仍对应 exact active owner binding、当前 adapter 仍具备问题交互能力时,转给该渠道;回答以同一 rpc id 回写 `apiProxy.respond()`。同一请求同时可被 Web 与渠道界面看到,谁先被 ApiProxy 接受谁生效(first-claim-wins);晚到、撤销或重复回答不会制造新的 Agent turn。
|
|
161
161
|
|
|
162
|
-
|
|
162
|
+
渠道自由文本只有在明确回复对应问题消息时才会结算,并要求 account、tenant、conversation、principal、binding version/generation 与当前 owner fence 全部匹配;同一路由恰好只有一个 pending question 也不会吞掉未引用的新消息。匹配回答直接恢复原来的工具调用,不写 Inbox、不作为普通新消息排队;`/stop`、`/new`、`/clear` 仍按渠道正常命令接入规则取消旧 wait(例如群聊可能仍要求 @ 机器人),问题卡的取消按钮则不依赖文字命令。问题发往原 binding 会话,不保证是私聊:若原会话是群聊,问题正文和选项对该群可见,敏感问题应在私聊中发起或改用其他交互方式。
|
|
163
163
|
|
|
164
164
|
## Agent 与工具
|
|
165
165
|
|
|
@@ -183,7 +183,7 @@ ownerRoutes:
|
|
|
183
183
|
- `/feedback`:提交固定枚举的响应偏好,或对 exact Automation 结果提交任务目标状态;在 Delivery 本地处理,不恢复 Agent、不交给模型。
|
|
184
184
|
- `/learning`:查看状态或 content-free T1 摘要、导出版本化稳定 JSON、暂停、恢复、按 exact T1 key 回滚或清除当前 workspace + preset 的偏好学习;只允许 exact active owner,在 Delivery 本地处理,不恢复 Agent、不交给模型。
|
|
185
185
|
|
|
186
|
-
渠道 command envelope 只接受从正文第一字节开始的小写 ASCII slash 语法。未知命令、当前 preset 未发布的命令,以及大写、空命令等非法 slash 形态都只返回确定性帮助/错误,绝不作为自然语言进入 LLM。普通 Agent turn 只有在 session persistence `flush()` 明确返回 `true` 后才入队最终回复;返回 `false` 或抛错时不宣称任务成功。
|
|
186
|
+
渠道 command envelope 只接受从正文第一字节开始的小写 ASCII slash 语法。未知命令、当前 preset 未发布的命令,以及大写、空命令等非法 slash 形态都只返回确定性帮助/错误,绝不作为自然语言进入 LLM。普通 Agent turn 只有在 session persistence `flush()` 明确返回 `true` 后才入队最终回复;返回 `false` 或抛错时不宣称任务成功。Agent Loop 以 `max-tokens` 结束时,Delivery 会保留已经生成的正文、在 `maxTextBytes` 内预留明确的“不完整/回复继续”提示并把进度标为失败,不再把半句冒充“任务已完成”;即使截断或正常结束时正文为空,也会发送预算内的非空重试提示,绝不静默完成。一个声称正常完成、但超过投递字节预算的回答也按截断处理;截断回复不进入 completed-turn preference projection。
|
|
187
187
|
|
|
188
188
|
`/feedback` 的完整固定语法如下;不接受附件或额外自由文本:
|
|
189
189
|
|
package/lib/agent-runtime.d.ts
CHANGED
|
@@ -29,6 +29,7 @@ interface DshDeliveryRuntimeOptions {
|
|
|
29
29
|
provider: string;
|
|
30
30
|
model: string;
|
|
31
31
|
maxOutputTokens: number;
|
|
32
|
+
maxTextBytes: number;
|
|
32
33
|
permissionPickerTtlMs: number;
|
|
33
34
|
getModelSelection(conversation: ConversationRef): ConversationModelSelection | undefined;
|
|
34
35
|
/** Atomically remove a stale explicit effort without overwriting a newer model choice. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-runtime.d.ts","sourceRoot":"","sources":["../src/agent-runtime.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"agent-runtime.d.ts","sourceRoot":"","sources":["../src/agent-runtime.ts"],"names":[],"mappings":"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"}
|
package/lib/agent-runtime.js
CHANGED
|
@@ -854,11 +854,59 @@ function sessionResumeFailureCode(error) {
|
|
|
854
854
|
function sessionFingerprint(value) {
|
|
855
855
|
return createHash('sha256').update(value).digest('hex').slice(0, 8);
|
|
856
856
|
}
|
|
857
|
+
const AGENT_OUTPUT_TRUNCATED_CODE = 'agent-output-truncated';
|
|
858
|
+
const AGENT_EMPTY_RESPONSE_CODE = 'agent-empty-response';
|
|
859
|
+
function utf8Prefix(value, maxBytes) {
|
|
860
|
+
const bytes = Buffer.from(value, 'utf8');
|
|
861
|
+
if (bytes.length <= maxBytes)
|
|
862
|
+
return value;
|
|
863
|
+
let end = maxBytes;
|
|
864
|
+
while (end > 0 && (bytes[end] & 0xc0) === 0x80)
|
|
865
|
+
end -= 1;
|
|
866
|
+
return bytes.subarray(0, end).toString('utf8');
|
|
867
|
+
}
|
|
868
|
+
function fittingNotice(candidates, maxBytes) {
|
|
869
|
+
return candidates.find(value => Buffer.byteLength(value, 'utf8') <= maxBytes) ?? '!';
|
|
870
|
+
}
|
|
871
|
+
function truncatedAgentReply(text, maxBytes) {
|
|
872
|
+
const notice = fittingNotice([
|
|
873
|
+
'⚠️ 本轮输出达到上限,回答可能不完整。请回复“继续”,我会接着回答。',
|
|
874
|
+
'回答达到上限,可能不完整;请回复“继续”。',
|
|
875
|
+
'回答被截断,请继续。',
|
|
876
|
+
'retry',
|
|
877
|
+
'!',
|
|
878
|
+
], maxBytes);
|
|
879
|
+
if (text.trim() === '')
|
|
880
|
+
return fittingNotice([
|
|
881
|
+
'模型本轮输出达到上限,但尚未生成可发送的正文。请回复“继续”或缩小问题范围后重试。',
|
|
882
|
+
'输出达到上限且未生成正文,请回复“继续”。',
|
|
883
|
+
'未生成回答,请重试。',
|
|
884
|
+
'retry',
|
|
885
|
+
'!',
|
|
886
|
+
], maxBytes);
|
|
887
|
+
const separator = '\n\n> ';
|
|
888
|
+
const suffix = `${separator}${notice}`;
|
|
889
|
+
const prefixBudget = maxBytes - Buffer.byteLength(suffix, 'utf8');
|
|
890
|
+
if (prefixBudget <= 0)
|
|
891
|
+
return notice;
|
|
892
|
+
const prefix = utf8Prefix(text, prefixBudget);
|
|
893
|
+
return prefix.trim() === '' ? notice : `${prefix}${suffix}`;
|
|
894
|
+
}
|
|
895
|
+
function emptyAgentReply(maxBytes) {
|
|
896
|
+
return fittingNotice([
|
|
897
|
+
'模型本轮未生成可发送的回答。请重试;如果问题较长,也可以拆成更小的步骤。',
|
|
898
|
+
'模型未生成回答,请重试。',
|
|
899
|
+
'请重试。',
|
|
900
|
+
'retry',
|
|
901
|
+
'!',
|
|
902
|
+
], maxBytes);
|
|
903
|
+
}
|
|
857
904
|
function finalAssistant(events, from, expectedTurn) {
|
|
858
905
|
if (expectedTurn === undefined)
|
|
859
|
-
return { text: '', completed: false, stopped: false };
|
|
906
|
+
return { text: '', completed: false, truncated: false, stopped: false };
|
|
860
907
|
let text = '';
|
|
861
908
|
let completed = false;
|
|
909
|
+
let truncated = false;
|
|
862
910
|
let stopped = false;
|
|
863
911
|
let failureCode;
|
|
864
912
|
for (const event of events.slice(from)) {
|
|
@@ -869,7 +917,9 @@ function finalAssistant(events, from, expectedTurn) {
|
|
|
869
917
|
if (event.type === 'turn/end' && event.data.turn === expectedTurn) {
|
|
870
918
|
const reason = event.data.reason;
|
|
871
919
|
completed = typeof reason === 'object' && reason !== null && 'kind' in reason
|
|
872
|
-
&&
|
|
920
|
+
&& reason.kind === 'completed';
|
|
921
|
+
truncated = typeof reason === 'object' && reason !== null && 'kind' in reason
|
|
922
|
+
&& reason.kind === 'max-tokens';
|
|
873
923
|
stopped = typeof reason === 'object' && reason !== null
|
|
874
924
|
&& reason.kind === 'aborted'
|
|
875
925
|
&& typeof reason.reason === 'object'
|
|
@@ -878,10 +928,10 @@ function finalAssistant(events, from, expectedTurn) {
|
|
|
878
928
|
const error = typeof reason === 'object' && reason !== null && 'error' in reason
|
|
879
929
|
? reason.error
|
|
880
930
|
: undefined;
|
|
881
|
-
failureCode = completed || typeof error?.code !== 'string' ? undefined : error.code;
|
|
931
|
+
failureCode = completed || truncated || typeof error?.code !== 'string' ? undefined : error.code;
|
|
882
932
|
}
|
|
883
933
|
}
|
|
884
|
-
return { text, completed, stopped, ...(failureCode === undefined ? {} : { failureCode }) };
|
|
934
|
+
return { text, completed, truncated, stopped, ...(failureCode === undefined ? {} : { failureCode }) };
|
|
885
935
|
}
|
|
886
936
|
export class DshDeliveryRuntime {
|
|
887
937
|
ctx;
|
|
@@ -2378,17 +2428,31 @@ export class DshDeliveryRuntime {
|
|
|
2378
2428
|
? { outcome: 'not-processed', failureCode: 'inbound-authorization-revoked', retryable: false }
|
|
2379
2429
|
: { outcome: 'not-processed', failureCode: 'inbound-authorization-check-failed', retryable: false };
|
|
2380
2430
|
}
|
|
2431
|
+
if (output.truncated || Buffer.byteLength(output.text, 'utf8') > this.options.maxTextBytes) {
|
|
2432
|
+
this.options.replyCommand(binding, envelope.eventId, {
|
|
2433
|
+
text: truncatedAgentReply(output.text, this.options.maxTextBytes),
|
|
2434
|
+
format: 'markdown',
|
|
2435
|
+
});
|
|
2436
|
+
publishProgress({ kind: 'failed', code: AGENT_OUTPUT_TRUNCATED_CODE });
|
|
2437
|
+
return { outcome: 'processed' };
|
|
2438
|
+
}
|
|
2381
2439
|
if (!output.completed) {
|
|
2382
2440
|
publishProgress({ kind: 'failed', ...(output.failureCode === undefined ? {} : { code: output.failureCode }) });
|
|
2383
2441
|
return { outcome: 'not-processed', failureCode: 'agent-turn-incomplete', retryable: false };
|
|
2384
2442
|
}
|
|
2443
|
+
if (output.text.trim() === '') {
|
|
2444
|
+
this.options.replyCommand(binding, envelope.eventId, {
|
|
2445
|
+
text: emptyAgentReply(this.options.maxTextBytes),
|
|
2446
|
+
format: 'markdown',
|
|
2447
|
+
});
|
|
2448
|
+
publishProgress({ kind: 'failed', code: AGENT_EMPTY_RESPONSE_CODE });
|
|
2449
|
+
return { outcome: 'processed' };
|
|
2450
|
+
}
|
|
2385
2451
|
// Agent answers are authored as Markdown (tables, bold, inline code), so request Markdown
|
|
2386
2452
|
// rendering; sending them as plain text shows the raw `|---|` and `**` syntax to the user.
|
|
2387
|
-
|
|
2388
|
-
|
|
2389
|
-
|
|
2390
|
-
this.ctx.logger.warn('assistant-delivery: completed-turn preference projection is ambiguous');
|
|
2391
|
-
}
|
|
2453
|
+
const learning = await this.options.replyCompletedPreferenceTurn(agent, binding, envelope, { text: output.text, format: 'markdown' });
|
|
2454
|
+
if (learning === 'unknown') {
|
|
2455
|
+
this.ctx.logger.warn('assistant-delivery: completed-turn preference projection is ambiguous');
|
|
2392
2456
|
}
|
|
2393
2457
|
publishProgress({ kind: 'completed' });
|
|
2394
2458
|
return { outcome: 'processed' };
|