@hesed/webui 0.1.0 → 0.2.2

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 (240) hide show
  1. package/README.md +2 -2
  2. package/dist/commands/webui.d.ts +8 -0
  3. package/dist/commands/webui.js +12 -0
  4. package/dist/lib/introspect.js +23 -10
  5. package/dist/lib/server.d.ts +7 -1
  6. package/dist/lib/server.js +5 -3
  7. package/dist/web/BUILD_ID +1 -0
  8. package/{web/.next → dist/web}/app-path-routes-manifest.json +1 -0
  9. package/dist/web/build-manifest.json +20 -0
  10. package/dist/web/cache/.previewinfo +1 -0
  11. package/dist/web/cache/.rscinfo +1 -0
  12. package/dist/web/cache/.tsbuildinfo +1 -0
  13. package/dist/web/cache/config.json +7 -0
  14. package/dist/web/diagnostics/framework.json +1 -0
  15. package/dist/web/diagnostics/route-bundle-stats.json +27 -0
  16. package/dist/web/fallback-build-manifest.json +13 -0
  17. package/{web/.next → dist/web}/images-manifest.json +13 -3
  18. package/dist/web/next-minimal-server.js.nft.json +1 -0
  19. package/dist/web/next-server.js.nft.json +1 -0
  20. package/{web/.next → dist/web}/prerender-manifest.json +27 -3
  21. package/dist/web/required-server-files.js +333 -0
  22. package/{web/.next → dist/web}/required-server-files.json +103 -90
  23. package/{web/.next → dist/web}/routes-manifest.json +12 -2
  24. package/dist/web/server/app/_global-error/page/app-paths-manifest.json +3 -0
  25. package/dist/web/server/app/_global-error/page/build-manifest.json +16 -0
  26. package/dist/web/server/app/_global-error/page/next-font-manifest.json +6 -0
  27. package/dist/web/server/app/_global-error/page/server-reference-manifest.json +4 -0
  28. package/dist/web/server/app/_global-error/page.js +9 -0
  29. package/dist/web/server/app/_global-error/page.js.map +5 -0
  30. package/dist/web/server/app/_global-error/page.js.nft.json +1 -0
  31. package/dist/web/server/app/_global-error/page_client-reference-manifest.js +3 -0
  32. package/dist/web/server/app/_global-error.html +1 -0
  33. package/dist/web/server/app/_global-error.meta +15 -0
  34. package/dist/web/server/app/_global-error.rsc +14 -0
  35. package/dist/web/server/app/_global-error.segments/__PAGE__.segment.rsc +5 -0
  36. package/dist/web/server/app/_global-error.segments/_full.segment.rsc +14 -0
  37. package/dist/web/server/app/_global-error.segments/_head.segment.rsc +5 -0
  38. package/dist/web/server/app/_global-error.segments/_index.segment.rsc +5 -0
  39. package/dist/web/server/app/_global-error.segments/_tree.segment.rsc +1 -0
  40. package/dist/web/server/app/_not-found/page/app-paths-manifest.json +3 -0
  41. package/dist/web/server/app/_not-found/page/build-manifest.json +16 -0
  42. package/dist/web/server/app/_not-found/page/next-font-manifest.json +6 -0
  43. package/dist/web/server/app/_not-found/page/server-reference-manifest.json +4 -0
  44. package/dist/web/server/app/_not-found/page.js +12 -0
  45. package/dist/web/server/app/_not-found/page.js.map +5 -0
  46. package/dist/web/server/app/_not-found/page.js.nft.json +1 -0
  47. package/dist/web/server/app/_not-found/page_client-reference-manifest.js +3 -0
  48. package/dist/web/server/app/_not-found.html +1 -0
  49. package/{web/.next → dist/web}/server/app/_not-found.meta +9 -1
  50. package/dist/web/server/app/_not-found.rsc +16 -0
  51. package/dist/web/server/app/_not-found.segments/_full.segment.rsc +16 -0
  52. package/dist/web/server/app/_not-found.segments/_head.segment.rsc +5 -0
  53. package/dist/web/server/app/_not-found.segments/_index.segment.rsc +6 -0
  54. package/dist/web/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +5 -0
  55. package/dist/web/server/app/_not-found.segments/_not-found.segment.rsc +5 -0
  56. package/dist/web/server/app/_not-found.segments/_tree.segment.rsc +2 -0
  57. package/dist/web/server/app/index.html +1 -0
  58. package/dist/web/server/app/index.meta +14 -0
  59. package/dist/web/server/app/index.rsc +18 -0
  60. package/dist/web/server/app/index.segments/__PAGE__.segment.rsc +9 -0
  61. package/dist/web/server/app/index.segments/_full.segment.rsc +18 -0
  62. package/dist/web/server/app/index.segments/_head.segment.rsc +5 -0
  63. package/dist/web/server/app/index.segments/_index.segment.rsc +6 -0
  64. package/dist/web/server/app/index.segments/_tree.segment.rsc +2 -0
  65. package/dist/web/server/app/page/app-paths-manifest.json +3 -0
  66. package/dist/web/server/app/page/build-manifest.json +16 -0
  67. package/dist/web/server/app/page/next-font-manifest.json +6 -0
  68. package/dist/web/server/app/page/react-loadable-manifest.json +1 -0
  69. package/dist/web/server/app/page/server-reference-manifest.json +4 -0
  70. package/dist/web/server/app/page.js +13 -0
  71. package/dist/web/server/app/page.js.map +5 -0
  72. package/dist/web/server/app/page.js.nft.json +1 -0
  73. package/dist/web/server/app/page_client-reference-manifest.js +3 -0
  74. package/{web/.next → dist/web}/server/app-paths-manifest.json +1 -0
  75. package/dist/web/server/chunks/ssr/[root-of-the-server]__0100oqz._.js +19 -0
  76. package/dist/web/server/chunks/ssr/[root-of-the-server]__0100oqz._.js.map +1 -0
  77. package/dist/web/server/chunks/ssr/[root-of-the-server]__03bqxv9._.js +33 -0
  78. package/dist/web/server/chunks/ssr/[root-of-the-server]__03bqxv9._.js.map +1 -0
  79. package/dist/web/server/chunks/ssr/[root-of-the-server]__10hrvcf._.js +3 -0
  80. package/dist/web/server/chunks/ssr/[root-of-the-server]__10hrvcf._.js.map +1 -0
  81. package/dist/web/server/chunks/ssr/[root-of-the-server]__10riywf._.js +3 -0
  82. package/dist/web/server/chunks/ssr/[root-of-the-server]__10riywf._.js.map +1 -0
  83. package/dist/web/server/chunks/ssr/[root-of-the-server]__17sw5v1._.js +3 -0
  84. package/dist/web/server/chunks/ssr/[root-of-the-server]__17sw5v1._.js.map +1 -0
  85. package/dist/web/server/chunks/ssr/[root-of-the-server]__1my83lt._.js +33 -0
  86. package/dist/web/server/chunks/ssr/[root-of-the-server]__1my83lt._.js.map +1 -0
  87. package/dist/web/server/chunks/ssr/[root-of-the-server]__1ujipwi._.js +3 -0
  88. package/dist/web/server/chunks/ssr/[root-of-the-server]__1ujipwi._.js.map +1 -0
  89. package/dist/web/server/chunks/ssr/[turbopack]_runtime.js +903 -0
  90. package/dist/web/server/chunks/ssr/[turbopack]_runtime.js.map +11 -0
  91. package/dist/web/server/chunks/ssr/node_modules_0h91jdk._.js +33 -0
  92. package/dist/web/server/chunks/ssr/node_modules_0h91jdk._.js.map +1 -0
  93. package/dist/web/server/chunks/ssr/node_modules_next_dist_1vgd_ru._.js +6 -0
  94. package/dist/web/server/chunks/ssr/node_modules_next_dist_1vgd_ru._.js.map +1 -0
  95. package/dist/web/server/chunks/ssr/node_modules_next_dist_client_components_0wpq8j3._.js +3 -0
  96. package/dist/web/server/chunks/ssr/node_modules_next_dist_client_components_0wpq8j3._.js.map +1 -0
  97. package/dist/web/server/chunks/ssr/node_modules_next_dist_client_components_builtin_forbidden_0symwr9.js +3 -0
  98. package/dist/web/server/chunks/ssr/node_modules_next_dist_client_components_builtin_forbidden_0symwr9.js.map +1 -0
  99. package/dist/web/server/chunks/ssr/node_modules_next_dist_client_components_builtin_global-error_0-o-goa.js +3 -0
  100. package/dist/web/server/chunks/ssr/node_modules_next_dist_client_components_builtin_global-error_0-o-goa.js.map +1 -0
  101. package/dist/web/server/chunks/ssr/node_modules_next_dist_client_components_builtin_unauthorized_0l_sp0x.js +3 -0
  102. package/dist/web/server/chunks/ssr/node_modules_next_dist_client_components_builtin_unauthorized_0l_sp0x.js.map +1 -0
  103. package/dist/web/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_13nn6g7.js +4 -0
  104. package/dist/web/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_13nn6g7.js.map +1 -0
  105. package/dist/web/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_19--w_z.js +4 -0
  106. package/dist/web/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_19--w_z.js.map +1 -0
  107. package/dist/web/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1o7-715.js +4 -0
  108. package/dist/web/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1o7-715.js.map +1 -0
  109. package/dist/web/server/chunks/ssr/web_0iag39l._.js +3 -0
  110. package/dist/web/server/chunks/ssr/web_0iag39l._.js.map +1 -0
  111. package/dist/web/server/chunks/ssr/web__next-internal_server_app__global-error_page_actions_0crg1np.js +3 -0
  112. package/dist/web/server/chunks/ssr/web__next-internal_server_app__global-error_page_actions_0crg1np.js.map +1 -0
  113. package/dist/web/server/chunks/ssr/web__next-internal_server_app__not-found_page_actions_19z2-pv.js +3 -0
  114. package/dist/web/server/chunks/ssr/web__next-internal_server_app__not-found_page_actions_19z2-pv.js.map +1 -0
  115. package/dist/web/server/chunks/ssr/web__next-internal_server_app_page_actions_1xcff7h.js +3 -0
  116. package/dist/web/server/chunks/ssr/web__next-internal_server_app_page_actions_1xcff7h.js.map +1 -0
  117. package/dist/web/server/chunks/ssr/web_app_page_tsx_1-p0-hs._.js +3 -0
  118. package/dist/web/server/chunks/ssr/web_app_page_tsx_1-p0-hs._.js.map +1 -0
  119. package/dist/web/server/middleware-build-manifest.js +20 -0
  120. package/dist/web/server/middleware-manifest.json +6 -0
  121. package/dist/web/server/next-font-manifest.js +1 -0
  122. package/dist/web/server/next-font-manifest.json +6 -0
  123. package/dist/web/server/pages/404.html +1 -0
  124. package/dist/web/server/pages/500.html +1 -0
  125. package/dist/web/server/pages-manifest.json +4 -0
  126. package/dist/web/server/prefetch-hints.json +1 -0
  127. package/dist/web/server/server-reference-manifest.js +1 -0
  128. package/dist/web/server/server-reference-manifest.json +5 -0
  129. package/dist/web/static/PDMigBNKG7RenqXyfgiNr/_buildManifest.js +11 -0
  130. package/dist/web/static/PDMigBNKG7RenqXyfgiNr/_clientMiddlewareManifest.js +1 -0
  131. package/dist/web/static/chunks/0atut6a2uuyid.js +5 -0
  132. package/dist/web/static/chunks/158myu8e_yme3.js +1 -0
  133. package/dist/web/static/chunks/1_v5h-yjbgzno.js +1 -0
  134. package/dist/web/static/chunks/1bnss_1e9svpl.css +1 -0
  135. package/dist/web/static/chunks/1jq4o6yq14o4c.js +31 -0
  136. package/dist/web/static/chunks/28o7f8wux_ygy.js +1 -0
  137. package/dist/web/static/chunks/2nykiepra7i1k.js +1 -0
  138. package/dist/web/static/chunks/turbopack-3i0d1wb0b07u8.js +1 -0
  139. package/dist/web/trace +1 -0
  140. package/dist/web/trace-build +1 -0
  141. package/dist/web/turbopack +0 -0
  142. package/{web/.next → dist/web}/types/cache-life.d.ts +21 -17
  143. package/{web/.next → dist/web}/types/validator.ts +4 -4
  144. package/oclif.manifest.json +1 -1
  145. package/package.json +5 -10
  146. package/web/next.config.mjs +11 -6
  147. package/web/.next/BUILD_ID +0 -1
  148. package/web/.next/app-build-manifest.json +0 -26
  149. package/web/.next/build-manifest.json +0 -33
  150. package/web/.next/cache/.previewinfo +0 -1
  151. package/web/.next/cache/.rscinfo +0 -1
  152. package/web/.next/cache/.tsbuildinfo +0 -1
  153. package/web/.next/cache/eslint/.cache_1ki824o +0 -1
  154. package/web/.next/cache/webpack/client-development/0.pack.gz +0 -0
  155. package/web/.next/cache/webpack/client-development/1.pack.gz +0 -0
  156. package/web/.next/cache/webpack/client-development/index.pack.gz +0 -0
  157. package/web/.next/cache/webpack/client-development/index.pack.gz.old +0 -0
  158. package/web/.next/cache/webpack/client-production/0.pack +0 -0
  159. package/web/.next/cache/webpack/client-production/1.pack +0 -0
  160. package/web/.next/cache/webpack/client-production/2.pack +0 -0
  161. package/web/.next/cache/webpack/client-production/3.pack +0 -0
  162. package/web/.next/cache/webpack/client-production/index.pack +0 -0
  163. package/web/.next/cache/webpack/client-production/index.pack.old +0 -0
  164. package/web/.next/cache/webpack/edge-server-production/0.pack +0 -0
  165. package/web/.next/cache/webpack/edge-server-production/index.pack +0 -0
  166. package/web/.next/cache/webpack/server-development/0.pack.gz +0 -0
  167. package/web/.next/cache/webpack/server-development/index.pack.gz +0 -0
  168. package/web/.next/cache/webpack/server-production/0.pack +0 -0
  169. package/web/.next/cache/webpack/server-production/1.pack +0 -0
  170. package/web/.next/cache/webpack/server-production/index.pack +0 -0
  171. package/web/.next/cache/webpack/server-production/index.pack.old +0 -0
  172. package/web/.next/diagnostics/framework.json +0 -1
  173. package/web/.next/next-minimal-server.js.nft.json +0 -1
  174. package/web/.next/next-server.js.nft.json +0 -1
  175. package/web/.next/server/app/_not-found/page.js +0 -2
  176. package/web/.next/server/app/_not-found/page.js.nft.json +0 -1
  177. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +0 -1
  178. package/web/.next/server/app/_not-found.html +0 -1
  179. package/web/.next/server/app/_not-found.rsc +0 -16
  180. package/web/.next/server/app/index.html +0 -1
  181. package/web/.next/server/app/index.meta +0 -7
  182. package/web/.next/server/app/index.rsc +0 -20
  183. package/web/.next/server/app/page.js +0 -2
  184. package/web/.next/server/app/page.js.nft.json +0 -1
  185. package/web/.next/server/app/page_client-reference-manifest.js +0 -1
  186. package/web/.next/server/chunks/157.js +0 -6
  187. package/web/.next/server/chunks/799.js +0 -30
  188. package/web/.next/server/middleware-build-manifest.js +0 -1
  189. package/web/.next/server/middleware-manifest.json +0 -6
  190. package/web/.next/server/middleware-react-loadable-manifest.js +0 -1
  191. package/web/.next/server/next-font-manifest.js +0 -1
  192. package/web/.next/server/next-font-manifest.json +0 -1
  193. package/web/.next/server/pages/404.html +0 -1
  194. package/web/.next/server/pages/500.html +0 -1
  195. package/web/.next/server/pages/_app.js +0 -1
  196. package/web/.next/server/pages/_app.js.nft.json +0 -1
  197. package/web/.next/server/pages/_document.js +0 -1
  198. package/web/.next/server/pages/_document.js.nft.json +0 -1
  199. package/web/.next/server/pages/_error.js +0 -19
  200. package/web/.next/server/pages/_error.js.nft.json +0 -1
  201. package/web/.next/server/pages-manifest.json +0 -6
  202. package/web/.next/server/server-reference-manifest.js +0 -1
  203. package/web/.next/server/server-reference-manifest.json +0 -1
  204. package/web/.next/server/webpack-runtime.js +0 -1
  205. package/web/.next/static/LEwu5WvMMaoVEbVj3-KGq/_buildManifest.js +0 -1
  206. package/web/.next/static/chunks/131-a68a87dd22cef82b.js +0 -1
  207. package/web/.next/static/chunks/app/_not-found/page-784ddbf5f1a9343a.js +0 -1
  208. package/web/.next/static/chunks/app/layout-4e0fe443358078fc.js +0 -1
  209. package/web/.next/static/chunks/app/page-d098bd39f1fcec43.js +0 -1
  210. package/web/.next/static/chunks/c7879cf7-b5ab1053c1d9a2e7.js +0 -1
  211. package/web/.next/static/chunks/framework-1934959d81242241.js +0 -1
  212. package/web/.next/static/chunks/main-a8814cf406d931cd.js +0 -1
  213. package/web/.next/static/chunks/main-app-a3b742ef05fa17a3.js +0 -1
  214. package/web/.next/static/chunks/pages/_app-930c2e1cfe9b86bc.js +0 -1
  215. package/web/.next/static/chunks/pages/_error-2a950c2742f550d2.js +0 -1
  216. package/web/.next/static/chunks/webpack-3046868c425865e4.js +0 -1
  217. package/web/.next/static/css/48007c73fe98a161.css +0 -1
  218. package/web/.next/trace +0 -2
  219. package/web/.next/types/app/layout.ts +0 -84
  220. package/web/.next/types/app/page.ts +0 -84
  221. package/web/.next/types/package.json +0 -1
  222. package/web/app/globals.css +0 -339
  223. package/web/app/layout.tsx +0 -20
  224. package/web/app/page.tsx +0 -57
  225. package/web/components/command-detail.tsx +0 -160
  226. package/web/components/command-list.tsx +0 -67
  227. package/web/components/theme-provider.tsx +0 -12
  228. package/web/components/theme-toggle.tsx +0 -62
  229. package/web/lib/types.ts +0 -77
  230. package/web/tsconfig.json +0 -23
  231. /package/{web/.next → dist/web}/diagnostics/build-diagnostics.json +0 -0
  232. /package/{web/.next → dist/web}/export-marker.json +0 -0
  233. /package/{web/.next → dist/web}/package.json +0 -0
  234. /package/{web/.next → dist/web/server/app/_global-error/page}/react-loadable-manifest.json +0 -0
  235. /package/{web/.next/cache/next-devtools-config.json → dist/web/server/app/_not-found/page/react-loadable-manifest.json} +0 -0
  236. /package/{web/.next → dist/web}/server/functions-config-manifest.json +0 -0
  237. /package/{web/.next → dist/web}/server/interception-route-rewrite-manifest.js +0 -0
  238. /package/{web/.next/static/LEwu5WvMMaoVEbVj3-KGq → dist/web/static/PDMigBNKG7RenqXyfgiNr}/_ssgManifest.js +0 -0
  239. /package/{web/.next/static/chunks/polyfills-42372ed130431b0a.js → dist/web/static/chunks/0cz1d0mv5g_q7.js} +0 -0
  240. /package/{web/.next → dist/web}/types/routes.d.ts +0 -0
