@mediamonks/canopy-cli 0.7.13 → 0.7.14

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.
@@ -37,11 +37,15 @@ machine-readable output.
37
37
  URL, deploy version, console errors — or CLI context), the screenshots on
38
38
  the report, and the comment trail. `--download` saves the screenshots into
39
39
  a directory so you can actually look at them.
40
- - `comment <id> <text>` — append a comment (findings, questions, updates).
41
- - `attach <id> <file> [--attach <more>] [--caption <text>] [--comment <text>]` —
40
+ - `comment <id> <text> [--internal]` — append a comment (findings, questions,
41
+ updates). `--internal` (members only) keeps the note off the reporter's
42
+ view — for stack traces, table names, and other working detail that would
43
+ only confuse them.
44
+ - `attach <id> <file> [--attach <more>] [--caption <text>] [--comment <text>] [--internal]` —
42
45
  add screenshots to an existing report. With `--comment`, the comment is
43
46
  posted first and the screenshots hang off that trail entry — how you show
44
- "here's what it looks like after the fix".
47
+ "here's what it looks like after the fix". `--internal` makes that comment a
48
+ members-only note, screenshots included.
45
49
  - `status <id> <new-status> [--comment <note>]` — move the ticket; the
46
50
  transition is recorded on the trail. Moving to `investigated` needs the
47
51
  findings: pass `--comment`, or comment first.
@@ -65,6 +69,12 @@ yet. Reproduce with the context in `show` (including the deploy version that
65
69
  served the page), then `status <id> investigated --comment "<what you found>"`.
66
70
  Stop there — say what it would take to fix and let the person decide.
67
71
 
