@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.
- package/CHANGELOG.md +854 -0
- package/README.md +109 -0
- package/dist/auth/browser.d.ts +18 -0
- package/dist/auth/browser.d.ts.map +1 -0
- package/dist/auth/callback-server.d.ts +24 -0
- package/dist/auth/callback-server.d.ts.map +1 -0
- package/dist/auth/discovery.d.ts +25 -0
- package/dist/auth/discovery.d.ts.map +1 -0
- package/dist/auth/flow.d.ts +39 -0
- package/dist/auth/flow.d.ts.map +1 -0
- package/dist/auth/jwt.d.ts +27 -0
- package/dist/auth/jwt.d.ts.map +1 -0
- package/dist/auth/pkce.d.ts +26 -0
- package/dist/auth/pkce.d.ts.map +1 -0
- package/dist/auth/registration.d.ts +8 -0
- package/dist/auth/registration.d.ts.map +1 -0
- package/dist/auth/session.d.ts +54 -0
- package/dist/auth/session.d.ts.map +1 -0
- package/dist/auth/token.d.ts +37 -0
- package/dist/auth/token.d.ts.map +1 -0
- package/dist/bundle/cron-bundle.d.ts +77 -0
- package/dist/bundle/cron-bundle.d.ts.map +1 -0
- package/dist/bundle/cwd-walker.d.ts +43 -0
- package/dist/bundle/cwd-walker.d.ts.map +1 -0
- package/dist/bundle/orchestrate.d.ts +51 -0
- package/dist/bundle/orchestrate.d.ts.map +1 -0
- package/dist/bundle/upload.d.ts +66 -0
- package/dist/bundle/upload.d.ts.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +9757 -0
- package/dist/clone/git-init.d.ts +18 -0
- package/dist/clone/git-init.d.ts.map +1 -0
- package/dist/clone/tar-extract.d.ts +59 -0
- package/dist/clone/tar-extract.d.ts.map +1 -0
- package/dist/commands/apps.d.ts +14 -0
- package/dist/commands/apps.d.ts.map +1 -0
- package/dist/commands/channel-auth.d.ts +31 -0
- package/dist/commands/channel-auth.d.ts.map +1 -0
- package/dist/commands/clone.d.ts +3 -0
- package/dist/commands/clone.d.ts.map +1 -0
- package/dist/commands/create.d.ts +27 -0
- package/dist/commands/create.d.ts.map +1 -0
- package/dist/commands/deploy-flags.d.ts +75 -0
- package/dist/commands/deploy-flags.d.ts.map +1 -0
- package/dist/commands/deploy-modes.d.ts +59 -0
- package/dist/commands/deploy-modes.d.ts.map +1 -0
- package/dist/commands/deploy.d.ts +29 -0
- package/dist/commands/deploy.d.ts.map +1 -0
- package/dist/commands/destroy.d.ts +14 -0
- package/dist/commands/destroy.d.ts.map +1 -0
- package/dist/commands/envvars.d.ts +28 -0
- package/dist/commands/envvars.d.ts.map +1 -0
- package/dist/commands/generate.d.ts +3 -0
- package/dist/commands/generate.d.ts.map +1 -0
- package/dist/commands/groups-whoami.d.ts +3 -0
- package/dist/commands/groups-whoami.d.ts.map +1 -0
- package/dist/commands/groups.d.ts +3 -0
- package/dist/commands/groups.d.ts.map +1 -0
- package/dist/commands/init.d.ts +44 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/login.d.ts +3 -0
- package/dist/commands/login.d.ts.map +1 -0
- package/dist/commands/logout.d.ts +3 -0
- package/dist/commands/logout.d.ts.map +1 -0
- package/dist/commands/logs.d.ts +16 -0
- package/dist/commands/logs.d.ts.map +1 -0
- package/dist/commands/merge.d.ts +29 -0
- package/dist/commands/merge.d.ts.map +1 -0
- package/dist/commands/plan.d.ts +3 -0
- package/dist/commands/plan.d.ts.map +1 -0
- package/dist/commands/pull.d.ts +12 -0
- package/dist/commands/pull.d.ts.map +1 -0
- package/dist/commands/review.d.ts +22 -0
- package/dist/commands/review.d.ts.map +1 -0
- package/dist/commands/rollback.d.ts +3 -0
- package/dist/commands/rollback.d.ts.map +1 -0
- package/dist/commands/secrets-template.d.ts +3 -0
- package/dist/commands/secrets-template.d.ts.map +1 -0
- package/dist/commands/secrets.d.ts +3 -0
- package/dist/commands/secrets.d.ts.map +1 -0
- package/dist/commands/skills.d.ts +13 -0
- package/dist/commands/skills.d.ts.map +1 -0
- package/dist/commands/status.d.ts +54 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/update.d.ts +114 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/validate.d.ts +3 -0
- package/dist/commands/validate.d.ts.map +1 -0
- package/dist/commands/whoami.d.ts +3 -0
- package/dist/commands/whoami.d.ts.map +1 -0
- package/dist/config.d.ts +11 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/deploy/apply.d.ts +29 -0
- package/dist/deploy/apply.d.ts.map +1 -0
- package/dist/deploy/dry-run.d.ts +13 -0
- package/dist/deploy/dry-run.d.ts.map +1 -0
- package/dist/deploy/git-files.d.ts +33 -0
- package/dist/deploy/git-files.d.ts.map +1 -0
- package/dist/deploy/group-pin.d.ts +66 -0
- package/dist/deploy/group-pin.d.ts.map +1 -0
- package/dist/deploy/manifest-state.d.ts +20 -0
- package/dist/deploy/manifest-state.d.ts.map +1 -0
- package/dist/deploy/manifest-status.d.ts +11 -0
- package/dist/deploy/manifest-status.d.ts.map +1 -0
- package/dist/deploy/resolve.d.ts +53 -0
- package/dist/deploy/resolve.d.ts.map +1 -0
- package/dist/deploy/rollback.d.ts +23 -0
- package/dist/deploy/rollback.d.ts.map +1 -0
- package/dist/deploy/runner.d.ts +29 -0
- package/dist/deploy/runner.d.ts.map +1 -0
- package/dist/deploy/stage-exit-codes.d.ts +41 -0
- package/dist/deploy/stage-exit-codes.d.ts.map +1 -0
- package/dist/deploy/status-polling.d.ts +37 -0
- package/dist/deploy/status-polling.d.ts.map +1 -0
- package/dist/deploy/tar-pack.d.ts +22 -0
- package/dist/deploy/tar-pack.d.ts.map +1 -0
- package/dist/detect/index.d.ts +53 -0
- package/dist/detect/index.d.ts.map +1 -0
- package/dist/dispatcher.d.ts +30 -0
- package/dist/dispatcher.d.ts.map +1 -0
- package/dist/groups/client.d.ts +62 -0
- package/dist/groups/client.d.ts.map +1 -0
- package/dist/http/api-client.d.ts +33 -0
- package/dist/http/api-client.d.ts.map +1 -0
- package/dist/http/errors.d.ts +31 -0
- package/dist/http/errors.d.ts.map +1 -0
- package/dist/manifest/load.d.ts +38 -0
- package/dist/manifest/load.d.ts.map +1 -0
- package/dist/manifest/schema.d.ts +3 -0
- package/dist/manifest/schema.d.ts.map +1 -0
- package/dist/postinstall.d.ts +3 -0
- package/dist/postinstall.d.ts.map +1 -0
- package/dist/postinstall.js +37 -0
- package/dist/secrets/env-parse.d.ts +19 -0
- package/dist/secrets/env-parse.d.ts.map +1 -0
- package/dist/secrets/push.d.ts +13 -0
- package/dist/secrets/push.d.ts.map +1 -0
- package/dist/secrets/set.d.ts +19 -0
- package/dist/secrets/set.d.ts.map +1 -0
- package/dist/secrets/status.d.ts +19 -0
- package/dist/secrets/status.d.ts.map +1 -0
- package/dist/types/api.d.ts +112 -0
- package/dist/types/api.d.ts.map +1 -0
- package/dist/update-notifier.d.ts +69 -0
- package/dist/update-notifier.d.ts.map +1 -0
- package/dist/version.d.ts +2 -0
- package/dist/version.d.ts.map +1 -0
- package/package.json +62 -0
- package/skills/README.md +100 -0
- package/skills/_partials/shell-contract.md +42 -0
- package/skills/launchpad-content-pr/SKILL.md +255 -0
- package/skills/launchpad-deploy/SKILL.md +415 -0
- package/skills/launchpad-deploy-status/SKILL.md +231 -0
- package/skills/launchpad-destroy/SKILL.md +317 -0
- package/skills/launchpad-onboard/SKILL.md +179 -0
- package/skills/launchpad-status/SKILL.md +263 -0
- package/skills/marquee-share/README.md +155 -0
- package/skills/marquee-share/SKILL.md +94 -0
- package/skills/marquee-share/SYNC.md +27 -0
- package/skills/marquee-share/dist/cli.js +896 -0
- package/skills/marquee-share/eslint.config.mjs +71 -0
- package/skills/marquee-share/install.sh +103 -0
- package/skills/marquee-share/package-lock.json +3946 -0
- package/skills/marquee-share/package.json +30 -0
- package/skills/marquee-share/src/auth/PROVENANCE.md +103 -0
- package/skills/marquee-share/src/auth/browser.ts +75 -0
- package/skills/marquee-share/src/auth/callback-server.ts +171 -0
- package/skills/marquee-share/src/auth/discovery.ts +171 -0
- package/skills/marquee-share/src/auth/flow.ts +262 -0
- package/skills/marquee-share/src/auth/index.ts +171 -0
- package/skills/marquee-share/src/auth/jwt.ts +77 -0
- package/skills/marquee-share/src/auth/pkce.ts +79 -0
- package/skills/marquee-share/src/auth/registration.ts +87 -0
- package/skills/marquee-share/src/auth/session.ts +205 -0
- package/skills/marquee-share/src/auth/token.ts +162 -0
- package/skills/marquee-share/src/cli.ts +246 -0
- package/skills/marquee-share/src/config.ts +101 -0
- package/skills/marquee-share/src/render/template.ts +171 -0
- package/skills/marquee-share/src/upload/index.ts +11 -0
- package/skills/marquee-share/src/upload/upload.ts +191 -0
- package/skills/marquee-share/tests/cli.test.ts +281 -0
- package/skills/marquee-share/tests/config.test.ts +119 -0
- package/skills/marquee-share/tests/flow.test.ts +356 -0
- package/skills/marquee-share/tests/no-token-leak.test.ts +240 -0
- package/skills/marquee-share/tests/pkce.test.ts +121 -0
- package/skills/marquee-share/tests/session.test.ts +173 -0
- package/skills/marquee-share/tests/template.test.ts +170 -0
- package/skills/marquee-share/tests/upload.test.ts +311 -0
- package/skills/marquee-share/tsconfig.json +23 -0
- 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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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"}
|