@selvakumaresra/specship 0.1.1 → 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 (575) hide show
  1. package/package.json +8 -7
  2. package/scripts/sync-shim-version.mjs +64 -0
  3. package/dist/bin/node-version-check.d.ts +0 -37
  4. package/dist/bin/node-version-check.d.ts.map +0 -1
  5. package/dist/bin/node-version-check.js +0 -79
  6. package/dist/bin/node-version-check.js.map +0 -1
  7. package/dist/bin/specship.d.ts +0 -25
  8. package/dist/bin/specship.d.ts.map +0 -1
  9. package/dist/bin/specship.js +0 -2018
  10. package/dist/bin/specship.js.map +0 -1
  11. package/dist/bin/uninstall.d.ts +0 -13
  12. package/dist/bin/uninstall.d.ts.map +0 -1
  13. package/dist/bin/uninstall.js +0 -35
  14. package/dist/bin/uninstall.js.map +0 -1
  15. package/dist/context/formatter.d.ts +0 -30
  16. package/dist/context/formatter.d.ts.map +0 -1
  17. package/dist/context/formatter.js +0 -263
  18. package/dist/context/formatter.js.map +0 -1
  19. package/dist/context/index.d.ts +0 -119
  20. package/dist/context/index.d.ts.map +0 -1
  21. package/dist/context/index.js +0 -1289
  22. package/dist/context/index.js.map +0 -1
  23. package/dist/context/markers.d.ts +0 -19
  24. package/dist/context/markers.d.ts.map +0 -1
  25. package/dist/context/markers.js +0 -22
  26. package/dist/context/markers.js.map +0 -1
  27. package/dist/db/index.d.ts +0 -101
  28. package/dist/db/index.d.ts.map +0 -1
  29. package/dist/db/index.js +0 -276
  30. package/dist/db/index.js.map +0 -1
  31. package/dist/db/migrations.d.ts +0 -44
  32. package/dist/db/migrations.d.ts.map +0 -1
  33. package/dist/db/migrations.js +0 -427
  34. package/dist/db/migrations.js.map +0 -1
  35. package/dist/db/queries.d.ts +0 -357
  36. package/dist/db/queries.d.ts.map +0 -1
  37. package/dist/db/queries.js +0 -1504
  38. package/dist/db/queries.js.map +0 -1
  39. package/dist/db/schema.sql +0 -410
  40. package/dist/db/spec-queries.d.ts +0 -101
  41. package/dist/db/spec-queries.d.ts.map +0 -1
  42. package/dist/db/spec-queries.js +0 -675
  43. package/dist/db/spec-queries.js.map +0 -1
  44. package/dist/db/sqlite-adapter.d.ts +0 -65
  45. package/dist/db/sqlite-adapter.d.ts.map +0 -1
  46. package/dist/db/sqlite-adapter.js +0 -214
  47. package/dist/db/sqlite-adapter.js.map +0 -1
  48. package/dist/directory.d.ts +0 -57
  49. package/dist/directory.d.ts.map +0 -1
  50. package/dist/directory.js +0 -253
  51. package/dist/directory.js.map +0 -1
  52. package/dist/errors.d.ts +0 -136
  53. package/dist/errors.d.ts.map +0 -1
  54. package/dist/errors.js +0 -219
  55. package/dist/errors.js.map +0 -1
  56. package/dist/extraction/dfm-extractor.d.ts +0 -31
  57. package/dist/extraction/dfm-extractor.d.ts.map +0 -1
  58. package/dist/extraction/dfm-extractor.js +0 -151
  59. package/dist/extraction/dfm-extractor.js.map +0 -1
  60. package/dist/extraction/generated-detection.d.ts +0 -30
  61. package/dist/extraction/generated-detection.d.ts.map +0 -1
  62. package/dist/extraction/generated-detection.js +0 -80
  63. package/dist/extraction/generated-detection.js.map +0 -1
  64. package/dist/extraction/grammars.d.ts +0 -100
  65. package/dist/extraction/grammars.d.ts.map +0 -1
  66. package/dist/extraction/grammars.js +0 -426
  67. package/dist/extraction/grammars.js.map +0 -1
  68. package/dist/extraction/index.d.ts +0 -138
  69. package/dist/extraction/index.d.ts.map +0 -1
  70. package/dist/extraction/index.js +0 -1394
  71. package/dist/extraction/index.js.map +0 -1
  72. package/dist/extraction/languages/c-cpp.d.ts +0 -4
  73. package/dist/extraction/languages/c-cpp.d.ts.map +0 -1
  74. package/dist/extraction/languages/c-cpp.js +0 -171
  75. package/dist/extraction/languages/c-cpp.js.map +0 -1
  76. package/dist/extraction/languages/csharp.d.ts +0 -3
  77. package/dist/extraction/languages/csharp.d.ts.map +0 -1
  78. package/dist/extraction/languages/csharp.js +0 -73
  79. package/dist/extraction/languages/csharp.js.map +0 -1
  80. package/dist/extraction/languages/dart.d.ts +0 -3
  81. package/dist/extraction/languages/dart.d.ts.map +0 -1
  82. package/dist/extraction/languages/dart.js +0 -192
  83. package/dist/extraction/languages/dart.js.map +0 -1
  84. package/dist/extraction/languages/go.d.ts +0 -3
  85. package/dist/extraction/languages/go.d.ts.map +0 -1
  86. package/dist/extraction/languages/go.js +0 -74
  87. package/dist/extraction/languages/go.js.map +0 -1
  88. package/dist/extraction/languages/index.d.ts +0 -10
  89. package/dist/extraction/languages/index.d.ts.map +0 -1
  90. package/dist/extraction/languages/index.js +0 -51
  91. package/dist/extraction/languages/index.js.map +0 -1
  92. package/dist/extraction/languages/java.d.ts +0 -3
  93. package/dist/extraction/languages/java.d.ts.map +0 -1
  94. package/dist/extraction/languages/java.js +0 -70
  95. package/dist/extraction/languages/java.js.map +0 -1
  96. package/dist/extraction/languages/javascript.d.ts +0 -3
  97. package/dist/extraction/languages/javascript.d.ts.map +0 -1
  98. package/dist/extraction/languages/javascript.js +0 -90
  99. package/dist/extraction/languages/javascript.js.map +0 -1
  100. package/dist/extraction/languages/kotlin.d.ts +0 -3
  101. package/dist/extraction/languages/kotlin.d.ts.map +0 -1
  102. package/dist/extraction/languages/kotlin.js +0 -259
  103. package/dist/extraction/languages/kotlin.js.map +0 -1
  104. package/dist/extraction/languages/lua.d.ts +0 -3
  105. package/dist/extraction/languages/lua.d.ts.map +0 -1
  106. package/dist/extraction/languages/lua.js +0 -150
  107. package/dist/extraction/languages/lua.js.map +0 -1
  108. package/dist/extraction/languages/luau.d.ts +0 -3
  109. package/dist/extraction/languages/luau.d.ts.map +0 -1
  110. package/dist/extraction/languages/luau.js +0 -37
  111. package/dist/extraction/languages/luau.js.map +0 -1
  112. package/dist/extraction/languages/objc.d.ts +0 -3
  113. package/dist/extraction/languages/objc.d.ts.map +0 -1
  114. package/dist/extraction/languages/objc.js +0 -133
  115. package/dist/extraction/languages/objc.js.map +0 -1
  116. package/dist/extraction/languages/pascal.d.ts +0 -3
  117. package/dist/extraction/languages/pascal.d.ts.map +0 -1
  118. package/dist/extraction/languages/pascal.js +0 -66
  119. package/dist/extraction/languages/pascal.js.map +0 -1
  120. package/dist/extraction/languages/php.d.ts +0 -3
  121. package/dist/extraction/languages/php.d.ts.map +0 -1
  122. package/dist/extraction/languages/php.js +0 -107
  123. package/dist/extraction/languages/php.js.map +0 -1
  124. package/dist/extraction/languages/python.d.ts +0 -3
  125. package/dist/extraction/languages/python.d.ts.map +0 -1
  126. package/dist/extraction/languages/python.js +0 -56
  127. package/dist/extraction/languages/python.js.map +0 -1
  128. package/dist/extraction/languages/ruby.d.ts +0 -3
  129. package/dist/extraction/languages/ruby.d.ts.map +0 -1
  130. package/dist/extraction/languages/ruby.js +0 -114
  131. package/dist/extraction/languages/ruby.js.map +0 -1
  132. package/dist/extraction/languages/rust.d.ts +0 -3
  133. package/dist/extraction/languages/rust.d.ts.map +0 -1
  134. package/dist/extraction/languages/rust.js +0 -109
  135. package/dist/extraction/languages/rust.js.map +0 -1
  136. package/dist/extraction/languages/scala.d.ts +0 -3
  137. package/dist/extraction/languages/scala.d.ts.map +0 -1
  138. package/dist/extraction/languages/scala.js +0 -139
  139. package/dist/extraction/languages/scala.js.map +0 -1
  140. package/dist/extraction/languages/swift.d.ts +0 -3
  141. package/dist/extraction/languages/swift.d.ts.map +0 -1
  142. package/dist/extraction/languages/swift.js +0 -91
  143. package/dist/extraction/languages/swift.js.map +0 -1
  144. package/dist/extraction/languages/typescript.d.ts +0 -3
  145. package/dist/extraction/languages/typescript.d.ts.map +0 -1
  146. package/dist/extraction/languages/typescript.js +0 -129
  147. package/dist/extraction/languages/typescript.js.map +0 -1
  148. package/dist/extraction/liquid-extractor.d.ts +0 -52
  149. package/dist/extraction/liquid-extractor.d.ts.map +0 -1
  150. package/dist/extraction/liquid-extractor.js +0 -313
  151. package/dist/extraction/liquid-extractor.js.map +0 -1
  152. package/dist/extraction/mybatis-extractor.d.ts +0 -48
  153. package/dist/extraction/mybatis-extractor.d.ts.map +0 -1
  154. package/dist/extraction/mybatis-extractor.js +0 -198
  155. package/dist/extraction/mybatis-extractor.js.map +0 -1
  156. package/dist/extraction/parse-worker.d.ts +0 -8
  157. package/dist/extraction/parse-worker.d.ts.map +0 -1
  158. package/dist/extraction/parse-worker.js +0 -94
  159. package/dist/extraction/parse-worker.js.map +0 -1
  160. package/dist/extraction/specs/markdown-spec-extractor.d.ts +0 -59
  161. package/dist/extraction/specs/markdown-spec-extractor.d.ts.map +0 -1
  162. package/dist/extraction/specs/markdown-spec-extractor.js +0 -327
  163. package/dist/extraction/specs/markdown-spec-extractor.js.map +0 -1
  164. package/dist/extraction/specs/types.d.ts +0 -39
  165. package/dist/extraction/specs/types.d.ts.map +0 -1
  166. package/dist/extraction/specs/types.js +0 -8
  167. package/dist/extraction/specs/types.js.map +0 -1
  168. package/dist/extraction/svelte-extractor.d.ts +0 -56
  169. package/dist/extraction/svelte-extractor.d.ts.map +0 -1
  170. package/dist/extraction/svelte-extractor.js +0 -272
  171. package/dist/extraction/svelte-extractor.js.map +0 -1
  172. package/dist/extraction/tree-sitter-helpers.d.ts +0 -28
  173. package/dist/extraction/tree-sitter-helpers.d.ts.map +0 -1
  174. package/dist/extraction/tree-sitter-helpers.js +0 -103
  175. package/dist/extraction/tree-sitter-helpers.js.map +0 -1
  176. package/dist/extraction/tree-sitter-types.d.ts +0 -193
  177. package/dist/extraction/tree-sitter-types.d.ts.map +0 -1
  178. package/dist/extraction/tree-sitter-types.js +0 -10
  179. package/dist/extraction/tree-sitter-types.js.map +0 -1
  180. package/dist/extraction/tree-sitter.d.ts +0 -317
  181. package/dist/extraction/tree-sitter.d.ts.map +0 -1
  182. package/dist/extraction/tree-sitter.js +0 -3092
  183. package/dist/extraction/tree-sitter.js.map +0 -1
  184. package/dist/extraction/vue-extractor.d.ts +0 -51
  185. package/dist/extraction/vue-extractor.d.ts.map +0 -1
  186. package/dist/extraction/vue-extractor.js +0 -251
  187. package/dist/extraction/vue-extractor.js.map +0 -1
  188. package/dist/extraction/wasm/tree-sitter-lua.wasm +0 -0
  189. package/dist/extraction/wasm/tree-sitter-luau.wasm +0 -0
  190. package/dist/extraction/wasm/tree-sitter-pascal.wasm +0 -0
  191. package/dist/extraction/wasm/tree-sitter-scala.wasm +0 -0
  192. package/dist/extraction/wasm-runtime-flags.d.ts +0 -38
  193. package/dist/extraction/wasm-runtime-flags.d.ts.map +0 -1
  194. package/dist/extraction/wasm-runtime-flags.js +0 -106
  195. package/dist/extraction/wasm-runtime-flags.js.map +0 -1
  196. package/dist/graph/index.d.ts +0 -8
  197. package/dist/graph/index.d.ts.map +0 -1
  198. package/dist/graph/index.js +0 -13
  199. package/dist/graph/index.js.map +0 -1
  200. package/dist/graph/queries.d.ts +0 -106
  201. package/dist/graph/queries.d.ts.map +0 -1
  202. package/dist/graph/queries.js +0 -366
  203. package/dist/graph/queries.js.map +0 -1
  204. package/dist/graph/traversal.d.ts +0 -127
  205. package/dist/graph/traversal.d.ts.map +0 -1
  206. package/dist/graph/traversal.js +0 -531
  207. package/dist/graph/traversal.js.map +0 -1
  208. package/dist/index.d.ts +0 -551
  209. package/dist/index.d.ts.map +0 -1
  210. package/dist/index.js +0 -1165
  211. package/dist/index.js.map +0 -1
  212. package/dist/installer/config-writer.d.ts +0 -28
  213. package/dist/installer/config-writer.d.ts.map +0 -1
  214. package/dist/installer/config-writer.js +0 -91
  215. package/dist/installer/config-writer.js.map +0 -1
  216. package/dist/installer/index.d.ts +0 -87
  217. package/dist/installer/index.d.ts.map +0 -1
  218. package/dist/installer/index.js +0 -409
  219. package/dist/installer/index.js.map +0 -1
  220. package/dist/installer/instructions-template.d.ts +0 -18
  221. package/dist/installer/instructions-template.d.ts.map +0 -1
  222. package/dist/installer/instructions-template.js +0 -21
  223. package/dist/installer/instructions-template.js.map +0 -1
  224. package/dist/installer/targets/claude.d.ts +0 -88
  225. package/dist/installer/targets/claude.d.ts.map +0 -1
  226. package/dist/installer/targets/claude.js +0 -582
  227. package/dist/installer/targets/claude.js.map +0 -1
  228. package/dist/installer/targets/registry.d.ts +0 -19
  229. package/dist/installer/targets/registry.d.ts.map +0 -1
  230. package/dist/installer/targets/registry.js +0 -31
  231. package/dist/installer/targets/registry.js.map +0 -1
  232. package/dist/installer/targets/shared.d.ts +0 -62
  233. package/dist/installer/targets/shared.d.ts.map +0 -1
  234. package/dist/installer/targets/shared.js +0 -207
  235. package/dist/installer/targets/shared.js.map +0 -1
  236. package/dist/installer/targets/types.d.ts +0 -76
  237. package/dist/installer/targets/types.d.ts.map +0 -1
  238. package/dist/installer/targets/types.js +0 -12
  239. package/dist/installer/targets/types.js.map +0 -1
  240. package/dist/isolation/worktree.d.ts +0 -65
  241. package/dist/isolation/worktree.d.ts.map +0 -1
  242. package/dist/isolation/worktree.js +0 -231
  243. package/dist/isolation/worktree.js.map +0 -1
  244. package/dist/mcp/daemon-paths.d.ts +0 -46
  245. package/dist/mcp/daemon-paths.d.ts.map +0 -1
  246. package/dist/mcp/daemon-paths.js +0 -125
  247. package/dist/mcp/daemon-paths.js.map +0 -1
  248. package/dist/mcp/daemon.d.ts +0 -161
  249. package/dist/mcp/daemon.d.ts.map +0 -1
  250. package/dist/mcp/daemon.js +0 -403
  251. package/dist/mcp/daemon.js.map +0 -1
  252. package/dist/mcp/engine.d.ts +0 -105
  253. package/dist/mcp/engine.d.ts.map +0 -1
  254. package/dist/mcp/engine.js +0 -270
  255. package/dist/mcp/engine.js.map +0 -1
  256. package/dist/mcp/index.d.ts +0 -112
  257. package/dist/mcp/index.d.ts.map +0 -1
  258. package/dist/mcp/index.js +0 -477
  259. package/dist/mcp/index.js.map +0 -1
  260. package/dist/mcp/proxy.d.ts +0 -81
  261. package/dist/mcp/proxy.d.ts.map +0 -1
  262. package/dist/mcp/proxy.js +0 -510
  263. package/dist/mcp/proxy.js.map +0 -1
  264. package/dist/mcp/server-instructions.d.ts +0 -18
  265. package/dist/mcp/server-instructions.d.ts.map +0 -1
  266. package/dist/mcp/server-instructions.js +0 -77
  267. package/dist/mcp/server-instructions.js.map +0 -1
  268. package/dist/mcp/session.d.ts +0 -77
  269. package/dist/mcp/session.d.ts.map +0 -1
  270. package/dist/mcp/session.js +0 -294
  271. package/dist/mcp/session.js.map +0 -1
  272. package/dist/mcp/spec-tools.d.ts +0 -39
  273. package/dist/mcp/spec-tools.d.ts.map +0 -1
  274. package/dist/mcp/spec-tools.js +0 -326
  275. package/dist/mcp/spec-tools.js.map +0 -1
  276. package/dist/mcp/tools.d.ts +0 -404
  277. package/dist/mcp/tools.d.ts.map +0 -1
  278. package/dist/mcp/tools.js +0 -3066
  279. package/dist/mcp/tools.js.map +0 -1
  280. package/dist/mcp/transport.d.ts +0 -188
  281. package/dist/mcp/transport.d.ts.map +0 -1
  282. package/dist/mcp/transport.js +0 -343
  283. package/dist/mcp/transport.js.map +0 -1
  284. package/dist/mcp/version.d.ts +0 -19
  285. package/dist/mcp/version.d.ts.map +0 -1
  286. package/dist/mcp/version.js +0 -71
  287. package/dist/mcp/version.js.map +0 -1
  288. package/dist/resolution/callback-synthesizer.d.ts +0 -10
  289. package/dist/resolution/callback-synthesizer.d.ts.map +0 -1
  290. package/dist/resolution/callback-synthesizer.js +0 -1300
  291. package/dist/resolution/callback-synthesizer.js.map +0 -1
  292. package/dist/resolution/frameworks/cargo-workspace.d.ts +0 -18
  293. package/dist/resolution/frameworks/cargo-workspace.d.ts.map +0 -1
  294. package/dist/resolution/frameworks/cargo-workspace.js +0 -225
  295. package/dist/resolution/frameworks/cargo-workspace.js.map +0 -1
  296. package/dist/resolution/frameworks/csharp.d.ts +0 -8
  297. package/dist/resolution/frameworks/csharp.d.ts.map +0 -1
  298. package/dist/resolution/frameworks/csharp.js +0 -241
  299. package/dist/resolution/frameworks/csharp.js.map +0 -1
  300. package/dist/resolution/frameworks/drupal.d.ts +0 -51
  301. package/dist/resolution/frameworks/drupal.d.ts.map +0 -1
  302. package/dist/resolution/frameworks/drupal.js +0 -367
  303. package/dist/resolution/frameworks/drupal.js.map +0 -1
  304. package/dist/resolution/frameworks/expo-modules.d.ts +0 -3
  305. package/dist/resolution/frameworks/expo-modules.d.ts.map +0 -1
  306. package/dist/resolution/frameworks/expo-modules.js +0 -143
  307. package/dist/resolution/frameworks/expo-modules.js.map +0 -1
  308. package/dist/resolution/frameworks/express.d.ts +0 -8
  309. package/dist/resolution/frameworks/express.d.ts.map +0 -1
  310. package/dist/resolution/frameworks/express.js +0 -308
  311. package/dist/resolution/frameworks/express.js.map +0 -1
  312. package/dist/resolution/frameworks/fabric.d.ts +0 -3
  313. package/dist/resolution/frameworks/fabric.d.ts.map +0 -1
  314. package/dist/resolution/frameworks/fabric.js +0 -354
  315. package/dist/resolution/frameworks/fabric.js.map +0 -1
  316. package/dist/resolution/frameworks/go.d.ts +0 -8
  317. package/dist/resolution/frameworks/go.d.ts.map +0 -1
  318. package/dist/resolution/frameworks/go.js +0 -161
  319. package/dist/resolution/frameworks/go.js.map +0 -1
  320. package/dist/resolution/frameworks/index.d.ts +0 -48
  321. package/dist/resolution/frameworks/index.d.ts.map +0 -1
  322. package/dist/resolution/frameworks/index.js +0 -161
  323. package/dist/resolution/frameworks/index.js.map +0 -1
  324. package/dist/resolution/frameworks/java.d.ts +0 -8
  325. package/dist/resolution/frameworks/java.d.ts.map +0 -1
  326. package/dist/resolution/frameworks/java.js +0 -504
  327. package/dist/resolution/frameworks/java.js.map +0 -1
  328. package/dist/resolution/frameworks/laravel.d.ts +0 -13
  329. package/dist/resolution/frameworks/laravel.d.ts.map +0 -1
  330. package/dist/resolution/frameworks/laravel.js +0 -257
  331. package/dist/resolution/frameworks/laravel.js.map +0 -1
  332. package/dist/resolution/frameworks/nestjs.d.ts +0 -26
  333. package/dist/resolution/frameworks/nestjs.d.ts.map +0 -1
  334. package/dist/resolution/frameworks/nestjs.js +0 -698
  335. package/dist/resolution/frameworks/nestjs.js.map +0 -1
  336. package/dist/resolution/frameworks/play.d.ts +0 -19
  337. package/dist/resolution/frameworks/play.d.ts.map +0 -1
  338. package/dist/resolution/frameworks/play.js +0 -111
  339. package/dist/resolution/frameworks/play.js.map +0 -1
  340. package/dist/resolution/frameworks/python.d.ts +0 -10
  341. package/dist/resolution/frameworks/python.d.ts.map +0 -1
  342. package/dist/resolution/frameworks/python.js +0 -396
  343. package/dist/resolution/frameworks/python.js.map +0 -1
  344. package/dist/resolution/frameworks/react-native.d.ts +0 -3
  345. package/dist/resolution/frameworks/react-native.d.ts.map +0 -1
  346. package/dist/resolution/frameworks/react-native.js +0 -360
  347. package/dist/resolution/frameworks/react-native.js.map +0 -1
  348. package/dist/resolution/frameworks/react.d.ts +0 -8
  349. package/dist/resolution/frameworks/react.d.ts.map +0 -1
  350. package/dist/resolution/frameworks/react.js +0 -365
  351. package/dist/resolution/frameworks/react.js.map +0 -1
  352. package/dist/resolution/frameworks/ruby.d.ts +0 -8
  353. package/dist/resolution/frameworks/ruby.d.ts.map +0 -1
  354. package/dist/resolution/frameworks/ruby.js +0 -302
  355. package/dist/resolution/frameworks/ruby.js.map +0 -1
  356. package/dist/resolution/frameworks/rust.d.ts +0 -8
  357. package/dist/resolution/frameworks/rust.d.ts.map +0 -1
  358. package/dist/resolution/frameworks/rust.js +0 -304
  359. package/dist/resolution/frameworks/rust.js.map +0 -1
  360. package/dist/resolution/frameworks/svelte.d.ts +0 -9
  361. package/dist/resolution/frameworks/svelte.d.ts.map +0 -1
  362. package/dist/resolution/frameworks/svelte.js +0 -249
  363. package/dist/resolution/frameworks/svelte.js.map +0 -1
  364. package/dist/resolution/frameworks/swift-objc.d.ts +0 -37
  365. package/dist/resolution/frameworks/swift-objc.d.ts.map +0 -1
  366. package/dist/resolution/frameworks/swift-objc.js +0 -252
  367. package/dist/resolution/frameworks/swift-objc.js.map +0 -1
  368. package/dist/resolution/frameworks/swift.d.ts +0 -10
  369. package/dist/resolution/frameworks/swift.d.ts.map +0 -1
  370. package/dist/resolution/frameworks/swift.js +0 -400
  371. package/dist/resolution/frameworks/swift.js.map +0 -1
  372. package/dist/resolution/frameworks/vue.d.ts +0 -9
  373. package/dist/resolution/frameworks/vue.d.ts.map +0 -1
  374. package/dist/resolution/frameworks/vue.js +0 -306
  375. package/dist/resolution/frameworks/vue.js.map +0 -1
  376. package/dist/resolution/go-module.d.ts +0 -26
  377. package/dist/resolution/go-module.d.ts.map +0 -1
  378. package/dist/resolution/go-module.js +0 -78
  379. package/dist/resolution/go-module.js.map +0 -1
  380. package/dist/resolution/import-resolver.d.ts +0 -68
  381. package/dist/resolution/import-resolver.d.ts.map +0 -1
  382. package/dist/resolution/import-resolver.js +0 -1275
  383. package/dist/resolution/import-resolver.js.map +0 -1
  384. package/dist/resolution/index.d.ts +0 -117
  385. package/dist/resolution/index.d.ts.map +0 -1
  386. package/dist/resolution/index.js +0 -895
  387. package/dist/resolution/index.js.map +0 -1
  388. package/dist/resolution/lru-cache.d.ts +0 -24
  389. package/dist/resolution/lru-cache.d.ts.map +0 -1
  390. package/dist/resolution/lru-cache.js +0 -62
  391. package/dist/resolution/lru-cache.js.map +0 -1
  392. package/dist/resolution/name-matcher.d.ts +0 -32
  393. package/dist/resolution/name-matcher.d.ts.map +0 -1
  394. package/dist/resolution/name-matcher.js +0 -596
  395. package/dist/resolution/name-matcher.js.map +0 -1
  396. package/dist/resolution/path-aliases.d.ts +0 -68
  397. package/dist/resolution/path-aliases.d.ts.map +0 -1
  398. package/dist/resolution/path-aliases.js +0 -238
  399. package/dist/resolution/path-aliases.js.map +0 -1
  400. package/dist/resolution/spec-link-resolver.d.ts +0 -103
  401. package/dist/resolution/spec-link-resolver.d.ts.map +0 -1
  402. package/dist/resolution/spec-link-resolver.js +0 -259
  403. package/dist/resolution/spec-link-resolver.js.map +0 -1
  404. package/dist/resolution/strip-comments.d.ts +0 -27
  405. package/dist/resolution/strip-comments.d.ts.map +0 -1
  406. package/dist/resolution/strip-comments.js +0 -441
  407. package/dist/resolution/strip-comments.js.map +0 -1
  408. package/dist/resolution/swift-objc-bridge.d.ts +0 -134
  409. package/dist/resolution/swift-objc-bridge.d.ts.map +0 -1
  410. package/dist/resolution/swift-objc-bridge.js +0 -256
  411. package/dist/resolution/swift-objc-bridge.js.map +0 -1
  412. package/dist/resolution/types.d.ts +0 -216
  413. package/dist/resolution/types.d.ts.map +0 -1
  414. package/dist/resolution/types.js +0 -8
  415. package/dist/resolution/types.js.map +0 -1
  416. package/dist/resolution/workspace-packages.d.ts +0 -48
  417. package/dist/resolution/workspace-packages.d.ts.map +0 -1
  418. package/dist/resolution/workspace-packages.js +0 -208
  419. package/dist/resolution/workspace-packages.js.map +0 -1
  420. package/dist/search/query-parser.d.ts +0 -57
  421. package/dist/search/query-parser.d.ts.map +0 -1
  422. package/dist/search/query-parser.js +0 -177
  423. package/dist/search/query-parser.js.map +0 -1
  424. package/dist/search/query-utils.d.ts +0 -71
  425. package/dist/search/query-utils.d.ts.map +0 -1
  426. package/dist/search/query-utils.js +0 -380
  427. package/dist/search/query-utils.js.map +0 -1
  428. package/dist/server/cli.js +0 -152
  429. package/dist/server/index.js +0 -12
  430. package/dist/server/ingest/index.js +0 -18
  431. package/dist/server/ingest/ingestor.js +0 -406
  432. package/dist/server/ingest/parser.js +0 -104
  433. package/dist/server/ingest/pricing.js +0 -78
  434. package/dist/server/ingest/types.js +0 -9
  435. package/dist/server/ingest/watcher.js +0 -77
  436. package/dist/server/package.json +0 -3
  437. package/dist/server/project-registry.js +0 -101
  438. package/dist/server/routes/claude.js +0 -480
  439. package/dist/server/routes/graph.js +0 -149
  440. package/dist/server/routes/memory.js +0 -272
  441. package/dist/server/routes/projects.js +0 -197
  442. package/dist/server/routes/spec.js +0 -105
  443. package/dist/server/routes/status.js +0 -35
  444. package/dist/server/routes/workflow.js +0 -184
  445. package/dist/server/server.js +0 -202
  446. package/dist/sync/git-hooks.d.ts +0 -45
  447. package/dist/sync/git-hooks.d.ts.map +0 -1
  448. package/dist/sync/git-hooks.js +0 -225
  449. package/dist/sync/git-hooks.js.map +0 -1
  450. package/dist/sync/index.d.ts +0 -19
  451. package/dist/sync/index.d.ts.map +0 -1
  452. package/dist/sync/index.js +0 -35
  453. package/dist/sync/index.js.map +0 -1
  454. package/dist/sync/watch-policy.d.ts +0 -48
  455. package/dist/sync/watch-policy.d.ts.map +0 -1
  456. package/dist/sync/watch-policy.js +0 -124
  457. package/dist/sync/watch-policy.js.map +0 -1
  458. package/dist/sync/watcher.d.ts +0 -283
  459. package/dist/sync/watcher.d.ts.map +0 -1
  460. package/dist/sync/watcher.js +0 -606
  461. package/dist/sync/watcher.js.map +0 -1
  462. package/dist/sync/worktree.d.ts +0 -54
  463. package/dist/sync/worktree.d.ts.map +0 -1
  464. package/dist/sync/worktree.js +0 -137
  465. package/dist/sync/worktree.js.map +0 -1
  466. package/dist/types.d.ts +0 -623
  467. package/dist/types.d.ts.map +0 -1
  468. package/dist/types.js +0 -108
  469. package/dist/types.js.map +0 -1
  470. package/dist/ui/glyphs.d.ts +0 -42
  471. package/dist/ui/glyphs.d.ts.map +0 -1
  472. package/dist/ui/glyphs.js +0 -78
  473. package/dist/ui/glyphs.js.map +0 -1
  474. package/dist/ui/shimmer-progress.d.ts +0 -11
  475. package/dist/ui/shimmer-progress.d.ts.map +0 -1
  476. package/dist/ui/shimmer-progress.js +0 -90
  477. package/dist/ui/shimmer-progress.js.map +0 -1
  478. package/dist/ui/shimmer-worker.d.ts +0 -2
  479. package/dist/ui/shimmer-worker.d.ts.map +0 -1
  480. package/dist/ui/shimmer-worker.js +0 -118
  481. package/dist/ui/shimmer-worker.js.map +0 -1
  482. package/dist/ui/types.d.ts +0 -17
  483. package/dist/ui/types.d.ts.map +0 -1
  484. package/dist/ui/types.js +0 -3
  485. package/dist/ui/types.js.map +0 -1
  486. package/dist/utils.d.ts +0 -205
  487. package/dist/utils.d.ts.map +0 -1
  488. package/dist/utils.js +0 -549
  489. package/dist/utils.js.map +0 -1
  490. package/dist/web/chunk-2YZXEHZ2.js +0 -1
  491. package/dist/web/chunk-3GIC555L.js +0 -18
  492. package/dist/web/chunk-3IIIGRMT.js +0 -1
  493. package/dist/web/chunk-47QYKLE5.js +0 -1
  494. package/dist/web/chunk-4LHBWWP7.js +0 -1
  495. package/dist/web/chunk-4OAZLD5W.js +0 -1
  496. package/dist/web/chunk-5OQKAJAE.js +0 -1
  497. package/dist/web/chunk-7B525GKQ.js +0 -1
  498. package/dist/web/chunk-BPDXCOOZ.js +0 -1
  499. package/dist/web/chunk-DT37HTZB.js +0 -1
  500. package/dist/web/chunk-EIMUHJND.js +0 -1
  501. package/dist/web/chunk-FTESTUEO.js +0 -1
  502. package/dist/web/chunk-GLJZV6MU.js +0 -1
  503. package/dist/web/chunk-I7LS67U5.js +0 -1
  504. package/dist/web/chunk-L4TVIPSR.js +0 -1
  505. package/dist/web/chunk-MASCULC2.js +0 -1
  506. package/dist/web/chunk-MW7ICSRM.js +0 -1
  507. package/dist/web/chunk-OI5VP2A3.js +0 -1
  508. package/dist/web/chunk-RA6EBF6I.js +0 -1
  509. package/dist/web/chunk-RP3WU5Y6.js +0 -1
  510. package/dist/web/chunk-RQDRMTXN.js +0 -1
  511. package/dist/web/chunk-TQMT6UDU.js +0 -1
  512. package/dist/web/chunk-U7IYOV7T.js +0 -1
  513. package/dist/web/chunk-UE227MWF.js +0 -1
  514. package/dist/web/chunk-WV573J4K.js +0 -1
  515. package/dist/web/chunk-WVCKOJZL.js +0 -4
  516. package/dist/web/chunk-XZKLVPHE.js +0 -1
  517. package/dist/web/chunk-ZABKKHJ3.js +0 -1
  518. package/dist/web/favicon-16.png +0 -0
  519. package/dist/web/favicon-180.png +0 -0
  520. package/dist/web/favicon-32.png +0 -0
  521. package/dist/web/favicon-512.png +0 -0
  522. package/dist/web/favicon-small.svg +0 -15
  523. package/dist/web/favicon.ico +0 -0
  524. package/dist/web/favicon.svg +0 -20
  525. package/dist/web/index.html +0 -145
  526. package/dist/web/main-RI5CO5Z4.js +0 -1
  527. package/dist/web/styles-CYN7IKT4.css +0 -1
  528. package/dist/workflows/condition-evaluator.d.ts +0 -75
  529. package/dist/workflows/condition-evaluator.d.ts.map +0 -1
  530. package/dist/workflows/condition-evaluator.js +0 -282
  531. package/dist/workflows/condition-evaluator.js.map +0 -1
  532. package/dist/workflows/defaults/index.d.ts +0 -26
  533. package/dist/workflows/defaults/index.d.ts.map +0 -1
  534. package/dist/workflows/defaults/index.js +0 -94
  535. package/dist/workflows/defaults/index.js.map +0 -1
  536. package/dist/workflows/defaults/spec-fix.yaml +0 -110
  537. package/dist/workflows/defaults/spec-implement.yaml +0 -150
  538. package/dist/workflows/defaults/spec-relink.yaml +0 -81
  539. package/dist/workflows/defaults/spec-verify.yaml +0 -51
  540. package/dist/workflows/discovery.d.ts +0 -46
  541. package/dist/workflows/discovery.d.ts.map +0 -1
  542. package/dist/workflows/discovery.js +0 -193
  543. package/dist/workflows/discovery.js.map +0 -1
  544. package/dist/workflows/executor.d.ts +0 -83
  545. package/dist/workflows/executor.d.ts.map +0 -1
  546. package/dist/workflows/executor.js +0 -623
  547. package/dist/workflows/executor.js.map +0 -1
  548. package/dist/workflows/runners/approval.d.ts +0 -18
  549. package/dist/workflows/runners/approval.d.ts.map +0 -1
  550. package/dist/workflows/runners/approval.js +0 -34
  551. package/dist/workflows/runners/approval.js.map +0 -1
  552. package/dist/workflows/runners/bash.d.ts +0 -13
  553. package/dist/workflows/runners/bash.d.ts.map +0 -1
  554. package/dist/workflows/runners/bash.js +0 -143
  555. package/dist/workflows/runners/bash.js.map +0 -1
  556. package/dist/workflows/runners/cancel.d.ts +0 -10
  557. package/dist/workflows/runners/cancel.d.ts.map +0 -1
  558. package/dist/workflows/runners/cancel.js +0 -19
  559. package/dist/workflows/runners/cancel.js.map +0 -1
  560. package/dist/workflows/runners/prompt.d.ts +0 -28
  561. package/dist/workflows/runners/prompt.d.ts.map +0 -1
  562. package/dist/workflows/runners/prompt.js +0 -212
  563. package/dist/workflows/runners/prompt.js.map +0 -1
  564. package/dist/workflows/runners/script.d.ts +0 -17
  565. package/dist/workflows/runners/script.d.ts.map +0 -1
  566. package/dist/workflows/runners/script.js +0 -155
  567. package/dist/workflows/runners/script.js.map +0 -1
  568. package/dist/workflows/runners/types.d.ts +0 -51
  569. package/dist/workflows/runners/types.d.ts.map +0 -1
  570. package/dist/workflows/runners/types.js +0 -13
  571. package/dist/workflows/runners/types.js.map +0 -1
  572. package/dist/workflows/schemas/workflow.d.ts +0 -166
  573. package/dist/workflows/schemas/workflow.d.ts.map +0 -1
  574. package/dist/workflows/schemas/workflow.js +0 -437
  575. package/dist/workflows/schemas/workflow.js.map +0 -1
