skilllib 1.7.0 → 1.10.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 +74 -24
- package/dist/{chunk-AYAN7Q2X.js → chunk-Z2F5W3DY.js} +316 -117
- package/dist/index.js +5 -5
- package/dist/json.d.cts +200 -0
- package/dist/json.d.ts +200 -0
- package/dist/{tui-RU255WYX.js → tui-7CMGG6HX.js} +281 -78
- package/package.json +16 -3
package/dist/index.js
CHANGED
|
@@ -27,19 +27,19 @@ import {
|
|
|
27
27
|
unhide,
|
|
28
28
|
update,
|
|
29
29
|
usage
|
|
30
|
-
} from "./chunk-
|
|
30
|
+
} from "./chunk-Z2F5W3DY.js";
|
|
31
31
|
|
|
32
32
|
// src/index.ts
|
|
33
33
|
import { readFileSync } from "fs";
|
|
34
34
|
var HELP = `
|
|
35
|
-
skilllib \u2014 one library of agent skills (Claude Code, Cursor, Codex, Zed), installed per project
|
|
35
|
+
skilllib \u2014 one library of agent skills (Claude Code, Cursor, Codex, Zed, Grok), installed per project
|
|
36
36
|
|
|
37
37
|
skilllib Open the interactive app (run it from anywhere)
|
|
38
38
|
|
|
39
39
|
Set up:
|
|
40
40
|
skilllib scan [folder...] Add folders that contain your projects and scan them
|
|
41
41
|
skilllib folders [add|remove] Show or change your project folders
|
|
42
|
-
skilllib harnesses [id...] Show or set the agents you use (claude-code cursor codex zed)
|
|
42
|
+
skilllib harnesses [id...] Show or set the agents you use (claude-code cursor codex zed grok)
|
|
43
43
|
skilllib import <dir>... Add skill folders to the library (--force replaces)
|
|
44
44
|
skilllib import --global Copy your global skills (every agent's folder) into the library
|
|
45
45
|
skilllib global [keep|unkeep <name>...] Your global skills; mark ones you keep global on purpose
|
|
@@ -92,10 +92,10 @@ async function main() {
|
|
|
92
92
|
if (!["--version", "-v", "version", "help", "--help", "-h"].includes(command ?? "")) refreshAgentSkill();
|
|
93
93
|
switch (command) {
|
|
94
94
|
case void 0:
|
|
95
|
-
return process.stdin.isTTY && process.stdout.isTTY ? (await import("./tui-
|
|
95
|
+
return process.stdin.isTTY && process.stdout.isTTY ? (await import("./tui-7CMGG6HX.js")).tui() : overview(args);
|
|
96
96
|
case "ui":
|
|
97
97
|
if (!process.stdin.isTTY || !process.stdout.isTTY) throw new Error("`skilllib ui` needs an interactive terminal. Agents and scripts: use `skilllib status --json`.");
|
|
98
|
-
return (await import("./tui-
|
|
98
|
+
return (await import("./tui-7CMGG6HX.js")).tui();
|
|
99
99
|
case "status":
|
|
100
100
|
return status(args);
|
|
101
101
|
case "add":
|
package/dist/json.d.cts
ADDED
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
type HarnessId = "claude-code" | "cursor" | "codex" | "zed" | "grok";
|
|
2
|
+
|
|
3
|
+
type AgentSkillState = "installed" | "outdated" | "missing";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Whether a skill folder is shared through git:
|
|
7
|
+
* - committed: tracked and unchanged, so teammates get it
|
|
8
|
+
* - changed: tracked, with uncommitted edits or new files
|
|
9
|
+
* - new: not tracked yet, but not ignored (shows in `git status`)
|
|
10
|
+
* - ignored: matched by .gitignore, so it only exists on this machine
|
|
11
|
+
*/
|
|
12
|
+
type GitState = "committed" | "changed" | "new" | "ignored";
|
|
13
|
+
|
|
14
|
+
type SkillState = "ok" | "update available" | "edited locally" | "edited locally, update available" | "folder missing" | "not in library" | "untracked copy of library skill" | "untracked, differs from library" | "local only" | "repo skill" | "repo skill, in library" | "repo skill, differs from library" | "from npx skills";
|
|
15
|
+
type Change = {
|
|
16
|
+
name: string;
|
|
17
|
+
/** reset: back to the version it had; its local edits were overwritten (and backed up, see `backedUp`). */
|
|
18
|
+
action: "installed" | "updated" | "reset" | "removed" | "skipped";
|
|
19
|
+
reason?: string;
|
|
20
|
+
from?: number;
|
|
21
|
+
to?: number;
|
|
22
|
+
/** Harness folders a link couldn't be written to because git tracks them. */
|
|
23
|
+
blocked?: string[];
|
|
24
|
+
/** Harness folders git tracks, left without a link because git doesn't share the real copy (teammates would get a broken link). */
|
|
25
|
+
uncommitted?: string[];
|
|
26
|
+
/** Where overwritten local edits went (~/.skilllib/edit-backup/…); `skilllib restore` puts them back. */
|
|
27
|
+
backedUp?: string;
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Where a skill Claude Code can load comes from.
|
|
32
|
+
* - global: a real folder in ~/.claude/skills (you, or a tool, copied it there)
|
|
33
|
+
* - skills.sh: a symlink into ~/.agents/skills, installed by `npx skills`
|
|
34
|
+
* - claude.ai: synced from your claude.ai account
|
|
35
|
+
* - plugin: shipped inside an enabled Claude Code plugin
|
|
36
|
+
* - built-in: bundled with an agent (Cursor's ~/.cursor/skills-cursor, Grok's ~/.grok/bundled/skills)
|
|
37
|
+
* - system: a machine-wide folder an admin manages (/etc/codex/skills)
|
|
38
|
+
* - skilllib: skilllib's own skill, which `skilllib agent-skill install` puts in your global folders
|
|
39
|
+
*/
|
|
40
|
+
type SourceKind = "global" | "skills.sh" | "claude.ai" | "plugin" | "built-in" | "system" | "skilllib";
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* - library: added from your skills with skilllib (pinned in skilllib.json)
|
|
44
|
+
* - repo: the team's: committed to git (any skill folder), or in .agents/skills
|
|
45
|
+
* - local: only on this machine: not committed, not managed by skilllib
|
|
46
|
+
*/
|
|
47
|
+
type ProjectSource = "library" | "repo" | "local";
|
|
48
|
+
/** The repo's own skills (or its subfolders') that share every attribute. */
|
|
49
|
+
type StatusSkillGroup = {
|
|
50
|
+
source: ProjectSource;
|
|
51
|
+
skills: string[];
|
|
52
|
+
/** Folder with the real copy, when it isn't .claude/skills. */
|
|
53
|
+
dir?: string;
|
|
54
|
+
version?: number;
|
|
55
|
+
/** Only when it isn't "ok". */
|
|
56
|
+
state?: SkillState;
|
|
57
|
+
/** Newer library version, when there is one. */
|
|
58
|
+
latest?: number;
|
|
59
|
+
git?: GitState;
|
|
60
|
+
/** Only when some of your agents don't load it here. */
|
|
61
|
+
agents?: HarnessId[];
|
|
62
|
+
};
|
|
63
|
+
/** Global skills that come from the same place and load in the same agents. */
|
|
64
|
+
type StatusGlobalGroup = {
|
|
65
|
+
source: SourceKind;
|
|
66
|
+
/** e.g. "railway@claude-plugins-official", "vercel-labs/agent-skills", "~/.claude/skills". */
|
|
67
|
+
from: string;
|
|
68
|
+
agents: HarnessId[];
|
|
69
|
+
skills: string[];
|
|
70
|
+
};
|
|
71
|
+
/**
|
|
72
|
+
* Problems skilllib found here or in your global skills that share a cause and remedy: a `fix` is a
|
|
73
|
+
* safe repair (`skilllib doctor --fix` runs it); `choices` need the user to decide (skilllib → Health).
|
|
74
|
+
*/
|
|
75
|
+
type StatusIssue = {
|
|
76
|
+
problems: string[];
|
|
77
|
+
detail: string;
|
|
78
|
+
fix?: string;
|
|
79
|
+
choices?: string[];
|
|
80
|
+
};
|
|
81
|
+
/** `skilllib status --json`: everything your agents can use in this repo. */
|
|
82
|
+
type StatusJson = {
|
|
83
|
+
project: string;
|
|
84
|
+
/** The repo's top-level files and folders (folders end in "/"), so an agent can read the right ones in one step. */
|
|
85
|
+
files: string[];
|
|
86
|
+
agents: HarnessId[];
|
|
87
|
+
skills: StatusSkillGroup[];
|
|
88
|
+
/** Skills in subfolders (monorepo packages), always with their `dir`: agents load them only when they work there. */
|
|
89
|
+
nested?: StatusSkillGroup[];
|
|
90
|
+
/** Skills that load in every repo, as this one loads them (its .claude/settings can turn a plugin on or off). */
|
|
91
|
+
global: StatusGlobalGroup[];
|
|
92
|
+
issues: StatusIssue[];
|
|
93
|
+
/** Claude Code uses in this repo per skill, when there were any. */
|
|
94
|
+
usesHere?: Record<string, number>;
|
|
95
|
+
};
|
|
96
|
+
/** `skilllib list --json`: your library; inside a repo, split into what it has and what it could add. */
|
|
97
|
+
type ListJson = {
|
|
98
|
+
/** Library skills the current project already has (names only). */
|
|
99
|
+
inThisProject?: string[];
|
|
100
|
+
/** The rest, with what's needed to choose: description, and the projects that use it. */
|
|
101
|
+
skills: {
|
|
102
|
+
name: string;
|
|
103
|
+
description: string;
|
|
104
|
+
projects?: string[];
|
|
105
|
+
}[];
|
|
106
|
+
};
|
|
107
|
+
/** `skilllib show <name> --json` */
|
|
108
|
+
type ShowJson = {
|
|
109
|
+
name: string;
|
|
110
|
+
description: string;
|
|
111
|
+
path: string;
|
|
112
|
+
/** Newest version in your library. */
|
|
113
|
+
latest: number | null;
|
|
114
|
+
/** Where it came from, e.g. a plugin or an `npx skills` repo; "" when unknown. */
|
|
115
|
+
origin: string;
|
|
116
|
+
/** Projects that have it in their skilllib.json. */
|
|
117
|
+
projects: string[];
|
|
118
|
+
/** The whole SKILL.md. */
|
|
119
|
+
skillMd: string;
|
|
120
|
+
};
|
|
121
|
+
/** `skilllib projects --json` */
|
|
122
|
+
type ProjectsJson = {
|
|
123
|
+
name: string;
|
|
124
|
+
path: string;
|
|
125
|
+
skills: {
|
|
126
|
+
name: string;
|
|
127
|
+
managed: boolean;
|
|
128
|
+
state: SkillState;
|
|
129
|
+
version: number | null;
|
|
130
|
+
latest: number | null;
|
|
131
|
+
}[];
|
|
132
|
+
}[];
|
|
133
|
+
/** One skill that `add`, `remove`, `sync` or `update` changed or skipped. */
|
|
134
|
+
type ChangeJson = Change & {
|
|
135
|
+
/** Where an installed, updated or reset skill now is: the real copy first, then its links. */
|
|
136
|
+
dirs?: string[];
|
|
137
|
+
};
|
|
138
|
+
/** `skilllib add|remove --json`, and `sync|update --json` without --all. */
|
|
139
|
+
type ChangesJson = ChangeJson[];
|
|
140
|
+
/** `skilllib sync|update --all --json`: the changes in each project. */
|
|
141
|
+
type AllChangesJson = {
|
|
142
|
+
project: string;
|
|
143
|
+
path: string;
|
|
144
|
+
changes: ChangeJson[];
|
|
145
|
+
}[];
|
|
146
|
+
/** `skilllib outdated [--all] --json` */
|
|
147
|
+
type OutdatedJson = {
|
|
148
|
+
project: string;
|
|
149
|
+
path: string;
|
|
150
|
+
skill: string;
|
|
151
|
+
installed: number;
|
|
152
|
+
latest: number;
|
|
153
|
+
state: SkillState;
|
|
154
|
+
}[];
|
|
155
|
+
/** `skilllib import <dir>... --json` */
|
|
156
|
+
type ImportJson = {
|
|
157
|
+
path: string;
|
|
158
|
+
/** Missing when the folder has no SKILL.md. */
|
|
159
|
+
name?: string;
|
|
160
|
+
status: "added" | "updated" | "unchanged" | "exists" | "no SKILL.md";
|
|
161
|
+
}[];
|
|
162
|
+
/** `skilllib doctor [--fix] --json` */
|
|
163
|
+
type DoctorJson = {
|
|
164
|
+
id: string;
|
|
165
|
+
severity: "problem" | "suggestion";
|
|
166
|
+
title: string;
|
|
167
|
+
detail: string;
|
|
168
|
+
/** A safe repair; `doctor --fix` runs it. */
|
|
169
|
+
fix?: string;
|
|
170
|
+
/** Fixes that need a decision (skilllib → Health). */
|
|
171
|
+
choices?: string[];
|
|
172
|
+
/** With --fix: what running `fix` did. */
|
|
173
|
+
fixed?: {
|
|
174
|
+
ok: boolean;
|
|
175
|
+
message: string;
|
|
176
|
+
};
|
|
177
|
+
}[];
|
|
178
|
+
/** `skilllib usage [--days N] --json` */
|
|
179
|
+
type UsageJson = {
|
|
180
|
+
usageDays: number;
|
|
181
|
+
source: "Claude Code transcripts";
|
|
182
|
+
skills: {
|
|
183
|
+
skill: string;
|
|
184
|
+
uses: number;
|
|
185
|
+
lastUsed: string;
|
|
186
|
+
projects: string[];
|
|
187
|
+
inLibrary: boolean;
|
|
188
|
+
}[];
|
|
189
|
+
unusedLibrarySkills: string[];
|
|
190
|
+
};
|
|
191
|
+
/** `skilllib agent-skill [install|remove] --json` */
|
|
192
|
+
type AgentSkillJson = {
|
|
193
|
+
state: AgentSkillState;
|
|
194
|
+
/** Where it's installed (or would be). Not set after `remove`. */
|
|
195
|
+
dirs?: string[];
|
|
196
|
+
/** After `remove`: the folders it was removed from. */
|
|
197
|
+
removed?: string[];
|
|
198
|
+
};
|
|
199
|
+
|
|
200
|
+
export type { AgentSkillJson, AgentSkillState, AllChangesJson, ChangeJson, ChangesJson, DoctorJson, GitState, HarnessId, ImportJson, ListJson, OutdatedJson, ProjectSource, ProjectsJson, ShowJson, SkillState, SourceKind, StatusGlobalGroup, StatusIssue, StatusJson, StatusSkillGroup, UsageJson };
|
package/dist/json.d.ts
ADDED
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
type HarnessId = "claude-code" | "cursor" | "codex" | "zed" | "grok";
|
|
2
|
+
|
|
3
|
+
type AgentSkillState = "installed" | "outdated" | "missing";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Whether a skill folder is shared through git:
|
|
7
|
+
* - committed: tracked and unchanged, so teammates get it
|
|
8
|
+
* - changed: tracked, with uncommitted edits or new files
|
|
9
|
+
* - new: not tracked yet, but not ignored (shows in `git status`)
|
|
10
|
+
* - ignored: matched by .gitignore, so it only exists on this machine
|
|
11
|
+
*/
|
|
12
|
+
type GitState = "committed" | "changed" | "new" | "ignored";
|
|
13
|
+
|
|
14
|
+
type SkillState = "ok" | "update available" | "edited locally" | "edited locally, update available" | "folder missing" | "not in library" | "untracked copy of library skill" | "untracked, differs from library" | "local only" | "repo skill" | "repo skill, in library" | "repo skill, differs from library" | "from npx skills";
|
|
15
|
+
type Change = {
|
|
16
|
+
name: string;
|
|
17
|
+
/** reset: back to the version it had; its local edits were overwritten (and backed up, see `backedUp`). */
|
|
18
|
+
action: "installed" | "updated" | "reset" | "removed" | "skipped";
|
|
19
|
+
reason?: string;
|
|
20
|
+
from?: number;
|
|
21
|
+
to?: number;
|
|
22
|
+
/** Harness folders a link couldn't be written to because git tracks them. */
|
|
23
|
+
blocked?: string[];
|
|
24
|
+
/** Harness folders git tracks, left without a link because git doesn't share the real copy (teammates would get a broken link). */
|
|
25
|
+
uncommitted?: string[];
|
|
26
|
+
/** Where overwritten local edits went (~/.skilllib/edit-backup/…); `skilllib restore` puts them back. */
|
|
27
|
+
backedUp?: string;
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Where a skill Claude Code can load comes from.
|
|
32
|
+
* - global: a real folder in ~/.claude/skills (you, or a tool, copied it there)
|
|
33
|
+
* - skills.sh: a symlink into ~/.agents/skills, installed by `npx skills`
|
|
34
|
+
* - claude.ai: synced from your claude.ai account
|
|
35
|
+
* - plugin: shipped inside an enabled Claude Code plugin
|
|
36
|
+
* - built-in: bundled with an agent (Cursor's ~/.cursor/skills-cursor, Grok's ~/.grok/bundled/skills)
|
|
37
|
+
* - system: a machine-wide folder an admin manages (/etc/codex/skills)
|
|
38
|
+
* - skilllib: skilllib's own skill, which `skilllib agent-skill install` puts in your global folders
|
|
39
|
+
*/
|
|
40
|
+
type SourceKind = "global" | "skills.sh" | "claude.ai" | "plugin" | "built-in" | "system" | "skilllib";
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* - library: added from your skills with skilllib (pinned in skilllib.json)
|
|
44
|
+
* - repo: the team's: committed to git (any skill folder), or in .agents/skills
|
|
45
|
+
* - local: only on this machine: not committed, not managed by skilllib
|
|
46
|
+
*/
|
|
47
|
+
type ProjectSource = "library" | "repo" | "local";
|
|
48
|
+
/** The repo's own skills (or its subfolders') that share every attribute. */
|
|
49
|
+
type StatusSkillGroup = {
|
|
50
|
+
source: ProjectSource;
|
|
51
|
+
skills: string[];
|
|
52
|
+
/** Folder with the real copy, when it isn't .claude/skills. */
|
|
53
|
+
dir?: string;
|
|
54
|
+
version?: number;
|
|
55
|
+
/** Only when it isn't "ok". */
|
|
56
|
+
state?: SkillState;
|
|
57
|
+
/** Newer library version, when there is one. */
|
|
58
|
+
latest?: number;
|
|
59
|
+
git?: GitState;
|
|
60
|
+
/** Only when some of your agents don't load it here. */
|
|
61
|
+
agents?: HarnessId[];
|
|
62
|
+
};
|
|
63
|
+
/** Global skills that come from the same place and load in the same agents. */
|
|
64
|
+
type StatusGlobalGroup = {
|
|
65
|
+
source: SourceKind;
|
|
66
|
+
/** e.g. "railway@claude-plugins-official", "vercel-labs/agent-skills", "~/.claude/skills". */
|
|
67
|
+
from: string;
|
|
68
|
+
agents: HarnessId[];
|
|
69
|
+
skills: string[];
|
|
70
|
+
};
|
|
71
|
+
/**
|
|
72
|
+
* Problems skilllib found here or in your global skills that share a cause and remedy: a `fix` is a
|
|
73
|
+
* safe repair (`skilllib doctor --fix` runs it); `choices` need the user to decide (skilllib → Health).
|
|
74
|
+
*/
|
|
75
|
+
type StatusIssue = {
|
|
76
|
+
problems: string[];
|
|
77
|
+
detail: string;
|
|
78
|
+
fix?: string;
|
|
79
|
+
choices?: string[];
|
|
80
|
+
};
|
|
81
|
+
/** `skilllib status --json`: everything your agents can use in this repo. */
|
|
82
|
+
type StatusJson = {
|
|
83
|
+
project: string;
|
|
84
|
+
/** The repo's top-level files and folders (folders end in "/"), so an agent can read the right ones in one step. */
|
|
85
|
+
files: string[];
|
|
86
|
+
agents: HarnessId[];
|
|
87
|
+
skills: StatusSkillGroup[];
|
|
88
|
+
/** Skills in subfolders (monorepo packages), always with their `dir`: agents load them only when they work there. */
|
|
89
|
+
nested?: StatusSkillGroup[];
|
|
90
|
+
/** Skills that load in every repo, as this one loads them (its .claude/settings can turn a plugin on or off). */
|
|
91
|
+
global: StatusGlobalGroup[];
|
|
92
|
+
issues: StatusIssue[];
|
|
93
|
+
/** Claude Code uses in this repo per skill, when there were any. */
|
|
94
|
+
usesHere?: Record<string, number>;
|
|
95
|
+
};
|
|
96
|
+
/** `skilllib list --json`: your library; inside a repo, split into what it has and what it could add. */
|
|
97
|
+
type ListJson = {
|
|
98
|
+
/** Library skills the current project already has (names only). */
|
|
99
|
+
inThisProject?: string[];
|
|
100
|
+
/** The rest, with what's needed to choose: description, and the projects that use it. */
|
|
101
|
+
skills: {
|
|
102
|
+
name: string;
|
|
103
|
+
description: string;
|
|
104
|
+
projects?: string[];
|
|
105
|
+
}[];
|
|
106
|
+
};
|
|
107
|
+
/** `skilllib show <name> --json` */
|
|
108
|
+
type ShowJson = {
|
|
109
|
+
name: string;
|
|
110
|
+
description: string;
|
|
111
|
+
path: string;
|
|
112
|
+
/** Newest version in your library. */
|
|
113
|
+
latest: number | null;
|
|
114
|
+
/** Where it came from, e.g. a plugin or an `npx skills` repo; "" when unknown. */
|
|
115
|
+
origin: string;
|
|
116
|
+
/** Projects that have it in their skilllib.json. */
|
|
117
|
+
projects: string[];
|
|
118
|
+
/** The whole SKILL.md. */
|
|
119
|
+
skillMd: string;
|
|
120
|
+
};
|
|
121
|
+
/** `skilllib projects --json` */
|
|
122
|
+
type ProjectsJson = {
|
|
123
|
+
name: string;
|
|
124
|
+
path: string;
|
|
125
|
+
skills: {
|
|
126
|
+
name: string;
|
|
127
|
+
managed: boolean;
|
|
128
|
+
state: SkillState;
|
|
129
|
+
version: number | null;
|
|
130
|
+
latest: number | null;
|
|
131
|
+
}[];
|
|
132
|
+
}[];
|
|
133
|
+
/** One skill that `add`, `remove`, `sync` or `update` changed or skipped. */
|
|
134
|
+
type ChangeJson = Change & {
|
|
135
|
+
/** Where an installed, updated or reset skill now is: the real copy first, then its links. */
|
|
136
|
+
dirs?: string[];
|
|
137
|
+
};
|
|
138
|
+
/** `skilllib add|remove --json`, and `sync|update --json` without --all. */
|
|
139
|
+
type ChangesJson = ChangeJson[];
|
|
140
|
+
/** `skilllib sync|update --all --json`: the changes in each project. */
|
|
141
|
+
type AllChangesJson = {
|
|
142
|
+
project: string;
|
|
143
|
+
path: string;
|
|
144
|
+
changes: ChangeJson[];
|
|
145
|
+
}[];
|
|
146
|
+
/** `skilllib outdated [--all] --json` */
|
|
147
|
+
type OutdatedJson = {
|
|
148
|
+
project: string;
|
|
149
|
+
path: string;
|
|
150
|
+
skill: string;
|
|
151
|
+
installed: number;
|
|
152
|
+
latest: number;
|
|
153
|
+
state: SkillState;
|
|
154
|
+
}[];
|
|
155
|
+
/** `skilllib import <dir>... --json` */
|
|
156
|
+
type ImportJson = {
|
|
157
|
+
path: string;
|
|
158
|
+
/** Missing when the folder has no SKILL.md. */
|
|
159
|
+
name?: string;
|
|
160
|
+
status: "added" | "updated" | "unchanged" | "exists" | "no SKILL.md";
|
|
161
|
+
}[];
|
|
162
|
+
/** `skilllib doctor [--fix] --json` */
|
|
163
|
+
type DoctorJson = {
|
|
164
|
+
id: string;
|
|
165
|
+
severity: "problem" | "suggestion";
|
|
166
|
+
title: string;
|
|
167
|
+
detail: string;
|
|
168
|
+
/** A safe repair; `doctor --fix` runs it. */
|
|
169
|
+
fix?: string;
|
|
170
|
+
/** Fixes that need a decision (skilllib → Health). */
|
|
171
|
+
choices?: string[];
|
|
172
|
+
/** With --fix: what running `fix` did. */
|
|
173
|
+
fixed?: {
|
|
174
|
+
ok: boolean;
|
|
175
|
+
message: string;
|
|
176
|
+
};
|
|
177
|
+
}[];
|
|
178
|
+
/** `skilllib usage [--days N] --json` */
|
|
179
|
+
type UsageJson = {
|
|
180
|
+
usageDays: number;
|
|
181
|
+
source: "Claude Code transcripts";
|
|
182
|
+
skills: {
|
|
183
|
+
skill: string;
|
|
184
|
+
uses: number;
|
|
185
|
+
lastUsed: string;
|
|
186
|
+
projects: string[];
|
|
187
|
+
inLibrary: boolean;
|
|
188
|
+
}[];
|
|
189
|
+
unusedLibrarySkills: string[];
|
|
190
|
+
};
|
|
191
|
+
/** `skilllib agent-skill [install|remove] --json` */
|
|
192
|
+
type AgentSkillJson = {
|
|
193
|
+
state: AgentSkillState;
|
|
194
|
+
/** Where it's installed (or would be). Not set after `remove`. */
|
|
195
|
+
dirs?: string[];
|
|
196
|
+
/** After `remove`: the folders it was removed from. */
|
|
197
|
+
removed?: string[];
|
|
198
|
+
};
|
|
199
|
+
|
|
200
|
+
export type { AgentSkillJson, AgentSkillState, AllChangesJson, ChangeJson, ChangesJson, DoctorJson, GitState, HarnessId, ImportJson, ListJson, OutdatedJson, ProjectSource, ProjectsJson, ShowJson, SkillState, SourceKind, StatusGlobalGroup, StatusIssue, StatusJson, StatusSkillGroup, UsageJson };
|