@mesh-tech/mesh-cli 0.16.0 → 0.17.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 (78) hide show
  1. package/dist/bin/mesh.js +1381 -897
  2. package/dist/bin/mesh.js.map +4 -4
  3. package/dist/build-info.json +2 -2
  4. package/dist/src/commands/agent-api-client.d.ts +17 -0
  5. package/dist/src/commands/agent-api-client.d.ts.map +1 -1
  6. package/dist/src/commands/agent-api-client.js +22 -0
  7. package/dist/src/commands/agent-api-client.js.map +1 -1
  8. package/dist/src/commands/dev-doctor.d.ts.map +1 -1
  9. package/dist/src/commands/dev-doctor.js +7 -2
  10. package/dist/src/commands/dev-doctor.js.map +1 -1
  11. package/dist/src/commands/dev.d.ts +22 -0
  12. package/dist/src/commands/dev.d.ts.map +1 -1
  13. package/dist/src/commands/dev.js +124 -9
  14. package/dist/src/commands/dev.js.map +1 -1
  15. package/dist/src/commands/local/docker-runner.d.ts.map +1 -1
  16. package/dist/src/commands/local/docker-runner.js +2 -4
  17. package/dist/src/commands/local/docker-runner.js.map +1 -1
  18. package/dist/src/commands/local/hub-local.d.ts.map +1 -1
  19. package/dist/src/commands/local/hub-local.js +2 -3
  20. package/dist/src/commands/local/hub-local.js.map +1 -1
  21. package/dist/src/commands/local/seed-zitadel.d.ts.map +1 -1
  22. package/dist/src/commands/local/seed-zitadel.js +108 -109
  23. package/dist/src/commands/local/seed-zitadel.js.map +1 -1
  24. package/dist/src/commands/local/stack.d.ts.map +1 -1
  25. package/dist/src/commands/local/stack.js +4 -9
  26. package/dist/src/commands/local/stack.js.map +1 -1
  27. package/dist/src/commands/site.d.ts +3 -0
  28. package/dist/src/commands/site.d.ts.map +1 -0
  29. package/dist/src/commands/site.js +277 -0
  30. package/dist/src/commands/site.js.map +1 -0
  31. package/dist/src/commands/temporal.d.ts +25 -0
  32. package/dist/src/commands/temporal.d.ts.map +1 -1
  33. package/dist/src/commands/temporal.js +2459 -732
  34. package/dist/src/commands/temporal.js.map +7 -1
  35. package/dist/src/commands/vcs/clone.d.ts.map +1 -1
  36. package/dist/src/commands/vcs/clone.js +4 -4
  37. package/dist/src/commands/vcs/clone.js.map +1 -1
  38. package/dist/src/commands/vcs/common.d.ts +34 -0
  39. package/dist/src/commands/vcs/common.d.ts.map +1 -1
  40. package/dist/src/commands/vcs/common.js +52 -0
  41. package/dist/src/commands/vcs/common.js.map +1 -1
  42. package/dist/src/commands/vcs/index.d.ts.map +1 -1
  43. package/dist/src/commands/vcs/index.js +7 -1
  44. package/dist/src/commands/vcs/index.js.map +1 -1
  45. package/dist/src/commands/vcs/propose.d.ts +22 -0
  46. package/dist/src/commands/vcs/propose.d.ts.map +1 -1
  47. package/dist/src/commands/vcs/propose.js +25 -5
  48. package/dist/src/commands/vcs/propose.js.map +1 -1
  49. package/dist/src/commands/vcs/rm.d.ts +18 -0
  50. package/dist/src/commands/vcs/rm.d.ts.map +1 -0
  51. package/dist/src/commands/vcs/rm.js +88 -0
  52. package/dist/src/commands/vcs/rm.js.map +1 -0
  53. package/dist/src/program.d.ts.map +1 -1
  54. package/dist/src/program.js +2 -0
  55. package/dist/src/program.js.map +1 -1
  56. package/dist/src/utils/aws-auth.d.ts +10 -0
  57. package/dist/src/utils/aws-auth.d.ts.map +1 -1
  58. package/dist/src/utils/aws-auth.js +35 -0
  59. package/dist/src/utils/aws-auth.js.map +1 -1
  60. package/dist/src/utils/cache-home.d.ts +25 -0
  61. package/dist/src/utils/cache-home.d.ts.map +1 -0
  62. package/dist/src/utils/cache-home.js +36 -0
  63. package/dist/src/utils/cache-home.js.map +1 -0
  64. package/dist/src/utils/temporal-codec.js +207 -294
  65. package/dist/src/utils/temporal-codec.js.map +7 -1
  66. package/fragments/base/index.ts.hbs +1 -1
  67. package/package.json +12 -3
  68. package/skills/core/SKILL.md +13 -3
  69. package/templates/api-auth/README.md.hbs +6 -0
  70. package/templates/api-auth/index.ts.hbs +1 -1
  71. package/templates/api-auth/package.json.hbs +1 -0
  72. package/templates/api-role-gating/index.ts.hbs +1 -1
  73. package/templates/api-role-gating/package.json.hbs +1 -0
  74. package/templates/external-service/api/package.json.hbs +1 -0
  75. package/templates/external-service/index.ts.hbs +1 -1
  76. package/templates/external-service/package.json.hbs +1 -0
  77. package/templates/workflow/index.ts.hbs +1 -1
  78. package/templates/workflow/package.json.hbs +1 -0