@@ -1,18 +0,0 @@
1
- import{a as B}from"./chunk-4LHBWWP7.js";import{a as H}from"./chunk-FTESTUEO.js";import{a as R}from"./chunk-47QYKLE5.js";import{a as j}from"./chunk-ZABKKHJ3.js";import{c as $}from"./chunk-L4TVIPSR.js";import"./chunk-RP3WU5Y6.js";import{$a as s,Aa as n,K as P,Ka as N,Kb as f,P as z,Q as F,Sa as g,Ta as u,Va as A,Wa as b,Xa as h,Ya as m,Za as r,_a as a,aa as S,ba as D,db as L,hb as w,jb as v,pb as x,qb as k,sb as l,tb as c,ub as C,wa as E}from"./chunk-WVCKOJZL.js";var V=(i,t)=>t.key,O=(i,t)=>t.id;function Q(i,t){i&1&&(r(0,"span",16),l(1,"seed data"),a())}function Y(i,t){i&1&&(r(0,"span",17),l(1,"live"),a())}function q(i,t){if(i&1&&s(0,"span",29),i&2){let e=v().$implicit;x("background",e.color)}}function W(i,t){if(i&1&&(r(0,"span",28),l(1),a()),i&2){let e=v().$implicit;n(),c(e.count)}}function X(i,t){if(i&1){let e=L();r(0,"button",26),w("click",function(){let d=z(e).$implicit,p=v();return F(p.onTypeFilter(d.key))}),g(1,q,1,2,"span",27),l(2),g(3,W,2,1,"span",28),a()}if(i&2){let e=t.$implicit,o=v();x("--chip-color",e.color)("--chip-bg",e.soft),k("active",o.typeFilter()===e.key),n(),u(e.key!=="all"?1:-1),n(),C(" ",e.label," "),n(),u(e.count!==void 0?3:-1)}}function J(i,t){if(i&1&&(r(0,"span",23),l(1),a()),i&2){let e=v();n(),c(e.typeDesc())}}function Z(i,t){i&1&&s(0,"app-icon",43),i&2&&m("size",10)}function ee(i,t){if(i&1){let e=L();r(0,"div",38),w("click",function(){let d=z(e).$implicit,p=v(3);return F(p.onSelectByObj(d))}),s(1,"span",39)(2,"app-icon",40),r(3,"div",4)(4,"div",41)(5,"span",42),l(6),a(),g(7,Z,1,1,"app-icon",43),a(),r(8,"div",44),l(9),a()(),r(10,"span",45),l(11),a()()}if(i&2){let e=t.$implicit,o=v(3);k("selected",o.selectedId()===e.id)("indent",o.isIndented(e)),n(),x("background",o.L[e.level].color),n(),m("name",o.iconFor(e))("size",13),n(4),c(o.nameFor(e)),n(),u(e.readOnly?7:-1),n(2),c(e.path),n(2),c(o.fmtK(e.tokens))}}function te(i,t){if(i&1&&(r(0,"div",32)(1,"div",35)(2,"span",36),l(3),a(),r(4,"span",23),l(5),a()(),b(6,ee,12,12,"div",37,O),a()),i&2){let e=t.$implicit,o=v(2);n(3),c(o.L[e.key].label),n(2),c(o.L[e.key].desc),n(),h(o.rowItems(e))}}function ne(i,t){i&1&&(r(0,"span",49),s(1,"app-icon",62),l(2," read-only"),a()),i&2&&(n(),m("size",10))}function ie(i,t){if(i&1&&(r(0,"div",53)(1,"div",11),l(2,"Saved in"),a(),r(3,"button",63),l(4),a()()),i&2){let e=v();n(4),c(e.session)}}function oe(i,t){if(i&1&&(r(0,"span",64),l(1),a()),i&2){let e=t.$implicit;n(),C("#",e)}}function re(i,t){if(i&1&&(r(0,"div",55),b(1,oe,2,1,"span",64,A),a()),i&2){let e=v();n(),h(e.tags)}}function ae(i,t){if(i&1&&(r(0,"div",66),s(1,"app-icon",14),r(2,"span",67),l(3),a(),r(4,"span",68),l(5),a()()),i&2){let e=t.$implicit,o=v(4);n(),m("size",12),n(2),c(e.path),n(2),c(o.fmtK(e.tokens))}}function le(i,t){if(i&1&&(r(0,"div",57)(1,"div",36),l(2),a(),r(3,"div",65),b(4,ae,6,3,"div",66,O),a()()),i&2){let e=v(3);n(2),C("Imports \xB7 ",e.currentImports().length),n(2),h(e.currentImports())}}function de(i,t){if(i&1&&(r(0,"button",59),s(1,"app-icon",69),l(2),a()),i&2){let e=v();n(),m("size",13),n(),C(" ",e.type==="note"?"Edit note":"Edit memory"," ")}}function se(i,t){i&1&&(r(0,"button",61),s(1,"app-icon",70),l(2," Forget "),a()),i&2&&(n(),m("size",13))}function ce(i,t){if(i&1&&(r(0,"div",34)(1,"div",46)(2,"span",47),s(3,"app-icon",40),l(4),a(),r(5,"span",47),l(6),a(),r(7,"span",48),l(8),a(),s(9,"span",15),g(10,ne,3,1,"span",49),a(),r(11,"div",50)(12,"span",51),l(13),a()(),r(14,"div",52)(15,"div",53)(16,"div",11),l(17,"Tokens"),a(),r(18,"div",54),l(19),a()(),r(20,"div",53)(21,"div",11),l(22,"Lines"),a(),r(23,"div",54),l(24),a()(),r(25,"div",53)(26,"div",11),l(27,"Scope"),a(),r(28,"div",54),l(29),a()(),r(30,"div",53)(31,"div",11),l(32,"Modified"),a(),r(33,"div",54),l(34),a()(),g(35,ie,5,1,"div",53),a(),g(36,re,3,0,"div",55),s(37,"div",56),g(38,le,6,1,"div",57),r(39,"div",58),g(40,de,3,2,"button",59),r(41,"button",59),s(42,"app-icon",60),l(43," Copy contents "),a(),g(44,se,3,1,"button",61),a()()),i&2){let e=t,o=v(2);n(2),x("background",o.T[e.type].soft)("color",o.T[e.type].color),n(),m("name",o.T[e.type].icon)("size",10),n(),C(" ",o.T[e.type].label," "),n(),x("background",o.L[e.level].soft)("color",o.L[e.level].color),n(),c(o.L[e.level].label),n(2),c(o.L[e.level].desc),n(2),u(e.readOnly?10:-1),n(3),c(e.path),n(6),c(o.fmtK(e.tokens)),n(5),c(e.lines),n(5),c(o.L[e.level].label),n(5),c(e.modified),n(),u(e.type==="note"&&e.session?35:-1),n(),u(e.type==="note"&&(e.tags!=null&&e.tags.length)?36:-1),n(),m("innerHTML",o.currentBody(),E),n(),u(o.currentImports().length>0?38:-1),n(2),u(e.readOnly?-1:40),n(2),m("size",13),n(2),u(e.type==="note"?44:-1)}}function pe(i,t){if(i&1&&(r(0,"div",24)(1,"div",30)(2,"div",31),b(3,te,8,2,"div",32,V),a()(),r(5,"div",33),g(6,ce,45,26,"div",34),a()()),i&2){let e,o=v();n(3),h(o.railGroups()),n(3),u((e=o.current())?6:-1,e)}}function me(i,t){i&1&&s(0,"app-icon",43),i&2&&m("size",11)}function ve(i,t){if(i&1&&(r(0,"div",77),s(1,"div",78),r(2,"div",79)(3,"div",80)(4,"span",81),l(5),a(),r(6,"span",47),l(7),a(),r(8,"span",51),l(9),a(),s(10,"span",15),g(11,me,1,1,"app-icon",43),r(12,"span",68),l(13),a()(),s(14,"div",82),a()()),i&2){let e=t.$implicit,o=t.$index,d=v(3);n(),x("background",d.L[e.level].color),n(4),c(o+1),n(),x("background",d.L[e.level].soft)("color",d.L[e.level].color),n(),c(d.L[e.level].label),n(2),c(e.path),n(2),u(e.readOnly?11:-1),n(2),c(d.fmtK(e.tokens)),n(),m("innerHTML",d.renderBody(e.body),E)}}function ge(i,t){if(i&1&&(r(0,"div",75),l(1,"Instructions \xB7 precedence order"),a(),r(2,"div",76),b(3,ve,15,12,"div",77,O),a()),i&2){let e=v(2);n(3),h(e.effectiveInstructions())}}function ue(i,t){if(i&1&&(r(0,"div",77),s(1,"div",78),r(2,"div",79)(3,"div",80)(4,"span",47),l(5),a(),r(6,"span",51),l(7),a(),s(8,"span",15),r(9,"span",68),l(10),a()(),s(11,"div",82),a()()),i&2){let e=t.$implicit,o=v(3);n(),x("background",o.L[e.level].color),n(3),x("background",o.L[e.level].soft)("color",o.L[e.level].color),n(),c(o.L[e.level].label),n(2),c(e.path),n(3),c(o.fmtK(e.tokens)),n(),m("innerHTML",o.renderBody(e.body),E)}}function fe(i,t){if(i&1&&(r(0,"div",83)(1,"span",36),l(2,"Notes \xB7 memory tool"),a(),r(3,"span",23),l(4,"retrieved facts, not precedence-ranked"),a()(),r(5,"div",76),b(6,ue,12,10,"div",77,O),a()),i&2){let e=v(2);n(6),h(e.effectiveNotes())}}function ye(i,t){if(i&1&&(r(0,"div",25)(1,"div",71),s(2,"app-icon",72),r(3,"span",73),l(4,"Effective memory"),a(),r(5,"span",48),l(6,"\xB7 everything the agent loads"),a()(),r(7,"div",74),l(8," Instructions merge in precedence order \u2014 managed policy is authoritative and lower blocks fill in where higher ones are silent. Saved notes are appended as retrieved context. "),a(),g(9,ge,5,0),g(10,fe,8,0),a()),i&2){let e=v();n(2),m("size",15),n(7),u(e.effectiveInstructions().length>0?9:-1),n(),u(e.effectiveNotes().length>0?10:-1)}}var U={enterprise:{key:"enterprise",label:"Managed",color:"#E5A50A",soft:"rgba(229,165,10,0.14)",desc:"Organization policy \xB7 cannot be overridden"},user:{key:"user",label:"User",color:"#29D2BE",soft:"rgba(41,210,190,0.14)",desc:"Personal \xB7 applies to every project"},project:{key:"project",label:"Project",color:"#5B93F2",soft:"rgba(91,147,242,0.14)",desc:"Team-shared \xB7 checked into the repo"},subdir:{key:"subdir",label:"Directory",color:"#A586F5",soft:"rgba(165,134,245,0.14)",desc:"Scoped to a subtree \xB7 loaded when cwd is inside"},import:{key:"import",label:"Import",color:"#7B8696",soft:"rgba(123,134,150,0.12)",desc:"Pulled in via @path reference"},note:{key:"note",label:"Notes",color:"#46C26B",soft:"rgba(70,194,107,0.14)",desc:"Agent-written \xB7 memory tool"}},y={instruction:{key:"instruction",label:"Instructions",color:"#5B93F2",soft:"rgba(91,147,242,0.14)",icon:"memory",desc:"Directives & rules from CLAUDE.md"},note:{key:"note",label:"Notes",color:"#46C26B",soft:"rgba(70,194,107,0.14)",icon:"tips",desc:"Facts the agent saved via the memory tool"},import:{key:"import",label:"Imports",color:"#29D2BE",soft:"rgba(41,210,190,0.14)",icon:"external",desc:"Files pulled in via @path"}},xe=["enterprise","project","subdir","import","user"],_e=[{id:"m-ent",level:"enterprise",type:"instruction",name:"CLAUDE.md",scope:"managed",readOnly:!0,path:"/Library/Application Support/ClaudeCode/CLAUDE.md",tokens:210,lines:9,modified:"managed",body:"# Engineering policy (managed)\n\n- All code must pass `pnpm lint` and `pnpm typecheck` before commit.\n- Never commit secrets, API keys, or `.env` files.\n- Prefer dependency-free solutions; new deps require review.\n- Validate all external input at trust boundaries.\n- Production logs must not contain user content."},{id:"m-user",level:"user",type:"instruction",name:"CLAUDE.md",scope:"~/.claude",path:"~/.claude/CLAUDE.md",tokens:280,lines:12,modified:"3d ago",body:"# Personal preferences\n\n- Before reading a file, try `specship_explore` for structure first.\n- Use conventional commits (`feat:`, `fix:`, `chore:`).\n- Prefer `rg` over `grep`, `fd` over `find`.\n- Keep responses terse \u2014 show diffs, not whole files.\n- Editor open command: `cursor`.\n- Default model for read/edit turns: Sonnet."},{id:"m-proj",level:"project",type:"instruction",name:"CLAUDE.md",scope:"project root",path:"~/dev/specship/CLAUDE.md",tokens:760,lines:28,modified:"2h ago",imports:["m-imp-conv","m-imp-style"],body:"# SpecShip \u2014 project memory\n\n## Architecture\n- Electron + Angular renderer in `packages/web-ng`.\n- MCP server in `src/mcp`, graph engine in `src/graph`.\n- SQLite via better-sqlite3; migrations in `src/db/migrations.ts`.\n\n## Commands\n- `npm run dev` \u2014 renderer + MCP in watch mode.\n- `npm test` \u2014 vitest; `npm run eval` \u2014 evaluation runner.\n- `npm run cli` \u2014 local SpecShip binary.\n\n## Conventions\n- Spec IDs are stable: `REQ-<AREA>-<NNN>`.\n- Never edit generated files under `src/graph/_gen`.\n\n@docs/conventions.md\n@specs/STYLE.md"},{id:"m-sub",level:"subdir",type:"instruction",name:"CLAUDE.md",scope:"src/graph",path:"~/dev/specship/src/graph/CLAUDE.md",tokens:190,lines:7,modified:"1d ago",body:`# Graph engine notes
2
-
3
- - Layout runs in a worker \u2014 keep \`applyLayout\` pure.
4
- - Node positions are cached by content hash.
5
- - Above 5k nodes, cull to viewport + 1-hop (REQ-GRAPH-006).
6
- - Synthesized edges are dashed; never persist them.`},{id:"m-imp-conv",level:"import",type:"import",name:"conventions.md",scope:"@import",path:"docs/conventions.md",tokens:120,lines:6,modified:"5d ago",body:"# Conventions\n\n- One component per file; co-locate styles.\n- Name event handlers `onX`; booleans `isX`/`hasX`.\n- No default exports in shared modules."},{id:"m-imp-style",level:"import",type:"import",name:"STYLE.md",scope:"@import",path:"specs/STYLE.md",tokens:100,lines:5,modified:"5d ago",body:`# Spec style
7
-
8
- - Requirements use MUST / SHOULD / MAY.
9
- - Each requirement gets one acceptance block.
10
- - Keep titles under 8 words.`},{id:"n-build",level:"note",type:"note",name:"build-system.md",scope:"memory tool",path:"~/.claude/memory/build-system.md",tokens:64,lines:4,modified:"today 14:31",session:"a3f9c1d2",tags:["build","tooling"],body:"# Build system\n\n- Package manager is **npm**, never pnpm in this fork.\n- `npm run dev` runs renderer + MCP in watch mode.\n- Run `npm run build` after any schema change."},{id:"n-auth",level:"note",type:"note",name:"auth-jwt.md",scope:"memory tool",path:"~/.claude/memory/auth-jwt.md",tokens:58,lines:4,modified:"today 15:38",session:"a3f9c1d2",tags:["auth","REQ-AUTH-005"],body:"# Auth model\n\n- Session tokens are signed **JWTs**.\n- `checkExpiry` tolerates 30s clock skew (REQ-AUTH-005).\n- Expired tokens return 401 with `code: token_expired`."},{id:"n-graph",level:"note",type:"note",name:"graph-perf.md",scope:"memory tool",path:"~/.claude/memory/graph-perf.md",tokens:52,lines:4,modified:"yest 16:44",session:"f04a8b13",tags:["graph","perf"],body:`# Graph performance
11
-
12
- - Above 5k nodes, layout culls to viewport + 1-hop.
13
- - \`applyLayout\` must stay pure (runs in a worker).
14
- - Node positions cached by content hash.`},{id:"n-cost",level:"note",type:"note",name:"cost-prefs.md",scope:"memory tool",path:"~/.claude/memory/cost-prefs.md",tokens:44,lines:3,modified:"Jun 4 09:20",session:"b5f2c8d9",tags:["cost","model"],body:`# Cost preferences
15
-
16
- - Route read/edit-only turns to Sonnet.
17
- - Pin a stable system-prompt prefix to keep the 1h cache warm.`}],K=class i{sanitizer=P($);api=P(j);projects=P(R);view=S("sources");typeFilter=S("all");selectedId=S("m-proj");L=U;T=y;resource=B(this.api,()=>`/api/memory${this.projects.projectQuery()}`);files=f(()=>{let t=this.resource.state().data;return t?.files?.length?t.files:_e});source=f(()=>this.resource.state().data?.files?.length?"api":"seed");loading=f(()=>this.resource.state().loading);totalTokens=f(()=>this.files().reduce((t,e)=>t+e.tokens,0));instructionCount=f(()=>this.files().filter(t=>t.type==="instruction").length);noteCount=f(()=>this.files().filter(t=>t.type==="note").length);importCount=f(()=>this.files().filter(t=>t.type==="import").length);autoSelect=D(()=>{let t=this.files();if(t.length&&!t.find(e=>e.id===this.selectedId())){let e=t.find(o=>o.level==="project")??t[0];e&&this.selectedId.set(e.id)}});current=f(()=>this.files().find(t=>t.id===this.selectedId()));currentLevel=f(()=>{let t=this.current();return t?U[t.level]:null});currentBody=f(()=>{let t=this.current();return this.sanitizer.bypassSecurityTrustHtml(t?G(t.body):"")});currentImports=f(()=>{let t=this.current();if(!t?.imports)return[];let e=this.files();return t.imports.map(o=>e.find(d=>d.id===o)).filter(o=>!!o)});typeDesc=f(()=>{let t=this.typeFilter();return t==="all"?"":y[t].desc});typeChips=f(()=>[{key:"all",label:"All",color:"var(--text-secondary)",soft:"var(--bg-active)"},{key:"instruction",label:y.instruction.label,color:y.instruction.color,soft:y.instruction.soft,count:this.instructionCount()},{key:"note",label:y.note.label,color:y.note.color,soft:y.note.soft,count:this.noteCount()},{key:"import",label:y.import.label,color:y.import.color,soft:y.import.soft,count:this.importCount()}]);railGroups=f(()=>{let t=this.typeFilter(),e=this.files(),o=p=>t==="all"||p.type===t;return[{key:"enterprise",items:e.filter(p=>p.level==="enterprise")},{key:"user",items:e.filter(p=>p.level==="user")},{key:"project",items:e.filter(p=>p.level==="project"||p.level==="subdir")},{key:"note",items:e.filter(p=>p.level==="note")}].filter(p=>p.items.length>0).filter(p=>p.items.some(_=>o(_)||(_.imports??[]).some(T=>{let M=e.find(I=>I.id===T);return M?o(M):!1})))});effectiveInstructions=f(()=>{let t=this.typeFilter(),e=this.files(),o=[];for(let d of xe)for(let p of e)p.level===d&&o.push(p);return o.filter(d=>t==="all"||d.type===t)});effectiveNotes=f(()=>{let t=this.typeFilter();return this.files().filter(e=>e.type==="note"&&(t==="all"||t==="note"))});rowItems(t){let e=this.typeFilter(),o=this.files(),d=_=>e==="all"||_.type===e,p=[];for(let _ of t.items)if(d(_)&&p.push(_),_.imports)for(let T of _.imports){let M=o.find(I=>I.id===T);M&&d(M)&&p.push(M)}return p}isIndented(t){return t.level==="import"}iconFor(t){return t.level==="import"?"external":t.level==="note"?"tips":"memory"}nameFor(t){return t.level==="import"||t.level==="note"?t.name:t.scope}fmtK(t){return t>=1e3?`${(t/1e3).toFixed(1)}k`:`${t}`}renderBody(t){return this.sanitizer.bypassSecurityTrustHtml(G(t))}onSelect(t){this.selectedId.set(t)}onViewChange(t){this.view.set(t)}onTypeFilter(t){this.typeFilter.set(t)}onSelectByObj(t){this.selectedId.set(t.id)}reload(){this.resource.refetch()}static \u0275fac=function(e){return new(e||i)};static \u0275cmp=N({type:i,selectors:[["app-memory"]],decls:57,vars:18,consts:[[1,"memory-page","col"],[1,"page-head"],[1,"row","gap-10"],["name","memory",3,"size"],[1,"col","gap-2","grow"],[1,"title"],[1,"sub"],[1,"seg"],[1,"seg-btn",3,"click"],[1,"stat-strip","row","gap-10"],[1,"stat","row","gap-8"],[1,"lbl"],[1,"val","mono"],["name","tips",2,"color","var(--node-test)",3,"size"],["name","external",2,"color","var(--node-route)",3,"size"],[1,"grow"],["title","No /api/memory data yet \u2014 showing illustrative seed",1,"pill","warn"],["title","Live from /api/memory",1,"pill","ok"],[1,"btn","btn-secondary","btn-sm",3,"click"],["name","refresh",3,"size"],[1,"filter-bar","row","gap-6"],["name","filter",2,"color","var(--text-muted)",3,"size"],[1,"chip","row","gap-6",3,"active","--chip-color","--chip-bg"],[1,"muted","xs"],[1,"split","row"],[1,"eff-scroll","scroll-y"],[1,"chip","row","gap-6",3,"click"],[1,"dot",3,"background"],[1,"cnt","mono","tabular"],[1,"dot"],[1,"rail","col"],[1,"rail-scroll","scroll-y"],[1,"rail-group"],[1,"detail","col"],[1,"detail-scroll","scroll-y"],[1,"rail-group-head","row","gap-6"],[1,"eyebrow"],[1,"src-row","row","gap-8",3,"selected","indent"],[1,"src-row","row","gap-8",3,"click"],[1,"pill-dot"],[3,"name","size"],[1,"row","gap-6"],[1,"src-name","mono"],["name","lock",2,"color","var(--warn)",3,"size"],[1,"src-path","mono","muted"],[1,"src-tokens","mono","tabular","muted"],[1,"row","gap-8","head-pills"],[1,"pill"],[1,"secondary","xs"],[1,"pill","warn"],[1,"row","gap-8","path-row"],[1,"path","mono"],[1,"kv-strip","row"],[1,"kv"],[1,"val","mono","tabular"],[1,"tags","row","gap-6"],[1,"card","card-pad","body",3,"innerHTML"],[1,"imports"],[1,"actions","row","gap-8"],[1,"btn","btn-secondary","btn-sm"],["name","copy",3,"size"],[1,"btn","btn-ghost","btn-sm","danger"],["name","lock",3,"size"],[1,"val","mono","session-link"],[1,"tag","mono"],[1,"col","gap-6"],[1,"import-row","row","gap-8"],[1,"mono","grow"],[1,"mono","tabular","muted"],["name","reveal",3,"size"],["name","x",3,"size"],[1,"row","gap-8","eff-head"],["name","layers",2,"color","var(--accent)",3,"size"],[1,"eff-title"],[1,"secondary","eff-desc"],[1,"eyebrow","eff-section-head"],[1,"col","gap-10"],[1,"card","eff-block","row"],[1,"bar"],[1,"body","col"],[1,"row","gap-8","head"],[1,"ord","mono","tabular","muted"],[1,"md",3,"innerHTML"],[1,"row","gap-6","eff-section-head","notes-head"]],template:function(e,o){if(e&1&&(r(0,"div",0)(1,"div",1)(2,"div",2),s(3,"app-icon",3),r(4,"div",4)(5,"div",5),l(6,"Memory"),a(),r(7,"div",6),l(8,"Everything the agent remembers \u2014 across levels and types"),a()(),r(9,"div",7)(10,"button",8),w("click",function(){return o.onViewChange("sources")}),l(11,"Sources"),a(),r(12,"button",8),w("click",function(){return o.onViewChange("effective")}),l(13,"Effective"),a()()()(),r(14,"div",9)(15,"div",10),s(16,"app-icon",3),r(17,"div")(18,"div",11),l(19,"Loaded"),a(),r(20,"div",12),l(21),a()()(),r(22,"div",10),s(23,"app-icon",3),r(24,"div")(25,"div",11),l(26,"Instructions"),a(),r(27,"div",12),l(28),a()()(),r(29,"div",10),s(30,"app-icon",13),r(31,"div")(32,"div",11),l(33,"Notes"),a(),r(34,"div",12),l(35),a()()(),r(36,"div",10),s(37,"app-icon",14),r(38,"div")(39,"div",11),l(40,"Imports"),a(),r(41,"div",12),l(42),a()()(),s(43,"span",15),g(44,Q,2,0,"span",16)(45,Y,2,0,"span",17),r(46,"button",18),w("click",function(){return o.reload()}),s(47,"app-icon",19),l(48," Reload memory "),a()(),r(49,"div",20),s(50,"app-icon",21),b(51,X,4,9,"button",22,V),s(53,"span",15),g(54,J,2,1,"span",23),a(),g(55,pe,7,1,"div",24)(56,ye,11,3,"div",25),a()),e&2){let d;n(3),m("size",18),n(7),k("active",o.view()==="sources"),n(2),k("active",o.view()==="effective"),n(4),m("size",14),n(5),C("",o.fmtK(o.totalTokens())," tokens"),n(2),m("size",14),n(5),c(o.instructionCount()),n(2),m("size",14),n(5),c(o.noteCount()),n(2),m("size",14),n(5),c(o.importCount()),n(2),u(o.source()==="seed"?44:45),n(3),m("size",13),n(3),m("size",13),n(),h(o.typeChips()),n(3),u((d=o.typeFilter()!=="all")?54:-1,d),n(),u(o.view()==="sources"?55:56)}},dependencies:[H],styles:["[_nghost-%COMP%]{display:flex;flex:1;min-height:0}.memory-page[_ngcontent-%COMP%]{flex:1;min-height:0}.page-head[_ngcontent-%COMP%]{padding:16px 18px 0}.page-head[_ngcontent-%COMP%] .title[_ngcontent-%COMP%]{font-size:16px;font-weight:650;letter-spacing:-.01em}.page-head[_ngcontent-%COMP%] .sub[_ngcontent-%COMP%]{color:var(--text-secondary);font-size:12px}.seg[_ngcontent-%COMP%]{display:inline-flex;gap:2px;padding:3px;border:1px solid var(--border-subtle);border-radius:8px;background:var(--bg-panel)}.seg-btn[_ngcontent-%COMP%]{background:transparent;border:none;padding:4px 11px;height:24px;border-radius:5px;color:var(--text-muted);font-family:var(--font-ui);font-size:12px;font-weight:500;cursor:pointer}.seg-btn[_ngcontent-%COMP%]:hover{color:var(--text-secondary)}.seg-btn.active[_ngcontent-%COMP%]{background:var(--bg-active);color:var(--text-primary)}.stat-strip[_ngcontent-%COMP%]{padding:14px 18px 12px;flex-wrap:wrap}.stat[_ngcontent-%COMP%]{padding:8px 12px;background:var(--bg-panel);border:1px solid var(--border-subtle);border-radius:9px;color:var(--accent)}.stat[_ngcontent-%COMP%] .lbl[_ngcontent-%COMP%]{color:var(--text-muted);font-size:10px;line-height:1.2}.stat[_ngcontent-%COMP%] .val[_ngcontent-%COMP%]{font-size:13px;font-weight:600;color:var(--text-primary);margin-top:1px;white-space:nowrap}.filter-bar[_ngcontent-%COMP%]{padding:0 18px 14px;flex-wrap:wrap;align-items:center}.chip[_ngcontent-%COMP%]{height:26px;padding:0 11px;border-radius:999px;border:1px solid var(--border-subtle);background:var(--bg-panel);color:var(--text-muted);font-family:var(--font-ui);font-size:11.5px;font-weight:500;cursor:pointer}.chip[_ngcontent-%COMP%]:hover{border-color:var(--border-strong);color:var(--text-secondary)}.chip.active[_ngcontent-%COMP%]{border-color:transparent;background:var(--chip-bg);color:var(--chip-color)}.chip[_ngcontent-%COMP%] .dot[_ngcontent-%COMP%]{width:7px;height:7px;border-radius:50%}.chip[_ngcontent-%COMP%] .cnt[_ngcontent-%COMP%]{opacity:.7;font-size:11px}.xs[_ngcontent-%COMP%]{font-size:11px}.muted[_ngcontent-%COMP%]{color:var(--text-muted)}.secondary[_ngcontent-%COMP%]{color:var(--text-secondary)}.grow[_ngcontent-%COMP%]{flex:1}.split[_ngcontent-%COMP%]{flex:1;min-height:0;border-top:1px solid var(--border-subtle)}.rail[_ngcontent-%COMP%]{width:300px;flex-shrink:0;border-right:1px solid var(--border-subtle);background:var(--bg-panel);min-height:0}.rail-scroll[_ngcontent-%COMP%]{flex:1;padding:8px}.rail-group[_ngcontent-%COMP%]{margin-bottom:10px}.rail-group-head[_ngcontent-%COMP%]{padding:8px 8px 4px}.src-row[_ngcontent-%COMP%]{padding:8px 10px;border-radius:7px;cursor:pointer;transition:background .1s;min-width:0}.src-row.indent[_ngcontent-%COMP%]{padding-left:26px}.src-row[_ngcontent-%COMP%]:hover{background:var(--bg-hover)}.src-row.selected[_ngcontent-%COMP%]{background:var(--accent-soft)}.src-row.selected[_ngcontent-%COMP%] app-icon[_ngcontent-%COMP%]{color:var(--accent)}.src-row.selected[_ngcontent-%COMP%] .src-name[_ngcontent-%COMP%]{color:var(--accent)}.src-row[_ngcontent-%COMP%] app-icon[_ngcontent-%COMP%]{color:var(--text-muted);flex-shrink:0}.src-name[_ngcontent-%COMP%]{font-size:12px;color:var(--text-primary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.src-path[_ngcontent-%COMP%]{font-size:10px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.src-tokens[_ngcontent-%COMP%]{font-size:10.5px;flex-shrink:0}.pill-dot[_ngcontent-%COMP%]{width:6px;height:6px;border-radius:50%;flex-shrink:0}.detail[_ngcontent-%COMP%]{flex:1;min-width:0;min-height:0}.detail-scroll[_ngcontent-%COMP%]{flex:1;padding:20px}.head-pills[_ngcontent-%COMP%]{margin-bottom:6px;flex-wrap:wrap}.pill[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:5px;font-size:11px;font-weight:600;padding:2px 8px;border-radius:999px;line-height:1.5;white-space:nowrap}.pill.warn[_ngcontent-%COMP%]{color:var(--warn);background:var(--warn-soft)}.pill.ok[_ngcontent-%COMP%]{color:var(--success);background:var(--success-soft)}.path-row[_ngcontent-%COMP%]{margin-bottom:14px}.path[_ngcontent-%COMP%]{font-size:13.5px;font-weight:600;color:var(--text-primary)}.kv-strip[_ngcontent-%COMP%]{gap:22px;padding:10px 0;border-top:1px solid var(--border-subtle);border-bottom:1px solid var(--border-subtle);margin-bottom:16px;flex-wrap:wrap}.kv[_ngcontent-%COMP%] .lbl[_ngcontent-%COMP%]{color:var(--text-muted);font-size:10.5px}.kv[_ngcontent-%COMP%] .val[_ngcontent-%COMP%]{font-size:13px;font-weight:600;color:var(--text-primary);margin-top:1px;white-space:nowrap}.session-link[_ngcontent-%COMP%]{background:none;border:none;padding:0;color:var(--accent);cursor:pointer;font-family:var(--font-mono);font-size:13px;font-weight:600}.tags[_ngcontent-%COMP%]{margin-bottom:14px;flex-wrap:wrap}.tag[_ngcontent-%COMP%]{font-size:10.5px;color:var(--node-test);background:var(--node-test-soft);padding:2px 8px;border-radius:5px;white-space:nowrap}.body[_ngcontent-%COMP%]{background:var(--bg-panel);margin-bottom:16px}.imports[_ngcontent-%COMP%]{margin-bottom:16px}.imports[_ngcontent-%COMP%] .eyebrow[_ngcontent-%COMP%]{margin-bottom:8px}.import-row[_ngcontent-%COMP%]{padding:7px 10px;border-radius:7px;border:1px solid var(--border-subtle);font-size:11.5px}.import-row[_ngcontent-%COMP%] .mono.tabular[_ngcontent-%COMP%]{font-size:10.5px}.actions[_ngcontent-%COMP%]{margin-top:16px}.btn-ghost.danger[_ngcontent-%COMP%]{color:var(--error)}.btn-ghost.danger[_ngcontent-%COMP%]:hover{background:var(--error-soft)}.eff-scroll[_ngcontent-%COMP%]{flex:1;padding:20px}.eff-head[_ngcontent-%COMP%]{margin-bottom:6px}.eff-title[_ngcontent-%COMP%]{font-weight:600;font-size:14px}.eff-desc[_ngcontent-%COMP%]{font-size:12px;line-height:1.55;margin-bottom:16px}.eff-section-head[_ngcontent-%COMP%]{margin-bottom:8px}.notes-head[_ngcontent-%COMP%]{margin-top:20px}.eff-block[_ngcontent-%COMP%]{overflow:hidden}.eff-block[_ngcontent-%COMP%] .bar[_ngcontent-%COMP%]{width:3px;flex-shrink:0}.eff-block[_ngcontent-%COMP%] .body[_ngcontent-%COMP%]{flex:1;min-width:0;padding:12px 14px;margin-bottom:0;background:transparent}.eff-block[_ngcontent-%COMP%] .head[_ngcontent-%COMP%]{margin-bottom:8px;flex-wrap:wrap}.eff-block[_ngcontent-%COMP%] .ord[_ngcontent-%COMP%]{font-size:10.5px;width:16px}.eff-block[_ngcontent-%COMP%] .md[_ngcontent-%COMP%]{padding-left:24px}.eff-block[_ngcontent-%COMP%] .path[_ngcontent-%COMP%]{font-size:11.5px;color:var(--text-secondary);font-weight:400;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}"],changeDetection:0})};function G(i){let t=d=>d.replace(/&/g,"&amp;").replace(/</g,"&lt;"),e=d=>t(d).replace(/\*\*(.+?)\*\*/g,'<strong style="color:var(--text-primary)">$1</strong>').replace(/`(.+?)`/g,'<code class="mono" style="font-size:11.5px;background:var(--bg-canvas);padding:1px 5px;border-radius:4px;border:1px solid var(--border-subtle);color:var(--node-spec)">$1</code>'),o=[];for(let d of i.split(`
18
- `))d.startsWith("## ")?o.push(`<div style="font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:0.06em;color:var(--text-muted);margin:14px 0 6px">${e(d.slice(3))}</div>`):d.startsWith("# ")?o.push(`<div style="font-size:14px;font-weight:650;margin:0 0 8px">${e(d.slice(2))}</div>`):d.startsWith("@")?o.push(`<div class="mono" style="font-size:12px;color:var(--node-route);background:var(--node-route-soft);display:block;width:fit-content;padding:2px 8px;border-radius:5px;margin:3px 0">${t(d)}</div>`):/^\s*- /.test(d)?o.push(`<div style="display:flex;gap:8px;font-size:12.5px;line-height:1.6;color:var(--text-secondary);padding:1px 0"><span style="color:var(--text-faint)">\u2022</span><span>${e(d.replace(/^\s*- /,""))}</span></div>`):d.trim()===""?o.push('<div style="height:6px"></div>'):o.push(`<div style="font-size:12.5px;line-height:1.6;color:var(--text-secondary)">${e(d)}</div>`);return o.join("")}export{K as Memory};
@@ -1 +0,0 @@
1
- import{G as f,K as o,V as c,aa as s,ba as a}from"./chunk-WVCKOJZL.js";var n="specship.theme",h=class i{destroyRef=o(c);pref=s(this.loadPref());effective=s("dark");constructor(){this.applyEffective();let e=window.matchMedia("(prefers-color-scheme: light)"),t=()=>{this.pref()==="system"&&this.applyEffective()};e.addEventListener("change",t),this.destroyRef.onDestroy(()=>e.removeEventListener("change",t)),a(()=>{let r=this.pref();try{localStorage.setItem(n,r)}catch{}this.applyEffective()})}setPref(e){this.pref.set(e)}toggle(){this.setPref(this.effective()==="dark"?"light":"dark")}loadPref(){try{let e=localStorage.getItem(n);if(e==="dark"||e==="light"||e==="system")return e}catch{}return"dark"}applyEffective(){let e=window.matchMedia("(prefers-color-scheme: light)").matches?"light":"dark",t=this.pref(),r=t==="system"?e:t;document.documentElement.setAttribute("data-theme",r),this.effective.set(r)}static \u0275fac=function(t){return new(t||i)};static \u0275prov=f({token:i,factory:i.\u0275fac,providedIn:"root"})};export{h as a};
@@ -1 +0,0 @@
1
- import{a as d}from"./chunk-ZABKKHJ3.js";import{G as n,K as i,Kb as l,V as c,aa as o}from"./chunk-WVCKOJZL.js";var a="specship.activeProjectSlug",u=class s{api=i(d);destroyRef=i(c);_projects=o([]);_claudeRoot=o(null);_loading=o(!0);_error=o(null);_activeSlug=o(p());projects=this._projects.asReadonly();claudeRoot=this._claudeRoot.asReadonly();loading=this._loading.asReadonly();error=this._error.asReadonly();activeSlug=this._activeSlug.asReadonly();active=l(()=>{let e=this._activeSlug();return e?this._projects().find(t=>t.slug===e)??null:null});closeStream=null;constructor(){this.refresh(),this.subscribe(),this.destroyRef.onDestroy(()=>this.closeStream?.())}async refresh(){this._loading.set(!0),this._error.set(null);try{let e=await this.api.get("/api/projects");this._claudeRoot.set(e.claudeRoot),this._projects.set(e.projects),this.reconcileActive(e.projects)}catch(e){this._error.set(e instanceof Error?e.message:String(e))}finally{this._loading.set(!1)}}projectQuery(e="?"){let t=this._activeSlug();return t?`${e}project=${encodeURIComponent(t)}`:""}setActive(e){this._activeSlug.set(e);try{e?localStorage.setItem(a,e):localStorage.removeItem(a)}catch{}}subscribe(){this.closeStream=this.api.openEventStream("/api/projects/events",(e,t)=>{if(e==="snapshot"){let r=t;this._claudeRoot.set(r.claudeRoot),this._projects.set(r.projects??[]),this.reconcileActive(r.projects??[])}else if(e==="change"){let r=t;this._projects.set(r.list),this.reconcileActive(r.list)}else if(e==="refresh"){let r=t;this._projects.set(r.list)}},e=>{},["snapshot","change","refresh"])}reconcileActive(e){let t=this._activeSlug();t&&(e.find(r=>r.slug===t)||this.setActive(null))}static \u0275fac=function(t){return new(t||s)};static \u0275prov=n({token:s,factory:s.\u0275fac,providedIn:"root"})};function p(){try{return localStorage.getItem(a)}catch{return null}}export{u as a};
@@ -1 +0,0 @@
1
- import{b as g}from"./chunk-ZABKKHJ3.js";import{K as u,V as f,a as c,aa as n,b as s,ba as d}from"./chunk-WVCKOJZL.js";function T(p,a){let o=n({data:null,loading:!0,error:null,source:"init",noProject:!1}),A=u(f),r=null,l=n(0),b=()=>{let t=a();if(!t){o.set({data:null,loading:!1,error:null,source:"init",noProject:!1});return}r&&r.abort(),r=new AbortController,o.update(e=>s(c({},e),{loading:!0,error:null,noProject:!1})),p.get(t,r.signal).then(e=>o.set({data:e,loading:!1,error:null,source:"api",noProject:!1})).catch(e=>{if(e instanceof Error&&e.name==="AbortError")return;let i=e instanceof g&&e.status===409&&(e.code==="no_project"||e.code==="no_primary");o.set({data:null,loading:!1,error:i?null:e instanceof Error?e:new Error(String(e)),source:"api",noProject:i})})};return d(()=>{a(),l(),b()}),A.onDestroy(()=>{r?.abort()}),{state:o,refetch:()=>l.update(t=>t+1)}}export{T as a};
@@ -1 +0,0 @@
1
- import{Aa as d,Ka as c,Ob as r,R as s,Ra as m,Sa as g,Ta as p,ab as n,bb as l,cb as e,pb as f}from"./chunk-WVCKOJZL.js";function y(t,a){t&1&&(s(),e(0,"rect",14)(1,"rect",15))}var u=class t{size=r(24);tile=r(!0);glow=r(!0);static \u0275fac=function(i){return new(i||t)};static \u0275cmp=c({type:t,selectors:[["app-logo-mark"]],inputs:{size:[1,"size"],tile:[1,"tile"],glow:[1,"glow"]},decls:16,vars:5,consts:[["viewBox","0 0 32 32","fill","none",2,"flex-shrink","0"],["id","ssTile","x1","0","y1","0","x2","32","y2","32","gradientUnits","userSpaceOnUse"],["stop-color","#12161E"],["offset","1","stop-color","#0B0D11"],["id","ssLead","x1","18","y1","11","x2","26","y2","21","gradientUnits","userSpaceOnUse"],["stop-color","#6FA0F6"],["offset","1","stop-color","#5B93F2"],["transform","translate(4.6 4.6) scale(0.715)"],["d","M5 16 H11 M11 9 L23 16 L11 23","stroke","rgba(150,165,200,0.5)","stroke-width","1.9","stroke-linecap","round","stroke-linejoin","round","fill","none"],["x1","11","y1","9","x2","11","y2","23","stroke","rgba(150,165,200,0.4)","stroke-width","1.9","stroke-linecap","round"],["cx","23","cy","16","r","3.6","fill","url(#ssLead)"],["cx","11","cy","9","r","2.9","fill","#A586F5"],["cx","11","cy","23","r","2.9","fill","#46C26B"],["cx","5","cy","16","r","2.1","fill","#29D2BE"],["width","32","height","32","rx","7.2","fill","url(#ssTile)"],["x","0.5","y","0.5","width","31","height","31","rx","6.7","fill","none","stroke","rgba(255,255,255,0.08)"]],template:function(i,o){i&1&&(s(),n(0,"svg",0)(1,"defs")(2,"linearGradient",1),e(3,"stop",2)(4,"stop",3),l(),n(5,"linearGradient",4),e(6,"stop",5)(7,"stop",6),l()(),g(8,y,2,0),n(9,"g",7),e(10,"path",8)(11,"line",9)(12,"circle",10)(13,"circle",11)(14,"circle",12)(15,"circle",13),l()()),i&2&&(f("filter",o.glow()?"drop-shadow(0 0 9px rgba(91,147,242,0.35))":"none"),m("width",o.size())("height",o.size()),d(8),p(o.tile()?8:-1))},styles:["[_nghost-%COMP%]{display:inline-flex;align-items:center;justify-content:center;line-height:0}"],changeDetection:0})};export{u as a};
@@ -1 +0,0 @@
1
- import{a as d}from"./chunk-FTESTUEO.js";import{$a as p,Aa as i,Ka as a,Ob as m,Ya as c,Za as e,_a as o,sb as t,ub as s}from"./chunk-WVCKOJZL.js";var l=class r{surface=m("This page");static \u0275fac=function(n){return new(n||r)};static \u0275cmp=a({type:r,selectors:[["app-pick-project-empty"]],inputs:{surface:[1,"surface"]},decls:11,vars:2,consts:[[1,"empty-wrap"],[1,"empty-card"],["name","folder",3,"size"],[1,"title"],[1,"sub"],[1,"hint","mono"]],template:function(n,x){n&1&&(e(0,"div",0)(1,"div",1),p(2,"app-icon",2),e(3,"div",3),t(4,"Pick a project"),o(),e(5,"div",4),t(6),o(),e(7,"div",5),t(8," Projects are auto-discovered from "),e(9,"span"),t(10,"~/.claude/projects/"),o()()()()),n&2&&(i(2),c("size",28),i(4),s(" ",x.surface()," is project-scoped. Choose a project in the picker above (top bar, next to the menu) to see its data here. "))},dependencies:[d],styles:["[_nghost-%COMP%]{display:flex;flex:1}.empty-wrap[_ngcontent-%COMP%]{flex:1;display:grid;place-items:center;padding:40px 20px}.empty-card[_ngcontent-%COMP%]{max-width:420px;text-align:center;padding:32px 28px;background:var(--bg-panel);border:1px solid var(--border-subtle);border-radius:14px}.empty-card[_ngcontent-%COMP%] app-icon[_ngcontent-%COMP%]{color:var(--text-muted);margin-bottom:12px}.empty-card[_ngcontent-%COMP%] .title[_ngcontent-%COMP%]{font-size:16px;font-weight:650;letter-spacing:-.01em;margin-bottom:6px}.empty-card[_ngcontent-%COMP%] .sub[_ngcontent-%COMP%]{color:var(--text-secondary);font-size:13px;line-height:1.5;margin-bottom:14px}.empty-card[_ngcontent-%COMP%] .hint[_ngcontent-%COMP%]{color:var(--text-muted);font-size:11px}.empty-card[_ngcontent-%COMP%] .hint[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{color:var(--node-spec)}"],changeDetection:0})};export{l as a};
@@ -1 +0,0 @@
1
- import{a as k}from"./chunk-4LHBWWP7.js";import{a as w}from"./chunk-ZABKKHJ3.js";import{Aa as a,Cb as h,K as f,Ka as _,Kb as x,P as u,Q as b,Ra as y,Sa as C,Ta as E,Va as M,Wa as s,Xa as m,ab as e,bb as n,cb as g,db as P,ib as O,jb as v,sb as i,tb as c,ub as p}from"./chunk-WVCKOJZL.js";var z=()=>[0,1,2,3],I=(r,o)=>o.id;function D(r,o){r&1&&g(0,"div",11)}function F(r,o){r&1&&s(0,D,1,0,"div",11,M),r&2&&m(h(0,z))}function N(r,o){r&1&&(e(0,"div",9),i(1,"No tips. \u2728"),n())}function R(r,o){if(r&1){let t=P();e(0,"div",12),g(1,"div",13),e(2,"div",14)(3,"div",15),i(4),n(),e(5,"div",16),i(6),n(),e(7,"div",17)(8,"div",18)(9,"div",19),i(10,"Evidence"),n(),e(11,"div",20),i(12),n(),e(13,"div",21),i(14),n()(),e(15,"div",18)(16,"div",19),i(17,"Impact"),n(),e(18,"div",22),i(19),n()()(),e(20,"div",23)(21,"div",24)(22,"span",25),i(23,"fix"),n(),e(24,"code",26),i(25),n(),e(26,"button",27),O("click",function(){let l=u(t).$implicit,S=v(2);return b(S.copy(l.fix))}),i(27,"\u2398"),n()(),e(28,"button",28),i(29,"Apply"),n(),e(30,"button",29),i(31,"Dismiss"),n()()()()}if(r&2){let t=o.$implicit;y("data-sev",t.severity),a(4),c(t.title),a(2),c(t.why),a(6),c(t.evidence.session),a(2),c(t.evidence.detail),a(5),c(t.saving),a(6),c(t.fix)}}function A(r,o){if(r&1&&(e(0,"div",10),s(1,R,32,7,"div",12,I),n()),r&2){let t=v();a(),m(t.ordered())}}var T=class r{api=f(w);resource=k(this.api,()=>"/api/claude/tips");ordered=x(()=>{let o=this.resource.state().data?.tips??[],t={error:0,warn:1,info:2};return[...o].sort((d,l)=>(t[d.severity]??9)-(t[l.severity]??9))});counts=x(()=>{let o=this.resource.state().data?.tips??[];return{error:o.filter(t=>t.severity==="error").length,warn:o.filter(t=>t.severity==="warn").length,info:o.filter(t=>t.severity==="info").length}});copy(o){typeof navigator<"u"&&navigator.clipboard&&navigator.clipboard.writeText(o).catch(()=>{})}static \u0275fac=function(t){return new(t||r)};static \u0275cmp=_({type:r,selectors:[["app-tips"]],decls:17,vars:4,consts:[[1,"page","scroll-y"],[1,"page-head"],[1,"title-block"],[1,"title"],[1,"sub"],[1,"pills"],[1,"pill","pill-error"],[1,"pill","pill-warn"],[1,"pill","pill-info"],[1,"empty"],[1,"tips-grid"],[1,"skel","card-skel"],[1,"tip-card"],[1,"sev-bar"],[1,"tip-body"],[1,"tip-title"],[1,"tip-why"],[1,"tip-grid"],[1,"kv-block"],[1,"eyebrow"],[1,"mono","evidence-session"],[1,"mono","evidence-detail"],[1,"impact","mono"],[1,"actions"],[1,"fix-row"],[1,"fix-label"],[1,"mono","fix-code"],["type","button","title","Copy",1,"ghost","copy",3,"click"],["type","button",1,"primary"],["type","button",1,"secondary"]],template:function(t,d){t&1&&(e(0,"div",0)(1,"header",1)(2,"div",2)(3,"div",3),i(4,"Tips"),n(),e(5,"div",4),i(6,"A senior teammate reviewed your transcripts"),n()(),e(7,"div",5)(8,"span",6),i(9),n(),e(10,"span",7),i(11),n(),e(12,"span",8),i(13),n()()(),C(14,F,2,1)(15,N,2,0,"div",9)(16,A,3,0,"div",10),n()),t&2&&(a(9),p("",d.counts().error," urgent"),a(2),p("",d.counts().warn," warn"),a(2),p("",d.counts().info," info"),a(),E(d.resource.state().loading?14:d.ordered().length===0?15:16))},styles:["[_nghost-%COMP%]{display:contents}.page[_ngcontent-%COMP%]{flex:1;padding:18px}.page-head[_ngcontent-%COMP%]{display:flex;gap:12px;margin-bottom:18px;align-items:flex-start}.title-block[_ngcontent-%COMP%]{flex:1}.title[_ngcontent-%COMP%]{font-size:var(--fs-title);font-weight:600;letter-spacing:-.01em}.sub[_ngcontent-%COMP%]{color:var(--text-secondary);margin-top:2px}.pills[_ngcontent-%COMP%]{display:flex;gap:6px}.pill[_ngcontent-%COMP%]{display:inline-flex;align-items:center;font-size:11px;font-weight:600;padding:2px 8px;border-radius:var(--r-pill)}.pill-error[_ngcontent-%COMP%]{color:var(--error);background:var(--error-soft)}.pill-warn[_ngcontent-%COMP%]{color:var(--warn);background:var(--warn-soft)}.pill-info[_ngcontent-%COMP%]{color:var(--info);background:var(--info-soft)}.tips-grid[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:12px;max-width:860px}.tip-card[_ngcontent-%COMP%]{background:var(--bg-panel);border:1px solid var(--border-subtle);border-radius:var(--r-lg);overflow:hidden;display:flex}.tip-card[data-sev=error][_ngcontent-%COMP%] .sev-bar[_ngcontent-%COMP%]{background:var(--error)}.tip-card[data-sev=warn][_ngcontent-%COMP%] .sev-bar[_ngcontent-%COMP%]{background:var(--warn)}.tip-card[data-sev=info][_ngcontent-%COMP%] .sev-bar[_ngcontent-%COMP%]{background:var(--info)}.sev-bar[_ngcontent-%COMP%]{width:3px;flex-shrink:0}.tip-body[_ngcontent-%COMP%]{padding:14px 16px;flex:1;min-width:0}.tip-title[_ngcontent-%COMP%]{font-size:14px;font-weight:600;letter-spacing:-.01em;margin-bottom:6px}.tip-why[_ngcontent-%COMP%]{color:var(--text-secondary);font-size:12.5px;line-height:1.6;margin-bottom:12px}.tip-grid[_ngcontent-%COMP%]{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-bottom:14px}.kv-block[_ngcontent-%COMP%]{background:var(--bg-canvas);border:1px solid var(--border-subtle);border-radius:var(--r-md);padding:10px}.eyebrow[_ngcontent-%COMP%]{font-size:10.5px;font-weight:600;text-transform:uppercase;letter-spacing:.07em;color:var(--text-muted);margin-bottom:5px}.evidence-session[_ngcontent-%COMP%]{font-size:11.5px;color:var(--accent)}.evidence-detail[_ngcontent-%COMP%]{color:var(--text-secondary);font-size:11px;margin-top:4px}.impact[_ngcontent-%COMP%]{font-size:16px;font-weight:700;color:var(--success)}.actions[_ngcontent-%COMP%]{display:flex;gap:8px;align-items:center}.fix-row[_ngcontent-%COMP%]{flex:1;min-width:0;display:flex;align-items:center;gap:8px;background:var(--bg-canvas);border:1px solid var(--border-subtle);border-radius:7px;padding:6px 10px}.fix-label[_ngcontent-%COMP%]{color:var(--text-muted);font-size:10.5px}.fix-code[_ngcontent-%COMP%]{flex:1;min-width:0;color:var(--text-primary);font-size:11.5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.primary[_ngcontent-%COMP%], .secondary[_ngcontent-%COMP%], .ghost[_ngcontent-%COMP%]{font-family:inherit;font-size:var(--fs-sm);font-weight:500;padding:5px 11px;border-radius:5px;cursor:pointer;border:1px solid transparent}.primary[_ngcontent-%COMP%]{background:var(--accent-strong);color:#fff}.primary[_ngcontent-%COMP%]:hover{background:var(--accent)}.secondary[_ngcontent-%COMP%]{background:var(--bg-elevated);color:var(--text-primary);border-color:var(--border-subtle)}.secondary[_ngcontent-%COMP%]:hover{background:#283039;border-color:var(--border-strong)}.ghost[_ngcontent-%COMP%]{background:transparent;color:var(--text-muted)}.ghost[_ngcontent-%COMP%]:hover{background:var(--bg-hover);color:var(--text-primary)}.copy[_ngcontent-%COMP%]{padding:4px 8px}.skel[_ngcontent-%COMP%]{background:var(--bg-elevated);border-radius:5px;animation:_ngcontent-%COMP%_skeleton 1.4s ease-in-out infinite}.card-skel[_ngcontent-%COMP%]{height:200px;margin-bottom:12px}.empty[_ngcontent-%COMP%]{color:var(--text-muted);font-size:13px;padding:40px;text-align:center}.mono[_ngcontent-%COMP%]{font-family:var(--font-mono)}@keyframes _ngcontent-%COMP%_skeleton{0%,to{opacity:.5}50%{opacity:.9}}"],changeDetection:0})};export{T as Tips};
@@ -1 +0,0 @@
1
- import{a as Q}from"./chunk-4LHBWWP7.js";import{a as J}from"./chunk-ZABKKHJ3.js";import{g as q}from"./chunk-RP3WU5Y6.js";import{$a as O,Aa as r,Cb as Y,Eb as Z,Gb as U,K as A,Ka as k,Kb as p,Nb as X,Ob as g,P as V,Q as H,R as P,Ra as x,S as j,Sa as f,Ta as _,Va as I,Wa as b,Xa as y,Ya as N,Za as a,_a as s,aa as z,ab as C,bb as M,cb as $,db as G,hb as F,ib as K,jb as u,pb as S,qb as R,sb as c,tb as l,ub as w,vb as W}from"./chunk-WVCKOJZL.js";function me(o,e){if(o&1&&(P(),$(0,"path",1)(1,"path",2)),o&2){let t=u();x("d",t.fillD())("fill",t.color()),r(),x("d",t.pathD())("stroke",t.color())}}var L=class o{series=g([]);color=g("var(--accent)");height=g(200);hover=X();width=600;stats=p(()=>{let e=this.series();if(!e.length)return{max:1,min:0};let t=e.map(n=>n.cost);return{max:Math.max(...t,.01),min:0}});pathD=p(()=>{let e=this.series();if(!e.length)return"";let t=this.width,n=this.height(),{max:i}=this.stats();return e.map((d,m)=>{let v=m/Math.max(1,e.length-1)*t,h=n-d.cost/i*(n-20)-10;return(m===0?"M":"L")+v.toFixed(2)+" "+h.toFixed(2)}).join(" ")});fillD=p(()=>{let e=this.pathD();return e?e+` L ${this.width} ${this.height()} L 0 ${this.height()} Z`:""});onLeave(){this.hover.emit(null)}onMove(e){let n=e.currentTarget.getBoundingClientRect(),i=(e.clientX-n.left)/n.width,d=this.series();if(!d.length)return;let m=Math.min(d.length-1,Math.max(0,Math.round(i*(d.length-1)))),v=d[m];v&&this.hover.emit(v)}static \u0275fac=function(t){return new(t||o)};static \u0275cmp=k({type:o,selectors:[["app-line-chart"]],inputs:{series:[1,"series"],color:[1,"color"],height:[1,"height"]},outputs:{hover:"hover"},decls:2,vars:3,consts:[["width","100%","preserveAspectRatio","none",1,"line-chart",3,"mousemove","mouseleave"],["opacity","0.10"],["fill","none","stroke-width","1.6","stroke-linecap","round","stroke-linejoin","round"]],template:function(t,n){t&1&&(P(),C(0,"svg",0),K("mousemove",function(d){return n.onMove(d)})("mouseleave",function(){return n.onLeave()}),f(1,me,2,4),M()),t&2&&(x("viewBox","0 0 "+n.width+" "+n.height())("height",n.height()),r(),_(n.pathD()?1:-1))},styles:["[_nghost-%COMP%]{display:block}.line-chart[_ngcontent-%COMP%]{cursor:crosshair}"],changeDetection:0})};var ue=(o,e)=>e.label;function ge(o,e){if(o&1&&(P(),$(0,"path")),o&2){let t=e.$implicit;x("d",t.d)("fill",t.color)}}function he(o,e){if(o&1&&(C(0,"div",3),c(1),M()),o&2){let t=u();r(),l(t.centerSub())}}var T=class o{data=g([]);size=g(150);centerLabel=g("");centerSub=g("");arcs=p(()=>{let e=this.data(),t=e.reduce((h,E)=>h+E.cost,0);if(t<=0)return[];let i=this.size()/2,d=i*.6,m=-Math.PI/2,v=[];for(let h of e){let E=h.cost/t*Math.PI*2,D=m+E,B=E>Math.PI?1:0,ie=i+Math.cos(m)*i,re=i+Math.sin(m)*i,ae=i+Math.cos(D)*i,se=i+Math.sin(D)*i,ce=i+Math.cos(D)*d,de=i+Math.sin(D)*d,le=i+Math.cos(m)*d,pe=i+Math.sin(m)*d;v.push({d:`M ${ie} ${re} A ${i} ${i} 0 ${B} 1 ${ae} ${se} L ${ce} ${de} A ${d} ${d} 0 ${B} 0 ${le} ${pe} Z`,color:h.color,label:h.short||h.model||""}),m=D}return v});static \u0275fac=function(t){return new(t||o)};static \u0275cmp=k({type:o,selectors:[["app-donut"]],inputs:{data:[1,"data"],size:[1,"size"],centerLabel:[1,"centerLabel"],centerSub:[1,"centerSub"]},decls:8,vars:9,consts:[[1,"donut"],[1,"donut-center"],[1,"center-label"],[1,"center-sub"]],template:function(t,n){t&1&&(C(0,"div",0),P(),C(1,"svg"),b(2,ge,1,2,":svg:path",null,ue),M(),j(),C(4,"div",1)(5,"div",2),c(6),M(),f(7,he,2,1,"div",3),M()()),t&2&&(S("width",n.size(),"px")("height",n.size(),"px"),r(),x("width",n.size())("height",n.size())("viewBox","0 0 "+n.size()+" "+n.size()),r(),y(n.arcs()),r(4),l(n.centerLabel()),r(),_(n.centerSub()?7:-1))},styles:["[_nghost-%COMP%]{display:inline-block}.donut[_ngcontent-%COMP%]{position:relative}.donut-center[_ngcontent-%COMP%]{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;pointer-events:none}.center-label[_ngcontent-%COMP%]{font-variant-numeric:tabular-nums;font-size:18px;font-weight:700;color:var(--text-primary)}.center-sub[_ngcontent-%COMP%]{color:var(--text-muted);font-size:10.5px;margin-top:2px}"],changeDetection:0})};var ve=()=>[0,1,2,3],xe=(o,e)=>e.model,fe=(o,e)=>e.id;function _e(o,e){if(o&1){let t=G();a(0,"button",21),F("click",function(){let i=V(t).$implicit,d=u();return H(d.setRange(i))}),c(1),s()}if(o&2){let t=e.$implicit,n=u();R("active",n.range()===t),r(),w(" ",t==="today"?"Today":t==="week"?"Week":t==="month"?"Month":"All"," ")}}function be(o,e){if(o&1&&(a(0,"div",12)(1,"div",22),c(2),s(),a(3,"div",11),c(4),s()()),o&2){let t=u();r(2),l(t.fmt$(t.hovered().cost)),r(2),W("",t.hovered().prompts," prompts \xB7 day ",t.hovered().day)}}function ye(o,e){if(o&1&&(a(0,"div",18),O(1,"span",23),a(2,"span",24),c(3),s(),a(4,"span",25),c(5),s(),a(6,"span",26),c(7),s()()),o&2){let t=e.$implicit,n=u();r(),S("background",t.color),r(2),l(t.short),r(2),l(n.fmt$(t.cost)),r(2),w("",n.percentOf(t.cost,n.total()),"%")}}function Ce(o,e){o&1&&O(0,"div",27)}function Me(o,e){o&1&&b(0,Ce,1,0,"div",27,I),o&2&&y(Y(0,ve))}function Pe(o,e){if(o&1&&(a(0,"div",29)(1,"span",30),c(2),s(),a(3,"div",31)(4,"div",32),c(5),s(),a(6,"div",33),O(7,"span",34),s()(),a(8,"span",35),c(9),s(),a(10,"span",36),c(11),s(),a(12,"span",37),c(13),Z(14,"number"),s(),a(15,"span",38),c(16),s()()),o&2){let t=e.$implicit,n=e.$index,i=u(2);R("first",n===0),r(2),l(n+1),r(3),l(t.text),r(2),S("width",t.cost_usd/i.maxPrompt()*100,"%")("background",t.cost_usd/i.maxPrompt()>.66?"var(--error)":"var(--accent)"),r(2),l(i.modelShort(t.model)),r(2),l(i.fmtK(i.promptTokens(t))),r(),S("color",i.cacheColor(i.cacheRate(t))),r(),w("",U(14,14,i.cacheRate(t)*100,"1.0-0"),"%"),r(3),l(i.fmt$(t.cost_usd))}}function ke(o,e){if(o&1&&b(0,Pe,17,17,"div",28,fe),o&2){let t=u();y(t.topPrompts())}}var Se={"claude-opus-4-7":"#A586F5","claude-opus-4":"#A586F5","claude-sonnet-4-6":"#5B93F2","claude-sonnet-4-7":"#5B93F2","claude-sonnet-4":"#5B93F2","claude-haiku-4-5":"#29D2BE","claude-haiku-4":"#29D2BE"},ne={"claude-opus-4-7":"Opus 4.7","claude-opus-4":"Opus 4","claude-sonnet-4-6":"Sonnet 4.6","claude-sonnet-4-7":"Sonnet 4.7","claude-sonnet-4":"Sonnet 4","claude-haiku-4-5":"Haiku 4.5","claude-haiku-4":"Haiku 4"},oe=class o{api=A(J);range=z("month");ranges=["today","week","month","all"];hovered=z(null);resource=Q(this.api,()=>`/api/claude/costs?range=${this.range()}`);series=p(()=>this.resource.state().data?.series??[]);topPrompts=p(()=>(this.resource.state().data?.topPrompts??[]).slice(0,12));maxPrompt=p(()=>{let e=this.topPrompts();return Math.max(.01,...e.map(t=>t.cost_usd??0))});byModel=p(()=>(this.resource.state().data?.byModel??[]).map(t=>({model:t.model,short:ne[t.model]||t.model,cost:t.cost||0,color:Se[t.model]||"#5C6573"})));total=p(()=>this.resource.state().data?.total??0);setRange(e){this.range.set(e)}onHover(e){this.hovered.set(e)}fmt$(e){return"$"+e.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2})}fmtK(e){return e>=1e3?(e/1e3).toFixed(e>=1e4?0:1)+"k":String(e)}promptTokens(e){return(e.input_tokens??0)+(e.output_tokens??0)+(e.cache_creation_tokens??0)+(e.cache_read_tokens??0)}cacheRate(e){let t=(e.input_tokens??0)+(e.cache_creation_tokens??0)+(e.cache_read_tokens??0);return t>0?(e.cache_read_tokens??0)/t:0}cacheColor(e){return e>=.7?"var(--success)":e>=.5?"var(--warn)":"var(--error)"}modelShort(e){return e?ne[e]||e.replace(/^claude-/,""):"?"}percentOf(e,t){return t>0?Math.round(e/t*100):0}static \u0275fac=function(t){return new(t||o)};static \u0275cmp=k({type:o,selectors:[["app-costs"]],decls:34,vars:11,consts:[[1,"page","scroll-y"],[1,"page-head"],[1,"title-block"],[1,"title"],[1,"sub"],[1,"range-selector"],["type","button",1,"range-opt",3,"active"],[1,"top-grid"],[1,"card","card-pad","chart-card"],[1,"chart-header"],[1,"big-number","mono"],[1,"muted"],[1,"hovered","mono"],["color","var(--accent)",3,"hover","series","height"],[1,"card","card-pad","donut-card"],[1,"card-title"],[3,"data","size","centerLabel","centerSub"],[1,"model-legend"],[1,"legend-row"],[1,"card","card-pad"],[1,"card-title","row-title"],["type","button",1,"range-opt",3,"click"],[1,"hov-cost"],[1,"swatch"],[1,"mono","grow"],[1,"mono"],[1,"mono","muted"],[1,"skel","row-skel"],[1,"prompt-row",3,"first"],[1,"prompt-row"],[1,"mono","muted","rank"],[1,"prompt-grow"],[1,"prompt-text"],[1,"bar-track"],[1,"bar-fill"],[1,"mono","muted","prompt-model"],[1,"mono","muted","prompt-toks"],[1,"mono","cache-cell"],[1,"mono","cost-cell"]],template:function(t,n){t&1&&(a(0,"div",0)(1,"header",1)(2,"div",2)(3,"div",3),c(4,"Costs"),s(),a(5,"div",4),c(6,"Where the money goes"),s()(),a(7,"div",5),b(8,_e,2,3,"button",6,I),s()(),a(10,"div",7)(11,"div",8)(12,"div",9)(13,"div")(14,"div",10),c(15),s(),a(16,"div",11),c(17),s()(),f(18,be,5,3,"div",12),s(),a(19,"app-line-chart",13),F("hover",function(d){return n.onHover(d)}),s()(),a(20,"div",14)(21,"div",15),c(22,"By model"),s(),O(23,"app-donut",16),a(24,"div",17),b(25,ye,8,5,"div",18,xe),s()()(),a(27,"div",19)(28,"div",20),c(29," Most expensive prompts "),a(30,"span",11),c(31),s()(),f(32,Me,2,1)(33,ke,2,0),s()()),t&2&&(r(8),y(n.ranges),r(7),l(n.fmt$(n.total())),r(2),w("total \xB7 ",n.range()),r(),_(n.hovered()?18:-1),r(),N("series",n.series())("height",200),r(4),N("data",n.byModel())("size",150)("centerLabel","$"+n.total().toFixed(0))("centerSub",n.range()+" window"),r(2),y(n.byModel()),r(6),w("\xB7 top ",n.topPrompts().length),r(),_(n.resource.state().loading?32:33))},dependencies:[L,T,q],styles:["[_nghost-%COMP%]{display:contents}.page[_ngcontent-%COMP%]{flex:1;padding:18px}.page-head[_ngcontent-%COMP%]{display:flex;gap:12px;align-items:flex-start;margin-bottom:14px}.title-block[_ngcontent-%COMP%]{flex:1}.title[_ngcontent-%COMP%]{font-size:var(--fs-title);font-weight:600;letter-spacing:-.01em}.sub[_ngcontent-%COMP%]{color:var(--text-secondary);margin-top:2px}.range-selector[_ngcontent-%COMP%]{display:inline-flex;background:var(--bg-canvas);border:1px solid var(--border-subtle);border-radius:7px;padding:2px;gap:2px}.range-opt[_ngcontent-%COMP%]{border:none;cursor:pointer;border-radius:5px;padding:5px 12px;font-size:var(--fs-sm);font-weight:500;font-family:var(--font-ui);background:transparent;color:var(--text-muted)}.range-opt.active[_ngcontent-%COMP%]{background:var(--bg-elevated);color:var(--text-primary)}.card[_ngcontent-%COMP%]{background:var(--bg-panel);border:1px solid var(--border-subtle);border-radius:var(--r-lg)}.card-pad[_ngcontent-%COMP%]{padding:14px}.card-title[_ngcontent-%COMP%]{font-weight:600;font-size:12.5px}.row-title[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;margin-bottom:12px}.muted[_ngcontent-%COMP%]{color:var(--text-muted)}.mono[_ngcontent-%COMP%]{font-family:var(--font-mono)}.top-grid[_ngcontent-%COMP%]{display:grid;grid-template-columns:1.3fr 1fr;gap:14px;margin-bottom:14px}.chart-card[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:10px}.chart-header[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:flex-start}.big-number[_ngcontent-%COMP%]{font-size:34px;font-weight:700;letter-spacing:-.02em}.hovered[_ngcontent-%COMP%]{text-align:right}.hov-cost[_ngcontent-%COMP%]{font-size:13px;font-weight:600}.donut-card[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:center;gap:10px}.model-legend[_ngcontent-%COMP%]{width:100%;display:flex;flex-direction:column;gap:6px}.legend-row[_ngcontent-%COMP%]{display:flex;gap:8px;align-items:center;font-size:11.5px}.swatch[_ngcontent-%COMP%]{width:9px;height:9px;border-radius:3px}.grow[_ngcontent-%COMP%]{flex:1}.prompt-row[_ngcontent-%COMP%]{display:grid;grid-template-columns:18px 1fr 70px 54px 44px 56px;gap:12px;align-items:center;padding:9px 0;border-top:1px solid var(--border-subtle)}.prompt-row.first[_ngcontent-%COMP%]{border-top:none}.rank[_ngcontent-%COMP%]{width:16px;font-size:11px}.prompt-grow[_ngcontent-%COMP%]{min-width:0}.prompt-text[_ngcontent-%COMP%]{font-size:12.5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.bar-track[_ngcontent-%COMP%]{height:4px;max-width:280px;background:#ffffff0f;border-radius:999px;margin-top:4px;overflow:hidden}.bar-fill[_ngcontent-%COMP%]{display:block;height:100%;border-radius:999px}.prompt-model[_ngcontent-%COMP%]{font-size:10.5px;text-align:right}.prompt-toks[_ngcontent-%COMP%], .cache-cell[_ngcontent-%COMP%]{font-size:11px;text-align:right}.cost-cell[_ngcontent-%COMP%]{font-size:13px;font-weight:600;text-align:right}.skel[_ngcontent-%COMP%]{background:var(--bg-elevated);border-radius:5px;animation:_ngcontent-%COMP%_skeleton 1.4s ease-in-out infinite}.row-skel[_ngcontent-%COMP%]{height:30px;margin:6px 0}@keyframes _ngcontent-%COMP%_skeleton{0%,to{opacity:.5}50%{opacity:.9}}"],changeDetection:0})};export{oe as Costs};
@@ -1 +0,0 @@
1
- import{a as z}from"./chunk-5OQKAJAE.js";import{a as E}from"./chunk-4LHBWWP7.js";import"./chunk-FTESTUEO.js";import{a as T}from"./chunk-47QYKLE5.js";import{a as w}from"./chunk-ZABKKHJ3.js";import"./chunk-L4TVIPSR.js";import"./chunk-RP3WU5Y6.js";import{$a as M,Aa as o,K as f,Ka as y,Kb as m,P as b,Q as C,Ra as x,Sa as p,Ta as s,Va as k,Wa as g,Xa as u,Za as i,_a as r,a as _,aa as h,b as v,db as P,hb as O,jb as c,qb as D,sb as a,tb as l,ub as S}from"./chunk-WVCKOJZL.js";var j=(e,n)=>n.id;function N(e,n){e&1&&M(0,"app-pick-project-empty",0)}function $(e,n){if(e&1){let t=P();i(0,"button",10),O("click",function(){let I=b(t).$implicit,L=c(2);return C(L.toggleFilter(I))}),i(1,"span",11),a(2),r(),i(3,"span",12),a(4),r()()}if(e&2){let t=n.$implicit,d=c(2);D("active",d.stateFilter()[t]),x("data-state",t),o(2),l(t),o(2),l(d.counts()[t])}}function A(e,n){e&1&&(i(0,"div",9)(1,"div",13),a(2,"\u2713"),r(),i(3,"div",14),a(4,"All links in good standing"),r(),i(5,"div",15),a(6,"Nothing has drifted. Every spec link points at code that still matches."),r()())}function R(e,n){if(e&1&&a(0),e&2){let t=c().$implicit;S(" \xB7 ",t.driftAxis," ")}}function V(e,n){if(e&1&&(i(0,"div",20),a(1),r()),e&2){let t=c().$implicit;o(),l(t.specTitle)}}function q(e,n){if(e&1&&(i(0,"div",16)(1,"span",17),a(2),p(3,R,1,1),r(),i(4,"div",18)(5,"div",19),a(6),r(),p(7,V,2,1,"div",20),r(),i(8,"div",21)(9,"span",22),a(10,"\u2192"),r(),i(11,"span",23),a(12),i(13,"span",24),a(14,":"),r(),a(15),r()(),i(16,"span",25),a(17),r(),i(18,"span",26),a(19),r()()),e&2){let t=n.$implicit,d=c(3);x("data-state",t.state),o(2),l(t.state),o(),s(t.driftAxis?3:-1),o(3),l(t.specId),o(),s(t.specTitle?7:-1),o(5),l(t.targetFilePath),o(3),l(t.targetQualifiedName),o(2),l(t.provenance),o(2),l(d.ageOf(t))}}function B(e,n){if(e&1&&g(0,q,20,9,"div",16,j),e&2){let t=c(2);u(t.visibleLinks())}}function Q(e,n){if(e&1&&(i(0,"div",1)(1,"header",2)(2,"div",3)(3,"div",4),a(4,"Drift queue"),r(),i(5,"div",5),a(6),r()()(),i(7,"div",6),g(8,$,5,5,"button",7,k),r(),i(10,"div",8),p(11,A,7,0,"div",9)(12,B,2,0),r()()),e&2){let t=c();o(6),l(t.resource.state().loading?"loading\u2026":t.allLinks().length+" links need attention"),o(2),u(t.states),o(3),s(t.visibleLinks().length===0?11:12)}}var F=class e{api=f(w);projects=f(T);stateFilter=h({drifted:!0,broken:!0,orphaned:!0});resource=E(this.api,()=>`/api/drift?state=drifted,broken,orphaned${this.projects.projectQuery("&")}`);allLinks=m(()=>this.resource.state().data?.links??[]);visibleLinks=m(()=>{let n=this.stateFilter();return this.allLinks().filter(t=>n[t.state])});counts=m(()=>{let n={drifted:0,broken:0,orphaned:0};for(let t of this.allLinks())t.state in n&&n[t.state]++;return n});toggleFilter(n){this.stateFilter.update(t=>v(_({},t),{[n]:!t[n]}))}ageOf(n){if(!n.updatedAt)return"";let t=Date.now()-n.updatedAt;return t<6e4?"just now":t<36e5?Math.round(t/6e4)+"m":t<864e5?Math.round(t/36e5)+"h":Math.round(t/864e5)+"d"}states=["drifted","broken","orphaned"];static \u0275fac=function(t){return new(t||e)};static \u0275cmp=y({type:e,selectors:[["app-drift"]],decls:2,vars:1,consts:[["surface","The drift queue"],[1,"page"],[1,"page-head"],[1,"title-block"],[1,"title"],[1,"sub"],[1,"filter-bar"],["type","button",1,"filter-chip",3,"active"],[1,"scroll-y","list-frame"],[1,"empty"],["type","button",1,"filter-chip",3,"click"],[1,"cap"],[1,"count"],[1,"empty-icon"],[1,"empty-title"],[1,"empty-sub"],[1,"link-row"],[1,"state-pill"],[1,"spec-block"],[1,"spec-id","mono"],[1,"spec-title"],[1,"target"],[1,"target-arrow"],[1,"mono","target-path"],[1,"muted"],[1,"provenance"],[1,"age","mono","muted"]],template:function(t,d){t&1&&p(0,N,1,0,"app-pick-project-empty",0)(1,Q,13,2,"div",1),t&2&&s(d.resource.state().noProject?0:1)},dependencies:[z],styles:["[_nghost-%COMP%]{display:contents}.page[_ngcontent-%COMP%]{flex:1;display:flex;flex-direction:column;min-height:0;padding:16px 18px 0}.page-head[_ngcontent-%COMP%]{margin-bottom:12px}.title[_ngcontent-%COMP%]{font-size:var(--fs-title);font-weight:600;letter-spacing:-.01em}.sub[_ngcontent-%COMP%]{color:var(--text-secondary);margin-top:2px}.filter-bar[_ngcontent-%COMP%]{display:flex;gap:8px;margin-bottom:12px;flex-wrap:wrap}.filter-chip[_ngcontent-%COMP%]{height:26px;padding:0 10px;border-radius:999px;display:inline-flex;align-items:center;gap:6px;font-size:11.5px;font-weight:500;cursor:pointer;text-transform:capitalize;border:1px solid var(--border-subtle);background:var(--bg-panel);color:var(--text-muted);font-family:inherit}.filter-chip.active[data-state=drifted][_ngcontent-%COMP%]{background:var(--warn-soft);color:var(--warn);border-color:transparent}.filter-chip.active[data-state=broken][_ngcontent-%COMP%], .filter-chip.active[data-state=orphaned][_ngcontent-%COMP%]{background:var(--error-soft);color:var(--error);border-color:transparent}.count[_ngcontent-%COMP%]{opacity:.7;font-variant-numeric:tabular-nums}.list-frame[_ngcontent-%COMP%]{flex:1;border-top:1px solid var(--border-subtle);margin:0 -18px}.link-row[_ngcontent-%COMP%]{display:grid;grid-template-columns:130px 220px 1fr 110px 60px;gap:12px;padding:11px 18px;border-bottom:1px solid var(--border-subtle);align-items:center;font-size:12.5px}.link-row[_ngcontent-%COMP%]:hover{background:var(--bg-hover)}.state-pill[_ngcontent-%COMP%]{display:inline-flex;align-items:center;font-size:11px;font-weight:600;padding:2px 8px;border-radius:var(--r-pill)}.link-row[data-state=drifted][_ngcontent-%COMP%] .state-pill[_ngcontent-%COMP%]{color:var(--warn);background:var(--warn-soft)}.link-row[data-state=broken][_ngcontent-%COMP%] .state-pill[_ngcontent-%COMP%], .link-row[data-state=orphaned][_ngcontent-%COMP%] .state-pill[_ngcontent-%COMP%]{color:var(--error);background:var(--error-soft)}.spec-id[_ngcontent-%COMP%]{font-size:12px;color:var(--accent)}.spec-title[_ngcontent-%COMP%]{font-size:11.5px;color:var(--text-secondary);margin-top:2px}.target[_ngcontent-%COMP%]{min-width:0;display:flex;align-items:center;gap:8px}.target-arrow[_ngcontent-%COMP%]{color:var(--text-muted);font-size:14px}.target-path[_ngcontent-%COMP%]{font-size:11.5px;color:var(--text-secondary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.muted[_ngcontent-%COMP%]{color:var(--text-muted)}.provenance[_ngcontent-%COMP%]{font-size:11px;color:var(--text-muted)}.age[_ngcontent-%COMP%]{font-size:11px;text-align:right}.empty[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:center;padding:60px 20px;text-align:center;color:var(--text-secondary)}.empty-icon[_ngcontent-%COMP%]{width:52px;height:52px;background:var(--bg-panel);border:1px solid var(--border-subtle);border-radius:14px;display:grid;place-items:center;color:var(--success);font-size:24px;margin-bottom:16px}.empty-title[_ngcontent-%COMP%]{font-size:15px;font-weight:600;margin-bottom:6px;color:var(--text-primary)}.empty-sub[_ngcontent-%COMP%]{font-size:12.5px;line-height:1.55;max-width:360px}.mono[_ngcontent-%COMP%]{font-family:var(--font-mono)}"],changeDetection:0})};export{F as Drift};
@@ -1 +0,0 @@
1
- import{a as j,c as $,d as z}from"./chunk-MW7ICSRM.js";import{a as W}from"./chunk-47QYKLE5.js";import{a as N}from"./chunk-ZABKKHJ3.js";import"./chunk-L4TVIPSR.js";import{f as A}from"./chunk-RP3WU5Y6.js";import{$a as M,Aa as a,Cb as E,Eb as T,Fb as I,K as _,Ka as R,Kb as y,P as b,Q as C,Ra as f,Sa as c,Ta as p,V as S,Wa as w,Xa as k,Ya as v,Za as d,_a as o,aa as g,db as O,hb as h,jb as l,sb as s,tb as u,ub as x,vb as D}from"./chunk-WVCKOJZL.js";var L=()=>["/runs"],F=(n,e)=>e.id;function q(n,e){if(n&1&&(d(0,"div",13)(1,"span",14),s(2),o(),d(3,"h2",15),s(4),o(),d(5,"span",16),M(6,"span",17),s(7),o()(),d(8,"div",18),s(9),d(10,"span"),s(11),o()()),n&2){let t=e,r=l();a(),f("data-status",t.status),a(),u(t.status),a(2),u(t.workflowName),a(),v("title",r.streamStatus()),f("data-stream",r.streamStatus()),a(2),x("",r.streamStatus()==="live"?"live":r.streamStatus()," "),a(2),x(" ",t.id),a(2),D(" \xB7 started ",r.fmtTime(t.startedAt)," \xB7 ",r.fmtDuration(t.startedAt,t.completedAt))}}function B(n,e){n&1&&(d(0,"div",4),s(1,"Loading run\u2026"),o())}function Q(n,e){if(n&1&&(d(0,"div",5),s(1),o()),n&2){let t=l();a(),u(t.error())}}function U(n,e){if(n&1){let t=O();d(0,"button",21),h("click",function(){b(t);let i=l(2);return C(i.approve())}),s(1,"Approve"),o(),d(2,"button",22),h("click",function(){b(t);let i=l(2);return C(i.reject())}),s(3,"Reject"),o()}if(n&2){let t=l(2);v("disabled",t.actionPending()!==null),a(2),v("disabled",t.actionPending()!==null)}}function J(n,e){if(n&1){let t=O();d(0,"button",21),h("click",function(){b(t);let i=l(2);return C(i.resume())}),s(1,"Resume"),o()}if(n&2){let t=l(2);v("disabled",t.actionPending()!==null)}}function G(n,e){if(n&1){let t=O();d(0,"button",23),h("click",function(){b(t);let i=l(2);return C(i.cancel())}),s(1,"Cancel"),o()}if(n&2){let t=l(2);v("disabled",t.actionPending()!==null)}}function H(n,e){if(n&1&&(c(0,U,4,2),c(1,J,2,1,"button",19),c(2,G,2,1,"button",20)),n&2){let t=e,r=l();p(r.approvalPending()?0:-1),a(),p(t.status==="paused"?1:-1),a(),p(t.status==="running"||t.status==="paused"?2:-1)}}function K(n,e){if(n&1&&(d(0,"div",7),s(1),o()),n&2){let t=l();a(),x("Action failed: ",t.actionError())}}function X(n,e){n&1&&(d(0,"div",7),s(1),o()),n&2&&(a(),u(e))}function Y(n,e){n&1&&(d(0,"div",11),s(1,"Waiting for the first step to start\u2026"),o())}function Z(n,e){if(n&1&&(d(0,"span",28),s(1),o()),n&2){let t=l().$implicit;a(),u(t.kind)}}function tt(n,e){if(n&1&&(d(0,"pre",31),s(1),o()),n&2){let t=l().$implicit;a(),u(t.error)}}function et(n,e){if(n&1&&(d(0,"pre",32),s(1),T(2,"json"),o()),n&2){let t=l().$implicit;a(),u(I(2,1,t.output))}}function nt(n,e){if(n&1&&(d(0,"article",24)(1,"header",25)(2,"span",26),s(3),o(),d(4,"span",27),s(5),o(),c(6,Z,2,1,"span",28),M(7,"span",29),d(8,"span",30),s(9),o()(),c(10,tt,2,1,"pre",31),c(11,et,3,3,"pre",32),o()),n&2){let t=e.$implicit,r=l(2);f("data-step-status",t.status),a(2),f("data-step-status",t.status),a(),u(t.status),a(2),u(t.id),a(),p(t.kind?6:-1),a(3),u(r.fmtDuration(t.startedAt,t.endedAt)),a(),p(t.error?10:-1),a(),p(t.output!==void 0?11:-1)}}function rt(n,e){if(n&1&&w(0,nt,12,8,"article",24,F),n&2){let t=l();k(t.steps())}}function it(n,e){n&1&&(d(0,"div",11),s(1,"No events yet."),o())}function at(n,e){n&1&&(d(0,"div",38),s(1),o()),n&2&&(a(),u(e))}function ot(n,e){if(n&1&&(d(0,"li",33)(1,"span",34),s(2),o(),M(3,"span",35),d(4,"div",36)(5,"div",37),s(6),o(),c(7,at,2,1,"div",38),o()()),n&2){let t,r=e.$implicit,i=l(2);f("data-event-type",r.eventType),a(2),u(i.fmtTime(r.createdAt)),a(4),u(i.eventLabel(r)),a(),p((t=i.eventDetail(r))?7:-1,t)}}function dt(n,e){if(n&1&&(d(0,"ol",12),w(1,ot,8,4,"li",33,F),o()),n&2){let t=l();a(),k(t.events())}}var V=class n{api=_(N);projects=_(W);route=_(j);router=_($);destroyRef=_(S);runId=g("");run=g(null);events=g([]);loading=g(!0);error=g(null);streamStatus=g("connecting");actionPending=g(null);actionError=g(null);closeStream=null;status=y(()=>this.run()?.status??null);isTerminal=y(()=>{let e=this.status();return e==="completed"||e==="failed"||e==="cancelled"});steps=y(()=>{let e=new Map;for(let t of this.events()){let r=t.data?.stepId??t.stepId??"";if(!r)continue;e.has(r)||e.set(r,{id:r,status:"pending"});let i=e.get(r);t.eventType==="step_started"?(i.status="running",i.startedAt=t.createdAt,i.kind=t.data?.kind??i.kind):t.eventType==="step_completed"?(i.status="completed",i.endedAt=t.createdAt,i.output=t.data?.output):t.eventType==="step_failed"?(i.status="failed",i.endedAt=t.createdAt,i.error=t.data?.error??"failed"):t.eventType==="step_skipped"&&(i.status="skipped",i.endedAt=t.createdAt)}return Array.from(e.values())});approvalPending=y(()=>[...this.events()].reverse().find(t=>t.eventType==="approval_requested"||t.eventType==="approval_granted"||t.eventType==="approval_rejected")?.eventType==="approval_requested");ngOnInit(){let e=this.route.snapshot.paramMap.get("id")??"";if(!e){this.error.set("No run id"),this.loading.set(!1);return}this.runId.set(e),this.bootstrap(e)}ngOnDestroy(){this.closeStream?.(),this.closeStream=null}async bootstrap(e){try{let t=await this.api.get(`/api/workflows/runs/${encodeURIComponent(e)}${this.projects.projectQuery()}`);this.run.set(t.run),this.events.set(t.events??[]),this.loading.set(!1),this.isTerminal()?this.streamStatus.set("closed"):this.openStream(e)}catch(t){this.error.set(t instanceof Error?t.message:String(t)),this.loading.set(!1)}}openStream(e){this.streamStatus.set("connecting");let t=this.api.openEventStream(`/api/workflows/runs/${encodeURIComponent(e)}/events${this.projects.projectQuery()}`,(r,i)=>{if(r==="done"){this.streamStatus.set("closed"),this.refreshRun();return}let m=i;!m||typeof m!="object"||m.id==null||(this.streamStatus.set("live"),this.appendEvent(m),r.startsWith("run_")&&this.refreshRun())},()=>{this.streamStatus.set("error")});this.closeStream=t,this.destroyRef.onDestroy(()=>t())}appendEvent(e){this.events.update(t=>{if(t.some(i=>i.id===e.id))return t;let r=[...t,e];return r.sort((i,m)=>i.id-m.id),r})}async refreshRun(){try{let e=this.runId();if(!e)return;let t=await this.api.get(`/api/workflows/runs/${encodeURIComponent(e)}${this.projects.projectQuery()}`);this.run.set(t.run)}catch{}}async approve(){await this.action("approve")}async reject(){let e=prompt("Reason for rejecting?")??void 0;await this.action("reject",e?{reason:e}:void 0)}async cancel(){confirm("Cancel this run?")&&await this.action("cancel")}async resume(){await this.action("resume")}async action(e,t){this.actionPending.set(e),this.actionError.set(null);try{await this.api.post(`/api/workflows/runs/${encodeURIComponent(this.runId())}/${e}${this.projects.projectQuery()}`,t??{}),await this.refreshRun(),(e==="resume"||e==="approve")&&!this.isTerminal()&&!this.closeStream&&this.openStream(this.runId())}catch(r){this.actionError.set(r instanceof Error?r.message:String(r))}finally{this.actionPending.set(null)}}fmtTime(e){return e?new Date(e).toLocaleTimeString():"\u2014"}fmtDuration(e,t){if(!e)return"\u2014";let i=(t??Date.now())-e;return i>=6e4?Math.round(i/6e4)+"m "+Math.round(i%6e4/1e3)+"s":i>=1e3?(i/1e3).toFixed(1)+"s":i+"ms"}eventLabel(e){let t=e.data?.stepId??e.stepId??"";return{run_started:"Run started",run_completed:"Run completed",run_failed:"Run failed",run_cancelled:"Run cancelled",run_paused:"Run paused",step_started:`Step started \xB7 ${t}`,step_completed:`Step completed \xB7 ${t}`,step_failed:`Step failed \xB7 ${t}`,step_skipped:`Step skipped \xB7 ${t}`,tool_called:`Tool called \xB7 ${e.data?.tool??"?"}`,artifact_created:`Artifact \xB7 ${e.data?.name??"?"}`,approval_requested:"Approval requested",approval_granted:"Approval granted",approval_rejected:"Approval rejected"}[e.eventType]??e.eventType}eventDetail(e){if(!e.data)return"";let t=e.data.output,r=e.data.error;if(typeof r=="string")return r;if(typeof t=="string")return t.length>200?t.slice(0,200)+"\u2026":t;if(t!=null)try{let i=JSON.stringify(t);return i.length>200?i.slice(0,200)+"\u2026":i}catch{return""}return""}back(){this.router.navigate(["/runs"])}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=R({type:n,selectors:[["app-run-detail"]],decls:27,vars:10,consts:[[1,"rd-root"],[1,"rd-head"],["aria-label","Back to runs",1,"rd-back",3,"routerLink"],[1,"rd-head-main"],[1,"muted"],[1,"rd-error"],[1,"rd-actions"],[1,"rd-banner-error"],[1,"rd-body"],[1,"rd-section"],[1,"rd-h3"],[1,"muted","rd-empty"],[1,"rd-timeline"],[1,"rd-title-row"],[1,"status-pill"],[1,"mono"],[1,"rd-stream",3,"title"],[1,"rd-dot"],[1,"rd-sub","mono","muted"],["type","button",1,"btn","btn-primary",3,"disabled"],["type","button",1,"btn","btn-ghost-danger",3,"disabled"],["type","button",1,"btn","btn-primary",3,"click","disabled"],["type","button",1,"btn","btn-ghost-warn",3,"click","disabled"],["type","button",1,"btn","btn-ghost-danger",3,"click","disabled"],[1,"rd-step"],[1,"rd-step-head"],[1,"rd-step-status"],[1,"mono","rd-step-id"],[1,"rd-step-kind"],[1,"rd-spacer"],[1,"muted","mono","rd-step-dur"],[1,"rd-step-error","mono"],[1,"rd-step-output","mono"],[1,"rd-event"],[1,"rd-event-time","mono","muted"],[1,"rd-event-dot"],[1,"rd-event-body"],[1,"rd-event-label"],[1,"rd-event-detail","mono","muted"]],template:function(t,r){if(t&1&&(d(0,"div",0)(1,"header",1)(2,"a",2),s(3,"\u2190"),o(),d(4,"div",3),c(5,q,12,9)(6,B,2,0,"div",4)(7,Q,2,1,"div",5),o(),d(8,"div",6),c(9,H,3,3),o()(),c(10,K,2,1,"div",7),c(11,X,2,1,"div",7),d(12,"div",8)(13,"section",9)(14,"h3",10),s(15,"Steps "),d(16,"span",4),s(17),o()(),c(18,Y,2,0,"div",11)(19,rt,2,0),o(),d(20,"section",9)(21,"h3",10),s(22,"Event timeline "),d(23,"span",4),s(24),o()(),c(25,it,2,0,"div",11)(26,dt,3,0,"ol",12),o()()()),t&2){let i,m,P;a(2),v("routerLink",E(9,L)),a(3),p((i=r.run())?5:r.loading()?6:r.error()?7:-1,i),a(4),p((m=r.run())?9:-1,m),a(),p(r.actionError()?10:-1),a(),p((P=(P=r.run())==null?null:P.errorMessage)?11:-1,P),a(6),x("(",r.steps().length,")"),a(),p(r.steps().length===0?18:19),a(6),x("(",r.events().length,")"),a(),p(r.events().length===0?25:26)}},dependencies:[z,A],styles:["[_nghost-%COMP%]{display:contents}.rd-root[_ngcontent-%COMP%]{flex:1;display:flex;flex-direction:column;min-height:0;padding:16px 20px 20px;gap:14px}.rd-head[_ngcontent-%COMP%]{display:flex;align-items:center;gap:12px}.rd-back[_ngcontent-%COMP%]{width:32px;height:32px;display:grid;place-items:center;border-radius:7px;border:1px solid var(--border-subtle);background:var(--bg-panel);color:var(--text-secondary);text-decoration:none;font-size:16px}.rd-back[_ngcontent-%COMP%]:hover{background:var(--bg-hover);color:var(--text-primary)}.rd-head-main[_ngcontent-%COMP%]{flex:1;min-width:0}.rd-title-row[_ngcontent-%COMP%]{display:flex;align-items:center;gap:10px}.rd-title-row[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{font-size:18px;font-weight:600;margin:0}.rd-sub[_ngcontent-%COMP%]{margin-top:3px;font-size:11.5px;overflow-wrap:anywhere}.status-pill[_ngcontent-%COMP%]{font-size:10.5px;font-weight:600;padding:2px 8px;border-radius:var(--r-pill, 999px);text-transform:capitalize}.status-pill[data-status=running][_ngcontent-%COMP%]{color:var(--info);background:var(--info-soft)}.status-pill[data-status=paused][_ngcontent-%COMP%]{color:var(--warn);background:var(--warn-soft)}.status-pill[data-status=completed][_ngcontent-%COMP%]{color:var(--success);background:var(--success-soft)}.status-pill[data-status=failed][_ngcontent-%COMP%]{color:var(--error);background:var(--error-soft)}.status-pill[data-status=cancelled][_ngcontent-%COMP%], .status-pill[data-status=pending][_ngcontent-%COMP%]{color:var(--text-muted);background:#ffffff0d}.rd-stream[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:6px;font-size:11px;text-transform:uppercase;letter-spacing:.05em;color:var(--text-muted)}.rd-stream[_ngcontent-%COMP%] .rd-dot[_ngcontent-%COMP%]{width:7px;height:7px;border-radius:50%;background:var(--text-muted)}.rd-stream[data-stream=live][_ngcontent-%COMP%]{color:var(--success)}.rd-stream[data-stream=live][_ngcontent-%COMP%] .rd-dot[_ngcontent-%COMP%]{background:var(--success);box-shadow:0 0 6px var(--success);animation:_ngcontent-%COMP%_rd-pulse 1.4s ease-in-out infinite}.rd-stream[data-stream=connecting][_ngcontent-%COMP%] .rd-dot[_ngcontent-%COMP%]{background:var(--warn)}.rd-stream[data-stream=error][_ngcontent-%COMP%]{color:var(--error)}.rd-stream[data-stream=error][_ngcontent-%COMP%] .rd-dot[_ngcontent-%COMP%]{background:var(--error)}@keyframes _ngcontent-%COMP%_rd-pulse{0%,to{opacity:1}50%{opacity:.4}}.rd-actions[_ngcontent-%COMP%]{display:flex;gap:8px;flex-shrink:0}.btn[_ngcontent-%COMP%]{height:30px;padding:0 12px;border-radius:7px;border:1px solid var(--border-subtle);background:var(--bg-panel);color:var(--text-primary);font-size:12px;cursor:pointer}.btn[_ngcontent-%COMP%]:hover:not(:disabled){background:var(--bg-hover)}.btn[_ngcontent-%COMP%]:disabled{opacity:.5;cursor:not-allowed}.btn-primary[_ngcontent-%COMP%]{background:var(--accent);color:#fff;border-color:var(--accent)}.btn-primary[_ngcontent-%COMP%]:hover:not(:disabled){filter:brightness(1.05)}.btn-ghost-warn[_ngcontent-%COMP%]{color:var(--warn);border-color:color-mix(in srgb,var(--warn) 40%,transparent);background:transparent}.btn-ghost-danger[_ngcontent-%COMP%]{color:var(--error);border-color:color-mix(in srgb,var(--error) 40%,transparent);background:transparent}.rd-banner-error[_ngcontent-%COMP%]{background:var(--error-soft);color:var(--error);border:1px solid color-mix(in srgb,var(--error) 30%,transparent);border-radius:var(--r-md, 8px);padding:10px 14px;font-size:12.5px;font-family:var(--font-mono)}.rd-body[_ngcontent-%COMP%]{flex:1;min-height:0;display:grid;grid-template-columns:minmax(0,1.4fr) minmax(0,1fr);gap:16px;overflow:hidden}@media(max-width:1100px){.rd-body[_ngcontent-%COMP%]{grid-template-columns:1fr}}.rd-section[_ngcontent-%COMP%]{display:flex;flex-direction:column;min-height:0;background:var(--bg-panel);border:1px solid var(--border-subtle);border-radius:var(--r-lg, 10px);padding:14px 16px 16px;overflow-y:auto}.rd-h3[_ngcontent-%COMP%]{font-size:12px;text-transform:uppercase;letter-spacing:.05em;color:var(--text-muted);font-weight:600;margin:0 0 12px}.rd-empty[_ngcontent-%COMP%]{padding:18px;text-align:center;font-size:12.5px}.rd-step[_ngcontent-%COMP%]{border:1px solid var(--border-subtle);border-radius:8px;background:var(--bg-canvas);padding:10px 12px;margin-bottom:8px}.rd-step[data-step-status=failed][_ngcontent-%COMP%]{border-color:color-mix(in srgb,var(--error) 40%,transparent)}.rd-step[data-step-status=completed][_ngcontent-%COMP%]{border-color:color-mix(in srgb,var(--success) 30%,transparent)}.rd-step[data-step-status=running][_ngcontent-%COMP%]{border-color:color-mix(in srgb,var(--info) 40%,transparent)}.rd-step-head[_ngcontent-%COMP%]{display:flex;align-items:center;gap:10px}.rd-step-status[_ngcontent-%COMP%]{font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.05em;padding:2px 7px;border-radius:999px;background:#ffffff0d;color:var(--text-muted)}.rd-step-status[data-step-status=running][_ngcontent-%COMP%]{color:var(--info);background:var(--info-soft)}.rd-step-status[data-step-status=completed][_ngcontent-%COMP%]{color:var(--success);background:var(--success-soft)}.rd-step-status[data-step-status=failed][_ngcontent-%COMP%]{color:var(--error);background:var(--error-soft)}.rd-step-status[data-step-status=skipped][_ngcontent-%COMP%]{color:var(--text-muted)}.rd-step-id[_ngcontent-%COMP%]{font-size:12.5px;font-weight:500}.rd-step-kind[_ngcontent-%COMP%]{font-size:10.5px;color:var(--text-muted);padding:1px 6px;border-radius:4px;border:1px solid var(--border-subtle)}.rd-spacer[_ngcontent-%COMP%]{flex:1}.rd-step-dur[_ngcontent-%COMP%]{font-size:11px}.rd-step-output[_ngcontent-%COMP%], .rd-step-error[_ngcontent-%COMP%]{margin:8px 0 0;font-size:11px;line-height:1.5;background:var(--bg-canvas-2, var(--bg-canvas));border:1px solid var(--border-subtle);border-radius:6px;padding:8px 10px;max-height:220px;overflow:auto;white-space:pre-wrap;word-break:break-word}.rd-step-error[_ngcontent-%COMP%]{color:var(--error);border-color:color-mix(in srgb,var(--error) 30%,transparent)}.rd-timeline[_ngcontent-%COMP%]{list-style:none;margin:0;padding:0 0 0 14px;border-left:1px solid var(--border-subtle)}.rd-event[_ngcontent-%COMP%]{position:relative;display:grid;grid-template-columns:74px 1fr;gap:10px;padding:6px 0;align-items:flex-start}.rd-event-time[_ngcontent-%COMP%]{font-size:10.5px;padding-top:2px;text-align:right}.rd-event-dot[_ngcontent-%COMP%]{position:absolute;left:-18px;top:10px;width:8px;height:8px;border-radius:50%;background:var(--text-muted);border:2px solid var(--bg-panel)}.rd-event[data-event-type=step_completed][_ngcontent-%COMP%] .rd-event-dot[_ngcontent-%COMP%], .rd-event[data-event-type=run_completed][_ngcontent-%COMP%] .rd-event-dot[_ngcontent-%COMP%]{background:var(--success)}.rd-event[data-event-type=step_failed][_ngcontent-%COMP%] .rd-event-dot[_ngcontent-%COMP%], .rd-event[data-event-type=run_failed][_ngcontent-%COMP%] .rd-event-dot[_ngcontent-%COMP%]{background:var(--error)}.rd-event[data-event-type=step_started][_ngcontent-%COMP%] .rd-event-dot[_ngcontent-%COMP%], .rd-event[data-event-type=run_started][_ngcontent-%COMP%] .rd-event-dot[_ngcontent-%COMP%]{background:var(--info)}.rd-event[data-event-type=approval_requested][_ngcontent-%COMP%] .rd-event-dot[_ngcontent-%COMP%]{background:var(--warn)}.rd-event-body[_ngcontent-%COMP%]{min-width:0}.rd-event-label[_ngcontent-%COMP%]{font-size:12px}.rd-event-detail[_ngcontent-%COMP%]{font-size:10.5px;margin-top:2px;overflow-wrap:anywhere}.muted[_ngcontent-%COMP%]{color:var(--text-muted)}.mono[_ngcontent-%COMP%]{font-family:var(--font-mono)}"],changeDetection:0})};export{V as RunDetail};
@@ -1 +0,0 @@
1
- import{c as s}from"./chunk-L4TVIPSR.js";import{K as h,Ka as c,Kb as y,Ob as i,R as n,Ra as l,cb as o,eb as p,wa as r}from"./chunk-WVCKOJZL.js";var x={dashboard:'<rect x="3" y="3" width="7" height="9"/><rect x="14" y="3" width="7" height="5"/><rect x="14" y="12" width="7" height="9"/><rect x="3" y="16" width="7" height="5"/>',graph:'<circle cx="5" cy="6" r="2.5"/><circle cx="19" cy="6" r="2.5"/><circle cx="12" cy="18" r="2.5"/><path d="M7 7.5 10.5 16M16.5 7.5 13.5 16M7 6h10"/>',book:'<path d="M4 19.5A2.5 2.5 0 0 1 6.5 17H20"/><path d="M6.5 2H20v20H6.5A2.5 2.5 0 0 1 4 19.5v-15A2.5 2.5 0 0 1 6.5 2z"/>',drift:'<path d="M10.3 3.9 1.8 18a2 2 0 0 0 1.7 3h16.9a2 2 0 0 0 1.7-3L13.7 3.9a2 2 0 0 0-3.4 0z"/><path d="M12 9v4M12 17h.01"/>',workflow:'<rect x="3" y="3" width="6" height="6" rx="1"/><rect x="15" y="15" width="6" height="6" rx="1"/><path d="M6 9v3a3 3 0 0 0 3 3h6"/>',play:'<polygon points="6 3 20 12 6 21 6 3"/>',wrench:'<path d="M14.7 6.3a4 4 0 0 0-5.4 5.3L3 18v3h3l6.4-6.3a4 4 0 0 0 5.3-5.4l-2.9 2.9-2.1-2.1z"/>',database:'<ellipse cx="12" cy="5" rx="8" ry="3"/><path d="M4 5v6c0 1.7 3.6 3 8 3s8-1.3 8-3V5"/><path d="M4 11v6c0 1.7 3.6 3 8 3s8-1.3 8-3v-6"/>',bot:'<rect x="4" y="8" width="16" height="12" rx="2"/><path d="M12 4v4M9 14h.01M15 14h.01M2 13h2M20 13h2"/>',folder:'<path d="M20 10V7a2 2 0 0 0-2-2h-6l-2-2H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2h7"/><path d="M12 10v11M16 14l-4-4-4 4M21 19h-6"/>',chat:'<path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"/>',sessions:'<path d="M3 3v18h18"/><path d="M7 14l3-4 3 3 4-6"/>',heatmap:'<rect x="3" y="3" width="7" height="7" rx="1"/><rect x="14" y="3" width="7" height="7" rx="1"/><rect x="3" y="14" width="7" height="7" rx="1"/><rect x="14" y="14" width="7" height="7" rx="1"/>',dollar:'<line x1="12" y1="1" x2="12" y2="23"/><path d="M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6"/>',compare:'<path d="M16 3h5v5M21 3l-7 7M8 21H3v-5M3 21l7-7"/>',tips:'<path d="M9 18h6M10 22h4M12 2a7 7 0 0 0-4 12.7c.6.5 1 1.3 1 2.1V18h6v-1.2c0-.8.4-1.6 1-2.1A7 7 0 0 0 12 2z"/>',settings:'<circle cx="12" cy="12" r="3"/><path d="M19.4 15a1.6 1.6 0 0 0 .3 1.8l.1.1a2 2 0 1 1-2.8 2.8l-.1-.1a1.6 1.6 0 0 0-1.8-.3 1.6 1.6 0 0 0-1 1.5V21a2 2 0 0 1-4 0v-.1a1.6 1.6 0 0 0-1-1.5 1.6 1.6 0 0 0-1.8.3l-.1.1a2 2 0 1 1-2.8-2.8l.1-.1a1.6 1.6 0 0 0 .3-1.8 1.6 1.6 0 0 0-1.5-1H3a2 2 0 0 1 0-4h.1a1.6 1.6 0 0 0 1.5-1 1.6 1.6 0 0 0-.3-1.8l-.1-.1a2 2 0 1 1 2.8-2.8l.1.1a1.6 1.6 0 0 0 1.8.3H9a1.6 1.6 0 0 0 1-1.5V3a2 2 0 0 1 4 0v.1a1.6 1.6 0 0 0 1 1.5 1.6 1.6 0 0 0 1.8-.3l.1-.1a2 2 0 1 1 2.8 2.8l-.1.1a1.6 1.6 0 0 0-.3 1.8V9a1.6 1.6 0 0 0 1.5 1H21a2 2 0 0 1 0 4h-.1a1.6 1.6 0 0 0-1.5 1z"/>',box:'<path d="M21 16V8a2 2 0 0 0-1-1.7l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.7l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"/><path d="m3.3 7 8.7 5 8.7-5M12 22V12"/>',search:'<circle cx="11" cy="11" r="7"/><line x1="21" y1="21" x2="16.7" y2="16.7"/>',command:'<path d="M15 6a3 3 0 1 1 3 3h-3V6zM9 6a3 3 0 1 0-3 3h3V6zM15 18a3 3 0 1 0 3-3h-3v3zM9 18a3 3 0 1 1-3-3h3v3zM9 9h6v6H9z"/>',chevronRight:'<polyline points="9 6 15 12 9 18"/>',chevronDown:'<polyline points="6 9 12 15 18 9"/>',chevronLeft:'<polyline points="15 6 9 12 15 18"/>',x:'<line x1="18" y1="6" x2="6" y2="18"/><line x1="6" y1="6" x2="18" y2="18"/>',check:'<polyline points="20 6 9 17 4 12"/>',copy:'<rect x="9" y="9" width="13" height="13" rx="2"/><path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"/>',arrowRight:'<line x1="5" y1="12" x2="19" y2="12"/><polyline points="12 5 19 12 12 19"/>',plus:'<line x1="12" y1="5" x2="12" y2="19"/><line x1="5" y1="12" x2="19" y2="12"/>',minus:'<line x1="5" y1="12" x2="19" y2="12"/>',maximize:'<path d="M8 3H5a2 2 0 0 0-2 2v3M21 8V5a2 2 0 0 0-2-2h-3M16 21h3a2 2 0 0 0 2-2v-3M3 16v3a2 2 0 0 0 2 2h3"/>',recenter:'<circle cx="12" cy="12" r="3"/><path d="M12 2v4M12 18v4M2 12h4M18 12h4"/>',refresh:'<path d="M21 2v6h-6M3 22v-6h6"/><path d="M3.5 9a9 9 0 0 1 14.8-3.4L21 8M21 15a9 9 0 0 1-14.8 3.4L3 16"/>',filter:'<polygon points="22 3 2 3 10 12.5 10 19 14 21 14 12.5 22 3"/>',pause:'<rect x="6" y="4" width="4" height="16"/><rect x="14" y="4" width="4" height="16"/>',external:'<path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/><polyline points="15 3 21 3 21 9"/><line x1="10" y1="14" x2="21" y2="3"/>',zap:'<polygon points="13 2 3 14 12 14 11 22 21 10 12 10 13 2"/>',clock:'<circle cx="12" cy="12" r="9"/><polyline points="12 7 12 12 15 14"/>',trendUp:'<polyline points="22 7 13.5 15.5 8.5 10.5 2 17"/><polyline points="16 7 22 7 22 13"/>',trendDown:'<polyline points="22 17 13.5 8.5 8.5 13.5 2 7"/><polyline points="16 17 22 17 22 11"/>',circle:'<circle cx="12" cy="12" r="9"/>',dot:'<circle cx="12" cy="12" r="5"/>',reveal:'<path d="M2 12s3.5-7 10-7 10 7 10 7-3.5 7-10 7-10-7-10-7z"/><circle cx="12" cy="12" r="3"/>',sparkles:'<path d="M12 3v4M12 17v4M3 12h4M17 12h4"/><path d="m6 6 2.5 2.5M15.5 15.5 18 18M18 6l-2.5 2.5M8.5 15.5 6 18"/>',menu:'<line x1="4" y1="6" x2="20" y2="6"/><line x1="4" y1="12" x2="20" y2="12"/><line x1="4" y1="18" x2="20" y2="18"/>',send:'<line x1="22" y1="2" x2="11" y2="13"/><polygon points="22 2 15 22 11 13 2 9 22 2"/>',paperclip:'<path d="M21.4 11.05 12.25 20.2a5 5 0 0 1-7.07-7.07l9.19-9.19a3 3 0 0 1 4.24 4.24l-9.2 9.19a1 1 0 0 1-1.41-1.41l8.48-8.49"/>',sortAsc:'<path d="M11 5h10M11 9h7M11 13h4M3 17l3 3 3-3M6 6v14"/>',flame:'<path d="M12 2c1 4 5 5 5 9a5 5 0 0 1-10 0c0-1.5.5-2.5 1.2-3.4C9 9 9.5 8 9.5 6.5c1 .5 2 1.5 2.5 2.5C13 7 12.5 4 12 2z"/>',coins:'<circle cx="8" cy="8" r="5"/><path d="M18.1 6.3a5 5 0 0 1 0 9.4M14.4 18.6a5 5 0 0 1-3.4 0"/>',cancel:'<circle cx="12" cy="12" r="9"/><line x1="9" y1="9" x2="15" y2="15"/><line x1="15" y1="9" x2="9" y2="15"/>',skip:'<polyline points="13 17 18 12 13 7"/><polyline points="6 17 11 12 6 7"/>',layers:'<polygon points="12 2 2 7 12 12 22 7 12 2"/><polyline points="2 12 12 17 22 12"/><polyline points="2 17 12 22 22 17"/>',sun:'<circle cx="12" cy="12" r="4"/><path d="M12 2v2M12 20v2M4.9 4.9l1.4 1.4M17.7 17.7l1.4 1.4M2 12h2M20 12h2M4.9 19.1l1.4-1.4M17.7 6.3l1.4-1.4"/>',moon:'<path d="M21 12.8A9 9 0 1 1 11.2 3a7 7 0 0 0 9.8 9.8z"/>',memory:'<rect x="4" y="6" width="16" height="12" rx="2"/><path d="M8 6V3M12 6V3M16 6V3M8 21v-3M12 21v-3M16 21v-3M2 10h2M2 14h2M20 10h2M20 14h2"/><rect x="8.5" y="10" width="7" height="4" rx="1"/>',lock:'<rect x="4" y="11" width="16" height="10" rx="2"/><path d="M8 11V7a4 4 0 0 1 8 0v4"/>',palette:'<circle cx="12" cy="12" r="9"/><circle cx="7.5" cy="10.5" r="1"/><circle cx="12" cy="7" r="1"/><circle cx="16.5" cy="10.5" r="1"/><path d="M12 21a3 3 0 0 1 0-6c1.5 0 2 1 3.5 1a2 2 0 0 0 0-4"/>'},M=class a{name=i.required();size=i(16);stroke=i(2);sanitizer=h(s);markup=y(()=>this.sanitizer.bypassSecurityTrustHtml(x[this.name()]??""));static \u0275fac=function(e){return new(e||a)};static \u0275cmp=c({type:a,selectors:[["app-icon"]],inputs:{name:[1,"name"],size:[1,"size"],stroke:[1,"stroke"]},decls:1,vars:4,consts:[["viewBox","0 0 24 24","fill","none","stroke","currentColor","stroke-linecap","round","stroke-linejoin","round",3,"innerHTML"]],template:function(e,t){e&1&&(n(),o(0,"svg",0)),e&2&&(p("innerHTML",t.markup(),r),l("width",t.size())("height",t.size())("stroke-width",t.stroke()))},styles:["[_nghost-%COMP%]{display:inline-flex;align-items:center;justify-content:center;line-height:0}"],changeDetection:0})};export{M as a};
@@ -1 +0,0 @@
1
- import{a as P}from"./chunk-5OQKAJAE.js";import{a as b}from"./chunk-4LHBWWP7.js";import"./chunk-FTESTUEO.js";import{a as C}from"./chunk-47QYKLE5.js";import{a as k}from"./chunk-ZABKKHJ3.js";import"./chunk-L4TVIPSR.js";import"./chunk-RP3WU5Y6.js";import{$a as w,Aa as r,Bb as v,Cb as y,K as c,Ka as m,Kb as _,Ra as g,Sa as p,Ta as s,Wa as u,Xa as x,Za as o,_a as n,jb as d,sb as a,tb as l,ub as f}from"./chunk-WVCKOJZL.js";var O=()=>[],E=(t,i)=>i.workflow.name,j=(t,i)=>e=>e.name;function S(t,i){t&1&&w(0,"app-pick-project-empty",0)}function W(t,i){if(t&1&&(o(0,"span",17),a(1),n()),t&2){let e=d().$implicit;r(),f("needs: ",e.workflow.inputs.map(v(1,j,i)).join(", "))}}function z(t,i){if(t&1&&(o(0,"div",7)(1,"div",8)(2,"span",9),a(3),n(),o(4,"span",10),a(5),n()(),o(6,"div",11),a(7),n(),o(8,"div",12)(9,"span",13),a(10,"requires"),n(),o(11,"span",14),a(12),n()(),o(13,"div",15)(14,"button",16),a(15,"\u25B6 Run"),n(),p(16,W,2,2,"span",17),n()()),t&2){let e=i.$implicit;r(2),g("data-scope",e.scope),r(),l(e.scope),r(2),l(e.workflow.name),r(2),l(e.workflow.description||"\u2014"),r(5),l((e.workflow.requires||y(6,O)).join(", ")||"\u2014"),r(4),s(e.workflow.inputs!=null&&e.workflow.inputs.length?16:-1)}}function I(t,i){if(t&1&&(o(0,"div",1)(1,"header",2)(2,"div",3)(3,"div",4),a(4,"Workflows"),n(),o(5,"div",5),a(6),n()()(),o(7,"div",6),u(8,z,17,7,"div",7,E),n()()),t&2){let e=d();r(6),f("",e.entries().length," workflows \xB7 bundled + global + project"),r(2),x(e.entries())}}var h=class t{api=c(k);projects=c(C);resource=b(this.api,()=>`/api/workflows${this.projects.projectQuery()}`);entries=_(()=>this.resource.state().data?.workflows??[]);static \u0275fac=function(e){return new(e||t)};static \u0275cmp=m({type:t,selectors:[["app-workflows"]],decls:2,vars:1,consts:[["surface","Workflows"],[1,"page","scroll-y"],[1,"page-head"],[1,"title-block"],[1,"title"],[1,"sub"],[1,"wf-grid"],[1,"wf-card"],[1,"wf-head"],[1,"scope-pill"],[1,"mono","wf-name"],[1,"wf-desc"],[1,"wf-meta"],[1,"meta-label"],[1,"mono"],[1,"wf-actions"],["type","button",1,"primary"],[1,"muted"]],template:function(e,M){e&1&&p(0,S,1,0,"app-pick-project-empty",0)(1,I,10,1,"div",1),e&2&&s(M.resource.state().noProject?0:1)},dependencies:[P],styles:["[_nghost-%COMP%]{display:contents}.page[_ngcontent-%COMP%]{flex:1;padding:18px}.title[_ngcontent-%COMP%]{font-size:var(--fs-title);font-weight:600;letter-spacing:-.01em}.sub[_ngcontent-%COMP%]{color:var(--text-secondary);margin-top:2px}.page-head[_ngcontent-%COMP%]{margin-bottom:16px}.muted[_ngcontent-%COMP%]{color:var(--text-muted);font-size:11px}.mono[_ngcontent-%COMP%]{font-family:var(--font-mono)}.wf-grid[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(auto-fill,minmax(360px,1fr));gap:12px}.wf-card[_ngcontent-%COMP%]{background:var(--bg-panel);border:1px solid var(--border-subtle);border-radius:var(--r-lg);padding:14px;display:flex;flex-direction:column;gap:10px}.wf-head[_ngcontent-%COMP%]{display:flex;gap:10px;align-items:center}.scope-pill[_ngcontent-%COMP%]{font-size:10px;font-weight:600;padding:2px 8px;border-radius:var(--r-pill);text-transform:uppercase;letter-spacing:.05em;background:#ffffff0d;color:var(--text-muted)}.scope-pill[data-scope=bundled][_ngcontent-%COMP%]{background:var(--accent-soft);color:var(--accent)}.scope-pill[data-scope=project][_ngcontent-%COMP%]{background:var(--node-test-soft);color:var(--node-test)}.wf-name[_ngcontent-%COMP%]{font-size:13.5px;font-weight:600;color:var(--text-primary)}.wf-desc[_ngcontent-%COMP%]{color:var(--text-secondary);font-size:12.5px;line-height:1.5;flex:1}.wf-meta[_ngcontent-%COMP%]{display:flex;gap:8px;align-items:center;font-size:11.5px;color:var(--text-secondary)}.meta-label[_ngcontent-%COMP%]{color:var(--text-muted);font-size:10.5px;text-transform:uppercase;letter-spacing:.05em;font-weight:600}.wf-actions[_ngcontent-%COMP%]{display:flex;gap:10px;align-items:center}.primary[_ngcontent-%COMP%]{background:var(--accent-strong);color:#fff;border:none;padding:5px 12px;border-radius:5px;font-size:12px;font-weight:500;font-family:inherit;cursor:pointer}.primary[_ngcontent-%COMP%]:hover{background:var(--accent)}"],changeDetection:0})};export{h as Workflows};
@@ -1 +0,0 @@
1
- import{Aa as d,Ka as X,Kb as S,Nb as Z,Ob as w,P as L,Pb as j,Q as O,R as T,Ra as N,S as Y,Sa as y,Ta as _,Ua as W,Wa as I,Xa as $,a as M,aa as H,ab as c,b as E,ba as D,bb as p,cb as v,db as K,hb as q,ib as C,jb as l,nb as R,ob as Q,pb as h,qb as z,sb as b,tb as V,ub as U,xb as A,yb as B,zb as P}from"./chunk-WVCKOJZL.js";var ee=["host"],te=(r,t)=>t.id;function ne(r,t){if(r&1&&(T(),v(0,"path",14)),r&2){let e=l().$implicit,n=l();N("d",t)("stroke",n.edgeHot(e)?"var(--accent)":"rgba(150,160,180,0.34)")("stroke-width",n.edgeHot(e)?1.8:1.2)("opacity",n.edgeHot(e)?.95:.7)("stroke-dasharray",e.kind==="synth"?"5 4":null)("marker-end",n.edgeHot(e)?"url(#gc-arrow-hi)":"url(#gc-arrow)")}}function oe(r,t){if(r&1&&y(0,ne,1,6,":svg:path",14),r&2){let e,n=t.$implicit,o=l();_((e=o.edgePath(n))?0:-1,e)}}function ie(r,t){if(r&1&&v(0,"div",19),r&2){let e=l().$implicit,n=P(1),o=l();h("background",n)("box-shadow",o.isSelected(e)?"0 0 0 4px "+n+"44, 0 0 14px "+n:"0 0 8px "+n+"66")}}function re(r,t){if(r&1&&v(0,"span",23),r&2){let e=l(2).$implicit;h("background",e.state==="drifted"?"var(--warn)":"var(--error)")}}function ae(r,t){if(r&1&&(c(0,"div",20),v(1,"span",21),b(2),y(3,re,1,2,"span",22),p()),r&2){let e=l().$implicit,n=P(0),o=P(1),i=l();h("min-width",n.w,"px")("background","color-mix(in srgb, "+o+" 16%, var(--bg-panel))")("border-color",i.isSelected(e)?o:"color-mix(in srgb, "+o+" 45%, transparent)")("box-shadow",i.isSelected(e)?"0 0 0 4px "+o+"33, 0 4px 16px "+o+"44":"0 2px 8px rgba(0,0,0,0.4)"),z("is-rect",n.shape==="rect"),d(),h("background",o)("box-shadow","0 0 6px "+o),d(),U(" ",e.label," "),d(),_(e.state==="drifted"||e.state==="broken"||e.state==="orphaned"?3:-1)}}function se(r,t){if(r&1&&(c(0,"div",18),b(1),p()),r&2){let e=l().$implicit;d(),V(e.sub)}}function de(r,t){if(r&1){let e=K();A(0)(1),c(2,"div",15),C("mouseenter",function(){let o=L(e).$implicit,i=l();return O(i.onHoverEnter(o.id))})("mouseleave",function(){L(e);let o=l();return O(o.onHoverLeave())}),y(3,ie,1,4,"div",16)(4,ae,4,16,"div",17),y(5,se,2,1,"div",18),p()}if(r&2){let e=t.$implicit,n=l(),o=B(n.box(e));d(),B(n.nodeColor(e)),d(),h("left",e.x,"px")("top",e.y,"px")("opacity",n.nodeOpacity(e)),z("is-selected",n.isSelected(e))("is-hovered",n.isHovered(e)),N("data-node",e.id),d(),_(o.shape==="dot"?3:4),d(2),_((n.isHovered(e)||n.isSelected(e))&&e.sub?5:-1)}}var J=class r{nodes=w([]);edges=w([]);selectedId=w(null);fitKey=w(0);nodeClick=Z();host=j.required("host");view=H({tx:0,ty:0,k:1});hover=H(null);draggedNodes=H({});drag=null;positioned=S(()=>{let t=this.draggedNodes();return this.nodes().map(e=>{let n=t[e.id];return n?E(M({},e),{x:n.x,y:n.y}):e})});nodeMap=S(()=>{let t=new Map;for(let e of this.positioned())t.set(e.id,e);return t});neighborSet=S(()=>{let t=this.selectedId(),e=new Set;if(!t)return e;for(let n of this.edges())n.from===t&&e.add(n.to),n.to===t&&e.add(n.from);return e});constructor(){D(()=>{this.nodes(),this.draggedNodes.set({}),queueMicrotask(()=>this.fitView())}),D(()=>{this.fitKey(),queueMicrotask(()=>this.fitView())})}fitView(){let t=this.host()?.nativeElement;if(!t)return;let e=this.positioned();if(e.length===0){this.view.set({tx:0,ty:0,k:1});return}let n=t.clientWidth,o=t.clientHeight;if(n===0||o===0)return;let i=1/0,a=-1/0,s=1/0,u=-1/0;for(let m of e){let k=G(m);m.x<i&&(i=m.x),m.x+k.w>a&&(a=m.x+k.w),m.y<s&&(s=m.y),m.y+k.h>u&&(u=m.y+k.h)}let g=60;i-=g,s-=g,a+=g,u+=g;let x=Math.max(1,a-i),F=Math.max(1,u-s),f=Math.min(n/x,o/F,1.4)*.92;this.view.set({k:f,tx:(n-x*f)/2-i*f,ty:(o-F*f)/2-s*f})}onWheel(t){t.preventDefault();let e=this.host().nativeElement.getBoundingClientRect(),n=t.clientX-e.left,o=t.clientY-e.top,i=-t.deltaY*.0016,a=this.view(),s=Math.min(2.4,Math.max(.25,a.k*(1+i))),u=s/a.k;this.view.set({k:s,tx:n-(n-a.tx)*u,ty:o-(o-a.ty)*u})}onMouseDown(t){let n=t.target.closest("[data-node]");if(n){let i=n.getAttribute("data-node"),a=this.nodeMap().get(i);if(!a)return;t.stopPropagation(),this.drag={type:"node",id:i,sx:t.clientX,sy:t.clientY,ox:a.x,oy:a.y,moved:!1};return}let o=this.view();this.drag={type:"pan",sx:t.clientX,sy:t.clientY,ox:o.tx,oy:o.ty}}onMouseMove(t){let e=this.drag;if(!e)return;if(e.type==="pan"){this.view.update(a=>E(M({},a),{tx:e.ox+(t.clientX-e.sx),ty:e.oy+(t.clientY-e.sy)}));return}let n=this.view().k,o=(t.clientX-e.sx)/n,i=(t.clientY-e.sy)/n;Math.abs(t.clientX-e.sx)+Math.abs(t.clientY-e.sy)>3&&(e.moved=!0),this.draggedNodes.update(a=>E(M({},a),{[e.id]:{x:e.ox+o,y:e.oy+i}}))}onMouseUp(){let t=this.drag;t&&t.type==="node"&&!t.moved&&this.nodeClick.emit(t.id),this.drag=null}zoom(t){let e=this.host().nativeElement,n=e.clientWidth,o=e.clientHeight,i=this.view(),a=Math.min(2.4,Math.max(.25,i.k*t)),s=a/i.k;this.view.set({k:a,tx:n/2-(n/2-i.tx)*s,ty:o/2-(o/2-i.ty)*s})}onHoverEnter(t){this.hover.set(t)}onHoverLeave(){this.hover.set(null)}box(t){return G(t)}edgePath(t){let e=this.nodeMap().get(t.from),n=this.nodeMap().get(t.to);if(!e||!n)return null;let o=G(e),i=G(n),a=e.x+o.w/2,s=e.y+o.h/2,u=n.x+i.w/2,g=n.y+i.h/2,x=(a+u)/2;return`M ${a} ${s} C ${x} ${s}, ${x} ${g}, ${u} ${g}`}edgeHot(t){let e=this.selectedId();return!!e&&(t.from===e||t.to===e)}nodeColor(t){if(t.state==="drifted")return"var(--warn)";if(t.state==="broken"||t.state==="orphaned")return"var(--error)";switch(t.kind){case"spec":return"var(--node-spec)";case"route":return"var(--node-route)";case"test":return"var(--node-test)";case"class":return"var(--node-class, var(--accent-secondary))";case"method":case"function":return"var(--node-code)";default:return"var(--node-code)"}}nodeOpacity(t){let e=this.selectedId();return!e||t.id===e||this.neighborSet().has(t.id)?1:.5}isSelected(t){return t.id===this.selectedId()}isHovered(t){return t.id===this.hover()}zoomLabel(){return Math.round(this.view().k*100)+"%"}static \u0275fac=function(e){return new(e||r)};static \u0275cmp=X({type:r,selectors:[["app-graph-canvas"]],viewQuery:function(e,n){e&1&&R(n.host,ee,5),e&2&&Q()},hostBindings:function(e,n){e&1&&q("wheel",function(i){return n.onWheel(i)})("mousedown",function(i){return n.onMouseDown(i)})("mousemove",function(i){return n.onMouseMove(i)})("mouseup",function(){return n.onMouseUp()})("mouseleave",function(){return n.onMouseUp()})},inputs:{nodes:[1,"nodes"],edges:[1,"edges"],selectedId:[1,"selectedId"],fitKey:[1,"fitKey"]},outputs:{nodeClick:"nodeClick"},decls:23,vars:4,consts:[["host",""],[1,"gc-host"],["width","100%","height","100%",1,"gc-edges"],["id","gc-arrow","viewBox","0 0 10 10","refX","8","refY","5","markerWidth","6","markerHeight","6","orient","auto-start-reverse"],["d","M0 0 L10 5 L0 10 z","fill","rgba(160,170,190,0.5)"],["id","gc-arrow-hi","viewBox","0 0 10 10","refX","8","refY","5","markerWidth","7","markerHeight","7","orient","auto-start-reverse"],["d","M0 0 L10 5 L0 10 z","fill","var(--accent)"],[1,"gc-nodes"],[1,"gc-node",3,"is-selected","is-hovered","left","top","opacity"],[1,"gc-controls"],["type","button","aria-label","Zoom in",1,"gc-btn",3,"click"],["type","button","aria-label","Zoom out",1,"gc-btn",3,"click"],["type","button","aria-label","Fit to view",1,"gc-btn",3,"click"],[1,"gc-zoom-label"],["fill","none"],[1,"gc-node",3,"mouseenter","mouseleave"],[1,"gc-dot",3,"background","box-shadow"],[1,"gc-chip",3,"is-rect","min-width","background","border-color","box-shadow"],[1,"gc-tooltip"],[1,"gc-dot"],[1,"gc-chip"],[1,"gc-chip-bullet"],[1,"gc-chip-state",3,"background"],[1,"gc-chip-state"]],template:function(e,n){e&1&&(c(0,"div",1,0),T(),c(2,"svg",2)(3,"defs")(4,"marker",3),v(5,"path",4),p(),c(6,"marker",5),v(7,"path",6),p()(),c(8,"g"),I(9,oe,1,1,null,null,W),p()(),Y(),c(11,"div",7),I(12,de,6,15,"div",8,te),p(),c(14,"div",9)(15,"button",10),C("click",function(){return n.zoom(1.2)}),b(16,"+"),p(),c(17,"button",11),C("click",function(){return n.zoom(1/1.2)}),b(18,"\u2212"),p(),c(19,"button",12),C("click",function(){return n.fitView()}),b(20,"\u2922"),p()(),c(21,"div",13),b(22),p()()),e&2&&(d(8),N("transform","translate("+n.view().tx+" "+n.view().ty+") scale("+n.view().k+")"),d(),$(n.edges()),d(2),h("transform","translate("+n.view().tx+"px, "+n.view().ty+"px) scale("+n.view().k+")"),d(),$(n.positioned()),d(10),V(n.zoomLabel()))},styles:["[_nghost-%COMP%]{display:block;width:100%;height:100%;position:relative;background:var(--bg-canvas-2, var(--bg-canvas));cursor:grab;-webkit-user-select:none;user-select:none;overflow:hidden;background-image:radial-gradient(circle,var(--dot-grid, rgba(120, 130, 150, .16)) 1px,transparent 1px);background-size:22px 22px}[_nghost-%COMP%]:active{cursor:grabbing}.gc-host[_ngcontent-%COMP%]{position:absolute;inset:0}.gc-edges[_ngcontent-%COMP%]{position:absolute;inset:0;pointer-events:none}.gc-nodes[_ngcontent-%COMP%]{position:absolute;inset:0;transform-origin:0 0;pointer-events:none}.gc-node[_ngcontent-%COMP%]{position:absolute;pointer-events:auto;cursor:pointer;transition:opacity .12s}.gc-dot[_ngcontent-%COMP%]{width:18px;height:18px;border-radius:50%;border:2px solid var(--bg-canvas-2, var(--bg-canvas))}.gc-chip[_ngcontent-%COMP%]{height:30px;padding:0 12px;display:flex;align-items:center;gap:7px;border-radius:999px;border-width:1.5px;border-style:solid;color:var(--node-text, var(--text-primary));font-size:12.5px;font-weight:500;white-space:nowrap;font-family:var(--font-mono)}.gc-chip.is-rect[_ngcontent-%COMP%]{border-radius:7px}.gc-chip-bullet[_ngcontent-%COMP%]{width:7px;height:7px;border-radius:50%;flex-shrink:0}.gc-chip.is-rect[_ngcontent-%COMP%] .gc-chip-bullet[_ngcontent-%COMP%]{border-radius:2px}.gc-chip-state[_ngcontent-%COMP%]{width:6px;height:6px;border-radius:50%;margin-left:2px}.gc-tooltip[_ngcontent-%COMP%]{position:absolute;top:34px;left:50%;transform:translate(-50%);background:var(--bg-elevated);border:1px solid var(--border-strong);border-radius:5px;padding:3px 7px;font-size:10.5px;font-family:var(--font-mono);color:var(--text-secondary);white-space:nowrap;pointer-events:none;box-shadow:var(--shadow-pop, 0 4px 14px rgba(0, 0, 0, .4));z-index:5}.gc-controls[_ngcontent-%COMP%]{position:absolute;right:14px;bottom:14px;display:flex;flex-direction:column;gap:6px}.gc-btn[_ngcontent-%COMP%]{width:30px;height:30px;border-radius:7px;border:1px solid var(--border-subtle);background:var(--bg-panel);color:var(--text-secondary);cursor:pointer;font-size:16px;line-height:1;display:flex;align-items:center;justify-content:center}.gc-btn[_ngcontent-%COMP%]:hover{background:var(--bg-hover);color:var(--text-primary)}.gc-zoom-label[_ngcontent-%COMP%]{position:absolute;left:14px;bottom:14px;font-family:var(--font-mono);font-size:10px;color:var(--text-muted);background:#0006;padding:2px 7px;border-radius:5px}"],changeDetection:0})};function G(r){return r.kind==="route"?{w:18,h:18,shape:"dot"}:{w:Math.max(64,r.label.length*(r.kind==="spec"?7.6:7.2)+26),h:30,shape:r.kind==="spec"?"rect":"pill"}}export{J as a};
@@ -1 +0,0 @@
1
- import{a as M,b as ie,c as ae,h as ce,i as le,j as de}from"./chunk-RP3WU5Y6.js";import{Ba as w,Ca as ne,Da as re,E as m,Ea as oe,G as u,I as S,J as a,M as Y,Rb as se,U as f,Y as P,Z as k,a as H,ga as Z,ha as U,ia as J,ja as C,ka as j,la as A,ma as y,na as E,oa as K,pa as X,qa as W,ra as q,sa as Q,ta as ee,ua as te,va as g}from"./chunk-WVCKOJZL.js";var _=class{_doc;constructor(n){this._doc=n}manager},b=(()=>{class r extends _{constructor(e){super(e)}supports(e){return!0}addEventListener(e,t,o,s){return e.addEventListener(t,o,s),()=>this.removeEventListener(e,t,o,s)}removeEventListener(e,t,o,s){return e.removeEventListener(t,o,s)}static \u0275fac=function(t){return new(t||r)(a(f))};static \u0275prov=u({token:r,factory:r.\u0275fac})}return r})(),N=new S(""),F=(()=>{class r{_zone;_plugins;_eventNameToPlugin=new Map;constructor(e,t){this._zone=t,e.forEach(i=>{i.manager=this});let o=e.filter(i=>!(i instanceof b));this._plugins=o.slice().reverse();let s=e.find(i=>i instanceof b);s&&this._plugins.push(s)}addEventListener(e,t,o,s){return this._findPluginFor(t).addEventListener(e,t,o,s)}getZone(){return this._zone}_findPluginFor(e){let t=this._eventNameToPlugin.get(e);if(t)return t;if(t=this._plugins.find(s=>s.supports(e)),!t)throw new m(5101,!1);return this._eventNameToPlugin.set(e,t),t}static \u0275fac=function(t){return new(t||r)(a(N),a(P))};static \u0275prov=u({token:r,factory:r.\u0275fac})}return r})(),x="ng-app-id";function ue(r){for(let n of r)n.remove()}function fe(r,n){let e=n.createElement("style");return e.textContent=r,e}function Ee(r,n,e,t){let o=r.head?.querySelectorAll(`style[${x}="${n}"],link[${x}="${n}"]`);if(o)for(let s of o)s.removeAttribute(x),s instanceof HTMLLinkElement?t.set(s.href.slice(s.href.lastIndexOf("/")+1),{usage:0,elements:[s]}):s.textContent&&e.set(s.textContent,{usage:0,elements:[s]})}function V(r,n){let e=n.createElement("link");return e.setAttribute("rel","stylesheet"),e.setAttribute("href",r),e}var z=(()=>{class r{doc;appId;nonce;inline=new Map;external=new Map;hosts=new Set;constructor(e,t,o,s={}){this.doc=e,this.appId=t,this.nonce=o,Ee(e,t,this.inline,this.external),this.hosts.add(e.head)}addStyles(e,t){for(let o of e)this.addUsage(o,this.inline,fe);t?.forEach(o=>this.addUsage(o,this.external,V))}removeStyles(e,t){for(let o of e)this.removeUsage(o,this.inline);t?.forEach(o=>this.removeUsage(o,this.external))}addUsage(e,t,o){let s=t.get(e);s?s.usage++:t.set(e,{usage:1,elements:[...this.hosts].map(i=>this.addElement(i,o(e,this.doc)))})}removeUsage(e,t){let o=t.get(e);o&&(o.usage--,o.usage<=0&&(ue(o.elements),t.delete(e)))}ngOnDestroy(){for(let[,{elements:e}]of[...this.inline,...this.external])ue(e);this.hosts.clear()}addHost(e){this.hosts.add(e);for(let[t,{elements:o}]of this.inline)o.push(this.addElement(e,fe(t,this.doc)));for(let[t,{elements:o}]of this.external)o.push(this.addElement(e,V(t,this.doc)))}removeHost(e){this.hosts.delete(e)}addElement(e,t){return this.nonce&&t.setAttribute("nonce",this.nonce),e.appendChild(t)}static \u0275fac=function(t){return new(t||r)(a(f),a(U),a(j,8),a(C))};static \u0275prov=u({token:r,factory:r.\u0275fac})}return r})(),B={svg:"http://www.w3.org/2000/svg",xhtml:"http://www.w3.org/1999/xhtml",xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/",math:"http://www.w3.org/1998/Math/MathML"},$=/%COMP%/g;var me="%COMP%",Se=`_nghost-${me}`,we=`_ngcontent-${me}`,Me=!0,_e=new S("",{factory:()=>Me});function Te(r){return we.replace($,r)}function De(r){return Se.replace($,r)}function ge(r,n){return n.map(e=>e.replace($,r))}var G=(()=>{class r{eventManager;sharedStylesHost;appId;removeStylesOnCompDestroy;doc;ngZone;nonce;tracingService;rendererByCompId=new Map;defaultRenderer;constructor(e,t,o,s,i,c,d=null,l=null){this.eventManager=e,this.sharedStylesHost=t,this.appId=o,this.removeStylesOnCompDestroy=s,this.doc=i,this.ngZone=c,this.nonce=d,this.tracingService=l,this.defaultRenderer=new T(e,i,c,this.tracingService)}createRenderer(e,t){if(!e||!t)return this.defaultRenderer;let o=this.getOrCreateRenderer(e,t);return o instanceof O?o.applyToHost(e):o instanceof D&&o.applyStyles(),o}getOrCreateRenderer(e,t){let o=this.rendererByCompId,s=o.get(t.id);if(!s){let i=this.doc,c=this.ngZone,d=this.eventManager,l=this.sharedStylesHost,p=this.removeStylesOnCompDestroy,h=this.tracingService;switch(t.encapsulation){case A.Emulated:s=new O(d,l,t,this.appId,p,i,c,h);break;case A.ShadowDom:return new I(d,e,t,i,c,this.nonce,h,l);case A.ExperimentalIsolatedShadowDom:return new I(d,e,t,i,c,this.nonce,h);default:s=new D(d,l,t,p,i,c,h);break}o.set(t.id,s)}return s}ngOnDestroy(){this.rendererByCompId.clear()}componentReplaced(e){this.rendererByCompId.delete(e)}static \u0275fac=function(t){return new(t||r)(a(F),a(z),a(U),a(_e),a(f),a(P),a(j),a(re,8))};static \u0275prov=u({token:r,factory:r.\u0275fac})}return r})(),T=class{eventManager;doc;ngZone;tracingService;data=Object.create(null);throwOnSyntheticProps=!0;constructor(n,e,t,o){this.eventManager=n,this.doc=e,this.ngZone=t,this.tracingService=o}destroy(){}destroyNode=null;createElement(n,e){return e?this.doc.createElementNS(B[e]||e,n):this.doc.createElement(n)}createComment(n){return this.doc.createComment(n)}createText(n){return this.doc.createTextNode(n)}appendChild(n,e){(pe(n)?n.content:n).appendChild(e)}insertBefore(n,e,t){n&&(pe(n)?n.content:n).insertBefore(e,t)}removeChild(n,e){e.remove()}selectRootElement(n,e){let t=typeof n=="string"?this.doc.querySelector(n):n;if(!t)throw new m(-5104,!1);return e||(t.textContent=""),t}parentNode(n){return n.parentNode}nextSibling(n){return n.nextSibling}setAttribute(n,e,t,o){if(o){e=o+":"+e;let s=B[o];s?n.setAttributeNS(s,e,t):n.setAttribute(e,t)}else n.setAttribute(e,t)}removeAttribute(n,e,t){if(t){let o=B[t];o?n.removeAttributeNS(o,e):n.removeAttribute(`${t}:${e}`)}else n.removeAttribute(e)}addClass(n,e){n.classList.add(e)}removeClass(n,e){n.classList.remove(e)}setStyle(n,e,t,o){o&(w.DashCase|w.Important)?n.style.setProperty(e,t,o&w.Important?"important":""):n.style[e]=t}removeStyle(n,e,t){t&w.DashCase?n.style.removeProperty(e):n.style[e]=""}setProperty(n,e,t){n!=null&&(n[e]=t)}setValue(n,e){n.nodeValue=e}listen(n,e,t,o){if(typeof n=="string"&&(n=M().getGlobalEventTarget(this.doc,n),!n))throw new m(5102,!1);let s=this.decoratePreventDefault(t);return this.tracingService?.wrapEventListener&&(s=this.tracingService.wrapEventListener(n,e,s)),this.eventManager.addEventListener(n,e,s,o)}decoratePreventDefault(n){return e=>{if(e==="__ngUnwrap__")return n;n(e)===!1&&e.preventDefault()}}};function pe(r){return r.tagName==="TEMPLATE"&&r.content!==void 0}var I=class extends T{hostEl;sharedStylesHost;shadowRoot;constructor(n,e,t,o,s,i,c,d){super(n,o,s,c),this.hostEl=e,this.sharedStylesHost=d,this.shadowRoot=e.attachShadow({mode:"open"}),this.sharedStylesHost&&this.sharedStylesHost.addHost(this.shadowRoot);let l=t.styles;l=ge(t.id,l);for(let h of l){let v=document.createElement("style");i&&v.setAttribute("nonce",i),v.textContent=h,this.shadowRoot.appendChild(v)}let p=t.getExternalStyles?.();if(p)for(let h of p){let v=V(h,o);i&&v.setAttribute("nonce",i),this.shadowRoot.appendChild(v)}}nodeOrShadowRoot(n){return n===this.hostEl?this.shadowRoot:n}appendChild(n,e){return super.appendChild(this.nodeOrShadowRoot(n),e)}insertBefore(n,e,t){return super.insertBefore(this.nodeOrShadowRoot(n),e,t)}removeChild(n,e){return super.removeChild(null,e)}parentNode(n){return this.nodeOrShadowRoot(super.parentNode(this.nodeOrShadowRoot(n)))}destroy(){this.sharedStylesHost&&this.sharedStylesHost.removeHost(this.shadowRoot)}},D=class extends T{sharedStylesHost;removeStylesOnCompDestroy;styles;styleUrls;constructor(n,e,t,o,s,i,c,d){super(n,s,i,c),this.sharedStylesHost=e,this.removeStylesOnCompDestroy=o;let l=t.styles;this.styles=d?ge(d,l):l,this.styleUrls=t.getExternalStyles?.(d)}applyStyles(){this.sharedStylesHost.addStyles(this.styles,this.styleUrls)}destroy(){this.removeStylesOnCompDestroy&&ne.size===0&&this.sharedStylesHost.removeStyles(this.styles,this.styleUrls)}},O=class extends D{contentAttr;hostAttr;constructor(n,e,t,o,s,i,c,d){let l=o+"-"+t.id;super(n,e,t,s,i,c,d,l),this.contentAttr=Te(l),this.hostAttr=De(l)}applyToHost(n){this.applyStyles(),this.setAttribute(n,this.hostAttr,"")}createElement(n,e){let t=super.createElement(n,e);return super.setAttribute(t,this.contentAttr,""),t}};var L=class r extends ae{supportsDOMEvents=!0;static makeCurrent(){ie(new r)}onAndCancel(n,e,t,o){return n.addEventListener(e,t,o),()=>{n.removeEventListener(e,t,o)}}dispatchEvent(n,e){n.dispatchEvent(e)}remove(n){n.remove()}createElement(n,e){return e=e||this.getDefaultDocument(),e.createElement(n)}createHtmlDocument(){return document.implementation.createHTMLDocument("fakeTitle")}getDefaultDocument(){return document}isElementNode(n){return n.nodeType===Node.ELEMENT_NODE}isShadowRoot(n){return n instanceof DocumentFragment}getGlobalEventTarget(n,e){return e==="window"?window:e==="document"?n:e==="body"?n.body:null}getBaseHref(n){let e=be();return e==null?null:Ie(e)}resetBaseElement(){R=null}getUserAgent(){return window.navigator.userAgent}getCookie(n){return ce(document.cookie,n)}},R=null;function be(){return R=R||document.head.querySelector("base"),R?R.getAttribute("href"):null}function Ie(r){return new URL(r,document.baseURI).pathname}var Oe=(()=>{class r{build(){return new XMLHttpRequest}static \u0275fac=function(t){return new(t||r)};static \u0275prov=u({token:r,factory:r.\u0275fac})}return r})(),ve=["alt","control","meta","shift"],Ne={"\b":"Backspace"," ":"Tab","\x7F":"Delete","\x1B":"Escape",Del:"Delete",Esc:"Escape",Left:"ArrowLeft",Right:"ArrowRight",Up:"ArrowUp",Down:"ArrowDown",Menu:"ContextMenu",Scroll:"ScrollLock",Win:"OS"},Le={alt:r=>r.altKey,control:r=>r.ctrlKey,meta:r=>r.metaKey,shift:r=>r.shiftKey},ye=(()=>{class r extends _{constructor(e){super(e)}supports(e){return r.parseEventName(e)!=null}addEventListener(e,t,o,s){let i=r.parseEventName(t),c=r.eventCallback(i.fullKey,o,this.manager.getZone());return this.manager.getZone().runOutsideAngular(()=>M().onAndCancel(e,i.domEventName,c,s))}static parseEventName(e){let t=e.toLowerCase().split("."),o=t.shift();if(t.length===0||!(o==="keydown"||o==="keyup"))return null;let s=r._normalizeKey(t.pop()),i="",c=t.indexOf("code");if(c>-1&&(t.splice(c,1),i="code."),ve.forEach(l=>{let p=t.indexOf(l);p>-1&&(t.splice(p,1),i+=l+".")}),i+=s,t.length!=0||s.length===0)return null;let d={};return d.domEventName=o,d.fullKey=i,d}static matchEventFullKeyCode(e,t){let o=Ne[e.key]||e.key,s="";return t.indexOf("code.")>-1&&(o=e.code,s="code."),o==null||!o?!1:(o=o.toLowerCase(),o===" "?o="space":o==="."&&(o="dot"),ve.forEach(i=>{if(i!==o){let c=Le[i];c(e)&&(s+=i+".")}}),s+=o,s===t)}static eventCallback(e,t,o){return s=>{r.matchEventFullKeyCode(s,e)&&o.runGuarded(()=>t(s))}}static _normalizeKey(e){return e==="esc"?"escape":e}static \u0275fac=function(t){return new(t||r)(a(f))};static \u0275prov=u({token:r,factory:r.\u0275fac})}return r})();async function He(r,n,e){let t=H({rootComponent:r},Pe(n,e));return se(t)}function Pe(r,n){return{platformRef:n?.platformRef,appProviders:[...Be,...r?.providers??[]],platformProviders:xe}}function ke(){L.makeCurrent()}function Ue(){return new k}function je(){return Z(document),document}var xe=[{provide:C,useValue:de},{provide:J,useValue:ke,multi:!0},{provide:f,useFactory:je}];var Be=[{provide:Y,useValue:"root"},{provide:k,useFactory:Ue},{provide:N,useClass:b,multi:!0},{provide:N,useClass:ye,multi:!0},G,z,F,{provide:oe,useExisting:G},{provide:le,useClass:Oe},[]];var Vt=(()=>{class r{_doc;constructor(e){this._doc=e}getTitle(){return this._doc.title}setTitle(e){this._doc.title=e||""}static \u0275fac=function(t){return new(t||r)(a(f))};static \u0275prov=u({token:r,factory:r.\u0275fac,providedIn:"root"})}return r})();var Fe=(()=>{class r{static \u0275fac=function(t){return new(t||r)};static \u0275prov=u({token:r,factory:function(t){let o=null;return t?o=new(t||r):o=a(ze),o},providedIn:"root"})}return r})(),ze=(()=>{class r extends Fe{_doc;constructor(e){super(),this._doc=e}sanitize(e,t){if(t==null)return null;switch(e){case g.NONE:return t;case g.HTML:return E(t,"HTML")?y(t):te(this._doc,String(t)).toString();case g.STYLE:return E(t,"Style")?y(t):t;case g.SCRIPT:if(E(t,"Script"))return y(t);throw new m(5200,!1);case g.URL:return E(t,"URL")?y(t):ee(String(t));case g.RESOURCE_URL:if(E(t,"ResourceURL"))return y(t);throw new m(5201,!1);default:throw new m(5202,!1)}}bypassSecurityTrustHtml(e){return K(e)}bypassSecurityTrustStyle(e){return X(e)}bypassSecurityTrustScript(e){return W(e)}bypassSecurityTrustUrl(e){return q(e)}bypassSecurityTrustResourceUrl(e){return Q(e)}static \u0275fac=function(t){return new(t||r)(a(f))};static \u0275prov=u({token:r,factory:r.\u0275fac,providedIn:"root"})}return r})();export{He as a,Vt as b,Fe as c};
@@ -1 +0,0 @@
1
- import{a as F}from"./chunk-4LHBWWP7.js";import{a as z}from"./chunk-ZABKKHJ3.js";import{g as j}from"./chunk-RP3WU5Y6.js";import{Aa as s,Cb as D,Eb as I,Gb as R,K as y,Ka as w,Kb as E,P as h,Q as C,Sa as S,Ta as M,Va as b,Wa as m,Xa as g,aa as v,ab as o,bb as n,cb as P,db as k,ib as u,jb as l,pb as O,qb as x,sb as r,tb as _,ub as c,wb as T}from"./chunk-WVCKOJZL.js";var $=()=>[0,1,2,3,4],B=(a,e)=>e.fullId;function L(a,e){if(a&1){let t=k();o(0,"button",17),u("click",function(){let d=h(t).$implicit,p=l();return C(p.setRange(d))}),r(1),n()}if(a&2){let t=e.$implicit,i=l();x("active",i.range()===t),s(),c(" ",t==="today"?"Today":t==="week"?"Week":t==="month"?"Month":"All"," ")}}function V(a,e){a&1&&(o(0,"div",18),P(1,"div",19),n())}function A(a,e){a&1&&m(0,V,2,0,"div",18,b),a&2&&g(D(0,$))}function W(a,e){if(a&1&&(o(0,"div",20)(1,"span",21),r(2),n(),o(3,"span",22),r(4),n(),o(5,"span",23),r(6),n(),o(7,"span",24),r(8),n(),o(9,"span",24),r(10),I(11,"number"),n(),o(12,"span",25),r(13),n()()),a&2){let t=e.$implicit,i=l(2);s(2),_(t.id),s(2),_(t.project),s(2),T("",t.started," \u2013 ",t.ended," \xB7 ",t.model),s(2),_(t.prompts),s(),O("color",i.cacheColor(t.cache)),s(),c("",R(11,10,t.cache*100,"1.0-0"),"%"),s(3),c("$",t.cost.toFixed(2))}}function Y(a,e){if(a&1&&m(0,W,14,13,"div",20,B),a&2){let t=l();g(t.sorted())}}var N=class a{api=y(z);range=v("all");sort=v("cost");ranges=["today","week","month","all"];resource=F(this.api,()=>`/api/claude/sessions?range=${this.range()}&limit=200`);rows=E(()=>(this.resource.state().data?.sessions??[]).map(t=>this.adapt(t)));sorted=E(()=>{let e=this.sort();return[...this.rows()].sort((t,i)=>e==="cost"?i.cost-t.cost:i.prompts-t.prompts)});adapt(e){let t=(e.total_input_tokens||0)+(e.total_cache_creation_tokens||0)+(e.total_cache_read_tokens||0);return{id:(e.id||"").slice(0,8),fullId:e.id,project:(e.project_path||"").split("/").filter(Boolean).pop()||"?",started:this.fmtTime(e.started_at),ended:this.fmtTime(e.ended_at).split(" ").pop()||"",prompts:e.prompt_count||0,cost:e.total_cost_usd||0,cache:t>0?(e.total_cache_read_tokens||0)/t:0,model:e.last_model||"unknown"}}fmtTime(e){if(!e)return"";try{let t=new Date(e),i=new Date;i.setHours(0,0,0,0);let d=864e5,p=i.getTime()-new Date(t.getFullYear(),t.getMonth(),t.getDate()).getTime(),f=t.toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"});return p===0?"Today "+f:p===d?"Yest "+f:t.toLocaleDateString([],{month:"short",day:"numeric"})+" "+f}catch{return String(e)}}setSort(e){this.sort.set(e)}setRange(e){this.range.set(e)}cacheColor(e){return e>=.7?"var(--success)":e>=.5?"var(--warn)":"var(--error)"}static \u0275fac=function(t){return new(t||a)};static \u0275cmp=w({type:a,selectors:[["app-sessions"]],decls:34,vars:6,consts:[[1,"page"],[1,"page-head"],[1,"title-block"],[1,"title"],[1,"sub"],[1,"range-selector"],["type","button",1,"range-opt",3,"active"],[1,"filter-bar"],[1,"muted"],[1,"seg"],["type","button",3,"click"],[1,"scroll-y","card","list"],[1,"header-row"],[1,"col-id"],[1,"col-project"],[1,"col-window","grow"],[1,"col-num"],["type","button",1,"range-opt",3,"click"],[1,"row","skeleton-row"],[1,"skel"],[1,"row"],[1,"mono","col-id"],[1,"col-project","pill"],[1,"mono","muted","col-window","grow"],[1,"mono","col-num"],[1,"mono","col-num","cost"]],template:function(t,i){t&1&&(o(0,"div",0)(1,"header",1)(2,"div",2)(3,"div",3),r(4,"Sessions"),n(),o(5,"div",4),r(6),n()(),o(7,"div",5),m(8,L,2,3,"button",6,b),n()(),o(10,"div",7)(11,"span",8),r(12,"sort"),n(),o(13,"div",9)(14,"button",10),u("click",function(){return i.setSort("cost")}),r(15,"Cost"),n(),o(16,"button",10),u("click",function(){return i.setSort("prompts")}),r(17,"Prompts"),n()()(),o(18,"div",11)(19,"div",12)(20,"span",13),r(21,"Session"),n(),o(22,"span",14),r(23,"Project"),n(),o(24,"span",15),r(25,"Window"),n(),o(26,"span",16),r(27,"Prompts"),n(),o(28,"span",16),r(29,"Cache"),n(),o(30,"span",16),r(31,"Cost"),n()(),S(32,A,2,1)(33,Y,2,0),n()()),t&2&&(s(6),c(" ",i.resource.state().loading?"loading\u2026":i.sorted().length+" sessions"," "),s(2),g(i.ranges),s(6),x("active",i.sort()==="cost"),s(2),x("active",i.sort()==="prompts"),s(16),M(i.resource.state().loading?32:33))},dependencies:[j],styles:["[_nghost-%COMP%]{display:contents}.page[_ngcontent-%COMP%]{flex:1;display:flex;flex-direction:column;min-height:0;padding:16px 18px 18px}.page-head[_ngcontent-%COMP%]{display:flex;align-items:flex-start;gap:12px;margin-bottom:12px}.title-block[_ngcontent-%COMP%]{flex:1}.title[_ngcontent-%COMP%]{font-size:var(--fs-title);font-weight:600;letter-spacing:-.01em}.sub[_ngcontent-%COMP%]{color:var(--text-secondary);margin-top:2px}.range-selector[_ngcontent-%COMP%]{display:inline-flex;background:var(--bg-canvas);border:1px solid var(--border-subtle);border-radius:7px;padding:2px;gap:2px}.range-opt[_ngcontent-%COMP%]{border:none;cursor:pointer;border-radius:5px;padding:5px 12px;font-size:var(--fs-sm);font-weight:500;font-family:var(--font-ui);background:transparent;color:var(--text-muted)}.range-opt.active[_ngcontent-%COMP%]{background:var(--bg-elevated);color:var(--text-primary)}.filter-bar[_ngcontent-%COMP%]{display:flex;align-items:center;gap:10px;margin-bottom:12px}.muted[_ngcontent-%COMP%]{color:var(--text-muted);font-size:11.5px}.seg[_ngcontent-%COMP%]{display:inline-flex;gap:2px;padding:2px;background:var(--bg-canvas);border:1px solid var(--border-subtle);border-radius:7px}.seg[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{border:none;background:transparent;cursor:pointer;padding:3px 9px;font-size:var(--fs-sm);font-family:inherit;color:var(--text-muted);border-radius:5px}.seg[_ngcontent-%COMP%] button.active[_ngcontent-%COMP%]{background:var(--bg-elevated);color:var(--text-primary)}.card[_ngcontent-%COMP%]{background:var(--bg-panel);border:1px solid var(--border-subtle);border-radius:var(--r-lg);overflow:hidden}.list[_ngcontent-%COMP%]{flex:1;min-height:0}.header-row[_ngcontent-%COMP%]{display:flex;padding:8px 14px;font-size:10.5px;color:var(--text-muted);text-transform:uppercase;letter-spacing:.05em;font-weight:600;border-bottom:1px solid var(--border-subtle)}.row[_ngcontent-%COMP%]{display:flex;padding:11px 14px;border-top:1px solid var(--border-subtle);cursor:pointer;align-items:center}.row[_ngcontent-%COMP%]:hover{background:var(--bg-hover)}.row[_ngcontent-%COMP%]:first-of-type{border-top:none}.col-id[_ngcontent-%COMP%]{width:90px;font-size:12px}.col-project[_ngcontent-%COMP%]{width:110px}.col-window[_ngcontent-%COMP%]{padding:0 8px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:11.5px}.col-num[_ngcontent-%COMP%]{width:70px;text-align:right;font-size:12px;font-variant-numeric:tabular-nums}.cost[_ngcontent-%COMP%]{font-weight:600}.grow[_ngcontent-%COMP%]{flex:1}.mono[_ngcontent-%COMP%]{font-family:var(--font-mono)}.pill[_ngcontent-%COMP%]{display:inline-flex;align-items:center;font-size:11px;padding:2px 8px;border-radius:var(--r-pill);background:#ffffff0d;color:var(--text-secondary)}.skel[_ngcontent-%COMP%]{background:var(--bg-elevated);border-radius:5px;animation:_ngcontent-%COMP%_skeleton 1.4s ease-in-out infinite;height:18px;flex:1}.skeleton-row[_ngcontent-%COMP%]{padding:10px 14px}@keyframes _ngcontent-%COMP%_skeleton{0%,to{opacity:.5}50%{opacity:.9}}"],changeDetection:0})};export{N as Sessions};