{"_id":"tinker-agent","_rev":"92-2265c85c5fb503436eab7d6bf0a6a6c9","name":"tinker-agent","dist-tags":{"latest":"3.0.0"},"versions":{"1.0.65":{"name":"tinker-agent","version":"1.0.65","license":"UNLICENSED","_id":"tinker-agent@1.0.65","maintainers":[{"name":"ishowshao","email":"me@ishowshao.com"}],"bin":{"tinker":"src/cli/index.ts","tinker-agent":"src/cli/index.ts"},"dist":{"shasum":"608fbb79613c430dcbebbd14e718cff83b782564","tarball":"https://registry.npmjs.org/tinker-agent/-/tinker-agent-1.0.65.tgz","fileCount":110,"integrity":"sha512-6EMu2VCzpMKGpZWKCbV+rvOlxE78e8z21TJT804E3oobXKVZQ0jPgmMHjwAYZ4KPXgq2om28MtpCsVK/+jWxcg==","signatures":[{"sig":"MEUCIHTeSIW/YxhxOkNz4sn6beJA3ejbaV2C5bfzRAnPtjnoAiEAsY/GMEImZqRSnY/uRrx6n1cpyIMVTTEzecBGhMyTfMs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":820120},"type":"module","engines":{"bun":">=1.3.0"},"scripts":{"lint":"eslint \"src/**/*.{ts,tsx}\" \"scripts/**/*.ts\" --max-warnings=0","test":"bun test","check":"bun run typecheck && bun run format:check && bun run lint && bun test && bun run bench:smoke","format":"biome format --write .","tinker":"bun src/cli/index.ts","lint:fix":"eslint \"src/**/*.{ts,tsx}\" \"scripts/**/*.ts\" --fix","typecheck":"tsc --noEmit","bench:smoke":"bun scripts/bench-smoke.ts","bench:recall":"bun scripts/bench-recall.ts","format:check":"biome format .","bench:long-session":"bun scripts/bench-long-session-memory.ts"},"_npmUser":{"name":"ishowshao","email":"me@ishowshao.com"},"_npmVersion":"11.6.2","description":"A personal coding agent with an interactive TUI and one-shot CLI.","directories":{},"_nodeVersion":"24.11.1","dependencies":{"ink":"^7.1.0","diff":"^9.0.0","glob":"^13.0.6","uuid":"^14.0.1","react":"^19.2.7","shiki":"^4.3.1","openai":"^6.45.0","linkedom":"^0.18.13","turndown":"^7.2.4","@inkjs/ui":"^2.0.0","@mozilla/readability":"^0.6.0","@assistant-ui/react-ink":"^0.0.31","@modelcontextprotocol/sdk":"^1.29.0","@assistant-ui/react-ink-markdown":"^0.0.30"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^10.6.0","globals":"^17.7.0","@eslint/js":"^10.0.1","@types/bun":"^1.3.14","typescript":"^6.0.3","@types/react":"^19.2.17","@biomejs/biome":"^2.5.2","@types/turndown":"^5.0.6","typescript-eslint":"^8.62.1","ink-testing-library":"^4.0.0","eslint-plugin-react-hooks":"^7.1.1"},"patchedDependencies":{"markdansi@0.3.2":"patches/markdansi@0.3.2.patch"},"_npmOperationalInternal":{"tmp":"tmp/tinker-agent_1.0.65_1784270710472_0.010678697138993831","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"tinker-agent","version":"1.1.0","license":"UNLICENSED","_id":"tinker-agent@1.1.0","maintainers":[{"name":"ishowshao","email":"me@ishowshao.com"}],"homepage":"https://github.com/ishowshao/tinker#readme","bugs":{"url":"https://github.com/ishowshao/tinker/issues"},"bin":{"tinker":"src/cli/index.ts"},"dist":{"shasum":"5c9c61262424049da292434455f6e89919e400b5","tarball":"https://registry.npmjs.org/tinker-agent/-/tinker-agent-1.1.0.tgz","fileCount":255,"integrity":"sha512-a2gn7vMCANexNYNidxbSagoVYzyvIznPqFRtnapUNZvyKsuD9462jhFnzRlMv2qzQ+aAkczQzBBg57546020eg==","signatures":[{"sig":"MEUCIQCGmA24cdFuxeNilSyXhyfPjbPf3hNo0zGO4fCwMJug9AIgDHrMaeyGjyI7EAgxqXMlSTZ/BrB5HIG5QQqyOT78YQI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2037938},"type":"module","engines":{"bun":">=1.3.0"},"gitHead":"058343270541a4c11ae9bc47403ace2f0dac6632","scripts":{"lint":"eslint \"src/**/*.{ts,tsx}\" \"scripts/**/*.ts\" \"packages/**/*.ts\" --max-warnings=0","test":"bun test","check":"bun run typecheck && bun run format:check && bun run lint && bun test && bun run bench:smoke","format":"biome format --write .","tinker":"bun src/cli/index.ts","lint:fix":"eslint \"src/**/*.{ts,tsx}\" \"scripts/**/*.ts\" \"packages/**/*.ts\" --fix","typecheck":"tsc --noEmit","chrome:mcp":"bun packages/tinker-chrome/src/cli.ts mcp","bench:smoke":"bun scripts/bench-smoke.ts","bench:recall":"bun scripts/bench-recall.ts","chrome:build":"bun packages/tinker-chrome/scripts/build.ts","format:check":"biome format .","chrome:diagnose":"bun packages/tinker-chrome/src/cli.ts diagnose","bench:long-session":"bun scripts/bench-long-session-memory.ts","bench:k3-image-live":"bun scripts/k3-image-live-smoke.ts","chrome:install-host":"bun packages/tinker-chrome/src/cli.ts install-host","bench:i4-active-recall":"bun scripts/bench-i4-active-recall.ts","bench:i3-provider-smoke":"bun scripts/bench-i3-provider-smoke.ts","qualify:i4-active-recall":"bun scripts/qualify-i4-active-recall.ts"},"_npmUser":{"name":"ishowshao","email":"me@ishowshao.com"},"repository":{"url":"git+https://github.com/ishowshao/tinker.git","type":"git"},"_npmVersion":"11.6.1","description":"A personal coding agent with an interactive TUI and one-shot CLI.","directories":{},"_nodeVersion":"24.10.0","dependencies":{"ink":"^7.1.0","diff":"^9.0.0","glob":"^13.0.6","uuid":"^14.0.1","yaml":"^2.9.0","react":"^19.2.7","sharp":"^0.35.3","shiki":"^4.3.1","openai":"^6.45.0","linkedom":"^0.18.13","turndown":"^7.2.4","@inkjs/ui":"^2.0.0","markdansi":"0.3.2","clipboardy":"^5.3.1","@mozilla/readability":"^0.6.0","@assistant-ui/react-ink":"^0.0.31","@modelcontextprotocol/sdk":"^1.29.0","@assistant-ui/react-ink-markdown":"^0.0.30"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^10.6.0","globals":"^17.7.0","@eslint/js":"^10.0.1","@types/bun":"^1.3.14","typescript":"^6.0.3","@types/react":"^19.2.17","@types/chrome":"^0.2.2","@biomejs/biome":"^2.5.2","@types/turndown":"^5.0.6","typescript-eslint":"^8.62.1","ink-testing-library":"^4.0.0","eslint-plugin-react-hooks":"^7.1.1"},"bundleDependencies":["markdansi"],"patchedDependencies":{"markdansi@0.3.2":"patches/markdansi@0.3.2.patch"},"_npmOperationalInternal":{"tmp":"tmp/tinker-agent_1.1.0_1784646507535_0.885751514841087","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"tinker-agent","version":"1.2.0","license":"Apache-2.0","_id":"tinker-agent@1.2.0","maintainers":[{"name":"ishowshao","email":"me@ishowshao.com"}],"homepage":"https://github.com/ishowshao/tinker#readme","bugs":{"url":"https://github.com/ishowshao/tinker/issues"},"bin":{"tinker":"bin/tinker.js"},"dist":{"shasum":"6115e7cf532f5ecefd09754adad403dc3e9fbf5f","tarball":"https://registry.npmjs.org/tinker-agent/-/tinker-agent-1.2.0.tgz","fileCount":259,"integrity":"sha512-095Et8bLVOdJQY+TRjECwc3ZY49VoUVrtHM/HpFomHZBwmZlCRcUpTCJp6dqrIGU98qJL4GdZr8h317Vk+/0vg==","signatures":[{"sig":"MEUCIEodkxHTo81NIIafXrANUU3b0QJhz4PzatMzqPF9mSkCAiEAqVG1Z00bd5Tc3TwcgnGIlc7VUMii+WSEDZYjIK3Ifvc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/tinker-agent@1.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2053301},"type":"module","engines":{"node":">=20.0.0"},"gitHead":"082a9d31426ab80e00990a4d496cfcdae36e3539","scripts":{"lint":"eslint \"bin/**/*.js\" \"src/**/*.{ts,tsx}\" \"scripts/**/*.ts\" \"packages/**/*.ts\" --max-warnings=0","test":"bun test","check":"bun run typecheck && bun run format:check && bun run lint && bun test && bun run bench:smoke","format":"biome format --write .","tinker":"bun src/cli/index.ts","lint:fix":"eslint \"bin/**/*.js\" \"src/**/*.{ts,tsx}\" \"scripts/**/*.ts\" \"packages/**/*.ts\" --fix","typecheck":"tsc --noEmit","chrome:mcp":"bun packages/tinker-chrome/src/cli.ts mcp","bench:smoke":"bun scripts/bench-smoke.ts","bench:recall":"bun scripts/bench-recall.ts","chrome:build":"bun packages/tinker-chrome/scripts/build.ts","format:check":"biome format .","release:verify":"bun scripts/verify-release-package.ts","chrome:diagnose":"bun packages/tinker-chrome/src/cli.ts diagnose","bench:long-session":"bun scripts/bench-long-session-memory.ts","bench:k3-image-live":"bun scripts/k3-image-live-smoke.ts","chrome:install-host":"bun packages/tinker-chrome/src/cli.ts install-host","bench:i4-active-recall":"bun scripts/bench-i4-active-recall.ts","bench:i3-provider-smoke":"bun scripts/bench-i3-provider-smoke.ts","qualify:i4-active-recall":"bun scripts/qualify-i4-active-recall.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:795da10a-375d-45a1-8104-9a76272864dc"}},"repository":{"url":"git+https://github.com/ishowshao/tinker.git","type":"git"},"_npmVersion":"11.6.2","description":"A personal coding agent with an interactive TUI and one-shot CLI.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"bun":"1.3.14","ink":"^7.1.0","diff":"^9.0.0","glob":"^13.0.6","uuid":"^14.0.1","yaml":"^2.9.0","react":"^19.2.7","sharp":"^0.35.3","shiki":"^4.3.1","openai":"^6.45.0","linkedom":"^0.18.13","turndown":"^7.2.4","@inkjs/ui":"^2.0.0","markdansi":"0.3.2","clipboardy":"^5.3.1","@vscode/ripgrep":"1.18.0","@mozilla/readability":"^0.6.0","@assistant-ui/react-ink":"^0.0.31","@modelcontextprotocol/sdk":"^1.29.0","@assistant-ui/react-ink-markdown":"^0.0.30"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^10.6.0","globals":"^17.7.0","@eslint/js":"^10.0.1","@types/bun":"^1.3.14","typescript":"^6.0.3","@types/react":"^19.2.17","@types/chrome":"^0.2.2","@biomejs/biome":"^2.5.2","@types/turndown":"^5.0.6","typescript-eslint":"^8.62.1","ink-testing-library":"^4.0.0","eslint-plugin-react-hooks":"^7.1.1"},"bundleDependencies":["markdansi"],"patchedDependencies":{"markdansi@0.3.2":"patches/markdansi@0.3.2.patch"},"_npmOperationalInternal":{"tmp":"tmp/tinker-agent_1.2.0_1784649299238_0.23123056544359377","host":"s3://npm-registry-packages-npm-production"}},"1.2.1":{"name":"tinker-agent","version":"1.2.1","license":"Apache-2.0","_id":"tinker-agent@1.2.1","maintainers":[{"name":"ishowshao","email":"me@ishowshao.com"}],"homepage":"https://github.com/ishowshao/tinker#readme","bugs":{"url":"https://github.com/ishowshao/tinker/issues"},"bin":{"tinker":"bin/tinker.js"},"dist":{"shasum":"26e3c708c0ccb657d8b2c52b50e85324528ee874","tarball":"https://registry.npmjs.org/tinker-agent/-/tinker-agent-1.2.1.tgz","fileCount":259,"integrity":"sha512-JVUnALF+1j0IuQaDwaDlcn8pHZbQOS9E6PTw+c2WYg0+h5VRwkNjecAizB2XwUdD17CiVd1ZnoT1/y9YGNbbBQ==","signatures":[{"sig":"MEYCIQDibf6B9TEfPdrGlOZd1BrWHaNiSPRFGi1/6W6RyOFvowIhANPDAx8/tba5+a+u5/YNIBa32yFmluM/UkZg13P6zLd1","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/tinker-agent@1.2.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2053272},"type":"module","engines":{"node":">=20.0.0"},"gitHead":"ae2019a85952d9c598977a1cc57a29724f94d9f3","scripts":{"lint":"eslint \"bin/**/*.js\" \"src/**/*.{ts,tsx}\" \"scripts/**/*.ts\" \"packages/**/*.ts\" --max-warnings=0","test":"bun test","check":"bun run typecheck && bun run format:check && bun run lint && bun test && bun run bench:smoke","format":"biome format --write .","tinker":"bun src/cli/index.ts","lint:fix":"eslint \"bin/**/*.js\" \"src/**/*.{ts,tsx}\" \"scripts/**/*.ts\" \"packages/**/*.ts\" --fix","typecheck":"tsc --noEmit","chrome:mcp":"bun packages/tinker-chrome/src/cli.ts mcp","bench:smoke":"bun scripts/bench-smoke.ts","bench:recall":"bun scripts/bench-recall.ts","chrome:build":"bun packages/tinker-chrome/scripts/build.ts","format:check":"biome format .","release:verify":"bun scripts/verify-release-package.ts","chrome:diagnose":"bun packages/tinker-chrome/src/cli.ts diagnose","bench:long-session":"bun scripts/bench-long-session-memory.ts","bench:k3-image-live":"bun scripts/k3-image-live-smoke.ts","chrome:install-host":"bun packages/tinker-chrome/src/cli.ts install-host","bench:i4-active-recall":"bun scripts/bench-i4-active-recall.ts","bench:i3-provider-smoke":"bun scripts/bench-i3-provider-smoke.ts","qualify:i4-active-recall":"bun scripts/qualify-i4-active-recall.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:795da10a-375d-45a1-8104-9a76272864dc"}},"repository":{"url":"git+https://github.com/ishowshao/tinker.git","type":"git"},"_npmVersion":"11.6.2","description":"A personal coding agent with an interactive TUI and one-shot CLI.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"bun":"1.3.14","ink":"^7.1.0","diff":"^9.0.0","glob":"^13.0.6","uuid":"^14.0.1","yaml":"^2.9.0","react":"^19.2.7","sharp":"^0.35.3","shiki":"^4.3.1","openai":"^6.45.0","linkedom":"^0.18.13","turndown":"^7.2.4","@inkjs/ui":"^2.0.0","markdansi":"0.3.2","clipboardy":"^5.3.1","@vscode/ripgrep":"1.18.0","@mozilla/readability":"^0.6.0","@assistant-ui/react-ink":"^0.0.31","@modelcontextprotocol/sdk":"^1.29.0","@assistant-ui/react-ink-markdown":"^0.0.30"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^10.6.0","globals":"^17.7.0","@eslint/js":"^10.0.1","@types/bun":"^1.3.14","typescript":"^6.0.3","@types/react":"^19.2.17","@types/chrome":"^0.2.2","@biomejs/biome":"^2.5.2","@types/turndown":"^5.0.6","typescript-eslint":"^8.62.1","ink-testing-library":"^4.0.0","eslint-plugin-react-hooks":"^7.1.1"},"bundleDependencies":["markdansi"],"patchedDependencies":{"markdansi@0.3.2":"patches/markdansi@0.3.2.patch"},"_npmOperationalInternal":{"tmp":"tmp/tinker-agent_1.2.1_1784682175448_0.4270189672035247","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"tinker-agent","version":"1.3.0","license":"Apache-2.0","_id":"tinker-agent@1.3.0","maintainers":[{"name":"ishowshao","email":"me@ishowshao.com"}],"homepage":"https://github.com/ishowshao/tinker#readme","bugs":{"url":"https://github.com/ishowshao/tinker/issues"},"bin":{"tinker":"bin/tinker.js"},"dist":{"shasum":"6c2a33e995b6b9abd45a7e581de4708e094181cd","tarball":"https://registry.npmjs.org/tinker-agent/-/tinker-agent-1.3.0.tgz","fileCount":259,"integrity":"sha512-ZznksAfGKlNoAxQU9BIKTDIiirJn/HclbgznKslh0sbLnZTbxPMZ/hMq4x3WHqwHWsuM/LprAWLScozxKEBYEA==","signatures":[{"sig":"MEUCICEraTHiy5zjfd6jWYsBVRkMGI7hWEaIIA+xYFPrd/20AiEA8iv6rnAFvVTCUsucMGEhcyTTTPY095E0v+SJ5jkfPfU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/tinker-agent@1.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2060802},"type":"module","engines":{"node":">=20.0.0"},"gitHead":"b1b838713c6abc7372a7bce8411e991eb0b74a78","scripts":{"lint":"eslint \"bin/**/*.js\" \"src/**/*.{ts,tsx}\" \"scripts/**/*.ts\" \"packages/**/*.ts\" --max-warnings=0","test":"bun test","check":"bun run typecheck && bun run format:check && bun run lint && bun test && bun run bench:smoke","format":"biome format --write .","tinker":"bun src/cli/index.ts","lint:fix":"eslint \"bin/**/*.js\" \"src/**/*.{ts,tsx}\" \"scripts/**/*.ts\" \"packages/**/*.ts\" --fix","typecheck":"tsc --noEmit","chrome:mcp":"bun packages/tinker-chrome/src/cli.ts mcp","bench:smoke":"bun scripts/bench-smoke.ts","bench:recall":"bun scripts/bench-recall.ts","chrome:build":"bun packages/tinker-chrome/scripts/build.ts","format:check":"biome format .","release:verify":"bun scripts/verify-release-package.ts","chrome:diagnose":"bun packages/tinker-chrome/src/cli.ts diagnose","bench:long-session":"bun scripts/bench-long-session-memory.ts","bench:k3-image-live":"bun scripts/k3-image-live-smoke.ts","chrome:install-host":"bun packages/tinker-chrome/src/cli.ts install-host","bench:i4-active-recall":"bun scripts/bench-i4-active-recall.ts","bench:i3-provider-smoke":"bun scripts/bench-i3-provider-smoke.ts","qualify:i4-active-recall":"bun scripts/qualify-i4-active-recall.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:795da10a-375d-45a1-8104-9a76272864dc"}},"repository":{"url":"git+https://github.com/ishowshao/tinker.git","type":"git"},"_npmVersion":"11.6.2","description":"A personal coding agent with an interactive TUI and one-shot CLI.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"bun":"1.3.14","ink":"^7.1.0","diff":"^9.0.0","glob":"^13.0.6","uuid":"^14.0.1","yaml":"^2.9.0","react":"^19.2.7","sharp":"^0.35.3","shiki":"^4.3.1","openai":"^6.45.0","linkedom":"^0.18.13","turndown":"^7.2.4","@inkjs/ui":"^2.0.0","markdansi":"0.3.2","clipboardy":"^5.3.1","@vscode/ripgrep":"1.18.0","@mozilla/readability":"^0.6.0","@assistant-ui/react-ink":"^0.0.31","@modelcontextprotocol/sdk":"^1.29.0","@assistant-ui/react-ink-markdown":"^0.0.30"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^10.6.0","globals":"^17.7.0","@eslint/js":"^10.0.1","@types/bun":"^1.3.14","typescript":"^6.0.3","@types/react":"^19.2.17","@types/chrome":"^0.2.2","@biomejs/biome":"^2.5.2","@types/turndown":"^5.0.6","typescript-eslint":"^8.62.1","ink-testing-library":"^4.0.0","eslint-plugin-react-hooks":"^7.1.1"},"bundleDependencies":["markdansi"],"patchedDependencies":{"markdansi@0.3.2":"patches/markdansi@0.3.2.patch"},"_npmOperationalInternal":{"tmp":"tmp/tinker-agent_1.3.0_1784699211984_0.2844574311720929","host":"s3://npm-registry-packages-npm-production"}},"1.4.0":{"name":"tinker-agent","version":"1.4.0","license":"Apache-2.0","_id":"tinker-agent@1.4.0","maintainers":[{"name":"ishowshao","email":"me@ishowshao.com"}],"homepage":"https://github.com/ishowshao/tinker#readme","bugs":{"url":"https://github.com/ishowshao/tinker/issues"},"bin":{"tinker":"bin/tinker.js"},"dist":{"shasum":"f67ab99f5c8ba6004d061320d5d290451970df57","tarball":"https://registry.npmjs.org/tinker-agent/-/tinker-agent-1.4.0.tgz","fileCount":267,"integrity":"sha512-K/3qOzMq1d+ybynJepcfka6qcDLi+MjXbTGoiKUroj/u+9v8oVvYoCS6TpFuzHhzssSQ5/ViUzGmsCXpl+oseQ==","signatures":[{"sig":"MEUCIQDLyv/Wi5272kj+j9Pr9/VWcEFPvMReUYfgbKChTwqsEAIgbOucGULlF8i9ZJs69RVZHhScUs8TtLWj/pfjI3GniKk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/tinker-agent@1.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2122511},"type":"module","engines":{"node":">=20.0.0"},"gitHead":"21721e6842decdfc71303d6cc31679b4022143f6","scripts":{"lint":"eslint \"bin/**/*.js\" \"src/**/*.{ts,tsx}\" \"scripts/**/*.ts\" \"packages/**/*.ts\" --max-warnings=0","test":"FORCE_COLOR=0 bun test","check":"bun run typecheck && bun run format:check && bun run lint && bun run docs:check && bun run test && bun run bench:smoke","format":"biome format --write .","tinker":"bun src/cli/index.ts","lint:fix":"eslint \"bin/**/*.js\" \"src/**/*.{ts,tsx}\" \"scripts/**/*.ts\" \"packages/**/*.ts\" --fix","typecheck":"tsc --noEmit","chrome:mcp":"bun packages/tinker-chrome/src/cli.ts mcp","docs:check":"bun scripts/render-public-contract-docs.ts --check","bench:smoke":"bun scripts/bench-smoke.ts","bench:recall":"bun scripts/bench-recall.ts","chrome:build":"bun packages/tinker-chrome/scripts/build.ts","format:check":"biome format .","docs:generate":"bun scripts/render-public-contract-docs.ts --write","release:verify":"bun scripts/verify-release-package.ts","chrome:diagnose":"bun packages/tinker-chrome/src/cli.ts diagnose","bench:long-session":"bun scripts/bench-long-session-memory.ts","bench:k3-image-live":"bun scripts/k3-image-live-smoke.ts","chrome:install-host":"bun packages/tinker-chrome/src/cli.ts install-host","bench:i4-active-recall":"bun scripts/bench-i4-active-recall.ts","bench:i3-provider-smoke":"bun scripts/bench-i3-provider-smoke.ts","qualify:i4-active-recall":"bun scripts/qualify-i4-active-recall.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:795da10a-375d-45a1-8104-9a76272864dc"}},"repository":{"url":"git+https://github.com/ishowshao/tinker.git","type":"git"},"_npmVersion":"11.6.2","description":"A personal coding agent with an interactive TUI and one-shot CLI.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"bun":"1.3.14","ink":"^7.1.0","diff":"^9.0.0","glob":"^13.0.6","uuid":"^14.0.1","yaml":"^2.9.0","react":"^19.2.7","sharp":"^0.35.3","shiki":"^4.3.1","openai":"^6.45.0","linkedom":"^0.18.13","turndown":"^7.2.4","@inkjs/ui":"^2.0.0","commander":"^14.0.3","markdansi":"0.3.2","clipboardy":"^5.3.1","@vscode/ripgrep":"1.18.0","@mozilla/readability":"^0.6.0","@assistant-ui/react-ink":"^0.0.31","@modelcontextprotocol/sdk":"^1.29.0","@assistant-ui/react-ink-markdown":"^0.0.30"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^10.6.0","globals":"^17.7.0","@eslint/js":"^10.0.1","@types/bun":"^1.3.14","typescript":"^6.0.3","@types/react":"^19.2.17","@types/chrome":"^0.2.2","@biomejs/biome":"^2.5.2","@types/turndown":"^5.0.6","@xterm/headless":"6.0.0","typescript-eslint":"^8.62.1","ink-testing-library":"^4.0.0","@xterm/addon-unicode11":"0.9.0","eslint-plugin-react-hooks":"^7.1.1"},"bundleDependencies":["markdansi"],"patchedDependencies":{"markdansi@0.3.2":"patches/markdansi@0.3.2.patch"},"_npmOperationalInternal":{"tmp":"tmp/tinker-agent_1.4.0_1784823899528_0.26415525501126447","host":"s3://npm-registry-packages-npm-production"}},"1.5.0":{"name":"tinker-agent","version":"1.5.0","license":"Apache-2.0","_id":"tinker-agent@1.5.0","maintainers":[{"name":"ishowshao","email":"me@ishowshao.com"}],"homepage":"https://github.com/ishowshao/tinker#readme","bugs":{"url":"https://github.com/ishowshao/tinker/issues"},"bin":{"tinker":"bin/tinker.js"},"dist":{"shasum":"b127870b4b6aedcd5d3da05d2471a470115a69c4","tarball":"https://registry.npmjs.org/tinker-agent/-/tinker-agent-1.5.0.tgz","fileCount":277,"integrity":"sha512-0JKzfFqMjTg0rt8ObV1MAhzB3ufGsg6kojkJNNz2d+7ggiaaGyzbewqd1Op32J1rn5qYIxACxiCqMgZBKdVxig==","signatures":[{"sig":"MEQCIE3lOF26HrrzflU1Jj8zaaTAG5JJcC8GKJEigF4zbz94AiBi1p2NK3lFluj8nNrPjtVs2CenBQMBeRD0kLqnD1i17A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/tinker-agent@1.5.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2247419},"type":"module","engines":{"node":">=20.0.0"},"gitHead":"2047203ab3c4424adcd08789ca05e7b75099867b","scripts":{"lint":"eslint \"bin/**/*.js\" \"src/**/*.{ts,tsx}\" \"scripts/**/*.ts\" \"packages/**/*.ts\" --max-warnings=0","test":"FORCE_COLOR=0 bun test","check":"bun run typecheck && bun run format:check && bun run lint && bun run docs:check && bun run test && bun run bench:smoke","format":"biome format --write .","tinker":"bun src/cli/index.ts","lint:fix":"eslint \"bin/**/*.js\" \"src/**/*.{ts,tsx}\" \"scripts/**/*.ts\" \"packages/**/*.ts\" --fix","test:e2e":"FORCE_COLOR=0 bun test src/__tests__/cli-pty src/__tests__/pty-tui-harness packages/tinker-chrome/__tests__/native-host-integration","test:fast":"FORCE_COLOR=0 bun test --path-ignore-patterns='**/*pty*.test.ts' --path-ignore-patterns='**/native-host-integration.test.ts'","typecheck":"tsc --noEmit","check:fast":"bun run typecheck && bun run format:check && bun run lint && bun run test:fast","chrome:mcp":"bun packages/tinker-chrome/src/cli.ts mcp","docs:check":"bun scripts/render-public-contract-docs.ts --check","bench:smoke":"bun scripts/bench-smoke.ts","bench:recall":"bun scripts/bench-recall.ts","chrome:build":"bun packages/tinker-chrome/scripts/build.ts","format:check":"biome format .","docs:generate":"bun scripts/render-public-contract-docs.ts --write","release:verify":"bun scripts/verify-release-package.ts","chrome:diagnose":"bun packages/tinker-chrome/src/cli.ts diagnose","bench:long-session":"bun scripts/bench-long-session-memory.ts","bench:k3-image-live":"bun scripts/k3-image-live-smoke.ts","chrome:install-host":"bun packages/tinker-chrome/src/cli.ts install-host","bench:i4-active-recall":"bun scripts/bench-i4-active-recall.ts","bench:i3-provider-smoke":"bun scripts/bench-i3-provider-smoke.ts","qualify:i4-active-recall":"bun scripts/qualify-i4-active-recall.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:795da10a-375d-45a1-8104-9a76272864dc"}},"repository":{"url":"git+https://github.com/ishowshao/tinker.git","type":"git"},"_npmVersion":"11.6.2","description":"A personal coding agent with an interactive TUI and one-shot CLI.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"bun":"1.3.14","ink":"^7.1.0","diff":"^9.0.0","glob":"^13.0.6","uuid":"^14.0.1","yaml":"^2.9.0","react":"^19.2.7","sharp":"^0.35.3","shiki":"^4.3.1","openai":"^6.45.0","linkedom":"^0.18.13","turndown":"^7.2.4","@inkjs/ui":"^2.0.0","commander":"^14.0.3","markdansi":"0.3.2","clipboardy":"^5.3.1","@vscode/ripgrep":"1.18.0","@mozilla/readability":"^0.6.0","@assistant-ui/react-ink":"^0.0.31","@modelcontextprotocol/sdk":"^1.29.0","@assistant-ui/react-ink-markdown":"^0.0.30"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^10.6.0","globals":"^17.7.0","@eslint/js":"^10.0.1","@types/bun":"^1.3.14","typescript":"^6.0.3","@types/react":"^19.2.17","@types/chrome":"^0.2.2","@biomejs/biome":"^2.5.2","@types/turndown":"^5.0.6","@xterm/headless":"6.0.0","typescript-eslint":"^8.62.1","ink-testing-library":"^4.0.0","@xterm/addon-unicode11":"0.9.0","eslint-plugin-react-hooks":"^7.1.1"},"bundleDependencies":["markdansi"],"patchedDependencies":{"markdansi@0.3.2":"patches/markdansi@0.3.2.patch"},"_npmOperationalInternal":{"tmp":"tmp/tinker-agent_1.5.0_1785141120186_0.24972068683366766","host":"s3://npm-registry-packages-npm-production"}},"1.5.1":{"name":"tinker-agent","version":"1.5.1","license":"Apache-2.0","_id":"tinker-agent@1.5.1","maintainers":[{"name":"ishowshao","email":"me@ishowshao.com"}],"homepage":"https://github.com/ishowshao/tinker#readme","bugs":{"url":"https://github.com/ishowshao/tinker/issues"},"bin":{"tinker":"bin/tinker.js"},"dist":{"shasum":"3cdde1315911806d6aaa11ff033e9ff2d12b1342","tarball":"https://registry.npmjs.org/tinker-agent/-/tinker-agent-1.5.1.tgz","fileCount":278,"integrity":"sha512-cm2tYAzPlRpNhqTOjy1eW32ZbQkI/sK2M9ezejyNz0g4mcyNnIKAYN3WsyiQEpWsX2OGdYk25b/XZTh8u6xnjQ==","signatures":[{"sig":"MEUCIBOdM281AE2waerLeDSX4bNDtc0yA4yKjjXPAS+5UU8aAiEA43UQK1bKcMtjePu+Q3fW0wDx/jNPyzMMPOWFgGLHF/I=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/tinker-agent@1.5.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2258915},"type":"module","engines":{"node":">=20.0.0"},"gitHead":"65c8774889ef58718b54a456308d316e52955dfd","scripts":{"lint":"eslint \"bin/**/*.js\" \"src/**/*.{ts,tsx}\" \"scripts/**/*.ts\" \"packages/**/*.ts\" --max-warnings=0","test":"FORCE_COLOR=0 bun test","check":"bun run typecheck && bun run format:check && bun run lint && bun run docs:check && bun run test && bun run bench:smoke","format":"biome format --write .","tinker":"bun src/cli/index.ts","lint:fix":"eslint \"bin/**/*.js\" \"src/**/*.{ts,tsx}\" \"scripts/**/*.ts\" \"packages/**/*.ts\" --fix","test:e2e":"FORCE_COLOR=0 bun test src/__tests__/cli-pty src/__tests__/pty-tui-harness packages/tinker-chrome/__tests__/native-host-integration","test:fast":"FORCE_COLOR=0 bun test --path-ignore-patterns='**/*pty*.test.ts' --path-ignore-patterns='**/native-host-integration.test.ts'","typecheck":"tsc --noEmit","check:fast":"bun run typecheck && bun run format:check && bun run lint && bun run test:fast","chrome:mcp":"bun packages/tinker-chrome/src/cli.ts mcp","docs:check":"bun scripts/render-public-contract-docs.ts --check","bench:smoke":"bun scripts/bench-smoke.ts","bench:recall":"bun scripts/bench-recall.ts","chrome:build":"bun packages/tinker-chrome/scripts/build.ts","format:check":"biome format .","docs:generate":"bun scripts/render-public-contract-docs.ts --write","release:verify":"bun scripts/verify-release-package.ts","chrome:diagnose":"bun packages/tinker-chrome/src/cli.ts diagnose","bench:long-session":"bun scripts/bench-long-session-memory.ts","bench:k3-image-live":"bun scripts/k3-image-live-smoke.ts","chrome:install-host":"bun packages/tinker-chrome/src/cli.ts install-host","bench:i4-active-recall":"bun scripts/bench-i4-active-recall.ts","bench:i3-provider-smoke":"bun scripts/bench-i3-provider-smoke.ts","qualify:i4-active-recall":"bun scripts/qualify-i4-active-recall.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:795da10a-375d-45a1-8104-9a76272864dc"}},"repository":{"url":"git+https://github.com/ishowshao/tinker.git","type":"git"},"_npmVersion":"11.6.2","description":"A personal coding agent with an interactive TUI and one-shot CLI.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"bun":"1.3.14","ink":"^7.1.0","diff":"^9.0.0","glob":"^13.0.6","uuid":"^14.0.1","yaml":"^2.9.0","react":"^19.2.7","sharp":"^0.35.3","shiki":"^4.3.1","openai":"^6.45.0","linkedom":"^0.18.13","turndown":"^7.2.4","@inkjs/ui":"^2.0.0","commander":"^14.0.3","markdansi":"0.3.2","clipboardy":"^5.3.1","ansi-escapes":"^7.3.0","@vscode/ripgrep":"1.18.0","@mozilla/readability":"^0.6.0","@assistant-ui/react-ink":"^0.0.31","@modelcontextprotocol/sdk":"^1.29.0","@assistant-ui/react-ink-markdown":"^0.0.30"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^10.6.0","globals":"^17.7.0","@eslint/js":"^10.0.1","@types/bun":"^1.3.14","typescript":"^6.0.3","@types/react":"^19.2.17","@types/chrome":"^0.2.2","@biomejs/biome":"^2.5.2","@types/turndown":"^5.0.6","@xterm/headless":"6.0.0","typescript-eslint":"^8.62.1","ink-testing-library":"^4.0.0","@xterm/addon-unicode11":"0.9.0","eslint-plugin-react-hooks":"^7.1.1"},"bundleDependencies":["markdansi"],"patchedDependencies":{"markdansi@0.3.2":"patches/markdansi@0.3.2.patch"},"_npmOperationalInternal":{"tmp":"tmp/tinker-agent_1.5.1_1785290791448_0.3362312404922436","host":"s3://npm-registry-packages-npm-production"}},"1.6.0":{"name":"tinker-agent","version":"1.6.0","license":"Apache-2.0","_id":"tinker-agent@1.6.0","maintainers":[{"name":"ishowshao","email":"me@ishowshao.com"}],"homepage":"https://github.com/ishowshao/tinker#readme","bugs":{"url":"https://github.com/ishowshao/tinker/issues"},"bin":{"tinker":"bin/tinker.js"},"dist":{"shasum":"9127ca658746a21b1fd262614f7d07f2373ec7fa","tarball":"https://registry.npmjs.org/tinker-agent/-/tinker-agent-1.6.0.tgz","fileCount":284,"integrity":"sha512-fZezgvHXS7v9b43ADWk96FSxSke20PuKFZHjB4H16hBUeKdne8tkPb7/PN8UR0AG+ZsyE9IcczYRG28NeVIqqw==","signatures":[{"sig":"MEUCIQCxIRQfuKqxBmz4XICbQWlg1hz2IjXRl53WVhsGsJCW0AIgAzGbj7NBWen7ow8ZwLasIUndGeJ62SbmgYsqdU2gxoI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/tinker-agent@1.6.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2341369},"type":"module","engines":{"node":">=20.0.0"},"gitHead":"5d2118373449fd7ba74346b9c8c69fde4814dfdb","scripts":{"lint":"eslint \"bin/**/*.js\" \"src/**/*.{ts,tsx}\" \"scripts/**/*.ts\" \"packages/**/*.ts\" --max-warnings=0","test":"FORCE_COLOR=0 bun test","check":"bun run typecheck && bun run format:check && bun run lint && bun run docs:check && bun run test && bun run bench:smoke","format":"biome format --write .","tinker":"bun src/cli/index.ts","lint:fix":"eslint \"bin/**/*.js\" \"src/**/*.{ts,tsx}\" \"scripts/**/*.ts\" \"packages/**/*.ts\" --fix","test:e2e":"FORCE_COLOR=0 bun test src/__tests__/cli-pty src/__tests__/pty-tui-harness packages/tinker-chrome/__tests__/native-host-integration","test:fast":"FORCE_COLOR=0 bun test --path-ignore-patterns='**/*pty*.test.ts' --path-ignore-patterns='**/native-host-integration.test.ts'","typecheck":"tsc --noEmit","check:fast":"bun run typecheck && bun run format:check && bun run lint && bun run test:fast","chrome:mcp":"bun packages/tinker-chrome/src/cli.ts mcp","docs:check":"bun scripts/render-public-contract-docs.ts --check","bench:smoke":"bun scripts/bench-smoke.ts","bench:recall":"bun scripts/bench-recall.ts","chrome:build":"bun packages/tinker-chrome/scripts/build.ts","format:check":"biome format .","docs:generate":"bun scripts/render-public-contract-docs.ts --write","release:verify":"bun scripts/verify-release-package.ts","chrome:diagnose":"bun packages/tinker-chrome/src/cli.ts diagnose","bench:long-session":"bun scripts/bench-long-session-memory.ts","bench:k3-image-live":"bun scripts/k3-image-live-smoke.ts","chrome:install-host":"bun packages/tinker-chrome/src/cli.ts install-host","bench:i4-active-recall":"bun scripts/bench-i4-active-recall.ts","bench:i3-provider-smoke":"bun scripts/bench-i3-provider-smoke.ts","qualify:i4-active-recall":"bun scripts/qualify-i4-active-recall.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:795da10a-375d-45a1-8104-9a76272864dc"}},"repository":{"url":"git+https://github.com/ishowshao/tinker.git","type":"git"},"_npmVersion":"11.6.2","description":"A personal coding agent with an interactive TUI and one-shot CLI.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"bun":"1.3.14","ink":"^7.1.0","diff":"^9.0.0","glob":"^13.0.6","uuid":"^14.0.1","yaml":"^2.9.0","react":"^19.2.7","sharp":"^0.35.3","shiki":"^4.3.1","marked":"^18.0.5","openai":"^7.1.0","linkedom":"^0.18.13","turndown":"^7.2.4","@inkjs/ui":"^2.0.0","commander":"^15.0.0","markdansi":"0.3.2","clipboardy":"^5.3.1","ansi-escapes":"^7.3.0","@vscode/ripgrep":"1.18.0","@mozilla/readability":"^0.6.0","@assistant-ui/react-ink":"^0.0.35","@modelcontextprotocol/sdk":"^1.29.0","@assistant-ui/react-ink-markdown":"^0.0.34"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^10.6.0","globals":"^17.7.0","@eslint/js":"^10.0.1","@types/bun":"^1.3.14","typescript":"^6.0.3","@types/react":"^19.2.17","@types/chrome":"^0.2.2","@biomejs/biome":"^2.5.2","@types/turndown":"^5.0.6","@xterm/headless":"6.0.0","typescript-eslint":"^8.62.1","ink-testing-library":"^4.0.0","@xterm/addon-unicode11":"0.9.0","eslint-plugin-react-hooks":"^7.1.1"},"bundleDependencies":["markdansi"],"patchedDependencies":{"markdansi@0.3.2":"patches/markdansi@0.3.2.patch"},"_npmOperationalInternal":{"tmp":"tmp/tinker-agent_1.6.0_1785559528001_0.052657000344410454","host":"s3://npm-registry-packages-npm-production"}},"1.7.0":{"name":"tinker-agent","version":"1.7.0","license":"Apache-2.0","_id":"tinker-agent@1.7.0","maintainers":[{"name":"ishowshao","email":"me@ishowshao.com"}],"homepage":"https://github.com/ishowshao/tinker#readme","bugs":{"url":"https://github.com/ishowshao/tinker/issues"},"bin":{"tinker":"bin/tinker.js"},"dist":{"shasum":"cccbb8cc4e42ed12f22238008d6acb7a43dc7df6","tarball":"https://registry.npmjs.org/tinker-agent/-/tinker-agent-1.7.0.tgz","fileCount":287,"integrity":"sha512-1FRG9NjhtoioHT0/NFr+FZimfsnFTU/C2qX08j27zgOLFQvyAvLQcBpc2SP70nyRYdilGPWkxD66BxRzKRNLWQ==","signatures":[{"sig":"MEUCIBb/Y2MsMZqcodpkcdB2HY2HxZwc6VkPFe7TcYhAHMhXAiEA675OYNYEIwjQUdDxw6q02TFCPrTiKcH79QN1GJmXKiQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/tinker-agent@1.7.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2376473},"type":"module","engines":{"node":">=20.0.0"},"gitHead":"8617d459b5a22079a223be3378a1bba31ca4156e","scripts":{"lint":"eslint \"bin/**/*.js\" \"src/**/*.{ts,tsx}\" \"scripts/**/*.ts\" \"packages/**/*.ts\" --max-warnings=0","test":"FORCE_COLOR=0 bun test","check":"bun run typecheck && bun run format:check && bun run lint && bun run docs:check && bun run test && bun run bench:smoke","format":"biome format --write .","tinker":"bun src/cli/index.ts","lint:fix":"eslint \"bin/**/*.js\" \"src/**/*.{ts,tsx}\" \"scripts/**/*.ts\" \"packages/**/*.ts\" --fix","test:e2e":"FORCE_COLOR=0 bun test src/__tests__/cli-pty src/__tests__/pty-tui-harness packages/tinker-chrome/__tests__/native-host-integration","test:fast":"FORCE_COLOR=0 bun test --path-ignore-patterns='**/*pty*.test.ts' --path-ignore-patterns='**/native-host-integration.test.ts'","typecheck":"tsc --noEmit","check:fast":"bun run typecheck && bun run format:check && bun run lint && bun run test:fast","chrome:mcp":"bun packages/tinker-chrome/src/cli.ts mcp","docs:check":"bun scripts/render-public-contract-docs.ts --check","bench:smoke":"bun scripts/bench-smoke.ts","bench:recall":"bun scripts/bench-recall.ts","chrome:build":"bun packages/tinker-chrome/scripts/build.ts","format:check":"biome format .","docs:generate":"bun scripts/render-public-contract-docs.ts --write","release:verify":"bun scripts/verify-release-package.ts","chrome:diagnose":"bun packages/tinker-chrome/src/cli.ts diagnose","bench:long-session":"bun scripts/bench-long-session-memory.ts","bench:k3-image-live":"bun scripts/k3-image-live-smoke.ts","chrome:install-host":"bun packages/tinker-chrome/src/cli.ts install-host","bench:i4-active-recall":"bun scripts/bench-i4-active-recall.ts","bench:i3-provider-smoke":"bun scripts/bench-i3-provider-smoke.ts","qualify:i4-active-recall":"bun scripts/qualify-i4-active-recall.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:795da10a-375d-45a1-8104-9a76272864dc"}},"repository":{"url":"git+https://github.com/ishowshao/tinker.git","type":"git"},"_npmVersion":"11.6.2","description":"A personal coding agent with an interactive TUI and one-shot CLI.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"bun":"1.3.14","ink":"^7.1.0","diff":"^9.0.0","glob":"^13.0.6","uuid":"^14.0.1","yaml":"^2.9.0","react":"^19.2.7","sharp":"^0.35.3","shiki":"^4.3.1","marked":"^18.0.5","openai":"^7.1.0","linkedom":"^0.18.13","turndown":"^7.2.4","@inkjs/ui":"^2.0.0","commander":"^15.0.0","markdansi":"0.3.2","clipboardy":"^5.3.1","ansi-escapes":"^7.3.0","@vscode/ripgrep":"1.18.0","@xterm/headless":"6.0.0","@mozilla/readability":"^0.6.0","@xterm/addon-unicode11":"0.9.0","@assistant-ui/react-ink":"^0.0.35","@modelcontextprotocol/sdk":"^1.29.0","@assistant-ui/react-ink-markdown":"^0.0.34"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^10.6.0","globals":"^17.7.0","@eslint/js":"^10.0.1","@types/bun":"^1.3.14","typescript":"^6.0.3","@types/react":"^19.2.17","@types/chrome":"^0.2.2","@biomejs/biome":"^2.5.2","@types/turndown":"^5.0.6","typescript-eslint":"^8.62.1","ink-testing-library":"^4.0.0","eslint-plugin-react-hooks":"^7.1.1"},"bundleDependencies":["markdansi"],"patchedDependencies":{"markdansi@0.3.2":"patches/markdansi@0.3.2.patch"},"_npmOperationalInternal":{"tmp":"tmp/tinker-agent_1.7.0_1785592922060_0.030538299601671204","host":"s3://npm-registry-packages-npm-production"}},"1.8.0":{"name":"tinker-agent","version":"1.8.0","license":"Apache-2.0","_id":"tinker-agent@1.8.0","maintainers":[{"name":"ishowshao","email":"me@ishowshao.com"}],"homepage":"https://github.com/ishowshao/tinker#readme","bugs":{"url":"https://github.com/ishowshao/tinker/issues"},"bin":{"tinker":"bin/tinker.js"},"dist":{"shasum":"6c37ddbeb2ca40cf0131e8037db89b0c66ec14f3","tarball":"https://registry.npmjs.org/tinker-agent/-/tinker-agent-1.8.0.tgz","fileCount":288,"integrity":"sha512-Nm15NSmUWQRqwget3jidPKbzQfpnZDoy0PzUEXjkWqn2pvdQjDhq92TqJQDeIRzdaxvQ8dXdYhkNdykwq8fiSw==","signatures":[{"sig":"MEUCIQDbqpcOwxLUGXtBrHl9jk2+ODXPPv+9AO+pnSBdJmjmhAIgBYvIAA8+eKmij4NNerOEXxwU8TpeADwlGoOXcZPhLbs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/tinker-agent@1.8.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2388474},"type":"module","engines":{"node":">=20.0.0"},"gitHead":"50ff35c5039e13f26b7518862330e17ff5b3a077","scripts":{"lint":"eslint \"bin/**/*.js\" \"src/**/*.{ts,tsx}\" \"scripts/**/*.ts\" \"packages/**/*.ts\" --max-warnings=0","test":"FORCE_COLOR=0 bun test","check":"bun run typecheck && bun run format:check && bun run lint && bun run docs:check && bun run test && bun run bench:smoke","format":"biome format --write .","tinker":"bun src/cli/index.ts","lint:fix":"eslint \"bin/**/*.js\" \"src/**/*.{ts,tsx}\" \"scripts/**/*.ts\" \"packages/**/*.ts\" --fix","test:e2e":"FORCE_COLOR=0 bun test src/__tests__/cli-pty src/__tests__/pty-tui-harness packages/tinker-chrome/__tests__/native-host-integration","test:fast":"FORCE_COLOR=0 bun test --path-ignore-patterns='**/*pty*.test.ts' --path-ignore-patterns='**/native-host-integration.test.ts'","typecheck":"tsc --noEmit","check:fast":"bun run typecheck && bun run format:check && bun run lint && bun run test:fast","chrome:mcp":"bun packages/tinker-chrome/src/cli.ts mcp","docs:check":"bun scripts/render-public-contract-docs.ts --check","bench:smoke":"bun scripts/bench-smoke.ts","bench:recall":"bun scripts/bench-recall.ts","chrome:build":"bun packages/tinker-chrome/scripts/build.ts","chrome:smoke":"bun packages/tinker-chrome/scripts/live-smoke.ts","format:check":"biome format .","docs:generate":"bun scripts/render-public-contract-docs.ts --write","release:verify":"bun scripts/verify-release-package.ts","chrome:diagnose":"bun packages/tinker-chrome/src/cli.ts diagnose","bench:long-session":"bun scripts/bench-long-session-memory.ts","bench:k3-image-live":"bun scripts/k3-image-live-smoke.ts","chrome:install-host":"bun packages/tinker-chrome/src/cli.ts install-host","bench:i4-active-recall":"bun scripts/bench-i4-active-recall.ts","bench:i3-provider-smoke":"bun scripts/bench-i3-provider-smoke.ts","qualify:i4-active-recall":"bun scripts/qualify-i4-active-recall.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:795da10a-375d-45a1-8104-9a76272864dc"}},"repository":{"url":"git+https://github.com/ishowshao/tinker.git","type":"git"},"_npmVersion":"11.6.2","description":"A personal coding agent with an interactive TUI and one-shot CLI.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"bun":"1.3.14","ink":"^7.1.0","diff":"^9.0.0","glob":"^13.0.6","uuid":"^14.0.1","yaml":"^2.9.0","react":"^19.2.7","sharp":"^0.35.3","shiki":"^4.3.1","marked":"^18.0.5","openai":"^7.1.0","linkedom":"^0.18.13","turndown":"^7.2.4","@inkjs/ui":"^2.0.0","commander":"^15.0.0","markdansi":"0.3.2","clipboardy":"^5.3.1","ansi-escapes":"^7.3.0","puppeteer-core":"25.4.0","@vscode/ripgrep":"1.18.0","@xterm/headless":"6.0.0","@mozilla/readability":"^0.6.0","@xterm/addon-unicode11":"0.9.0","@assistant-ui/react-ink":"^0.0.35","@modelcontextprotocol/sdk":"^1.29.0","@assistant-ui/react-ink-markdown":"^0.0.34"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^10.6.0","globals":"^17.7.0","@eslint/js":"^10.0.1","@types/bun":"^1.3.14","typescript":"^6.0.3","@types/react":"^19.2.17","@types/chrome":"^0.2.2","@biomejs/biome":"^2.5.2","@types/turndown":"^5.0.6","typescript-eslint":"^8.62.1","ink-testing-library":"^4.0.0","eslint-plugin-react-hooks":"^7.1.1"},"bundleDependencies":["markdansi"],"patchedDependencies":{"markdansi@0.3.2":"patches/markdansi@0.3.2.patch"},"_npmOperationalInternal":{"tmp":"tmp/tinker-agent_1.8.0_1785655526725_0.7505529795983443","host":"s3://npm-registry-packages-npm-production"}},"1.9.0":{"name":"tinker-agent","version":"1.9.0","license":"Apache-2.0","_id":"tinker-agent@1.9.0","maintainers":[{"name":"ishowshao","email":"me@ishowshao.com"}],"homepage":"https://github.com/ishowshao/tinker#readme","bugs":{"url":"https://github.com/ishowshao/tinker/issues"},"bin":{"tinker":"bin/tinker.js"},"dist":{"shasum":"d0d44f29f8cf36902d8830a57330a86c692b2b76","tarball":"https://registry.npmjs.org/tinker-agent/-/tinker-agent-1.9.0.tgz","fileCount":290,"integrity":"sha512-iwaQ6iGQEJ0Cnz/uutrbQDZVQVxyXiq8r2DDBlUTLF8dJMCw51p3CVIjhTkhBTI+vpJk8ArdypOXsQonbrp+lg==","signatures":[{"sig":"MEUCIQCTCmLpoydsZJGIdNrpYN8donuC/GvWtmogrp9SJuQ8PQIgRCruOLgkVxJ3/X+LnLwg1oFjgZiTreah9IXUqVHjDcE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/tinker-agent@1.9.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2397814},"type":"module","engines":{"node":">=20.0.0"},"gitHead":"ac40b531627bf08852618fb5561b95c292aa7b43","scripts":{"lint":"eslint \"bin/**/*.js\" \"src/**/*.{ts,tsx}\" \"scripts/**/*.ts\" \"packages/**/*.ts\" --max-warnings=0","test":"FORCE_COLOR=0 bun test","check":"bun run typecheck && bun run format:check && bun run lint && bun run docs:check && bun run test && bun run bench:smoke","format":"biome format --write .","tinker":"bun src/cli/index.ts","lint:fix":"eslint \"bin/**/*.js\" \"src/**/*.{ts,tsx}\" \"scripts/**/*.ts\" \"packages/**/*.ts\" --fix","test:e2e":"FORCE_COLOR=0 bun test src/__tests__/cli-pty src/__tests__/pty-tui-harness packages/tinker-chrome/__tests__/native-host-integration","test:fast":"FORCE_COLOR=0 bun test --path-ignore-patterns='**/*pty*.test.ts' --path-ignore-patterns='**/native-host-integration.test.ts'","typecheck":"tsc --noEmit","check:fast":"bun run typecheck && bun run format:check && bun run lint && bun run test:fast","chrome:mcp":"bun packages/tinker-chrome/src/cli.ts mcp","docs:check":"bun scripts/render-public-contract-docs.ts --check","bench:smoke":"bun scripts/bench-smoke.ts","bench:recall":"bun scripts/bench-recall.ts","chrome:build":"bun packages/tinker-chrome/scripts/build.ts","chrome:smoke":"bun packages/tinker-chrome/scripts/live-smoke.ts","format:check":"biome format .","docs:generate":"bun scripts/render-public-contract-docs.ts --write","release:verify":"bun scripts/verify-release-package.ts","chrome:diagnose":"bun packages/tinker-chrome/src/cli.ts diagnose","bench:long-session":"bun scripts/bench-long-session-memory.ts","bench:k3-image-live":"bun scripts/k3-image-live-smoke.ts","chrome:install-host":"bun packages/tinker-chrome/src/cli.ts install-host","bench:i4-active-recall":"bun scripts/bench-i4-active-recall.ts","bench:i3-provider-smoke":"bun scripts/bench-i3-provider-smoke.ts","qualify:i4-active-recall":"bun scripts/qualify-i4-active-recall.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:795da10a-375d-45a1-8104-9a76272864dc"}},"repository":{"url":"git+https://github.com/ishowshao/tinker.git","type":"git"},"_npmVersion":"11.6.2","description":"A personal coding agent with an interactive TUI and one-shot CLI.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"bun":"1.3.14","ink":"^7.1.0","diff":"^9.0.0","glob":"^13.0.6","uuid":"^14.0.1","yaml":"^2.9.0","react":"^19.2.7","sharp":"^0.35.3","shiki":"^4.3.1","marked":"^18.0.5","openai":"^7.1.0","linkedom":"^0.18.13","turndown":"^7.2.4","@inkjs/ui":"^2.0.0","commander":"^15.0.0","markdansi":"0.3.2","clipboardy":"^5.3.1","ansi-escapes":"^7.3.0","puppeteer-core":"25.4.0","@vscode/ripgrep":"1.18.0","@xterm/headless":"6.0.0","@mozilla/readability":"^0.6.0","@xterm/addon-unicode11":"0.9.0","@assistant-ui/react-ink":"^0.0.35","@modelcontextprotocol/sdk":"^1.29.0","@assistant-ui/react-ink-markdown":"^0.0.34"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^10.6.0","globals":"^17.7.0","@eslint/js":"^10.0.1","@types/bun":"^1.3.14","typescript":"^6.0.3","@types/react":"^19.2.17","@types/chrome":"^0.2.2","@biomejs/biome":"^2.5.2","@types/turndown":"^5.0.6","typescript-eslint":"^8.62.1","ink-testing-library":"^4.0.0","eslint-plugin-react-hooks":"^7.1.1"},"bundleDependencies":["markdansi"],"patchedDependencies":{"markdansi@0.3.2":"patches/markdansi@0.3.2.patch"},"_npmOperationalInternal":{"tmp":"tmp/tinker-agent_1.9.0_1785859620340_0.028341510710038875","host":"s3://npm-registry-packages-npm-production"}},"1.10.1":{"name":"tinker-agent","version":"1.10.1","license":"Apache-2.0","_id":"tinker-agent@1.10.1","maintainers":[{"name":"ishowshao","email":"me@ishowshao.com"}],"homepage":"https://github.com/ishowshao/tinker#readme","bugs":{"url":"https://github.com/ishowshao/tinker/issues"},"bin":{"tinker":"bin/tinker.js"},"dist":{"shasum":"023f555e98eaadebc6fae94d7d5aa54de129868c","tarball":"https://registry.npmjs.org/tinker-agent/-/tinker-agent-1.10.1.tgz","fileCount":299,"integrity":"sha512-1iuxNQXxjWuGS/lSP/MpBzhXuPvyYHTSfJpX/r7Ris9p8o/qf65oI1yeLP4nByd2oZiBnsvnW5TE8GVQxn8egQ==","signatures":[{"sig":"MEQCIHKeKGegQWES7NOZ28krz5cLCp+yrQCBIQjDTNMZ67G+AiBc/k6kP4zkvq16jR7cz5YRN8SevSZikyhJLxW6P3wLhg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/tinker-agent@1.10.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2481431},"type":"module","engines":{"node":">=20.0.0"},"gitHead":"d3365a2f17c1ef2a814e0da217e05da9d54a56da","scripts":{"lint":"eslint \"bin/**/*.js\" \"src/**/*.{ts,tsx}\" \"scripts/**/*.ts\" \"packages/**/*.ts\" --max-warnings=0","test":"FORCE_COLOR=0 bun test","check":"bun run typecheck && bun run format:check && bun run lint && bun run docs:check && bun run test && bun run bench:smoke","format":"biome format --write .","tinker":"bun src/cli/index.ts","lint:fix":"eslint \"bin/**/*.js\" \"src/**/*.{ts,tsx}\" \"scripts/**/*.ts\" \"packages/**/*.ts\" --fix","test:e2e":"FORCE_COLOR=0 bun test src/__tests__/cli-pty src/__tests__/pty-tui-harness packages/tinker-chrome/__tests__/native-host-integration","test:fast":"FORCE_COLOR=0 bun test --path-ignore-patterns='**/*pty*.test.ts' --path-ignore-patterns='**/native-host-integration.test.ts'","typecheck":"tsc --noEmit","check:fast":"bun run typecheck && bun run format:check && bun run lint && bun run test:fast","chrome:mcp":"bun packages/tinker-chrome/src/cli.ts mcp","docs:check":"bun scripts/render-public-contract-docs.ts --check","bench:smoke":"bun scripts/bench-smoke.ts","bench:recall":"bun scripts/bench-recall.ts","chrome:build":"bun packages/tinker-chrome/scripts/build.ts","chrome:smoke":"bun packages/tinker-chrome/scripts/live-smoke.ts","format:check":"biome format .","docs:generate":"bun scripts/render-public-contract-docs.ts --write","release:verify":"bun scripts/verify-release-package.ts","chrome:diagnose":"bun packages/tinker-chrome/src/cli.ts diagnose","bench:long-session":"bun scripts/bench-long-session-memory.ts","bench:k3-image-live":"bun scripts/k3-image-live-smoke.ts","chrome:install-host":"bun packages/tinker-chrome/src/cli.ts install-host","bench:i4-active-recall":"bun scripts/bench-i4-active-recall.ts","bench:i3-provider-smoke":"bun scripts/bench-i3-provider-smoke.ts","qualify:i4-active-recall":"bun scripts/qualify-i4-active-recall.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:795da10a-375d-45a1-8104-9a76272864dc"}},"repository":{"url":"git+https://github.com/ishowshao/tinker.git","type":"git"},"_npmVersion":"11.6.2","description":"A personal coding agent with an interactive TUI and one-shot CLI.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"bun":"1.3.14","ink":"^7.1.0","diff":"^9.0.0","glob":"^13.0.6","uuid":"^14.0.1","yaml":"^2.9.0","react":"^19.2.7","sharp":"^0.35.3","shiki":"^4.3.1","marked":"^18.0.5","openai":"^7.1.0","linkedom":"^0.18.13","turndown":"^7.2.4","@inkjs/ui":"^2.0.0","commander":"^15.0.0","markdansi":"0.3.2","clipboardy":"^5.3.1","ansi-escapes":"^7.3.0","puppeteer-core":"25.4.0","@vscode/ripgrep":"1.18.0","@xterm/headless":"6.0.0","@mozilla/readability":"^0.6.0","@xterm/addon-unicode11":"0.9.0","@assistant-ui/react-ink":"^0.0.35","@modelcontextprotocol/sdk":"^1.29.0","@assistant-ui/react-ink-markdown":"^0.0.34"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^10.6.0","globals":"^17.7.0","@eslint/js":"^10.0.1","@types/bun":"^1.3.14","typescript":"^6.0.3","@types/react":"^19.2.17","@types/chrome":"^0.2.2","@biomejs/biome":"^2.5.2","@types/turndown":"^5.0.6","typescript-eslint":"^8.62.1","ink-testing-library":"^4.0.0","eslint-plugin-react-hooks":"^7.1.1"},"bundleDependencies":["markdansi"],"patchedDependencies":{"markdansi@0.3.2":"patches/markdansi@0.3.2.patch"},"_npmOperationalInternal":{"tmp":"tmp/tinker-agent_1.10.1_1786758138559_0.10562123901847675","host":"s3://npm-registry-packages-npm-production"}},"1.11.0":{"name":"tinker-agent","version":"1.11.0","license":"Apache-2.0","_id":"tinker-agent@1.11.0","maintainers":[{"name":"ishowshao","email":"me@ishowshao.com"}],"homepage":"https://github.com/ishowshao/tinker#readme","bugs":{"url":"https://github.com/ishowshao/tinker/issues"},"bin":{"tinker":"bin/tinker.js"},"dist":{"shasum":"adf39eae989e2795d1c4aaf74c4da46b774c47a5","tarball":"https://registry.npmjs.org/tinker-agent/-/tinker-agent-1.11.0.tgz","fileCount":299,"integrity":"sha512-vPL4hDbdHQTm88Sor5k4cNfuCaDwlaXFv+CjjY7Su+rL+W74sbYjxRTMYXkKBqJlB+wEh7eVXBugOG0zg4Kb0w==","signatures":[{"sig":"MEUCIQC5S51v2FSJuCjhWDZIosy7roLeePc8KWiYR+r1P4715gIgXehGNKhWyJSarUuNB17dKEl8sUZnjIbRGGaeGr7gjqQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/tinker-agent@1.11.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2496617},"type":"module","engines":{"node":">=20.0.0"},"gitHead":"0cbce2009782e251311c2d5051ac0b490867e76e","scripts":{"lint":"eslint \"bin/**/*.js\" \"src/**/*.{ts,tsx}\" \"scripts/**/*.ts\" \"packages/**/*.ts\" --max-warnings=0","test":"FORCE_COLOR=0 bun test","check":"bun run typecheck && bun run format:check && bun run lint && bun run docs:check && bun run test && bun run bench:smoke","format":"biome format --write .","tinker":"bun src/cli/index.ts","lint:fix":"eslint \"bin/**/*.js\" \"src/**/*.{ts,tsx}\" \"scripts/**/*.ts\" \"packages/**/*.ts\" --fix","test:e2e":"FORCE_COLOR=0 bun test src/__tests__/cli-pty src/__tests__/pty-tui-harness packages/tinker-chrome/__tests__/native-host-integration","test:fast":"FORCE_COLOR=0 bun test --path-ignore-patterns='**/*pty*.test.ts' --path-ignore-patterns='**/native-host-integration.test.ts'","typecheck":"tsc --noEmit","check:fast":"bun run typecheck && bun run format:check && bun run lint && bun run test:fast","chrome:mcp":"bun packages/tinker-chrome/src/cli.ts mcp","docs:check":"bun scripts/render-public-contract-docs.ts --check","bench:smoke":"bun scripts/bench-smoke.ts","bench:recall":"bun scripts/bench-recall.ts","chrome:build":"bun packages/tinker-chrome/scripts/build.ts","chrome:smoke":"bun packages/tinker-chrome/scripts/live-smoke.ts","format:check":"biome format .","docs:generate":"bun scripts/render-public-contract-docs.ts --write","release:verify":"bun scripts/verify-release-package.ts","chrome:diagnose":"bun packages/tinker-chrome/src/cli.ts diagnose","bench:long-session":"bun scripts/bench-long-session-memory.ts","bench:k3-image-live":"bun scripts/k3-image-live-smoke.ts","chrome:install-host":"bun packages/tinker-chrome/src/cli.ts install-host","bench:i4-active-recall":"bun scripts/bench-i4-active-recall.ts","bench:i3-provider-smoke":"bun scripts/bench-i3-provider-smoke.ts","qualify:i4-active-recall":"bun scripts/qualify-i4-active-recall.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:795da10a-375d-45a1-8104-9a76272864dc"}},"repository":{"url":"git+https://github.com/ishowshao/tinker.git","type":"git"},"_npmVersion":"11.6.2","description":"A personal coding agent with an interactive TUI and one-shot CLI.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"bun":"1.3.14","ink":"^7.1.0","diff":"^9.0.0","glob":"^13.0.6","uuid":"^14.0.1","yaml":"^2.9.0","react":"^19.2.7","sharp":"^0.35.3","shiki":"^4.3.1","marked":"^18.0.5","openai":"^7.1.0","linkedom":"^0.18.13","turndown":"^7.2.4","@inkjs/ui":"^2.0.0","commander":"^15.0.0","markdansi":"0.3.2","clipboardy":"^5.3.1","ansi-escapes":"^7.3.0","puppeteer-core":"25.4.0","@vscode/ripgrep":"1.18.0","@xterm/headless":"6.0.0","@mozilla/readability":"^0.6.0","@xterm/addon-unicode11":"0.9.0","@assistant-ui/react-ink":"^0.0.35","@modelcontextprotocol/sdk":"^1.29.0","@assistant-ui/react-ink-markdown":"^0.0.34"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^10.6.0","globals":"^17.7.0","@eslint/js":"^10.0.1","@types/bun":"^1.3.14","typescript":"^6.0.3","@types/react":"^19.2.17","@types/chrome":"^0.2.2","@biomejs/biome":"^2.5.2","@types/turndown":"^5.0.6","typescript-eslint":"^8.62.1","ink-testing-library":"^4.0.0","eslint-plugin-react-hooks":"^7.1.1"},"bundleDependencies":["markdansi"],"patchedDependencies":{"markdansi@0.3.2":"patches/markdansi@0.3.2.patch"},"_npmOperationalInternal":{"tmp":"tmp/tinker-agent_1.11.0_1786789735748_0.6331492740304967","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"tinker-agent","version":"2.0.0","license":"Apache-2.0","_id":"tinker-agent@2.0.0","maintainers":[{"name":"ishowshao","email":"me@ishowshao.com"}],"homepage":"https://github.com/ishowshao/tinker#readme","bugs":{"url":"https://github.com/ishowshao/tinker/issues"},"bin":{"tinker":"bin/tinker.js"},"dist":{"shasum":"5e11112660258e215f2217bced8f6dc93bca5476","tarball":"https://registry.npmjs.org/tinker-agent/-/tinker-agent-2.0.0.tgz","fileCount":297,"integrity":"sha512-uinmrvNbpZXpzWs9TDIRICSHw2PSFATqyfgygvx8lpus4hYZ1uSw5RS0q0Nwyx7ycvkFDCWEgyCAsiDFOzeZUg==","signatures":[{"sig":"MEUCIQCtuY/0Y60IFRXJXvCS9XRg1R494IWbDpOK2SJNrs8K9QIgIhhzkO9CN0diIMvCz72k5uB+ggSqhaxSHdoRs+lVmfg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/tinker-agent@2.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2480860},"type":"module","engines":{"node":">=20.0.0"},"gitHead":"08c436731c7134b7b70fc4971aba6343d7853fd4","scripts":{"lint":"eslint \"bin/**/*.js\" \"src/**/*.{ts,tsx}\" \"scripts/**/*.ts\" \"packages/**/*.ts\" --max-warnings=0","test":"FORCE_COLOR=0 bun test","check":"bun run typecheck && bun run format:check && bun run lint && bun run docs:check && bun run test && bun run bench:smoke","format":"biome format --write .","tinker":"bun src/cli/index.ts","lint:fix":"eslint \"bin/**/*.js\" \"src/**/*.{ts,tsx}\" \"scripts/**/*.ts\" \"packages/**/*.ts\" --fix","test:e2e":"FORCE_COLOR=0 bun test src/__tests__/cli-pty src/__tests__/pty-tui-harness packages/tinker-chrome/__tests__/native-host-integration","test:fast":"FORCE_COLOR=0 bun test --path-ignore-patterns='**/*pty*.test.ts' --path-ignore-patterns='**/native-host-integration.test.ts'","typecheck":"tsc --noEmit","check:fast":"bun run typecheck && bun run format:check && bun run lint && bun run test:fast","chrome:mcp":"bun packages/tinker-chrome/src/cli.ts mcp","docs:check":"bun scripts/render-public-contract-docs.ts --check","bench:smoke":"bun scripts/bench-smoke.ts","bench:recall":"bun scripts/bench-recall.ts","chrome:build":"bun packages/tinker-chrome/scripts/build.ts","chrome:smoke":"bun packages/tinker-chrome/scripts/live-smoke.ts","format:check":"biome format .","docs:generate":"bun scripts/render-public-contract-docs.ts --write","release:verify":"bun scripts/verify-release-package.ts","chrome:diagnose":"bun packages/tinker-chrome/src/cli.ts diagnose","bench:long-session":"bun scripts/bench-long-session-memory.ts","bench:k3-image-live":"bun scripts/k3-image-live-smoke.ts","chrome:install-host":"bun packages/tinker-chrome/src/cli.ts install-host","bench:i4-active-recall":"bun scripts/bench-i4-active-recall.ts","bench:i3-provider-smoke":"bun scripts/bench-i3-provider-smoke.ts","qualify:i4-active-recall":"bun scripts/qualify-i4-active-recall.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:795da10a-375d-45a1-8104-9a76272864dc"}},"repository":{"url":"git+https://github.com/ishowshao/tinker.git","type":"git"},"_npmVersion":"11.6.2","description":"A personal coding agent with an interactive TUI and one-shot CLI.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"bun":"1.3.14","ink":"^7.1.0","diff":"^9.0.0","glob":"^13.0.6","uuid":"^14.0.1","yaml":"^2.9.0","react":"^19.2.7","sharp":"^0.35.3","shiki":"^4.3.1","marked":"^18.0.5","openai":"^7.1.0","linkedom":"^0.18.13","turndown":"^7.2.4","@inkjs/ui":"^2.0.0","commander":"^15.0.0","markdansi":"0.3.2","clipboardy":"^5.3.1","ansi-escapes":"^7.3.0","puppeteer-core":"25.4.0","@vscode/ripgrep":"1.18.0","@xterm/headless":"6.0.0","@mozilla/readability":"^0.6.0","@xterm/addon-unicode11":"0.9.0","@assistant-ui/react-ink":"^0.0.35","@modelcontextprotocol/sdk":"^1.29.0","@assistant-ui/react-ink-markdown":"^0.0.34"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^10.6.0","globals":"^17.7.0","@eslint/js":"^10.0.1","@types/bun":"^1.3.14","typescript":"^6.0.3","@types/react":"^19.2.17","@types/chrome":"^0.2.2","@biomejs/biome":"^2.5.2","@types/turndown":"^5.0.6","typescript-eslint":"^8.62.1","ink-testing-library":"^4.0.0","eslint-plugin-react-hooks":"^7.1.1"},"bundleDependencies":["markdansi"],"patchedDependencies":{"markdansi@0.3.2":"patches/markdansi@0.3.2.patch"},"_npmOperationalInternal":{"tmp":"tmp/tinker-agent_2.0.0_1787191957742_0.5707021698367805","host":"s3://npm-registry-packages-npm-production"}},"2.1.0":{"name":"tinker-agent","version":"2.1.0","license":"Apache-2.0","_id":"tinker-agent@2.1.0","maintainers":[{"name":"ishowshao","email":"me@ishowshao.com"}],"homepage":"https://github.com/ishowshao/tinker#readme","bugs":{"url":"https://github.com/ishowshao/tinker/issues"},"bin":{"tinker":"bin/tinker.js"},"dist":{"shasum":"5dad5cb8e2527561c82d27fcd16ba12c89c565e3","tarball":"https://registry.npmjs.org/tinker-agent/-/tinker-agent-2.1.0.tgz","fileCount":301,"integrity":"sha512-CEyJz2PSceWPDpIRxuSIB5X+dVFhEs/wxJakPPpiC7ahRBKUdcPPv2psdsjOtOgcVAerdKz3qQU/NcJEUah6Uw==","signatures":[{"sig":"MEMCH1vbNeJGNEwYMaj/Dl458oWYfbNZmyHErLtFjvaSczUCIF91KPbhxvoZ8d2aHP4HrVBMlaG2rpO3ULjcwQziTcKN","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/tinker-agent@2.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2550788},"type":"module","engines":{"node":">=20.0.0"},"gitHead":"3071ef759110a2654db2cfa565ead0accc1ec76d","scripts":{"lint":"eslint \"bin/**/*.js\" \"src/**/*.{ts,tsx}\" \"scripts/**/*.ts\" \"packages/**/*.ts\" --max-warnings=0","test":"FORCE_COLOR=0 bun test","check":"bun run typecheck && bun run format:check && bun run lint && bun run docs:check && bun run test && bun run bench:smoke","format":"biome format --write .","tinker":"bun src/cli/index.ts","lint:fix":"eslint \"bin/**/*.js\" \"src/**/*.{ts,tsx}\" \"scripts/**/*.ts\" \"packages/**/*.ts\" --fix","test:e2e":"FORCE_COLOR=0 bun test src/__tests__/cli-pty src/__tests__/pty-tui-harness packages/tinker-chrome/__tests__/native-host-integration","test:fast":"FORCE_COLOR=0 bun test --path-ignore-patterns='**/*pty*.test.ts' --path-ignore-patterns='**/native-host-integration.test.ts'","typecheck":"tsc --noEmit","check:fast":"bun run typecheck && bun run format:check && bun run lint && bun run test:fast","chrome:mcp":"bun packages/tinker-chrome/src/cli.ts mcp","docs:check":"bun scripts/render-public-contract-docs.ts --check","bench:smoke":"bun scripts/bench-smoke.ts","bench:recall":"bun scripts/bench-recall.ts","chrome:build":"bun packages/tinker-chrome/scripts/build.ts","chrome:smoke":"bun packages/tinker-chrome/scripts/live-smoke.ts","format:check":"biome format .","docs:generate":"bun scripts/render-public-contract-docs.ts --write","release:verify":"bun scripts/verify-release-package.ts","chrome:diagnose":"bun packages/tinker-chrome/src/cli.ts diagnose","bench:long-session":"bun scripts/bench-long-session-memory.ts","bench:k3-image-live":"bun scripts/k3-image-live-smoke.ts","chrome:install-host":"bun packages/tinker-chrome/src/cli.ts install-host","bench:view-image-live":"bun scripts/view-image-live-smoke.ts","bench:i4-active-recall":"bun scripts/bench-i4-active-recall.ts","bench:i3-provider-smoke":"bun scripts/bench-i3-provider-smoke.ts","qualify:i4-active-recall":"bun scripts/qualify-i4-active-recall.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:795da10a-375d-45a1-8104-9a76272864dc"}},"repository":{"url":"git+https://github.com/ishowshao/tinker.git","type":"git"},"_npmVersion":"11.6.2","description":"A personal coding agent with an interactive TUI and one-shot CLI.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"bun":"1.3.14","ink":"^7.1.0","diff":"^9.0.0","glob":"^13.0.6","uuid":"^14.0.1","yaml":"^2.9.0","react":"^19.2.7","sharp":"^0.35.3","shiki":"^4.3.1","marked":"^18.0.5","openai":"^7.1.0","linkedom":"^0.18.13","turndown":"^7.2.4","@inkjs/ui":"^2.0.0","commander":"^15.0.0","markdansi":"0.3.2","clipboardy":"^5.3.1","ansi-escapes":"^7.3.0","puppeteer-core":"25.4.0","@vscode/ripgrep":"1.18.0","@xterm/headless":"6.0.0","@mozilla/readability":"^0.6.0","@xterm/addon-unicode11":"0.9.0","@assistant-ui/react-ink":"^0.0.35","@modelcontextprotocol/sdk":"^1.29.0","@assistant-ui/react-ink-markdown":"^0.0.34"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^10.6.0","globals":"^17.7.0","@eslint/js":"^10.0.1","@types/bun":"^1.3.14","typescript":"^6.0.3","@types/react":"^19.2.17","@types/chrome":"^0.2.2","@biomejs/biome":"^2.5.2","@types/turndown":"^5.0.6","typescript-eslint":"^8.62.1","ink-testing-library":"^4.0.0","eslint-plugin-react-hooks":"^7.1.1"},"bundleDependencies":["markdansi"],"patchedDependencies":{"markdansi@0.3.2":"patches/markdansi@0.3.2.patch"},"_npmOperationalInternal":{"tmp":"tmp/tinker-agent_2.1.0_1788008187487_0.666378926120299","host":"s3://npm-registry-packages-npm-production"}},"2.2.0":{"name":"tinker-agent","version":"2.2.0","license":"Apache-2.0","_id":"tinker-agent@2.2.0","maintainers":[{"name":"ishowshao","email":"me@ishowshao.com"}],"homepage":"https://github.com/ishowshao/tinker#readme","bugs":{"url":"https://github.com/ishowshao/tinker/issues"},"bin":{"tinker":"bin/tinker.js"},"dist":{"shasum":"203f820e478696046b9abcfcea973f5c30e0c133","tarball":"https://registry.npmjs.org/tinker-agent/-/tinker-agent-2.2.0.tgz","fileCount":301,"integrity":"sha512-5z9z7OPE7vA/CncQgjIMQrV9MA7LGL0Aokj9cp/SlPERSalFk7bXKbCl8DtM6PYTD7FhfJlryNTKDt+0jF8sRQ==","signatures":[{"sig":"MEQCIGKPs8upZ5j/KTo9jLAoK6gYWWYNezGxDPRv5T8kfltUAiAyiEJ6Kf65cwrX16md3BiHyqwINk1MssgYERhpj1xizQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/tinker-agent@2.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2552589},"type":"module","engines":{"node":">=20.0.0"},"gitHead":"e588d8681aca817ac8f7d161517028bfad1d97cb","scripts":{"lint":"eslint \"bin/**/*.js\" \"src/**/*.{ts,tsx}\" \"scripts/**/*.ts\" \"packages/**/*.ts\" --max-warnings=0","test":"FORCE_COLOR=0 bun test","check":"bun run typecheck && bun run format:check && bun run lint && bun run docs:check && bun run test && bun run bench:smoke","format":"biome format --write .","tinker":"bun src/cli/index.ts","lint:fix":"eslint \"bin/**/*.js\" \"src/**/*.{ts,tsx}\" \"scripts/**/*.ts\" \"packages/**/*.ts\" --fix","test:e2e":"FORCE_COLOR=0 bun test src/__tests__/cli-pty src/__tests__/pty-tui-harness packages/tinker-chrome/__tests__/native-host-integration","test:fast":"FORCE_COLOR=0 bun test --path-ignore-patterns='**/*pty*.test.ts' --path-ignore-patterns='**/native-host-integration.test.ts'","typecheck":"tsc --noEmit","check:fast":"bun run typecheck && bun run format:check && bun run lint && bun run test:fast","chrome:mcp":"bun packages/tinker-chrome/src/cli.ts mcp","docs:check":"bun scripts/render-public-contract-docs.ts --check","bench:smoke":"bun scripts/bench-smoke.ts","bench:recall":"bun scripts/bench-recall.ts","chrome:build":"bun packages/tinker-chrome/scripts/build.ts","chrome:smoke":"bun packages/tinker-chrome/scripts/live-smoke.ts","format:check":"biome format .","docs:generate":"bun scripts/render-public-contract-docs.ts --write","release:verify":"bun scripts/verify-release-package.ts","chrome:diagnose":"bun packages/tinker-chrome/src/cli.ts diagnose","bench:long-session":"bun scripts/bench-long-session-memory.ts","bench:k3-image-live":"bun scripts/k3-image-live-smoke.ts","chrome:install-host":"bun packages/tinker-chrome/src/cli.ts install-host","bench:view-image-live":"bun scripts/view-image-live-smoke.ts","bench:i4-active-recall":"bun scripts/bench-i4-active-recall.ts","bench:i3-provider-smoke":"bun scripts/bench-i3-provider-smoke.ts","qualify:i4-active-recall":"bun scripts/qualify-i4-active-recall.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:795da10a-375d-45a1-8104-9a76272864dc"}},"repository":{"url":"git+https://github.com/ishowshao/tinker.git","type":"git"},"_npmVersion":"11.6.2","description":"A personal coding agent with an interactive TUI and one-shot CLI.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"bun":"1.3.14","ink":"^7.1.0","diff":"^9.0.0","glob":"^13.0.6","uuid":"^14.0.1","yaml":"^2.9.0","react":"^19.2.7","sharp":"^0.35.3","shiki":"^4.3.1","marked":"^18.0.5","openai":"^7.1.0","linkedom":"^0.18.13","turndown":"^7.2.4","@inkjs/ui":"^2.0.0","commander":"^15.0.0","markdansi":"0.3.2","clipboardy":"^5.3.1","ansi-escapes":"^7.3.0","puppeteer-core":"25.4.0","@vscode/ripgrep":"1.18.0","@xterm/headless":"6.0.0","@mozilla/readability":"^0.6.0","@xterm/addon-unicode11":"0.9.0","@assistant-ui/react-ink":"^0.0.35","@modelcontextprotocol/sdk":"^1.29.0","@assistant-ui/react-ink-markdown":"^0.0.34"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^10.6.0","globals":"^17.7.0","@eslint/js":"^10.0.1","@types/bun":"^1.3.14","typescript":"^6.0.3","@types/react":"^19.2.17","@types/chrome":"^0.2.2","@biomejs/biome":"^2.5.2","@types/turndown":"^5.0.6","typescript-eslint":"^8.62.1","ink-testing-library":"^4.0.0","eslint-plugin-react-hooks":"^7.1.1"},"bundleDependencies":["markdansi"],"patchedDependencies":{"markdansi@0.3.2":"patches/markdansi@0.3.2.patch"},"_npmOperationalInternal":{"tmp":"tmp/tinker-agent_2.2.0_1788016871891_0.8830718531340713","host":"s3://npm-registry-packages-npm-production"}},"2.3.0":{"name":"tinker-agent","version":"2.3.0","license":"Apache-2.0","_id":"tinker-agent@2.3.0","maintainers":[{"name":"ishowshao","email":"me@ishowshao.com"}],"homepage":"https://github.com/ishowshao/tinker#readme","bugs":{"url":"https://github.com/ishowshao/tinker/issues"},"bin":{"tinker":"bin/tinker.js"},"dist":{"shasum":"ae9d89c2ae40c9b361ddec3e048af5919dfb0383","tarball":"https://registry.npmjs.org/tinker-agent/-/tinker-agent-2.3.0.tgz","fileCount":302,"integrity":"sha512-GU3Lqz/9tXfNAs0V6csdXEdKo/B+uvp0Z8tqXSw2qUGMZDtPZVdNbU6LwA9rrv9tquTQUP3d+puLOLC8wtHuqA==","signatures":[{"sig":"MEQCIB+PyQx+U/cvly5RWoziBb23CyHSTkU9XfxT2SrV0pepAiBQNMJv8XVQJJperr3f9/881ARNuZkkyg+crpiw3zRdag==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/tinker-agent@2.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2562356},"type":"module","engines":{"node":">=20.0.0"},"gitHead":"d2e48330ceab5b59d76bc889358f2df8f7b00777","scripts":{"lint":"eslint \"bin/**/*.js\" \"src/**/*.{ts,tsx}\" \"scripts/**/*.ts\" \"packages/**/*.ts\" --max-warnings=0","test":"FORCE_COLOR=0 bun test","check":"bun run typecheck && bun run format:check && bun run lint && bun run docs:check && bun run test && bun run bench:smoke","format":"biome format --write .","tinker":"bun src/cli/index.ts","lint:fix":"eslint \"bin/**/*.js\" \"src/**/*.{ts,tsx}\" \"scripts/**/*.ts\" \"packages/**/*.ts\" --fix","test:e2e":"FORCE_COLOR=0 bun test src/__tests__/cli-pty src/__tests__/pty-tui-harness packages/tinker-chrome/__tests__/native-host-integration","test:fast":"FORCE_COLOR=0 bun test --path-ignore-patterns='**/*pty*.test.ts' --path-ignore-patterns='**/native-host-integration.test.ts'","typecheck":"tsc --noEmit","check:fast":"bun run typecheck && bun run format:check && bun run lint && bun run test:fast","chrome:mcp":"bun packages/tinker-chrome/src/cli.ts mcp","docs:check":"bun scripts/render-public-contract-docs.ts --check","bench:smoke":"bun scripts/bench-smoke.ts","bench:recall":"bun scripts/bench-recall.ts","chrome:build":"bun packages/tinker-chrome/scripts/build.ts","chrome:smoke":"bun packages/tinker-chrome/scripts/live-smoke.ts","format:check":"biome format .","docs:generate":"bun scripts/render-public-contract-docs.ts --write","release:verify":"bun scripts/verify-release-package.ts","chrome:diagnose":"bun packages/tinker-chrome/src/cli.ts diagnose","bench:long-session":"bun scripts/bench-long-session-memory.ts","bench:k3-image-live":"bun scripts/k3-image-live-smoke.ts","chrome:install-host":"bun packages/tinker-chrome/src/cli.ts install-host","bench:view-image-live":"bun scripts/view-image-live-smoke.ts","bench:i4-active-recall":"bun scripts/bench-i4-active-recall.ts","bench:i3-provider-smoke":"bun scripts/bench-i3-provider-smoke.ts","qualify:i4-active-recall":"bun scripts/qualify-i4-active-recall.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:795da10a-375d-45a1-8104-9a76272864dc"}},"repository":{"url":"git+https://github.com/ishowshao/tinker.git","type":"git"},"_npmVersion":"11.6.2","description":"A personal coding agent with an interactive TUI and one-shot CLI.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"bun":"1.3.14","ink":"^7.1.0","diff":"^9.0.0","glob":"^13.0.6","uuid":"^14.0.1","yaml":"^2.9.0","react":"^19.2.7","sharp":"^0.35.3","shiki":"^4.3.1","marked":"^18.0.5","openai":"^7.1.0","linkedom":"^0.18.13","turndown":"^7.2.4","@inkjs/ui":"^2.0.0","commander":"^15.0.0","markdansi":"0.3.2","clipboardy":"^5.3.1","ansi-escapes":"^7.3.0","puppeteer-core":"25.4.0","@vscode/ripgrep":"1.18.0","@xterm/headless":"6.0.0","@mozilla/readability":"^0.6.0","@xterm/addon-unicode11":"0.9.0","@assistant-ui/react-ink":"^0.0.35","@modelcontextprotocol/sdk":"^1.29.0","@assistant-ui/react-ink-markdown":"^0.0.34"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^10.6.0","globals":"^17.7.0","@eslint/js":"^10.0.1","@types/bun":"^1.3.14","typescript":"^6.0.3","@types/react":"^19.2.17","@types/chrome":"^0.2.2","@biomejs/biome":"^2.5.2","@types/turndown":"^5.0.6","typescript-eslint":"^8.62.1","ink-testing-library":"^4.0.0","eslint-plugin-react-hooks":"^7.1.1"},"bundleDependencies":["markdansi"],"patchedDependencies":{"markdansi@0.3.2":"patches/markdansi@0.3.2.patch"},"_npmOperationalInternal":{"tmp":"tmp/tinker-agent_2.3.0_1788137666024_0.8587983196961682","host":"s3://npm-registry-packages-npm-production"}},"2.4.0":{"name":"tinker-agent","version":"2.4.0","license":"Apache-2.0","_id":"tinker-agent@2.4.0","maintainers":[{"name":"ishowshao","email":"me@ishowshao.com"}],"homepage":"https://github.com/ishowshao/tinker#readme","bugs":{"url":"https://github.com/ishowshao/tinker/issues"},"bin":{"tinker":"bin/tinker.js"},"dist":{"shasum":"37a8177600c82c490cc7d69363752826a715a94c","tarball":"https://registry.npmjs.org/tinker-agent/-/tinker-agent-2.4.0.tgz","fileCount":304,"integrity":"sha512-zRZJu5Vy2H9w7nHPnadd4JSWT22eKfoTd07CP0t0fz7+y5/nb0joaCzkzqUTEZTILSoNkG3r0yG0rBpWMpX4DQ==","signatures":[{"sig":"MEQCIAWOfSpO0WdMAmnwbLjjwnxAniuvlJgsxM5dz6XziX2iAiAayY78DNJkyqjDfddX2eGeKHaCd+BH8X8J7k9rBBHvig==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/tinker-agent@2.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2609851},"type":"module","engines":{"node":">=20.0.0"},"gitHead":"ab4619d445c24a69cafaadb855c875f055131873","scripts":{"lint":"eslint \"bin/**/*.js\" \"src/**/*.{ts,tsx}\" \"scripts/**/*.ts\" \"packages/**/*.ts\" --max-warnings=0","test":"FORCE_COLOR=0 bun test","check":"bun run typecheck && bun run format:check && bun run lint && bun run docs:check && bun run test && bun run bench:smoke","format":"biome format --write .","tinker":"bun src/cli/index.ts","lint:fix":"eslint \"bin/**/*.js\" \"src/**/*.{ts,tsx}\" \"scripts/**/*.ts\" \"packages/**/*.ts\" --fix","test:e2e":"FORCE_COLOR=0 bun test src/__tests__/cli-pty src/__tests__/pty-tui-harness packages/tinker-chrome/__tests__/native-host-integration","test:fast":"FORCE_COLOR=0 bun test --path-ignore-patterns='**/*pty*.test.ts' --path-ignore-patterns='**/native-host-integration.test.ts'","typecheck":"tsc --noEmit","check:fast":"bun run typecheck && bun run format:check && bun run lint && bun run test:fast","chrome:mcp":"bun packages/tinker-chrome/src/cli.ts mcp","docs:check":"bun scripts/render-public-contract-docs.ts --check","bench:smoke":"bun scripts/bench-smoke.ts","bench:recall":"bun scripts/bench-recall.ts","chrome:build":"bun packages/tinker-chrome/scripts/build.ts","chrome:smoke":"bun packages/tinker-chrome/scripts/live-smoke.ts","format:check":"biome format .","docs:generate":"bun scripts/render-public-contract-docs.ts --write","release:verify":"bun scripts/verify-release-package.ts","chrome:diagnose":"bun packages/tinker-chrome/src/cli.ts diagnose","bench:long-session":"bun scripts/bench-long-session-memory.ts","bench:k3-image-live":"bun scripts/k3-image-live-smoke.ts","chrome:install-host":"bun packages/tinker-chrome/src/cli.ts install-host","bench:view-image-live":"bun scripts/view-image-live-smoke.ts","bench:i4-active-recall":"bun scripts/bench-i4-active-recall.ts","bench:i3-provider-smoke":"bun scripts/bench-i3-provider-smoke.ts","qualify:i4-active-recall":"bun scripts/qualify-i4-active-recall.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:795da10a-375d-45a1-8104-9a76272864dc"}},"repository":{"url":"git+https://github.com/ishowshao/tinker.git","type":"git"},"_npmVersion":"11.6.2","description":"A personal coding agent with an interactive TUI and one-shot CLI.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"bun":"1.3.14","ink":"^7.1.0","diff":"^9.0.0","glob":"^13.0.6","uuid":"^14.0.1","yaml":"^2.9.0","react":"^19.2.7","sharp":"^0.35.3","shiki":"^4.3.1","marked":"^18.0.5","openai":"^7.1.0","linkedom":"^0.18.13","turndown":"^7.2.4","@inkjs/ui":"^2.0.0","commander":"^15.0.0","markdansi":"0.3.2","clipboardy":"^5.3.1","ansi-escapes":"^7.3.0","puppeteer-core":"25.4.0","@vscode/ripgrep":"1.18.0","@xterm/headless":"6.0.0","@mozilla/readability":"^0.6.0","@xterm/addon-unicode11":"0.9.0","@assistant-ui/react-ink":"^0.0.35","@modelcontextprotocol/sdk":"^1.29.0","@assistant-ui/react-ink-markdown":"^0.0.34"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^10.6.0","globals":"^17.7.0","@eslint/js":"^10.0.1","@types/bun":"^1.3.14","typescript":"^6.0.3","@types/react":"^19.2.17","@types/chrome":"^0.2.2","@biomejs/biome":"^2.5.2","@types/turndown":"^5.0.6","typescript-eslint":"^8.62.1","ink-testing-library":"^4.0.0","eslint-plugin-react-hooks":"^7.1.1"},"bundleDependencies":["markdansi"],"patchedDependencies":{"markdansi@0.3.2":"patches/markdansi@0.3.2.patch"},"_npmOperationalInternal":{"tmp":"tmp/tinker-agent_2.4.0_1788313198555_0.28151993483701787","host":"s3://npm-registry-packages-npm-production"}},"2.5.0":{"name":"tinker-agent","version":"2.5.0","license":"Apache-2.0","_id":"tinker-agent@2.5.0","maintainers":[{"name":"ishowshao","email":"me@ishowshao.com"}],"homepage":"https://github.com/ishowshao/tinker#readme","bugs":{"url":"https://github.com/ishowshao/tinker/issues"},"bin":{"tinker":"bin/tinker.js"},"dist":{"shasum":"5f231b7e93fb0df0a0a80004edaa522ea879a160","tarball":"https://registry.npmjs.org/tinker-agent/-/tinker-agent-2.5.0.tgz","fileCount":305,"integrity":"sha512-RvgQuwTSwAvCM0bScq4KVLVf5m1s9T3dfYLEboI1LaqUIRz0adgy7WNv9ZHyXrIjYzMLECEaH3th4D7eEFAJ+w==","signatures":[{"sig":"MEYCIQDy9jNDYlGexjrsCNcCgVkd2lAuTewp0YpFCpjtp0c4owIhANgbVyVsQsZvep6Y29AGpn2NjaqvYxVsJoyWgsSL3TKO","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/tinker-agent@2.5.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2616114},"type":"module","engines":{"node":">=20.0.0"},"gitHead":"3c3768bc305b7f285b6580e1e2b75bf3686db05a","scripts":{"lint":"eslint \"bin/**/*.js\" \"src/**/*.{ts,tsx}\" \"scripts/**/*.ts\" \"packages/**/*.ts\" --max-warnings=0","test":"FORCE_COLOR=0 bun test","check":"bun run typecheck && bun run format:check && bun run lint && bun run docs:check && bun run test && bun run bench:smoke","format":"biome format --write .","tinker":"bun src/cli/index.ts","lint:fix":"eslint \"bin/**/*.js\" \"src/**/*.{ts,tsx}\" \"scripts/**/*.ts\" \"packages/**/*.ts\" --fix","test:e2e":"FORCE_COLOR=0 bun test src/__tests__/cli-pty src/__tests__/pty-tui-harness packages/tinker-chrome/__tests__/native-host-integration","test:fast":"FORCE_COLOR=0 bun test --path-ignore-patterns='**/*pty*.test.ts' --path-ignore-patterns='**/native-host-integration.test.ts'","typecheck":"tsc --noEmit","check:fast":"bun run typecheck && bun run format:check && bun run lint && bun run test:fast","chrome:mcp":"bun packages/tinker-chrome/src/cli.ts mcp","docs:check":"bun scripts/render-public-contract-docs.ts --check","bench:smoke":"bun scripts/bench-smoke.ts","bench:recall":"bun scripts/bench-recall.ts","chrome:build":"bun packages/tinker-chrome/scripts/build.ts","chrome:smoke":"bun packages/tinker-chrome/scripts/live-smoke.ts","format:check":"biome format .","docs:generate":"bun scripts/render-public-contract-docs.ts --write","release:verify":"bun scripts/verify-release-package.ts","chrome:diagnose":"bun packages/tinker-chrome/src/cli.ts diagnose","bench:long-session":"bun scripts/bench-long-session-memory.ts","bench:k3-image-live":"bun scripts/k3-image-live-smoke.ts","chrome:install-host":"bun packages/tinker-chrome/src/cli.ts install-host","bench:view-image-live":"bun scripts/view-image-live-smoke.ts","bench:i4-active-recall":"bun scripts/bench-i4-active-recall.ts","bench:i3-provider-smoke":"bun scripts/bench-i3-provider-smoke.ts","qualify:i4-active-recall":"bun scripts/qualify-i4-active-recall.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:795da10a-375d-45a1-8104-9a76272864dc"}},"repository":{"url":"git+https://github.com/ishowshao/tinker.git","type":"git"},"_npmVersion":"11.6.2","description":"A personal coding agent with an interactive TUI and one-shot CLI.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"bun":"1.3.14","ink":"^7.1.0","diff":"^9.0.0","glob":"^13.0.6","uuid":"^14.0.1","yaml":"^2.9.0","react":"^19.2.7","sharp":"^0.35.3","shiki":"^4.3.1","marked":"^18.0.5","openai":"^7.1.0","linkedom":"^0.18.13","turndown":"^7.2.4","@inkjs/ui":"^2.0.0","commander":"^15.0.0","markdansi":"0.3.2","clipboardy":"^5.3.1","ansi-escapes":"^7.3.0","puppeteer-core":"25.4.0","@vscode/ripgrep":"1.18.0","@xterm/headless":"6.0.0","@mozilla/readability":"^0.6.0","@xterm/addon-unicode11":"0.9.0","@assistant-ui/react-ink":"^0.0.35","@modelcontextprotocol/sdk":"^1.29.0","@assistant-ui/react-ink-markdown":"^0.0.34"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^10.6.0","globals":"^17.7.0","@eslint/js":"^10.0.1","@types/bun":"^1.3.14","typescript":"^6.0.3","@types/react":"^19.2.17","@types/chrome":"^0.2.2","@biomejs/biome":"^2.5.2","@types/turndown":"^5.0.6","typescript-eslint":"^8.62.1","ink-testing-library":"^4.0.0","eslint-plugin-react-hooks":"^7.1.1"},"bundleDependencies":["markdansi"],"patchedDependencies":{"markdansi@0.3.2":"patches/markdansi@0.3.2.patch"},"_npmOperationalInternal":{"tmp":"tmp/tinker-agent_2.5.0_1788366896589_0.06311087500321344","host":"s3://npm-registry-packages-npm-production"}},"2.6.0":{"name":"tinker-agent","version":"2.6.0","license":"Apache-2.0","_id":"tinker-agent@2.6.0","maintainers":[{"name":"ishowshao","email":"me@ishowshao.com"}],"homepage":"https://github.com/ishowshao/tinker#readme","bugs":{"url":"https://github.com/ishowshao/tinker/issues"},"bin":{"tinker":"bin/tinker.js"},"dist":{"shasum":"06033b225942efde49527b43512fe5c9b1a8785e","tarball":"https://registry.npmjs.org/tinker-agent/-/tinker-agent-2.6.0.tgz","fileCount":312,"integrity":"sha512-QPi8paO4JShagcn6UXLMK77aYXdxb6PEoknvwMZs6E8TquL6gCUgPybuySOrdhJrs4c6+U8XOetcmtrrmAUS5g==","signatures":[{"sig":"MEQCIDf/k5rLH/Mt+24DVEsyrEyOJNVC5nix9l6wlyXkVPlnAiA1zYYe8oj40elro9x193OYjlbrz3RkpFuZiukeDOSfxA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/tinker-agent@2.6.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2626559},"type":"module","engines":{"node":">=20.0.0"},"gitHead":"3552c593bce2763723f8fd02ad03974fafa5d2b3","scripts":{"lint":"eslint \"bin/**/*.js\" \"src/**/*.{ts,tsx}\" \"scripts/**/*.ts\" \"packages/**/*.ts\" --max-warnings=0","test":"FORCE_COLOR=0 bun test","check":"bun run typecheck && bun run format:check && bun run lint && bun run docs:check && bun run test && bun run bench:smoke","format":"biome format --write .","tinker":"bun src/cli/index.ts","lint:fix":"eslint \"bin/**/*.js\" \"src/**/*.{ts,tsx}\" \"scripts/**/*.ts\" \"packages/**/*.ts\" --fix","test:e2e":"FORCE_COLOR=0 bun test src/__tests__/cli-pty src/__tests__/pty-tui-harness packages/tinker-chrome/__tests__/native-host-integration","test:fast":"FORCE_COLOR=0 bun test --path-ignore-patterns='**/*pty*.test.ts' --path-ignore-patterns='**/native-host-integration.test.ts'","typecheck":"tsc --noEmit","check:fast":"bun run typecheck && bun run format:check && bun run lint && bun run test:fast","chrome:mcp":"bun packages/tinker-chrome/src/cli.ts mcp","docs:check":"bun scripts/render-public-contract-docs.ts --check","bench:smoke":"bun scripts/bench-smoke.ts","bench:recall":"bun scripts/bench-recall.ts","chrome:build":"bun packages/tinker-chrome/scripts/build.ts","chrome:smoke":"bun packages/tinker-chrome/scripts/live-smoke.ts","format:check":"biome format .","docs:generate":"bun scripts/render-public-contract-docs.ts --write","release:verify":"bun scripts/verify-release-package.ts","chrome:diagnose":"bun packages/tinker-chrome/src/cli.ts diagnose","bench:long-session":"bun scripts/bench-long-session-memory.ts","bench:k3-image-live":"bun scripts/k3-image-live-smoke.ts","chrome:install-host":"bun packages/tinker-chrome/src/cli.ts install-host","bench:view-image-live":"bun scripts/view-image-live-smoke.ts","bench:i4-active-recall":"bun scripts/bench-i4-active-recall.ts","bench:i3-provider-smoke":"bun scripts/bench-i3-provider-smoke.ts","qualify:i4-active-recall":"bun scripts/qualify-i4-active-recall.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:795da10a-375d-45a1-8104-9a76272864dc"}},"repository":{"url":"git+https://github.com/ishowshao/tinker.git","type":"git"},"_npmVersion":"11.6.2","description":"A personal coding agent with an interactive TUI and one-shot CLI.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"bun":"1.3.14","ink":"^7.1.0","diff":"^9.0.0","glob":"^13.0.6","uuid":"^14.0.1","yaml":"^2.9.0","react":"^19.2.7","sharp":"^0.35.3","shiki":"^4.3.1","marked":"^18.0.5","openai":"^7.1.0","linkedom":"^0.18.13","turndown":"^7.2.4","@inkjs/ui":"^2.0.0","commander":"^15.0.0","markdansi":"0.3.2","clipboardy":"^5.3.1","ansi-escapes":"^7.3.0","puppeteer-core":"25.4.0","@vscode/ripgrep":"1.18.0","@xterm/headless":"6.0.0","@mozilla/readability":"^0.6.0","@xterm/addon-unicode11":"0.9.0","@assistant-ui/react-ink":"^0.0.35","@modelcontextprotocol/sdk":"^1.29.0","@assistant-ui/react-ink-markdown":"^0.0.34"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^10.6.0","globals":"^17.7.0","@eslint/js":"^10.0.1","@types/bun":"^1.3.14","typescript":"^6.0.3","@types/react":"^19.2.17","@types/chrome":"^0.2.2","@biomejs/biome":"^2.5.2","@types/turndown":"^5.0.6","typescript-eslint":"^8.62.1","ink-testing-library":"^4.0.0","eslint-plugin-react-hooks":"^7.1.1"},"bundleDependencies":["markdansi"],"patchedDependencies":{"markdansi@0.3.2":"patches/markdansi@0.3.2.patch"},"_npmOperationalInternal":{"tmp":"tmp/tinker-agent_2.6.0_1788437443937_0.532800908434458","host":"s3://npm-registry-packages-npm-production"}},"2.7.0":{"name":"tinker-agent","version":"2.7.0","license":"Apache-2.0","_id":"tinker-agent@2.7.0","maintainers":[{"name":"ishowshao","email":"me@ishowshao.com"}],"homepage":"https://github.com/ishowshao/tinker#readme","bugs":{"url":"https://github.com/ishowshao/tinker/issues"},"bin":{"tinker":"bin/tinker.js"},"dist":{"shasum":"3ff212c06cefdeb2523917f4ee410da7327c3e1f","tarball":"https://registry.npmjs.org/tinker-agent/-/tinker-agent-2.7.0.tgz","fileCount":317,"integrity":"sha512-w8rOTfg36tgkhGd7TXlvIyV6jIEFQZYKVPxhNZUr9/wb4xq6vUldHtU7uErFLjqJhMYhIcioxKfY1jTooZlcRg==","signatures":[{"sig":"MEUCIAfUI3P9F014XXuA+zDBj+zTzrT5W29QKT2qEMZMGSz7AiEAhJQMvuc/RBiDVJP8+ToR/3PanpW5H68od4mvGjtZ+xA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCICdg0v0OoSd/rmBqcTDmy1bgTBWeRsEBl7MhRhrumy1iAiB7CIEIFWwNnXpWf81RMI1aCHbo+Qf6W5DoO0Y+f4rFOw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/tinker-agent@2.7.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2682485},"type":"module","engines":{"node":">=20.0.0"},"gitHead":"130aa093d343e37ce011a53d1db56c481255a0a2","scripts":{"lint":"eslint \"bin/**/*.js\" \"src/**/*.{ts,tsx}\" \"scripts/**/*.ts\" \"packages/**/*.ts\" --max-warnings=0","test":"FORCE_COLOR=0 bun test","check":"bun run typecheck && bun run format:check && bun run lint && bun run docs:check && bun run test && bun run bench:smoke","format":"biome format --write .","tinker":"bun src/cli/index.ts","lint:fix":"eslint \"bin/**/*.js\" \"src/**/*.{ts,tsx}\" \"scripts/**/*.ts\" \"packages/**/*.ts\" --fix","test:e2e":"FORCE_COLOR=0 bun test src/__tests__/cli-pty src/__tests__/pty-tui-harness packages/tinker-chrome/__tests__/native-host-integration","test:fast":"FORCE_COLOR=0 bun test --path-ignore-patterns='**/*pty*.test.ts' --path-ignore-patterns='**/native-host-integration.test.ts'","typecheck":"tsc --noEmit","check:fast":"bun run typecheck && bun run format:check && bun run lint && bun run test:fast","chrome:mcp":"bun packages/tinker-chrome/src/cli.ts mcp","docs:check":"bun scripts/render-public-contract-docs.ts --check","bench:smoke":"bun scripts/bench-smoke.ts","bench:recall":"bun scripts/bench-recall.ts","chrome:build":"bun packages/tinker-chrome/scripts/build.ts","chrome:smoke":"bun packages/tinker-chrome/scripts/live-smoke.ts","format:check":"biome format .","docs:generate":"bun scripts/render-public-contract-docs.ts --write","release:verify":"bun scripts/verify-release-package.ts","chrome:diagnose":"bun packages/tinker-chrome/src/cli.ts diagnose","bench:long-session":"bun scripts/bench-long-session-memory.ts","bench:k3-image-live":"bun scripts/k3-image-live-smoke.ts","chrome:install-host":"bun packages/tinker-chrome/src/cli.ts install-host","bench:view-image-live":"bun scripts/view-image-live-smoke.ts","bench:i4-active-recall":"bun scripts/bench-i4-active-recall.ts","bench:i3-provider-smoke":"bun scripts/bench-i3-provider-smoke.ts","qualify:i4-active-recall":"bun scripts/qualify-i4-active-recall.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:795da10a-375d-45a1-8104-9a76272864dc"}},"repository":{"url":"git+https://github.com/ishowshao/tinker.git","type":"git"},"_npmVersion":"11.6.2","description":"A personal coding agent with an interactive TUI and one-shot CLI.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"bun":"1.3.14","ink":"^7.1.0","diff":"^9.0.0","glob":"^13.0.6","uuid":"^14.0.1","yaml":"^2.9.0","react":"^19.2.7","sharp":"^0.35.3","shiki":"^4.3.1","marked":"^18.0.5","openai":"^7.1.0","linkedom":"^0.18.13","turndown":"^7.2.4","@inkjs/ui":"^2.0.0","commander":"^15.0.0","markdansi":"0.3.2","clipboardy":"^5.3.1","ansi-escapes":"^7.3.0","puppeteer-core":"25.4.0","@vscode/ripgrep":"1.18.0","@xterm/headless":"6.0.0","@mozilla/readability":"^0.6.0","@xterm/addon-unicode11":"0.9.0","@assistant-ui/react-ink":"^0.0.35","@modelcontextprotocol/sdk":"^1.29.0","@assistant-ui/react-ink-markdown":"^0.0.34"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^10.6.0","globals":"^17.7.0","@eslint/js":"^10.0.1","@types/bun":"^1.3.14","typescript":"^6.0.3","@types/react":"^19.2.17","@types/chrome":"^0.2.2","@biomejs/biome":"^2.5.2","@types/turndown":"^5.0.6","typescript-eslint":"^8.62.1","ink-testing-library":"^4.0.0","eslint-plugin-react-hooks":"^7.1.1"},"bundleDependencies":["markdansi"],"patchedDependencies":{"markdansi@0.3.2":"patches/markdansi@0.3.2.patch"},"_npmOperationalInternal":{"tmp":"tmp/tinker-agent_2.7.0_1788515256301_0.38077304712782123","host":"s3://npm-registry-packages-npm-production"}},"2.8.0":{"name":"tinker-agent","version":"2.8.0","license":"Apache-2.0","_id":"tinker-agent@2.8.0","maintainers":[{"name":"ishowshao","email":"me@ishowshao.com"}],"homepage":"https://github.com/ishowshao/tinker#readme","bugs":{"url":"https://github.com/ishowshao/tinker/issues"},"bin":{"tinker":"bin/tinker.js"},"dist":{"shasum":"1f7baca5981b6eb6dc28fbb9aabe75d17a340a32","tarball":"https://registry.npmjs.org/tinker-agent/-/tinker-agent-2.8.0.tgz","fileCount":317,"integrity":"sha512-jMIGjiiC22eC/ikay5DmX5PGOCtc+hA89Slg6nU/sVY8hJ7ZmCVcj7mMtGfVPMBpCp4w1BUmuAyknyYqRR1hpw==","signatures":[{"sig":"MEUCIQD/BxPgbLjUKGiidw4zNlpUKP3xoPyhyaAh+9ePqj1EmQIgUFpMLbhy3tCr/vd2mdWgmw/NZowXBp4vgOs68m0+MrY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIHSXju9gb10vTIj4R4RLxGDmWeuRpeoAys3btcSuBvRnAiBb7TDUBVrGohneqSx06dsROZhOigB0syU+XBxruzQ8+g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/tinker-agent@2.8.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2683463},"type":"module","engines":{"node":">=20.0.0"},"gitHead":"bf83b1a4b7ff15d0f871af451f4059ed8d3f6d96","scripts":{"lint":"eslint \"bin/**/*.js\" \"src/**/*.{ts,tsx}\" \"scripts/**/*.ts\" \"packages/**/*.ts\" --max-warnings=0","test":"FORCE_COLOR=0 bun test","check":"bun run typecheck && bun run format:check && bun run lint && bun run docs:check && bun run test && bun run bench:smoke","format":"biome format --write .","tinker":"bun src/cli/index.ts","lint:fix":"eslint \"bin/**/*.js\" \"src/**/*.{ts,tsx}\" \"scripts/**/*.ts\" \"packages/**/*.ts\" --fix","test:e2e":"FORCE_COLOR=0 bun test src/__tests__/cli-pty src/__tests__/pty-tui-harness packages/tinker-chrome/__tests__/native-host-integration","test:fast":"FORCE_COLOR=0 bun test --path-ignore-patterns='**/*pty*.test.ts' --path-ignore-patterns='**/native-host-integration.test.ts'","typecheck":"tsc --noEmit","check:fast":"bun run typecheck && bun run format:check && bun run lint && bun run test:fast","chrome:mcp":"bun packages/tinker-chrome/src/cli.ts mcp","docs:check":"bun scripts/render-public-contract-docs.ts --check","bench:smoke":"bun scripts/bench-smoke.ts","bench:recall":"bun scripts/bench-recall.ts","chrome:build":"bun packages/tinker-chrome/scripts/build.ts","chrome:smoke":"bun packages/tinker-chrome/scripts/live-smoke.ts","format:check":"biome format .","docs:generate":"bun scripts/render-public-contract-docs.ts --write","release:verify":"bun scripts/verify-release-package.ts","chrome:diagnose":"bun packages/tinker-chrome/src/cli.ts diagnose","bench:long-session":"bun scripts/bench-long-session-memory.ts","bench:k3-image-live":"bun scripts/k3-image-live-smoke.ts","chrome:install-host":"bun packages/tinker-chrome/src/cli.ts install-host","bench:view-image-live":"bun scripts/view-image-live-smoke.ts","bench:i4-active-recall":"bun scripts/bench-i4-active-recall.ts","bench:i3-provider-smoke":"bun scripts/bench-i3-provider-smoke.ts","qualify:i4-active-recall":"bun scripts/qualify-i4-active-recall.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:795da10a-375d-45a1-8104-9a76272864dc"}},"repository":{"url":"git+https://github.com/ishowshao/tinker.git","type":"git"},"_npmVersion":"11.6.2","description":"A personal coding agent with an interactive TUI and one-shot CLI.","directories":{},"_nodeVersion":"24.20.0","dependencies":{"bun":"1.3.14","ink":"^7.1.0","diff":"^9.0.0","glob":"^13.0.6","uuid":"^14.0.1","yaml":"^2.9.0","react":"^19.2.7","sharp":"^0.35.3","shiki":"^4.3.1","marked":"^18.0.5","openai":"^7.1.0","linkedom":"^0.18.13","turndown":"^7.2.4","@inkjs/ui":"^2.0.0","commander":"^15.0.0","markdansi":"0.3.2","clipboardy":"^5.3.1","ansi-escapes":"^7.3.0","puppeteer-core":"25.4.0","@vscode/ripgrep":"1.18.0","@xterm/headless":"6.0.0","@mozilla/readability":"^0.6.0","@xterm/addon-unicode11":"0.9.0","@assistant-ui/react-ink":"^0.0.35","@modelcontextprotocol/sdk":"^1.29.0","@assistant-ui/react-ink-markdown":"^0.0.34"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^10.6.0","globals":"^17.7.0","@eslint/js":"^10.0.1","@types/bun":"^1.3.14","typescript":"^6.0.3","@types/react":"^19.2.17","@types/chrome":"^0.2.2","@biomejs/biome":"^2.5.2","@types/turndown":"^5.0.6","typescript-eslint":"^8.62.1","ink-testing-library":"^4.0.0","eslint-plugin-react-hooks":"^7.1.1"},"bundleDependencies":["markdansi"],"patchedDependencies":{"markdansi@0.3.2":"patches/markdansi@0.3.2.patch"},"_npmOperationalInternal":{"tmp":"tmp/tinker-agent_2.8.0_1788537950718_0.7802848832874525","host":"s3://npm-registry-packages-npm-production"}},"2.9.0":{"name":"tinker-agent","version":"2.9.0","license":"Apache-2.0","_id":"tinker-agent@2.9.0","maintainers":[{"name":"ishowshao","email":"me@ishowshao.com"}],"homepage":"https://github.com/ishowshao/tinker#readme","bugs":{"url":"https://github.com/ishowshao/tinker/issues"},"bin":{"tinker":"bin/tinker.js"},"dist":{"shasum":"6b50356d0d17c374681dc6e4a577c3d8fba46a90","tarball":"https://registry.npmjs.org/tinker-agent/-/tinker-agent-2.9.0.tgz","fileCount":333,"integrity":"sha512-lAHzScFb9LN/WTlBZadgC3ZWad8UCuSKvl55QylPhuwPIYdZw3HHrF/lmZKuevAKAhwPoQAkcnDln/REWCTjyg==","signatures":[{"sig":"MEYCIQCp/zfHEOPFa+u9fRwQMhiabR66z3Xj22G+emImQki5QQIhAMcV8y4khLyRBiTKi+n+vKU9A9Pw9/KZmPlZE4mwfujO","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIEUrKlWY7ajXkXz0dlhfpgnGJXm754AyI6hafD709z4/AiAkpEUcHEOOIsfd5oQx88YsqhcsdBWqxXy9TnrsRp20cA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/tinker-agent@2.9.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2733962},"type":"module","engines":{"node":">=20.0.0"},"gitHead":"d31272791b747df97d93bfc74a82f7d67ecf73e1","scripts":{"lint":"eslint \"bin/**/*.js\" \"src/**/*.{ts,tsx}\" \"scripts/**/*.ts\" \"packages/**/*.ts\" --max-warnings=0","test":"FORCE_COLOR=0 bun test","check":"bun run check:source-lines && bun run typecheck && bun run format:check && bun run lint && bun run docs:check && bun run test && bun run bench:smoke","format":"biome format --write .","tinker":"bun src/cli/index.ts","lint:fix":"eslint \"bin/**/*.js\" \"src/**/*.{ts,tsx}\" \"scripts/**/*.ts\" \"packages/**/*.ts\" --fix","test:e2e":"FORCE_COLOR=0 bun test src/__tests__/cli-pty src/__tests__/pty-tui-harness packages/tinker-chrome/__tests__/native-host-integration","test:fast":"FORCE_COLOR=0 bun test --path-ignore-patterns='**/*pty*.test.ts' --path-ignore-patterns='**/native-host-integration.test.ts'","typecheck":"tsc --noEmit","check:fast":"bun run check:source-lines && bun run typecheck && bun run format:check && bun run lint && bun run test:fast","chrome:mcp":"bun packages/tinker-chrome/src/cli.ts mcp","docs:check":"bun scripts/render-public-contract-docs.ts --check","bench:smoke":"bun scripts/bench-smoke.ts","bench:recall":"bun scripts/bench-recall.ts","chrome:build":"bun packages/tinker-chrome/scripts/build.ts","chrome:smoke":"bun packages/tinker-chrome/scripts/live-smoke.ts","format:check":"biome format .","docs:generate":"bun scripts/render-public-contract-docs.ts --write","release:verify":"bun scripts/verify-release-package.ts","chrome:diagnose":"bun packages/tinker-chrome/src/cli.ts diagnose","bench:long-session":"bun scripts/bench-long-session-memory.ts","check:source-lines":"bun scripts/check-source-lines.ts","bench:k3-image-live":"bun scripts/k3-image-live-smoke.ts","chrome:install-host":"bun packages/tinker-chrome/src/cli.ts install-host","bench:view-image-live":"bun scripts/view-image-live-smoke.ts","bench:i4-active-recall":"bun scripts/bench-i4-active-recall.ts","bench:i3-provider-smoke":"bun scripts/bench-i3-provider-smoke.ts","qualify:i4-active-recall":"bun scripts/qualify-i4-active-recall.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:795da10a-375d-45a1-8104-9a76272864dc"}},"repository":{"url":"git+https://github.com/ishowshao/tinker.git","type":"git"},"_npmVersion":"11.6.2","description":"A personal coding agent with an interactive TUI and one-shot CLI.","directories":{},"_nodeVersion":"24.20.0","dependencies":{"bun":"1.3.14","ink":"^7.1.0","diff":"^9.0.0","glob":"^13.0.6","uuid":"^14.0.1","yaml":"^2.9.0","react":"^19.2.7","sharp":"^0.35.3","shiki":"^4.3.1","marked":"^18.0.5","openai":"^7.1.0","linkedom":"^0.18.13","turndown":"^7.2.4","@inkjs/ui":"^2.0.0","commander":"^15.0.0","markdansi":"0.3.2","clipboardy":"^5.3.1","ansi-escapes":"^7.3.0","puppeteer-core":"25.4.0","@vscode/ripgrep":"1.18.0","@xterm/headless":"6.0.0","@mozilla/readability":"^0.6.0","@xterm/addon-unicode11":"0.9.0","@assistant-ui/react-ink":"^0.0.35","@modelcontextprotocol/sdk":"^1.29.0","@assistant-ui/react-ink-markdown":"^0.0.34"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^10.6.0","globals":"^17.7.0","@eslint/js":"^10.0.1","@types/bun":"^1.3.14","typescript":"^6.0.3","@types/react":"^19.2.17","@types/chrome":"^0.2.2","@biomejs/biome":"^2.5.2","@types/turndown":"^5.0.6","typescript-eslint":"^8.62.1","ink-testing-library":"^4.0.0","eslint-plugin-react-hooks":"^7.1.1"},"bundleDependencies":["markdansi"],"patchedDependencies":{"markdansi@0.3.2":"patches/markdansi@0.3.2.patch"},"_npmOperationalInternal":{"tmp":"tmp/tinker-agent_2.9.0_1788616465814_0.5586168286604885","host":"s3://npm-registry-packages-npm-production"}},"2.10.0":{"name":"tinker-agent","version":"2.10.0","license":"Apache-2.0","_id":"tinker-agent@2.10.0","maintainers":[{"name":"ishowshao","email":"me@ishowshao.com"}],"homepage":"https://github.com/ishowshao/tinker#readme","bugs":{"url":"https://github.com/ishowshao/tinker/issues"},"bin":{"tinker":"bin/tinker.js"},"dist":{"shasum":"91505ef776d5bfeb21c6e47540f8670cf5258019","tarball":"https://registry.npmjs.org/tinker-agent/-/tinker-agent-2.10.0.tgz","fileCount":350,"integrity":"sha512-yWSjqPrSWk2rdJNhfcVFfdDJuIQhrpRxqNa+8CmRDR3k2oaKafTWfMHAHFtw5OP9YF7xAUVGB6j2+Mvtam2UOg==","signatures":[{"sig":"MEUCIFv8wzwY2fW6qGLtxEFJusyIfoNUYGxMyNa/P/v7TLazAiEA6ktHMeqGXIE+GbzjxaiebhfJW6VX2jlQZhKyZIxUYzM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDB3xaU85uUMoQSMRlbayAfoApzv/lIcasTzopY6v0v/QIhAPpxVwa1qlpsarOMG9porCF2FqRNstpA/ikb6PR/JNva","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/tinker-agent@2.10.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2844282},"type":"module","engines":{"node":">=20.0.0"},"gitHead":"237f031b721d36a566ea8f233f4350df349eddd6","scripts":{"lint":"eslint \"bin/**/*.js\" \"src/**/*.{ts,tsx}\" \"scripts/**/*.ts\" \"packages/**/*.ts\" --max-warnings=0","test":"FORCE_COLOR=0 bun test","check":"bun run check:source-lines && bun run typecheck && bun run format:check && bun run lint && bun run docs:check && bun run test && bun run bench:smoke","format":"biome format --write .","tinker":"bun src/cli/index.ts","lint:fix":"eslint \"bin/**/*.js\" \"src/**/*.{ts,tsx}\" \"scripts/**/*.ts\" \"packages/**/*.ts\" --fix","test:e2e":"FORCE_COLOR=0 bun test src/__tests__/cli-pty src/__tests__/pty-tui-harness packages/tinker-chrome/__tests__/native-host-integration","test:fast":"FORCE_COLOR=0 bun test --path-ignore-patterns='**/*pty*.test.ts' --path-ignore-patterns='**/native-host-integration.test.ts'","typecheck":"tsc --noEmit","check:fast":"bun run check:source-lines && bun run typecheck && bun run format:check && bun run lint && bun run test:fast","chrome:mcp":"bun packages/tinker-chrome/src/cli.ts mcp","docs:check":"bun scripts/render-public-contract-docs.ts --check","bench:smoke":"bun scripts/bench-smoke.ts","bench:recall":"bun scripts/bench-recall.ts","chrome:build":"bun packages/tinker-chrome/scripts/build.ts","chrome:smoke":"bun packages/tinker-chrome/scripts/live-smoke.ts","format:check":"biome format .","docs:generate":"bun scripts/render-public-contract-docs.ts --write","release:verify":"bun scripts/verify-release-package.ts","chrome:diagnose":"bun packages/tinker-chrome/src/cli.ts diagnose","bench:long-session":"bun scripts/bench-long-session-memory.ts","check:source-lines":"bun scripts/check-source-lines.ts","bench:k3-image-live":"bun scripts/k3-image-live-smoke.ts","chrome:install-host":"bun packages/tinker-chrome/src/cli.ts install-host","bench:view-image-live":"bun scripts/view-image-live-smoke.ts","bench:i4-active-recall":"bun scripts/bench-i4-active-recall.ts","bench:i3-provider-smoke":"bun scripts/bench-i3-provider-smoke.ts","qualify:i4-active-recall":"bun scripts/qualify-i4-active-recall.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:795da10a-375d-45a1-8104-9a76272864dc"}},"repository":{"url":"git+https://github.com/ishowshao/tinker.git","type":"git"},"_npmVersion":"11.6.2","description":"A personal coding agent with an interactive TUI and one-shot CLI.","directories":{},"_nodeVersion":"24.20.0","dependencies":{"bun":"1.3.14","ink":"^7.1.0","diff":"^9.0.0","glob":"^13.0.6","uuid":"^14.0.1","yaml":"^2.9.0","react":"^19.2.7","sharp":"^0.35.3","shiki":"^4.3.1","marked":"^18.0.5","openai":"^7.1.0","linkedom":"^0.18.13","turndown":"^7.2.4","@inkjs/ui":"^2.0.0","commander":"^15.0.0","markdansi":"0.3.2","clipboardy":"^5.3.1","ansi-escapes":"^7.3.0","puppeteer-core":"25.4.0","@vscode/ripgrep":"1.18.0","@xterm/headless":"6.0.0","@mozilla/readability":"^0.6.0","@xterm/addon-unicode11":"0.9.0","@assistant-ui/react-ink":"^0.0.35","@modelcontextprotocol/sdk":"^1.29.0","@assistant-ui/react-ink-markdown":"^0.0.34"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^10.6.0","globals":"^17.7.0","@eslint/js":"^10.0.1","@types/bun":"^1.3.14","typescript":"^6.0.3","@types/react":"^19.2.17","@types/chrome":"^0.2.2","@biomejs/biome":"^2.5.2","@types/turndown":"^5.0.6","typescript-eslint":"^8.62.1","ink-testing-library":"^4.0.0","eslint-plugin-react-hooks":"^7.1.1"},"bundleDependencies":["markdansi"],"patchedDependencies":{"markdansi@0.3.2":"patches/markdansi@0.3.2.patch"},"_npmOperationalInternal":{"tmp":"tmp/tinker-agent_2.10.0_1788688599646_0.6103906863153741","host":"s3://npm-registry-packages-npm-production"}},"2.11.0":{"name":"tinker-agent","version":"2.11.0","license":"Apache-2.0","_id":"tinker-agent@2.11.0","maintainers":[{"name":"ishowshao","email":"me@ishowshao.com"}],"homepage":"https://github.com/ishowshao/tinker#readme","bugs":{"url":"https://github.com/ishowshao/tinker/issues"},"bin":{"tinker":"bin/tinker.js"},"dist":{"shasum":"01faf861b3b70ea7c8d6cdf788708c26d9f7fb73","tarball":"https://registry.npmjs.org/tinker-agent/-/tinker-agent-2.11.0.tgz","fileCount":353,"integrity":"sha512-JyeR1p6XVBvb2OnH8UpX4xtA4uawWDJBu5LaOa35ny2TJl9plymEA3ZsnDadXRuqTLd76T47Nc3wwOE8ziwnDg==","signatures":[{"sig":"MEYCIQCkmyIECUXpKdaYDYKzIXOkTIuAP2Lv6vW1pFUTPXAI6gIhAPwJFVVK8QDH6RM1y4ldwbPmdzzWVz+xPwSqvIeKJcqy","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIEgVds4DjlLDPJ/So+zv9U6KQzpwRequ9FdAhFFIrN/FAiBkHUW4FPSUILqNb2MmE7s9O0XT/sIR1E/+eesbLoihjA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/tinker-agent@2.11.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2864170},"type":"module","engines":{"node":">=20.0.0"},"gitHead":"5c4c12fb0c0a3c39a9a99c03f596d3728ee643d4","scripts":{"lint":"eslint \"bin/**/*.js\" \"src/**/*.{ts,tsx}\" \"scripts/**/*.ts\" \"packages/**/*.ts\" --max-warnings=0","test":"FORCE_COLOR=0 bun test","check":"bun run check:source-lines && bun run typecheck && bun run format:check && bun run lint && bun run docs:check && bun run test && bun run bench:smoke","format":"biome format --write .","tinker":"bun src/cli/index.ts","lint:fix":"eslint \"bin/**/*.js\" \"src/**/*.{ts,tsx}\" \"scripts/**/*.ts\" \"packages/**/*.ts\" --fix","test:e2e":"FORCE_COLOR=0 bun test src/__tests__/cli-pty src/__tests__/pty-tui-harness packages/tinker-chrome/__tests__/native-host-integration","lint:fast":"bun run lint --cache --cache-strategy content --cache-location .cache/eslint-fast/","test:fast":"bun scripts/run-test-shards.ts --path-ignore-patterns='**/*pty*.test.ts' --path-ignore-patterns='**/native-host-integration.test.ts'","typecheck":"tsc --noEmit","check:fast":"bun run check:source-lines && bun run typecheck && bun run format:check && bun run lint:fast && bun run test:fast","chrome:mcp":"bun packages/tinker-chrome/src/cli.ts mcp","docs:check":"bun scripts/render-public-contract-docs.ts --check","bench:smoke":"bun scripts/bench-smoke.ts","bench:recall":"bun scripts/bench-recall.ts","chrome:build":"bun packages/tinker-chrome/scripts/build.ts","chrome:smoke":"bun packages/tinker-chrome/scripts/live-smoke.ts","format:check":"biome format .","docs:generate":"bun scripts/render-public-contract-docs.ts --write","release:verify":"bun scripts/verify-release-package.ts","chrome:diagnose":"bun packages/tinker-chrome/src/cli.ts diagnose","bench:long-session":"bun scripts/bench-long-session-memory.ts","check:source-lines":"bun scripts/check-source-lines.ts","bench:k3-image-live":"bun scripts/k3-image-live-smoke.ts","chrome:install-host":"bun packages/tinker-chrome/src/cli.ts install-host","bench:view-image-live":"bun scripts/view-image-live-smoke.ts","bench:i4-active-recall":"bun scripts/bench-i4-active-recall.ts","bench:i3-provider-smoke":"bun scripts/bench-i3-provider-smoke.ts","qualify:i4-active-recall":"bun scripts/qualify-i4-active-recall.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:795da10a-375d-45a1-8104-9a76272864dc"}},"repository":{"url":"git+https://github.com/ishowshao/tinker.git","type":"git"},"_npmVersion":"11.6.2","description":"A personal coding agent with an interactive TUI and one-shot CLI.","directories":{},"_nodeVersion":"24.20.0","dependencies":{"bun":"1.3.14","ink":"^7.1.0","diff":"^9.0.0","glob":"^13.0.6","uuid":"^14.0.1","yaml":"^2.9.0","react":"^19.2.7","sharp":"^0.35.3","shiki":"^4.3.1","marked":"^18.0.5","openai":"^7.1.0","linkedom":"^0.18.13","turndown":"^7.2.4","@inkjs/ui":"^2.0.0","commander":"^15.0.0","markdansi":"0.3.2","clipboardy":"^5.3.1","ansi-escapes":"^7.3.0","puppeteer-core":"25.4.0","@vscode/ripgrep":"1.18.0","@xterm/headless":"6.0.0","@mozilla/readability":"^0.6.0","@xterm/addon-unicode11":"0.9.0","@assistant-ui/react-ink":"^0.0.35","@modelcontextprotocol/sdk":"^1.29.0","@assistant-ui/react-ink-markdown":"^0.0.34"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^10.6.0","globals":"^17.7.0","@eslint/js":"^10.0.1","@types/bun":"^1.3.14","typescript":"^6.0.3","@types/react":"^19.2.17","@types/chrome":"^0.2.2","@biomejs/biome":"^2.5.2","@types/turndown":"^5.0.6","typescript-eslint":"^8.62.1","ink-testing-library":"^4.0.0","eslint-plugin-react-hooks":"^7.1.1"},"bundleDependencies":["markdansi"],"patchedDependencies":{"markdansi@0.3.2":"patches/markdansi@0.3.2.patch"},"_npmOperationalInternal":{"tmp":"tmp/tinker-agent_2.11.0_1788880338606_0.9980457195763421","host":"s3://npm-registry-packages-npm-production"}},"2.12.0":{"name":"tinker-agent","version":"2.12.0","license":"Apache-2.0","_id":"tinker-agent@2.12.0","maintainers":[{"name":"ishowshao","email":"me@ishowshao.com"}],"homepage":"https://github.com/ishowshao/tinker#readme","bugs":{"url":"https://github.com/ishowshao/tinker/issues"},"bin":{"tinker":"bin/tinker.js"},"dist":{"shasum":"9ac4b58fccbab66b2a7ca3bd859d03a44208d7df","tarball":"https://registry.npmjs.org/tinker-agent/-/tinker-agent-2.12.0.tgz","fileCount":346,"integrity":"sha512-4ddaa5bWJynR9z3jwC3XyWTnGkSRfALw5gqjwlEqKVPWtbM41ZnCHwEgutW0a9UB2YtkaRwraYvCr7olP0XjQA==","signatures":[{"sig":"MEQCIGz10JFtcXGlDE+ai8SfwkIwnxdNZDe+MNxop+J36KhIAiAuZQKzlYTugNB3dIUwe2K5Yx7FEo9jb9wPoVQ9U5St6A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIBCz5BwtoB1DaCMHXFNIRInRY0mgWKdjvzn20eZBntx0AiAKZ4gBLsMXMfZCSVO0jnRxmFPr58ETzArAWYfNt6c4Yg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/tinker-agent@2.12.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2749219},"type":"module","engines":{"node":">=20.0.0"},"gitHead":"a94158aa22a1faeee95ddb0e3540d17f6699b0ba","scripts":{"lint":"eslint \"bin/**/*.js\" \"src/**/*.{ts,tsx}\" \"scripts/**/*.ts\" \"packages/**/*.ts\" --max-warnings=0","test":"FORCE_COLOR=0 bun test","check":"bun run check:source-lines && bun run typecheck && bun run format:check && bun run lint && bun run docs:check && bun run test && bun run bench:smoke","format":"biome format --write .","tinker":"bun src/cli/index.ts","lint:fix":"eslint \"bin/**/*.js\" \"src/**/*.{ts,tsx}\" \"scripts/**/*.ts\" \"packages/**/*.ts\" --fix","test:e2e":"FORCE_COLOR=0 bun test src/__tests__/cli-pty src/__tests__/pty-tui-harness packages/tinker-chrome/__tests__/native-host-integration","lint:fast":"bun run lint --cache --cache-strategy content --cache-location .cache/eslint-fast/","test:fast":"bun scripts/run-test-shards.ts --path-ignore-patterns='**/*pty*.test.ts' --path-ignore-patterns='**/native-host-integration.test.ts'","typecheck":"tsc --noEmit","check:fast":"bun run check:source-lines && bun run typecheck && bun run format:check && bun run lint:fast && bun run test:fast","chrome:mcp":"bun packages/tinker-chrome/src/cli.ts mcp","docs:check":"bun scripts/render-public-contract-docs.ts --check","bench:smoke":"bun scripts/bench-smoke.ts","bench:recall":"bun scripts/bench-recall.ts","chrome:build":"bun packages/tinker-chrome/scripts/build.ts","chrome:smoke":"bun packages/tinker-chrome/scripts/live-smoke.ts","format:check":"biome format .","docs:generate":"bun scripts/render-public-contract-docs.ts --write","release:verify":"bun scripts/verify-release-package.ts","chrome:diagnose":"bun packages/tinker-chrome/src/cli.ts diagnose","bench:long-session":"bun scripts/bench-long-session-memory.ts","check:source-lines":"bun scripts/check-source-lines.ts","bench:k3-image-live":"bun scripts/k3-image-live-smoke.ts","chrome:install-host":"bun packages/tinker-chrome/src/cli.ts install-host","bench:view-image-live":"bun scripts/view-image-live-smoke.ts","bench:i4-active-recall":"bun scripts/bench-i4-active-recall.ts","bench:i3-provider-smoke":"bun scripts/bench-i3-provider-smoke.ts","qualify:i4-active-recall":"bun scripts/qualify-i4-active-recall.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:795da10a-375d-45a1-8104-9a76272864dc"}},"repository":{"url":"git+https://github.com/ishowshao/tinker.git","type":"git"},"_npmVersion":"11.6.2","description":"A personal coding agent with an interactive TUI and one-shot CLI.","directories":{},"_nodeVersion":"24.20.0","dependencies":{"bun":"1.3.14","ink":"^7.1.0","diff":"^9.0.0","glob":"^13.0.6","uuid":"^14.0.1","yaml":"^2.9.0","react":"^19.2.7","sharp":"^0.35.3","shiki":"^4.3.1","marked":"^18.0.5","openai":"^7.1.0","linkedom":"^0.18.13","turndown":"^7.2.4","@inkjs/ui":"^2.0.0","commander":"^15.0.0","markdansi":"0.3.2","clipboardy":"^5.3.1","ansi-escapes":"^7.3.0","puppeteer-core":"25.4.0","@vscode/ripgrep":"1.18.0","@xterm/headless":"6.0.0","@mozilla/readability":"^0.6.0","@xterm/addon-unicode11":"0.9.0","@assistant-ui/react-ink":"^0.0.35","@modelcontextprotocol/sdk":"^1.29.0","@assistant-ui/react-ink-markdown":"^0.0.34"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^10.6.0","globals":"^17.7.0","@eslint/js":"^10.0.1","@types/bun":"^1.3.14","typescript":"^6.0.3","@types/react":"^19.2.17","@types/chrome":"^0.2.2","@biomejs/biome":"^2.5.2","@types/turndown":"^5.0.6","typescript-eslint":"^8.62.1","ink-testing-library":"^4.0.0","eslint-plugin-react-hooks":"^7.1.1"},"bundleDependencies":["markdansi"],"patchedDependencies":{"markdansi@0.3.2":"patches/markdansi@0.3.2.patch"},"_npmOperationalInternal":{"tmp":"tmp/tinker-agent_2.12.0_1789137015294_0.49775885924190266","host":"s3://npm-registry-packages-npm-production"}},"2.13.0":{"name":"tinker-agent","version":"2.13.0","license":"Apache-2.0","_id":"tinker-agent@2.13.0","maintainers":[{"name":"ishowshao","email":"me@ishowshao.com"}],"homepage":"https://github.com/ishowshao/tinker#readme","bugs":{"url":"https://github.com/ishowshao/tinker/issues"},"bin":{"tinker":"bin/tinker.js"},"dist":{"shasum":"b8a1ad892170d4aeca1afbc4ca5f14015ee69ff1","tarball":"https://registry.npmjs.org/tinker-agent/-/tinker-agent-2.13.0.tgz","fileCount":346,"integrity":"sha512-WGKANW70R/rkJbFN3C93Ysjxzn5XV9tujG+/FAucY5nP1pGaPDqX40zi5h+XgUo58FjmOSvFkwGLdDA7ZIcTbw==","signatures":[{"sig":"MEYCIQCmEfeR7Q+bzrY5C7stE72VCMTvRQzhqLAdzppBljj6KQIhALuONXo7vvpnZw0LMnye4VI60b2V+Y47hhEZJ19FGQPw","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDHQlXsuGRsLoykGe51xrLN2I5tP7TUaQgu5eC3wUhktgIhAP5JQaS1bOUQZjFdUqpecmjlZcuPe8S5NhU862zXqZlR","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/tinker-agent@2.13.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2746203},"type":"module","engines":{"node":">=20.0.0"},"gitHead":"09f9ea8f6573195f75a250a0fe78845bbea3721c","scripts":{"lint":"eslint \"bin/**/*.js\" \"src/**/*.{ts,tsx}\" \"scripts/**/*.ts\" \"packages/**/*.ts\" --max-warnings=0","test":"FORCE_COLOR=0 bun test","check":"bun run check:source-lines && bun run typecheck && bun run format:check && bun run lint && bun run docs:check && bun run test && bun run bench:smoke","format":"biome format --write .","tinker":"bun src/cli/index.ts","lint:fix":"eslint \"bin/**/*.js\" \"src/**/*.{ts,tsx}\" \"scripts/**/*.ts\" \"packages/**/*.ts\" --fix","test:e2e":"FORCE_COLOR=0 bun test src/__tests__/cli-pty src/__tests__/pty-tui-harness packages/tinker-chrome/__tests__/native-host-integration","lint:fast":"bun run lint --cache --cache-strategy content --cache-location .cache/eslint-fast/","test:fast":"bun scripts/run-test-shards.ts --path-ignore-patterns='**/*pty*.test.ts' --path-ignore-patterns='**/native-host-integration.test.ts'","typecheck":"tsc --noEmit","check:fast":"bun run check:source-lines && bun run typecheck && bun run format:check && bun run lint:fast && bun run test:fast","chrome:mcp":"bun packages/tinker-chrome/src/cli.ts mcp","docs:check":"bun scripts/render-public-contract-docs.ts --check","bench:smoke":"bun scripts/bench-smoke.ts","bench:recall":"bun scripts/bench-recall.ts","chrome:build":"bun packages/tinker-chrome/scripts/build.ts","chrome:smoke":"bun packages/tinker-chrome/scripts/live-smoke.ts","format:check":"biome format .","docs:generate":"bun scripts/render-public-contract-docs.ts --write","release:verify":"bun scripts/verify-release-package.ts","chrome:diagnose":"bun packages/tinker-chrome/src/cli.ts diagnose","bench:long-session":"bun scripts/bench-long-session-memory.ts","check:source-lines":"bun scripts/check-source-lines.ts","bench:k3-image-live":"bun scripts/k3-image-live-smoke.ts","chrome:install-host":"bun packages/tinker-chrome/src/cli.ts install-host","bench:view-image-live":"bun scripts/view-image-live-smoke.ts","bench:i4-active-recall":"bun scripts/bench-i4-active-recall.ts","bench:i3-provider-smoke":"bun scripts/bench-i3-provider-smoke.ts","qualify:i4-active-recall":"bun scripts/qualify-i4-active-recall.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:795da10a-375d-45a1-8104-9a76272864dc"}},"repository":{"url":"git+https://github.com/ishowshao/tinker.git","type":"git"},"_npmVersion":"11.6.2","description":"A personal coding agent with an interactive TUI and one-shot CLI.","directories":{},"_nodeVersion":"24.20.0","dependencies":{"bun":"1.3.14","ink":"^7.1.0","diff":"^9.0.0","glob":"^13.0.6","uuid":"^14.0.1","yaml":"^2.9.0","react":"^19.2.7","sharp":"^0.35.3","shiki":"^4.3.1","marked":"^18.0.5","openai":"^7.1.0","linkedom":"^0.18.13","turndown":"^7.2.4","@inkjs/ui":"^2.0.0","commander":"^15.0.0","markdansi":"0.3.2","clipboardy":"^5.3.1","ansi-escapes":"^7.3.0","puppeteer-core":"25.4.0","@vscode/ripgrep":"1.18.0","@xterm/headless":"6.0.0","@mozilla/readability":"^0.6.0","@xterm/addon-unicode11":"0.9.0","@assistant-ui/react-ink":"^0.0.35","@modelcontextprotocol/sdk":"^1.29.0","@assistant-ui/react-ink-markdown":"^0.0.34"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^10.6.0","globals":"^17.7.0","@eslint/js":"^10.0.1","@types/bun":"^1.3.14","typescript":"^6.0.3","@types/react":"^19.2.17","@types/chrome":"^0.2.2","@biomejs/biome":"^2.5.2","@types/turndown":"^5.0.6","typescript-eslint":"^8.62.1","ink-testing-library":"^4.0.0","eslint-plugin-react-hooks":"^7.1.1"},"bundleDependencies":["markdansi"],"patchedDependencies":{"markdansi@0.3.2":"patches/markdansi@0.3.2.patch"},"_npmOperationalInternal":{"tmp":"tmp/tinker-agent_2.13.0_1789228619067_0.8861306897799937","host":"s3://npm-registry-packages-npm-production"}},"3.0.0":{"_id":"tinker-agent@3.0.0","bin":{"tinker":"bin/tinker.js"},"bugs":{"url":"https://github.com/ishowshao/tinker/issues"},"dist":{"shasum":"e257132806f7ce19f955ca78fbb7bf9611978881","tarball":"https://registry.npmjs.org/tinker-agent/-/tinker-agent-3.0.0.tgz","fileCount":371,"integrity":"sha512-ggqlmDHNIAhcjjSjsm69mFEJvGI2tl1Yw5CnWR0Dss1nWxYuV/1A+5u5pcgc1RT+u1/+HQWDRwMzzM7tw7iyQA==","signatures":[{"sig":"MEUCIHWZExjZUlnqD2hfiD25MTCd50eDOJotHIY7S90qJALiAiEAsAjoU30gOSyEtxOwFyeR6hi2O19dwcMFqtrZVtk5iOo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDBap2Ps3m5Se+Y37LRaQnDbinOyyj4xk5Grce0M4vOrAIhALEVwZKkzMorB48ocNz/03UxVOj8UTKVjchxw9QcckpK"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/tinker-agent@3.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2905107},"name":"tinker-agent","type":"module","engines":{"node":">=20.0.0"},"gitHead":"c901a4857994881c0d265ab73f3bfc7c6f61cbc4","license":"Apache-2.0","scripts":{"lint":"eslint \"bin/**/*.js\" \"src/**/*.{ts,tsx}\" \"scripts/**/*.ts\" \"packages/**/*.ts\" --max-warnings=0","test":"FORCE_COLOR=0 bun test","check":"bun run check:source-lines && bun run typecheck && bun run format:check && bun run lint && bun run docs:check && bun run test && bun run bench:smoke","format":"biome format --write .","tinker":"bun src/cli/index.ts","lint:fix":"eslint \"bin/**/*.js\" \"src/**/*.{ts,tsx}\" \"scripts/**/*.ts\" \"packages/**/*.ts\" --fix","test:e2e":"FORCE_COLOR=0 bun test src/__tests__/cli-pty src/__tests__/pty-tui-harness packages/tinker-chrome/__tests__/native-host-integration","lint:fast":"bun run lint --cache --cache-strategy content --cache-location .cache/eslint-fast/","test:fast":"bun scripts/run-test-shards.ts --path-ignore-patterns='**/*pty*.test.ts' --path-ignore-patterns='**/native-host-integration.test.ts'","typecheck":"tsc --noEmit","check:fast":"bun run check:source-lines && bun run typecheck && bun run format:check && bun run lint:fast && bun run test:fast","chrome:mcp":"bun packages/tinker-chrome/src/cli.ts mcp","docs:check":"bun scripts/render-public-contract-docs.ts --check","bench:smoke":"bun scripts/bench-smoke.ts","bench:recall":"bun scripts/bench-recall.ts","chrome:build":"bun packages/tinker-chrome/scripts/build.ts","chrome:smoke":"bun packages/tinker-chrome/scripts/live-smoke.ts","format:check":"biome format .","docs:generate":"bun scripts/render-public-contract-docs.ts --write","release:verify":"bun scripts/verify-release-package.ts","chrome:diagnose":"bun packages/tinker-chrome/src/cli.ts diagnose","bench:long-session":"bun scripts/bench-long-session-memory.ts","check:source-lines":"bun scripts/check-source-lines.ts","bench:k3-image-live":"bun scripts/k3-image-live-smoke.ts","chrome:install-host":"bun packages/tinker-chrome/src/cli.ts install-host","bench:view-image-live":"bun scripts/view-image-live-smoke.ts","bench:i4-active-recall":"bun scripts/bench-i4-active-recall.ts","bench:i3-provider-smoke":"bun scripts/bench-i3-provider-smoke.ts","qualify:i4-active-recall":"bun scripts/qualify-i4-active-recall.ts"},"version":"3.0.0","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:795da10a-375d-45a1-8104-9a76272864dc"}},"homepage":"https://github.com/ishowshao/tinker#readme","repository":{"url":"git+https://github.com/ishowshao/tinker.git","type":"git"},"_npmVersion":"11.6.2","description":"A personal coding agent with an interactive TUI and one-shot CLI.","directories":{},"maintainers":[{"name":"ishowshao","email":"me@ishowshao.com"}],"_nodeVersion":"24.20.0","dependencies":{"bun":"1.3.14","ink":"^7.1.0","diff":"^9.0.0","glob":"^13.0.6","uuid":"^14.0.1","yaml":"^2.9.0","react":"^19.2.7","sharp":"^0.35.3","shiki":"^4.3.1","marked":"^18.0.5","openai":"^7.1.0","linkedom":"^0.18.13","turndown":"^7.2.4","@inkjs/ui":"^2.0.0","commander":"^15.0.0","markdansi":"0.3.2","clipboardy":"^5.3.1","ansi-escapes":"^7.3.0","puppeteer-core":"25.4.0","@vscode/ripgrep":"1.18.0","@xterm/headless":"6.0.0","@mozilla/readability":"^0.6.0","@xterm/addon-unicode11":"0.9.0","@assistant-ui/react-ink":"^0.0.35","@modelcontextprotocol/sdk":"^1.29.0","@assistant-ui/react-ink-markdown":"^0.0.34"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^10.6.0","globals":"^17.7.0","@eslint/js":"^10.0.1","@types/bun":"^1.3.14","typescript":"^6.0.3","@types/react":"^19.2.17","@types/chrome":"^0.2.2","@biomejs/biome":"^2.5.2","@types/turndown":"^5.0.6","typescript-eslint":"^8.62.1","ink-testing-library":"^4.0.0","eslint-plugin-react-hooks":"^7.1.1"},"bundleDependencies":["markdansi"],"patchedDependencies":{"markdansi@0.3.2":"patches/markdansi@0.3.2.patch"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/tinker-agent_3.0.0_1790095846544_0.6550668840140972"}}},"time":{"created":"2026-07-17T06:45:10.331Z","modified":"2026-09-22T16:50:47.039Z","1.0.0":"2026-01-05T12:42:58.472Z","1.0.1":"2026-01-05T13:36:58.121Z","1.0.2":"2026-01-05T13:38:44.852Z","1.0.3":"2026-01-05T13:40:50.656Z","1.0.4":"2026-01-05T14:11:00.174Z","1.0.5":"2026-01-05T14:13:51.019Z","1.0.6":"2026-01-05T14:14:10.053Z","1.0.7":"2026-01-05T14:26:58.804Z","1.0.8":"2026-01-05T14:32:36.069Z","1.0.9":"2026-01-05T15:02:12.148Z","1.0.10":"2026-01-05T16:43:45.892Z","1.0.11":"2026-01-05T16:47:16.305Z","1.0.12":"2026-01-05T16:47:37.018Z","1.0.13":"2026-01-05T17:02:16.396Z","1.0.14":"2026-01-05T20:15:07.120Z","1.0.15":"2026-01-05T21:18:29.642Z","1.0.16":"2026-01-05T21:54:47.522Z","1.0.17":"2026-01-05T22:26:24.105Z","1.0.18":"2026-01-06T10:41:09.471Z","1.0.19":"2026-01-06T12:07:51.866Z","1.0.20":"2026-01-06T12:19:36.394Z","1.0.21":"2026-01-06T13:11:10.740Z","1.0.23":"2026-01-06T16:11:47.143Z","1.0.24":"2026-01-06T16:23:41.028Z","1.0.25":"2026-01-06T21:25:34.610Z","1.0.27":"2026-01-08T18:01:10.452Z","1.0.28":"2026-01-09T03:34:01.473Z","1.0.29":"2026-01-09T12:11:27.240Z","1.0.30":"2026-01-09T23:42:14.230Z","1.0.31":"2026-01-10T00:21:57.473Z","1.0.32":"2026-01-10T13:18:02.160Z","1.0.33":"2026-01-10T13:44:58.140Z","1.0.34":"2026-01-11T19:19:56.174Z","1.0.35":"2026-01-11T19:41:59.235Z","1.0.36":"2026-01-12T03:09:19.154Z","1.0.37":"2026-01-12T03:15:27.112Z","1.0.38":"2026-01-12T20:34:25.187Z","1.0.39":"2026-01-13T22:48:53.561Z","1.0.40":"2026-01-16T18:56:45.949Z","1.0.41":"2026-01-17T00:39:28.301Z","1.0.42":"2026-01-17T00:59:07.118Z","1.0.43":"2026-01-17T01:38:36.625Z","1.0.44":"2026-01-17T16:46:00.586Z","1.0.45":"2026-01-19T05:33:41.028Z","1.0.46":"2026-01-19T05:35:13.812Z","1.0.47":"2026-01-21T02:57:00.110Z","1.0.48":"2026-01-22T02:11:02.060Z","1.0.49":"2026-01-22T02:56:48.712Z","1.0.50":"2026-01-22T02:58:12.358Z","1.0.51":"2026-01-22T03:34:24.789Z","1.0.52":"2026-01-22T15:37:55.180Z","1.0.53":"2026-01-23T04:24:47.632Z","1.0.54":"2026-01-23T23:04:58.620Z","1.0.55":"2026-01-25T14:46:37.205Z","1.0.56":"2026-01-26T00:28:51.010Z","1.0.57":"2026-01-29T10:24:59.156Z","1.0.59":"2026-02-01T01:11:23.316Z","1.0.60":"2026-02-01T01:12:21.834Z","1.0.61":"2026-02-02T16:24:59.149Z","1.0.63":"2026-03-01T17:23:38.075Z","1.0.64":"2026-03-01T18:33:12.692Z","1.0.65":"2026-07-17T06:45:10.648Z","1.1.0":"2026-07-21T15:08:27.719Z","1.2.0":"2026-07-21T15:54:59.413Z","1.2.1":"2026-07-22T01:02:55.616Z","1.3.0":"2026-07-22T05:46:52.191Z","1.4.0":"2026-07-23T16:24:59.785Z","1.5.0":"2026-07-27T08:32:00.353Z","1.5.1":"2026-07-29T02:06:31.727Z","1.6.0":"2026-08-01T04:45:28.191Z","1.7.0":"2026-08-01T14:02:02.284Z","1.8.0":"2026-08-02T07:25:26.909Z","1.9.0":"2026-08-04T16:07:00.545Z","1.10.1":"2026-08-15T01:42:18.731Z","1.11.0":"2026-08-15T10:28:55.931Z","2.0.0":"2026-08-20T02:12:37.939Z","2.1.0":"2026-08-29T12:56:27.662Z","2.2.0":"2026-08-29T15:21:12.107Z","2.3.0":"2026-08-31T00:54:26.339Z","2.4.0":"2026-09-02T01:39:58.754Z","2.5.0":"2026-09-02T16:34:56.769Z","2.6.0":"2026-09-03T12:10:44.109Z","2.7.0":"2026-09-04T09:47:36.467Z","2.8.0":"2026-09-04T16:05:50.976Z","2.9.0":"2026-09-05T13:54:25.924Z","2.10.0":"2026-09-06T09:56:39.768Z","2.11.0":"2026-09-08T15:12:18.766Z","2.12.0":"2026-09-11T14:30:15.468Z","2.13.0":"2026-09-12T15:56:59.198Z","3.0.0":"2026-09-22T16:50:46.648Z"},"bugs":{"url":"https://github.com/ishowshao/tinker/issues"},"license":"Apache-2.0","homepage":"https://github.com/ishowshao/tinker#readme","repository":{"url":"git+https://github.com/ishowshao/tinker.git","type":"git"},"description":"A personal coding agent with an interactive TUI and one-shot CLI.","maintainers":[{"name":"ishowshao","email":"me@ishowshao.com"}],"readme":"# Tinker\n\n**Tinker** is a personal coding-agent harness — an interactive TUI (Terminal User Interface) and one-shot CLI that drives an LLM in an agent loop with file, search, shell, and MCP tools to read and modify a local workspace.\n\n**Tinker is designed for models that work over extremely long horizons — potentially as persistent agents that continue indefinitely, rather than as disposable chat sessions.** Its architecture treats the model's context window as a bounded working set, not as the source of truth. Immutable canonical history, durable sessions, protocol-safe recovery, deterministic context revisions, Recall-addressable cold state, and context-pressure management allow work to continue across compaction, process restarts, and context-window limits.\n\nThis does not pretend that any model has infinite tokens or guarantee that it will recall every relevant fact. It means the harness is designed so that history remains durable and recoverable while the model repeatedly operates on a bounded, valid view of an ongoing session.\n\n## Features\n\n- **Interactive TUI**: Full terminal user interface with session management, prompt history, and slash commands.\n- **One-shot CLI**: Run a single prompt non-interactively with `tinker run \"prompt\"`.\n- **Built-in tools**:\n  - `Glob` / `Grep` — Find and search files by pattern or content\n  - `Read` / `Write` / `Edit` — File I/O with content hashing and concurrent-modification protection\n  - `Delete` — Delete one existing regular file without directory or symlink support\n  - `Bash` — Run foreground, background, and PTY shell commands with per-task working directories\n  - `UpdatePlan` — Track a complete ordered task plan and its progress\n  - `TaskList` / `TaskOutput` / `TaskInput` / `TaskStop` — Inspect, interact with, and stop long-running shell tasks\n  - `WebSearch` — Search the web via Exa API\n  - `WebFetch` — Fetch and refine web page content (local, browser, or Exa backend)\n  - `RecallSearch` / `RecallGet` — Search or retrieve model-visible history from the current session or an explicitly selected session\n- **Agent Skills**: Discover compatible `SKILL.md` packages at project and user\n  scope, disclose their catalog progressively, and keep activated instructions\n  durable across context compaction and session resume.\n- **MCP integration**: Connect external [Model Context Protocol](https://modelcontextprotocol.io) servers — their tools are dynamically registered as `mcp__<server>__<tool>`.\n- **Session persistence**: Sessions are persisted via SQLite, supporting session resume, history recall, and a catalog to browse and switch between sessions.\n- **Observation system**: Tool execution results are formatted into structured text that the model sees, with separate raw results for event logs and TUI display.\n- **Turn cancellation**: Users can cancel an ongoing turn safely, with protocol-safe synthetic tool messages.\n- **Context metering**: Budget-aware context management with protocol validation before sending requests to the model.\n- **Deterministic context compaction**: Idle sessions can swap eligible historical tool output into Recall-addressable placeholders without calling the model.\n- **Infinite Context architecture**: Immutable canonical history, deterministic context revisions, Recall-addressable cold state, and protocol-safe prefix retirement support sessions designed to continue indefinitely without pretending the model has infinite tokens.\n- **Choice of models**: Uses an OpenAI-compatible Chat Completions transport with\n  explicit model and context limits. Actual provider support must be established\n  by a qualification matrix; transport compatibility alone is not a guarantee.\n\n### Provider retry selection\n\nWhen automatic retries for a provider request are exhausted, the TUI offers\n**Retry again** or **End this turn**. Retrying reuses the same request within the\nsame turn and iteration, with a fresh automatic retry allowance. Ending the turn\n(or pressing Esc in the selection) records the original failure. The selection\nadds no conversation message and applies only to the current running process.\nRetryable failures include HTTP 429/500/502/503/504, structured `server_error`\nand `rate_limit_exceeded` errors inside provider streams or failed Responses,\nand transient connection failures, including socket resets during streaming.\nTool failures and non-retryable errors keep their existing behavior. One-shot runs do not wait for this TUI selection; service sessions expose it to\nconnected clients.\n\n### PTY screen size\n\n`Bash` accepts optional `cols` and `rows` for the initial PTY screen size:\n\n```json\n{\"command\":\"python3 -q\",\"tty\":true,\"cols\":160,\"rows\":48}\n```\n\nEach omitted dimension keeps its default: 80 columns and 24 rows. Columns accept\nintegers from 2 to 1000; rows accept integers from 1 to 1000. When `tty` is omitted\nor `false`, dimensions are ignored and execution continues through ordinary pipes.\n`TaskOutput` and `TaskInput` report the actual screen size. Dimensions are set at\ncreation; running tasks cannot be resized through these tools.\n\n### Reading another session's history\n\nBoth Recall tools accept an optional `sessionId` (a canonical session UUID).\nOmitting it keeps the current-session behavior. In the TUI or one-shot CLI, the\nagent can use a session ID you supply or find in a memory record's filename/header:\n\n```ts\nRecallSearch({ sessionId: sourceSessionId, query: \"distinctive-anchor\" })\nRecallGet({ sessionId: sourceSessionId, source: \"ctx://message/<message-UUID>\" })\n```\n\nReuse the same `sessionId` for Get and subsequent pages. Search's\n`snapshot_through_ordinal`, ordinals and turn numbers belong to that session only.\nResults identify their source session and workspace. Missing, ambiguous, unsafe,\nunsupported or corrupt sessions return errors; Recall never silently switches\nback to the current session. Memory is not required.\n\n**Data scope:** explicit session selection can read other workspaces under the\nconfigured Tinker home (`TINKER_HOME` overrides the OS home). Retrieved text is\nsent to the **current model provider** and saved as a tool result in the **current\nsession**, including when projects or providers differ. There is no additional\ncross-workspace confirmation dialog.\n\nExternal history uses short read-only SQLite snapshots, without resuming the\nsource session, taking its execution lock, repairing indexes or migrating its\nschema. Only the current readable schema is supported. Active writers' committed\nhistory is readable; an open/interrupted turn may be incomplete. Historical\ninstructions, Skills and authorizations are not activated, and content hashes\nprove storage consistency, not truth. Use Read/Grep to verify current facts.\nOriginal workspaces need not still exist. SQLite WAL reads can coordinate through\nSHM; read-only access does not promise that an active writer's directory remains\nbyte-for-byte unchanged. See the\n[history access implementation](src/session/session-history-access.ts).\n\n### Automatic context maintenance and evaluation\n\nAutomatic swap and prefix retirement are product defaults, independent of model\nnames, evaluation scores, report availability, and tool-description hashes. Under\ncontext pressure, the runtime tries swap first and attempts retirement only when\nswap has no eligible candidates or insufficient candidates. Existing scheduling,\nprotocol boundaries, cancellation, transaction, and request/surface consistency\nchecks remain in force. Required Recall tools and the current retirement contract\nmust be available; enabling a product policy does not bypass execution safety.\nThere are no new user-facing switches or model allowlists.\n\nEvaluation measures model behavior; it does not enable or disable these features.\nNew evaluation reports (`active-recall-qualification-v2`) contain metrics, gates,\nand provenance but no automation flags. Historical reports remain unchanged. The\nsession-selection evaluation\nretains its measured failure: Search → Get missed the threshold even though all\nRecall-only tasks passed. Its old automation fields are legacy data, not runtime\npolicy. The subsequent description cleanup has not been re-evaluated with a live\nmodel.\n\n## Quick Start\n\n### Install with your existing agent\n\nIf you already use a coding agent, you can ask it to read Tinker's documentation, install the package, and prepare a complete local configuration for you. Values it cannot safely determine can be left as clearly named placeholders; when setup is complete, the agent should tell you exactly which file to edit and what each placeholder expects.\n\nCopy and send this prompt to your existing agent:\n\n```text\nOpen https://github.com/ishowshao/tinker and read Tinker's README and linked model-configuration documentation, then install and configure Tinker on this machine.\n\nCreate a complete model profile configuration in an appropriate local file. Use clearly named placeholders for any required values that cannot be determined from the documentation or the current environment; do not invent API credentials, endpoint URLs, model names, or model limits. Configure Tinker to use that file, and verify the installation and configuration as far as possible without making a live model request.\n\nWhen finished, tell me:\n1. the exact path of the configuration file you created;\n2. every placeholder I still need to replace;\n3. what value each placeholder expects;\n4. any command I need to run after filling them in;\n5. the command to start Tinker.\n\nDo not ask me for the missing values during setup unless proceeding would be unsafe. Prefer creating a structurally complete configuration with placeholders so I can fill them in locally afterward.\n```\n\n### Install manually\n\n```bash\nnpm install --global tinker-agent\n\n# Start the interactive TUI\ntinker\n\n# Run a one-shot prompt\ntinker run \"explain the project structure\"\n\n# Inspect the installed command surface\ntinker --help\ntinker --version\n```\n\nThe npm package includes its own Bun runtime. To run Tinker from a source checkout,\ninstall Bun 1.3.14 or later, then use `bun install` followed by `bun run tinker`.\n\nOn macOS/Linux, the default TUI starts or reuses a shared local service. First\nlaunch uses OpenSSL to prepare private local credentials under\n`<home>/.tinker/service/` (`TINKER_HOME` or the OS home), and automatically registers\nthe current workspace. Exiting the TUI leaves accepted tasks running; use\n`/resume` to reconnect. `tinker --local` explicitly runs the independent TUI;\n`run` remains independent. Existing `.data` service configurations remain available\nthrough explicit `connect`. See [local startup and configuration](docs/remote-access.md#default-local-service-entry)\nfor configuration, environment changes and lifecycle limits. Optional macOS login\nstartup and crash restart are available through `tinker serve --install`;\n`serve --stop`, `--restart` and `--uninstall` manage the resident service.\n\n`run` accepts exactly one Prompt source: one shell-quoted argument, explicit stdin,\nor a UTF-8 text file. Use stdin for multiline code, private patches, or Prompt text\ncontaining secrets so it does not become a command-line argument:\n\n```bash\nprintf '%s\\n' 'Review `$HOME`, *.ts, and \"quotes\" literally.' | tinker run --stdin\ntinker run --file prompts/review.md\n```\n\nTinker does not reconstruct shell expansions or join multiple positional arguments.\nUse `tinker run \"one quoted prompt\"`; the former unquoted variadic form now fails\nwith a usage error. File paths are resolved from the current directory and may point\noutside the configured workspace. You are responsible for Prompt-file permissions\nand cleanup.\n\n## Commands\n\nThe installed package exposes this public CLI:\n\n<!-- BEGIN GENERATED: PUBLIC CLI COMMANDS -->\n| Command | Description |\n| --- | --- |\n| `tinker` | Start the full TUI through the shared local service; exiting detaches only. |\n| `tinker serve --install` | Install and start a macOS per-user LaunchAgent with crash restart. |\n| `tinker serve --uninstall` | Drain, stop and remove the LaunchAgent; retain history and configuration. |\n| `tinker serve --stop` | Drain and stop the service; disable supervisor restart until the next start. |\n| `tinker serve --restart` | Drain and restart with the current executable and configuration. |\n| `tinker serve --restart --force` | Allow interruption after the configured shutdown grace period. |\n| `tinker --local` | Run the TUI independently without a service (explicit fallback). |\n| `tinker --profile <profile-name>` | Start the TUI with a selected model profile. |\n| `tinker run [--profile <profile-name>] [--yolo] <prompt>` | Submit one shell-quoted prompt argument. |\n| `tinker run [--profile <profile-name>] [--yolo] --stdin` | Read the prompt from standard input until EOF. |\n| `tinker run [--profile <profile-name>] [--yolo] --file <path>` | Read the prompt from a UTF-8 text file. |\n| `tinker update` | Update the global npm installation from the official npm registry. |\n| `tinker serve [--config <path>]` | Run the local daemon for paired remote clients. |\n| `tinker serve [--config <path>] --background` | Discover or start one detached service for this state directory, and print its address as JSON. |\n| `tinker serve [--config <path>] --status` | Probe the local service without starting it; print JSON and exit 1 when offline. |\n| `tinker connect --config <path>` | Attach a terminal client to a service; exiting detaches only. |\n| `tinker connect --config <path> --tui [--workspace <id>] [--session <id>]` | Use the full TUI for service sessions and task execution. |\n| `tinker connect --config <path> --tui --service-config <path> [--session <id>]` | With --tui, discover/start this local service and register the current directory if needed. |\n| `tinker --help` | Show top-level CLI help. |\n| `tinker help run` | Show one-shot command help. |\n| `tinker help update` | Show update command help. |\n| `tinker --version` | Print the installed package version. |\n<!-- END GENERATED: PUBLIC CLI COMMANDS -->\n\n`tinker update` is available only to direct npm global installations. It checks\nthe `latest` stable version on the official npm registry, updates that same global\nprefix, and exits without loading model configuration or starting a session.\n\nRepository development commands are separate from the installed CLI:\n\n```bash\nbun install              # Install dependencies\nbun run tinker           # Start the interactive TUI\nbun test                 # Run test suite\nbun run typecheck        # TypeScript type checking (tsc --noEmit)\nbun run lint             # ESLint (zero warnings required)\nbun run format           # Biome code formatting\nbun run check            # Full repository quality gate\n```\n\n`bun run check` runs type checking, formatting verification, linting, the README\ncontract check, the full test suite, and the benchmark smoke check. Documentation\nchecking is read-only; use `bun run docs:generate` explicitly after changing a\npublic declaration.\n\n## Agent Skills\n\nTinker scans `<workspace>/.agents/skills/` and `~/.agents/skills/` once when a new\nor resumed runtime starts. Each direct child skill must contain a strictly valid\n`SKILL.md`; an invalid discovered skill stops activation with a clear error. A\nproject skill wins when both scopes define the same name.\n\nOnly skill names and descriptions are initially exposed to the model. When the\nmodel selects a matching skill through the conditional `Skill` tool, Tinker sends\nthe complete snapshotted `SKILL.md` and a bounded listing of its standard resource\ndirectories. Relative resource paths are resolved from that skill's directory and\nare read or executed only through Tinker's existing tools. Activated instructions\nremain in the current system surface across later turns and compaction; resume\nrebinds them to the current validated files.\n\nSkill content is not local-only after activation: it is sent to the configured\nmodel provider and persisted in the private session SQLite database, event log,\nand observation log, just like other model-visible file content. `/skills` is\nread-only and does not rescan, install, activate, or remove skills.\n\n## Configuration\n\nSet `TINKER_MODELS` to use a profile file. Without it, the env-mode model fields\nare required. Boolean environment values accept case-insensitive `true/false`,\n`1/0`, `yes/no`, and `on/off`.\n\n<!-- BEGIN GENERATED: PUBLIC ENVIRONMENT VARIABLES -->\n| Variable | Area | Applies | Required | Type | Default | Secret | Description |\n| --- | --- | --- | --- | --- | --- | --- | --- |\n| `TINKER_MODELS` | Model | All modes | No | Non-empty string | — | No | Optional model profiles JSON path. A leading ~ expands to the home directory; other relative paths resolve from the process cwd. |\n| `TINKER_MODEL` | Model | Env mode | Env mode | Non-empty string | — | No | Model name used when model profiles are not configured. |\n| `TINKER_API` | Model | Env mode | No | Non-empty string | `\"chat-completions\"` | No | Model API adapter: \"chat-completions\" or \"responses\". |\n| `TINKER_BASE_URL` | Model | Env mode | Env mode | Non-empty string | — | No | OpenAI-compatible API root URL; do not append /chat/completions or /responses. |\n| `TINKER_API_KEY` | Model | Env mode | Env mode | Non-empty string | — | Yes | API credential for the configured model endpoint. |\n| `TINKER_CONTEXT_WINDOW_TOKENS` | Model | Env mode | Env mode | Positive integer | — | No | Model context-window size in tokens. |\n| `TINKER_MAX_SUPPORTED_OUTPUT_TOKENS` | Model | Env mode | Env mode | Positive integer | — | No | Maximum output-token count supported by the model; must not exceed the context window. |\n| `TINKER_INCLUDE_REASONING_CONTENT` | Model | Env mode | No | Boolean | `false` | No | Replay provider reasoning_content in Chat Completions history; ignored by Responses. |\n| `TINKER_STREAM` | Model | Env mode | No | Boolean | `true` | No | Use streaming transport for the selected model API. |\n| `TINKER_WEBFETCH_REFINE_MODEL` | Model | Env mode | No | Non-empty string | — | No | Optional WebFetch refiner model; currently must match TINKER_MODEL. |\n| `TINKER_WORKSPACE` | Workspace | All modes | No | Non-empty string | Process cwd | No | Workspace path. A leading ~ expands to the home directory; other relative paths resolve from the process cwd. |\n| `TINKER_MAX_ITERATIONS` | Workspace | All modes | No | Positive integer | `65536` | No | Maximum agent-loop iterations per turn. |\n| `EXA_API_KEY` | Tooling | All modes | No | Non-empty string | — | Yes | Enables WebSearch and the Exa WebFetch backend when set. |\n| `TINKER_MCP_TIMEOUT_MS` | Tooling | All modes | No | Positive integer | `60000` | No | MCP tool-call timeout in milliseconds. |\n| `TINKER_MCP_MAX_OBSERVATION_CHARS` | Tooling | All modes | No | Positive integer | `40000` | No | Maximum model-visible characters in one MCP result. |\n| `TINKER_BASH_DEFAULT_TIMEOUT_MS` | Tooling | All modes | No | Positive integer | `60000` | No | Default Bash foreground timeout in milliseconds. |\n| `TINKER_BASH_MAX_TIMEOUT_MS` | Tooling | All modes | No | Positive integer | `600000` | No | Maximum Bash foreground timeout in milliseconds. |\n| `TINKER_YOLO` | Tooling | All modes | No | Boolean | `false` | No | Allow high-confidence destructive Bash commands without confirmation. |\n| `TINKER_GREP_TIMEOUT_MS` | Tooling | All modes | No | Positive integer | `20000` | No | Bundled ripgrep invocation timeout in milliseconds. |\n| `TINKER_GREP_MAX_BUFFER_BYTES` | Tooling | All modes | No | Positive integer | `20000000` | No | Maximum buffered output from one ripgrep invocation. |\n| `TINKER_WEBFETCH_REFINE_THRESHOLD` | Tooling | All modes | No | Positive integer | `2000` | No | Content-length threshold that enables WebFetch refinement. |\n| `TINKER_RIPGREP_PATH` | Tooling | All modes | No | Non-empty string | Bundled ripgrep | No | Explicit diagnostic override for the bundled ripgrep executable. |\n<!-- END GENERATED: PUBLIC ENVIRONMENT VARIABLES -->\n\nModel and estimator API keys are sent to their configured external endpoints.\n`EXA_API_KEY` is sent to Exa when WebSearch or the Exa WebFetch backend is used.\nKeep configuration files private and review each service's data-handling policy.\n\n### Multi-Model Profiles\n\nSet `TINKER_MODELS` to point to a JSON file with multiple named model\nprofiles. When set, the profile's `default` field selects the startup model, and\nthe `/model` slash command (available in new sessions before any turns) lets you\nswitch to another profile. If `TINKER_MODELS` is not set, Tinker falls back to\nthe individual `TINKER_*` environment variables. A configured profiles file must\nexist and be valid; Tinker does not silently fall back when it cannot be loaded.\n\nFor provider-specific examples and guidance on API adapters, model capabilities,\nreasoning efforts, and context limits, see the\n[`.tinker/models.json` provider configuration guide](docs/models-json-provider-guide.md).\n\n<!-- BEGIN GENERATED: MODEL PROFILE FIELDS -->\nProfile fields:\n\n| Field | Required | Type / constraint | Default | Secret | Description |\n| --- | --- | --- | --- | --- | --- |\n| `model` | Yes | Non-empty string | — | No | Provider model name. |\n| `api` | No | Non-empty string | `\"chat-completions\"` | No | Model API adapter: \"chat-completions\" or \"responses\". |\n| `apiBase` | Yes | Non-empty string | — | No | OpenAI-compatible API root URL; do not append /chat/completions or /responses. |\n| `apiKey` | Yes | Non-empty string | — | Yes | API credential for this profile. |\n| `contextWindowTokens` | Yes | Positive integer | — | No | Model context-window size in tokens. |\n| `maxSupportedOutputTokens` | Yes | Positive integer | — | No | Maximum output-token count supported by the model; must not exceed contextWindowTokens. |\n| `reasoning` | No | Object | — | No | Provider-specific reasoning efforts and the default for each new session runtime. |\n| `includeReasoningContent` | No | JSON boolean | `false` | No | Replay provider reasoning_content in Chat Completions history; ignored by Responses. |\n| `stream` | No | JSON boolean | `true` | No | Use streaming transport for the selected model API. |\n| `inputModalities` | No | Normalized modality array | `[\"text\"]` | No | Accepted model input modalities; normalizes to [\"text\"] or [\"text\", \"image\"]. |\n| `toolResultModalities` | No | Normalized modality array | `[\"text\"]` | No | Accepted tool-result modalities; normalizes to [\"text\"] or [\"text\", \"image\"]. |\n\n`reasoning` fields:\n\n| Field | Type / constraint | Description |\n| --- | --- | --- |\n| `supportedEfforts` | Non-empty unique string array | Provider-supported effort values exposed by the /reasoning command. |\n| `defaultEffort` | Non-empty string listed above | Effort used whenever a session runtime is created or reopened. |\n\nThe optional `reasoning` object declares provider-specific effort values. Efforts must be unique non-whitespace strings, `reset` is reserved by the TUI command, and `defaultEffort` must appear in `supportedEfforts`. Omitting `reasoning` sends no effort parameter and disables `/reasoning` for that profile.\n\nText-only profile example:\n\n```json\n{\n  \"default\": \"text\",\n  \"profiles\": {\n    \"text\": {\n      \"model\": \"example-text-model\",\n      \"api\": \"chat-completions\",\n      \"apiBase\": \"https://api.example.com/v1\",\n      \"apiKey\": \"your-model-api-key\",\n      \"contextWindowTokens\": 128000,\n      \"maxSupportedOutputTokens\": 8192,\n      \"reasoning\": {\n        \"supportedEfforts\": [\n          \"low\",\n          \"medium\",\n          \"high\"\n        ],\n        \"defaultEffort\": \"medium\"\n      },\n      \"includeReasoningContent\": false,\n      \"stream\": true,\n      \"inputModalities\": [\n        \"text\"\n      ],\n      \"toolResultModalities\": [\n        \"text\"\n      ]\n    }\n  }\n}\n```\n\nImage-capable profile example:\n\n```json\n{\n  \"default\": \"image\",\n  \"profiles\": {\n    \"image\": {\n      \"model\": \"example-vision-model\",\n      \"api\": \"responses\",\n      \"apiBase\": \"https://api.example.com/v1\",\n      \"apiKey\": \"your-model-api-key\",\n      \"contextWindowTokens\": 128000,\n      \"maxSupportedOutputTokens\": 8192,\n      \"reasoning\": {\n        \"supportedEfforts\": [\n          \"low\",\n          \"medium\",\n          \"high\"\n        ],\n        \"defaultEffort\": \"medium\"\n      },\n      \"includeReasoningContent\": false,\n      \"stream\": true,\n      \"inputModalities\": [\n        \"text\",\n        \"image\"\n      ],\n      \"toolResultModalities\": [\n        \"text\",\n        \"image\"\n      ]\n    }\n  }\n}\n```\n\n<!-- END GENERATED: MODEL PROFILE FIELDS -->\n\nSet `api` to `\"responses\"` to use the standard Responses API. Keep `apiBase`\nat the API root—such as `https://api.openai.com/v1`—because Tinker appends the\n`/responses` route. Responses requests use the stateless common subset\n(`store: false` with complete input history), so the same adapter works with\nOpenAI and compatible providers that do not implement stored response chaining.\n\nYou can also select profiles explicitly for the TUI or one-shot command:\n\n```bash\ntinker --profile text\ntinker run --profile text \"explain the project structure\"\n```\n\nSwitching models creates a new session. The previous session is preserved and\ncan be resumed with `/resume`. Each session records its profile name, and resume\nreopens the session with that profile. Resume fails clearly if the profile is no\nlonger present or its runtime contract has changed. Older sessions without a\nstored profile name can resume only when their model name uniquely matches one\nconfigured profile.\n\n### Image Input\n\nImage attachment is enabled only for a profile whose `inputModalities` explicitly\nincludes `image`. In the interactive\nTUI, type `@` and select a file that is inside the workspace and visible to the\nworkspace search rules. One-shot commands, clipboard image bytes, remote URLs, and\nfiles outside or ignored by the workspace search are not supported.\n\nTinker accepts PNG (not APNG), JPEG, and static WebP. It rejects GIF, animated\nWebP, and other formats. A message and provider request may contain at most eight\nimages; each image may be at most 20 MiB, 4096 pixels on either edge, and 8,847,360\npixels in total. Provider requests preserve smaller images and proportionally\ndownscale larger images to a maximum 2048-pixel long edge. Context planning uses\nfixed local token buckets derived from the materialized dimensions and performs no\nindependent token-estimator request. See the\n[image input policy](src/image/image-input-policy.ts) and\n[image asset store](src/image/image-asset-store.ts) for the policy and storage\nimplementations.\n\n`ViewImage(file_path)` is registered only when the selected profile declares both\n`inputModalities: [\"text\", \"image\"]` and\n`toolResultModalities: [\"text\", \"image\"]`. The first implementation supports\nimage tool results through the Responses adapter; Chat Completions remains\ntext-only for tool results. Relative paths stay inside the workspace, absolute\npaths may explicitly select an external local file, and symbolic links are\nrejected. Canonical history stores content-addressed image references rather than\nBase64, while stdout, TUI, Recall, and logs show deterministic text summaries.\nSee the [`ViewImage implementation`](src/tools/view-image.ts) for the tool's\nvalidation and execution logic.\n\n### Built-in Slash Commands\n\n<!-- BEGIN GENERATED: BUILT-IN SLASH COMMANDS -->\n| Command | Description |\n| --- | --- |\n| `/status` | Show session and context details |\n| `/skills` | Show available and active Agent Skills |\n| `/mcp` | Show MCP servers and runtime tools |\n| `/yolo [on\\|off]` | Show or change destructive Bash confirmation |\n| `/memory` | Browse stored global memories |\n| `/compact [retire]` | Swap tool output or retire a cold history prefix |\n| `/undo` | Undo the latest Write/Edit/Delete turn |\n| `/clear` | Start a new session and clear conversation |\n| `/fork` | Clone the current session |\n| `/view <path>` | View a local UTF-8 text file |\n| `/copy` | Copy the last response as Markdown |\n| `/model [profile-name]` | Switch model profile (new session) |\n| `/reasoning [effort\\|reset]` | Show or change reasoning effort for this session runtime |\n| `/resume [session-id]` | Choose or resume a session |\n| `/session delete <session-id> --confirm` | Manage stored sessions |\n| `/quit` | Exit the TUI |\n<!-- END GENERATED: BUILT-IN SLASH COMMANDS -->\n\n`/view` opens a readable UTF-8 text file in a full-window viewer. Relative paths\nmust remain inside the workspace; absolute paths may point outside it. `/compact`\nswaps eligible historical tool output, while `/compact retire` retires a complete\ncold prefix whose original history remains available through `Recall`. `/copy`\ncopies the last completed assistant response as raw Markdown.\n\nProfiles that declare `reasoning` expose `/reasoning` as a session-runtime\ncontrol. `/reasoning <effort>` temporarily selects one of the profile's\n`supportedEfforts`, and `/reasoning reset` restores `defaultEffort`. The\nselection is not written to configuration or canonical history: `/clear`,\n`/fork`, `/model`, `/resume`, and a TUI restart create a new runtime from the\nprofile default. Responses requests send `reasoning.effort`; Chat Completions\nrequests send `reasoning_effort`. Press `Ctrl+R` while the prompt is idle to cycle\nthrough `supportedEfforts` in profile order, wrapping from the last effort to the\nfirst. When configured, the TUI information line shows the live effort immediately\nafter the model name, for example `gpt-5.6-sol max`.\n\n### Project Custom Slash Commands\n\nThe TUI loads optional project-scoped prompt aliases from `.tinker.json` in the\nworkspace root:\n\n```json\n{\n  \"version\": 1,\n  \"slashCommands\": [\n    {\n      \"name\": \"git-commit-and-push\",\n      \"description\": \"Commit and push workspace changes\",\n      \"prompt\": \"Please inspect the workspace changes, create an appropriate commit, and push it.\"\n    }\n  ]\n}\n```\n\nEnter `/git-commit-and-push` to submit its configured prompt as an ordinary user\nturn. Built-in slash commands appear first in suggestions, followed by project\ncommands in configuration order. Custom commands accept no arguments and cannot\noverride built-ins. The optional configuration is loaded once at TUI startup,\nmust be valid when present, and has a 1 MiB size limit. It is not loaded by the\none-shot `tinker run` command. See the\n[project command loader](src/tui/project-slash-commands.ts) for configuration\nvalidation and loading behavior.\n\n### Text memory\n\nMemory works without a model profile or embedding service in both the TUI and\none-shot CLI. Session transcripts are appended to\n`<home>/.tinker/memory/records/<sessionId>.md`. `MemoryCreate` saves explicit notes\nto `memory/notes/<id>.md`, using `text` as the heading and optional `summary` as\nthe body, with creation time and source workspace.\n\n`MemorySearch` searches Markdown under `<home>/.tinker/memory/` using literal,\ncase-insensitive keywords. Supply `keywords` (any keyword may match), optionally\n`context` (default 3), `limit` (default 20 matching lines), and `offset` (default 0).\nEach line counts once, even if several keywords match. Keywords cannot span lines.\nPassages are grouped by file with line numbers; `>` marks matching lines and `…`\nseparates passages. Long lines retain up to 500 code points around the earliest\nmatch. Use `Read` with `offset` and `limit` to expand a passage, or `nextOffset` to\ncontinue searching. There are no regex, glob, output-mode, or multiline parameters.\nResults follow file-path order; changes between calls can affect pagination.\nThere are no MemoryGet, MemoryUpdate, or\nMemoryDelete tools. Resume appends to the same record; cloning copies historical\ncontent; deleting a session leaves its memory record in place. `/memory` browses\npreviews of records and notes.\n\nOld `models.json` memory configuration is ignored. Existing database and memory\ndiagnostic files are moved to `<home>/.tinker/memory-legacy/<id>/` on first use;\nthey are preserved but not searched or converted. Older session-local\n`observations.md` files move to records when those sessions are resumed.\nSee [the memory design](docs/global-memory/global-memory-design.md).\n\n### Global Runtime Data\n\nTinker keeps private runtime state in a global home directory instead of inside\nyour projects. Each workspace maps to\n`~/.tinker/projects/<workspace-slug-hash>/` — the slug comes from the workspace\ndirectory name and the hash from its canonical absolute path, so one project\nalways resolves to one storage directory even when reached through symlinks.\nThat directory holds per-session SQLite databases and event logs\n(`sessions/<id>/`), background Bash task logs (`bash/`), imported image\nassets (`assets/images/`), and prompt history (`prompt-history.jsonl`).\nWorkspaces stay clean: no `.tinker/` directory is created inside them.\n\nSet `TINKER_HOME` to relocate the global home (default: the OS home directory).\nGlobal memory lives in `<home>/.tinker/memory/` and the Chrome bridge host in\n`<home>/.tinker/chrome/`. MCP server configuration is loaded from\n`<workspace>/.mcp.json`; project slash commands are loaded from\n`<workspace>/.tinker.json`.\n\n`Read` has a fixed 262144-byte (256 KiB) content limit per call. A successful\ncall always returns the complete requested line range. Use `offset` and `limit`\nto page through larger files; oversized requests fail instead of returning\ntruncated content.\n\n`Delete` removes one existing regular file by workspace-relative or absolute path.\nIt rejects directories and symbolic links, and clears any in-memory file snapshot\nonly after the removal succeeds.\n\n## Project Structure\n\n```\ntinker/\n├── src/\n│   ├── cli/           # Entry points (tui, run), config\n│   ├── agent/         # Agent loop, session ledger, turn cancellation, context metering\n│   ├── tools/         # Tool executors (bash, glob, grep, read, write, edit, delete, recall, etc.)\n│   ├── model/         # Model clients (OpenAI-compatible, fake), chat mapping, preflight\n│   ├── mcp/           # MCP server management, tool executor adapter\n│   ├── observation/   # Tool result → model-visible text\n│   ├── skills/        # Agent Skills discovery, catalog, activation, and context\n│   ├── session/       # SQLite session store, catalog, history reader, resume\n│   ├── events/        # Event sinks, JSONL log, stdout printer\n│   ├── tui/           # Ink/React UI components, projection store, session controller\n│   ├── context/       # Context protocol validation, protocol frame construction\n│   └── ids/           # Runtime ID generation (UUID v7)\n├── docs/              # Design notes and planning documents\n└── package.json\n\nRuntime data lives in ~/.tinker/ (sessions, bash tasks, assets), not in the repo.\n```\n\n## Design Philosophy\n\n- **Fast-fail**: Validate assumptions early and return clear errors close to the source. Structured failures allow the model to correct and retry.\n- **Model sees only text**: Tool execution results are rendered into readable text for the model. Raw result data with extra detail is kept for event logs and the TUI.\n- **Protocol safety**: All tool calls produce protocol-safe messages — even cancellations, fatal errors, or interruptions generate well-formed tool messages so the agent loop can continue.\n- **Long-horizon continuity**: Treat the context window as a replaceable working set over durable canonical history. Sessions should remain resumable and historically recoverable across compaction, interruption, and process restarts.\n- **Session durability**: Every turn, iteration, and tool call is committed to the SQLite ledger before the model is called, enabling reliable resume and history recall.\n\n## Requirements\n\n- Node.js 20 or later and npm for the global package installation\n- [Bun](https://bun.sh) 1.3.14 or later for development from source\n- A configured OpenAI-compatible Chat Completions endpoint; transport compatibility\n  alone does not establish provider qualification\n\n## Security\n\nTinker is an agent with permission to read and modify files and run shell commands in\nthe selected workspace. Review its configuration and model-provider data policies\nbefore using it with sensitive source code. Please report vulnerabilities privately\nthrough [GitHub Security Advisories](https://github.com/ishowshao/tinker/security/advisories/new).\n\n## Contributing\n\nContributions are welcome. See [CONTRIBUTING.md](CONTRIBUTING.md) for the development\nworkflow and [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md) for community expectations.\n\n## Attribution\n\nThe original Tinker Infinite Context architecture and its initial implementation were\ndesigned and developed by **ishowshao**. See [NOTICE](NOTICE) for the attribution that\naccompanies distributions and derivative works.\n\n## License\n\nLicensed under the [Apache License 2.0](LICENSE).\n","readmeFilename":"README.md"}