@@ -1 +1 @@
1
- {"version":3,"file":"clone.d.ts","sourceRoot":"","sources":["../../../../src/commands/vcs/clone.ts"],"names":[],"mappings":"AAAA,OAAO,EAA+B,KAAK,UAAU,EAAE,MAAM,aAAa,CAAC;AAE3E,wBAAsB,YAAY,CAChC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,IAAI,EAAE,UAAU,GACf,OAAO,CAAC,IAAI,CAAC,CAsBf"}
1
+ {"version":3,"file":"clone.d.ts","sourceRoot":"","sources":["../../../../src/commands/vcs/clone.ts"],"names":[],"mappings":"AAAA,OAAO,EAA6B,KAAK,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzE,wBAAsB,YAAY,CAChC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,IAAI,EAAE,UAAU,GACf,OAAO,CAAC,IAAI,CAAC,CAyBf"}
@@ -1,20 +1,20 @@
1
- import { execFileAsync, resolveToken } from "./common.js";
1
+ import { gitWithAuth, resolveToken } from "./common.js";
2
2
  export async function cloneCommand(repo, dest, opts) {
3
3
  const baseUrl = (opts.url ?? process.env.VCS_URL)?.replace(/\/$/, "");
4
4
  if (!baseUrl)
5
5
  throw new Error("clone requires --url or VCS_URL");
6
6
  const token = await resolveToken(opts);
7
- await execFileAsync("git", [
7
+ await gitWithAuth([
8
8
  "clone",
9
9
  "-c",
10
10
  `http.extraHeader=Authorization: Bearer ${token}`,
11
11
  `${baseUrl}/git/${repo}`,
12
12
  dest ?? repo,
13
- ]);
13
+ ], token);
14
14
  // Persist the auth header for future fetches in THIS clone only.
15
15
  // Dev-grade: tokens land in .git/config — revisit with a credential helper
16
16
  // once non-dev tokens are routine.
17
- await execFileAsync("git", ["config", "http.extraHeader", `Authorization: Bearer ${token}`], { cwd: dest ?? repo });
17
+ await gitWithAuth(["config", "http.extraHeader", `Authorization: Bearer ${token}`], token, dest ?? repo);
18
18
  console.log(`cloned ${repo} → ${dest ?? repo} (read-only remote; use 'mesh vcs propose' to submit changes)`);
19
19
  }
