@alwaysmeticulous/cli 2.331.2 → 2.332.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 (69) hide show
  1. package/README.md +16 -0
  2. package/dist/commands/onboard/__tests__/install-skills.spec.js +120 -5
  3. package/dist/commands/onboard/__tests__/install-skills.spec.js.map +1 -1
  4. package/dist/commands/onboard/__tests__/print-next-steps.spec.d.ts +2 -0
  5. package/dist/commands/onboard/__tests__/print-next-steps.spec.d.ts.map +1 -0
  6. package/dist/commands/onboard/__tests__/print-next-steps.spec.js +67 -0
  7. package/dist/commands/onboard/__tests__/print-next-steps.spec.js.map +1 -0
  8. package/dist/commands/onboard/__tests__/resolve-project.spec.d.ts +2 -0
  9. package/dist/commands/onboard/__tests__/resolve-project.spec.d.ts.map +1 -0
  10. package/dist/commands/onboard/__tests__/resolve-project.spec.js +44 -0
  11. package/dist/commands/onboard/__tests__/resolve-project.spec.js.map +1 -0
  12. package/dist/commands/onboard/__tests__/safe-repo-fs.spec.js +104 -25
  13. package/dist/commands/onboard/__tests__/safe-repo-fs.spec.js.map +1 -1
  14. package/dist/commands/onboard/__tests__/skills-install-choice.spec.d.ts +2 -0
  15. package/dist/commands/onboard/__tests__/skills-install-choice.spec.d.ts.map +1 -0
  16. package/dist/commands/onboard/__tests__/skills-install-choice.spec.js +51 -0
  17. package/dist/commands/onboard/__tests__/skills-install-choice.spec.js.map +1 -0
  18. package/dist/commands/onboard/__tests__/validate-ci-yaml.spec.d.ts +2 -0
  19. package/dist/commands/onboard/__tests__/validate-ci-yaml.spec.d.ts.map +1 -0
  20. package/dist/commands/onboard/__tests__/validate-ci-yaml.spec.js +112 -0
  21. package/dist/commands/onboard/__tests__/validate-ci-yaml.spec.js.map +1 -0
  22. package/dist/commands/onboard/build-context.d.ts +1 -0
  23. package/dist/commands/onboard/build-context.d.ts.map +1 -1
  24. package/dist/commands/onboard/build-context.js +6 -6
  25. package/dist/commands/onboard/build-context.js.map +1 -1
  26. package/dist/commands/onboard/customer-agents.json +0 -1
  27. package/dist/commands/onboard/customer-docs.json +1 -0
  28. package/dist/commands/onboard/docs-urls.d.ts +2 -0
  29. package/dist/commands/onboard/docs-urls.d.ts.map +1 -1
  30. package/dist/commands/onboard/docs-urls.js +5 -3
  31. package/dist/commands/onboard/docs-urls.js.map +1 -1
  32. package/dist/commands/onboard/index.d.ts.map +1 -1
  33. package/dist/commands/onboard/index.js +8 -6
  34. package/dist/commands/onboard/index.js.map +1 -1
  35. package/dist/commands/onboard/launch-agent.d.ts +1 -0
  36. package/dist/commands/onboard/launch-agent.d.ts.map +1 -1
  37. package/dist/commands/onboard/launch-agent.js +26 -15
  38. package/dist/commands/onboard/launch-agent.js.map +1 -1
  39. package/dist/commands/onboard/resolve-project.d.ts +9 -1
  40. package/dist/commands/onboard/resolve-project.d.ts.map +1 -1
  41. package/dist/commands/onboard/resolve-project.js +26 -4
  42. package/dist/commands/onboard/resolve-project.js.map +1 -1
  43. package/dist/commands/onboard/safe-repo-fs.d.ts +23 -16
  44. package/dist/commands/onboard/safe-repo-fs.d.ts.map +1 -1
  45. package/dist/commands/onboard/safe-repo-fs.js +78 -36
  46. package/dist/commands/onboard/safe-repo-fs.js.map +1 -1
  47. package/dist/commands/onboard/setup-agent-integrations.d.ts +2 -1
  48. package/dist/commands/onboard/setup-agent-integrations.d.ts.map +1 -1
  49. package/dist/commands/onboard/setup-agent-integrations.js +122 -13
  50. package/dist/commands/onboard/setup-agent-integrations.js.map +1 -1
  51. package/dist/commands/onboard/templates/CLAUDE.md +22 -9
  52. package/dist/commands/onboard/templates/agents/ci-setup.md +28 -0
  53. package/dist/commands/onboard/templates/agents/recorder-installation.md +6 -0
  54. package/dist/commands/onboard/templates/docs/ci.ts +2 -6
  55. package/dist/commands/onboard/templates/docs/github-actions-v2.ts +43 -37
  56. package/dist/commands/onboard/templates/docs/how-to/connect-git-provider.ts +26 -0
  57. package/dist/commands/onboard/templates/docs/how-to/typescript-types.ts +1 -1
  58. package/dist/commands/onboard/templates/docs/onboarding-guide.ts +77 -356
  59. package/dist/commands/onboard/templates/docs/recorder-getting-started.ts +5 -2
  60. package/dist/commands/onboard/templates/docs/recorder-snippets/script-based-instructions/nuxtjs-instructions.ts +1 -1
  61. package/dist/commands/onboard/templates/docs/recorder-snippets/script-based-instructions/rsbuild-instructions.ts +1 -1
  62. package/dist/commands/onboard/templates/docs/recorder-snippets/script-based-instructions/vite-instructions.ts +1 -1
  63. package/dist/commands/onboard/templates/docs/reference/cli-commands.ts +37 -0
  64. package/dist/commands/onboard/validate-ci-yaml.d.ts +22 -0
  65. package/dist/commands/onboard/validate-ci-yaml.d.ts.map +1 -0
  66. package/dist/commands/onboard/validate-ci-yaml.js +113 -0
  67. package/dist/commands/onboard/validate-ci-yaml.js.map +1 -0
  68. package/package.json +14 -13
  69. package/dist/commands/onboard/templates/agents/local-simulation-verification.md +0 -96
