@jakkrichm/create-nexus-devflow 2.8.0 → 2.9.3
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/dist/bin/create-nexus-devflow.d.ts +7 -3
- package/dist/bin/create-nexus-devflow.js +237 -4
- package/dist/bin/create-nexus-devflow.js.map +1 -1
- package/dist/lib/dashboard-page.d.ts +1 -1
- package/dist/lib/dashboard-page.js +76 -0
- package/dist/lib/dashboard-page.js.map +1 -1
- package/dist/lib/doctor.js +40 -0
- package/dist/lib/doctor.js.map +1 -1
- package/dist/lib/project-config.d.ts +1 -1
- package/dist/lib/project-config.js +4 -1
- package/dist/lib/project-config.js.map +1 -1
- package/dist/lib/run-state.d.ts +39 -0
- package/dist/lib/run-state.js +203 -0
- package/dist/lib/run-state.js.map +1 -0
- package/dist/lib/skill-manager.d.ts +73 -0
- package/dist/lib/skill-manager.js +510 -0
- package/dist/lib/skill-manager.js.map +1 -0
- package/dist/lib/status.d.ts +4 -1
- package/dist/lib/status.js +49 -3
- package/dist/lib/status.js.map +1 -1
- package/dist/lib/webview-studio.js +169 -47
- package/dist/lib/webview-studio.js.map +1 -1
- package/package.json +2 -2
- package/template/.agents/skills/adopt/SKILL.md +4 -0
- package/template/.agents/skills/audit/SKILL.md +4 -0
- package/template/.agents/skills/autopilot/SKILL.md +4 -0
- package/template/.agents/skills/check/SKILL.md +4 -0
- package/template/.agents/skills/ci/SKILL.md +4 -0
- package/template/.agents/skills/complete/SKILL.md +7 -1
- package/template/.agents/skills/continuous/SKILL.md +4 -0
- package/template/.agents/skills/debug/SKILL.md +4 -0
- package/template/.agents/skills/devflow/SKILL.md +6 -1
- package/template/.agents/skills/discovery/SKILL.md +10 -1
- package/template/.agents/skills/feature/SKILL.md +4 -0
- package/template/.agents/skills/fix/SKILL.md +4 -0
- package/template/.agents/skills/implement/SKILL.md +4 -0
- package/template/.agents/skills/onboard/SKILL.md +4 -0
- package/template/.agents/skills/overview/SKILL.md +4 -0
- package/template/.agents/skills/prototype/SKILL.md +4 -0
- package/template/.agents/skills/release/SKILL.md +4 -0
- package/template/.agents/skills/rollback/SKILL.md +18 -5
- package/template/.agents/skills/status/SKILL.md +7 -0
- package/template/.agents/skills/tests/SKILL.md +4 -0
- package/template/.claude/skills/adopt/SKILL.md +4 -0
- package/template/.claude/skills/audit/SKILL.md +4 -0
- package/template/.claude/skills/autopilot/SKILL.md +4 -0
- package/template/.claude/skills/check/SKILL.md +4 -0
- package/template/.claude/skills/ci/SKILL.md +4 -0
- package/template/.claude/skills/complete/SKILL.md +7 -1
- package/template/.claude/skills/continuous/SKILL.md +4 -0
- package/template/.claude/skills/debug/SKILL.md +4 -0
- package/template/.claude/skills/devflow/SKILL.md +6 -1
- package/template/.claude/skills/discovery/SKILL.md +10 -1
- package/template/.claude/skills/feature/SKILL.md +4 -0
- package/template/.claude/skills/fix/SKILL.md +4 -0
- package/template/.claude/skills/implement/SKILL.md +4 -0
- package/template/.claude/skills/onboard/SKILL.md +4 -0
- package/template/.claude/skills/overview/SKILL.md +4 -0
- package/template/.claude/skills/prototype/SKILL.md +4 -0
- package/template/.claude/skills/release/SKILL.md +4 -0
- package/template/.claude/skills/rollback/SKILL.md +18 -5
- package/template/.claude/skills/status/SKILL.md +7 -0
- package/template/.claude/skills/tests/SKILL.md +4 -0
- package/template/AGENTS.md +24 -5
- package/template/LICENSE +21 -21
- package/template/devflow/build-plan.md +16 -0
- package/template/devflow/context/ai-interaction.md +25 -0
- package/dist/lib/antigravity-artifacts.d.ts +0 -52
- package/dist/lib/antigravity-artifacts.js +0 -170
- package/dist/lib/antigravity-artifacts.js.map +0 -1
- package/dist/lib/antigravity-hooks.d.ts +0 -31
- package/dist/lib/antigravity-hooks.js +0 -85
- package/dist/lib/antigravity-hooks.js.map +0 -1
- package/dist/lib/antigravity-plugin.d.ts +0 -51
- package/dist/lib/antigravity-plugin.js +0 -179
- package/dist/lib/antigravity-plugin.js.map +0 -1
- package/dist/lib/antigravity-scheduler.d.ts +0 -39
- package/dist/lib/antigravity-scheduler.js +0 -95
- package/dist/lib/antigravity-scheduler.js.map +0 -1
- package/dist/lib/openai-tools.d.ts +0 -34
- package/dist/lib/openai-tools.js +0 -57
- package/dist/lib/openai-tools.js.map +0 -1
- package/dist/lib/visual-subagent.d.ts +0 -32
- package/dist/lib/visual-subagent.js +0 -98
- package/dist/lib/visual-subagent.js.map +0 -1
- package/template/.agents/skills/convert-any-to-md/scripts/__pycache__/convert_any_to_md.cpython-314.pyc +0 -0
- package/template/.claude/skills/convert-any-to-md/scripts/__pycache__/convert_any_to_md.cpython-314.pyc +0 -0
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
import fs from "node:fs/promises";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
const RUN_STATE_PATH = path.join("devflow", ".state", "run.json");
|
|
4
|
+
const COMMAND_PATTERN = /^[a-z][a-z-]{0,31}$/;
|
|
5
|
+
const RUN_STATUSES = new Set([
|
|
6
|
+
"running",
|
|
7
|
+
"blocked",
|
|
8
|
+
"ready",
|
|
9
|
+
"completed"
|
|
10
|
+
]);
|
|
11
|
+
const RUN_BOUNDARIES = new Set([
|
|
12
|
+
"read-only",
|
|
13
|
+
"reviewed",
|
|
14
|
+
"local-only"
|
|
15
|
+
]);
|
|
16
|
+
const RUN_STALE_AFTER_MS = 60 * 60 * 1000;
|
|
17
|
+
async function readRunState(projectRoot, now = new Date()) {
|
|
18
|
+
const runStatePath = path.join(projectRoot, RUN_STATE_PATH);
|
|
19
|
+
try {
|
|
20
|
+
const stats = await fs.lstat(runStatePath);
|
|
21
|
+
if (stats.isSymbolicLink()) {
|
|
22
|
+
return malformedSummary({
|
|
23
|
+
code: "unsafe_run_state_path",
|
|
24
|
+
message: "Dashboard run state is a symbolic link and was not read."
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
if (!stats.isFile()) {
|
|
28
|
+
return malformedSummary({
|
|
29
|
+
code: "invalid_run_state_path",
|
|
30
|
+
message: "Dashboard run state path is not a regular file."
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
return parseRunState(await fs.readFile(runStatePath, "utf8"), now);
|
|
34
|
+
}
|
|
35
|
+
catch (error) {
|
|
36
|
+
if (getErrorCode(error) === "ENOENT") {
|
|
37
|
+
return idleSummary();
|
|
38
|
+
}
|
|
39
|
+
throw error;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
function parseRunState(value, now = new Date()) {
|
|
43
|
+
let parsed;
|
|
44
|
+
try {
|
|
45
|
+
parsed = JSON.parse(value);
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
return malformedSummary({
|
|
49
|
+
code: "malformed_run_state",
|
|
50
|
+
message: "Dashboard run state is not valid JSON."
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
if (!isRecord(parsed)) {
|
|
54
|
+
return malformedRunState();
|
|
55
|
+
}
|
|
56
|
+
const command = readString(parsed.command);
|
|
57
|
+
const status = readString(parsed.status);
|
|
58
|
+
const summary = readString(parsed.summary);
|
|
59
|
+
const detail = readOptionalString(parsed.detail);
|
|
60
|
+
const boundary = readOptionalString(parsed.boundary);
|
|
61
|
+
const startedAt = readString(parsed.startedAt);
|
|
62
|
+
const updatedAt = readString(parsed.updatedAt);
|
|
63
|
+
const resumeCommand = readOptionalString(parsed.resumeCommand);
|
|
64
|
+
const progress = parseProgress(parsed.progress);
|
|
65
|
+
const feature = parseFeature(parsed.feature);
|
|
66
|
+
if (parsed.schemaVersion !== 1 ||
|
|
67
|
+
!command ||
|
|
68
|
+
!COMMAND_PATTERN.test(command) ||
|
|
69
|
+
!status ||
|
|
70
|
+
!RUN_STATUSES.has(status) ||
|
|
71
|
+
!summary ||
|
|
72
|
+
!startedAt ||
|
|
73
|
+
!updatedAt ||
|
|
74
|
+
!isTimestamp(startedAt) ||
|
|
75
|
+
!isTimestamp(updatedAt) ||
|
|
76
|
+
Date.parse(startedAt) > Date.parse(updatedAt) ||
|
|
77
|
+
(parsed.detail !== undefined && detail === null) ||
|
|
78
|
+
(parsed.boundary !== undefined && (!boundary || !RUN_BOUNDARIES.has(boundary))) ||
|
|
79
|
+
(parsed.resumeCommand !== undefined && resumeCommand === null) ||
|
|
80
|
+
(parsed.progress !== undefined && progress === null) ||
|
|
81
|
+
(parsed.feature !== undefined && feature === null)) {
|
|
82
|
+
return malformedRunState();
|
|
83
|
+
}
|
|
84
|
+
const freshness = status === "running" &&
|
|
85
|
+
now.getTime() - Date.parse(updatedAt) > RUN_STALE_AFTER_MS
|
|
86
|
+
? "stale"
|
|
87
|
+
: "current";
|
|
88
|
+
const warnings = freshness === "stale"
|
|
89
|
+
? [
|
|
90
|
+
{
|
|
91
|
+
code: "stale_run_state",
|
|
92
|
+
message: `Recorded /${command} activity has not updated for over one hour and may have been interrupted.`
|
|
93
|
+
}
|
|
94
|
+
]
|
|
95
|
+
: [];
|
|
96
|
+
return {
|
|
97
|
+
state: "recorded",
|
|
98
|
+
mode: command === "autopilot"
|
|
99
|
+
? "autopilot"
|
|
100
|
+
: command === "continuous"
|
|
101
|
+
? "continuous"
|
|
102
|
+
: "manual",
|
|
103
|
+
command,
|
|
104
|
+
status,
|
|
105
|
+
freshness,
|
|
106
|
+
summary,
|
|
107
|
+
detail,
|
|
108
|
+
boundary,
|
|
109
|
+
startedAt,
|
|
110
|
+
updatedAt,
|
|
111
|
+
resumeCommand,
|
|
112
|
+
progress,
|
|
113
|
+
feature,
|
|
114
|
+
warnings
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
function parseProgress(value) {
|
|
118
|
+
if (value === undefined) {
|
|
119
|
+
return null;
|
|
120
|
+
}
|
|
121
|
+
if (!isRecord(value)) {
|
|
122
|
+
return null;
|
|
123
|
+
}
|
|
124
|
+
const label = readString(value.label);
|
|
125
|
+
const current = value.current;
|
|
126
|
+
const total = value.total;
|
|
127
|
+
if (!label ||
|
|
128
|
+
!Number.isInteger(current) ||
|
|
129
|
+
!Number.isInteger(total) ||
|
|
130
|
+
Number(current) < 0 ||
|
|
131
|
+
Number(total) < 1 ||
|
|
132
|
+
Number(current) > Number(total)) {
|
|
133
|
+
return null;
|
|
134
|
+
}
|
|
135
|
+
return { label, current: Number(current), total: Number(total) };
|
|
136
|
+
}
|
|
137
|
+
function parseFeature(value) {
|
|
138
|
+
if (value === undefined) {
|
|
139
|
+
return null;
|
|
140
|
+
}
|
|
141
|
+
if (!isRecord(value)) {
|
|
142
|
+
return null;
|
|
143
|
+
}
|
|
144
|
+
const id = readOptionalString(value.id);
|
|
145
|
+
const title = readString(value.title);
|
|
146
|
+
if (!title || (value.id !== undefined && id === null)) {
|
|
147
|
+
return null;
|
|
148
|
+
}
|
|
149
|
+
return { id, title };
|
|
150
|
+
}
|
|
151
|
+
function malformedRunState() {
|
|
152
|
+
return malformedSummary({
|
|
153
|
+
code: "malformed_run_state",
|
|
154
|
+
message: "Dashboard run state does not match schema version 1."
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
function idleSummary() {
|
|
158
|
+
return {
|
|
159
|
+
state: "idle",
|
|
160
|
+
mode: "manual",
|
|
161
|
+
command: null,
|
|
162
|
+
status: null,
|
|
163
|
+
freshness: null,
|
|
164
|
+
summary: null,
|
|
165
|
+
detail: null,
|
|
166
|
+
boundary: null,
|
|
167
|
+
startedAt: null,
|
|
168
|
+
updatedAt: null,
|
|
169
|
+
resumeCommand: null,
|
|
170
|
+
progress: null,
|
|
171
|
+
feature: null,
|
|
172
|
+
warnings: []
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
function malformedSummary(warning) {
|
|
176
|
+
return {
|
|
177
|
+
...idleSummary(),
|
|
178
|
+
state: "malformed",
|
|
179
|
+
warnings: [warning]
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
function readString(value) {
|
|
183
|
+
return typeof value === "string" && value.trim() !== "" ? value.trim() : null;
|
|
184
|
+
}
|
|
185
|
+
function readOptionalString(value) {
|
|
186
|
+
return value === undefined ? null : readString(value);
|
|
187
|
+
}
|
|
188
|
+
function isTimestamp(value) {
|
|
189
|
+
return !Number.isNaN(Date.parse(value));
|
|
190
|
+
}
|
|
191
|
+
function isRecord(value) {
|
|
192
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
193
|
+
}
|
|
194
|
+
function getErrorCode(error) {
|
|
195
|
+
return typeof error === "object" &&
|
|
196
|
+
error !== null &&
|
|
197
|
+
"code" in error &&
|
|
198
|
+
typeof error.code === "string"
|
|
199
|
+
? error.code
|
|
200
|
+
: undefined;
|
|
201
|
+
}
|
|
202
|
+
export { RUN_STATE_PATH, parseRunState, readRunState };
|
|
203
|
+
//# sourceMappingURL=run-state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-state.js","sourceRoot":"","sources":["../../lib/run-state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AA6C7B,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;AAClE,MAAM,eAAe,GAAG,qBAAqB,CAAC;AAC9C,MAAM,YAAY,GAAG,IAAI,GAAG,CAAY;IACtC,SAAS;IACT,SAAS;IACT,OAAO;IACP,WAAW;CACZ,CAAC,CAAC;AACH,MAAM,cAAc,GAAG,IAAI,GAAG,CAAc;IAC1C,WAAW;IACX,UAAU;IACV,YAAY;CACb,CAAC,CAAC;AACH,MAAM,kBAAkB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAE1C,KAAK,UAAU,YAAY,CACzB,WAAmB,EACnB,MAAY,IAAI,IAAI,EAAE;IAEtB,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;IAE5D,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QAE3C,IAAI,KAAK,CAAC,cAAc,EAAE,EAAE,CAAC;YAC3B,OAAO,gBAAgB,CAAC;gBACtB,IAAI,EAAE,uBAAuB;gBAC7B,OAAO,EAAE,0DAA0D;aACpE,CAAC,CAAC;QACL,CAAC;QAED,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;YACpB,OAAO,gBAAgB,CAAC;gBACtB,IAAI,EAAE,wBAAwB;gBAC9B,OAAO,EAAE,iDAAiD;aAC3D,CAAC,CAAC;QACL,CAAC;QAED,OAAO,aAAa,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC;IACrE,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,IAAI,YAAY,CAAC,KAAK,CAAC,KAAK,QAAQ,EAAE,CAAC;YACrC,OAAO,WAAW,EAAE,CAAC;QACvB,CAAC;QAED,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,KAAa,EAAE,MAAY,IAAI,IAAI,EAAE;IAC1D,IAAI,MAAe,CAAC;IAEpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,gBAAgB,CAAC;YACtB,IAAI,EAAE,qBAAqB;YAC3B,OAAO,EAAE,wCAAwC;SAClD,CAAC,CAAC;IACL,CAAC;IAED,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACtB,OAAO,iBAAiB,EAAE,CAAC;IAC7B,CAAC;IAED,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC3C,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,CAAqB,CAAC;IAC7D,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC3C,MAAM,MAAM,GAAG,kBAAkB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACjD,MAAM,QAAQ,GAAG,kBAAkB,CAAC,MAAM,CAAC,QAAQ,CAAuB,CAAC;IAC3E,MAAM,SAAS,GAAG,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAC/C,MAAM,SAAS,GAAG,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAC/C,MAAM,aAAa,GAAG,kBAAkB,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IAC/D,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAChD,MAAM,OAAO,GAAG,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAE7C,IACE,MAAM,CAAC,aAAa,KAAK,CAAC;QAC1B,CAAC,OAAO;QACR,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC;QAC9B,CAAC,MAAM;QACP,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC;QACzB,CAAC,OAAO;QACR,CAAC,SAAS;QACV,CAAC,SAAS;QACV,CAAC,WAAW,CAAC,SAAS,CAAC;QACvB,CAAC,WAAW,CAAC,SAAS,CAAC;QACvB,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC;QAC7C,CAAC,MAAM,CAAC,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,IAAI,CAAC;QAChD,CAAC,MAAM,CAAC,QAAQ,KAAK,SAAS,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC/E,CAAC,MAAM,CAAC,aAAa,KAAK,SAAS,IAAI,aAAa,KAAK,IAAI,CAAC;QAC9D,CAAC,MAAM,CAAC,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,IAAI,CAAC;QACpD,CAAC,MAAM,CAAC,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,IAAI,CAAC,EAClD,CAAC;QACD,OAAO,iBAAiB,EAAE,CAAC;IAC7B,CAAC;IAED,MAAM,SAAS,GACb,MAAM,KAAK,SAAS;QACpB,GAAG,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,kBAAkB;QACxD,CAAC,CAAC,OAAO;QACT,CAAC,CAAC,SAAS,CAAC;IAChB,MAAM,QAAQ,GACZ,SAAS,KAAK,OAAO;QACnB,CAAC,CAAC;YACE;gBACE,IAAI,EAAE,iBAAiB;gBACvB,OAAO,EAAE,aAAa,OAAO,4EAA4E;aAC1G;SACF;QACH,CAAC,CAAC,EAAE,CAAC;IAET,OAAO;QACL,KAAK,EAAE,UAAU;QACjB,IAAI,EACF,OAAO,KAAK,WAAW;YACrB,CAAC,CAAC,WAAW;YACb,CAAC,CAAC,OAAO,KAAK,YAAY;gBAC1B,CAAC,CAAC,YAAY;gBACd,CAAC,CAAC,QAAQ;QACd,OAAO;QACP,MAAM;QACN,SAAS;QACT,OAAO;QACP,MAAM;QACN,QAAQ;QACR,SAAS;QACT,SAAS;QACT,aAAa;QACb,QAAQ;QACR,OAAO;QACP,QAAQ;KACT,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,KAAc;IACnC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACrB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACtC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;IAC9B,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;IAE1B,IACE,CAAC,KAAK;QACN,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC;QAC1B,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC;QACxB,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC;QACnB,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC;QACjB,MAAM,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,EAC/B,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;AACnE,CAAC;AAED,SAAS,YAAY,CAAC,KAAc;IAClC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACrB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,EAAE,GAAG,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACxC,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAEtC,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,EAAE,KAAK,SAAS,IAAI,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACtD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC;AACvB,CAAC;AAED,SAAS,iBAAiB;IACxB,OAAO,gBAAgB,CAAC;QACtB,IAAI,EAAE,qBAAqB;QAC3B,OAAO,EAAE,sDAAsD;KAChE,CAAC,CAAC;AACL,CAAC;AAED,SAAS,WAAW;IAClB,OAAO;QACL,KAAK,EAAE,MAAM;QACb,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,IAAI;QACb,MAAM,EAAE,IAAI;QACZ,SAAS,EAAE,IAAI;QACf,OAAO,EAAE,IAAI;QACb,MAAM,EAAE,IAAI;QACZ,QAAQ,EAAE,IAAI;QACd,SAAS,EAAE,IAAI;QACf,SAAS,EAAE,IAAI;QACf,aAAa,EAAE,IAAI;QACnB,QAAQ,EAAE,IAAI;QACd,OAAO,EAAE,IAAI;QACb,QAAQ,EAAE,EAAE;KACb,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,OAAwB;IAChD,OAAO;QACL,GAAG,WAAW,EAAE;QAChB,KAAK,EAAE,WAAW;QAClB,QAAQ,EAAE,CAAC,OAAO,CAAC;KACpB,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CAAC,KAAc;IAChC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AAChF,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAc;IACxC,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;AACxD,CAAC;AAED,SAAS,WAAW,CAAC,KAAa;IAChC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;AAC1C,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED,SAAS,YAAY,CAAC,KAAc;IAClC,OAAO,OAAO,KAAK,KAAK,QAAQ;QAC9B,KAAK,KAAK,IAAI;QACd,MAAM,IAAI,KAAK;QACf,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;QAC9B,CAAC,CAAC,KAAK,CAAC,IAAI;QACZ,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC;AAED,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,YAAY,EAAE,CAAC"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
export interface InstalledSkillRecord {
|
|
2
|
+
name: string;
|
|
3
|
+
source: string;
|
|
4
|
+
version?: string;
|
|
5
|
+
description?: string;
|
|
6
|
+
installedAt: string;
|
|
7
|
+
type?: "git" | "local" | "npm";
|
|
8
|
+
}
|
|
9
|
+
export interface SkillDetail {
|
|
10
|
+
name: string;
|
|
11
|
+
category: "core" | "third-party" | "local-extension";
|
|
12
|
+
description: string;
|
|
13
|
+
version?: string;
|
|
14
|
+
source?: string;
|
|
15
|
+
adapters: string[];
|
|
16
|
+
synced: boolean;
|
|
17
|
+
path: string;
|
|
18
|
+
}
|
|
19
|
+
export interface SkillListResult {
|
|
20
|
+
coreSkills: SkillDetail[];
|
|
21
|
+
thirdPartySkills: SkillDetail[];
|
|
22
|
+
totalCount: number;
|
|
23
|
+
}
|
|
24
|
+
export interface InstallSkillOptions {
|
|
25
|
+
name?: string;
|
|
26
|
+
all?: boolean;
|
|
27
|
+
force?: boolean;
|
|
28
|
+
overrideSource?: string;
|
|
29
|
+
}
|
|
30
|
+
export declare function parseSkillFrontmatter(content: string): {
|
|
31
|
+
name?: string;
|
|
32
|
+
description?: string;
|
|
33
|
+
version?: string;
|
|
34
|
+
};
|
|
35
|
+
export declare function readDevflowManifest(projectRoot: string): Promise<Record<string, unknown> | null>;
|
|
36
|
+
export declare function writeDevflowManifest(projectRoot: string, manifest: Record<string, unknown>): Promise<void>;
|
|
37
|
+
export declare function listInstalledSkills(projectRoot: string): Promise<SkillListResult>;
|
|
38
|
+
export interface DiscoveredSkill {
|
|
39
|
+
sourceSkillPath: string;
|
|
40
|
+
skillName: string;
|
|
41
|
+
meta: {
|
|
42
|
+
name?: string;
|
|
43
|
+
description?: string;
|
|
44
|
+
version?: string;
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
export declare function discoverSkillsInDirectory(rootDir: string, maxDepth?: number, currentDepth?: number): Promise<DiscoveredSkill[]>;
|
|
48
|
+
export declare function findSkillSourceDirectory(sourceDir: string, requestedName?: string): Promise<{
|
|
49
|
+
sourceSkillPath: string;
|
|
50
|
+
skillName: string;
|
|
51
|
+
meta: {
|
|
52
|
+
name?: string;
|
|
53
|
+
description?: string;
|
|
54
|
+
version?: string;
|
|
55
|
+
};
|
|
56
|
+
}>;
|
|
57
|
+
export declare function installThirdPartySkill(projectRoot: string, source: string, options?: InstallSkillOptions): Promise<SkillDetail | SkillDetail[]>;
|
|
58
|
+
export declare function removeThirdPartySkill(projectRoot: string, name: string): Promise<boolean>;
|
|
59
|
+
export declare function syncSkills(projectRoot: string): Promise<{
|
|
60
|
+
syncedCount: number;
|
|
61
|
+
skills: string[];
|
|
62
|
+
}>;
|
|
63
|
+
export interface SkillUpdateResult {
|
|
64
|
+
updatedSkills: SkillDetail[];
|
|
65
|
+
failedSkills: Array<{
|
|
66
|
+
name: string;
|
|
67
|
+
reason: string;
|
|
68
|
+
}>;
|
|
69
|
+
totalUpdated: number;
|
|
70
|
+
}
|
|
71
|
+
export declare function updateThirdPartySkills(projectRoot: string, targetSkillName?: string, options?: {
|
|
72
|
+
force?: boolean;
|
|
73
|
+
}): Promise<SkillUpdateResult>;
|