diff --git a/.gitignore b/.gitignore index 0b911cf..c4776a4 100644 --- a/.gitignore +++ b/.gitignore @@ -25,6 +25,9 @@ dist-ssr *.sw? .qoder +# publish backup +package.json.bak + # env files .env .env.* diff --git a/AGENTS.md b/AGENTS.md index 5252909..8a0309e 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -21,7 +21,7 @@ Internal packages: npm start # Start website dev server npm run build # Build all packages npm run build:libs # Build all libraries -npm run lint # ESLint with TypeScript strict rules +npm run lint # ESLint npm run zip -w @page-agent/ext # Zip the extension package ``` diff --git a/package-lock.json b/package-lock.json index 206de67..3bbae75 100644 --- a/package-lock.json +++ b/package-lock.json @@ -36,7 +36,7 @@ "husky": "^9.1.7", "lint-staged": "^16.4.0", "prettier": "^3.8.1", - "typescript": "^5.9.3", + "typescript": "^6.0.2", "typescript-eslint": "^8.58.1", "unplugin-dts": "^1.0.0-beta.6", "vite": "^7.3.2", @@ -11349,9 +11349,9 @@ "license": "MIT" }, "node_modules/typescript": { - "version": "5.9.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", - "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.2.tgz", + "integrity": "sha512-bGdAIrZ0wiGDo5l8c++HWtbaNCWTS4UTv7RaTH/ThVIgjkveJt83m74bBHMJkuCbslY8ixgLBVZJIOiQlQTjfQ==", "dev": true, "license": "Apache-2.0", "bin": { diff --git a/package.json b/package.json index 725782c..0705ae6 100644 --- a/package.json +++ b/package.json @@ -33,8 +33,10 @@ "build:website": "npm run build:website --workspace=@page-agent/website", "build:ext": "npm run build:libs && npm run zip -w @page-agent/ext", "version": "node scripts/sync-version.js", + "postpublish": "npm run postpublish --workspaces --if-present", + "typecheck": "tsc --noEmit -p tsconfig.typecheck.json && tsc --noEmit -p packages/extension/tsconfig.json", "lint": "eslint .", - "cleanup": "rm -rf packages/*/dist", + "cleanup": "rm -rf packages/*/dist && rm -rf packages/*/.output", "prepare": "husky || true" }, "devDependencies": { @@ -55,7 +57,7 @@ "husky": "^9.1.7", "lint-staged": "^16.4.0", "prettier": "^3.8.1", - "typescript": "^5.9.3", + "typescript": "^6.0.2", "typescript-eslint": "^8.58.1", "unplugin-dts": "^1.0.0-beta.6", "vite": "^7.3.2", @@ -63,7 +65,7 @@ "vite-plugin-css-injected-by-js": "^4.0.1" }, "overrides": { - "typescript": "^5.9.3", + "typescript": "^6.0.2", "@vitejs/plugin-react": "^5.2.0" }, "lint-staged": { diff --git a/packages/core/package.json b/packages/core/package.json index dbafb46..202e7ab 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -3,14 +3,24 @@ "private": false, "version": "1.7.1", "type": "module", - "main": "./dist/esm/page-agent-core.js", - "module": "./dist/esm/page-agent-core.js", - "types": "./dist/esm/PageAgentCore.d.ts", + "main": "./src/PageAgentCore.ts", + "types": "./src/PageAgentCore.ts", "exports": { ".": { - "types": "./dist/esm/PageAgentCore.d.ts", - "import": "./dist/esm/page-agent-core.js", - "default": "./dist/esm/page-agent-core.js" + "types": "./src/PageAgentCore.ts", + "default": "./src/PageAgentCore.ts" + } + }, + "publishConfig": { + "main": "./dist/esm/page-agent-core.js", + "module": "./dist/esm/page-agent-core.js", + "types": "./dist/esm/PageAgentCore.d.ts", + "exports": { + ".": { + "types": "./dist/esm/PageAgentCore.d.ts", + "import": "./dist/esm/page-agent-core.js", + "default": "./dist/esm/page-agent-core.js" + } } }, "files": [ @@ -39,8 +49,8 @@ "scripts": { "build": "vite build", "dev:iife": "concurrently \"vite build --config vite.iife.config.js --watch\" \"npx serve dist/iife -p 5174\"", - "prepublishOnly": "node -e \"const fs=require('fs');['README.md','LICENSE'].forEach(f=>fs.copyFileSync('../../'+f,f))\"", - "postpublish": "node -e \"['README.md','LICENSE'].forEach(f=>{try{require('fs').unlinkSync(f)}catch{}})\"" + "prepublishOnly": "node ../../scripts/pre-publish.js", + "postpublish": "node ../../scripts/post-publish.js" }, "dependencies": { "chalk": "^5.6.2", diff --git a/packages/core/tsconfig.dts.json b/packages/core/tsconfig.dts.json deleted file mode 100644 index 70eceb9..0000000 --- a/packages/core/tsconfig.dts.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - // @workaround DTS bug - // dts do not work with monorepo path mapping - // disable path mapping for it - "paths": {} - } -} diff --git a/packages/core/tsconfig.json b/packages/core/tsconfig.json index 81291bd..d45abe9 100644 --- a/packages/core/tsconfig.json +++ b/packages/core/tsconfig.json @@ -1,22 +1,8 @@ { "extends": "../../tsconfig.base.json", "compilerOptions": { - "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.tsbuildinfo", - "noEmit": false, - "allowImportingTsExtensions": false, - "baseUrl": ".", - "outDir": "dist", - "paths": { - // - "@page-agent/llms": ["../llms/src/index.ts"], - "@page-agent/page-controller": ["../page-controller/src/PageController.ts"] - } + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.tsbuildinfo" }, - "include": ["**/*.ts"], - "exclude": ["dist", "node_modules"], - "references": [ - // - { "path": "../llms" }, - { "path": "../page-controller" } - ] + "include": ["src/**/*.ts"], + "exclude": ["dist", "node_modules"] } diff --git a/packages/core/vite.config.js b/packages/core/vite.config.js index f8d58a1..c8061a4 100644 --- a/packages/core/vite.config.js +++ b/packages/core/vite.config.js @@ -11,7 +11,15 @@ const __dirname = dirname(fileURLToPath(import.meta.url)) export default defineConfig({ clearScreen: false, plugins: [ - dts({ tsconfigPath: './tsconfig.dts.json', bundleTypes: true }), + dts({ + bundleTypes: true, + compilerOptions: { + composite: true, + noEmit: false, + emitDeclarationOnly: true, + declaration: true, + }, + }), cssInjectedByJsPlugin({ relativeCSSInjection: true }), ], publicDir: false, diff --git a/packages/extension/src/agent/TabsController.ts b/packages/extension/src/agent/TabsController.ts index 9d77ad5..f5457a5 100644 --- a/packages/extension/src/agent/TabsController.ts +++ b/packages/extension/src/agent/TabsController.ts @@ -24,7 +24,7 @@ export class TabsController { currentTabId: number | null = null private disposed = false - private port: chrome.runtime.Port | null = null + private port?: chrome.runtime.Port private portRetries = 0 private windowId: number | null = null @@ -44,7 +44,7 @@ export class TabsController { this.currentTabId = null this.disposed = false - this.port = null + this.port = undefined this.portRetries = 0 this.windowId = null @@ -338,7 +338,7 @@ export class TabsController { }) this.port.onDisconnect.addListener(() => { - this.port = null + this.port = undefined if (this.disposed) return if (this.portRetries >= 7) { console.error(PREFIX, 'tab events port failed after 7 retries, giving up') @@ -354,7 +354,7 @@ export class TabsController { debug('dispose') this.disposed = true this.port?.disconnect() - this.port = null + this.port = undefined } } diff --git a/packages/extension/tsconfig.json b/packages/extension/tsconfig.json index 98a679a..04d525d 100644 --- a/packages/extension/tsconfig.json +++ b/packages/extension/tsconfig.json @@ -3,26 +3,11 @@ "compilerOptions": { "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.tsbuildinfo", "useDefineForClassFields": true, - "noEmit": false, - "allowImportingTsExtensions": false, "strictNullChecks": true, "jsx": "react-jsx", - "baseUrl": ".", + "types": ["node", "chrome"], "paths": { - // Self root - "@/*": ["src/*"], - - "@page-agent/llms": ["../llms/src/index.ts"], - "@page-agent/page-controller": ["../page-controller/src/PageController.ts"], - "@page-agent/core": ["../core/src/PageAgentCore.ts"], - "@page-agent/ui": ["../ui/src/index.ts"] + "@/*": ["./src/*"] } - }, - "references": [ - // - { "path": "../llms" }, - { "path": "../page-controller" }, - { "path": "../core" }, - { "path": "../ui" } - ] + } } diff --git a/packages/llms/package.json b/packages/llms/package.json index abf74f9..e56a205 100644 --- a/packages/llms/package.json +++ b/packages/llms/package.json @@ -2,14 +2,24 @@ "name": "@page-agent/llms", "version": "1.7.1", "type": "module", - "main": "./dist/lib/page-agent-llms.js", - "module": "./dist/lib/page-agent-llms.js", - "types": "./dist/lib/index.d.ts", + "main": "./src/index.ts", + "types": "./src/index.ts", "exports": { ".": { - "types": "./dist/lib/index.d.ts", - "import": "./dist/lib/page-agent-llms.js", - "default": "./dist/lib/page-agent-llms.js" + "types": "./src/index.ts", + "default": "./src/index.ts" + } + }, + "publishConfig": { + "main": "./dist/lib/page-agent-llms.js", + "module": "./dist/lib/page-agent-llms.js", + "types": "./dist/lib/index.d.ts", + "exports": { + ".": { + "types": "./dist/lib/index.d.ts", + "import": "./dist/lib/page-agent-llms.js", + "default": "./dist/lib/page-agent-llms.js" + } } }, "files": [ @@ -33,8 +43,8 @@ "homepage": "https://alibaba.github.io/page-agent/", "scripts": { "build": "vite build", - "prepublishOnly": "node -e \"const fs=require('fs');['LICENSE'].forEach(f=>fs.copyFileSync('../../'+f,f))\"", - "postpublish": "node -e \"['LICENSE'].forEach(f=>{try{require('fs').unlinkSync(f)}catch{}})\"" + "prepublishOnly": "node ../../scripts/pre-publish.js", + "postpublish": "node ../../scripts/post-publish.js" }, "dependencies": { "chalk": "^5.6.2" diff --git a/packages/llms/tsconfig.dts.json b/packages/llms/tsconfig.dts.json deleted file mode 100644 index 70eceb9..0000000 --- a/packages/llms/tsconfig.dts.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - // @workaround DTS bug - // dts do not work with monorepo path mapping - // disable path mapping for it - "paths": {} - } -} diff --git a/packages/llms/tsconfig.json b/packages/llms/tsconfig.json index b6973ce..fb30544 100644 --- a/packages/llms/tsconfig.json +++ b/packages/llms/tsconfig.json @@ -1,11 +1,7 @@ { "extends": "../../tsconfig.base.json", "compilerOptions": { - "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.tsbuildinfo", - "noEmit": false, - "allowImportingTsExtensions": false, - "baseUrl": ".", - "outDir": "dist" + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.tsbuildinfo" }, "include": ["**/*.ts"], "exclude": ["dist", "node_modules"] diff --git a/packages/llms/vite.config.js b/packages/llms/vite.config.js index 13e599e..a061c36 100644 --- a/packages/llms/vite.config.js +++ b/packages/llms/vite.config.js @@ -11,7 +11,17 @@ console.log(chalk.cyan(`📦 Building @page-agent/llms`)) export default defineConfig({ clearScreen: false, - plugins: [dts({ tsconfigPath: './tsconfig.dts.json', bundleTypes: true })], + plugins: [ + dts({ + bundleTypes: true, + compilerOptions: { + composite: true, + noEmit: false, + emitDeclarationOnly: true, + declaration: true, + }, + }), + ], publicDir: false, esbuild: { keepNames: true, diff --git a/packages/page-agent/package.json b/packages/page-agent/package.json index d250da0..4bd2ed8 100644 --- a/packages/page-agent/package.json +++ b/packages/page-agent/package.json @@ -3,14 +3,24 @@ "private": false, "version": "1.7.1", "type": "module", - "main": "./dist/esm/page-agent.js", - "module": "./dist/esm/page-agent.js", - "types": "./dist/esm/PageAgent.d.ts", + "main": "./src/PageAgent.ts", + "types": "./src/PageAgent.ts", "exports": { ".": { - "types": "./dist/esm/PageAgent.d.ts", - "import": "./dist/esm/page-agent.js", - "default": "./dist/esm/page-agent.js" + "types": "./src/PageAgent.ts", + "default": "./src/PageAgent.ts" + } + }, + "publishConfig": { + "main": "./dist/esm/page-agent.js", + "module": "./dist/esm/page-agent.js", + "types": "./dist/esm/PageAgent.d.ts", + "exports": { + ".": { + "types": "./dist/esm/PageAgent.d.ts", + "import": "./dist/esm/page-agent.js", + "default": "./dist/esm/page-agent.js" + } } }, "files": [ @@ -40,8 +50,8 @@ "build": "vite build && npm run build:demo", "build:demo": "vite build --config vite.iife.config.js", "dev:demo": "concurrently \"vite build --config vite.iife.config.js --watch\" \"npx serve dist/iife -p 5174\"", - "prepublishOnly": "node -e \"const fs=require('fs');['README.md','LICENSE'].forEach(f=>fs.copyFileSync('../../'+f,f))\"", - "postpublish": "node -e \"['README.md','LICENSE'].forEach(f=>{try{require('fs').unlinkSync(f)}catch{}})\"" + "prepublishOnly": "node ../../scripts/pre-publish.js", + "postpublish": "node ../../scripts/post-publish.js" }, "dependencies": { "@page-agent/core": "1.7.1", diff --git a/packages/page-agent/tsconfig.dts.json b/packages/page-agent/tsconfig.dts.json deleted file mode 100644 index 70eceb9..0000000 --- a/packages/page-agent/tsconfig.dts.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - // @workaround DTS bug - // dts do not work with monorepo path mapping - // disable path mapping for it - "paths": {} - } -} diff --git a/packages/page-agent/tsconfig.json b/packages/page-agent/tsconfig.json index 8f1362c..d45abe9 100644 --- a/packages/page-agent/tsconfig.json +++ b/packages/page-agent/tsconfig.json @@ -1,26 +1,8 @@ { "extends": "../../tsconfig.base.json", "compilerOptions": { - "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.tsbuildinfo", - "noEmit": false, - "allowImportingTsExtensions": false, - "baseUrl": ".", - "outDir": "dist", - "paths": { - // - "@page-agent/llms": ["../llms/src/index.ts"], - "@page-agent/page-controller": ["../page-controller/src/PageController.ts"], - "@page-agent/core": ["../core/src/PageAgentCore.ts"], - "@page-agent/ui": ["../ui/src/index.ts"] - } + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.tsbuildinfo" }, - "include": ["**/*.ts"], - "exclude": ["dist", "node_modules"], - "references": [ - // - { "path": "../llms" }, - { "path": "../page-controller" }, - { "path": "../core" }, - { "path": "../ui" } - ] + "include": ["src/**/*.ts"], + "exclude": ["dist", "node_modules"] } diff --git a/packages/page-agent/vite.config.js b/packages/page-agent/vite.config.js index fe286b1..063b210 100644 --- a/packages/page-agent/vite.config.js +++ b/packages/page-agent/vite.config.js @@ -11,7 +11,15 @@ const __dirname = dirname(fileURLToPath(import.meta.url)) export default defineConfig({ clearScreen: false, plugins: [ - dts({ tsconfigPath: './tsconfig.dts.json', bundleTypes: true }), + dts({ + bundleTypes: true, + compilerOptions: { + composite: true, + noEmit: false, + emitDeclarationOnly: true, + declaration: true, + }, + }), cssInjectedByJsPlugin({ relativeCSSInjection: true }), ], publicDir: false, diff --git a/packages/page-agent/vite.iife.config.js b/packages/page-agent/vite.iife.config.js index caca982..24bb1bb 100644 --- a/packages/page-agent/vite.iife.config.js +++ b/packages/page-agent/vite.iife.config.js @@ -24,14 +24,7 @@ export default defineConfig(() => ({ esbuild: { keepNames: true, }, - resolve: { - alias: { - '@page-agent/page-controller': resolve(__dirname, '../page-controller/src/PageController.ts'), - '@page-agent/llms': resolve(__dirname, '../llms/src/index.ts'), - '@page-agent/core': resolve(__dirname, '../core/src/PageAgentCore.ts'), - '@page-agent/ui': resolve(__dirname, '../ui/src/index.ts'), - }, - }, + resolve: {}, build: { lib: { entry: resolve(__dirname, 'src/demo.ts'), diff --git a/packages/page-controller/package.json b/packages/page-controller/package.json index 5bd9d00..9ec3eb6 100644 --- a/packages/page-controller/package.json +++ b/packages/page-controller/package.json @@ -2,14 +2,24 @@ "name": "@page-agent/page-controller", "version": "1.7.1", "type": "module", - "main": "./dist/lib/page-controller.js", - "module": "./dist/lib/page-controller.js", - "types": "./dist/lib/PageController.d.ts", + "main": "./src/PageController.ts", + "types": "./src/PageController.ts", "exports": { ".": { - "types": "./dist/lib/PageController.d.ts", - "import": "./dist/lib/page-controller.js", - "default": "./dist/lib/page-controller.js" + "types": "./src/PageController.ts", + "default": "./src/PageController.ts" + } + }, + "publishConfig": { + "main": "./dist/lib/page-controller.js", + "module": "./dist/lib/page-controller.js", + "types": "./dist/lib/PageController.d.ts", + "exports": { + ".": { + "types": "./dist/lib/PageController.d.ts", + "import": "./dist/lib/page-controller.js", + "default": "./dist/lib/page-controller.js" + } } }, "files": [ @@ -32,8 +42,8 @@ "homepage": "https://alibaba.github.io/page-agent/", "scripts": { "build": "vite build", - "prepublishOnly": "node -e \"const fs=require('fs');['LICENSE'].forEach(f=>fs.copyFileSync('../../'+f,f))\"", - "postpublish": "node -e \"['LICENSE'].forEach(f=>{try{require('fs').unlinkSync(f)}catch{}})\"" + "prepublishOnly": "node ../../scripts/pre-publish.js", + "postpublish": "node ../../scripts/post-publish.js" }, "dependencies": { "ai-motion": "^0.4.8" diff --git a/packages/page-controller/src/PageController.ts b/packages/page-controller/src/PageController.ts index d058001..0369185 100644 --- a/packages/page-controller/src/PageController.ts +++ b/packages/page-controller/src/PageController.ts @@ -185,7 +185,7 @@ export class PageController extends EventTarget { const blacklist = [ ...(this.config.interactiveBlacklist || []), - ...document.querySelectorAll('[data-page-agent-not-interactive]').values(), + ...Array.from(document.querySelectorAll('[data-page-agent-not-interactive]')), ] this.flatTree = dom.getFlatTree({ diff --git a/packages/page-controller/src/dom/dom_tree/index.d.ts b/packages/page-controller/src/dom/dom_tree/index.d.ts new file mode 100644 index 0000000..4e37d52 --- /dev/null +++ b/packages/page-controller/src/dom/dom_tree/index.d.ts @@ -0,0 +1,16 @@ +import type { FlatDomTree } from './type' + +interface DomTreeArgs { + doHighlightElements?: boolean + focusHighlightIndex?: number + viewportExpansion?: number + debugMode?: boolean + interactiveBlacklist?: Element[] + interactiveWhitelist?: Element[] + highlightOpacity?: number + highlightLabelOpacity?: number +} + +declare const domTree: (args?: DomTreeArgs) => FlatDomTree + +export default domTree diff --git a/packages/page-controller/tsconfig.dts.json b/packages/page-controller/tsconfig.dts.json deleted file mode 100644 index 70eceb9..0000000 --- a/packages/page-controller/tsconfig.dts.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - // @workaround DTS bug - // dts do not work with monorepo path mapping - // disable path mapping for it - "paths": {} - } -} diff --git a/packages/page-controller/tsconfig.json b/packages/page-controller/tsconfig.json index 058b45d..4344771 100644 --- a/packages/page-controller/tsconfig.json +++ b/packages/page-controller/tsconfig.json @@ -1,11 +1,7 @@ { "extends": "../../tsconfig.base.json", "compilerOptions": { - "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.tsbuildinfo", - "noEmit": false, - "allowImportingTsExtensions": false, - "baseUrl": ".", - "outDir": "dist" + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.tsbuildinfo" }, "include": ["**/*.ts", "**/*.js"], "exclude": ["dist", "node_modules"] diff --git a/packages/page-controller/vite.config.js b/packages/page-controller/vite.config.js index 3588c6c..b64fee3 100644 --- a/packages/page-controller/vite.config.js +++ b/packages/page-controller/vite.config.js @@ -13,7 +13,15 @@ console.log(chalk.cyan(`📦 Building @page-agent/page-controller`)) export default defineConfig({ clearScreen: false, plugins: [ - dts({ tsconfigPath: './tsconfig.dts.json', bundleTypes: true }), + dts({ + bundleTypes: true, + compilerOptions: { + composite: true, + noEmit: false, + emitDeclarationOnly: true, + declaration: true, + }, + }), cssInjectedByJsPlugin({ relativeCSSInjection: true }), ], publicDir: false, diff --git a/packages/ui/package.json b/packages/ui/package.json index bc23678..0eacaa5 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -2,14 +2,24 @@ "name": "@page-agent/ui", "version": "1.7.1", "type": "module", - "main": "./dist/lib/page-agent-ui.js", - "module": "./dist/lib/page-agent-ui.js", - "types": "./dist/lib/index.d.ts", + "main": "./src/index.ts", + "types": "./src/index.ts", "exports": { ".": { - "types": "./dist/lib/index.d.ts", - "import": "./dist/lib/page-agent-ui.js", - "default": "./dist/lib/page-agent-ui.js" + "types": "./src/index.ts", + "default": "./src/index.ts" + } + }, + "publishConfig": { + "main": "./dist/lib/page-agent-ui.js", + "module": "./dist/lib/page-agent-ui.js", + "types": "./dist/lib/index.d.ts", + "exports": { + ".": { + "types": "./dist/lib/index.d.ts", + "import": "./dist/lib/page-agent-ui.js", + "default": "./dist/lib/page-agent-ui.js" + } } }, "files": [ @@ -32,7 +42,7 @@ "homepage": "https://alibaba.github.io/page-agent/", "scripts": { "build": "vite build", - "prepublishOnly": "node -e \"const fs=require('fs');['LICENSE'].forEach(f=>fs.copyFileSync('../../'+f,f))\"", - "postpublish": "node -e \"['LICENSE'].forEach(f=>{try{require('fs').unlinkSync(f)}catch{}})\"" + "prepublishOnly": "node ../../scripts/pre-publish.js", + "postpublish": "node ../../scripts/post-publish.js" } } diff --git a/packages/ui/tsconfig.dts.json b/packages/ui/tsconfig.dts.json deleted file mode 100644 index 70eceb9..0000000 --- a/packages/ui/tsconfig.dts.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - // @workaround DTS bug - // dts do not work with monorepo path mapping - // disable path mapping for it - "paths": {} - } -} diff --git a/packages/ui/tsconfig.json b/packages/ui/tsconfig.json index 058b45d..4344771 100644 --- a/packages/ui/tsconfig.json +++ b/packages/ui/tsconfig.json @@ -1,11 +1,7 @@ { "extends": "../../tsconfig.base.json", "compilerOptions": { - "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.tsbuildinfo", - "noEmit": false, - "allowImportingTsExtensions": false, - "baseUrl": ".", - "outDir": "dist" + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.tsbuildinfo" }, "include": ["**/*.ts", "**/*.js"], "exclude": ["dist", "node_modules"] diff --git a/packages/ui/vite.config.js b/packages/ui/vite.config.js index fee1231..6a928e2 100644 --- a/packages/ui/vite.config.js +++ b/packages/ui/vite.config.js @@ -13,7 +13,15 @@ console.log(chalk.cyan(`📦 Building @page-agent/ui`)) export default defineConfig({ clearScreen: false, plugins: [ - dts({ tsconfigPath: './tsconfig.dts.json', bundleTypes: true }), + dts({ + bundleTypes: true, + compilerOptions: { + composite: true, + noEmit: false, + emitDeclarationOnly: true, + declaration: true, + }, + }), cssInjectedByJsPlugin({ relativeCSSInjection: true }), ], publicDir: false, diff --git a/packages/website/package.json b/packages/website/package.json index 9f32f4a..385942f 100644 --- a/packages/website/package.json +++ b/packages/website/package.json @@ -6,8 +6,7 @@ "scripts": { "dev": "vite --host 0.0.0.0", "build:website": "vite build", - "preview": "vite preview", - "typecheck": "tsc --noEmit" + "preview": "vite preview" }, "devDependencies": { "@radix-ui/react-icons": "^1.3.2", diff --git a/packages/website/tsconfig.json b/packages/website/tsconfig.json index 9e1dda9..b9fbd7e 100644 --- a/packages/website/tsconfig.json +++ b/packages/website/tsconfig.json @@ -2,31 +2,10 @@ "extends": "../../tsconfig.base.json", "compilerOptions": { "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.tsbuildinfo", - "noEmit": false, - "allowImportingTsExtensions": false, - "baseUrl": ".", - "outDir": "dist", "paths": { - // Self root - "@/*": ["src/*"], - - "@page-agent/llms": ["../llms/src/index.ts"], - "@page-agent/page-controller": ["../page-controller/src/PageController.ts"], - "@page-agent/core": ["../core/src/PageAgentCore.ts"], - "@page-agent/ui": ["../ui/src/index.ts"], - - "page-agent": ["../page-agent/src/PageAgent.ts"] + "@/*": ["./src/*"] } }, - "include": ["**/*.ts", "**/*.tsx"], - "exclude": ["dist", "node_modules"], - "references": [ - // - { "path": "../llms" }, - { "path": "../page-controller" }, - { "path": "../core" }, - { "path": "../ui" }, - - { "path": "../page-agent" } - ] + "include": ["src/**/*.ts", "src/**/*.tsx"], + "exclude": ["dist", "node_modules"] } diff --git a/packages/website/vite.config.js b/packages/website/vite.config.js index 4001337..fdf45a0 100644 --- a/packages/website/vite.config.js +++ b/packages/website/vite.config.js @@ -90,16 +90,7 @@ export default defineConfig(({ mode }) => ({ }, resolve: { alias: { - // Self root '@': resolve(__dirname, 'src'), - - // Monorepo packages (always bundle local code instead of npm versions) - '@page-agent/page-controller': resolve(__dirname, '../page-controller/src/PageController.ts'), - '@page-agent/llms': resolve(__dirname, '../llms/src/index.ts'), - '@page-agent/core': resolve(__dirname, '../core/src/PageAgentCore.ts'), - '@page-agent/ui': resolve(__dirname, '../ui/src/index.ts'), - - 'page-agent': resolve(__dirname, '../page-agent/src/PageAgent.ts'), }, }, define: { diff --git a/scripts/post-publish.js b/scripts/post-publish.js new file mode 100644 index 0000000..e429700 --- /dev/null +++ b/scripts/post-publish.js @@ -0,0 +1,30 @@ +#!/usr/bin/env node +/** + * Restore package.json from the backup created by pre-publish.js, + * then clean up temporary files (backup, LICENSE, README.md). + * + * Usage: node ../../scripts/post-publish.js (from a package dir) + */ +import { existsSync, readFileSync, renameSync, rmSync } from 'fs' +import { join } from 'path' + +const pkgPath = join(process.cwd(), 'package.json') +const bakPath = pkgPath + '.bak' + +if (!existsSync(bakPath)) { + console.log(' No backup found, nothing to restore.') + process.exit(0) +} + +const name = JSON.parse(readFileSync(pkgPath, 'utf-8')).name + +renameSync(bakPath, pkgPath) +console.log(' ✓ package.json restored from backup') + +rmSync(join(process.cwd(), 'LICENSE'), { force: true }) +console.log(' ✓ LICENSE removed') + +if (name === 'page-agent') { + rmSync(join(process.cwd(), 'README.md'), { force: true }) + console.log(' ✓ README.md removed') +} diff --git a/scripts/pre-publish.js b/scripts/pre-publish.js new file mode 100644 index 0000000..44dc929 --- /dev/null +++ b/scripts/pre-publish.js @@ -0,0 +1,42 @@ +#!/usr/bin/env node +/** + * Backup package.json, then rewrite it for publish: + * - Promote `publishConfig` fields to top level + * - Remove `publishConfig` (npm doesn't need the wrapper) + * - Copy LICENSE (and README.md for the main package) + * + * Usage: node ../../scripts/pre-publish.js (from a package dir) + */ +import { copyFileSync, readFileSync, writeFileSync } from 'fs' +import { join } from 'path' + +const pkgPath = join(process.cwd(), 'package.json') +const raw = readFileSync(pkgPath, 'utf-8') +const pkg = JSON.parse(raw) + +const publishConfig = pkg.publishConfig +if (!publishConfig) { + console.log(' No publishConfig found, skipping manifest rewrite.') + process.exit(0) +} + +// Backup the original file byte-for-byte +copyFileSync(pkgPath, pkgPath + '.bak') +console.log(' ✓ package.json backed up') + +for (const [field, value] of Object.entries(publishConfig)) { + pkg[field] = value +} +delete pkg.publishConfig + +writeFileSync(pkgPath, JSON.stringify(pkg, null, ' ') + '\n') +console.log(` ✓ Manifest rewritten for publish (${Object.keys(publishConfig).join(', ')})`) + +const root = join(process.cwd(), '../..') +copyFileSync(join(root, 'LICENSE'), join(process.cwd(), 'LICENSE')) +console.log(' ✓ LICENSE copied') + +if (pkg.name === 'page-agent') { + copyFileSync(join(root, 'README.md'), join(process.cwd(), 'README.md')) + console.log(' ✓ README.md copied') +} diff --git a/tsconfig.base.json b/tsconfig.base.json index a31f78c..927d771 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -1,16 +1,13 @@ { "compilerOptions": { - "composite": true, "target": "ES2024", "useDefineForClassFields": true, - "lib": ["ES2024", "DOM", "DOM.Iterable"], + "lib": ["ES2024", "DOM"], "module": "ESNext", "skipLibCheck": true, "allowJs": true, "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.tsbuildinfo", - // "baseUrl": "src", - "baseUrl": ".", "outDir": "dist", // "incremental": true, @@ -27,6 +24,8 @@ "noUnusedParameters": false, "erasableSyntaxOnly": true, "noFallthroughCasesInSwitch": true, - "noUncheckedSideEffectImports": true + "noUncheckedSideEffectImports": true, + + "types": ["node"] } } diff --git a/tsconfig.json b/tsconfig.json deleted file mode 100644 index f3616a9..0000000 --- a/tsconfig.json +++ /dev/null @@ -1,14 +0,0 @@ -// this is only for IDE ts language server to work. -// do not use this for building or linting. -{ - "extends": "./tsconfig.base.json", - "references": [ - { "path": "./packages/page-controller" }, - { "path": "./packages/ui" }, - { "path": "./packages/llms" }, - { "path": "./packages/page-agent" }, - { "path": "./packages/website" } - ], - "include": ["packages/*/src/**/*.ts", "packages/*/src/**/*.tsx"], - "exclude": ["node_modules", "dist", "packages/*/dist"] -} diff --git a/tsconfig.typecheck.json b/tsconfig.typecheck.json new file mode 100644 index 0000000..7965ad8 --- /dev/null +++ b/tsconfig.typecheck.json @@ -0,0 +1,25 @@ +// Unified typecheck config for all lib/website packages. +// Run: tsc --noEmit -p tsconfig.typecheck.json +// Extension is checked separately (WXT has its own tsconfig base). +// +// With source-first package.json exports, TS resolves @page-agent/* +// to sibling src/ via workspace symlinks — no paths mapping needed. +{ + "extends": "./tsconfig.base.json", + "compilerOptions": { + "composite": false, + "noEmit": true, + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.typecheck.tsbuildinfo", + "paths": { + "@/*": ["./packages/website/src/*"] + } + }, + "include": [ + "packages/llms/src/**/*", + "packages/page-controller/src/**/*", + "packages/ui/src/**/*", + "packages/core/src/**/*", + "packages/page-agent/src/**/*", + "packages/website/src/**/*" + ] +}