@agimon-ai/po-read 0.0.0-alpha.80 → 0.0.0-alpha.82

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,8 +1,7 @@
1
1
  import { defineNativePlugin, defineToolRenderer } from "@agimon-ai/po-core/native";
2
2
  import { View } from "react-native-unistyles/components/native/View";
3
3
  import { Text } from "react-native-unistyles/components/native/Text";
4
- import { Image } from "react-native-unistyles/components/native/Image";
5
- import { HashlineLines, MessageItem, MessageItemBody, MessageItemHeader, MessageItemStatus, ToolPathLink, fontOf, hashlineBody, resultTextLines, toolTone } from "@agimon-ai/po-native-components";
4
+ import { HashlineLines, MessageItem, MessageItemBody, MessageItemHeader, MessageItemStatus, ToolPathLink, ToolResultImage, fontOf, hashlineBody, resultTextLines, toolTone } from "@agimon-ai/po-native-components";
6
5
  import { StyleSheet } from "react-native-unistyles";
7
6
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
8
7
  //#region src/extensions/workspaces/sessions/(frontend)/tool/_lib/readToolView.ts
@@ -44,11 +43,9 @@ const IMAGE_HEIGHT = 240;
44
43
  * path and range in the header and, once expanded, the anchored lines with a
45
44
  * line-number gutter and any image the read returned, or the tool's message
46
45
  * in red when the read failed.
47
- *
48
- * ponytail: an image is drawn in the card and does not open full size; the
49
- * web opens it in a new tab. Route it through renderMediaPreview if asked.
50
46
  */
