coolhand-cli 0.10.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 (69) hide show
  1. package/README.md +7 -0
  2. package/dist/api/llm-reference-client.d.ts +25 -0
  3. package/dist/api/llm-reference-client.d.ts.map +1 -0
  4. package/dist/api/llm-reference-client.js +49 -0
  5. package/dist/api/llm-reference-client.js.map +1 -0
  6. package/dist/api/template-client.d.ts +19 -0
  7. package/dist/api/template-client.d.ts.map +1 -0
  8. package/dist/api/template-client.js +47 -0
  9. package/dist/api/template-client.js.map +1 -0
  10. package/dist/auth/open-browser.d.ts.map +1 -1
  11. package/dist/auth/open-browser.js +3 -1
  12. package/dist/auth/open-browser.js.map +1 -1
  13. package/dist/cli.d.ts.map +1 -1
  14. package/dist/cli.js +240 -2
  15. package/dist/cli.js.map +1 -1
  16. package/dist/commands/get-template.d.ts +3 -0
  17. package/dist/commands/get-template.d.ts.map +1 -0
  18. package/dist/commands/get-template.js +66 -0
  19. package/dist/commands/get-template.js.map +1 -0
  20. package/dist/commands/list-referenced-file-sessions.d.ts +3 -0
  21. package/dist/commands/list-referenced-file-sessions.d.ts.map +1 -0
  22. package/dist/commands/list-referenced-file-sessions.js +44 -0
  23. package/dist/commands/list-referenced-file-sessions.js.map +1 -0
  24. package/dist/commands/map-claude-projects.d.ts.map +1 -1
  25. package/dist/commands/map-claude-projects.js +20 -0
  26. package/dist/commands/map-claude-projects.js.map +1 -1
  27. package/dist/commands/search-referenced-files.d.ts +3 -0
  28. package/dist/commands/search-referenced-files.d.ts.map +1 -0
  29. package/dist/commands/search-referenced-files.js +53 -0
  30. package/dist/commands/search-referenced-files.js.map +1 -0
  31. package/dist/commands/search-templates.d.ts +3 -0
  32. package/dist/commands/search-templates.d.ts.map +1 -0
  33. package/dist/commands/search-templates.js +63 -0
  34. package/dist/commands/search-templates.js.map +1 -0
  35. package/dist/commands/sync-skills.d.ts +18 -0
  36. package/dist/commands/sync-skills.d.ts.map +1 -0
  37. package/dist/commands/sync-skills.js +222 -0
  38. package/dist/commands/sync-skills.js.map +1 -0
  39. package/dist/errors.d.ts +1 -1
  40. package/dist/errors.d.ts.map +1 -1
  41. package/dist/errors.js.map +1 -1
  42. package/dist/proxy/proxy.d.ts.map +1 -1
  43. package/dist/proxy/proxy.js +71 -3
  44. package/dist/proxy/proxy.js.map +1 -1
  45. package/dist/proxy/wrap-runner.d.ts +2 -5
  46. package/dist/proxy/wrap-runner.d.ts.map +1 -1
  47. package/dist/proxy/wrap-runner.js +2 -31
  48. package/dist/proxy/wrap-runner.js.map +1 -1
  49. package/dist/sessions/redact-secrets.d.ts.map +1 -1
  50. package/dist/sessions/redact-secrets.js +3 -0
  51. package/dist/sessions/redact-secrets.js.map +1 -1
  52. package/dist/skills/skill-scanner.d.ts +55 -0
  53. package/dist/skills/skill-scanner.d.ts.map +1 -0
  54. package/dist/skills/skill-scanner.js +132 -0
  55. package/dist/skills/skill-scanner.js.map +1 -0
  56. package/dist/skills/skill-state.d.ts +29 -0
  57. package/dist/skills/skill-state.d.ts.map +1 -0
  58. package/dist/skills/skill-state.js +111 -0
  59. package/dist/skills/skill-state.js.map +1 -0
  60. package/dist/types.d.ts +55 -0
  61. package/dist/types.d.ts.map +1 -1
  62. package/dist/types.js.map +1 -1
  63. package/dist/version.d.ts +2 -2
  64. package/dist/version.js +1 -1
  65. package/dist/win-spawn.d.ts +6 -0
  66. package/dist/win-spawn.d.ts.map +1 -0
  67. package/dist/win-spawn.js +32 -0
  68. package/dist/win-spawn.js.map +1 -0
  69. package/package.json +3 -3
