@drip-apex/apex-cli 0.8.1 → 0.9.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 (3) hide show
  1. package/README.md +15 -0
  2. package/dist/cli.js +10 -5
  3. package/package.json +1 -1
package/README.md CHANGED
@@ -313,3 +313,18 @@ Create/get return `dashboard_url`; apply returns `dashboardUrl`. These links
313
313
  switch the signed-in dashboard user's active shop before opening the experiment.
314
314
 
315
315
  Filesystem apply caches uploaded asset URLs by byte SHA-256 in `.apex/experiment-filesystem.json`, so unchanged images reuse their URL across applies without rewriting authored files.
316
+
317
+ `--instructions` cannot be combined with `--out` (or its legacy alias `--output`); file exports always contain the full JSON contract.
318
+
319
+ Roadmap handoff JSON identifies itself as `apex.roadmap_handoff.v1`; backlog get/list
320
+ items identify themselves as `apex.backlog_item.v1`, both with `schema_version: 1`.
321
+ The handoff embeds the same closed item projection that backlog responses serve
322
+ alongside their existing raw fields. Published schemas and fixtures live in
323
+ [`docs/contracts/experiment-os`](../../docs/contracts/experiment-os/README.md).
324
+ Breaking changes require a new v2 contract; the backlog `version` is a separate
325
+ optimistic concurrency token.
326
+
327
+ | Key | Source |
328
+ | --- | --- |
329
+ | `approval` | Roadmap decision status (`proposed` without a decision), item stage, and decision's nullable `decided_at`. Top-level `status` remains the item lifecycle status. |
330
+ | `goals` | `apex_goal_id` is the linked experiment goal or null. |
package/dist/cli.js CHANGED
@@ -7112,7 +7112,7 @@ var import_node_os3 = __toESM(require("node:os"));
7112
7112
  // package.json
7113
7113
  var package_default = {
7114
7114
  name: "@drip-apex/apex-cli",
7115
- version: "0.8.1",
7115
+ version: "0.9.0",
7116
7116
  license: "MIT",
7117
7117
  description: "Apex CLI for managing experiments, approved roadmap ideas, and draft workspaces.",
7118
7118
  private: false,
@@ -12790,7 +12790,11 @@ More results: --cursor ${res.data.pagination.next_cursor}`));
12790
12790
  }
12791
12791
  );
12792
12792
  });
12793
- var handoff = new Command("handoff").description("Get the full build brief for an approved roadmap item").argument("<id>", "Roadmap/backlog item ID").option("--out <path>", "Write handoff JSON to a file").addOption(new Option("-o, --output <path>", "Legacy alias for --out").hideHelp()).option("--instructions", "Print only the build instructions").action(async function action32(id, opts) {
12793
+ var handoff = new Command("handoff").description(
12794
+ "Get apex.roadmap_handoff.v1 JSON: contract, schema_version, item, experiment, instructions, goals, mockups, acceptance_criteria, harness, scoring, source, metadata"
12795
+ ).argument("<id>", "Roadmap/backlog item ID").option("--out <path>", "Write handoff JSON to a file").addOption(new Option("-o, --output <path>", "Legacy alias for --out").hideHelp()).addOption(
12796
+ new Option("--instructions", "Print only the build instructions").conflicts(["out", "output"])
12797
+ ).action(async function action32(id, opts) {
12794
12798
  if (opts.output !== void 0) {
12795
12799
  process.stderr.write(
12796
12800
  `Warning: --output is deprecated for apex roadmap handoff; use --out instead. --output will be removed in v${LEGACY_OUTPUT_REMOVAL_VERSION}.
@@ -12811,7 +12815,8 @@ var handoff = new Command("handoff").description("Get the full build brief for a
12811
12815
  classifyStatus(res.status),
12812
12816
  res.errorDetails
12813
12817
  );
12814
- const payload = res.data ?? {};
12818
+ const payload = res.data;
12819
+ if (!payload) fail(this, "Missing roadmap handoff response");
12815
12820
  const rendered = opts.instructions ? String(payload.instructions ?? "") : `${JSON.stringify(payload, null, 2)}
12816
12821
  `;
12817
12822
  const outputData = opts.instructions ? { roadmapItemId: id, instructions: String(payload.instructions ?? "") } : payload;
@@ -17011,7 +17016,7 @@ async function fieldLabels(command, item) {
17011
17016
  (fields3.ok && fields3.data ? fields3.data.data : []).map((field) => [field.key, field.label])
17012
17017
  );
17013
17018
  }
17014
- var list7 = new Command("list").alias("ls").description("List backlog").option("-n, --limit <n>", "Max results", "50").option("--cursor <cursor>", "Continue from cursor").option("--include-archived", "Include archived backlog items").action(async function(o) {
17019
+ var list7 = new Command("list").alias("ls").description("List backlog items identified as apex.backlog_item.v1").option("-n, --limit <n>", "Max results", "50").option("--cursor <cursor>", "Continue from cursor").option("--include-archived", "Include archived backlog items").action(async function(o) {
17015
17020
  const r = await listInsights(
17016
17021
  requireCredentials(),
17017
17022
  kind2,
@@ -17035,7 +17040,7 @@ var list7 = new Command("list").alias("ls").description("List backlog").option("
17035
17040
  )
17036
17041
  );
17037
17042
  });
17038
- var get6 = new Command("get").description("Get a backlog item").argument("<id>", "backlog item ID").action(async function(id) {
17043
+ var get6 = new Command("get").description("Get a backlog item identified as apex.backlog_item.v1").argument("<id>", "backlog item ID").action(async function(id) {
17039
17044
  const r = await getInsight(requireCredentials(), kind2, id);
17040
17045
  if (!r.ok || !r.data)
17041
17046
  fail(this, r.error ?? "Failed to get", classifyStatus(r.status), r.errorDetails);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@drip-apex/apex-cli",
3
- "version": "0.8.1",
3
+ "version": "0.9.0",
4
4
  "license": "MIT",
5
5
  "description": "Apex CLI for managing experiments, approved roadmap ideas, and draft workspaces.",
6
6
  "private": false,