minimal-agent 0.18.6 → 0.18.7
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/package.json +1 -1
- package/plugins/workflow-runner/src/runtime/context.js +5 -17
- package/plugins/workflow-runner/src/runtime/context.ts +4 -15
- package/plugins/workflow-runner/src/runtime/model.js +4 -2
- package/plugins/workflow-runner/src/runtime/model.ts +3 -2
- package/plugins/workflow-runner/test/api.test.ts +4 -2
- package/plugins/workflow-runner/test/embeddedExecution.test.ts +5 -6
- package/plugins/workflow-runner/test/modelOutcome.test.ts +36 -0
- package/skills/dynamic-ui/SKILL.md +38 -278
- package/skills/dynamic-ui/mermaid.md +32 -0
- package/skills/dynamic-ui/scenes/architecture-and-flow.md +4 -1
- package/skills/dynamic-ui/scenes/data-visualization.md +5 -2
- package/skills/dynamic-ui/svg-design.md +251 -0
- package/skills/dynamic-ui/templates/README.md +2 -1
- package/skills/dynamic-ui/tokens/visual-tokens.md +4 -5
- package/src/advisor/README.md +24 -0
- package/src/advisor/advisorCoordinator.js +101 -45
- package/src/advisor/advisorCoordinator.ts +90 -51
- package/src/advisor/deliveryReview.js +35 -0
- package/src/advisor/deliveryReview.ts +30 -0
- package/src/advisor/presentation.js +10 -0
- package/src/advisor/presentation.ts +12 -0
- package/src/advisor/reviewContext.js +60 -0
- package/src/advisor/reviewContext.ts +72 -0
- package/src/context/tokenCounter.js +3 -0
- package/src/context/tokenCounter.ts +2 -0
- package/src/llm/messageProvenance.js +1 -1
- package/src/llm/messageProvenance.ts +1 -1
- package/src/loop.js +203 -30
- package/src/loop.ts +183 -30
- package/src/prompts/policyRegistry.js +17 -9
- package/src/prompts/policyRegistry.ts +17 -9
- package/src/runtime/answerPreparation.js +9 -0
- package/src/runtime/answerPreparation.ts +11 -0
- package/src/runtime/eventSemantics.js +2 -0
- package/src/runtime/eventSemantics.ts +2 -0
- package/src/runtime/finalAnswer.js +7 -0
- package/src/runtime/finalAnswer.ts +9 -0
- package/src/runtime/lifecycleTrace.js +16 -0
- package/src/runtime/lifecycleTrace.ts +22 -0
- package/src/session/runTurn.js +15 -1
- package/src/session/runTurn.ts +13 -1
- package/src/tools/advisor/advisor.js +56 -40
- package/src/tools/advisor/advisor.ts +57 -39
- package/src/tools/advisor/advisorDecision.js +6 -3
- package/src/tools/advisor/advisorDecision.ts +6 -3
- package/src/tools/agent/agent.js +7 -1
- package/src/tools/agent/agent.ts +7 -1
- package/src/tools/bash/semantics.js +91 -26
- package/src/tools/bash/semantics.ts +63 -33
- package/src/tools/index.js +4 -1
- package/src/tools/index.ts +4 -1
- package/src/types.ts +15 -6
- package/src/ui/LiveArea.js +2 -1
- package/src/ui/LiveArea.tsx +2 -1
- package/src/ui/MessageList.js +18 -5
- package/src/ui/MessageList.tsx +25 -3
- package/src/ui/draftNotice.js +1 -8
- package/src/ui/draftNotice.ts +1 -10
- package/src/ui/hooks/useChat.js +25 -1
- package/src/ui/hooks/useChat.ts +22 -1
package/src/ui/hooks/useChat.js
CHANGED
|
@@ -1055,6 +1055,13 @@ export function handleEvent(ev, setters) {
|
|
|
1055
1055
|
// V2 工作流发结构化 `workflow_progress`;旧插件仍可发 `plugin_progress`。
|
|
1056
1056
|
// 收口到 LoopEvent:未识别的 PluginEvent type 走 default no-op
|
|
1057
1057
|
const e = ev;
|
|
1058
|
+
if (e.type === 'turn_done' || e.type === 'interrupted' || (e.type === 'error' && !isRecoverableLoopError(e))) {
|
|
1059
|
+
setters.cancelStreamingFlush();
|
|
1060
|
+
setters.setStreamingText(() => '');
|
|
1061
|
+
setters.cancelReasoningFlush();
|
|
1062
|
+
setters.setReasoningPreview(() => '');
|
|
1063
|
+
setters.setProgressStage('idle');
|
|
1064
|
+
}
|
|
1058
1065
|
if (['assistant_message', 'tool_start', 'turn_done', 'interrupted', 'error'].includes(e.type))
|
|
1059
1066
|
setters.setProgressNotice?.(null);
|
|
1060
1067
|
switch (e.type) {
|
|
@@ -1067,6 +1074,8 @@ export function handleEvent(ev, setters) {
|
|
|
1067
1074
|
setters.appendStreamingDelta(e.delta);
|
|
1068
1075
|
break;
|
|
1069
1076
|
case 'assistant_message':
|
|
1077
|
+
if (e.message.presentation === 'final')
|
|
1078
|
+
setters.setPluginProgress(null);
|
|
1070
1079
|
// history 已被 runQuery 直接 push。先 flush 残留 streaming buffer
|
|
1071
1080
|
// 把末段 text 落到 streamingText state(avoid 视觉跳跃),再清空
|
|
1072
1081
|
// streamingText —— Static 已 commit 完整 assistant message 接管显示。
|
|
@@ -1085,13 +1094,26 @@ export function handleEvent(ev, setters) {
|
|
|
1085
1094
|
setters.setTransientError?.(null);
|
|
1086
1095
|
setters.bump();
|
|
1087
1096
|
break;
|
|
1097
|
+
case 'injected_message':
|
|
1098
|
+
// Milestones preserve live previews; legacy drafts transfer them to history.
|
|
1099
|
+
if (e.message.role === 'system' && e.message._uiProgress) {
|
|
1100
|
+
if (e.message.draftPresentation) {
|
|
1101
|
+
setters.flushStreamingBuffer();
|
|
1102
|
+
setters.setStreamingText(() => '');
|
|
1103
|
+
setters.cancelReasoningFlush();
|
|
1104
|
+
setters.setReasoningPreview(() => '');
|
|
1105
|
+
}
|
|
1106
|
+
setters.bump();
|
|
1107
|
+
}
|
|
1108
|
+
break;
|
|
1088
1109
|
case 'assistant_draft_discarded':
|
|
1089
1110
|
setters.flushStreamingBuffer();
|
|
1090
1111
|
setters.setStreamingText(() => '');
|
|
1091
1112
|
setters.cancelReasoningFlush();
|
|
1092
1113
|
setters.setReasoningPreview(() => '');
|
|
1093
1114
|
setters.setProgressStage('thinking');
|
|
1094
|
-
|
|
1115
|
+
if (e.textLength > 0)
|
|
1116
|
+
setters.emitProgressLine?.(draftNotice(e.reason));
|
|
1095
1117
|
setters.setProgressNotice?.(draftNotice(e.reason));
|
|
1096
1118
|
break;
|
|
1097
1119
|
case 'tool_start':
|
|
@@ -1177,6 +1199,8 @@ export function handleEvent(ev, setters) {
|
|
|
1177
1199
|
// Diagnostics are intentionally local-safe and currently consumed by CLI/stream hosts.
|
|
1178
1200
|
break;
|
|
1179
1201
|
case 'turn_done':
|
|
1202
|
+
if (e.completionStatus === 'no_answer')
|
|
1203
|
+
setters.setError(e.warning ?? '本轮未生成最终答复,可以重试。');
|
|
1180
1204
|
setters.setProgressStage('idle');
|
|
1181
1205
|
setters.setTransientError?.(null);
|
|
1182
1206
|
setters.bump();
|
package/src/ui/hooks/useChat.ts
CHANGED
|
@@ -1466,6 +1466,13 @@ export function handleEvent(
|
|
|
1466
1466
|
|
|
1467
1467
|
// 收口到 LoopEvent:未识别的 PluginEvent type 走 default no-op
|
|
1468
1468
|
const e = ev as LoopEvent;
|
|
1469
|
+
if (e.type === 'turn_done' || e.type === 'interrupted' || (e.type === 'error' && !isRecoverableLoopError(e))) {
|
|
1470
|
+
setters.cancelStreamingFlush();
|
|
1471
|
+
setters.setStreamingText(() => '');
|
|
1472
|
+
setters.cancelReasoningFlush();
|
|
1473
|
+
setters.setReasoningPreview(() => '');
|
|
1474
|
+
setters.setProgressStage('idle');
|
|
1475
|
+
}
|
|
1469
1476
|
if (['assistant_message', 'tool_start', 'turn_done', 'interrupted', 'error'].includes(e.type)) setters.setProgressNotice?.(null);
|
|
1470
1477
|
switch (e.type) {
|
|
1471
1478
|
case 'user_message_committed':
|
|
@@ -1477,6 +1484,7 @@ export function handleEvent(
|
|
|
1477
1484
|
setters.appendStreamingDelta(e.delta);
|
|
1478
1485
|
break;
|
|
1479
1486
|
case 'assistant_message':
|
|
1487
|
+
if (e.message.presentation === 'final') setters.setPluginProgress(null);
|
|
1480
1488
|
// history 已被 runQuery 直接 push。先 flush 残留 streaming buffer
|
|
1481
1489
|
// 把末段 text 落到 streamingText state(avoid 视觉跳跃),再清空
|
|
1482
1490
|
// streamingText —— Static 已 commit 完整 assistant message 接管显示。
|
|
@@ -1495,13 +1503,25 @@ export function handleEvent(
|
|
|
1495
1503
|
setters.setTransientError?.(null);
|
|
1496
1504
|
setters.bump();
|
|
1497
1505
|
break;
|
|
1506
|
+
case 'injected_message':
|
|
1507
|
+
// Milestones preserve live previews; legacy drafts transfer them to history.
|
|
1508
|
+
if (e.message.role === 'system' && e.message._uiProgress) {
|
|
1509
|
+
if (e.message.draftPresentation) {
|
|
1510
|
+
setters.flushStreamingBuffer();
|
|
1511
|
+
setters.setStreamingText(() => '');
|
|
1512
|
+
setters.cancelReasoningFlush();
|
|
1513
|
+
setters.setReasoningPreview(() => '');
|
|
1514
|
+
}
|
|
1515
|
+
setters.bump();
|
|
1516
|
+
}
|
|
1517
|
+
break;
|
|
1498
1518
|
case 'assistant_draft_discarded':
|
|
1499
1519
|
setters.flushStreamingBuffer();
|
|
1500
1520
|
setters.setStreamingText(() => '');
|
|
1501
1521
|
setters.cancelReasoningFlush();
|
|
1502
1522
|
setters.setReasoningPreview(() => '');
|
|
1503
1523
|
setters.setProgressStage('thinking');
|
|
1504
|
-
setters.emitProgressLine?.(draftNotice(e.reason));
|
|
1524
|
+
if (e.textLength > 0) setters.emitProgressLine?.(draftNotice(e.reason));
|
|
1505
1525
|
setters.setProgressNotice?.(draftNotice(e.reason));
|
|
1506
1526
|
break;
|
|
1507
1527
|
case 'tool_start':
|
|
@@ -1585,6 +1605,7 @@ export function handleEvent(
|
|
|
1585
1605
|
// Diagnostics are intentionally local-safe and currently consumed by CLI/stream hosts.
|
|
1586
1606
|
break;
|
|
1587
1607
|
case 'turn_done':
|
|
1608
|
+
if (e.completionStatus === 'no_answer') setters.setError(e.warning ?? '本轮未生成最终答复,可以重试。');
|
|
1588
1609
|
setters.setProgressStage('idle');
|
|
1589
1610
|
setters.setTransientError?.(null);
|
|
1590
1611
|
setters.bump();
|