@zwbigi/ink-xy 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (266) hide show
  1. package/.next/BUILD_ID +1 -0
  2. package/.next/app-path-routes-manifest.json +33 -0
  3. package/.next/build-manifest.json +20 -0
  4. package/.next/diagnostics/build-diagnostics.json +6 -0
  5. package/.next/diagnostics/framework.json +1 -0
  6. package/.next/export-marker.json +6 -0
  7. package/.next/images-manifest.json +68 -0
  8. package/.next/next-minimal-server.js.nft.json +1 -0
  9. package/.next/next-server.js.nft.json +1 -0
  10. package/.next/package.json +1 -0
  11. package/.next/prerender-manifest.json +114 -0
  12. package/.next/react-loadable-manifest.json +1993 -0
  13. package/.next/required-server-files.js +341 -0
  14. package/.next/required-server-files.json +341 -0
  15. package/.next/routes-manifest.json +252 -0
  16. package/.next/server/app/_global-error/page.js +32 -0
  17. package/.next/server/app/_global-error/page.js.nft.json +1 -0
  18. package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -0
  19. package/.next/server/app/_global-error.html +1 -0
  20. package/.next/server/app/_global-error.meta +16 -0
  21. package/.next/server/app/_global-error.rsc +14 -0
  22. package/.next/server/app/_global-error.segments/_full.segment.rsc +14 -0
  23. package/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +5 -0
  24. package/.next/server/app/_global-error.segments/_global-error.segment.rsc +5 -0
  25. package/.next/server/app/_global-error.segments/_head.segment.rsc +5 -0
  26. package/.next/server/app/_global-error.segments/_index.segment.rsc +5 -0
  27. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -0
  28. package/.next/server/app/_not-found/page.js +2 -0
  29. package/.next/server/app/_not-found/page.js.nft.json +1 -0
  30. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -0
  31. package/.next/server/app/_not-found.html +1 -0
  32. package/.next/server/app/_not-found.meta +16 -0
  33. package/.next/server/app/_not-found.rsc +16 -0
  34. package/.next/server/app/_not-found.segments/_full.segment.rsc +16 -0
  35. package/.next/server/app/_not-found.segments/_head.segment.rsc +6 -0
  36. package/.next/server/app/_not-found.segments/_index.segment.rsc +5 -0
  37. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +5 -0
  38. package/.next/server/app/_not-found.segments/_not-found.segment.rsc +5 -0
  39. package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -0
  40. package/.next/server/app/api/agent/[id]/events/route.js +3 -0
  41. package/.next/server/app/api/agent/[id]/events/route.js.nft.json +1 -0
  42. package/.next/server/app/api/agent/[id]/events/route_client-reference-manifest.js +1 -0
  43. package/.next/server/app/api/agent/[id]/route.js +1 -0
  44. package/.next/server/app/api/agent/[id]/route.js.nft.json +1 -0
  45. package/.next/server/app/api/agent/[id]/route_client-reference-manifest.js +1 -0
  46. package/.next/server/app/api/agent/describe-image/route.js +15 -0
  47. package/.next/server/app/api/agent/describe-image/route.js.nft.json +1 -0
  48. package/.next/server/app/api/agent/describe-image/route_client-reference-manifest.js +1 -0
  49. package/.next/server/app/api/agent/new/route.js +8 -0
  50. package/.next/server/app/api/agent/new/route.js.nft.json +1 -0
  51. package/.next/server/app/api/agent/new/route_client-reference-manifest.js +1 -0
  52. package/.next/server/app/api/auth/all-providers/route.js +1 -0
  53. package/.next/server/app/api/auth/all-providers/route.js.nft.json +1 -0
  54. package/.next/server/app/api/auth/all-providers/route_client-reference-manifest.js +1 -0
  55. package/.next/server/app/api/auth/api-key/[provider]/route.js +1 -0
  56. package/.next/server/app/api/auth/api-key/[provider]/route.js.nft.json +1 -0
  57. package/.next/server/app/api/auth/api-key/[provider]/route_client-reference-manifest.js +1 -0
  58. package/.next/server/app/api/auth/login/[provider]/route.js +3 -0
  59. package/.next/server/app/api/auth/login/[provider]/route.js.nft.json +1 -0
  60. package/.next/server/app/api/auth/login/[provider]/route_client-reference-manifest.js +1 -0
  61. package/.next/server/app/api/auth/logout/[provider]/route.js +1 -0
  62. package/.next/server/app/api/auth/logout/[provider]/route.js.nft.json +1 -0
  63. package/.next/server/app/api/auth/logout/[provider]/route_client-reference-manifest.js +1 -0
  64. package/.next/server/app/api/auth/providers/route.js +1 -0
  65. package/.next/server/app/api/auth/providers/route.js.nft.json +1 -0
  66. package/.next/server/app/api/auth/providers/route_client-reference-manifest.js +1 -0
  67. package/.next/server/app/api/default-cwd/route.js +1 -0
  68. package/.next/server/app/api/default-cwd/route.js.nft.json +1 -0
  69. package/.next/server/app/api/default-cwd/route_client-reference-manifest.js +1 -0
  70. package/.next/server/app/api/files/[...path]/route.js +6 -0
  71. package/.next/server/app/api/files/[...path]/route.js.nft.json +1 -0
  72. package/.next/server/app/api/files/[...path]/route_client-reference-manifest.js +1 -0
  73. package/.next/server/app/api/gem-xy/[id]/route.js +1 -0
  74. package/.next/server/app/api/gem-xy/[id]/route.js.nft.json +1 -0
  75. package/.next/server/app/api/gem-xy/[id]/route_client-reference-manifest.js +1 -0
  76. package/.next/server/app/api/gem-xy/route.js +1 -0
  77. package/.next/server/app/api/gem-xy/route.js.nft.json +1 -0
  78. package/.next/server/app/api/gem-xy/route_client-reference-manifest.js +1 -0
  79. package/.next/server/app/api/home/route.js +1 -0
  80. package/.next/server/app/api/home/route.js.nft.json +1 -0
  81. package/.next/server/app/api/home/route_client-reference-manifest.js +1 -0
  82. package/.next/server/app/api/inkos/route.js +13 -0
  83. package/.next/server/app/api/inkos/route.js.nft.json +1 -0
  84. package/.next/server/app/api/inkos/route_client-reference-manifest.js +1 -0
  85. package/.next/server/app/api/models/route.js +1 -0
  86. package/.next/server/app/api/models/route.js.nft.json +1 -0
  87. package/.next/server/app/api/models/route_client-reference-manifest.js +1 -0
  88. package/.next/server/app/api/models-config/route.js +1 -0
  89. package/.next/server/app/api/models-config/route.js.nft.json +1 -0
  90. package/.next/server/app/api/models-config/route_client-reference-manifest.js +1 -0
  91. package/.next/server/app/api/register-cwd/route.js +1 -0
  92. package/.next/server/app/api/register-cwd/route.js.nft.json +1 -0
  93. package/.next/server/app/api/register-cwd/route_client-reference-manifest.js +1 -0
  94. package/.next/server/app/api/sessions/[id]/context/route.js +3 -0
  95. package/.next/server/app/api/sessions/[id]/context/route.js.nft.json +1 -0
  96. package/.next/server/app/api/sessions/[id]/context/route_client-reference-manifest.js +1 -0
  97. package/.next/server/app/api/sessions/[id]/lock/route.js +1 -0
  98. package/.next/server/app/api/sessions/[id]/lock/route.js.nft.json +1 -0
  99. package/.next/server/app/api/sessions/[id]/lock/route_client-reference-manifest.js +1 -0
  100. package/.next/server/app/api/sessions/[id]/route.js +1 -0
  101. package/.next/server/app/api/sessions/[id]/route.js.nft.json +1 -0
  102. package/.next/server/app/api/sessions/[id]/route_client-reference-manifest.js +1 -0
  103. package/.next/server/app/api/sessions/new/route.js +1 -0
  104. package/.next/server/app/api/sessions/new/route.js.nft.json +1 -0
  105. package/.next/server/app/api/sessions/new/route_client-reference-manifest.js +1 -0
  106. package/.next/server/app/api/sessions/route.js +3 -0
  107. package/.next/server/app/api/sessions/route.js.nft.json +1 -0
  108. package/.next/server/app/api/sessions/route_client-reference-manifest.js +1 -0
  109. package/.next/server/app/api/skills/install/route.js +1 -0
  110. package/.next/server/app/api/skills/install/route.js.nft.json +1 -0
  111. package/.next/server/app/api/skills/install/route_client-reference-manifest.js +1 -0
  112. package/.next/server/app/api/skills/route.js +6 -0
  113. package/.next/server/app/api/skills/route.js.nft.json +1 -0
  114. package/.next/server/app/api/skills/route_client-reference-manifest.js +1 -0
  115. package/.next/server/app/api/skills/search/route.js +1 -0
  116. package/.next/server/app/api/skills/search/route.js.nft.json +1 -0
  117. package/.next/server/app/api/skills/search/route_client-reference-manifest.js +1 -0
  118. package/.next/server/app/api/tts/synthesize/route.js +1 -0
  119. package/.next/server/app/api/tts/synthesize/route.js.nft.json +1 -0
  120. package/.next/server/app/api/tts/synthesize/route_client-reference-manifest.js +1 -0
  121. package/.next/server/app/favicon.ico/route.js +1 -0
  122. package/.next/server/app/favicon.ico/route.js.nft.json +1 -0
  123. package/.next/server/app/favicon.ico.body +0 -0
  124. package/.next/server/app/favicon.ico.meta +1 -0
  125. package/.next/server/app/index.html +1 -0
  126. package/.next/server/app/index.meta +14 -0
  127. package/.next/server/app/index.rsc +15 -0
  128. package/.next/server/app/index.segments/__PAGE__.segment.rsc +6 -0
  129. package/.next/server/app/index.segments/_full.segment.rsc +15 -0
  130. package/.next/server/app/index.segments/_head.segment.rsc +6 -0
  131. package/.next/server/app/index.segments/_index.segment.rsc +5 -0
  132. package/.next/server/app/index.segments/_tree.segment.rsc +2 -0
  133. package/.next/server/app/page.js +162 -0
  134. package/.next/server/app/page.js.nft.json +1 -0
  135. package/.next/server/app/page_client-reference-manifest.js +1 -0
  136. package/.next/server/app-paths-manifest.json +33 -0
  137. package/.next/server/chunks/162.js +1 -0
  138. package/.next/server/chunks/433.js +6 -0
  139. package/.next/server/chunks/601.js +27 -0
  140. package/.next/server/chunks/63.js +45 -0
  141. package/.next/server/chunks/632.js +1 -0
  142. package/.next/server/chunks/65.js +1 -0
  143. package/.next/server/chunks/741.js +18 -0
  144. package/.next/server/chunks/813.js +1 -0
  145. package/.next/server/functions-config-manifest.json +4 -0
  146. package/.next/server/interception-route-rewrite-manifest.js +1 -0
  147. package/.next/server/middleware-build-manifest.js +1 -0
  148. package/.next/server/middleware-manifest.json +6 -0
  149. package/.next/server/middleware-react-loadable-manifest.js +1 -0
  150. package/.next/server/next-font-manifest.js +1 -0
  151. package/.next/server/next-font-manifest.json +1 -0
  152. package/.next/server/pages/404.html +1 -0
  153. package/.next/server/pages/500.html +1 -0
  154. package/.next/server/pages-manifest.json +4 -0
  155. package/.next/server/prefetch-hints.json +1 -0
  156. package/.next/server/server-reference-manifest.js +1 -0
  157. package/.next/server/server-reference-manifest.json +1 -0
  158. package/.next/server/webpack-runtime.js +1 -0
  159. package/.next/static/BvG0z8aA5rKvDREWCzBf_/_buildManifest.js +1 -0
  160. package/.next/static/BvG0z8aA5rKvDREWCzBf_/_ssgManifest.js +1 -0
  161. package/.next/static/chunks/1966.1560d0f43ac9a41a.js +1 -0
  162. package/.next/static/chunks/2479.43f5228b4208e28b.js +1 -0
  163. package/.next/static/chunks/3794-fa2c7d47374be211.js +32 -0
  164. package/.next/static/chunks/3899.cf10152d8085e352.js +1 -0
  165. package/.next/static/chunks/4bd1b696-c2f6e0877b6c10aa.js +1 -0
  166. package/.next/static/chunks/5f4842b5.50bf54b97ff395f3.js +1 -0
  167. package/.next/static/chunks/7547-9d656d23f0b75f2a.js +1 -0
  168. package/.next/static/chunks/7918f2c1.3a26cf7b64cb2eff.js +6 -0
  169. package/.next/static/chunks/8451.cfb7d6db11fbfb19.js +1 -0
  170. package/.next/static/chunks/app/_global-error/page-7f5e7bebe7a745ed.js +1 -0
  171. package/.next/static/chunks/app/_not-found/page-cba500a03cba1d1e.js +1 -0
  172. package/.next/static/chunks/app/api/agent/[id]/events/route-7f5e7bebe7a745ed.js +1 -0
  173. package/.next/static/chunks/app/api/agent/[id]/route-7f5e7bebe7a745ed.js +1 -0
  174. package/.next/static/chunks/app/api/agent/describe-image/route-7f5e7bebe7a745ed.js +1 -0
  175. package/.next/static/chunks/app/api/agent/new/route-7f5e7bebe7a745ed.js +1 -0
  176. package/.next/static/chunks/app/api/auth/all-providers/route-7f5e7bebe7a745ed.js +1 -0
  177. package/.next/static/chunks/app/api/auth/api-key/[provider]/route-7f5e7bebe7a745ed.js +1 -0
  178. package/.next/static/chunks/app/api/auth/login/[provider]/route-7f5e7bebe7a745ed.js +1 -0
  179. package/.next/static/chunks/app/api/auth/logout/[provider]/route-7f5e7bebe7a745ed.js +1 -0
  180. package/.next/static/chunks/app/api/auth/providers/route-7f5e7bebe7a745ed.js +1 -0
  181. package/.next/static/chunks/app/api/default-cwd/route-7f5e7bebe7a745ed.js +1 -0
  182. package/.next/static/chunks/app/api/files/[...path]/route-7f5e7bebe7a745ed.js +1 -0
  183. package/.next/static/chunks/app/api/gem-xy/[id]/route-7f5e7bebe7a745ed.js +1 -0
  184. package/.next/static/chunks/app/api/gem-xy/route-7f5e7bebe7a745ed.js +1 -0
  185. package/.next/static/chunks/app/api/home/route-7f5e7bebe7a745ed.js +1 -0
  186. package/.next/static/chunks/app/api/inkos/route-7f5e7bebe7a745ed.js +1 -0
  187. package/.next/static/chunks/app/api/models/route-7f5e7bebe7a745ed.js +1 -0
  188. package/.next/static/chunks/app/api/models-config/route-7f5e7bebe7a745ed.js +1 -0
  189. package/.next/static/chunks/app/api/register-cwd/route-7f5e7bebe7a745ed.js +1 -0
  190. package/.next/static/chunks/app/api/sessions/[id]/context/route-7f5e7bebe7a745ed.js +1 -0
  191. package/.next/static/chunks/app/api/sessions/[id]/lock/route-7f5e7bebe7a745ed.js +1 -0
  192. package/.next/static/chunks/app/api/sessions/[id]/route-7f5e7bebe7a745ed.js +1 -0
  193. package/.next/static/chunks/app/api/sessions/new/route-7f5e7bebe7a745ed.js +1 -0
  194. package/.next/static/chunks/app/api/sessions/route-7f5e7bebe7a745ed.js +1 -0
  195. package/.next/static/chunks/app/api/skills/install/route-7f5e7bebe7a745ed.js +1 -0
  196. package/.next/static/chunks/app/api/skills/route-7f5e7bebe7a745ed.js +1 -0
  197. package/.next/static/chunks/app/api/skills/search/route-7f5e7bebe7a745ed.js +1 -0
  198. package/.next/static/chunks/app/api/tts/synthesize/route-7f5e7bebe7a745ed.js +1 -0
  199. package/.next/static/chunks/app/layout-6c9568b1e18484e3.js +1 -0
  200. package/.next/static/chunks/app/page-0e8b420d9a738e0f.js +161 -0
  201. package/.next/static/chunks/ca377847.a378e365b1b60c48.js +1 -0
  202. package/.next/static/chunks/framework-3052651e402fc2ca.js +1 -0
  203. package/.next/static/chunks/main-268a9d5ff935d846.js +5 -0
  204. package/.next/static/chunks/main-app-a115908f58a6cf38.js +1 -0
  205. package/.next/static/chunks/next/dist/client/components/builtin/app-error-7f5e7bebe7a745ed.js +1 -0
  206. package/.next/static/chunks/next/dist/client/components/builtin/forbidden-7f5e7bebe7a745ed.js +1 -0
  207. package/.next/static/chunks/next/dist/client/components/builtin/global-error-2c0ae34a7b36f2f6.js +1 -0
  208. package/.next/static/chunks/next/dist/client/components/builtin/not-found-7f5e7bebe7a745ed.js +1 -0
  209. package/.next/static/chunks/next/dist/client/components/builtin/unauthorized-7f5e7bebe7a745ed.js +1 -0
  210. package/.next/static/chunks/polyfills-42372ed130431b0a.js +1 -0
  211. package/.next/static/chunks/webpack-a98a562c28a00d6f.js +1 -0
  212. package/.next/static/css/cb335cfd27b5f824.css +3 -0
  213. package/.next/static/media/15605e25b523335c-s.woff2 +0 -0
  214. package/.next/static/media/1a3dce5cfb5f7760-s.woff2 +0 -0
  215. package/.next/static/media/1cdd02902f937a18-s.woff2 +0 -0
  216. package/.next/static/media/4c4b3b30b6bcb2be-s.woff2 +0 -0
  217. package/.next/static/media/641a7b8a5800ee0e-s.woff2 +0 -0
  218. package/.next/static/media/7deddc85b7ffd1dc-s.p.woff2 +0 -0
  219. package/.next/static/media/ec14413c594b3356-s.p.woff2 +0 -0
  220. package/.next/trace +4 -0
  221. package/.next/trace-build +1 -0
  222. package/.next/types/app/api/agent/[id]/events/route.ts +351 -0
  223. package/.next/types/app/api/agent/[id]/route.ts +351 -0
  224. package/.next/types/app/api/agent/describe-image/route.ts +351 -0
  225. package/.next/types/app/api/agent/new/route.ts +351 -0
  226. package/.next/types/app/api/auth/all-providers/route.ts +351 -0
  227. package/.next/types/app/api/auth/api-key/[provider]/route.ts +351 -0
  228. package/.next/types/app/api/auth/login/[provider]/route.ts +351 -0
  229. package/.next/types/app/api/auth/logout/[provider]/route.ts +351 -0
  230. package/.next/types/app/api/auth/providers/route.ts +351 -0
  231. package/.next/types/app/api/default-cwd/route.ts +351 -0
  232. package/.next/types/app/api/files/[...path]/route.ts +351 -0
  233. package/.next/types/app/api/gem-xy/[id]/route.ts +351 -0
  234. package/.next/types/app/api/gem-xy/route.ts +351 -0
  235. package/.next/types/app/api/home/route.ts +351 -0
  236. package/.next/types/app/api/inkos/route.ts +351 -0
  237. package/.next/types/app/api/models/route.ts +351 -0
  238. package/.next/types/app/api/models-config/route.ts +351 -0
  239. package/.next/types/app/api/register-cwd/route.ts +351 -0
  240. package/.next/types/app/api/sessions/[id]/context/route.ts +351 -0
  241. package/.next/types/app/api/sessions/[id]/lock/route.ts +351 -0
  242. package/.next/types/app/api/sessions/[id]/route.ts +351 -0
  243. package/.next/types/app/api/sessions/new/route.ts +351 -0
  244. package/.next/types/app/api/sessions/route.ts +351 -0
  245. package/.next/types/app/api/skills/install/route.ts +351 -0
  246. package/.next/types/app/api/skills/route.ts +351 -0
  247. package/.next/types/app/api/skills/search/route.ts +351 -0
  248. package/.next/types/app/api/tts/synthesize/route.ts +351 -0
  249. package/.next/types/app/layout.ts +87 -0
  250. package/.next/types/app/page.ts +87 -0
  251. package/.next/types/package.json +1 -0
  252. package/.next/types/routes.d.ts +99 -0
  253. package/.next/types/validator.ts +313 -0
  254. package/README.md +183 -0
  255. package/bin/pi-web.js +78 -0
  256. package/electron/main.js +127 -0
  257. package/next.config.ts +13 -0
  258. package/package.json +116 -0
  259. package/public/favicon.ico +0 -0
  260. package/public/file.svg +1 -0
  261. package/public/generate_favicon.py +38 -0
  262. package/public/globe.svg +1 -0
  263. package/public/icon.png +0 -0
  264. package/public/next.svg +1 -0
  265. package/public/vercel.svg +1 -0
  266. package/public/window.svg +1 -0
