botmux 3.11.0 → 3.12.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (343) hide show
  1. package/dist/.runtime-build-id +1 -1
  2. package/dist/adapters/backend/riff-backend.d.ts +18 -0
  3. package/dist/adapters/backend/riff-backend.d.ts.map +1 -1
  4. package/dist/adapters/backend/riff-backend.js +154 -2
  5. package/dist/adapters/backend/riff-backend.js.map +1 -1
  6. package/dist/adapters/cli/coco.js +3 -3
  7. package/dist/adapters/cli/coco.js.map +1 -1
  8. package/dist/adapters/cli/codex.js +2 -2
  9. package/dist/adapters/cli/codex.js.map +1 -1
  10. package/dist/adapters/cli/kimi.d.ts.map +1 -1
  11. package/dist/adapters/cli/kimi.js +22 -8
  12. package/dist/adapters/cli/kimi.js.map +1 -1
  13. package/dist/adapters/cli/pi.d.ts.map +1 -1
  14. package/dist/adapters/cli/pi.js +3 -1
  15. package/dist/adapters/cli/pi.js.map +1 -1
  16. package/dist/bot-registry.d.ts.map +1 -1
  17. package/dist/bot-registry.js +4 -1
  18. package/dist/bot-registry.js.map +1 -1
  19. package/dist/cli/dashboard-command.d.ts +23 -0
  20. package/dist/cli/dashboard-command.d.ts.map +1 -0
  21. package/dist/cli/dashboard-command.js +61 -0
  22. package/dist/cli/dashboard-command.js.map +1 -0
  23. package/dist/cli/dashboard-endpoint.d.ts +3 -3
  24. package/dist/cli/dashboard-endpoint.d.ts.map +1 -1
  25. package/dist/cli/dashboard-endpoint.js +1 -1
  26. package/dist/cli.d.ts.map +1 -1
  27. package/dist/cli.js +101 -49
  28. package/dist/cli.js.map +1 -1
  29. package/dist/codex-rpc-engine.d.ts +33 -3
  30. package/dist/codex-rpc-engine.d.ts.map +1 -1
  31. package/dist/codex-rpc-engine.js +182 -20
  32. package/dist/codex-rpc-engine.js.map +1 -1
  33. package/dist/codex-rpc-lifecycle.d.ts +42 -7
  34. package/dist/codex-rpc-lifecycle.d.ts.map +1 -1
  35. package/dist/codex-rpc-lifecycle.js +73 -7
  36. package/dist/codex-rpc-lifecycle.js.map +1 -1
  37. package/dist/config.d.ts +1 -1
  38. package/dist/config.js +1 -1
  39. package/dist/core/command-handler.d.ts +3 -2
  40. package/dist/core/command-handler.d.ts.map +1 -1
  41. package/dist/core/command-handler.js +19 -4
  42. package/dist/core/command-handler.js.map +1 -1
  43. package/dist/core/dashboard-ipc-server.d.ts.map +1 -1
  44. package/dist/core/dashboard-ipc-server.js +16 -11
  45. package/dist/core/dashboard-ipc-server.js.map +1 -1
  46. package/dist/core/dashboard-rows.d.ts +17 -1
  47. package/dist/core/dashboard-rows.d.ts.map +1 -1
  48. package/dist/core/dashboard-rows.js +13 -1
  49. package/dist/core/dashboard-rows.js.map +1 -1
  50. package/dist/core/dispatch.d.ts +9 -10
  51. package/dist/core/dispatch.d.ts.map +1 -1
  52. package/dist/core/dispatch.js +17 -10
  53. package/dist/core/dispatch.js.map +1 -1
  54. package/dist/core/maintenance.d.ts.map +1 -1
  55. package/dist/core/maintenance.js +5 -0
  56. package/dist/core/maintenance.js.map +1 -1
  57. package/dist/core/role-resolver.d.ts +5 -2
  58. package/dist/core/role-resolver.d.ts.map +1 -1
  59. package/dist/core/role-resolver.js +55 -23
  60. package/dist/core/role-resolver.js.map +1 -1
  61. package/dist/core/session-manager.d.ts +2 -0
  62. package/dist/core/session-manager.d.ts.map +1 -1
  63. package/dist/core/session-manager.js +20 -18
  64. package/dist/core/session-manager.js.map +1 -1
  65. package/dist/core/skills/cli-admin-command.d.ts.map +1 -1
  66. package/dist/core/skills/cli-admin-command.js +142 -3
  67. package/dist/core/skills/cli-admin-command.js.map +1 -1
  68. package/dist/core/skills/frontmatter.d.ts.map +1 -1
  69. package/dist/core/skills/frontmatter.js +44 -7
  70. package/dist/core/skills/frontmatter.js.map +1 -1
  71. package/dist/core/skills/im-command.d.ts +6 -0
  72. package/dist/core/skills/im-command.d.ts.map +1 -1
  73. package/dist/core/skills/im-command.js +34 -7
  74. package/dist/core/skills/im-command.js.map +1 -1
  75. package/dist/core/skills/install-command.d.ts +4 -0
  76. package/dist/core/skills/install-command.d.ts.map +1 -0
  77. package/dist/core/skills/install-command.js +89 -0
  78. package/dist/core/skills/install-command.js.map +1 -0
  79. package/dist/core/skills/package.d.ts.map +1 -1
  80. package/dist/core/skills/package.js +10 -3
  81. package/dist/core/skills/package.js.map +1 -1
  82. package/dist/core/skills/policy.d.ts +5 -1
  83. package/dist/core/skills/policy.d.ts.map +1 -1
  84. package/dist/core/skills/policy.js +66 -3
  85. package/dist/core/skills/policy.js.map +1 -1
  86. package/dist/core/skills/references.d.ts +9 -1
  87. package/dist/core/skills/references.d.ts.map +1 -1
  88. package/dist/core/skills/references.js +35 -2
  89. package/dist/core/skills/references.js.map +1 -1
  90. package/dist/core/skills/registry-paths.d.ts +1 -0
  91. package/dist/core/skills/registry-paths.d.ts.map +1 -1
  92. package/dist/core/skills/registry-paths.js +3 -0
  93. package/dist/core/skills/registry-paths.js.map +1 -1
  94. package/dist/core/skills/session-resolver.d.ts +2 -1
  95. package/dist/core/skills/session-resolver.d.ts.map +1 -1
  96. package/dist/core/skills/session-resolver.js +1 -0
  97. package/dist/core/skills/session-resolver.js.map +1 -1
  98. package/dist/core/skills/session-runtime.d.ts.map +1 -1
  99. package/dist/core/skills/session-runtime.js +2 -0
  100. package/dist/core/skills/session-runtime.js.map +1 -1
  101. package/dist/core/skills/sources.d.ts +23 -0
  102. package/dist/core/skills/sources.d.ts.map +1 -1
  103. package/dist/core/skills/sources.js +128 -12
  104. package/dist/core/skills/sources.js.map +1 -1
  105. package/dist/core/skills/types.d.ts +22 -1
  106. package/dist/core/skills/types.d.ts.map +1 -1
  107. package/dist/core/terminal-write-auth.d.ts +4 -4
  108. package/dist/core/terminal-write-auth.d.ts.map +1 -1
  109. package/dist/core/terminal-write-auth.js +18 -6
  110. package/dist/core/terminal-write-auth.js.map +1 -1
  111. package/dist/core/types.d.ts +2 -0
  112. package/dist/core/types.d.ts.map +1 -1
  113. package/dist/core/types.js.map +1 -1
  114. package/dist/core/worker-pool.d.ts.map +1 -1
  115. package/dist/core/worker-pool.js +52 -1
  116. package/dist/core/worker-pool.js.map +1 -1
  117. package/dist/daemon.d.ts +1 -0
  118. package/dist/daemon.d.ts.map +1 -1
  119. package/dist/daemon.js +101 -12
  120. package/dist/daemon.js.map +1 -1
  121. package/dist/dashboard/auth.d.ts +21 -11
  122. package/dist/dashboard/auth.d.ts.map +1 -1
  123. package/dist/dashboard/auth.js +39 -25
  124. package/dist/dashboard/auth.js.map +1 -1
  125. package/dist/dashboard/bot-onboarding.d.ts.map +1 -1
  126. package/dist/dashboard/bot-onboarding.js +2 -114
  127. package/dist/dashboard/bot-onboarding.js.map +1 -1
  128. package/dist/dashboard/bot-payload.d.ts +0 -1
  129. package/dist/dashboard/bot-payload.d.ts.map +1 -1
  130. package/dist/dashboard/bot-payload.js +0 -1
  131. package/dist/dashboard/bot-payload.js.map +1 -1
  132. package/dist/dashboard/connector-api.d.ts.map +1 -1
  133. package/dist/dashboard/connector-api.js +66 -6
  134. package/dist/dashboard/connector-api.js.map +1 -1
  135. package/dist/dashboard/dashboard-summary-endpoint.d.ts +39 -0
  136. package/dist/dashboard/dashboard-summary-endpoint.d.ts.map +1 -0
  137. package/dist/dashboard/dashboard-summary-endpoint.js +50 -0
  138. package/dist/dashboard/dashboard-summary-endpoint.js.map +1 -0
  139. package/dist/dashboard/dashboard-summary.d.ts +62 -0
  140. package/dist/dashboard/dashboard-summary.d.ts.map +1 -0
  141. package/dist/dashboard/dashboard-summary.js +106 -0
  142. package/dist/dashboard/dashboard-summary.js.map +1 -0
  143. package/dist/dashboard/public-redact.d.ts.map +1 -1
  144. package/dist/dashboard/public-redact.js +3 -0
  145. package/dist/dashboard/public-redact.js.map +1 -1
  146. package/dist/dashboard/skill-install-request.js +10 -11
  147. package/dist/dashboard/skill-install-request.js.map +1 -1
  148. package/dist/dashboard/skill-pack-response.d.ts +15 -0
  149. package/dist/dashboard/skill-pack-response.d.ts.map +1 -0
  150. package/dist/dashboard/skill-pack-response.js +32 -0
  151. package/dist/dashboard/skill-pack-response.js.map +1 -0
  152. package/dist/dashboard/web/connectors-page.d.ts +69 -0
  153. package/dist/dashboard/web/connectors-page.d.ts.map +1 -1
  154. package/dist/dashboard/web/connectors-page.js +47 -7
  155. package/dist/dashboard/web/connectors-page.js.map +1 -1
  156. package/dist/dashboard/web/feed-group-picker.d.ts +13 -0
  157. package/dist/dashboard/web/feed-group-picker.d.ts.map +1 -0
  158. package/dist/dashboard/web/feed-group-picker.js +45 -0
  159. package/dist/dashboard/web/feed-group-picker.js.map +1 -0
  160. package/dist/dashboard/web/groups-page.d.ts.map +1 -1
  161. package/dist/dashboard/web/groups-page.js +2 -5
  162. package/dist/dashboard/web/groups-page.js.map +1 -1
  163. package/dist/dashboard/web/i18n.d.ts.map +1 -1
  164. package/dist/dashboard/web/i18n.js +309 -40
  165. package/dist/dashboard/web/i18n.js.map +1 -1
  166. package/dist/dashboard/web/preferences.d.ts +4 -2
  167. package/dist/dashboard/web/preferences.d.ts.map +1 -1
  168. package/dist/dashboard/web/preferences.js +14 -6
  169. package/dist/dashboard/web/preferences.js.map +1 -1
  170. package/dist/dashboard/web/roles-page.d.ts.map +1 -1
  171. package/dist/dashboard/web/roles-page.js +36 -4
  172. package/dist/dashboard/web/roles-page.js.map +1 -1
  173. package/dist/dashboard/web/roles.d.ts +3 -1
  174. package/dist/dashboard/web/roles.d.ts.map +1 -1
  175. package/dist/dashboard/web/roles.js +10 -2
  176. package/dist/dashboard/web/roles.js.map +1 -1
  177. package/dist/dashboard/web/schedules-page.d.ts.map +1 -1
  178. package/dist/dashboard/web/schedules-page.js +8 -2
  179. package/dist/dashboard/web/schedules-page.js.map +1 -1
  180. package/dist/dashboard/web/sessions-page.d.ts.map +1 -1
  181. package/dist/dashboard/web/sessions-page.js +101 -5
  182. package/dist/dashboard/web/sessions-page.js.map +1 -1
  183. package/dist/dashboard/web/sessions.d.ts +3 -1
  184. package/dist/dashboard/web/sessions.d.ts.map +1 -1
  185. package/dist/dashboard/web/sessions.js +13 -6
  186. package/dist/dashboard/web/sessions.js.map +1 -1
  187. package/dist/dashboard/web/skills/bot-assignments-tab.d.ts +27 -0
  188. package/dist/dashboard/web/skills/bot-assignments-tab.d.ts.map +1 -0
  189. package/dist/dashboard/web/skills/bot-assignments-tab.js +257 -0
  190. package/dist/dashboard/web/skills/bot-assignments-tab.js.map +1 -0
  191. package/dist/dashboard/web/skills/delivery-settings-tab.d.ts +25 -0
  192. package/dist/dashboard/web/skills/delivery-settings-tab.d.ts.map +1 -0
  193. package/dist/dashboard/web/skills/delivery-settings-tab.js +20 -0
  194. package/dist/dashboard/web/skills/delivery-settings-tab.js.map +1 -0
  195. package/dist/dashboard/web/skills/shared.d.ts +86 -0
  196. package/dist/dashboard/web/skills/shared.d.ts.map +1 -0
  197. package/dist/dashboard/web/skills/shared.js +178 -0
  198. package/dist/dashboard/web/skills/shared.js.map +1 -0
  199. package/dist/dashboard/web/skills/skill-library-tab.d.ts +75 -0
  200. package/dist/dashboard/web/skills/skill-library-tab.d.ts.map +1 -0
  201. package/dist/dashboard/web/skills/skill-library-tab.js +108 -0
  202. package/dist/dashboard/web/skills/skill-library-tab.js.map +1 -0
  203. package/dist/dashboard/web/skills/skill-packs-tab.d.ts +21 -0
  204. package/dist/dashboard/web/skills/skill-packs-tab.d.ts.map +1 -0
  205. package/dist/dashboard/web/skills/skill-packs-tab.js +185 -0
  206. package/dist/dashboard/web/skills/skill-packs-tab.js.map +1 -0
  207. package/dist/dashboard/web/skills/types.d.ts +95 -0
  208. package/dist/dashboard/web/skills/types.d.ts.map +1 -0
  209. package/dist/dashboard/web/skills/types.js +2 -0
  210. package/dist/dashboard/web/skills/types.js.map +1 -0
  211. package/dist/dashboard/web/skills/use-skills-data.d.ts +31 -0
  212. package/dist/dashboard/web/skills/use-skills-data.d.ts.map +1 -0
  213. package/dist/dashboard/web/skills/use-skills-data.js +86 -0
  214. package/dist/dashboard/web/skills/use-skills-data.js.map +1 -0
  215. package/dist/dashboard/web/skills-page.d.ts +34 -31
  216. package/dist/dashboard/web/skills-page.d.ts.map +1 -1
  217. package/dist/dashboard/web/skills-page.js +321 -176
  218. package/dist/dashboard/web/skills-page.js.map +1 -1
  219. package/dist/dashboard/webhook-routes.d.ts +18 -0
  220. package/dist/dashboard/webhook-routes.d.ts.map +1 -1
  221. package/dist/dashboard/webhook-routes.js +35 -1
  222. package/dist/dashboard/webhook-routes.js.map +1 -1
  223. package/dist/dashboard-web/app.js +1 -1
  224. package/dist/dashboard-web/chunks/{bot-defaults-page-GED4FEMS.js → bot-defaults-page-HL655CNR.js} +1 -1
  225. package/dist/dashboard-web/chunks/{chunk-HK7NIBJG.js → chunk-5PAYQ3KT.js} +1 -1
  226. package/dist/dashboard-web/chunks/{chunk-KRHWZEXU.js → chunk-5ZL7NLR5.js} +1 -1
  227. package/dist/dashboard-web/chunks/chunk-6ALR252E.js +1 -0
  228. package/dist/dashboard-web/chunks/{chunk-VBXJOJFH.js → chunk-BFUTTYVK.js} +1 -1
  229. package/dist/dashboard-web/chunks/chunk-ELL53D62.js +55 -0
  230. package/dist/dashboard-web/chunks/connectors-page-3QQACF23.js +1 -0
  231. package/dist/dashboard-web/chunks/groups-page-SDZMJ7UV.js +8 -0
  232. package/dist/dashboard-web/chunks/{insights-page-54UBPPOC.js → insights-page-ZZ3JEJ6L.js} +1 -1
  233. package/dist/dashboard-web/chunks/{monitor-room-PORHVKRH.js → monitor-room-ROJ5GZ4N.js} +1 -1
  234. package/dist/dashboard-web/chunks/{monitoring-page-XGA7AXNL.js → monitoring-page-IATV7KJF.js} +1 -1
  235. package/dist/dashboard-web/chunks/{office-page-AO3AFG45.js → office-page-TYO5OIIT.js} +1 -1
  236. package/dist/dashboard-web/chunks/{overview-page-F5BUTYR6.js → overview-page-VJUULZF2.js} +1 -1
  237. package/dist/dashboard-web/chunks/roles-page-7RJJKZGK.js +1 -0
  238. package/dist/dashboard-web/chunks/schedules-page-JTEJ5IXW.js +1 -0
  239. package/dist/dashboard-web/chunks/sessions-page-KD7HDT3U.js +8 -0
  240. package/dist/dashboard-web/chunks/{settings-page-OJAZLZQT.js → settings-page-7CTTFBRS.js} +1 -1
  241. package/dist/dashboard-web/chunks/skills-page-57NZECJ3.js +4 -0
  242. package/dist/dashboard-web/chunks/{team-federation-page-ZJVAP7HW.js → team-federation-page-6YYIMJG3.js} +1 -1
  243. package/dist/dashboard-web/chunks/{v3-page-GYWTRGO2.js → v3-page-ZGKBSBK3.js} +1 -1
  244. package/dist/dashboard-web/chunks/{whiteboards-page-MSDAG6P7.js → whiteboards-page-AACJF6DB.js} +1 -1
  245. package/dist/dashboard-web/style.css +1952 -377
  246. package/dist/dashboard.js +316 -47
  247. package/dist/dashboard.js.map +1 -1
  248. package/dist/desktop/main/ipc.js +1 -1
  249. package/dist/desktop/main/runtime-service.js +2 -2
  250. package/dist/desktop/main/runtime-service.js.map +1 -1
  251. package/dist/desktop/shared/types.d.ts +1 -1
  252. package/dist/i18n/en.d.ts.map +1 -1
  253. package/dist/i18n/en.js +5 -1
  254. package/dist/i18n/en.js.map +1 -1
  255. package/dist/i18n/zh.d.ts.map +1 -1
  256. package/dist/i18n/zh.js +5 -1
  257. package/dist/i18n/zh.js.map +1 -1
  258. package/dist/index-daemon.js +6 -1
  259. package/dist/index-daemon.js.map +1 -1
  260. package/dist/services/adopt-input-sequence.d.ts +52 -0
  261. package/dist/services/adopt-input-sequence.d.ts.map +1 -0
  262. package/dist/services/adopt-input-sequence.js +50 -0
  263. package/dist/services/adopt-input-sequence.js.map +1 -0
  264. package/dist/services/bridge-fallback-gate.d.ts.map +1 -1
  265. package/dist/services/bridge-fallback-gate.js +34 -11
  266. package/dist/services/bridge-fallback-gate.js.map +1 -1
  267. package/dist/services/codex-bridge-queue.d.ts +103 -7
  268. package/dist/services/codex-bridge-queue.d.ts.map +1 -1
  269. package/dist/services/codex-bridge-queue.js +291 -17
  270. package/dist/services/codex-bridge-queue.js.map +1 -1
  271. package/dist/services/codex-transcript.d.ts +4 -3
  272. package/dist/services/codex-transcript.d.ts.map +1 -1
  273. package/dist/services/codex-transcript.js.map +1 -1
  274. package/dist/services/connector-store.d.ts +14 -1
  275. package/dist/services/connector-store.d.ts.map +1 -1
  276. package/dist/services/connector-store.js.map +1 -1
  277. package/dist/services/connector-topic-template.d.ts +7 -0
  278. package/dist/services/connector-topic-template.d.ts.map +1 -0
  279. package/dist/services/connector-topic-template.js +210 -0
  280. package/dist/services/connector-topic-template.js.map +1 -0
  281. package/dist/services/project-scanner.d.ts +33 -0
  282. package/dist/services/project-scanner.d.ts.map +1 -1
  283. package/dist/services/project-scanner.js +40 -1
  284. package/dist/services/project-scanner.js.map +1 -1
  285. package/dist/services/skill-pack-store.d.ts +50 -0
  286. package/dist/services/skill-pack-store.d.ts.map +1 -0
  287. package/dist/services/skill-pack-store.js +270 -0
  288. package/dist/services/skill-pack-store.js.map +1 -0
  289. package/dist/services/skill-registry-store.d.ts +8 -0
  290. package/dist/services/skill-registry-store.d.ts.map +1 -1
  291. package/dist/services/skill-registry-store.js +100 -68
  292. package/dist/services/skill-registry-store.js.map +1 -1
  293. package/dist/services/structured-bridge-clis.d.ts +8 -1
  294. package/dist/services/structured-bridge-clis.d.ts.map +1 -1
  295. package/dist/services/structured-bridge-clis.js +13 -0
  296. package/dist/services/structured-bridge-clis.js.map +1 -1
  297. package/dist/services/submit-confirmation.d.ts +50 -0
  298. package/dist/services/submit-confirmation.d.ts.map +1 -1
  299. package/dist/services/submit-confirmation.js +82 -0
  300. package/dist/services/submit-confirmation.js.map +1 -1
  301. package/dist/services/todo-state.d.ts +74 -0
  302. package/dist/services/todo-state.d.ts.map +1 -0
  303. package/dist/services/todo-state.js +351 -0
  304. package/dist/services/todo-state.js.map +1 -0
  305. package/dist/setup/agent-preset.d.ts.map +1 -1
  306. package/dist/setup/agent-preset.js +2 -0
  307. package/dist/setup/agent-preset.js.map +1 -1
  308. package/dist/setup/owner-identity.d.ts +47 -0
  309. package/dist/setup/owner-identity.d.ts.map +1 -0
  310. package/dist/setup/owner-identity.js +196 -0
  311. package/dist/setup/owner-identity.js.map +1 -0
  312. package/dist/setup/register-app.d.ts +4 -3
  313. package/dist/setup/register-app.d.ts.map +1 -1
  314. package/dist/setup/register-app.js.map +1 -1
  315. package/dist/setup/setup-args.d.ts +1 -1
  316. package/dist/setup/setup-args.d.ts.map +1 -1
  317. package/dist/setup/setup-args.js +7 -3
  318. package/dist/setup/setup-args.js.map +1 -1
  319. package/dist/types.d.ts +11 -0
  320. package/dist/types.d.ts.map +1 -1
  321. package/dist/utils/async-serial-queue.d.ts +9 -0
  322. package/dist/utils/async-serial-queue.d.ts.map +1 -0
  323. package/dist/utils/async-serial-queue.js +13 -0
  324. package/dist/utils/async-serial-queue.js.map +1 -0
  325. package/dist/utils/child-env.d.ts +25 -0
  326. package/dist/utils/child-env.d.ts.map +1 -1
  327. package/dist/utils/child-env.js +47 -0
  328. package/dist/utils/child-env.js.map +1 -1
  329. package/dist/utils/runtime-screen-status.d.ts +52 -0
  330. package/dist/utils/runtime-screen-status.d.ts.map +1 -0
  331. package/dist/utils/runtime-screen-status.js +60 -0
  332. package/dist/utils/runtime-screen-status.js.map +1 -0
  333. package/dist/worker.js +1697 -468
  334. package/dist/worker.js.map +1 -1
  335. package/dist/workflows/definition.d.ts +44 -44
  336. package/package.json +1 -1
  337. package/dist/dashboard-web/chunks/chunk-6J5LS5AU.js +0 -51
  338. package/dist/dashboard-web/chunks/connectors-page-EELM66G3.js +0 -1
  339. package/dist/dashboard-web/chunks/groups-page-WKUV6E42.js +0 -8
  340. package/dist/dashboard-web/chunks/roles-page-M5GIASJU.js +0 -1
  341. package/dist/dashboard-web/chunks/schedules-page-O232WQRR.js +0 -1
  342. package/dist/dashboard-web/chunks/sessions-page-YFRPSTIL.js +0 -6
  343. package/dist/dashboard-web/chunks/skills-page-EFZQPWV4.js +0 -4
