coolhand-cli 0.9.0 → 0.11.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 (127) hide show
  1. package/README.md +11 -2
  2. package/dist/api/last-sync.d.ts.map +1 -1
  3. package/dist/api/last-sync.js +2 -1
  4. package/dist/api/last-sync.js.map +1 -1
  5. package/dist/api/llm-reference-client.d.ts +25 -0
  6. package/dist/api/llm-reference-client.d.ts.map +1 -0
  7. package/dist/api/llm-reference-client.js +49 -0
  8. package/dist/api/llm-reference-client.js.map +1 -0
  9. package/dist/api/template-client.d.ts +19 -0
  10. package/dist/api/template-client.d.ts.map +1 -0
  11. package/dist/api/template-client.js +47 -0
  12. package/dist/api/template-client.js.map +1 -0
  13. package/dist/auth/open-browser.d.ts.map +1 -1
  14. package/dist/auth/open-browser.js +3 -1
  15. package/dist/auth/open-browser.js.map +1 -1
  16. package/dist/base-url.d.ts +7 -0
  17. package/dist/base-url.d.ts.map +1 -0
  18. package/dist/base-url.js +14 -0
  19. package/dist/base-url.js.map +1 -0
  20. package/dist/cli.d.ts.map +1 -1
  21. package/dist/cli.js +325 -4
  22. package/dist/cli.js.map +1 -1
  23. package/dist/commands/analyze-claude-sessions.d.ts.map +1 -1
  24. package/dist/commands/analyze-claude-sessions.js +10 -21
  25. package/dist/commands/analyze-claude-sessions.js.map +1 -1
  26. package/dist/commands/get-template.d.ts +3 -0
  27. package/dist/commands/get-template.d.ts.map +1 -0
  28. package/dist/commands/get-template.js +66 -0
  29. package/dist/commands/get-template.js.map +1 -0
  30. package/dist/commands/list-referenced-file-sessions.d.ts +3 -0
  31. package/dist/commands/list-referenced-file-sessions.d.ts.map +1 -0
  32. package/dist/commands/list-referenced-file-sessions.js +44 -0
  33. package/dist/commands/list-referenced-file-sessions.js.map +1 -0
  34. package/dist/commands/login.d.ts.map +1 -1
  35. package/dist/commands/login.js +3 -2
  36. package/dist/commands/login.js.map +1 -1
  37. package/dist/commands/map-claude-projects.d.ts +22 -0
  38. package/dist/commands/map-claude-projects.d.ts.map +1 -0
  39. package/dist/commands/map-claude-projects.js +302 -0
  40. package/dist/commands/map-claude-projects.js.map +1 -0
  41. package/dist/commands/search-referenced-files.d.ts +3 -0
  42. package/dist/commands/search-referenced-files.d.ts.map +1 -0
  43. package/dist/commands/search-referenced-files.js +53 -0
  44. package/dist/commands/search-referenced-files.js.map +1 -0
  45. package/dist/commands/search-templates.d.ts +3 -0
  46. package/dist/commands/search-templates.d.ts.map +1 -0
  47. package/dist/commands/search-templates.js +63 -0
  48. package/dist/commands/search-templates.js.map +1 -0
  49. package/dist/commands/sync-skills.d.ts +18 -0
  50. package/dist/commands/sync-skills.d.ts.map +1 -0
  51. package/dist/commands/sync-skills.js +222 -0
  52. package/dist/commands/sync-skills.js.map +1 -0
  53. package/dist/commands/upload-client-file.d.ts +3 -0
  54. package/dist/commands/upload-client-file.d.ts.map +1 -0
  55. package/dist/commands/upload-client-file.js +43 -0
  56. package/dist/commands/upload-client-file.js.map +1 -0
  57. package/dist/commands/wildcard.d.ts +6 -6
  58. package/dist/commands/wildcard.d.ts.map +1 -1
  59. package/dist/commands/wildcard.js +14 -11
  60. package/dist/commands/wildcard.js.map +1 -1
  61. package/dist/config.d.ts +11 -0
  62. package/dist/config.d.ts.map +1 -1
  63. package/dist/config.js +31 -8
  64. package/dist/config.js.map +1 -1
  65. package/dist/errors.d.ts +1 -1
  66. package/dist/errors.d.ts.map +1 -1
  67. package/dist/errors.js.map +1 -1
  68. package/dist/log-request.d.ts +4 -0
  69. package/dist/log-request.d.ts.map +1 -1
  70. package/dist/log-request.js +8 -1
  71. package/dist/log-request.js.map +1 -1
  72. package/dist/logger.d.ts +1 -0
  73. package/dist/logger.d.ts.map +1 -1
  74. package/dist/logger.js +30 -1
  75. package/dist/logger.js.map +1 -1
  76. package/dist/proxy/certs.d.ts.map +1 -1
  77. package/dist/proxy/certs.js +145 -5
  78. package/dist/proxy/certs.js.map +1 -1
  79. package/dist/proxy/interceptor.d.ts +8 -1
  80. package/dist/proxy/interceptor.d.ts.map +1 -1
  81. package/dist/proxy/interceptor.js +36 -3
  82. package/dist/proxy/interceptor.js.map +1 -1
  83. package/dist/proxy/proxy.d.ts.map +1 -1
  84. package/dist/proxy/proxy.js +75 -6
  85. package/dist/proxy/proxy.js.map +1 -1
  86. package/dist/proxy/wrap-runner.d.ts +2 -17
  87. package/dist/proxy/wrap-runner.d.ts.map +1 -1
  88. package/dist/proxy/wrap-runner.js +13 -29
  89. package/dist/proxy/wrap-runner.js.map +1 -1
  90. package/dist/sessions/claude-scanner.d.ts +3 -0
  91. package/dist/sessions/claude-scanner.d.ts.map +1 -1
  92. package/dist/sessions/claude-scanner.js +8 -0
  93. package/dist/sessions/claude-scanner.js.map +1 -1
  94. package/dist/sessions/cowork-scanner.d.ts.map +1 -1
  95. package/dist/sessions/cowork-scanner.js +6 -1
  96. package/dist/sessions/cowork-scanner.js.map +1 -1
  97. package/dist/sessions/redact-secrets.d.ts.map +1 -1
  98. package/dist/sessions/redact-secrets.js +13 -2
  99. package/dist/sessions/redact-secrets.js.map +1 -1
  100. package/dist/sessions/session-filter.d.ts +3 -1
  101. package/dist/sessions/session-filter.d.ts.map +1 -1
  102. package/dist/sessions/session-filter.js +9 -3
  103. package/dist/sessions/session-filter.js.map +1 -1
  104. package/dist/skills/skill-scanner.d.ts +55 -0
  105. package/dist/skills/skill-scanner.d.ts.map +1 -0
  106. package/dist/skills/skill-scanner.js +132 -0
  107. package/dist/skills/skill-scanner.js.map +1 -0
  108. package/dist/skills/skill-state.d.ts +29 -0
  109. package/dist/skills/skill-state.d.ts.map +1 -0
  110. package/dist/skills/skill-state.js +111 -0
  111. package/dist/skills/skill-state.js.map +1 -0
  112. package/dist/types.d.ts +77 -0
  113. package/dist/types.d.ts.map +1 -1
  114. package/dist/types.js.map +1 -1
  115. package/dist/upload-client-file.d.ts +31 -0
  116. package/dist/upload-client-file.d.ts.map +1 -0
  117. package/dist/upload-client-file.js +81 -0
  118. package/dist/upload-client-file.js.map +1 -0
  119. package/dist/version.d.ts +2 -2
  120. package/dist/version.d.ts.map +1 -1
  121. package/dist/version.js +1 -1
  122. package/dist/version.js.map +1 -1
  123. package/dist/win-spawn.d.ts +6 -0
  124. package/dist/win-spawn.d.ts.map +1 -0
  125. package/dist/win-spawn.js +32 -0
  126. package/dist/win-spawn.js.map +1 -0
  127. package/package.json +7 -5