@@ -0,0 +1 @@
1
+ globalThis.__RSC_MANIFEST=(globalThis.__RSC_MANIFEST||{});globalThis.__RSC_MANIFEST["/api/agent/[id]/route"]={"moduleLoading":{"prefix":"/_next/"},"ssrModuleMapping":{},"edgeSSRModuleMapping":{},"clientModules":{},"entryCSSFiles":{"E:\\ink-xY\\app\\api\\agent\\[id]\\route":[]},"rscModuleMapping":{},"edgeRscModuleMapping":{}};
@@ -0,0 +1,15 @@
1
+ (()=>{var a={};a.id=115,a.ids=[115],a.modules={261:a=>{"use strict";a.exports=require("next/dist/shared/lib/router/utils/app-paths")},3295:a=>{"use strict";a.exports=require("next/dist/server/app-render/after-task-async-storage.external.js")},5262:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.r(b),c.d(b,{POST:()=>j,dynamic:()=>k});var e=c(23211),f=c(75430),g=c(98388),h=a([f,g]);[f,g]=h.then?(await h)():h;let k="force-dynamic";function i(a){return a.replace(/(好的,作为顶级\s*AI\s*图像提示词工程专家.*?[。!!])[\s\r\n]*[-*~_]{3,}[\s\r\n]*(###\s*(?:🖼️\s*)?深度图像拆解分析)/gi,"$1\n$2")}async function j(a){try{let b,{image:c,mimeType:d,provider:h,modelId:j}=await a.json();if(!c||!d)return e.NextResponse.json({error:"image and mimeType are required"},{status:400});let k=c.trim();if(k.startsWith("data:")){let a=k.indexOf(",");-1!==a&&(k=k.substring(a+1))}k=k.replace(/\s/g,"");try{if(b=Buffer.from(k,"base64"),0===b.length)return e.NextResponse.json({error:"Image data decoded to empty buffer — the base64 payload may be corrupt."},{status:400});k=b.toString("base64")}catch{return e.NextResponse.json({error:"Failed to decode base64 image data."},{status:400})}let l=d.toLowerCase().trim().split(";")[0].trim();"image/jpg"===l&&(l="image/jpeg");let m=b;255===m[0]&&216===m[1]&&255===m[2]?l="image/jpeg":137===m[0]&&80===m[1]&&78===m[2]&&71===m[3]?l="image/png":71===m[0]&&73===m[1]&&70===m[2]?l="image/gif":82===m[0]&&73===m[1]&&70===m[2]&&70===m[3]&&87===m[8]&&69===m[9]&&66===m[10]&&80===m[11]?l="image/webp":66===m[0]&&77===m[1]?l="image/bmp":["image/jpeg","image/png","image/gif","image/webp","image/bmp"].includes(l)||(console.warn(`[describe-image] Unknown image magic bytes 0x${m[0]?.toString(16)} 0x${m[1]?.toString(16)} 0x${m[2]?.toString(16)} and unsupported mimeType "${l}", defaulting to image/jpeg`),l="image/jpeg"),console.log(`[describe-image] buffer=${b.length}B, detectedMime=${l}, first4=0x${m[0]?.toString(16)}${m[1]?.toString(16)}${m[2]?.toString(16)}${m[3]?.toString(16)}, base64Len=${k.length}`);let n=f.AuthStorage.create(),o=f.ModelRegistry.create(n),p=h?h.toLowerCase().trim():"",q=j?j.trim():"",r="",s="",t={"Content-Type":"application/json"},u=!1,v=h&&j?(0,g.P6)(o,h,j):void 0;if(v){let a=await o.getApiKeyAndHeaders(v);if(!a.ok)return e.NextResponse.json({error:`无法解析模型认证: ${a.error}`},{status:400});s=`${v.baseUrl}/chat/completions`,a.apiKey&&(r=a.apiKey,t.Authorization=`Bearer ${r}`),a.headers&&(t={...t,...a.headers}),q=v.id,p=v.provider,("google"===p.toLowerCase()||"gemini"===p.toLowerCase())&&(u=!0)}else{if(p){let a=n.get(p);if(a?.key)r=a.key;else for(let a of[`${p.toUpperCase()}_API_KEY`,`${p.toUpperCase().replace("-","_")}_API_KEY`])if(process.env[a]){r=process.env[a];break}}if((p.includes("xiaomi-token-plan")||p.includes("mimo")||p.includes("lingya"))&&process.env.LINGYA_API_KEY&&(r=process.env.LINGYA_API_KEY),!r){let a=n.get("openai");if(a?.key)r=a.key,p="openai",q="gpt-4o-mini";else{let a=n.get("anthropic");a?.key&&(r=a.key,p="anthropic",q="claude-3-5-sonnet-20241022")}}if(!r&&(process.env.OPENAI_API_KEY?(r=process.env.OPENAI_API_KEY,p="openai",q="gpt-4o-mini"):process.env.ANTHROPIC_API_KEY?(r=process.env.ANTHROPIC_API_KEY,p="anthropic",q="claude-3-5-sonnet-20241022"):(process.env.GEMINI_API_KEY||process.env.GOOGLE_API_KEY)&&(r=process.env.GEMINI_API_KEY||process.env.GOOGLE_API_KEY||"",p="google",q="gemini-1.5-flash")),!r)return e.NextResponse.json({error:"未配置可用视觉模型的 API 密钥(OpenAI 或 Anthropic)。请先在侧边栏底部的 Models 中配置 API Key,或在系统环境变量中设置 OPENAI_API_KEY。"},{status:400});t.Authorization=`Bearer ${r}`,s="https://api.openai.com/v1/chat/completions","openrouter"===p?s="https://openrouter.ai/api/v1/chat/completions":p.includes("xiaomi-token-plan")||p.includes("mimo")||p.includes("lingya")?s=process.env.LINGYA_API_URL?`${process.env.LINGYA_API_URL}/chat/completions`:"https://token-plan.api.xiaomi.net/v1/chat/completions":("google"===p||"gemini"===p)&&(u=!0)}let w=`请作为顶级的 AI 图像提示词工程专家(Img2Prompt Expert),为我深度拆解我所上传的这张图片。
2
+
3
+ 请严格按照以下精细化结构对图片进行拆解分析:
4
+
5
+ 1. 核心主体 (core_subject): 画面里主要有什么人或物、在做什么、神态表情如何。
6
+ 2. 服装/材质 (clothing): 主体的衣着打扮、配饰、或者核心物体的表面材质与细节。
7
+ 3. 具体地点 (location): 画面所处的具体环境、城市、地标或空间场所。
8
+ 4. 画面背景 (background): 主体身后的远景、天际线、陪衬元素及空间的左右布局。
9
+ 5. 光照与色彩 (lighting): 光源方向(如逆光、侧光)、光效类型、色调基调与色彩氛围。
10
+ 6. 艺术风格 (style): 是什么画风或视觉流派(如:电影感写实摄影、新海诚动漫风、3D渲染、极简主义 UI、胶片摄影等),以及具体的镜头和构图方式(如中景、大光圈虚化、垂直构图)。
11
+
12
+ ---
13
+
14
+ ## 🛠️ 【最终直调用 Prompt】
15
+ 请根据上述分析,直接组合出可直接复制的流利中文 Prompt。请使用纯英文自然语言或短语(用逗号隔开),以便我直接复制粘贴:`;if(u){let a=await fetch(`https://generativelanguage.googleapis.com/v1beta/models/${q}:generateContent?key=${r}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({contents:[{parts:[{text:w},{inlineData:{mimeType:l,data:k}}]}],generationConfig:{maxOutputTokens:1e3}})});if(!a.ok){let b=await a.json();throw Error(`Gemini API returned status ${a.status}: ${JSON.stringify(b)}`)}let b=await a.json(),c=i(b.candidates?.[0]?.content?.parts?.[0]?.text?.trim()||"");return e.NextResponse.json({description:c})}if("anthropic"===p){let a=await fetch("https://api.anthropic.com/v1/messages",{method:"POST",headers:{"x-api-key":r,"anthropic-version":"2023-06-01","content-type":"application/json"},body:JSON.stringify({model:q||"claude-3-5-sonnet-20241022",max_tokens:1e3,messages:[{role:"user",content:[{type:"image",source:{type:"base64",media_type:l,data:k}},{type:"text",text:w}]}]})});if(!a.ok){let b=await a.json();throw Error(`Anthropic API returned status ${a.status}: ${JSON.stringify(b)}`)}let b=await a.json(),c=i(b.content?.[0]?.text?.trim()||"");return e.NextResponse.json({description:c})}{let a=`data:${l};base64,${k}`;q&&q.toLowerCase().includes("mimo")&&q.toLowerCase().includes("flash")&&(q="mimo-v2-omni");let b={model:q,messages:[{role:"user",content:[{type:"text",text:w},{type:"image_url",image_url:{url:a}}]}],max_tokens:1e3};console.log(`[describe-image] Sending to: ${s}`),console.log(`[describe-image] model: ${q}, provider: ${p}`),console.log(`[describe-image] imageUrl prefix: ${a.substring(0,60)}...`),console.log(`[describe-image] headers (keys): ${Object.keys(t).join(", ")}`);let c=await fetch(s,{method:"POST",headers:t,body:JSON.stringify(b)});if(!c.ok){let a=await c.json();throw Error(`${p.toUpperCase()} API returned status ${c.status}: ${JSON.stringify(a)}`)}let d=await c.json(),f=d.choices?.[0]?.message,g=f?.content?.trim()||"";if(!g&&f){let a=f.reasoning_content?.trim()||f.thinking_content?.trim()||f.thinking?.trim()||"";if(a){let b=a.split(/\n\n+/).map(a=>a.trim()).filter(Boolean),c=["不对","等等","可能","但是我","然而我","让我","先得","首先得","再想"];for(let a=b.length-1;a>=0;a--){let d=b[a],e=c.some(a=>d.startsWith(a));if(d.length>=40&&!e){g=d;break}}g||(g=a)}}return e.NextResponse.json({description:i(g)})}}catch(a){return console.error("Error in describe-image API:",a),e.NextResponse.json({error:String(a)},{status:500})}}d()}catch(a){d(a)}})},10846:a=>{"use strict";a.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},16510:(a,b,c)=>{"use strict";function d(a,b){let c=a.toLowerCase(),d=b.toLowerCase();return!(d.includes("tts")||d.includes("voiceclone")||d.includes("voicedesign")||d.includes("audio-gen")||d.includes("mimo")&&d.includes("flash"))&&(c.includes("deepseek")||d.includes("deepseek")?!!(d.includes("vl")||d.includes("v4")||d.includes("janus")||d.includes("ocr")):c.includes("openai")?!d.includes("o1-mini")&&!!(d.includes("gpt-4o")||d.includes("gpt-5")||d.includes("gpt-4.5")||d.includes("gpt-4-turbo")||d.includes("vision")||d.includes("multimodal")||"o1"===d||d.startsWith("o1-202")):c.includes("anthropic")?!!(d.includes("claude-3")||d.includes("claude-4")||d.includes("claude-5")||d.includes("claude-sonnet")||d.includes("claude-opus")||d.includes("claude-")&&(d.includes("vision")||d.includes("multimodal"))):c.includes("google")||c.includes("gemini")?!!(d.includes("gemini-")||d.includes("omni")||d.includes("vision")||d.includes("multimodal")):!!(d.includes("vision")||d.includes("multimodal")||d.includes("vlm")||d.includes("vla")||d.includes("gpt-4o")||d.includes("gpt-5")||d.includes("gpt-4.5")||d.includes("claude-3")||d.includes("claude-4")||d.includes("gemini-")||d.includes("pixtral")||d.includes("mimo")||d.includes("-vl")||d.includes("molmo")||d.includes("paligemma")||d.includes("gemma-3")||d.includes("gemma-4")||d.includes("gemma-5")||d.includes("llama")&&(d.includes("11b")||d.includes("90b")||d.includes("vision")||d.includes("multimodal"))||d.includes("qwen")&&d.includes("vl")||d.includes("glm")&&(d.includes("vision")||d.includes("vl")||d.includes("thinking")||/glm-(?:\d+(?:\.\d+)?v|edge-v|omni)/i.test(d))||d.includes("cogvlm")||d.includes("internvl")||d.includes("yi")&&d.includes("vl")||d.includes("step-")&&(d.includes("v")||d.includes("vision"))||d.includes("hunyuan")&&(d.includes("vision")||d.includes("vl"))||d.includes("doubao")&&(d.includes("vision")||d.includes("vl"))||(d.includes("kimi")||d.includes("moonshot"))&&(d.includes("vision")||d.includes("vl")||d.includes("2.6")||d.includes("k2"))||d.includes("abab")&&(d.includes("vision")||d.includes("vl"))||d.includes("minimax")&&(d.includes("vision")||d.includes("vl"))||d.includes("hailuo")))}c.d(b,{S:()=>d})},29021:a=>{"use strict";a.exports=require("fs")},29294:a=>{"use strict";a.exports=require("next/dist/server/app-render/work-async-storage.external.js")},33776:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.r(b),c.d(b,{handler:()=>y,patchFetch:()=>x,routeModule:()=>z,serverHooks:()=>C,workAsyncStorage:()=>A,workUnitAsyncStorage:()=>B});var e=c(19225),f=c(84006),g=c(8317),h=c(99373),i=c(34775),j=c(24235),k=c(261),l=c(54365),m=c(90771),n=c(73461),o=c(67798),p=c(92280),q=c(62018),r=c(45696),s=c(47929),t=c(86439),u=c(37527),v=c(5262),w=a([v]);v=(w.then?(await w)():w)[0];let z=new e.AppRouteRouteModule({definition:{kind:f.RouteKind.APP_ROUTE,page:"/api/agent/describe-image/route",pathname:"/api/agent/describe-image",filename:"route",bundlePath:"app/api/agent/describe-image/route"},distDir:".next",relativeProjectDir:"",resolvedPagePath:"E:\\ink-xY\\app\\api\\agent\\describe-image\\route.ts",nextConfigOutput:"",userland:v}),{workAsyncStorage:A,workUnitAsyncStorage:B,serverHooks:C}=z;function x(){return(0,g.patchFetch)({workAsyncStorage:A,workUnitAsyncStorage:B})}async function y(a,b,c){c.requestMeta&&(0,h.setRequestMeta)(a,c.requestMeta),z.isDev&&(0,h.addRequestMeta)(a,"devRequestTimingInternalsEnd",process.hrtime.bigint());let d="/api/agent/describe-image/route";"/index"===d&&(d="/");let e=await z.prepare(a,b,{srcPage:d,multiZoneDraftMode:!1});if(!e)return b.statusCode=400,b.end("Bad Request"),null==c.waitUntil||c.waitUntil.call(c,Promise.resolve()),null;let{buildId:g,params:v,nextConfig:w,parsedUrl:x,isDraftMode:y,prerenderManifest:A,routerServerContext:B,isOnDemandRevalidate:C,revalidateOnlyGenerated:D,resolvedPathname:E,clientReferenceManifest:F,serverActionsManifest:G}=e,H=(0,k.normalizeAppPath)(d),I=!!(A.dynamicRoutes[H]||A.routes[E]),J=async()=>((null==B?void 0:B.render404)?await B.render404(a,b,x,!1):b.end("This page could not be found"),null);if(I&&!y){let a=!!A.routes[E],b=A.dynamicRoutes[H];if(b&&!1===b.fallback&&!a){if(w.adapterPath)return await J();throw new t.NoFallbackError}}let K=null;!I||z.isDev||y||(K=E,K="/index"===K?"/":K);let L=!0===z.isDev||!I,M=I&&!L;G&&F&&(0,j.setManifestsSingleton)({page:d,clientReferenceManifest:F,serverActionsManifest:G});let N=a.method||"GET",O=(0,i.getTracer)(),P=O.getActiveScopeSpan(),Q=!!(null==B?void 0:B.isWrappedByNextServer),R=!!(0,h.getRequestMeta)(a,"minimalMode"),S=(0,h.getRequestMeta)(a,"incrementalCache")||await z.getIncrementalCache(a,w,A,R);null==S||S.resetRequestCache(),globalThis.__incrementalCache=S;let T={params:v,previewProps:A.preview,renderOpts:{experimental:{authInterrupts:!!w.experimental.authInterrupts},cacheComponents:!!w.cacheComponents,supportsDynamicResponse:L,incrementalCache:S,cacheLifeProfiles:w.cacheLife,waitUntil:c.waitUntil,onClose:a=>{b.on("close",a)},onAfterTaskError:void 0,onInstrumentationRequestError:(b,c,d,e)=>z.onRequestError(a,b,d,e,B)},sharedContext:{buildId:g}},U=new l.NodeNextRequest(a),V=new l.NodeNextResponse(b),W=m.NextRequestAdapter.fromNodeNextRequest(U,(0,m.signalFromNodeResponse)(b));try{let e,g=async a=>z.handle(W,T).finally(()=>{if(!a)return;a.setAttributes({"http.status_code":b.statusCode,"next.rsc":!1});let c=O.getRootSpanAttributes();if(!c)return;if(c.get("next.span_type")!==n.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${c.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let f=c.get("next.route");if(f){let b=`${N} ${f}`;a.setAttributes({"next.route":f,"http.route":f,"next.span_name":b}),a.updateName(b),e&&e!==a&&(e.setAttribute("http.route",f),e.updateName(b))}else a.updateName(`${N} ${d}`)}),h=async e=>{var h,i;let j=async({previousCacheEntry:f})=>{try{if(!R&&C&&D&&!f)return b.statusCode=404,b.setHeader("x-nextjs-cache","REVALIDATED"),b.end("This page could not be found"),null;let d=await g(e);a.fetchMetrics=T.renderOpts.fetchMetrics;let h=T.renderOpts.pendingWaitUntil;h&&c.waitUntil&&(c.waitUntil(h),h=void 0);let i=T.renderOpts.collectedTags;if(!I)return await (0,p.I)(U,V,d,T.renderOpts.pendingWaitUntil),null;{let a=await d.blob(),b=(0,q.toNodeOutgoingHttpHeaders)(d.headers);i&&(b[s.NEXT_CACHE_TAGS_HEADER]=i),!b["content-type"]&&a.type&&(b["content-type"]=a.type);let c=void 0!==T.renderOpts.collectedRevalidate&&!(T.renderOpts.collectedRevalidate>=s.INFINITE_CACHE)&&T.renderOpts.collectedRevalidate,e=void 0===T.renderOpts.collectedExpire||T.renderOpts.collectedExpire>=s.INFINITE_CACHE?void 0:T.renderOpts.collectedExpire;return{value:{kind:u.CachedRouteKind.APP_ROUTE,status:d.status,body:Buffer.from(await a.arrayBuffer()),headers:b},cacheControl:{revalidate:c,expire:e}}}}catch(b){throw(null==f?void 0:f.isStale)&&await z.onRequestError(a,b,{routerKind:"App Router",routePath:d,routeType:"route",revalidateReason:(0,o.c)({isStaticGeneration:M,isOnDemandRevalidate:C})},!1,B),b}},k=await z.handleResponse({req:a,nextConfig:w,cacheKey:K,routeKind:f.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:A,isRoutePPREnabled:!1,isOnDemandRevalidate:C,revalidateOnlyGenerated:D,responseGenerator:j,waitUntil:c.waitUntil,isMinimalMode:R});if(!I)return null;if((null==k||null==(h=k.value)?void 0:h.kind)!==u.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==k||null==(i=k.value)?void 0:i.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});R||b.setHeader("x-nextjs-cache",C?"REVALIDATED":k.isMiss?"MISS":k.isStale?"STALE":"HIT"),y&&b.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let l=(0,q.fromNodeOutgoingHttpHeaders)(k.value.headers);return R&&I||l.delete(s.NEXT_CACHE_TAGS_HEADER),!k.cacheControl||b.getHeader("Cache-Control")||l.get("Cache-Control")||l.set("Cache-Control",(0,r.getCacheControlHeader)(k.cacheControl)),await (0,p.I)(U,V,new Response(k.value.body,{headers:l,status:k.value.status||200})),null};Q&&P?await h(P):(e=O.getActiveScopeSpan(),await O.withPropagatedContext(a.headers,()=>O.trace(n.BaseServerSpan.handleRequest,{spanName:`${N} ${d}`,kind:i.SpanKind.SERVER,attributes:{"http.method":N,"http.target":a.url}},h),void 0,!Q))}catch(b){if(b instanceof t.NoFallbackError||await z.onRequestError(a,b,{routerKind:"App Router",routePath:H,routeType:"route",revalidateReason:(0,o.c)({isStaticGeneration:M,isOnDemandRevalidate:C})},!1,B),I)throw b;return await (0,p.I)(U,V,new Response(null,{status:500})),null}}d()}catch(a){d(a)}})},33873:a=>{"use strict";a.exports=require("path")},44870:a=>{"use strict";a.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},63033:a=>{"use strict";a.exports=require("next/dist/server/app-render/work-unit-async-storage.external.js")},75430:a=>{"use strict";a.exports=import("@earendil-works/pi-coding-agent")},78335:()=>{},86439:a=>{"use strict";a.exports=require("next/dist/shared/lib/no-fallback-error.external")},96487:()=>{},98388:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{Lj:()=>k,P6:()=>m,QA:()=>l});var e=c(29021),f=c(33873),g=c(75430),h=c(16510),i=a([g]);function j(){return(0,f.join)((0,g.getAgentDir)(),"fetched-models-cache.json")}g=(i.then?(await i)():i)[0];let n=null;function k(){if(n)return n;let a=j();if((0,e.existsSync)(a))try{return n=JSON.parse((0,e.readFileSync)(a,"utf8"))}catch{}return n={}}function l(a){setTimeout(async()=>{try{let b=k(),c=Date.now(),d=(0,f.join)((0,g.getAgentDir)(),"auth.json");if(!(0,e.existsSync)(d))return;let i=JSON.parse((0,e.readFileSync)(d,"utf8")),l=Object.keys(i),m=!1;for(let d of l){let e=i[d]?.key;if(!e)continue;let f=b[d];if(f&&c-f.updatedAt<36e5)continue;console.log(`[model-resolver] Background syncing models list for provider: "${d}"...`);let g=a.models?.find(a=>a.provider===d),j=g?.baseUrl||"",k=function(a,b){let c=a.toLowerCase();if(c.startsWith("minimax"))return"https://api.minimaxi.com/v1/models";if(c.includes("google")||c.includes("gemini"))return"https://generativelanguage.googleapis.com/v1beta/models";let d=b;return d.endsWith("/anthropic")&&(d=d.replace("/anthropic","/v1")),d.endsWith("/")&&(d=d.slice(0,-1)),d.endsWith("/models")||(d=`${d}/models`),d}(d,j),l={},n=k,o=d.toLowerCase();o.includes("google")||o.includes("gemini")?n=`${k}?key=${e}`:l.Authorization=`Bearer ${e}`;try{let a=await fetch(n,{headers:l,signal:AbortSignal.timeout(6e3)});if(!a.ok){console.error(`[model-resolver] Failed to fetch models for "${d}": HTTP ${a.status}`);continue}let e=await a.json(),f=[];if((f=o.includes("google")||o.includes("gemini")?(e.models||[]).map(a=>{let b=a.name||"";return b.startsWith("models/")?b.replace("models/",""):b}).filter(a=>a.includes("gemini")):(e.data||[]).map(a=>a.id).filter(Boolean)).length>0){let a=f.map(a=>{let b=(0,h.S)(d,a);return{id:a,name:a,provider:d,supportsVision:b}});b[d]={updatedAt:c,models:a},m=!0,console.log(`[model-resolver] Successfully synced ${f.length} models for "${d}".`)}}catch(a){console.error(`[model-resolver] Fetch failed for "${d}":`,a)}}m&&function(a){n=a;try{(0,e.writeFileSync)(j(),JSON.stringify(a,null,2),"utf8")}catch(a){console.error("Failed to save models cache:",a)}}(b)}catch(a){console.error("[model-resolver] Error in triggerBackgroundModelsSync:",a)}},100)}function m(a,b,c){let d=a.find(b,c);if(d)return d;let e=b.toLowerCase(),f=c.toLowerCase();if("minimax-cn"===e&&"MiniMax-M3"===c){let b=a.find("minimax-cn","MiniMax-M2.7")||a.find("minimax-cn","MiniMax-M2.7-highspeed");return b?{...b,id:"MiniMax-M3",name:"MiniMax-M3",api:"openai-completions",baseUrl:b.baseUrl.includes("anthropic")?b.baseUrl.replace("/anthropic","/v1"):"https://api.minimaxi.com/v1",reasoning:!0}:{id:"MiniMax-M3",name:"MiniMax-M3",api:"openai-completions",provider:"minimax-cn",baseUrl:"https://api.minimaxi.com/v1",reasoning:!0,input:["text"],cost:{input:.3,output:1.2,cacheRead:.06,cacheWrite:.375},contextWindow:204800,maxTokens:131072}}let g=(a.models||[]).find(a=>a.provider===b)||("function"==typeof a.getAll?a.getAll().find(a=>a.provider===b):void 0);if(g){let a=(0,h.S)(b,c);return{...g,id:c,name:c,reasoning:f.includes("reasoning")||f.includes("thinking")||f.includes("-r1")||g.reasoning,input:a?["text","image"]:["text"]}}}d()}catch(a){d(a)}})}};var b=require("../../../../webpack-runtime.js");b.C(a);var c=b.X(0,[741,813],()=>b(b.s=33776));module.exports=c})();