51
- function ReadToolMessage({ args, result, output, running, isError, fileTabFor, openTransientTab }) {
47
+ function ReadToolMessage(props) {
48
+ const { args, result, output, running, isError, fileTabFor, openTransientTab } = props;
52
49
  const view = readCallView(args);
53
50
  const images = resultImages(result?.content ?? []);
54
51
  const tab = fileTabFor(view.path);
@@ -98,8 +95,10 @@ function ReadToolMessage({ args, result, output, running, isError, fileTabFor, o
98
95
  gutter: body.gutter,
99
96
  path: view.path
100
97
  }),
101
- images.map((image, index) => /* @__PURE__ */ jsx(Image, {
102
- source: { uri: `data:${image.mimeType};base64,${image.data}` },
98
+ images.map((image, index) => /* @__PURE__ */ jsx(ToolResultImage, {
99
+ host: props,
100
+ data: image.data,
101
+ mimeType: image.mimeType,
103
102
  accessibilityLabel: `Read result ${String(index + 1)}`,
104
103
  testID: "tool-result-read-image",
105
104
  resizeMode: "contain",
@@ -1 +1 @@
1
- {"version":3,"file":"native.mjs","names":["ToolMessageRenderProps","fontOf","HashlineLines","hashlineBody","MessageItem","MessageItemBody","MessageItemHeader","MessageItemStatus","resultTextLines","ToolPathLink","toolTone","PoNativeTheme","StyleSheet","readCallView","resultImages","IMAGE_HEIGHT","ReadToolMessage","args","result","output","running","isError","fileTabFor","openTransientTab","view","images","content","tab","path","body","expanded","styles","summary","undefined","onOpen","details","length","sans","detail","join","map","line","index","String","error","shown","notice","gutter","image","mimeType","uri","data","create","theme","flex","flexDirection","alignItems","gap","spacing","minWidth","uni__dependencies","fontFamily","fontSize","base","lineHeight","flexShrink","color","colors","faint","red","width","height","borderRadius","md","borderWidth","borderColor","toolRead"],"sources":["../../src/extensions/workspaces/sessions/(frontend)/tool/_lib/readToolView.ts","../../src/extensions/workspaces/sessions/(frontend)/tool/_components/ReadToolMessage.native.tsx","../../src/extensions/workspaces/sessions/(frontend)/tool/read.native.tsx","../../generated/native.ts"],"sourcesContent":["// Imports nothing at runtime: the web and native cards share it, and the native\n// bundle may not load the web component library.\n\nexport interface ReadCallView {\n readonly path: string;\n /** `from N` and `N lines`, as the TUI's call heading lists them. */\n readonly details: readonly string[];\n}\n\nfunction optionalNumber(value: unknown): number | undefined {\n return typeof value === 'number' && Number.isFinite(value) ? value : undefined;\n}\n\n/** What the read call heading shows: the path, then the offset and limit when given. */\nexport function readCallView(args: Readonly<Record<string, unknown>>): ReadCallView {\n const offset = optionalNumber(args.offset);\n const limit = optionalNumber(args.limit);\n return {\n path: typeof args.path === 'string' ? args.path : '',\n details: [\n offset === undefined ? undefined : `from ${offset}`,\n limit === undefined ? undefined : `${limit} lines`,\n ].filter((value): value is string => value !== undefined && value.length > 0),\n };\n}\n\nconst IMAGE_MIME_TYPES = new Set(['image/png', 'image/jpeg', 'image/gif', 'image/webp']);\n\n/** The image blocks a read returned, limited to the formats both cards can draw. */\nexport function resultImages(content: readonly unknown[]): Array<{ data: string; mimeType: string }> {\n return content.flatMap((block) => {\n if (typeof block !== 'object' || block === null || Array.isArray(block)) return [];\n const value = block as Record<string, unknown>;\n return value.type === 'image' &&\n typeof value.data === 'string' &&\n typeof value.mimeType === 'string' &&\n IMAGE_MIME_TYPES.has(value.mimeType)\n ? [{ data: value.data, mimeType: value.mimeType }]\n : [];\n });\n}\n","import type { ToolMessageRenderProps } from '@agimon-ai/po-core/native';\nimport {\n fontOf,\n HashlineLines,\n hashlineBody,\n MessageItem,\n MessageItemBody,\n MessageItemHeader,\n MessageItemStatus,\n resultTextLines,\n ToolPathLink,\n toolTone,\n} from '@agimon-ai/po-native-components';\nimport type { PoNativeTheme } from '@agimon-ai/po-web-components/nativeTheme';\nimport { Image, Text, View } from 'react-native';\nimport { StyleSheet } from 'react-native-unistyles';\n\nimport { readCallView, resultImages } from '../_lib/readToolView';\n\n/** Height an image result gets in the card; the web caps it at 24rem. */\nconst IMAGE_HEIGHT = 240;\n\n/**\n * The read tool's timeline item on native, as the web's ReadToolMessage: the\n * path and range in the header and, once expanded, the anchored lines with a\n * line-number gutter and any image the read returned, or the tool's message\n * in red when the read failed.\n *\n * ponytail: an image is drawn in the card and does not open full size; the\n * web opens it in a new tab. Route it through renderMediaPreview if asked.\n */\nexport function ReadToolMessage({\n args,\n result,\n output,\n running,\n isError,\n fileTabFor,\n openTransientTab,\n}: ToolMessageRenderProps) {\n const view = readCallView(args);\n const images = resultImages(result?.content ?? []);\n const tab = fileTabFor(view.path);\n const body = result === null || isError ? null : hashlineBody(result, output, 'read', true);\n return (\n <MessageItem tone={toolTone({ running, isError })} expandable defaultExpanded={false}>\n {({ expanded }) => (\n <>\n <MessageItemHeader title=\"read\">\n <View testID=\"tool-call-read\" style={styles.summary}>\n <ToolPathLink path={view.path} {...(tab === undefined ? {} : { onOpen: () => openTransientTab(tab) })} />\n {view.details.length > 0 ? (\n <Text numberOfLines={1} style={[styles.sans, styles.detail]}>\n · {view.details.join(' · ')}\n </Text>\n ) : null}\n </View>\n </MessageItemHeader>\n {expanded ? (\n isError ? (\n <MessageItemBody testID=\"tool-result-read\">\n <MessageItemStatus tone=\"error\">failed</MessageItemStatus>\n {resultTextLines(result, output).map((line, index) => (\n <Text key={`${String(index)}-${line}`} selectable style={[styles.sans, styles.error]}>\n {line}\n </Text>\n ))}\n </MessageItemBody>\n ) : body === null ? (\n running ? (\n <MessageItemBody testID=\"tool-result-read\">\n <MessageItemStatus tone=\"running\">running</MessageItemStatus>\n </MessageItemBody>\n ) : null\n ) : body.shown.length === 0 && body.notice === undefined && images.length === 0 ? null : (\n <MessageItemBody testID=\"tool-result-read\">\n <HashlineLines lines={body.shown} gutter={body.gutter} path={view.path} />\n {images.map((image, index) => (\n <Image\n key={`${image.mimeType}:${String(index)}`}\n source={{ uri: `data:${image.mimeType};base64,${image.data}` }}\n accessibilityLabel={`Read result ${String(index + 1)}`}\n testID=\"tool-result-read-image\"\n resizeMode=\"contain\"\n style={styles.image}\n />\n ))}\n {body.notice !== undefined ? <Text style={[styles.sans, styles.detail]}>{body.notice}</Text> : null}\n </MessageItemBody>\n )\n ) : null}\n </>\n )}\n </MessageItem>\n );\n}\n\nconst styles = StyleSheet.create((theme: PoNativeTheme) => ({\n summary: { flex: 1, flexDirection: 'row', alignItems: 'center', gap: theme.spacing(2), minWidth: 0 },\n sans: {\n fontFamily: fontOf(theme.fontFamily.sans),\n fontSize: theme.fontSize.base,\n lineHeight: theme.lineHeight.base,\n },\n detail: { flexShrink: 1, color: theme.colors.faint },\n error: { color: theme.colors.red },\n image: {\n width: '100%',\n height: IMAGE_HEIGHT,\n borderRadius: theme.borderRadius.md,\n borderWidth: 1,\n borderColor: theme.colors['border-soft'],\n },\n}));\n","import { defineToolRenderer } from '@agimon-ai/po-core/native';\n\nimport { ReadToolMessage } from './_components/ReadToolMessage.native';\n\nexport default defineToolRenderer({ message: ReadToolMessage });\n","// Generated by @agimon-ai/po-build. Do not edit by hand.\nimport { defineNativePlugin, type WebPluginContributions } from '@agimon-ai/po-core/native';\n\nimport toolRead from '../src/extensions/workspaces/sessions/(frontend)/tool/read.native';\n\nconst via = <T>(identity: Record<string, unknown>, value: unknown): T =>\n (value === undefined ? undefined : { ...identity, ...(value as object) }) as T;\n\nexport const nativePlugin = defineNativePlugin({\n id: 'read',\n session: {\n get toolRenderers(): WebPluginContributions['toolRenderers'] { return [via({ tools: ['read'] }, toolRead)]; },\n },\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"native.mjs","names":["ToolMessageRenderProps","fontOf","HashlineLines","hashlineBody","MessageItem","MessageItemBody","MessageItemHeader","MessageItemStatus","resultTextLines","ToolPathLink","toolTone","ToolResultImage","PoNativeTheme","StyleSheet","readCallView","resultImages","IMAGE_HEIGHT","ReadToolMessage","props","args","result","output","running","isError","fileTabFor","openTransientTab","view","images","content","tab","path","body","expanded","styles","summary","undefined","onOpen","details","length","sans","detail","join","map","line","index","String","error","shown","notice","gutter","image","mimeType","data","create","theme","flex","flexDirection","alignItems","gap","spacing","minWidth","uni__dependencies","fontFamily","fontSize","base","lineHeight","flexShrink","color","colors","faint","red","width","height","borderRadius","md","borderWidth","borderColor","toolRead"],"sources":["../../src/extensions/workspaces/sessions/(frontend)/tool/_lib/readToolView.ts","../../src/extensions/workspaces/sessions/(frontend)/tool/_components/ReadToolMessage.native.tsx","../../src/extensions/workspaces/sessions/(frontend)/tool/read.native.tsx","../../generated/native.ts"],"sourcesContent":["// Imports nothing at runtime: the web and native cards share it, and the native\n// bundle may not load the web component library.\n\nexport interface ReadCallView {\n readonly path: string;\n /** `from N` and `N lines`, as the TUI's call heading lists them. */\n readonly details: readonly string[];\n}\n\nfunction optionalNumber(value: unknown): number | undefined {\n return typeof value === 'number' && Number.isFinite(value) ? value : undefined;\n}\n\n/** What the read call heading shows: the path, then the offset and limit when given. */\nexport function readCallView(args: Readonly<Record<string, unknown>>): ReadCallView {\n const offset = optionalNumber(args.offset);\n const limit = optionalNumber(args.limit);\n return {\n path: typeof args.path === 'string' ? args.path : '',\n details: [\n offset === undefined ? undefined : `from ${offset}`,\n limit === undefined ? undefined : `${limit} lines`,\n ].filter((value): value is string => value !== undefined && value.length > 0),\n };\n}\n\nconst IMAGE_MIME_TYPES = new Set(['image/png', 'image/jpeg', 'image/gif', 'image/webp']);\n\n/** The image blocks a read returned, limited to the formats both cards can draw. */\nexport function resultImages(content: readonly unknown[]): Array<{ data: string; mimeType: string }> {\n return content.flatMap((block) => {\n if (typeof block !== 'object' || block === null || Array.isArray(block)) return [];\n const value = block as Record<string, unknown>;\n return value.type === 'image' &&\n typeof value.data === 'string' &&\n typeof value.mimeType === 'string' &&\n IMAGE_MIME_TYPES.has(value.mimeType)\n ? [{ data: value.data, mimeType: value.mimeType }]\n : [];\n });\n}\n","import type { ToolMessageRenderProps } from '@agimon-ai/po-core/native';\nimport {\n fontOf,\n HashlineLines,\n hashlineBody,\n MessageItem,\n MessageItemBody,\n MessageItemHeader,\n MessageItemStatus,\n resultTextLines,\n ToolPathLink,\n toolTone,\n ToolResultImage,\n} from '@agimon-ai/po-native-components';\nimport type { PoNativeTheme } from '@agimon-ai/po-web-components/nativeTheme';\nimport { Text, View } from 'react-native';\nimport { StyleSheet } from 'react-native-unistyles';\n\nimport { readCallView, resultImages } from '../_lib/readToolView';\n\n/** Height an image result gets in the card; the web caps it at 24rem. */\nconst IMAGE_HEIGHT = 240;\n\n/**\n * The read tool's timeline item on native, as the web's ReadToolMessage: the\n * path and range in the header and, once expanded, the anchored lines with a\n * line-number gutter and any image the read returned, or the tool's message\n * in red when the read failed.\n */\nexport function ReadToolMessage(props: ToolMessageRenderProps) {\n const { args, result, output, running, isError, fileTabFor, openTransientTab } = props;\n const view = readCallView(args);\n const images = resultImages(result?.content ?? []);\n const tab = fileTabFor(view.path);\n const body = result === null || isError ? null : hashlineBody(result, output, 'read', true);\n return (\n <MessageItem tone={toolTone({ running, isError })} expandable defaultExpanded={false}>\n {({ expanded }) => (\n <>\n <MessageItemHeader title=\"read\">\n <View testID=\"tool-call-read\" style={styles.summary}>\n <ToolPathLink path={view.path} {...(tab === undefined ? {} : { onOpen: () => openTransientTab(tab) })} />\n {view.details.length > 0 ? (\n <Text numberOfLines={1} style={[styles.sans, styles.detail]}>\n · {view.details.join(' · ')}\n </Text>\n ) : null}\n </View>\n </MessageItemHeader>\n {expanded ? (\n isError ? (\n <MessageItemBody testID=\"tool-result-read\">\n <MessageItemStatus tone=\"error\">failed</MessageItemStatus>\n {resultTextLines(result, output).map((line, index) => (\n <Text key={`${String(index)}-${line}`} selectable style={[styles.sans, styles.error]}>\n {line}\n </Text>\n ))}\n </MessageItemBody>\n ) : body === null ? (\n running ? (\n <MessageItemBody testID=\"tool-result-read\">\n <MessageItemStatus tone=\"running\">running</MessageItemStatus>\n </MessageItemBody>\n ) : null\n ) : body.shown.length === 0 && body.notice === undefined && images.length === 0 ? null : (\n <MessageItemBody testID=\"tool-result-read\">\n <HashlineLines lines={body.shown} gutter={body.gutter} path={view.path} />\n {images.map((image, index) => (\n <ToolResultImage\n key={`${image.mimeType}:${String(index)}`}\n host={props}\n data={image.data}\n mimeType={image.mimeType}\n accessibilityLabel={`Read result ${String(index + 1)}`}\n testID=\"tool-result-read-image\"\n resizeMode=\"contain\"\n style={styles.image}\n />\n ))}\n {body.notice !== undefined ? <Text style={[styles.sans, styles.detail]}>{body.notice}</Text> : null}\n </MessageItemBody>\n )\n ) : null}\n </>\n )}\n </MessageItem>\n );\n}\n\nconst styles = StyleSheet.create((theme: PoNativeTheme) => ({\n summary: { flex: 1, flexDirection: 'row', alignItems: 'center', gap: theme.spacing(2), minWidth: 0 },\n sans: {\n fontFamily: fontOf(theme.fontFamily.sans),\n fontSize: theme.fontSize.base,\n lineHeight: theme.lineHeight.base,\n },\n detail: { flexShrink: 1, color: theme.colors.faint },\n error: { color: theme.colors.red },\n image: {\n width: '100%',\n height: IMAGE_HEIGHT,\n borderRadius: theme.borderRadius.md,\n borderWidth: 1,\n borderColor: theme.colors['border-soft'],\n },\n}));\n","import { defineToolRenderer } from '@agimon-ai/po-core/native';\n\nimport { ReadToolMessage } from './_components/ReadToolMessage.native';\n\nexport default defineToolRenderer({ message: ReadToolMessage });\n","// Generated by @agimon-ai/po-build. Do not edit by hand.\nimport { defineNativePlugin, type WebPluginContributions } from '@agimon-ai/po-core/native';\n\nimport toolRead from '../src/extensions/workspaces/sessions/(frontend)/tool/read.native';\n\nconst via = <T>(identity: Record<string, unknown>, value: unknown): T =>\n (value === undefined ? undefined : { ...identity, ...(value as object) }) as T;\n\nexport const nativePlugin = defineNativePlugin({\n id: 'read',\n session: {\n get toolRenderers(): WebPluginContributions['toolRenderers'] { return [via({ tools: ['read'] }, toolRead)]; },\n },\n});\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agimon-ai/po-read",
3
- "version": "0.0.0-alpha.80",
3
+ "version": "0.0.0-alpha.82",
4
4
  "description": "Snapshot-bound hashline read tool for Pi and Po.",
5
5
  "keywords": [
6
6
  "ai",
@@ -60,17 +60,17 @@
60
60
  "access": "public"
61
61
  },
62
62
  "dependencies": {
63
- "@agimon-ai/po-config": "0.0.0-alpha.80",
64
- "@agimon-ai/po-core": "0.0.0-alpha.80",
65
- "@agimon-ai/po-hashline": "0.0.0-alpha.80",
66
- "@agimon-ai/po-ui": "0.0.0-alpha.80",
67
- "@agimon-ai/po-web-components": "0.0.0-alpha.80",
63
+ "@agimon-ai/po-config": "0.0.0-alpha.82",
64
+ "@agimon-ai/po-core": "0.0.0-alpha.82",
65
+ "@agimon-ai/po-hashline": "0.0.0-alpha.82",
66
+ "@agimon-ai/po-ui": "0.0.0-alpha.82",
67
+ "@agimon-ai/po-web-components": "0.0.0-alpha.82",
68
68
  "@deepseek-ai/cordis": "4.0.5",
69
69
  "typebox": "1.4.2"
70
70
  },
71
71
  "devDependencies": {
72
- "@agimon-ai/po-build": "0.0.0-alpha.80",
73
- "@agimon-ai/po-native-components": "0.0.0-alpha.80",
72
+ "@agimon-ai/po-build": "0.0.0-alpha.82",
73
+ "@agimon-ai/po-native-components": "0.0.0-alpha.82",
74
74
  "@earendil-works/pi-coding-agent": "1.4.0",
75
75
  "@earendil-works/pi-durable": "1.4.0",
76
76
  "@tanstack/react-store": "0.11.2",
@@ -87,7 +87,7 @@
87
87
  "vitest": "5.0.4"
88
88
  },
89
89
  "peerDependencies": {
90
- "@agimon-ai/po-native-components": "0.0.0-alpha.80",
90
+ "@agimon-ai/po-native-components": "0.0.0-alpha.82",
91
91
  "@earendil-works/pi-coding-agent": "1.4.0",
92
92
  "react-native": "0.88.0",
93
93
  "react-native-unistyles": "^3.5.3"