@@ -1,11 +1,11 @@
1
1
  "use strict";
2
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="f160cb06-1427-52cc-8b70-5fb6d2b32d44")}catch(e){}}();
2
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="4c6969bb-ef7f-54be-b273-ff59df82ad58")}catch(e){}}();
3
3
 
4
4
  var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  return (mod && mod.__esModule) ? mod : { "default": mod };
6
6
  };
7
7
  Object.defineProperty(exports, "__esModule", { value: true });
8
- exports.resolveOnboardProject = void 0;
8
+ exports.ensureOnboardAuthenticated = exports.resolveOnboardProject = void 0;
9
9
  const client_1 = require("@alwaysmeticulous/client");
10
10
  const chalk_1 = __importDefault(require("chalk"));
11
11
  const cli_user_error_1 = require("../../utils/cli-user-error");
@@ -13,12 +13,15 @@ const select_project_1 = require("../../utils/select-project");
13
13
  /**
14
14
  * Resolves which Meticulous project this onboard run is for.
15
15
  *
16
+ * - Not logged in: interactive runs open a browser OAuth flow; otherwise errors.
16
17
  * - Interactive OAuth: searchable picker (type to filter, ↑/↓ to select).
17
18
  * - `--project` / sole accessible project / project-scoped API token: no prompt.
18
19
  * - Non-interactive OAuth with several projects: requires `--project`.
19
- * - Auth failure: returns null and continues with local git context only.
20
+ * - Project lookup failure after login: returns null and continues with local
21
+ * git context only.
20
22
  */
