@anvia/studio 0.6.1 → 0.7.0
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/dist/index.js +76 -125
- package/dist/index.js.map +1 -1
- package/dist/ui/assets/{ArrowClockwise.es-BA79KX3F.js → ArrowClockwise.es-CdkDSmVV.js} +2 -2
- package/dist/ui/assets/{ArrowClockwise.es-BA79KX3F.js.map → ArrowClockwise.es-CdkDSmVV.js.map} +1 -1
- package/dist/ui/assets/{Path.es-DTZ3zsLn.js → Path.es-CAqZdUXu.js} +2 -2
- package/dist/ui/assets/{Path.es-DTZ3zsLn.js.map → Path.es-CAqZdUXu.js.map} +1 -1
- package/dist/ui/assets/{Play.es-CJTRfv9R.js → Play.es-D9AQgyVC.js} +2 -2
- package/dist/ui/assets/{Play.es-CJTRfv9R.js.map → Play.es-D9AQgyVC.js.map} +1 -1
- package/dist/ui/assets/{evals-page-rS-P7eLF.js → evals-page-GEsRKWxr.js} +2 -2
- package/dist/ui/assets/{evals-page-rS-P7eLF.js.map → evals-page-GEsRKWxr.js.map} +1 -1
- package/dist/ui/assets/index-DW3P6_Qc.js +54 -0
- package/dist/ui/assets/index-DW3P6_Qc.js.map +1 -0
- package/dist/ui/assets/{knowledge-page-CR0JUneq.js → knowledge-page-CQJNZ8fA.js} +2 -2
- package/dist/ui/assets/{knowledge-page-CR0JUneq.js.map → knowledge-page-CQJNZ8fA.js.map} +1 -1
- package/dist/ui/assets/{mcps-page-D3P0UAWf.js → mcps-page-BRCLJmEX.js} +2 -2
- package/dist/ui/assets/{mcps-page-D3P0UAWf.js.map → mcps-page-BRCLJmEX.js.map} +1 -1
- package/dist/ui/assets/{memory-page-kVDqOAOd.js → memory-page-DsITtAok.js} +2 -2
- package/dist/ui/assets/{memory-page-kVDqOAOd.js.map → memory-page-DsITtAok.js.map} +1 -1
- package/dist/ui/assets/{pipelines-page-lMfsVNRy.js → pipelines-page-vBUhZ5x2.js} +2 -2
- package/dist/ui/assets/{pipelines-page-lMfsVNRy.js.map → pipelines-page-vBUhZ5x2.js.map} +1 -1
- package/dist/ui/assets/{renderers-Bc89UGTN.js → renderers-hYnJAoYZ.js} +2 -2
- package/dist/ui/assets/{renderers-Bc89UGTN.js.map → renderers-hYnJAoYZ.js.map} +1 -1
- package/dist/ui/assets/{sessions-page-CVlkRPfT.js → sessions-page-BYhPHSQS.js} +2 -2
- package/dist/ui/assets/{sessions-page-CVlkRPfT.js.map → sessions-page-BYhPHSQS.js.map} +1 -1
- package/dist/ui/assets/{status-page-XKvTGruQ.js → status-page-B16drVrZ.js} +2 -2
- package/dist/ui/assets/{status-page-XKvTGruQ.js.map → status-page-B16drVrZ.js.map} +1 -1
- package/dist/ui/assets/{tools-page-DJt_QdDe.js → tools-page-DwgbeCMm.js} +2 -2
- package/dist/ui/assets/{tools-page-DJt_QdDe.js.map → tools-page-DwgbeCMm.js.map} +1 -1
- package/dist/ui/assets/{trace-browser-BBITQELO.js → trace-browser-DLB0mURK.js} +2 -2
- package/dist/ui/assets/{trace-browser-BBITQELO.js.map → trace-browser-DLB0mURK.js.map} +1 -1
- package/dist/ui/assets/{transcript-item-BvaA1PBu.js → transcript-item-DM71m6Mp.js} +2 -2
- package/dist/ui/assets/{transcript-item-BvaA1PBu.js.map → transcript-item-DM71m6Mp.js.map} +1 -1
- package/dist/ui/index.html +1 -1
- package/package.json +3 -3
- package/dist/ui/assets/index-ChlKOnbD.js +0 -54
- package/dist/ui/assets/index-ChlKOnbD.js.map +0 -1
package/dist/index.js
CHANGED
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
// src/runtime/studio.ts
|
|
2
2
|
import {
|
|
3
|
-
createHook as
|
|
3
|
+
createHook as createHook2
|
|
4
4
|
} from "@anvia/core/agent";
|
|
5
|
+
import { Message } from "@anvia/core/completion";
|
|
6
|
+
import { Agent } from "@anvia/core/internal/agent";
|
|
7
|
+
import { Pipeline } from "@anvia/core/pipeline";
|
|
8
|
+
import { serve } from "@hono/node-server";
|
|
9
|
+
import { Hono as HonoApp } from "hono";
|
|
5
10
|
|
|
6
11
|
// src/runtime/compact.ts
|
|
7
12
|
function compact(obj) {
|
|
@@ -14,13 +19,6 @@ function compact(obj) {
|
|
|
14
19
|
return result;
|
|
15
20
|
}
|
|
16
21
|
|
|
17
|
-
// src/runtime/studio.ts
|
|
18
|
-
import { Message } from "@anvia/core/completion";
|
|
19
|
-
import { Agent } from "@anvia/core/internal/agent";
|
|
20
|
-
import { Pipeline } from "@anvia/core/pipeline";
|
|
21
|
-
import { serve } from "@hono/node-server";
|
|
22
|
-
import { Hono as HonoApp } from "hono";
|
|
23
|
-
|
|
24
22
|
// src/runtime/json.ts
|
|
25
23
|
function toJsonValue(value) {
|
|
26
24
|
return toJsonValueInternal(value, /* @__PURE__ */ new WeakSet());
|
|
@@ -843,14 +841,6 @@ function escapeHtml(value) {
|
|
|
843
841
|
return value.replaceAll("&", "&").replaceAll('"', """).replaceAll("<", "<").replaceAll(">", ">");
|
|
844
842
|
}
|
|
845
843
|
|
|
846
|
-
// src/runtime/approvals.ts
|
|
847
|
-
import {
|
|
848
|
-
createHook
|
|
849
|
-
} from "@anvia/core/agent";
|
|
850
|
-
import {
|
|
851
|
-
parseToolArgs
|
|
852
|
-
} from "@anvia/core/tool";
|
|
853
|
-
|
|
854
844
|
// src/runtime/type-guards.ts
|
|
855
845
|
function isObject(value) {
|
|
856
846
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
@@ -1040,62 +1030,23 @@ function createApprovalRuntime() {
|
|
|
1040
1030
|
const approvals = /* @__PURE__ */ new Map();
|
|
1041
1031
|
return {
|
|
1042
1032
|
approvals,
|
|
1043
|
-
|
|
1044
|
-
const handleApprovalRequest = async ({ toolName, toolCallId, internalCallId, args, tool: control }, request) => {
|
|
1045
|
-
const decision = await requestApproval(approvals, context, compact({
|
|
1046
|
-
toolName,
|
|
1047
|
-
toolCallId,
|
|
1048
|
-
internalCallId,
|
|
1049
|
-
args,
|
|
1050
|
-
reason: request.reason,
|
|
1051
|
-
rejectMessage: request.rejectMessage
|
|
1052
|
-
}));
|
|
1053
|
-
return decision.approved ? control.run() : control.skip(decision.reason ?? request.rejectMessage ?? "Rejected in Anvia Studio.");
|
|
1054
|
-
};
|
|
1033
|
+
createApprovals(context) {
|
|
1055
1034
|
return {
|
|
1056
|
-
|
|
1057
|
-
|
|
1058
|
-
|
|
1059
|
-
|
|
1060
|
-
|
|
1061
|
-
|
|
1062
|
-
|
|
1063
|
-
|
|
1064
|
-
|
|
1065
|
-
|
|
1066
|
-
|
|
1067
|
-
|
|
1068
|
-
|
|
1069
|
-
|
|
1070
|
-
|
|
1071
|
-
run: compact({
|
|
1072
|
-
agentId: context.agentId,
|
|
1073
|
-
runId: context.runId,
|
|
1074
|
-
sessionId: context.sessionId,
|
|
1075
|
-
metadata: context.metadata
|
|
1076
|
-
})
|
|
1077
|
-
});
|
|
1078
|
-
const required = await approval.when(approvalContext);
|
|
1079
|
-
if (!required) {
|
|
1080
|
-
return control.run();
|
|
1081
|
-
}
|
|
1082
|
-
const reason = await resolveApprovalText(approval.reason, approvalContext);
|
|
1083
|
-
const rejectMessage = await resolveApprovalText(
|
|
1084
|
-
approval.rejectMessage,
|
|
1085
|
-
approvalContext
|
|
1086
|
-
);
|
|
1087
|
-
const decision = await requestApproval(approvals, context, compact({
|
|
1088
|
-
toolName,
|
|
1089
|
-
toolCallId,
|
|
1090
|
-
internalCallId,
|
|
1091
|
-
args,
|
|
1092
|
-
reason,
|
|
1093
|
-
rejectMessage
|
|
1094
|
-
}));
|
|
1095
|
-
return decision.approved ? control.run() : control.skip(decision.reason ?? rejectMessage ?? "Rejected in Anvia Studio.");
|
|
1096
|
-
}
|
|
1097
|
-
}),
|
|
1098
|
-
handleApprovalRequest
|
|
1035
|
+
async handler(request) {
|
|
1036
|
+
const decision = await requestApproval(
|
|
1037
|
+
approvals,
|
|
1038
|
+
context,
|
|
1039
|
+
compact({
|
|
1040
|
+
toolName: request.toolName,
|
|
1041
|
+
toolCallId: request.toolCallId,
|
|
1042
|
+
internalCallId: request.internalCallId,
|
|
1043
|
+
args: request.rawArgs,
|
|
1044
|
+
reason: request.reason,
|
|
1045
|
+
rejectMessage: request.rejectMessage
|
|
1046
|
+
})
|
|
1047
|
+
);
|
|
1048
|
+
return decision.approved ? compact({ approved: true, reason: decision.reason }) : compact({ approved: false, reason: decision.reason });
|
|
1049
|
+
}
|
|
1099
1050
|
};
|
|
1100
1051
|
},
|
|
1101
1052
|
list(options) {
|
|
@@ -1127,13 +1078,19 @@ function createApprovalRuntime() {
|
|
|
1127
1078
|
return "resolved";
|
|
1128
1079
|
}
|
|
1129
1080
|
const reason = decision.approved ? decision.reason : decision.reason ?? approval.rejectMessage ?? "Rejected in Anvia Studio.";
|
|
1130
|
-
const resolved = resolveApproval(
|
|
1081
|
+
const resolved = resolveApproval(
|
|
1082
|
+
approval,
|
|
1083
|
+
decision.approved ? "approved" : "rejected",
|
|
1084
|
+
compact({ reason })
|
|
1085
|
+
);
|
|
1131
1086
|
approvals.set(id, resolved);
|
|
1132
1087
|
approval.emit?.({ type: "tool_approval_result", approval: resolved });
|
|
1133
|
-
approval.resolve(
|
|
1134
|
-
|
|
1135
|
-
|
|
1136
|
-
|
|
1088
|
+
approval.resolve(
|
|
1089
|
+
compact({
|
|
1090
|
+
approved: decision.approved,
|
|
1091
|
+
reason
|
|
1092
|
+
})
|
|
1093
|
+
);
|
|
1137
1094
|
return publicApproval(resolved);
|
|
1138
1095
|
}
|
|
1139
1096
|
};
|
|
@@ -1164,30 +1121,35 @@ async function requestApproval(approvals, context, request) {
|
|
|
1164
1121
|
const current = approvals.get(id);
|
|
1165
1122
|
if (!isPendingApproval(current)) {
|
|
1166
1123
|
if (current !== void 0) {
|
|
1167
|
-
resolve2(
|
|
1168
|
-
|
|
1169
|
-
|
|
1170
|
-
|
|
1124
|
+
resolve2(
|
|
1125
|
+
compact({
|
|
1126
|
+
approved: current.status === "approved",
|
|
1127
|
+
reason: current.reason
|
|
1128
|
+
})
|
|
1129
|
+
);
|
|
1171
1130
|
}
|
|
1172
1131
|
return;
|
|
1173
1132
|
}
|
|
1174
1133
|
const reason = decision2.approved ? decision2.reason : decision2.reason ?? request.rejectMessage ?? "Rejected in Anvia Studio.";
|
|
1175
|
-
const resolved = resolveApproval(
|
|
1134
|
+
const resolved = resolveApproval(
|
|
1135
|
+
current,
|
|
1136
|
+
decision2.approved ? "approved" : "rejected",
|
|
1137
|
+
compact({ reason })
|
|
1138
|
+
);
|
|
1176
1139
|
approvals.set(id, resolved);
|
|
1177
1140
|
context.emit?.({ type: "tool_approval_result", approval: resolved });
|
|
1178
|
-
resolve2(
|
|
1179
|
-
|
|
1180
|
-
|
|
1181
|
-
|
|
1141
|
+
resolve2(
|
|
1142
|
+
compact({
|
|
1143
|
+
approved: decision2.approved,
|
|
1144
|
+
reason
|
|
1145
|
+
})
|
|
1146
|
+
);
|
|
1182
1147
|
};
|
|
1183
1148
|
});
|
|
1184
1149
|
approvals.set(id, approval);
|
|
1185
1150
|
context.emit?.({ type: "tool_approval_request", approval: publicApproval(approval) });
|
|
1186
1151
|
return decision;
|
|
1187
1152
|
}
|
|
1188
|
-
async function resolveApprovalText(value, context) {
|
|
1189
|
-
return typeof value === "function" ? value(context) : value;
|
|
1190
|
-
}
|
|
1191
1153
|
function isPendingApproval(approval) {
|
|
1192
1154
|
return approval !== void 0 && approval.status === "pending" && "resolve" in approval;
|
|
1193
1155
|
}
|
|
@@ -1209,9 +1171,6 @@ function publicApproval(approval) {
|
|
|
1209
1171
|
return rest;
|
|
1210
1172
|
}
|
|
1211
1173
|
|
|
1212
|
-
// src/runtime/evals.ts
|
|
1213
|
-
import { runEvalSuite } from "@anvia/core/evals";
|
|
1214
|
-
|
|
1215
1174
|
// src/runtime/models.ts
|
|
1216
1175
|
var STUDIO_MODEL_METADATA_KEY = "studioModel";
|
|
1217
1176
|
function createStudioModelRegistry(config) {
|
|
@@ -1713,6 +1672,7 @@ function toJsonValue2(value) {
|
|
|
1713
1672
|
}
|
|
1714
1673
|
|
|
1715
1674
|
// src/runtime/evals.ts
|
|
1675
|
+
import { runEvalSuite } from "@anvia/core/evals";
|
|
1716
1676
|
function registerEvalRoutes(app, props) {
|
|
1717
1677
|
app.get(
|
|
1718
1678
|
"/evals",
|
|
@@ -3767,8 +3727,8 @@ function isJsonValue2(value) {
|
|
|
3767
3727
|
}
|
|
3768
3728
|
|
|
3769
3729
|
// src/runtime/questions.ts
|
|
3770
|
-
import { createHook
|
|
3771
|
-
import { parseToolArgs
|
|
3730
|
+
import { createHook } from "@anvia/core/agent";
|
|
3731
|
+
import { parseToolArgs } from "@anvia/core/tool";
|
|
3772
3732
|
function registerQuestionRoutes(app, questions) {
|
|
3773
3733
|
app.get("/questions", (c) => {
|
|
3774
3734
|
const status = parseQuestionStatus(c.req.query("status"));
|
|
@@ -3859,12 +3819,12 @@ function createQuestionRuntime() {
|
|
|
3859
3819
|
return {
|
|
3860
3820
|
questions,
|
|
3861
3821
|
createHook(context) {
|
|
3862
|
-
return
|
|
3822
|
+
return createHook({
|
|
3863
3823
|
async onToolCall({ toolName, toolCallId, internalCallId, args, tool: control }) {
|
|
3864
3824
|
if (toolName !== "ask_question") {
|
|
3865
3825
|
return control.run();
|
|
3866
3826
|
}
|
|
3867
|
-
const prompts = normalizeQuestionPrompts(
|
|
3827
|
+
const prompts = normalizeQuestionPrompts(parseToolArgs(args));
|
|
3868
3828
|
if ("error" in prompts) {
|
|
3869
3829
|
return control.skip(prompts.error);
|
|
3870
3830
|
}
|
|
@@ -5455,18 +5415,17 @@ function createStudioApp(options) {
|
|
|
5455
5415
|
}
|
|
5456
5416
|
if (body.stream === true) {
|
|
5457
5417
|
const runtimeEvents = new AsyncEventQueue();
|
|
5418
|
+
request.approvals(
|
|
5419
|
+
approvalRuntime.createApprovals({
|
|
5420
|
+
runId,
|
|
5421
|
+
agentId,
|
|
5422
|
+
...compact({ sessionId: session?.id }),
|
|
5423
|
+
...compact({ metadata: body.metadata }),
|
|
5424
|
+
emit: (event) => runtimeEvents.push(event)
|
|
5425
|
+
})
|
|
5426
|
+
);
|
|
5458
5427
|
const effectiveHook = composeHooks(
|
|
5459
|
-
|
|
5460
|
-
runAgent.hook,
|
|
5461
|
-
approvalRuntime.createHook({
|
|
5462
|
-
runId,
|
|
5463
|
-
agentId,
|
|
5464
|
-
...compact({ sessionId: session?.id }),
|
|
5465
|
-
...compact({ metadata: body.metadata }),
|
|
5466
|
-
getTool: (toolName) => runAgent.getTool(toolName),
|
|
5467
|
-
emit: (event) => runtimeEvents.push(event)
|
|
5468
|
-
})
|
|
5469
|
-
),
|
|
5428
|
+
runAgent.hook,
|
|
5470
5429
|
questionRuntime.createHook({
|
|
5471
5430
|
runId,
|
|
5472
5431
|
agentId,
|
|
@@ -5501,16 +5460,7 @@ function createStudioApp(options) {
|
|
|
5501
5460
|
await appendSessionLog(sessionStore, memoryLoadedLog(session, runId));
|
|
5502
5461
|
}
|
|
5503
5462
|
const effectiveHook = composeHooks(
|
|
5504
|
-
|
|
5505
|
-
runAgent.hook,
|
|
5506
|
-
approvalRuntime.createHook({
|
|
5507
|
-
runId,
|
|
5508
|
-
agentId,
|
|
5509
|
-
...compact({ sessionId: session?.id }),
|
|
5510
|
-
...compact({ metadata: body.metadata }),
|
|
5511
|
-
getTool: (toolName) => runAgent.getTool(toolName)
|
|
5512
|
-
})
|
|
5513
|
-
),
|
|
5463
|
+
runAgent.hook,
|
|
5514
5464
|
questionRuntime.createHook({
|
|
5515
5465
|
runId,
|
|
5516
5466
|
agentId,
|
|
@@ -5518,6 +5468,14 @@ function createStudioApp(options) {
|
|
|
5518
5468
|
...compact({ metadata: body.metadata })
|
|
5519
5469
|
})
|
|
5520
5470
|
);
|
|
5471
|
+
request.approvals(
|
|
5472
|
+
approvalRuntime.createApprovals({
|
|
5473
|
+
runId,
|
|
5474
|
+
agentId,
|
|
5475
|
+
...compact({ sessionId: session?.id }),
|
|
5476
|
+
...compact({ metadata: body.metadata })
|
|
5477
|
+
})
|
|
5478
|
+
);
|
|
5521
5479
|
if (effectiveHook !== void 0) {
|
|
5522
5480
|
request.requestHook(effectiveHook);
|
|
5523
5481
|
}
|
|
@@ -5667,7 +5625,7 @@ function composeHooks(first, second) {
|
|
|
5667
5625
|
if (second === void 0) {
|
|
5668
5626
|
return first;
|
|
5669
5627
|
}
|
|
5670
|
-
return
|
|
5628
|
+
return createHook2({
|
|
5671
5629
|
async onCompletionCall(args) {
|
|
5672
5630
|
const firstAction = await first.onCompletionCall?.(args);
|
|
5673
5631
|
return firstAction?.type === "terminate" ? firstAction : await second.onCompletionCall?.(args) ?? void 0;
|
|
@@ -5678,12 +5636,9 @@ function composeHooks(first, second) {
|
|
|
5678
5636
|
},
|
|
5679
5637
|
async onToolCall(args) {
|
|
5680
5638
|
const firstAction = await first.onToolCall?.(args);
|
|
5681
|
-
if (firstAction?.type === "skip" || firstAction?.type === "terminate") {
|
|
5639
|
+
if (firstAction?.type === "skip" || firstAction?.type === "terminate" || firstAction?.type === "approval_request") {
|
|
5682
5640
|
return firstAction;
|
|
5683
5641
|
}
|
|
5684
|
-
if (firstAction?.type === "approval_request") {
|
|
5685
|
-
return await approvalRequestHandler(second)?.(args, firstAction) ?? firstAction;
|
|
5686
|
-
}
|
|
5687
5642
|
const secondAction = await second.onToolCall?.(args);
|
|
5688
5643
|
return secondAction ?? firstAction ?? void 0;
|
|
5689
5644
|
},
|
|
@@ -5693,10 +5648,6 @@ function composeHooks(first, second) {
|
|
|
5693
5648
|
}
|
|
5694
5649
|
});
|
|
5695
5650
|
}
|
|
5696
|
-
function approvalRequestHandler(hook) {
|
|
5697
|
-
const candidate = hook;
|
|
5698
|
-
return typeof candidate.handleApprovalRequest === "function" ? candidate.handleApprovalRequest : void 0;
|
|
5699
|
-
}
|
|
5700
5651
|
|
|
5701
5652
|
// src/storage/sqlite-store.ts
|
|
5702
5653
|
import { mkdirSync } from "fs";
|