@m-kopa/launchpad-cli 0.23.0

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 (191) hide show
  1. package/CHANGELOG.md +854 -0
  2. package/README.md +109 -0
  3. package/dist/auth/browser.d.ts +18 -0
  4. package/dist/auth/browser.d.ts.map +1 -0
  5. package/dist/auth/callback-server.d.ts +24 -0
  6. package/dist/auth/callback-server.d.ts.map +1 -0
  7. package/dist/auth/discovery.d.ts +25 -0
  8. package/dist/auth/discovery.d.ts.map +1 -0
  9. package/dist/auth/flow.d.ts +39 -0
  10. package/dist/auth/flow.d.ts.map +1 -0
  11. package/dist/auth/jwt.d.ts +27 -0
  12. package/dist/auth/jwt.d.ts.map +1 -0
  13. package/dist/auth/pkce.d.ts +26 -0
  14. package/dist/auth/pkce.d.ts.map +1 -0
  15. package/dist/auth/registration.d.ts +8 -0
  16. package/dist/auth/registration.d.ts.map +1 -0
  17. package/dist/auth/session.d.ts +54 -0
  18. package/dist/auth/session.d.ts.map +1 -0
  19. package/dist/auth/token.d.ts +37 -0
  20. package/dist/auth/token.d.ts.map +1 -0
  21. package/dist/bundle/cron-bundle.d.ts +77 -0
  22. package/dist/bundle/cron-bundle.d.ts.map +1 -0
  23. package/dist/bundle/cwd-walker.d.ts +43 -0
  24. package/dist/bundle/cwd-walker.d.ts.map +1 -0
  25. package/dist/bundle/orchestrate.d.ts +51 -0
  26. package/dist/bundle/orchestrate.d.ts.map +1 -0
  27. package/dist/bundle/upload.d.ts +66 -0
  28. package/dist/bundle/upload.d.ts.map +1 -0
  29. package/dist/cli.d.ts +3 -0
  30. package/dist/cli.d.ts.map +1 -0
  31. package/dist/cli.js +9757 -0
  32. package/dist/clone/git-init.d.ts +18 -0
  33. package/dist/clone/git-init.d.ts.map +1 -0
  34. package/dist/clone/tar-extract.d.ts +59 -0
  35. package/dist/clone/tar-extract.d.ts.map +1 -0
  36. package/dist/commands/apps.d.ts +14 -0
  37. package/dist/commands/apps.d.ts.map +1 -0
  38. package/dist/commands/channel-auth.d.ts +31 -0
  39. package/dist/commands/channel-auth.d.ts.map +1 -0
  40. package/dist/commands/clone.d.ts +3 -0
  41. package/dist/commands/clone.d.ts.map +1 -0
  42. package/dist/commands/create.d.ts +27 -0
  43. package/dist/commands/create.d.ts.map +1 -0
  44. package/dist/commands/deploy-flags.d.ts +75 -0
  45. package/dist/commands/deploy-flags.d.ts.map +1 -0
  46. package/dist/commands/deploy-modes.d.ts +59 -0
  47. package/dist/commands/deploy-modes.d.ts.map +1 -0
  48. package/dist/commands/deploy.d.ts +29 -0
  49. package/dist/commands/deploy.d.ts.map +1 -0
  50. package/dist/commands/destroy.d.ts +14 -0
  51. package/dist/commands/destroy.d.ts.map +1 -0
  52. package/dist/commands/envvars.d.ts +28 -0
  53. package/dist/commands/envvars.d.ts.map +1 -0
  54. package/dist/commands/generate.d.ts +3 -0
  55. package/dist/commands/generate.d.ts.map +1 -0
  56. package/dist/commands/groups-whoami.d.ts +3 -0
  57. package/dist/commands/groups-whoami.d.ts.map +1 -0
  58. package/dist/commands/groups.d.ts +3 -0
  59. package/dist/commands/groups.d.ts.map +1 -0
  60. package/dist/commands/init.d.ts +44 -0
  61. package/dist/commands/init.d.ts.map +1 -0
  62. package/dist/commands/login.d.ts +3 -0
  63. package/dist/commands/login.d.ts.map +1 -0
  64. package/dist/commands/logout.d.ts +3 -0
  65. package/dist/commands/logout.d.ts.map +1 -0
  66. package/dist/commands/logs.d.ts +16 -0
  67. package/dist/commands/logs.d.ts.map +1 -0
  68. package/dist/commands/merge.d.ts +29 -0
  69. package/dist/commands/merge.d.ts.map +1 -0
  70. package/dist/commands/plan.d.ts +3 -0
  71. package/dist/commands/plan.d.ts.map +1 -0
  72. package/dist/commands/pull.d.ts +12 -0
  73. package/dist/commands/pull.d.ts.map +1 -0
  74. package/dist/commands/review.d.ts +22 -0
  75. package/dist/commands/review.d.ts.map +1 -0
  76. package/dist/commands/rollback.d.ts +3 -0
  77. package/dist/commands/rollback.d.ts.map +1 -0
  78. package/dist/commands/secrets-template.d.ts +3 -0
  79. package/dist/commands/secrets-template.d.ts.map +1 -0
  80. package/dist/commands/secrets.d.ts +3 -0
  81. package/dist/commands/secrets.d.ts.map +1 -0
  82. package/dist/commands/skills.d.ts +13 -0
  83. package/dist/commands/skills.d.ts.map +1 -0
  84. package/dist/commands/status.d.ts +54 -0
  85. package/dist/commands/status.d.ts.map +1 -0
  86. package/dist/commands/update.d.ts +114 -0
  87. package/dist/commands/update.d.ts.map +1 -0
  88. package/dist/commands/validate.d.ts +3 -0
  89. package/dist/commands/validate.d.ts.map +1 -0
  90. package/dist/commands/whoami.d.ts +3 -0
  91. package/dist/commands/whoami.d.ts.map +1 -0
  92. package/dist/config.d.ts +11 -0
  93. package/dist/config.d.ts.map +1 -0
  94. package/dist/deploy/apply.d.ts +29 -0
  95. package/dist/deploy/apply.d.ts.map +1 -0
  96. package/dist/deploy/dry-run.d.ts +13 -0
  97. package/dist/deploy/dry-run.d.ts.map +1 -0
  98. package/dist/deploy/git-files.d.ts +33 -0
  99. package/dist/deploy/git-files.d.ts.map +1 -0
  100. package/dist/deploy/group-pin.d.ts +66 -0
  101. package/dist/deploy/group-pin.d.ts.map +1 -0
  102. package/dist/deploy/manifest-state.d.ts +20 -0
  103. package/dist/deploy/manifest-state.d.ts.map +1 -0
  104. package/dist/deploy/manifest-status.d.ts +11 -0
  105. package/dist/deploy/manifest-status.d.ts.map +1 -0
  106. package/dist/deploy/resolve.d.ts +53 -0
  107. package/dist/deploy/resolve.d.ts.map +1 -0
  108. package/dist/deploy/rollback.d.ts +23 -0
  109. package/dist/deploy/rollback.d.ts.map +1 -0
  110. package/dist/deploy/runner.d.ts +29 -0
  111. package/dist/deploy/runner.d.ts.map +1 -0
  112. package/dist/deploy/stage-exit-codes.d.ts +41 -0
  113. package/dist/deploy/stage-exit-codes.d.ts.map +1 -0
  114. package/dist/deploy/status-polling.d.ts +37 -0
  115. package/dist/deploy/status-polling.d.ts.map +1 -0
  116. package/dist/deploy/tar-pack.d.ts +22 -0
  117. package/dist/deploy/tar-pack.d.ts.map +1 -0
  118. package/dist/detect/index.d.ts +53 -0
  119. package/dist/detect/index.d.ts.map +1 -0
  120. package/dist/dispatcher.d.ts +30 -0
  121. package/dist/dispatcher.d.ts.map +1 -0
  122. package/dist/groups/client.d.ts +62 -0
  123. package/dist/groups/client.d.ts.map +1 -0
  124. package/dist/http/api-client.d.ts +33 -0
  125. package/dist/http/api-client.d.ts.map +1 -0
  126. package/dist/http/errors.d.ts +31 -0
  127. package/dist/http/errors.d.ts.map +1 -0
  128. package/dist/manifest/load.d.ts +38 -0
  129. package/dist/manifest/load.d.ts.map +1 -0
  130. package/dist/manifest/schema.d.ts +3 -0
  131. package/dist/manifest/schema.d.ts.map +1 -0
  132. package/dist/postinstall.d.ts +3 -0
  133. package/dist/postinstall.d.ts.map +1 -0
  134. package/dist/postinstall.js +37 -0
  135. package/dist/secrets/env-parse.d.ts +19 -0
  136. package/dist/secrets/env-parse.d.ts.map +1 -0
  137. package/dist/secrets/push.d.ts +13 -0
  138. package/dist/secrets/push.d.ts.map +1 -0
  139. package/dist/secrets/set.d.ts +19 -0
  140. package/dist/secrets/set.d.ts.map +1 -0
  141. package/dist/secrets/status.d.ts +19 -0
  142. package/dist/secrets/status.d.ts.map +1 -0
  143. package/dist/types/api.d.ts +112 -0
  144. package/dist/types/api.d.ts.map +1 -0
  145. package/dist/update-notifier.d.ts +69 -0
  146. package/dist/update-notifier.d.ts.map +1 -0
  147. package/dist/version.d.ts +2 -0
  148. package/dist/version.d.ts.map +1 -0
  149. package/package.json +62 -0
  150. package/skills/README.md +100 -0
  151. package/skills/_partials/shell-contract.md +42 -0
  152. package/skills/launchpad-content-pr/SKILL.md +255 -0
  153. package/skills/launchpad-deploy/SKILL.md +415 -0
  154. package/skills/launchpad-deploy-status/SKILL.md +231 -0
  155. package/skills/launchpad-destroy/SKILL.md +317 -0
  156. package/skills/launchpad-onboard/SKILL.md +179 -0
  157. package/skills/launchpad-status/SKILL.md +263 -0
  158. package/skills/marquee-share/README.md +155 -0
  159. package/skills/marquee-share/SKILL.md +94 -0
  160. package/skills/marquee-share/SYNC.md +27 -0
  161. package/skills/marquee-share/dist/cli.js +896 -0
  162. package/skills/marquee-share/eslint.config.mjs +71 -0
  163. package/skills/marquee-share/install.sh +103 -0
  164. package/skills/marquee-share/package-lock.json +3946 -0
  165. package/skills/marquee-share/package.json +30 -0
  166. package/skills/marquee-share/src/auth/PROVENANCE.md +103 -0
  167. package/skills/marquee-share/src/auth/browser.ts +75 -0
  168. package/skills/marquee-share/src/auth/callback-server.ts +171 -0
  169. package/skills/marquee-share/src/auth/discovery.ts +171 -0
  170. package/skills/marquee-share/src/auth/flow.ts +262 -0
  171. package/skills/marquee-share/src/auth/index.ts +171 -0
  172. package/skills/marquee-share/src/auth/jwt.ts +77 -0
  173. package/skills/marquee-share/src/auth/pkce.ts +79 -0
  174. package/skills/marquee-share/src/auth/registration.ts +87 -0
  175. package/skills/marquee-share/src/auth/session.ts +205 -0
  176. package/skills/marquee-share/src/auth/token.ts +162 -0
  177. package/skills/marquee-share/src/cli.ts +246 -0
  178. package/skills/marquee-share/src/config.ts +101 -0
  179. package/skills/marquee-share/src/render/template.ts +171 -0
  180. package/skills/marquee-share/src/upload/index.ts +11 -0
  181. package/skills/marquee-share/src/upload/upload.ts +191 -0
  182. package/skills/marquee-share/tests/cli.test.ts +281 -0
  183. package/skills/marquee-share/tests/config.test.ts +119 -0
  184. package/skills/marquee-share/tests/flow.test.ts +356 -0
  185. package/skills/marquee-share/tests/no-token-leak.test.ts +240 -0
  186. package/skills/marquee-share/tests/pkce.test.ts +121 -0
  187. package/skills/marquee-share/tests/session.test.ts +173 -0
  188. package/skills/marquee-share/tests/template.test.ts +170 -0
  189. package/skills/marquee-share/tests/upload.test.ts +311 -0
  190. package/skills/marquee-share/tsconfig.json +23 -0
  191. package/skills/marquee-share/vitest.config.ts +15 -0
