veryfront 0.1.866 → 0.1.868

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/esm/deno.js CHANGED
@@ -1,6 +1,6 @@
1
1
  export default {
2
2
  "name": "veryfront",
3
- "version": "0.1.866",
3
+ "version": "0.1.868",
4
4
  "license": "Apache-2.0",
5
5
  "nodeModulesDir": "auto",
6
6
  "minimumDependencyAge": {
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/runtime/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/runtime/index.ts"],"names":[],"mappings":"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"}
@@ -649,9 +649,10 @@ export class AgentRuntime {
649
649
  const materialized = materializeStreamedToolCall(tc);
650
650
  if (materialized.kind === "incomplete" && isRecoverablePlaceholderToolCall(tc)) {
651
651
  // Provisional empty-object placeholder that never finalized. The
652
- // model never committed arguments; the loop will recover by
653
- // re-calling the model. Persist the (empty) part for transparent
654
- // history but surface no termination warning or error.
652
+ // model never committed arguments. The assistant message builder
653
+ // omits it when final text exists; otherwise it remains transparent
654
+ // history while the loop recovers by re-calling the model. Surface no
655
+ // termination warning or error.
655
656
  continue;
656
657
  }
657
658
  if (materialized.kind === "incomplete") {
@@ -693,7 +694,7 @@ export class AgentRuntime {
693
694
  ];
694
695
  currentMessages.push({
695
696
  id: `runtime_note_${Date.now()}_${step}`,
696
- role: "system",
697
+ role: "user",
697
698
  parts: [{
698
699
  type: "text",
699
700
  text: `Runtime recovery: ignored unavailable tool call(s): ${unavailableNames.join(", ")}. Continue using only currently available tools: ${runtimeToolNames.join(", ")}.`,
@@ -729,9 +730,10 @@ export class AgentRuntime {
729
730
  throwIfAborted(abortSignal);
730
731
  if (isRecoverablePlaceholderToolCall(tc)) {
731
732
  // Provisional empty-object placeholder that never finalized. The
732
- // model never committed arguments, so we neither execute it nor
733
- // surface a stream-termination error, so the loop continues and the
734
- // next model call recovers the real tool call.
733
+ // model never committed arguments. At this point the continuation
734
+ // gate has confirmed there is no final assistant text, so the loop
735
+ // can continue and let the next model call recover the real tool
736
+ // call without executing or surfacing a stream-termination error.
735
737
  continue;
736
738
  }
737
739
  if (isStreamedToolCallIncomplete(tc)) {
@@ -1 +1 @@
1
- {"version":3,"file":"streamed-assistant-message.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/runtime/streamed-assistant-message.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAe,MAAM,aAAa,CAAC;AACxD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAGhE,MAAM,WAAW,gCAAgC;IAC/C,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,6BAA6B,CAC3C,KAAK,EAAE,IAAI,CAAC,eAAe,EAAE,iBAAiB,GAAG,gBAAgB,GAAG,WAAW,CAAC,EAChF,QAAQ,EAAE,gCAAgC,GACzC,OAAO,CAiCT"}
1
+ {"version":3,"file":"streamed-assistant-message.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/runtime/streamed-assistant-message.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAe,MAAM,aAAa,CAAC;AACxD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAMhE,MAAM,WAAW,gCAAgC;IAC/C,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,6BAA6B,CAC3C,KAAK,EAAE,IAAI,CAAC,eAAe,EAAE,iBAAiB,GAAG,gBAAgB,GAAG,WAAW,CAAC,EAChF,QAAQ,EAAE,gCAAgC,GACzC,OAAO,CAoCT"}
@@ -1,4 +1,4 @@
1
- import { materializeStreamedToolCall } from "./tool-result-continuation.js";
1
+ import { materializeStreamedToolCall, shouldOmitRecoverablePlaceholderToolCall, } from "./tool-result-continuation.js";
2
2
  export function buildStreamedAssistantMessage(state, identity) {
3
3
  const parts = [];
4
4
  for (const reasoningPart of state.reasoningParts) {
@@ -18,6 +18,9 @@ export function buildStreamedAssistantMessage(state, identity) {
18
18
  parts.push({ type: "text", text: state.accumulatedText });
19
19
  }
20
20
  for (const toolCall of state.toolCalls.values()) {
21
+ if (shouldOmitRecoverablePlaceholderToolCall(state, toolCall)) {
22
+ continue;
23
+ }
21
24
  parts.push(materializeStreamedToolCall(toolCall).part);
22
25
  }
23
26
  return {
@@ -8,6 +8,10 @@ export declare function getProviderExecutedToolNames(runtimeTools: RuntimeToolSe
8
8
  export declare function collectFinalStreamToolResults(state: Pick<ChatStreamState, "toolResults">): Map<string, StreamingToolResult>;
9
9
  export declare function collectPersistedToolResults(messages: Message[]): Map<string, ToolResultPart>;
10
10
  export declare function collectGeneratedToolResults(toolResults: RuntimeGenerateToolResult[] | undefined): Map<string, RuntimeGenerateToolResult>;
11
+ export declare function hasSubstantiveAssistantText(text: string | undefined): boolean;
12
+ export declare function isClientRecoverablePlaceholderToolCall(toolCall: Pick<StreamingToolCall, "arguments" | "inputAvailable" | "providerExecuted">): boolean;
13
+ export declare function shouldRecoverPlaceholderToolCall(state: Pick<ChatStreamState, "accumulatedText">, toolCall: Pick<StreamingToolCall, "arguments" | "inputAvailable" | "providerExecuted">): boolean;
14
+ export declare function shouldOmitRecoverablePlaceholderToolCall(state: Pick<ChatStreamState, "accumulatedText">, toolCall: Pick<StreamingToolCall, "arguments" | "inputAvailable" | "providerExecuted">): boolean;
11
15
  export declare function shouldContinueAfterStreamStep(state: Pick<ChatStreamState, "accumulatedText" | "finishReason" | "toolCalls" | "toolResults"> & Partial<Pick<ChatStreamState, "suppressedToolCalls">>): boolean;
12
16
  export declare function captureStreamedToolCallInput(toolCall: Pick<StreamingToolCall, "arguments">): {
13
17
  args: Record<string, unknown>;
@@ -1 +1 @@
1
- {"version":3,"file":"tool-result-continuation.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/runtime/tool-result-continuation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AAElF,OAAO,KAAK,EACV,eAAe,EACf,iBAAiB,EACjB,mBAAmB,EACpB,MAAM,0BAA0B,CAAC;AAGlC,OAAO,KAAK,EAAE,yBAAyB,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAEzF,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAMtE;AAED,wBAAgB,uBAAuB,CACrC,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,OAAO,EACf,gBAAgB,UAAQ,GACvB,OAAO,CAeT;AAED,wBAAgB,sBAAsB,CACpC,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,GACZ,OAAO,CAcT;AAED,wBAAgB,4BAA4B,CAAC,YAAY,EAAE,cAAc,GAAG,SAAS,GAAG,MAAM,EAAE,CAiB/F;AAED,wBAAgB,6BAA6B,CAC3C,KAAK,EAAE,IAAI,CAAC,eAAe,EAAE,aAAa,CAAC,GAC1C,GAAG,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAYlC;AAED,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,OAAO,EAAE,GAClB,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAkB7B;AAED,wBAAgB,2BAA2B,CACzC,WAAW,EAAE,yBAAyB,EAAE,GAAG,SAAS,GACnD,GAAG,CAAC,MAAM,EAAE,yBAAyB,CAAC,CAQxC;AAED,wBAAgB,6BAA6B,CAC3C,KAAK,EACD,IAAI,CAAC,eAAe,EAAE,iBAAiB,GAAG,cAAc,GAAG,WAAW,GAAG,aAAa,CAAC,GACvF,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,qBAAqB,CAAC,CAAC,GACxD,OAAO,CAqET;AAED,wBAAgB,4BAA4B,CAC1C,QAAQ,EAAE,IAAI,CAAC,iBAAiB,EAAE,WAAW,CAAC,GAC7C;IACD,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAOA;AAED,wBAAgB,4BAA4B,CAC1C,QAAQ,EAAE,IAAI,CAAC,iBAAiB,EAAE,gBAAgB,CAAC,GAClD,OAAO,CAET;AAED,wBAAgB,gCAAgC,CAC9C,QAAQ,EAAE,IAAI,CAAC,iBAAiB,EAAE,gBAAgB,GAAG,WAAW,CAAC,GAChE,OAAO,CAMT;AAED,MAAM,MAAM,+BAA+B,GACvC;IAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAA;CAAE,GACzD;IACA,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAC7B,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B,GACC;IACA,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,QAAQ,CAAC,sBAAsB,EAAE,MAAM,CAAC;IACxC,QAAQ,CAAC,uBAAuB,EAAE,MAAM,CAAC;CAC1C,CAAC;AAEJ,wBAAgB,2BAA2B,CACzC,EAAE,EAAE,iBAAiB,GACpB,+BAA+B,CAoCjC;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,IAAI,cAAc,CAE1E"}
1
+ {"version":3,"file":"tool-result-continuation.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/runtime/tool-result-continuation.ts"],"names":[],"mappings":"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"}
@@ -84,7 +84,22 @@ export function collectGeneratedToolResults(toolResults) {
84
84
  }
85
85
  return generatedToolResults;
86
86
  }
87
+ export function hasSubstantiveAssistantText(text) {
88
+ return typeof text === "string" && text.trim().length > 0;
89
+ }
90
+ export function isClientRecoverablePlaceholderToolCall(toolCall) {
91
+ return toolCall.providerExecuted !== true && isRecoverablePlaceholderToolCall(toolCall);
92
+ }
93
+ export function shouldRecoverPlaceholderToolCall(state, toolCall) {
94
+ return !hasSubstantiveAssistantText(state.accumulatedText) &&
95
+ isClientRecoverablePlaceholderToolCall(toolCall);
96
+ }
97
+ export function shouldOmitRecoverablePlaceholderToolCall(state, toolCall) {
98
+ return hasSubstantiveAssistantText(state.accumulatedText) &&
99
+ isClientRecoverablePlaceholderToolCall(toolCall);
100
+ }
87
101
  export function shouldContinueAfterStreamStep(state) {
102
+ const hasAssistantText = hasSubstantiveAssistantText(state.accumulatedText);
88
103
  if (!state.toolCalls.size) {
89
104
  return state.finishReason === "tool-calls" && Boolean(state.suppressedToolCalls?.length);
90
105
  }
@@ -94,11 +109,12 @@ export function shouldContinueAfterStreamStep(state) {
94
109
  const hasProviderExecutedToolCall = streamedToolCalls.some((toolCall) => toolCall.providerExecuted === true);
95
110
  // A non-finalized call whose only accumulated arguments are a bare
96
111
  // empty-object placeholder is provisional streamed input the model never
97
- // committed. The runtime can recover by re-calling the model, so it must not
98
- // block continuation like a truncated partial-JSON call does.
112
+ // committed. The runtime can recover by re-calling the model only before the
113
+ // assistant has produced final text, so it must not block earlier
114
+ // continuation like a truncated partial-JSON call does.
99
115
  const hasIncompleteDeadToolCall = streamedToolCalls.some((toolCall) => isStreamedToolCallIncomplete(toolCall) &&
100
116
  !isRecoverablePlaceholderToolCall(toolCall));
101
- const hasRecoverablePlaceholderToolCall = streamedToolCalls.some(isRecoverablePlaceholderToolCall);
117
+ const hasRecoverablePlaceholderToolCall = streamedToolCalls.some((toolCall) => shouldRecoverPlaceholderToolCall(state, toolCall));
102
118
  if (state.finishReason === "tool-calls") {
103
119
  if (hasIncompleteDeadToolCall) {
104
120
  return false;
@@ -114,7 +130,7 @@ export function shouldContinueAfterStreamStep(state) {
114
130
  if (state.finishReason !== "stop") {
115
131
  return false;
116
132
  }
117
- if (state.accumulatedText.trim().length > 0) {
133
+ if (hasAssistantText) {
118
134
  return false;
119
135
  }
120
136
  const finalToolResults = collectFinalStreamToolResults(state);
@@ -1 +1 @@
1
- {"version":3,"file":"provider-errors.d.ts","sourceRoot":"","sources":["../../../src/src/chat/provider-errors.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AA8BD,4CAA4C;AAC5C,MAAM,MAAM,mBAAmB,GAAG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,KAAK,CAAA;CAAE,CAAC;AAE7F,0CAA0C;AAC1C,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,mBAAmB,CAMhE;AAgBD,iCAAiC;AACjC,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,OAAO,GAAG,mBAAmB,GAAG,IAAI,CA+B/E;AAED,yCAAyC;AACzC,wBAAgB,oBAAoB,CAAC,iBAAiB,EAAE,MAAM,GAAG,OAAO,CAOvE;AA2FD,sCAAsC;AACtC,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,mBAAmB,CAEtE"}
1
+ {"version":3,"file":"provider-errors.d.ts","sourceRoot":"","sources":["../../../src/src/chat/provider-errors.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AA8BD,4CAA4C;AAC5C,MAAM,MAAM,mBAAmB,GAAG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,KAAK,CAAA;CAAE,CAAC;AAE7F,0CAA0C;AAC1C,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,mBAAmB,CAMhE;AAgBD,iCAAiC;AACjC,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,OAAO,GAAG,mBAAmB,GAAG,IAAI,CA+B/E;AAED,yCAAyC;AACzC,wBAAgB,oBAAoB,CAAC,iBAAiB,EAAE,MAAM,GAAG,OAAO,CAOvE;AA+GD,sCAAsC;AACtC,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,mBAAmB,CAEtE"}
@@ -73,7 +73,18 @@ export function isCreditLimitMessage(normalizedMessage) {
73
73
  normalizedMessage.includes("insufficient-credits") ||
74
74
  normalizedMessage.includes("payment required"));
75
75
  }
76
- function parseKnownProviderBody(body) {
76
+ function isAssistantPrefillUnsupportedMessage(message) {
77
+ const normalizedMessage = message.toLowerCase();
78
+ const mentionsAssistantPrefill = normalizedMessage.includes("assistant message prefill") ||
79
+ normalizedMessage.includes("assistant-message prefill") ||
80
+ (normalizedMessage.includes("assistant") &&
81
+ normalizedMessage.includes("prefill"));
82
+ const rejectsAssistantPrefill = normalizedMessage.includes("does not support") ||
83
+ normalizedMessage.includes("unsupported") ||
84
+ normalizedMessage.includes("conversation must end with a user message");
85
+ return mentionsAssistantPrefill && rejectsAssistantPrefill;
86
+ }
87
+ function parseKnownProviderBody(body, seen = new WeakSet()) {
77
88
  const problemMatch = parseKnownProblemBody(body);
78
89
  if (problemMatch) {
79
90
  return problemMatch;
@@ -81,8 +92,15 @@ function parseKnownProviderBody(body) {
81
92
  if (!isErrorRecord(body)) {
82
93
  return null;
83
94
  }
84
- if (body.type === "error" && isErrorRecord(body.error)) {
85
- return parseKnownProviderBody(body.error);
95
+ if (seen.has(body)) {
96
+ return null;
97
+ }
98
+ seen.add(body);
99
+ if (isErrorRecord(body.error)) {
100
+ const nestedError = parseKnownProviderBody(body.error, seen);
101
+ if (nestedError) {
102
+ return nestedError;
103
+ }
86
104
  }
87
105
  if (body.type === "overloaded_error") {
88
106
  return {
@@ -109,13 +127,13 @@ function parseKnownProviderBody(body) {
109
127
  : DEFAULT_EXTERNAL_SERVICE_ERROR.message,
110
128
  };
111
129
  }
112
- if (body.type === "invalid_request_error" && typeof body.message === "string" &&
113
- body.message.includes("too long")) {
114
- return { code: "CONTEXT_LENGTH_EXCEEDED", message: "Conversation is too long" };
115
- }
116
- if (body.type === "invalid_request_error" && typeof body.message === "string" &&
117
- body.message.toLowerCase().includes("does not support assistant message prefill")) {
118
- return MODEL_UNSUPPORTED_ASSISTANT_PREFILL_ERROR;
130
+ if (body.type === "invalid_request_error" && typeof body.message === "string") {
131
+ if (isAssistantPrefillUnsupportedMessage(body.message)) {
132
+ return MODEL_UNSUPPORTED_ASSISTANT_PREFILL_ERROR;
133
+ }
134
+ if (body.message.includes("too long")) {
135
+ return { code: "CONTEXT_LENGTH_EXCEEDED", message: "Conversation is too long" };
136
+ }
119
137
  }
120
138
  return null;
121
139
  }
@@ -190,6 +208,9 @@ function parseProviderErrorInner(error, seen) {
190
208
  return parsedEmbeddedMessageError;
191
209
  }
192
210
  const normalizedMessage = message.toLowerCase();
211
+ if (isAssistantPrefillUnsupportedMessage(message)) {
212
+ return MODEL_UNSUPPORTED_ASSISTANT_PREFILL_ERROR;
213
+ }
193
214
  if (isCreditLimitMessage(normalizedMessage)) {
194
215
  return { code: "INSUFFICIENT_CREDITS", message: "Insufficient AI credits", status: 402 };
195
216
  }
@@ -1 +1 @@
1
- {"version":3,"file":"project-scoped-remote-tools.d.ts","sourceRoot":"","sources":["../../../src/src/tool/project-scoped-remote-tools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"project-scoped-remote-tools.d.ts","sourceRoot":"","sources":["../../../src/src/tool/project-scoped-remote-tools.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAEzF,sDAAsD;AACtD,MAAM,MAAM,8BAA8B,GAAG;IAC3C,0BAA0B,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAChD,CAAC;AAEF,6EAA6E;AAC7E,MAAM,MAAM,uCAAuC,GAC/C,MAAM,GACN,IAAI,GACJ,SAAS,GACT,CAAC,MAAM,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;AAEtC,8DAA8D;AAC9D,MAAM,MAAM,qCAAqC,GAAG;IAClD,MAAM,EAAE,gBAAgB,CAAC;IACzB,gBAAgB,CAAC,EAAE,uCAAuC,CAAC;IAC3D,gBAAgB,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;IAC9C,8BAA8B,CAAC,EAAE,8BAA8B,CAAC;IAChE,qBAAqB,CAAC,EAAE,CAAC,KAAK,EAAE;QAC9B,MAAM,EAAE,gBAAgB,CAAC;QACzB,eAAe,EAAE,SAAS,cAAc,EAAE,CAAC;QAC3C,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;QAC/B,OAAO,CAAC,EAAE,oBAAoB,CAAC;KAChC,KAAK,OAAO,CAAC,cAAc,EAAE,CAAC,GAAG,cAAc,EAAE,CAAC;CACpD,CAAC;AAEF,sEAAsE;AACtE,MAAM,MAAM,kCAAkC,GAAG;IAC/C,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,eAAe,EAAE,cAAc,EAAE,CAAC;CACnC,CAAC;AAEF,8DAA8D;AAC9D,MAAM,MAAM,qCAAqC,GAAG;IAClD,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,OAAO,CAAC,EAAE,oBAAoB,CAAC;CAChC,CAAC;AAEF,oEAAoE;AACpE,MAAM,MAAM,gCAAgC,GAAG,kCAAkC,GAAG;IAClF,cAAc,EAAE,cAAc,GAAG,SAAS,CAAC;IAC3C,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,cAAc,EAAE,oBAAoB,GAAG,SAAS,CAAC;CAClD,CAAC;AAEF,kEAAkE;AAClE,MAAM,MAAM,8BAA8B,GAAG;IAC3C,EAAE,EAAE,MAAM,CAAC;IACX,yBAAyB,CACvB,OAAO,CAAC,EAAE,oBAAoB,GAC7B,OAAO,CAAC,kCAAkC,CAAC,CAAC;IAC/C,SAAS,CAAC,OAAO,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;IACrE,gBAAgB,CACd,KAAK,EAAE,qCAAqC,GAC3C,OAAO,CAAC,gCAAgC,CAAC,CAAC;CAC9C,CAAC;AAEF,gEAAgE;AAChE,MAAM,MAAM,sCAAsC,GAAG;IACnD,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,OAAO,CAAC,EAAE,oBAAoB,CAAC;IAC/B,8BAA8B,CAAC,EAAE,8BAA8B,CAAC;CACjE,CAAC;AA8EF,gEAAgE;AAChE,wBAAgB,6BAA6B,CAC3C,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,8BAAmC,GAC3C,OAAO,CAMT;AAED,mDAAmD;AACnD,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,MAAM,EAChB,gBAAgB,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,IAAI,GAAG,SAAS,GACvD,OAAO,CAET;AAED,qDAAqD;AACrD,wBAAgB,wCAAwC,CACtD,eAAe,EAAE,SAAS,cAAc,EAAE,EAC1C,SAAS,EAAE,MAAM,GAAG,IAAI,EACxB,OAAO,GAAE,8BAAmC,GAC3C,cAAc,EAAE,CAQlB;AAED,4DAA4D;AAC5D,wBAAgB,mCAAmC,CAAC,KAAK,EAAE;IACzD,cAAc,EAAE,cAAc,GAAG,SAAS,CAAC;IAC3C,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAgB1B;AAED,sDAAsD;AACtD,wBAAgB,uCAAuC,CACrD,OAAO,EAAE,oBAAoB,GAAG,SAAS,EACzC,gBAAgB,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAC1C,MAAM,GAAG,IAAI,CAMf;AA6BD,iDAAiD;AACjD,wBAAgB,oCAAoC,CAClD,KAAK,EAAE,qCAAqC,GAC3C,8BAA8B,CAoFhC;AAED,6CAA6C;AAC7C,wBAAsB,gCAAgC,CACpD,aAAa,EAAE,SAAS,gBAAgB,EAAE,EAC1C,OAAO,EAAE,sCAAsC,GAC9C,OAAO,CAAC,MAAM,EAAE,CAAC,CAgBnB"}
@@ -14,11 +14,26 @@ function requiresActiveProject(toolDefinition, options) {
14
14
  if (isProjectNavigationRemoteTool(toolDefinition.name, options)) {
15
15
  return false;
16
16
  }
17
- return getRequiredToolProperties(toolDefinition).some((property) => property === "project_reference" || property === "project_id");
17
+ if (acceptsProjectReference(toolDefinition)) {
18
+ return true;
19
+ }
20
+ return getRequiredToolProperties(toolDefinition).includes("project_id");
18
21
  }
19
22
  function requiresProjectReference(toolDefinition) {
20
23
  return getRequiredToolProperties(toolDefinition).includes("project_reference");
21
24
  }
25
+ function hasToolProperty(toolDefinition, property) {
26
+ if (typeof toolDefinition.parameters !== "object" || toolDefinition.parameters === null) {
27
+ return false;
28
+ }
29
+ const properties = Reflect.get(toolDefinition.parameters, "properties");
30
+ return typeof properties === "object" && properties !== null &&
31
+ Object.prototype.hasOwnProperty.call(properties, property);
32
+ }
33
+ function acceptsProjectReference(toolDefinition) {
34
+ return requiresProjectReference(toolDefinition) ||
35
+ hasToolProperty(toolDefinition, "project_reference");
36
+ }
22
37
  function isMissingRequiredToolInput(value) {
23
38
  return value === undefined || value === null ||
24
39
  (typeof value === "string" && value.trim().length === 0);
@@ -54,7 +69,7 @@ export function filterProjectScopedRemoteToolDefinitions(toolDefinitions, projec
54
69
  /** Input payload for hydrate project scoped remote tool. */
55
70
  export function hydrateProjectScopedRemoteToolInput(input) {
56
71
  if (!input.toolDefinition || !input.activeProjectId ||
57
- !requiresProjectReference(input.toolDefinition)) {
72
+ !acceptsProjectReference(input.toolDefinition)) {
58
73
  return input.toolInput;
59
74
  }
60
75
  if (input.toolInput.project_reference) {
@@ -1,3 +1,3 @@
1
1
  /** Shared version value. */
2
- export declare const VERSION = "0.1.866";
2
+ export declare const VERSION = "0.1.868";
3
3
  //# sourceMappingURL=version-constant.d.ts.map
@@ -1,4 +1,4 @@
1
1
  // Keep in sync with deno.json version.
2
2
  // scripts/release.ts updates this constant during releases.
3
3
  /** Shared version value. */
4
- export const VERSION = "0.1.866";
4
+ export const VERSION = "0.1.868";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "veryfront",
3
- "version": "0.1.866",
3
+ "version": "0.1.868",
4
4
  "description": "The simplest way to build AI-powered apps",
5
5
  "keywords": [
6
6
  "react",