@everywheredev/cli 0.0.5 → 0.0.7

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 (307) hide show
  1. package/README.md +1 -1
  2. package/dist/index.js +274 -59
  3. package/package.json +3 -2
  4. package/scripts/build.mjs +68 -0
  5. package/dist/agent/agent-loop.d.ts +0 -40
  6. package/dist/agent/agent-loop.d.ts.map +0 -1
  7. package/dist/agent/agent-loop.js +0 -162
  8. package/dist/agent/agent-loop.js.map +0 -1
  9. package/dist/agent/approval.d.ts +0 -38
  10. package/dist/agent/approval.d.ts.map +0 -1
  11. package/dist/agent/approval.js +0 -55
  12. package/dist/agent/approval.js.map +0 -1
  13. package/dist/agent/run-tracker.d.ts +0 -26
  14. package/dist/agent/run-tracker.d.ts.map +0 -1
  15. package/dist/agent/run-tracker.js +0 -43
  16. package/dist/agent/run-tracker.js.map +0 -1
  17. package/dist/auth/device-flow.d.ts +0 -61
  18. package/dist/auth/device-flow.d.ts.map +0 -1
  19. package/dist/auth/device-flow.js +0 -141
  20. package/dist/auth/device-flow.js.map +0 -1
  21. package/dist/auth/hydra-oauth-auth-provider.d.ts +0 -35
  22. package/dist/auth/hydra-oauth-auth-provider.d.ts.map +0 -1
  23. package/dist/auth/hydra-oauth-auth-provider.js +0 -153
  24. package/dist/auth/hydra-oauth-auth-provider.js.map +0 -1
  25. package/dist/auth/keychain.d.ts +0 -42
  26. package/dist/auth/keychain.d.ts.map +0 -1
  27. package/dist/auth/keychain.js +0 -138
  28. package/dist/auth/keychain.js.map +0 -1
  29. package/dist/auth/pkce.d.ts +0 -20
  30. package/dist/auth/pkce.d.ts.map +0 -1
  31. package/dist/auth/pkce.js +0 -44
  32. package/dist/auth/pkce.js.map +0 -1
  33. package/dist/auth/ports.d.ts +0 -25
  34. package/dist/auth/ports.d.ts.map +0 -1
  35. package/dist/auth/ports.js +0 -8
  36. package/dist/auth/ports.js.map +0 -1
  37. package/dist/commands/activity.d.ts +0 -17
  38. package/dist/commands/activity.d.ts.map +0 -1
  39. package/dist/commands/activity.js +0 -54
  40. package/dist/commands/activity.js.map +0 -1
  41. package/dist/commands/agent.d.ts +0 -25
  42. package/dist/commands/agent.d.ts.map +0 -1
  43. package/dist/commands/agent.js +0 -80
  44. package/dist/commands/agent.js.map +0 -1
  45. package/dist/commands/agents.d.ts +0 -9
  46. package/dist/commands/agents.d.ts.map +0 -1
  47. package/dist/commands/agents.js +0 -28
  48. package/dist/commands/agents.js.map +0 -1
  49. package/dist/commands/commits.d.ts +0 -16
  50. package/dist/commands/commits.d.ts.map +0 -1
  51. package/dist/commands/commits.js +0 -39
  52. package/dist/commands/commits.js.map +0 -1
  53. package/dist/commands/diff.d.ts +0 -15
  54. package/dist/commands/diff.d.ts.map +0 -1
  55. package/dist/commands/diff.js +0 -27
  56. package/dist/commands/diff.js.map +0 -1
  57. package/dist/commands/expose.d.ts +0 -15
  58. package/dist/commands/expose.d.ts.map +0 -1
  59. package/dist/commands/expose.js +0 -39
  60. package/dist/commands/expose.js.map +0 -1
  61. package/dist/commands/index.d.ts +0 -7
  62. package/dist/commands/index.d.ts.map +0 -1
  63. package/dist/commands/index.js +0 -12
  64. package/dist/commands/index.js.map +0 -1
  65. package/dist/commands/login.d.ts +0 -9
  66. package/dist/commands/login.d.ts.map +0 -1
  67. package/dist/commands/login.js +0 -27
  68. package/dist/commands/login.js.map +0 -1
  69. package/dist/commands/logout.d.ts +0 -9
  70. package/dist/commands/logout.d.ts.map +0 -1
  71. package/dist/commands/logout.js +0 -24
  72. package/dist/commands/logout.js.map +0 -1
  73. package/dist/commands/me.d.ts +0 -10
  74. package/dist/commands/me.d.ts.map +0 -1
  75. package/dist/commands/me.js +0 -25
  76. package/dist/commands/me.js.map +0 -1
  77. package/dist/commands/open.d.ts +0 -16
  78. package/dist/commands/open.d.ts.map +0 -1
  79. package/dist/commands/open.js +0 -34
  80. package/dist/commands/open.js.map +0 -1
  81. package/dist/commands/ports.d.ts +0 -75
  82. package/dist/commands/ports.d.ts.map +0 -1
  83. package/dist/commands/ports.js +0 -78
  84. package/dist/commands/ports.js.map +0 -1
  85. package/dist/commands/profile.d.ts +0 -21
  86. package/dist/commands/profile.d.ts.map +0 -1
  87. package/dist/commands/profile.js +0 -93
  88. package/dist/commands/profile.js.map +0 -1
  89. package/dist/commands/push.d.ts +0 -18
  90. package/dist/commands/push.d.ts.map +0 -1
  91. package/dist/commands/push.js +0 -116
  92. package/dist/commands/push.js.map +0 -1
  93. package/dist/commands/registry.d.ts +0 -15
  94. package/dist/commands/registry.d.ts.map +0 -1
  95. package/dist/commands/registry.js +0 -45
  96. package/dist/commands/registry.js.map +0 -1
  97. package/dist/commands/request.d.ts +0 -25
  98. package/dist/commands/request.d.ts.map +0 -1
  99. package/dist/commands/request.js +0 -58
  100. package/dist/commands/request.js.map +0 -1
  101. package/dist/commands/resume.d.ts +0 -22
  102. package/dist/commands/resume.d.ts.map +0 -1
  103. package/dist/commands/resume.js +0 -69
  104. package/dist/commands/resume.js.map +0 -1
  105. package/dist/commands/save.d.ts +0 -34
  106. package/dist/commands/save.d.ts.map +0 -1
  107. package/dist/commands/save.js +0 -141
  108. package/dist/commands/save.js.map +0 -1
  109. package/dist/commands/session.d.ts +0 -9
  110. package/dist/commands/session.d.ts.map +0 -1
  111. package/dist/commands/session.js +0 -282
  112. package/dist/commands/session.js.map +0 -1
  113. package/dist/commands/skills/markdown-loader.d.ts +0 -19
  114. package/dist/commands/skills/markdown-loader.d.ts.map +0 -1
  115. package/dist/commands/skills/markdown-loader.js +0 -108
  116. package/dist/commands/skills/markdown-loader.js.map +0 -1
  117. package/dist/commands/skills/registry.d.ts +0 -23
  118. package/dist/commands/skills/registry.d.ts.map +0 -1
  119. package/dist/commands/skills/registry.js +0 -45
  120. package/dist/commands/skills/registry.js.map +0 -1
  121. package/dist/commands/terminal.d.ts +0 -19
  122. package/dist/commands/terminal.d.ts.map +0 -1
  123. package/dist/commands/terminal.js +0 -39
  124. package/dist/commands/terminal.js.map +0 -1
  125. package/dist/commands/tree.d.ts +0 -16
  126. package/dist/commands/tree.d.ts.map +0 -1
  127. package/dist/commands/tree.js +0 -44
  128. package/dist/commands/tree.js.map +0 -1
  129. package/dist/commands/undo.d.ts +0 -18
  130. package/dist/commands/undo.d.ts.map +0 -1
  131. package/dist/commands/undo.js +0 -46
  132. package/dist/commands/undo.js.map +0 -1
  133. package/dist/config/config-store.d.ts +0 -19
  134. package/dist/config/config-store.d.ts.map +0 -1
  135. package/dist/config/config-store.js +0 -199
  136. package/dist/config/config-store.js.map +0 -1
  137. package/dist/config/defaults.d.ts +0 -22
  138. package/dist/config/defaults.d.ts.map +0 -1
  139. package/dist/config/defaults.js +0 -38
  140. package/dist/config/defaults.js.map +0 -1
  141. package/dist/config/ports.d.ts +0 -60
  142. package/dist/config/ports.d.ts.map +0 -1
  143. package/dist/config/ports.js +0 -8
  144. package/dist/config/ports.js.map +0 -1
  145. package/dist/config/profile-constants.d.ts +0 -4
  146. package/dist/config/profile-constants.d.ts.map +0 -1
  147. package/dist/config/profile-constants.js +0 -10
  148. package/dist/config/profile-constants.js.map +0 -1
  149. package/dist/config/profile.d.ts +0 -84
  150. package/dist/config/profile.d.ts.map +0 -1
  151. package/dist/config/profile.js +0 -66
  152. package/dist/config/profile.js.map +0 -1
  153. package/dist/contract/index.d.ts +0 -193
  154. package/dist/contract/index.d.ts.map +0 -1
  155. package/dist/contract/index.js +0 -14
  156. package/dist/contract/index.js.map +0 -1
  157. package/dist/core/app.d.ts +0 -35
  158. package/dist/core/app.d.ts.map +0 -1
  159. package/dist/core/app.js +0 -86
  160. package/dist/core/app.js.map +0 -1
  161. package/dist/core/command-router.d.ts +0 -29
  162. package/dist/core/command-router.d.ts.map +0 -1
  163. package/dist/core/command-router.js +0 -61
  164. package/dist/core/command-router.js.map +0 -1
  165. package/dist/core/errors.d.ts +0 -39
  166. package/dist/core/errors.d.ts.map +0 -1
  167. package/dist/core/errors.js +0 -106
  168. package/dist/core/errors.js.map +0 -1
  169. package/dist/core/preflight.d.ts +0 -16
  170. package/dist/core/preflight.d.ts.map +0 -1
  171. package/dist/core/preflight.js +0 -38
  172. package/dist/core/preflight.js.map +0 -1
  173. package/dist/core/repl.d.ts +0 -18
  174. package/dist/core/repl.d.ts.map +0 -1
  175. package/dist/core/repl.js +0 -128
  176. package/dist/core/repl.js.map +0 -1
  177. package/dist/di/container.d.ts +0 -13
  178. package/dist/di/container.d.ts.map +0 -1
  179. package/dist/di/container.js +0 -160
  180. package/dist/di/container.js.map +0 -1
  181. package/dist/di/tokens.d.ts +0 -20
  182. package/dist/di/tokens.d.ts.map +0 -1
  183. package/dist/di/tokens.js +0 -22
  184. package/dist/di/tokens.js.map +0 -1
  185. package/dist/index.d.ts +0 -9
  186. package/dist/index.d.ts.map +0 -1
  187. package/dist/index.js.map +0 -1
  188. package/dist/render/ink-renderer.d.ts +0 -28
  189. package/dist/render/ink-renderer.d.ts.map +0 -1
  190. package/dist/render/ink-renderer.js +0 -174
  191. package/dist/render/ink-renderer.js.map +0 -1
  192. package/dist/render/plain-renderer.d.ts +0 -16
  193. package/dist/render/plain-renderer.d.ts.map +0 -1
  194. package/dist/render/plain-renderer.js +0 -38
  195. package/dist/render/plain-renderer.js.map +0 -1
  196. package/dist/render/ports.d.ts +0 -12
  197. package/dist/render/ports.d.ts.map +0 -1
  198. package/dist/render/ports.js +0 -10
  199. package/dist/render/ports.js.map +0 -1
  200. package/dist/render/raw-renderer.d.ts +0 -11
  201. package/dist/render/raw-renderer.d.ts.map +0 -1
  202. package/dist/render/raw-renderer.js +0 -68
  203. package/dist/render/raw-renderer.js.map +0 -1
  204. package/dist/render/repl-input.d.ts +0 -15
  205. package/dist/render/repl-input.d.ts.map +0 -1
  206. package/dist/render/repl-input.js +0 -102
  207. package/dist/render/repl-input.js.map +0 -1
  208. package/dist/session/file-session-store.d.ts +0 -26
  209. package/dist/session/file-session-store.d.ts.map +0 -1
  210. package/dist/session/file-session-store.js +0 -174
  211. package/dist/session/file-session-store.js.map +0 -1
  212. package/dist/session/ports.d.ts +0 -50
  213. package/dist/session/ports.d.ts.map +0 -1
  214. package/dist/session/ports.js +0 -6
  215. package/dist/session/ports.js.map +0 -1
  216. package/dist/sync/git-sync.d.ts +0 -16
  217. package/dist/sync/git-sync.d.ts.map +0 -1
  218. package/dist/sync/git-sync.js +0 -28
  219. package/dist/sync/git-sync.js.map +0 -1
  220. package/dist/sync/git.d.ts +0 -12
  221. package/dist/sync/git.d.ts.map +0 -1
  222. package/dist/sync/git.js +0 -100
  223. package/dist/sync/git.js.map +0 -1
  224. package/dist/sync/reconciler.d.ts +0 -36
  225. package/dist/sync/reconciler.d.ts.map +0 -1
  226. package/dist/sync/reconciler.js +0 -143
  227. package/dist/sync/reconciler.js.map +0 -1
  228. package/dist/sync/walk.d.ts +0 -23
  229. package/dist/sync/walk.d.ts.map +0 -1
  230. package/dist/sync/walk.js +0 -81
  231. package/dist/sync/walk.js.map +0 -1
  232. package/dist/sync/watch.d.ts +0 -13
  233. package/dist/sync/watch.d.ts.map +0 -1
  234. package/dist/sync/watch.js +0 -75
  235. package/dist/sync/watch.js.map +0 -1
  236. package/dist/tools/git-diff.d.ts +0 -16
  237. package/dist/tools/git-diff.d.ts.map +0 -1
  238. package/dist/tools/git-diff.js +0 -25
  239. package/dist/tools/git-diff.js.map +0 -1
  240. package/dist/tools/http-request.d.ts +0 -25
  241. package/dist/tools/http-request.d.ts.map +0 -1
  242. package/dist/tools/http-request.js +0 -41
  243. package/dist/tools/http-request.js.map +0 -1
  244. package/dist/tools/index.d.ts +0 -7
  245. package/dist/tools/index.d.ts.map +0 -1
  246. package/dist/tools/index.js +0 -22
  247. package/dist/tools/index.js.map +0 -1
  248. package/dist/tools/ports.d.ts +0 -58
  249. package/dist/tools/ports.d.ts.map +0 -1
  250. package/dist/tools/ports.js +0 -17
  251. package/dist/tools/ports.js.map +0 -1
  252. package/dist/tools/read-file.d.ts +0 -16
  253. package/dist/tools/read-file.d.ts.map +0 -1
  254. package/dist/tools/read-file.js +0 -24
  255. package/dist/tools/read-file.js.map +0 -1
  256. package/dist/tools/registry.d.ts +0 -10
  257. package/dist/tools/registry.d.ts.map +0 -1
  258. package/dist/tools/registry.js +0 -28
  259. package/dist/tools/registry.js.map +0 -1
  260. package/dist/tools/run-command.d.ts +0 -20
  261. package/dist/tools/run-command.d.ts.map +0 -1
  262. package/dist/tools/run-command.js +0 -65
  263. package/dist/tools/run-command.js.map +0 -1
  264. package/dist/tools/write-file.d.ts +0 -24
  265. package/dist/tools/write-file.d.ts.map +0 -1
  266. package/dist/tools/write-file.js +0 -60
  267. package/dist/tools/write-file.js.map +0 -1
  268. package/dist/transport/composite-transport.d.ts +0 -30
  269. package/dist/transport/composite-transport.d.ts.map +0 -1
  270. package/dist/transport/composite-transport.js +0 -71
  271. package/dist/transport/composite-transport.js.map +0 -1
  272. package/dist/transport/device-browser.d.ts +0 -19
  273. package/dist/transport/device-browser.d.ts.map +0 -1
  274. package/dist/transport/device-browser.js +0 -243
  275. package/dist/transport/device-browser.js.map +0 -1
  276. package/dist/transport/device-git.d.ts +0 -14
  277. package/dist/transport/device-git.d.ts.map +0 -1
  278. package/dist/transport/device-git.js +0 -107
  279. package/dist/transport/device-git.js.map +0 -1
  280. package/dist/transport/device-http.d.ts +0 -10
  281. package/dist/transport/device-http.d.ts.map +0 -1
  282. package/dist/transport/device-http.js +0 -96
  283. package/dist/transport/device-http.js.map +0 -1
  284. package/dist/transport/device-terminal.d.ts +0 -44
  285. package/dist/transport/device-terminal.d.ts.map +0 -1
  286. package/dist/transport/device-terminal.js +0 -140
  287. package/dist/transport/device-terminal.js.map +0 -1
  288. package/dist/transport/http-transport.d.ts +0 -26
  289. package/dist/transport/http-transport.d.ts.map +0 -1
  290. package/dist/transport/http-transport.js +0 -125
  291. package/dist/transport/http-transport.js.map +0 -1
  292. package/dist/transport/ports.d.ts +0 -67
  293. package/dist/transport/ports.d.ts.map +0 -1
  294. package/dist/transport/ports.js +0 -11
  295. package/dist/transport/ports.js.map +0 -1
  296. package/dist/transport/reconnect.d.ts +0 -44
  297. package/dist/transport/reconnect.d.ts.map +0 -1
  298. package/dist/transport/reconnect.js +0 -69
  299. package/dist/transport/reconnect.js.map +0 -1
  300. package/dist/transport/terminal-transport.d.ts +0 -28
  301. package/dist/transport/terminal-transport.d.ts.map +0 -1
  302. package/dist/transport/terminal-transport.js +0 -63
  303. package/dist/transport/terminal-transport.js.map +0 -1
  304. package/dist/transport/ws-stream-transport.d.ts +0 -66
  305. package/dist/transport/ws-stream-transport.d.ts.map +0 -1
  306. package/dist/transport/ws-stream-transport.js +0 -246
  307. package/dist/transport/ws-stream-transport.js.map +0 -1
