@shepai/cli 1.180.0 → 1.181.0-pr512.ba01d33

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 (392) hide show
  1. package/apis/json-schema/MessagingCommand.yaml +28 -0
  2. package/apis/json-schema/MessagingCommandType.yaml +17 -0
  3. package/apis/json-schema/MessagingConfig.yaml +40 -0
  4. package/apis/json-schema/MessagingFrameType.yaml +8 -0
  5. package/apis/json-schema/MessagingNotification.yaml +22 -0
  6. package/apis/json-schema/MessagingPlatform.yaml +7 -0
  7. package/apis/json-schema/MessagingPlatformConfig.yaml +38 -0
  8. package/apis/json-schema/Settings.yaml +3 -0
  9. package/dist/packages/core/src/application/ports/output/services/gateway-client.interface.d.ts +58 -0
  10. package/dist/packages/core/src/application/ports/output/services/gateway-client.interface.d.ts.map +1 -0
  11. package/dist/packages/core/src/application/ports/output/services/gateway-client.interface.js +10 -0
  12. package/dist/packages/core/src/application/ports/output/services/message-sender.interface.d.ts +18 -0
  13. package/dist/packages/core/src/application/ports/output/services/message-sender.interface.d.ts.map +1 -0
  14. package/dist/packages/core/src/application/ports/output/services/message-sender.interface.js +9 -0
  15. package/dist/packages/core/src/application/ports/output/services/messaging-service.interface.d.ts +34 -0
  16. package/dist/packages/core/src/application/ports/output/services/messaging-service.interface.d.ts.map +1 -0
  17. package/dist/packages/core/src/application/ports/output/services/messaging-service.interface.js +12 -0
  18. package/dist/packages/core/src/application/ports/output/services/telegram-client.interface.d.ts +19 -0
  19. package/dist/packages/core/src/application/ports/output/services/telegram-client.interface.d.ts.map +1 -0
  20. package/dist/packages/core/src/application/ports/output/services/telegram-client.interface.js +8 -0
  21. package/dist/packages/core/src/application/use-cases/messaging/begin-pairing.use-case.d.ts +46 -0
  22. package/dist/packages/core/src/application/use-cases/messaging/begin-pairing.use-case.d.ts.map +1 -0
  23. package/dist/packages/core/src/application/use-cases/messaging/begin-pairing.use-case.js +148 -0
  24. package/dist/packages/core/src/application/use-cases/messaging/confirm-pairing.use-case.d.ts +19 -0
  25. package/dist/packages/core/src/application/use-cases/messaging/confirm-pairing.use-case.d.ts.map +1 -0
  26. package/dist/packages/core/src/application/use-cases/messaging/confirm-pairing.use-case.js +63 -0
  27. package/dist/packages/core/src/application/use-cases/messaging/disconnect-messaging.use-case.d.ts +19 -0
  28. package/dist/packages/core/src/application/use-cases/messaging/disconnect-messaging.use-case.d.ts.map +1 -0
  29. package/dist/packages/core/src/application/use-cases/messaging/disconnect-messaging.use-case.js +65 -0
  30. package/dist/packages/core/src/domain/generated/output.d.ts +155 -0
  31. package/dist/packages/core/src/domain/generated/output.d.ts.map +1 -1
  32. package/dist/packages/core/src/domain/generated/output.js +26 -0
  33. package/dist/packages/core/src/infrastructure/di/container.d.ts.map +1 -1
  34. package/dist/packages/core/src/infrastructure/di/container.js +117 -0
  35. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.d.ts +24 -0
  36. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.d.ts.map +1 -1
  37. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.js +117 -0
  38. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/056-add-messaging-remote-control.d.ts +22 -0
  39. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/056-add-messaging-remote-control.d.ts.map +1 -0
  40. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/056-add-messaging-remote-control.js +62 -0
  41. package/dist/packages/core/src/infrastructure/repositories/sqlite-settings.repository.d.ts.map +1 -1
  42. package/dist/packages/core/src/infrastructure/repositories/sqlite-settings.repository.js +43 -3
  43. package/dist/packages/core/src/infrastructure/services/messaging/chat-relay.d.ts +45 -0
  44. package/dist/packages/core/src/infrastructure/services/messaging/chat-relay.d.ts.map +1 -0
  45. package/dist/packages/core/src/infrastructure/services/messaging/chat-relay.js +100 -0
  46. package/dist/packages/core/src/infrastructure/services/messaging/command-executor.d.ts +53 -0
  47. package/dist/packages/core/src/infrastructure/services/messaging/command-executor.d.ts.map +1 -0
  48. package/dist/packages/core/src/infrastructure/services/messaging/command-executor.js +200 -0
  49. package/dist/packages/core/src/infrastructure/services/messaging/content-sanitizer.d.ts +23 -0
  50. package/dist/packages/core/src/infrastructure/services/messaging/content-sanitizer.d.ts.map +1 -0
  51. package/dist/packages/core/src/infrastructure/services/messaging/content-sanitizer.js +39 -0
  52. package/dist/packages/core/src/infrastructure/services/messaging/http-gateway.client.d.ts +19 -0
  53. package/dist/packages/core/src/infrastructure/services/messaging/http-gateway.client.d.ts.map +1 -0
  54. package/dist/packages/core/src/infrastructure/services/messaging/http-gateway.client.js +124 -0
  55. package/dist/packages/core/src/infrastructure/services/messaging/http-telegram.client.d.ts +18 -0
  56. package/dist/packages/core/src/infrastructure/services/messaging/http-telegram.client.d.ts.map +1 -0
  57. package/dist/packages/core/src/infrastructure/services/messaging/http-telegram.client.js +60 -0
  58. package/dist/packages/core/src/infrastructure/services/messaging/messaging-tunnel.adapter.d.ts +68 -0
  59. package/dist/packages/core/src/infrastructure/services/messaging/messaging-tunnel.adapter.d.ts.map +1 -0
  60. package/dist/packages/core/src/infrastructure/services/messaging/messaging-tunnel.adapter.js +262 -0
  61. package/dist/packages/core/src/infrastructure/services/messaging/messaging.service.d.ts +78 -0
  62. package/dist/packages/core/src/infrastructure/services/messaging/messaging.service.d.ts.map +1 -0
  63. package/dist/packages/core/src/infrastructure/services/messaging/messaging.service.js +279 -0
  64. package/dist/packages/core/src/infrastructure/services/messaging/notification-emitter.d.ts +33 -0
  65. package/dist/packages/core/src/infrastructure/services/messaging/notification-emitter.d.ts.map +1 -0
  66. package/dist/packages/core/src/infrastructure/services/messaging/notification-emitter.js +79 -0
  67. package/dist/packages/core/src/infrastructure/services/messaging/stub-gateway.client.d.ts +12 -0
  68. package/dist/packages/core/src/infrastructure/services/messaging/stub-gateway.client.d.ts.map +1 -0
  69. package/dist/packages/core/src/infrastructure/services/messaging/stub-gateway.client.js +26 -0
  70. package/dist/packages/core/src/infrastructure/services/messaging/telegram-message-sender.d.ts +26 -0
  71. package/dist/packages/core/src/infrastructure/services/messaging/telegram-message-sender.d.ts.map +1 -0
  72. package/dist/packages/core/src/infrastructure/services/messaging/telegram-message-sender.js +49 -0
  73. package/dist/packages/core/src/infrastructure/services/messaging/telegram-webhook.parser.d.ts +28 -0
  74. package/dist/packages/core/src/infrastructure/services/messaging/telegram-webhook.parser.d.ts.map +1 -0
  75. package/dist/packages/core/src/infrastructure/services/messaging/telegram-webhook.parser.js +45 -0
  76. package/dist/packages/core/src/infrastructure/services/messaging/tunnel-protocol.d.ts +102 -0
  77. package/dist/packages/core/src/infrastructure/services/messaging/tunnel-protocol.d.ts.map +1 -0
  78. package/dist/packages/core/src/infrastructure/services/messaging/tunnel-protocol.js +16 -0
  79. package/dist/packages/core/src/infrastructure/services/messaging/whatsapp-webhook.parser.d.ts +39 -0
  80. package/dist/packages/core/src/infrastructure/services/messaging/whatsapp-webhook.parser.d.ts.map +1 -0
  81. package/dist/packages/core/src/infrastructure/services/messaging/whatsapp-webhook.parser.js +56 -0
  82. package/dist/src/presentation/cli/commands/_serve.command.d.ts.map +1 -1
  83. package/dist/src/presentation/cli/commands/_serve.command.js +6 -0
  84. package/dist/src/presentation/cli/commands/app/del.command.d.ts +14 -0
  85. package/dist/src/presentation/cli/commands/app/del.command.d.ts.map +1 -0
  86. package/dist/src/presentation/cli/commands/app/del.command.js +58 -0
  87. package/dist/src/presentation/cli/commands/app/index.d.ts +20 -0
  88. package/dist/src/presentation/cli/commands/app/index.d.ts.map +1 -0
  89. package/dist/src/presentation/cli/commands/app/index.js +33 -0
  90. package/dist/src/presentation/cli/commands/app/ls.command.d.ts +11 -0
  91. package/dist/src/presentation/cli/commands/app/ls.command.d.ts.map +1 -0
  92. package/dist/src/presentation/cli/commands/app/ls.command.js +74 -0
  93. package/dist/src/presentation/cli/commands/app/new.command.d.ts +17 -0
  94. package/dist/src/presentation/cli/commands/app/new.command.d.ts.map +1 -0
  95. package/dist/src/presentation/cli/commands/app/new.command.js +58 -0
  96. package/dist/src/presentation/cli/commands/app/resolve-application.d.ts +10 -0
  97. package/dist/src/presentation/cli/commands/app/resolve-application.d.ts.map +1 -0
  98. package/dist/src/presentation/cli/commands/app/resolve-application.js +33 -0
  99. package/dist/src/presentation/cli/commands/app/show.command.d.ts +11 -0
  100. package/dist/src/presentation/cli/commands/app/show.command.d.ts.map +1 -0
  101. package/dist/src/presentation/cli/commands/app/show.command.js +95 -0
  102. package/dist/src/presentation/cli/commands/settings/index.d.ts.map +1 -1
  103. package/dist/src/presentation/cli/commands/settings/index.js +3 -1
  104. package/dist/src/presentation/cli/commands/settings/messaging.command.d.ts +17 -0
  105. package/dist/src/presentation/cli/commands/settings/messaging.command.d.ts.map +1 -0
  106. package/dist/src/presentation/cli/commands/settings/messaging.command.js +187 -0
  107. package/dist/src/presentation/cli/index.js +2 -0
  108. package/dist/src/presentation/web/app/actions/messaging.d.ts +29 -0
  109. package/dist/src/presentation/web/app/actions/messaging.d.ts.map +1 -0
  110. package/dist/src/presentation/web/app/actions/messaging.js +55 -0
  111. package/dist/src/presentation/web/components/features/settings/messaging-settings-section.d.ts +6 -0
  112. package/dist/src/presentation/web/components/features/settings/messaging-settings-section.d.ts.map +1 -0
  113. package/dist/src/presentation/web/components/features/settings/messaging-settings-section.js +206 -0
  114. package/dist/src/presentation/web/components/features/settings/messaging-settings-section.stories.d.ts +17 -0
  115. package/dist/src/presentation/web/components/features/settings/messaging-settings-section.stories.d.ts.map +1 -0
  116. package/dist/src/presentation/web/components/features/settings/messaging-settings-section.stories.js +55 -0
  117. package/dist/src/presentation/web/components/features/settings/settings-page-client.d.ts.map +1 -1
  118. package/dist/src/presentation/web/components/features/settings/settings-page-client.js +9 -2
  119. package/dist/src/presentation/web/dev-server.js +27 -0
  120. package/dist/translations/ar/cli.json +63 -0
  121. package/dist/translations/ar/web.json +2 -1
  122. package/dist/translations/de/cli.json +63 -0
  123. package/dist/translations/de/web.json +2 -1
  124. package/dist/translations/en/cli.json +63 -0
  125. package/dist/translations/en/web.json +13 -12
  126. package/dist/translations/es/cli.json +63 -0
  127. package/dist/translations/es/web.json +2 -1
  128. package/dist/translations/fr/cli.json +63 -0
  129. package/dist/translations/fr/web.json +2 -1
  130. package/dist/translations/he/cli.json +63 -0
  131. package/dist/translations/he/web.json +2 -1
  132. package/dist/translations/pt/cli.json +63 -0
  133. package/dist/translations/pt/web.json +2 -1
  134. package/dist/translations/ru/cli.json +63 -0
  135. package/dist/translations/ru/web.json +2 -1
  136. package/dist/translations/uk/cli.json +63 -0
  137. package/dist/translations/uk/web.json +2 -1
  138. package/dist/tsconfig.build.tsbuildinfo +1 -1
  139. package/package.json +3 -1
  140. package/web/.next/BUILD_ID +1 -1
  141. package/web/.next/build-manifest.json +2 -2
  142. package/web/.next/fallback-build-manifest.json +2 -2
  143. package/web/.next/prerender-manifest.json +3 -3
  144. package/web/.next/required-server-files.js +3 -3
  145. package/web/.next/required-server-files.json +3 -3
  146. package/web/.next/server/app/(dashboard)/@drawer/adopt/page/server-reference-manifest.json +32 -32
  147. package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js.nft.json +1 -1
  148. package/web/.next/server/app/(dashboard)/@drawer/adopt/page_client-reference-manifest.js +1 -1
  149. package/web/.next/server/app/(dashboard)/@drawer/chat/page/server-reference-manifest.json +30 -30
  150. package/web/.next/server/app/(dashboard)/@drawer/chat/page.js.nft.json +1 -1
  151. package/web/.next/server/app/(dashboard)/@drawer/chat/page_client-reference-manifest.js +1 -1
  152. package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +33 -33
  153. package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
  154. package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
  155. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/server-reference-manifest.json +41 -41
  156. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  157. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  158. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +41 -41
  159. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
  160. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
  161. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +31 -31
  162. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page.js.nft.json +1 -1
  163. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +1 -1
  164. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +31 -31
  165. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
  166. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  167. package/web/.next/server/app/(dashboard)/chat/page/server-reference-manifest.json +30 -30
  168. package/web/.next/server/app/(dashboard)/chat/page.js.nft.json +1 -1
  169. package/web/.next/server/app/(dashboard)/chat/page_client-reference-manifest.js +1 -1
  170. package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +33 -33
  171. package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
  172. package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
  173. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/server-reference-manifest.json +41 -41
  174. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  175. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  176. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +41 -41
  177. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
  178. package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
  179. package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +30 -30
  180. package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
  181. package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
  182. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +31 -31
  183. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page.js.nft.json +1 -1
  184. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +1 -1
  185. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +31 -31
  186. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
  187. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  188. package/web/.next/server/app/_global-error.html +2 -2
  189. package/web/.next/server/app/_global-error.rsc +1 -1
  190. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  191. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  192. package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  193. package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  194. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  195. package/web/.next/server/app/_not-found/page/server-reference-manifest.json +7 -7
  196. package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
  197. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  198. package/web/.next/server/app/api/attachments/preview/route.js.nft.json +1 -1
  199. package/web/.next/server/app/api/evidence/route.js.nft.json +1 -1
  200. package/web/.next/server/app/api/graph-data/route.js.nft.json +1 -1
  201. package/web/.next/server/app/api/interactive/chat/[featureId]/messages/route.js.nft.json +1 -1
  202. package/web/.next/server/app/application/[id]/page/server-reference-manifest.json +15 -15
  203. package/web/.next/server/app/application/[id]/page.js.nft.json +1 -1
  204. package/web/.next/server/app/application/[id]/page_client-reference-manifest.js +1 -1
  205. package/web/.next/server/app/features/page/server-reference-manifest.json +7 -7
  206. package/web/.next/server/app/features/page.js.nft.json +1 -1
  207. package/web/.next/server/app/features/page_client-reference-manifest.js +1 -1
  208. package/web/.next/server/app/settings/page/server-reference-manifest.json +65 -20
  209. package/web/.next/server/app/settings/page.js +1 -1
  210. package/web/.next/server/app/settings/page.js.nft.json +1 -1
  211. package/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  212. package/web/.next/server/app/skills/page/server-reference-manifest.json +15 -15
  213. package/web/.next/server/app/skills/page.js.nft.json +1 -1
  214. package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  215. package/web/.next/server/app/tools/page/server-reference-manifest.json +13 -13
  216. package/web/.next/server/app/tools/page.js.nft.json +1 -1
  217. package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  218. package/web/.next/server/app/version/page/server-reference-manifest.json +7 -7
  219. package/web/.next/server/app/version/page.js.nft.json +1 -1
  220. package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  221. package/web/.next/server/chunks/[root-of-the-server]__a402b567._.js +1 -1
  222. package/web/.next/server/chunks/[root-of-the-server]__b2a4bfcc._.js +1 -1
  223. package/web/.next/server/chunks/[root-of-the-server]__b2a4bfcc._.js.map +1 -1
  224. package/web/.next/server/chunks/[root-of-the-server]__cd67a84c._.js +1 -1
  225. package/web/.next/server/chunks/[root-of-the-server]__cd67a84c._.js.map +1 -1
  226. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js +1 -1
  227. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js.map +1 -1
  228. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_feature-drawer-client_tsx_e9755fc8._.js +2 -2
  229. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_feature-drawer-client_tsx_e9755fc8._.js.map +1 -1
  230. package/web/.next/server/chunks/ssr/{7f428_lucide-react_dist_esm_icons_5da25833._.js → 7f428_lucide-react_dist_esm_icons_469d51b7._.js} +2 -2
  231. package/web/.next/server/chunks/ssr/7f428_lucide-react_dist_esm_icons_469d51b7._.js.map +1 -0
  232. package/web/.next/server/chunks/ssr/[root-of-the-server]__013a0318._.js +1 -1
  233. package/web/.next/server/chunks/ssr/[root-of-the-server]__013a0318._.js.map +1 -1
  234. package/web/.next/server/chunks/ssr/[root-of-the-server]__17dadd08._.js +1 -1
  235. package/web/.next/server/chunks/ssr/[root-of-the-server]__17dadd08._.js.map +1 -1
  236. package/web/.next/server/chunks/ssr/[root-of-the-server]__1925bef0._.js +1 -1
  237. package/web/.next/server/chunks/ssr/[root-of-the-server]__1a9687c4._.js +1 -1
  238. package/web/.next/server/chunks/ssr/[root-of-the-server]__1a9687c4._.js.map +1 -1
  239. package/web/.next/server/chunks/ssr/[root-of-the-server]__24756fa9._.js +2 -2
  240. package/web/.next/server/chunks/ssr/[root-of-the-server]__24756fa9._.js.map +1 -1
  241. package/web/.next/server/chunks/ssr/[root-of-the-server]__42d066e1._.js +3 -0
  242. package/web/.next/server/chunks/ssr/[root-of-the-server]__42d066e1._.js.map +1 -0
  243. package/web/.next/server/chunks/ssr/[root-of-the-server]__4ee8be85._.js +1 -1
  244. package/web/.next/server/chunks/ssr/[root-of-the-server]__70986695._.js +1 -1
  245. package/web/.next/server/chunks/ssr/[root-of-the-server]__70986695._.js.map +1 -1
  246. package/web/.next/server/chunks/ssr/[root-of-the-server]__a5ea76a6._.js +1 -1
  247. package/web/.next/server/chunks/ssr/[root-of-the-server]__a5ea76a6._.js.map +1 -1
  248. package/web/.next/server/chunks/ssr/[root-of-the-server]__dd3e834e._.js +1 -1
  249. package/web/.next/server/chunks/ssr/[root-of-the-server]__dd3e834e._.js.map +1 -1
  250. package/web/.next/server/chunks/ssr/[root-of-the-server]__e265da61._.js +1 -1
  251. package/web/.next/server/chunks/ssr/[root-of-the-server]__f3ca7bea._.js +1 -1
  252. package/web/.next/server/chunks/ssr/[root-of-the-server]__f3ca7bea._.js.map +1 -1
  253. package/web/.next/server/chunks/ssr/{[root-of-the-server]__bb391c45._.js → [root-of-the-server]__f4f07ee6._.js} +2 -2
  254. package/web/.next/server/chunks/ssr/[root-of-the-server]__f4f07ee6._.js.map +1 -0
  255. package/web/.next/server/chunks/ssr/_0277d3b5._.js +1 -1
  256. package/web/.next/server/chunks/ssr/_0277d3b5._.js.map +1 -1
  257. package/web/.next/server/chunks/ssr/{_d44d091a._.js → _1a4c514f._.js} +2 -2
  258. package/web/.next/server/chunks/ssr/{_d44d091a._.js.map → _1a4c514f._.js.map} +1 -1
  259. package/web/.next/server/chunks/ssr/_33bab16e._.js +3 -0
  260. package/web/.next/server/chunks/ssr/{_b8e8b690._.js.map → _33bab16e._.js.map} +1 -1
  261. package/web/.next/server/chunks/ssr/_45496654._.js.map +1 -1
  262. package/web/.next/server/chunks/ssr/_56b9d60f._.js +1 -1
  263. package/web/.next/server/chunks/ssr/_56b9d60f._.js.map +1 -1
  264. package/web/.next/server/chunks/ssr/{_8caadb9a._.js → _5d41b1f7._.js} +2 -2
  265. package/web/.next/server/chunks/ssr/{_8caadb9a._.js.map → _5d41b1f7._.js.map} +1 -1
  266. package/web/.next/server/chunks/ssr/_708a9069._.js +3 -0
  267. package/web/.next/server/chunks/ssr/_708a9069._.js.map +1 -0
  268. package/web/.next/server/chunks/ssr/{_63fc4647._.js → _81197d1b._.js} +2 -2
  269. package/web/.next/server/chunks/ssr/{_63fc4647._.js.map → _81197d1b._.js.map} +1 -1
  270. package/web/.next/server/chunks/ssr/{_295fffde._.js → _86bb5eb1._.js} +6 -2
  271. package/web/.next/server/chunks/ssr/_86bb5eb1._.js.map +1 -0
  272. package/web/.next/server/chunks/ssr/_946a7fc6._.js +1 -1
  273. package/web/.next/server/chunks/ssr/_946a7fc6._.js.map +1 -1
  274. package/web/.next/server/chunks/ssr/_bad61758._.js +3 -0
  275. package/web/.next/server/chunks/ssr/_bad61758._.js.map +1 -0
  276. package/web/.next/server/chunks/ssr/{_36489f2b._.js → _ce70bfa0._.js} +2 -2
  277. package/web/.next/server/chunks/ssr/{_36489f2b._.js.map → _ce70bfa0._.js.map} +1 -1
  278. package/web/.next/server/chunks/ssr/_d7d82308._.js +3 -0
  279. package/web/.next/server/chunks/ssr/_d7d82308._.js.map +1 -0
  280. package/web/.next/server/chunks/ssr/_dd852eae._.js +3 -0
  281. package/web/.next/server/chunks/ssr/_dd852eae._.js.map +1 -0
  282. package/web/.next/server/chunks/ssr/_eff1b518._.js +1 -1
  283. package/web/.next/server/chunks/ssr/_eff1b518._.js.map +1 -1
  284. package/web/.next/server/chunks/ssr/_f227429a._.js +1 -1
  285. package/web/.next/server/chunks/ssr/_f227429a._.js.map +1 -1
  286. package/web/.next/server/chunks/ssr/_f6b812ec._.js +9 -0
  287. package/web/.next/server/chunks/ssr/_f6b812ec._.js.map +1 -0
  288. package/web/.next/server/chunks/ssr/_f86fc1bf._.js +1 -1
  289. package/web/.next/server/chunks/ssr/_f86fc1bf._.js.map +1 -1
  290. package/web/.next/server/chunks/ssr/_f8c55130._.js +1 -1
  291. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js +1 -1
  292. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js.map +1 -1
  293. package/web/.next/server/chunks/ssr/f3a1f_components_common_control-center-drawer_repository-drawer-client_tsx_39a00c03._.js +1 -1
  294. package/web/.next/server/chunks/ssr/f3a1f_components_common_control-center-drawer_repository-drawer-client_tsx_39a00c03._.js.map +1 -1
  295. package/web/.next/server/chunks/ssr/node_modules__pnpm_64cc95e9._.js +3 -0
  296. package/web/.next/server/chunks/ssr/node_modules__pnpm_64cc95e9._.js.map +1 -0
  297. package/web/.next/server/chunks/ssr/src_presentation_web_36f2bc45._.js +1 -1
  298. package/web/.next/server/chunks/ssr/src_presentation_web_36f2bc45._.js.map +1 -1
  299. package/web/.next/server/chunks/ssr/src_presentation_web_486908de._.js +1 -1
  300. package/web/.next/server/chunks/ssr/src_presentation_web_486908de._.js.map +1 -1
  301. package/web/.next/server/chunks/ssr/src_presentation_web_5c3596bc._.js +1 -1
  302. package/web/.next/server/chunks/ssr/src_presentation_web_5c3596bc._.js.map +1 -1
  303. package/web/.next/server/chunks/ssr/src_presentation_web_6159fef8._.js +1 -1
  304. package/web/.next/server/chunks/ssr/src_presentation_web_6159fef8._.js.map +1 -1
  305. package/web/.next/server/chunks/ssr/src_presentation_web_6326f81e._.js +1 -1
  306. package/web/.next/server/chunks/ssr/src_presentation_web_6326f81e._.js.map +1 -1
  307. package/web/.next/server/chunks/ssr/src_presentation_web_6b2fdcd8._.js +1 -1
  308. package/web/.next/server/chunks/ssr/src_presentation_web_6b2fdcd8._.js.map +1 -1
  309. package/web/.next/server/chunks/ssr/src_presentation_web_74703c9f._.js +1 -1
  310. package/web/.next/server/chunks/ssr/src_presentation_web_74703c9f._.js.map +1 -1
  311. package/web/.next/server/chunks/ssr/src_presentation_web_a8056dac._.js +1 -1
  312. package/web/.next/server/chunks/ssr/src_presentation_web_a8056dac._.js.map +1 -1
  313. package/web/.next/server/chunks/ssr/src_presentation_web_ad42cc73._.js +1 -1
  314. package/web/.next/server/chunks/ssr/src_presentation_web_ad42cc73._.js.map +1 -1
  315. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_open-ide_ts_baaca5d5._.js +3 -3
  316. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_open-ide_ts_baaca5d5._.js.map +1 -1
  317. package/web/.next/server/chunks/ssr/src_presentation_web_b00bfb08._.js +1 -1
  318. package/web/.next/server/chunks/ssr/src_presentation_web_b00bfb08._.js.map +1 -1
  319. package/web/.next/server/chunks/ssr/src_presentation_web_components_895e5bfa._.js +1 -1
  320. package/web/.next/server/chunks/ssr/src_presentation_web_components_895e5bfa._.js.map +1 -1
  321. package/web/.next/server/chunks/ssr/src_presentation_web_components_common_base-drawer_base-drawer_tsx_97dfbbc8._.js +1 -1
  322. package/web/.next/server/chunks/ssr/src_presentation_web_components_common_base-drawer_base-drawer_tsx_97dfbbc8._.js.map +1 -1
  323. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +1 -1
  324. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js.map +1 -1
  325. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_skills_8a174cac._.js +1 -1
  326. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_skills_8a174cac._.js.map +1 -1
  327. package/web/.next/server/chunks/ssr/src_presentation_web_db9fa0c2._.js +1 -1
  328. package/web/.next/server/chunks/ssr/src_presentation_web_f1edcf5e._.js +1 -1
  329. package/web/.next/server/chunks/ssr/src_presentation_web_f1edcf5e._.js.map +1 -1
  330. package/web/.next/server/chunks/ssr/src_presentation_web_f9436804._.js +1 -1
  331. package/web/.next/server/chunks/ssr/src_presentation_web_f9436804._.js.map +1 -1
  332. package/web/.next/server/chunks/ssr/translations_23dd5e7e._.js +1 -1
  333. package/web/.next/server/chunks/ssr/translations_23dd5e7e._.js.map +1 -1
  334. package/web/.next/server/pages/500.html +2 -2
  335. package/web/.next/server/server-reference-manifest.js +1 -1
  336. package/web/.next/server/server-reference-manifest.json +109 -64
  337. package/web/.next/static/chunks/0239d68df2738a2a.js +1 -0
  338. package/web/.next/static/chunks/{e2f9e224d1fa1faa.js → 05d641009a42e94b.js} +1 -1
  339. package/web/.next/static/chunks/{26e2ca76ab6c38b4.js → 0d04391861f2a381.js} +1 -1
  340. package/web/.next/static/chunks/{f28aef9cf5107c4b.js → 151d16c2c65a4356.js} +1 -1
  341. package/web/.next/static/chunks/19008d82be3a09a5.js +5 -0
  342. package/web/.next/static/chunks/{893a2a76546c66a7.js → 193d8b761fec697e.js} +1 -1
  343. package/web/.next/static/chunks/2bad6607c1e0f153.js +7 -0
  344. package/web/.next/static/chunks/{7c3fe3c694874dea.js → 32940aa08b947f66.js} +1 -1
  345. package/web/.next/static/chunks/368809962c4cd597.js +1 -0
  346. package/web/.next/static/chunks/{dfdcccf73de56960.js → 475e5bd4e8bafc6f.js} +1 -1
  347. package/web/.next/static/chunks/{8746807722de67a8.js → 55e59f912fff1858.js} +1 -1
  348. package/web/.next/static/chunks/{490667b2a9bb58e2.js → 66d72ca561bb91ca.js} +1 -1
  349. package/web/.next/static/chunks/6da04daaac881f27.js +1 -0
  350. package/web/.next/static/chunks/{2fe20598e1b4793a.js → 75eb5f94364a44bf.js} +2 -2
  351. package/web/.next/static/chunks/{e8444bf5f6c35f8b.js → 7bbe49d9daedd94d.js} +5 -1
  352. package/web/.next/static/chunks/{7bc7028587490fff.js → 83ea5b5b0d0a8477.js} +1 -1
  353. package/web/.next/static/chunks/8fe70d4e73e1fe31.css +1 -0
  354. package/web/.next/static/chunks/{1bc12075020723ed.js → 9d70c74c84d24724.js} +1 -1
  355. package/web/.next/static/chunks/{7849c6797be7c6ca.js → a6d8276c88451abf.js} +2 -2
  356. package/web/.next/static/chunks/b3fa9a303332e7d6.js +3 -0
  357. package/web/.next/static/chunks/b9b3a6d83e07b213.js +1 -0
  358. package/web/.next/static/chunks/c92bc820f657f9d9.js +1 -0
  359. package/web/.next/static/chunks/dd5ab4e1762b5812.js +1 -0
  360. package/web/.next/static/chunks/{e7da54dde18e7fb2.js → e7b870347bdfe35d.js} +1 -1
  361. package/web/.next/static/chunks/ecafea5bc026ed41.js +1 -0
  362. package/web/.next/server/chunks/ssr/7f428_lucide-react_dist_esm_icons_5da25833._.js.map +0 -1
  363. package/web/.next/server/chunks/ssr/[root-of-the-server]__a6f2b763._.js +0 -3
  364. package/web/.next/server/chunks/ssr/[root-of-the-server]__a6f2b763._.js.map +0 -1
  365. package/web/.next/server/chunks/ssr/[root-of-the-server]__bb391c45._.js.map +0 -1
  366. package/web/.next/server/chunks/ssr/_295fffde._.js.map +0 -1
  367. package/web/.next/server/chunks/ssr/_44531b76._.js +0 -9
  368. package/web/.next/server/chunks/ssr/_44531b76._.js.map +0 -1
  369. package/web/.next/server/chunks/ssr/_5bf2415e._.js +0 -7
  370. package/web/.next/server/chunks/ssr/_5bf2415e._.js.map +0 -1
  371. package/web/.next/server/chunks/ssr/_869a3a15._.js +0 -3
  372. package/web/.next/server/chunks/ssr/_869a3a15._.js.map +0 -1
  373. package/web/.next/server/chunks/ssr/_b227ff50._.js +0 -3
  374. package/web/.next/server/chunks/ssr/_b227ff50._.js.map +0 -1
  375. package/web/.next/server/chunks/ssr/_b8e8b690._.js +0 -3
  376. package/web/.next/server/chunks/ssr/_e071ba48._.js +0 -3
  377. package/web/.next/server/chunks/ssr/_e071ba48._.js.map +0 -1
  378. package/web/.next/server/chunks/ssr/node_modules__pnpm_747b43ac._.js +0 -3
  379. package/web/.next/server/chunks/ssr/node_modules__pnpm_747b43ac._.js.map +0 -1
  380. package/web/.next/static/chunks/06b9d6dbf635c370.css +0 -1
  381. package/web/.next/static/chunks/1ae0cf5be30ef398.js +0 -1
  382. package/web/.next/static/chunks/1fa1574b87bd2eb1.js +0 -1
  383. package/web/.next/static/chunks/8492d8e0b5f9a4e8.js +0 -1
  384. package/web/.next/static/chunks/927442d2628f6e22.js +0 -1
  385. package/web/.next/static/chunks/a1098522326428d1.js +0 -1
  386. package/web/.next/static/chunks/b99506a6f7bc2fa8.js +0 -1
  387. package/web/.next/static/chunks/be89c20c257247ad.js +0 -7
  388. package/web/.next/static/chunks/c0bd3ffcf94d1845.js +0 -7
  389. package/web/.next/static/chunks/f6d47ff35d612852.js +0 -5
  390. /package/web/.next/static/{GQFJf3UCD4D5C4NCn8eXl → Rb8tiiSfY1LEpEkuZLtTr}/_buildManifest.js +0 -0
  391. /package/web/.next/static/{GQFJf3UCD4D5C4NCn8eXl → Rb8tiiSfY1LEpEkuZLtTr}/_clientMiddlewareManifest.json +0 -0
  392. /package/web/.next/static/{GQFJf3UCD4D5C4NCn8eXl → Rb8tiiSfY1LEpEkuZLtTr}/_ssgManifest.js +0 -0
