specweave 1.0.260 → 1.0.261
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/CLAUDE.md +26 -25
- package/dist/dashboard/assets/index-CDl14O5G.css +1 -0
- package/dist/dashboard/assets/index-CmqBqnWd.js +11 -0
- package/dist/dashboard/index.html +2 -2
- package/dist/src/dashboard/server/dashboard-server.d.ts.map +1 -1
- package/dist/src/dashboard/server/dashboard-server.js +88 -33
- package/dist/src/dashboard/server/dashboard-server.js.map +1 -1
- package/dist/src/dashboard/server/data/cost-aggregator.d.ts +36 -0
- package/dist/src/dashboard/server/data/cost-aggregator.d.ts.map +1 -0
- package/dist/src/dashboard/server/data/cost-aggregator.js +156 -0
- package/dist/src/dashboard/server/data/cost-aggregator.js.map +1 -0
- package/dist/src/dashboard/server/data/dashboard-data-aggregator.d.ts +37 -10
- package/dist/src/dashboard/server/data/dashboard-data-aggregator.d.ts.map +1 -1
- package/dist/src/dashboard/server/data/dashboard-data-aggregator.js +193 -51
- package/dist/src/dashboard/server/data/dashboard-data-aggregator.js.map +1 -1
- package/dist/src/dashboard/types.d.ts +11 -0
- package/dist/src/dashboard/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/plugins/specweave/skills/auto/SKILL.md +35 -0
- package/plugins/specweave/skills/do/SKILL.md +1 -1
- package/plugins/specweave/skills/plan/SKILL.md +37 -0
- package/plugins/specweave/skills/team-lead/SKILL.md +1 -1
- package/dist/dashboard/assets/index-DdtF4K1G.css +0 -1
- package/dist/dashboard/assets/index-cZA6rz8s.js +0 -11
|
@@ -1,19 +1,46 @@
|
|
|
1
1
|
import type { OverviewPayload, IncrementListPayload, SyncStatusPayload, SkillUsage, LspStatus, PluginInfo } from '../../types.js';
|
|
2
|
+
import type { CostsSummaryPayload } from './cost-aggregator.js';
|
|
3
|
+
interface AnalyticsAggregation {
|
|
4
|
+
totalEvents: number;
|
|
5
|
+
successRate: number;
|
|
6
|
+
topCommands: Array<{
|
|
7
|
+
name: string;
|
|
8
|
+
count: number;
|
|
9
|
+
}>;
|
|
10
|
+
topSkills: Array<{
|
|
11
|
+
name: string;
|
|
12
|
+
plugin: string;
|
|
13
|
+
count: number;
|
|
14
|
+
successCount: number;
|
|
15
|
+
failureCount: number;
|
|
16
|
+
lastUsed: string;
|
|
17
|
+
}>;
|
|
18
|
+
topAgents: Array<{
|
|
19
|
+
name: string;
|
|
20
|
+
count: number;
|
|
21
|
+
}>;
|
|
22
|
+
dailySummaries: Array<{
|
|
23
|
+
date: string;
|
|
24
|
+
totalEvents: number;
|
|
25
|
+
}>;
|
|
26
|
+
last24hEvents: number;
|
|
27
|
+
}
|
|
2
28
|
export declare class DashboardDataAggregator {
|
|
3
29
|
private projectRoot;
|
|
30
|
+
private analyticsCache;
|
|
31
|
+
private analyticsCacheTime;
|
|
32
|
+
private readonly analyticsCacheTTL;
|
|
4
33
|
constructor(projectRoot: string);
|
|
5
34
|
/** Get overview combining all sources */
|
|
6
|
-
getOverview(): Promise<OverviewPayload>;
|
|
35
|
+
getOverview(costData?: CostsSummaryPayload): Promise<OverviewPayload>;
|
|
7
36
|
/** Get increments list */
|
|
8
37
|
getIncrements(): Promise<IncrementListPayload>;
|
|
9
|
-
/** Get sync status */
|
|
38
|
+
/** Get sync status with enriched connection diagnosis */
|
|
10
39
|
getSyncStatus(): Promise<SyncStatusPayload>;
|
|
11
|
-
/** Get analytics summary
|
|
12
|
-
getAnalyticsSummary(): Promise<
|
|
13
|
-
/** Get per-skill usage stats */
|
|
40
|
+
/** Get analytics summary aggregated from events.jsonl */
|
|
41
|
+
getAnalyticsSummary(): Promise<AnalyticsAggregation>;
|
|
42
|
+
/** Get per-skill usage stats from events.jsonl */
|
|
14
43
|
getSkillUsage(): Promise<SkillUsage[]>;
|
|
15
|
-
/** Get costs summary */
|
|
16
|
-
getCostsSummary(): Promise<Record<string, unknown>>;
|
|
17
44
|
/** Get notifications */
|
|
18
45
|
getNotifications(): Promise<unknown[]>;
|
|
19
46
|
/** Get config */
|
|
@@ -22,14 +49,14 @@ export declare class DashboardDataAggregator {
|
|
|
22
49
|
getLspStatus(): Promise<LspStatus | null>;
|
|
23
50
|
/** Get installed plugins */
|
|
24
51
|
getPlugins(): Promise<PluginInfo[]>;
|
|
52
|
+
private aggregateEventsFromJsonl;
|
|
53
|
+
private enrichSyncPlatforms;
|
|
25
54
|
private readDashboardJson;
|
|
26
55
|
private readSyncMetadata;
|
|
27
56
|
private readNotifications;
|
|
28
|
-
private readCosts;
|
|
29
|
-
private readAnalyticsCache;
|
|
30
57
|
private readConfig;
|
|
31
58
|
private readJsonFile;
|
|
32
59
|
private extractStatusBreakdown;
|
|
33
|
-
private count24hEvents;
|
|
34
60
|
}
|
|
61
|
+
export {};
|
|
35
62
|
//# sourceMappingURL=dashboard-data-aggregator.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dashboard-data-aggregator.d.ts","sourceRoot":"","sources":["../../../../../src/dashboard/server/data/dashboard-data-aggregator.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,eAAe,EACf,oBAAoB,EAEpB,iBAAiB,EACjB,UAAU,EACV,SAAS,EACT,UAAU,
|
|
1
|
+
{"version":3,"file":"dashboard-data-aggregator.d.ts","sourceRoot":"","sources":["../../../../../src/dashboard/server/data/dashboard-data-aggregator.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,eAAe,EACf,oBAAoB,EAEpB,iBAAiB,EACjB,UAAU,EACV,SAAS,EACT,UAAU,EACX,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAEhE,UAAU,oBAAoB;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACpD,SAAS,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAChI,SAAS,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAClD,cAAc,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC7D,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,qBAAa,uBAAuB;IAKtB,OAAO,CAAC,WAAW;IAJ/B,OAAO,CAAC,cAAc,CAAqC;IAC3D,OAAO,CAAC,kBAAkB,CAAK;IAC/B,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAU;gBAExB,WAAW,EAAE,MAAM;IAEvC,yCAAyC;IACnC,WAAW,CAAC,QAAQ,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,eAAe,CAAC;IA2C3E,0BAA0B;IACpB,aAAa,IAAI,OAAO,CAAC,oBAAoB,CAAC;IAoCpD,yDAAyD;IACnD,aAAa,IAAI,OAAO,CAAC,iBAAiB,CAAC;IASjD,yDAAyD;IACnD,mBAAmB,IAAI,OAAO,CAAC,oBAAoB,CAAC;IAI1D,kDAAkD;IAC5C,aAAa,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;IAa5C,wBAAwB;IAClB,gBAAgB,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IAI5C,iBAAiB;IACX,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAInD,qBAAqB;IACf,YAAY,IAAI,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IAI/C,4BAA4B;IACtB,UAAU,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;YAwC3B,wBAAwB;IA6GtC,OAAO,CAAC,mBAAmB;IAqE3B,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,gBAAgB;IAIxB,OAAO,CAAC,iBAAiB;IAKzB,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,YAAY;IAWpB,OAAO,CAAC,sBAAsB;CAQ/B"}
|
|
@@ -3,14 +3,16 @@ import * as path from 'path';
|
|
|
3
3
|
export class DashboardDataAggregator {
|
|
4
4
|
constructor(projectRoot) {
|
|
5
5
|
this.projectRoot = projectRoot;
|
|
6
|
+
this.analyticsCache = null;
|
|
7
|
+
this.analyticsCacheTime = 0;
|
|
8
|
+
this.analyticsCacheTTL = 30000; // 30 seconds
|
|
6
9
|
}
|
|
7
10
|
/** Get overview combining all sources */
|
|
8
|
-
async getOverview() {
|
|
11
|
+
async getOverview(costData) {
|
|
9
12
|
const dashboard = this.readDashboardJson();
|
|
10
13
|
const syncMeta = this.readSyncMetadata();
|
|
11
14
|
const notifications = this.readNotifications();
|
|
12
|
-
const
|
|
13
|
-
const analytics = this.readAnalyticsCache();
|
|
15
|
+
const analytics = await this.aggregateEventsFromJsonl();
|
|
14
16
|
const config = this.readConfig();
|
|
15
17
|
return {
|
|
16
18
|
project: {
|
|
@@ -23,15 +25,15 @@ export class DashboardDataAggregator {
|
|
|
23
25
|
priorityBreakdown: dashboard?.summary?.byPriority ?? {},
|
|
24
26
|
},
|
|
25
27
|
analytics: {
|
|
26
|
-
totalEvents: analytics
|
|
27
|
-
successRate: analytics
|
|
28
|
-
last24hEvents:
|
|
28
|
+
totalEvents: analytics.totalEvents,
|
|
29
|
+
successRate: analytics.successRate,
|
|
30
|
+
last24hEvents: analytics.last24hEvents,
|
|
29
31
|
},
|
|
30
32
|
costs: {
|
|
31
|
-
totalCost:
|
|
32
|
-
totalSavings:
|
|
33
|
-
totalTokens:
|
|
34
|
-
sessionCount:
|
|
33
|
+
totalCost: costData?.totalCost ?? 0,
|
|
34
|
+
totalSavings: costData?.totalSavings ?? 0,
|
|
35
|
+
totalTokens: costData?.totalTokens ?? 0,
|
|
36
|
+
sessionCount: costData?.sessionCount ?? 0,
|
|
35
37
|
},
|
|
36
38
|
notifications: {
|
|
37
39
|
pendingCount: Array.isArray(notifications)
|
|
@@ -42,12 +44,7 @@ export class DashboardDataAggregator {
|
|
|
42
44
|
: 0,
|
|
43
45
|
},
|
|
44
46
|
sync: {
|
|
45
|
-
platforms:
|
|
46
|
-
.filter(([key]) => ['github', 'jira', 'ado'].includes(key))
|
|
47
|
-
.map(([key, val]) => [key, {
|
|
48
|
-
lastImport: val?.lastImport ?? '',
|
|
49
|
-
lastSyncResult: val?.lastSyncResult ?? 'unknown',
|
|
50
|
-
}])),
|
|
47
|
+
platforms: this.enrichSyncPlatforms(syncMeta, config),
|
|
51
48
|
},
|
|
52
49
|
generatedAt: new Date().toISOString(),
|
|
53
50
|
};
|
|
@@ -86,38 +83,32 @@ export class DashboardDataAggregator {
|
|
|
86
83
|
summary: dashboard?.summary ?? {},
|
|
87
84
|
};
|
|
88
85
|
}
|
|
89
|
-
/** Get sync status */
|
|
86
|
+
/** Get sync status with enriched connection diagnosis */
|
|
90
87
|
async getSyncStatus() {
|
|
91
88
|
const meta = this.readSyncMetadata();
|
|
89
|
+
const config = this.readConfig();
|
|
92
90
|
return {
|
|
93
|
-
platforms: meta
|
|
91
|
+
platforms: this.enrichSyncPlatforms(meta, config),
|
|
94
92
|
lastUpdated: meta?.lastUpdated,
|
|
95
93
|
};
|
|
96
94
|
}
|
|
97
|
-
/** Get analytics summary
|
|
95
|
+
/** Get analytics summary aggregated from events.jsonl */
|
|
98
96
|
async getAnalyticsSummary() {
|
|
99
|
-
return this.
|
|
97
|
+
return this.aggregateEventsFromJsonl();
|
|
100
98
|
}
|
|
101
|
-
/** Get per-skill usage stats */
|
|
99
|
+
/** Get per-skill usage stats from events.jsonl */
|
|
102
100
|
async getSkillUsage() {
|
|
103
|
-
const
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
avgDuration: s.avgDuration,
|
|
113
|
-
lastUsed: s.lastUsed || '',
|
|
101
|
+
const analytics = await this.aggregateEventsFromJsonl();
|
|
102
|
+
return analytics.topSkills.map(s => ({
|
|
103
|
+
name: s.name,
|
|
104
|
+
plugin: s.plugin,
|
|
105
|
+
count: s.count,
|
|
106
|
+
successCount: s.successCount,
|
|
107
|
+
failureCount: s.failureCount,
|
|
108
|
+
avgDuration: undefined,
|
|
109
|
+
lastUsed: s.lastUsed,
|
|
114
110
|
}));
|
|
115
111
|
}
|
|
116
|
-
/** Get costs summary */
|
|
117
|
-
async getCostsSummary() {
|
|
118
|
-
const costs = this.readCosts();
|
|
119
|
-
return costs || { totalCost: 0, totalTokens: 0, totalSavings: 0, sessions: [] };
|
|
120
|
-
}
|
|
121
112
|
/** Get notifications */
|
|
122
113
|
async getNotifications() {
|
|
123
114
|
return this.readNotifications() || [];
|
|
@@ -142,7 +133,6 @@ export class DashboardDataAggregator {
|
|
|
142
133
|
if (!entry.isDirectory())
|
|
143
134
|
continue;
|
|
144
135
|
const pluginDir = path.join(cacheDir, entry.name);
|
|
145
|
-
// Find version directory
|
|
146
136
|
const versions = fs.readdirSync(pluginDir, { withFileTypes: true })
|
|
147
137
|
.filter(v => v.isDirectory())
|
|
148
138
|
.map(v => v.name);
|
|
@@ -166,6 +156,171 @@ export class DashboardDataAggregator {
|
|
|
166
156
|
catch { /* ignore read errors */ }
|
|
167
157
|
return plugins;
|
|
168
158
|
}
|
|
159
|
+
// --- Analytics Aggregation from events.jsonl ---
|
|
160
|
+
async aggregateEventsFromJsonl() {
|
|
161
|
+
if (this.analyticsCache && Date.now() - this.analyticsCacheTime < this.analyticsCacheTTL) {
|
|
162
|
+
return this.analyticsCache;
|
|
163
|
+
}
|
|
164
|
+
const eventsPath = path.join(this.projectRoot, '.specweave/state/analytics/events.jsonl');
|
|
165
|
+
const commandCounts = new Map();
|
|
166
|
+
const skillMap = new Map();
|
|
167
|
+
const agentCounts = new Map();
|
|
168
|
+
const dailyCounts = new Map();
|
|
169
|
+
let totalEvents = 0;
|
|
170
|
+
let successCount = 0;
|
|
171
|
+
let last24hEvents = 0;
|
|
172
|
+
const now24h = new Date(Date.now() - 86400000).toISOString();
|
|
173
|
+
try {
|
|
174
|
+
if (!fs.existsSync(eventsPath)) {
|
|
175
|
+
const empty = { totalEvents: 0, successRate: 0, topCommands: [], topSkills: [], topAgents: [], dailySummaries: [], last24hEvents: 0 };
|
|
176
|
+
this.analyticsCache = empty;
|
|
177
|
+
this.analyticsCacheTime = Date.now();
|
|
178
|
+
return empty;
|
|
179
|
+
}
|
|
180
|
+
const content = fs.readFileSync(eventsPath, 'utf-8');
|
|
181
|
+
const lines = content.split('\n').filter(Boolean);
|
|
182
|
+
for (const line of lines) {
|
|
183
|
+
try {
|
|
184
|
+
const event = JSON.parse(line);
|
|
185
|
+
totalEvents++;
|
|
186
|
+
if (event.success)
|
|
187
|
+
successCount++;
|
|
188
|
+
if (event.timestamp && event.timestamp >= now24h)
|
|
189
|
+
last24hEvents++;
|
|
190
|
+
const name = event.name || '';
|
|
191
|
+
const type = event.type || '';
|
|
192
|
+
// Command counts
|
|
193
|
+
if (name) {
|
|
194
|
+
commandCounts.set(name, (commandCounts.get(name) || 0) + 1);
|
|
195
|
+
}
|
|
196
|
+
// Skill tracking (commands starting with /sw:)
|
|
197
|
+
if (name.startsWith('/sw:') || type === 'skill_activation') {
|
|
198
|
+
const existing = skillMap.get(name);
|
|
199
|
+
if (existing) {
|
|
200
|
+
existing.count++;
|
|
201
|
+
if (event.success)
|
|
202
|
+
existing.successCount++;
|
|
203
|
+
else
|
|
204
|
+
existing.failureCount++;
|
|
205
|
+
if (event.timestamp > existing.lastUsed)
|
|
206
|
+
existing.lastUsed = event.timestamp;
|
|
207
|
+
}
|
|
208
|
+
else {
|
|
209
|
+
skillMap.set(name, {
|
|
210
|
+
plugin: event.plugin || 'specweave',
|
|
211
|
+
count: 1,
|
|
212
|
+
successCount: event.success ? 1 : 0,
|
|
213
|
+
failureCount: event.success ? 0 : 1,
|
|
214
|
+
lastUsed: event.timestamp || '',
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
// Agent tracking
|
|
219
|
+
if (type === 'agent_spawn') {
|
|
220
|
+
agentCounts.set(name, (agentCounts.get(name) || 0) + 1);
|
|
221
|
+
}
|
|
222
|
+
// Daily bucketing
|
|
223
|
+
if (event.timestamp) {
|
|
224
|
+
const date = event.timestamp.slice(0, 10);
|
|
225
|
+
dailyCounts.set(date, (dailyCounts.get(date) || 0) + 1);
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
catch { /* skip bad lines */ }
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
catch { /* file read error */ }
|
|
232
|
+
const topCommands = Array.from(commandCounts.entries())
|
|
233
|
+
.map(([name, count]) => ({ name, count }))
|
|
234
|
+
.sort((a, b) => b.count - a.count)
|
|
235
|
+
.slice(0, 20);
|
|
236
|
+
const topSkills = Array.from(skillMap.entries())
|
|
237
|
+
.map(([name, data]) => ({ name, ...data }))
|
|
238
|
+
.sort((a, b) => b.count - a.count);
|
|
239
|
+
const topAgents = Array.from(agentCounts.entries())
|
|
240
|
+
.map(([name, count]) => ({ name, count }))
|
|
241
|
+
.sort((a, b) => b.count - a.count)
|
|
242
|
+
.slice(0, 10);
|
|
243
|
+
const dailySummaries = Array.from(dailyCounts.entries())
|
|
244
|
+
.map(([date, totalEvents]) => ({ date, totalEvents }))
|
|
245
|
+
.sort((a, b) => a.date.localeCompare(b.date));
|
|
246
|
+
const result = {
|
|
247
|
+
totalEvents,
|
|
248
|
+
successRate: totalEvents > 0 ? Math.round((successCount / totalEvents) * 100) : 0,
|
|
249
|
+
topCommands,
|
|
250
|
+
topSkills,
|
|
251
|
+
topAgents,
|
|
252
|
+
dailySummaries,
|
|
253
|
+
last24hEvents,
|
|
254
|
+
};
|
|
255
|
+
this.analyticsCache = result;
|
|
256
|
+
this.analyticsCacheTime = Date.now();
|
|
257
|
+
return result;
|
|
258
|
+
}
|
|
259
|
+
// --- Sync Enrichment ---
|
|
260
|
+
enrichSyncPlatforms(syncMeta, config) {
|
|
261
|
+
const platforms = {};
|
|
262
|
+
const platformConfigs = {
|
|
263
|
+
github: {
|
|
264
|
+
key: 'github',
|
|
265
|
+
label: 'GitHub',
|
|
266
|
+
configCheck: () => {
|
|
267
|
+
const gh = config?.sync?.github;
|
|
268
|
+
return gh?.owner && gh?.repo ? `${gh.owner}/${gh.repo}` : null;
|
|
269
|
+
},
|
|
270
|
+
},
|
|
271
|
+
jira: {
|
|
272
|
+
key: 'jira',
|
|
273
|
+
label: 'JIRA',
|
|
274
|
+
configCheck: () => {
|
|
275
|
+
const j = config?.sync?.jira;
|
|
276
|
+
return j?.domain ? `${j.domain} (${j.projectKey || 'N/A'})` : null;
|
|
277
|
+
},
|
|
278
|
+
},
|
|
279
|
+
ado: {
|
|
280
|
+
key: 'ado',
|
|
281
|
+
label: 'Azure DevOps',
|
|
282
|
+
configCheck: () => {
|
|
283
|
+
const a = config?.sync?.ado;
|
|
284
|
+
return a?.organization ? `${a.organization}/${a.project || ''}` : null;
|
|
285
|
+
},
|
|
286
|
+
},
|
|
287
|
+
};
|
|
288
|
+
for (const [key, pConfig] of Object.entries(platformConfigs)) {
|
|
289
|
+
const meta = syncMeta?.[key];
|
|
290
|
+
const configDetail = pConfig.configCheck();
|
|
291
|
+
const lastImport = meta?.lastImport || '';
|
|
292
|
+
const lastSyncResult = meta?.lastSyncResult || 'unknown';
|
|
293
|
+
const lastImportCount = meta?.lastImportCount ?? 0;
|
|
294
|
+
let connectionStatus;
|
|
295
|
+
let diagnosticMessage = '';
|
|
296
|
+
if (!configDetail) {
|
|
297
|
+
connectionStatus = 'not_configured';
|
|
298
|
+
diagnosticMessage = `${pConfig.label} sync is not configured. Add credentials in config.json.`;
|
|
299
|
+
}
|
|
300
|
+
else if (!lastImport) {
|
|
301
|
+
connectionStatus = 'configured_never_synced';
|
|
302
|
+
diagnosticMessage = `${pConfig.label} configured for ${configDetail}. No sync attempted yet.`;
|
|
303
|
+
}
|
|
304
|
+
else if (lastSyncResult === 'success') {
|
|
305
|
+
connectionStatus = 'connected';
|
|
306
|
+
diagnosticMessage = `${pConfig.label} connected to ${configDetail}. Last sync: ${lastImportCount} items.`;
|
|
307
|
+
}
|
|
308
|
+
else {
|
|
309
|
+
connectionStatus = 'sync_failed';
|
|
310
|
+
diagnosticMessage = `${pConfig.label} configured for ${configDetail}. Last sync attempt failed at ${new Date(lastImport).toLocaleString()}.`;
|
|
311
|
+
}
|
|
312
|
+
platforms[key] = {
|
|
313
|
+
lastImport,
|
|
314
|
+
lastSyncResult,
|
|
315
|
+
lastImportCount,
|
|
316
|
+
lastSkippedCount: meta?.lastSkippedCount ?? 0,
|
|
317
|
+
connectionStatus,
|
|
318
|
+
diagnosticMessage,
|
|
319
|
+
configDetail,
|
|
320
|
+
};
|
|
321
|
+
}
|
|
322
|
+
return platforms;
|
|
323
|
+
}
|
|
169
324
|
// --- Private helpers ---
|
|
170
325
|
readDashboardJson() {
|
|
171
326
|
return this.readJsonFile('.specweave/state/dashboard.json');
|
|
@@ -177,12 +332,6 @@ export class DashboardDataAggregator {
|
|
|
177
332
|
const data = this.readJsonFile('.specweave/state/notifications.json');
|
|
178
333
|
return data?.notifications || data || [];
|
|
179
334
|
}
|
|
180
|
-
readCosts() {
|
|
181
|
-
return this.readJsonFile('.specweave/logs/costs.json');
|
|
182
|
-
}
|
|
183
|
-
readAnalyticsCache() {
|
|
184
|
-
return this.readJsonFile('.specweave/state/analytics/cache.json');
|
|
185
|
-
}
|
|
186
335
|
readConfig() {
|
|
187
336
|
return this.readJsonFile('.specweave/config.json');
|
|
188
337
|
}
|
|
@@ -208,12 +357,5 @@ export class DashboardDataAggregator {
|
|
|
208
357
|
}
|
|
209
358
|
return result;
|
|
210
359
|
}
|
|
211
|
-
count24hEvents(analytics) {
|
|
212
|
-
if (!analytics?.dailySummaries?.length)
|
|
213
|
-
return 0;
|
|
214
|
-
const today = new Date().toISOString().slice(0, 10);
|
|
215
|
-
const todaySummary = analytics.dailySummaries.find((d) => d.date === today);
|
|
216
|
-
return todaySummary?.totalEvents ?? 0;
|
|
217
|
-
}
|
|
218
360
|
}
|
|
219
361
|
//# sourceMappingURL=dashboard-data-aggregator.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dashboard-data-aggregator.js","sourceRoot":"","sources":["../../../../../src/dashboard/server/data/dashboard-data-aggregator.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"dashboard-data-aggregator.js","sourceRoot":"","sources":["../../../../../src/dashboard/server/data/dashboard-data-aggregator.ts"],"names":[],"mappings":"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"}
|
|
@@ -161,6 +161,17 @@ export interface LspStatus {
|
|
|
161
161
|
pluginMissing: number;
|
|
162
162
|
};
|
|
163
163
|
}
|
|
164
|
+
export interface RepoInfo {
|
|
165
|
+
name: string;
|
|
166
|
+
org: string;
|
|
167
|
+
path: string;
|
|
168
|
+
remote?: string;
|
|
169
|
+
branch?: string;
|
|
170
|
+
hasSpecweave: boolean;
|
|
171
|
+
isCurrent?: boolean;
|
|
172
|
+
lastModified?: string;
|
|
173
|
+
}
|
|
174
|
+
export type { CostsSummaryPayload, SessionTokenSummary } from './server/data/cost-aggregator.js';
|
|
164
175
|
export type ConfigPayload = Record<string, unknown>;
|
|
165
176
|
export interface ProjectInfo {
|
|
166
177
|
id: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/dashboard/types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/dashboard/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "specweave",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.261",
|
|
4
4
|
"description": "Spec-driven development framework for AI coding agents. First-class support for Claude Code — compatible with any LLM-powered coding tool. Living documentation, autonomous execution, quality gates, and multilingual support (9 languages).",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -96,6 +96,41 @@ Map flags to extra `successCriteria` entries:
|
|
|
96
96
|
|
|
97
97
|
Always include `tasks_complete` and `acs_satisfied` as base criteria. Ensure `.specweave/state/` dir exists.
|
|
98
98
|
|
|
99
|
+
### Step 1.5a: MANDATORY - Complexity Check for Team-Lead Routing
|
|
100
|
+
|
|
101
|
+
**Before starting autonomous execution, check if this increment needs team-lead:**
|
|
102
|
+
|
|
103
|
+
1. Count pending tasks in tasks.md (count `[ ]` markers)
|
|
104
|
+
2. Detect domains from file paths in tasks.md and plan.md:
|
|
105
|
+
- Frontend: `.tsx`, `src/components/`, `src/pages/`, React/Vue keywords
|
|
106
|
+
- Backend: `src/api/`, `src/services/`, `src/routes/`, Express/NestJS keywords
|
|
107
|
+
- Database: `prisma/`, `migrations/`, SQL keywords
|
|
108
|
+
- DevOps: `Dockerfile`, `.github/`, `k8s/` keywords
|
|
109
|
+
- Testing: `tests/`, `e2e/`, `.test.` keywords
|
|
110
|
+
- Security: `src/auth/`, auth keywords
|
|
111
|
+
- Mobile: `ios/`, `android/`, React Native keywords
|
|
112
|
+
|
|
113
|
+
3. **If 3+ domains detected OR domain count suggests multi-agent benefit:**
|
|
114
|
+
|
|
115
|
+
```
|
|
116
|
+
⚠️ COMPLEXITY ASSESSMENT
|
|
117
|
+
══════════════════════════════════════════
|
|
118
|
+
Tasks: [N] pending | Domains: [N] ([list])
|
|
119
|
+
──────────────────────────────────────────
|
|
120
|
+
This increment spans 3+ domains. /sw:team-lead is recommended
|
|
121
|
+
for parallel execution with higher quality results.
|
|
122
|
+
⚡ Trade-off: ~2-3x more tokens, but parallel agents
|
|
123
|
+
produce better results for multi-domain work.
|
|
124
|
+
══════════════════════════════════════════
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
Then use AskUserQuestion:
|
|
128
|
+
- Option A: "Use /sw:team-lead (Recommended)" — invoke team-lead and stop auto
|
|
129
|
+
- Option B: "Continue with /sw:auto (sequential)" — proceed normally
|
|
130
|
+
|
|
131
|
+
**In auto mode** (no user present): Auto-invoke `/sw:team-lead` for 3+ domains.
|
|
132
|
+
This is the default behavior per CLAUDE.md execution strategy.
|
|
133
|
+
|
|
99
134
|
### Step 1.5: MANDATORY - Display Stop Conditions
|
|
100
135
|
|
|
101
136
|
**You MUST output a stop conditions banner BEFORE starting work.** Detect test frameworks, count test files, then show:
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: Execute increment tasks following spec and plan with sync hooks. Use when saying "implement", "start working", "execute tasks", or "continue increment".
|
|
2
|
+
description: Execute increment tasks following spec and plan with sync hooks. Use when saying "implement", "start working", "execute tasks", or "continue increment". IMPORTANT - Before starting, check task count and domain count. If 3+ domains or 15+ tasks, recommend /sw:team-lead instead (ask user for confirmation, or auto-invoke in auto mode).
|
|
3
3
|
argument-hint: "<increment-id>"
|
|
4
4
|
hooks:
|
|
5
5
|
PostToolUse:
|
|
@@ -77,6 +77,43 @@ Generate `plan.md` and `tasks.md` for an increment using Architect Agent and tes
|
|
|
77
77
|
- PLANNING → ACTIVE transition (tasks.md now exists)
|
|
78
78
|
- Update lastUpdated timestamp
|
|
79
79
|
|
|
80
|
+
6. **Execution Strategy Recommendation** (MANDATORY):
|
|
81
|
+
After generating tasks.md, analyze complexity and output a recommendation:
|
|
82
|
+
|
|
83
|
+
**6a. Count pending tasks** in the generated tasks.md (count `[ ]` markers)
|
|
84
|
+
|
|
85
|
+
**6b. Detect domains** from file paths and task descriptions:
|
|
86
|
+
- Frontend: `src/components/`, `src/pages/`, `src/hooks/`, `src/styles/`, `.tsx`, `.css`, React/Vue/Angular keywords
|
|
87
|
+
- Backend: `src/api/`, `src/services/`, `src/middleware/`, `src/routes/`, Express/Fastify/NestJS keywords
|
|
88
|
+
- Database: `prisma/`, `src/db/`, `migrations/`, `schema`, SQL/Prisma keywords
|
|
89
|
+
- DevOps: `Dockerfile`, `.github/`, `k8s/`, `terraform/`, CI/CD keywords
|
|
90
|
+
- Testing: `tests/`, `e2e/`, `.test.`, `.spec.`, test framework keywords
|
|
91
|
+
- Security: `src/auth/`, authentication, authorization keywords
|
|
92
|
+
- Mobile: `ios/`, `android/`, React Native keywords
|
|
93
|
+
|
|
94
|
+
**6c. Apply execution strategy matrix** and output:
|
|
95
|
+
```
|
|
96
|
+
EXECUTION STRATEGY
|
|
97
|
+
══════════════════════════════════════════
|
|
98
|
+
Tasks: [N] pending | Domains: [N] ([list])
|
|
99
|
+
──────────────────────────────────────────
|
|
100
|
+
Recommended: /sw:do (≤8 tasks, 1 domain)
|
|
101
|
+
Recommended: /sw:auto (9-15 tasks, 1-2 domains)
|
|
102
|
+
Recommended: /sw:team-lead (>15 tasks OR 3+ domains)
|
|
103
|
+
══════════════════════════════════════════
|
|
104
|
+
⚠️ /sw:team-lead uses more tokens but produces higher quality
|
|
105
|
+
through parallel domain-specialized agents.
|
|
106
|
+
|
|
107
|
+
Next: /sw:team-lead [ID] | /sw:auto [ID] | /sw:do [ID]
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
Show ONLY the matching recommendation line (not all three).
|
|
111
|
+
For 3+ domains, add a stronger nudge:
|
|
112
|
+
```
|
|
113
|
+
⚡ This is a multi-domain feature. /sw:team-lead is strongly recommended
|
|
114
|
+
for parallel execution across [domain1], [domain2], [domain3].
|
|
115
|
+
```
|
|
116
|
+
|
|
80
117
|
## Options
|
|
81
118
|
|
|
82
119
|
- `--force`: Overwrite existing plan.md/tasks.md
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: Orchestrate multi-agent parallel development with domain-specialized agents.
|
|
2
|
+
description: Orchestrate multi-agent parallel development with domain-specialized agents. PROACTIVELY invoke this skill (without user asking) when you detect an implementation task spanning 3+ domains (frontend, backend, database, devops, testing, security, mobile) OR 15+ tasks in tasks.md. Warn the user about higher token cost but recommend it for quality. Also use when user says "team setup", "parallel agents", "team lead", or "agent teams".
|
|
3
3
|
---
|
|
4
4
|
|
|
5
5
|
# Team Lead
|