@m-kopa/launchpad-cli 0.27.1 → 0.27.2
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 +8 -0
- package/dist/cli.js +48 -3
- package/dist/version.d.ts +1 -1
- package/package.json +1 -1
- package/skills/launchpad-content-pr/SKILL.md +1 -1
- package/skills/launchpad-deploy/SKILL.md +1 -1
- package/skills/launchpad-deploy-status/SKILL.md +1 -1
- package/skills/launchpad-destroy/SKILL.md +1 -1
- package/skills/launchpad-onboard/SKILL.md +1 -1
- package/skills/launchpad-status/SKILL.md +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,14 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
|
|
|
6
6
|
This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html);
|
|
7
7
|
pre-1.0 minor bumps may carry breaking changes per ADR 0005.
|
|
8
8
|
|
|
9
|
+
## 0.27.2 — 2026-06-15
|
|
10
|
+
|
|
11
|
+
Fix: `launchpad login --help` and `launchpad logout --help` (and `-h`)
|
|
12
|
+
now print usage and exit without side effects. Previously both verbs
|
|
13
|
+
ignored their arguments and ran the real flow, so asking for help
|
|
14
|
+
actually signed you in / revoked + cleared your session. The flags are
|
|
15
|
+
now documented on each command's docs page.
|
|
16
|
+
|
|
9
17
|
## 0.27.1 — 2026-06-12
|
|
10
18
|
|
|
11
19
|
Bundled-skills refresh (sp-s4k9wm) — no CLI code changes. Every
|
package/dist/cli.js
CHANGED
|
@@ -19,7 +19,7 @@ var __toESM = (mod, isNodeMode, target) => {
|
|
|
19
19
|
var __require = /* @__PURE__ */ createRequire(import.meta.url);
|
|
20
20
|
|
|
21
21
|
// src/version.ts
|
|
22
|
-
var CLI_VERSION = "0.27.
|
|
22
|
+
var CLI_VERSION = "0.27.2";
|
|
23
23
|
|
|
24
24
|
// src/config.ts
|
|
25
25
|
import * as os from "node:os";
|
|
@@ -6724,7 +6724,11 @@ function makeLoginCommand(deps = REAL_DEPS) {
|
|
|
6724
6724
|
run: (args, io) => runLogin(args, io, deps)
|
|
6725
6725
|
};
|
|
6726
6726
|
}
|
|
6727
|
-
async function runLogin(
|
|
6727
|
+
async function runLogin(args, io, deps) {
|
|
6728
|
+
if (args.includes("--help") || args.includes("-h")) {
|
|
6729
|
+
printLoginHelp(io);
|
|
6730
|
+
return 0;
|
|
6731
|
+
}
|
|
6728
6732
|
try {
|
|
6729
6733
|
const cfg = loadConfig();
|
|
6730
6734
|
if (cfg.authLegacy) {
|
|
@@ -6775,6 +6779,27 @@ async function runLegacyLogin(io, botUrl, sessionPath, deps) {
|
|
|
6775
6779
|
io.out(`Access token expires in ~${expiresIn}s; refreshes silently.`);
|
|
6776
6780
|
return 0;
|
|
6777
6781
|
}
|
|
6782
|
+
function printLoginHelp(io) {
|
|
6783
|
+
io.out("launchpad login — authenticate and store a session.");
|
|
6784
|
+
io.out("");
|
|
6785
|
+
io.out("Usage:");
|
|
6786
|
+
io.out(" launchpad login Sign in via the browser and store a session");
|
|
6787
|
+
io.out("");
|
|
6788
|
+
io.out("Opens your browser to sign in with your M-KOPA Microsoft account");
|
|
6789
|
+
io.out("through the Launchpad auth gateway (loopback PKCE), then writes the");
|
|
6790
|
+
io.out("session to ~/.launchpad/session.json. The short-lived access token");
|
|
6791
|
+
io.out("refreshes silently as you use the CLI.");
|
|
6792
|
+
io.out("");
|
|
6793
|
+
io.out("Environment:");
|
|
6794
|
+
io.out(" LAUNCHPAD_AUTH_LEGACY=1 Force the legacy Cloudflare Access flow");
|
|
6795
|
+
io.out(" (deprecated; removed when the dual-auth");
|
|
6796
|
+
io.out(" window closes)");
|
|
6797
|
+
io.out(" LAUNCHPAD_AUTH_GATEWAY_URL Override the gateway base URL (testing)");
|
|
6798
|
+
io.out("");
|
|
6799
|
+
io.out("Exit codes:");
|
|
6800
|
+
io.out(" 0 signed in / session stored");
|
|
6801
|
+
io.out(" 1 login failed (network, browser, or gateway error)");
|
|
6802
|
+
}
|
|
6778
6803
|
function describe19(e) {
|
|
6779
6804
|
return e instanceof Error ? e.message : String(e);
|
|
6780
6805
|
}
|
|
@@ -6789,7 +6814,11 @@ function makeLogoutCommand(deps = REAL_DEPS2) {
|
|
|
6789
6814
|
run: (args, io) => runLogout(args, io, deps)
|
|
6790
6815
|
};
|
|
6791
6816
|
}
|
|
6792
|
-
async function runLogout(
|
|
6817
|
+
async function runLogout(args, io, deps) {
|
|
6818
|
+
if (args.includes("--help") || args.includes("-h")) {
|
|
6819
|
+
printLogoutHelp(io);
|
|
6820
|
+
return 0;
|
|
6821
|
+
}
|
|
6793
6822
|
try {
|
|
6794
6823
|
const cfg = loadConfig();
|
|
6795
6824
|
let session = null;
|
|
@@ -6819,6 +6848,22 @@ async function runLogout(_args, io, deps) {
|
|
|
6819
6848
|
return 1;
|
|
6820
6849
|
}
|
|
6821
6850
|
}
|
|
6851
|
+
function printLogoutHelp(io) {
|
|
6852
|
+
io.out("launchpad logout — revoke the session server-side and clear it locally.");
|
|
6853
|
+
io.out("");
|
|
6854
|
+
io.out("Usage:");
|
|
6855
|
+
io.out(" launchpad logout Revoke server-side, then clear the local session");
|
|
6856
|
+
io.out("");
|
|
6857
|
+
io.out("Gateway (v2) sessions are revoked server-side (the refresh token dies");
|
|
6858
|
+
io.out("immediately; any in-flight access token expires within ~15 minutes),");
|
|
6859
|
+
io.out("then the local ~/.launchpad/session.json is cleared. Logout also works");
|
|
6860
|
+
io.out("offline: if the gateway is unreachable the local session is cleared");
|
|
6861
|
+
io.out("anyway with a warning, and the exit code stays 0.");
|
|
6862
|
+
io.out("");
|
|
6863
|
+
io.out("Exit codes:");
|
|
6864
|
+
io.out(" 0 logged out (or already logged out)");
|
|
6865
|
+
io.out(" 1 could not clear the local session (file IO / config error)");
|
|
6866
|
+
}
|
|
6822
6867
|
function describe20(e) {
|
|
6823
6868
|
return e instanceof Error ? e.message : String(e);
|
|
6824
6869
|
}
|
package/dist/version.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const CLI_VERSION = "0.27.
|
|
1
|
+
export declare const CLI_VERSION = "0.27.2";
|
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: launchpad-content-pr
|
|
3
3
|
description: Push a content change to a Launchpad app via `launchpad deploy` and verify it shipped via `launchpad status`. Covers the post-first-deploy iteration loop (edit → deploy → verify) — subsequent deploys commit directly to the app repo's main and the Pages build runs asynchronously, so verification is its own step. Use when someone says "push a content change", "ship an update", "/launchpad-content-pr", "verify my deploy", or after `/launchpad-deploy` reports `done` and they want to follow up with an edit.
|
|
4
|
-
version: 0.27.
|
|
4
|
+
version: 0.27.2
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
<!-- BEGIN shell-contract (managed by scripts/sync-skill-contract.sh — edit skills/_partials/shell-contract.md) -->
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: launchpad-deploy
|
|
3
3
|
description: Walk a Launchpad user through deploying an app from their local working directory (Model A — `launchpad init` + `launchpad deploy`). Wraps the CLI verbs end-to-end: detects the app shape, scaffolds `launchpad.yaml`, resolves the allowed Entra group via `launchpad groups`, bundles the CWD via `launchpad deploy`, and watches the rollout via `launchpad status`. Use when someone says "deploy a new app", "ship my app to Launchpad", "/launchpad-deploy", "I have an app locally — get it on Launchpad", or any variant. Resume/abandon for legacy in-flight provisioning is at the bottom.
|
|
4
|
-
version: 0.27.
|
|
4
|
+
version: 0.27.2
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
<!-- BEGIN shell-contract (managed by scripts/sync-skill-contract.sh — edit skills/_partials/shell-contract.md) -->
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: launchpad-deploy-status
|
|
3
3
|
description: Show the current provisioning stage + failure reason for a Launchpad app via `launchpad status` (Model A drift + deployment_verified) and `launchpad apps` (lifecycle bucket). Renders the M-892 stage trace for in-flight provisioning, and is the canonical home for `launchpad recover` (repair a terminal-failed app record that is actually live). Use when someone says "what's the status of demo-X", "/launchpad-deploy-status", "is my deploy stuck", "my app says failed but it's serving", or after `/launchpad-deploy` reports a non-`done` terminal stage.
|
|
4
|
-
version: 0.27.
|
|
4
|
+
version: 0.27.2
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
<!-- BEGIN shell-contract (managed by scripts/sync-skill-contract.sh — edit skills/_partials/shell-contract.md) -->
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: launchpad-destroy
|
|
3
3
|
description: Tear down a Launchpad app end-to-end via `launchpad destroy` — Cloudflare Pages project, edge-auth wiring (gateway KV/audience entries, or the Access app for `auth: access` apps), custom hostname, platform-repo TF, and the app repo (archive-renamed). Owner-only verb with a two-step destructive confirmation. Use when someone says "destroy this app", "/launchpad-destroy", "tear down `<slug>`", "delete the app", or asks to clean up a smoke-test / orphan / retired app.
|
|
4
|
-
version: 0.27.
|
|
4
|
+
version: 0.27.2
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
<!-- BEGIN shell-contract (managed by scripts/sync-skill-contract.sh — edit skills/_partials/shell-contract.md) -->
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: launchpad-onboard
|
|
3
3
|
description: One-time setup for the Launchpad CLI + Claude Code skill bundle. Verifies the `launchpad` CLI is installed and current, runs `launchpad whoami` to confirm the session is fresh, and checks the bundled skills are installed and in lock-step with the CLI. Idempotent — safe to re-run any time. Use when someone says "set me up for Launchpad", "I just got a new machine and want to use Launchpad", "/launchpad-onboard", or any of the other launchpad-* skills fails on a prereq check.
|
|
4
|
-
version: 0.27.
|
|
4
|
+
version: 0.27.2
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
<!-- BEGIN shell-contract (managed by scripts/sync-skill-contract.sh — edit skills/_partials/shell-contract.md) -->
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: launchpad-status
|
|
3
3
|
description: Show whether a Launchpad app's local launchpad.yaml matches what's deployed, and read the deployed manifest. Wraps `launchpad pull` (fetch deployed YAML) and `launchpad status` (drift report). Use when someone says "is my app in sync", "what's deployed", "show drift", "/launchpad-status", "/launchpad-pull", or after `launchpad deploy` to verify the change landed.
|
|
4
|
-
version: 0.27.
|
|
4
|
+
version: 0.27.2
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
<!-- BEGIN shell-contract (managed by scripts/sync-skill-contract.sh — edit skills/_partials/shell-contract.md) -->
|