@@ -0,0 +1,33 @@
1
+ /**
2
+ * App Command
3
+ *
4
+ * Top-level app command with subcommands for managing applications.
5
+ *
6
+ * Usage:
7
+ * shep app [subcommand]
8
+ *
9
+ * Subcommands:
10
+ * shep app ls List applications
11
+ * shep app show <id> Display details of an application
12
+ * shep app new <desc> Create a new application
13
+ * shep app del <id> Delete an application
14
+ */
15
+ import { Command } from 'commander';
16
+ import { createLsCommand } from './ls.command.js';
17
+ import { createShowCommand } from './show.command.js';
18
+ import { createNewCommand } from './new.command.js';
19
+ import { createDelCommand } from './del.command.js';
20
+ import { getCliI18n } from '../../i18n.js';
21
+ /**
22
+ * Create the app command with all subcommands
23
+ */
24
+ export function createAppCommand() {
25
+ const t = getCliI18n().t;
26
+ const app = new Command('app')
27
+ .description(t('cli:commands.app.description'))
28
+ .addCommand(createLsCommand())
29
+ .addCommand(createShowCommand())
30
+ .addCommand(createNewCommand())
31
+ .addCommand(createDelCommand());
32
+ return app;
33
+ }
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Application List Command
3
+ *
4
+ * List all applications in a formatted table.
5
+ *
6
+ * Usage:
7
+ * shep app ls
8
+ */
9
+ import { Command } from 'commander';
10
+ export declare function createLsCommand(): Command;
11
+ //# sourceMappingURL=ls.command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ls.command.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/cli/commands/app/ls.command.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgCpC,wBAAgB,eAAe,IAAI,OAAO,CAkCzC"}
@@ -0,0 +1,74 @@
1
+ /**
2
+ * Application List Command
3
+ *
4
+ * List all applications in a formatted table.
5
+ *
6
+ * Usage:
7
+ * shep app ls
8
+ */
9
+ import { Command } from 'commander';
10
+ import { container } from '../../../../../packages/core/src/infrastructure/di/container.js';
11
+ import { ListApplicationsUseCase } from '../../../../../packages/core/src/application/use-cases/applications/list-applications.use-case.js';
12
+ import { colors, messages, renderListView } from '../../ui/index.js';
13
+ import { getCliI18n } from '../../i18n.js';
14
+ /** Format a duration in ms to a compact human-readable string. */
15
+ function formatDuration(ms) {
16
+ const seconds = Math.floor(ms / 1000);
17
+ if (seconds < 60)
18
+ return `${seconds}s`;
19
+ const minutes = Math.floor(seconds / 60);
20
+ if (minutes < 60)
21
+ return `${minutes}m`;
22
+ const hours = Math.floor(minutes / 60);
23
+ const remMin = minutes % 60;
24
+ if (hours < 24)
25
+ return remMin > 0 ? `${hours}h ${remMin}m` : `${hours}h`;
26
+ const days = Math.floor(hours / 24);
27
+ return `${days}d`;
28
+ }
29
+ function colorStatus(status) {
30
+ switch (status) {
31
+ case 'Idle':
32
+ return colors.muted(status);
33
+ case 'Active':
34
+ return colors.success(status);
35
+ case 'Error':
36
+ return colors.warning(status);
37
+ default:
38
+ return colors.muted(status);
39
+ }
40
+ }
41
+ export function createLsCommand() {
42
+ const t = getCliI18n().t;
43
+ return new Command('ls').description(t('cli:commands.app.ls.description')).action(async () => {
44
+ try {
45
+ const useCase = container.resolve(ListApplicationsUseCase);
46
+ const applications = await useCase.execute();
47
+ const now = Date.now();
48
+ const rows = applications.map((app) => [
49
+ app.id.substring(0, 8),
50
+ app.name,
51
+ colorStatus(app.status),
52
+ app.repositoryPath,
53
+ colors.muted(`${formatDuration(now - new Date(app.createdAt).getTime())} ago`),
54
+ ]);
55
+ renderListView({
56
+ title: t('cli:commands.app.ls.title'),
57
+ columns: [
58
+ { label: t('cli:commands.app.ls.idColumn'), width: 10 },
59
+ { label: t('cli:commands.app.ls.nameColumn'), width: 28 },
60
+ { label: t('cli:commands.app.ls.statusColumn'), width: 10 },
61
+ { label: t('cli:commands.app.ls.pathColumn'), width: 36 },
62
+ { label: t('cli:commands.app.ls.createdColumn'), width: 12 },
63
+ ],
64
+ rows,
65
+ emptyMessage: t('cli:commands.app.ls.noApps'),
66
+ });
67
+ }
68
+ catch (error) {
69
+ const err = error instanceof Error ? error : new Error(String(error));
70
+ messages.error(t('cli:commands.app.ls.failedToList'), err);
71
+ process.exitCode = 1;
72
+ }
73
+ });
74
+ }
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Application New Command
3
+ *
4
+ * Creates a new application with optional initial prompt to kick off
5
+ * an interactive agent session.
6
+ *
7
+ * Usage:
8
+ * shep app new <description> [options]
9
+ *
10
+ * @example
11
+ * $ shep app new "Build a todo list app with React"
12
+ * $ shep app new "REST API for inventory management" --agent claude-code
13
+ * $ shep app new "Portfolio website" --model claude-opus-4-6
14
+ */
15
+ import { Command } from 'commander';
16
+ export declare function createNewCommand(): Command;
17
+ //# sourceMappingURL=new.command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"new.command.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/cli/commands/app/new.command.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWpC,wBAAgB,gBAAgB,IAAI,OAAO,CAuD1C"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Application New Command
3
+ *
4
+ * Creates a new application with optional initial prompt to kick off
5
+ * an interactive agent session.
6
+ *
7
+ * Usage:
8
+ * shep app new <description> [options]
9
+ *
10
+ * @example
11
+ * $ shep app new "Build a todo list app with React"
12
+ * $ shep app new "REST API for inventory management" --agent claude-code
13
+ * $ shep app new "Portfolio website" --model claude-opus-4-6
14
+ */
15
+ import { Command } from 'commander';
16
+ import { container } from '../../../../../packages/core/src/infrastructure/di/container.js';
17
+ import { CreateApplicationUseCase } from '../../../../../packages/core/src/application/use-cases/applications/create-application.use-case.js';
18
+ import { colors, messages, spinner } from '../../ui/index.js';
19
+ import { getCliI18n } from '../../i18n.js';
20
+ export function createNewCommand() {
21
+ const t = getCliI18n().t;
22
+ return new Command('new')
23
+ .description(t('cli:commands.app.new.description'))
24
+ .argument('<description>', t('cli:commands.app.new.descriptionArgument'))
25
+ .option('--agent <type>', t('cli:commands.app.new.agentOption'))
26
+ .option('--model <model>', t('cli:commands.app.new.modelOption'))
27
+ .action(async (description, options) => {
28
+ try {
29
+ const useCase = container.resolve(CreateApplicationUseCase);
30
+ const result = await spinner(t('cli:commands.app.new.spinnerText'), () => useCase.execute({
31
+ description,
32
+ agentType: options.agent,
33
+ modelOverride: options.model,
34
+ initialPrompt: description,
35
+ }));
36
+ const { application } = result;
37
+ messages.newline();
38
+ messages.success(t('cli:commands.app.new.appCreated'));
39
+ console.log(` ${colors.muted(t('cli:commands.app.new.idLabel'))} ${colors.accent(application.id)}`);
40
+ console.log(` ${colors.muted(t('cli:commands.app.new.nameLabel'))} ${application.name}`);
41
+ console.log(` ${colors.muted(t('cli:commands.app.new.slugLabel'))} ${application.slug}`);
42
+ console.log(` ${colors.muted(t('cli:commands.app.new.pathLabel'))} ${result.repositoryPath}`);
43
+ console.log(` ${colors.muted(t('cli:commands.app.new.statusLabel'))} ${application.status}`);
44
+ if (application.agentType) {
45
+ console.log(` ${colors.muted(t('cli:commands.app.new.agentLabel'))} ${application.agentType}`);
46
+ }
47
+ if (application.modelOverride) {
48
+ console.log(` ${colors.muted(t('cli:commands.app.new.modelLabel'))} ${application.modelOverride}`);
49
+ }
50
+ messages.newline();
51
+ }
52
+ catch (error) {
53
+ const err = error instanceof Error ? error : new Error(String(error));
54
+ messages.error(t('cli:commands.app.new.failedToCreate'), err);
55
+ process.exitCode = 1;
56
+ }
57
+ });
58
+ }
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Shared helper: resolve an application by exact ID, prefix, or slug.
3
+ */
4
+ import type { Application } from '../../../../../packages/core/src/domain/generated/output.js';
5
+ export declare function resolveApplication(id: string): Promise<{
6
+ application: Application;
7
+ } | {
8
+ error: string;
9
+ }>;
10
+ //# sourceMappingURL=resolve-application.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve-application.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/cli/commands/app/resolve-application.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAGhE,wBAAsB,kBAAkB,CACtC,EAAE,EAAE,MAAM,GACT,OAAO,CAAC;IAAE,WAAW,EAAE,WAAW,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CA6B3D"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Shared helper: resolve an application by exact ID, prefix, or slug.
3
+ */
4
+ import { container } from '../../../../../packages/core/src/infrastructure/di/container.js';
5
+ import { getCliI18n } from '../../i18n.js';
6
+ export async function resolveApplication(id) {
7
+ const t = getCliI18n().t;
8
+ const repo = container.resolve('IApplicationRepository');
9
+ // Try exact ID match first
10
+ const exact = await repo.findById(id);
11
+ if (exact)
12
+ return { application: exact };
13
+ // Try slug match
14
+ const bySlug = await repo.findBySlug(id);
15
+ if (bySlug)
16
+ return { application: bySlug };
17
+ // Try prefix match on ID
18
+ if (id.length < 36) {
19
+ const all = await repo.list();
20
+ const matches = all.filter((a) => a.id.startsWith(id));
21
+ if (matches.length === 1)
22
+ return { application: matches[0] };
23
+ if (matches.length > 1) {
24
+ return {
25
+ error: t('cli:commands.app.resolve.multipleMatch', {
26
+ id,
27
+ matches: matches.map((m) => m.id.substring(0, 8)).join(', '),
28
+ }),
29
+ };
30
+ }
31
+ }
32
+ return { error: t('cli:commands.app.resolve.notFound', { id }) };
33
+ }
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Application Show Command
3
+ *
4
+ * Display details of a specific application.
5
+ *
6
+ * Usage:
7
+ * shep app show <id>
8
+ */
9
+ import { Command } from 'commander';
10
+ export declare function createShowCommand(): Command;
11
+ //# sourceMappingURL=show.command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"show.command.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/cli/commands/app/show.command.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAcpC,wBAAgB,iBAAiB,IAAI,OAAO,CAwE3C"}
@@ -0,0 +1,95 @@
1
+ /**
2
+ * Application Show Command
3
+ *
4
+ * Display details of a specific application.
5
+ *
6
+ * Usage:
7
+ * shep app show <id>
8
+ */
9
+ import { Command } from 'commander';
10
+ import { colors, messages, renderDetailView } from '../../ui/index.js';
11
+ import { resolveApplication } from './resolve-application.js';
12
+ import { getCliI18n } from '../../i18n.js';
13
+ function formatDate(date) {
14
+ if (!date)
15
+ return null;
16
+ try {
17
+ return new Date(date).toLocaleString();
18
+ }
19
+ catch {
20
+ return String(date);
21
+ }
22
+ }
23
+ export function createShowCommand() {
24
+ const t = getCliI18n().t;
25
+ return new Command('show')
26
+ .description(t('cli:commands.app.show.description'))
27
+ .argument('<id>', t('cli:commands.app.show.idArgument'))
28
+ .action(async (id) => {
29
+ try {
30
+ const resolved = await resolveApplication(id);
31
+ if ('error' in resolved) {
32
+ messages.error(resolved.error);
33
+ process.exitCode = 1;
34
+ return;
35
+ }
36
+ const app = resolved.application;
37
+ renderDetailView({
38
+ title: t('cli:commands.app.show.title', { name: app.name }),
39
+ sections: [
40
+ {
41
+ fields: [
42
+ { label: 'ID', value: app.id },
43
+ { label: t('cli:commands.app.show.nameLabel'), value: app.name },
44
+ { label: t('cli:commands.app.show.slugLabel'), value: app.slug },
45
+ { label: t('cli:commands.app.show.statusLabel'), value: app.status },
46
+ {
47
+ label: t('cli:commands.app.show.descriptionLabel'),
48
+ value: app.description,
49
+ },
50
+ {
51
+ label: t('cli:commands.app.show.pathLabel'),
52
+ value: app.repositoryPath,
53
+ },
54
+ ],
55
+ },
56
+ {
57
+ title: t('cli:commands.app.show.configTitle'),
58
+ fields: [
59
+ {
60
+ label: t('cli:commands.app.show.agentLabel'),
61
+ value: app.agentType ?? colors.muted('default'),
62
+ },
63
+ {
64
+ label: t('cli:commands.app.show.modelLabel'),
65
+ value: app.modelOverride ?? colors.muted('default'),
66
+ },
67
+ ],
68
+ },
69
+ {
70
+ title: t('cli:commands.app.show.timestampsTitle'),
71
+ fields: [
72
+ {
73
+ label: t('cli:commands.app.show.createdLabel'),
74
+ value: formatDate(app.createdAt),
75
+ },
76
+ {
77
+ label: t('cli:commands.app.show.updatedLabel'),
78
+ value: formatDate(app.updatedAt),
79
+ },
80
+ {
81
+ label: t('cli:commands.app.show.deletedLabel'),
82
+ value: formatDate(app.deletedAt),
83
+ },
84
+ ],
85
+ },
86
+ ],
87
+ });
88
+ }
89
+ catch (error) {
90
+ const err = error instanceof Error ? error : new Error(String(error));
91
+ messages.error(t('cli:commands.app.show.failedToShow'), err);
92
+ process.exitCode = 1;
93
+ }
94
+ });
95
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/cli/commands/settings/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAYpC;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,OAAO,CAuB/C"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/cli/commands/settings/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAapC;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,OAAO,CAwB/C"}
@@ -22,6 +22,7 @@ import { createIdeCommand } from './ide.command.js';
22
22
  import { createWorkflowCommand } from './workflow.command.js';
