diff --git a/renderers/angular/package.json b/renderers/angular/package.json index be6ea386b..bf145e82f 100644 --- a/renderers/angular/package.json +++ b/renderers/angular/package.json @@ -1,10 +1,27 @@ { "name": "@a2ui/angular", - "version": "0.8.5", + "version": "0.9.0", "license": "Apache-2.0", + "homepage": "https://a2ui.org/", + "repository": { + "directory": "renderers/angular", + "type": "git", + "url": "git+https://github.com/google/A2UI.git" + }, + "bugs": { + "url": "https://github.com/google/A2UI/issues" + }, + "keywords": [ + "a2ui", + "angular", + "ai", + "agent", + "ui", + "renderer" + ], "scripts": { "generate-examples": "node scripts/generate-examples.mjs", - "build": "npm run generate-examples && ng build && node postprocess-build.mjs", + "build": "npm run generate-examples && ng build && node ../scripts/prepare-publish.mjs --source ./dist/package.json --skip-path-adjustment", "prepublishOnly": "node -e \"if(!process.cwd().endsWith('dist')) { console.error('Error: This package must be published from the dist/ directory. Run `npm run build` then `npm publish dist/`'); process.exit(1); }\"", "publish:package": "npm run build && npm publish dist/ --access public", "demo": "npm run generate-examples && ng serve a2ui_explorer", diff --git a/renderers/angular/postprocess-build.mjs b/renderers/angular/postprocess-build.mjs deleted file mode 100644 index c3960318b..000000000 --- a/renderers/angular/postprocess-build.mjs +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright 2025 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { readFileSync, writeFileSync, copyFileSync } from 'fs'; -import { join } from 'path'; - -// Locally we depend on the Core package via a relative path so we can test it from source. -// This breaks when published to npm so the following script updates the version to the npm one. - -const dirname = import.meta.dirname; -const coreVersion = parsePackageJson(join(dirname, '../web_core/package.json')).version; - -if (!coreVersion) { - throw new Error('Cannot determine version of Core package'); -} - -const packageJsonPath = join(dirname, './dist/package.json'); -const packageJson = parsePackageJson(packageJsonPath); - -if (!packageJson.dependencies['@a2ui/web_core']) { - throw new Error( - 'Angular package does not depend on the Core library. ' + - 'Either update the package.json or remove this script.', - ); -} - -packageJson.dependencies['@a2ui/web_core'] = '^' + coreVersion; - -// Remove scripts and properties that should not be in the published package -delete packageJson.scripts; -delete packageJson.prepublishOnly; -delete packageJson.files; - -writeFileSync(packageJsonPath, JSON.stringify(packageJson, undefined, 2)); - -copyFileSync(join(dirname, '../../LICENSE'), join(dirname, './dist/LICENSE')); - -function parsePackageJson(path) { - const content = readFileSync(path, 'utf8'); - return JSON.parse(content); -} diff --git a/renderers/lit/package.json b/renderers/lit/package.json index 05602c37c..6894d5516 100644 --- a/renderers/lit/package.json +++ b/renderers/lit/package.json @@ -1,7 +1,26 @@ { "name": "@a2ui/lit", - "version": "0.8.4", + "version": "0.9.0", "description": "A2UI Lit Library", + "author": "Google", + "license": "Apache-2.0", + "homepage": "https://a2ui.org/", + "repository": { + "directory": "renderers/lit", + "type": "git", + "url": "git+https://github.com/google/A2UI.git" + }, + "bugs": { + "url": "https://github.com/google/A2UI/issues" + }, + "keywords": [ + "a2ui", + "lit", + "ai", + "agent", + "ui", + "renderer" + ], "main": "./dist/src/index.js", "types": "./dist/src/index.d.ts", "exports": { @@ -29,7 +48,7 @@ "type": "module", "scripts": { "prepublishOnly": "node -e \"if(!process.cwd().endsWith('dist')) { console.error('Error: This package must be published from the dist/ directory. Run `npm run build` then `npm publish dist/`'); process.exit(1); }\"", - "publish:package": "npm run build && node prepare-publish.mjs && npm publish dist/ --access public", + "publish:package": "npm run build && node ../scripts/prepare-publish.mjs && npm publish dist/ --access public", "build": "wireit", "build:tsc": "wireit", "dev": "npm run serve --watch", @@ -72,21 +91,9 @@ "clean": "if-file-deleted" } }, - "repository": { - "directory": "renderers/lit", - "type": "git", - "url": "git+https://github.com/google/A2UI.git" - }, "files": [ "dist/src" ], - "keywords": [], - "author": "Google", - "license": "Apache-2.0", - "bugs": { - "url": "https://github.com/google/A2UI/issues" - }, - "homepage": "https://github.com/google/A2UI/tree/main/web#readme", "devDependencies": { "@types/jsdom": "^28.0.1", "@types/node": "^24.10.1", diff --git a/renderers/lit/prepare-publish.mjs b/renderers/lit/prepare-publish.mjs deleted file mode 100644 index dbb4f71c2..000000000 --- a/renderers/lit/prepare-publish.mjs +++ /dev/null @@ -1,98 +0,0 @@ -/** - * Copyright 2026 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { readFileSync, writeFileSync, copyFileSync, mkdirSync, existsSync } from 'fs'; -import { join } from 'path'; - -// This script prepares the Lit package for publishing by: -// 1. Copying package.json to dist/ -// 2. Updating @a2ui/web_core dependency from 'file:...' to the actual version -// 3. Adjusting paths in package.json (main, types, exports) to be relative to dist/ - -const dirname = import.meta.dirname; -const corePkgPath = join(dirname, '../web_core/package.json'); -const litPkgPath = join(dirname, './package.json'); -const distDir = join(dirname, './dist'); - -if (!existsSync(distDir)) { - mkdirSync(distDir, { recursive: true }); -} - -// 1. Get Core Version -const corePkg = JSON.parse(readFileSync(corePkgPath, 'utf8')); -const coreVersion = corePkg.version; -if (!coreVersion) throw new Error('Cannot determine @a2ui/web_core version'); - -// 2. Read Lit Package -const litPkg = JSON.parse(readFileSync(litPkgPath, 'utf8')); - -// 3. Update Dependency -if (litPkg.dependencies && litPkg.dependencies['@a2ui/web_core']) { - litPkg.dependencies['@a2ui/web_core'] = '^' + coreVersion; -} else { - console.warn('Warning: @a2ui/web_core not found in dependencies.'); -} - -// 4. Adjust Paths for Dist -litPkg.main = adjustPath(litPkg.main); -litPkg.types = adjustPath(litPkg.types); - -if (litPkg.exports) { - for (const key in litPkg.exports) { - const exp = litPkg.exports[key]; - if (typeof exp === 'string') { - litPkg.exports[key] = adjustPath(exp); - } else { - if (exp.types) exp.types = adjustPath(exp.types); - if (exp.default) exp.default = adjustPath(exp.default); - if (exp.import) exp.import = adjustPath(exp.import); - if (exp.require) exp.require = adjustPath(exp.require); - } - } -} - -// Remove properties that should not be in the published package -delete litPkg.scripts; -delete litPkg.wireit; -delete litPkg.files; -delete litPkg.prepublishOnly; - -// 5. Write to dist/package.json -writeFileSync(join(distDir, 'package.json'), JSON.stringify(litPkg, null, 2)); - -// 6. Copy README and LICENSE -const readmeSrc = join(dirname, 'README.md'); -const licenseSrc = join(dirname, '../../LICENSE'); - -if (!existsSync(readmeSrc)) { - throw new Error(`Missing required file for publishing: README.md`); -} -copyFileSync(readmeSrc, join(distDir, 'README.md')); - -if (!existsSync(licenseSrc)) { - throw new Error(`Missing required file for publishing: LICENSE`); -} -copyFileSync(licenseSrc, join(distDir, 'LICENSE')); - -console.log(`Prepared dist/package.json with @a2ui/web_core@${coreVersion}`); - -// Utility function to adjustthe paths of the built files (dist/src/*) to (src/*) -function adjustPath(p) { - if (p && p.startsWith('./dist/')) { - return './' + p.substring(7); // Remove ./dist/ - } - return p; -} \ No newline at end of file diff --git a/renderers/markdown/markdown-it/package-lock.json b/renderers/markdown/markdown-it/package-lock.json index 007d7bb7b..a670bb61f 100644 --- a/renderers/markdown/markdown-it/package-lock.json +++ b/renderers/markdown/markdown-it/package-lock.json @@ -29,7 +29,7 @@ }, "../../web_core": { "name": "@a2ui/web_core", - "version": "0.8.8", + "version": "0.8.1", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -42,6 +42,7 @@ "@angular/core": "^21.2.5", "@types/node": "^24.11.0", "c8": "^11.0.0", + "google-artifactregistry-auth": "^3.5.0", "gts": "^7.0.0", "rxjs": "^7.8.2", "typescript": "^5.8.3", diff --git a/renderers/markdown/markdown-it/package.json b/renderers/markdown/markdown-it/package.json index 19d056145..e5e5888c8 100644 --- a/renderers/markdown/markdown-it/package.json +++ b/renderers/markdown/markdown-it/package.json @@ -2,16 +2,22 @@ "name": "@a2ui/markdown-it", "version": "0.0.2", "description": "A Markdown renderer using markdown-it and dompurify.", - "keywords": [], - "homepage": "https://github.com/google/A2UI/tree/main/web#readme", - "bugs": { - "url": "https://github.com/google/A2UI/issues" - }, "repository": { + "directory": "renderers/markdown/markdown-it", "type": "git", - "url": "git+https://github.com/google/A2UI.git", - "directory": "renderers/markdown/markdown-it" + "url": "git+https://github.com/google/A2UI.git" }, + "bugs": { + "url": "https://github.com/google/A2UI/issues" + }, + "keywords": [ + "a2ui", + "markdown", + "ai", + "agent", + "ui", + "renderer" + ], "license": "Apache-2.0", "author": "Google", "type": "module", diff --git a/renderers/markdown/markdown-it/prepare-publish.mjs b/renderers/markdown/markdown-it/prepare-publish.mjs index 04e3b85af..43f2ae2c1 100644 --- a/renderers/markdown/markdown-it/prepare-publish.mjs +++ b/renderers/markdown/markdown-it/prepare-publish.mjs @@ -41,13 +41,13 @@ const pkg = JSON.parse(readFileSync(pkgPath, 'utf8')); // 3. Update Dependency if (pkg.peerDependencies && pkg.peerDependencies['@a2ui/web_core']) { - pkg.peerDependencies['@a2ui/web_core'] = '^' + coreVersion; + pkg.peerDependencies['@a2ui/web_core'] = coreVersion; } else { - console.warn('Warning: @a2ui/web_core not found in peerDependencies.'); + throw new Error('Error: @a2ui/web_core not found in peerDependencies. This is a mandatory dependency for publishing.'); } if (pkg.devDependencies && pkg.devDependencies['@a2ui/web_core']) { // We can just remove devDependencies for the published package, or update it - pkg.devDependencies['@a2ui/web_core'] = '^' + coreVersion; + pkg.devDependencies['@a2ui/web_core'] = coreVersion; } // 4. Adjust Paths for Dist diff --git a/renderers/react/package.json b/renderers/react/package.json index 43d6db41b..1d2771136 100644 --- a/renderers/react/package.json +++ b/renderers/react/package.json @@ -1,7 +1,24 @@ { "name": "@a2ui/react", - "version": "0.8.1", + "version": "0.9.0", "description": "React renderer for A2UI (Agent-to-User Interface)", + "homepage": "https://a2ui.org/", + "repository": { + "directory": "renderers/react", + "type": "git", + "url": "git+https://github.com/google/A2UI.git" + }, + "bugs": { + "url": "https://github.com/google/A2UI/issues" + }, + "keywords": [ + "a2ui", + "react", + "ai", + "agent", + "ui", + "renderer" + ], "type": "module", "main": "./dist/index.cjs", "module": "./dist/index.js", @@ -56,6 +73,8 @@ "*.css" ], "scripts": { + "prepublishOnly": "node -e \"if(!process.cwd().endsWith('dist')) { console.error('Error: This package must be published from the dist/ directory. Run `npm run build` then `npm publish dist/`'); process.exit(1); }\"", + "publish:package": "npm run build && node ../scripts/prepare-publish.mjs && npm publish dist/ --access public", "build": "tsup && node scripts/postbuild.mjs", "dev": "tsup --watch", "test": "vitest run", @@ -109,21 +128,7 @@ "vite": "^7.3.1", "vitest": "^4.0.18" }, - "keywords": [ - "a2ui", - "react", - "ai", - "agent", - "ui", - "renderer" - ], "engines": { "node": ">=18.0.0" - }, - "license": "Apache-2.0", - "repository": { - "type": "git", - "url": "https://github.com/google/A2UI.git", - "directory": "renderers/react" } } diff --git a/renderers/react/scripts/postbuild.mjs b/renderers/react/scripts/postbuild.mjs index df6598210..b8836344f 100644 --- a/renderers/react/scripts/postbuild.mjs +++ b/renderers/react/scripts/postbuild.mjs @@ -14,30 +14,38 @@ * limitations under the License. */ -import { copyFileSync, mkdirSync } from 'node:fs'; +import { copyFileSync, mkdirSync, existsSync } from 'node:fs'; import { join } from 'node:path'; const root = process.cwd(); const dist = join(root, 'dist'); const src = join(root, 'src'); +if (!existsSync(dist)) { + mkdirSync(dist, { recursive: true }); +} + // Function to copy a file to both .d.ts and .d.cts function copyDts(source, destinationDir) { const dts = source; const targetDts = join(destinationDir, 'index.d.ts'); const targetDcts = join(destinationDir, 'index.d.cts'); - + + if (!existsSync(destinationDir)) { + mkdirSync(destinationDir, { recursive: true }); + } + copyFileSync(dts, targetDts); copyFileSync(dts, targetDcts); } -// 1. Copy root styles declaration +// Copy root styles declaration copyDts(join(src, 'styles', 'index.d.ts'), join(dist, 'styles')); -// 2. Create v0_8 styles directory in dist +// Create v0_8 styles directory in dist mkdirSync(join(dist, 'v0_8', 'styles'), { recursive: true }); -// 3. Copy v0_8 styles declaration +// Copy v0_8 styles declaration copyDts(join(src, 'v0_8', 'styles', 'index.d.ts'), join(dist, 'v0_8', 'styles')); console.log('Post-build style declarations copied successfully.'); diff --git a/renderers/scripts/prepare-publish.mjs b/renderers/scripts/prepare-publish.mjs new file mode 100644 index 000000000..3f3b325c8 --- /dev/null +++ b/renderers/scripts/prepare-publish.mjs @@ -0,0 +1,115 @@ +/** + * Copyright 2026 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { readFileSync, writeFileSync, copyFileSync, existsSync, mkdirSync } from 'node:fs'; +import { join, resolve } from 'node:path'; + +// This script prepares a package for publishing. +// Arguments: +// --source : Path to the source package.json (defaults to ./package.json) +// --dist : Path to the output directory (defaults to ./dist) +// --skip-path-adjustment: Skip rewriting paths to remove './dist/' prefixes + +const args = process.argv.slice(2); +let sourcePkgPath = './package.json'; +let distDir = './dist'; +let skipPathAdjustment = false; + +for (let i = 0; i < args.length; i++) { + if (args[i] === '--source') sourcePkgPath = args[++i]; + else if (args[i] === '--dist') distDir = args[++i]; + else if (args[i] === '--skip-path-adjustment') skipPathAdjustment = true; +} + +const packageDir = process.cwd(); +const resolvedSourcePkg = resolve(packageDir, sourcePkgPath); +const resolvedDistDir = resolve(packageDir, distDir); +const rootDir = resolve(packageDir, '../../'); + +if (!existsSync(resolvedDistDir)) { + mkdirSync(resolvedDistDir, { recursive: true }); +} + +// 1. Get current @a2ui/web_core version +const corePkgPath = join(rootDir, 'renderers/web_core/package.json'); +const coreVersion = JSON.parse(readFileSync(corePkgPath, 'utf8')).version; + +const pkg = JSON.parse(readFileSync(resolvedSourcePkg, 'utf8')); + +// 2. Update @a2ui/web_core dependency +if (pkg.dependencies && pkg.dependencies['@a2ui/web_core']) { + pkg.dependencies['@a2ui/web_core'] = '^' + coreVersion; +} + +// 3. Adjust paths +if (!skipPathAdjustment) { + function adjustPath(p) { + if (typeof p === 'string' && p.startsWith('./dist/')) { + return './' + p.substring(7); // Remove ./dist/ + } + return p; + } + + pkg.main = adjustPath(pkg.main); + pkg.module = adjustPath(pkg.module); + pkg.types = adjustPath(pkg.types); + + if (pkg.exports) { + for (const key in pkg.exports) { + const exp = pkg.exports[key]; + if (typeof exp === 'string') { + pkg.exports[key] = adjustPath(exp); + } else { + if (exp.types) exp.types = adjustPath(exp.types); + if (exp.default) exp.default = adjustPath(exp.default); + if (exp.import) { + if (typeof exp.import === 'string') exp.import = adjustPath(exp.import); + else { + if (exp.import.types) exp.import.types = adjustPath(exp.import.types); + if (exp.import.default) exp.import.default = adjustPath(exp.import.default); + } + } + if (exp.require) { + if (typeof exp.require === 'string') exp.require = adjustPath(exp.require); + else { + if (exp.require.types) exp.require.types = adjustPath(exp.require.types); + if (exp.require.default) exp.require.default = adjustPath(exp.require.default); + } + } + } + } + } +} + +// 4. Clean up internal fields +delete pkg.scripts; +delete pkg.wireit; +delete pkg.files; +delete pkg.prepublishOnly; +delete pkg.devDependencies; + +writeFileSync(join(resolvedDistDir, 'package.json'), JSON.stringify(pkg, null, 2)); + +// 5. Copy README and LICENSE +if (existsSync(join(packageDir, 'README.md'))) { + copyFileSync(join(packageDir, 'README.md'), join(resolvedDistDir, 'README.md')); +} +const rootLicense = join(rootDir, 'LICENSE'); +if (existsSync(rootLicense)) { + copyFileSync(rootLicense, join(resolvedDistDir, 'LICENSE')); +} + +console.log(`[prepare-publish] Prepared ${pkg.name} for publishing in ${distDir}/.`); diff --git a/renderers/web_core/package-lock.json b/renderers/web_core/package-lock.json index 0fc72bc80..17869ecb4 100644 --- a/renderers/web_core/package-lock.json +++ b/renderers/web_core/package-lock.json @@ -18,6 +18,7 @@ "@angular/core": "^21.2.5", "@types/node": "^24.11.0", "c8": "^11.0.0", + "google-artifactregistry-auth": "^3.5.0", "gts": "^7.0.0", "rxjs": "^7.8.2", "typescript": "^5.8.3", @@ -688,6 +689,16 @@ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, + "node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, "node_modules/ajv": { "version": "6.14.0", "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", @@ -780,6 +791,37 @@ "node": ">= 16" } }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/bignumber.js": { + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.3.1.tgz", + "integrity": "sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, "node_modules/binary-extensions": { "version": "2.3.0", "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", @@ -816,6 +858,13 @@ "node": ">=8" } }, + "node_modules/buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", + "dev": true, + "license": "BSD-3-Clause" + }, "node_modules/c8": { "version": "11.0.0", "integrity": "sha512-e/uRViGHSVIJv7zsaDKM7VRn2390TgHXqUSvYwPHBQaU6L7E9L0n9JbdkwdYPvshDT0KymBmmlwSpms3yBaMNg==", @@ -1075,6 +1124,16 @@ "dev": true, "license": "MIT" }, + "node_modules/ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, "node_modules/emoji-regex": { "version": "8.0.0", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", @@ -1494,6 +1553,13 @@ "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true, + "license": "MIT" + }, "node_modules/external-editor": { "version": "3.1.0", "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", @@ -1691,6 +1757,38 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/gaxios": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-6.7.1.tgz", + "integrity": "sha512-LDODD4TMYx7XXdpwxAVRAIAuB0bzv0s+ywFonY46k126qzQHT9ygyoa9tncmOiQmmDrik65UYsEkv3lbfqQ3yQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "extend": "^3.0.2", + "https-proxy-agent": "^7.0.1", + "is-stream": "^2.0.0", + "node-fetch": "^2.6.9", + "uuid": "^9.0.1" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/gcp-metadata": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-6.1.1.tgz", + "integrity": "sha512-a4tiq7E0/5fTjxPAaH4jpjkSv/uCaU2p5KC6HVGrvl0cDjA8iBZv4vv1gyzlmK0ZUKqwpOyQMKzZQe3lTit77A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "gaxios": "^6.1.1", + "google-logging-utils": "^0.0.2", + "json-bigint": "^1.0.0" + }, + "engines": { + "node": ">=14" + } + }, "node_modules/get-caller-file": { "version": "2.0.5", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", @@ -1771,12 +1869,69 @@ "dev": true, "license": "MIT" }, + "node_modules/google-artifactregistry-auth": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/google-artifactregistry-auth/-/google-artifactregistry-auth-3.5.0.tgz", + "integrity": "sha512-SIvVBPjVr0KvYFEJEZXKfELt8nvXwTKl6IHyOT7pTHBlS8Ej2UuTOJeKWYFim/JztSjUyna9pKQxa3VhTA12Fg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "google-auth-library": "^9.14.0", + "js-yaml": "^4.1.0", + "yargs": "^17.1.1" + }, + "bin": { + "artifactregistry-auth": "src/main.js" + } + }, + "node_modules/google-auth-library": { + "version": "9.15.1", + "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-9.15.1.tgz", + "integrity": "sha512-Jb6Z0+nvECVz+2lzSMt9u98UsoakXxA2HGHMCxh+so3n90XgYWkq5dur19JAJV7ONiJY22yBTyJB1TSkvPq9Ng==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "base64-js": "^1.3.0", + "ecdsa-sig-formatter": "^1.0.11", + "gaxios": "^6.1.1", + "gcp-metadata": "^6.1.0", + "gtoken": "^7.0.0", + "jws": "^4.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/google-logging-utils": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/google-logging-utils/-/google-logging-utils-0.0.2.tgz", + "integrity": "sha512-NEgUnEcBiP5HrPzufUkBzJOD/Sxsco3rLNo1F1TNf7ieU8ryUzBhqba8r756CjLX7rn3fHl6iLEwPYuqpoKgQQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=14" + } + }, "node_modules/graceful-fs": { "version": "4.2.11", "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "dev": true, "license": "ISC" }, + "node_modules/gtoken": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-7.1.0.tgz", + "integrity": "sha512-pCcEwRi+TKpMlxAQObHDQ56KawURgyAf6jtIY046fJ5tIv3zDe/LEIubckAO8fj6JnAxLdmWkUfNyulQ2iKdEw==", + "dev": true, + "license": "MIT", + "dependencies": { + "gaxios": "^6.0.0", + "jws": "^4.0.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/gts": { "version": "7.0.0", "integrity": "sha512-5Sb73zpklh7GyYRd14QUwa6+4n99b7JqECc+bS2fRYlSK40SXu7Po3//q4jBAP/CQwR+VbUPiOLxJf5zpp4Ajw==", @@ -1858,6 +2013,20 @@ "dev": true, "license": "MIT" }, + "node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, "node_modules/human-signals": { "version": "2.1.0", "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", @@ -2117,6 +2286,16 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/json-bigint": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", + "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "bignumber.js": "^9.0.0" + } + }, "node_modules/json-buffer": { "version": "3.0.1", "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", @@ -2159,6 +2338,29 @@ "dev": true, "license": "MIT" }, + "node_modules/jwa": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.1.tgz", + "integrity": "sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-equal-constant-time": "^1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jws": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.1.tgz", + "integrity": "sha512-EKI/M/yqPncGUUh44xz0PxSidXFr/+r0pA70+gIYhjv+et7yxM+s29Y+VGDkovRofQem0fs7Uvf4+YmAdyRduA==", + "dev": true, + "license": "MIT", + "dependencies": { + "jwa": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, "node_modules/keyv": { "version": "4.5.4", "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", @@ -2441,6 +2643,27 @@ "ncp": "bin/ncp" } }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, "node_modules/normalize-package-data": { "version": "3.0.3", "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", @@ -3013,6 +3236,27 @@ "tslib": "^2.1.0" } }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, "node_modules/safer-buffer": { "version": "2.1.2", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", @@ -3290,6 +3534,13 @@ "node": ">=8.0" } }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "dev": true, + "license": "MIT" + }, "node_modules/trim-newlines": { "version": "3.0.1", "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", @@ -3426,6 +3677,20 @@ "punycode": "^2.1.0" } }, + "node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "dev": true, + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, "node_modules/v8-to-istanbul": { "version": "9.3.0", "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==", @@ -3450,6 +3715,24 @@ "spdx-expression-parse": "^3.0.0" } }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dev": true, + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, "node_modules/which": { "version": "2.0.2", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", diff --git a/renderers/web_core/package.json b/renderers/web_core/package.json index 5bd4724f0..ba3cb73ea 100644 --- a/renderers/web_core/package.json +++ b/renderers/web_core/package.json @@ -1,7 +1,24 @@ { "name": "@a2ui/web_core", - "version": "0.8.8", + "version": "0.9.0", "description": "A2UI Core Library", + "homepage": "https://a2ui.org/", + "repository": { + "directory": "renderers/web_core", + "type": "git", + "url": "git+https://github.com/google/A2UI.git" + }, + "bugs": { + "url": "https://github.com/google/A2UI/issues" + }, + "keywords": [ + "a2ui", + "web", + "ai", + "agent", + "ui", + "renderer" + ], "main": "./dist/src/v0_8/index.js", "types": "./dist/src/v0_8/index.d.ts", "exports": { @@ -41,6 +58,8 @@ "src" ], "scripts": { + "prepublishOnly": "node -e \"if(!process.cwd().endsWith('dist')) { console.error('Error: This package must be published from the dist/ directory. Run `npm run build` then `npm publish dist/`'); process.exit(1); }\"", + "publish:package": "npm run build && node ../scripts/prepare-publish.mjs && npm publish dist/ --access public", "prepack": "npm run build", "build": "wireit", "build:tsc": "wireit", @@ -97,6 +116,7 @@ "@angular/core": "^21.2.5", "@types/node": "^24.11.0", "c8": "^11.0.0", + "google-artifactregistry-auth": "^3.5.0", "gts": "^7.0.0", "rxjs": "^7.8.2", "typescript": "^5.8.3",