panoma 0.1.2 → 0.1.3

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 (204) hide show
  1. package/app/BUILD-INFO.json +2 -2
  2. package/app/apps/web/.next-bundle/BUILD_ID +1 -1
  3. package/app/apps/web/.next-bundle/app-build-manifest.json +126 -126
  4. package/app/apps/web/.next-bundle/app-path-routes-manifest.json +25 -25
  5. package/app/apps/web/.next-bundle/build-manifest.json +2 -2
  6. package/app/apps/web/.next-bundle/prerender-manifest.json +9 -9
  7. package/app/apps/web/.next-bundle/server/app/(app)/agents/page.js +1 -1
  8. package/app/apps/web/.next-bundle/server/app/(app)/agents/page_client-reference-manifest.js +1 -1
  9. package/app/apps/web/.next-bundle/server/app/(app)/ai/page.js +1 -1
  10. package/app/apps/web/.next-bundle/server/app/(app)/ai/page_client-reference-manifest.js +1 -1
  11. package/app/apps/web/.next-bundle/server/app/(app)/bridge/page.js +1 -1
  12. package/app/apps/web/.next-bundle/server/app/(app)/bridge/page_client-reference-manifest.js +1 -1
  13. package/app/apps/web/.next-bundle/server/app/(app)/copies/page.js +1 -1
  14. package/app/apps/web/.next-bundle/server/app/(app)/copies/page_client-reference-manifest.js +1 -1
  15. package/app/apps/web/.next-bundle/server/app/(app)/credentials/page.js +1 -1
  16. package/app/apps/web/.next-bundle/server/app/(app)/credentials/page_client-reference-manifest.js +1 -1
  17. package/app/apps/web/.next-bundle/server/app/(app)/disk/page.js +1 -1
  18. package/app/apps/web/.next-bundle/server/app/(app)/disk/page_client-reference-manifest.js +1 -1
  19. package/app/apps/web/.next-bundle/server/app/(app)/hidden/page.js +1 -1
  20. package/app/apps/web/.next-bundle/server/app/(app)/hidden/page_client-reference-manifest.js +1 -1
  21. package/app/apps/web/.next-bundle/server/app/(app)/p/[slug]/page.js +2 -2
  22. package/app/apps/web/.next-bundle/server/app/(app)/p/[slug]/page_client-reference-manifest.js +1 -1
  23. package/app/apps/web/.next-bundle/server/app/(app)/packages/page.js +1 -1
  24. package/app/apps/web/.next-bundle/server/app/(app)/packages/page_client-reference-manifest.js +1 -1
  25. package/app/apps/web/.next-bundle/server/app/(app)/page.js +1 -1
  26. package/app/apps/web/.next-bundle/server/app/(app)/page_client-reference-manifest.js +1 -1
  27. package/app/apps/web/.next-bundle/server/app/(app)/runs/[id]/page.js +1 -1
  28. package/app/apps/web/.next-bundle/server/app/(app)/runs/[id]/page_client-reference-manifest.js +1 -1
  29. package/app/apps/web/.next-bundle/server/app/(app)/runs/page.js +1 -1
  30. package/app/apps/web/.next-bundle/server/app/(app)/runs/page_client-reference-manifest.js +1 -1
  31. package/app/apps/web/.next-bundle/server/app/(app)/search/page.js +1 -1
  32. package/app/apps/web/.next-bundle/server/app/(app)/search/page_client-reference-manifest.js +1 -1
  33. package/app/apps/web/.next-bundle/server/app/(app)/twin/look/page.js +1 -1
  34. package/app/apps/web/.next-bundle/server/app/(app)/twin/look/page_client-reference-manifest.js +1 -1
  35. package/app/apps/web/.next-bundle/server/app/(app)/twin/page.js +2 -2
  36. package/app/apps/web/.next-bundle/server/app/(app)/twin/page_client-reference-manifest.js +1 -1
  37. package/app/apps/web/.next-bundle/server/app/(app)/unsaved/page_client-reference-manifest.js +1 -1
  38. package/app/apps/web/.next-bundle/server/app/_not-found/page_client-reference-manifest.js +1 -1
  39. package/app/apps/web/.next-bundle/server/app/api/accounts/route.js +1 -1
  40. package/app/apps/web/.next-bundle/server/app/api/accounts/route_client-reference-manifest.js +1 -1
  41. package/app/apps/web/.next-bundle/server/app/api/agent/consult/route_client-reference-manifest.js +1 -1
  42. package/app/apps/web/.next-bundle/server/app/api/agent/context/route_client-reference-manifest.js +1 -1
  43. package/app/apps/web/.next-bundle/server/app/api/agent/journal/route_client-reference-manifest.js +1 -1
  44. package/app/apps/web/.next-bundle/server/app/api/agent/keys/route.js +1 -1
  45. package/app/apps/web/.next-bundle/server/app/api/agent/keys/route_client-reference-manifest.js +1 -1
  46. package/app/apps/web/.next-bundle/server/app/api/agent/log/route_client-reference-manifest.js +1 -1
  47. package/app/apps/web/.next-bundle/server/app/api/agent/mcp/route.js +1 -1
  48. package/app/apps/web/.next-bundle/server/app/api/agent/mcp/route_client-reference-manifest.js +1 -1
  49. package/app/apps/web/.next-bundle/server/app/api/agent/notes/route.js +1 -1
  50. package/app/apps/web/.next-bundle/server/app/api/agent/notes/route_client-reference-manifest.js +1 -1
  51. package/app/apps/web/.next-bundle/server/app/api/agent/tasks/[id]/route_client-reference-manifest.js +1 -1
  52. package/app/apps/web/.next-bundle/server/app/api/agent/tasks/route_client-reference-manifest.js +1 -1
  53. package/app/apps/web/.next-bundle/server/app/api/ai/route.js +1 -1
  54. package/app/apps/web/.next-bundle/server/app/api/ai/route_client-reference-manifest.js +1 -1
  55. package/app/apps/web/.next-bundle/server/app/api/assets/route.js +1 -1
  56. package/app/apps/web/.next-bundle/server/app/api/assets/route_client-reference-manifest.js +1 -1
  57. package/app/apps/web/.next-bundle/server/app/api/assignments/launch/route_client-reference-manifest.js +1 -1
  58. package/app/apps/web/.next-bundle/server/app/api/assignments/route.js +1 -1
  59. package/app/apps/web/.next-bundle/server/app/api/assignments/route_client-reference-manifest.js +1 -1
  60. package/app/apps/web/.next-bundle/server/app/api/catalog/route.js +1 -1
  61. package/app/apps/web/.next-bundle/server/app/api/catalog/route_client-reference-manifest.js +1 -1
  62. package/app/apps/web/.next-bundle/server/app/api/check/route_client-reference-manifest.js +1 -1
  63. package/app/apps/web/.next-bundle/server/app/api/consultations/route.js +1 -1
  64. package/app/apps/web/.next-bundle/server/app/api/consultations/route_client-reference-manifest.js +1 -1
  65. package/app/apps/web/.next-bundle/server/app/api/describe/route.js +2 -2
  66. package/app/apps/web/.next-bundle/server/app/api/describe/route_client-reference-manifest.js +1 -1
  67. package/app/apps/web/.next-bundle/server/app/api/disk/route.js +1 -1
  68. package/app/apps/web/.next-bundle/server/app/api/disk/route_client-reference-manifest.js +1 -1
  69. package/app/apps/web/.next-bundle/server/app/api/enrich/route.js +1 -1
  70. package/app/apps/web/.next-bundle/server/app/api/enrich/route_client-reference-manifest.js +1 -1
  71. package/app/apps/web/.next-bundle/server/app/api/environment/route.js +2 -2
  72. package/app/apps/web/.next-bundle/server/app/api/environment/route_client-reference-manifest.js +1 -1
  73. package/app/apps/web/.next-bundle/server/app/api/hooks/route.js +1 -1
  74. package/app/apps/web/.next-bundle/server/app/api/hooks/route_client-reference-manifest.js +1 -1
  75. package/app/apps/web/.next-bundle/server/app/api/ingest/route.js +1 -1
  76. package/app/apps/web/.next-bundle/server/app/api/ingest/route_client-reference-manifest.js +1 -1
  77. package/app/apps/web/.next-bundle/server/app/api/md/apply/route.js +1 -1
  78. package/app/apps/web/.next-bundle/server/app/api/md/apply/route_client-reference-manifest.js +1 -1
  79. package/app/apps/web/.next-bundle/server/app/api/md/context/route.js +1 -1
  80. package/app/apps/web/.next-bundle/server/app/api/md/context/route_client-reference-manifest.js +1 -1
  81. package/app/apps/web/.next-bundle/server/app/api/md/inspect/route.js +1 -1
  82. package/app/apps/web/.next-bundle/server/app/api/md/inspect/route_client-reference-manifest.js +1 -1
  83. package/app/apps/web/.next-bundle/server/app/api/md/repair/route.js +1 -1
  84. package/app/apps/web/.next-bundle/server/app/api/md/repair/route_client-reference-manifest.js +1 -1
  85. package/app/apps/web/.next-bundle/server/app/api/md/review/route.js +2 -2
  86. package/app/apps/web/.next-bundle/server/app/api/md/review/route_client-reference-manifest.js +1 -1
  87. package/app/apps/web/.next-bundle/server/app/api/north/route.js +1 -1
  88. package/app/apps/web/.next-bundle/server/app/api/north/route_client-reference-manifest.js +1 -1
  89. package/app/apps/web/.next-bundle/server/app/api/notes/route.js +1 -1
  90. package/app/apps/web/.next-bundle/server/app/api/notes/route_client-reference-manifest.js +1 -1
  91. package/app/apps/web/.next-bundle/server/app/api/open/route_client-reference-manifest.js +1 -1
  92. package/app/apps/web/.next-bundle/server/app/api/project/route.js +1 -1
  93. package/app/apps/web/.next-bundle/server/app/api/project/route_client-reference-manifest.js +1 -1
  94. package/app/apps/web/.next-bundle/server/app/api/rescan/route.js +1 -1
  95. package/app/apps/web/.next-bundle/server/app/api/rescan/route_client-reference-manifest.js +1 -1
  96. package/app/apps/web/.next-bundle/server/app/api/roots/route.js +1 -1
  97. package/app/apps/web/.next-bundle/server/app/api/roots/route_client-reference-manifest.js +1 -1
  98. package/app/apps/web/.next-bundle/server/app/api/runs/[id]/route_client-reference-manifest.js +1 -1
  99. package/app/apps/web/.next-bundle/server/app/api/runs/route.js +1 -1
  100. package/app/apps/web/.next-bundle/server/app/api/runs/route_client-reference-manifest.js +1 -1
  101. package/app/apps/web/.next-bundle/server/app/api/scale/route.js +1 -1
  102. package/app/apps/web/.next-bundle/server/app/api/scale/route_client-reference-manifest.js +1 -1
  103. package/app/apps/web/.next-bundle/server/app/api/search/route.js +1 -1
  104. package/app/apps/web/.next-bundle/server/app/api/search/route_client-reference-manifest.js +1 -1
  105. package/app/apps/web/.next-bundle/server/app/api/secrets/route.js +1 -1
  106. package/app/apps/web/.next-bundle/server/app/api/secrets/route_client-reference-manifest.js +1 -1
  107. package/app/apps/web/.next-bundle/server/app/api/tasks/route.js +1 -1
  108. package/app/apps/web/.next-bundle/server/app/api/tasks/route_client-reference-manifest.js +1 -1
  109. package/app/apps/web/.next-bundle/server/app/api/today/route.js +1 -1
  110. package/app/apps/web/.next-bundle/server/app/api/today/route_client-reference-manifest.js +1 -1
  111. package/app/apps/web/.next-bundle/server/app/api/twin/assign/route.js +1 -1
  112. package/app/apps/web/.next-bundle/server/app/api/twin/assign/route_client-reference-manifest.js +1 -1
  113. package/app/apps/web/.next-bundle/server/app/api/twin/classify/route.js +1 -1
  114. package/app/apps/web/.next-bundle/server/app/api/twin/classify/route_client-reference-manifest.js +1 -1
  115. package/app/apps/web/.next-bundle/server/app/api/twin/critique/route.js +1 -1
  116. package/app/apps/web/.next-bundle/server/app/api/twin/critique/route_client-reference-manifest.js +1 -1
  117. package/app/apps/web/.next-bundle/server/app/api/twin/design/route.js +1 -1
  118. package/app/apps/web/.next-bundle/server/app/api/twin/design/route_client-reference-manifest.js +1 -1
  119. package/app/apps/web/.next-bundle/server/app/api/twin/distill/route.js +1 -1
  120. package/app/apps/web/.next-bundle/server/app/api/twin/distill/route_client-reference-manifest.js +1 -1
  121. package/app/apps/web/.next-bundle/server/app/api/twin/look/route.js +1 -1
  122. package/app/apps/web/.next-bundle/server/app/api/twin/look/route_client-reference-manifest.js +1 -1
  123. package/app/apps/web/.next-bundle/server/app/api/twin/mine/route.js +1 -1
  124. package/app/apps/web/.next-bundle/server/app/api/twin/mine/route_client-reference-manifest.js +1 -1
  125. package/app/apps/web/.next-bundle/server/app/api/twin/score/route.js +1 -1
  126. package/app/apps/web/.next-bundle/server/app/api/twin/score/route_client-reference-manifest.js +1 -1
  127. package/app/apps/web/.next-bundle/server/app/api/twin/shot/route.js +1 -1
  128. package/app/apps/web/.next-bundle/server/app/api/twin/shot/route_client-reference-manifest.js +1 -1
  129. package/app/apps/web/.next-bundle/server/app/api/twin/sources/route.js +1 -1
  130. package/app/apps/web/.next-bundle/server/app/api/twin/sources/route_client-reference-manifest.js +1 -1
  131. package/app/apps/web/.next-bundle/server/app/api/twin/synthesize/route.js +1 -1
  132. package/app/apps/web/.next-bundle/server/app/api/twin/synthesize/route_client-reference-manifest.js +1 -1
  133. package/app/apps/web/.next-bundle/server/app/api/twin/taste/route.js +1 -1
  134. package/app/apps/web/.next-bundle/server/app/api/twin/taste/route_client-reference-manifest.js +1 -1
  135. package/app/apps/web/.next-bundle/server/app/api/twin/verdicts/route.js +1 -1
  136. package/app/apps/web/.next-bundle/server/app/api/twin/verdicts/route_client-reference-manifest.js +1 -1
  137. package/app/apps/web/.next-bundle/server/app/api/watch/route.js +1 -1
  138. package/app/apps/web/.next-bundle/server/app/api/watch/route_client-reference-manifest.js +1 -1
  139. package/app/apps/web/.next-bundle/server/app/icon/[id]/route_client-reference-manifest.js +1 -1
  140. package/app/apps/web/.next-bundle/server/app-paths-manifest.json +25 -25
  141. package/app/apps/web/.next-bundle/server/chunks/174.js +3 -0
  142. package/app/apps/web/.next-bundle/server/chunks/2930.js +1 -1
  143. package/app/apps/web/.next-bundle/server/chunks/3377.js +1 -0
  144. package/app/apps/web/.next-bundle/server/chunks/3677.js +1 -1
  145. package/app/apps/web/.next-bundle/server/chunks/4289.js +1 -1
  146. package/app/apps/web/.next-bundle/server/chunks/6790.js +3 -1
  147. package/app/apps/web/.next-bundle/server/chunks/7276.js +1 -1
  148. package/app/apps/web/.next-bundle/server/chunks/7876.js +1 -0
  149. package/app/apps/web/.next-bundle/server/functions-config-manifest.json +12 -12
  150. package/app/apps/web/.next-bundle/server/middleware-manifest.json +5 -5
  151. package/app/apps/web/.next-bundle/server/pages/500.html +1 -1
  152. package/app/apps/web/.next-bundle/server/pages-manifest.json +1 -1
  153. package/app/apps/web/.next-bundle/server/server-reference-manifest.json +1 -1
  154. package/app/apps/web/.next-bundle/static/chunks/4517-63995539421e71bd.js +1 -0
  155. package/app/apps/web/.next-bundle/static/chunks/7911-d549c69e290b1f96.js +1 -0
  156. package/app/apps/web/.next-bundle/static/chunks/app/(app)/agents/page-cdb332736d2b75f9.js +1 -0
  157. package/app/apps/web/.next-bundle/static/chunks/app/(app)/ai/page-60083a1b6a36c928.js +1 -0
  158. package/app/apps/web/.next-bundle/static/chunks/app/(app)/bridge/page-95d7d92ca0b30f20.js +1 -0
  159. package/app/apps/web/.next-bundle/static/chunks/app/(app)/credentials/page-e87253842975daa4.js +1 -0
  160. package/app/apps/web/.next-bundle/static/chunks/app/(app)/disk/page-15cd72dc04ac7de4.js +1 -0
  161. package/app/apps/web/.next-bundle/static/chunks/app/(app)/error-7a9266f6e98936d9.js +1 -0
  162. package/app/apps/web/.next-bundle/static/chunks/app/(app)/hidden/page-4e81219b6c5aeb2a.js +1 -0
  163. package/app/apps/web/.next-bundle/static/chunks/app/(app)/layout-20c619e7c3b1eb97.js +1 -0
  164. package/app/apps/web/.next-bundle/static/chunks/app/(app)/p/[slug]/page-630a1079cd683bad.js +1 -0
  165. package/app/apps/web/.next-bundle/static/chunks/app/(app)/page-f4dd3e5acee2bfb4.js +1 -0
  166. package/app/apps/web/.next-bundle/static/chunks/app/(app)/runs/[id]/page-572f84e2016be38a.js +1 -0
  167. package/app/apps/web/.next-bundle/static/chunks/app/(app)/search/page-6e94501b5e36f4b1.js +1 -0
  168. package/app/apps/web/.next-bundle/static/chunks/app/(app)/twin/look/page-8e24b1b376cbdab8.js +1 -0
  169. package/app/apps/web/.next-bundle/static/chunks/app/(app)/twin/page-4d6804060b9830ff.js +1 -0
  170. package/app/node_modules/@panoma/db/dist/index.d.ts +10 -0
  171. package/app/node_modules/@panoma/db/dist/index.js +9 -0
  172. package/dist/{ai-command-XQGHWOY5.js → ai-command-U5V5SDJW.js} +1 -1
  173. package/dist/{check-command-2SZH5KYN.js → check-command-64DBJGYM.js} +3 -3
  174. package/dist/{chunk-JLPWKPLM.js → chunk-3WPD5CHL.js} +1 -1
  175. package/dist/{chunk-ELBBRUIH.js → chunk-FJATGEPD.js} +2 -2
  176. package/dist/{chunk-4ZMDIOH5.js → chunk-JMXXTMGV.js} +2 -2
  177. package/dist/{chunk-VP225OGF.js → chunk-KNPE4SJG.js} +8 -2
  178. package/dist/index.js +11 -11
  179. package/dist/{md-command-76RMDZKU.js → md-command-73QAVNOP.js} +2 -2
  180. package/dist/{next-command-KUHZCZPR.js → next-command-OQWKUMAH.js} +3 -3
  181. package/dist/{north-command-VRD6EQP6.js → north-command-7AVYNCB4.js} +3 -3
  182. package/dist/{review-command-ILJVQMZU.js → review-command-A6V3A5XG.js} +1 -1
  183. package/dist/{twin-command-XJEJ6453.js → twin-command-WSVMZWGC.js} +8 -4
  184. package/npm-shrinkwrap.json +2 -2
  185. package/package.json +1 -1
  186. package/app/apps/web/.next-bundle/server/chunks/5656.js +0 -3
  187. package/app/apps/web/.next-bundle/static/chunks/4517-194aeb1d92d9e4a0.js +0 -1
  188. package/app/apps/web/.next-bundle/static/chunks/7911-22e5c2227cd664f0.js +0 -1
  189. package/app/apps/web/.next-bundle/static/chunks/app/(app)/agents/page-5a6085ab51fd1c22.js +0 -1
  190. package/app/apps/web/.next-bundle/static/chunks/app/(app)/ai/page-ce796543295ea5b8.js +0 -1
  191. package/app/apps/web/.next-bundle/static/chunks/app/(app)/bridge/page-76f2bf4a1a914234.js +0 -1
  192. package/app/apps/web/.next-bundle/static/chunks/app/(app)/credentials/page-4febc07fcac150cd.js +0 -1
  193. package/app/apps/web/.next-bundle/static/chunks/app/(app)/disk/page-3a16dd5767b06f7a.js +0 -1
  194. package/app/apps/web/.next-bundle/static/chunks/app/(app)/error-1352ba2a30039af8.js +0 -1
  195. package/app/apps/web/.next-bundle/static/chunks/app/(app)/hidden/page-cd4dbfd609fee48f.js +0 -1
  196. package/app/apps/web/.next-bundle/static/chunks/app/(app)/layout-d7eece5b47fcac36.js +0 -1
  197. package/app/apps/web/.next-bundle/static/chunks/app/(app)/p/[slug]/page-d8ef4c62b6098da0.js +0 -1
  198. package/app/apps/web/.next-bundle/static/chunks/app/(app)/page-ae8edd375818c9f6.js +0 -1
  199. package/app/apps/web/.next-bundle/static/chunks/app/(app)/runs/[id]/page-7e0f3effeada2264.js +0 -1
  200. package/app/apps/web/.next-bundle/static/chunks/app/(app)/search/page-9c45c680651305fd.js +0 -1
  201. package/app/apps/web/.next-bundle/static/chunks/app/(app)/twin/look/page-1c57d8dce043fb1f.js +0 -1
  202. package/app/apps/web/.next-bundle/static/chunks/app/(app)/twin/page-e1434054df4e5d66.js +0 -1
  203. /package/app/apps/web/.next-bundle/static/{EAuc0Br8TdDur7GG5w5XO → D8knSMGGk6yOk_0w3z22h}/_buildManifest.js +0 -0
  204. /package/app/apps/web/.next-bundle/static/{EAuc0Br8TdDur7GG5w5XO → D8knSMGGk6yOk_0w3z22h}/_ssgManifest.js +0 -0
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[7712],{110:(e,t,r)=>{"use strict";r.d(t,{CodeSearch:()=>i});var n=r(9763),a=r(4963),s=r(5595),l=r(179),c=r(8384);function i(e){let{initialQuery:t}=e,r=(0,l.kj)(),[i,u]=(0,a.useState)(t),[d,h]=(0,a.useState)("ready"),[f,p]=(0,a.useState)(null),[m,x]=(0,a.useState)(null),j=(0,a.useRef)(null),{remote:b,editor:g}=(0,c.b)(),v=(0,a.useCallback)(async e=>{if(!(e.trim().length<2)){h("searching"),x(null);try{var t;let n=await fetch("/api/search?q=".concat(encodeURIComponent(e.trim()))),a=await n.json();n.ok?p(a):x(null!=(t=a.error)?t:r("search.failed"))}catch(e){x(r("search.unreachable"))}finally{h("ready")}}},[r]);return(0,a.useEffect)(()=>{var e;t.trim().length>=2?v(t):null==(e=j.current)||e.focus()},[t,v]),(0,n.jsxs)("div",{children:[(0,n.jsxs)("form",{className:"code-search",onSubmit:e=>{e.preventDefault(),v(i);let t=new URL(window.location.href);t.searchParams.set("q",i.trim()),window.history.replaceState(null,"",t)},children:[(0,n.jsx)(s.JJh,{"aria-hidden":!0}),(0,n.jsx)("input",{ref:j,value:i,onChange:e=>u(e.target.value),placeholder:"stripe.webhook, TODO, API_KEY…","aria-label":r("search.fieldLabel")}),(0,n.jsx)("button",{type:"submit",disabled:"searching"===d||i.trim().length<2,children:r("searching"===d?"search.searching":"search.submit")})]}),(0,n.jsxs)("p",{className:"mt-2 font-mono text-[11px] text-faint",children:[r("search.scopeNote")," ",r("search.scopeVendors")," ",(0,n.jsx)("code",{children:"Pods"}),", ",(0,n.jsx)("code",{children:"vendor"}),","," ",(0,n.jsx)("code",{children:"third_party"}),", ",(0,n.jsx)("code",{children:"node_modules"}),"."]}),m&&(0,n.jsx)("p",{className:"mt-3 font-mono text-xs text-fail",children:m}),f&&(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)("p",{className:"mt-6 flex flex-wrap gap-x-4 font-mono text-xs text-faint",children:[(0,n.jsxs)("span",{className:"text-chalk",children:[r(1===f.total?"search.matchOne":"search.matchMany",{n:f.total})," ",r(1===f.results.length?"search.inProjectOne":"search.inProjectMany",{n:f.results.length})]}),(0,n.jsx)("span",{children:r("search.reposSearched",{n:f.searched})}),f.skipped>0&&(0,n.jsx)("span",{className:"text-idle",title:r("search.skippedTitle"),children:r("search.skipped",{n:f.skipped})}),!b&&f.results.length>0&&(0,n.jsx)("span",{className:"ml-auto",children:r("search.clickToOpen")})]}),0===f.results.length?(0,n.jsx)("p",{className:"mt-4 rounded border border-edge bg-surface p-5 text-sm text-smoke",children:r("search.noMatch",{query:f.query})}):(0,n.jsx)("ul",{className:"mt-4 space-y-3",children:f.results.map(e=>(0,n.jsxs)("li",{className:"rounded-lg border border-edge bg-surface",children:[(0,n.jsxs)("div",{className:"flex flex-wrap items-baseline gap-x-3 gap-y-1 border-b border-edge px-4 py-2.5",children:[(0,n.jsx)("a",{href:"/p/".concat(e.slug),className:"text-sm font-medium hover:text-accent",children:e.name}),(0,n.jsx)("span",{className:"font-mono text-[11px] text-faint",title:e.root,children:function(e){let t=e.split("/");return t.length<=3?e:"…/".concat(t.slice(-2).join("/"))}(e.root)}),(0,n.jsxs)("span",{className:"ml-auto font-mono text-[11px] text-accent",children:[e.matches.length,e.truncated&&"+"]}),!b&&(0,n.jsx)(o,{id:e.id})]}),(0,n.jsx)("ul",{className:"divide-y divide-edge/50",children:e.matches.map(t=>{let a=b?null:(0,c.R)(g,e.root,t.file,t.line),s=(0,n.jsxs)(n.Fragment,{children:[t.file,(0,n.jsxs)("span",{className:"text-accent",children:[":",t.line]})]});return(0,n.jsxs)("li",{className:"flex gap-3 px-4 py-1.5 font-mono text-[11px]",children:[a?(0,n.jsx)("a",{href:a,className:"w-56 shrink-0 truncate text-faint hover:text-accent",title:r("search.openAt",{file:t.file,line:t.line}),children:s}):(0,n.jsx)("span",{className:"w-56 shrink-0 truncate text-faint",title:t.file,children:s}),(0,n.jsx)("code",{className:"min-w-0 flex-1 truncate text-smoke",children:t.text})]},"".concat(t.file,":").concat(t.line))})}),e.truncated&&(0,n.jsx)("p",{className:"px-4 py-1.5 font-mono text-[10px] text-faint",children:r("search.truncated",{n:e.matches.length})})]},e.id))})]})]})}function o(e){let{id:t}=e,r=(0,l.kj)(),[c,i]=(0,a.useState)(null);return(0,n.jsx)("button",{type:"button",title:null!=c?c:r("search.openFolder"),onClick:async()=>{try{let n=await fetch("/api/open",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({id:t})});if(!n.ok){var e;let t=await n.json();i(null!=(e=t.error)?e:r("search.openFailed"))}}catch(e){i(r("search.unreachable"))}},className:"shrink-0 ".concat(c?"text-fail":"text-faint hover:text-accent"),"aria-label":r("search.openFolderAria"),children:(0,n.jsx)(s.gBk,{className:"h-4 w-4","aria-hidden":!0})})}},179:(e,t,r)=>{"use strict";r.d(t,{I18nProvider:()=>i,Ym:()=>o,Zs:()=>u,kj:()=>d});var n=r(9763),a=r(4963),s=r(7911);let l=(0,a.createContext)("en"),c=(0,a.createContext)("panoma");function i(e){let{locale:t,cli:r,children:a}=e;return(0,n.jsx)(l.Provider,{value:t,children:(0,n.jsx)(c.Provider,{value:r,children:a})})}function o(){return(0,a.useContext)(l)}function u(){return(0,a.useContext)(c)}function d(){let e=(0,a.useContext)(l),t=(0,a.useContext)(c);return(0,a.useCallback)((r,n)=>(0,s.t)(e,r,{cli:t,...n}),[e,t])}},1823:(e,t,r)=>{Promise.resolve().then(r.bind(r,110))},4652:(e,t,r)=>{"use strict";r.d(t,{k5:()=>u});var n=r(4963),a={color:void 0,size:void 0,className:void 0,style:void 0,attr:void 0},s=n.createContext&&n.createContext(a),l=["attr","size","title"];function c(){return(c=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)({}).hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e}).apply(null,arguments)}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function o(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?i(Object(r),!0).forEach(function(t){var n,a,s;n=e,a=t,s=r[t],(a=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=typeof n)return n;throw TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(a))in n?Object.defineProperty(n,a,{value:s,enumerable:!0,configurable:!0,writable:!0}):n[a]=s}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):i(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}function u(e){return t=>n.createElement(d,c({attr:o({},e.attr)},t),function e(t){return t&&t.map((t,r)=>n.createElement(t.tag,o({key:r},t.attr),e(t.child)))}(e.child))}function d(e){var t=t=>{var r,a=e.attr,s=e.size,i=e.title,u=function(e,t){if(null==e)return{};var r,n,a=function(e,t){if(null==e)return{};var r={};for(var n in e)if(({}).hasOwnProperty.call(e,n)){if(-1!==t.indexOf(n))continue;r[n]=e[n]}return r}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(n=0;n<s.length;n++)r=s[n],-1===t.indexOf(r)&&({}).propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}(e,l),d=s||t.size||"1em";return t.className&&(r=t.className),e.className&&(r=(r?r+" ":"")+e.className),n.createElement("svg",c({stroke:"currentColor",fill:"currentColor",strokeWidth:"0"},t.attr,a,u,{className:r,style:o(o({color:e.color||t.color},t.style),e.style),height:d,width:d,xmlns:"http://www.w3.org/2000/svg"}),i&&n.createElement("title",null,i),e.children)};return void 0!==s?n.createElement(s.Consumer,null,e=>t(e)):t(a)}},8384:(e,t,r)=>{"use strict";let n;r.d(t,{R:()=>i,b:()=>l});var a=r(4963);let s={remote:!1,editor:null,editors:[],apps:[],agents:[]};function l(){let e=!(arguments.length>0)||void 0===arguments[0]||arguments[0],[t,r]=(0,a.useState)(s);return(0,a.useEffect)(()=>{if(!e)return;null!=n||(n=fetch("/api/open").then(e=>e.json()).catch(()=>s));let t=!0;return n.then(e=>{t&&r(e)}),()=>{t=!1}},[e]),t}let c={cursor:"cursor",code:"vscode",windsurf:"windsurf",zed:"zed"};function i(e,t,r,n){let a=c[null!=e?e:"code"];if(!a)return null;let s=encodeURI("".concat(t.replace(/\/$/,""),"/").concat(r)).replace(/#/g,"%23").replace(/\?/g,"%3F");return"".concat(a,"://file").concat(s.startsWith("/")?"":"/").concat(s,":").concat(n)}}},e=>{e.O(0,[6587,7911,9643,4737,7358],()=>e(e.s=1823)),_N_E=e.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[2168],{179:(e,t,n)=>{"use strict";n.d(t,{I18nProvider:()=>i,Ym:()=>c,Zs:()=>d,kj:()=>u});var o=n(9763),r=n(4963),a=n(7911);let l=(0,r.createContext)("en"),s=(0,r.createContext)("panoma");function i(e){let{locale:t,cli:n,children:r}=e;return(0,o.jsx)(l.Provider,{value:t,children:(0,o.jsx)(s.Provider,{value:n,children:r})})}function c(){return(0,r.useContext)(l)}function d(){return(0,r.useContext)(s)}function u(){let e=(0,r.useContext)(l),t=(0,r.useContext)(s);return(0,r.useCallback)((n,o)=>(0,a.t)(e,n,{cli:t,...o}),[e,t])}},1636:(e,t,n)=>{"use strict";n.d(t,{LookFindings:()=>m,TwinLook:()=>d});var o=n(9763),r=n(4963),a=n(7244),l=n(179),s=n(5733),i=n(4204);let c=["image/png","image/jpeg","image/webp","image/gif"];function d(e){var t,n;let{boards:s,projects:d,maxBytes:m}=e,p=(0,l.kj)(),f=(0,l.Ym)(),h=(0,a.useRouter)(),g=(0,r.useRef)(null),[b,y]=(0,r.useState)(null),[j,v]=(0,r.useState)(null),[k,w]=(0,r.useState)(null),[N,O]=(0,r.useState)(null!=(n=null==(t=d[0])?void 0:t.slug)?n:"");async function S(e,t,n){y(t),v(null),w(null);try{var o,r,a;let t=await x({...e,dryRun:!0});if(t.error)return void v(t.error);v(p("look.estimate",{statements:null!=(o=t.statements)?o:0,tokens:null!=(r=t.estimatedTokens)?r:0,size:(0,i.z3)(null!=(a=t.imageBytes)?a:0)}));let l=await x({...e,dryRun:!1});if(l.error)return void v(l.error);w({subject:n,receipt:l}),v(null),h.refresh()}catch(e){v(p("project.unreachable"))}finally{y(null)}}async function C(e){if(!c.includes(e.type))return void v(p("look.badType"));if(e.size>m)return void v(p("look.tooBig",{size:(0,i.z3)(e.size),cap:(0,i.z3)(m)}));let t=function(e){let t="";for(let n=0;n<e.length;n+=8192)t+=String.fromCharCode(...e.subarray(n,n+8192));return btoa(t)}(new Uint8Array(await e.arrayBuffer()));await S({slug:N,image:t,mediaType:e.type,imageBytes:e.size},"upload",e.name)}return(0,o.jsxs)("section",{className:"mt-8 flex flex-col gap-6",children:[(0,o.jsx)("p",{className:"font-mono text-xs text-idle",children:p("look.notRedacted")}),0===s.length?(0,o.jsxs)("div",{className:"rounded-lg border border-edge px-4 py-4",children:[(0,o.jsx)("p",{className:"eyebrow",children:p("look.inboxTitle")}),(0,o.jsx)("p",{className:"mt-2 max-w-2xl text-sm leading-relaxed",children:p("look.noInbox")}),(0,o.jsx)("p",{className:"mt-1 max-w-2xl font-mono text-xs text-smoke",children:p("look.noInboxHint")})]}):s.map(e=>(0,o.jsxs)("div",{className:"rounded-lg border border-edge px-4 py-4",children:[(0,o.jsx)("p",{className:"eyebrow",children:p("look.inboxOf",{project:e.name})}),(0,o.jsx)("p",{className:"mt-1 font-mono text-xs text-faint",children:e.dir}),0===e.shots.length?(0,o.jsx)("p",{className:"mt-3 max-w-2xl text-sm leading-relaxed text-smoke",children:p("look.inboxEmpty")}):(0,o.jsx)("div",{className:"mt-3 grid gap-3 sm:grid-cols-2",children:e.shots.map(t=>{let n="".concat(e.slug,"/").concat(t.name);return(0,o.jsxs)("div",{className:"flex gap-3 rounded border border-edge p-2",children:[(0,o.jsx)("img",{src:"/api/twin/shot?slug=".concat(encodeURIComponent(e.slug),"&name=").concat(encodeURIComponent(t.name)),alt:t.name,className:"h-20 w-28 shrink-0 rounded border border-edge bg-raised object-cover"}),(0,o.jsxs)("div",{className:"flex min-w-0 flex-col gap-1",children:[(0,o.jsx)("span",{className:"truncate font-mono text-xs",children:t.name}),(0,o.jsxs)("span",{className:"font-mono text-xs text-faint",children:[(0,i.z3)(t.bytes)," \xb7 ",new Date(t.at).toLocaleString(f)]}),null!==t.findings&&(0,o.jsx)("span",{className:"font-mono text-xs text-smoke",children:0===t.findings?p("look.lookedClean"):p("look.looked",{n:t.findings})}),(0,o.jsx)("button",{type:"button",onClick:()=>S({slug:e.slug,shot:t.name},n,t.name),disabled:null!==b,className:"mt-auto self-start rounded border border-edge px-2.5 py-1 font-mono text-xs text-smoke transition-colors hover:border-chalk disabled:opacity-50",children:b===n?p("look.looking"):p(null===t.findings?"look.button":"look.buttonAgain")})]})]},n)})}),e.skipped>0&&(0,o.jsx)("p",{className:"mt-2 font-mono text-xs text-faint",children:p("look.inboxSkipped",{n:e.skipped})})]},e.slug)),d.length>0&&(0,o.jsxs)("div",{className:"rounded-lg border border-edge px-4 py-4",children:[(0,o.jsx)("p",{className:"eyebrow",children:p("look.uploadTitle")}),(0,o.jsx)("p",{className:"mt-1 max-w-2xl text-sm leading-relaxed text-smoke",children:p("look.uploadHint")}),(0,o.jsxs)("div",{className:"mt-3 flex flex-wrap items-center gap-2",children:[(0,o.jsx)("select",{value:N,onChange:e=>O(e.target.value),"aria-label":p("look.uploadTarget"),className:"rounded border border-edge bg-transparent px-2 py-1 font-mono text-xs",children:d.map(e=>(0,o.jsx)("option",{value:e.slug,children:e.name},e.slug))}),(0,o.jsx)("input",{ref:g,type:"file",accept:c.join(","),className:"hidden",onChange:e=>{var t;let n=null==(t=e.target.files)?void 0:t[0];e.target.value="",n&&C(n)}}),(0,o.jsx)(i.rA,{tone:"plain",type:"button",onClick:()=>{var e;return null==(e=g.current)?void 0:e.click()},busy:"upload"===b,busyLabel:p("look.looking"),disabled:null!==b||""===N,children:p("look.uploadPick")})]})]}),j&&(0,o.jsx)("p",{className:"font-mono text-xs text-smoke",children:j}),k&&(0,o.jsx)(u,{subject:k.subject,receipt:k.receipt})]})}function u(e){var t,n,r,a,s;let{subject:i,receipt:c}=e,d=(0,l.kj)(),u=null!=(t=c.findings)?t:[];return(0,o.jsxs)("div",{className:"rounded-lg border border-edge px-4 py-4",children:[(0,o.jsx)("p",{className:"eyebrow",children:d("look.verdictOf",{subject:i})}),c.unreadable?(0,o.jsx)("p",{className:"mt-2 max-w-2xl text-sm leading-relaxed text-idle",children:d("look.unreadable")}):0===u.length?(0,o.jsx)("p",{className:"mt-2 max-w-2xl text-sm leading-relaxed",children:d("look.clean")}):(0,o.jsx)(m,{lookId:null!=(n=c.lookId)?n:"",findings:u,assigned:{}}),(0,o.jsxs)("p",{className:"mt-3 font-mono text-xs text-faint",children:[d("look.measured",{statements:null!=(r=c.statements)?r:0}),c.model?" \xb7 ".concat(c.model):""]}),(null!=(a=c.dropped)?a:0)>0&&(0,o.jsx)("p",{className:"mt-1 font-mono text-xs text-faint",children:d("look.dropped",{n:null!=(s=c.dropped)?s:0})})]})}function m(e){let{lookId:t,findings:n,assigned:c,launched:d=[],discarded:u=[]}=e,m=(0,l.kj)(),x=(0,a.useRouter)(),p=(0,s.q)(),[f,h]=(0,r.useState)(c),[g,b]=(0,r.useState)(()=>new Set(d)),[y,j]=(0,r.useState)(()=>new Set(u)),[v,k]=(0,r.useState)(null),[w,N]=(0,r.useState)({});function O(e,t){N(n=>({...n,[e]:t}))}async function S(e){k(e);try{var n,o,r;let a=await fetch("/api/twin/assign",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({lookId:t,finding:e})}),l=await a.json();if(!a.ok){l.id&&h(t=>({...t,[e]:l.id})),O(e,null!=(n=l.error)?n:String(a.status));return}l.id&&h(t=>({...t,[e]:l.id})),j(t=>{let n=new Set(t);return n.delete(e),n}),O(e,m("look.assignDone",{project:null!=(o=l.project)?o:"",title:null!=(r=l.title)?r:""})),x.refresh()}catch(t){O(e,m("project.unreachable"))}finally{k(null)}}async function C(e){k(e);try{let o=await fetch("/api/twin/assign",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({lookId:t,finding:e,decision:"discard"})}),r=await o.json();if(!o.ok){var n;O(e,null!=(n=r.error)?n:String(o.status));return}j(t=>new Set(t).add(e)),h(t=>{let n={...t};return delete n[e],n}),O(e,m("look.dismissDone")),x.refresh()}catch(t){O(e,m("project.unreachable"))}finally{k(null)}}async function P(e,t){k(e);try{var n,o;let r=await fetch("/api/assignments/launch",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({taskId:t})}),a=await r.json();r.ok&&b(e=>new Set(e).add(t)),O(e,r.ok?m("look.assignLaunched",{agent:null!=(n=a.agent)?n:""}):null!=(o=a.error)?o:String(r.status))}catch(t){O(e,m("project.unreachable"))}finally{k(null)}}return(0,o.jsx)("ol",{className:"mt-3 flex flex-col gap-4",children:n.map((e,n)=>{let r=f[n],a=y.has(n);return(0,o.jsxs)("li",{className:"flex flex-col gap-1",children:[(0,o.jsx)("p",{className:"max-w-2xl text-sm leading-relaxed",children:e.what}),(0,o.jsx)("p",{className:"max-w-2xl font-mono text-xs text-faint",children:e.where}),(0,o.jsx)("p",{className:"max-w-2xl text-sm leading-relaxed text-smoke",children:m("look.fix",{fix:e.fix})}),e.cites.map(e=>(0,o.jsx)("p",{className:"max-w-2xl font-mono text-xs text-faint",children:m("look.against",{statement:e})},e)),""!==t&&(0,o.jsxs)("div",{className:"mt-1 flex flex-wrap items-center gap-2",children:[(0,o.jsx)(i.rA,{tone:"plain",type:"button",onClick:()=>void S(n),busy:v===n&&void 0===r,busyLabel:m("look.assigning"),disabled:null!==v||void 0!==r,children:void 0!==r?m("look.assigned"):m("look.assignButton")}),!a&&(0,o.jsx)("button",{type:"button",onClick:()=>void C(n),disabled:null!==v,className:"rounded border border-edge px-2.5 py-1 font-mono text-xs text-faint transition-colors hover:border-chalk hover:text-smoke disabled:opacity-50",children:m("look.dismissButton")}),a&&(0,o.jsx)("span",{className:"font-mono text-xs text-faint",children:m("look.dismissed")}),void 0!==r&&p.available&&(0,o.jsx)("button",{type:"button",onClick:()=>void P(n,r),disabled:null!==v,className:"rounded border border-accent bg-accent px-2.5 py-1 font-mono text-xs text-white transition-opacity hover:opacity-85 disabled:opacity-50",children:m(g.has(r)?"look.assignAgain":"look.assignNow")})]}),w[n]&&(0,o.jsx)("p",{className:"max-w-2xl font-mono text-xs text-smoke",children:w[n]})]},n)})})}async function x(e){var t;let n=await fetch("/api/twin/look",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)}),o=await n.json();return n.ok?o:{...o,error:null!=(t=o.error)?t:String(n.status)}}},4204:(e,t,n)=>{"use strict";n.d(t,{rA:()=>m,lZ:()=>d,hV:()=>c,z3:()=>i.z,Pp:()=>l,KW:()=>s});var o=n(9763),r=n(5595),a=n(7911);function l(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"es";if(!e)return"—";let n=Math.floor((Date.now()-new Date(e).getTime())/864e5);if("en"===t){if(n<=0)return"today";if(1===n)return"yesterday";if(n<30)return"".concat(n," d ago");if(n<365){let e=Math.floor(n/30);return"".concat(e," month").concat(1===e?"":"s"," ago")}let e=Math.floor(n/365);return"".concat(e," year").concat(1===e?"":"s"," ago")}if(n<=0)return"hoy";if(1===n)return"ayer";if(n<30)return"hace ".concat(n," d");if(n<365){let e=Math.floor(n/30);return"hace ".concat(e," ").concat(1===e?"mes":"meses")}let o=Math.floor(n/365);return"hace ".concat(o," a\xf1o").concat(1===o?"":"s")}function s(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"es",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:Date.now(),o=n-new Date(e).getTime();if(!Number.isFinite(o))return"—";let r="en"===t;if(o<6e4)return r?"just now":"ahora mismo";if(o<36e5){let e=Math.floor(o/6e4);return r?"".concat(e," min ago"):"hace ".concat(e," min")}if(o<1728e5){let e=Math.floor(o/36e5);return r?"".concat(e," h ago"):"hace ".concat(e," h")}return l(e,t)}var i=n(7642);function c(e){let{name:t,src:n,size:l=56,tone:s="brand",locale:i}=e,c="panoma"===t.toLowerCase(),d="demo-runner"===t.toLowerCase()?"/assets/projects/demo-runner.png":null,u=c?"/assets/brand/panoma.svg":null!=n?n:d;return u?(0,o.jsx)("img",{src:u,loading:"lazy",alt:(0,a.t)(i,"common.iconOf",{name:t}),width:l,height:l,className:"shrink-0 rounded-[22%] border border-edge object-cover shadow-sm",style:{width:l,height:l}}):(0,o.jsx)("span",{"aria-hidden":!0,className:"flex shrink-0 items-center justify-center rounded-[22%] border border-edge ".concat("neutral"===s?"project-icon--neutral":"bg-raised text-accent"),style:{width:l,height:l},children:(0,o.jsx)(r.KQe,{style:{width:.46*l,height:.46*l}})})}function d(e){let{text:t,as:n="p",className:r}=e;return(0,o.jsx)(n,{role:"alert",className:"font-mono text-[11px] text-fail".concat(r?" ".concat(r):""),children:t})}let u={raised:"rounded border border-edge bg-raised px-3 py-1.5 font-mono text-[11px] text-smoke transition-colors hover:border-accent hover:text-accent disabled:opacity-50",surface:"rounded border border-edge bg-surface px-3 py-1.5 font-mono text-xs text-smoke transition-colors hover:border-accent hover:text-accent disabled:opacity-50",plain:"rounded border border-edge px-2.5 py-1 font-mono text-xs text-smoke transition-colors hover:border-chalk disabled:opacity-50",accent:"rounded border border-accent bg-accent px-3 py-1.5 font-mono text-xs text-white transition-opacity hover:opacity-85 disabled:opacity-50"};function m(e){let{tone:t,busy:n=!1,busyLabel:r,disabled:a,className:l,children:s,...i}=e;return(0,o.jsx)("button",{...i,disabled:null!=a?a:n,className:"".concat(u[t]).concat(l?" ".concat(l):""),children:n&&void 0!==r?r:s})}},4652:(e,t,n)=>{"use strict";n.d(t,{k5:()=>d});var o=n(4963),r={color:void 0,size:void 0,className:void 0,style:void 0,attr:void 0},a=o.createContext&&o.createContext(r),l=["attr","size","title"];function s(){return(s=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var o in n)({}).hasOwnProperty.call(n,o)&&(e[o]=n[o])}return e}).apply(null,arguments)}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,o)}return n}function c(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?i(Object(n),!0).forEach(function(t){var o,r,a;o=e,r=t,a=n[t],(r=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var o=n.call(e,t||"default");if("object"!=typeof o)return o;throw TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(r))in o?Object.defineProperty(o,r,{value:a,enumerable:!0,configurable:!0,writable:!0}):o[r]=a}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):i(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function d(e){return t=>o.createElement(u,s({attr:c({},e.attr)},t),function e(t){return t&&t.map((t,n)=>o.createElement(t.tag,c({key:n},t.attr),e(t.child)))}(e.child))}function u(e){var t=t=>{var n,r=e.attr,a=e.size,i=e.title,d=function(e,t){if(null==e)return{};var n,o,r=function(e,t){if(null==e)return{};var n={};for(var o in e)if(({}).hasOwnProperty.call(e,o)){if(-1!==t.indexOf(o))continue;n[o]=e[o]}return n}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o<a.length;o++)n=a[o],-1===t.indexOf(n)&&({}).propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}(e,l),u=a||t.size||"1em";return t.className&&(n=t.className),e.className&&(n=(n?n+" ":"")+e.className),o.createElement("svg",s({stroke:"currentColor",fill:"currentColor",strokeWidth:"0"},t.attr,r,d,{className:n,style:c(c({color:e.color||t.color},t.style),e.style),height:u,width:u,xmlns:"http://www.w3.org/2000/svg"}),i&&o.createElement("title",null,i),e.children)};return void 0!==a?o.createElement(a.Consumer,null,e=>t(e)):t(r)}},5733:(e,t,n)=>{"use strict";let o;n.d(t,{q:()=>a});var r=n(4963);function a(){let[e,t]=(0,r.useState)({available:!1,agent:null});return(0,r.useEffect)(()=>{null!=o||(o=fetch("/api/assignments/launch").then(e=>e.json()).catch(()=>({available:!1,agent:null})));let e=!0;return o.then(n=>{e&&t(n)}),()=>{e=!1}},[]),e}},7244:(e,t,n)=>{"use strict";var o=n(3292);n.o(o,"usePathname")&&n.d(t,{usePathname:function(){return o.usePathname}}),n.o(o,"useRouter")&&n.d(t,{useRouter:function(){return o.useRouter}}),n.o(o,"useSearchParams")&&n.d(t,{useSearchParams:function(){return o.useSearchParams}})},7642:(e,t,n)=>{"use strict";function o(e){return e<1024?"".concat(e," B"):e<1048576?"".concat(Math.round(e/1024)," KB"):e<0x40000000?"".concat((e/1048576).toFixed(1)," MB"):"".concat((e/0x40000000).toFixed(1)," GB")}n.d(t,{z:()=>o})},8274:(e,t,n)=>{Promise.resolve().then(n.bind(n,1636))}},e=>{e.O(0,[6587,7911,9643,4737,7358],()=>e(e.s=8274)),_N_E=e.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[1162],{179:(e,t,n)=>{"use strict";n.d(t,{I18nProvider:()=>l,Ym:()=>c,Zs:()=>d,kj:()=>u});var r=n(9763),o=n(4963),i=n(7911);let s=(0,o.createContext)("en"),a=(0,o.createContext)("panoma");function l(e){let{locale:t,cli:n,children:o}=e;return(0,r.jsx)(s.Provider,{value:t,children:(0,r.jsx)(a.Provider,{value:n,children:o})})}function c(){return(0,o.useContext)(s)}function d(){return(0,o.useContext)(a)}function u(){let e=(0,o.useContext)(s),t=(0,o.useContext)(a);return(0,o.useCallback)((n,r)=>(0,i.t)(e,n,{cli:t,...r}),[e,t])}},733:(e,t,n)=>{"use strict";n.d(t,{TwinSynthesize:()=>a});var r=n(9763),o=n(4963),i=n(7244),s=n(179);function a(e){let{pending:t,compact:n}=e,a=(0,s.kj)(),l=(0,i.useRouter)(),[c,d]=(0,o.useState)(!1),[u,x]=(0,o.useState)(null);async function p(){d(!0),x(null);try{var e,n,r,o,i,s,c;if(t>0){let t=await fetch("/api/twin/classify",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({})}),n=await t.json();if(!t.ok)return void x(null!=(e=n.error)?e:a("twin.synthFailed"))}let d=await fetch("/api/twin/synthesize",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({})}),u=await d.json();if(!d.ok)return void x(null!=(n=u.error)?n:a("twin.synthFailed"));let p=null!=(r=u.created)?r:0,m=null!=(o=u.refined)?o:0,h=null!=(i=u.retired)?i:0,f=null!=(s=u.proposed)?s:0,b=p+m+h+f,g=null!=(c=u.unchanged)?c:0,w=0===u.topics?g>0?a("twin.synthUpToDate"):a("twin.synthNothing"):a("twin.synthSame"),y=a("twin.synthDone",{created:p,refined:m,retired:h});x(0===b?w:0===f?y:"".concat(y," ").concat(a("twin.synthAsks",{n:f}))),l.refresh()}catch(e){x(a("project.unreachable"))}finally{d(!1)}}return(0,r.jsxs)("div",{className:n?"flex items-center gap-2":"mt-3 flex flex-col gap-1",children:[(0,r.jsx)("button",{type:"button",onClick:p,disabled:c,className:"self-start rounded border border-edge px-2.5 py-1 font-mono text-xs text-smoke transition-colors hover:border-chalk disabled:opacity-50",children:c?a("twin.synthesizing"):a("twin.synthesize")}),u?(0,r.jsx)("p",{className:"font-mono text-xs text-smoke",children:u}):n?null:(0,r.jsx)("p",{className:"font-mono text-xs text-faint",children:a("twin.synthHint")})]})}},2189:(e,t,n)=>{"use strict";n.d(t,{TwinConsent:()=>l});var r=n(9763),o=n(4963),i=n(7244),s=n(179),a=n(4204);function l(e){let{standing:t,chars:n,cap:l}=e,c=(0,s.kj)(),d=(0,i.useRouter)(),[u,x]=(0,o.useState)(!1),[p,m]=(0,o.useState)(null);async function h(e){x(!0),m(null);try{var t;let n=await fetch("/api/twin/taste",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({publishInferred:e})}),r=await n.json();n.ok||m(null!=(t=r.error)?t:String(n.status)),d.refresh()}catch(e){m(c("project.unreachable"))}finally{x(!1)}}return(0,r.jsxs)("section",{className:"mt-12 rounded-lg border border-edge px-4 py-4",children:[(0,r.jsx)("p",{className:"eyebrow",children:c("twin.consentTitle")}),(0,r.jsx)("p",{className:"mt-2 max-w-2xl text-sm leading-relaxed",children:c("twin.consentBody")}),(0,r.jsxs)("p",{className:"mt-2 max-w-2xl font-mono text-xs ".concat(n>l?"text-idle":"text-smoke"),children:[c("twin.consentCount",{n:t,chars:n}),n>l?" \xb7 ".concat(c("twin.consentOver",{cap:l})):""]}),(0,r.jsxs)("div",{className:"mt-3 flex flex-wrap items-center gap-2",children:[(0,r.jsx)(a.rA,{tone:"accent",type:"button",onClick:()=>h(!0),busy:u,busyLabel:c("twin.saving"),children:c("twin.consentAllow")}),(0,r.jsx)("span",{className:"font-mono text-xs text-faint",children:c("twin.consentRevoke")})]}),p&&(0,r.jsx)("p",{className:"mt-2 font-mono text-xs text-idle",children:c("twin.saveFailed",{detail:p})})]})}},4204:(e,t,n)=>{"use strict";n.d(t,{rA:()=>x,lZ:()=>d,hV:()=>c,z3:()=>l.z,Pp:()=>s,KW:()=>a});var r=n(9763),o=n(5595),i=n(7911);function s(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"es";if(!e)return"—";let n=Math.floor((Date.now()-new Date(e).getTime())/864e5);if("en"===t){if(n<=0)return"today";if(1===n)return"yesterday";if(n<30)return"".concat(n," d ago");if(n<365){let e=Math.floor(n/30);return"".concat(e," month").concat(1===e?"":"s"," ago")}let e=Math.floor(n/365);return"".concat(e," year").concat(1===e?"":"s"," ago")}if(n<=0)return"hoy";if(1===n)return"ayer";if(n<30)return"hace ".concat(n," d");if(n<365){let e=Math.floor(n/30);return"hace ".concat(e," ").concat(1===e?"mes":"meses")}let r=Math.floor(n/365);return"hace ".concat(r," a\xf1o").concat(1===r?"":"s")}function a(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"es",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:Date.now(),r=n-new Date(e).getTime();if(!Number.isFinite(r))return"—";let o="en"===t;if(r<6e4)return o?"just now":"ahora mismo";if(r<36e5){let e=Math.floor(r/6e4);return o?"".concat(e," min ago"):"hace ".concat(e," min")}if(r<1728e5){let e=Math.floor(r/36e5);return o?"".concat(e," h ago"):"hace ".concat(e," h")}return s(e,t)}var l=n(7642);function c(e){let{name:t,src:n,size:s=56,tone:a="brand",locale:l}=e,c="panoma"===t.toLowerCase(),d="demo-runner"===t.toLowerCase()?"/assets/projects/demo-runner.png":null,u=c?"/assets/brand/panoma.svg":null!=n?n:d;return u?(0,r.jsx)("img",{src:u,loading:"lazy",alt:(0,i.t)(l,"common.iconOf",{name:t}),width:s,height:s,className:"shrink-0 rounded-[22%] border border-edge object-cover shadow-sm",style:{width:s,height:s}}):(0,r.jsx)("span",{"aria-hidden":!0,className:"flex shrink-0 items-center justify-center rounded-[22%] border border-edge ".concat("neutral"===a?"project-icon--neutral":"bg-raised text-accent"),style:{width:s,height:s},children:(0,r.jsx)(o.KQe,{style:{width:.46*s,height:.46*s}})})}function d(e){let{text:t,as:n="p",className:o}=e;return(0,r.jsx)(n,{role:"alert",className:"font-mono text-[11px] text-fail".concat(o?" ".concat(o):""),children:t})}let u={raised:"rounded border border-edge bg-raised px-3 py-1.5 font-mono text-[11px] text-smoke transition-colors hover:border-accent hover:text-accent disabled:opacity-50",surface:"rounded border border-edge bg-surface px-3 py-1.5 font-mono text-xs text-smoke transition-colors hover:border-accent hover:text-accent disabled:opacity-50",plain:"rounded border border-edge px-2.5 py-1 font-mono text-xs text-smoke transition-colors hover:border-chalk disabled:opacity-50",accent:"rounded border border-accent bg-accent px-3 py-1.5 font-mono text-xs text-white transition-opacity hover:opacity-85 disabled:opacity-50"};function x(e){let{tone:t,busy:n=!1,busyLabel:o,disabled:i,className:s,children:a,...l}=e;return(0,r.jsx)("button",{...l,disabled:null!=i?i:n,className:"".concat(u[t]).concat(s?" ".concat(s):""),children:n&&void 0!==o?o:a})}},4652:(e,t,n)=>{"use strict";n.d(t,{k5:()=>d});var r=n(4963),o={color:void 0,size:void 0,className:void 0,style:void 0,attr:void 0},i=r.createContext&&r.createContext(o),s=["attr","size","title"];function a(){return(a=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e}).apply(null,arguments)}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function c(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?l(Object(n),!0).forEach(function(t){var r,o,i;r=e,o=t,i=n[t],(o=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=typeof r)return r;throw TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(o))in r?Object.defineProperty(r,o,{value:i,enumerable:!0,configurable:!0,writable:!0}):r[o]=i}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):l(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function d(e){return t=>r.createElement(u,a({attr:c({},e.attr)},t),function e(t){return t&&t.map((t,n)=>r.createElement(t.tag,c({key:n},t.attr),e(t.child)))}(e.child))}function u(e){var t=t=>{var n,o=e.attr,i=e.size,l=e.title,d=function(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n={};for(var r in e)if(({}).hasOwnProperty.call(e,r)){if(-1!==t.indexOf(r))continue;n[r]=e[r]}return n}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],-1===t.indexOf(n)&&({}).propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}(e,s),u=i||t.size||"1em";return t.className&&(n=t.className),e.className&&(n=(n?n+" ":"")+e.className),r.createElement("svg",a({stroke:"currentColor",fill:"currentColor",strokeWidth:"0"},t.attr,o,d,{className:n,style:c(c({color:e.color||t.color},t.style),e.style),height:u,width:u,xmlns:"http://www.w3.org/2000/svg"}),l&&r.createElement("title",null,l),e.children)};return void 0!==i?r.createElement(i.Consumer,null,e=>t(e)):t(o)}},7244:(e,t,n)=>{"use strict";var r=n(3292);n.o(r,"usePathname")&&n.d(t,{usePathname:function(){return r.usePathname}}),n.o(r,"useRouter")&&n.d(t,{useRouter:function(){return r.useRouter}}),n.o(r,"useSearchParams")&&n.d(t,{useSearchParams:function(){return r.useSearchParams}})},7522:(e,t,n)=>{"use strict";n.d(t,{TwinDistill:()=>a});var r=n(9763),o=n(4963),i=n(7244),s=n(179);function a(e){let{left:t}=e,n=(0,s.kj)(),a=(0,i.useRouter)(),[d,u]=(0,o.useState)(!1),[x,p]=(0,o.useState)(null);async function m(){u(!0),p(null);try{var e,t,r,o,i;p(n("twin.mining"));let s=await l();if(s.unreachable)p(n("project.unreachable"));else if(void 0!==s.error){if(p(s.error),s.blocked)return}else{let r=null!=(e=s.saved)?e:0;p(0===r?n("twin.minedNone"):n("twin.mined",{saved:r,duplicates:null!=(t=s.duplicates)?t:0}))}let d=await c({dryRun:!0});if(d.error)return void p(d.hint?"".concat(d.error," ").concat(d.hint):d.error);if(!d.verdicts)return void p(n("twin.distillNothing"));p(n("twin.distillEstimate",{verdicts:d.verdicts,tokens:null!=(r=d.estimatedTokens)?r:0}));let u=0,x=0;for(let e=1;e<=20;e+=1){let e=await c({});if(u+=null!=(o=e.verdicts)?o:0,x+=null!=(i=e.saved)?i:0,e.error){p(e.hint?"".concat(e.error," ").concat(e.hint):e.error);break}let t=e.corpus?Math.max(e.corpus.total-e.corpus.read,0):0;if(p(n("twin.distillProgress",{read:u,saved:x,left:t})),!e.verdicts||t<=0)break}a.refresh()}catch(e){p(n("project.unreachable"))}finally{u(!1)}}return(0,r.jsxs)("div",{className:"mt-2 flex flex-col gap-1",children:[(0,r.jsx)("button",{type:"button",onClick:m,disabled:d,className:"self-start rounded border border-edge px-2.5 py-1 font-mono text-xs text-smoke transition-colors hover:border-chalk disabled:opacity-50",children:d?n("twin.distilling"):t>0?n("twin.mineButtonLeft",{n:t}):n("twin.mineButton")}),x&&(0,r.jsx)("p",{className:"font-mono text-xs text-smoke",children:x})]})}async function l(){try{var e;let t=await fetch("/api/twin/mine",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({})}),n=await t.json();if(t.ok)return n;return{error:null!=(e=n.error)?e:String(t.status),...409===t.status?{blocked:!0}:{}}}catch(e){return{unreachable:!0}}}async function c(e){var t;let n=await fetch("/api/twin/distill",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)}),r=await n.json();return n.ok?r:{...r,error:null!=(t=r.error)?t:String(n.status)}}},7642:(e,t,n)=>{"use strict";function r(e){return e<1024?"".concat(e," B"):e<1048576?"".concat(Math.round(e/1024)," KB"):e<0x40000000?"".concat((e/1048576).toFixed(1)," MB"):"".concat((e/0x40000000).toFixed(1)," GB")}n.d(t,{z:()=>r})},7657:(e,t,n)=>{"use strict";n.d(t,{TwinSources:()=>l});var r=n(9763),o=n(4963),i=n(7244),s=n(179),a=n(4204);function l(e){let{sources:t}=e,n=(0,s.kj)(),l=(0,i.useRouter)(),[c,d]=(0,o.useState)(null),[u,x]=(0,o.useState)(null),[p,m]=(0,o.useState)(t);async function h(e,t){d(e),x(null);try{let n=await fetch("/api/twin/sources",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({source:e,allowed:t})}),o=await n.json();if(!n.ok){var r;x(null!=(r=o.error)?r:String(n.status));return}o.sources&&m(o.sources),l.refresh()}catch(e){x(n("project.unreachable"))}finally{d(null)}}let f=p.filter(e=>"absent"!==e.state);return 0===f.length?(0,r.jsxs)("section",{className:"mt-6 rounded-lg border border-edge px-4 py-4",children:[(0,r.jsx)("p",{className:"eyebrow",children:n("twin.sourcesTitle")}),(0,r.jsx)("p",{className:"mt-2 max-w-2xl text-sm leading-relaxed",children:n("twin.sourcesNone")})]}):(0,r.jsxs)("section",{className:"mt-6 rounded-lg border border-edge px-4 py-4",children:[(0,r.jsx)("p",{className:"eyebrow",children:n("twin.sourcesTitle")}),(0,r.jsx)("p",{className:"mt-2 max-w-2xl text-sm leading-relaxed",children:n("twin.sourcesLead")}),(0,r.jsx)("div",{className:"mt-3 flex flex-col gap-2",children:f.map(e=>(0,r.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,r.jsx)("span",{className:"font-mono text-xs",children:e.label}),(0,r.jsx)("span",{className:"font-mono text-xs text-faint",children:e.present?n("twin.sourceSize",{files:e.files,size:(0,a.z3)(e.bytes)}):n("twin.sourceGone")}),"noReader"===e.state?(0,r.jsx)("span",{className:"font-mono text-xs text-idle",children:n("twin.sourceNoReader")}):(0,r.jsx)("button",{type:"button",onClick:()=>h(e.id,"allowed"!==e.state),disabled:null!==c,className:"allowed"===e.state?"rounded border border-edge px-2.5 py-1 font-mono text-xs text-smoke transition-colors hover:border-chalk disabled:opacity-50":"rounded border border-accent bg-accent px-2.5 py-1 font-mono text-xs text-white transition-opacity hover:opacity-85 disabled:opacity-50",children:c===e.id?n("twin.saving"):n("allowed"===e.state?"twin.sourceRevoke":"twin.sourceAllow")})]},e.id))}),(0,r.jsx)("p",{className:"mt-3 max-w-2xl font-mono text-xs text-faint",children:n("twin.sourcesRevokeNote")}),u&&(0,r.jsx)("p",{className:"mt-2 font-mono text-xs text-idle",children:u})]})}},8895:(e,t,n)=>{Promise.resolve().then(n.bind(n,9495)),Promise.resolve().then(n.bind(n,2189)),Promise.resolve().then(n.bind(n,7522)),Promise.resolve().then(n.bind(n,7657)),Promise.resolve().then(n.bind(n,733)),Promise.resolve().then(n.t.bind(n,1723,23))},9495:(e,t,n)=>{"use strict";n.d(t,{BeliefEditor:()=>d});var r=n(9763),o=n(4963),i=n(7244),s=n(179);let a={design:"twin.topicDesign",frontend:"twin.topicFrontend",backend:"twin.topicBackend",cli:"twin.topicCli",testing:"twin.topicTesting",copy:"twin.topicCopy",workflow:"twin.topicWorkflow",tooling:"twin.topicTooling",data:"twin.topicData",other:"twin.topicOther"};var l=n(4204);let c={signed:"twin.badgeSigned",standing:"twin.badgeStanding",forming:"twin.badgeForming"};function d(e){let{beliefs:t,graveyard:n,proposals:a,locale:c}=e,d=(0,s.kj)(),h=(0,i.useRouter)(),[f,b]=(0,o.useState)(new Map),[g,w]=(0,o.useState)(new Map),[y,v]=(0,o.useState)(null),[j,k]=(0,o.useState)(!1),[N,S]=(0,o.useState)(null),O=(0,o.useMemo)(()=>{let e=new Map;for(let n of t){let t=e.get(n.topic);t?t.push(n):e.set(n.topic,[n])}return[...e]},[t]),C=f.size>0||g.size>0;function P(e,t){b(n=>{let r=new Map(n);return void 0===t?r.delete(e):r.set(e,t),r})}async function T(){k(!0),S(null);let e=[],t=[],n=[];for(let[r,o]of f)"sign"===o.kind?e.push({id:r,...o.statement?{statement:o.statement}:{}}):"veto"===o.kind?t.push(r):n.push({id:r,identity:o.identity});let r=[...g].map(e=>{let[t,n]=e;return{id:t,accept:n}});try{let i=await fetch("/api/twin/taste",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({sign:e,veto:t,scope:n,resolve:r})}),s=await i.json();if(!i.ok){var o;S(null!=(o=s.error)?o:String(i.status));return}b(new Map),w(new Map),v(null),h.refresh()}catch(e){S(d("project.unreachable"))}finally{k(!1)}}return(0,r.jsxs)(r.Fragment,{children:[a.length>0&&(0,r.jsxs)("section",{className:"mt-12",children:[(0,r.jsx)("h2",{className:"font-display text-lg font-semibold tracking-tight",children:d("twin.proposalsTitle")}),(0,r.jsx)("p",{className:"mt-1 max-w-2xl text-sm leading-relaxed text-smoke",children:d("twin.proposalsNote")}),(0,r.jsx)("ul",{className:"mt-4 flex flex-col gap-3",children:a.map(e=>{var t;return(0,r.jsxs)("li",{className:"rounded-lg border px-4 py-4 ".concat(g.has(e.id)?"border-l-2 border-l-chalk border-edge":"border-edge"),children:[(0,r.jsxs)("p",{className:"eyebrow",children:[u(e.topic,d),e.supersedes&&e.supersedes.length>1?" \xb7 ".concat(d("twin.proposalJoins",{n:e.supersedes.length})):""]}),null==(t=e.supersedes)?void 0:t.map(e=>(0,r.jsx)("p",{className:"mt-1 max-w-2xl text-sm leading-relaxed text-smoke line-through decoration-faint",children:e},e)),(0,r.jsx)("p",{className:"mt-2 max-w-2xl text-[15px] leading-relaxed",children:e.statement}),(0,r.jsxs)("div",{className:"mt-3 flex flex-wrap gap-2",children:[(0,r.jsx)(m,{label:d("twin.proposalAccept"),active:!0===g.get(e.id),onClick:()=>w(x(g,e.id,!0))}),(0,r.jsx)(m,{label:d("twin.proposalReject"),active:!1===g.get(e.id),onClick:()=>w(x(g,e.id,!1))})]})]},e.id)})})]}),O.map(e=>{let[t,n]=e;return(0,r.jsxs)("section",{className:"mt-12",children:[(0,r.jsx)("h2",{className:"font-display text-lg font-semibold tracking-tight",children:u(t,d)}),(0,r.jsx)("ul",{className:"mt-4 flex flex-col gap-3",children:n.map(e=>(0,r.jsx)(p,{belief:e,locale:c,gesture:f.get(e.id),editing:y===e.id,onEdit:t=>v(t?e.id:null),onGesture:t=>(function(e,t){let n=f.get(e),r=(null==n?void 0:n.kind)==="sign"&&void 0!==n.statement;n&&n.kind===t.kind&&!r?P(e,void 0):P(e,t)})(e.id,t),onWrite:t=>P(e.id,{kind:"sign",statement:t}),translate:d},e.id))})]},t)}),n.length>0&&(0,r.jsxs)("section",{className:"mt-12",children:[(0,r.jsx)("h2",{className:"font-display text-lg font-semibold tracking-tight",children:d("twin.graveyardTitle")}),(0,r.jsx)("p",{className:"mt-1 max-w-2xl text-sm leading-relaxed text-smoke",children:d("twin.graveyardNote")}),(0,r.jsx)("ul",{className:"mt-4 flex flex-col gap-2",children:n.map(e=>(0,r.jsx)("li",{className:"rounded-lg border border-edge px-4 py-3 opacity-60",children:(0,r.jsx)("p",{className:"text-sm leading-relaxed text-smoke line-through decoration-faint",children:e.statement})},e.id))})]}),C&&(0,r.jsxs)("div",{className:"sticky bottom-4 z-10 mt-8 flex flex-wrap items-center gap-3 rounded-lg border border-edge bg-surface/95 px-4 py-3 shadow-lg backdrop-blur",children:[(0,r.jsx)("span",{className:"font-mono text-xs text-smoke",children:d("twin.markedGestures",{n:f.size+g.size})}),(0,r.jsx)(l.rA,{tone:"accent",type:"button",onClick:T,busy:j,busyLabel:d("twin.saving"),children:d("twin.save")}),(0,r.jsx)("button",{type:"button",onClick:()=>{b(new Map),w(new Map),v(null)},disabled:j,className:"font-mono text-xs text-smoke underline-offset-2 hover:underline disabled:opacity-50",children:d("twin.cancel")}),N&&(0,r.jsx)("span",{className:"font-mono text-xs text-fail",children:d("twin.saveFailed",{detail:N})})]})]})}function u(e,t){let n=a[e];return n?t(n):e}function x(e,t,n){let r=new Map(e);return r.get(t)===n?r.delete(t):r.set(t,n),r}function p(e){let{belief:t,locale:n,gesture:i,editing:s,onEdit:a,onGesture:l,onWrite:d,translate:u}=e,[x,p]=(0,o.useState)(!1),[h,f]=(0,o.useState)(t.statement),b=(null==i?void 0:i.kind)==="sign"?i.statement:void 0;return(0,r.jsxs)("li",{className:["rounded-lg border px-4 py-4 transition-colors",(null==i?void 0:i.kind)==="sign"?"border-l-2 border-l-live border-edge bg-live/[0.05]":(null==i?void 0:i.kind)==="veto"?"border-l-2 border-l-faint border-edge opacity-60":void 0!==i?"border-l-2 border-l-chalk border-edge":"border-edge"].join(" "),children:[(0,r.jsxs)("p",{className:"eyebrow",children:[(0,r.jsx)("span",{className:"forming"===t.badge?"text-idle":"",children:u(c[t.badge])}),t.scope?" \xb7 ".concat(u("twin.scopedTag",{project:t.scope})):""]}),s?(0,r.jsxs)("div",{className:"mt-2",children:[(0,r.jsx)("textarea",{value:h,onChange:e=>f(e.target.value),"aria-label":u("twin.editText"),rows:3,className:"w-full max-w-2xl rounded border border-edge bg-transparent px-3 py-2 text-[15px] leading-relaxed"}),(0,r.jsxs)("div",{className:"mt-2 flex flex-wrap gap-2",children:[(0,r.jsx)(m,{label:u("twin.editSave"),active:!0,onClick:()=>{""!==h.trim()&&(d(h.trim()),a(!1))}}),(0,r.jsx)(m,{label:u("twin.cancel"),onClick:()=>{f(t.statement),a(!1)}})]})]}):(0,r.jsx)("p",{className:"mt-1 max-w-2xl text-[15px] leading-relaxed",children:null!=b?b:t.statement}),(0,r.jsxs)("p",{className:"mt-2 font-mono text-xs text-smoke",children:[u("twin.support",{observations:t.support.observations,projects:t.support.projects,days:t.support.days}),"forming"===t.badge?(0,r.jsx)("span",{className:"text-idle",children:" \xb7 ".concat(u("twin.formingWhy"))}):null,t.citations.length>0&&(0,r.jsxs)(r.Fragment,{children:[" \xb7 ",(0,r.jsx)("button",{type:"button",onClick:()=>p(e=>!e),className:"underline-offset-2 hover:underline",children:u(x?"twin.hideCitations":"twin.showCitations",{n:t.citations.length})})]})]}),x&&(0,r.jsx)("ul",{className:"mt-3 flex flex-col gap-2.5 border-l border-edge pl-3",children:t.citations.map(e=>(0,r.jsxs)("li",{children:[(0,r.jsxs)("p",{className:"line-clamp-2 text-sm italic leading-snug text-smoke",title:e.quote,children:["\xab",e.quote,"\xbb"]}),(0,r.jsxs)("p",{className:"mt-0.5 font-mono text-xs text-faint",children:[function(e,t){let n=new Date(e);if(Number.isNaN(n.getTime()))return e.slice(0,10);let r=String(n.getMonth()+1).padStart(2,"0"),o=String(n.getDate()).padStart(2,"0");return"en"===t?"".concat(n.getFullYear(),"-").concat(r,"-").concat(o):"".concat(o,"/").concat(r,"/").concat(n.getFullYear())}(e.at,n),e.project?" \xb7 ".concat(u("twin.citedIn",{project:e.project})):""]})]},e.verdictId))}),!s&&(0,r.jsxs)("div",{className:"mt-3 flex flex-wrap gap-2",children:["signed"!==t.badge&&(0,r.jsx)(m,{label:u("twin.sign"),active:(null==i?void 0:i.kind)==="sign"&&void 0===b,onClick:()=>l({kind:"sign"})}),(0,r.jsx)(m,{label:u("twin.edit"),active:void 0!==b,onClick:()=>{f(null!=b?b:t.statement),a(!0)}}),(0,r.jsx)(m,{label:u("twin.veto"),active:(null==i?void 0:i.kind)==="veto",onClick:()=>l({kind:"veto"})}),t.scope?(0,r.jsx)(m,{label:u("twin.scopeAll"),active:(null==i?void 0:i.kind)==="scope"&&null===i.identity,onClick:()=>l({kind:"scope",identity:null})}):t.learnedIn?(0,r.jsx)(m,{label:u("twin.scopeOnly",{project:t.learnedIn.name}),active:(null==i?void 0:i.kind)==="scope",onClick:()=>{var e,n;return l({kind:"scope",identity:null!=(n=null==(e=t.learnedIn)?void 0:e.identity)?n:null})}}):null]})]})}function m(e){let{label:t,active:n,onClick:o}=e;return(0,r.jsx)("button",{type:"button",onClick:o,className:["rounded border px-2.5 py-1 font-mono text-xs transition-colors",n?"border-accent text-accent":"border-edge text-smoke hover:border-chalk"].join(" "),children:t})}}},e=>{e.O(0,[6587,1723,7911,9643,4737,7358],()=>e(e.s=8895)),_N_E=e.O()}]);
@@ -678,6 +678,16 @@ interface PortfolioStats {
678
678
  noGit: number;
679
679
  /** Outside of `projects`, not inside: `notACopy` excludes them from the count above. */
680
680
  copies: number;
681
+ /**
682
+ * Also outside `projects`, and for the other of the two reasons `notACopy` subtracts.
683
+ *
684
+ * The copies are set aside by the machine, and that is why they have always been counted here:
685
+ * a number that hides what somebody else decided has to say so. These are set aside by the
686
+ * person, one at a time, each with a notice that does not expire — so the day it happens nothing
687
+ * is missing. What was missing was the month afterwards, with the sidebar three short and
688
+ * nothing on any screen to remember it by.
689
+ */
690
+ hidden: number;
681
691
  redundantBytes: number;
682
692
  agentCommits: number;
683
693
  technologies: number;
@@ -1038,6 +1038,15 @@ async function getStats(db) {
1038
1038
  noGit: sql2`(select count(*)::int from ${projects}
1039
1039
  where ${notACopy} and last_commit_at is null)`,
1040
1040
  copies: sql2`(select count(*)::int from ${familyMembers})`,
1041
+ /*
1042
+ Counted from the decision and not from the project: `notACopy` reads `decisions.hidden`
1043
+ through `identity`, which is what survives moving the folder, and a decision can outlive
1044
+ the row it was about. Only rows that are still in the catalog are counted, so the figure
1045
+ can always be pointed at — and one that is also a copy is not counted twice.
1046
+ */
1047
+ hidden: sql2`(select count(*)::int from ${projects} p
1048
+ where not exists (select 1 from family_members fm where fm.project_id = p.id)
1049
+ and (select d.hidden from decisions d where d.identity = p.identity) is true)`,
1041
1050
  redundantBytes: sql2`(select coalesce(sum(redundant_bytes), 0)::int from ${families})`,
1042
1051
  agentCommits: sql2`(select coalesce(sum(commits), 0)::int from ${projectAgents})`,
1043
1052
  technologies: sql2`(select count(*)::int from ${technologies})`,
@@ -13,7 +13,7 @@ import {
13
13
  } from "./chunk-N7EEJ4U6.js";
14
14
  import {
15
15
  say
16
- } from "./chunk-VP225OGF.js";
16
+ } from "./chunk-KNPE4SJG.js";
17
17
  import "./chunk-K27F6QDR.js";
18
18
 
19
19
  // src/ai-command.ts
@@ -1,13 +1,13 @@
1
1
  import {
2
2
  search
3
- } from "./chunk-4ZMDIOH5.js";
3
+ } from "./chunk-JMXXTMGV.js";
4
4
  import {
5
5
  catalogFetch,
6
6
  unreachable
7
- } from "./chunk-JLPWKPLM.js";
7
+ } from "./chunk-3WPD5CHL.js";
8
8
  import {
9
9
  say
10
- } from "./chunk-VP225OGF.js";
10
+ } from "./chunk-KNPE4SJG.js";
11
11
  import "./chunk-K27F6QDR.js";
12
12
 
13
13
  // src/check-command.ts
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  CLI_LANGUAGE,
3
3
  say
4
- } from "./chunk-VP225OGF.js";
4
+ } from "./chunk-KNPE4SJG.js";
5
5
  import {
6
6
  POSTGRES_DEL_PAQUETE,
7
7
  avisoDeFormato,
@@ -1,11 +1,11 @@
1
1
  import {
2
2
  catalogFetch,
3
3
  unreachable
4
- } from "./chunk-JLPWKPLM.js";
4
+ } from "./chunk-3WPD5CHL.js";
5
5
  import {
6
6
  plural,
7
7
  say
8
- } from "./chunk-VP225OGF.js";
8
+ } from "./chunk-KNPE4SJG.js";
9
9
 