@@ -0,0 +1,18 @@
1
+ import { spawn } from "node:child_process";
2
+ export declare class GitInitError extends Error {
3
+ readonly code: "git_init_error";
4
+ }
5
+ export interface GitInitOptions {
6
+ readonly cwd: string;
7
+ /** Commit message for the initial commit. */
8
+ readonly initialCommitMessage: string;
9
+ /** Injection point for tests. */
10
+ readonly spawner?: typeof spawn;
11
+ }
12
+ /**
13
+ * Run `git init` + create an initial commit. Resolves on
14
+ * success. Throws `GitInitError` if git is missing or any sub-
15
+ * command exits non-zero.
16
+ */
17
+ export declare function initGitRepo(opts: GitInitOptions): Promise<void>;
18
+ //# sourceMappingURL=git-init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-init.d.ts","sourceRoot":"","sources":["../../src/clone/git-init.ts"],"names":[],"mappings":"AAwBA,OAAO,EAAE,KAAK,EAAqB,MAAM,oBAAoB,CAAC;AAE9D,qBAAa,YAAa,SAAQ,KAAK;IACrC,QAAQ,CAAC,IAAI,EAAG,gBAAgB,CAAU;CAC3C;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,6CAA6C;IAC7C,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;IACtC,iCAAiC;IACjC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,KAAK,CAAC;CACjC;AAED;;;;GAIG;AACH,wBAAsB,WAAW,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAkCrE"}
@@ -0,0 +1,59 @@
1
+ /** Hard ceiling on per-file size. CLI's biggest legitimate files
2
+ * (committed assets, lockfiles) are in the tens of KB; 5 MB is
3
+ * generous. Mirrors the bot. */
4
+ export declare const MAX_ENTRY_SIZE: number;
5
+ /** Hard ceiling on total entries. Apps run ~50–200 files. */
6
+ export declare const MAX_ENTRY_COUNT = 5000;
7
+ export interface TarEntry {
8
+ readonly path: string;
9
+ readonly bytes: Uint8Array;
10
+ /** POSIX mode bits parsed from the tar header. Masked to 0o777
11
+ * (the file-type bits are conveyed by `typeflag`, not the
12
+ * mode field). Apps committing executable scripts
13
+ * (`scripts/build.sh` at 100755) need this preserved or
14
+ * `bash scripts/build.sh` fails after a fresh `clone`. */
15
+ readonly mode: number;
16
+ }
17
+ export declare class TarballParseError extends Error {
18
+ readonly code: "tarball_parse_error";
19
+ }
20
+ export declare class PathTraversalError extends Error {
21
+ readonly code: "path_traversal";
22
+ }
23
+ /** Thrown when `extractToDir`'s destination already exists and is
24
+ * non-empty. Distinct from `TarballParseError` so the caller can
25
+ * refuse cleanup (the contents are pre-existing user files we
26
+ * must NOT delete). */
27
+ export declare class DestinationNotEmptyError extends Error {
28
+ readonly code: "destination_not_empty";
29
+ }
30
+ /**
31
+ * Walk a gzipped tarball passed as a Web Streams `ReadableStream`.
32
+ * Yields one entry per regular file. Caller decides what to do
33
+ * with each entry — `extractToDir` is the canonical sink, but
34
+ * tests use the generator directly.
35
+ */
36
+ export declare function walkGzippedTarball(body: ReadableStream<Uint8Array>): AsyncGenerator<TarEntry>;
37
+ export interface ExtractStats {
38
+ readonly fileCount: number;
39
+ readonly byteCount: number;
40
+ }
41
+ export interface ExtractOptions {
42
+ /**
43
+ * Number of leading path components to strip from each tar
44
+ * entry's path before resolving against the destination. The
45
+ * GitHub `/tarball/` endpoint wraps everything under a single
46
+ * `<owner>-<repo>-<sha>/` directory, so callers pass `1` to
47
+ * peel that prefix.
48
+ */
49
+ readonly stripComponents?: number;
50
+ }
51
+ /**
52
+ * Stream-extract a gzipped tarball into `destDir`. Creates the
53
+ * destination directory if it doesn't exist. Refuses to overwrite
54
+ * a non-empty directory — the verb is supposed to be a fresh
55
+ * checkout, and silently merging into an existing tree masks
56
+ * surprising state.
57
+ */
58
+ export declare function extractToDir(body: ReadableStream<Uint8Array>, destDir: string, opts?: ExtractOptions): Promise<ExtractStats>;
59
+ //# sourceMappingURL=tar-extract.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tar-extract.d.ts","sourceRoot":"","sources":["../../src/clone/tar-extract.ts"],"names":[],"mappings":"AA2BA;;iCAEiC;AACjC,eAAO,MAAM,cAAc,QAAkB,CAAC;AAC9C,6DAA6D;AAC7D,eAAO,MAAM,eAAe,OAAO,CAAC;AAGpC,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC3B;;;;+DAI2D;IAC3D,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,qBAAa,iBAAkB,SAAQ,KAAK;IAC1C,QAAQ,CAAC,IAAI,EAAG,qBAAqB,CAAU;CAChD;AAED,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C,QAAQ,CAAC,IAAI,EAAG,gBAAgB,CAAU;CAC3C;AAED;;;wBAGwB;AACxB,qBAAa,wBAAyB,SAAQ,KAAK;IACjD,QAAQ,CAAC,IAAI,EAAG,uBAAuB,CAAU;CAClD;AAED;;;;;GAKG;AACH,wBAAuB,kBAAkB,CACvC,IAAI,EAAE,cAAc,CAAC,UAAU,CAAC,GAC/B,cAAc,CAAC,QAAQ,CAAC,CAiH1B;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,cAAc;IAC7B;;;;;;OAMG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;CACnC;AAED;;;;;;GAMG;AACH,wBAAsB,YAAY,CAChC,IAAI,EAAE,cAAc,CAAC,UAAU,CAAC,EAChC,OAAO,EAAE,MAAM,EACf,IAAI,GAAE,cAAmB,GACxB,OAAO,CAAC,YAAY,CAAC,CA4CvB"}
@@ -0,0 +1,14 @@
1
+ import type { CliIo, Command } from "../dispatcher.js";
2
+ import type { MeAppsResponse } from "../types/api.js";
3
+ export declare const appsCommand: Command;
4
+ /**
5
+ * Tiny columnar renderer. No external dep; the row count is
6
+ * always small enough that buffering is fine.
7
+ *
8
+ * Columns: SLUG, NAME, ROLE, LIFECYCLE, AGE.
9
+ *
10
+ * Exposed for tests (so the command logic doesn't have to spin
11
+ * up the full apiJson path just to assert table shape).
12
+ */
13
+ export declare function renderTable(r: MeAppsResponse, io: CliIo): void;
14
+ //# sourceMappingURL=apps.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apps.d.ts","sourceRoot":"","sources":["../../src/commands/apps.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,KAAK,EAAE,OAAO,EAAY,MAAM,kBAAkB,CAAC;AACjE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEtD,eAAO,MAAM,WAAW,EAAE,OAIzB,CAAC;AA2BF;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,cAAc,EAAE,EAAE,EAAE,KAAK,GAAG,IAAI,CA2B9D"}
@@ -0,0 +1,31 @@
1
+ /** Outcome of a loopback channel self-update. `reason` lets the caller print a
2
+ * targeted next step (and degrade to the browser installer on `no-browser`). */
3
+ export type ChannelUpdateResult = {
4
+ readonly ok: true;
5
+ } | {
6
+ readonly ok: false;
7
+ readonly reason: "no-browser" | "auth" | "failed";
8
+ readonly detail?: string;
9
+ };
10
+ /** Injectable I/O so the flow is testable without a real browser. */
11
+ export interface LoopbackDeps {
12
+ /** Open the system browser at `url` (or reject → degrade to `no-browser`). */
13
+ readonly openUrl: (url: string) => Promise<void>;
14
+ /** HTTP client (real `fetch` in production; a mock gateway in tests). */
15
+ readonly fetchFn: typeof fetch;
16
+ /** Run the fetched installer script; resolves to its exit code. */
17
+ readonly runScript: (script: string) => Promise<number>;
18
+ /** Overall wait budget for the browser round-trip (default 3 min). */
19
+ readonly timeoutMs?: number;
20
+ }
21
+ /** A fresh PKCE S256 pair (verifier kept secret; challenge sent to the gateway). */
22
+ export declare function pkcePair(): {
23
+ verifier: string;
24
+ challenge: string;
25
+ };
26
+ /**
27
+ * Run the loopback channel self-update end to end. Pure orchestration over the
28
+ * injected I/O so it is fully testable.
29
+ */
30
+ export declare function runChannelLoopbackUpdate(deps: LoopbackDeps): Promise<ChannelUpdateResult>;
31
+ //# sourceMappingURL=channel-auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"channel-auth.d.ts","sourceRoot":"","sources":["../../src/commands/channel-auth.ts"],"names":[],"mappings":"AA4BA;iFACiF;AACjF,MAAM,MAAM,mBAAmB,GAC3B;IAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAA;CAAE,GACrB;IACE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IACnB,QAAQ,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,GAAG,QAAQ,CAAC;IAClD,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEN,qEAAqE;AACrE,MAAM,WAAW,YAAY;IAC3B,8EAA8E;IAC9E,QAAQ,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACjD,yEAAyE;IACzE,QAAQ,CAAC,OAAO,EAAE,OAAO,KAAK,CAAC;IAC/B,mEAAmE;IACnE,QAAQ,CAAC,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACxD,sEAAsE;IACtE,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAMD,oFAAoF;AACpF,wBAAgB,QAAQ,IAAI;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAIlE;AAwDD;;;GAGG;AACH,wBAAsB,wBAAwB,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,mBAAmB,CAAC,CA8E/F"}
@@ -0,0 +1,3 @@
1
+ import type { Command } from "../dispatcher.js";
2
+ export declare const cloneCommand: Command;
3
+ //# sourceMappingURL=clone.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clone.d.ts","sourceRoot":"","sources":["../../src/commands/clone.ts"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAAS,OAAO,EAAY,MAAM,kBAAkB,CAAC;AAEjE,eAAO,MAAM,YAAY,EAAE,OAI1B,CAAC"}
@@ -0,0 +1,27 @@
1
+ import type { Command } from "../dispatcher.js";
2
+ export declare const createCommand: Command;
3
+ /**
4
+ * Closed taxonomy mirrored from `portal-bot/src/review/gate.ts`.
5
+ * Hand-maintained (workspace boundary) — keep in lock-step.
6
+ *
7
+ * `container` was added by M-1071 chunk F (portal-bot enum bump, #139)
8
+ * + chunk F-bis (this CLI bump) to land the container-shape app type
9
+ * across the wire. Order matches gate.ts's `APP_TYPES` array so the
10
+ * help-text rendering is consistent with the bot's error messages.
11
+ */
12
+ export declare const APP_TYPES: readonly ["static", "react", "react+api", "container"];
13
+ export type AppType = (typeof APP_TYPES)[number];
14
+ export interface CreateArgs {
15
+ readonly slug: string;
16
+ readonly displayName: string;
17
+ readonly description: string | null;
18
+ readonly appType: AppType;
19
+ readonly allowedGroups: readonly string[];
20
+ }
21
+ /**
22
+ * Returns either parsed args or a human-readable error string. The
23
+ * caller renders the string + usage banner; tests can drive the
24
+ * parser directly to assert each individual reject path.
25
+ */
26
+ export declare function parseArgs(args: readonly string[]): CreateArgs | string;
27
+ //# sourceMappingURL=create.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"AA2CA,OAAO,KAAK,EAAS,OAAO,EAAY,MAAM,kBAAkB,CAAC;AAEjE,eAAO,MAAM,aAAa,EAAE,OAI3B,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,SAAS,wDAAyD,CAAC;AAChF,MAAM,MAAM,OAAO,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC;AAEjD,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;CAC3C;AAwFD;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,UAAU,GAAG,MAAM,CAgEtE"}
@@ -0,0 +1,75 @@
1
+ import { type AppType } from "./create.js";
2
+ export type DeployMode = {
3
+ readonly kind: "content";
4
+ readonly slug: string | null;
5
+ } | {
6
+ readonly kind: "new";
7
+ readonly slug: string;
8
+ readonly displayName: string;
9
+ readonly description: string | null;
10
+ readonly appType: AppType;
11
+ readonly allowedGroups: readonly string[];
12
+ } | {
13
+ readonly kind: "resume";
14
+ readonly slug: string;
15
+ } | {
16
+ readonly kind: "abandon";
17
+ readonly slug: string;
18
+ }
19
+ /**
20
+ * Scope 6 v1 — manifest-driven dry-run. Loads
21
+ * `launchpad.yaml` (or `--file <path>`), resolves
22
+ * `access.allowed_entra_group` to a UUID via the bot's
23
+ * `/groups` endpoint, and emits the Terraform module block the
24
+ * engine would apply. Read-only — no platform-repo writes, no
25
+ * `terraform plan` invocation, no state changes.
26
+ */
27
+ | {
28
+ readonly kind: "dry-run";
29
+ readonly file: string | null;
30
+ readonly json: boolean;
31
+ }
32
+ /**
33
+ * Scope 6 v2 — manifest-driven apply. Writes the engine's TF
34
+ * block to `<platformRepo>/terraform/envs/prod/app-<slug>.tf`,
35
+ * runs `terraform plan` against the platform repo, prompts
36
+ * for confirmation, runs `terraform apply`, and writes the D3
37
+ * UUID pin on success. Requires the platform-repo path via
38
+ * `--platform-repo` or `LAUNCHPAD_PLATFORM_REPO`. Refuses to
39
+ * run from a non-default branch (D1) or with a dirty platform-
40
+ * repo tree. Refuses to silently re-pin a drifted UUID unless
41
+ * `--re-pin` is passed.
42
+ */
43
+ | {
44
+ readonly kind: "apply";
45
+ readonly file: string | null;
46
+ readonly platformRepo: string | null;
47
+ readonly rePin: boolean;
48
+ readonly yes: boolean;
49
+ /**
50
+ * `--resume-pr <prNumber>` — re-attach polling to an existing
51
+ * apply PR instead of opening a new one. M-1160 AC-U3. The
52
+ * Scope spelled this `--resume <prNumber>` but `--resume` is
53
+ * already taken by the workflow-resume mode (`--resume <slug>`)
54
+ * so we use a distinct flag here.
55
+ */
56
+ readonly resumePrNumber: number | null;
57
+ /**
58
+ * `--timeout-minutes <n>` — override the 90-minute default
59
+ * polling timeout (AC-U2). Apply-only.
60
+ */
61
+ readonly timeoutMinutes: number | null;
62
+ };
63
+ export interface DeployFlags {
64
+ readonly mode: DeployMode;
65
+ readonly message: string | null;
66
+ /** Override the 20-minute default polling deadline. */
67
+ readonly timeoutSeconds: number | null;
68
+ }
69
+ /**
70
+ * Parse argv. Returns the parsed shape or a human-readable error.
71
+ * The caller renders the error + usage banner; tests drive this
72
+ * directly to assert reject paths.
73
+ */
74
+ export declare function parseDeployFlags(args: readonly string[]): DeployFlags | string;
75
+ //# sourceMappingURL=deploy-flags.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy-flags.d.ts","sourceRoot":"","sources":["../../src/commands/deploy-flags.ts"],"names":[],"mappings":"AA0BA,OAAO,EAAa,KAAK,OAAO,EAAE,MAAM,aAAa,CAAC;AAEtD,MAAM,MAAM,UAAU,GAClB;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAC1D;IACE,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;CAC3C,GACD;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAClD;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE;AACrD;;;;;;;GAOG;GACD;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;CAAE;AACpF;;;;;;;;;;GAUG;GACD;IACE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC;IACtB;;;;;;OAMG;IACH,QAAQ,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC;;;OAGG;IACH,QAAQ,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;CACxC,CAAC;AAEN,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,uDAAuD;IACvD,QAAQ,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;CACxC;AAQD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,WAAW,GAAG,MAAM,CAsT9E"}
@@ -0,0 +1,59 @@
1
+ import type { CliIo, ExitCode } from "../dispatcher.js";
2
+ import type { AppType } from "./create.js";
3
+ /**
4
+ * `launchpad deploy --abandon <slug>` — POST /apps/<slug>/abandon.
5
+ *
6
+ * Exit codes:
7
+ * * 0 — transition succeeded (slug now `abandoned`).
8
+ * * 0 — idempotent no-op (already terminal).
9
+ * * 1 — auth / authz / not_found / transport errors.
10
+ */
11
+ export declare function runAbandon(slug: string, io: CliIo): Promise<ExitCode>;
12
+ /**
13
+ * `launchpad deploy --resume <slug>` — POST /apps/<slug>/resume.
14
+ *
15
+ * Exit codes:
16
+ * * 0 — refire signalled (202) / already_done (200).
17
+ * * 32-36 — not_resumable (per stage-exit-codes map).
18
+ * * 1 — auth / authz / not_found / transport errors.
19
+ */
20
+ export declare function runResume(slug: string, io: CliIo): Promise<ExitCode>;
21
+ /**
22
+ * `launchpad deploy --new` — full M-892 zero-touch entry point.
23
+ *
24
+ * Flow:
25
+ * 1. POST /apps with the create-shape body (same as
26
+ * `launchpad create`). Bot returns `{ id, stage: "pending" }`.
27
+ * 2. Poll GET /apps/<id>/status via `pollUntilTerminal` until
28
+ * one of:
29
+ * - `ready_for_content` — the platform side is provisioned;
30
+ * future versions will then push the cwd's content tarball.
31
+ * - `done` — the workflow completed end-to-end. We treat this
32
+ * as success too (the legacy workflow doesn't halt at
33
+ * ready_for_content yet; M-892 T3 lands that change later).
34
+ * - terminal failure — map to per-stage exit code.
35
+ *
36
+ * Exit codes:
37
+ * * 0 — ready_for_content / done.
38
+ * * 1 — auth / authz / transport errors.
39
+ * * 32-36 — terminal failure stages (per stage-exit-codes map).
40
+ */
41
+ export declare function runNew(args: {
42
+ readonly slug: string;
43
+ readonly displayName: string;
44
+ readonly description: string | null;
45
+ readonly appType: AppType;
46
+ readonly allowedGroups: readonly string[];
47
+ readonly timeoutSeconds: number | null;
48
+ }, io: CliIo,
49
+ /**
50
+ * Test seam — override the poll cadence. Production uses the
51
+ * defaults (5s between polls, 20-min deadline). Tests pass 0ms
52
+ * to avoid 5-second sleeps tripping vitest's default 5s
53
+ * test-timeout.
54
+ */
55
+ pollOverrides?: {
56
+ readonly intervalMs?: number;
57
+ readonly sleep?: (ms: number) => Promise<void>;
58
+ }): Promise<ExitCode>;
59
+ //# sourceMappingURL=deploy-modes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy-modes.d.ts","sourceRoot":"","sources":["../../src/commands/deploy-modes.ts"],"names":[],"mappings":"AA8BA,OAAO,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AA0B3C;;;;;;;GAOG;AACH,wBAAsB,UAAU,CAC9B,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,KAAK,GACR,OAAO,CAAC,QAAQ,CAAC,CAwBnB;AAED;;;;;;;GAOG;AACH,wBAAsB,SAAS,CAC7B,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,KAAK,GACR,OAAO,CAAC,QAAQ,CAAC,CAwCnB;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,MAAM,CAC1B,IAAI,EAAE;IACJ,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1C,QAAQ,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;CACxC,EACD,EAAE,EAAE,KAAK;AACT;;;;;GAKG;AACH,aAAa,GAAE;IACb,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3C,GACL,OAAO,CAAC,QAAQ,CAAC,CAmFnB"}
@@ -0,0 +1,29 @@
1
+ import { MAX_COMPRESSED_TARBALL_BYTES } from "../deploy/tar-pack.js";
2
+ import type { Command } from "../dispatcher.js";
3
+ export declare const deployCommand: Command;
4
+ interface DeployArgs {
5
+ /** Null = infer from cwd. */
6
+ readonly slug: string | null;
7
+ readonly message: string | null;
8
+ }
9
+ /**
10
+ * Parse the deploy verb's flag set. Returns null on a malformed
11
+ * argv (so the caller can render the usage banner).
12
+ */
13
+ export declare function parseArgs(args: readonly string[]): DeployArgs | null;
14
+ /**
15
+ * Pull the `<slug>` out of a directory named `launchpad-app-<slug>`.
16
+ * Returns null for any other cwd shape.
17
+ */
18
+ export declare function inferSlugFromCwd(cwd: string): string | null;
19
+ /** Re-export for tests. */
20
+ export { MAX_COMPRESSED_TARBALL_BYTES };
21
+ /**
22
+ * Resolve the app slug from a parsed `launchpad.yaml`. Manifest v1
23
+ * carries it as `metadata.name`; manifest v2 (spec/status, the per-app
24
+ * shape) as `metadata.slug`. Accept either so `launchpad deploy` works
25
+ * against both shapes. Returns `null` when neither is a string (caller
26
+ * surfaces the error). Pure — the deploy command's testable seam (AC1).
27
+ */
28
+ export declare function resolveManifestSlug(parsed: unknown): string | null;
29
+ //# sourceMappingURL=deploy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../src/commands/deploy.ts"],"names":[],"mappings":"AA+CA,OAAO,EAGL,4BAA4B,EAC7B,MAAM,uBAAuB,CAAC;AAM/B,OAAO,KAAK,EAAS,OAAO,EAAY,MAAM,kBAAkB,CAAC;AAEjE,eAAO,MAAM,aAAa,EAAE,OAI3B,CAAC;AAEF,UAAU,UAAU;IAClB,6BAA6B;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC;AAsND;;;GAGG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,UAAU,GAAG,IAAI,CAwBpE;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAI3D;AAiED,2BAA2B;AAC3B,OAAO,EAAE,4BAA4B,EAAE,CAAC;AAYxC;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAalE"}
@@ -0,0 +1,14 @@
1
+ import type { CliIo, Command, ExitCode } from "../dispatcher.js";
2
+ /** Prompt seam — replaced in tests with a deterministic fake. */
3
+ export type PromptFn = (question: string) => Promise<string>;
4
+ export declare const destroyCommand: Command;
5
+ interface DestroyArgs {
6
+ readonly slug: string;
7
+ readonly confirmSlug: string | null;
8
+ readonly yes: boolean;
9
+ readonly json: boolean;
10
+ }
11
+ export declare function runDestroy(args: readonly string[], io: CliIo, prompt: PromptFn, isTty: () => boolean): Promise<ExitCode>;
12
+ export declare function parseArgs(args: readonly string[], cwd?: string): DestroyArgs | string;
13
+ export {};
14
+ //# sourceMappingURL=destroy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"destroy.d.ts","sourceRoot":"","sources":["../../src/commands/destroy.ts"],"names":[],"mappings":"AA+BA,OAAO,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEjE,iEAAiE;AACjE,MAAM,MAAM,QAAQ,GAAG,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;AAE7D,eAAO,MAAM,cAAc,EAAE,OAI5B,CAAC;AAEF,UAAU,WAAW;IACnB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;CACxB;AA0CD,wBAAsB,UAAU,CAC9B,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,EAAE,EAAE,KAAK,EACT,MAAM,EAAE,QAAQ,EAChB,KAAK,EAAE,MAAM,OAAO,GACnB,OAAO,CAAC,QAAQ,CAAC,CAqEnB;AAKD,wBAAgB,SAAS,CACvB,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,GAAG,GAAE,MAAsB,GAC1B,WAAW,GAAG,MAAM,CAkEtB"}
@@ -0,0 +1,28 @@
1
+ import type { CliIo, Command } from "../dispatcher.js";
2
+ import type { EnvVarEntry } from "../types/api.js";
3
+ export declare const envvarsCommand: Command;
4
+ interface ListArgs {
5
+ readonly action: "list";
6
+ readonly slug: string | null;
7
+ }
8
+ interface SetArgs {
9
+ readonly action: "set";
10
+ readonly slug: string | null;
11
+ readonly pairs: ReadonlyArray<readonly [string, string]>;
12
+ readonly secret: boolean;
13
+ }
14
+ interface RmArgs {
15
+ readonly action: "rm";
16
+ readonly slug: string | null;
17
+ readonly keys: readonly string[];
18
+ }
19
+ type EnvArgs = ListArgs | SetArgs | RmArgs;
20
+ export declare function parseArgs(args: readonly string[]): EnvArgs | null;
21
+ export declare function inferSlugFromCwd(cwd: string): string | null;
22
+ /**
23
+ * Two-column rendering: NAME + VALUE. secret_text values render as
24
+ * `•••` (the bot never returns them, so this is what we have).
25
+ */
26
+ export declare function renderList(envVars: readonly EnvVarEntry[], io: CliIo): void;
27
+ export {};
28
+ //# sourceMappingURL=envvars.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"envvars.d.ts","sourceRoot":"","sources":["../../src/commands/envvars.ts"],"names":[],"mappings":"AAiCA,OAAO,KAAK,EAAE,KAAK,EAAE,OAAO,EAAY,MAAM,kBAAkB,CAAC;AACjE,OAAO,KAAK,EACV,WAAW,EAEZ,MAAM,iBAAiB,CAAC;AAEzB,eAAO,MAAM,cAAc,EAAE,OAI5B,CAAC;AAEF,UAAU,QAAQ;IAChB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AACD,UAAU,OAAO;IACf,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACzD,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;CAC1B;AACD,UAAU,MAAM;IACd,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;CAClC;AACD,KAAK,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC;AAqH3C,wBAAgB,SAAS,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,GAAG,IAAI,CAqDjE;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAI3D;AAED;;;GAGG;AACH,wBAAgB,UAAU,CACxB,OAAO,EAAE,SAAS,WAAW,EAAE,EAC/B,EAAE,EAAE,KAAK,GACR,IAAI,CAqBN"}
@@ -0,0 +1,3 @@
1
+ import type { Command } from "../dispatcher.js";
2
+ export declare const generateCommand: Command;
3
+ //# sourceMappingURL=generate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../src/commands/generate.ts"],"names":[],"mappings":"AAsDA,OAAO,KAAK,EAAS,OAAO,EAAY,MAAM,kBAAkB,CAAC;AAGjE,eAAO,MAAM,eAAe,EAAE,OAI7B,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { CliIo, ExitCode } from "../dispatcher.js";
2
+ export declare function runGroupsWhoami(args: readonly string[], io: CliIo): Promise<ExitCode>;
3
+ //# sourceMappingURL=groups-whoami.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"groups-whoami.d.ts","sourceRoot":"","sources":["../../src/commands/groups-whoami.ts"],"names":[],"mappings":"AA4BA,OAAO,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAQxD,wBAAsB,eAAe,CACnC,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,EAAE,EAAE,KAAK,GACR,OAAO,CAAC,QAAQ,CAAC,CAwGnB"}
@@ -0,0 +1,3 @@
1
+ import type { Command } from "../dispatcher.js";
2
+ export declare const groupsCommand: Command;
3
+ //# sourceMappingURL=groups.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"groups.d.ts","sourceRoot":"","sources":["../../src/commands/groups.ts"],"names":[],"mappings":"AAoCA,OAAO,KAAK,EAAS,OAAO,EAAY,MAAM,kBAAkB,CAAC;AAMjE,eAAO,MAAM,aAAa,EAAE,OAI3B,CAAC"}
@@ -0,0 +1,44 @@
1
+ import type { CliIo, Command, ExitCode } from "../dispatcher.js";
2
+ import { type AppType, type AuthMode } from "../manifest/schema.js";
3
+ /** Required-and-optional fields the verb consumes. */
4
+ export interface InitInputs {
5
+ name: string | undefined;
6
+ team: string | undefined;
7
+ owner: string | undefined;
8
+ description: string | undefined;
9
+ type: AppType | undefined;
10
+ /**
11
+ * Edge gating mode (sp-gwdflt). Supplied via `--auth`. Undefined ⇒
12
+ * the buildManifest default: `gateway` for pages shapes, `access`
13
+ * for containers.
14
+ */
15
+ auth: AuthMode | undefined;
16
+ /**
17
+ * Allowed Entra groups. Supplied via repeated `--allowed-group`
18
+ * flags or the wizard. Always at least one entry by the time
19
+ * input validation completes.
20
+ */
21
+ groups: string[];
22
+ sessionDuration: string | undefined;
23
+ hostnames: string[];
24
+ containerImage: string | undefined;
25
+ containerPort: number | undefined;
26
+ }
27
+ export interface InitOptions {
28
+ readonly force: boolean;
29
+ readonly nonInteractive: boolean;
30
+ readonly out: string;
31
+ readonly gitignore: boolean;
32
+ /**
33
+ * Skip CWD-based app shape detection. Useful when the user knows
34
+ * their app's shape and wants to bypass the detector (e.g. an
35
+ * edge-case framework setup that doesn't fit Vite). Defaults to
36
+ * `false` so M-1216's Model A flow is the path of least resistance.
37
+ */
38
+ readonly skipDetect: boolean;
39
+ }
40
+ /** Prompt seam — replaced in tests with a deterministic fake. */
41
+ export type PromptFn = (question: string, fallback?: string) => Promise<string>;
42
+ export declare const initCommand: Command;
43
+ export declare function runInit(args: readonly string[], io: CliIo, prompt: PromptFn): Promise<ExitCode>;
44
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AA4CA,OAAO,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACjE,OAAO,EAIL,KAAK,OAAO,EACZ,KAAK,QAAQ,EACd,MAAM,uBAAuB,CAAC;AAK/B,sDAAsD;AACtD,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,IAAI,EAAE,OAAO,GAAG,SAAS,CAAC;IAC1B;;;;OAIG;IACH,IAAI,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC3B;;;;OAIG;IACH,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,eAAe,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,cAAc,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,aAAa,EAAE,MAAM,GAAG,SAAS,CAAC;CACnC;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B;;;;;OAKG;IACH,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;CAC9B;AAED,iEAAiE;AACjE,MAAM,MAAM,QAAQ,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;AAEhF,eAAO,MAAM,WAAW,EAAE,OAIzB,CAAC;AAEF,wBAAsB,OAAO,CAC3B,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,EAAE,EAAE,KAAK,EACT,MAAM,EAAE,QAAQ,GACf,OAAO,CAAC,QAAQ,CAAC,CA2HnB"}
@@ -0,0 +1,3 @@
1
+ import type { Command } from "../dispatcher.js";
2
+ export declare const loginCommand: Command;
3
+ //# sourceMappingURL=login.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAmB,MAAM,kBAAkB,CAAC;AAEjE,eAAO,MAAM,YAAY,EAAE,OAI1B,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { Command } from "../dispatcher.js";
2
+ export declare const logoutCommand: Command;
3
+ //# sourceMappingURL=logout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logout.d.ts","sourceRoot":"","sources":["../../src/commands/logout.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAmB,MAAM,kBAAkB,CAAC;AAEjE,eAAO,MAAM,aAAa,EAAE,OAI3B,CAAC"}
@@ -0,0 +1,16 @@
1
+ import type { CliIo, Command } from "../dispatcher.js";
2
+ import type { DeploymentSummary } from "../types/api.js";
3
+ export declare const logsCommand: Command;
4
+ interface LogsArgs {
5
+ readonly slug: string | null;
6
+ readonly lines: number;
7
+ }
8
+ export declare function parseArgs(args: readonly string[]): LogsArgs | null;
9
+ export declare function inferSlugFromCwd(cwd: string): string | null;
10
+ /**
11
+ * Render a list of deployments. Pulled out for testing without
12
+ * the full apiJson stack.
13
+ */
14
+ export declare function renderDeployments(deployments: readonly DeploymentSummary[], io: CliIo): void;
15
+ export {};
16
+ //# sourceMappingURL=logs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logs.d.ts","sourceRoot":"","sources":["../../src/commands/logs.ts"],"names":[],"mappings":"AA8BA,OAAO,KAAK,EAAE,KAAK,EAAE,OAAO,EAAY,MAAM,kBAAkB,CAAC;AACjE,OAAO,KAAK,EACV,iBAAiB,EAElB,MAAM,iBAAiB,CAAC;AAEzB,eAAO,MAAM,WAAW,EAAE,OAIzB,CAAC;AAEF,UAAU,QAAQ;IAChB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AA8ED,wBAAgB,SAAS,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,QAAQ,GAAG,IAAI,CA0BlE;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAI3D;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,WAAW,EAAE,SAAS,iBAAiB,EAAE,EACzC,EAAE,EAAE,KAAK,GACR,IAAI,CA+BN"}
@@ -0,0 +1,29 @@
1
+ import type { CliIo, Command } from "../dispatcher.js";
2
+ import type { BotErrorEnvelope } from "../types/api.js";
3
+ export declare const mergeCommand: Command;
4
+ interface MergeArgs {
5
+ readonly slug: string | null;
6
+ readonly prNumber: number;
7
+ }
8
+ /**
9
+ * Parse the merge verb's args. Returns null on malformed argv. The
10
+ * positional `prNumber` is mandatory; an empty argv is a usage error.
11
+ */
12
+ export declare function parseArgs(args: readonly string[]): MergeArgs | null;
13
+ export declare function inferSlugFromCwd(cwd: string): string | null;
14
+ /**
15
+ * Render the bot's structured error envelope. Pulled out so the
16
+ * test can exercise each `error` discriminator without spinning
17
+ * up the full apiRaw stack.
18
+ *
19
+ * `prNumber` is threaded through (rather than read from `env`)
20
+ * because the bot's error envelope doesn't echo the PR number —
21
+ * we already have it from the verb's argv. The review_blocked
22
+ * branch uses it to suggest a concrete `launchpad review <n>`
23
+ * follow-up, which the previous shape (interpolating `env.message`)
24
+ * couldn't do without producing garbage like `launchpad review
25
+ * "blocked"`.
26
+ */
27
+ export declare function renderBotError(status: number, env: BotErrorEnvelope | null, io: CliIo, prNumber?: number | null): void;
28
+ export {};
29
+ //# sourceMappingURL=merge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merge.d.ts","sourceRoot":"","sources":["../../src/commands/merge.ts"],"names":[],"mappings":"AAgCA,OAAO,KAAK,EAAE,KAAK,EAAE,OAAO,EAAY,MAAM,kBAAkB,CAAC;AACjE,OAAO,KAAK,EACV,gBAAgB,EAEjB,MAAM,iBAAiB,CAAC;AAEzB,eAAO,MAAM,YAAY,EAAE,OAI1B,CAAC;AAEF,UAAU,SAAS;IACjB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAwGD;;;GAGG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,GAAG,IAAI,CA8BnE;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAI3D;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,gBAAgB,GAAG,IAAI,EAC5B,EAAE,EAAE,KAAK,EACT,QAAQ,GAAE,MAAM,GAAG,IAAW,GAC7B,IAAI,CAoEN"}
@@ -0,0 +1,3 @@
1
+ import type { Command } from "../dispatcher.js";
2
+ export declare const planCommand: Command;
3
+ //# sourceMappingURL=plan.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../../src/commands/plan.ts"],"names":[],"mappings":"AAqCA,OAAO,KAAK,EAAS,OAAO,EAAY,MAAM,kBAAkB,CAAC;AAIjE,eAAO,MAAM,WAAW,EAAE,OAIzB,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { Command } from "../dispatcher.js";
2
+ export declare const pullCommand: Command;
3
+ interface PullArgs {
4
+ readonly slug: string;
5
+ readonly out: string | null;
6
+ /** `--status`: pull the role-redacted status block instead of the spec manifest. */
7
+ readonly status: boolean;
8
+ }
9
+ /** Pure arg parser. Returns parsed shape or human-readable error string. */
10
+ export declare function parseArgs(args: readonly string[], cwd?: string): PullArgs | string;
11
+ export {};
12
+ //# sourceMappingURL=pull.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pull.d.ts","sourceRoot":"","sources":["../../src/commands/pull.ts"],"names":[],"mappings":"AAgCA,OAAO,KAAK,EAAS,OAAO,EAAY,MAAM,kBAAkB,CAAC;AAEjE,eAAO,MAAM,WAAW,EAAE,OAIzB,CAAC;AAEF,UAAU,QAAQ;IAChB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,oFAAoF;IACpF,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;CAC1B;AAmGD,4EAA4E;AAC5E,wBAAgB,SAAS,CACvB,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,GAAG,GAAE,MAAsB,GAC1B,QAAQ,GAAG,MAAM,CA2DnB"}
@@ -0,0 +1,22 @@
1
+ import type { CliIo, Command } from "../dispatcher.js";
2
+ import type { ReviewResponse } from "../types/api.js";
3
+ export declare const reviewCommand: Command;
4
+ interface ReviewArgs {
5
+ readonly slug: string | null;
6
+ /** null → fall back to the newest open PR via /apps/<slug>/prs. */
7
+ readonly prNumber: number | null;
8
+ }
9
+ /**
10
+ * Parse the review verb's args. Returns null on malformed argv so
11
+ * the caller can render the usage banner.
12
+ */
13
+ export declare function parseArgs(args: readonly string[]): ReviewArgs | null;
14
+ export declare function inferSlugFromCwd(cwd: string): string | null;
15
+ /**
16
+ * Render the ReviewResponse to stdout. Pulled out so the test
17
+ * can exercise the formatter directly without spinning up the
18
+ * full apiJson stack.
19
+ */
20
+ export declare function renderReview(r: ReviewResponse, io: CliIo): void;
21
+ export {};
22
+ //# sourceMappingURL=review.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review.d.ts","sourceRoot":"","sources":["../../src/commands/review.ts"],"names":[],"mappings":"AAgCA,OAAO,KAAK,EAAE,KAAK,EAAE,OAAO,EAAY,MAAM,kBAAkB,CAAC;AACjE,OAAO,KAAK,EAEV,cAAc,EAEf,MAAM,iBAAiB,CAAC;AAEzB,eAAO,MAAM,aAAa,EAAE,OAI3B,CAAC;AAEF,UAAU,UAAU;IAClB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,mEAAmE;IACnE,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CAClC;AAyFD;;;GAGG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,UAAU,GAAG,IAAI,CA4BpE;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAI3D;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,cAAc,EAAE,EAAE,EAAE,KAAK,GAAG,IAAI,CA4B/D"}
@@ -0,0 +1,3 @@
1
+ import type { Command } from "../dispatcher.js";
2
+ export declare const rollbackCommand: Command;
3
+ //# sourceMappingURL=rollback.d.ts.map