21
23
  const resolveOnboardProject = async (options) => {
24
+ await (0, exports.ensureOnboardAuthenticated)(options.apiToken);
22
25
  try {
23
26
  const apiToken = await (0, client_1.resolveApiTokenWithOAuth)({
24
27
  apiToken: options.apiToken,
@@ -51,6 +54,25 @@ const resolveOnboardProject = async (options) => {
51
54
  }
52
55
  };
53
56
  exports.resolveOnboardProject = resolveOnboardProject;
57
+ /**
58
+ * Makes sure onboard has a token before it tries to pick a project. Interactive
59
+ * runs open the same browser OAuth page as `auth login`, tagged so that page
60
+ * does not print the agent-facing sign-in steps.
61
+ */
62
+ const ensureOnboardAuthenticated = async (apiToken) => {
63
+ if (await (0, client_1.getAuthToken)(apiToken)) {
64
+ return;
65
+ }
66
+ if (!(0, client_1.isInteractiveContext)()) {
67
+ throw new cli_user_error_1.CliUserError("`meticulous onboard` needs you to be logged in. Run it in an interactive " +
68
+ "terminal so it can open a browser, pass `--apiToken`, set " +
69
+ "METICULOUS_API_TOKEN, or run `meticulous auth login --device` first " +
70
+ "on a remote machine.");
71
+ }
72
+ console.log("Not logged in. Opening the browser to sign in to Meticulous…");
73
+ await (0, client_1.performOAuthLogin)({ intent: client_1.CLI_LOGIN_INTENT_ONBOARD });
74
+ };
75
+ exports.ensureOnboardAuthenticated = ensureOnboardAuthenticated;
54
76
  const selectOAuthProjectId = async (options) => {
55
77
  const { client, project } = options;
56
78
  if (project) {
@@ -89,4 +111,4 @@ const promptForOnboardProject = async (client, projects) => {
89
111
  });
90
112
  };
91
113
  //# sourceMappingURL=resolve-project.js.map
92
- //# debugId=f160cb06-1427-52cc-8b70-5fb6d2b32d44
114
+ //# debugId=4c6969bb-ef7f-54be-b273-ff59df82ad58
@@ -1 +1 @@
1
- {"version":3,"file":"resolve-project.js","sources":["../../../src/commands/onboard/resolve-project.ts"],"sourceRoot":"","names":[],"mappings":"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","debugId":"f160cb06-1427-52cc-8b70-5fb6d2b32d44"}
1
+ {"version":3,"file":"resolve-project.js","sources":["../../../src/commands/onboard/resolve-project.ts"],"sourceRoot":"","names":[],"mappings":"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","debugId":"4c6969bb-ef7f-54be-b273-ff59df82ad58"}
@@ -35,25 +35,32 @@ export declare const isRealDirectoryInsideProject: (projectRoot: string, absolut
35
35
  */
36
36
  export declare const SKILLS_INSTALL_DIR_ROOTS: readonly [".claude", ".agents", ".cursor"];
37
37
  export declare const SKILLS_INSTALL_FILE_TARGETS: readonly ["skills-lock.json"];
38
+ export interface SkillsInstallTargets {
39
+ /**
40
+ * Symlinks at or under a dest this install will write, which we cannot
41
+ * replace ourselves. Non-empty means the installer must not run.
42
+ */
43
+ blockingLinks: string[];
44
+ }
38
45
  /**
39
- * Rejects symlinks on every path the skills installer may write through, then
46
+ * Rejects parent-path symlinks the installer would write through, then
40
47
  * creates the destination directory roots as real directories inside the repo.
41
- * Also walks any pre-existing nested entries under each agent's skills tree —
42
- * a real `skills` dir with a last-component symlink like
43
- * `.claude/skills/<name> -> ~/.ssh` would otherwise let the installer write
44
- * outside the project while the shallow check still passes.
45
- */
46
- export declare const prepareSafeSkillsInstallTargets: (projectRoot: string) => void;
47
- /**
48
- * Re-checks skills install destinations after an external installer runs, so a
49
- * TOCTOU symlink plant during the install cannot go unnoticed including
50
- * nested last-component symlinks under each agent's skills tree.
48
+ *
49
+ * `skillNames` is the exact set of skills this install will write, so the
50
+ * guard only looks at those dests. A link for any other skill belongs to
51
+ * another tool, is never written through, and is ignored.
52
+ *
53
+ * A dest we are about to write, such as `.claude/skills/meticulous-cli`, is
54
+ * often a leftover *link* into a cache from `skills add` without `--copy`.
55
+ * Unlink those (the link only, never the target) so `--copy` can write a real
56
+ * directory. A symlink nested inside such a dest is reported instead: the
57
+ * installer would write through it and it is not ours to delete.
51
58
  */
52
- export declare const assertSafeSkillsInstallTargets: (projectRoot: string) => void;
59
+ export declare const prepareSafeSkillsInstallTargets: (projectRoot: string, skillNames: readonly string[]) => SkillsInstallTargets;
53
60
  /**
54
- * Recursively rejects any symlink under `.claude/skills`, `.agents/skills`,
55
- * and `.cursor/skills`. Matches `resolveSafeWritePath`: any symlink is refused,
56
- * not only ones that currently resolve outside the repo.
61
+ * Re-checks the dests this install wrote, so a TOCTOU symlink plant during the
62
+ * install cannot go unnoticed including nested ones. Dests for other tools'
63
+ * skills are not ours to police.
57
64
  */
58
- export declare const assertNoSymlinksUnderSkillsTrees: (projectRoot: string) => void;
65
+ export declare const assertSafeSkillsInstallTargets: (projectRoot: string, skillNames: readonly string[]) => void;
59
66
  //# sourceMappingURL=safe-repo-fs.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"safe-repo-fs.d.ts","sourceRoot":"","sources":["../../../src/commands/onboard/safe-repo-fs.ts"],"names":[],"mappings":"AAoBA;;;GAGG;AACH,eAAO,MAAM,sBAAsB,gBAAiB,MAAM,KAAG,MAW5D,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,oBAAoB,gBAClB,MAAM,gBACL,MAAM,KACnB,MAmDF,CAAC;AAEF,eAAO,MAAM,aAAa,gBACX,MAAM,gBACL,MAAM,KACnB,MAOF,CAAC;AAEF,eAAO,MAAM,iBAAiB,gBACf,MAAM,gBACL,MAAM,QACd,MAAM,GAAG,MAAM,CAAC,eAAe,KACpC,MAUF,CAAC;AAEF,eAAO,MAAM,gBAAgB,gBACd,MAAM,gBACL,MAAM,sBACA,MAAM,KACzB,MAQF,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,4BAA4B,gBAC1B,MAAM,gBACL,MAAM,KACnB,MAiBF,CAAC;AAMF,eAAO,MAAM,yBAAyB,iBAAkB,MAAM,KAAG,MAgBhE,CAAC;AAEF,eAAO,MAAM,gBAAgB,SAAU,MAAM,aAAa,MAAM,KAAG,OAQlE,CAAC;AAUF;;;;GAIG;AACH,eAAO,MAAM,4BAA4B,gBAC1B,MAAM,gBACL,MAAM,KACnB,OAaF,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,wBAAwB,4CAI3B,CAAC;AAEX,eAAO,MAAM,2BAA2B,+BAAgC,CAAC;AAEzE;;;;;;;GAOG;AACH,eAAO,MAAM,+BAA+B,gBAAiB,MAAM,KAAG,IAYrE,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,8BAA8B,gBAAiB,MAAM,KAAG,IASpE,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,gCAAgC,gBAAiB,MAAM,KAAG,IAOtE,CAAC"}
1
+ {"version":3,"file":"safe-repo-fs.d.ts","sourceRoot":"","sources":["../../../src/commands/onboard/safe-repo-fs.ts"],"names":[],"mappings":"AAqBA;;;GAGG;AACH,eAAO,MAAM,sBAAsB,gBAAiB,MAAM,KAAG,MAW5D,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,oBAAoB,gBAClB,MAAM,gBACL,MAAM,KACnB,MAmDF,CAAC;AAEF,eAAO,MAAM,aAAa,gBACX,MAAM,gBACL,MAAM,KACnB,MAOF,CAAC;AAEF,eAAO,MAAM,iBAAiB,gBACf,MAAM,gBACL,MAAM,QACd,MAAM,GAAG,MAAM,CAAC,eAAe,KACpC,MAUF,CAAC;AAEF,eAAO,MAAM,gBAAgB,gBACd,MAAM,gBACL,MAAM,sBACA,MAAM,KACzB,MAQF,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,4BAA4B,gBAC1B,MAAM,gBACL,MAAM,KACnB,MAiBF,CAAC;AAMF,eAAO,MAAM,yBAAyB,iBAAkB,MAAM,KAAG,MAgBhE,CAAC;AAEF,eAAO,MAAM,gBAAgB,SAAU,MAAM,aAAa,MAAM,KAAG,OAQlE,CAAC;AAUF;;;;GAIG;AACH,eAAO,MAAM,4BAA4B,gBAC1B,MAAM,gBACL,MAAM,KACnB,OAaF,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,wBAAwB,4CAI3B,CAAC;AAEX,eAAO,MAAM,2BAA2B,+BAAgC,CAAC;AAEzE,MAAM,WAAW,oBAAoB;IACnC;;;OAGG;IACH,aAAa,EAAE,MAAM,EAAE,CAAC;CACzB;AAED;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,+BAA+B,gBAC7B,MAAM,cACP,SAAS,MAAM,EAAE,KAC5B,oBAgDF,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,8BAA8B,gBAC5B,MAAM,cACP,SAAS,MAAM,EAAE,KAC5B,IAoBF,CAAC"}
@@ -1,8 +1,8 @@
1
1
  "use strict";
2
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="96da1693-9282-57e0-8720-eb64652df868")}catch(e){}}();
2
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="fbfbe7af-9159-507e-bce1-4a58bf776bc3")}catch(e){}}();
3
3
 