72
+ Split your findings by audience: the status comment is what the **reporter**
73
+ reads, so keep it plain ("the upload fails for files over 5 MB — looking into
74
+ it"). The tech-loaded version — stack traces, table names, reproduction
75
+ queries — goes in `comment <id> "<detail>" --internal`, which only project
76
+ members see. An internal note counts as findings for `investigated`.
77
+
68
78
  **Build:** `list --status accepted` is what a person has asked for. Do the
69
79
  work, then `resolve` with a note, or `declined` if it turns out to be a bad
70
80
  idea. Set `accepted` yourself only when the person you are working with told
@@ -65,6 +65,11 @@ Project members triage reports on the **Feedback tab**:
65
65
  - The order is a suggestion, not a track. Accept something straight away, skip
66
66
  the investigation, or decline it at any point.
67
67
  - Every status change and comment is recorded on the item's trail.
68
+ - A comment can be marked **internal** (the toggle next to the comment box):
69
+ visible to project members and admins only, never the reporter. That's the
70
+ place for stack traces, query plans, and other working notes that would only
71
+ confuse the person who filed the report — screenshots attached to an
72
+ internal note stay internal too.
68
73
  - Reporters follow their submissions on the **Reports page** (dashboard
69
74
  header) and can comment on or withdraw their own items; only project
70
75
  members change statuses.
@@ -1,4 +1,4 @@
1
- import { t as version } from "./package-vJXq4RNN.mjs";
1
+ import { t as version } from "./package-CuyFMXam.mjs";
2
2
  import { n as siteConfig } from "./site-BUlQR117.mjs";
3
3
  import { i as latestKnownVersion, r as compareSemver } from "./version-check-CcsA1QjI.mjs";
4
4
  import { n as reportErrors } from "./ui-B1Px5y7q.mjs";
@@ -1,4 +1,4 @@
1
- import { t as version } from "./package-vJXq4RNN.mjs";
1
+ import { t as version } from "./package-CuyFMXam.mjs";
2
2
  import { a as projectDirArgs, c as resolveProject, n as siteConfig, u as tryReadCanopyJson } from "./site-BUlQR117.mjs";
3
3
  import { c as apiRequest, l as apiUpload, n as reportErrors, s as apiDownload } from "./ui-B1Px5y7q.mjs";
4
4
  import { defineCommand } from "citty";
@@ -165,7 +165,8 @@ const showCommand = defineCommand({
165
165
  for (const entry of comments) {
166
166
  const author = entry.author_name || entry.author_email || "unknown";
167
167
  const move = entry.status_to ? ` [${entry.status_from} → ${entry.status_to}]` : "";
168
- console.log(`--- ${author} · ${entry.created_at}${move}`);
168
+ const internal = entry.internal ? " [internal]" : "";
169
+ console.log(`--- ${author} · ${entry.created_at}${move}${internal}`);
169
170
  if (entry.body) console.log(entry.body);
170
171
  }
171
172
  if (args.download && shots.length > 0) {
@@ -196,12 +197,19 @@ const commentCommand = defineCommand({
196
197
  description: "Comment text",
197
198
  required: true
198
199
  },
200
+ internal: {
201
+ type: "boolean",
202
+ description: "Triager-only note, hidden from the reporter — for tech detail (stack traces, table names) that would only confuse them (members only)"
203
+ },
199
204
  ...projectDirArgs
200
205
  },
201
206
  run: reportErrors("feedback comment", async ({ args }) => {
202
207
  const { slug } = resolveProject(args);
203
- await apiRequest("POST", `/projects/${slug}/feedback/${encodeURIComponent(args.id)}/comments`, { body: args.text });
204
- console.log("Comment added.");
208
+ await apiRequest("POST", `/projects/${slug}/feedback/${encodeURIComponent(args.id)}/comments`, {
209
+ body: args.text,
210
+ ...args.internal ? { internal: true } : {}
211
+ });
212
+ console.log(args.internal ? "Internal note added (hidden from the reporter)." : "Comment added.");
205
213
  })
206
214
  });
207
215
  const statusCommand = defineCommand({
@@ -366,17 +374,28 @@ const feedbackCommand = defineCommand({
366
374
  type: "string",
367
375
  description: "Post this comment first and hang the screenshots off it"
368
376
  },
377
+ internal: {
378
+ type: "boolean",
379
+ description: "Make the --comment a triager-only note; its screenshots are hidden from the reporter too (members only)"
380
+ },
369
381
  ...projectDirArgs
370
382
  },
371
383
  run: reportErrors("feedback attach", async ({ args }) => {
372
384
  const { slug } = resolveProject(args);
373
385
  const paths = [args.file, ...attachedPaths(args.attach)];
374
386
  for (const path of paths) await readFile(path);
387
+ if (args.internal && !args.comment) {
388
+ console.error("--internal needs a --comment to hang the screenshots off.");
389
+ process.exit(1);
390
+ }
375
391
  let commentId;
376
392
  if (args.comment) {
377
- const { comment } = await apiRequest("POST", `/projects/${slug}/feedback/${encodeURIComponent(args.id)}/comments`, { body: args.comment });
393
+ const { comment } = await apiRequest("POST", `/projects/${slug}/feedback/${encodeURIComponent(args.id)}/comments`, {
394
+ body: args.comment,
395
+ ...args.internal ? { internal: true } : {}
396
+ });
378
397
  commentId = comment.id;
379
- console.log("Comment added.");
398
+ console.log(args.internal ? "Internal note added (hidden from the reporter)." : "Comment added.");
380
399
  }
381
400
  await attachFiles(slug, args.id, paths, args.caption, commentId);
382
401
  })
package/dist/index.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import { t as version } from "./package-vJXq4RNN.mjs";
2
+ import { t as version } from "./package-CuyFMXam.mjs";
3
3
  import { r as siteHeaderLine, t as setInvocationProfile } from "./site-BUlQR117.mjs";
4
4
  import { a as notifyOfUpdate, o as runRefresh } from "./version-check-CcsA1QjI.mjs";
5
5
  import { defineCommand, runMain } from "citty";
@@ -76,13 +76,13 @@ const main = defineCommand({
76
76
  token: () => import("./token-BUxgRJVA.mjs").then((m) => m.tokenCommand),
77
77
  egress: () => import("./egress-BFSwa8Uu.mjs").then((m) => m.egressCommand),
78
78
  schedule: () => import("./schedule-Cq9K0rnE.mjs").then((m) => m.scheduleCommand),
79
- feedback: () => import("./feedback-BMX_d4KZ.mjs").then((m) => m.feedbackCommand),
79
+ feedback: () => import("./feedback-DReTDDzD.mjs").then((m) => m.feedbackCommand),
80
80
  db: () => import("./db-DKnJQPm5.mjs").then((m) => m.dbCommand),
81
81
  usage: () => import("./usage-DjNngyvy.mjs").then((m) => m.usageCommand),
82
82
  open: () => import("./open-C5x3tX6I.mjs").then((m) => m.openCommand),
83
- docs: () => import("./docs-BBMVxVta.mjs").then((m) => m.docsCommand),
84
- skill: () => import("./skill-Zq9aIPKf.mjs").then((m) => m.skillCommand),
85
- upgrade: () => import("./upgrade-ES8u8_Pn.mjs").then((m) => m.upgradeCommand),
83
+ docs: () => import("./docs-3pQHiuTn.mjs").then((m) => m.docsCommand),
84
+ skill: () => import("./skill-M4RHvuUB.mjs").then((m) => m.skillCommand),
85
+ upgrade: () => import("./upgrade-C8Xox-P-.mjs").then((m) => m.upgradeCommand),
86
86
  logs: () => import("./logs-C53y2eAS.mjs").then((m) => m.logsCommand)
87
87
  }
88
88
  });
@@ -1,4 +1,4 @@
1
1
  //#region package.json
2
- var version = "0.7.13";
2
+ var version = "0.7.14";
3
3
  //#endregion
4
4
  export { version as t };
@@ -1,4 +1,4 @@
1
- import { t as version } from "./package-vJXq4RNN.mjs";
1
+ import { t as version } from "./package-CuyFMXam.mjs";
2
2
  import { n as reportErrors } from "./ui-B1Px5y7q.mjs";
3
3
  import { defineCommand } from "citty";
4
4
  import { cpSync, existsSync, mkdirSync, rmSync, symlinkSync, writeFileSync } from "node:fs";
@@ -112,7 +112,7 @@ const upgradeCommand = defineCommand({
112
112
  const spec = `${PACKAGE_NAME}@${args.version ?? "latest"}`;
113
113
  const command = pmCommand(pm);
114
114
  const cmd = installArgs(pm, spec);
115
- const { skillInstalled } = await import("./skill-Zq9aIPKf.mjs");
115
+ const { skillInstalled } = await import("./skill-M4RHvuUB.mjs");
116
116
  const refreshSkill = skillInstalled(process.cwd());
117
117
  console.log(`Upgrading via ${command}: ${command} ${cmd.join(" ")}`);
118
118
  await run(command, cmd);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mediamonks/canopy-cli",
3
- "version": "0.7.13",
3
+ "version": "0.7.14",
4
4
  "description": "Canopy CLI — create, develop and deploy Canopy projects.",
5
5
  "bin": {
6
6
  "canopy": "./dist/index.mjs"