@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,199 +0,0 @@
1
- // ConfigStoreImpl — layered settings with frozen precedence.
2
- //
3
- // SRP: this is the ONLY module that knows how configuration is loaded and merged. Precedence is
4
- // applied exactly once, here, in this order (highest wins):
5
- //
6
- // 1. CLI flags --host, --profile, --print/-p, --json, --no-tty, --mode
7
- // 2. Environment POCKETDEV_* (+ Ory endpoints for REMOTE)
8
- // 3. Project config ./.pocketdev/config.json
9
- // 4. User config ~/.pocketdev/config.json
10
- // 5. Built-in defaults
11
- //
12
- // DIP: it implements the `ConfigStore` port; nothing downstream knows about fs, env, or argv.
13
- // It is constructed once at the DI root with the captured argv + process.env.
14
- import { existsSync, readFileSync } from "node:fs";
15
- import { homedir } from "node:os";
16
- import { join, resolve as resolvePath } from "node:path";
17
- import { CliError } from "../core/errors.js";
18
- import { CONFIG_FILE_NAME, DEFAULT_PROFILE, DEFAULT_PROFILE_NAME, PROJECT_DIR_NAME, USER_DIR_NAME, } from "./defaults.js";
19
- import { configFileSchema, normalizeProfile } from "./profile.js";
20
- export class ConfigStoreImpl {
21
- flags;
22
- env;
23
- cached;
24
- constructor(argv, env) {
25
- this.flags = parseFlags(argv);
26
- this.env = env;
27
- }
28
- resolve() {
29
- if (this.cached)
30
- return this.cached;
31
- // ── Layers 4 & 3: user then project config files (project overrides user). ──
32
- const userFile = this.loadConfigFile(join(homedir(), USER_DIR_NAME, CONFIG_FILE_NAME));
33
- const projectFile = this.loadConfigFile(join(process.cwd(), PROJECT_DIR_NAME, CONFIG_FILE_NAME));
34
- // Merge known profiles: defaults seed, user overrides, project overrides.
35
- const profiles = {
36
- [DEFAULT_PROFILE_NAME]: DEFAULT_PROFILE,
37
- };
38
- for (const [name, raw] of Object.entries(userFile.profiles ?? {})) {
39
- profiles[name] = normalizeProfile(name, raw);
40
- }
41
- for (const [name, raw] of Object.entries(projectFile.profiles ?? {})) {
42
- profiles[name] = normalizeProfile(name, raw);
43
- }
44
- // Default-profile selection: project > user > built-in.
45
- const defaultProfile = projectFile.defaultProfile ?? userFile.defaultProfile ?? DEFAULT_PROFILE_NAME;
46
- // ── Active profile selection (flags > env > defaultProfile). ──
47
- const activeName = this.flags.profile ?? this.env.POCKETDEV_PROFILE ?? defaultProfile;
48
- let active = profiles[activeName];
49
- if (!active) {
50
- throw CliError.config(`Unknown profile "${activeName}".`, `Known profiles: ${Object.keys(profiles).join(", ")}.`);
51
- }
52
- // ── Apply flag/env overrides ONTO the active profile (host/mode). ──
53
- active = this.overlayProfile(active);
54
- // The bound cloud project: prefer the project-local config (./.pocketdev) over the user config.
55
- const projectId = projectFile.projectId ?? userFile.projectId;
56
- const projectName = projectFile.projectName ?? userFile.projectName;
57
- const projectRoot = this.env.POCKETDEV_PROJECT_ROOT
58
- ? resolvePath(this.env.POCKETDEV_PROJECT_ROOT)
59
- : undefined;
60
- const maxFileBytes = numFromEnv(this.env.POCKETDEV_MAX_FILE_BYTES) ??
61
- projectFile.maxFileBytes ??
62
- userFile.maxFileBytes;
63
- // Non-TTY auto-detection feeds the `print`/`noTty` resolution (pipes get plain output).
64
- const isTty = Boolean(process.stdout.isTTY) && Boolean(process.stdin.isTTY);
65
- this.cached = {
66
- profile: active,
67
- profiles,
68
- defaultProfile,
69
- projectId,
70
- projectName,
71
- projectRoot,
72
- maxFileBytes,
73
- print: this.flags.print || !isTty,
74
- json: this.flags.json,
75
- noTty: this.flags.noTty || !isTty,
76
- kratosPublicUrl: this.env.KRATOS_PUBLIC_URL,
77
- hydraPublicUrl: this.env.HYDRA_PUBLIC_URL,
78
- oidcIssuer: this.env.OIDC_ISSUER ?? active.oidcIssuer,
79
- };
80
- return this.cached;
81
- }
82
- profile(name) {
83
- const cfg = this.resolve();
84
- if (!name)
85
- return cfg.profile;
86
- const p = cfg.profiles[name];
87
- if (!p) {
88
- throw CliError.config(`Unknown profile "${name}".`, `Known profiles: ${Object.keys(cfg.profiles).join(", ")}.`);
89
- }
90
- // Re-overlay flag/env onto the explicitly requested profile too, for consistency.
91
- return this.overlayProfile(p);
92
- }
93
- /** Apply `--host`/POCKETDEV_HOST(+PORT) on top of a base profile. FULL-REMOTE only. */
94
- overlayProfile(base) {
95
- const hostUrl = this.resolveHostUrl(base);
96
- // The CLI is FULL-REMOTE only; reject any explicit non-remote --mode / POCKETDEV_MODE.
97
- const requested = this.flags.mode ?? this.env.POCKETDEV_MODE;
98
- if (requested && requested !== "remote") {
99
- throw CliError.config(`Invalid mode "${requested}".`, 'POCKETDEV_MODE / --mode must be "remote" (LOCAL-ONLY was retired).');
100
- }
101
- return { ...base, mode: "remote", hostUrl };
102
- }
103
- /**
104
- * Resolve the base URL honoring precedence:
105
- * --host > POCKETDEV_HOST(+POCKETDEV_PORT) > profile.hostUrl.
106
- * POCKETDEV_HOST may be a bare host or a full URL; POCKETDEV_PORT supplies the port (default 4317).
107
- */
108
- resolveHostUrl(base) {
109
- if (this.flags.host)
110
- return normalizeHostUrl(this.flags.host, this.env.POCKETDEV_PORT);
111
- if (this.env.POCKETDEV_HOST) {
112
- return normalizeHostUrl(this.env.POCKETDEV_HOST, this.env.POCKETDEV_PORT);
113
- }
114
- return base.hostUrl;
115
- }
116
- loadConfigFile(path) {
117
- if (!existsSync(path))
118
- return {};
119
- let text;
120
- try {
121
- text = readFileSync(path, "utf8");
122
- }
123
- catch (cause) {
124
- throw CliError.config(`Could not read config file ${path}.`, undefined);
125
- }
126
- let json;
127
- try {
128
- json = JSON.parse(text);
129
- }
130
- catch (cause) {
131
- throw CliError.config(`Config file ${path} is not valid JSON.`);
132
- }
133
- const parsed = configFileSchema.safeParse(json);
134
- if (!parsed.success) {
135
- throw CliError.config(`Config file ${path} is invalid.`, parsed.error.issues.map((i) => `${i.path.join(".")}: ${i.message}`).join("; "));
136
- }
137
- return parsed.data;
138
- }
139
- }
140
- // ── Flag parsing (only the flags this layer owns; the router handles command-level argv) ──────────
141
- function parseFlags(argv) {
142
- const flags = { print: false, json: false, noTty: false };
143
- for (let i = 0; i < argv.length; i++) {
144
- const a = argv[i];
145
- switch (a) {
146
- case "--host":
147
- flags.host = expectValue(argv, ++i, "--host");
148
- break;
149
- case "--mode":
150
- flags.mode = expectValue(argv, ++i, "--mode");
151
- break;
152
- case "--profile":
153
- flags.profile = expectValue(argv, ++i, "--profile");
154
- break;
155
- case "--print":
156
- case "-p":
157
- flags.print = true;
158
- break;
159
- case "--json":
160
- flags.json = true;
161
- break;
162
- case "--no-tty":
163
- flags.noTty = true;
164
- break;
165
- default:
166
- // `--key=value` forms for the flags we own.
167
- if (a?.startsWith("--host="))
168
- flags.host = a.slice("--host=".length);
169
- else if (a?.startsWith("--mode="))
170
- flags.mode = a.slice("--mode=".length);
171
- else if (a?.startsWith("--profile="))
172
- flags.profile = a.slice("--profile=".length);
173
- // Anything else belongs to the command layer; ignore here.
174
- break;
175
- }
176
- }
177
- return flags;
178
- }
179
- function expectValue(argv, i, flag) {
180
- const v = argv[i];
181
- if (v === undefined || v.startsWith("-")) {
182
- throw CliError.config(`Flag ${flag} requires a value.`);
183
- }
184
- return v;
185
- }
186
- function normalizeHostUrl(host, port) {
187
- // Already a URL → use as-is (port, if separately supplied, is ignored when a URL is given).
188
- if (/^https?:\/\//i.test(host))
189
- return host;
190
- const p = port && /^\d+$/.test(port) ? `:${port}` : "";
191
- return `http://${host}${p}`;
192
- }
193
- function numFromEnv(v) {
194
- if (!v)
195
- return undefined;
196
- const n = Number(v);
197
- return Number.isFinite(n) ? n : undefined;
198
- }
199
- //# sourceMappingURL=config-store.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"config-store.js","sourceRoot":"","sources":["../../src/config/config-store.ts"],"names":[],"mappings":"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"}
@@ -1,22 +0,0 @@
1
- import type { Profile } from "./ports.js";
2
- /** Canonical host port (CANON: 4317). Re-exported from the contract so it can never drift. */
3
- export declare const DEFAULT_PORT = 4317;
4
- /** Default cloud host origin (FULL-REMOTE). Overridden by config/env/flags. */
5
- export declare const DEFAULT_HOST_URL = "https://host.pocketdev.localhost";
6
- /** Default OIDC issuer for the device-authorization + token endpoints. */
7
- export declare const DEFAULT_OIDC_ISSUER = "https://oidc.pocketdev.localhost";
8
- /** Name of the profile used when none is selected by flag/env/config. */
9
- export declare const DEFAULT_PROFILE_NAME = "cloud";
10
- /** Default OAuth2 scopes for the FULL-REMOTE device grant (offline_access enables refresh tokens). */
11
- export declare const DEFAULT_OAUTH_SCOPES: readonly string[];
12
- /** Default public client id for the Hydra device-authorization grant. */
13
- export declare const DEFAULT_OAUTH_CLIENT_ID = "pocketdev-cli";
14
- /** The implicit FULL-REMOTE cloud profile if the user has no config file at all. */
15
- export declare const DEFAULT_PROFILE: Profile;
16
- /** Directory (under $HOME) holding user config, sessions, skills, and the 0600 token fallback. */
17
- export declare const USER_DIR_NAME = ".pocketdev";
18
- /** Project-local config/skills directory name. */
19
- export declare const PROJECT_DIR_NAME = ".pocketdev";
20
- /** Config filename in both the user and project directories. */
21
- export declare const CONFIG_FILE_NAME = "config.json";
22
- //# sourceMappingURL=defaults.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../src/config/defaults.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE1C,8FAA8F;AAC9F,eAAO,MAAM,YAAY,OAAoB,CAAC;AAE9C,+EAA+E;AAC/E,eAAO,MAAM,gBAAgB,qCAAqC,CAAC;AAEnE,0EAA0E;AAC1E,eAAO,MAAM,mBAAmB,qCAAqC,CAAC;AAEtE,yEAAyE;AACzE,eAAO,MAAM,oBAAoB,UAAU,CAAC;AAE5C,sGAAsG;AACtG,eAAO,MAAM,oBAAoB,EAAE,SAAS,MAAM,EAKjD,CAAC;AAEF,yEAAyE;AACzE,eAAO,MAAM,uBAAuB,kBAAkB,CAAC;AAEvD,oFAAoF;AACpF,eAAO,MAAM,eAAe,EAAE,OAO7B,CAAC;AAEF,kGAAkG;AAClG,eAAO,MAAM,aAAa,eAAe,CAAC;AAE1C,kDAAkD;AAClD,eAAO,MAAM,gBAAgB,eAAe,CAAC;AAE7C,gEAAgE;AAChE,eAAO,MAAM,gBAAgB,gBAAgB,CAAC"}
@@ -1,38 +0,0 @@
1
- // Built-in defaults — the lowest layer of the precedence chain.
2
- //
3
- // SRP: this module only declares fallback constants. No IO, no branching. Everything here can be
4
- // overridden by user config, project config, env, then flags (see config-store.ts).
5
- import { HOST_DEFAULT_PORT } from "../contract/index.js";
6
- /** Canonical host port (CANON: 4317). Re-exported from the contract so it can never drift. */
7
- export const DEFAULT_PORT = HOST_DEFAULT_PORT;
8
- /** Default cloud host origin (FULL-REMOTE). Overridden by config/env/flags. */
9
- export const DEFAULT_HOST_URL = "https://host.pocketdev.localhost";
10
- /** Default OIDC issuer for the device-authorization + token endpoints. */
11
- export const DEFAULT_OIDC_ISSUER = "https://oidc.pocketdev.localhost";
12
- /** Name of the profile used when none is selected by flag/env/config. */
13
- export const DEFAULT_PROFILE_NAME = "cloud";
14
- /** Default OAuth2 scopes for the FULL-REMOTE device grant (offline_access enables refresh tokens). */
15
- export const DEFAULT_OAUTH_SCOPES = [
16
- "openid",
17
- "profile",
18
- "email",
19
- "offline_access",
20
- ];
21
- /** Default public client id for the Hydra device-authorization grant. */
22
- export const DEFAULT_OAUTH_CLIENT_ID = "pocketdev-cli";
23
- /** The implicit FULL-REMOTE cloud profile if the user has no config file at all. */
24
- export const DEFAULT_PROFILE = {
25
- name: DEFAULT_PROFILE_NAME,
26
- mode: "remote",
27
- hostUrl: DEFAULT_HOST_URL,
28
- oidcIssuer: DEFAULT_OIDC_ISSUER,
29
- clientId: DEFAULT_OAUTH_CLIENT_ID,
30
- scopes: [...DEFAULT_OAUTH_SCOPES],
31
- };
32
- /** Directory (under $HOME) holding user config, sessions, skills, and the 0600 token fallback. */
33
- export const USER_DIR_NAME = ".pocketdev";
34
- /** Project-local config/skills directory name. */
35
- export const PROJECT_DIR_NAME = ".pocketdev";
36
- /** Config filename in both the user and project directories. */
37
- export const CONFIG_FILE_NAME = "config.json";
38
- //# sourceMappingURL=defaults.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/config/defaults.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAChE,EAAE;AACF,iGAAiG;AACjG,oFAAoF;AAEpF,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAGzD,8FAA8F;AAC9F,MAAM,CAAC,MAAM,YAAY,GAAG,iBAAiB,CAAC;AAE9C,+EAA+E;AAC/E,MAAM,CAAC,MAAM,gBAAgB,GAAG,kCAAkC,CAAC;AAEnE,0EAA0E;AAC1E,MAAM,CAAC,MAAM,mBAAmB,GAAG,kCAAkC,CAAC;AAEtE,yEAAyE;AACzE,MAAM,CAAC,MAAM,oBAAoB,GAAG,OAAO,CAAC;AAE5C,sGAAsG;AACtG,MAAM,CAAC,MAAM,oBAAoB,GAAsB;IACrD,QAAQ;IACR,SAAS;IACT,OAAO;IACP,gBAAgB;CACjB,CAAC;AAEF,yEAAyE;AACzE,MAAM,CAAC,MAAM,uBAAuB,GAAG,eAAe,CAAC;AAEvD,oFAAoF;AACpF,MAAM,CAAC,MAAM,eAAe,GAAY;IACtC,IAAI,EAAE,oBAAoB;IAC1B,IAAI,EAAE,QAAQ;IACd,OAAO,EAAE,gBAAgB;IACzB,UAAU,EAAE,mBAAmB;IAC/B,QAAQ,EAAE,uBAAuB;IACjC,MAAM,EAAE,CAAC,GAAG,oBAAoB,CAAC;CAClC,CAAC;AAEF,kGAAkG;AAClG,MAAM,CAAC,MAAM,aAAa,GAAG,YAAY,CAAC;AAE1C,kDAAkD;AAClD,MAAM,CAAC,MAAM,gBAAgB,GAAG,YAAY,CAAC;AAE7C,gEAAgE;AAChE,MAAM,CAAC,MAAM,gBAAgB,GAAG,aAAa,CAAC"}
@@ -1,60 +0,0 @@
1
- /** Run mode. FULL-REMOTE only — LOCAL-ONLY was retired. Kept as a type for forward-compat. */
2
- export type Mode = "remote";
3
- /**
4
- * A per-host connection profile. The CLI is FULL-REMOTE only: Hydra OAuth2 device grant + cloud
5
- * HTTPS/WSS. Switching hosts is a profile switch, never a code branch.
6
- */
7
- export interface Profile {
8
- /** Stable profile key, e.g. "cloud". */
9
- readonly name: string;
10
- /** Always "remote". */
11
- readonly mode: Mode;
12
- /** Base URL for REST and (after ws/wss rewrite) the WebSocket, e.g. "https://host.pocketdev.localhost". */
13
- readonly hostUrl: string;
14
- /** OIDC issuer for discovery of the device-authorization + token endpoints. */
15
- readonly oidcIssuer?: string;
16
- /** Hydra OAuth2 public client id, e.g. "pocketdev-cli". */
17
- readonly clientId?: string;
18
- /** OAuth scopes requested at device-grant time. Defaults applied in defaults.ts. */
19
- readonly scopes?: readonly string[];
20
- }
21
- /**
22
- * The fully-resolved configuration after applying precedence
23
- * (flags > env > project ./.pocketdev/config.json > user ~/.pocketdev/config.json > defaults).
24
- */
25
- export interface ResolvedConfig {
26
- /** The active profile (already selected by flag/env/default). */
27
- readonly profile: Profile;
28
- /** All known profiles by name (for `pocketdev profile use <name>`). */
29
- readonly profiles: Readonly<Record<string, Profile>>;
30
- /** Name of the default profile. */
31
- readonly defaultProfile: string;
32
- /** Cloud project id this folder is bound to (./.pocketdev/config.json), set by `push`. */
33
- readonly projectId?: string;
34
- /** Display name of the bound cloud project. */
35
- readonly projectName?: string;
36
- /** Project root the host operates on (display/pass-through). */
37
- readonly projectRoot?: string;
38
- /** Max bytes the host returns as text before flagging `truncated`. */
39
- readonly maxFileBytes?: number;
40
- /** Force plain, ANSI-free output (`--print`/`-p` or non-TTY pipe). */
41
- readonly print: boolean;
42
- /** Emit machine-readable JSON for one-shot commands (`--json`). */
43
- readonly json: boolean;
44
- /** Disable the interactive TUI even on a TTY (`--no-tty`). */
45
- readonly noTty: boolean;
46
- readonly kratosPublicUrl?: string;
47
- readonly hydraPublicUrl?: string;
48
- readonly oidcIssuer?: string;
49
- }
50
- /**
51
- * ConfigStore resolves layered settings and exposes the active connection profile.
52
- * The DI root reads `resolve()` once and `profile()` to pick mode-specific concretes.
53
- */
54
- export interface ConfigStore {
55
- /** Apply precedence and return the merged configuration. Pure given the inputs captured at build. */
56
- resolve(): ResolvedConfig;
57
- /** Active connection profile (or a named one). Throws CliError if the name is unknown. */
58
- profile(name?: string): Profile;
59
- }
60
- //# sourceMappingURL=ports.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ports.d.ts","sourceRoot":"","sources":["../../src/config/ports.ts"],"names":[],"mappings":"AAOA,8FAA8F;AAC9F,MAAM,MAAM,IAAI,GAAG,QAAQ,CAAC;AAE5B;;;GAGG;AACH,MAAM,WAAW,OAAO;IACtB,wCAAwC;IACxC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,uBAAuB;IACvB,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IACpB,2GAA2G;IAC3G,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAEzB,+EAA+E;IAC/E,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,2DAA2D;IAC3D,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,oFAAoF;IACpF,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACrC;AAED;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,iEAAiE;IACjE,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,uEAAuE;IACvE,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACrD,mCAAmC;IACnC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAEhC,0FAA0F;IAC1F,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,+CAA+C;IAC/C,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,gEAAgE;IAChE,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,sEAAsE;IACtE,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAE/B,sEAAsE;IACtE,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,mEAAmE;IACnE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,8DAA8D;IAC9D,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IAGxB,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,qGAAqG;IACrG,OAAO,IAAI,cAAc,CAAC;IAC1B,0FAA0F;IAC1F,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CACjC"}
@@ -1,8 +0,0 @@
1
- // Configuration ports (abstractions).
2
- //
3
- // SRP: these interfaces describe *what* configuration is, not *how* it is loaded. The concrete
4
- // `ConfigStoreImpl` (config-store.ts) owns precedence and IO; everything downstream depends only on
5
- // these shapes. DIP: the DI root, transports, and auth providers receive a `ConfigStore`, never a
6
- // concrete loader.
7
- export {};
8
- //# sourceMappingURL=ports.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ports.js","sourceRoot":"","sources":["../../src/config/ports.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,EAAE;AACF,+FAA+F;AAC/F,oGAAoG;AACpG,kGAAkG;AAClG,mBAAmB"}
@@ -1,4 +0,0 @@
1
- export { DEFAULT_OAUTH_CLIENT_ID, DEFAULT_OAUTH_SCOPES } from "./defaults.js";
2
- /** Frozen native-WebSocket path on the host (CANON: /ws). */
3
- export declare const WS_DEFAULT_PATH = "/ws";
4
- //# sourceMappingURL=profile-constants.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"profile-constants.d.ts","sourceRoot":"","sources":["../../src/config/profile-constants.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAE9E,6DAA6D;AAC7D,eAAO,MAAM,eAAe,QAAU,CAAC"}
@@ -1,10 +0,0 @@
1
- // Constants shared by profile.ts.
2
- //
3
- // SRP: kept separate from defaults.ts only to keep profile.ts's import surface minimal and to expose
4
- // the frozen WS path next to the OAuth defaults that profile normalization needs. These re-export
5
- // the canonical values so there is exactly one source of truth.
6
- import { WS_PATH } from "../contract/index.js";
7
- export { DEFAULT_OAUTH_CLIENT_ID, DEFAULT_OAUTH_SCOPES } from "./defaults.js";
8
- /** Frozen native-WebSocket path on the host (CANON: /ws). */
9
- export const WS_DEFAULT_PATH = WS_PATH;
10
- //# sourceMappingURL=profile-constants.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"profile-constants.js","sourceRoot":"","sources":["../../src/config/profile-constants.ts"],"names":[],"mappings":"AAAA,kCAAkC;AAClC,EAAE;AACF,qGAAqG;AACrG,kGAAkG;AAClG,gEAAgE;AAEhE,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAE/C,OAAO,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAE9E,6DAA6D;AAC7D,MAAM,CAAC,MAAM,eAAe,GAAG,OAAO,CAAC"}
@@ -1,84 +0,0 @@
1
- import { z } from "zod";
2
- import type { Profile } from "./ports.js";
3
- /** Zod schema for a single profile as it appears in config.json (raw, pre-normalization). */
4
- export declare const profileSchema: z.ZodObject<{
5
- mode: z.ZodLiteral<"remote">;
6
- hostUrl: z.ZodString;
7
- oidcIssuer: z.ZodOptional<z.ZodString>;
8
- clientId: z.ZodOptional<z.ZodString>;
9
- scopes: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
10
- }, "strict", z.ZodTypeAny, {
11
- mode: "remote";
12
- hostUrl: string;
13
- oidcIssuer?: string | undefined;
14
- clientId?: string | undefined;
15
- scopes?: string[] | undefined;
16
- }, {
17
- mode: "remote";
18
- hostUrl: string;
19
- oidcIssuer?: string | undefined;
20
- clientId?: string | undefined;
21
- scopes?: string[] | undefined;
22
- }>;
23
- export type RawProfile = z.infer<typeof profileSchema>;
24
- /** Schema for the whole config.json file (profiles + selection + loose top-level overrides). */
25
- export declare const configFileSchema: z.ZodObject<{
26
- defaultProfile: z.ZodOptional<z.ZodString>;
27
- profiles: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
28
- mode: z.ZodLiteral<"remote">;
29
- hostUrl: z.ZodString;
30
- oidcIssuer: z.ZodOptional<z.ZodString>;
31
- clientId: z.ZodOptional<z.ZodString>;
32
- scopes: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
33
- }, "strict", z.ZodTypeAny, {
34
- mode: "remote";
35
- hostUrl: string;
36
- oidcIssuer?: string | undefined;
37
- clientId?: string | undefined;
38
- scopes?: string[] | undefined;
39
- }, {
40
- mode: "remote";
41
- hostUrl: string;
42
- oidcIssuer?: string | undefined;
43
- clientId?: string | undefined;
44
- scopes?: string[] | undefined;
45
- }>>>;
46
- maxFileBytes: z.ZodOptional<z.ZodNumber>;
47
- projectId: z.ZodOptional<z.ZodString>;
48
- projectName: z.ZodOptional<z.ZodString>;
49
- }, "strip", z.ZodTypeAny, {
50
- defaultProfile?: string | undefined;
51
- profiles?: Record<string, {
52
- mode: "remote";
53
- hostUrl: string;
54
- oidcIssuer?: string | undefined;
55
- clientId?: string | undefined;
56
- scopes?: string[] | undefined;
57
- }> | undefined;
58
- maxFileBytes?: number | undefined;
59
- projectId?: string | undefined;
60
- projectName?: string | undefined;
61
- }, {
62
- defaultProfile?: string | undefined;
63
- profiles?: Record<string, {
64
- mode: "remote";
65
- hostUrl: string;
66
- oidcIssuer?: string | undefined;
67
- clientId?: string | undefined;
68
- scopes?: string[] | undefined;
69
- }> | undefined;
70
- maxFileBytes?: number | undefined;
71
- projectId?: string | undefined;
72
- projectName?: string | undefined;
73
- }>;
74
- export type RawConfigFile = z.infer<typeof configFileSchema>;
75
- /**
76
- * Build a fully-formed `Profile` from a raw entry, applying defaults. The CLI is FULL-REMOTE only,
77
- * so every profile must carry an OIDC issuer (required for device-flow discovery).
78
- */
79
- export declare function normalizeProfile(name: string, raw: RawProfile): Profile;
80
- /** Derive the absolute WebSocket URL for a profile (http→ws, https→wss, append /ws). */
81
- export declare function wsUrlFor(profile: Profile): string;
82
- /** Derive an absolute REST URL by joining the profile base with a "/api/..." path. */
83
- export declare function httpUrlFor(profile: Profile, path: string): string;
84
- //# sourceMappingURL=profile.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"profile.d.ts","sourceRoot":"","sources":["../../src/config/profile.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE1C,6FAA6F;AAC7F,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;EAQf,CAAC;AAEZ,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AAEvD,gGAAgG;AAChG,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAUnB,CAAC;AAEX,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE7D;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,GAAG,OAAO,CAevE;AAED,wFAAwF;AACxF,wBAAgB,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAOjD;AAED,sFAAsF;AACtF,wBAAgB,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAIjE"}
@@ -1,66 +0,0 @@
1
- // Connection-profile helpers.
2
- //
3
- // SRP: pure functions over `Profile` — validation, normalization, and derived URLs. No IO, no env
4
- // reading. The ConfigStore owns loading; this module owns the shape semantics so both the store and
5
- // the transports agree on what a profile means (e.g. how to turn hostUrl into a ws/wss URL).
6
- import { z } from "zod";
7
- import { CliError } from "../core/errors.js";
8
- import { DEFAULT_OAUTH_CLIENT_ID, DEFAULT_OAUTH_SCOPES, WS_DEFAULT_PATH } from "./profile-constants.js";
9
- /** Zod schema for a single profile as it appears in config.json (raw, pre-normalization). */
10
- export const profileSchema = z
11
- .object({
12
- mode: z.literal("remote"),
13
- hostUrl: z.string().url(),
14
- oidcIssuer: z.string().url().optional(),
15
- clientId: z.string().min(1).optional(),
16
- scopes: z.array(z.string().min(1)).optional(),
17
- })
18
- .strict();
19
- /** Schema for the whole config.json file (profiles + selection + loose top-level overrides). */
20
- export const configFileSchema = z
21
- .object({
22
- defaultProfile: z.string().optional(),
23
- profiles: z.record(profileSchema).optional(),
24
- maxFileBytes: z.number().int().positive().optional(),
25
- // Set by `pocketdev push` in a project's ./.pocketdev/config.json to bind the folder to a
26
- // cloud project (re-runs re-sync the same project).
27
- projectId: z.string().optional(),
28
- projectName: z.string().optional(),
29
- })
30
- .strip();
31
- /**
32
- * Build a fully-formed `Profile` from a raw entry, applying defaults. The CLI is FULL-REMOTE only,
33
- * so every profile must carry an OIDC issuer (required for device-flow discovery).
34
- */
35
- export function normalizeProfile(name, raw) {
36
- if (!raw.oidcIssuer) {
37
- throw CliError.config(`Profile "${name}" is missing "oidcIssuer".`, "Add an oidcIssuer URL (used for OIDC discovery of the device/token endpoints).");
38
- }
39
- return {
40
- name,
41
- mode: "remote",
42
- hostUrl: stripTrailingSlash(raw.hostUrl),
43
- oidcIssuer: raw.oidcIssuer,
44
- clientId: raw.clientId ?? DEFAULT_OAUTH_CLIENT_ID,
45
- scopes: raw.scopes ?? [...DEFAULT_OAUTH_SCOPES],
46
- };
47
- }
48
- /** Derive the absolute WebSocket URL for a profile (http→ws, https→wss, append /ws). */
49
- export function wsUrlFor(profile) {
50
- const base = new URL(profile.hostUrl);
51
- base.protocol = base.protocol === "https:" ? "wss:" : "ws:";
52
- // Preserve any base path, then append the frozen WS path exactly once.
53
- const path = stripTrailingSlash(base.pathname);
54
- base.pathname = `${path}${WS_DEFAULT_PATH}`;
55
- return base.toString();
56
- }
57
- /** Derive an absolute REST URL by joining the profile base with a "/api/..." path. */
58
- export function httpUrlFor(profile, path) {
59
- const base = stripTrailingSlash(profile.hostUrl);
60
- const suffix = path.startsWith("/") ? path : `/${path}`;
61
- return `${base}${suffix}`;
62
- }
63
- function stripTrailingSlash(s) {
64
- return s.endsWith("/") ? s.slice(0, -1) : s;
65
- }
66
- //# sourceMappingURL=profile.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"profile.js","sourceRoot":"","sources":["../../src/config/profile.ts"],"names":[],"mappings":"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"}