4
4
  Object.defineProperty(exports, "__esModule", { value: true });
5
- exports.assertNoSymlinksUnderSkillsTrees = exports.assertSafeSkillsInstallTargets = exports.prepareSafeSkillsInstallTargets = exports.SKILLS_INSTALL_FILE_TARGETS = exports.SKILLS_INSTALL_DIR_ROOTS = exports.isRealDirectoryInsideProject = exports.isPathInsideRoot = exports.normalizeRelativeRepoPath = exports.assertWorkspaceInsideProject = exports.copyFileSafeSync = exports.writeFileSafeSync = exports.mkdirSafeSync = exports.resolveSafeWritePath = exports.resolveRealProjectRoot = void 0;
5
+ exports.assertSafeSkillsInstallTargets = exports.prepareSafeSkillsInstallTargets = exports.SKILLS_INSTALL_FILE_TARGETS = exports.SKILLS_INSTALL_DIR_ROOTS = exports.isRealDirectoryInsideProject = exports.isPathInsideRoot = exports.normalizeRelativeRepoPath = exports.assertWorkspaceInsideProject = exports.copyFileSafeSync = exports.writeFileSafeSync = exports.mkdirSafeSync = exports.resolveSafeWritePath = exports.resolveRealProjectRoot = void 0;
6
6
  const fs_1 = require("fs");
7
7
  const path_1 = require("path");
8
8
  const cli_user_error_1 = require("../../utils/cli-user-error");
@@ -188,14 +188,20 @@ exports.SKILLS_INSTALL_DIR_ROOTS = [
188
188
  ];
189
189
  exports.SKILLS_INSTALL_FILE_TARGETS = ["skills-lock.json"];
190
190
  /**
191
- * Rejects symlinks on every path the skills installer may write through, then
191
+ * Rejects parent-path symlinks the installer would write through, then
192
192
  * creates the destination directory roots as real directories inside the repo.
193
- * Also walks any pre-existing nested entries under each agent's skills tree —
194
- * a real `skills` dir with a last-component symlink like
195
- * `.claude/skills/<name> -> ~/.ssh` would otherwise let the installer write
196
- * outside the project while the shallow check still passes.
193
+ *
194
+ * `skillNames` is the exact set of skills this install will write, so the
195
+ * guard only looks at those dests. A link for any other skill belongs to
196
+ * another tool, is never written through, and is ignored.
197
+ *
198
+ * A dest we are about to write, such as `.claude/skills/meticulous-cli`, is
199
+ * often a leftover *link* into a cache from `skills add` without `--copy`.
200
+ * Unlink those (the link only, never the target) so `--copy` can write a real
201
+ * directory. A symlink nested inside such a dest is reported instead: the
202
+ * installer would write through it and it is not ours to delete.
197
203
  */