@@ -4,7 +4,7 @@ import { scanSessions, sessionIdOf } from '../sessions/claude-scanner.js';
4
4
  import { scanCoworkSessions } from '../sessions/cowork-scanner.js';
5
5
  import { loadCaptureState, getTurnsSubmitted, recordSubmission, saveCaptureState, V1_MIGRATION_SENTINEL, } from '../sessions/capture-state.js';
6
6
  import { fetchLastSync } from '../api/last-sync.js';
7
- import { loadConfig, resolveClient } from '../config.js';
7
+ import { loadConfig, resolveClientForDryRun } from '../config.js';
8
8
  import { logRequest } from '../log-request.js';
9
9
  import { parseWhen } from '../parse-when.js';
10
10
  import { buildSessionFilter } from '../sessions/session-filter.js';
@@ -55,26 +55,15 @@ export async function run(opts) {
55
55
  // stderr. Using the resolved client_id as the state key ensures consistent tracking regardless
56
56
  // of which selection path was used.
57
57
  //
58
- // NOT_CONFIGURED is caught and treated as "unauthenticated" only when no clients are stored
59
- // at all, so that --dry-run still works without credentials (same behaviour as before this
60
- // branch). If clients exist but resolution failed (e.g. no default on a non-TTY), the error
61
- // propagates so the user sees a clear message rather than a silent no-op.
62
- // Any other error (e.g. CLIENT_NOT_FOUND for a bad --client-id) also propagates.
58
+ // resolveClientForDryRun tolerates "no clients configured at all" so --dry-run still works
59
+ // without credentials (same behaviour as before this branch). If clients exist but resolution
60
+ // failed (e.g. no default on a non-TTY), the error propagates so the user sees a clear message
61
+ // rather than a silent no-op. Any other error (e.g. CLIENT_NOT_FOUND for a bad --client-id)
62
+ // also propagates.
63
63
  const cfg = await loadConfig();
64
- let stateClientId = '_default';
65
- let resolvedClientId;
66
- try {
67
- const client = await resolveClient(cfg, opts.clientId);
68
- stateClientId = client.client_id;
69
- resolvedClientId = client.client_id;
70
- }
71
- catch (err) {
72
- if (!(err instanceof CliError) ||
73
- err.code !== 'NOT_CONFIGURED' ||
74
- Object.keys(cfg.clients).length > 0) {
75
- throw err;
76
- }
77
- }
64
+ const client = await resolveClientForDryRun(cfg, opts.clientId);
65
+ const stateClientId = client?.client_id ?? '_default';
66
+ const resolvedClientId = client?.client_id;
78
67
  const state = await loadCaptureState();
79
68
  // (2) Work out the reference timestamp. serverTime is only used when local state is absent or
80
69
  // invalid (resolveReferenceTime prefers lastSyncAt), so skip the round-trip when unneeded.
@@ -191,7 +180,7 @@ export async function run(opts) {
191
180
  const sessionId = sessionIdOf(envelope);
192
181
  const prior = getTurnsSubmitted(state, stateClientId, sessionId);
193
182
  try {
194
- await logRequest(envelope, { clientId: resolvedClientId });
183
+ await logRequest(envelope, { clientId: resolvedClientId, projectPath: envelope.projectPath });
195
184
  recordSubmission(state, stateClientId, sessionId, envelope.turnCount);
196
185
  if (prior === 0) {
197
186
  submittedNew += 1;
@@ -1 +1 @@
1
- {"version":3,"file":"analyze-claude-sessions.js","sourceRoot":"","sources":["../../src/commands/analyze-claude-sessions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"analyze-claude-sessions.js","sourceRoot":"","sources":["../../src/commands/analyze-claude-sessions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,WAAW,EAAyC,MAAM,+BAA+B,CAAC;AACjH,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,qBAAqB,GAEtB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAClE,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAGnE,oGAAoG;AACpG,oFAAoF;AACpF,mFAAmF;AACnF,uFAAuF;AACvF,6CAA6C;AAC7C,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,CAAC,gBAAgB,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,cAAc,CAAC,CAAC,CAAC;AAExG;;;;;;;;GAQG;AACH,SAAS,oBAAoB,CAAC,UAAuB,EAAE,KAAmB;IACxE,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;QACrB,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QACzC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;YACnC,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IACD,IAAI,UAAU,EAAE,CAAC;QACf,OAAO,UAAU,CAAC;IACpB,CAAC;IACD,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC;AACrB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,IAAkC;IAC/D,OAAO,OAAO,CACZ,IAAI,CAAC,KAAK;QACR,IAAI,CAAC,KAAK;QACV,IAAI,CAAC,WAAW;QAChB,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;QAC3C,CAAC,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC,CAC5D,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,GAAG,CAAC,IAAkC;IAC1D,IAAI,CAAC;QACH,8FAA8F;QAC9F,8FAA8F;QAC9F,2FAA2F;QAC3F,+FAA+F;QAC/F,oCAAoC;QACpC,EAAE;QACF,2FAA2F;QAC3F,8FAA8F;QAC9F,+FAA+F;QAC/F,4FAA4F;QAC5F,mBAAmB;QACnB,MAAM,GAAG,GAAG,MAAM,UAAU,EAAE,CAAC;QAC/B,MAAM,MAAM,GAAG,MAAM,sBAAsB,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAChE,MAAM,aAAa,GAAG,MAAM,EAAE,SAAS,IAAI,UAAU,CAAC;QACtD,MAAM,gBAAgB,GAAG,MAAM,EAAE,SAAS,CAAC;QAC3C,MAAM,KAAK,GAAG,MAAM,gBAAgB,EAAE,CAAC;QAEvC,8FAA8F;QAC9F,2FAA2F;QAC3F,MAAM,WAAW,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACzE,MAAM,eAAe,GAAG,CAAC,WAAW,IAAI,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC;QAC5E,kFAAkF;QAClF,sFAAsF;QACtF,yFAAyF;QACzF,MAAM,UAAU,GAAG,eAAe,IAAI,gBAAgB,KAAK,SAAS;YAClE,CAAC,CAAC,MAAM,aAAa,CAAC,EAAE,QAAQ,EAAE,gBAAgB,EAAE,CAAC;YACrD,CAAC,CAAC,IAAI,CAAC;QACT,MAAM,aAAa,GAAG,oBAAoB,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QAE9D,6FAA6F;QAC7F,4FAA4F;QAC5F,yFAAyF;QACzF,oEAAoE;QACpE,MAAM,YAAY,GAAG,IAAI,IAAI,EAAE,CAAC;QAEhC,mGAAmG;QACnG,kGAAkG;QAClG,yFAAyF;QACzF,wEAAwE;QACxE,MAAM,eAAe,GAAG,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC;QAEhG,8FAA8F;QAC9F,gGAAgG;QAChG,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,YAAY,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC1G,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,YAAY,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACpG,IAAI,aAAa,IAAI,SAAS,IAAI,aAAa,CAAC,OAAO,EAAE,GAAG,SAAS,CAAC,OAAO,EAAE,EAAE,CAAC;YAChF,MAAM,IAAI,QAAQ,CAAC,cAAc,EAAE,YAAY,IAAI,CAAC,KAAK,uBAAuB,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC;QAClG,CAAC;QAED,sFAAsF;QACtF,kEAAkE;QAClE,MAAM,gBAAgB,GACpB,SAAS,KAAK,IAAI;YAClB,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC;YAChC,CAAC,IAAI,CAAC,eAAe,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QAC1C,MAAM,SAAS,GAAG,gBAAgB;YAChC,CAAC,CAAC,kBAAkB,CAAC;gBACjB,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE;gBAC7B,eAAe,EAAE,IAAI,CAAC,QAAQ;gBAC9B,eAAe,EAAE,IAAI,CAAC,eAAe;aACtC,CAAC;YACJ,CAAC,CAAC,SAAS,CAAC;QAEd,4FAA4F;QAC5F,6FAA6F;QAC7F,0FAA0F;QAC1F,uEAAuE;QACvE,MAAM,CAAC,YAAY,EAAE,YAAY,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACrD,YAAY,CAAC;gBACX,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,SAAS,EAAE,aAAa,IAAI,aAAa;gBACzC,SAAS;aACV,CAAC;YACF,IAAI,CAAC,WAAW;gBACd,CAAC,CAAC,OAAO,CAAC,OAAO,CAAa,EAAE,SAAS,EAAE,EAAE,EAAE,YAAY,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;gBAC3F,CAAC,CAAC,kBAAkB,CAAC,EAAE,SAAS,EAAE,aAAa,IAAI,eAAe,EAAE,SAAS,EAAE,CAAC;SACnF,CAAC,CAAC;QACH,MAAM,SAAS,GAAG,CAAC,GAAG,YAAY,CAAC,SAAS,EAAE,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;QACzE,MAAM,YAAY,GAAG,YAAY,CAAC,YAAY,GAAG,YAAY,CAAC,YAAY,CAAC;QAC3E,MAAM,aAAa,GAAG,YAAY,CAAC,WAAW,GAAG,YAAY,CAAC,WAAW,CAAC;QAE1E,gGAAgG;QAChG,8FAA8F;QAC9F,4BAA4B;QAC5B,MAAM,QAAQ,GAAsB,EAAE,CAAC;QACvC,IAAI,QAAQ,GAAG,CAAC,CAAC;QACjB,IAAI,YAAY,GAAG,CAAC,CAAC;QACrB,IAAI,cAAc,GAAG,CAAC,CAAC;QACvB,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YACjC,MAAM,SAAS,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;YACxC,MAAM,OAAO,GAAG,iBAAiB,CAAC,KAAK,EAAE,aAAa,EAAE,SAAS,CAAC,CAAC;YACnE,IAAI,OAAO,KAAK,CAAC,EAAE,CAAC;gBAClB,QAAQ,IAAI,CAAC,CAAC;gBACd,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC1B,CAAC;iBAAM,IAAI,OAAO,KAAK,qBAAqB,EAAE,CAAC;gBAC7C,wFAAwF;gBACxF,6FAA6F;gBAC7F,gBAAgB,CAAC,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;gBACtE,cAAc,IAAI,CAAC,CAAC;YACtB,CAAC;iBAAM,IAAI,QAAQ,CAAC,SAAS,GAAG,OAAO,EAAE,CAAC;gBACxC,YAAY,IAAI,CAAC,CAAC;gBAClB,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC1B,CAAC;iBAAM,CAAC;gBACN,cAAc,IAAI,CAAC,CAAC;YACtB,CAAC;QACH,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBACd,MAAM,CAAC,IAAI,CAAC;oBACV,EAAE,EAAE,IAAI;oBACR,MAAM,EAAE,IAAI;oBACZ,OAAO,EAAE,YAAY;oBACrB,QAAQ,EAAE,aAAa;oBACvB,GAAG,EAAE,QAAQ;oBACb,OAAO,EAAE,YAAY;oBACrB,SAAS,EAAE,cAAc;oBACzB,QAAQ,EAAE,QAAQ,CAAC,MAAM;iBAC1B,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,MAAM,YAAY,GAAG,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,aAAa,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC;gBAChF,MAAM,CAAC,IAAI,CACT,YAAY,QAAQ,oBAAoB,YAAY,YAAY;oBAC9D,GAAG,cAAc,eAAe,YAAY,WAAW,YAAY,kBAAkB,CACxF,CAAC;YACJ,CAAC;YACD,OAAO,QAAQ,CAAC,EAAE,CAAC;QACrB,CAAC;QAED,kGAAkG;QAClG,yEAAyE;QACzE,IAAI,YAAY,GAAG,CAAC,CAAC;QACrB,IAAI,gBAAgB,GAAG,CAAC,CAAC;QACzB,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,IAAI,CAAC;YACH,KAAK,MAAM,QAAQ,IAAI,QAAQ,EAAE,CAAC;gBAChC,MAAM,SAAS,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;gBACxC,MAAM,KAAK,GAAG,iBAAiB,CAAC,KAAK,EAAE,aAAa,EAAE,SAAS,CAAC,CAAC;gBACjE,IAAI,CAAC;oBACH,MAAM,UAAU,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,gBAAgB,EAAE,WAAW,EAAE,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;oBAC9F,gBAAgB,CAAC,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;oBACtE,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;wBAChB,YAAY,IAAI,CAAC,CAAC;oBACpB,CAAC;yBAAM,CAAC;wBACN,gBAAgB,IAAI,CAAC,CAAC;oBACxB,CAAC;gBACH,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,IAAI,GAAG,YAAY,QAAQ,IAAI,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;wBACzD,MAAM,GAAG,CAAC;oBACZ,CAAC;oBACD,MAAM,IAAI,CAAC,CAAC;oBACZ,MAAM,CAAC,IAAI,CAAC,6BAA6B,MAAM,CAAE,GAAa,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;gBAC7E,CAAC;YACH,CAAC;YACD,sFAAsF;YACtF,2FAA2F;YAC3F,yFAAyF;YACzF,yFAAyF;YACzF,4FAA4F;YAC5F,uEAAuE;YACvE,IAAI,MAAM,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC1C,KAAK,CAAC,UAAU,GAAG,YAAY,CAAC,WAAW,EAAE,CAAC;gBAC9C,sFAAsF;gBACtF,2FAA2F;gBAC3F,qEAAqE;gBACrE,IAAI,YAAY,CAAC,EAAE,EAAE,CAAC;oBACpB,KAAK,CAAC,gBAAgB,GAAG,YAAY,CAAC,WAAW,EAAE,CAAC;gBACtD,CAAC;YACH,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC;gBACH,MAAM,gBAAgB,CAAC,KAAK,CAAC,CAAC;YAChC,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,CAAC,IAAI,CAAC,iCAAiC,MAAM,CAAE,GAAa,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YACjF,CAAC;QACH,CAAC;QAED,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,MAAM,CAAC,IAAI,CAAC;gBACV,EAAE,EAAE,MAAM,KAAK,CAAC;gBAChB,OAAO,EAAE,YAAY;gBACrB,QAAQ,EAAE,aAAa;gBACvB,GAAG,EAAE,YAAY;gBACjB,OAAO,EAAE,gBAAgB;gBACzB,SAAS,EAAE,cAAc;gBACzB,MAAM;aACP,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,MAAM,WAAW,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,MAAM,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3D,MAAM,YAAY,GAAG,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,aAAa,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC;YAChF,MAAM,aAAa,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,8CAA8C,CAAC,CAAC,CAAC,EAAE,CAAC;YACjG,MAAM,CAAC,IAAI,CACT,aAAa,YAAY,SAAS,gBAAgB,YAAY;gBAC5D,GAAG,cAAc,eAAe,YAAY,WAAW,YAAY,IAAI,WAAW,IAAI,aAAa,EAAE,CACxG,CAAC;QACJ,CAAC;QAED,OAAO,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC;IAC1D,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,QAAQ,EAAE,CAAC;YAC5B,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBACd,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YAC5E,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,IAAI,CAAC,UAAU,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC;YAC7D,CAAC;YACD,OAAO,GAAG,CAAC,QAAQ,CAAC;QACtB,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { GetTemplateOptions } from '../types.js';
2
+ export declare function run(opts: GetTemplateOptions): Promise<number>;
3
+ //# sourceMappingURL=get-template.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-template.d.ts","sourceRoot":"","sources":["../../src/commands/get-template.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAoCtD,wBAAsB,GAAG,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,CAgCnE"}
@@ -0,0 +1,66 @@
1
+ import { CliError, ExitCode } from '../errors.js';
2
+ import { logger, redact } from '../logger.js';
3
+ import { getTemplateClient, mapTemplateHttpError } from '../api/template-client.js';
4
+ const TIMEOUT_HINT = 'It is retryable — try again shortly.';
5
+ const SUMMARY_FIELDS = [
6
+ { key: 'id', label: 'ID' },
7
+ { key: 'name', label: 'Name' },
8
+ { key: 'status', label: 'Status' },
9
+ { key: 'version', label: 'Version' },
10
+ { key: 'group', label: 'Group' },
11
+ { key: 'workload_name', label: 'Workload' },
12
+ { key: 'workload_id', label: 'Workload ID' },
13
+ { key: 'system_template', label: 'System template' },
14
+ { key: 'deprecated_at', label: 'Deprecated at' },
15
+ { key: 'log_count', label: 'Log count' },
16
+ { key: 'created_at', label: 'Created' },
17
+ { key: 'updated_at', label: 'Updated' },
18
+ ];
19
+ function printSummary(t) {
20
+ for (const { key, label } of SUMMARY_FIELDS) {
21
+ const v = t[key];
22
+ if (typeof v === 'string' || typeof v === 'number' || typeof v === 'boolean') {
23
+ logger.info(`${label}: ${v}`);
24
+ }
25
+ }
26
+ // Printed in full rather than truncated: a partial regex is misleading, and `logger.info`
27
+ // already strips ANSI escapes from server-supplied text before it reaches the terminal.
28
+ if (t.user_prompt_pattern) {
29
+ logger.info(`\nUser Prompt Pattern\n-------------------\n${t.user_prompt_pattern}`);
30
+ }
31
+ if (t.system_prompt_pattern) {
32
+ logger.info(`\nSystem Prompt Pattern\n---------------------\n${t.system_prompt_pattern}`);
33
+ }
34
+ }
35
+ export async function run(opts) {
36
+ try {
37
+ const coolhand = await getTemplateClient({ clientId: opts.clientId });
38
+ let result;
39
+ try {
40
+ result = await coolhand.getTemplate(opts.id);
41
+ }
42
+ catch (err) {
43
+ throw mapTemplateHttpError(err, `Template "${opts.id}" not found (or does not belong to this client).`, TIMEOUT_HINT);
44
+ }
45
+ if (opts.json) {
46
+ logger.json({ ok: true, result });
47
+ }
48
+ else {
49
+ printSummary(result);
50
+ }
51
+ return ExitCode.OK;
52
+ }
53
+ catch (err) {
54
+ if (err instanceof CliError) {
55
+ if (opts.json) {
56
+ logger.json({ ok: false, error: err.code, message: redact(err.message) });
57
+ }
58
+ else {
59
+ logger.info(`Error: ${redact(err.message)} [${err.code}]`);
60
+ }
61
+ return err.exitCode;
62
+ }
63
+ throw err;
64
+ }
65
+ }
66
+ //# sourceMappingURL=get-template.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-template.js","sourceRoot":"","sources":["../../src/commands/get-template.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { ListReferencedFileSessionsOptions } from '../types.js';
2
+ export declare function run(opts: ListReferencedFileSessionsOptions): Promise<number>;
3
+ //# sourceMappingURL=list-referenced-file-sessions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-referenced-file-sessions.d.ts","sourceRoot":"","sources":["../../src/commands/list-referenced-file-sessions.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,iCAAiC,EAAE,MAAM,aAAa,CAAC;AAErE,wBAAsB,GAAG,CAAC,IAAI,EAAE,iCAAiC,GAAG,OAAO,CAAC,MAAM,CAAC,CAwClF"}
@@ -0,0 +1,44 @@
1
+ import { CliError, ExitCode } from '../errors.js';
2
+ import { logger, redact } from '../logger.js';
3
+ import { getLlmReferenceClient, mapLlmReferenceHttpError } from '../api/llm-reference-client.js';
4
+ export async function run(opts) {
5
+ try {
6
+ const coolhand = await getLlmReferenceClient({ clientId: opts.clientId });
7
+ const params = { filePath: opts.filePath };
8
+ if (opts.page !== undefined) {
9
+ params.page = opts.page;
10
+ }
11
+ if (opts.perPage !== undefined) {
12
+ params.per = opts.perPage;
13
+ }
14
+ let result;
15
+ try {
16
+ result = await coolhand.listReferencedFileSessions(params);
17
+ }
18
+ catch (err) {
19
+ throw mapLlmReferenceHttpError(err, 'lower --per-page and try again');
20
+ }
21
+ if (opts.json) {
22
+ logger.json({ ok: true, result });
23
+ }
24
+ else {
25
+ const { pagination } = result;
26
+ logger.info(`Page ${pagination.current_page} of ${pagination.total_pages} (${pagination.total_count} total) — use --page N to navigate`);
27
+ logger.info(JSON.stringify(result, null, 2));
28
+ }
29
+ return ExitCode.OK;
30
+ }
31
+ catch (err) {
32
+ if (err instanceof CliError) {
33
+ if (opts.json) {
34
+ logger.json({ ok: false, error: err.code, message: redact(err.message) });
35
+ }
36
+ else {
37
+ logger.info(`Error: ${redact(err.message)} [${err.code}]`);
38
+ }
39
+ return err.exitCode;
40
+ }
41
+ throw err;
42
+ }
43
+ }
44
+ //# sourceMappingURL=list-referenced-file-sessions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-referenced-file-sessions.js","sourceRoot":"","sources":["../../src/commands/list-referenced-file-sessions.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;AAGjG,MAAM,CAAC,KAAK,UAAU,GAAG,CAAC,IAAuC;IAC/D,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,qBAAqB,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QAE1E,MAAM,MAAM,GAAqC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC7E,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC5B,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QAC1B,CAAC;QACD,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YAC/B,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC;QAC5B,CAAC;QAED,IAAI,MAA0C,CAAC;QAC/C,IAAI,CAAC;YACH,MAAM,GAAG,MAAM,QAAQ,CAAC,0BAA0B,CAAC,MAAM,CAAC,CAAC;QAC7D,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,wBAAwB,CAAC,GAAG,EAAE,gCAAgC,CAAC,CAAC;QACxE,CAAC;QAED,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;QACpC,CAAC;aAAM,CAAC;YACN,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,CAAC;YAC9B,MAAM,CAAC,IAAI,CACT,QAAQ,UAAU,CAAC,YAAY,OAAO,UAAU,CAAC,WAAW,KAAK,UAAU,CAAC,WAAW,oCAAoC,CAC5H,CAAC;YACF,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC/C,CAAC;QACD,OAAO,QAAQ,CAAC,EAAE,CAAC;IACrB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,QAAQ,EAAE,CAAC;YAC5B,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBACd,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YAC5E,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,IAAI,CAAC,UAAU,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC;YAC7D,CAAC;YACD,OAAO,GAAG,CAAC,QAAQ,CAAC;QACtB,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AAWA,OAAO,EAA0D,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAkDxG,wBAAsB,GAAG,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAwH7D"}
1
+ {"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AAYA,OAAO,EAA0D,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAqDxG,wBAAsB,GAAG,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAwH7D"}
@@ -1,4 +1,5 @@
1
1
  import { CliError, ExitCode } from '../errors.js';
2
+ import { isAllowedBaseUrlScheme } from '../base-url.js';
2
3
  import { logger, redact } from '../logger.js';
3
4
  import { maskToken } from '../mask.js';
4
5
  import { upsertClient, configPath } from '../config.js';
@@ -44,8 +45,8 @@ function parseBaseUrl(input) {
44
45
  catch {
45
46
  throw new CliError('INVALID_BASE_URL', `Invalid --base-url: ${raw}`);
46
47
  }
47
- if (parsed.protocol !== 'http:' && parsed.protocol !== 'https:') {
48
- throw new CliError('INVALID_BASE_URL', `--base-url must be http or https, got: ${parsed.protocol}`);
48
+ if (!isAllowedBaseUrlScheme(parsed)) {
49
+ throw new CliError('INVALID_BASE_URL', `--base-url must use https:// (got: ${raw}). For local dev, http://localhost is allowed.`);
49
50
  }
50
51
  return parsed;
51
52
  }
@@ -1 +1 @@
1
- {"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import type { MapClaudeProjectsOptions } from '../types.js';
2
+ export interface MapClaudeProjectsDeps {
3
+ homedir?: () => string;
4
+ }
5
+ /**
6
+ * Find every directory named "claude" (see `isClaudeDirName`), searching recursively from
7
+ * `root`. A match is not itself searched further — its full contents are captured by
8
+ * `appendTree` instead, so a nested "claude" folder inside a match isn't double-reported as its
9
+ * own match. A *symlinked* "claude"/".claude" directory still counts as a match (dotfile
10
+ * managers like chezmoi/Stow/yadm commonly manage `~/.claude` this way) — only non-matching
11
+ * symlinked directories are skipped during further recursion, to avoid link loops and escaping
12
+ * `root`. Unreadable directories (permissions, etc.) are skipped rather than aborting the whole
13
+ * scan.
14
+ *
15
+ * Being recorded as a match here does not by itself mean its contents get walked — a matched
16
+ * symlink whose target resolves outside `root` is caller-checked (see `resolvesWithinRoot`,
17
+ * used in `run()`) and its contents are never enumerated, since nothing here constrains where a
18
+ * "claude"-named symlink's target actually lives.
19
+ */
20
+ export declare function findClaudeDirs(root: string): Promise<string[]>;
21
+ export declare function run(opts: MapClaudeProjectsOptions, deps?: MapClaudeProjectsDeps): Promise<number>;
22
+ //# sourceMappingURL=map-claude-projects.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"map-claude-projects.d.ts","sourceRoot":"","sources":["../../src/commands/map-claude-projects.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAE5D,MAAM,WAAW,qBAAqB;IACpC,OAAO,CAAC,EAAE,MAAM,MAAM,CAAC;CACxB;AASD;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAgDpE;AAkJD,wBAAsB,GAAG,CAAC,IAAI,EAAE,wBAAwB,EAAE,IAAI,GAAE,qBAA0B,GAAG,OAAO,CAAC,MAAM,CAAC,CA8G3G"}
@@ -0,0 +1,302 @@
1
+ import { promises as fs } from 'fs';
2
+ import * as os from 'os';
3
+ import * as path from 'path';
4
+ import { randomBytes } from 'crypto';
5
+ import { CliError, ExitCode } from '../errors.js';
6
+ import { logger, redact } from '../logger.js';
7
+ import { confirm } from '../prompt.js';
8
+ import { uploadClientFile } from '../upload-client-file.js';
9
+ /** Matches "claude"/"Claude" and also the dotfile convention "`.claude`"/"`.Claude`" (Claude
10
+ * Code's own home directory) — a leading dot is stripped before comparison, everything else
11
+ * must match exactly (not a substring match, so "claude-code" or "my-claude-notes" don't count). */
12
+ function isClaudeDirName(name) {
13
+ return name.replace(/^\./, '').toLowerCase() === 'claude';
14
+ }
15
+ /**
16
+ * Find every directory named "claude" (see `isClaudeDirName`), searching recursively from
17
+ * `root`. A match is not itself searched further — its full contents are captured by
18
+ * `appendTree` instead, so a nested "claude" folder inside a match isn't double-reported as its
19
+ * own match. A *symlinked* "claude"/".claude" directory still counts as a match (dotfile
20
+ * managers like chezmoi/Stow/yadm commonly manage `~/.claude` this way) — only non-matching
21
+ * symlinked directories are skipped during further recursion, to avoid link loops and escaping
22
+ * `root`. Unreadable directories (permissions, etc.) are skipped rather than aborting the whole
23
+ * scan.
24
+ *
25
+ * Being recorded as a match here does not by itself mean its contents get walked — a matched
26
+ * symlink whose target resolves outside `root` is caller-checked (see `resolvesWithinRoot`,
27
+ * used in `run()`) and its contents are never enumerated, since nothing here constrains where a
28
+ * "claude"-named symlink's target actually lives.
29
+ */
30
+ export async function findClaudeDirs(root) {
31
+ if (isClaudeDirName(path.basename(root))) {
32
+ // Unlike every match found via walk() below, root is handed to us directly rather than
33
+ // discovered via fs.readdir — nothing has confirmed it actually exists or is a directory
34
+ // yet. Without this check, a nonexistent or wrong-type --root (e.g. `--root ~/.claude` on a
35
+ // machine where that path doesn't exist — exactly the usage docs/commands.md recommends)
36
+ // would be reported as a real match, and the empty/failing walk downstream would silently
37
+ // produce and upload a near-empty "successful" report instead of a clear "not found" result.
38
+ const rootStat = await fs.stat(root).catch(() => null);
39
+ return rootStat?.isDirectory() ? [root] : [];
40
+ }
41
+ const matches = [];
42
+ async function walk(dir) {
43
+ let entries;
44
+ try {
45
+ entries = await fs.readdir(dir, { withFileTypes: true });
46
+ }
47
+ catch {
48
+ return;
49
+ }
50
+ for (const entry of entries) {
51
+ const fullPath = path.join(dir, entry.name);
52
+ if (isClaudeDirName(entry.name)) {
53
+ if (entry.isDirectory()) {
54
+ matches.push(fullPath);
55
+ }
56
+ else if (entry.isSymbolicLink()) {
57
+ // Resolve the target to confirm it's actually a directory before recording it as a
58
+ // match (a symlink to a plain file literally named "claude" wouldn't be one). A
59
+ // broken/looping symlink fails fs.stat and is simply not reported as a match.
60
+ const targetStat = await fs.stat(fullPath).catch(() => null);
61
+ if (targetStat?.isDirectory()) {
62
+ matches.push(fullPath);
63
+ }
64
+ }
65
+ continue; // matched (or matched-by-name-but-not-a-dir) — never searched further either way
66
+ }
67
+ if (entry.isSymbolicLink() || !entry.isDirectory()) {
68
+ continue; // non-matching symlink or non-directory — never followed
69
+ }
70
+ await walk(fullPath);
71
+ }
72
+ }
73
+ await walk(root);
74
+ return matches;
75
+ }
76
+ /**
77
+ * Wrap `text` in a markdown inline-code span that's safe even if `text` itself contains
78
+ * backticks (a literal backtick in a filename would otherwise prematurely close the span and
79
+ * mangle the rest of the report) — CommonMark's own rule: a code span delimited by N backticks
80
+ * can safely contain any run of fewer than N backticks, as long as it's not at the very edge.
81
+ *
82
+ * A literal newline (legal in a POSIX filename) is replaced with a visible placeholder rather
83
+ * than left as-is: CommonMark only collapses line endings *inside* a code span when the span
84
+ * stays within one block, which doesn't hold across an ATX heading's own line boundary (this
85
+ * function is also used to build `## <match>` headings) — an embedded `\n` would otherwise split
86
+ * the heading into two lines, one with an unclosed code span.
87
+ */
88
+ function mdInlineCode(text) {
89
+ const singleLine = text.replace(/\r\n|\r|\n/g, '␤');
90
+ const runs = singleLine.match(/`+/g);
91
+ const longestRun = runs ? Math.max(...runs.map((r) => r.length)) : 0;
92
+ if (longestRun === 0) {
93
+ return `\`${singleLine}\``;
94
+ }
95
+ const fence = '`'.repeat(longestRun + 1);
96
+ return `${fence} ${singleLine} ${fence}`;
97
+ }
98
+ /**
99
+ * Resolve both `root` and `target` to their canonical (symlink-free) paths and report whether
100
+ * `target` actually lives under `root` — used to decide whether a *matched* symlinked directory
101
+ * (see `findClaudeDirs`) is safe to walk. A `claude`/`.claude` symlink is recorded as a match
102
+ * without regard for where it points, so without this check a planted symlink anywhere under the
103
+ * search root (a malicious repo clone, an extracted archive) could point at an arbitrary
104
+ * unrelated directory — `/`, `~/.ssh`, a mounted volume — and have its entire contents (every
105
+ * filename, size, and timestamp) enumerated into the uploaded report. If either path fails to
106
+ * resolve (e.g. a dangling symlink), this conservatively reports "does not resolve within root".
107
+ */
108
+ async function resolvesWithinRoot(root, target) {
109
+ const [realRoot, realTarget] = await Promise.all([
110
+ fs.realpath(root).catch(() => null),
111
+ fs.realpath(target).catch(() => null),
112
+ ]);
113
+ if (realRoot === null || realTarget === null) {
114
+ return { within: false, realTarget };
115
+ }
116
+ const relative = path.relative(realRoot, realTarget);
117
+ const within = relative === '' || (!relative.startsWith('..') && !path.isAbsolute(relative));
118
+ return { within, realTarget };
119
+ }
120
+ /**
121
+ * Depth-first append of `dir`'s full contents (recursive, no exclusions) to `lines` as an
122
+ * indented markdown list, one entry per file/directory, each annotated with basic metadata
123
+ * (size, extension, created/modified times for files). Never reads file *contents* — only
124
+ * filesystem metadata — so nothing from inside these folders leaves the machine except names
125
+ * and stats.
126
+ */
127
+ async function appendTree(lines, dir, depth) {
128
+ const indent = ' '.repeat(depth);
129
+ let entries;
130
+ try {
131
+ entries = await fs.readdir(dir, { withFileTypes: true });
132
+ }
133
+ catch (err) {
134
+ lines.push(`${indent}- ⚠️ (unreadable: ${err.message})`);
135
+ return;
136
+ }
137
+ entries.sort((a, b) => a.name.localeCompare(b.name));
138
+ for (const entry of entries) {
139
+ const fullPath = path.join(dir, entry.name);
140
+ if (entry.isSymbolicLink()) {
141
+ // Resolve the target only to tell a file from a directory — a symlinked directory is
142
+ // never followed (avoids link loops and escaping dir), but a symlinked file is safe to
143
+ // list (using the target's metadata) since nothing recurses into it.
144
+ let targetStat;
145
+ try {
146
+ targetStat = await fs.stat(fullPath);
147
+ }
148
+ catch (err) {
149
+ lines.push(`${indent}- ${mdInlineCode(entry.name)} (broken symlink: ${err.message})`);
150
+ continue;
151
+ }
152
+ if (targetStat.isDirectory()) {
153
+ lines.push(`${indent}- 📁 ${mdInlineCode(`${entry.name}/`)} (symlink to a directory, not followed)`);
154
+ continue;
155
+ }
156
+ const ext = path.extname(entry.name) || '(none)';
157
+ const kb = (targetStat.size / 1024).toFixed(1);
158
+ lines.push(`${indent}- 📄 ${mdInlineCode(entry.name)} (symlink) — ${kb} KB, ${ext}, ` +
159
+ `created ${targetStat.birthtime.toISOString()}, modified ${targetStat.mtime.toISOString()}`);
160
+ continue;
161
+ }
162
+ let stat;
163
+ try {
164
+ stat = await fs.stat(fullPath);
165
+ }
166
+ catch (err) {
167
+ lines.push(`${indent}- ${mdInlineCode(entry.name)} (unreadable: ${err.message})`);
168
+ continue;
169
+ }
170
+ if (entry.isDirectory()) {
171
+ lines.push(`${indent}- 📁 ${mdInlineCode(`${entry.name}/`)} — modified ${stat.mtime.toISOString()}`);
172
+ await appendTree(lines, fullPath, depth + 1);
173
+ continue;
174
+ }
175
+ if (!entry.isFile()) {
176
+ // A special file — socket, FIFO, block/char device. Rare under a Claude config directory,
177
+ // but "no exclusions" means it still gets a line rather than vanishing without a trace.
178
+ lines.push(`${indent}- ${mdInlineCode(entry.name)} (special file, not a regular file or directory)`);
179
+ continue;
180
+ }
181
+ const ext = path.extname(entry.name) || '(none)';
182
+ const kb = (stat.size / 1024).toFixed(1);
183
+ lines.push(`${indent}- 📄 ${mdInlineCode(entry.name)} — ${kb} KB, ${ext}, ` +
184
+ `created ${stat.birthtime.toISOString()}, modified ${stat.mtime.toISOString()}`);
185
+ }
186
+ }
187
+ /**
188
+ * If `--output` names a path that already has a file on it, `fs.writeFile` would silently
189
+ * overwrite it later in `run()`. Ask before that happens (skipped entirely with `--force`, or
190
+ * when nothing exists there yet). Runs before any scanning so a decline doesn't waste work.
191
+ */
192
+ async function confirmOutputOverwrite(outputPath) {
193
+ const existing = await fs.stat(outputPath).catch(() => null);
194
+ if (!existing || !existing.isFile()) {
195
+ return;
196
+ }
197
+ const kb = (existing.size / 1024).toFixed(1);
198
+ const proceed = await confirm(`A file already exists at ${outputPath} (${kb} KB, modified ${existing.mtime.toISOString()}). Overwrite it?`);
199
+ if (!proceed) {
200
+ throw new CliError('OUTPUT_EXISTS', `Refusing to overwrite existing file at ${outputPath}. Use --force to skip this check.`);
201
+ }
202
+ }
203
+ export async function run(opts, deps = {}) {
204
+ try {
205
+ if (opts.output && !opts.force) {
206
+ await confirmOutputOverwrite(opts.output);
207
+ }
208
+ const root = opts.root ?? (deps.homedir ?? os.homedir)();
209
+ const matches = await findClaudeDirs(root);
210
+ if (matches.length === 0) {
211
+ if (opts.json) {
212
+ logger.json({ ok: true, matches: 0, matchedPaths: [] });
213
+ }
214
+ else {
215
+ logger.info(`No folders named "claude" found under ${root}.`);
216
+ }
217
+ return ExitCode.OK;
218
+ }
219
+ const lines = [
220
+ '# Claude Folders Map',
221
+ '',
222
+ `Generated ${new Date().toISOString()} — ${matches.length} folder(s) matching "claude" found under ${mdInlineCode(root)}.`,
223
+ '',
224
+ ];
225
+ for (const match of matches) {
226
+ // mdInlineCode also replaces any stray newline byte in a directory name, not just
227
+ // backticks — a heading built from a raw, unescaped path could otherwise be split across
228
+ // lines (see mdInlineCode's own doc comment for why the newline handling lives there).
229
+ lines.push(`## ${mdInlineCode(match)}`, '');
230
+ const matchLstat = await fs.lstat(match).catch(() => null);
231
+ const escape = matchLstat?.isSymbolicLink() ? await resolvesWithinRoot(root, match) : null;
232
+ if (escape && !escape.within) {
233
+ lines.push(`- ⚠️ This is a symlink that resolves outside the search root` +
234
+ (escape.realTarget ? ` (to ${mdInlineCode(escape.realTarget)})` : ' (target could not be resolved)') +
235
+ ` — not followed, to avoid leaking an unrelated location's contents via a planted symlink.`);
236
+ }
237
+ else {
238
+ await appendTree(lines, match, 0);
239
+ }
240
+ lines.push('');
241
+ }
242
+ const markdown = `${lines.join('\n')}\n`;
243
+ if (opts.output) {
244
+ // Same sensitivity as the upload temp file below (real filenames from every matched
245
+ // folder) — 0o600, and written before the upload attempt so it's available for inspection
246
+ // even if the upload itself fails.
247
+ await fs.writeFile(opts.output, markdown, { encoding: 'utf8', mode: 0o600 });
248
+ }
249
+ const tmpPath = path.join(os.tmpdir(), `coolhand-claude-map-${randomBytes(6).toString('hex')}.md`);
250
+ // The report lists real filenames (and thus can be sensitive) from every matched folder —
251
+ // 0o600 keeps it unreadable by other local users for as long as it exists on disk, matching
252
+ // the mode used for other sensitive files elsewhere (src/config.ts, capture-state.ts).
253
+ await fs.writeFile(tmpPath, markdown, { encoding: 'utf8', mode: 0o600 });
254
+ try {
255
+ const result = await uploadClientFile({
256
+ filePath: tmpPath,
257
+ name: 'Claude Folders Map',
258
+ fileType: 'report',
259
+ description: `File tree map of ${matches.length} folder(s) named "claude" under ${root} (names and metadata only — no file contents).`,
260
+ metadata: { source: 'map-claude-projects', matchCount: matches.length, root },
261
+ }, { clientId: opts.clientId, dryRun: opts.dryRun });
262
+ const mb = (result.sizeBytes / (1024 * 1024)).toFixed(2);
263
+ if (opts.json) {
264
+ logger.json({
265
+ ok: true,
266
+ dryRun: result.status === 'dry-run',
267
+ matches: matches.length,
268
+ matchedPaths: matches,
269
+ sizeBytes: result.sizeBytes,
270
+ ...(opts.output && { outputPath: opts.output }),
271
+ result: result.response,
272
+ });
273
+ }
274
+ else if (result.status === 'dry-run') {
275
+ logger.info(`Dry run: found ${matches.length} folder(s), map is ${mb}MB. Nothing sent.` +
276
+ (opts.output ? ` Report written to ${opts.output}.` : ''));
277
+ }
278
+ else {
279
+ logger.info(`Uploaded a map of ${matches.length} folder(s) (${mb}MB) as client file ` +
280
+ `"${result.response?.name}" (id: ${result.response?.id}).` +
281
+ (opts.output ? ` Report also written to ${opts.output}.` : ''));
282
+ }
283
+ return ExitCode.OK;
284
+ }
285
+ finally {
286
+ await fs.rm(tmpPath, { force: true }).catch(() => undefined);
287
+ }
288
+ }
289
+ catch (err) {
290
+ if (err instanceof CliError) {
291
+ if (opts.json) {
292
+ logger.json({ ok: false, error: err.code, message: redact(err.message) });
293
+ }
294
+ else {
295
+ logger.info(`Error: ${redact(err.message)} [${err.code}]`);
296
+ }
297
+ return err.exitCode;
298
+ }
299
+ throw err;
300
+ }
301
+ }
302
+ //# sourceMappingURL=map-claude-projects.js.map