@@ -1,84 +0,0 @@
1
- // File: /Users/allentuh/projects/MCP/webui/web/app/page.tsx
2
- import * as entry from '../../../app/page.js'
3
- import type { ResolvingMetadata, ResolvingViewport } from 'next/dist/lib/metadata/types/metadata-interface.js'
4
-
5
- type TEntry = typeof import('../../../app/page.js')
6
-
7
- type SegmentParams<T extends Object = any> = T extends Record<string, any>
8
- ? { [K in keyof T]: T[K] extends string ? string | string[] | undefined : never }
9
- : T
10
-
11
- // Check that the entry is a valid entry
12
- checkFields<Diff<{
13
- default: Function
14
- config?: {}
15
- generateStaticParams?: Function
16
- revalidate?: RevalidateRange<TEntry> | false
17
- dynamic?: 'auto' | 'force-dynamic' | 'error' | 'force-static'
18
- dynamicParams?: boolean
19
- fetchCache?: 'auto' | 'force-no-store' | 'only-no-store' | 'default-no-store' | 'default-cache' | 'only-cache' | 'force-cache'
20
- preferredRegion?: 'auto' | 'global' | 'home' | string | string[]
21
- runtime?: 'nodejs' | 'experimental-edge' | 'edge'
22
- maxDuration?: number
23
-
24
- metadata?: any
25
- generateMetadata?: Function
26
- viewport?: any
27
- generateViewport?: Function
28
- experimental_ppr?: boolean
29
-
30
- }, TEntry, ''>>()
31
-
32
-
33
- // Check the prop type of the entry function
34
- checkFields<Diff<PageProps, FirstArg<TEntry['default']>, 'default'>>()
35
-
36
- // Check the arguments and return type of the generateMetadata function
37
- if ('generateMetadata' in entry) {
38
- checkFields<Diff<PageProps, FirstArg<MaybeField<TEntry, 'generateMetadata'>>, 'generateMetadata'>>()
39
- checkFields<Diff<ResolvingMetadata, SecondArg<MaybeField<TEntry, 'generateMetadata'>>, 'generateMetadata'>>()
40
- }
41
-
42
- // Check the arguments and return type of the generateViewport function
43
- if ('generateViewport' in entry) {
44
- checkFields<Diff<PageProps, FirstArg<MaybeField<TEntry, 'generateViewport'>>, 'generateViewport'>>()
45
- checkFields<Diff<ResolvingViewport, SecondArg<MaybeField<TEntry, 'generateViewport'>>, 'generateViewport'>>()
46
- }
47
-
48
- // Check the arguments and return type of the generateStaticParams function
49
- if ('generateStaticParams' in entry) {
50
- checkFields<Diff<{ params: SegmentParams }, FirstArg<MaybeField<TEntry, 'generateStaticParams'>>, 'generateStaticParams'>>()
51
- checkFields<Diff<{ __tag__: 'generateStaticParams', __return_type__: any[] | Promise<any[]> }, { __tag__: 'generateStaticParams', __return_type__: ReturnType<MaybeField<TEntry, 'generateStaticParams'>> }>>()
52
- }
53
-
54
- export interface PageProps {
55
- params?: Promise<SegmentParams>
56
- searchParams?: Promise<any>
57
- }
58
- export interface LayoutProps {
59
- children?: React.ReactNode
60
-
61
- params?: Promise<SegmentParams>
62
- }
63
-
64
- // =============
65
- // Utility types
66
- type RevalidateRange<T> = T extends { revalidate: any } ? NonNegative<T['revalidate']> : never
67
-
68
- // If T is unknown or any, it will be an empty {} type. Otherwise, it will be the same as Omit<T, keyof Base>.
69
- type OmitWithTag<T, K extends keyof any, _M> = Omit<T, K>
70
- type Diff<Base, T extends Base, Message extends string = ''> = 0 extends (1 & T) ? {} : OmitWithTag<T, keyof Base, Message>
71
-
72
- type FirstArg<T extends Function> = T extends (...args: [infer T, any]) => any ? unknown extends T ? any : T : never
73
- type SecondArg<T extends Function> = T extends (...args: [any, infer T]) => any ? unknown extends T ? any : T : never
74
- type MaybeField<T, K extends string> = T extends { [k in K]: infer G } ? G extends Function ? G : never : never
75
-
76
-
77
-
78
- function checkFields<_ extends { [k in keyof any]: never }>() {}
79
-
80
- // https://github.com/sindresorhus/type-fest
81
- type Numeric = number | bigint
82
- type Zero = 0 | 0n
83
- type Negative<T extends Numeric> = T extends Zero ? never : `${T}` extends `-${string}` ? T : never
84
- type NonNegative<T extends Numeric> = T extends Zero ? T : Negative<T> extends never ? T : '__invalid_negative_number__'
@@ -1 +0,0 @@
1
- {"type": "module"}
@@ -1,339 +0,0 @@
1
- /* Light mode (default) */
2
- :root {
3
- --bg: #ffffff;
4
- --panel: #f6f8fa;
5
- --panel-2: #eaeef2;
6
- --border: #d0d7de;
7
- --text: #1f2328;
8
- --muted: #57606a;
9
- --accent: #0969da;
10
- --accent-hover: #0550ae;
11
- --green: #1a7f37;
12
- --red: #d1242f;
13
- --output-bg: #f6f8fa;
14
- --mono: ui-monospace, SFMono-Regular, 'SF Mono', Menlo, Consolas, monospace;
15
- }
16
-
17
- /* Dark mode */
18
- .dark {
19
- --bg: #0d1117;
20
- --panel: #161b22;
21
- --panel-2: #1c2128;
22
- --border: #30363d;
23
- --text: #e6edf3;
24
- --muted: #8b949e;
25
- --accent: #2f81f7;
26
- --accent-hover: #4a90ff;
27
- --green: #3fb950;
28
- --red: #f85149;
29
- --output-bg: #010409;
30
- }
31
-
32
- * {
33
- box-sizing: border-box;
34
- }
35
-
36
- html,
37
- body {
38
- margin: 0;
39
- padding: 0;
40
- height: 100%;
41
- background: var(--bg);
42
- color: var(--text);
43
- font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;
44
- font-size: 14px;
45
- }
46
-
47
- .app {
48
- display: grid;
49
- grid-template-columns: 320px 1fr;
50
- height: 100vh;
51
- }
52
-
53
- .sidebar {
54
- border-right: 1px solid var(--border);
55
- background: var(--panel);
56
- display: flex;
57
- flex-direction: column;
58
- min-height: 0;
59
- }
60
-
61
- .sidebar-header {
62
- padding: 16px;
63
- border-bottom: 1px solid var(--border);
64
- }
65
-
66
- .brand-row {
67
- display: flex;
68
- align-items: baseline;
69
- justify-content: space-between;
70
- margin-bottom: 12px;
71
- }
72
-
73
- .brand {
74
- font-weight: 700;
75
- font-size: 16px;
76
- display: flex;
77
- align-items: baseline;
78
- gap: 8px;
79
- }
80
-
81
- .brand small {
82
- color: var(--muted);
83
- font-weight: 400;
84
- font-size: 12px;
85
- }
86
-
87
- .theme-toggle {
88
- display: flex;
89
- align-items: center;
90
- justify-content: center;
91
- width: 28px;
92
- height: 28px;
93
- border-radius: 6px;
94
- border: 1px solid var(--border);
95
- background: transparent;
96
- color: var(--muted);
97
- cursor: pointer;
98
- transition:
99
- color 0.15s,
100
- background 0.15s,
101
- border-color 0.15s;
102
- flex-shrink: 0;
103
- }
104
-
105
- .theme-toggle:hover {
106
- color: var(--text);
107
- background: var(--panel-2);
108
- border-color: var(--text);
109
- }
110
-
111
- .theme-toggle-placeholder {
112
- width: 28px;
113
- height: 28px;
114
- }
115
-
116
- .search {
117
- width: 100%;
118
- padding: 8px 10px;
119
- background: var(--bg);
120
- border: 1px solid var(--border);
121
- border-radius: 6px;
122
- color: var(--text);
123
- font-size: 13px;
124
- }
125
-
126
- .search:focus {
127
- outline: none;
128
- border-color: var(--accent);
129
- }
130
-
131
- .command-list {
132
- overflow-y: auto;
133
- flex: 1;
134
- padding: 8px;
135
- }
136
-
137
- .command-item {
138
- width: 100%;
139
- text-align: left;
140
- background: transparent;
141
- border: none;
142
- color: var(--text);
143
- padding: 8px 10px;
144
- border-radius: 6px;
145
- cursor: pointer;
146
- display: block;
147
- font-size: 13px;
148
- }
149
-
150
- .command-item:hover {
151
- background: var(--panel-2);
152
- }
153
-
154
- .command-item.active {
155
- background: var(--accent);
156
- color: #fff;
157
- }
158
-
159
- .command-item .cmd-id {
160
- font-family: var(--mono);
161
- font-weight: 600;
162
- }
163
-
164
- .command-item .cmd-summary {
165
- display: block;
166
- color: var(--muted);
167
- font-size: 11px;
168
- margin-top: 2px;
169
- white-space: nowrap;
170
- overflow: hidden;
171
- text-overflow: ellipsis;
172
- }
173
-
174
- .command-item.active .cmd-summary {
175
- color: rgba(255, 255, 255, 0.8);
176
- }
177
-
178
- .main {
179
- overflow-y: auto;
180
- padding: 28px 32px;
181
- min-height: 0;
182
- }
183
-
184
- .empty {
185
- color: var(--muted);
186
- margin-top: 80px;
187
- text-align: center;
188
- }
189
-
190
- .detail h1 {
191
- font-family: var(--mono);
192
- font-size: 22px;
193
- margin: 0 0 6px;
194
- }
195
-
196
- .detail .desc {
197
- color: var(--muted);
198
- white-space: pre-wrap;
199
- margin-bottom: 20px;
200
- line-height: 1.5;
201
- }
202
-
203
- .section-title {
204
- text-transform: uppercase;
205
- letter-spacing: 0.06em;
206
- font-size: 11px;
207
- color: var(--muted);
208
- margin: 22px 0 10px;
209
- }
210
-
211
- .field {
212
- margin-bottom: 14px;
213
- }
214
-
215
- .field label {
216
- display: block;
217
- font-family: var(--mono);
218
- font-size: 13px;
219
- margin-bottom: 4px;
220
- }
221
-
222
- .field label .req {
223
- color: var(--red);
224
- margin-left: 4px;
225
- }
226
-
227
- .field .hint {
228
- color: var(--muted);
229
- font-size: 12px;
230
- margin: 2px 0 6px;
231
- }
232
-
233
- .field input[type='text'],
234
- .field select {
235
- width: 100%;
236
- padding: 7px 9px;
237
- background: var(--bg);
238
- border: 1px solid var(--border);
239
- border-radius: 6px;
240
- color: var(--text);
241
- font-family: var(--mono);
242
- font-size: 13px;
243
- }
244
-
245
- .field input:focus,
246
- .field select:focus {
247
- outline: none;
248
- border-color: var(--accent);
249
- }
250
-
251
- .checkbox-row {
252
- display: flex;
253
- align-items: center;
254
- gap: 8px;
255
- }
256
-
257
- .checkbox-row input {
258
- width: 16px;
259
- height: 16px;
260
- }
261
-
262
- .preview {
263
- background: var(--panel);
264
- border: 1px solid var(--border);
265
- border-radius: 6px;
266
- padding: 10px 12px;
267
- font-family: var(--mono);
268
- font-size: 13px;
269
- color: var(--green);
270
- margin-bottom: 16px;
271
- word-break: break-all;
272
- }
273
-
274
- .run-btn {
275
- background: var(--accent);
276
- color: #fff;
277
- border: none;
278
- padding: 10px 20px;
279
- border-radius: 6px;
280
- font-size: 14px;
281
- font-weight: 600;
282
- cursor: pointer;
283
- }
284
-
285
- .run-btn:hover {
286
- background: var(--accent-hover);
287
- }
288
-
289
- .run-btn:disabled {
290
- opacity: 0.6;
291
- cursor: not-allowed;
292
- }
293
-
294
- .output {
295
- margin-top: 20px;
296
- }
297
-
298
- .output pre {
299
- background: var(--output-bg);
300
- border: 1px solid var(--border);
301
- border-radius: 6px;
302
- padding: 14px;
303
- font-family: var(--mono);
304
- font-size: 12.5px;
305
- line-height: 1.5;
306
- white-space: pre-wrap;
307
- word-break: break-word;
308
- max-height: 50vh;
309
- overflow-y: auto;
310
- }
311
-
312
- .status {
313
- display: inline-flex;
314
- align-items: center;
315
- gap: 6px;
316
- font-size: 12px;
317
- font-weight: 600;
318
- margin-bottom: 8px;
319
- }
320
-
321
- .status.ok {
322
- color: var(--green);
323
- }
324
-
325
- .status.err {
326
- color: var(--red);
327
- }
328
-
329
- .badge {
330
- font-size: 10px;
331
- font-family: var(--mono);
332
- background: var(--panel-2);
333
- border: 1px solid var(--border);
334
- color: var(--muted);
335
- padding: 1px 6px;
336
- border-radius: 999px;
337
- margin-left: 8px;
338
- vertical-align: middle;
339
- }
@@ -1,20 +0,0 @@
1
- import type {Metadata} from 'next'
2
- import type {ReactNode} from 'react'
3
-
4
- import './globals.css'
5
- import {ThemeProvider} from '../components/theme-provider'
6
-
7
- export const metadata: Metadata = {
8
- description: 'Browse and run sdkck commands from your browser',
9
- title: 'sdkck web UI',
10
- }
11
-
12
- export default function RootLayout({children}: {children: ReactNode}) {
13
- return (
14
- <html lang="en" suppressHydrationWarning>
15
- <body>
16
- <ThemeProvider>{children}</ThemeProvider>
17
- </body>
18
- </html>
19
- )
20
- }
package/web/app/page.tsx DELETED
@@ -1,57 +0,0 @@
1
- 'use client'
2
-
3
- import {useEffect, useState} from 'react'
4
-
5
- import type {CommandsResponse} from '../lib/types'
6
-
7
- import {CommandDetail} from '../components/command-detail'
8
- import {CommandList} from '../components/command-list'
9
-
10
- export default function Page() {
11
- const [data, setData] = useState<CommandsResponse | null>(null)
12
- const [error, setError] = useState<null | string>(null)
13
- const [query, setQuery] = useState('')
14
- const [selectedId, setSelectedId] = useState<string>()
15
-
16
- useEffect(() => {
17
- fetch('/api/commands')
18
- .then((res) => res.json())
19
- .then((json: CommandsResponse) => setData(json))
20
- .catch((error_) => setError(String(error_)))
21
- }, [])
22
-
23
- if (error) {
24
- return <div className="empty">Failed to load commands: {error}</div>
25
- }
26
-
27
- if (!data) {
28
- return <div className="empty">Loading commands…</div>
29
- }
30
-
31
- const selected = data.commands.find((c) => c.id === selectedId)
32
-
33
- return (
34
- <div className="app">
35
- <CommandList
36
- bin={data.bin}
37
- commands={data.commands}
38
- onSelect={setSelectedId}
39
- query={query}
40
- selectedId={selectedId}
41
- setQuery={setQuery}
42
- version={data.version}
43
- />
44
- <main className="main">
45
- {selected ? (
46
- <CommandDetail bin={data.bin} command={selected} />
47
- ) : (
48
- <div className="empty">
49
- Select a command from the left to view its options and run it.
50
- <br />
51
- {data.commands.length} commands available.
52
- </div>
53
- )}
54
- </main>
55
- </div>
56
- )
57
- }
@@ -1,160 +0,0 @@
1
- 'use client'
2
-
3
- import {useMemo, useState} from 'react'
4
-
5
- import {buildArgv, type CommandMeta, type RunResult} from '../lib/types'
6
-
7
- export function CommandDetail({bin, command}: {bin: string; command: CommandMeta}) {
8
- const [argValues, setArgValues] = useState<Record<string, string>>({})
9
- const [flagValues, setFlagValues] = useState<Record<string, boolean | string>>({})
10
- const [result, setResult] = useState<null | RunResult>(null)
11
- const [running, setRunning] = useState(false)
12
-
13
- // Reset form state whenever the selected command changes.
14
- const argv = useMemo(() => buildArgv(command, argValues, flagValues), [command, argValues, flagValues])
15
- const preview = `${bin || 'sdkck'} ${command.id}${argv.length > 0 ? ' ' + argv.join(' ') : ''}`
16
-
17
- async function run() {
18
- setRunning(true)
19
- setResult(null)
20
- try {
21
- const res = await fetch('/api/run', {
22
- body: JSON.stringify({argv, id: command.id}),
23
- headers: {'content-type': 'application/json'},
24
- method: 'POST',
25
- })
26
- setResult((await res.json()) as RunResult)
27
- } catch (error) {
28
- setResult({durationMs: 0, error: String(error), output: String(error), success: false})
29
- } finally {
30
- setRunning(false)
31
- }
32
- }
33
-
34
- return (
35
- <div className="detail" key={command.id}>
36
- <h1>
37
- {command.id}
38
- {command.pluginName && <span className="badge">{command.pluginName}</span>}
39
- </h1>
40
- {(command.description || command.summary) && <p className="desc">{command.description ?? command.summary}</p>}
41
-
42
- {command.args.length > 0 && (
43
- <>
44
- <div className="section-title">Arguments</div>
45
- {command.args.map((arg) => (
46
- <div className="field" key={arg.name}>
47
- <label htmlFor={`arg-${arg.name}`}>
48
- {arg.name}
49
- {arg.required && <span className="req">*</span>}
50
- </label>
51
- {arg.description && <div className="hint">{arg.description}</div>}
52
- {arg.options ? (
53
- <select
54
- id={`arg-${arg.name}`}
55
- onChange={(e) => setArgValues((v) => ({...v, [arg.name]: e.target.value}))}
56
- value={argValues[arg.name] ?? ''}
57
- >
58
- <option value="">— choose —</option>
59
- {arg.options.map((opt) => (
60
- <option key={opt} value={opt}>
61
- {opt}
62
- </option>
63
- ))}
64
- </select>
65
- ) : (
66
- <input
67
- id={`arg-${arg.name}`}
68
- onChange={(e) => setArgValues((v) => ({...v, [arg.name]: e.target.value}))}
69
- placeholder={arg.default ? String(arg.default) : ''}
70
- type="text"
71
- value={argValues[arg.name] ?? ''}
72
- />
73
- )}
74
- </div>
75
- ))}
76
- </>
77
- )}
78
-
79
- {command.flags.length > 0 && (
80
- <>
81
- <div className="section-title">Flags</div>
82
- {command.flags.map((flag) =>
83
- flag.type === 'boolean' ? (
84
- <div className="field checkbox-row" key={flag.name}>
85
- <input
86
- checked={flagValues[flag.name] === true}
87
- id={`flag-${flag.name}`}
88
- onChange={(e) => setFlagValues((v) => ({...v, [flag.name]: e.target.checked}))}
89
- type="checkbox"
90
- />
91
- <label htmlFor={`flag-${flag.name}`}>
92
- --{flag.name}
93
- {flag.description ? (
94
- <span className="hint" style={{display: 'inline', marginLeft: 8}}>
95
- {flag.description}
96
- </span>
97
- ) : null}
98
- </label>
99
- </div>
100
- ) : (
101
- <div className="field" key={flag.name}>
102
- <label htmlFor={`flag-${flag.name}`}>
103
- --{flag.name}
104
- {flag.char ? ` (-${flag.char})` : ''}
105
- {flag.required && <span className="req">*</span>}
106
- {flag.multiple && <span className="badge">multiple</span>}
107
- </label>
108
- {flag.description && <div className="hint">{flag.description}</div>}
109
- {flag.options ? (
110
- <select
111
- id={`flag-${flag.name}`}
112
- onChange={(e) => setFlagValues((v) => ({...v, [flag.name]: e.target.value}))}
113
- value={(flagValues[flag.name] as string) ?? ''}
114
- >
115
- <option value="">— choose —</option>
116
- {flag.options.map((opt) => (
117
- <option key={opt} value={opt}>
118
- {opt}
119
- </option>
120
- ))}
121
- </select>
122
- ) : (
123
- <input
124
- id={`flag-${flag.name}`}
125
- onChange={(e) => setFlagValues((v) => ({...v, [flag.name]: e.target.value}))}
126
- placeholder={
127
- flag.default === undefined
128
- ? flag.multiple
129
- ? 'comma,separated,values'
130
- : ''
131
- : String(flag.default)
132
- }
133
- type="text"
134
- value={(flagValues[flag.name] as string) ?? ''}
135
- />
136
- )}
137
- </div>
138
- ),
139
- )}
140
- </>
141
- )}
142
-
143
- <div className="section-title">Command</div>
144
- <div className="preview">$ {preview}</div>
145
-
146
- <button className="run-btn" disabled={running} onClick={run} type="button">
147
- {running ? 'Running…' : 'Run command'}
148
- </button>
149
-
150
- {result && (
151
- <div className="output">
152
- <div className={`status ${result.success ? 'ok' : 'err'}`}>
153
- {result.success ? '✓ Success' : '✗ Failed'} · {result.durationMs}ms
154
- </div>
155
- <pre>{result.output || '(no output)'}</pre>
156
- </div>
157
- )}
158
- </div>
159
- )
160
- }