@anvia/studio 0.6.1 → 0.7.1

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.
Files changed (36) hide show
  1. package/dist/index.js +76 -125
  2. package/dist/index.js.map +1 -1
  3. package/dist/ui/assets/{ArrowClockwise.es-BA79KX3F.js → ArrowClockwise.es-CdkDSmVV.js} +2 -2
  4. package/dist/ui/assets/{ArrowClockwise.es-BA79KX3F.js.map → ArrowClockwise.es-CdkDSmVV.js.map} +1 -1
  5. package/dist/ui/assets/{Path.es-DTZ3zsLn.js → Path.es-CAqZdUXu.js} +2 -2
  6. package/dist/ui/assets/{Path.es-DTZ3zsLn.js.map → Path.es-CAqZdUXu.js.map} +1 -1
  7. package/dist/ui/assets/{Play.es-CJTRfv9R.js → Play.es-D9AQgyVC.js} +2 -2
  8. package/dist/ui/assets/{Play.es-CJTRfv9R.js.map → Play.es-D9AQgyVC.js.map} +1 -1
  9. package/dist/ui/assets/{evals-page-rS-P7eLF.js → evals-page-GEsRKWxr.js} +2 -2
  10. package/dist/ui/assets/{evals-page-rS-P7eLF.js.map → evals-page-GEsRKWxr.js.map} +1 -1
  11. package/dist/ui/assets/index-DW3P6_Qc.js +54 -0
  12. package/dist/ui/assets/index-DW3P6_Qc.js.map +1 -0
  13. package/dist/ui/assets/{knowledge-page-CR0JUneq.js → knowledge-page-CQJNZ8fA.js} +2 -2
  14. package/dist/ui/assets/{knowledge-page-CR0JUneq.js.map → knowledge-page-CQJNZ8fA.js.map} +1 -1
  15. package/dist/ui/assets/{mcps-page-D3P0UAWf.js → mcps-page-BRCLJmEX.js} +2 -2
  16. package/dist/ui/assets/{mcps-page-D3P0UAWf.js.map → mcps-page-BRCLJmEX.js.map} +1 -1
  17. package/dist/ui/assets/{memory-page-kVDqOAOd.js → memory-page-DsITtAok.js} +2 -2
  18. package/dist/ui/assets/{memory-page-kVDqOAOd.js.map → memory-page-DsITtAok.js.map} +1 -1
  19. package/dist/ui/assets/{pipelines-page-lMfsVNRy.js → pipelines-page-vBUhZ5x2.js} +2 -2
  20. package/dist/ui/assets/{pipelines-page-lMfsVNRy.js.map → pipelines-page-vBUhZ5x2.js.map} +1 -1
  21. package/dist/ui/assets/{renderers-Bc89UGTN.js → renderers-hYnJAoYZ.js} +2 -2
  22. package/dist/ui/assets/{renderers-Bc89UGTN.js.map → renderers-hYnJAoYZ.js.map} +1 -1
  23. package/dist/ui/assets/{sessions-page-CVlkRPfT.js → sessions-page-BYhPHSQS.js} +2 -2
  24. package/dist/ui/assets/{sessions-page-CVlkRPfT.js.map → sessions-page-BYhPHSQS.js.map} +1 -1
  25. package/dist/ui/assets/{status-page-XKvTGruQ.js → status-page-B16drVrZ.js} +2 -2
  26. package/dist/ui/assets/{status-page-XKvTGruQ.js.map → status-page-B16drVrZ.js.map} +1 -1
  27. package/dist/ui/assets/{tools-page-DJt_QdDe.js → tools-page-DwgbeCMm.js} +2 -2
  28. package/dist/ui/assets/{tools-page-DJt_QdDe.js.map → tools-page-DwgbeCMm.js.map} +1 -1
  29. package/dist/ui/assets/{trace-browser-BBITQELO.js → trace-browser-DLB0mURK.js} +2 -2
  30. package/dist/ui/assets/{trace-browser-BBITQELO.js.map → trace-browser-DLB0mURK.js.map} +1 -1
  31. package/dist/ui/assets/{transcript-item-BvaA1PBu.js → transcript-item-DM71m6Mp.js} +2 -2
  32. package/dist/ui/assets/{transcript-item-BvaA1PBu.js.map → transcript-item-DM71m6Mp.js.map} +1 -1
  33. package/dist/ui/index.html +1 -1
  34. package/package.json +8 -5
  35. package/dist/ui/assets/index-ChlKOnbD.js +0 -54
  36. 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 createHook3
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("&", "&amp;").replaceAll('"', "&quot;").replaceAll("<", "&lt;").replaceAll(">", "&gt;");
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
- createHook(context) {
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
- ...createHook({
1057
- async onToolCall({ toolName, toolCallId, internalCallId, args, tool: control }) {
1058
- const registeredTool = context.getTool(toolName);
1059
- if (registeredTool?.approval === void 0) {
1060
- return control.run();
1061
- }
1062
- const approval = registeredTool.approval;
1063
- const rawParsedArgs = parseToolArgs(args);
1064
- const parsedArgs = registeredTool.parseApprovalArgs?.(rawParsedArgs) ?? rawParsedArgs;
1065
- const approvalContext = compact({
1066
- toolName,
1067
- args: parsedArgs,
1068
- rawArgs: args,
1069
- toolCallId,
1070
- internalCallId,
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(approval, decision.approved ? "approved" : "rejected", compact({ reason }));
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(compact({
1134
- approved: decision.approved,
1135
- reason
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(compact({
1168
- approved: current.status === "approved",
1169
- reason: current.reason
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(current, decision2.approved ? "approved" : "rejected", compact({ reason }));
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(compact({
1179
- approved: decision2.approved,
1180
- reason
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 as createHook2 } from "@anvia/core/agent";
3771
- import { parseToolArgs as parseToolArgs2 } from "@anvia/core/tool";
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 createHook2({
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(parseToolArgs2(args));
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
- composeHooks(
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
- composeHooks(
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 createHook3({
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";