@agent-native/core 0.51.7 → 0.51.8

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.
@@ -1 +1 @@
1
- {"version":3,"file":"assistant-ui-recovery.d.ts","sourceRoot":"","sources":["../../src/client/assistant-ui-recovery.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,KAAK,+BAA+B,GAChC,kCAAkC,GAClC,qCAAqC,GACrC,kCAAkC,CAAC;AAEvC,wBAAgB,qCAAqC,CACnD,KAAK,EAAE,OAAO,GACb,+BAA+B,GAAG,IAAI,CAcxC;AAED,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAKpE;AAED,wBAAgB,mCAAmC,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAE3E;AAED,KAAK,uCAAuC,GAAG;IAC7C,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B,CAAC;AAEF,KAAK,uCAAuC,GAAG;IAC7C,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE;QACR,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,EAAE,MAAM,CAAC;KACpB,GAAG,IAAI,CAAC;CACV,CAAC;AAIF,qBAAa,kCAAmC,SAAQ,KAAK,CAAC,SAAS,CACrE,uCAAuC,EACvC,uCAAuC,CACxC;IACC,KAAK,EAAE,uCAAuC,CAI5C;IAEF,OAAO,CAAC,UAAU,CAA8C;IAEhE,OAAO,CAAC,iBAAiB;IASzB,MAAM,CAAC,wBAAwB,CAC7B,KAAK,EAAE,OAAO,GACb,OAAO,CAAC,uCAAuC,CAAC;IAMnD,iBAAiB,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,SAAS;IAsCvD,kBAAkB,CAChB,SAAS,EAAE,uCAAuC,EAClD,SAAS,EAAE,uCAAuC;IA2BpD,oBAAoB;IAMpB,MAAM;CAoBP;AAED,wBAAgB,iCAAiC,CAAC,EAChD,QAAQ,EACR,QAAQ,GACT,EAAE;IACD,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B,2CASA"}
1
+ {"version":3,"file":"assistant-ui-recovery.d.ts","sourceRoot":"","sources":["../../src/client/assistant-ui-recovery.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,KAAK,+BAA+B,GAChC,kCAAkC,GAClC,qCAAqC,GACrC,kCAAkC,CAAC;AAEvC,wBAAgB,qCAAqC,CACnD,KAAK,EAAE,OAAO,GACb,+BAA+B,GAAG,IAAI,CAcxC;AAED,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAKpE;AAED,wBAAgB,mCAAmC,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAE3E;AAED,KAAK,uCAAuC,GAAG;IAC7C,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B,CAAC;AAEF,KAAK,uCAAuC,GAAG;IAC7C,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE;QACR,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,EAAE,MAAM,CAAC;KACpB,GAAG,IAAI,CAAC;CACV,CAAC;AAIF,qBAAa,kCAAmC,SAAQ,KAAK,CAAC,SAAS,CACrE,uCAAuC,EACvC,uCAAuC,CACxC;IACC,KAAK,EAAE,uCAAuC,CAI5C;IAEF,OAAO,CAAC,UAAU,CAA8C;IAEhE,OAAO,CAAC,iBAAiB;IASzB,MAAM,CAAC,wBAAwB,CAC7B,KAAK,EAAE,OAAO,GACb,OAAO,CAAC,uCAAuC,CAAC;IAMnD,iBAAiB,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,SAAS;IA0CvD,kBAAkB,CAChB,SAAS,EAAE,uCAAuC,EAClD,SAAS,EAAE,uCAAuC;IA2BpD,oBAAoB;IAMpB,MAAM;CAoBP;AAED,wBAAgB,iCAAiC,CAAC,EAChD,QAAQ,EACR,QAAQ,GACT,EAAE;IACD,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B,2CASA"}
@@ -46,21 +46,24 @@ export class AssistantUiStaleIndexErrorBoundary extends React.Component {
46
46
  const retryCount = this.state.recovery?.signature === signature
47
47
  ? this.state.recovery.retryCount + 1
48
48
  : 1;
49
- captureError(error, {
50
- tags: {
51
- component: this.props.componentName ?? "AssistantChat",
52
- recoverable,
53
- },
54
- extra: {
55
- resetKey: this.props.resetKey,
56
- retryCount,
57
- componentStack: info.componentStack,
58
- },
59
- });
49
+ const retryBudgetExceeded = retryCount > MAX_ASSISTANT_UI_RECOVERABLE_RETRIES;
50
+ if (retryBudgetExceeded) {
51
+ captureError(error, {
52
+ tags: {
53
+ component: this.props.componentName ?? "AssistantChat",
54
+ recoverable,
55
+ },
56
+ extra: {
57
+ resetKey: this.props.resetKey,
58
+ retryCount,
59
+ componentStack: info.componentStack,
60
+ },
61
+ });
62
+ }
60
63
  this.setState({
61
64
  recovery: { signature, retryCount },
62
65
  });
63
- if (retryCount > MAX_ASSISTANT_UI_RECOVERABLE_RETRIES)
66
+ if (retryBudgetExceeded)
64
67
  return;
65
68
  if (this.retryTimer)
66
69
  return;
@@ -1 +1 @@
1
- {"version":3,"file":"assistant-ui-recovery.js","sourceRoot":"","sources":["../../src/client/assistant-ui-recovery.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from \"react\";\n\nimport { captureError } from \"./analytics.js\";\n\ntype AssistantUiRecoverableErrorKind =\n | \"assistant-ui-stale-message-index\"\n | \"assistant-ui-duplicate-resource-key\"\n | \"assistant-ui-react-fiber-unmount\";\n\nexport function assistantUiRecoverableRenderErrorKind(\n error: unknown,\n): AssistantUiRecoverableErrorKind | null {\n const message = error instanceof Error ? error.message : String(error ?? \"\");\n if (\n /^tapClientLookup: Index \\d+ out of bounds \\(length: \\d+\\)$/.test(message)\n ) {\n return \"assistant-ui-stale-message-index\";\n }\n if (/^Duplicate key .+ in tapResources$/.test(message)) {\n return \"assistant-ui-duplicate-resource-key\";\n }\n if (/^Tried to unmount a fiber that is already unmounted\\b/.test(message)) {\n return \"assistant-ui-react-fiber-unmount\";\n }\n return null;\n}\n\nexport function isAssistantUiStaleIndexError(error: unknown): boolean {\n return (\n assistantUiRecoverableRenderErrorKind(error) ===\n \"assistant-ui-stale-message-index\"\n );\n}\n\nexport function isAssistantUiRecoverableRenderError(error: unknown): boolean {\n return assistantUiRecoverableRenderErrorKind(error) !== null;\n}\n\ntype AssistantUiStaleIndexErrorBoundaryProps = {\n resetKey: string;\n componentName?: string;\n children: React.ReactNode;\n};\n\ntype AssistantUiStaleIndexErrorBoundaryState = {\n error: Error | null;\n retryToken: number;\n recovery: {\n signature: string;\n retryCount: number;\n } | null;\n};\n\nconst MAX_ASSISTANT_UI_RECOVERABLE_RETRIES = 2;\n\nexport class AssistantUiStaleIndexErrorBoundary extends React.Component<\n AssistantUiStaleIndexErrorBoundaryProps,\n AssistantUiStaleIndexErrorBoundaryState\n> {\n state: AssistantUiStaleIndexErrorBoundaryState = {\n error: null,\n retryToken: 0,\n recovery: null,\n };\n\n private retryTimer: ReturnType<typeof setTimeout> | null = null;\n\n private recoverySignature(\n kind: AssistantUiRecoverableErrorKind,\n error: unknown,\n ): string {\n const message =\n error instanceof Error ? error.message : String(error ?? \"\");\n return `${this.props.resetKey}:${kind}:${message}`;\n }\n\n static getDerivedStateFromError(\n error: unknown,\n ): Partial<AssistantUiStaleIndexErrorBoundaryState> {\n return {\n error: error instanceof Error ? error : new Error(String(error ?? \"\")),\n };\n }\n\n componentDidCatch(error: unknown, info: React.ErrorInfo) {\n const recoverable = assistantUiRecoverableRenderErrorKind(error);\n if (!recoverable) return;\n const signature = this.recoverySignature(recoverable, error);\n const retryCount =\n this.state.recovery?.signature === signature\n ? this.state.recovery.retryCount + 1\n : 1;\n\n captureError(error, {\n tags: {\n component: this.props.componentName ?? \"AssistantChat\",\n recoverable,\n },\n extra: {\n resetKey: this.props.resetKey,\n retryCount,\n componentStack: info.componentStack,\n },\n });\n\n this.setState({\n recovery: { signature, retryCount },\n });\n if (retryCount > MAX_ASSISTANT_UI_RECOVERABLE_RETRIES) return;\n\n if (this.retryTimer) return;\n this.retryTimer = setTimeout(() => {\n this.retryTimer = null;\n this.setState((state) => {\n if (!state.error || !isAssistantUiRecoverableRenderError(state.error)) {\n return null;\n }\n return { error: null, retryToken: state.retryToken + 1 };\n });\n }, 0);\n }\n\n componentDidUpdate(\n prevProps: AssistantUiStaleIndexErrorBoundaryProps,\n prevState: AssistantUiStaleIndexErrorBoundaryState,\n ) {\n if (prevProps.resetKey !== this.props.resetKey) {\n if (this.retryTimer) {\n clearTimeout(this.retryTimer);\n this.retryTimer = null;\n }\n if (\n this.state.error &&\n isAssistantUiRecoverableRenderError(this.state.error)\n ) {\n this.setState((state) => ({\n error: null,\n retryToken: state.retryToken + 1,\n recovery: null,\n }));\n } else if (this.state.recovery) {\n this.setState({ recovery: null });\n }\n return;\n }\n\n if (prevState.error && !this.state.error && this.state.recovery) {\n this.setState({ recovery: null });\n }\n }\n\n componentWillUnmount() {\n if (this.retryTimer) {\n clearTimeout(this.retryTimer);\n }\n }\n\n render() {\n if (this.state.error) {\n if (!isAssistantUiRecoverableRenderError(this.state.error)) {\n throw this.state.error;\n }\n if (\n this.state.recovery &&\n this.state.recovery.retryCount > MAX_ASSISTANT_UI_RECOVERABLE_RETRIES\n ) {\n throw this.state.error;\n }\n return null;\n }\n\n return (\n <React.Fragment key={`${this.props.resetKey}:${this.state.retryToken}`}>\n {this.props.children}\n </React.Fragment>\n );\n }\n}\n\nexport function AssistantMessageListErrorBoundary({\n resetKey,\n children,\n}: {\n resetKey: string;\n children: React.ReactNode;\n}) {\n return (\n <AssistantUiStaleIndexErrorBoundary\n resetKey={resetKey}\n componentName=\"AssistantMessageList\"\n >\n {children}\n </AssistantUiStaleIndexErrorBoundary>\n );\n}\n"]}
1
+ {"version":3,"file":"assistant-ui-recovery.js","sourceRoot":"","sources":["../../src/client/assistant-ui-recovery.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from \"react\";\n\nimport { captureError } from \"./analytics.js\";\n\ntype AssistantUiRecoverableErrorKind =\n | \"assistant-ui-stale-message-index\"\n | \"assistant-ui-duplicate-resource-key\"\n | \"assistant-ui-react-fiber-unmount\";\n\nexport function assistantUiRecoverableRenderErrorKind(\n error: unknown,\n): AssistantUiRecoverableErrorKind | null {\n const message = error instanceof Error ? error.message : String(error ?? \"\");\n if (\n /^tapClientLookup: Index \\d+ out of bounds \\(length: \\d+\\)$/.test(message)\n ) {\n return \"assistant-ui-stale-message-index\";\n }\n if (/^Duplicate key .+ in tapResources$/.test(message)) {\n return \"assistant-ui-duplicate-resource-key\";\n }\n if (/^Tried to unmount a fiber that is already unmounted\\b/.test(message)) {\n return \"assistant-ui-react-fiber-unmount\";\n }\n return null;\n}\n\nexport function isAssistantUiStaleIndexError(error: unknown): boolean {\n return (\n assistantUiRecoverableRenderErrorKind(error) ===\n \"assistant-ui-stale-message-index\"\n );\n}\n\nexport function isAssistantUiRecoverableRenderError(error: unknown): boolean {\n return assistantUiRecoverableRenderErrorKind(error) !== null;\n}\n\ntype AssistantUiStaleIndexErrorBoundaryProps = {\n resetKey: string;\n componentName?: string;\n children: React.ReactNode;\n};\n\ntype AssistantUiStaleIndexErrorBoundaryState = {\n error: Error | null;\n retryToken: number;\n recovery: {\n signature: string;\n retryCount: number;\n } | null;\n};\n\nconst MAX_ASSISTANT_UI_RECOVERABLE_RETRIES = 2;\n\nexport class AssistantUiStaleIndexErrorBoundary extends React.Component<\n AssistantUiStaleIndexErrorBoundaryProps,\n AssistantUiStaleIndexErrorBoundaryState\n> {\n state: AssistantUiStaleIndexErrorBoundaryState = {\n error: null,\n retryToken: 0,\n recovery: null,\n };\n\n private retryTimer: ReturnType<typeof setTimeout> | null = null;\n\n private recoverySignature(\n kind: AssistantUiRecoverableErrorKind,\n error: unknown,\n ): string {\n const message =\n error instanceof Error ? error.message : String(error ?? \"\");\n return `${this.props.resetKey}:${kind}:${message}`;\n }\n\n static getDerivedStateFromError(\n error: unknown,\n ): Partial<AssistantUiStaleIndexErrorBoundaryState> {\n return {\n error: error instanceof Error ? error : new Error(String(error ?? \"\")),\n };\n }\n\n componentDidCatch(error: unknown, info: React.ErrorInfo) {\n const recoverable = assistantUiRecoverableRenderErrorKind(error);\n if (!recoverable) return;\n const signature = this.recoverySignature(recoverable, error);\n const retryCount =\n this.state.recovery?.signature === signature\n ? this.state.recovery.retryCount + 1\n : 1;\n\n const retryBudgetExceeded =\n retryCount > MAX_ASSISTANT_UI_RECOVERABLE_RETRIES;\n if (retryBudgetExceeded) {\n captureError(error, {\n tags: {\n component: this.props.componentName ?? \"AssistantChat\",\n recoverable,\n },\n extra: {\n resetKey: this.props.resetKey,\n retryCount,\n componentStack: info.componentStack,\n },\n });\n }\n\n this.setState({\n recovery: { signature, retryCount },\n });\n if (retryBudgetExceeded) return;\n\n if (this.retryTimer) return;\n this.retryTimer = setTimeout(() => {\n this.retryTimer = null;\n this.setState((state) => {\n if (!state.error || !isAssistantUiRecoverableRenderError(state.error)) {\n return null;\n }\n return { error: null, retryToken: state.retryToken + 1 };\n });\n }, 0);\n }\n\n componentDidUpdate(\n prevProps: AssistantUiStaleIndexErrorBoundaryProps,\n prevState: AssistantUiStaleIndexErrorBoundaryState,\n ) {\n if (prevProps.resetKey !== this.props.resetKey) {\n if (this.retryTimer) {\n clearTimeout(this.retryTimer);\n this.retryTimer = null;\n }\n if (\n this.state.error &&\n isAssistantUiRecoverableRenderError(this.state.error)\n ) {\n this.setState((state) => ({\n error: null,\n retryToken: state.retryToken + 1,\n recovery: null,\n }));\n } else if (this.state.recovery) {\n this.setState({ recovery: null });\n }\n return;\n }\n\n if (prevState.error && !this.state.error && this.state.recovery) {\n this.setState({ recovery: null });\n }\n }\n\n componentWillUnmount() {\n if (this.retryTimer) {\n clearTimeout(this.retryTimer);\n }\n }\n\n render() {\n if (this.state.error) {\n if (!isAssistantUiRecoverableRenderError(this.state.error)) {\n throw this.state.error;\n }\n if (\n this.state.recovery &&\n this.state.recovery.retryCount > MAX_ASSISTANT_UI_RECOVERABLE_RETRIES\n ) {\n throw this.state.error;\n }\n return null;\n }\n\n return (\n <React.Fragment key={`${this.props.resetKey}:${this.state.retryToken}`}>\n {this.props.children}\n </React.Fragment>\n );\n }\n}\n\nexport function AssistantMessageListErrorBoundary({\n resetKey,\n children,\n}: {\n resetKey: string;\n children: React.ReactNode;\n}) {\n return (\n <AssistantUiStaleIndexErrorBoundary\n resetKey={resetKey}\n componentName=\"AssistantMessageList\"\n >\n {children}\n </AssistantUiStaleIndexErrorBoundary>\n );\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-native/core",
3
- "version": "0.51.7",
3
+ "version": "0.51.8",
4
4
  "type": "module",
5
5
  "engines": {
6
6
  "node": ">=22"