198
- const prepareSafeSkillsInstallTargets = (projectRoot) => {
204
+ const prepareSafeSkillsInstallTargets = (projectRoot, skillNames) => {
199
205
  for (const file of exports.SKILLS_INSTALL_FILE_TARGETS) {
200
206
  // Throws if the path (or any parent component) is a symlink.
201
207
  (0, exports.resolveSafeWritePath)(projectRoot, file);
@@ -204,15 +210,41 @@ const prepareSafeSkillsInstallTargets = (projectRoot) => {
204
210
  (0, exports.mkdirSafeSync)(projectRoot, dir);
205
211
  (0, exports.mkdirSafeSync)(projectRoot, (0, path_1.join)(dir, "skills"));
206
212
  }
207
- (0, exports.assertNoSymlinksUnderSkillsTrees)(projectRoot);
213
+ const replaceable = [];
214
+ const blockingLinks = [];
215
+ for (const dest of skillDestPaths(projectRoot, skillNames)) {
216
+ const stat = tryLstat(dest.absolutePath);
217
+ if (!stat) {
218
+ continue;
219
+ }
220
+ if (stat.isSymbolicLink()) {
221
+ replaceable.push(dest.relativeDisplay);
222
+ continue;
223
+ }
224
+ if (stat.isDirectory()) {
225
+ collectSymlinksUnderDirectory(dest.absolutePath, dest.relativeDisplay, blockingLinks);
226
+ }
227
+ }
228
+ if (blockingLinks.length > 0) {
229
+ // The installer will not run, so leave the leftover links as they are.
230
+ return { blockingLinks };
231
+ }
232
+ const realRoot = (0, exports.resolveRealProjectRoot)(projectRoot);
233
+ for (const relative of replaceable) {
234
+ (0, fs_1.unlinkSync)((0, path_1.join)(realRoot, relative));
235
+ }
236
+ if (replaceable.length > 0) {
237
+ console.log(` Replaced leftover Meticulous skill link(s) so they can be copied into the repo: ${replaceable.join(", ")}`);
238
+ }
239
+ return { blockingLinks: [] };
208
240
  };
209
241
  exports.prepareSafeSkillsInstallTargets = prepareSafeSkillsInstallTargets;
210
242
  /**
211
- * Re-checks skills install destinations after an external installer runs, so a
212
- * TOCTOU symlink plant during the install cannot go unnoticed — including
213
- * nested last-component symlinks under each agent's skills tree.
243
+ * Re-checks the dests this install wrote, so a TOCTOU symlink plant during the
244
+ * install cannot go unnoticed — including nested ones. Dests for other tools'
245
+ * skills are not ours to police.
214
246
  */
215
- const assertSafeSkillsInstallTargets = (projectRoot) => {
247
+ const assertSafeSkillsInstallTargets = (projectRoot, skillNames) => {
216
248
  for (const file of exports.SKILLS_INSTALL_FILE_TARGETS) {
217
249
  (0, exports.resolveSafeWritePath)(projectRoot, file);
218
250
  }
@@ -220,47 +252,57 @@ const assertSafeSkillsInstallTargets = (projectRoot) => {
220
252
  (0, exports.resolveSafeWritePath)(projectRoot, dir);
221
253
  (0, exports.resolveSafeWritePath)(projectRoot, (0, path_1.join)(dir, "skills"));
222
254
  }
223
- (0, exports.assertNoSymlinksUnderSkillsTrees)(projectRoot);
255
+ const found = [];
256
+ for (const dest of skillDestPaths(projectRoot, skillNames)) {
257
+ collectSymlinksAtPath(dest.absolutePath, dest.relativeDisplay, found);
258
+ }
259
+ const [first] = found;
260
+ if (first !== undefined) {
261
+ throw new cli_user_error_1.CliUserError(`Refusing to write through symlink at '${first}'. ` +
262
+ `Remove or replace it, then re-run \`meticulous onboard\`.`);
263
+ }
224
264
  };
225
265
  exports.assertSafeSkillsInstallTargets = assertSafeSkillsInstallTargets;
226
- /**
227
- * Recursively rejects any symlink under `.claude/skills`, `.agents/skills`,
228
- * and `.cursor/skills`. Matches `resolveSafeWritePath`: any symlink is refused,
229
- * not only ones that currently resolve outside the repo.
230
- */
231
- const assertNoSymlinksUnderSkillsTrees = (projectRoot) => {
266
+ /** Where each named skill lands, under every agent's skills directory. */
267
+ const skillDestPaths = (projectRoot, skillNames) => {
232
268
  const realRoot = (0, exports.resolveRealProjectRoot)(projectRoot);
269
+ const dests = [];
233
270
  for (const dir of exports.SKILLS_INSTALL_DIR_ROOTS) {
234
- const relativeSkills = (0, path_1.join)(dir, "skills").replace(/\\/g, "/");
235
- const absoluteSkills = (0, path_1.join)(realRoot, dir, "skills");
236
- assertNoSymlinksUnderDirectory(absoluteSkills, relativeSkills);
271
+ for (const name of skillNames) {
272
+ dests.push({
273
+ absolutePath: (0, path_1.join)(realRoot, dir, "skills", name),
274
+ relativeDisplay: `${dir}/skills/${name}`,
275
+ });
276
+ }
237
277
  }
278
+ return dests;
238
279
  };
239
- exports.assertNoSymlinksUnderSkillsTrees = assertNoSymlinksUnderSkillsTrees;
240
- const assertNoSymlinksUnderDirectory = (absoluteDir, relativeDisplay) => {
241
- const dirStat = tryLstat(absoluteDir);
242
- if (!dirStat) {
280
+ const collectSymlinksAtPath = (absolutePath, relativeDisplay, found) => {
281
+ const stat = tryLstat(absolutePath);
282
+ if (!stat) {
243
283
  return;
244
284
  }
245
- if (dirStat.isSymbolicLink()) {
246
- throw new cli_user_error_1.CliUserError(`Refusing to write through symlink at '${relativeDisplay}'. ` +
247
- `Remove or replace it, then re-run \`meticulous onboard\`.`);
248
- }
249
- if (!dirStat.isDirectory()) {
285
+ if (stat.isSymbolicLink()) {
286
+ found.push(relativeDisplay);
250
287
  return;
251
288
  }
289
+ if (stat.isDirectory()) {
290
+ collectSymlinksUnderDirectory(absolutePath, relativeDisplay, found);
291
+ }
292
+ };
293
+ const collectSymlinksUnderDirectory = (absoluteDir, relativeDisplay, found) => {
252
294
  for (const entry of (0, fs_1.readdirSync)(absoluteDir, { withFileTypes: true })) {
253
295
  const childRelative = `${relativeDisplay}/${entry.name}`;
254
296
  // Check symlink before isDirectory(): a symlink-to-dir can report as both
255
297
  // depending on platform / Node version.
256
298
  if (entry.isSymbolicLink()) {
257
- throw new cli_user_error_1.CliUserError(`Refusing to write through symlink at '${childRelative}'. ` +
258
- `Remove or replace it, then re-run \`meticulous onboard\`.`);
299
+ found.push(childRelative);
300
+ continue;
259
301
  }
260
302
  if (entry.isDirectory()) {
261
- assertNoSymlinksUnderDirectory((0, path_1.join)(absoluteDir, entry.name), childRelative);
303
+ collectSymlinksUnderDirectory((0, path_1.join)(absoluteDir, entry.name), childRelative, found);
262
304
  }
263
305
  }
264
306
  };
265
307
  //# sourceMappingURL=safe-repo-fs.js.map
266
- //# debugId=96da1693-9282-57e0-8720-eb64652df868
308
+ //# debugId=fbfbe7af-9159-507e-bce1-4a58bf776bc3
@@ -1 +1 @@
1
- {"version":3,"file":"safe-repo-fs.js","sources":["../../../src/commands/onboard/safe-repo-fs.ts"],"sourceRoot":"","names":[],"mappings":"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","debugId":"96da1693-9282-57e0-8720-eb64652df868"}
1
+ {"version":3,"file":"safe-repo-fs.js","sources":["../../../src/commands/onboard/safe-repo-fs.ts"],"sourceRoot":"","names":[],"mappings":"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","debugId":"fbfbe7af-9159-507e-bce1-4a58bf776bc3"}
@@ -10,7 +10,8 @@ export declare const SKILLS_ADD_ARGS: readonly ["add", "alwaysmeticulous/skills"
10
10
  export declare const AGENT_INTEGRATION_PATHS: readonly [".claude/skills/", ".agents/skills/", ".cursor/skills/", "skills-lock.json", ".mcp.json", ".cursor/mcp.json", ".codex/config.toml"];
11
11
  export declare const setupAgentIntegrations: (options: {
12
12
  projectRoot: string;
13
- }) => string[];
13
+ }) => Promise<string[]>;
14
+ export declare const confirmSkillsInstall: () => Promise<boolean>;
14
15
  export declare const installSkills: (projectRoot: string) => boolean;
15
16
  /**
16
17
  * Drops env vars that can redirect Node/npm resolution or inject code into
@@ -1 +1 @@
1
- {"version":3,"file":"setup-agent-integrations.d.ts","sourceRoot":"","sources":["../../../src/commands/onboard/setup-agent-integrations.ts"],"names":[],"mappings":"AAcA,eAAO,MAAM,kBAAkB,sCAAsC,CAAC;AAEtE;;;GAGG;AACH,eAAO,MAAM,uBAAuB,kBAAkB,CAAC;AAEvD,oEAAoE;AACpE,eAAO,MAAM,eAAe,gJAalB,CAAC;AAEX,iFAAiF;AACjF,eAAO,MAAM,uBAAuB,+IAQ1B,CAAC;AAEX,eAAO,MAAM,sBAAsB,YAAa;IAC9C,WAAW,EAAE,MAAM,CAAC;CACrB,KAAG,MAAM,EAuBT,CAAC;AAEF,eAAO,MAAM,aAAa,gBAAiB,MAAM,KAAG,OAwDnD,CAAC;AAMF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,wBAAwB,QAC9B,MAAM,CAAC,UAAU,KACrB,MAAM,CAAC,UAyBT,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,2BAA2B,QAAO;IAC7C,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,IAAI,CAAC;CA6CrB,CAAC;AA+BF,iFAAiF;AACjF,eAAO,MAAM,gBAAgB,gBAAiB,MAAM,KAAG,IAkDtD,CAAC;AAuFF;;;GAGG;AACH,eAAO,MAAM,uBAAuB,aACxB,OAAO,YACP,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAChC,OAcF,CAAC"}
1
+ {"version":3,"file":"setup-agent-integrations.d.ts","sourceRoot":"","sources":["../../../src/commands/onboard/setup-agent-integrations.ts"],"names":[],"mappings":"AAkBA,eAAO,MAAM,kBAAkB,sCAAsC,CAAC;AAEtE;;;GAGG;AACH,eAAO,MAAM,uBAAuB,kBAAkB,CAAC;AAEvD,oEAAoE;AACpE,eAAO,MAAM,eAAe,gJAalB,CAAC;AAEX,iFAAiF;AACjF,eAAO,MAAM,uBAAuB,+IAQ1B,CAAC;AAEX,eAAO,MAAM,sBAAsB,YAAmB;IACpD,WAAW,EAAE,MAAM,CAAC;CACrB,KAAG,OAAO,CAAC,MAAM,EAAE,CAwBnB,CAAC;AAEF,eAAO,MAAM,oBAAoB,QAAa,OAAO,CAAC,OAAO,CA6B5D,CAAC;AAEF,eAAO,MAAM,aAAa,gBAAiB,MAAM,KAAG,OAoEnD,CAAC;AAmGF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,wBAAwB,QAC9B,MAAM,CAAC,UAAU,KACrB,MAAM,CAAC,UAyBT,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,2BAA2B,QAAO;IAC7C,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,IAAI,CAAC;CA6CrB,CAAC;AA+BF,iFAAiF;AACjF,eAAO,MAAM,gBAAgB,gBAAiB,MAAM,KAAG,IAkDtD,CAAC;AAuFF;;;GAGG;AACH,eAAO,MAAM,uBAAuB,aACxB,OAAO,YACP,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAChC,OAcF,CAAC"}
@@ -1,18 +1,21 @@
1
1
  "use strict";
2
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="d86e4f01-f4b3-5d15-b551-8b7f879cf289")}catch(e){}}();
2
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="5baae447-1bf5-5010-a094-6f07a00f2bf7")}catch(e){}}();
3
3
 
4
4
  var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  return (mod && mod.__esModule) ? mod : { "default": mod };
6
6
  };
7
7
  Object.defineProperty(exports, "__esModule", { value: true });
8
- exports.isExactJsonServerConfig = exports.ensureProjectMcp = exports.materializeTrustedSkillsCli = exports.sanitizeSkillsInstallEnv = exports.installSkills = exports.setupAgentIntegrations = exports.AGENT_INTEGRATION_PATHS = exports.SKILLS_ADD_ARGS = exports.SKILLS_CLI_PACKAGE_SPEC = exports.METICULOUS_MCP_URL = void 0;
8
+ exports.isExactJsonServerConfig = exports.ensureProjectMcp = exports.materializeTrustedSkillsCli = exports.sanitizeSkillsInstallEnv = exports.installSkills = exports.confirmSkillsInstall = exports.setupAgentIntegrations = exports.AGENT_INTEGRATION_PATHS = exports.SKILLS_ADD_ARGS = exports.SKILLS_CLI_PACKAGE_SPEC = exports.METICULOUS_MCP_URL = void 0;
9
9
  const child_process_1 = require("child_process");
10
10
  const fs_1 = require("fs");
11
11
  const os_1 = require("os");
12
12
  const path_1 = require("path");
13
+ const client_1 = require("@alwaysmeticulous/client");
13
14
  const chalk_1 = __importDefault(require("chalk"));
15
+ const inquirer_1 = __importDefault(require("inquirer"));
14
16
  const cli_user_error_1 = require("../../utils/cli-user-error");
15
17
  const codex_mcp_1 = require("./codex-mcp");
18
+ const docs_urls_1 = require("./docs-urls");
16
19
  const safe_repo_fs_1 = require("./safe-repo-fs");
17
20
  exports.METICULOUS_MCP_URL = "https://app.meticulous.ai/api/mcp";
18
21
  /**
@@ -45,11 +48,12 @@ exports.AGENT_INTEGRATION_PATHS = [
45
48
  ".cursor/mcp.json",
46
49
  ".codex/config.toml",
47
50
  ];
48
- const setupAgentIntegrations = (options) => {
51
+ const setupAgentIntegrations = async (options) => {
49
52
  console.log(chalk_1.default.bold("Setting up Meticulous agent integrations…"));
50
- // Install skills for all supported agents so the onboarding PR is useful
51
- // regardless of which tool teammates use later.
52
- const skillsInstalled = (0, exports.installSkills)(options.projectRoot);
53
+ const installMeticulousSkills = await (0, exports.confirmSkillsInstall)();
54
+ const skillsInstalled = installMeticulousSkills
55
+ ? (0, exports.installSkills)(options.projectRoot)
56
+ : false;
53
57
  installProjectMcp(options.projectRoot);
54
58
  const created = listExistingIntegrationPaths(options.projectRoot, skillsInstalled);
55
59
  if (created.length > 0) {
@@ -61,20 +65,47 @@ const setupAgentIntegrations = (options) => {
61
65
  return created;
62
66
  };
63
67
  exports.setupAgentIntegrations = setupAgentIntegrations;
68
+ const confirmSkillsInstall = async () => {
69
+ // Preserve existing behavior for headless/automated onboard runs, where
70
+ // there is no terminal in which to ask the user.
71
+ if (!(0, client_1.isInteractiveContext)()) {
72
+ return true;
73
+ }
74
+ console.log(" Meticulous skills allow coding agents to interact with Meticulous and run common workflows.");
75
+ console.log(` Learn more: ${chalk_1.default.cyan(docs_urls_1.AGENTS_SETUP_DOCS_URL)}`);
76
+ console.log(chalk_1.default.dim(" This is optional and does not change the onboarding agent or its prompt."));
77
+ const { installSkills: shouldInstallSkills } = await inquirer_1.default.prompt([
78
+ {
79
+ type: "confirm",
80
+ name: "installSkills",
81
+ message: "Download Meticulous skills into this repository?",
82
+ default: true,
83
+ },
84
+ ]);
85
+ console.log("");
86
+ return shouldInstallSkills;
87
+ };
88
+ exports.confirmSkillsInstall = confirmSkillsInstall;
64
89
  const installSkills = (projectRoot) => {
65
- // Reject repo-seeded symlinks on every path the skills installer may write
66
- // (`.claude`, `.agents`, `.cursor`, `skills-lock.json`), then create those
67
- // directory roots as real dirs before handing control to the installer.
68
- (0, safe_repo_fs_1.prepareSafeSkillsInstallTargets)(projectRoot);
69
90
  // Never `npx skills` with cwd=projectRoot: npx prefers a repo-local
70
91
  // `node_modules/.bin/skills` (or a `file:` dependency) over the registry,
71
92
  // so an untrusted repo could run arbitrary code before any agent sandbox.
72
93
  // Materialize the registry CLI into a throwaway prefix, then invoke it by
73
94
  // absolute path via `node`.
74
95
  let trustedCli = null;
96
+ let skillNames;
75
97
  let result;
76
98
  try {
77
99
  trustedCli = (0, exports.materializeTrustedSkillsCli)();
100
+ skillNames = discoverSkillNames(trustedCli.cliEntry);
101
+ // Reject repo-seeded symlinks on every path this install will write
102
+ // (`.claude`, `.agents`, `.cursor`, `skills-lock.json`), then create those
103
+ // directory roots as real dirs before handing control to the installer.
104
+ const { blockingLinks } = (0, safe_repo_fs_1.prepareSafeSkillsInstallTargets)(projectRoot, skillNames);
105
+ if (blockingLinks.length > 0) {
106
+ reportSkippedSkillsInstall(blockingLinks);
107
+ return false;
108
+ }
78
109
  result = (0, child_process_1.spawnSync)(process.execPath, [trustedCli.cliEntry, ...exports.SKILLS_ADD_ARGS], {
79
110
  cwd: projectRoot,
80
111
  stdio: "inherit",
@@ -82,10 +113,12 @@ const installSkills = (projectRoot) => {
82
113
  });
83
114
  }
84
115
  catch (error) {
116
+ if (error instanceof cli_user_error_1.CliUserError) {
117
+ throw error;
118
+ }
85
119
  const detail = error instanceof Error ? `: ${error.message}` : `: ${String(error)}`;
86
120
  console.log(chalk_1.default.yellow(` Could not install Meticulous skills${detail}. Continuing without them.`));
87
121
  console.log(chalk_1.default.dim(` Retry: ${skillsInstallRetryHint(projectRoot)}`));
88
- (0, safe_repo_fs_1.assertSafeSkillsInstallTargets)(projectRoot);
89
122
  return false;
90
123
  }
91
124
  finally {
@@ -93,7 +126,7 @@ const installSkills = (projectRoot) => {
93
126
  }
94
127
  // Always re-check after the installer — a failed or partial install can
95
128
  // still plant a symlink escape on a destination we pre-created.
96
- (0, safe_repo_fs_1.assertSafeSkillsInstallTargets)(projectRoot);
129
+ (0, safe_repo_fs_1.assertSafeSkillsInstallTargets)(projectRoot, skillNames);
97
130
  if (result.error || result.status !== 0) {
98
131
  const detail = result.error ? `: ${result.error.message}` : "";
99
132
  console.log(chalk_1.default.yellow(` Could not install Meticulous skills${detail}. Continuing without them.`));
@@ -104,6 +137,82 @@ const installSkills = (projectRoot) => {
104
137
  return true;
105
138
  };
106
139
  exports.installSkills = installSkills;
140
+ const reportSkippedSkillsInstall = (blockingLinks) => {
141
+ console.log(chalk_1.default.yellow(" Skipping Meticulous skills install — onboard will not write through " +
142
+ `these symlinks:\n${blockingLinks
143
+ .map((link) => ` - ${link}`)
144
+ .join("\n")}`));
145
+ console.log(chalk_1.default.dim(" Remove or replace them and re-run `meticulous onboard` to install the skills."));
146
+ };
147
+ /**
148
+ * Names of the skills the real install will write, found by installing into a
149
+ * throwaway directory first. Every dest outside this set belongs to another
150
+ * tool, so onboard neither touches it nor lets it block the install.
151
+ */
152
+ const discoverSkillNames = (cliEntry) => {
153
+ const stagingDir = (0, fs_1.mkdtempSync)((0, path_1.join)((0, os_1.tmpdir)(), "meticulous-skills-list-"));
154
+ try {
155
+ const result = (0, child_process_1.spawnSync)(process.execPath, [cliEntry, ...exports.SKILLS_ADD_ARGS], {
156
+ cwd: stagingDir,
157
+ encoding: "utf8",
158
+ env: (0, exports.sanitizeSkillsInstallEnv)(process.env),
159
+ stdio: ["ignore", "pipe", "pipe"],
160
+ });
161
+ if (result.error || result.status !== 0) {
162
+ const stderr = (result.stderr ?? "").toString().trim();
163
+ throw new Error(result.error?.message ??
164
+ (stderr.length > 0 ? stderr : `skills add exited ${result.status}`));
165
+ }
166
+ const names = collectStagedSkillNames(stagingDir);
167
+ if (names.length === 0) {
168
+ // Carrying on with an empty list would silently disable every guard
169
+ // below while the real install still writes.
170
+ throw new Error("the skills CLI staged no skills, so onboard cannot tell which paths it would write");
171
+ }
172
+ return names;
173
+ }
174
+ finally {
175
+ (0, fs_1.rmSync)(stagingDir, { recursive: true, force: true });
176
+ }
177
+ };
178
+ /**
179
+ * Skill names in a staging directory. Read from every agent root and from the
180
+ * lockfile, since which roots the CLI writes depends on the agents it detects.
181
+ */
182
+ const collectStagedSkillNames = (stagingDir) => {
183
+ const names = new Set();
184
+ for (const dir of safe_repo_fs_1.SKILLS_INSTALL_DIR_ROOTS) {
185
+ const stagedSkills = (0, path_1.join)(stagingDir, dir, "skills");
186
+ if (!(0, fs_1.existsSync)(stagedSkills)) {
187
+ continue;
188
+ }
189
+ for (const entry of (0, fs_1.readdirSync)(stagedSkills, { withFileTypes: true })) {
190
+ if (entry.isDirectory()) {
191
+ names.add(entry.name);
192
+ }
193
+ }
194
+ }
195
+ for (const name of readStagedLockSkillNames(stagingDir)) {
196
+ names.add(name);
197
+ }
198
+ return [...names];
199
+ };
200
+ const readStagedLockSkillNames = (stagingDir) => {
201
+ const lockPath = (0, path_1.join)(stagingDir, "skills-lock.json");
202
+ if (!(0, fs_1.existsSync)(lockPath)) {
203
+ return [];
204
+ }
205
+ try {
206
+ const parsed = JSON.parse((0, fs_1.readFileSync)(lockPath, "utf8"));
207
+ const skills = parsed?.skills;
208
+ return typeof skills === "object" && skills !== null
209
+ ? Object.keys(skills)
210
+ : [];
211
+ }
212
+ catch {
213
+ return [];
214
+ }
215
+ };
107
216
  /** Matches a `node_modules/.bin` PATH entry, on either path separator. */
108
217
  const isPackageBinPathEntry = (entry) => /(?:^|[\\/])node_modules[\\/]\.bin[\\/]?$/u.test(entry.trim());
109
218
  /**
@@ -321,4 +430,4 @@ const isExactJsonServerConfig = (existing, expected) => {
321
430
  };
322
431
  exports.isExactJsonServerConfig = isExactJsonServerConfig;
323
432
  //# sourceMappingURL=setup-agent-integrations.js.map
324
- //# debugId=d86e4f01-f4b3-5d15-b551-8b7f879cf289
433
+ //# debugId=5baae447-1bf5-5010-a094-6f07a00f2bf7