Преглед изворни кода

refactor(tool-web): port web tools to the render-intent union

master's web_search/web_fetch tools were authored against the old
ToolCallPresentation bag; the render-intent union replaces it with a
card-tagged discriminated union. Both are simple generic cards, so they
declare card:'generic' explicitly.
Tianyi Cui пре 2 месеци
родитељ
комит
8ca82d03ab

+ 3 - 3
packages/web/tool-web/src/fetch.ts

@@ -7,7 +7,7 @@
 
 
 import type { Context } from 'cordis'
 import type { Context } from 'cordis'
 import { defineTool } from '@deepseek-ai/dsh-tools'
 import { defineTool } from '@deepseek-ai/dsh-tools'
-import type { ToolCallPresentation } from '@deepseek-ai/dsh-tools'
+import type { GenericCallView } from '@deepseek-ai/dsh-tools'
 import type { ContentBlock } from '@deepseek-ai/dsh-llm'
 import type { ContentBlock } from '@deepseek-ai/dsh-llm'
 import type { WebFetchBody, WebFetchResult } from '@deepseek-ai/dsh-web'
 import type { WebFetchBody, WebFetchResult } from '@deepseek-ai/dsh-web'
 import { assertNever } from '@deepseek-ai/dsh-llm'
 import { assertNever } from '@deepseek-ai/dsh-llm'
@@ -44,8 +44,8 @@ export function formatFetchOutput(result: WebFetchResult): string {
 }
 }
 
 
 /** Pending-call presentation: a fetch card titled by the URL. */
 /** Pending-call presentation: a fetch card titled by the URL. */
-export function presentFetchCall(args: { url: string; timeout_ms?: number }): ToolCallPresentation {
-  return { title: args.url, kind: 'fetch', rawInput: args.url }
+export function presentFetchCall(args: { url: string; timeout_ms?: number }): GenericCallView {
+  return { card: 'generic', title: args.url, kind: 'fetch', rawInput: args.url }
 }
 }
 
 
 /** Register the `web_fetch` tool and its system-prompt guidance. */
 /** Register the `web_fetch` tool and its system-prompt guidance. */

+ 3 - 3
packages/web/tool-web/src/search.ts

@@ -7,7 +7,7 @@
 
 
 import type { Context } from 'cordis'
 import type { Context } from 'cordis'
 import { defineTool } from '@deepseek-ai/dsh-tools'
 import { defineTool } from '@deepseek-ai/dsh-tools'
-import type { ToolCallPresentation } from '@deepseek-ai/dsh-tools'
+import type { GenericCallView } from '@deepseek-ai/dsh-tools'
 import type { ContentBlock } from '@deepseek-ai/dsh-llm'
 import type { ContentBlock } from '@deepseek-ai/dsh-llm'
 import type { WebSearchResult } from '@deepseek-ai/dsh-web'
 import type { WebSearchResult } from '@deepseek-ai/dsh-web'
 import type {} from '@deepseek-ai/dsh-system-prompt'
 import type {} from '@deepseek-ai/dsh-system-prompt'
@@ -63,8 +63,8 @@ export function formatSearchOutput(result: WebSearchResult): string {
 }
 }
 
 
 /** Pending-call presentation: a search card titled by the query. */
 /** Pending-call presentation: a search card titled by the query. */
-export function presentSearchCall(args: { query: string }): ToolCallPresentation {
-  return { title: args.query, kind: 'search', rawInput: args.query }
+export function presentSearchCall(args: { query: string }): GenericCallView {
+  return { card: 'generic', title: args.query, kind: 'search', rawInput: args.query }
 }
 }
 
 
 /** Register the `web_search` tool and its system-prompt guidance. */
 /** Register the `web_search` tool and its system-prompt guidance. */

+ 2 - 2
packages/web/tool-web/tests/tool-web.spec.ts

@@ -80,7 +80,7 @@ describe('search formatting', () => {
   })
   })
 
 
   it('presents a search call as a search-kind card titled by the query', () => {
   it('presents a search call as a search-kind card titled by the query', () => {
-    expect(presentSearchCall({ query: 'find me' })).toEqual({ title: 'find me', kind: 'search', rawInput: 'find me' })
+    expect(presentSearchCall({ query: 'find me' })).toEqual({ card: 'generic', title: 'find me', kind: 'search', rawInput: 'find me' })
   })
   })
 })
 })
 
 
@@ -116,7 +116,7 @@ describe('fetch formatting', () => {
   })
   })
 
 
   it('presents a fetch call as a fetch-kind card titled by the url', () => {
   it('presents a fetch call as a fetch-kind card titled by the url', () => {
-    expect(presentFetchCall({ url: 'https://a.test' })).toEqual({ title: 'https://a.test', kind: 'fetch', rawInput: 'https://a.test' })
+    expect(presentFetchCall({ url: 'https://a.test' })).toEqual({ card: 'generic', title: 'https://a.test', kind: 'fetch', rawInput: 'https://a.test' })
   })
   })
 })
 })