maestro-flow 0.5.37 → 0.5.38
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/.agents/skills/maestro/SKILL.md +11 -5
- package/.agents/skills/maestro-ralph/SKILL.md +80 -12
- package/.agents/skills/maestro-ralph-execute/SKILL.md +17 -6
- package/.agents/skills/manage-drift-realign/SKILL.md +153 -0
- package/.agy/skills/maestro/SKILL.md +11 -5
- package/.agy/skills/maestro-ralph/SKILL.md +80 -12
- package/.agy/skills/maestro-ralph-execute/SKILL.md +17 -6
- package/.agy/skills/manage-drift-realign/SKILL.md +153 -0
- package/.claude/commands/maestro-ralph-execute.md +17 -6
- package/.claude/commands/maestro-ralph.md +80 -12
- package/.claude/commands/maestro.md +11 -5
- package/.claude/commands/manage-drift-realign.md +151 -0
- package/.codex/skills/maestro/SKILL.md +16 -8
- package/.codex/skills/maestro-ralph/SKILL.md +138 -11
- package/.codex/skills/maestro-ralph-execute/SKILL.md +17 -6
- package/.codex/skills/manage-drift-realign/SKILL.md +471 -0
- package/README.md +25 -8
- package/README.zh-CN.md +6 -6
- package/dashboard/dist-server/src/commands/install-backend.d.ts +10 -0
- package/dashboard/dist-server/src/commands/install-backend.js +69 -0
- package/dashboard/dist-server/src/commands/install-backend.js.map +1 -1
- package/dashboard/dist-server/src/core/component-defs.d.ts +11 -0
- package/dashboard/dist-server/src/core/component-defs.js +34 -2
- package/dashboard/dist-server/src/core/component-defs.js.map +1 -1
- package/dist/src/cli.js +3 -2
- package/dist/src/cli.js.map +1 -1
- package/dist/src/commands/install-backend.d.ts +10 -0
- package/dist/src/commands/install-backend.d.ts.map +1 -1
- package/dist/src/commands/install-backend.js +69 -0
- package/dist/src/commands/install-backend.js.map +1 -1
- package/dist/src/commands/install.js +1 -0
- package/dist/src/commands/install.js.map +1 -1
- package/dist/src/commands/ralph.d.ts.map +1 -1
- package/dist/src/commands/ralph.js +8 -0
- package/dist/src/commands/ralph.js.map +1 -1
- package/dist/src/commands/timeline.d.ts +14 -0
- package/dist/src/commands/timeline.d.ts.map +1 -0
- package/dist/src/commands/timeline.js +377 -0
- package/dist/src/commands/timeline.js.map +1 -0
- package/dist/src/core/component-defs.d.ts +11 -0
- package/dist/src/core/component-defs.d.ts.map +1 -1
- package/dist/src/core/component-defs.js +34 -2
- package/dist/src/core/component-defs.js.map +1 -1
- package/dist/src/core/install-executor.d.ts.map +1 -1
- package/dist/src/core/install-executor.js +11 -1
- package/dist/src/core/install-executor.js.map +1 -1
- package/dist/src/core/install-profile.d.ts.map +1 -1
- package/dist/src/core/install-profile.js +52 -17
- package/dist/src/core/install-profile.js.map +1 -1
- package/dist/src/i18n/locales/en.d.ts.map +1 -1
- package/dist/src/i18n/locales/en.js +4 -1
- package/dist/src/i18n/locales/en.js.map +1 -1
- package/dist/src/i18n/locales/zh.d.ts.map +1 -1
- package/dist/src/i18n/locales/zh.js +4 -1
- package/dist/src/i18n/locales/zh.js.map +1 -1
- package/dist/src/i18n/types.d.ts +3 -0
- package/dist/src/i18n/types.d.ts.map +1 -1
- package/dist/src/ralph/cmd-complete.d.ts +4 -0
- package/dist/src/ralph/cmd-complete.d.ts.map +1 -1
- package/dist/src/ralph/cmd-complete.js +8 -0
- package/dist/src/ralph/cmd-complete.js.map +1 -1
- package/dist/src/ralph/cmd-next.js +58 -8
- package/dist/src/ralph/cmd-next.js.map +1 -1
- package/dist/src/ralph/status-schema.d.ts +29 -2
- package/dist/src/ralph/status-schema.d.ts.map +1 -1
- package/dist/src/ralph/status-schema.js +1 -1
- package/dist/src/tui/install-ui/ComponentGrid.d.ts.map +1 -1
- package/dist/src/tui/install-ui/ComponentGrid.js +71 -38
- package/dist/src/tui/install-ui/ComponentGrid.js.map +1 -1
- package/dist/src/tui/install-ui/ComponentGrid.logic.d.ts +12 -3
- package/dist/src/tui/install-ui/ComponentGrid.logic.d.ts.map +1 -1
- package/dist/src/tui/install-ui/ComponentGrid.logic.js +21 -4
- package/dist/src/tui/install-ui/ComponentGrid.logic.js.map +1 -1
- package/dist/src/tui/install-ui/CyberItem.d.ts +3 -1
- package/dist/src/tui/install-ui/CyberItem.d.ts.map +1 -1
- package/dist/src/tui/install-ui/CyberItem.js +6 -5
- package/dist/src/tui/install-ui/CyberItem.js.map +1 -1
- package/dist/src/tui/install-ui/GroupedHub.d.ts +9 -0
- package/dist/src/tui/install-ui/GroupedHub.d.ts.map +1 -1
- package/dist/src/tui/install-ui/GroupedHub.js +54 -47
- package/dist/src/tui/install-ui/GroupedHub.js.map +1 -1
- package/dist/src/tui/install-ui/InstallConfirm.js +1 -1
- package/dist/src/tui/install-ui/InstallConfirm.js.map +1 -1
- package/dist/src/tui/install-ui/InstallFlow.d.ts.map +1 -1
- package/dist/src/tui/install-ui/InstallFlow.js +54 -5
- package/dist/src/tui/install-ui/InstallFlow.js.map +1 -1
- package/dist/src/tui/install-ui/types.d.ts +1 -0
- package/dist/src/tui/install-ui/types.d.ts.map +1 -1
- package/dist/src/tui/install-ui/types.js.map +1 -1
- package/dist/src/tui/install-ui/useInstallFlowState.d.ts +8 -2
- package/dist/src/tui/install-ui/useInstallFlowState.d.ts.map +1 -1
- package/dist/src/tui/install-ui/useInstallFlowState.js +145 -15
- package/dist/src/tui/install-ui/useInstallFlowState.js.map +1 -1
- package/dist/src/utils/update-notices.js +12 -0
- package/dist/src/utils/update-notices.js.map +1 -1
- package/package.json +1 -1
- package/workflows/agy-instructions.md +127 -88
- package/workflows/analyze.md +2 -2
- package/workflows/auto-test.md +7 -1
- package/workflows/blueprint.md +22 -19
- package/workflows/brainstorm.md +11 -3
- package/workflows/business-test.md +4 -0
- package/workflows/codebase-rebuild.md +8 -1
- package/workflows/codebase-refresh.md +7 -1
- package/workflows/codex-instructions.md +1 -1
- package/workflows/debug.md +5 -2
- package/workflows/domain-add.md +6 -0
- package/workflows/drift-realign.md +396 -0
- package/workflows/execute.md +5 -4
- package/workflows/explore-usage.md +2 -2
- package/workflows/finish-work.md +6 -6
- package/workflows/fork.md +2 -2
- package/workflows/grill.md +6 -5
- package/workflows/harvest.md +2 -2
- package/workflows/impeccable.md +3 -2
- package/workflows/init.md +7 -7
- package/workflows/integration-test.md +1 -0
- package/workflows/issue-gaps-analyze.codex.md +2 -0
- package/workflows/issue-gaps-analyze.md +4 -4
- package/workflows/issue-plan.md +1 -1
- package/workflows/knowhow.md +7 -1
- package/workflows/knowledge-audit.md +1 -1
- package/workflows/maestro-super.md +2 -2
- package/workflows/maestro.md +3 -3
- package/workflows/map.md +2 -2
- package/workflows/milestone-audit.md +1 -1
- package/workflows/milestone-complete.md +1 -1
- package/workflows/plan.md +7 -6
- package/workflows/quick.md +8 -6
- package/workflows/ralph-amend-goal.md +177 -0
- package/workflows/refactor.md +2 -0
- package/workflows/retrospective.md +7 -3
- package/workflows/review.md +6 -4
- package/workflows/roadmap-common.md +3 -3
- package/workflows/roadmap.md +8 -5
- package/workflows/spec-generate.md +23 -18
- package/workflows/specs-load.md +1 -1
- package/workflows/specs-setup.md +2 -0
- package/workflows/sync.md +4 -2
- package/workflows/test-gen.md +1 -1
- package/workflows/test.md +1 -1
- package/workflows/ui-codify-extract.md +1 -0
- package/workflows/ui-codify-knowhow.md +1 -1
- package/workflows/ui-codify-package.md +1 -1
- package/workflows/ui-codify.md +9 -7
- package/workflows/ui-design.md +9 -7
- package/workflows/ui-style.md +6 -4
- package/workflows/verify.md +4 -4
- package/workflows/wiki-connect.md +2 -0
- package/workflows/wiki-digest.md +5 -3
- package/workflows/wiki-manage.md +4 -0
- package/workflows/maestro.codex.md +0 -365
|
@@ -0,0 +1,377 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Timeline Command — Unified project activity timeline (git + sessions).
|
|
3
|
+
*
|
|
4
|
+
* maestro timeline — last 30 days, all sources
|
|
5
|
+
* maestro timeline --since 7d — last 7 days
|
|
6
|
+
* maestro timeline --since HEAD~20 — since 20 commits ago
|
|
7
|
+
* maestro timeline --scope git — git events only
|
|
8
|
+
* maestro timeline --scope session — session events only
|
|
9
|
+
* maestro timeline --json — JSON output
|
|
10
|
+
* maestro timeline --output report.json — write to file
|
|
11
|
+
*/
|
|
12
|
+
import { resolve, join, relative, dirname } from 'node:path';
|
|
13
|
+
import { writeFileSync, existsSync, statSync, readdirSync } from 'node:fs';
|
|
14
|
+
import { execSync } from 'node:child_process';
|
|
15
|
+
import { truncate } from '../utils/cli-format.js';
|
|
16
|
+
import { loadWorkspaceConfig, resolveWorkspaceLinks } from '../config/index.js';
|
|
17
|
+
// ── Lazy WikiIndexer singleton ─────────────────────────────────────────
|
|
18
|
+
let _indexer = null;
|
|
19
|
+
async function getIndexer() {
|
|
20
|
+
if (!_indexer) {
|
|
21
|
+
const { WikiIndexer: Cls } = await import('#maestro-dashboard/wiki/wiki-indexer.js');
|
|
22
|
+
const workflowRoot = resolve('.workflow');
|
|
23
|
+
const projectPath = process.cwd();
|
|
24
|
+
const wsConfig = loadWorkspaceConfig(projectPath);
|
|
25
|
+
const resolved = resolveWorkspaceLinks(projectPath, wsConfig);
|
|
26
|
+
const linkedWorkspaces = resolved
|
|
27
|
+
.filter(lw => lw.valid)
|
|
28
|
+
.map(lw => ({ name: lw.name, workflowRoot: lw.workflowRoot, shareTypes: lw.share }));
|
|
29
|
+
_indexer = new Cls({ workflowRoot, linkedWorkspaces });
|
|
30
|
+
}
|
|
31
|
+
return _indexer;
|
|
32
|
+
}
|
|
33
|
+
// ── Date parsing ───────────────────────────────────────────────────────
|
|
34
|
+
/**
|
|
35
|
+
* Parse --since value into an ISO date string.
|
|
36
|
+
* Supports: ISO dates, relative (7d, 2w, 3m), HEAD~N, commit hashes.
|
|
37
|
+
*/
|
|
38
|
+
function parseSince(value, cwd) {
|
|
39
|
+
// Relative duration: 7d, 2w, 3m
|
|
40
|
+
const relMatch = value.match(/^(\d+)([dwm])$/i);
|
|
41
|
+
if (relMatch) {
|
|
42
|
+
const amount = parseInt(relMatch[1], 10);
|
|
43
|
+
const unit = relMatch[2].toLowerCase();
|
|
44
|
+
const now = new Date();
|
|
45
|
+
if (unit === 'd')
|
|
46
|
+
now.setDate(now.getDate() - amount);
|
|
47
|
+
else if (unit === 'w')
|
|
48
|
+
now.setDate(now.getDate() - amount * 7);
|
|
49
|
+
else if (unit === 'm')
|
|
50
|
+
now.setMonth(now.getMonth() - amount);
|
|
51
|
+
return now.toISOString();
|
|
52
|
+
}
|
|
53
|
+
// HEAD~N: resolve to commit date
|
|
54
|
+
if (value.startsWith('HEAD~') || value.startsWith('head~')) {
|
|
55
|
+
try {
|
|
56
|
+
const date = execSync(`git log -1 --format="%aI" ${value}`, {
|
|
57
|
+
encoding: 'utf-8',
|
|
58
|
+
cwd,
|
|
59
|
+
}).trim();
|
|
60
|
+
if (date)
|
|
61
|
+
return new Date(date).toISOString();
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
console.error(`E003: Failed to resolve "${value}" via git log`);
|
|
65
|
+
process.exit(1);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
// Commit hash (7-40 hex chars)
|
|
69
|
+
if (/^[0-9a-f]{7,40}$/i.test(value)) {
|
|
70
|
+
try {
|
|
71
|
+
const date = execSync(`git log -1 --format="%aI" ${value}`, {
|
|
72
|
+
encoding: 'utf-8',
|
|
73
|
+
cwd,
|
|
74
|
+
}).trim();
|
|
75
|
+
if (date)
|
|
76
|
+
return new Date(date).toISOString();
|
|
77
|
+
}
|
|
78
|
+
catch {
|
|
79
|
+
console.error(`E003: Failed to resolve commit "${value}" via git log`);
|
|
80
|
+
process.exit(1);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
// ISO date or date string
|
|
84
|
+
const parsed = new Date(value);
|
|
85
|
+
if (!isNaN(parsed.getTime())) {
|
|
86
|
+
return parsed.toISOString();
|
|
87
|
+
}
|
|
88
|
+
console.error(`E003: Unable to parse --since value: "${value}"`);
|
|
89
|
+
process.exit(1);
|
|
90
|
+
}
|
|
91
|
+
// ── Git event collection ───────────────────────────────────────────────
|
|
92
|
+
function collectGitEvents(sinceDate, cwd) {
|
|
93
|
+
try {
|
|
94
|
+
const isoDate = new Date(sinceDate).toISOString();
|
|
95
|
+
const raw = execSync(`git log --since="${isoDate}" --max-count=1000 --format="COMMIT:%H|%aI|%s" --name-only`, { encoding: 'utf-8', cwd });
|
|
96
|
+
const events = [];
|
|
97
|
+
let current = null;
|
|
98
|
+
for (const line of raw.split('\n')) {
|
|
99
|
+
if (line.startsWith('COMMIT:')) {
|
|
100
|
+
if (current)
|
|
101
|
+
events.push({ type: 'commit', ...current });
|
|
102
|
+
const payload = line.slice(7);
|
|
103
|
+
const parts = payload.split('|');
|
|
104
|
+
if (parts.length < 3)
|
|
105
|
+
continue;
|
|
106
|
+
current = { hash: parts[0], at: parts[1], message: parts.slice(2).join('|'), files: [] };
|
|
107
|
+
}
|
|
108
|
+
else if (current && line.trim().length > 0) {
|
|
109
|
+
current.files.push(line.trim());
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
if (current)
|
|
113
|
+
events.push({ type: 'commit', ...current });
|
|
114
|
+
return events;
|
|
115
|
+
}
|
|
116
|
+
catch (err) {
|
|
117
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
118
|
+
if (msg.includes('not a git repository') || msg.includes('fatal: bad default revision')) {
|
|
119
|
+
console.error('E003: not a git repository');
|
|
120
|
+
process.exit(1);
|
|
121
|
+
}
|
|
122
|
+
// Empty repo or no commits in range — return empty list
|
|
123
|
+
console.error('W004: git log returned no results — proceeding with empty git history');
|
|
124
|
+
return [];
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
// ── Git summary (insertions/deletions) ─────────────────────────────────
|
|
128
|
+
function computeGitSummary(sinceDate, cwd, commitCount, allFiles) {
|
|
129
|
+
let insertions = 0;
|
|
130
|
+
let deletions = 0;
|
|
131
|
+
try {
|
|
132
|
+
const isoDate = new Date(sinceDate).toISOString();
|
|
133
|
+
const raw = execSync(`git log --since="${isoDate}" --numstat --format=""`, { encoding: 'utf-8', cwd }).trim();
|
|
134
|
+
for (const line of raw.split('\n')) {
|
|
135
|
+
const match = line.match(/^(\d+)\t(\d+)\t/);
|
|
136
|
+
if (match) {
|
|
137
|
+
insertions += parseInt(match[1], 10);
|
|
138
|
+
deletions += parseInt(match[2], 10);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
catch {
|
|
143
|
+
// git log may fail on shallow clones — use commit-level data
|
|
144
|
+
}
|
|
145
|
+
return {
|
|
146
|
+
commits: commitCount,
|
|
147
|
+
files_changed: allFiles.size,
|
|
148
|
+
insertions,
|
|
149
|
+
deletions,
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
// ── Session event collection ───────────────────────────────────────────
|
|
153
|
+
async function collectSessionEvents(sinceDate) {
|
|
154
|
+
try {
|
|
155
|
+
const indexer = await getIndexer();
|
|
156
|
+
const index = await indexer.get();
|
|
157
|
+
const sinceMs = new Date(sinceDate).getTime();
|
|
158
|
+
const sessionEntries = index.entries.filter((e) => (e.category === 'session' || e.category === 'scratch') &&
|
|
159
|
+
new Date(e.created).getTime() >= sinceMs);
|
|
160
|
+
return sessionEntries.map((e) => ({
|
|
161
|
+
type: 'session',
|
|
162
|
+
at: e.created,
|
|
163
|
+
id: e.id,
|
|
164
|
+
title: e.title,
|
|
165
|
+
summary: e.summary ?? '',
|
|
166
|
+
edited_files: Array.isArray(e.ext?.editedFiles) ? e.ext.editedFiles : [],
|
|
167
|
+
code_paths: Array.isArray(e.ext?.codePaths) ? e.ext.codePaths : [],
|
|
168
|
+
platform: typeof e.ext?.platform === 'string' ? e.ext.platform : undefined,
|
|
169
|
+
}));
|
|
170
|
+
}
|
|
171
|
+
catch {
|
|
172
|
+
console.error('W001: Wiki/session index unavailable — proceeding with git-only data');
|
|
173
|
+
return [];
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
// ── Hot paths computation ──────────────────────────────────────────────
|
|
177
|
+
function computeHotPaths(events, topN) {
|
|
178
|
+
const dirCounts = new Map();
|
|
179
|
+
for (const ev of events) {
|
|
180
|
+
const files = ev.type === 'commit' ? ev.files : [...ev.edited_files, ...ev.code_paths];
|
|
181
|
+
for (const f of files) {
|
|
182
|
+
const dir = dirname(f);
|
|
183
|
+
if (dir === '.')
|
|
184
|
+
continue;
|
|
185
|
+
// Use top-level or second-level directory
|
|
186
|
+
const parts = dir.split(/[/\\]/);
|
|
187
|
+
const key = parts.length >= 2 ? `${parts[0]}/${parts[1]}/` : `${parts[0]}/`;
|
|
188
|
+
dirCounts.set(key, (dirCounts.get(key) ?? 0) + 1);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
return Array.from(dirCounts.entries())
|
|
192
|
+
.sort((a, b) => b[1] - a[1])
|
|
193
|
+
.slice(0, topN)
|
|
194
|
+
.map(([dir, count]) => `${dir} (${count} changes)`);
|
|
195
|
+
}
|
|
196
|
+
// ── Cold workflow files ────────────────────────────────────────────────
|
|
197
|
+
function findColdWorkflowFiles(sinceDate, cwd) {
|
|
198
|
+
const workflowDir = resolve(cwd, '.workflow');
|
|
199
|
+
if (!existsSync(workflowDir))
|
|
200
|
+
return [];
|
|
201
|
+
const sinceMs = new Date(sinceDate).getTime();
|
|
202
|
+
const cold = [];
|
|
203
|
+
function walk(dir) {
|
|
204
|
+
let entries;
|
|
205
|
+
try {
|
|
206
|
+
entries = readdirSync(dir);
|
|
207
|
+
}
|
|
208
|
+
catch {
|
|
209
|
+
return;
|
|
210
|
+
}
|
|
211
|
+
for (const name of entries) {
|
|
212
|
+
if (name === '.git' || name === 'node_modules')
|
|
213
|
+
continue;
|
|
214
|
+
const fullPath = join(dir, name);
|
|
215
|
+
try {
|
|
216
|
+
const st = statSync(fullPath);
|
|
217
|
+
if (st.isDirectory()) {
|
|
218
|
+
walk(fullPath);
|
|
219
|
+
}
|
|
220
|
+
else if (st.isFile() && st.mtimeMs < sinceMs) {
|
|
221
|
+
cold.push({
|
|
222
|
+
path: relative(cwd, fullPath).replace(/\\/g, '/'),
|
|
223
|
+
mtime: st.mtime,
|
|
224
|
+
});
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
catch {
|
|
228
|
+
// Permission errors etc — skip
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
walk(workflowDir);
|
|
233
|
+
// Sort by oldest first, return top entries
|
|
234
|
+
cold.sort((a, b) => a.mtime.getTime() - b.mtime.getTime());
|
|
235
|
+
return cold.slice(0, 20).map(c => ({ path: c.path, last_modified: c.mtime.toISOString().slice(0, 10) }));
|
|
236
|
+
}
|
|
237
|
+
// ── Human-readable output ──────────────────────────────────────────────
|
|
238
|
+
function formatHumanOutput(output) {
|
|
239
|
+
const lines = [];
|
|
240
|
+
const { window: w, git_summary: gs, session_summary: ss, events, hot_paths, cold_workflow_files } = output;
|
|
241
|
+
lines.push(`--- Timeline: ${w.from.slice(0, 10)} → ${w.to.slice(0, 10)} (${w.days} days) ---`);
|
|
242
|
+
lines.push('');
|
|
243
|
+
lines.push(`Git: ${gs.commits} commits, ${gs.files_changed} files, +${gs.insertions}/-${gs.deletions}`);
|
|
244
|
+
const platformParts = Object.entries(ss.by_platform)
|
|
245
|
+
.sort((a, b) => b[1] - a[1])
|
|
246
|
+
.map(([p, n]) => `${p}: ${n}`);
|
|
247
|
+
const platformSuffix = platformParts.length > 0 ? ` (${platformParts.join(', ')})` : '';
|
|
248
|
+
lines.push(`Sessions: ${ss.total} total, ${ss.with_edits} with edits${platformSuffix}`);
|
|
249
|
+
if (hot_paths.length > 0) {
|
|
250
|
+
lines.push('');
|
|
251
|
+
lines.push('Hot paths:');
|
|
252
|
+
for (const p of hot_paths) {
|
|
253
|
+
lines.push(` ${p}`);
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
if (cold_workflow_files.length > 0) {
|
|
257
|
+
lines.push('');
|
|
258
|
+
lines.push('Cold .workflow/ files (not modified in window):');
|
|
259
|
+
for (const f of cold_workflow_files) {
|
|
260
|
+
lines.push(` ${f.path} (last: ${f.last_modified})`);
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
if (events.length > 0) {
|
|
264
|
+
lines.push('');
|
|
265
|
+
lines.push('Recent events:');
|
|
266
|
+
for (const ev of events) {
|
|
267
|
+
const date = ev.at.slice(0, 10);
|
|
268
|
+
if (ev.type === 'commit') {
|
|
269
|
+
const shortHash = ev.hash.slice(0, 7);
|
|
270
|
+
const msg = truncate(ev.message, 60);
|
|
271
|
+
lines.push(` ${date} [commit] ${shortHash} ${msg}`);
|
|
272
|
+
}
|
|
273
|
+
else {
|
|
274
|
+
const plat = ev.platform ? `[${ev.platform}]` : '[session]';
|
|
275
|
+
const shortId = truncate(ev.id, 12);
|
|
276
|
+
const title = truncate(ev.title, 50);
|
|
277
|
+
lines.push(` ${date} ${plat.padEnd(10)} ${shortId} ${title}`);
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
return lines.join('\n');
|
|
282
|
+
}
|
|
283
|
+
// ── Command registration ───────────────────────────────────────────────
|
|
284
|
+
export function registerTimelineCommand(program) {
|
|
285
|
+
program
|
|
286
|
+
.command('timeline')
|
|
287
|
+
.description('Unified project activity timeline — git commits + sessions')
|
|
288
|
+
.option('--since <date>', 'Analysis starting point: ISO date, relative (7d/2w/3m), HEAD~N, or commit hash', '30d')
|
|
289
|
+
.option('--scope <scope>', 'Event source filter: git, session, all', 'all')
|
|
290
|
+
.option('--json', 'Output as JSON')
|
|
291
|
+
.option('--output <path>', 'Write output to file')
|
|
292
|
+
.option('--limit <n>', 'Max events', '500')
|
|
293
|
+
.option('--platform <name>', 'Filter sessions by platform: claude, codex, all', 'all')
|
|
294
|
+
.action(async (opts) => {
|
|
295
|
+
const cwd = process.cwd();
|
|
296
|
+
const scope = opts.scope;
|
|
297
|
+
const limit = parseInt(opts.limit, 10) || 500;
|
|
298
|
+
const platformFilter = opts.platform ?? 'all';
|
|
299
|
+
const now = new Date();
|
|
300
|
+
if (!['git', 'session', 'all'].includes(scope)) {
|
|
301
|
+
console.error(`Error: --scope must be one of git, session, all (got "${scope}")`);
|
|
302
|
+
process.exit(1);
|
|
303
|
+
}
|
|
304
|
+
// Parse --since
|
|
305
|
+
const sinceDate = parseSince(opts.since, cwd);
|
|
306
|
+
const sinceMs = new Date(sinceDate).getTime();
|
|
307
|
+
const days = Math.max(1, Math.round((now.getTime() - sinceMs) / (1000 * 60 * 60 * 24)));
|
|
308
|
+
// Collect events from each source
|
|
309
|
+
const gitEvents = (scope === 'session')
|
|
310
|
+
? []
|
|
311
|
+
: collectGitEvents(sinceDate, cwd);
|
|
312
|
+
let sessionEvents = (scope === 'git')
|
|
313
|
+
? []
|
|
314
|
+
: await collectSessionEvents(sinceDate);
|
|
315
|
+
if (platformFilter !== 'all' && sessionEvents.length > 0) {
|
|
316
|
+
sessionEvents = sessionEvents.filter(s => s.platform === platformFilter);
|
|
317
|
+
}
|
|
318
|
+
// Merge and sort
|
|
319
|
+
const allEvents = [...gitEvents, ...sessionEvents]
|
|
320
|
+
.sort((a, b) => new Date(b.at).getTime() - new Date(a.at).getTime())
|
|
321
|
+
.slice(0, limit);
|
|
322
|
+
// Compute summaries
|
|
323
|
+
const allGitFiles = new Set();
|
|
324
|
+
for (const ev of gitEvents) {
|
|
325
|
+
for (const f of ev.files)
|
|
326
|
+
allGitFiles.add(f);
|
|
327
|
+
}
|
|
328
|
+
const gitSummary = (scope === 'session')
|
|
329
|
+
? { commits: 0, files_changed: 0, insertions: 0, deletions: 0 }
|
|
330
|
+
: computeGitSummary(sinceDate, cwd, gitEvents.length, allGitFiles);
|
|
331
|
+
const sessionsWithEdits = sessionEvents.filter(s => s.edited_files.length > 0);
|
|
332
|
+
const lastSessionDate = sessionEvents.length > 0
|
|
333
|
+
? sessionEvents.sort((a, b) => new Date(b.at).getTime() - new Date(a.at).getTime())[0].at
|
|
334
|
+
: null;
|
|
335
|
+
const byPlatform = {};
|
|
336
|
+
for (const s of sessionEvents) {
|
|
337
|
+
const p = s.platform ?? 'unknown';
|
|
338
|
+
byPlatform[p] = (byPlatform[p] ?? 0) + 1;
|
|
339
|
+
}
|
|
340
|
+
const sessionSummary = {
|
|
341
|
+
total: sessionEvents.length,
|
|
342
|
+
with_edits: sessionsWithEdits.length,
|
|
343
|
+
last_session: lastSessionDate,
|
|
344
|
+
by_platform: byPlatform,
|
|
345
|
+
};
|
|
346
|
+
const hotPaths = computeHotPaths(allEvents, 10);
|
|
347
|
+
const coldWorkflowFiles = findColdWorkflowFiles(sinceDate, cwd);
|
|
348
|
+
const output = {
|
|
349
|
+
window: {
|
|
350
|
+
from: sinceDate,
|
|
351
|
+
to: now.toISOString(),
|
|
352
|
+
days,
|
|
353
|
+
},
|
|
354
|
+
git_summary: gitSummary,
|
|
355
|
+
session_summary: sessionSummary,
|
|
356
|
+
events: allEvents,
|
|
357
|
+
hot_paths: hotPaths,
|
|
358
|
+
cold_workflow_files: coldWorkflowFiles,
|
|
359
|
+
};
|
|
360
|
+
// Output
|
|
361
|
+
if (opts.json || opts.output) {
|
|
362
|
+
const jsonStr = JSON.stringify(output, null, 2);
|
|
363
|
+
if (opts.output) {
|
|
364
|
+
const outPath = resolve(opts.output);
|
|
365
|
+
writeFileSync(outPath, jsonStr, 'utf-8');
|
|
366
|
+
console.log(`Timeline written to ${outPath}`);
|
|
367
|
+
}
|
|
368
|
+
if (opts.json) {
|
|
369
|
+
console.log(jsonStr);
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
else {
|
|
373
|
+
console.log(formatHumanOutput(output));
|
|
374
|
+
}
|
|
375
|
+
});
|
|
376
|
+
}
|
|
377
|
+
//# sourceMappingURL=timeline.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timeline.js","sourceRoot":"","sources":["../../../src/commands/timeline.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,6 +17,11 @@ export interface ComponentDef {
|
|
|
17
17
|
* `false` = opt-in only; user must explicitly tick to install.
|
|
18
18
|
*/
|
|
19
19
|
defaultSelected?: boolean;
|
|
20
|
+
/**
|
|
21
|
+
* If true, this component is always installed and cannot be deselected.
|
|
22
|
+
* Core infrastructure components (workflows, templates, chains, etc.) should be mandatory.
|
|
23
|
+
*/
|
|
24
|
+
mandatory?: boolean;
|
|
20
25
|
/**
|
|
21
26
|
* Build callback — when present, the install pipeline calls this instead of
|
|
22
27
|
* copyRecursive. Receives the `.claude` directory (source of truth) and the
|
|
@@ -41,6 +46,12 @@ export interface ComponentDef {
|
|
|
41
46
|
* Components sharing the same category display under a shared header.
|
|
42
47
|
*/
|
|
43
48
|
category?: string;
|
|
49
|
+
/**
|
|
50
|
+
* Target platform for this component. Used by TUI to group and filter components.
|
|
51
|
+
* 'shared' = always visible regardless of platform selection.
|
|
52
|
+
* undefined = treated as 'shared' for backward compat.
|
|
53
|
+
*/
|
|
54
|
+
platform?: 'claude' | 'codex' | 'agy' | 'agents-standard' | 'shared';
|
|
44
55
|
}
|
|
45
56
|
export declare const COMPONENT_DEFS: ComponentDef[];
|
|
46
57
|
export declare function migrateComponentIds(ids: string[]): string[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"component-defs.d.ts","sourceRoot":"","sources":["../../../src/core/component-defs.ts"],"names":[],"mappings":"AAiBA,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,yDAAyD;IACzD,MAAM,EAAE,CAAC,IAAI,EAAE,QAAQ,GAAG,SAAS,EAAE,WAAW,EAAE,MAAM,KAAK,MAAM,CAAC;IACpE,4DAA4D;IAC5D,YAAY,EAAE,OAAO,CAAC;IACtB,4EAA4E;IAC5E,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,uDAAuD;IACvD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;OAIG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;;;OAIG;IACH,KAAK,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IACpE;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;;OAIG;IACH,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IACvC;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"component-defs.d.ts","sourceRoot":"","sources":["../../../src/core/component-defs.ts"],"names":[],"mappings":"AAiBA,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,yDAAyD;IACzD,MAAM,EAAE,CAAC,IAAI,EAAE,QAAQ,GAAG,SAAS,EAAE,WAAW,EAAE,MAAM,KAAK,MAAM,CAAC;IACpE,4DAA4D;IAC5D,YAAY,EAAE,OAAO,CAAC;IACtB,4EAA4E;IAC5E,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,uDAAuD;IACvD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;OAIG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;;OAIG;IACH,KAAK,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IACpE;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;;OAIG;IACH,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IACvC;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,QAAQ,GAAG,OAAO,GAAG,KAAK,GAAG,iBAAiB,GAAG,QAAQ,CAAC;CACtE;AAyED,eAAO,MAAM,cAAc,EAAE,YAAY,EA8WxC,CAAC;AAaF,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAW3D;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAShE"}
|
|
@@ -73,6 +73,8 @@ export const COMPONENT_DEFS = [
|
|
|
73
73
|
sourcePath: 'workflows',
|
|
74
74
|
target: () => join(paths.home, 'workflows'),
|
|
75
75
|
alwaysGlobal: true,
|
|
76
|
+
mandatory: true,
|
|
77
|
+
platform: 'shared',
|
|
76
78
|
},
|
|
77
79
|
{
|
|
78
80
|
id: 'templates',
|
|
@@ -81,6 +83,8 @@ export const COMPONENT_DEFS = [
|
|
|
81
83
|
sourcePath: 'templates',
|
|
82
84
|
target: () => join(paths.home, 'templates'),
|
|
83
85
|
alwaysGlobal: true,
|
|
86
|
+
mandatory: true,
|
|
87
|
+
platform: 'shared',
|
|
84
88
|
},
|
|
85
89
|
{
|
|
86
90
|
id: 'chains',
|
|
@@ -89,6 +93,8 @@ export const COMPONENT_DEFS = [
|
|
|
89
93
|
sourcePath: 'chains',
|
|
90
94
|
target: () => join(paths.home, 'chains'),
|
|
91
95
|
alwaysGlobal: true,
|
|
96
|
+
mandatory: true,
|
|
97
|
+
platform: 'shared',
|
|
92
98
|
},
|
|
93
99
|
{
|
|
94
100
|
id: 'overlays',
|
|
@@ -97,6 +103,8 @@ export const COMPONENT_DEFS = [
|
|
|
97
103
|
sourcePath: join('overlays', '_shipped'),
|
|
98
104
|
target: () => join(paths.home, 'overlays', '_shipped'),
|
|
99
105
|
alwaysGlobal: true,
|
|
106
|
+
mandatory: true,
|
|
107
|
+
platform: 'shared',
|
|
100
108
|
},
|
|
101
109
|
{
|
|
102
110
|
id: 'commands',
|
|
@@ -107,7 +115,9 @@ export const COMPONENT_DEFS = [
|
|
|
107
115
|
? join(homedir(), '.claude', 'commands')
|
|
108
116
|
: join(projectPath, '.claude', 'commands'),
|
|
109
117
|
alwaysGlobal: false,
|
|
118
|
+
mandatory: true,
|
|
110
119
|
category: 'commands',
|
|
120
|
+
platform: 'claude',
|
|
111
121
|
fileFilter: (name) => !name.startsWith('odyssey-') && !name.startsWith('learn-'),
|
|
112
122
|
},
|
|
113
123
|
{
|
|
@@ -120,7 +130,7 @@ export const COMPONENT_DEFS = [
|
|
|
120
130
|
: join(projectPath, '.claude', 'commands'),
|
|
121
131
|
alwaysGlobal: false,
|
|
122
132
|
category: 'commands',
|
|
123
|
-
|
|
133
|
+
platform: 'claude',
|
|
124
134
|
fileFilter: (name) => name.startsWith('odyssey-'),
|
|
125
135
|
},
|
|
126
136
|
{
|
|
@@ -133,7 +143,7 @@ export const COMPONENT_DEFS = [
|
|
|
133
143
|
: join(projectPath, '.claude', 'commands'),
|
|
134
144
|
alwaysGlobal: false,
|
|
135
145
|
category: 'commands',
|
|
136
|
-
|
|
146
|
+
platform: 'claude',
|
|
137
147
|
fileFilter: (name) => name.startsWith('learn-'),
|
|
138
148
|
},
|
|
139
149
|
{
|
|
@@ -145,6 +155,8 @@ export const COMPONENT_DEFS = [
|
|
|
145
155
|
? join(homedir(), '.claude', 'agents')
|
|
146
156
|
: join(projectPath, '.claude', 'agents'),
|
|
147
157
|
alwaysGlobal: false,
|
|
158
|
+
mandatory: true,
|
|
159
|
+
platform: 'claude',
|
|
148
160
|
},
|
|
149
161
|
{
|
|
150
162
|
id: 'skills',
|
|
@@ -155,7 +167,9 @@ export const COMPONENT_DEFS = [
|
|
|
155
167
|
? join(homedir(), '.claude', 'skills')
|
|
156
168
|
: join(projectPath, '.claude', 'skills'),
|
|
157
169
|
alwaysGlobal: false,
|
|
170
|
+
mandatory: true,
|
|
158
171
|
category: 'skills',
|
|
172
|
+
platform: 'claude',
|
|
159
173
|
fileFilter: (name) => !NON_CORE_SKILL_NAMES.has(name),
|
|
160
174
|
},
|
|
161
175
|
{
|
|
@@ -167,7 +181,9 @@ export const COMPONENT_DEFS = [
|
|
|
167
181
|
? join(homedir(), '.claude', 'skills')
|
|
168
182
|
: join(projectPath, '.claude', 'skills'),
|
|
169
183
|
alwaysGlobal: false,
|
|
184
|
+
mandatory: true,
|
|
170
185
|
category: 'skills',
|
|
186
|
+
platform: 'claude',
|
|
171
187
|
fileFilter: (name) => BUILTIN_TEAM_SKILLS.has(name),
|
|
172
188
|
},
|
|
173
189
|
{
|
|
@@ -179,7 +195,9 @@ export const COMPONENT_DEFS = [
|
|
|
179
195
|
? join(homedir(), '.claude', 'CLAUDE.md')
|
|
180
196
|
: join(projectPath, '.claude', 'CLAUDE.md'),
|
|
181
197
|
alwaysGlobal: false,
|
|
198
|
+
mandatory: true,
|
|
182
199
|
inject: true,
|
|
200
|
+
platform: 'claude',
|
|
183
201
|
},
|
|
184
202
|
{
|
|
185
203
|
id: 'codex-agents-md',
|
|
@@ -191,6 +209,7 @@ export const COMPONENT_DEFS = [
|
|
|
191
209
|
: join(projectPath, '.codex', 'AGENTS.md'),
|
|
192
210
|
alwaysGlobal: false,
|
|
193
211
|
inject: true,
|
|
212
|
+
platform: 'codex',
|
|
194
213
|
},
|
|
195
214
|
{
|
|
196
215
|
id: 'claude-md-chinese',
|
|
@@ -203,6 +222,7 @@ export const COMPONENT_DEFS = [
|
|
|
203
222
|
alwaysGlobal: false,
|
|
204
223
|
inject: true,
|
|
205
224
|
section: 'chinese',
|
|
225
|
+
platform: 'claude',
|
|
206
226
|
},
|
|
207
227
|
{
|
|
208
228
|
id: 'codex-md-chinese',
|
|
@@ -215,6 +235,7 @@ export const COMPONENT_DEFS = [
|
|
|
215
235
|
alwaysGlobal: false,
|
|
216
236
|
inject: true,
|
|
217
237
|
section: 'chinese',
|
|
238
|
+
platform: 'codex',
|
|
218
239
|
},
|
|
219
240
|
{
|
|
220
241
|
id: 'codex-agents',
|
|
@@ -225,6 +246,7 @@ export const COMPONENT_DEFS = [
|
|
|
225
246
|
? join(homedir(), '.codex', 'agents')
|
|
226
247
|
: join(projectPath, '.codex', 'agents'),
|
|
227
248
|
alwaysGlobal: false,
|
|
249
|
+
platform: 'codex',
|
|
228
250
|
},
|
|
229
251
|
{
|
|
230
252
|
id: 'codex-skills',
|
|
@@ -235,6 +257,7 @@ export const COMPONENT_DEFS = [
|
|
|
235
257
|
? join(homedir(), '.codex', 'skills')
|
|
236
258
|
: join(projectPath, '.codex', 'skills'),
|
|
237
259
|
alwaysGlobal: false,
|
|
260
|
+
platform: 'codex',
|
|
238
261
|
},
|
|
239
262
|
// ---------------------------------------------------------------------------
|
|
240
263
|
// Antigravity (agy) CLI assets
|
|
@@ -255,6 +278,7 @@ export const COMPONENT_DEFS = [
|
|
|
255
278
|
: join(projectPath, 'AGENTS.md'),
|
|
256
279
|
alwaysGlobal: false,
|
|
257
280
|
inject: true,
|
|
281
|
+
platform: 'agy',
|
|
258
282
|
},
|
|
259
283
|
{
|
|
260
284
|
id: 'agy-md-chinese',
|
|
@@ -267,6 +291,7 @@ export const COMPONENT_DEFS = [
|
|
|
267
291
|
alwaysGlobal: false,
|
|
268
292
|
inject: true,
|
|
269
293
|
section: 'chinese',
|
|
294
|
+
platform: 'agy',
|
|
270
295
|
},
|
|
271
296
|
{
|
|
272
297
|
id: 'agy-skills',
|
|
@@ -278,6 +303,7 @@ export const COMPONENT_DEFS = [
|
|
|
278
303
|
? join(homedir(), '.gemini', 'antigravity-cli', 'skills')
|
|
279
304
|
: join(projectPath, '.agents', 'skills'),
|
|
280
305
|
alwaysGlobal: false,
|
|
306
|
+
platform: 'agy',
|
|
281
307
|
build: (claudeDir, targetDir) => {
|
|
282
308
|
const { buildAgySkills } = require('./skill-converter.js');
|
|
283
309
|
return buildAgySkills(claudeDir, targetDir);
|
|
@@ -293,6 +319,7 @@ export const COMPONENT_DEFS = [
|
|
|
293
319
|
? join(homedir(), '.gemini', 'antigravity-cli', 'agents')
|
|
294
320
|
: join(projectPath, '.agents', 'agents'),
|
|
295
321
|
alwaysGlobal: false,
|
|
322
|
+
platform: 'agy',
|
|
296
323
|
build: (claudeDir, targetDir) => {
|
|
297
324
|
const { buildAgyAgents } = require('./skill-converter.js');
|
|
298
325
|
return buildAgyAgents(claudeDir, targetDir);
|
|
@@ -316,6 +343,7 @@ export const COMPONENT_DEFS = [
|
|
|
316
343
|
? join(homedir(), '.agents', 'skills')
|
|
317
344
|
: join(projectPath, '.agents', 'skills'),
|
|
318
345
|
alwaysGlobal: false,
|
|
346
|
+
platform: 'agents-standard',
|
|
319
347
|
build: (claudeDir, targetDir) => {
|
|
320
348
|
const { buildAgentsStandardSkills } = require('./skill-converter.js');
|
|
321
349
|
return buildAgentsStandardSkills(claudeDir, targetDir);
|
|
@@ -331,6 +359,7 @@ export const COMPONENT_DEFS = [
|
|
|
331
359
|
? join(homedir(), '.agents', 'agents')
|
|
332
360
|
: join(projectPath, '.agents', 'agents'),
|
|
333
361
|
alwaysGlobal: false,
|
|
362
|
+
platform: 'agents-standard',
|
|
334
363
|
build: (claudeDir, targetDir) => {
|
|
335
364
|
const { buildAgentsStandardAgents } = require('./skill-converter.js');
|
|
336
365
|
return buildAgentsStandardAgents(claudeDir, targetDir);
|
|
@@ -349,6 +378,7 @@ export const COMPONENT_DEFS = [
|
|
|
349
378
|
: join(projectPath, '.claude', 'skills'),
|
|
350
379
|
alwaysGlobal: false,
|
|
351
380
|
category: 'skills',
|
|
381
|
+
platform: 'claude',
|
|
352
382
|
defaultSelected: false,
|
|
353
383
|
fileFilter: (name) => EXTRA_TEAM_SKILL_NAMES.has(name),
|
|
354
384
|
},
|
|
@@ -362,6 +392,7 @@ export const COMPONENT_DEFS = [
|
|
|
362
392
|
: join(projectPath, '.claude', 'skills'),
|
|
363
393
|
alwaysGlobal: false,
|
|
364
394
|
category: 'skills',
|
|
395
|
+
platform: 'claude',
|
|
365
396
|
defaultSelected: false,
|
|
366
397
|
fileFilter: (name) => SCHOLAR_SKILL_NAMES.has(name),
|
|
367
398
|
},
|
|
@@ -375,6 +406,7 @@ export const COMPONENT_DEFS = [
|
|
|
375
406
|
: join(projectPath, '.claude', 'skills'),
|
|
376
407
|
alwaysGlobal: false,
|
|
377
408
|
category: 'skills',
|
|
409
|
+
platform: 'claude',
|
|
378
410
|
defaultSelected: false,
|
|
379
411
|
fileFilter: (name) => META_SKILL_NAMES.has(name),
|
|
380
412
|
},
|