20
20
  //# sourceMappingURL=clone.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"clone.js","sourceRoot":"","sources":["../../../../src/commands/vcs/clone.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,YAAY,EAAmB,MAAM,aAAa,CAAC;AAE3E,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,IAAY,EACZ,IAAwB,EACxB,IAAgB;IAEhB,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACtE,IAAI,CAAC,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;IACjE,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,CAAC;IACvC,MAAM,aAAa,CAAC,KAAK,EAAE;QACzB,OAAO;QACP,IAAI;QACJ,0CAA0C,KAAK,EAAE;QACjD,GAAG,OAAO,QAAQ,IAAI,EAAE;QACxB,IAAI,IAAI,IAAI;KACb,CAAC,CAAC;IACH,iEAAiE;IACjE,2EAA2E;IAC3E,mCAAmC;IACnC,MAAM,aAAa,CACjB,KAAK,EACL,CAAC,QAAQ,EAAE,kBAAkB,EAAE,yBAAyB,KAAK,EAAE,CAAC,EAChE,EAAE,GAAG,EAAE,IAAI,IAAI,IAAI,EAAE,CACtB,CAAC;IACF,OAAO,CAAC,GAAG,CACT,UAAU,IAAI,MAAM,IAAI,IAAI,IAAI,+DAA+D,CAChG,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"clone.js","sourceRoot":"","sources":["../../../../src/commands/vcs/clone.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAmB,MAAM,aAAa,CAAC;AAEzE,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,IAAY,EACZ,IAAwB,EACxB,IAAgB;IAEhB,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACtE,IAAI,CAAC,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;IACjE,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,CAAC;IACvC,MAAM,WAAW,CACf;QACE,OAAO;QACP,IAAI;QACJ,0CAA0C,KAAK,EAAE;QACjD,GAAG,OAAO,QAAQ,IAAI,EAAE;QACxB,IAAI,IAAI,IAAI;KACb,EACD,KAAK,CACN,CAAC;IACF,iEAAiE;IACjE,2EAA2E;IAC3E,mCAAmC;IACnC,MAAM,WAAW,CACf,CAAC,QAAQ,EAAE,kBAAkB,EAAE,yBAAyB,KAAK,EAAE,CAAC,EAChE,KAAK,EACL,IAAI,IAAI,IAAI,CACb,CAAC;IACF,OAAO,CAAC,GAAG,CACT,UAAU,IAAI,MAAM,IAAI,IAAI,IAAI,+DAA+D,CAChG,CAAC;AACJ,CAAC"}
@@ -9,6 +9,40 @@ export interface CommonOpts {
9
9
  token?: string;
10
10
  context?: string;
11
11
  }
12
+ /** Strip a bearer token out of an error before it is surfaced.
13
+ *
14
+ * The vcs git calls authenticate by putting the token in argv
15
+ * (`-c http.extraHeader=Authorization: Bearer <jwt>`), and `execFile` puts the
16
+ * whole argv into the message it throws. So an ordinary mistake — a wrong repo
17
+ * name, a typo'd host — prints a live credential into the terminal, the CI log,
18
+ * or an agent transcript — a `mesh vcs clone` against a mistyped host would
19
+ * otherwise emit the full JWT.
20
+ *
21
+ * Folds `stderr` into the message on the way, because that is where git's
22
+ * actual reason lives ("repository not found", "Authentication failed") and it
23
+ * can carry the token too.
24
+ *
25
+ * @example
26
+ * try {
27
+ * await execFileAsync("git", ["-c", `http.extraHeader=Authorization: Bearer ${token}`, "clone", url]);
28
+ * } catch (err) {
29
+ * throw redactToken(err, token); // the JWT reads as `<redacted-token>`
30
+ * }
31
+ */
32
+ export declare function redactToken(err: unknown, token: string): Error;
33
+ /**
34
+ * Run git with a bearer token in argv, redacting it from any failure.
35
+ *
36
+ * @example
37
+ * const { stdout } = await gitWithAuth(
38
+ * ["-c", `http.extraHeader=Authorization: Bearer ${token}`, "ls-remote", url],
39
+ * token,
40
+ * );
41
+ */
42
+ export declare function gitWithAuth(args: string[], token: string, cwd?: string): Promise<{
43
+ stdout: string;
44
+ stderr: string;
45
+ }>;
12
46
  /** https://host/git/<repo> (origin remote) → { baseUrl: https://host, repo }. */
13
47
  export declare function parseRemote(remoteUrl: string): VcsTarget | null;