@@ -1,16 +0,0 @@
1
- import { z } from "zod";
2
- import type { Command, CommandContext } from "./ports.js";
3
- export declare class OpenCommand implements Command {
4
- readonly name = "open";
5
- readonly summary = "Read a file and show its diff ranges (GET /api/file)";
6
- readonly aliases: string[];
7
- readonly schema: z.ZodObject<{
8
- path: z.ZodString;
9
- }, "strip", z.ZodTypeAny, {
10
- path: string;
11
- }, {
12
- path: string;
13
- }>;
14
- run(ctx: CommandContext): Promise<void>;
15
- }
16
- //# sourceMappingURL=open.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"open.d.ts","sourceRoot":"","sources":["../../src/commands/open.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAO1D,qBAAa,WAAY,YAAW,OAAO;IACzC,QAAQ,CAAC,IAAI,UAAU;IACvB,QAAQ,CAAC,OAAO,0DAA0D;IAC1E,QAAQ,CAAC,OAAO,WAAW;IAC3B,QAAQ,CAAC,MAAM;;;;;;OAAU;IAEnB,GAAG,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;CAyB9C"}
@@ -1,34 +0,0 @@
1
- // src/commands/open.ts — `/open <path>` / `pocketdev open <path>` → GET /api/file?path
2
- //
3
- // SRP: read a file (and its git diff ranges) from the host and render it. Depends on
4
- // HttpPort + Renderer only.
5
- import { z } from "zod";
6
- import { bindArgs, parseArgs } from "./ports.js";
7
- const schema = z.object({
8
- path: z.string().min(1, "a file path is required"),
9
- });
10
- export class OpenCommand {
11
- name = "open";
12
- summary = "Read a file and show its diff ranges (GET /api/file)";
13
- aliases = ["cat"];
14
- schema = schema;
15
- async run(ctx) {
16
- const args = parseArgs(this.schema, bindArgs(ctx.argv, ["path"]));
17
- const file = await ctx.http.get("/api/file", { path: args.path });
18
- if (ctx.json) {
19
- ctx.renderer.stream(JSON.stringify(file) + "\n");
20
- return;
21
- }
22
- ctx.renderer.stream(file.content);
23
- if (!file.content.endsWith("\n"))
24
- ctx.renderer.stream("\n");
25
- if (file.truncated) {
26
- ctx.renderer.error(`'${file.path}' was truncated by the host.`, "Raise POCKETDEV_MAX_FILE_BYTES on the host to read the whole file.");
27
- }
28
- // Overlay git diff ranges (added/modified/removed) when present and interactive.
29
- if (!ctx.nonInteractive && file.ranges && file.ranges.length > 0) {
30
- ctx.renderer.diff(file.ranges, file.path);
31
- }
32
- }
33
- }
34
- //# sourceMappingURL=open.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"open.js","sourceRoot":"","sources":["../../src/commands/open.ts"],"names":[],"mappings":"AAAA,uFAAuF;AACvF,EAAE;AACF,qFAAqF;AACrF,4BAA4B;AAE5B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEjD,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;IACtB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,yBAAyB,CAAC;CACnD,CAAC,CAAC;AAEH,MAAM,OAAO,WAAW;IACb,IAAI,GAAG,MAAM,CAAC;IACd,OAAO,GAAG,sDAAsD,CAAC;IACjE,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC;IAClB,MAAM,GAAG,MAAM,CAAC;IAEzB,KAAK,CAAC,GAAG,CAAC,GAAmB;QAC3B,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAElE,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,GAAG,CAAc,WAAW,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAE/E,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;YACb,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;YACjD,OAAO;QACT,CAAC;QAED,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAClC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;YAAE,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAE5D,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,GAAG,CAAC,QAAQ,CAAC,KAAK,CAChB,IAAI,IAAI,CAAC,IAAI,8BAA8B,EAC3C,oEAAoE,CACrE,CAAC;QACJ,CAAC;QAED,iFAAiF;QACjF,IAAI,CAAC,GAAG,CAAC,cAAc,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjE,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;CACF"}
@@ -1,75 +0,0 @@
1
- import type { z, ZodTypeAny } from "zod";
2
- import type { HttpPort, StreamPort, TerminalPort } from "../transport/ports.js";
3
- import type { AuthProvider } from "../auth/ports.js";
4
- import type { ConfigStore } from "../config/ports.js";
5
- import type { Renderer } from "../render/ports.js";
6
- import type { SessionStore } from "../session/ports.js";
7
- import type { AgentLoop } from "../agent/agent-loop.js";
8
- import type { RunTracker } from "../agent/run-tracker.js";
9
- /** A command's argument schema is a zod object schema. */
10
- export type ArgSchema = ZodTypeAny;
11
- /** Inferred, validated args for a command, given its schema. */
12
- export type ArgsOf<S extends ArgSchema> = z.infer<S>;
13
- /**
14
- * Everything a command needs to do its job, injected by the router. A command never
15
- * imports `undici`, `ws`, `fs`, or a keychain library — only these ports (DIP).
16
- */
17
- export interface CommandContext {
18
- /** Raw positional + flag tokens after the command name, pre-validation. */
19
- readonly argv: readonly string[];
20
- /** Parsed + validated args (the command's zod schema applied to `argv`). */
21
- readonly args: Record<string, unknown>;
22
- readonly http: HttpPort;
23
- readonly stream: StreamPort;
24
- readonly terminal: TerminalPort;
25
- readonly auth: AuthProvider;
26
- readonly config: ConfigStore;
27
- readonly renderer: Renderer;
28
- readonly sessions: SessionStore;
29
- /** The composed agent + tool loop (used by /agent). */
30
- readonly agentLoop: AgentLoop;
31
- /** Tracks runIds for /undo and resume. */
32
- readonly runTracker: RunTracker;
33
- /** Active session id (REPL) for transcript attribution; absent in pure one-shots. */
34
- readonly sessionId?: string;
35
- /** True when stdout is not a TTY (pipe / --print). Commands tune output accordingly. */
36
- readonly nonInteractive: boolean;
37
- /** Emit machine-readable JSON instead of human text when set (--json). */
38
- readonly json: boolean;
39
- /** AbortSignal cancelled on Ctrl-C / shutdown so long calls can bail cleanly. */
40
- readonly signal: AbortSignal;
41
- }
42
- /**
43
- * The Command interface (frozen shape from cli.md §4). One file per command (SRP),
44
- * registered in the CommandRegistry (OCP).
45
- */
46
- export interface Command {
47
- /** Bare name, e.g. "save" — also the `/save` slash form in the REPL. */
48
- readonly name: string;
49
- /** One-line help shown by the registry / `/help`. */
50
- readonly summary: string;
51
- /** Optional aliases (e.g. "ls" -> "tree"). */
52
- readonly aliases?: readonly string[];
53
- /** zod schema for parsed args. */
54
- readonly schema: ArgSchema;
55
- /** Execute against injected ports. */
56
- run(ctx: CommandContext): Promise<void>;
57
- }
58
- /**
59
- * Helper for command authors: parse a raw args record with the command's schema and
60
- * return typed args, throwing a friendly error on validation failure. Kept here (not in
61
- * each command) so the parsing rule lives in exactly one place.
62
- */
63
- export declare function parseArgs<S extends ArgSchema>(schema: S, args: Record<string, unknown>): ArgsOf<S>;
64
- /**
65
- * Bind raw `argv` tokens into a flat record keyed by `positionalNames` (in order) plus
66
- * any `--flag[=value]` / `--bool` tokens. `--no-x` becomes `x: false`. Repeated flags are
67
- * collected into an array. Extra positionals beyond `positionalNames` are gathered under
68
- * `_rest`. The result is then validated by `parseArgs` against the command's zod schema.
69
- *
70
- * Contract: the command-router resolves the GLOBAL flags (`--host`, `--mode`, `--profile`,
71
- * `--token`, `--print`/`-p`, `--json`, `--no-tty`) via the ConfigStore and passes the CLI
72
- * only the command-specific argv. Unknown `--flags` are tolerated (zod `strip` drops them).
73
- */
74
- export declare function bindArgs(argv: readonly string[], positionalNames: readonly string[]): Record<string, unknown>;
75
- //# sourceMappingURL=ports.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ports.d.ts","sourceRoot":"","sources":["../../src/commands/ports.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,CAAC,EAAE,UAAU,EAAE,MAAM,KAAK,CAAC;AAEzC,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAChF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAE1D,0DAA0D;AAC1D,MAAM,MAAM,SAAS,GAAG,UAAU,CAAC;AAEnC,gEAAgE;AAChE,MAAM,MAAM,MAAM,CAAC,CAAC,SAAS,SAAS,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAErD;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,2EAA2E;IAC3E,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,4EAA4E;IAC5E,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAGvC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC;IAChC,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC;IAChC,uDAAuD;IACvD,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,0CAA0C;IAC1C,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAEhC,qFAAqF;IACrF,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,wFAAwF;IACxF,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IACjC,0EAA0E;IAC1E,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAEvB,iFAAiF;IACjF,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;CAC9B;AAED;;;GAGG;AACH,MAAM,WAAW,OAAO;IACtB,wEAAwE;IACxE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,qDAAqD;IACrD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,8CAA8C;IAC9C,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,kCAAkC;IAClC,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,sCAAsC;IACtC,GAAG,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACzC;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,CAAC,SAAS,SAAS,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAOlG;AAED;;;;;;;;;GASG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,eAAe,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAmC7G"}
@@ -1,78 +0,0 @@
1
- // src/commands/ports.ts — OCP: extend by registering a Command, never by editing the router.
2
- //
3
- // A Command is a single-purpose unit (SRP). It declares a zod arg schema, then `run(ctx)`
4
- // executes against injected ports (HttpPort / StreamPort / TerminalPort / AuthProvider /
5
- // Renderer / SessionStore / ConfigStore). Commands depend on ABSTRACTIONS only — the
6
- // concretes are bound at the DI composition root (src/di/container.ts).
7
- /**
8
- * Helper for command authors: parse a raw args record with the command's schema and
9
- * return typed args, throwing a friendly error on validation failure. Kept here (not in
10
- * each command) so the parsing rule lives in exactly one place.
11
- */
12
- export function parseArgs(schema, args) {
13
- const result = schema.safeParse(args);
14
- if (!result.success) {
15
- const issues = result.error.issues.map((i) => `${i.path.join(".") || "<arg>"}: ${i.message}`).join("; ");
16
- throw new Error(`invalid arguments: ${issues}`);
17
- }
18
- return result.data;
19
- }
20
- /**
21
- * Bind raw `argv` tokens into a flat record keyed by `positionalNames` (in order) plus
22
- * any `--flag[=value]` / `--bool` tokens. `--no-x` becomes `x: false`. Repeated flags are
23
- * collected into an array. Extra positionals beyond `positionalNames` are gathered under
24
- * `_rest`. The result is then validated by `parseArgs` against the command's zod schema.
25
- *
26
- * Contract: the command-router resolves the GLOBAL flags (`--host`, `--mode`, `--profile`,
27
- * `--token`, `--print`/`-p`, `--json`, `--no-tty`) via the ConfigStore and passes the CLI
28
- * only the command-specific argv. Unknown `--flags` are tolerated (zod `strip` drops them).
29
- */
30
- export function bindArgs(argv, positionalNames) {
31
- const out = {};
32
- const positionals = [];
33
- for (let i = 0; i < argv.length; i++) {
34
- const tok = argv[i];
35
- if (tok.startsWith("--")) {
36
- const body = tok.slice(2);
37
- const eq = body.indexOf("=");
38
- if (eq >= 0) {
39
- assign(out, body.slice(0, eq), body.slice(eq + 1));
40
- }
41
- else if (body.startsWith("no-")) {
42
- out[body.slice(3)] = false;
43
- }
44
- else {
45
- // Look ahead: a non-flag next token is this flag's value; otherwise it's boolean.
46
- const next = argv[i + 1];
47
- if (next !== undefined && !next.startsWith("--")) {
48
- assign(out, body, next);
49
- i++;
50
- }
51
- else {
52
- out[body] = true;
53
- }
54
- }
55
- }
56
- else {
57
- positionals.push(tok);
58
- }
59
- }
60
- positionalNames.forEach((name, idx) => {
61
- if (idx < positionals.length)
62
- out[name] = positionals[idx];
63
- });
64
- const rest = positionals.slice(positionalNames.length);
65
- if (rest.length)
66
- out._rest = rest;
67
- return out;
68
- }
69
- function assign(out, key, value) {
70
- if (key in out) {
71
- const prev = out[key];
72
- out[key] = Array.isArray(prev) ? [...prev, value] : [prev, value];
73
- }
74
- else {
75
- out[key] = value;
76
- }
77
- }
78
- //# sourceMappingURL=ports.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ports.js","sourceRoot":"","sources":["../../src/commands/ports.ts"],"names":[],"mappings":"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"}
@@ -1,21 +0,0 @@
1
- import { z } from "zod";
2
- import type { Command, CommandContext } from "./ports.js";
3
- export declare class ProfileCommand implements Command {
4
- readonly name = "profile";
5
- readonly summary = "Show, list, or switch the active connection profile";
6
- readonly schema: z.ZodObject<{
7
- action: z.ZodDefault<z.ZodEnum<["show", "list", "use"]>>;
8
- name: z.ZodOptional<z.ZodString>;
9
- }, "strip", z.ZodTypeAny, {
10
- action: "show" | "list" | "use";
11
- name?: string | undefined;
12
- }, {
13
- action?: "show" | "list" | "use" | undefined;
14
- name?: string | undefined;
15
- }>;
16
- run(ctx: CommandContext): Promise<void>;
17
- private use;
18
- private list;
19
- private show;
20
- }
21
- //# sourceMappingURL=profile.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"profile.d.ts","sourceRoot":"","sources":["../../src/commands/profile.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAQ1D,qBAAa,cAAe,YAAW,OAAO;IAC5C,QAAQ,CAAC,IAAI,aAAa;IAC1B,QAAQ,CAAC,OAAO,yDAAyD;IACzE,QAAQ,CAAC,MAAM;;;;;;;;;OAAU;IAEnB,GAAG,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAc7C,OAAO,CAAC,GAAG;IAaX,OAAO,CAAC,IAAI;IAeZ,OAAO,CAAC,IAAI;CAQb"}
@@ -1,93 +0,0 @@
1
- // src/commands/profile.ts — `/profile` / `pocketdev profile use <name>`.
2
- //
3
- // SRP: inspect / switch the active connection profile. The profile's `mode` is the ONLY
4
- // input the DI root uses to pick LOCAL vs REMOTE wiring, so switching hosts is a profile
5
- // switch, not a different app.
6
- //
7
- // `ConfigStore` (a read-only port) resolves the merged view; `profile use` persists a new
8
- // `defaultProfile` into the user config file (~/.pocketdev/config.json) so the next process
9
- // picks it up via the documented precedence. We only touch the `defaultProfile` field and
10
- // leave any existing `profiles`/scalars intact.
11
- import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
12
- import { homedir } from "node:os";
13
- import { join } from "node:path";
14
- import { z } from "zod";
15
- import { CONFIG_FILE_NAME, USER_DIR_NAME } from "../config/defaults.js";
16
- import { CliError } from "../core/errors.js";
17
- import { bindArgs, parseArgs } from "./ports.js";
18
- const schema = z.object({
19
- action: z.enum(["show", "list", "use"]).default("show"),
20
- name: z.string().min(1).optional(),
21
- });
22
- export class ProfileCommand {
23
- name = "profile";
24
- summary = "Show, list, or switch the active connection profile";
25
- schema = schema;
26
- async run(ctx) {
27
- const args = parseArgs(this.schema, bindArgs(ctx.argv, ["action", "name"]));
28
- switch (args.action) {
29
- case "use":
30
- return this.use(ctx, args.name);
31
- case "list":
32
- return this.list(ctx);
33
- case "show":
34
- default:
35
- return this.show(ctx);
36
- }
37
- }
38
- use(ctx, name) {
39
- if (!name)
40
- throw CliError.config("usage: profile use <name>");
41
- // Validate the profile exists (throws CliError.config on an unknown name).
42
- const next = ctx.config.profile(name);
43
- persistDefaultProfile(name);
44
- if (ctx.json) {
45
- ctx.renderer.stream(JSON.stringify({ active: next.name, mode: next.mode, hostUrl: next.hostUrl }) + "\n");
46
- }
47
- else {
48
- ctx.renderer.stream(`Active profile is now '${next.name}' (${next.mode}) → ${next.hostUrl}\n`);
49
- }
50
- }
51
- list(ctx) {
52
- const cfg = ctx.config.resolve();
53
- const active = cfg.profile.name;
54
- const profiles = Object.values(cfg.profiles);
55
- if (ctx.json) {
56
- ctx.renderer.stream(JSON.stringify({ active, profiles }) + "\n");
57
- return;
58
- }
59
- for (const p of profiles) {
60
- const marker = p.name === active ? "*" : " ";
61
- ctx.renderer.stream(`${marker} ${p.name.padEnd(12)} ${p.mode.padEnd(7)} ${p.hostUrl}\n`);
62
- }
63
- }
64
- show(ctx) {
65
- const p = ctx.config.profile();
66
- if (ctx.json) {
67
- ctx.renderer.stream(JSON.stringify(p) + "\n");
68
- }
69
- else {
70
- ctx.renderer.stream(`${p.name} (${p.mode}) → ${p.hostUrl}\n`);
71
- }
72
- }
73
- }
74
- /** Merge `defaultProfile: name` into ~/.pocketdev/config.json, preserving the rest. */
75
- function persistDefaultProfile(name) {
76
- const dir = join(homedir(), USER_DIR_NAME);
77
- const path = join(dir, CONFIG_FILE_NAME);
78
- let current = {};
79
- if (existsSync(path)) {
80
- try {
81
- current = JSON.parse(readFileSync(path, "utf8"));
82
- }
83
- catch (cause) {
84
- throw CliError.config(`Config file ${path} is not valid JSON.`, undefined);
85
- }
86
- }
87
- else if (!existsSync(dir)) {
88
- mkdirSync(dir, { recursive: true, mode: 0o700 });
89
- }
90
- current.defaultProfile = name;
91
- writeFileSync(path, JSON.stringify(current, null, 2) + "\n", { encoding: "utf8", mode: 0o600 });
92
- }
93
- //# sourceMappingURL=profile.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"profile.js","sourceRoot":"","sources":["../../src/commands/profile.ts"],"names":[],"mappings":"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"}
@@ -1,18 +0,0 @@
1
- import { z } from "zod";
2
- import type { Command, CommandContext } from "./ports.js";
3
- export declare class PushCommand implements Command {
4
- readonly name = "push";
5
- readonly summary = "Sync the current folder to the cloud project; add --watch for live realtime sync";
6
- readonly aliases: string[];
7
- readonly schema: z.ZodObject<{
8
- watch: z.ZodOptional<z.ZodBoolean>;
9
- }, "strip", z.ZodTypeAny, {
10
- watch?: boolean | undefined;
11
- }, {
12
- watch?: boolean | undefined;
13
- }>;
14
- run(ctx: CommandContext): Promise<void>;
15
- }
16
- /** Merge `{projectId, projectName}` into ./.pocketdev/config.json (creating it if needed). */
17
- export declare function writeProjectConfig(cwd: string, projectId: string, projectName: string): void;
18
- //# sourceMappingURL=push.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"push.d.ts","sourceRoot":"","sources":["../../src/commands/push.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAMxB,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAS1D,qBAAa,WAAY,YAAW,OAAO;IACzC,QAAQ,CAAC,IAAI,UAAU;IACvB,QAAQ,CAAC,OAAO,sFAAsF;IACtG,QAAQ,CAAC,OAAO,WAAY;IAC5B,QAAQ,CAAC,MAAM;;;;;;OAAU;IAEnB,GAAG,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;CAyF9C;AAED,8FAA8F;AAC9F,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAe5F"}
@@ -1,116 +0,0 @@
1
- // src/commands/push.ts — `pocketdev push` (alias `sync`, and the default action of bare `pocketdev`
2
- // in REMOTE mode): upload the current folder to the cloud as a PROJECT.
3
- //
4
- // The folder is bound to one cloud project: the project id is created once (POST /api/projects) and
5
- // persisted in ./.pocketdev/config.json, so re-running re-syncs the SAME project. Each file is written
6
- // with PUT /api/file carrying the `X-Pocketdev-Project` header so it lands under that project.
7
- import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
8
- import { basename, join } from "node:path";
9
- import { z } from "zod";
10
- import { uploadGit } from "../sync/git-sync.js";
11
- import { walkProject } from "../sync/walk.js";
12
- import { watchProject } from "../sync/watch.js";
13
- import { bindArgs, parseArgs } from "./ports.js";
14
- // `--watch` keeps the process alive and live-streams local edits/deletes after the initial sync.
15
- const schema = z.object({ watch: z.boolean().optional() });
16
- const PROJECT_DIR = ".pocketdev";
17
- const CONFIG_FILE = "config.json";
18
- export class PushCommand {
19
- name = "push";
20
- summary = "Sync the current folder to the cloud project; add --watch for live realtime sync";
21
- aliases = ["sync"];
22
- schema = schema;
23
- async run(ctx) {
24
- const args = parseArgs(this.schema, bindArgs(ctx.argv, []));
25
- const resolved = ctx.config.resolve();
26
- if (resolved.profile.mode !== "remote") {
27
- ctx.renderer.error("`push` syncs to a FULL-REMOTE host.", "Select a remote profile (mode=remote) or use a cloud profile.");
28
- return;
29
- }
30
- const cwd = process.cwd();
31
- let projectId = resolved.projectId;
32
- let projectName = resolved.projectName ?? (basename(cwd) || "project");
33
- // Ensure the folder is bound to a cloud project (created once; id persisted locally).
34
- if (!projectId) {
35
- const body = { name: projectName };
36
- const created = await ctx.http.post("/api/projects", body);
37
- projectId = created.id;
38
- projectName = created.name;
39
- writeProjectConfig(cwd, projectId, projectName);
40
- ctx.renderer.stream(`Created cloud project '${projectName}'.\n`);
41
- }
42
- const maxBytes = resolved.maxFileBytes ?? 2_000_000;
43
- const { files, skipped } = await walkProject(cwd, maxBytes);
44
- // Scope every upload to this project explicitly (the config-derived header may be stale on the
45
- // very first run, where the project was just created in this same invocation).
46
- const projectHeader = { "X-Pocketdev-Project": projectId };
47
- let uploaded = 0;
48
- for (const f of files) {
49
- await ctx.http.put("/api/file", { path: f.relPath, content: f.content }, projectHeader);
50
- uploaded++;
51
- if (!ctx.json)
52
- ctx.renderer.stream(` ↑ ${f.relPath}\n`);
53
- }
54
- // Best-effort git snapshot (branch/commits/status/diffs + .git bundle) for the dashboard.
55
- try {
56
- await uploadGit(ctx.http, cwd, projectId);
57
- }
58
- catch {
59
- /* git sync is best-effort */
60
- }
61
- if (ctx.json) {
62
- ctx.renderer.stream(JSON.stringify({ ok: true, projectId, name: projectName, uploaded, skipped, watch: !!args.watch }) +
63
- "\n");
64
- }
65
- else {
66
- ctx.renderer.stream(`Synced ${uploaded} file${uploaded === 1 ? "" : "s"} to '${projectName}'` +
67
- (skipped ? ` (${skipped} skipped)` : "") +
68
- ".\n");
69
- ctx.renderer.stream("View at http://localhost:3003/projects\n");
70
- }
71
- if (!args.watch)
72
- return;
73
- // Live realtime sync: stream local create/modify (PUT) and delete (DELETE) until Ctrl-C.
74
- ctx.renderer.stream(`\n— watching '${projectName}' for changes (Ctrl-C to stop) —\n`);
75
- await watchProject(cwd, maxBytes, {
76
- onUpsert: async (relPath, content) => {
77
- try {
78
- await ctx.http.put("/api/file", { path: relPath, content }, projectHeader);
79
- ctx.renderer.stream(` ↑ ${relPath}\n`);
80
- }
81
- catch (err) {
82
- ctx.renderer.stream(` ! ${relPath} — ${err.message}\n`);
83
- }
84
- },
85
- onDelete: async (relPath) => {
86
- try {
87
- await ctx.http.del(`/api/file?path=${encodeURIComponent(relPath)}`, projectHeader);
88
- ctx.renderer.stream(` ✗ ${relPath}\n`);
89
- }
90
- catch (err) {
91
- ctx.renderer.stream(` ! ${relPath} — ${err.message}\n`);
92
- }
93
- },
94
- }, ctx.signal);
95
- }
96
- }
97
- /** Merge `{projectId, projectName}` into ./.pocketdev/config.json (creating it if needed). */
98
- export function writeProjectConfig(cwd, projectId, projectName) {
99
- const dir = join(cwd, PROJECT_DIR);
100
- const file = join(dir, CONFIG_FILE);
101
- let cfg = {};
102
- if (existsSync(file)) {
103
- try {
104
- cfg = JSON.parse(readFileSync(file, "utf8"));
105
- }
106
- catch {
107
- cfg = {};
108
- }
109
- }
110
- cfg.projectId = projectId;
111
- cfg.projectName = projectName;
112
- if (!existsSync(dir))
113
- mkdirSync(dir, { recursive: true });
114
- writeFileSync(file, JSON.stringify(cfg, null, 2) + "\n", "utf8");
115
- }
116
- //# sourceMappingURL=push.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"push.js","sourceRoot":"","sources":["../../src/commands/push.ts"],"names":[],"mappings":"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"}
@@ -1,15 +0,0 @@
1
- import type { Command } from "./ports.js";
2
- export declare class CommandRegistry {
3
- private readonly byName;
4
- private readonly aliasToName;
5
- /** Register a command. Throws on a duplicate name/alias to surface wiring mistakes early. */
6
- register(command: Command): this;
7
- /** Register many at once (used by the DI root). */
8
- registerAll(commands: readonly Command[]): this;
9
- /** Resolve by bare name, slash form (`/save`), or alias. Returns undefined if unknown. */
10
- resolve(token: string): Command | undefined;
11
- has(token: string): boolean;
12
- /** All registered commands, sorted by name — used to render `/help`. */
13
- list(): Command[];
14
- }
15
- //# sourceMappingURL=registry.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/commands/registry.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE1C,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA8B;IACrD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA6B;IAEzD,6FAA6F;IAC7F,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAchC,mDAAmD;IACnD,WAAW,CAAC,QAAQ,EAAE,SAAS,OAAO,EAAE,GAAG,IAAI;IAK/C,0FAA0F;IAC1F,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS;IAQ3C,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAI3B,wEAAwE;IACxE,IAAI,IAAI,OAAO,EAAE;CAGlB"}
@@ -1,45 +0,0 @@
1
- // src/commands/registry.ts — CommandRegistry: the OCP extension point for commands.
2
- //
3
- // New behavior is REGISTERED here, never grafted into the router/loop. The router resolves
4
- // a command by name or alias and the registry stays closed to modification.
5
- export class CommandRegistry {
6
- byName = new Map();
7
- aliasToName = new Map();
8
- /** Register a command. Throws on a duplicate name/alias to surface wiring mistakes early. */
9
- register(command) {
10
- if (this.byName.has(command.name)) {
11
- throw new Error(`duplicate command name: ${command.name}`);
12
- }
13
- this.byName.set(command.name, command);
14
- for (const alias of command.aliases ?? []) {
15
- if (this.aliasToName.has(alias) || this.byName.has(alias)) {
16
- throw new Error(`duplicate command alias: ${alias} (for ${command.name})`);
17
- }
18
- this.aliasToName.set(alias, command.name);
19
- }
20
- return this;
21
- }
22
- /** Register many at once (used by the DI root). */
23
- registerAll(commands) {
24
- for (const c of commands)
25
- this.register(c);
26
- return this;
27
- }
28
- /** Resolve by bare name, slash form (`/save`), or alias. Returns undefined if unknown. */
29
- resolve(token) {
30
- const name = token.startsWith("/") ? token.slice(1) : token;
31
- const direct = this.byName.get(name);
32
- if (direct)
33
- return direct;
34
- const aliased = this.aliasToName.get(name);
35
- return aliased ? this.byName.get(aliased) : undefined;
36
- }
37
- has(token) {
38
- return this.resolve(token) !== undefined;
39
- }
40
- /** All registered commands, sorted by name — used to render `/help`. */
41
- list() {
42
- return [...this.byName.values()].sort((a, b) => a.name.localeCompare(b.name));
43
- }
44
- }
45
- //# sourceMappingURL=registry.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/commands/registry.ts"],"names":[],"mappings":"AAAA,oFAAoF;AACpF,EAAE;AACF,2FAA2F;AAC3F,4EAA4E;AAI5E,MAAM,OAAO,eAAe;IACT,MAAM,GAAG,IAAI,GAAG,EAAmB,CAAC;IACpC,WAAW,GAAG,IAAI,GAAG,EAAkB,CAAC;IAEzD,6FAA6F;IAC7F,QAAQ,CAAC,OAAgB;QACvB,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YAClC,MAAM,IAAI,KAAK,CAAC,2BAA2B,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QAC7D,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACvC,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC;YAC1C,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC1D,MAAM,IAAI,KAAK,CAAC,4BAA4B,KAAK,SAAS,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC;YAC7E,CAAC;YACD,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QAC5C,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,mDAAmD;IACnD,WAAW,CAAC,QAA4B;QACtC,KAAK,MAAM,CAAC,IAAI,QAAQ;YAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC3C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,0FAA0F;IAC1F,OAAO,CAAC,KAAa;QACnB,MAAM,IAAI,GAAG,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QAC5D,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,MAAM;YAAE,OAAO,MAAM,CAAC;QAC1B,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC3C,OAAO,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACxD,CAAC;IAED,GAAG,CAAC,KAAa;QACf,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,SAAS,CAAC;IAC3C,CAAC;IAED,wEAAwE;IACxE,IAAI;QACF,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAChF,CAAC;CACF"}
@@ -1,25 +0,0 @@
1
- import { z } from "zod";
2
- import type { Command, CommandContext } from "./ports.js";
3
- export declare class RequestCommand implements Command {
4
- readonly name = "request";
5
- readonly summary = "Proxy an HTTP request through the host (POST /api/request)";
6
- readonly aliases: string[];
7
- readonly schema: z.ZodObject<{
8
- method: z.ZodDefault<z.ZodPipeline<z.ZodEffects<z.ZodString, string, string>, z.ZodEnum<["GET", "POST", "PUT", "PATCH", "DELETE", "HEAD", "OPTIONS"]>>>;
9
- url: z.ZodString;
10
- header: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodArray<z.ZodString, "many">]>>;
11
- data: z.ZodOptional<z.ZodString>;
12
- }, "strip", z.ZodTypeAny, {
13
- method: "POST" | "HEAD" | "GET" | "PUT" | "DELETE" | "PATCH" | "OPTIONS";
14
- url: string;
15
- data?: string | undefined;
16
- header?: string | string[] | undefined;
17
- }, {
18
- url: string;
19
- method?: string | undefined;
20
- data?: string | undefined;
21
- header?: string | string[] | undefined;
22
- }>;
23
- run(ctx: CommandContext): Promise<void>;
24
- }
25
- //# sourceMappingURL=request.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"request.d.ts","sourceRoot":"","sources":["../../src/commands/request.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAc1D,qBAAa,cAAe,YAAW,OAAO;IAC5C,QAAQ,CAAC,IAAI,aAAa;IAC1B,QAAQ,CAAC,OAAO,gEAAgE;IAChF,QAAQ,CAAC,OAAO,WAAmB;IACnC,QAAQ,CAAC,MAAM;;;;;;;;;;;;;;;OAAU;IAEnB,GAAG,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;CAwB9C"}