@@ -0,0 +1,86 @@
1
+ import type { BotRow, SkillRow, SkillPolicy } from './types.js';
2
+ export declare function nativeLibraryLabel(path: string | undefined, tr: (key: string) => string): string | null;
3
+ export declare function sourceLabel(skill: SkillRow, tr: (key: string) => string): string;
4
+ export declare function priorityNames(policy?: SkillPolicy | null): string[];
5
+ export declare function packIds(policy?: SkillPolicy | null): string[];
6
+ /** Build one complete Bot assignment payload. The editor owns both direct
7
+ * Skills and Skill Packs, so they must be saved in a single request; two
8
+ * independent full-policy writes race and can silently overwrite each other.
9
+ * Unknown selectors are retained for forward/downgrade compatibility. */
10
+ export declare function mergeBotAssignmentSelectors(current: SkillPolicy | null | undefined, skillNames: string[], packIdsList: string[]): string[];
11
+ export declare function policyReferenceCount(policy?: SkillPolicy | null): number;
12
+ export declare function policyConfigured(policy?: SkillPolicy | null): boolean;
13
+ export declare function discoveryGroupKey(group: {
14
+ cliId: string;
15
+ rootDir: string;
16
+ }): string;
17
+ /** Minimal pack shape the graph needs — both the thin `{id,name,include}`
18
+ * summaries and full SkillPackRow objects satisfy it. */
19
+ export interface GraphPackInput {
20
+ id: string;
21
+ name?: string;
22
+ include: string[];
23
+ }
24
+ export interface SkillUsageInfo {
25
+ name: string;
26
+ /** false = referenced by a pack or bot but not installed */
27
+ installed: boolean;
28
+ /** ids of packs whose include lists contain this skill */
29
+ packIds: string[];
30
+ /** larkAppIds of bots referencing this skill via `skill:` directly */
31
+ directBotIds: string[];
32
+ /** larkAppIds of bots that get this skill through an assigned pack */
33
+ viaPackBotIds: string[];
34
+ }
35
+ export interface PackGraphInfo {
36
+ id: string;
37
+ /** member skill names that are installed */
38
+ resolved: string[];
39
+ /** member skill names referenced but not installed */
40
+ missing: string[];
41
+ /** larkAppIds of bots referencing this pack */
42
+ botIds: string[];
43
+ }
44
+ /** 'unknown' = the bot references packs but pack data has never loaded
45
+ * (packsKnown=false), so pack-derived health cannot be judged either way. */
46
+ export type BotHealthLevel = 'ok' | 'default' | 'missing' | 'pack_missing' | 'unknown';
47
+ export interface BotGraphInfo {
48
+ larkAppId: string;
49
+ /** deduped effective skills with provenance; only installed skills count */
50
+ resolved: Array<{
51
+ name: string;
52
+ source: 'direct' | `pack:${string}`;
53
+ }>;
54
+ /** referenced skill names (direct or via pack) that are not installed */
55
+ missingSkills: string[];
56
+ /** referenced pack ids that do not exist */
57
+ missingPacks: string[];
58
+ finalCount: number;
59
+ health: BotHealthLevel;
60
+ }
61
+ export interface SkillGraph {
62
+ /** keyed by skill name; includes referenced-but-not-installed skills */
63
+ skills: Map<string, SkillUsageInfo>;
64
+ packs: Map<string, PackGraphInfo>;
65
+ bots: Map<string, BotGraphInfo>;
66
+ }
67
+ /** Build the single relationship model all three skill tables derive from.
68
+ * Referenced-but-not-installed skills get graph nodes with installed=false so
69
+ * the UI can surface them (and link into the install flow) instead of
70
+ * silently dropping them. */
71
+ export declare function buildSkillGraph(installedSkills: Array<Pick<SkillRow, 'name'>>, packs: GraphPackInput[], bots: Array<Pick<BotRow, 'larkAppId' | 'skills'>>, opts?: {
72
+ packsKnown?: boolean;
73
+ }): SkillGraph;
74
+ /** All skill names referenced anywhere (packs or bot policies) but not installed. */
75
+ export declare function danglingSkillNames(graph: SkillGraph): string[];
76
+ /** Decide the default checkbox state for discovered install candidates.
77
+ * No target → all preselected (existing behavior). With a target: only the
78
+ * matching candidate — and if the target is absent from the source, select
79
+ * NOTHING and flag it, so a wrong repo can't be accidentally bulk-installed. */
80
+ export declare function selectInstallCandidates(candidates: Array<{
81
+ name: string;
82
+ }>, targetSkill: string | null | undefined): {
83
+ selected: Set<string>;
84
+ targetMissing: boolean;
85
+ };
86
+ //# sourceMappingURL=shared.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../../src/dashboard/web/skills/shared.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,178 @@
1
+ export function nativeLibraryLabel(path, tr) {
2
+ const p = String(path ?? '').replace(/\\/g, '/');
3
+ if (p.includes('/.codex/skills/'))
4
+ return tr('skills.sourceCodex');
5
+ if (p.includes('/.claude/skills/'))
6
+ return tr('skills.sourceClaude');
7
+ if (p.includes('/.trae/skills/'))
8
+ return tr('skills.sourceTrae');
9
+ if (p.includes('/.cursor/skills/'))
10
+ return tr('skills.sourceCursor');
11
+ if (p.includes('/.gemini/skills/'))
12
+ return tr('skills.sourceGemini');
13
+ if (p.includes('/.config/opencode/skills/'))
14
+ return tr('skills.sourceOpenCode');
15
+ return null;
16
+ }
17
+ export function sourceLabel(skill, tr) {
18
+ const source = skill.source ?? {};
19
+ if (source.type === 'github')
20
+ return `github:${source.owner}/${source.repo}/${source.path ?? ''}`;
21
+ if (source.type === 'git')
22
+ return `${source.url ?? 'git'}#${source.path ?? ''}`;
23
+ if (source.type === 'local-link')
24
+ return nativeLibraryLabel(source.path, tr) ?? tr('skills.sourceLocalLink');
25
+ if (source.type === 'local-copy')
26
+ return tr('skills.sourceBotmuxCopy');
27
+ return String(source.type ?? 'unknown');
28
+ }
29
+ export function priorityNames(policy) {
30
+ return (policy?.include ?? [])
31
+ .filter(item => item.startsWith('skill:'))
32
+ .map(item => item.slice('skill:'.length));
33
+ }
34
+ export function packIds(policy) {
35
+ return (policy?.include ?? [])
36
+ .filter(item => item.startsWith('pack:'))
37
+ .map(item => item.slice('pack:'.length));
38
+ }
39
+ /** Build one complete Bot assignment payload. The editor owns both direct
40
+ * Skills and Skill Packs, so they must be saved in a single request; two
41
+ * independent full-policy writes race and can silently overwrite each other.
42
+ * Unknown selectors are retained for forward/downgrade compatibility. */
43
+ export function mergeBotAssignmentSelectors(current, skillNames, packIdsList) {
44
+ const unmanaged = (current?.include ?? []).filter(selector => !selector.startsWith('skill:') && !selector.startsWith('pack:'));
45
+ const direct = [...new Set(skillNames.map(name => name.trim()).filter(Boolean))]
46
+ .map(name => `skill:${name}`);
47
+ const packs = [...new Set(packIdsList.map(id => id.trim()).filter(Boolean))]
48
+ .map(id => `pack:${id}`);
49
+ return [...direct, ...packs, ...unmanaged];
50
+ }
51
+ export function policyReferenceCount(policy) {
52
+ return priorityNames(policy).length;
53
+ }
54
+ export function policyConfigured(policy) {
55
+ return (policy?.include?.length ?? 0) > 0;
56
+ }
57
+ export function discoveryGroupKey(group) {
58
+ return `${group.cliId}\n${group.rootDir}`;
59
+ }
60
+ /** Build the single relationship model all three skill tables derive from.
61
+ * Referenced-but-not-installed skills get graph nodes with installed=false so
62
+ * the UI can surface them (and link into the install flow) instead of
63
+ * silently dropping them. */
64
+ export function buildSkillGraph(installedSkills, packs, bots, opts) {
65
+ const packsKnown = opts?.packsKnown !== false;
66
+ const installed = new Set(installedSkills.map(skill => skill.name));
67
+ const skillNodes = new Map();
68
+ const skillNode = (name) => {
69
+ let node = skillNodes.get(name);
70
+ if (!node) {
71
+ node = { name, installed: installed.has(name), packIds: [], directBotIds: [], viaPackBotIds: [] };
72
+ skillNodes.set(name, node);
73
+ }
74
+ return node;
75
+ };
76
+ for (const name of installed)
77
+ skillNode(name);
78
+ const packNodes = new Map();
79
+ const packById = new Map();
80
+ for (const pack of packs) {
81
+ packById.set(pack.id, pack);
82
+ const resolved = [];
83
+ const missing = [];
84
+ for (const selector of pack.include) {
85
+ if (!selector.startsWith('skill:'))
86
+ continue;
87
+ const name = selector.slice('skill:'.length);
88
+ const node = skillNode(name);
89
+ if (!node.packIds.includes(pack.id))
90
+ node.packIds.push(pack.id);
91
+ (installed.has(name) ? resolved : missing).push(name);
92
+ }
93
+ packNodes.set(pack.id, { id: pack.id, resolved, missing, botIds: [] });
94
+ }
95
+ const botNodes = new Map();
96
+ for (const bot of bots) {
97
+ const include = bot.skills?.include ?? [];
98
+ const resolved = new Map();
99
+ const missingSkills = new Set();
100
+ const missingPacks = [];
101
+ let unresolvablePackRefs = false;
102
+ for (const selector of include) {
103
+ if (selector.startsWith('skill:')) {
104
+ const name = selector.slice('skill:'.length);
105
+ const node = skillNode(name);
106
+ if (!node.directBotIds.includes(bot.larkAppId))
107
+ node.directBotIds.push(bot.larkAppId);
108
+ if (installed.has(name))
109
+ resolved.set(name, 'direct');
110
+ else
111
+ missingSkills.add(name);
112
+ }
113
+ else if (selector.startsWith('pack:')) {
114
+ const packId = selector.slice('pack:'.length);
115
+ const pack = packById.get(packId);
116
+ if (!pack) {
117
+ // Only a definitive pack list can prove a reference broken. If pack
118
+ // data never loaded, this ref is unresolvable — health = unknown,
119
+ // NOT pack_missing.
120
+ if (packsKnown)
121
+ missingPacks.push(packId);
122
+ else
123
+ unresolvablePackRefs = true;
124
+ continue;
125
+ }
126
+ const packNode = packNodes.get(packId);
127
+ if (!packNode.botIds.includes(bot.larkAppId))
128
+ packNode.botIds.push(bot.larkAppId);
129
+ for (const memberSelector of pack.include) {
130
+ if (!memberSelector.startsWith('skill:'))
131
+ continue;
132
+ const name = memberSelector.slice('skill:'.length);
133
+ const node = skillNode(name);
134
+ if (!node.viaPackBotIds.includes(bot.larkAppId))
135
+ node.viaPackBotIds.push(bot.larkAppId);
136
+ if (installed.has(name)) {
137
+ if (!resolved.has(name))
138
+ resolved.set(name, `pack:${packId}`);
139
+ }
140
+ else {
141
+ missingSkills.add(name);
142
+ }
143
+ }
144
+ }
145
+ // unknown selector prefixes are retained in policy but not graphed
146
+ }
147
+ const health = missingPacks.length > 0 ? 'pack_missing'
148
+ : missingSkills.size > 0 ? 'missing'
149
+ : unresolvablePackRefs ? 'unknown'
150
+ : include.length === 0 ? 'default'
151
+ : 'ok';
152
+ botNodes.set(bot.larkAppId, {
153
+ larkAppId: bot.larkAppId,
154
+ resolved: [...resolved.entries()].map(([name, source]) => ({ name, source })),
155
+ missingSkills: [...missingSkills],
156
+ missingPacks,
157
+ finalCount: resolved.size,
158
+ health,
159
+ });
160
+ }
161
+ return { skills: skillNodes, packs: packNodes, bots: botNodes };
162
+ }
163
+ /** All skill names referenced anywhere (packs or bot policies) but not installed. */
164
+ export function danglingSkillNames(graph) {
165
+ return [...graph.skills.values()].filter(node => !node.installed).map(node => node.name).sort();
166
+ }
167
+ /** Decide the default checkbox state for discovered install candidates.
168
+ * No target → all preselected (existing behavior). With a target: only the
169
+ * matching candidate — and if the target is absent from the source, select
170
+ * NOTHING and flag it, so a wrong repo can't be accidentally bulk-installed. */
171
+ export function selectInstallCandidates(candidates, targetSkill) {
172
+ if (targetSkill) {
173
+ const found = candidates.some(candidate => candidate.name === targetSkill);
174
+ return { selected: found ? new Set([targetSkill]) : new Set(), targetMissing: !found };
175
+ }
176
+ return { selected: new Set(candidates.map(candidate => candidate.name)), targetMissing: false };
177
+ }
178
+ //# sourceMappingURL=shared.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../../src/dashboard/web/skills/shared.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,75 @@
1
+ import type { SkillGraph } from './shared.js';
2
+ import type { InstallSkillCandidate, NativeSkillGroup, SkillRow, SkillsNavIntent, StatusMessage } from './types.js';
3
+ interface SkillLibraryTabProps {
4
+ skills: SkillRow[];
5
+ nativeSkillGroups: NativeSkillGroup[];
6
+ installSource: string;
7
+ installPath: string;
8
+ installRef: string;
9
+ installFullDepth: boolean;
10
+ installStatus: StatusMessage;
11
+ installBusy: boolean;
12
+ installDiscovering: boolean;
13
+ installSelectionOpen: boolean;
14
+ installCandidates: InstallSkillCandidate[];
15
+ selectedInstallSkills: Set<string>;
16
+ onInstallSourceChange: (v: string) => void;
17
+ onInstallPathChange: (v: string) => void;
18
+ onInstallRefChange: (v: string) => void;
19
+ onInstallFullDepthChange: (v: boolean) => void;
20
+ onToggleInstallSkill: (name: string) => void;
21
+ onSelectAllInstallSkills: (selected: boolean) => void;
22
+ onConfirmInstallSelection: () => Promise<string[] | null>;
23
+ onCloseInstallSelection: () => void;
24
+ onInstall: () => Promise<string[] | null>;
25
+ onOpenNativeDiscovery: () => void;
26
+ onCreatePack: (input: {
27
+ id: string;
28
+ name: string;
29
+ skillNames: string[];
30
+ }) => Promise<void>;
31
+ InstallPanel: React.ComponentType<any>;
32
+ InstalledLibrary: React.ComponentType<any>;
33
+ RemoveDialog: React.ComponentType<any>;
34
+ removingNames: Set<string>;
35
+ removalDialogOpen: boolean;
36
+ pendingRemoval: string[] | null;
37
+ removalReferences: Array<{
38
+ name: string;
39
+ bots: string[];
40
+ }>;
41
+ removalError: string | null;
42
+ skillBusy: string | null;
43
+ installedStatus: StatusMessage;
44
+ onUpdateSkill: (name: string) => void;
45
+ onRequestRemove: (names: string[]) => void;
46
+ onCancelRemoval: () => void;
47
+ onConfirmRemoval: (force: boolean) => void;
48
+ /** cross-tab navigation context (consumed once on arrival) */
49
+ navIntent?: SkillsNavIntent | null;
50
+ onNavIntentConsumed?: () => void;
51
+ /** missing skill the user came here to install — prefill only, never auto-install */
52
+ installTargetSkill?: string | null;
53
+ /** clear the sticky target shown above the single-page install form */
54
+ onClearInstallTarget?: () => void;
55
+ /** false = pack data never loaded; usage chips must not claim "0 packs" */
56
+ packsKnown?: boolean;
57
+ /** focus the install form for a referenced-but-missing skill */
58
+ onInstallMissing?: (name: string) => void;
59
+ graph?: SkillGraph;
60
+ packNames?: Array<{
61
+ id: string;
62
+ name: string;
63
+ }>;
64
+ onShowSkillPacks?: (name: string) => void;
65
+ onShowSkillBots?: (name: string) => void;
66
+ }
67
+ export declare function SkillLibraryTab(props: SkillLibraryTabProps): import("react").JSX.Element;
68
+ /** Visual hint only — the daemon's parseSkillInstallSource() owns the real
69
+ * classification. Kept deliberately in sync with it so the wizard never
70
+ * promises a source type the backend would reject. Note this is a *hint*: a
71
+ * bare `owner/repo` that also exists as a local directory installs from disk,
72
+ * which only the daemon (with filesystem access) can know. */
73
+ export declare function detectSourceType(source: string): 'github' | 'git' | 'local' | 'agentbuddy' | 'unknown';
74
+ export {};
75
+ //# sourceMappingURL=skill-library-tab.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-library-tab.d.ts","sourceRoot":"","sources":["../../../../src/dashboard/web/skills/skill-library-tab.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,108 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useEffect, useRef, useState } from 'react';
3
+ import { extractSkillsInstallCommandSource } from '../../../core/skills/install-command.js';
4
+ import { useT } from '../react-hooks.js';
5
+ export function SkillLibraryTab(props) {
6
+ const [installedForPack, setInstalledForPack] = useState(null);
7
+ const installAnchorRef = useRef(null);
8
+ const { navIntent, onNavIntentConsumed } = props;
9
+ // Apply an incoming cross-tab intent exactly once: the search prefill is
10
+ // picked up by InstalledLibrary (child effects run first), then bring the
11
+ // single-page install form into view without triggering any write.
12
+ useEffect(() => {
13
+ if (!navIntent)
14
+ return;
15
+ if (navIntent.openInstallWizard) {
16
+ const anchor = installAnchorRef.current;
17
+ anchor?.scrollIntoView?.({ behavior: 'smooth', block: 'start' });
18
+ anchor?.querySelector('input[data-install="source"]')?.focus();
19
+ }
20
+ onNavIntentConsumed?.();
21
+ }, [navIntent, onNavIntentConsumed]);
22
+ const finishInstall = (installed) => {
23
+ if (!installed || installed.length === 0)
24
+ return;
25
+ if (installed.length > 1)
26
+ setInstalledForPack(installed);
27
+ };
28
+ return (_jsxs("div", { className: "skills-page-stack", children: [_jsx("div", { className: "skills-install-anchor", ref: installAnchorRef, children: _jsx(props.InstallPanel, { installSource: props.installSource, installPath: props.installPath, installRef: props.installRef, installFullDepth: props.installFullDepth, installTargetSkill: props.installTargetSkill ?? null, installStatus: props.installStatus, installBusy: props.installBusy, installDiscovering: props.installDiscovering, installSelectionOpen: props.installSelectionOpen, installCandidates: props.installCandidates, selectedInstallSkills: props.selectedInstallSkills, onInstallSourceChange: props.onInstallSourceChange, onInstallPathChange: props.onInstallPathChange, onInstallRefChange: props.onInstallRefChange, onInstallFullDepthChange: props.onInstallFullDepthChange, onClearInstallTarget: props.onClearInstallTarget, onToggleInstallSkill: props.onToggleInstallSkill, onSelectAllInstallSkills: props.onSelectAllInstallSkills, onConfirmInstallSelection: () => { void props.onConfirmInstallSelection().then(finishInstall); }, onCloseInstallSelection: props.onCloseInstallSelection, onInstall: () => { void props.onInstall().then(finishInstall); }, onOpenNativeDiscovery: props.onOpenNativeDiscovery }) }), installedForPack && (_jsx(PostInstallPackDialog, { skillNames: installedForPack, onClose: () => setInstalledForPack(null), onCreate: async (input) => {
29
+ await props.onCreatePack(input);
30
+ setInstalledForPack(null);
31
+ } })), _jsx(props.InstalledLibrary, { skills: props.skills, busySkill: props.skillBusy, removingNames: props.removingNames, status: props.installedStatus, onUpdate: props.onUpdateSkill, onRequestRemove: props.onRequestRemove, externalQuery: props.navIntent?.librarySearch ?? null, externalFilterNames: props.navIntent?.libraryFilterSkills ?? null, packsKnown: props.packsKnown, onInstallMissing: props.onInstallMissing, graph: props.graph, packNames: props.packNames, onShowSkillPacks: props.onShowSkillPacks, onShowSkillBots: props.onShowSkillBots }), _jsx(props.RemoveDialog, { names: props.removalDialogOpen ? props.pendingRemoval : null, references: props.removalReferences, busy: props.removingNames.size > 0, error: props.removalError, onCancel: props.onCancelRemoval, onConfirm: props.onConfirmRemoval })] }));
32
+ }
33
+ function PostInstallPackDialog(props) {
34
+ const tr = useT();
35
+ const [id, setId] = useState('');
36
+ const [name, setName] = useState('');
37
+ const [busy, setBusy] = useState(false);
38
+ const [error, setError] = useState(null);
39
+ const dialogRef = useRef(null);
40
+ useEffect(() => {
41
+ const dlg = dialogRef.current;
42
+ if (dlg && !dlg.open) {
43
+ try {
44
+ dlg.showModal();
45
+ }
46
+ catch { /* already open */ }
47
+ }
48
+ }, []);
49
+ const create = async () => {
50
+ if (!id.trim() || !name.trim())
51
+ return;
52
+ setBusy(true);
53
+ setError(null);
54
+ try {
55
+ await props.onCreate({ id: id.trim(), name: name.trim(), skillNames: props.skillNames });
56
+ }
57
+ catch (err) {
58
+ setError(err?.message ?? String(err));
59
+ }
60
+ finally {
61
+ setBusy(false);
62
+ }
63
+ };
64
+ return (_jsx("dialog", { className: "bd-dialog skills-post-install-pack", ref: dialogRef, onClose: () => !busy && props.onClose(), children: _jsxs("form", { method: "dialog", onSubmit: event => { event.preventDefault(); void create(); }, children: [_jsx("h3", { children: tr('skills.postInstallPackTitle') }), _jsx("p", { children: tr('skills.postInstallPackHelp', { count: props.skillNames.length }) }), _jsxs("div", { className: "skills-control-block", children: [_jsx("label", { children: tr('skills.packId') }), _jsx("input", { autoFocus: true, required: true, value: id, onChange: event => setId(event.target.value) })] }), _jsxs("div", { className: "skills-control-block", children: [_jsx("label", { children: tr('skills.packName') }), _jsx("input", { required: true, value: name, onChange: event => setName(event.target.value) })] }), _jsxs("div", { className: "skills-resolved-preview", children: [_jsx("strong", { children: tr('skills.postInstallPackSkills') }), _jsx("ul", { children: props.skillNames.map(skillName => _jsx("li", { children: _jsx("code", { children: skillName }) }, skillName)) })] }), error && _jsx("p", { className: "hint-warn", children: error }), _jsxs("div", { className: "skills-dialog-actions", children: [_jsx("button", { type: "button", className: "bd-button", disabled: busy, onClick: props.onClose, children: tr('skills.postInstallPackSkip') }), _jsx("button", { type: "submit", className: "bd-button primary", disabled: busy || !id.trim() || !name.trim(), children: busy ? tr('skills.saving') : tr('skills.postInstallPackCreate') })] })] }) }));
65
+ }
66
+ /** Visual hint only — the daemon's parseSkillInstallSource() owns the real
67
+ * classification. Kept deliberately in sync with it so the wizard never
68
+ * promises a source type the backend would reject. Note this is a *hint*: a
69
+ * bare `owner/repo` that also exists as a local directory installs from disk,
70
+ * which only the daemon (with filesystem access) can know. */
71
+ export function detectSourceType(source) {
72
+ const s = source.trim();
73
+ const lower = s.toLowerCase();
74
+ if (!s)
75
+ return 'unknown';
76
+ // agentbuddy only via the canonical `agentbuddy:` scheme or a pasted install
77
+ // command — NOT any string that happens to contain the word (a repo or local
78
+ // path named "agentbuddy" is not an agentbuddy source).
79
+ if (/^agentbuddy:/i.test(s))
80
+ return 'agentbuddy';
81
+ if (/(?:^|\s)(?:npx\s+)?agentbuddy(?:@[\w.-]+)?\s+(?:skill|plugin)\s/i.test(s))
82
+ return 'agentbuddy';
83
+ const skillsCommandSource = extractSkillsInstallCommandSource(s);
84
+ if (skillsCommandSource)
85
+ return detectSourceType(skillsCommandSource);
86
+ if (lower.startsWith('github:'))
87
+ return 'github';
88
+ // Explicit git schemes are checked before github.com: `git@github.com:o/r.git`
89
+ // is a git remote to the backend, not a browser URL.
90
+ if (lower.startsWith('git+') || lower.startsWith('git@') || lower.startsWith('git://'))
91
+ return 'git';
92
+ if (lower.includes('github.com'))
93
+ return 'github';
94
+ // Any other http(s) URL is handled as a git remote by the backend.
95
+ if (lower.startsWith('http://') || lower.startsWith('https://'))
96
+ return 'git';
97
+ if (lower.endsWith('.git'))
98
+ return 'git';
99
+ if (/^[/~.]/.test(s))
100
+ return 'local';
101
+ // Bare `owner/repo[/path]` — GitHub shorthand, the most common paste form.
102
+ if (/^[A-Za-z0-9][A-Za-z0-9-]*\/[A-Za-z0-9._-]+(?:\/[\w./-]+)?$/.test(s))
103
+ return 'github';
104
+ // The daemon treats every remaining scheme-less value as a local path,
105
+ // including relative directories. Unsupported URL schemes remain unknown.
106
+ return s.includes('://') ? 'unknown' : 'local';
107
+ }
108
+ //# sourceMappingURL=skill-library-tab.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-library-tab.js","sourceRoot":"","sources":["../../../../src/dashboard/web/skills/skill-library-tab.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import type { SkillPackRow, SkillRow } from './types.js';
2
+ interface SkillPacksTabProps {
3
+ skills: SkillRow[];
4
+ /** full pack rows owned by the page-level useSkillsData store */
5
+ packs: SkillPackRow[];
6
+ /** false = pack data never loaded successfully — show "unavailable", not "no packs" */
7
+ packsKnown?: boolean;
8
+ onRefresh: () => void;
9
+ /** cross-tab arrival: open this pack's editor once, then consume */
10
+ focusPackId?: string | null;
11
+ /** cross-tab arrival: highlight these pack cards (no editor), then consume */
12
+ focusPackIds?: string[] | null;
13
+ onFocusConsumed?: () => void;
14
+ /** chip click-throughs */
15
+ onOpenBot?: (larkAppId: string) => void;
16
+ /** redirect to the library install entry, prefilled — never auto-installs */
17
+ onInstallMissingSkill?: (name: string) => void;
18
+ }
19
+ export declare function SkillPacksTab(props: SkillPacksTabProps): import("react").JSX.Element;
20
+ export {};
21
+ //# sourceMappingURL=skill-packs-tab.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-packs-tab.d.ts","sourceRoot":"","sources":["../../../../src/dashboard/web/skills/skill-packs-tab.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAiB,MAAM,YAAY,CAAC;AAExE,UAAU,kBAAkB;IAC1B,MAAM,EAAE,QAAQ,EAAE,CAAC;IACnB,iEAAiE;IACjE,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,uFAAuF;IACvF,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,oEAAoE;IACpE,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,8EAA8E;IAC9E,YAAY,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAC/B,eAAe,CAAC,EAAE,MAAM,IAAI,CAAC;IAC7B,0BAA0B;IAC1B,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,6EAA6E;IAC7E,qBAAqB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAChD;AAUD,wBAAgB,aAAa,CAAC,KAAK,EAAE,kBAAkB,+BAoNtD"}