claudecto 0.1.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/LICENSE +21 -0
- package/README.md +275 -0
- package/dist/__tests__/package.test.d.ts +2 -0
- package/dist/__tests__/package.test.d.ts.map +1 -0
- package/dist/__tests__/package.test.js +53 -0
- package/dist/__tests__/package.test.js.map +1 -0
- package/dist/cli.d.ts +6 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +200 -0
- package/dist/cli.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -0
- package/dist/server/index.d.ts +11 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +1207 -0
- package/dist/server/index.js.map +1 -0
- package/dist/services/advisor.d.ts +117 -0
- package/dist/services/advisor.d.ts.map +1 -0
- package/dist/services/advisor.js +2636 -0
- package/dist/services/advisor.js.map +1 -0
- package/dist/services/agent-generator.d.ts +71 -0
- package/dist/services/agent-generator.d.ts.map +1 -0
- package/dist/services/agent-generator.js +295 -0
- package/dist/services/agent-generator.js.map +1 -0
- package/dist/services/agents.d.ts +67 -0
- package/dist/services/agents.d.ts.map +1 -0
- package/dist/services/agents.js +405 -0
- package/dist/services/agents.js.map +1 -0
- package/dist/services/analytics.d.ts +145 -0
- package/dist/services/analytics.d.ts.map +1 -0
- package/dist/services/analytics.js +609 -0
- package/dist/services/analytics.js.map +1 -0
- package/dist/services/blueprints.d.ts +31 -0
- package/dist/services/blueprints.d.ts.map +1 -0
- package/dist/services/blueprints.js +317 -0
- package/dist/services/blueprints.js.map +1 -0
- package/dist/services/claude-dir.d.ts +50 -0
- package/dist/services/claude-dir.d.ts.map +1 -0
- package/dist/services/claude-dir.js +193 -0
- package/dist/services/claude-dir.js.map +1 -0
- package/dist/services/hooks.d.ts +38 -0
- package/dist/services/hooks.d.ts.map +1 -0
- package/dist/services/hooks.js +165 -0
- package/dist/services/hooks.js.map +1 -0
- package/dist/services/insights.d.ts +52 -0
- package/dist/services/insights.d.ts.map +1 -0
- package/dist/services/insights.js +1035 -0
- package/dist/services/insights.js.map +1 -0
- package/dist/services/memory.d.ts +14 -0
- package/dist/services/memory.d.ts.map +1 -0
- package/dist/services/memory.js +25 -0
- package/dist/services/memory.js.map +1 -0
- package/dist/services/plans.d.ts +20 -0
- package/dist/services/plans.d.ts.map +1 -0
- package/dist/services/plans.js +149 -0
- package/dist/services/plans.js.map +1 -0
- package/dist/services/project-intelligence.d.ts +75 -0
- package/dist/services/project-intelligence.d.ts.map +1 -0
- package/dist/services/project-intelligence.js +731 -0
- package/dist/services/project-intelligence.js.map +1 -0
- package/dist/services/search.d.ts +32 -0
- package/dist/services/search.d.ts.map +1 -0
- package/dist/services/search.js +203 -0
- package/dist/services/search.js.map +1 -0
- package/dist/services/sessions.d.ts +25 -0
- package/dist/services/sessions.d.ts.map +1 -0
- package/dist/services/sessions.js +248 -0
- package/dist/services/sessions.js.map +1 -0
- package/dist/services/skills.d.ts +30 -0
- package/dist/services/skills.d.ts.map +1 -0
- package/dist/services/skills.js +197 -0
- package/dist/services/skills.js.map +1 -0
- package/dist/services/stats.d.ts +23 -0
- package/dist/services/stats.d.ts.map +1 -0
- package/dist/services/stats.js +88 -0
- package/dist/services/stats.js.map +1 -0
- package/dist/services/teams.d.ts +115 -0
- package/dist/services/teams.d.ts.map +1 -0
- package/dist/services/teams.js +421 -0
- package/dist/services/teams.js.map +1 -0
- package/dist/services/tech-stack.d.ts +98 -0
- package/dist/services/tech-stack.d.ts.map +1 -0
- package/dist/services/tech-stack.js +1088 -0
- package/dist/services/tech-stack.js.map +1 -0
- package/dist/services/terminal.d.ts +75 -0
- package/dist/services/terminal.d.ts.map +1 -0
- package/dist/services/terminal.js +224 -0
- package/dist/services/terminal.js.map +1 -0
- package/dist/types.d.ts +1095 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +18 -0
- package/dist/types.js.map +1 -0
- package/dist/ui/assets/index-BiH4Nhdk.css +1 -0
- package/dist/ui/assets/index-Brv-K8bd.css +1 -0
- package/dist/ui/assets/index-BwMBEdQz.js +3108 -0
- package/dist/ui/assets/index-BwMBEdQz.js.map +1 -0
- package/dist/ui/assets/index-CEWz7ABD.js +3108 -0
- package/dist/ui/assets/index-CEWz7ABD.js.map +1 -0
- package/dist/ui/assets/index-CIZ3vvc-.css +1 -0
- package/dist/ui/assets/index-CsU3cI0n.js +3108 -0
- package/dist/ui/assets/index-CsU3cI0n.js.map +1 -0
- package/dist/ui/assets/index-D3AY6iCS.js +3133 -0
- package/dist/ui/assets/index-D3AY6iCS.js.map +1 -0
- package/dist/ui/assets/index-D8lNZ0Ye.css +1 -0
- package/dist/ui/assets/index-DmgeppSA.js +3108 -0
- package/dist/ui/assets/index-DmgeppSA.js.map +1 -0
- package/dist/ui/favicon.svg +43 -0
- package/dist/ui/index.html +23 -0
- package/dist/utils/jsonl.d.ts +16 -0
- package/dist/utils/jsonl.d.ts.map +1 -0
- package/dist/utils/jsonl.js +51 -0
- package/dist/utils/jsonl.js.map +1 -0
- package/package.json +106 -0
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Skills service - reads and manages skills from ~/.claude/skills/
|
|
3
|
+
*/
|
|
4
|
+
import path from 'node:path';
|
|
5
|
+
import { parse as parseYaml } from 'yaml';
|
|
6
|
+
export class SkillsService {
|
|
7
|
+
claudeDir;
|
|
8
|
+
constructor(claudeDir) {
|
|
9
|
+
this.claudeDir = claudeDir;
|
|
10
|
+
}
|
|
11
|
+
async listSkills() {
|
|
12
|
+
const skillFiles = await this.claudeDir.listSkills();
|
|
13
|
+
const skills = [];
|
|
14
|
+
for (const filePath of skillFiles) {
|
|
15
|
+
const skill = await this.parseSkill(filePath, 'user');
|
|
16
|
+
if (skill) {
|
|
17
|
+
skills.push(skill);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
// Sort by name
|
|
21
|
+
skills.sort((a, b) => a.name.localeCompare(b.name));
|
|
22
|
+
return skills;
|
|
23
|
+
}
|
|
24
|
+
async getSkill(skillPath) {
|
|
25
|
+
const fullPath = path.join(this.claudeDir.skillsDir, skillPath, 'SKILL.md');
|
|
26
|
+
if (!(await this.claudeDir.fileExists(fullPath))) {
|
|
27
|
+
return null;
|
|
28
|
+
}
|
|
29
|
+
return this.parseSkill(fullPath, 'user');
|
|
30
|
+
}
|
|
31
|
+
async createSkill(name, content) {
|
|
32
|
+
const validation = this.validateSkill(content);
|
|
33
|
+
if (!validation.valid) {
|
|
34
|
+
return { success: false, error: validation.errors.join(', ') };
|
|
35
|
+
}
|
|
36
|
+
const skillDir = path.join(this.claudeDir.skillsDir, name);
|
|
37
|
+
const skillFile = path.join(skillDir, 'SKILL.md');
|
|
38
|
+
try {
|
|
39
|
+
await this.claudeDir.writeFile(skillFile, content);
|
|
40
|
+
return { success: true };
|
|
41
|
+
}
|
|
42
|
+
catch (e) {
|
|
43
|
+
return { success: false, error: String(e) };
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
async updateSkill(skillPath, content) {
|
|
47
|
+
const validation = this.validateSkill(content);
|
|
48
|
+
if (!validation.valid) {
|
|
49
|
+
return { success: false, error: validation.errors.join(', ') };
|
|
50
|
+
}
|
|
51
|
+
const fullPath = path.join(this.claudeDir.skillsDir, skillPath, 'SKILL.md');
|
|
52
|
+
if (!(await this.claudeDir.fileExists(fullPath))) {
|
|
53
|
+
return { success: false, error: 'Skill not found' };
|
|
54
|
+
}
|
|
55
|
+
try {
|
|
56
|
+
await this.claudeDir.writeFile(fullPath, content);
|
|
57
|
+
return { success: true };
|
|
58
|
+
}
|
|
59
|
+
catch (e) {
|
|
60
|
+
return { success: false, error: String(e) };
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
async deleteSkill(skillPath) {
|
|
64
|
+
const fullPath = path.join(this.claudeDir.skillsDir, skillPath, 'SKILL.md');
|
|
65
|
+
if (!(await this.claudeDir.fileExists(fullPath))) {
|
|
66
|
+
return { success: false, error: 'Skill not found' };
|
|
67
|
+
}
|
|
68
|
+
try {
|
|
69
|
+
const fs = await import('node:fs/promises');
|
|
70
|
+
await fs.rm(path.dirname(fullPath), { recursive: true });
|
|
71
|
+
return { success: true };
|
|
72
|
+
}
|
|
73
|
+
catch (e) {
|
|
74
|
+
return { success: false, error: String(e) };
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
validateSkill(content) {
|
|
78
|
+
const errors = [];
|
|
79
|
+
// Check frontmatter exists
|
|
80
|
+
if (!content.startsWith('---')) {
|
|
81
|
+
errors.push('Missing YAML frontmatter (must start with ---)');
|
|
82
|
+
return { valid: false, errors };
|
|
83
|
+
}
|
|
84
|
+
// Find end of frontmatter
|
|
85
|
+
const endIndex = content.indexOf('---', 3);
|
|
86
|
+
if (endIndex === -1) {
|
|
87
|
+
errors.push('Unclosed frontmatter (missing closing ---)');
|
|
88
|
+
return { valid: false, errors };
|
|
89
|
+
}
|
|
90
|
+
const frontmatterStr = content.slice(3, endIndex).trim();
|
|
91
|
+
try {
|
|
92
|
+
const frontmatter = parseYaml(frontmatterStr);
|
|
93
|
+
// Validate name if present
|
|
94
|
+
if (frontmatter.name) {
|
|
95
|
+
if (!/^[a-z0-9-]+$/.test(frontmatter.name)) {
|
|
96
|
+
errors.push('name must contain only lowercase letters, numbers, and hyphens');
|
|
97
|
+
}
|
|
98
|
+
if (frontmatter.name.length > 64) {
|
|
99
|
+
errors.push('name must be 64 characters or less');
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
// Validate context if present
|
|
103
|
+
if (frontmatter.context && frontmatter.context !== 'fork') {
|
|
104
|
+
errors.push('context must be "fork" if specified');
|
|
105
|
+
}
|
|
106
|
+
// Validate user-invocable is boolean
|
|
107
|
+
if (frontmatter['user-invocable'] !== undefined &&
|
|
108
|
+
typeof frontmatter['user-invocable'] !== 'boolean') {
|
|
109
|
+
errors.push('user-invocable must be a boolean');
|
|
110
|
+
}
|
|
111
|
+
// Validate disable-model-invocation is boolean
|
|
112
|
+
if (frontmatter['disable-model-invocation'] !== undefined &&
|
|
113
|
+
typeof frontmatter['disable-model-invocation'] !== 'boolean') {
|
|
114
|
+
errors.push('disable-model-invocation must be a boolean');
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
catch (e) {
|
|
118
|
+
errors.push(`Invalid YAML: ${e}`);
|
|
119
|
+
}
|
|
120
|
+
// Check markdown content exists
|
|
121
|
+
const markdownContent = content.slice(endIndex + 3).trim();
|
|
122
|
+
if (!markdownContent) {
|
|
123
|
+
errors.push('Skill must have markdown content after frontmatter');
|
|
124
|
+
}
|
|
125
|
+
return { valid: errors.length === 0, errors };
|
|
126
|
+
}
|
|
127
|
+
getSkillTemplate() {
|
|
128
|
+
return `---
|
|
129
|
+
name: my-skill
|
|
130
|
+
description: A brief description of what this skill does
|
|
131
|
+
# Optional fields:
|
|
132
|
+
# disable-model-invocation: true # Only allow manual /my-skill invocation
|
|
133
|
+
# user-invocable: false # Only allow Claude to invoke
|
|
134
|
+
# allowed-tools: Read, Grep, Glob # Tools Claude can use without permission
|
|
135
|
+
# context: fork # Run in a subagent
|
|
136
|
+
# agent: Explore # Which agent to use (if context: fork)
|
|
137
|
+
---
|
|
138
|
+
|
|
139
|
+
# My Skill
|
|
140
|
+
|
|
141
|
+
Instructions for Claude when this skill is invoked.
|
|
142
|
+
|
|
143
|
+
## Usage
|
|
144
|
+
|
|
145
|
+
Describe how to use this skill and what arguments it accepts.
|
|
146
|
+
|
|
147
|
+
## Examples
|
|
148
|
+
|
|
149
|
+
Show example invocations and expected behavior.
|
|
150
|
+
`;
|
|
151
|
+
}
|
|
152
|
+
async parseSkill(filePath, scope) {
|
|
153
|
+
try {
|
|
154
|
+
const content = await this.claudeDir.readFile(filePath);
|
|
155
|
+
const validation = this.validateSkill(content);
|
|
156
|
+
// Extract frontmatter
|
|
157
|
+
const endIndex = content.indexOf('---', 3);
|
|
158
|
+
const frontmatterStr = content.slice(3, endIndex).trim();
|
|
159
|
+
let frontmatter = {};
|
|
160
|
+
try {
|
|
161
|
+
frontmatter = parseYaml(frontmatterStr) || {};
|
|
162
|
+
}
|
|
163
|
+
catch {
|
|
164
|
+
// Keep empty frontmatter
|
|
165
|
+
}
|
|
166
|
+
// Get name from frontmatter or directory name
|
|
167
|
+
const dirName = path.basename(path.dirname(filePath));
|
|
168
|
+
const name = frontmatter.name || dirName;
|
|
169
|
+
// Get description from frontmatter or first paragraph
|
|
170
|
+
let description = frontmatter.description || '';
|
|
171
|
+
if (!description) {
|
|
172
|
+
const markdownContent = content.slice(endIndex + 3).trim();
|
|
173
|
+
const lines = markdownContent.split('\n');
|
|
174
|
+
for (const line of lines) {
|
|
175
|
+
if (line.trim() && !line.startsWith('#')) {
|
|
176
|
+
description = line.trim().slice(0, 200);
|
|
177
|
+
break;
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
return {
|
|
182
|
+
name,
|
|
183
|
+
path: dirName,
|
|
184
|
+
scope,
|
|
185
|
+
frontmatter,
|
|
186
|
+
content,
|
|
187
|
+
description,
|
|
188
|
+
isValid: validation.valid,
|
|
189
|
+
errors: validation.errors,
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
catch {
|
|
193
|
+
return null;
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
//# sourceMappingURL=skills.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skills.js","sourceRoot":"","sources":["../../src/services/skills.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stats service - reads usage statistics from stats-cache.json
|
|
3
|
+
*/
|
|
4
|
+
import type { StatsCache, DailyActivity } from '../types.js';
|
|
5
|
+
import { ClaudeDir } from './claude-dir.js';
|
|
6
|
+
export declare class StatsService {
|
|
7
|
+
private claudeDir;
|
|
8
|
+
private cache;
|
|
9
|
+
constructor(claudeDir: ClaudeDir);
|
|
10
|
+
getStats(): Promise<StatsCache | null>;
|
|
11
|
+
getDailyActivity(days?: number): Promise<DailyActivity[]>;
|
|
12
|
+
getSummary(): Promise<{
|
|
13
|
+
totalMessages: number;
|
|
14
|
+
totalSessions: number;
|
|
15
|
+
totalToolCalls: number;
|
|
16
|
+
totalTokens: number;
|
|
17
|
+
activeDays: number;
|
|
18
|
+
streakDays: number;
|
|
19
|
+
averageMessagesPerDay: number;
|
|
20
|
+
}>;
|
|
21
|
+
invalidateCache(): void;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=stats.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stats.d.ts","sourceRoot":"","sources":["../../src/services/stats.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,qBAAa,YAAY;IACvB,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,KAAK,CAA2B;gBAE5B,SAAS,EAAE,SAAS;IAI1B,QAAQ,IAAI,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAQtC,gBAAgB,CAAC,IAAI,GAAE,MAAW,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAc7D,UAAU,IAAI,OAAO,CAAC;QAC1B,aAAa,EAAE,MAAM,CAAC;QACtB,aAAa,EAAE,MAAM,CAAC;QACtB,cAAc,EAAE,MAAM,CAAC;QACvB,WAAW,EAAE,MAAM,CAAC;QACpB,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,EAAE,MAAM,CAAC;QACnB,qBAAqB,EAAE,MAAM,CAAC;KAC/B,CAAC;IAgEF,eAAe,IAAI,IAAI;CAGxB"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stats service - reads usage statistics from stats-cache.json
|
|
3
|
+
*/
|
|
4
|
+
export class StatsService {
|
|
5
|
+
claudeDir;
|
|
6
|
+
cache = null;
|
|
7
|
+
constructor(claudeDir) {
|
|
8
|
+
this.claudeDir = claudeDir;
|
|
9
|
+
}
|
|
10
|
+
async getStats() {
|
|
11
|
+
if (this.cache)
|
|
12
|
+
return this.cache;
|
|
13
|
+
const stats = await this.claudeDir.readJSON(this.claudeDir.statsFile);
|
|
14
|
+
this.cache = stats;
|
|
15
|
+
return stats;
|
|
16
|
+
}
|
|
17
|
+
async getDailyActivity(days = 30) {
|
|
18
|
+
const stats = await this.getStats();
|
|
19
|
+
if (!stats?.dailyActivity)
|
|
20
|
+
return [];
|
|
21
|
+
// Get last N days
|
|
22
|
+
const cutoff = new Date();
|
|
23
|
+
cutoff.setDate(cutoff.getDate() - days);
|
|
24
|
+
const cutoffStr = cutoff.toISOString().split('T')[0];
|
|
25
|
+
return stats.dailyActivity
|
|
26
|
+
.filter((d) => d.date >= cutoffStr)
|
|
27
|
+
.sort((a, b) => a.date.localeCompare(b.date));
|
|
28
|
+
}
|
|
29
|
+
async getSummary() {
|
|
30
|
+
const stats = await this.getStats();
|
|
31
|
+
if (!stats?.dailyActivity) {
|
|
32
|
+
return {
|
|
33
|
+
totalMessages: 0,
|
|
34
|
+
totalSessions: 0,
|
|
35
|
+
totalToolCalls: 0,
|
|
36
|
+
totalTokens: 0,
|
|
37
|
+
activeDays: 0,
|
|
38
|
+
streakDays: 0,
|
|
39
|
+
averageMessagesPerDay: 0,
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
const activity = stats.dailyActivity;
|
|
43
|
+
const totalMessages = activity.reduce((sum, d) => sum + d.messageCount, 0);
|
|
44
|
+
const totalSessions = activity.reduce((sum, d) => sum + d.sessionCount, 0);
|
|
45
|
+
const totalToolCalls = activity.reduce((sum, d) => sum + d.toolCallCount, 0);
|
|
46
|
+
const activeDays = activity.length;
|
|
47
|
+
// Calculate streak (consecutive days ending today or yesterday)
|
|
48
|
+
let streakDays = 0;
|
|
49
|
+
const today = new Date().toISOString().split('T')[0];
|
|
50
|
+
const yesterday = new Date(Date.now() - 86400000).toISOString().split('T')[0];
|
|
51
|
+
const sortedDates = activity
|
|
52
|
+
.map((d) => d.date)
|
|
53
|
+
.sort((a, b) => b.localeCompare(a)); // Most recent first
|
|
54
|
+
if (sortedDates.length > 0) {
|
|
55
|
+
const mostRecent = sortedDates[0];
|
|
56
|
+
if (mostRecent === today || mostRecent === yesterday) {
|
|
57
|
+
streakDays = 1;
|
|
58
|
+
let expectedDate = new Date(mostRecent);
|
|
59
|
+
for (let i = 1; i < sortedDates.length; i++) {
|
|
60
|
+
expectedDate.setDate(expectedDate.getDate() - 1);
|
|
61
|
+
const expectedStr = expectedDate.toISOString().split('T')[0];
|
|
62
|
+
if (sortedDates[i] === expectedStr) {
|
|
63
|
+
streakDays++;
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
break;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
const averageMessagesPerDay = activeDays > 0 ? Math.round(totalMessages / activeDays) : 0;
|
|
72
|
+
// Estimate tokens based on messages (rough approximation)
|
|
73
|
+
const totalTokens = totalMessages * 150; // ~150 tokens per message average
|
|
74
|
+
return {
|
|
75
|
+
totalMessages,
|
|
76
|
+
totalSessions,
|
|
77
|
+
totalToolCalls,
|
|
78
|
+
totalTokens,
|
|
79
|
+
activeDays,
|
|
80
|
+
streakDays,
|
|
81
|
+
averageMessagesPerDay,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
invalidateCache() {
|
|
85
|
+
this.cache = null;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=stats.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stats.js","sourceRoot":"","sources":["../../src/services/stats.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Teams service - Manages multi-agent team configurations
|
|
3
|
+
* Teams are stored in ~/.claude/teams/{name}/config.json
|
|
4
|
+
*/
|
|
5
|
+
import type { TeamConfig, TeamMember } from '../types.js';
|
|
6
|
+
import { ClaudeDir } from './claude-dir.js';
|
|
7
|
+
export declare class TeamsService {
|
|
8
|
+
private claudeDir;
|
|
9
|
+
constructor(claudeDir: ClaudeDir);
|
|
10
|
+
/**
|
|
11
|
+
* Get the teams directory path
|
|
12
|
+
*/
|
|
13
|
+
get teamsDir(): string;
|
|
14
|
+
/**
|
|
15
|
+
* List all teams
|
|
16
|
+
*/
|
|
17
|
+
listTeams(): Promise<TeamConfig[]>;
|
|
18
|
+
/**
|
|
19
|
+
* Get a specific team by name/id
|
|
20
|
+
*/
|
|
21
|
+
getTeam(teamId: string): Promise<TeamConfig | null>;
|
|
22
|
+
/**
|
|
23
|
+
* Create a new team
|
|
24
|
+
*/
|
|
25
|
+
createTeam(name: string, config: {
|
|
26
|
+
description?: string;
|
|
27
|
+
leader?: TeamMember;
|
|
28
|
+
teammates?: TeamMember[];
|
|
29
|
+
planFile?: string;
|
|
30
|
+
}): Promise<{
|
|
31
|
+
success: boolean;
|
|
32
|
+
error?: string;
|
|
33
|
+
}>;
|
|
34
|
+
/**
|
|
35
|
+
* Update an existing team
|
|
36
|
+
*/
|
|
37
|
+
updateTeam(teamId: string, updates: {
|
|
38
|
+
description?: string;
|
|
39
|
+
leader?: TeamMember;
|
|
40
|
+
teammates?: TeamMember[];
|
|
41
|
+
planFile?: string;
|
|
42
|
+
}): Promise<{
|
|
43
|
+
success: boolean;
|
|
44
|
+
error?: string;
|
|
45
|
+
}>;
|
|
46
|
+
/**
|
|
47
|
+
* Delete a team
|
|
48
|
+
*/
|
|
49
|
+
deleteTeam(teamId: string): Promise<{
|
|
50
|
+
success: boolean;
|
|
51
|
+
error?: string;
|
|
52
|
+
}>;
|
|
53
|
+
/**
|
|
54
|
+
* Export team as a shareable blueprint
|
|
55
|
+
*/
|
|
56
|
+
exportTeam(teamId: string): Promise<{
|
|
57
|
+
success: boolean;
|
|
58
|
+
blueprint?: string;
|
|
59
|
+
error?: string;
|
|
60
|
+
}>;
|
|
61
|
+
/**
|
|
62
|
+
* Validate team name
|
|
63
|
+
*/
|
|
64
|
+
private validateTeamName;
|
|
65
|
+
/**
|
|
66
|
+
* Get team templates with pre-configured structures
|
|
67
|
+
*/
|
|
68
|
+
getTeamTemplates(): Array<{
|
|
69
|
+
id: string;
|
|
70
|
+
name: string;
|
|
71
|
+
description: string;
|
|
72
|
+
config: Partial<TeamConfig>;
|
|
73
|
+
}>;
|
|
74
|
+
/**
|
|
75
|
+
* List available agents that can be linked to team members
|
|
76
|
+
*/
|
|
77
|
+
listAvailableAgents(): Promise<Array<{
|
|
78
|
+
name: string;
|
|
79
|
+
path: string;
|
|
80
|
+
description: string;
|
|
81
|
+
}>>;
|
|
82
|
+
/**
|
|
83
|
+
* Validate that referenced agents exist
|
|
84
|
+
*/
|
|
85
|
+
validateAgentRefs(teammates: TeamMember[]): Promise<{
|
|
86
|
+
valid: boolean;
|
|
87
|
+
missing: string[];
|
|
88
|
+
}>;
|
|
89
|
+
/**
|
|
90
|
+
* Generate CLAUDE.md snippet for team invocation
|
|
91
|
+
* This creates instructions that can be added to a project's CLAUDE.md
|
|
92
|
+
*/
|
|
93
|
+
generateClaudeMdSnippet(team: TeamConfig): string;
|
|
94
|
+
/**
|
|
95
|
+
* Generate setup script that creates all necessary agent files for a team
|
|
96
|
+
*/
|
|
97
|
+
generateSetupScript(teamId: string): Promise<{
|
|
98
|
+
success: boolean;
|
|
99
|
+
script?: string;
|
|
100
|
+
error?: string;
|
|
101
|
+
}>;
|
|
102
|
+
/**
|
|
103
|
+
* Get invocation instructions for a team
|
|
104
|
+
*/
|
|
105
|
+
getInvocationInstructions(teamId: string): Promise<{
|
|
106
|
+
slashCommand: string;
|
|
107
|
+
claudeMdSnippet: string;
|
|
108
|
+
agentCommands: Array<{
|
|
109
|
+
agent: string;
|
|
110
|
+
command: string;
|
|
111
|
+
}>;
|
|
112
|
+
projectSetup: string;
|
|
113
|
+
} | null>;
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=teams.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"teams.d.ts","sourceRoot":"","sources":["../../src/services/teams.ts"],"names":[],"mappings":"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"}
|