@@ -0,0 +1,132 @@
1
+ import { promises as fs } from 'fs';
2
+ import * as path from 'path';
3
+ import { createHash } from 'crypto';
4
+ /** Priority order when picking the canonical file within a (skillName, contentHash) group —
5
+ * lower index wins. An authored, user-facing copy is preferred over an installed runtime copy
6
+ * of the identical content, since it's the more meaningful "source" location to cite. */
7
+ const SOURCE_KIND_PRIORITY = ['authored', 'claude-code', 'installed', 'custom'];
8
+ /**
9
+ * Recursively find every `SKILL.md` file under `root`. Any `fs.readdir` failure (missing
10
+ * directory, permissions, etc.) is treated as "zero matches from this root" — not fatal — since
11
+ * a machine commonly won't have all of `~/Documents/Claude`, the Cowork sessions directory, or
12
+ * `~/.claude/skills` present at once.
13
+ */
14
+ async function findSkillFilesInRoot(root) {
15
+ let names;
16
+ try {
17
+ names = await fs.readdir(root, { recursive: true });
18
+ }
19
+ catch {
20
+ return [];
21
+ }
22
+ return names.filter((name) => path.basename(name) === 'SKILL.md').map((name) => path.join(root, name));
23
+ }
24
+ /**
25
+ * Extract `name:`/`description:` from a SKILL.md's YAML frontmatter block (`---\n...\n---` at
26
+ * the top of the file) with a small regex extractor rather than a YAML dependency — `js-yaml`
27
+ * is only an `overrides` pin in package.json (a transitive-dependency version pin), not a direct
28
+ * dependency, so parsing full YAML here would require adding one for a single flat key lookup.
29
+ * Values may be quoted or bare; quotes are stripped. Returns {} when there's no frontmatter block
30
+ * or it has no `name:`/`description:` field.
31
+ */
32
+ export function parseSkillFrontmatter(content) {
33
+ const match = content.match(/^---\r?\n([\s\S]*?)\r?\n---/);
34
+ if (!match) {
35
+ return {};
36
+ }
37
+ const block = match[1];
38
+ const nameMatch = block.match(/^name:\s*["']?(.+?)["']?\s*$/m);
39
+ const descriptionMatch = block.match(/^description:\s*["']?(.+?)["']?\s*$/m);
40
+ const result = {};
41
+ if (nameMatch) {
42
+ result.name = nameMatch[1];
43
+ }
44
+ if (descriptionMatch) {
45
+ result.description = descriptionMatch[1];
46
+ }
47
+ return result;
48
+ }
49
+ /**
50
+ * Discover SKILL.md files across every root, reading and hashing each one. A file that can't be
51
+ * read (permissions, a race with deletion, etc.) is skipped with a warning via `onWarn` rather
52
+ * than aborting the whole scan — same convention as `map-claude-projects`' directory walk.
53
+ */
54
+ export async function findSkillFiles(roots, onWarn) {
55
+ const discovered = [];
56
+ for (const { root, sourceKind } of roots) {
57
+ const filePaths = await findSkillFilesInRoot(root);
58
+ for (const filePath of filePaths) {
59
+ let stat;
60
+ let content;
61
+ try {
62
+ stat = await fs.stat(filePath);
63
+ if (!stat.isFile()) {
64
+ continue;
65
+ }
66
+ content = await fs.readFile(filePath);
67
+ }
68
+ catch (err) {
69
+ onWarn?.(`Skipping unreadable skill file "${filePath}": ${err.message}`);
70
+ continue;
71
+ }
72
+ const contentHash = createHash('sha256').update(content).digest('hex');
73
+ const frontmatter = parseSkillFrontmatter(content.toString('utf8'));
74
+ const skillName = frontmatter.name ?? path.basename(path.dirname(filePath));
75
+ discovered.push({
76
+ filePath,
77
+ sourceKind,
78
+ root,
79
+ mtimeMs: stat.mtimeMs,
80
+ contentHash,
81
+ skillName,
82
+ description: frontmatter.description,
83
+ });
84
+ }
85
+ }
86
+ return discovered;
87
+ }
88
+ /**
89
+ * Group discovered files by `(skillName, contentHash)` — not skill name alone, so a genuinely
90
+ * edited authored copy is never silently squashed by a stale installed duplicate of the same
91
+ * name — and pick one canonical file per group to actually upload. Within a group, prefer
92
+ * (in order): `sourceKind` priority (authored > claude-code > installed > custom), then newest
93
+ * `mtimeMs`, then path ascending for a deterministic tie-break.
94
+ */
95
+ export function dedupeSkillFiles(files) {
96
+ const groups = new Map();
97
+ for (const file of files) {
98
+ const key = JSON.stringify([file.skillName, file.contentHash]);
99
+ const group = groups.get(key);
100
+ if (group) {
101
+ group.push(file);
102
+ }
103
+ else {
104
+ groups.set(key, [file]);
105
+ }
106
+ }
107
+ const candidates = [];
108
+ for (const group of groups.values()) {
109
+ const sorted = [...group].sort((a, b) => {
110
+ const priorityDiff = SOURCE_KIND_PRIORITY.indexOf(a.sourceKind) - SOURCE_KIND_PRIORITY.indexOf(b.sourceKind);
111
+ if (priorityDiff !== 0) {
112
+ return priorityDiff;
113
+ }
114
+ if (b.mtimeMs !== a.mtimeMs) {
115
+ return b.mtimeMs - a.mtimeMs;
116
+ }
117
+ return a.filePath.localeCompare(b.filePath);
118
+ });
119
+ const chosen = sorted[0];
120
+ candidates.push({
121
+ skillName: chosen.skillName,
122
+ contentHash: chosen.contentHash,
123
+ filePath: chosen.filePath,
124
+ sourceKind: chosen.sourceKind,
125
+ root: chosen.root,
126
+ description: chosen.description,
127
+ duplicateCount: group.length,
128
+ });
129
+ }
130
+ return candidates;
131
+ }
132
+ //# sourceMappingURL=skill-scanner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-scanner.js","sourceRoot":"","sources":["../../src/skills/skill-scanner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Local record of which skills have already been uploaded to Coolhand for each client, so
3
+ * re-running `sync-skills` does not re-upload a skill whose content hasn't changed — but DOES
4
+ * re-upload one whose authored content changed since last time.
5
+ *
6
+ * Kept as its own file (not merged into `capture-state.json`) because the tracking model differs:
7
+ * a session transcript accumulates turns over time (tracked by a growing count), while a skill
8
+ * file is a monolithic blob (tracked by a simple content-hash comparison). Keyed per client id,
9
+ * since the same skill may legitimately be uploaded for more than one client.
10
+ */
11
+ export interface SkillUploadRecord {
12
+ contentHash: string;
13
+ uploadedAt: string;
14
+ clientFileId?: string;
15
+ }
16
+ export interface SkillState {
17
+ version: number;
18
+ uploaded: Record<string, Record<string, SkillUploadRecord>>;
19
+ }
20
+ export declare function skillStatePath(): string;
21
+ export declare function loadSkillState(): Promise<SkillState>;
22
+ /** The upload record for this exact (skillName, contentHash) pair and client, or undefined if
23
+ * this exact content has never been uploaded under this name for this client — a differently-
24
+ * hashed prior upload of the same skillName does not count as a match. */
25
+ export declare function getUploadRecord(state: SkillState, clientId: string, skillName: string, contentHash: string): SkillUploadRecord | undefined;
26
+ /** Record that this exact (skillName, contentHash) pair has now been uploaded for this client. */
27
+ export declare function recordUpload(state: SkillState, clientId: string, skillName: string, contentHash: string, record: SkillUploadRecord): void;
28
+ export declare function saveSkillState(state: SkillState): Promise<void>;
29
+ //# sourceMappingURL=skill-state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-state.d.ts","sourceRoot":"","sources":["../../src/skills/skill-state.ts"],"names":[],"mappings":"AAKA;;;;;;;;;GASG;AACH,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC;CAC7D;AAsBD,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AA0CD,wBAAsB,cAAc,IAAI,OAAO,CAAC,UAAU,CAAC,CAoB1D;AAED;;2EAE2E;AAC3E,wBAAgB,eAAe,CAC7B,KAAK,EAAE,UAAU,EACjB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,GAClB,iBAAiB,GAAG,SAAS,CAE/B;AAED,kGAAkG;AAClG,wBAAgB,YAAY,CAC1B,KAAK,EAAE,UAAU,EACjB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,iBAAiB,GACxB,IAAI,CAGN;AAWD,wBAAsB,cAAc,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAIrE"}
@@ -0,0 +1,111 @@
1
+ import { promises as fs } from 'fs';
2
+ import * as path from 'path';
3
+ import { configDir, atomicWriteFile } from '../config.js';
4
+ import { CliError } from '../errors.js';
5
+ /**
6
+ * Composite key for the per-client `uploaded` map: `(skillName, contentHash)`, not skillName
7
+ * alone. `dedupeSkillFiles` (skill-scanner.ts) can legitimately produce two candidates that share
8
+ * a skillName but have different content — e.g. a just-edited authored copy alongside a stale
9
+ * `installed` duplicate of the pre-edit content that hasn't been cleaned up yet. Keying state by
10
+ * skillName alone would make the second recorded upload overwrite the first's record, so on every
11
+ * later run whichever candidate's hash no longer matches the single stored one would be
12
+ * re-uploaded and immediately overwrite the record again — an unbounded re-upload loop for
13
+ * exactly the scenario the (skillName, contentHash) dedup grouping exists to handle correctly.
14
+ * Keying state at the same granularity as the candidates themselves avoids that collision.
15
+ */
16
+ function stateKey(skillName, contentHash) {
17
+ return JSON.stringify([skillName, contentHash]);
18
+ }
19
+ const STATE_VERSION = 1;
20
+ const STATE_FILENAME = 'skills-state.json';
21
+ const DIR_MODE = 0o700;
22
+ const FILE_MODE = 0o600;
23
+ export function skillStatePath() {
24
+ return path.join(configDir(), STATE_FILENAME);
25
+ }
26
+ function emptyState() {
27
+ return { version: STATE_VERSION, uploaded: {} };
28
+ }
29
+ function toUploadRecord(value) {
30
+ if (!value || typeof value !== 'object') {
31
+ return null;
32
+ }
33
+ const entry = value;
34
+ if (typeof entry.contentHash !== 'string' || typeof entry.uploadedAt !== 'string') {
35
+ return null;
36
+ }
37
+ return {
38
+ contentHash: entry.contentHash,
39
+ uploadedAt: entry.uploadedAt,
40
+ ...(typeof entry.clientFileId === 'string' && { clientFileId: entry.clientFileId }),
41
+ };
42
+ }
43
+ function normalizeUploaded(raw) {
44
+ if (!raw || typeof raw !== 'object') {
45
+ return {};
46
+ }
47
+ const out = {};
48
+ for (const [clientId, value] of Object.entries(raw)) {
49
+ if (!value || typeof value !== 'object') {
50
+ continue;
51
+ }
52
+ const skills = {};
53
+ for (const [key, entry] of Object.entries(value)) {
54
+ const record = toUploadRecord(entry);
55
+ if (record) {
56
+ skills[key] = record;
57
+ }
58
+ }
59
+ out[clientId] = skills;
60
+ }
61
+ return out;
62
+ }
63
+ export async function loadSkillState() {
64
+ const filePath = skillStatePath();
65
+ let raw;
66
+ try {
67
+ raw = await fs.readFile(filePath, 'utf8');
68
+ }
69
+ catch (err) {
70
+ if (err.code === 'ENOENT') {
71
+ return emptyState();
72
+ }
73
+ throw new CliError('CONFIG_READ_FAILED', `Failed to read ${filePath}: ${err.message}`);
74
+ }
75
+ try {
76
+ const parsed = JSON.parse(raw);
77
+ return {
78
+ version: STATE_VERSION,
79
+ uploaded: normalizeUploaded(parsed.uploaded),
80
+ };
81
+ }
82
+ catch (err) {
83
+ throw new CliError('CONFIG_READ_FAILED', `Skill state at ${filePath} is not valid JSON: ${err.message}`);
84
+ }
85
+ }
86
+ /** The upload record for this exact (skillName, contentHash) pair and client, or undefined if
87
+ * this exact content has never been uploaded under this name for this client — a differently-
88
+ * hashed prior upload of the same skillName does not count as a match. */
89
+ export function getUploadRecord(state, clientId, skillName, contentHash) {
90
+ return state.uploaded[clientId]?.[stateKey(skillName, contentHash)];
91
+ }
92
+ /** Record that this exact (skillName, contentHash) pair has now been uploaded for this client. */
93
+ export function recordUpload(state, clientId, skillName, contentHash, record) {
94
+ const skills = state.uploaded[clientId] ?? (state.uploaded[clientId] = {});
95
+ skills[stateKey(skillName, contentHash)] = record;
96
+ }
97
+ async function ensureDir(dir) {
98
+ await fs.mkdir(dir, { recursive: true, mode: DIR_MODE });
99
+ try {
100
+ await fs.chmod(dir, DIR_MODE);
101
+ }
102
+ catch {
103
+ // POSIX-only — Windows rejects chmod with this mode; ignore.
104
+ }
105
+ }
106
+ export async function saveSkillState(state) {
107
+ const filePath = skillStatePath();
108
+ await ensureDir(path.dirname(filePath));
109
+ await atomicWriteFile(filePath, `${JSON.stringify(state, null, 2)}\n`, FILE_MODE);
110
+ }
111
+ //# sourceMappingURL=skill-state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-state.js","sourceRoot":"","sources":["../../src/skills/skill-state.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -99,6 +99,25 @@ export interface SearchLogsOptions {
99
99
  json?: boolean;
100
100
  clientId?: string;
101
101
  }
102
+ export interface SearchTemplatesOptions {
103
+ /** Literal, case-insensitive substring match on the template name. `%` and `_` are escaped
104
+ * server-side, so they match themselves and must not be escaped again here. */
105
+ search?: string;
106
+ workloadId?: string;
107
+ status?: 'draft' | 'published' | 'failure';
108
+ includeDeprecated?: boolean;
109
+ /** Include the `Unmatched` / `Ignored API Calls` buckets, hidden by default. */
110
+ includeSystem?: boolean;
111
+ page?: number;
112
+ perPage?: number;
113
+ json?: boolean;
114
+ clientId?: string;
115
+ }
116
+ export interface GetTemplateOptions {
117
+ id: string;
118
+ json?: boolean;
119
+ clientId?: string;
120
+ }
102
121
  export interface SearchOptimizationsOptions {
103
122
  status?: string;
104
123
  type?: string;
@@ -172,6 +191,24 @@ export interface MapClaudeProjectsOptions {
172
191
  root?: string;
173
192
  /** Also write the generated markdown report to this local path, for inspection. */
174
193
  output?: string;
194
+ /** Skip the confirmation prompt when --output already exists. */
195
+ force?: boolean;
196
+ }
197
+ export interface SyncSkillsOptions {
198
+ clientId?: string;
199
+ json?: boolean;
200
+ /** Scan, dedupe, and report counts without uploading or touching skills-state.json. */
201
+ dryRun?: boolean;
202
+ /** Search only this path (recursively) instead of the 3 default roots (--root). */
203
+ root?: string;
204
+ /** Restrict the default scan to these sourceKinds: authored, installed, claude-code (--source, repeatable). */
205
+ sources?: string[];
206
+ /** Only upload skills whose name matches one of these (--skill, repeatable). */
207
+ skills?: string[];
208
+ /** Never upload skills whose name matches one of these (--exclude-skill, repeatable). */
209
+ excludeSkills?: string[];
210
+ /** Bypass the unchanged-content skip in skills-state.json; re-upload every matched skill. */
211
+ force?: boolean;
175
212
  }
176
213
  export interface SearchFeedbackOptions {
177
214
  sentiment?: 'positive' | 'negative' | 'neutral';
@@ -195,6 +232,24 @@ export interface GetFeedbackOptions {
195
232
  json?: boolean;
196
233
  clientId?: string;
197
234
  }
235
+ export interface SearchReferencedFilesOptions {
236
+ filePathContains?: string;
237
+ createdAtGteq?: string;
238
+ createdAtLteq?: string;
239
+ page?: number;
240
+ perPage?: number;
241
+ json?: boolean;
242
+ clientId?: string;
243
+ }
244
+ export interface ListReferencedFileSessionsOptions {
245
+ /** Exact file_path to look up. Required — checked in the CLI flag layer, not left to the
246
+ * server's 422, since this is a flag the CLI's own parser can validate before any request. */
247
+ filePath: string;
248
+ page?: number;
249
+ perPage?: number;
250
+ json?: boolean;
251
+ clientId?: string;
252
+ }
198
253
  export interface ComplaintBoxOptions {
199
254
  complaint: string;
200
255
  agentName: string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAmPA,MAAM,CAAC,MAAM,gBAAgB,GAAG,0BAA0B,CAAC;AAC3D,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AA+SA,MAAM,CAAC,MAAM,gBAAgB,GAAG,0BAA0B,CAAC;AAC3D,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC"}
package/dist/version.d.ts CHANGED
@@ -2,10 +2,10 @@
2
2
  * Auto-generated from package.json — do not edit manually.
3
3
  * Run `npm run sync-version` or `npm run build` to regenerate.
4
4
  */
5
- export declare const PACKAGE_VERSION = "0.10.0";
5
+ export declare const PACKAGE_VERSION = "0.11.0";
6
6
  export declare const PACKAGE_NAME = "coolhand-cli";
7
7
  /**
8
8
  * Full package identifier
9
9
  */
10
- export declare const PACKAGE_IDENTIFIER = "coolhand-cli-0.10.0";
10
+ export declare const PACKAGE_IDENTIFIER = "coolhand-cli-0.11.0";
11
11
  //# sourceMappingURL=version.d.ts.map
package/dist/version.js CHANGED
@@ -2,7 +2,7 @@
2
2
  * Auto-generated from package.json — do not edit manually.
3
3
  * Run `npm run sync-version` or `npm run build` to regenerate.
4
4
  */
5
- export const PACKAGE_VERSION = '0.10.0';
5
+ export const PACKAGE_VERSION = '0.11.0';
6
6
  export const PACKAGE_NAME = 'coolhand-cli';
7
7
  /**
8
8
  * Full package identifier
@@ -0,0 +1,6 @@
1
+ export declare function resolveWrapSpawn(cmd: string, args: string[], platform?: NodeJS.Platform): {
2
+ cmd: string;
3
+ spawnArgs: string[];
4
+ windowsVerbatimArguments?: true;
5
+ };
6
+ //# sourceMappingURL=win-spawn.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"win-spawn.d.ts","sourceRoot":"","sources":["../src/win-spawn.ts"],"names":[],"mappings":"AAoBA,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EAAE,EACd,QAAQ,kBAAmB,GAC1B;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,EAAE,CAAC;IAAC,wBAAwB,CAAC,EAAE,IAAI,CAAA;CAAE,CAWvE"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * On Windows, .cmd shims cannot be spawned without a shell. Rather than using
3
+ * shell:true (which forwards args as an unquoted string to cmd.exe, enabling
4
+ * metacharacter injection), we invoke cmd.exe /d /s /c directly with the command
5
+ * and each arg double-quoted and windowsVerbatimArguments:true so Node does not
6
+ * re-quote them.
7
+ *
8
+ * Quoting rules applied to the command and every arg:
9
+ * 1. Double trailing backslashes (a trailing \ would escape the closing ")
10
+ * 2. Escape embedded " as ""
11
+ * 3. Escape % as %% to prevent cmd.exe environment-variable expansion
12
+ * 4. Wrap in double quotes unconditionally
13
+ */
14
+ function escapeForCmdExe(s) {
15
+ return s
16
+ .replace(/(\\+)$/, '$1$1') // double trailing backslashes
17
+ .replace(/"/g, '""') // escape embedded quotes
18
+ .replace(/%/g, '%%'); // prevent env-var expansion
19
+ }
20
+ export function resolveWrapSpawn(cmd, args, platform = process.platform) {
21
+ if (platform !== 'win32') {
22
+ return { cmd, spawnArgs: args };
23
+ }
24
+ const escapedCmd = `"${escapeForCmdExe(cmd)}"`;
25
+ const escapedArgs = args.map((a) => `"${escapeForCmdExe(a)}"`);
26
+ return {
27
+ cmd: process.env['ComSpec'] ?? 'cmd.exe',
28
+ spawnArgs: ['/d', '/s', '/c', [escapedCmd, ...escapedArgs].join(' ')],
29
+ windowsVerbatimArguments: true,
30
+ };
31
+ }
32
+ //# sourceMappingURL=win-spawn.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"win-spawn.js","sourceRoot":"","sources":["../src/win-spawn.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,SAAS,eAAe,CAAC,CAAS;IAChC,OAAO,CAAC;SACL,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAE,8BAA8B;SACzD,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAS,yBAAyB;SACrD,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAQ,4BAA4B;AAC7D,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,GAAW,EACX,IAAc,EACd,QAAQ,GAAG,OAAO,CAAC,QAAQ;IAE3B,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QACzB,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IAClC,CAAC;IACD,MAAM,UAAU,GAAG,IAAI,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC;IAC/C,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,eAAe,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAC/D,OAAO;QACL,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,SAAS;QACxC,SAAS,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,UAAU,EAAE,GAAG,WAAW,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACrE,wBAAwB,EAAE,IAAI;KAC/B,CAAC;AACJ,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "coolhand-cli",
3
- "version": "0.10.0",
3
+ "version": "0.11.0",
4
4
  "description": "CLI for authenticating with Coolhand and retrieving API tokens from a local dev environment",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -59,7 +59,7 @@
59
59
  "smoke": "node dist/bin.js --version"
60
60
  },
61
61
  "dependencies": {
62
- "coolhand-node": "^0.11.0",
62
+ "coolhand-node": "^0.13.0",
63
63
  "mockttp": "^4.2.1"
64
64
  },
65
65
  "overrides": {
@@ -70,7 +70,7 @@
70
70
  "devDependencies": {
71
71
  "@eslint/js": "^10.0.1",
72
72
  "@types/jest": "^30.0.0",
73
- "@types/node": "^20.0.0",
73
+ "@types/node": "^26.2.0",
74
74
  "@typescript-eslint/eslint-plugin": "^8.45.0",
75
75
  "@typescript-eslint/parser": "^8.45.0",
76
76
  "eslint": "^10.8.0",