10
10
  // src/lang.ts
11
11
  import pc from "picocolors";
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  catalogFetch,
3
3
  unreachable
4
- } from "./chunk-JLPWKPLM.js";
4
+ } from "./chunk-3WPD5CHL.js";
5
5
  import {
6
6
  say
7
- } from "./chunk-VP225OGF.js";
7
+ } from "./chunk-KNPE4SJG.js";
8
8
  import {
9
9
  fold
10
10
  } from "./chunk-K27F6QDR.js";
@@ -504,7 +504,7 @@ var MESSAGES = {
504
504
  "twin.consentDeniedHint": "grant it with panoma twin allow {source}",
505
505
  "twin.consentNoReader": "no reader yet",
506
506
  "twin.consentNoReaderHint": "this format cannot be read yet: the permission would open nothing",
507
- "twin.sourcesTotal": "{n} source{s} on disk \xB7 {files} files \xB7 {size}",
507
+ "twin.sourcesTotal": "{n} source{s} on disk \xB7 {files} file{fs} \xB7 {size}",
508
508
  "twin.sourcesAllowed": "{n} permitted \xB7 {files} file{fs} \xB7 {size} that panoma twin mine would actually open",
509
509
  "twin.sourcesNoneAllowed": "None of them is permitted yet, so panoma twin mine would open nothing.",
510
510
  "twin.sourcesNone": "There are no agent histories on this machine.",
@@ -661,7 +661,13 @@ var MESSAGES = {
661
661
  "twin.saveRemapped": "{n} quote{s} that were already stored moved to another project: attribution is computed, and this pass resolved it better.",
662
662
  "twin.saveRestated": "Observations that moved project along with their quotes: {n}. Look at them with panoma twin taste.",
663
663
  "twin.corpusLeft": "You have {read} of {total} verdict{s} distilled from your history: {left} still unread,\n and every pass moves on to the ones that haven\u2019t been used yet.",
664
- "twin.corpusDone": "Your whole history has been distilled: all {total} stored verdicts already back some\n statement.",
664
+ /*
665
+ A pair and not a gap: with one verdict the article, the noun and the verb all move at once
666
+ —«all 1 stored verdicts already back» — and a suffix reaches none of them. The web half of this
667
+ same sentence was split the same way on the same day.
668
+ */
669
+ "twin.corpusDoneOne": "Your whole history has been distilled: the one stored verdict already backs a\n statement.",
670
+ "twin.corpusDoneMany": "Your whole history has been distilled: all {total} stored verdicts already back some\n statement.",
665
671
  "twin.lookNeedsArgs": "The project is missing: panoma twin look <project> [screenshot.png]",
666
672
  "twin.lookNoInbox": "This project has no inbox: {dir} isn\u2019t there.",
667
673
  "twin.lookNoInboxHint": "panoma md init creates it and tells your agents to leave screenshots of what they\n build in it. The folder is git-ignored.",
package/dist/index.js CHANGED
@@ -3,10 +3,10 @@ import {
3
3
  entryCommand,
4
4
  helpText,
5
5
  todayCommand
6
- } from "./chunk-ELBBRUIH.js";
6
+ } from "./chunk-FJATGEPD.js";
7
7
  import {
8
8
  openCommand
9
- } from "./chunk-4ZMDIOH5.js";
9
+ } from "./chunk-JMXXTMGV.js";
10
10
  import {
11
11
  catalogFetch,
12
12
  cliEntry,
@@ -18,12 +18,12 @@ import {
18
18
  panomaCommand,
19
19
  unreachable,
20
20
  upCommand
21
- } from "./chunk-JLPWKPLM.js";
21
+ } from "./chunk-3WPD5CHL.js";
22
22
  import {
23
23
  plural,
24
24
  riskText,
25
25
  say
26
- } from "./chunk-VP225OGF.js";
26
+ } from "./chunk-KNPE4SJG.js";
27
27
  import {
28
28
  HOOKS_BRAND,
29
29
  MCP_FILE_MODE,
@@ -1025,11 +1025,11 @@ ${pc3.dim(say("error.seeHelp"))}
1025
1025
  if (command === void 0) return conAviso(await entryCommand(parsed.api));
1026
1026
  if (command === "today") return todayCommand(parsed.api);
1027
1027
  if (command === "next") {
1028
- const { nextCommand } = await import("./next-command-KUHZCZPR.js");
1028
+ const { nextCommand } = await import("./next-command-OQWKUMAH.js");
1029
1029
  return nextCommand(parsed.api, parsed.positionals.slice(1));
1030
1030
  }
1031
1031
  if (command === "north") {
1032
- const { northCommand } = await import("./north-command-VRD6EQP6.js");
1032
+ const { northCommand } = await import("./north-command-7AVYNCB4.js");
1033
1033
  return northCommand(parsed);
1034
1034
  }
1035
1035
  if (command === "open") {
@@ -1049,7 +1049,7 @@ ${pc3.dim(say("error.seeHelp"))}
1049
1049
  `));
1050
1050
  return 1;
1051
1051
  }
1052
- const { checkCommand } = await import("./check-command-2SZH5KYN.js");
1052
+ const { checkCommand } = await import("./check-command-64DBJGYM.js");
1053
1053
  return checkCommand(parsed.api, query);
1054
1054
  }
1055
1055
  let escanear = command === "scan";
@@ -1077,14 +1077,14 @@ ${pc3.dim(say("error.seeHelp"))}
1077
1077
  );
1078
1078
  }
1079
1079
  if (command === "ai") {
1080
- const { aiCommand } = await import("./ai-command-XQGHWOY5.js");
1080
+ const { aiCommand } = await import("./ai-command-U5V5SDJW.js");
1081
1081
  return aiCommand(parsed);
1082
1082
  }
1083
1083
  if (command === "md") {
1084
1084
  const target2 = resolve3(
1085
1085
  expandTilde(parsed.positionals[2] ?? ".")
1086
1086
  );
1087
- const { mdCommand } = await import("./md-command-76RMDZKU.js");
1087
+ const { mdCommand } = await import("./md-command-73QAVNOP.js");
1088
1088
  return mdCommand(parsed.positionals[1], target2, parsed.api);
1089
1089
  }
1090
1090
  if (command === "disk") return reportDisk(parsed.api);
@@ -1135,12 +1135,12 @@ ${pc3.dim(say("error.seeHelp"))}
1135
1135
  return createAgentKey(parsed.api, name, parsed.install);
1136
1136
  }
1137
1137
  if (command === "twin") {
1138
- const { twinCommand } = await import("./twin-command-XJEJ6453.js");
1138
+ const { twinCommand } = await import("./twin-command-WSVMZWGC.js");
1139
1139
  return twinCommand(parsed);
1140
1140
  }
1141
1141
  if (command === "review") {
1142
1142
  const target2 = resolve3(expandTilde(parsed.positionals[1] ?? "."));
1143
- const { reviewCommand } = await import("./review-command-ILJVQMZU.js");
1143
+ const { reviewCommand } = await import("./review-command-A6V3A5XG.js");
1144
1144
  return reviewCommand(target2);
1145
1145
  }
1146
1146
  if (!escanear) {
@@ -1,11 +1,11 @@
1
1
  import {
2
2
  catalogFetch,
3
3
  unreachable
4
- } from "./chunk-JLPWKPLM.js";
4
+ } from "./chunk-3WPD5CHL.js";
5
5
  import {
6
6
  plural,
7
7
  say
8
- } from "./chunk-VP225OGF.js";
8
+ } from "./chunk-KNPE4SJG.js";
9
9
  import {
10
10
  CLAUDE_BRIDGE,
11
11
  TASTE_CAP,
@@ -1,14 +1,14 @@
1
1
  import {
2
2
  reportUrl
3
- } from "./chunk-ELBBRUIH.js";
3
+ } from "./chunk-FJATGEPD.js";
4
4
  import {
5
5
  catalogFetch,
6
6
  unreachable
7
- } from "./chunk-JLPWKPLM.js";
7
+ } from "./chunk-3WPD5CHL.js";
8
8
  import {
9
9
  plural,
10
10
  say
11
- } from "./chunk-VP225OGF.js";
11
+ } from "./chunk-KNPE4SJG.js";
12
12
  import "./chunk-K27F6QDR.js";
13
13
 
14
14
  // src/next-command.ts
@@ -1,14 +1,14 @@
1
1
  import {
2
2
  reportUrl
3
- } from "./chunk-ELBBRUIH.js";
3
+ } from "./chunk-FJATGEPD.js";
4
4
  import {
5
5
  catalogFetch,
6
6
  unreachable
7
- } from "./chunk-JLPWKPLM.js";
7
+ } from "./chunk-3WPD5CHL.js";
8
8
  import {
9
9
  plural,
10
10
  say
11
- } from "./chunk-VP225OGF.js";
11
+ } from "./chunk-KNPE4SJG.js";
12
12
  import "./chunk-K27F6QDR.js";
13
13
 
14
14
  // src/north-command.ts
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  plural,
3
3
  say
4
- } from "./chunk-VP225OGF.js";
4
+ } from "./chunk-KNPE4SJG.js";
5
5
 
6
6
  // src/review-command.ts
7
7
  import pc from "picocolors";
@@ -1,14 +1,14 @@
1
1
  import {
2
2
  sinceMs
3
- } from "./chunk-ELBBRUIH.js";
3
+ } from "./chunk-FJATGEPD.js";
4
4
  import {
5
5
  catalogFetch,
6
6
  unreachable
7
- } from "./chunk-JLPWKPLM.js";
7
+ } from "./chunk-3WPD5CHL.js";
8
8
  import {
9
9
  plural,
10
10
  say
11
- } from "./chunk-VP225OGF.js";
11
+ } from "./chunk-KNPE4SJG.js";
12
12
  import "./chunk-K27F6QDR.js";
13
13
 
14
14
  // src/twin-command.ts
@@ -65,6 +65,7 @@ async function sources() {
65
65
  n: present.length,
66
66
  s: plural(present.length),
67
67
  files: present.reduce((total, source) => total + source.files, 0),
68
+ fs: plural(present.reduce((total, source) => total + source.files, 0)),
68
69
  size: size(present.reduce((total, source) => total + source.bytes, 0))
69
70
  })}`
70
71
  );
@@ -698,7 +699,10 @@ function dryRunLines(estimate) {
698
699
  function corpusLines(corpus) {
699
700
  if (corpus === void 0 || corpus.total === 0) return [];
700
701
  const left = Math.max(corpus.total - corpus.read, 0);
701
- if (left === 0) return [` ${pc.dim(say("twin.corpusDone", { total: corpus.total }))}`];
702
+ if (left === 0) {
703
+ const clave = corpus.total === 1 ? "twin.corpusDoneOne" : "twin.corpusDoneMany";
704
+ return [` ${pc.dim(say(clave, { total: corpus.total }))}`];
705
+ }
702
706
  return [
703
707
  ` ${pc.dim(say("twin.corpusLeft", { read: corpus.read, total: corpus.total, s: plural(corpus.total), left }))}`
704
708
  ];
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "panoma",
3
- "version": "0.1.2",
3
+ "version": "0.1.3",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "panoma",
9
- "version": "0.1.2",
9
+ "version": "0.1.3",
10
10
  "dependencies": {
11
11
  "@anthropic-ai/sdk": "^0.71.0",
12
12
  "ignore": "^6.0.2",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "panoma",
3
- "version": "0.1.2",
3
+ "version": "0.1.3",
4
4
  "license": "AGPL-3.0-only",
5
5
  "type": "module",
6
6
  "description": "The local catalog of your projects: everything on your disk, ready to pick up — by you or by your agents.",
@@ -1,3 +0,0 @@
1
- exports.id=5656,exports.ids=[5656],exports.modules={4439:()=>{},9167:()=>{},40071:(a,b,c)=>{"use strict";Object.defineProperty(b,"I",{enumerable:!0,get:function(){return g}});let d=c(23055),e=c(73134),f=c(2701);async function g(a,b,c,g){if((0,d.isNodeNextResponse)(b)){var h;b.statusCode=c.status,b.statusMessage=c.statusText;let d=["set-cookie","www-authenticate","proxy-authenticate","vary"];null==(h=c.headers)||h.forEach((a,c)=>{if("x-middleware-set-cookie"!==c.toLowerCase())if("set-cookie"===c.toLowerCase())for(let d of(0,f.splitCookiesString)(a))b.appendHeader(c,d);else{let e=void 0!==b.getHeader(c);(d.includes(c.toLowerCase())||!e)&&b.appendHeader(c,a)}});let{originalResponse:i}=b;c.body&&"HEAD"!==a.method?await (0,e.pipeToNodeResponse)(c.body,i,g):i.end()}}},50174:(a,b,c)=>{"use strict";c.d(b,{Cu:()=>h,G$:()=>n,KP:()=>g,Mi:()=>p,fn:()=>l,hN:()=>f,hT:()=>q,i2:()=>r,pO:()=>e});var d=c(76157);let e=[{name:"design",hint:"c\xf3mo se ve y se siente: composici\xf3n, color, tipograf\xeda, espacio, movimiento"},{name:"frontend",hint:"c\xf3mo se construye lo que se ve: componentes, estados, estilos, accesibilidad"},{name:"backend",hint:"el servidor y sus datos: rutas, consultas, esquema, errores, rendimiento"},{name:"cli",hint:"el terminal: comandos, salida, banderas, lo que imprime y lo que calla"},{name:"testing",hint:"c\xf3mo se comprueba: qu\xe9 se prueba, cu\xe1nto, contra qu\xe9, y qu\xe9 se deja fuera"},{name:"copy",hint:"las palabras: mensajes, documentaci\xf3n, nombres, tono, idioma"},{name:"workflow",hint:"c\xf3mo trabaja con sus agentes: encargos, revisiones, commits, ritmo"},{name:"tooling",hint:"las herramientas y la construcci\xf3n: dependencias, empaquetado, tipos, CI"},{name:"data",hint:"los datos y sus n\xfameros: m\xe9tricas, migraciones, formatos, privacidad"},{name:"other",hint:"el caj\xf3n. Solo si de verdad no encaja en ninguna"}],f=e.map(a=>a.name),g=480;function h(a,b={}){let c=b.skip,d=new Map;for(let b of a){if(c?.has(b.id))continue;let a=d.get(b.identity);a?a.push(b):d.set(b.identity,[b])}let e=[];for(let[a,b]of d){let c=function(a){let b=[],c=0;for(let d of a){if(b.length>=60)break;let a=d.quote.length+(d.context?.length??0);if(b.length>0&&c+a>24e3)break;b.push(d),c+=a}return b}([...b].sort(i));c.length>0&&e.push({identity:a,verdicts:c})}return e.sort((a,b)=>j(b)-j(a)||k(b)-k(a)||(a.identity<b.identity?-1:+(a.identity>b.identity))),function(a,b){let c=Math.min(b,g),d=[];for(let b of a){if(c<=0)break;let a=b.verdicts.slice(0,c);c-=a.length,d.push({identity:b.identity,verdicts:a})}return d}(e.slice(0,8),b.limit??g)}function i(a,b){let c=Number(b.signals.length>0)-Number(a.signals.length>0);if(0!==c)return c;let d=b.at.getTime()-a.at.getTime();return 0!==d?d:a.id<b.id?-1:+(a.id>b.id)}function j(a){return a.verdicts.filter(a=>a.signals.length>0).length}function k(a){return a.verdicts.reduce((a,b)=>Math.max(a,b.at.getTime()),0)}function l(a){let b=a.verdicts.map((a,b)=>({label:`c${b+1}`,verdict:a})),c=new Map(b.map(({label:a,verdict:b})=>[a,b])),f=(0,d.fj)(b.map(o).join("\n\n"),{origin:"journal",limit:4e4});return{chunk:a,system:m,prompt:["Abajo van citas literales de una persona reaccionando a lo que sus agentes de","programaci\xf3n le entregaron, todas del mismo proyecto. Van numeradas —[c1], [c2],","…— y cada una trae su fecha, las se\xf1ales que detect\xf3 el motor y, cuando la hab\xeda,","la entrega que la provoc\xf3.","",`Saca de dos a 8 observaciones sobre c\xf3mo le gusta a ESTA persona que`,"quede su trabajo, escritas HABL\xc1NDOLE A ELLA: \xabquieres X\xbb, \xabno soportas Y\xbb.","","Reglas. Las dos primeras son eliminatorias:",`- Cada observaci\xf3n cita al menos 2 etiquetas de las de arriba, con su`," nombre exacto. Lo que no puedas sostener con dos citas no lo escribas: aqu\xed sobra"," una observaci\xf3n de menos y no sobra ninguna de m\xe1s.","- Una observaci\xf3n que ser\xeda verdad de cualquier programador no vale para nada."," \xabPrefiere el c\xf3digo limpio\xbb no dice nada de nadie. Si al leerla no se distingue a"," esta persona de la de al lado, t\xedrala.","- Una funcionalidad no es un gusto. \xabQuieres que la aplicaci\xf3n funcione como una"," bandeja de audio para escuchar publicaciones mientras trabajas\xbb describe qu\xe9 hace ESE"," producto, no c\xf3mo le gusta a esta persona que quede su trabajo. De una petici\xf3n de"," funcionalidad s\xed puedes sacar el gusto que lleve dentro —\xabque se vea limpio\xbb, \xabque no"," cargue la pantalla\xbb—; la funcionalidad en s\xed, no.","- Habla de sus preferencias, no de buenas pr\xe1cticas: \xabquieres X\xbb, nunca \xabconviene X\xbb.","- Segunda persona siempre. Nada de \xab\xe9l\xbb, \xabella\xbb ni \xabesta persona\xbb dentro de la"," observaci\xf3n: quien va a leer esto es ella misma, en su propio retrato, y adem\xe1s no"," sabes qui\xe9n es. En tercera persona el modelo acaba eligiendo un g\xe9nero por su"," cuenta, y en la misma tanda salieron \xabHe wants\xbb y \xabShe wants\xbb de la misma persona.","- El material est\xe1 escrito deprisa y sin acentos (\xabno me gusto\xbb, \xabquitalo\xbb, \xabasi\xbb)."," Eso es c\xf3mo escribe, no lo que prefiere: ninguna observaci\xf3n sobre su ortograf\xeda ni"," sobre su forma de pedir las cosas.",`- Una sola frase por observaci\xf3n, de 200 caracteres como mucho.`,"- Escribe cada observaci\xf3n en el mismo idioma en el que est\xe1 escrita la cita que la"," sostiene. No traduzcas: esas palabras las escribi\xf3 ella.","- No repitas la cita dentro de la observaci\xf3n; para eso van las citas aparte.",'- No pongas las etiquetas dentro de la frase. Van solo en "citations".',"","Repetir una idea que ya sali\xf3 en otra tanda no es un problema: esto es material, no","un resumen. Lo que se repite es justo lo que despu\xe9s se va a poder afirmar.","","Y cada observaci\xf3n dice DE QU\xc9 VA, con una sola de estas materias:",...e.map(a=>`- ${a.name}: ${a.hint}.`),"","Si de verdad no encaja en ninguna, puedes escribir una materia nueva: una sola palabra","en min\xfasculas y en ingl\xe9s. Hazlo solo cuando la observaci\xf3n quede claramente peor en","\xabother\xbb; una materia nueva por observaci\xf3n no es una clasificaci\xf3n.","","Contesta con un array JSON y nada m\xe1s: sin vallas de c\xf3digo, sin explicaci\xf3n delante","ni detr\xe1s.",`[{"topic":"design","statement":"…","citations":["c3","c17"]}]`,"","Si el material no da para ninguna observaci\xf3n, contesta []. Es una respuesta correcta","y es mejor que una frase que no puedas sostener.","",f].join("\n"),labels:c}}let m="Eres un lector de las palabras de una sola persona. No eres un consultor de dise\xf1o ni un manual de estilo: tu \xfanico material son frases que esa persona escribi\xf3 a sus agentes de programaci\xf3n mientras trabajaba, y tu \xfanico trabajo es decir qu\xe9 se repite en ellas. Llano, concreto y sin adornos, y en el idioma en el que ella escribe.";function n(a,b){let c=`[${b}]\\d+`,d=RegExp(`(?:\\s*[:—–(-]\\s*)?\\(?\\b${c}\\b(?:[\\s,;]+(?:y|and)?[\\s]*\\b${c}\\b)*\\)?\\s*\\.?\\s*$`,"i").exec(a);if(null===d)return a;let e=d[0];if(!((e.match(RegExp(`\\b${c}\\b`,"gi"))??[]).length>1||/^[\s]*[:—–(-]/.test(e)))return a;let f=a.slice(0,d.index).trim().replace(/[:,;—–-]+$/,"").trim();return""===f?a:f}function o({label:a,verdict:b}){let c=b.signals.length>0?` \xb7 ${b.signals.join(", ")}`:"",d=`[${a}] ${b.at.toISOString().slice(0,10)}${c}`,e=b.context?`
2
- le hab\xedan entregado: ${b.context}`:"";return`${d}${e}
3
- dijo: ${b.quote}`}function p(a){return a.reduce((a,b)=>a+(0,d.bP)(b.system)+(0,d.bP)(b.prompt),0)}function q(a,b){let c=function(a){let b=(function(a){let b=/```(?:[a-zA-Z]+)?\n([\s\S]*?)```/.exec(a);return b?.[1]??a})(a).trim();try{let a=JSON.parse(b);return Array.isArray(a)?a:void 0}catch{}for(let a=b.indexOf("[");-1!==a;a=b.indexOf("[",a+1)){let c=function(a,b){let c=0,d=!1;for(let e=b;e<a.length;e+=1){let f=a[e];if(d){"\\"===f?e+=1:'"'===f&&(d=!1);continue}if('"'===f)d=!0;else if("["===f)c+=1;else if("]"===f&&0==(c-=1))try{let c=JSON.parse(a.slice(b,e+1));return Array.isArray(c)?c:void 0}catch{break}}}(b,a);if(void 0!==c)return c}}(a);if(void 0===c||c.length>0&&!c.some(t))return{observations:[],dropped:0,unreadable:!0};let d=[],e=0;for(let a of c){let c=function(a,b){if(!t(a))return;let c=s(a.statement)?.replace(/\s+/g," ").trim(),d=void 0===c?void 0:n(c,"c");if(!d||d.length>200)return;let e=function(a){let b=s(a)?.trim().toLowerCase().replace(/[.:]+$/,"")??"";return f.includes(b)?{topic:b,minted:!1}:/^[a-z][a-z0-9-]{0,23}$/.test(b)?{topic:b,minted:!0}:{topic:"other",minted:!1}}(a.topic),g=a.citations;if(!Array.isArray(g))return;let h=new Set;for(let a of g)if("string"==typeof a)for(let c of a.toLowerCase().matchAll(/\bc\d+\b/g)){let a=b.get(c[0]);a&&h.add(a.id)}if(!(h.size<2))return{...e,statement:d,citations:[...h]}}(a,b);if(void 0===c||d.length>=8){e+=1;continue}d.push(c)}return{observations:d,dropped:e,unreadable:!1}}function r(a,b){if(null==a||""===a)return{kind:"unset"};let c="string"==typeof a?Number(a.trim()):a;return"number"!=typeof c||!Number.isInteger(c)||c<1||c>b?{kind:"bad",value:"string"==typeof a?a:String(a)}:{kind:"limit",limit:c}}function s(a){return"string"==typeof a&&a.length>0?a:void 0}function t(a){return"object"==typeof a&&null!==a&&!Array.isArray(a)}},83838:(a,b,c)=>{"use strict";c.d(b,{U:()=>h,N:()=>f});var d=c(83677);let e=new Set(["localhost","127.0.0.1","::1","[::1]","0.0.0.0"]);function f(a){let b=(0,d.dT)(a),c=a.headers.get("sec-fetch-site");if(c&&"same-origin"!==c&&"none"!==c)return g(b,(0,d.t)(b,"guard.otherSite",{site:c}));let e=a.headers.get("origin"),f=a.headers.get("host");if(e&&f&&function(a){try{return new URL(a).host}catch{return null}}(e)!==f)return g(b,(0,d.t)(b,"guard.otherOrigin",{origin:e}))}function g(a,b){return Response.json({error:(0,d.t)(a,"guard.rejected",{detail:b}),hint:(0,d.t)(a,"guard.rejectedHint")},{status:403})}function h(a){let b=(process.env.PANOMA_OPERATOR_KEY??"").trim();if(!b){if(!function(){if((process.env.PANOMA_ACCESS_KEY??"").trim())return!0;let a=(process.env.PANOMA_HOST??"").trim().replace(/:\d+$/,"").toLowerCase();return!!a&&("0.0.0.0"===a||"::"===a||"[::]"===a||!e.has(a))}())return;return i(a)}let c=function(a){let b=a.headers.get("x-panoma-operator");if(b)return b;for(let b of(a.headers.get("cookie")??"").split(";")){let a=b.indexOf("=");if(-1!==a&&"panoma-operator"===b.slice(0,a).trim())try{return decodeURIComponent(b.slice(a+1).trim())}catch{return b.slice(a+1).trim()}}return""}(a);if(!(c&&function(a,b){if(a.length!==b.length)return!1;let c=0;for(let d=0;d<a.length;d++)c|=a.charCodeAt(d)^b.charCodeAt(d);return 0===c}(c,b)))return i(a)}function i(a){let b=(0,d.dT)(a);return Response.json({error:(0,d.t)(b,"guard.localOperatorOnly"),hint:(0,d.t)(b,"guard.localOperatorOnlyHint")},{status:403})}},99446:(a,b,c)=>{"use strict";a.exports=c(44870)}};
@@ -1 +0,0 @@
1
- "use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[4517],{179:(e,t,o)=>{o.d(t,{I18nProvider:()=>i,Y:()=>s,k:()=>d});var n=o(9763),r=o(4963),a=o(7911);let c=(0,r.createContext)("en");function i(e){let{locale:t,children:o}=e;return(0,n.jsx)(c.Provider,{value:t,children:o})}function s(){return(0,r.useContext)(c)}function d(){let e=(0,r.useContext)(c);return(0,r.useCallback)((t,o)=>(0,a.t)(e,t,o),[e])}},2574:(e,t,o)=>{o.d(t,{L:()=>a});var n=o(3570),r=o(8466);let a={cursor:n.biF,code:r.$$9,windsurf:n.b4F,subl:n.xL5,webstorm:n.Ewh,idea:n.PHd,zed:n.eDb,"claude-cli":n.phd,"codex-cli":r.vxT,"gemini-cli":n.zR6,"cursor-agent":n.biF,"copilot-cli":n.QWU,opencode:n.u4l,"claude-app":n.phd,"chatgpt-app":r.vxT}},4204:(e,t,o)=>{o.d(t,{rA:()=>h,lZ:()=>l,hV:()=>d,z3:()=>s.z,Pp:()=>c,KW:()=>i});var n=o(9763),r=o(5595),a=o(7911);function c(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"es";if(!e)return"—";let o=Math.floor((Date.now()-new Date(e).getTime())/864e5);if("en"===t){if(o<=0)return"today";if(1===o)return"yesterday";if(o<30)return"".concat(o," d ago");if(o<365){let e=Math.floor(o/30);return"".concat(e," month").concat(1===e?"":"s"," ago")}let e=Math.floor(o/365);return"".concat(e," year").concat(1===e?"":"s"," ago")}if(o<=0)return"hoy";if(1===o)return"ayer";if(o<30)return"hace ".concat(o," d");if(o<365){let e=Math.floor(o/30);return"hace ".concat(e," ").concat(1===e?"mes":"meses")}let n=Math.floor(o/365);return"hace ".concat(n," a\xf1o").concat(1===n?"":"s")}function i(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"es",o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:Date.now(),n=o-new Date(e).getTime();if(!Number.isFinite(n))return"—";let r="en"===t;if(n<6e4)return r?"just now":"ahora mismo";if(n<36e5){let e=Math.floor(n/6e4);return r?"".concat(e," min ago"):"hace ".concat(e," min")}if(n<1728e5){let e=Math.floor(n/36e5);return r?"".concat(e," h ago"):"hace ".concat(e," h")}return c(e,t)}var s=o(7642);function d(e){let{name:t,src:o,size:c=56,tone:i="brand",locale:s}=e,d="panoma"===t.toLowerCase(),l="demo-runner"===t.toLowerCase()?"/assets/projects/demo-runner.png":null,u=d?"/assets/brand/panoma.svg":null!=o?o:l;return u?(0,n.jsx)("img",{src:u,loading:"lazy",alt:(0,a.t)(s,"common.iconOf",{name:t}),width:c,height:c,className:"shrink-0 rounded-[22%] border border-edge object-cover shadow-sm",style:{width:c,height:c}}):(0,n.jsx)("span",{"aria-hidden":!0,className:"flex shrink-0 items-center justify-center rounded-[22%] border border-edge ".concat("neutral"===i?"project-icon--neutral":"bg-raised text-accent"),style:{width:c,height:c},children:(0,n.jsx)(r.KQe,{style:{width:.46*c,height:.46*c}})})}function l(e){let{text:t,as:o="p",className:r}=e;return(0,n.jsx)(o,{role:"alert",className:"font-mono text-[11px] text-fail".concat(r?" ".concat(r):""),children:t})}let u={raised:"rounded border border-edge bg-raised px-3 py-1.5 font-mono text-[11px] text-smoke transition-colors hover:border-accent hover:text-accent disabled:opacity-50",surface:"rounded border border-edge bg-surface px-3 py-1.5 font-mono text-xs text-smoke transition-colors hover:border-accent hover:text-accent disabled:opacity-50",plain:"rounded border border-edge px-2.5 py-1 font-mono text-xs text-smoke transition-colors hover:border-chalk disabled:opacity-50",accent:"rounded border border-accent bg-accent px-3 py-1.5 font-mono text-xs text-white transition-opacity hover:opacity-85 disabled:opacity-50"};function h(e){let{tone:t,busy:o=!1,busyLabel:r,disabled:a,className:c,children:i,...s}=e;return(0,n.jsx)("button",{...s,disabled:null!=a?a:o,className:"".concat(u[t]).concat(c?" ".concat(c):""),children:o&&void 0!==r?r:i})}},7642:(e,t,o)=>{o.d(t,{z:()=>n});function n(e){return e<1024?"".concat(e," B"):e<1048576?"".concat(Math.round(e/1024)," KB"):e<0x40000000?"".concat((e/1048576).toFixed(1)," MB"):"".concat((e/0x40000000).toFixed(1)," GB")}},8384:(e,t,o)=>{let n;o.d(t,{R:()=>s,b:()=>c});var r=o(4963);let a={remote:!1,editor:null,editors:[],apps:[],agents:[]};function c(){let e=!(arguments.length>0)||void 0===arguments[0]||arguments[0],[t,o]=(0,r.useState)(a);return(0,r.useEffect)(()=>{if(!e)return;null!=n||(n=fetch("/api/open").then(e=>e.json()).catch(()=>a));let t=!0;return n.then(e=>{t&&o(e)}),()=>{t=!1}},[e]),t}let i={cursor:"cursor",code:"vscode",windsurf:"windsurf",zed:"zed"};function s(e,t,o,n){let r=i[null!=e?e:"code"];if(!r)return null;let a=encodeURI("".concat(t.replace(/\/$/,""),"/").concat(o)).replace(/#/g,"%23").replace(/\?/g,"%3F");return"".concat(r,"://file").concat(a.startsWith("/")?"":"/").concat(a,":").concat(n)}},9733:(e,t,o)=>{o.d(t,{B:()=>n});async function n(e,t,o,n){let r,a;try{r=await fetch(e,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)})}catch(e){return{ok:!1,message:o}}try{a=await r.json()}catch(e){return{ok:!1,message:String(r.status)}}return r.ok&&(null==a?void 0:a.ok)?{ok:!0,data:a}:{ok:!1,message:(null==n?void 0:n(null!=a?a:{}))||(null==a?void 0:a.error)||String(r.status)}}}}]);