23
23
  import { createModelCommand } from './model.command.js';
24
24
  import { createLanguageCommand } from './language.command.js';
25
+ import { createMessagingCommand } from './messaging.command.js';
25
26
  import { onboardingWizard } from '../../../tui/wizards/onboarding/onboarding.wizard.js';
26
27
  import { messages } from '../../ui/index.js';
27
28
  import { getCliI18n } from '../../i18n.js';
@@ -37,7 +38,8 @@ export function createSettingsCommand() {
37
38
  .addCommand(createIdeCommand())
38
39
  .addCommand(createWorkflowCommand())
39
40
  .addCommand(createModelCommand())
40
- .addCommand(createLanguageCommand());
41
+ .addCommand(createLanguageCommand())
42
+ .addCommand(createMessagingCommand());
41
43
  // Default action: launch the full setup wizard when no subcommand is given
42
44
  cmd.action(async () => {
43
45
  try {
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Messaging Configuration Command
3
+ *
4
+ * Configures external messaging remote control via Telegram or WhatsApp
5
+ * through the Commands.com Gateway.
6
+ *
7
+ * Usage:
8
+ * shep settings messaging # Interactive setup wizard
9
+ * shep settings messaging status # Show connection status
10
+ * shep settings messaging disconnect # Disconnect messaging
11
+ */
12
+ import { Command } from 'commander';
13
+ /**
14
+ * Create the messaging configuration command.
15
+ */
16
+ export declare function createMessagingCommand(): Command;
17
+ //# sourceMappingURL=messaging.command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messaging.command.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/cli/commands/settings/messaging.command.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAiBpC;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,OAAO,CA6EhD"}
@@ -0,0 +1,187 @@
1
+ /**
2
+ * Messaging Configuration Command
3
+ *
4
+ * Configures external messaging remote control via Telegram or WhatsApp
5
+ * through the Commands.com Gateway.
6
+ *
7
+ * Usage:
8
+ * shep settings messaging # Interactive setup wizard
9
+ * shep settings messaging status # Show connection status
10
+ * shep settings messaging disconnect # Disconnect messaging
11
+ */
12
+ import { Command } from 'commander';
13
+ import { select, input, confirm } from '@inquirer/prompts';
14
+ import { container } from '../../../../../packages/core/src/infrastructure/di/container.js';
15
+ import { BeginMessagingPairingUseCase } from '../../../../../packages/core/src/application/use-cases/messaging/begin-pairing.use-case.js';
16
+ import { ConfirmMessagingPairingUseCase } from '../../../../../packages/core/src/application/use-cases/messaging/confirm-pairing.use-case.js';
17
+ import { DisconnectMessagingUseCase } from '../../../../../packages/core/src/application/use-cases/messaging/disconnect-messaging.use-case.js';
18
+ import { UpdateSettingsUseCase } from '../../../../../packages/core/src/application/use-cases/settings/update-settings.use-case.js';
19
+ import { getSettings, resetSettings, initializeSettings, } from '../../../../../packages/core/src/infrastructure/services/settings.service.js';
20
+ import { LoadSettingsUseCase } from '../../../../../packages/core/src/application/use-cases/settings/load-settings.use-case.js';
21
+ import { MessagingPlatform } from '../../../../../packages/core/src/domain/generated/output.js';
22
+ import { messages } from '../../ui/index.js';
23
+ import { shepTheme } from '../../../tui/themes/shep.theme.js';
24
+ /**
25
+ * Create the messaging configuration command.
26
+ */
27
+ export function createMessagingCommand() {
28
+ const cmd = new Command('messaging')
29
+ .description('Configure messaging remote control (Telegram/WhatsApp)')
30
+ .addHelpText('after', `
31
+ Examples:
32
+ $ shep settings messaging Interactive setup wizard
33
+ $ shep settings messaging status Show connection status
34
+ $ shep settings messaging disconnect Disconnect messaging`)
35
+ .action(async () => {
36
+ try {
37
+ await runMessagingWizard();
38
+ }
39
+ catch (error) {
40
+ const err = error instanceof Error ? error : new Error(String(error));
41
+ if (err.message.includes('force closed') || err.message.includes('User force closed')) {
42
+ messages.info('Messaging setup cancelled.');
43
+ return;
44
+ }
45
+ messages.error('Failed to configure messaging', err);
46
+ process.exitCode = 1;
47
+ }
48
+ });
49
+ cmd
50
+ .command('status')
51
+ .description('Show messaging connection status')
52
+ .action(() => {
53
+ const settings = getSettings();
54
+ const mc = settings.messaging;
55
+ if (!mc?.enabled) {
56
+ messages.info('Messaging remote control is not configured.');
57
+ return;
58
+ }
59
+ console.log(`\nMessaging Remote Control`);
60
+ console.log(` Gateway: ${mc.gatewayUrl ?? 'not set'}`);
61
+ console.log(` Enabled: ${mc.enabled}`);
62
+ if (mc.telegram) {
63
+ console.log(` Telegram: ${mc.telegram.enabled ? 'enabled' : 'disabled'} (${mc.telegram.paired ? 'paired' : 'not paired'})`);
64
+ }
65
+ if (mc.whatsapp) {
66
+ console.log(` WhatsApp: ${mc.whatsapp.enabled ? 'enabled' : 'disabled'} (${mc.whatsapp.paired ? 'paired' : 'not paired'})`);
67
+ }
68
+ console.log('');
69
+ });
70
+ cmd
71
+ .command('disconnect')
72
+ .description('Disconnect all messaging platforms')
73
+ .action(async () => {
74
+ try {
75
+ const useCase = container.resolve(DisconnectMessagingUseCase);
76
+ await useCase.execute();
77
+ await refreshSettingsSingleton();
78
+ messages.success('Messaging remote control disconnected.');
79
+ }
80
+ catch (error) {
81
+ messages.error('Failed to disconnect messaging', error instanceof Error ? error : new Error(String(error)));
82
+ process.exitCode = 1;
83
+ }
84
+ });
85
+ return cmd;
86
+ }
87
+ async function refreshSettingsSingleton() {
88
+ const loadUseCase = container.resolve(LoadSettingsUseCase);
89
+ const fresh = await loadUseCase.execute();
90
+ resetSettings();
91
+ initializeSettings(fresh);
92
+ }
93
+ async function runMessagingWizard() {
94
+ const settings = getSettings();
95
+ const platformChoice = await select({
96
+ message: 'Which platform would you like to connect?',
97
+ choices: [
98
+ { name: 'Telegram', value: 'telegram' },
99
+ { name: 'WhatsApp', value: 'whatsapp' },
100
+ { name: 'Disconnect all', value: 'disconnect' },
101
+ ],
102
+ theme: shepTheme,
103
+ });
104
+ if (platformChoice === 'disconnect') {
105
+ const disconnectUseCase = container.resolve(DisconnectMessagingUseCase);
106
+ await disconnectUseCase.execute();
107
+ await refreshSettingsSingleton();
108
+ messages.success('Messaging remote control disconnected.');
109
+ return;
110
+ }
111
+ const platform = platformChoice === 'telegram' ? MessagingPlatform.Telegram : MessagingPlatform.WhatsApp;
112
+ const platformLabel = platformChoice === 'telegram' ? 'Telegram' : 'WhatsApp';
113
+ // Get Gateway URL
114
+ const gatewayUrl = await input({
115
+ message: 'Enter your Gateway URL:',
116
+ default: settings.messaging?.gatewayUrl ?? '',
117
+ validate: (value) => {
118
+ if (!value.trim())
119
+ return 'Gateway URL is required';
120
+ try {
121
+ new URL(value);
122
+ return true;
123
+ }
124
+ catch {
125
+ return 'Please enter a valid URL (e.g., https://my-gateway.railway.app)';
126
+ }
127
+ },
128
+ theme: shepTheme,
129
+ });
130
+ // Begin pairing — generates a one-time code and persists pending state.
131
+ const beginUseCase = container.resolve(BeginMessagingPairingUseCase);
132
+ const session = await beginUseCase.execute({ platform, gatewayUrl });
133
+ await refreshSettingsSingleton();
134
+ messages.info(`${platformLabel} pairing initiated.`);
135
+ console.log('');
136
+ console.log(` Pairing code: ${session.code}`);
137
+ console.log(` Expires at: ${new Date(session.expiresAt).toLocaleString()}`);
138
+ console.log('');
139
+ console.log(` Webhook URL (${platformLabel}):`);
140
+ console.log(` ${session.publicUrl}`);
141
+ console.log('');
142
+ console.log(' Next steps:');
143
+ console.log(` 1. Point your ${platformLabel} bot webhook at the URL above`);
144
+ console.log(` (Telegram: curl -X POST https://api.telegram.org/bot<TOKEN>/setWebhook -d url=...)`);
145
+ console.log(` 2. Send: /pair ${session.code}`);
146
+ console.log(` 3. Return here and enter the chat ID the bot replies with`);
147
+ console.log('');
148
+ const shouldConfirm = await confirm({
149
+ message: 'Confirm pairing now?',
150
+ default: true,
151
+ theme: shepTheme,
152
+ });
153
+ if (!shouldConfirm) {
154
+ messages.info('You can confirm pairing later by re-running `shep settings messaging`.');
155
+ return;
156
+ }
157
+ const chatId = await input({
158
+ message: 'Chat ID the bot replied with:',
159
+ validate: (value) => (value.trim() ? true : 'Chat ID is required'),
160
+ theme: shepTheme,
161
+ });
162
+ const confirmUseCase = container.resolve(ConfirmMessagingPairingUseCase);
163
+ await confirmUseCase.execute({ platform, chatId });
164
+ await refreshSettingsSingleton();
165
+ // Collect the bot API token so the daemon can reply to the user.
166
+ const botToken = await input({
167
+ message: `${platformLabel} bot API token (leave blank to use $SHEP_TELEGRAM_BOT_TOKEN):`,
168
+ default: '',
169
+ theme: shepTheme,
170
+ });
171
+ if (botToken.trim()) {
172
+ const current = getSettings();
173
+ const key = platform === MessagingPlatform.Telegram ? 'telegram' : 'whatsapp';
174
+ const existingPlatform = current.messaging?.[key];
175
+ if (existingPlatform && current.messaging) {
176
+ current.messaging = {
177
+ ...current.messaging,
178
+ [key]: { ...existingPlatform, botToken: botToken.trim() },
179
+ };
180
+ const updateUseCase = container.resolve(UpdateSettingsUseCase);
181
+ await updateUseCase.execute(current);
182
+ await refreshSettingsSingleton();
183
+ }
184
+ }
185
+ messages.success(`${platformLabel} messaging paired.`);
186
+ messages.info('Restart the Shep daemon (`shep _serve`) to activate messaging.');
187
+ }
@@ -37,6 +37,7 @@ import { createRunCommand } from './commands/run.command.js';
37
37
  import { createAgentCommand } from './commands/agent/index.js';
38
38
  import { createFeatCommand } from './commands/feat/index.js';
39
39
  import { createRepoCommand } from './commands/repo/index.js';
40
+ import { createAppCommand } from './commands/app/index.js';
40
41
  import { createSessionCommand } from './commands/session/index.js';
41
42
  import { createIdeOpenCommand } from './commands/ide-open.command.js';
42
43
  import { createInstallCommand } from './commands/install.command.js';
@@ -117,6 +118,7 @@ async function bootstrap() {
117
118
  program.addCommand(createAgentCommand());
118
119
  program.addCommand(createFeatCommand());
119
120
  program.addCommand(createRepoCommand());
121
+ program.addCommand(createAppCommand());
120
122
  program.addCommand(createSessionCommand());
121
123
  program.addCommand(createIdeOpenCommand());
122
124
  program.addCommand(createInstallCommand());
@@ -0,0 +1,29 @@
1
+ import type { MessagingPlatform } from '../../../../../packages/core/src/domain/generated/output.js';
2
+ export interface BeginPairingResult {
3
+ success: boolean;
4
+ error?: string;
5
+ session?: {
6
+ platform: MessagingPlatform;
7
+ code: string;
8
+ expiresAt: string;
9
+ gatewayUrl: string;
10
+ publicUrl: string;
11
+ routeId: string;
12
+ };
13
+ }
14
+ export interface MessagingActionResult {
15
+ success: boolean;
16
+ error?: string;
17
+ }
18
+ export declare function beginMessagingPairingAction(input: {
19
+ platform: MessagingPlatform;
20
+ gatewayUrl: string;
21
+ }): Promise<BeginPairingResult>;
22
+ export declare function confirmMessagingPairingAction(input: {
23
+ platform: MessagingPlatform;
24
+ chatId: string;
25
+ }): Promise<MessagingActionResult>;
26
+ export declare function disconnectMessagingAction(input: {
27
+ platform?: MessagingPlatform;
28
+ }): Promise<MessagingActionResult>;
29
+ //# sourceMappingURL=messaging.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messaging.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/messaging.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AAE9E,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE;QACR,QAAQ,EAAE,iBAAiB,CAAC;QAC5B,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;CACH;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAcD,wBAAsB,2BAA2B,CAAC,KAAK,EAAE;IACvD,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;CACpB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAW9B;AAED,wBAAsB,6BAA6B,CAAC,KAAK,EAAE;IACzD,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAWjC;AAED,wBAAsB,yBAAyB,CAAC,KAAK,EAAE;IACrD,QAAQ,CAAC,EAAE,iBAAiB,CAAC;CAC9B,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAWjC"}