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.
- package/README.md +7 -0
- package/dist/api/llm-reference-client.d.ts +25 -0
- package/dist/api/llm-reference-client.d.ts.map +1 -0
- package/dist/api/llm-reference-client.js +49 -0
- package/dist/api/llm-reference-client.js.map +1 -0
- package/dist/api/template-client.d.ts +19 -0
- package/dist/api/template-client.d.ts.map +1 -0
- package/dist/api/template-client.js +47 -0
- package/dist/api/template-client.js.map +1 -0
- package/dist/auth/open-browser.d.ts.map +1 -1
- package/dist/auth/open-browser.js +3 -1
- package/dist/auth/open-browser.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +240 -2
- package/dist/cli.js.map +1 -1
- package/dist/commands/get-template.d.ts +3 -0
- package/dist/commands/get-template.d.ts.map +1 -0
- package/dist/commands/get-template.js +66 -0
- package/dist/commands/get-template.js.map +1 -0
- package/dist/commands/list-referenced-file-sessions.d.ts +3 -0
- package/dist/commands/list-referenced-file-sessions.d.ts.map +1 -0
- package/dist/commands/list-referenced-file-sessions.js +44 -0
- package/dist/commands/list-referenced-file-sessions.js.map +1 -0
- package/dist/commands/map-claude-projects.d.ts.map +1 -1
- package/dist/commands/map-claude-projects.js +20 -0
- package/dist/commands/map-claude-projects.js.map +1 -1
- package/dist/commands/search-referenced-files.d.ts +3 -0
- package/dist/commands/search-referenced-files.d.ts.map +1 -0
- package/dist/commands/search-referenced-files.js +53 -0
- package/dist/commands/search-referenced-files.js.map +1 -0
- package/dist/commands/search-templates.d.ts +3 -0
- package/dist/commands/search-templates.d.ts.map +1 -0
- package/dist/commands/search-templates.js +63 -0
- package/dist/commands/search-templates.js.map +1 -0
- package/dist/commands/sync-skills.d.ts +18 -0
- package/dist/commands/sync-skills.d.ts.map +1 -0
- package/dist/commands/sync-skills.js +222 -0
- package/dist/commands/sync-skills.js.map +1 -0
- package/dist/errors.d.ts +1 -1
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js.map +1 -1
- package/dist/proxy/proxy.d.ts.map +1 -1
- package/dist/proxy/proxy.js +71 -3
- package/dist/proxy/proxy.js.map +1 -1
- package/dist/proxy/wrap-runner.d.ts +2 -5
- package/dist/proxy/wrap-runner.d.ts.map +1 -1
- package/dist/proxy/wrap-runner.js +2 -31
- package/dist/proxy/wrap-runner.js.map +1 -1
- package/dist/sessions/redact-secrets.d.ts.map +1 -1
- package/dist/sessions/redact-secrets.js +3 -0
- package/dist/sessions/redact-secrets.js.map +1 -1
- package/dist/skills/skill-scanner.d.ts +55 -0
- package/dist/skills/skill-scanner.d.ts.map +1 -0
- package/dist/skills/skill-scanner.js +132 -0
- package/dist/skills/skill-scanner.js.map +1 -0
- package/dist/skills/skill-state.d.ts +29 -0
- package/dist/skills/skill-state.d.ts.map +1 -0
- package/dist/skills/skill-state.js +111 -0
- package/dist/skills/skill-state.js.map +1 -0
- package/dist/types.d.ts +55 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/version.d.ts +2 -2
- package/dist/version.js +1 -1
- package/dist/win-spawn.d.ts +6 -0
- package/dist/win-spawn.d.ts.map +1 -0
- package/dist/win-spawn.js +32 -0
- package/dist/win-spawn.js.map +1 -0
- 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;
|
package/dist/types.d.ts.map
CHANGED
|
@@ -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":"
|
|
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.
|
|
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
|
+
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.
|
|
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 @@
|
|
|
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.
|
|
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.
|
|
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": "^
|
|
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",
|