@agent-native/core 0.92.5 → 0.92.7
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/corpus/README.md +2 -2
- package/corpus/core/CHANGELOG.md +19 -0
- package/corpus/core/docs/content/template-assets.mdx +139 -0
- package/corpus/core/package.json +1 -1
- package/corpus/core/src/agent/production-agent.ts +96 -6
- package/corpus/core/src/cli/sync-builder-starter-manifest.ts +1 -1
- package/corpus/core/src/client/AssistantChat.tsx +127 -15
- package/corpus/core/src/client/chat/tool-call-display.tsx +9 -3
- package/corpus/core/src/client/org/TeamPage.tsx +274 -177
- package/corpus/core/src/client/settings/DemoModeSection.tsx +6 -6
- package/corpus/core/src/client/settings/SettingsPanel.tsx +1 -1
- package/corpus/core/src/client/settings/SettingsTabsPage.tsx +49 -1
- package/corpus/core/src/demo/actions/toggle-demo-mode.ts +2 -2
- package/corpus/core/src/demo/config.ts +3 -3
- package/corpus/core/src/demo/redact.ts +720 -0
- package/corpus/core/src/extensions/url-safety.ts +13 -1
- package/corpus/core/src/localization/default-messages.ts +7 -0
- package/corpus/core/src/templates/default/app/i18n/ar-SA.ts +7 -0
- package/corpus/core/src/templates/default/app/i18n/de-DE.ts +7 -0
- package/corpus/core/src/templates/default/app/i18n/en-US.ts +7 -0
- package/corpus/core/src/templates/default/app/i18n/es-ES.ts +7 -0
- package/corpus/core/src/templates/default/app/i18n/fr-FR.ts +7 -0
- package/corpus/core/src/templates/default/app/i18n/hi-IN.ts +7 -0
- package/corpus/core/src/templates/default/app/i18n/ja-JP.ts +7 -0
- package/corpus/core/src/templates/default/app/i18n/ko-KR.ts +7 -0
- package/corpus/core/src/templates/default/app/i18n/pt-BR.ts +7 -0
- package/corpus/core/src/templates/default/app/i18n/zh-CN.ts +7 -0
- package/corpus/core/src/templates/default/app/i18n/zh-TW.ts +7 -0
- package/corpus/templates/analytics/AGENTS.md +6 -3
- package/corpus/templates/analytics/changelog/2026-07-09-uptime-monitors-use-scheduled-workers-in-production-serverless.md +6 -0
- package/corpus/templates/analytics/docs/uptime-monitoring.md +5 -0
- package/corpus/templates/analytics/server/plugins/uptime-monitor-jobs.ts +14 -2
- package/corpus/templates/assets/.agents/skills/image-generation/SKILL.md +35 -0
- package/corpus/templates/assets/.agents/skills/library-management/SKILL.md +19 -0
- package/corpus/templates/assets/AGENTS.md +13 -0
- package/corpus/templates/assets/actions/_generation-preset-settings.ts +73 -0
- package/corpus/templates/assets/actions/_preset-skeleton-validation.ts +63 -0
- package/corpus/templates/assets/actions/create-generation-preset.ts +22 -8
- package/corpus/templates/assets/actions/duplicate-library.ts +49 -1
- package/corpus/templates/assets/actions/generate-image-batch.ts +14 -1
- package/corpus/templates/assets/actions/generate-image.ts +195 -26
- package/corpus/templates/assets/actions/import-asset-from-url.ts +323 -0
- package/corpus/templates/assets/actions/list-generation-presets.ts +1 -1
- package/corpus/templates/assets/actions/rerun-generation-run.ts +37 -0
- package/corpus/templates/assets/actions/update-generation-preset.ts +19 -1
- package/corpus/templates/assets/app/i18n/ar-SA.ts +1 -0
- package/corpus/templates/assets/app/i18n/de-DE.ts +1 -0
- package/corpus/templates/assets/app/i18n/es-ES.ts +1 -0
- package/corpus/templates/assets/app/i18n/fr-FR.ts +1 -0
- package/corpus/templates/assets/app/i18n/hi-IN.ts +1 -0
- package/corpus/templates/assets/app/i18n/ja-JP.ts +1 -0
- package/corpus/templates/assets/app/i18n/ko-KR.ts +1 -0
- package/corpus/templates/assets/app/i18n/pt-BR.ts +1 -0
- package/corpus/templates/assets/app/i18n/zh-CN.ts +1 -0
- package/corpus/templates/assets/app/i18n/zh-TW.ts +41 -0
- package/corpus/templates/assets/app/i18n-data.ts +93 -0
- package/corpus/templates/assets/app/routes/brand-kits.$id.tsx +66 -11
- package/corpus/templates/assets/app/routes/brand-kits.$id_.presets.$presetId.tsx +959 -24
- package/corpus/templates/assets/changelog/2026-07-07-preset-skeleton-controls-fit-correctly-on-narrower-edit-page.md +6 -0
- package/corpus/templates/assets/changelog/2026-07-09-import-reference-images-from-url.md +6 -0
- package/corpus/templates/assets/changelog/2026-07-09-preset-reference-board.md +6 -0
- package/corpus/templates/assets/server/handlers/assets.ts +7 -27
- package/corpus/templates/assets/server/lib/generation.ts +83 -2
- package/corpus/templates/assets/server/lib/preset-chat-context.ts +17 -4
- package/corpus/templates/assets/server/lib/preset-references.ts +182 -0
- package/corpus/templates/assets/server/lib/upload-validation.ts +38 -0
- package/corpus/templates/assets/shared/api.ts +20 -0
- package/corpus/templates/calendar/.agents/skills/event-management/SKILL.md +6 -0
- package/corpus/templates/calendar/actions/create-event.ts +8 -2
- package/corpus/templates/calendar/app/components/calendar/CreateEventDialog.tsx +22 -7
- package/corpus/templates/calendar/changelog/2026-07-09-calendar-events-with-guests-now-automatically-get-a-google-m.md +6 -0
- package/corpus/templates/calendar/changelog/2026-07-09-new-events-now-mark-the-creator-rsvp-as-yes.md +6 -0
- package/corpus/templates/calendar/server/handlers/events.ts +9 -2
- package/corpus/templates/calendar/server/lib/event-video-conferencing.ts +58 -0
- package/corpus/templates/calendar/server/lib/google-calendar.ts +1 -0
- package/corpus/templates/clips/changelog/2026-07-09-meeting-reminder-popovers-can-now-be-dismissed-with-a-top-le.md +6 -0
- package/corpus/templates/clips/desktop/src/overlays/meeting-notification.tsx +3 -1
- package/corpus/templates/clips/desktop/src/styles.css +13 -9
- package/corpus/templates/clips/desktop/src-tauri/src/notifications.rs +5 -2
- package/dist/agent/production-agent.d.ts +34 -1
- package/dist/agent/production-agent.d.ts.map +1 -1
- package/dist/agent/production-agent.js +58 -5
- package/dist/agent/production-agent.js.map +1 -1
- package/dist/cli/sync-builder-starter-manifest.js +1 -1
- package/dist/cli/sync-builder-starter-manifest.js.map +1 -1
- package/dist/client/AssistantChat.d.ts +3 -1
- package/dist/client/AssistantChat.d.ts.map +1 -1
- package/dist/client/AssistantChat.js +96 -15
- package/dist/client/AssistantChat.js.map +1 -1
- package/dist/client/chat/tool-call-display.d.ts.map +1 -1
- package/dist/client/chat/tool-call-display.js +5 -1
- package/dist/client/chat/tool-call-display.js.map +1 -1
- package/dist/client/org/TeamPage.d.ts.map +1 -1
- package/dist/client/org/TeamPage.js +32 -13
- package/dist/client/org/TeamPage.js.map +1 -1
- package/dist/client/settings/DemoModeSection.d.ts +3 -3
- package/dist/client/settings/DemoModeSection.js +4 -4
- package/dist/client/settings/DemoModeSection.js.map +1 -1
- package/dist/client/settings/SettingsPanel.js +1 -1
- package/dist/client/settings/SettingsPanel.js.map +1 -1
- package/dist/client/settings/SettingsTabsPage.d.ts.map +1 -1
- package/dist/client/settings/SettingsTabsPage.js +38 -2
- package/dist/client/settings/SettingsTabsPage.js.map +1 -1
- package/dist/collab/routes.d.ts +1 -1
- package/dist/collab/struct-routes.d.ts +1 -1
- package/dist/demo/actions/toggle-demo-mode.js +2 -2
- package/dist/demo/actions/toggle-demo-mode.js.map +1 -1
- package/dist/demo/config.js +3 -3
- package/dist/demo/config.js.map +1 -1
- package/dist/demo/redact.d.ts +1 -1
- package/dist/demo/redact.d.ts.map +1 -1
- package/dist/demo/redact.js +0 -0
- package/dist/demo/redact.js.map +1 -1
- package/dist/extensions/url-safety.d.ts +5 -0
- package/dist/extensions/url-safety.d.ts.map +1 -1
- package/dist/extensions/url-safety.js +10 -0
- package/dist/extensions/url-safety.js.map +1 -1
- package/dist/localization/default-messages.d.ts +7 -0
- package/dist/localization/default-messages.d.ts.map +1 -1
- package/dist/localization/default-messages.js +7 -0
- package/dist/localization/default-messages.js.map +1 -1
- package/dist/notifications/routes.d.ts +2 -2
- package/dist/provider-api/corpus-jobs.d.ts +2 -2
- package/dist/resources/handlers.d.ts +2 -2
- package/dist/templates/default/app/i18n/ar-SA.ts +7 -0
- package/dist/templates/default/app/i18n/de-DE.ts +7 -0
- package/dist/templates/default/app/i18n/en-US.ts +7 -0
- package/dist/templates/default/app/i18n/es-ES.ts +7 -0
- package/dist/templates/default/app/i18n/fr-FR.ts +7 -0
- package/dist/templates/default/app/i18n/hi-IN.ts +7 -0
- package/dist/templates/default/app/i18n/ja-JP.ts +7 -0
- package/dist/templates/default/app/i18n/ko-KR.ts +7 -0
- package/dist/templates/default/app/i18n/pt-BR.ts +7 -0
- package/dist/templates/default/app/i18n/zh-CN.ts +7 -0
- package/dist/templates/default/app/i18n/zh-TW.ts +7 -0
- package/docs/content/template-assets.mdx +139 -0
- package/package.json +1 -1
- package/src/templates/default/app/i18n/ar-SA.ts +7 -0
- package/src/templates/default/app/i18n/de-DE.ts +7 -0
- package/src/templates/default/app/i18n/en-US.ts +7 -0
- package/src/templates/default/app/i18n/es-ES.ts +7 -0
- package/src/templates/default/app/i18n/fr-FR.ts +7 -0
- package/src/templates/default/app/i18n/hi-IN.ts +7 -0
- package/src/templates/default/app/i18n/ja-JP.ts +7 -0
- package/src/templates/default/app/i18n/ko-KR.ts +7 -0
- package/src/templates/default/app/i18n/pt-BR.ts +7 -0
- package/src/templates/default/app/i18n/zh-CN.ts +7 -0
- package/src/templates/default/app/i18n/zh-TW.ts +7 -0
|
@@ -139,7 +139,7 @@ export function mergeStarterManifest(starterPackageJson, canonicalPackageJson) {
|
|
|
139
139
|
if (typeof starterPackageJson.packageManager === "string") {
|
|
140
140
|
merged.packageManager = starterPackageJson.packageManager;
|
|
141
141
|
}
|
|
142
|
-
merged.dependencies = mergePackageJsonRecords(canonicalPackageJson.dependencies, starterPackageJson.dependencies, ["@agent-native/core"]);
|
|
142
|
+
merged.dependencies = mergePackageJsonRecords(canonicalPackageJson.dependencies, starterPackageJson.dependencies, ["@agent-native/core", "@agent-native/toolkit"]);
|
|
143
143
|
merged.devDependencies = mergePackageJsonRecords(canonicalPackageJson.devDependencies, starterPackageJson.devDependencies);
|
|
144
144
|
merged.scripts = mergePackageJsonRecords(canonicalPackageJson.scripts, starterPackageJson.scripts);
|
|
145
145
|
return merged;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync-builder-starter-manifest.js","sourceRoot":"","sources":["../../src/cli/sync-builder-starter-manifest.ts"],"names":[],"mappings":"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","sourcesContent":["import fs from \"node:fs\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\nimport { _postProcessStandalone } from \"./create.js\";\n\nexport const STARTER_APP_NAME = \"builder-agent-native-starter\";\nexport const CHAT_TEMPLATE = \"chat\";\n\n/** Toolchain files that must track templates/chat or typecheck/build drift. */\nexport const STARTER_TOOLCHAIN_SYNC_PATHS = [\n \"react-router.config.ts\",\n \"vite.config.ts\",\n \"tsconfig.json\",\n \"ssr-entry.ts\",\n \"app/vite-env.d.ts\",\n \"app/routes.ts\",\n \"server/routes/[...page].get.ts\",\n // server/plugins/* are intentionally excluded: starter keeps its own\n // systemPrompt and auth marketing copy; post-process only rewrites appId/title.\n \"server/middleware/auth.ts\",\n \"components.json\",\n \".oxfmtrc.json\",\n \"netlify.toml\",\n] as const;\n\nconst STANDALONE_SNAPSHOT_EXCLUDED_TOP_LEVEL = new Set([\n \".deploy-tmp\",\n \".env\",\n \".env.local\",\n \".generated\",\n \".netlify\",\n \".output\",\n \".react-router\",\n \"build\",\n \"data\",\n \"dist\",\n \"node_modules\",\n]);\n\nexport type StarterToolchainSyncPath =\n (typeof STARTER_TOOLCHAIN_SYNC_PATHS)[number];\n\ntype PackageJson = Record<string, unknown>;\n\nexport type StandaloneChatSnapshot = {\n cleanup: () => void;\n dir: string;\n packageJson: PackageJson;\n pnpmWorkspaceYaml: string | null;\n toolchainFiles: Map<StarterToolchainSyncPath, string>;\n};\n\nexport function listStarterSyncPaths(): string[] {\n return [\n \"package.json\",\n \"pnpm-lock.yaml\",\n \"pnpm-workspace.yaml\",\n ...STARTER_TOOLCHAIN_SYNC_PATHS,\n ];\n}\n\nexport function findAgentNativeRoot(startDir = process.cwd()): string {\n let dir = path.resolve(startDir);\n for (let i = 0; i < 12; i++) {\n const chatPackageJson = path.join(\n dir,\n \"templates\",\n CHAT_TEMPLATE,\n \"package.json\",\n );\n if (fs.existsSync(chatPackageJson)) {\n return dir;\n }\n const parent = path.dirname(dir);\n if (parent === dir) break;\n dir = parent;\n }\n throw new Error(\n \"Could not find agent-native repo root (expected templates/chat/package.json).\",\n );\n}\n\nexport function collectStarterToolchainFiles(\n canonicalDir: string,\n): Map<StarterToolchainSyncPath, string> {\n const files = new Map<StarterToolchainSyncPath, string>();\n for (const relativePath of STARTER_TOOLCHAIN_SYNC_PATHS) {\n const absolutePath = path.join(canonicalDir, relativePath);\n if (!fs.existsSync(absolutePath)) continue;\n files.set(relativePath, fs.readFileSync(absolutePath, \"utf-8\"));\n }\n return files;\n}\n\nexport function createStandaloneChatSnapshot(\n repoRoot?: string,\n): StandaloneChatSnapshot {\n const root = repoRoot ?? findAgentNativeRoot();\n const chatTemplateDir = path.join(root, \"templates\", CHAT_TEMPLATE);\n const tempDir = fs.mkdtempSync(\n path.join(os.tmpdir(), \"an-builder-starter-sync-\"),\n );\n\n fs.cpSync(chatTemplateDir, tempDir, {\n recursive: true,\n filter: (source) =>\n shouldCopyStandaloneSnapshotPath(source, chatTemplateDir),\n });\n _postProcessStandalone(STARTER_APP_NAME, tempDir, CHAT_TEMPLATE);\n\n const packageJson = JSON.parse(\n fs.readFileSync(path.join(tempDir, \"package.json\"), \"utf-8\"),\n ) as PackageJson;\n\n const workspacePath = path.join(tempDir, \"pnpm-workspace.yaml\");\n const pnpmWorkspaceYaml = fs.existsSync(workspacePath)\n ? fs.readFileSync(workspacePath, \"utf-8\")\n : null;\n\n return {\n cleanup: () => {\n fs.rmSync(tempDir, { recursive: true, force: true });\n },\n dir: tempDir,\n packageJson,\n pnpmWorkspaceYaml,\n toolchainFiles: collectStarterToolchainFiles(tempDir),\n };\n}\n\nfunction shouldCopyStandaloneSnapshotPath(\n source: string,\n root: string,\n): boolean {\n const relative = path.relative(root, source);\n if (!relative) return true;\n const topLevel = relative.split(path.sep)[0];\n return !STANDALONE_SNAPSHOT_EXCLUDED_TOP_LEVEL.has(topLevel);\n}\n\nexport function generateStandaloneChatManifest(repoRoot?: string): {\n packageJson: PackageJson;\n pnpmWorkspaceYaml: string | null;\n} {\n const snapshot = createStandaloneChatSnapshot(repoRoot);\n try {\n return {\n packageJson: snapshot.packageJson,\n pnpmWorkspaceYaml: snapshot.pnpmWorkspaceYaml,\n };\n } finally {\n snapshot.cleanup();\n }\n}\n\nfunction mergePackageJsonRecords(\n canonical: Record<string, string> | undefined,\n starter: Record<string, string> | undefined,\n starterPinnedKeys: string[] = [],\n): Record<string, string> {\n const merged = { ...(canonical ?? {}) };\n for (const [key, value] of Object.entries(starter ?? {})) {\n if (!(key in merged)) {\n merged[key] = value;\n }\n }\n for (const key of starterPinnedKeys) {\n const pinned = starter?.[key];\n if (pinned) {\n merged[key] = pinned;\n }\n }\n return merged;\n}\n\nexport function mergeStarterManifest(\n starterPackageJson: PackageJson,\n canonicalPackageJson: PackageJson,\n): PackageJson {\n const merged = structuredClone(canonicalPackageJson) as PackageJson;\n\n merged.name = starterPackageJson.name ?? STARTER_APP_NAME;\n if (typeof starterPackageJson.displayName === \"string\") {\n merged.displayName = starterPackageJson.displayName;\n }\n if (typeof starterPackageJson.description === \"string\") {\n merged.description = starterPackageJson.description;\n }\n if (starterPackageJson.private !== undefined) {\n merged.private = starterPackageJson.private;\n }\n if (typeof starterPackageJson.packageManager === \"string\") {\n merged.packageManager = starterPackageJson.packageManager;\n }\n\n merged.dependencies = mergePackageJsonRecords(\n canonicalPackageJson.dependencies as Record<string, string> | undefined,\n starterPackageJson.dependencies as Record<string, string> | undefined,\n [\"@agent-native/core\"],\n );\n merged.devDependencies = mergePackageJsonRecords(\n canonicalPackageJson.devDependencies as Record<string, string> | undefined,\n starterPackageJson.devDependencies as Record<string, string> | undefined,\n );\n merged.scripts = mergePackageJsonRecords(\n canonicalPackageJson.scripts as Record<string, string> | undefined,\n starterPackageJson.scripts as Record<string, string> | undefined,\n );\n\n return merged;\n}\n\nexport function workspaceFileSyncChanged(\n existingWorkspace: string | null,\n canonicalWorkspace: string | null,\n): boolean {\n if (canonicalWorkspace === null) {\n return existingWorkspace !== null;\n }\n return existingWorkspace !== canonicalWorkspace;\n}\n\nexport function applyWorkspaceFileSync(\n targetPath: string,\n canonicalWorkspace: string | null,\n): void {\n if (canonicalWorkspace === null) {\n if (fs.existsSync(targetPath)) {\n fs.unlinkSync(targetPath);\n }\n return;\n }\n fs.writeFileSync(targetPath, canonicalWorkspace);\n}\n\nfunction stableJson(value: unknown): string {\n return `${JSON.stringify(value, null, 2)}\\n`;\n}\n\nexport type StarterToolchainSyncChange = {\n relativePath: StarterToolchainSyncPath;\n changed: boolean;\n};\n\nexport function diffStarterToolchainFiles(\n starterDir: string,\n canonicalFiles: Map<StarterToolchainSyncPath, string>,\n): StarterToolchainSyncChange[] {\n return STARTER_TOOLCHAIN_SYNC_PATHS.map((relativePath) => {\n const canonicalContent = canonicalFiles.get(relativePath) ?? null;\n const targetPath = path.join(starterDir, relativePath);\n const existingContent = fs.existsSync(targetPath)\n ? fs.readFileSync(targetPath, \"utf-8\")\n : null;\n return {\n relativePath,\n changed: existingContent !== canonicalContent,\n };\n });\n}\n\nexport function applyStarterToolchainSync(\n starterDir: string,\n canonicalFiles: Map<StarterToolchainSyncPath, string>,\n): StarterToolchainSyncChange[] {\n const changes: StarterToolchainSyncChange[] = [];\n for (const relativePath of STARTER_TOOLCHAIN_SYNC_PATHS) {\n const canonicalContent = canonicalFiles.get(relativePath) ?? null;\n const targetPath = path.join(starterDir, relativePath);\n const existingContent = fs.existsSync(targetPath)\n ? fs.readFileSync(targetPath, \"utf-8\")\n : null;\n const changed = existingContent !== canonicalContent;\n if (changed) {\n if (canonicalContent === null) {\n if (fs.existsSync(targetPath)) {\n fs.unlinkSync(targetPath);\n }\n } else {\n fs.mkdirSync(path.dirname(targetPath), { recursive: true });\n fs.writeFileSync(targetPath, canonicalContent);\n }\n }\n changes.push({ relativePath, changed });\n }\n return changes;\n}\n\nexport type SyncStarterManifestResult = {\n changed: boolean;\n packageChanged: boolean;\n workspaceChanged: boolean;\n packageJson: PackageJson;\n pnpmWorkspaceYaml: string | null;\n toolchainChanges: StarterToolchainSyncChange[];\n changedToolchainPaths: StarterToolchainSyncPath[];\n};\n\nexport function resolveStarterPaths(options: {\n starterDir?: string;\n starterPackageJsonPath?: string;\n starterPnpmWorkspacePath?: string;\n}): {\n starterDir: string;\n starterPackageJsonPath: string;\n starterPnpmWorkspacePath: string;\n} {\n if (options.starterDir) {\n return {\n starterDir: path.resolve(options.starterDir),\n starterPackageJsonPath: path.join(\n path.resolve(options.starterDir),\n \"package.json\",\n ),\n starterPnpmWorkspacePath: path.join(\n path.resolve(options.starterDir),\n \"pnpm-workspace.yaml\",\n ),\n };\n }\n if (!options.starterPackageJsonPath) {\n throw new Error(\"Provide --starter-dir or --starter-package-json.\");\n }\n const starterPackageJsonPath = path.resolve(options.starterPackageJsonPath);\n return {\n starterDir: path.dirname(starterPackageJsonPath),\n starterPackageJsonPath,\n starterPnpmWorkspacePath:\n options.starterPnpmWorkspacePath ??\n path.join(path.dirname(starterPackageJsonPath), \"pnpm-workspace.yaml\"),\n };\n}\n\nexport function syncStarterManifestFiles(options: {\n starterDir?: string;\n starterPackageJsonPath?: string;\n starterPnpmWorkspacePath?: string;\n repoRoot?: string;\n write?: boolean;\n}): SyncStarterManifestResult {\n const { starterDir, starterPackageJsonPath, starterPnpmWorkspacePath } =\n resolveStarterPaths(options);\n const snapshot = createStandaloneChatSnapshot(options.repoRoot);\n\n try {\n const starterPackageJson = JSON.parse(\n fs.readFileSync(starterPackageJsonPath, \"utf-8\"),\n ) as PackageJson;\n const mergedPackageJson = mergeStarterManifest(\n starterPackageJson,\n snapshot.packageJson,\n );\n\n const existingWorkspace = fs.existsSync(starterPnpmWorkspacePath)\n ? fs.readFileSync(starterPnpmWorkspacePath, \"utf-8\")\n : null;\n\n const workspaceChanged = workspaceFileSyncChanged(\n existingWorkspace,\n snapshot.pnpmWorkspaceYaml,\n );\n const packageChanged =\n stableJson(starterPackageJson) !== stableJson(mergedPackageJson);\n const toolchainChanges = diffStarterToolchainFiles(\n starterDir,\n snapshot.toolchainFiles,\n );\n const changedToolchainPaths = toolchainChanges\n .filter((change) => change.changed)\n .map((change) => change.relativePath);\n const changed =\n packageChanged || workspaceChanged || changedToolchainPaths.length > 0;\n\n if (options.write && changed) {\n if (packageChanged) {\n fs.writeFileSync(starterPackageJsonPath, stableJson(mergedPackageJson));\n }\n if (workspaceChanged) {\n applyWorkspaceFileSync(\n starterPnpmWorkspacePath,\n snapshot.pnpmWorkspaceYaml,\n );\n }\n if (changedToolchainPaths.length > 0) {\n applyStarterToolchainSync(starterDir, snapshot.toolchainFiles);\n }\n }\n\n return {\n changed,\n packageChanged,\n workspaceChanged,\n packageJson: mergedPackageJson,\n pnpmWorkspaceYaml: snapshot.pnpmWorkspaceYaml,\n toolchainChanges,\n changedToolchainPaths,\n };\n } finally {\n snapshot.cleanup();\n }\n}\n\nexport function parseSyncStarterManifestArgs(argv: string[]): {\n command: \"merge\" | \"generate\" | \"paths\";\n starterDir?: string;\n starterPackageJsonPath?: string;\n starterPnpmWorkspacePath?: string;\n write: boolean;\n repoRoot?: string;\n} {\n const [commandRaw, ...rest] = argv;\n const command =\n commandRaw === \"generate\"\n ? \"generate\"\n : commandRaw === \"paths\"\n ? \"paths\"\n : \"merge\";\n let starterDir: string | undefined;\n let starterPackageJsonPath: string | undefined;\n let starterPnpmWorkspacePath: string | undefined;\n let write = false;\n let repoRoot: string | undefined;\n\n for (let i = 0; i < rest.length; i++) {\n const arg = rest[i];\n if (arg === \"--write\") {\n write = true;\n continue;\n }\n if (arg === \"--starter-dir\") {\n starterDir = rest[++i];\n continue;\n }\n if (arg === \"--starter-package-json\") {\n starterPackageJsonPath = rest[++i];\n continue;\n }\n if (arg === \"--starter-pnpm-workspace\") {\n starterPnpmWorkspacePath = rest[++i];\n continue;\n }\n if (arg === \"--repo-root\") {\n repoRoot = rest[++i];\n continue;\n }\n throw new Error(`Unknown argument: ${arg}`);\n }\n\n if (command === \"merge\" && !starterDir && !starterPackageJsonPath) {\n throw new Error(\n \"merge requires --starter-dir <path> or --starter-package-json <path> [--starter-pnpm-workspace <path>] [--write] [--repo-root <path>]\",\n );\n }\n\n return {\n command,\n starterDir,\n starterPackageJsonPath,\n starterPnpmWorkspacePath,\n write,\n repoRoot,\n };\n}\n\nexport function runSyncStarterManifestCli(argv: string[]): number {\n const args = parseSyncStarterManifestArgs(argv);\n\n if (args.command === \"generate\") {\n const { packageJson, pnpmWorkspaceYaml } = generateStandaloneChatManifest(\n args.repoRoot,\n );\n process.stdout.write(stableJson(packageJson));\n if (pnpmWorkspaceYaml) {\n process.stdout.write(\"\\n--- pnpm-workspace.yaml ---\\n\");\n process.stdout.write(pnpmWorkspaceYaml);\n }\n return 0;\n }\n\n if (args.command === \"paths\") {\n for (const syncPath of listStarterSyncPaths()) {\n process.stdout.write(`${syncPath}\\n`);\n }\n return 0;\n }\n\n const result = syncStarterManifestFiles({\n starterDir: args.starterDir,\n starterPackageJsonPath: args.starterPackageJsonPath,\n starterPnpmWorkspacePath: args.starterPnpmWorkspacePath,\n repoRoot: args.repoRoot,\n write: args.write,\n });\n\n if (result.changed) {\n const updatedPaths = [\n ...(result.packageChanged ? [\"package.json\"] : []),\n ...(result.workspaceChanged ? [\"pnpm-workspace.yaml\"] : []),\n ...result.changedToolchainPaths,\n ];\n const summary = updatedPaths.length ? ` (${updatedPaths.join(\", \")})` : \"\";\n console.log(\n args.write\n ? `Updated builder-agent-native-starter from templates/chat${summary}.`\n : `builder-agent-native-starter is out of date with templates/chat${summary}.`,\n );\n return args.write ? 0 : 1;\n }\n\n console.log(\"builder-agent-native-starter already matches templates/chat.\");\n return 0;\n}\n\nconst isDirectRun =\n process.argv[1] &&\n path.resolve(process.argv[1]) ===\n path.resolve(fileURLToPath(import.meta.url));\n\nif (isDirectRun) {\n const exitCode = runSyncStarterManifestCli(process.argv.slice(2));\n process.exit(exitCode);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"sync-builder-starter-manifest.js","sourceRoot":"","sources":["../../src/cli/sync-builder-starter-manifest.ts"],"names":[],"mappings":"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","sourcesContent":["import fs from \"node:fs\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\nimport { _postProcessStandalone } from \"./create.js\";\n\nexport const STARTER_APP_NAME = \"builder-agent-native-starter\";\nexport const CHAT_TEMPLATE = \"chat\";\n\n/** Toolchain files that must track templates/chat or typecheck/build drift. */\nexport const STARTER_TOOLCHAIN_SYNC_PATHS = [\n \"react-router.config.ts\",\n \"vite.config.ts\",\n \"tsconfig.json\",\n \"ssr-entry.ts\",\n \"app/vite-env.d.ts\",\n \"app/routes.ts\",\n \"server/routes/[...page].get.ts\",\n // server/plugins/* are intentionally excluded: starter keeps its own\n // systemPrompt and auth marketing copy; post-process only rewrites appId/title.\n \"server/middleware/auth.ts\",\n \"components.json\",\n \".oxfmtrc.json\",\n \"netlify.toml\",\n] as const;\n\nconst STANDALONE_SNAPSHOT_EXCLUDED_TOP_LEVEL = new Set([\n \".deploy-tmp\",\n \".env\",\n \".env.local\",\n \".generated\",\n \".netlify\",\n \".output\",\n \".react-router\",\n \"build\",\n \"data\",\n \"dist\",\n \"node_modules\",\n]);\n\nexport type StarterToolchainSyncPath =\n (typeof STARTER_TOOLCHAIN_SYNC_PATHS)[number];\n\ntype PackageJson = Record<string, unknown>;\n\nexport type StandaloneChatSnapshot = {\n cleanup: () => void;\n dir: string;\n packageJson: PackageJson;\n pnpmWorkspaceYaml: string | null;\n toolchainFiles: Map<StarterToolchainSyncPath, string>;\n};\n\nexport function listStarterSyncPaths(): string[] {\n return [\n \"package.json\",\n \"pnpm-lock.yaml\",\n \"pnpm-workspace.yaml\",\n ...STARTER_TOOLCHAIN_SYNC_PATHS,\n ];\n}\n\nexport function findAgentNativeRoot(startDir = process.cwd()): string {\n let dir = path.resolve(startDir);\n for (let i = 0; i < 12; i++) {\n const chatPackageJson = path.join(\n dir,\n \"templates\",\n CHAT_TEMPLATE,\n \"package.json\",\n );\n if (fs.existsSync(chatPackageJson)) {\n return dir;\n }\n const parent = path.dirname(dir);\n if (parent === dir) break;\n dir = parent;\n }\n throw new Error(\n \"Could not find agent-native repo root (expected templates/chat/package.json).\",\n );\n}\n\nexport function collectStarterToolchainFiles(\n canonicalDir: string,\n): Map<StarterToolchainSyncPath, string> {\n const files = new Map<StarterToolchainSyncPath, string>();\n for (const relativePath of STARTER_TOOLCHAIN_SYNC_PATHS) {\n const absolutePath = path.join(canonicalDir, relativePath);\n if (!fs.existsSync(absolutePath)) continue;\n files.set(relativePath, fs.readFileSync(absolutePath, \"utf-8\"));\n }\n return files;\n}\n\nexport function createStandaloneChatSnapshot(\n repoRoot?: string,\n): StandaloneChatSnapshot {\n const root = repoRoot ?? findAgentNativeRoot();\n const chatTemplateDir = path.join(root, \"templates\", CHAT_TEMPLATE);\n const tempDir = fs.mkdtempSync(\n path.join(os.tmpdir(), \"an-builder-starter-sync-\"),\n );\n\n fs.cpSync(chatTemplateDir, tempDir, {\n recursive: true,\n filter: (source) =>\n shouldCopyStandaloneSnapshotPath(source, chatTemplateDir),\n });\n _postProcessStandalone(STARTER_APP_NAME, tempDir, CHAT_TEMPLATE);\n\n const packageJson = JSON.parse(\n fs.readFileSync(path.join(tempDir, \"package.json\"), \"utf-8\"),\n ) as PackageJson;\n\n const workspacePath = path.join(tempDir, \"pnpm-workspace.yaml\");\n const pnpmWorkspaceYaml = fs.existsSync(workspacePath)\n ? fs.readFileSync(workspacePath, \"utf-8\")\n : null;\n\n return {\n cleanup: () => {\n fs.rmSync(tempDir, { recursive: true, force: true });\n },\n dir: tempDir,\n packageJson,\n pnpmWorkspaceYaml,\n toolchainFiles: collectStarterToolchainFiles(tempDir),\n };\n}\n\nfunction shouldCopyStandaloneSnapshotPath(\n source: string,\n root: string,\n): boolean {\n const relative = path.relative(root, source);\n if (!relative) return true;\n const topLevel = relative.split(path.sep)[0];\n return !STANDALONE_SNAPSHOT_EXCLUDED_TOP_LEVEL.has(topLevel);\n}\n\nexport function generateStandaloneChatManifest(repoRoot?: string): {\n packageJson: PackageJson;\n pnpmWorkspaceYaml: string | null;\n} {\n const snapshot = createStandaloneChatSnapshot(repoRoot);\n try {\n return {\n packageJson: snapshot.packageJson,\n pnpmWorkspaceYaml: snapshot.pnpmWorkspaceYaml,\n };\n } finally {\n snapshot.cleanup();\n }\n}\n\nfunction mergePackageJsonRecords(\n canonical: Record<string, string> | undefined,\n starter: Record<string, string> | undefined,\n starterPinnedKeys: string[] = [],\n): Record<string, string> {\n const merged = { ...(canonical ?? {}) };\n for (const [key, value] of Object.entries(starter ?? {})) {\n if (!(key in merged)) {\n merged[key] = value;\n }\n }\n for (const key of starterPinnedKeys) {\n const pinned = starter?.[key];\n if (pinned) {\n merged[key] = pinned;\n }\n }\n return merged;\n}\n\nexport function mergeStarterManifest(\n starterPackageJson: PackageJson,\n canonicalPackageJson: PackageJson,\n): PackageJson {\n const merged = structuredClone(canonicalPackageJson) as PackageJson;\n\n merged.name = starterPackageJson.name ?? STARTER_APP_NAME;\n if (typeof starterPackageJson.displayName === \"string\") {\n merged.displayName = starterPackageJson.displayName;\n }\n if (typeof starterPackageJson.description === \"string\") {\n merged.description = starterPackageJson.description;\n }\n if (starterPackageJson.private !== undefined) {\n merged.private = starterPackageJson.private;\n }\n if (typeof starterPackageJson.packageManager === \"string\") {\n merged.packageManager = starterPackageJson.packageManager;\n }\n\n merged.dependencies = mergePackageJsonRecords(\n canonicalPackageJson.dependencies as Record<string, string> | undefined,\n starterPackageJson.dependencies as Record<string, string> | undefined,\n [\"@agent-native/core\", \"@agent-native/toolkit\"],\n );\n merged.devDependencies = mergePackageJsonRecords(\n canonicalPackageJson.devDependencies as Record<string, string> | undefined,\n starterPackageJson.devDependencies as Record<string, string> | undefined,\n );\n merged.scripts = mergePackageJsonRecords(\n canonicalPackageJson.scripts as Record<string, string> | undefined,\n starterPackageJson.scripts as Record<string, string> | undefined,\n );\n\n return merged;\n}\n\nexport function workspaceFileSyncChanged(\n existingWorkspace: string | null,\n canonicalWorkspace: string | null,\n): boolean {\n if (canonicalWorkspace === null) {\n return existingWorkspace !== null;\n }\n return existingWorkspace !== canonicalWorkspace;\n}\n\nexport function applyWorkspaceFileSync(\n targetPath: string,\n canonicalWorkspace: string | null,\n): void {\n if (canonicalWorkspace === null) {\n if (fs.existsSync(targetPath)) {\n fs.unlinkSync(targetPath);\n }\n return;\n }\n fs.writeFileSync(targetPath, canonicalWorkspace);\n}\n\nfunction stableJson(value: unknown): string {\n return `${JSON.stringify(value, null, 2)}\\n`;\n}\n\nexport type StarterToolchainSyncChange = {\n relativePath: StarterToolchainSyncPath;\n changed: boolean;\n};\n\nexport function diffStarterToolchainFiles(\n starterDir: string,\n canonicalFiles: Map<StarterToolchainSyncPath, string>,\n): StarterToolchainSyncChange[] {\n return STARTER_TOOLCHAIN_SYNC_PATHS.map((relativePath) => {\n const canonicalContent = canonicalFiles.get(relativePath) ?? null;\n const targetPath = path.join(starterDir, relativePath);\n const existingContent = fs.existsSync(targetPath)\n ? fs.readFileSync(targetPath, \"utf-8\")\n : null;\n return {\n relativePath,\n changed: existingContent !== canonicalContent,\n };\n });\n}\n\nexport function applyStarterToolchainSync(\n starterDir: string,\n canonicalFiles: Map<StarterToolchainSyncPath, string>,\n): StarterToolchainSyncChange[] {\n const changes: StarterToolchainSyncChange[] = [];\n for (const relativePath of STARTER_TOOLCHAIN_SYNC_PATHS) {\n const canonicalContent = canonicalFiles.get(relativePath) ?? null;\n const targetPath = path.join(starterDir, relativePath);\n const existingContent = fs.existsSync(targetPath)\n ? fs.readFileSync(targetPath, \"utf-8\")\n : null;\n const changed = existingContent !== canonicalContent;\n if (changed) {\n if (canonicalContent === null) {\n if (fs.existsSync(targetPath)) {\n fs.unlinkSync(targetPath);\n }\n } else {\n fs.mkdirSync(path.dirname(targetPath), { recursive: true });\n fs.writeFileSync(targetPath, canonicalContent);\n }\n }\n changes.push({ relativePath, changed });\n }\n return changes;\n}\n\nexport type SyncStarterManifestResult = {\n changed: boolean;\n packageChanged: boolean;\n workspaceChanged: boolean;\n packageJson: PackageJson;\n pnpmWorkspaceYaml: string | null;\n toolchainChanges: StarterToolchainSyncChange[];\n changedToolchainPaths: StarterToolchainSyncPath[];\n};\n\nexport function resolveStarterPaths(options: {\n starterDir?: string;\n starterPackageJsonPath?: string;\n starterPnpmWorkspacePath?: string;\n}): {\n starterDir: string;\n starterPackageJsonPath: string;\n starterPnpmWorkspacePath: string;\n} {\n if (options.starterDir) {\n return {\n starterDir: path.resolve(options.starterDir),\n starterPackageJsonPath: path.join(\n path.resolve(options.starterDir),\n \"package.json\",\n ),\n starterPnpmWorkspacePath: path.join(\n path.resolve(options.starterDir),\n \"pnpm-workspace.yaml\",\n ),\n };\n }\n if (!options.starterPackageJsonPath) {\n throw new Error(\"Provide --starter-dir or --starter-package-json.\");\n }\n const starterPackageJsonPath = path.resolve(options.starterPackageJsonPath);\n return {\n starterDir: path.dirname(starterPackageJsonPath),\n starterPackageJsonPath,\n starterPnpmWorkspacePath:\n options.starterPnpmWorkspacePath ??\n path.join(path.dirname(starterPackageJsonPath), \"pnpm-workspace.yaml\"),\n };\n}\n\nexport function syncStarterManifestFiles(options: {\n starterDir?: string;\n starterPackageJsonPath?: string;\n starterPnpmWorkspacePath?: string;\n repoRoot?: string;\n write?: boolean;\n}): SyncStarterManifestResult {\n const { starterDir, starterPackageJsonPath, starterPnpmWorkspacePath } =\n resolveStarterPaths(options);\n const snapshot = createStandaloneChatSnapshot(options.repoRoot);\n\n try {\n const starterPackageJson = JSON.parse(\n fs.readFileSync(starterPackageJsonPath, \"utf-8\"),\n ) as PackageJson;\n const mergedPackageJson = mergeStarterManifest(\n starterPackageJson,\n snapshot.packageJson,\n );\n\n const existingWorkspace = fs.existsSync(starterPnpmWorkspacePath)\n ? fs.readFileSync(starterPnpmWorkspacePath, \"utf-8\")\n : null;\n\n const workspaceChanged = workspaceFileSyncChanged(\n existingWorkspace,\n snapshot.pnpmWorkspaceYaml,\n );\n const packageChanged =\n stableJson(starterPackageJson) !== stableJson(mergedPackageJson);\n const toolchainChanges = diffStarterToolchainFiles(\n starterDir,\n snapshot.toolchainFiles,\n );\n const changedToolchainPaths = toolchainChanges\n .filter((change) => change.changed)\n .map((change) => change.relativePath);\n const changed =\n packageChanged || workspaceChanged || changedToolchainPaths.length > 0;\n\n if (options.write && changed) {\n if (packageChanged) {\n fs.writeFileSync(starterPackageJsonPath, stableJson(mergedPackageJson));\n }\n if (workspaceChanged) {\n applyWorkspaceFileSync(\n starterPnpmWorkspacePath,\n snapshot.pnpmWorkspaceYaml,\n );\n }\n if (changedToolchainPaths.length > 0) {\n applyStarterToolchainSync(starterDir, snapshot.toolchainFiles);\n }\n }\n\n return {\n changed,\n packageChanged,\n workspaceChanged,\n packageJson: mergedPackageJson,\n pnpmWorkspaceYaml: snapshot.pnpmWorkspaceYaml,\n toolchainChanges,\n changedToolchainPaths,\n };\n } finally {\n snapshot.cleanup();\n }\n}\n\nexport function parseSyncStarterManifestArgs(argv: string[]): {\n command: \"merge\" | \"generate\" | \"paths\";\n starterDir?: string;\n starterPackageJsonPath?: string;\n starterPnpmWorkspacePath?: string;\n write: boolean;\n repoRoot?: string;\n} {\n const [commandRaw, ...rest] = argv;\n const command =\n commandRaw === \"generate\"\n ? \"generate\"\n : commandRaw === \"paths\"\n ? \"paths\"\n : \"merge\";\n let starterDir: string | undefined;\n let starterPackageJsonPath: string | undefined;\n let starterPnpmWorkspacePath: string | undefined;\n let write = false;\n let repoRoot: string | undefined;\n\n for (let i = 0; i < rest.length; i++) {\n const arg = rest[i];\n if (arg === \"--write\") {\n write = true;\n continue;\n }\n if (arg === \"--starter-dir\") {\n starterDir = rest[++i];\n continue;\n }\n if (arg === \"--starter-package-json\") {\n starterPackageJsonPath = rest[++i];\n continue;\n }\n if (arg === \"--starter-pnpm-workspace\") {\n starterPnpmWorkspacePath = rest[++i];\n continue;\n }\n if (arg === \"--repo-root\") {\n repoRoot = rest[++i];\n continue;\n }\n throw new Error(`Unknown argument: ${arg}`);\n }\n\n if (command === \"merge\" && !starterDir && !starterPackageJsonPath) {\n throw new Error(\n \"merge requires --starter-dir <path> or --starter-package-json <path> [--starter-pnpm-workspace <path>] [--write] [--repo-root <path>]\",\n );\n }\n\n return {\n command,\n starterDir,\n starterPackageJsonPath,\n starterPnpmWorkspacePath,\n write,\n repoRoot,\n };\n}\n\nexport function runSyncStarterManifestCli(argv: string[]): number {\n const args = parseSyncStarterManifestArgs(argv);\n\n if (args.command === \"generate\") {\n const { packageJson, pnpmWorkspaceYaml } = generateStandaloneChatManifest(\n args.repoRoot,\n );\n process.stdout.write(stableJson(packageJson));\n if (pnpmWorkspaceYaml) {\n process.stdout.write(\"\\n--- pnpm-workspace.yaml ---\\n\");\n process.stdout.write(pnpmWorkspaceYaml);\n }\n return 0;\n }\n\n if (args.command === \"paths\") {\n for (const syncPath of listStarterSyncPaths()) {\n process.stdout.write(`${syncPath}\\n`);\n }\n return 0;\n }\n\n const result = syncStarterManifestFiles({\n starterDir: args.starterDir,\n starterPackageJsonPath: args.starterPackageJsonPath,\n starterPnpmWorkspacePath: args.starterPnpmWorkspacePath,\n repoRoot: args.repoRoot,\n write: args.write,\n });\n\n if (result.changed) {\n const updatedPaths = [\n ...(result.packageChanged ? [\"package.json\"] : []),\n ...(result.workspaceChanged ? [\"pnpm-workspace.yaml\"] : []),\n ...result.changedToolchainPaths,\n ];\n const summary = updatedPaths.length ? ` (${updatedPaths.join(\", \")})` : \"\";\n console.log(\n args.write\n ? `Updated builder-agent-native-starter from templates/chat${summary}.`\n : `builder-agent-native-starter is out of date with templates/chat${summary}.`,\n );\n return args.write ? 0 : 1;\n }\n\n console.log(\"builder-agent-native-starter already matches templates/chat.\");\n return 0;\n}\n\nconst isDirectRun =\n process.argv[1] &&\n path.resolve(process.argv[1]) ===\n path.resolve(fileURLToPath(import.meta.url));\n\nif (isDirectRun) {\n const exitCode = runSyncStarterManifestCli(process.argv.slice(2));\n process.exit(exitCode);\n}\n"]}
|
|
@@ -39,7 +39,9 @@ export declare function settleInterruptedAssistantToolCallsInRepo<T extends {
|
|
|
39
39
|
changed: boolean;
|
|
40
40
|
};
|
|
41
41
|
export declare function reconnectActivityFallbackContent(toolName: string | null | undefined): ContentPart[];
|
|
42
|
-
export declare function dedupeReconnectContentAgainstMessages(content: ContentPart[], messages: readonly unknown[]
|
|
42
|
+
export declare function dedupeReconnectContentAgainstMessages(content: ContentPart[], messages: readonly unknown[], options?: {
|
|
43
|
+
suppressToolRepeats?: boolean;
|
|
44
|
+
}): ContentPart[];
|
|
43
45
|
export declare function latestNonRecoveryUserMessageText(messages: readonly unknown[]): string;
|
|
44
46
|
export declare function resolveAssistantChatSubmitIntent({ isRunning, requestedIntent, }: {
|
|
45
47
|
isRunning: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AssistantChat.d.ts","sourceRoot":"","sources":["../../src/client/AssistantChat.tsx"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAEV,gBAAgB,EAChB,yBAAyB,EAC1B,MAAM,qBAAqB,CAAC;AAU7B,OAAO,KASN,MAAM,OAAO,CAAC;AAGf,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAYrE,OAAO,EAEL,KAAK,oBAAoB,EAC1B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAQL,KAAK,oBAAoB,EAC1B,MAAM,iBAAiB,CAAC;AAwCzB,OAAO,EAQL,KAAK,sBAAsB,EAG5B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAEL,KAAK,gBAAgB,EACtB,MAAM,mBAAmB,CAAC;AAyB3B,OAAO,EAEL,KAAK,oBAAoB,EACzB,KAAK,sBAAsB,EAE5B,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EACV,0BAA0B,EAE3B,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAEL,KAAK,6BAA6B,EACnC,MAAM,0BAA0B,CAAC;AAKlC,OAAO,EAEL,KAAK,WAAW,EAIjB,MAAM,0BAA0B,CAAC;AAKlC,OAAO,KAAK,EACV,eAAe,EACf,kBAAkB,EACnB,MAAM,uBAAuB,CAAC;AAI/B,OAAO,EACL,iCAAiC,EACjC,kCAAkC,EAClC,qCAAqC,EACrC,mCAAmC,EACnC,4BAA4B,GAC7B,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAO1E,MAAM,MAAM,gBAAgB,GAAG,KAAK,GAAG,MAAM,CAAC;AAC9C,MAAM,MAAM,mBAAmB,GAAG,UAAU,GAAG,OAAO,CAAC;AACvD,MAAM,WAAW,wBAAwB;IACvC,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,WAAW,CAAC,EAAE,gBAAgB,CAAC;CAChC;AA2HD;;;;;;;;GAQG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE;IAC9C,cAAc,EAAE,MAAM,CAAC;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,GAAG,OAAO,CAGV;AA8BD,wBAAgB,yCAAyC,CACvD,CAAC,SAAS;IAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAA;CAAE,EAClC,IAAI,EAAE,CAAC,GAAG;IAAE,IAAI,EAAE,CAAC,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAkCxC;AA8LD,wBAAgB,gCAAgC,CAC9C,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAClC,WAAW,EAAE,CAaf;
|
|
1
|
+
{"version":3,"file":"AssistantChat.d.ts","sourceRoot":"","sources":["../../src/client/AssistantChat.tsx"],"names":[],"mappings":"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"}
|
|
@@ -333,6 +333,19 @@ function toolCallFingerprintFromContentPart(part) {
|
|
|
333
333
|
return null;
|
|
334
334
|
return `${name}\u0000${argsText}`;
|
|
335
335
|
}
|
|
336
|
+
function toolCallNameFromContentPart(part) {
|
|
337
|
+
if (!part || typeof part !== "object")
|
|
338
|
+
return null;
|
|
339
|
+
const candidate = part;
|
|
340
|
+
if (candidate.type !== "tool-call")
|
|
341
|
+
return null;
|
|
342
|
+
return typeof candidate.toolName === "string" && candidate.toolName
|
|
343
|
+
? candidate.toolName
|
|
344
|
+
: null;
|
|
345
|
+
}
|
|
346
|
+
function toolCallIdsRepresentSameLocalCall(renderedId, reconnectId) {
|
|
347
|
+
return renderedId === reconnectId || renderedId.endsWith(`:${reconnectId}`);
|
|
348
|
+
}
|
|
336
349
|
function collectRenderedToolCallStates(messages) {
|
|
337
350
|
const byId = new Map();
|
|
338
351
|
for (const message of messages) {
|
|
@@ -352,22 +365,42 @@ function collectRenderedToolCallStates(messages) {
|
|
|
352
365
|
}
|
|
353
366
|
}
|
|
354
367
|
const latestAssistantByFingerprint = new Map();
|
|
368
|
+
const latestAssistantByName = new Map();
|
|
355
369
|
const latestEntry = messages.at(-1);
|
|
356
370
|
const latestMessage = getRepoMessage(latestEntry);
|
|
357
371
|
const latestContent = latestMessage?.content;
|
|
358
372
|
if (latestMessage?.role === "assistant" && Array.isArray(latestContent)) {
|
|
359
373
|
for (const part of latestContent) {
|
|
360
|
-
const fingerprint = toolCallFingerprintFromContentPart(part);
|
|
361
|
-
if (!fingerprint)
|
|
362
|
-
continue;
|
|
363
374
|
const rank = toolCallProgressRank(part);
|
|
364
|
-
const
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
375
|
+
const fingerprint = toolCallFingerprintFromContentPart(part);
|
|
376
|
+
if (fingerprint) {
|
|
377
|
+
const existing = latestAssistantByFingerprint.get(fingerprint);
|
|
378
|
+
latestAssistantByFingerprint.set(fingerprint, {
|
|
379
|
+
rank: Math.max(existing?.rank ?? 0, rank),
|
|
380
|
+
});
|
|
381
|
+
}
|
|
382
|
+
const name = toolCallNameFromContentPart(part);
|
|
383
|
+
if (name) {
|
|
384
|
+
const existing = latestAssistantByName.get(name);
|
|
385
|
+
const id = toolCallIdFromContentPart(part);
|
|
386
|
+
const ids = new Set(existing?.ids);
|
|
387
|
+
const pendingIds = new Set(existing?.pendingIds);
|
|
388
|
+
if (id)
|
|
389
|
+
ids.add(id);
|
|
390
|
+
if (id && rank < 4)
|
|
391
|
+
pendingIds.add(id);
|
|
392
|
+
latestAssistantByName.set(name, {
|
|
393
|
+
rank: Math.max(existing?.rank ?? 0, rank),
|
|
394
|
+
ids,
|
|
395
|
+
pendingIds,
|
|
396
|
+
pendingRank: rank < 4
|
|
397
|
+
? Math.max(existing?.pendingRank ?? 0, rank)
|
|
398
|
+
: (existing?.pendingRank ?? 0),
|
|
399
|
+
});
|
|
400
|
+
}
|
|
368
401
|
}
|
|
369
402
|
}
|
|
370
|
-
return { byId, latestAssistantByFingerprint };
|
|
403
|
+
return { byId, latestAssistantByFingerprint, latestAssistantByName };
|
|
371
404
|
}
|
|
372
405
|
function assistantTextFromContent(content) {
|
|
373
406
|
if (typeof content === "string")
|
|
@@ -436,26 +469,33 @@ function trimReconnectTextAlreadyRendered(content, renderedAssistantText) {
|
|
|
436
469
|
}
|
|
437
470
|
return changed ? next : content;
|
|
438
471
|
}
|
|
439
|
-
export function dedupeReconnectContentAgainstMessages(content, messages) {
|
|
472
|
+
export function dedupeReconnectContentAgainstMessages(content, messages, options) {
|
|
440
473
|
if (content.length === 0)
|
|
441
474
|
return content;
|
|
442
475
|
const snapshotDeduped = dedupePendingToolCallReplaysWithinContent(content);
|
|
443
476
|
let changed = snapshotDeduped !== content;
|
|
444
477
|
if (messages.length === 0)
|
|
445
478
|
return changed ? snapshotDeduped : content;
|
|
446
|
-
const { byId, latestAssistantByFingerprint } = collectRenderedToolCallStates(messages);
|
|
479
|
+
const { byId, latestAssistantByFingerprint, latestAssistantByName } = collectRenderedToolCallStates(messages);
|
|
447
480
|
const renderedAssistantText = latestRenderedAssistantText(messages);
|
|
448
481
|
if (byId.size === 0 &&
|
|
449
482
|
latestAssistantByFingerprint.size === 0 &&
|
|
483
|
+
latestAssistantByName.size === 0 &&
|
|
450
484
|
!renderedAssistantText) {
|
|
451
485
|
return changed ? snapshotDeduped : content;
|
|
452
486
|
}
|
|
453
|
-
const filtered = byId.size > 0 ||
|
|
487
|
+
const filtered = byId.size > 0 ||
|
|
488
|
+
latestAssistantByFingerprint.size > 0 ||
|
|
489
|
+
latestAssistantByName.size > 0
|
|
454
490
|
? snapshotDeduped.filter((part) => {
|
|
455
491
|
const reconnectRank = toolCallProgressRank(part);
|
|
456
492
|
const id = toolCallIdFromContentPart(part);
|
|
457
493
|
const existing = id ? byId.get(id) : undefined;
|
|
458
494
|
if (existing) {
|
|
495
|
+
if (options?.suppressToolRepeats) {
|
|
496
|
+
changed = true;
|
|
497
|
+
return false;
|
|
498
|
+
}
|
|
459
499
|
// Keep reconnect copies that are strictly ahead of the rendered
|
|
460
500
|
// message (e.g. completed overlay vs lagging pending thread data).
|
|
461
501
|
// Same-or-behind ranks are duplicates and should stay hidden.
|
|
@@ -476,12 +516,49 @@ export function dedupeReconnectContentAgainstMessages(content, messages) {
|
|
|
476
516
|
? latestAssistantByFingerprint.get(fingerprint)
|
|
477
517
|
: undefined;
|
|
478
518
|
const isCompletedRepeat = reconnectRank >= 4 && latestByFingerprint?.rank === 4;
|
|
519
|
+
const keepCompletedRepeat = isCompletedRepeat && !options?.suppressToolRepeats;
|
|
520
|
+
if (latestByFingerprint && options?.suppressToolRepeats) {
|
|
521
|
+
changed = true;
|
|
522
|
+
return false;
|
|
523
|
+
}
|
|
479
524
|
if (latestByFingerprint &&
|
|
480
|
-
!
|
|
525
|
+
!keepCompletedRepeat &&
|
|
481
526
|
reconnectRank <= latestByFingerprint.rank) {
|
|
482
527
|
changed = true;
|
|
483
528
|
return false;
|
|
484
529
|
}
|
|
530
|
+
// Activity / arg-less fallback. A reconnect spinner (activity===true)
|
|
531
|
+
// or a pending tool whose args have not materialized yet has no
|
|
532
|
+
// fingerprint, and its reader-local id (`tc_N`) never matches the
|
|
533
|
+
// server-scoped id (`${runId}:tc_N`) rendered in the message, so it
|
|
534
|
+
// slips past BOTH checks above and paints a second card beside the
|
|
535
|
+
// live one ("one spinning, one static"). Suppress it only when the
|
|
536
|
+
// latest assistant message renders the same tool that is ITSELF still
|
|
537
|
+
// pending (rank < 4) at an equal-or-greater rank: a spinner alongside
|
|
538
|
+
// a live pending card is the same in-flight call seen by two readers.
|
|
539
|
+
// If the rendered same-name tool is already completed, a fresh spinner
|
|
540
|
+
// is more likely a genuinely repeated call, so it must stay visible
|
|
541
|
+
// (an empty-args fingerprint would over-match — see the completed
|
|
542
|
+
// repeat cases below).
|
|
543
|
+
if (!fingerprint) {
|
|
544
|
+
const name = toolCallNameFromContentPart(part);
|
|
545
|
+
const latestByName = name
|
|
546
|
+
? latestAssistantByName.get(name)
|
|
547
|
+
: undefined;
|
|
548
|
+
const matchesRenderedLocalId = id && latestByName
|
|
549
|
+
? Array.from(latestByName.ids).some((renderedId) => toolCallIdsRepresentSameLocalCall(renderedId, id))
|
|
550
|
+
: false;
|
|
551
|
+
const matchesRenderedPendingLocalId = id && latestByName
|
|
552
|
+
? Array.from(latestByName.pendingIds).some((renderedId) => toolCallIdsRepresentSameLocalCall(renderedId, id))
|
|
553
|
+
: false;
|
|
554
|
+
if (latestByName &&
|
|
555
|
+
matchesRenderedLocalId &&
|
|
556
|
+
matchesRenderedPendingLocalId &&
|
|
557
|
+
reconnectRank <= latestByName.pendingRank) {
|
|
558
|
+
changed = true;
|
|
559
|
+
return false;
|
|
560
|
+
}
|
|
561
|
+
}
|
|
485
562
|
return true;
|
|
486
563
|
})
|
|
487
564
|
: snapshotDeduped;
|
|
@@ -2446,8 +2523,9 @@ const AssistantChatInner = forwardRef(function AssistantChatInner({ emptyStateTe
|
|
|
2446
2523
|
setAdapterHandoffPending(false);
|
|
2447
2524
|
return;
|
|
2448
2525
|
}
|
|
2449
|
-
const stillNeeded = dedupeReconnectContentAgainstMessages(reconnectContent, messages
|
|
2450
|
-
|
|
2526
|
+
const stillNeeded = dedupeReconnectContentAgainstMessages(reconnectContent, messages, {
|
|
2527
|
+
suppressToolRepeats: true,
|
|
2528
|
+
}).length > 0;
|
|
2451
2529
|
if (!stillNeeded) {
|
|
2452
2530
|
setReconnectContent([]);
|
|
2453
2531
|
setAdapterHandoffPending(false);
|
|
@@ -2898,7 +2976,10 @@ const AssistantChatInner = forwardRef(function AssistantChatInner({ emptyStateTe
|
|
|
2898
2976
|
messages.length,
|
|
2899
2977
|
stageComposerContextItem,
|
|
2900
2978
|
]);
|
|
2901
|
-
|
|
2979
|
+
// Do not memoize this on `messages` identity. assistant-ui can update the
|
|
2980
|
+
// live assistant message content in place while streaming, and the reconnect
|
|
2981
|
+
// overlay must hide as soon as that live message has caught up.
|
|
2982
|
+
const visibleReconnectContent = dedupeReconnectContentAgainstMessages(reconnectContent, messages, { suppressToolRepeats: adapterHandoffPending });
|
|
2902
2983
|
const chatScrollResetKey = `${tabId ?? ""}:${threadId ?? ""}`;
|
|
2903
2984
|
const { isDevMode: cpDevMode } = useDevMode(apiUrl);
|
|
2904
2985
|
const checkpointCtx = useMemo(() => ({ apiUrl, devMode: cpDevMode, threadId }), [apiUrl, cpDevMode, threadId]);
|