14
48
  export declare function resolveTarget(opts: CommonOpts & {
@@ -1 +1 @@
1
- {"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../../../src/commands/vcs/common.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAG9C,eAAO,MAAM,aAAa,+BAAsB,CAAC;AAEjD,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,UAAU;IACzB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,iFAAiF;AACjF,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAG/D;AAED,wBAAsB,aAAa,CACjC,IAAI,EAAE,UAAU,GAAG;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,GACjD,OAAO,CAAC,SAAS,CAAC,CA0BpB;AAED,wBAAsB,YAAY,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAWpE;AAED,2DAA2D;AAC3D,wBAAsB,MAAM,CAC1B,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,MAAM,SAAQ,EACd,IAAI,CAAC,EAAE,OAAO,GACb,OAAO,CAAC,OAAO,CAAC,CAgBlB"}
1
+ {"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../../../src/commands/vcs/common.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAG9C,eAAO,MAAM,aAAa,+BAAsB,CAAC;AAEjD,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,UAAU;IACzB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,KAAK,CAa9D;AAED;;;;;;;;GAQG;AACH,wBAAsB,WAAW,CAC/B,IAAI,EAAE,MAAM,EAAE,EACd,KAAK,EAAE,MAAM,EACb,GAAG,CAAC,EAAE,MAAM,GACX,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAM7C;AAED,iFAAiF;AACjF,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAG/D;AAED,wBAAsB,aAAa,CACjC,IAAI,EAAE,UAAU,GAAG;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,GACjD,OAAO,CAAC,SAAS,CAAC,CA0BpB;AAED,wBAAsB,YAAY,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAWpE;AAED,2DAA2D;AAC3D,wBAAsB,MAAM,CAC1B,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,MAAM,SAAQ,EACd,IAAI,CAAC,EAAE,OAAO,GACb,OAAO,CAAC,OAAO,CAAC,CAgBlB"}
@@ -1,6 +1,58 @@
1
1
  import { execFile } from "node:child_process";
2
2
  import { promisify } from "node:util";
3
3
  export const execFileAsync = promisify(execFile);
4
+ /** Strip a bearer token out of an error before it is surfaced.
5
+ *
6
+ * The vcs git calls authenticate by putting the token in argv
7
+ * (`-c http.extraHeader=Authorization: Bearer <jwt>`), and `execFile` puts the
8
+ * whole argv into the message it throws. So an ordinary mistake — a wrong repo
9
+ * name, a typo'd host — prints a live credential into the terminal, the CI log,
10
+ * or an agent transcript — a `mesh vcs clone` against a mistyped host would
11
+ * otherwise emit the full JWT.
12
+ *
13
+ * Folds `stderr` into the message on the way, because that is where git's
14
+ * actual reason lives ("repository not found", "Authentication failed") and it
15
+ * can carry the token too.
16
+ *
17
+ * @example
18
+ * try {
19
+ * await execFileAsync("git", ["-c", `http.extraHeader=Authorization: Bearer ${token}`, "clone", url]);
20
+ * } catch (err) {
21
+ * throw redactToken(err, token); // the JWT reads as `<redacted-token>`
22
+ * }
23
+ */
24
+ export function redactToken(err, token) {
25
+ const base = err instanceof Error ? err.message : String(err);
26
+ const stderr = typeof err?.stderr === "string"
27
+ ? err.stderr.trim()
28
+ : "";
29
+ const combined = stderr && !base.includes(stderr) ? `${base}\n${stderr}` : base;
30
+ // Guard: splitting on "" inserts the marker between every character, turning
31
+ // a token-free failure into unreadable confetti.
32
+ const message = token ? combined.split(token).join("<redacted-token>") : combined;
33
+ const out = new Error(message);
34
+ const code = err?.code;
35
+ if (code !== undefined)
36
+ out.code = code;
37
+ return out;
38
+ }
39
+ /**
40
+ * Run git with a bearer token in argv, redacting it from any failure.
41
+ *
42
+ * @example
43
+ * const { stdout } = await gitWithAuth(
44
+ * ["-c", `http.extraHeader=Authorization: Bearer ${token}`, "ls-remote", url],
45
+ * token,
46
+ * );
47
+ */
48
+ export async function gitWithAuth(args, token, cwd) {
49
+ try {
50
+ return await execFileAsync("git", args, cwd ? { cwd } : {});
51
+ }
52
+ catch (err) {
53
+ throw redactToken(err, token);
54
+ }
55
+ }
4
56
  /** https://host/git/<repo> (origin remote) → { baseUrl: https://host, repo }. */
5
57
  export function parseRemote(remoteUrl) {
6
58
  const m = remoteUrl.trim().match(/^(https?:\/\/[^/]+)\/git\/([^/]+?)(?:\.git)?$/);
@@ -1 +1 @@
1
- {"version":3,"file":"common.js","sourceRoot":"","sources":["../../../../src/commands/vcs/common.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"common.js","sourceRoot":"","sources":["../../../../src/commands/vcs/common.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/commands/vcs/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA4BzC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAgF1D"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/commands/vcs/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA6BzC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAwF1D"}
@@ -2,6 +2,7 @@ import { cloneCommand } from "./clone.js";
2
2
  import { getCommand } from "./get.js";
3
3
  import { draftsCreateCommand, draftsDiscardCommand, draftsListCommand, draftsShowCommand, draftsSubmitCommand, } from "./drafts.js";
4
4
  import { proposeCommand } from "./propose.js";
5
+ import { rmCommand } from "./rm.js";
5
6
  import { approveCommand, commentCommand, diffCommand, proposalsCommand, rejectCommand, requestChangesCommand, showCommand, } from "./review.js";
6
7
  function withCommon(cmd) {
7
8
  return cmd
@@ -12,7 +13,7 @@ function withCommon(cmd) {
12
13
  export function registerVcsCommands(program) {
13
14
  const vcs = program
14
15
  .command("vcs")
15
- .description("Versioned content repos (mesh.vcs): clone, get, propose, review");
16
+ .description("Versioned content repos (mesh.vcs): clone, get, propose, rm, review");
16
17
  withCommon(vcs.command("clone <repo> [dest]").description("Clone a repo (read-only remote)")).action(cloneCommand);
17
18
  withCommon(vcs
18
19
  .command("get <repo> <path>")
@@ -26,6 +27,11 @@ export function registerVcsCommands(program) {
26
27
  .option("--proposal-id <id>", "explicit proposal id")
27
28
  .option("--revise <id>", "add a revision to an existing proposal")
28
29
  .option("--merge-parent <sha>", "conflict resolution: main sha incorporated")).action(proposeCommand);
30
+ withCommon(vcs
31
+ .command("rm <repo> <paths...>")
32
+ .description("Propose deleting files or folders (no clone needed)")
33
+ .option("-m, --message <message>", "proposal message")
34
+ .option("--dry-run", "list what would be deleted, propose nothing")).action(rmCommand);
29
35
  withCommon(vcs.command("proposals <repo>").description("List open proposals")).action(proposalsCommand);
30
36
  withCommon(vcs.command("show <repo> <id>").description("Show proposal state")).action(showCommand);
31
37
  withCommon(vcs.command("diff <repo> <id>").description("Show proposal diff")).action(diffCommand);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/commands/vcs/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/commands/vcs/index.ts"],"names":[],"mappings":"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"}
@@ -13,6 +13,28 @@ export interface FileChange {
13
13
  * orig-path token as a status-prefixed record.
14
14
  */
15
15
  export declare function parseStatus(out: string): FileChange[];
16
+ /** Build one write operation, choosing an encoding by what the bytes actually are.
17
+ *
18
+ * The test is a UTF-8 round trip, not a file-extension list: a file is text
19
+ * precisely when decoding and re-encoding reproduces it byte for byte. Reading
20
+ * everything as `"utf8"` does not fail on a PNG — it replaces every invalid byte
21
+ * with U+FFFD and proposes a corrupt file that looks perfectly normal in the
22
+ * diff.
23
+ *
24
+ * Text files send a plain UTF-8 string; binary files send base64.
25
+ *
26
+ * @example
27
+ * await writeOp(process.cwd(), "docs/note.md");
28
+ * // → { op: "write", path: "docs/note.md", content: "# Note\n" }
29
+ * await writeOp(process.cwd(), "img/logo.png");
30
+ * // → { op: "write", path: "img/logo.png", content: "iVBORw0…", encoding: "base64" }
31
+ */
32
+ export declare function writeOp(cwd: string, path: string): Promise<{
33
+ op: "write";
34
+ path: string;
35
+ content: string;
36
+ encoding?: "base64";
37
+ }>;
16
38
  export interface ProposeOpts extends CommonOpts {
17
39
  message?: string;
18
40
  proposalId?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"propose.d.ts","sourceRoot":"","sources":["../../../../src/commands/vcs/propose.ts"],"names":[],"mappings":"AAEA,OAAO,EAKL,KAAK,UAAU,EAChB,MAAM,aAAa,CAAC;AAErB,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,EAAE,CAiCrD;AAED,MAAM,WAAW,WAAY,SAAQ,UAAU;IAC7C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,wBAAsB,cAAc,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAmErE"}
1
+ {"version":3,"file":"propose.d.ts","sourceRoot":"","sources":["../../../../src/commands/vcs/propose.ts"],"names":[],"mappings":"AAEA,OAAO,EAKL,KAAK,UAAU,EAChB,MAAM,aAAa,CAAC;AAErB,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,EAAE,CAiCrD;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,OAAO,CAC3B,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,GACX,OAAO,CAAC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,QAAQ,CAAA;CAAE,CAAC,CAO9E;AAED,MAAM,WAAW,WAAY,SAAQ,UAAU;IAC7C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,wBAAsB,cAAc,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CA+DrE"}
@@ -42,6 +42,30 @@ export function parseStatus(out) {
42
42
  }
43
43
  return changes;
44
44
  }
45
+ /** Build one write operation, choosing an encoding by what the bytes actually are.
46
+ *
47
+ * The test is a UTF-8 round trip, not a file-extension list: a file is text
48
+ * precisely when decoding and re-encoding reproduces it byte for byte. Reading
49
+ * everything as `"utf8"` does not fail on a PNG — it replaces every invalid byte
50
+ * with U+FFFD and proposes a corrupt file that looks perfectly normal in the
51
+ * diff.
52
+ *
53
+ * Text files send a plain UTF-8 string; binary files send base64.
54
+ *
55
+ * @example
56
+ * await writeOp(process.cwd(), "docs/note.md");
57
+ * // → { op: "write", path: "docs/note.md", content: "# Note\n" }
58
+ * await writeOp(process.cwd(), "img/logo.png");
59
+ * // → { op: "write", path: "img/logo.png", content: "iVBORw0…", encoding: "base64" }
60
+ */
61
+ export async function writeOp(cwd, path) {
62
+ const buf = await readFile(join(cwd, path));
63
+ const asUtf8 = buf.toString("utf8");
64
+ if (Buffer.from(asUtf8, "utf8").equals(buf)) {
65
+ return { op: "write", path, content: asUtf8 };
66
+ }
67
+ return { op: "write", path, content: buf.toString("base64"), encoding: "base64" };
68
+ }
45
69
  export async function proposeCommand(opts) {
46
70
  const cwd = process.cwd();
47
71
  const target = await resolveTarget(opts);
@@ -60,11 +84,7 @@ export async function proposeCommand(opts) {
60
84
  }
61
85
  const operations = await Promise.all(changes.map(async (c) => c.status.startsWith("D")
62
86
  ? { op: "delete", path: c.path }
63
- : {
64
- op: "write",
65
- path: c.path,
66
- content: await readFile(join(cwd, c.path), "utf8"),
67
- }));
87
+ : await writeOp(cwd, c.path)));
68
88
  // New proposals diff against the clone's HEAD; revisions against the
69
89
  // proposal's current head (the author proposed from this clone).
70
90
  let baseCommit;
@@ -1 +1 @@
1
- {"version":3,"file":"propose.js","sourceRoot":"","sources":["../../../../src/commands/vcs/propose.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"propose.js","sourceRoot":"","sources":["../../../../src/commands/vcs/propose.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import { type CommonOpts } from "./common.js";
2
+ /** Resolve the caller's paths against the repo's actual file list.
3
+ *
4
+ * A path may name a file or a directory. Directory matches are taken on a path
5
+ * SEGMENT boundary — `products/foo` must not sweep in `products/foo-v2/`, which
6
+ * is what a bare `startsWith` would do and is not recoverable once merged.
7
+ *
8
+ * A path that matches nothing throws rather than being skipped: a delete that
9
+ * silently drops one of its arguments is worse than one that refuses, because
10
+ * the proposal still looks successful.
11
+ */
12
+ export declare function expandPathsToDeletions(repoFiles: string[], requested: string[]): string[];
13
+ export interface RmOpts extends CommonOpts {
14
+ message?: string;
15
+ dryRun?: boolean;
16
+ }
17
+ export declare function rmCommand(repo: string, paths: string[], opts: RmOpts): Promise<void>;
18
+ //# sourceMappingURL=rm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rm.d.ts","sourceRoot":"","sources":["../../../../src/commands/vcs/rm.ts"],"names":[],"mappings":"AAGA,OAAO,EAAqC,KAAK,UAAU,EAAE,MAAM,aAAa,CAAC;AAOjF;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAwBzF;AAED,MAAM,WAAW,MAAO,SAAQ,UAAU;IACxC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAsD1F"}
@@ -0,0 +1,88 @@
1
+ import { mkdtemp, rm as rmrf } from "node:fs/promises";
2
+ import { tmpdir } from "node:os";
3
+ import { join } from "node:path";
4
+ import { gitWithAuth, resolveToken, vcsApi } from "./common.js";
5
+ /** Strip the cosmetic bits git and shells add: `./` prefix, trailing slashes. */
6
+ function normalize(p) {
7
+ return p.trim().replace(/^\.\//, "").replace(/\/+$/, "");
8
+ }
9
+ /** Resolve the caller's paths against the repo's actual file list.
10
+ *
11
+ * A path may name a file or a directory. Directory matches are taken on a path
12
+ * SEGMENT boundary — `products/foo` must not sweep in `products/foo-v2/`, which
13
+ * is what a bare `startsWith` would do and is not recoverable once merged.
14
+ *
15
+ * A path that matches nothing throws rather than being skipped: a delete that
16
+ * silently drops one of its arguments is worse than one that refuses, because
17
+ * the proposal still looks successful.
18
+ */
19
+ export function expandPathsToDeletions(repoFiles, requested) {
20
+ const out = new Set();
21
+ for (const raw of requested) {
22
+ const path = normalize(raw);
23
+ if (path.startsWith("/") || path.split("/").includes("..")) {
24
+ throw new Error(`"${raw}" is not a repo-relative path — vcs paths never start with "/" or traverse with "..".`);
25
+ }
26
+ const exact = repoFiles.filter((f) => f === path);
27
+ if (exact.length > 0) {
28
+ for (const f of exact)
29
+ out.add(f);
30
+ continue;
31
+ }
32
+ const under = repoFiles.filter((f) => f.startsWith(`${path}/`));
33
+ if (under.length === 0) {
34
+ throw new Error(`"${raw}" matched no files in the repo — nothing was proposed. ` +
35
+ `Check the path with: mesh vcs get <repo> ${path}`);
36
+ }
37
+ for (const f of under)
38
+ out.add(f);
39
+ }
40
+ return [...out].sort();
41
+ }
42
+ export async function rmCommand(repo, paths, opts) {
43
+ const baseUrl = (opts.url ?? process.env.VCS_URL)?.replace(/\/$/, "");
44
+ if (!baseUrl)
45
+ throw new Error("rm requires --url or VCS_URL");
46
+ const token = await resolveToken(opts);
47
+ // Blobless + no checkout: we only need the tree listing and HEAD's sha, so
48
+ // don't pay for file contents we are about to delete.
49
+ const dir = await mkdtemp(join(tmpdir(), "mesh-vcs-rm-"));
50
+ try {
51
+ const git = (args, cwd) => gitWithAuth(args, token, cwd);
52
+ await git([
53
+ "clone",
54
+ "--filter=blob:none",
55
+ "--no-checkout",
56
+ "-c",
57
+ `http.extraHeader=Authorization: Bearer ${token}`,
58
+ `${baseUrl}/git/${repo}`,
59
+ dir,
60
+ ]);
61
+ const { stdout: treeOut } = await git(["ls-tree", "-r", "--name-only", "HEAD"], dir);
62
+ const repoFiles = treeOut.split("\n").filter(Boolean);
63
+ const doomed = expandPathsToDeletions(repoFiles, paths);
64
+ if (opts.dryRun) {
65
+ console.log(`would delete ${doomed.length} file(s) from ${repo}:`);
66
+ for (const p of doomed)
67
+ console.log(` ${p}`);
68
+ console.log("(--dry-run: nothing proposed)");
69
+ return;
70
+ }
71
+ const { stdout: head } = await git(["rev-parse", "HEAD"], dir);
72
+ const body = {
73
+ baseCommit: head.trim(),
74
+ message: opts.message ?? `Delete ${doomed.length} file(s)`,
75
+ operations: doomed.map((path) => ({ op: "delete", path })),
76
+ };
77
+ const data = (await vcsApi(baseUrl, token, `/v1/repos/${repo}/proposals`, "POST", body));
78
+ console.log(`deleting ${doomed.length} file(s) from ${repo}:`);
79
+ for (const p of doomed)
80
+ console.log(` ${p}`);
81
+ console.log(`proposal ${data.proposalId} @ ${data.sha.slice(0, 8)} — a human must approve: ` +
82
+ `mesh vcs approve ${repo} ${data.proposalId} --url ${baseUrl}`);
83
+ }
84
+ finally {
85
+ await rmrf(dir, { recursive: true, force: true });
86
+ }
87
+ }
88
+ //# sourceMappingURL=rm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rm.js","sourceRoot":"","sources":["../../../../src/commands/vcs/rm.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"program.d.ts","sourceRoot":"","sources":["../../src/program.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA2BpC,eAAO,MAAM,QAAQ,SAAS,CAAC;AAC/B,eAAO,MAAM,eAAe,2CAA2C,CAAC;AAExE;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,OAAO,GAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,OAAO,CAgCzE"}
1
+ {"version":3,"file":"program.d.ts","sourceRoot":"","sources":["../../src/program.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA4BpC,eAAO,MAAM,QAAQ,SAAS,CAAC;AAC/B,eAAO,MAAM,eAAe,2CAA2C,CAAC;AAExE;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,OAAO,GAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,OAAO,CAiCzE"}
@@ -27,6 +27,7 @@ import { registerLocalCommands } from "./commands/local/index.js";
27
27
  import { registerLoginCommand } from "./commands/login.js";
28
28
  import { registerRegistryCommands } from "./commands/registry.js";
29
29
  import { registerSecretsCommands } from "./commands/secrets/index.js";
30
+ import { registerSiteCommands } from "./commands/site.js";
30
31
  import { registerSkillsCommands } from "./commands/skills.js";
31
32
  import { registerStackCommand } from "./commands/stack.js";
32
33
  import { registerTemporalCommands } from "./commands/temporal.js";
@@ -64,6 +65,7 @@ export function createProgram(options = {}) {
64
65
  registerConversationsCommands(program);
65
66
  registerVpnCommands(program);
66
67
  registerWorkflowCommands(program);
68
+ registerSiteCommands(program);
67
69
  registerTemporalCommands(program);
68
70
  registerClusterCommands(program);
69
71
  registerVcsCommands(program);
@@ -1 +1 @@
1
- {"version":3,"file":"program.js","sourceRoot":"","sources":["../../src/program.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"program.js","sourceRoot":"","sources":["../../src/program.ts"],"names":[],"mappings":"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"}
@@ -65,6 +65,16 @@ export declare function renderCredentialProcessProfile(args: {
65
65
  * newline is added to the existing content if it lacks one).
66
66
  */
67
67
  export declare function upsertManagedAwsConfigSection(existing: string, context: string, profileBlock: string): string;
68
+ /**
69
+ * Remove a BARE `[profile name]` block — one outside any managed section — from
70
+ * AWS config content. A file written before the managed-section format carries
71
+ * exactly one such block, and migrating it must not leave that block behind as a
72
+ * duplicate profile. Pure; exported for unit testing.
73
+ *
74
+ * @example
75
+ * stripBareProfile("[profile acme]\nregion = us-east-2\n", "acme"); // → ""
76
+ */
77
+ export declare function stripBareProfile(existing: string, profileName: string): string;
68
78
  /** Assume an IAM role via current AWS session and return credentials as env vars. */
69
79
  export declare function assumeRole(roleArn: string, sessionName?: string, durationSeconds?: number): Promise<Record<string, string> | null>;
70
80
  /** STS credentials for a Zitadel-JWT-assumed role, including expiry. */
@@ -1 +1 @@
1
- {"version":3,"file":"aws-auth.d.ts","sourceRoot":"","sources":["../../../src/utils/aws-auth.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"aws-auth.d.ts","sourceRoot":"","sources":["../../../src/utils/aws-auth.ts"],"names":[],"mappings":"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"}
@@ -205,6 +205,41 @@ export function upsertManagedAwsConfigSection(existing, context, profileBlock) {
205
205
  const sep = existing.endsWith("\n\n") ? "" : existing.endsWith("\n") ? "\n" : "\n\n";
206
206
  return existing + sep + section;
207
207
  }
208
+ /**
209
+ * Remove a BARE `[profile name]` block — one outside any managed section — from
210
+ * AWS config content. A file written before the managed-section format carries
211
+ * exactly one such block, and migrating it must not leave that block behind as a
212
+ * duplicate profile. Pure; exported for unit testing.
213
+ *
214
+ * @example
215
+ * stripBareProfile("[profile acme]\nregion = us-east-2\n", "acme"); // → ""
216
+ */
217
+ export function stripBareProfile(existing, profileName) {
218
+ const header = `[profile ${profileName}]`;
219
+ const lines = existing.split("\n");
220
+ const out = [];
221
+ let managed = false;
222
+ let dropping = false;
223
+ for (const line of lines) {
224
+ if (line.startsWith(MANAGED_START_PREFIX))
225
+ managed = true;
226
+ if (managed) {
227
+ out.push(line);
228
+ if (line === MANAGED_END)
229
+ managed = false;
230
+ continue;
231
+ }
232
+ if (line.trim() === header) {
233
+ dropping = true;
234
+ continue;
235
+ }
236
+ if (dropping && line.startsWith("["))
237
+ dropping = false;
238
+ if (!dropping)
239
+ out.push(line);
240
+ }
241
+ return out.join("\n");
242
+ }
208
243
  function newStsClient() {
209
244
  return new STSClient({ region: DEFAULT_REGION });
210
245
  }