claude-teammate 0.1.201 → 0.1.202
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/package.json +1 -1
- package/src/dashboard/ui.html +23 -12
- package/src/worker/state-builders.js +6 -0
package/package.json
CHANGED
package/src/dashboard/ui.html
CHANGED
|
@@ -1682,9 +1682,9 @@ tr.clickable:hover td { background:var(--sky-bg) !important; }
|
|
|
1682
1682
|
<div class="card">
|
|
1683
1683
|
<div class="table-wrap">
|
|
1684
1684
|
<table>
|
|
1685
|
-
<thead><tr><th>Repository</th><th>Branch</th><th>Issues</th><th>PRs</th></tr></thead>
|
|
1685
|
+
<thead><tr><th>Repository</th><th>Working Branch</th><th>PR Target</th><th>Epics</th><th>Issues</th><th>PRs</th></tr></thead>
|
|
1686
1686
|
<tbody id="repos-tbody">
|
|
1687
|
-
<tr><td colspan="
|
|
1687
|
+
<tr><td colspan="6"><div class="empty"><div class="empty-text">Loading…</div></div></td></tr>
|
|
1688
1688
|
</tbody>
|
|
1689
1689
|
</table>
|
|
1690
1690
|
</div>
|
|
@@ -2278,28 +2278,39 @@ function renderRepos() {
|
|
|
2278
2278
|
const draftPrs = cachedStatus.state?.draftPrs || [];
|
|
2279
2279
|
|
|
2280
2280
|
const repoMap = new Map();
|
|
2281
|
+
function getOrCreate(url) {
|
|
2282
|
+
if (!repoMap.has(url)) repoMap.set(url, { url, workingBranch: "", prTarget: false, epicKeys: new Set(), issues: [], prs: [] });
|
|
2283
|
+
return repoMap.get(url);
|
|
2284
|
+
}
|
|
2285
|
+
|
|
2281
2286
|
issues.forEach(i => {
|
|
2282
|
-
(i.
|
|
2283
|
-
|
|
2284
|
-
|
|
2287
|
+
const configs = (i.repoConfigs && i.repoConfigs.length > 0)
|
|
2288
|
+
? i.repoConfigs
|
|
2289
|
+
: (i.repoUrls || []).map(url => ({ url, working_branch: "" }));
|
|
2290
|
+
configs.forEach(cfg => {
|
|
2291
|
+
const entry = getOrCreate(cfg.url);
|
|
2292
|
+
if (cfg.working_branch) entry.workingBranch = cfg.working_branch;
|
|
2293
|
+
if (i.prRepoUrl && i.prRepoUrl === cfg.url) entry.prTarget = true;
|
|
2294
|
+
entry.epicKeys.add(i.epicKey || i.key);
|
|
2295
|
+
entry.issues.push(i);
|
|
2285
2296
|
});
|
|
2286
2297
|
});
|
|
2287
2298
|
draftPrs.forEach(p => {
|
|
2288
|
-
|
|
2289
|
-
|
|
2299
|
+
const entry = getOrCreate(p.repoUrl);
|
|
2300
|
+
entry.prs.push(p);
|
|
2290
2301
|
});
|
|
2291
2302
|
|
|
2292
2303
|
if (!repoMap.size) {
|
|
2293
|
-
tbody.innerHTML = `<tr><td colspan="
|
|
2304
|
+
tbody.innerHTML = `<tr><td colspan="6"><div class="empty"><div class="empty-text">No repositories</div></div></td></tr>`;
|
|
2294
2305
|
return;
|
|
2295
2306
|
}
|
|
2296
2307
|
|
|
2297
2308
|
tbody.innerHTML = [...repoMap.values()].map(r => `
|
|
2298
2309
|
<tr>
|
|
2299
|
-
<td><a href="${esc(r.url)}" target="_blank" style="font-family:var(--f-mono);font-size:.78rem">${esc(r.url.replace("https://github.com/",""))}</a></td>
|
|
2300
|
-
<td style="font-family:var(--f-mono);font-size:.72rem;color:var(--ink-3)">
|
|
2301
|
-
|
|
2302
|
-
</td>
|
|
2310
|
+
<td><a href="${esc(r.url)}" target="_blank" style="font-family:var(--f-mono);font-size:.78rem">${esc(r.url.replace("https://github.com/","").replace("https://gitlab.com/",""))}</a></td>
|
|
2311
|
+
<td style="font-family:var(--f-mono);font-size:.72rem;color:var(--ink-3)">${r.workingBranch ? esc(r.workingBranch) : "—"}</td>
|
|
2312
|
+
<td style="text-align:center;font-size:.85rem">${r.prTarget ? "★" : "—"}</td>
|
|
2313
|
+
<td style="font-size:.72rem">${[...r.epicKeys].map(k => `<span style="background:var(--surface-2);border-radius:4px;padding:1px 5px;font-family:var(--f-mono);white-space:nowrap">${esc(k)}</span>`).join(" ")}</td>
|
|
2303
2314
|
<td style="font-family:var(--f-mono);font-size:.75rem">${r.issues.length}</td>
|
|
2304
2315
|
<td>${r.prs.map(p => `<a href="${esc(p.pullRequestUrl)}" target="_blank" style="font-family:var(--f-mono);font-size:.75rem">#${p.pullRequestNumber}</a>`).join(" ") || "—"}</td>
|
|
2305
2316
|
</tr>
|
|
@@ -41,6 +41,7 @@ export function buildIssueState(issue, epicMemory, issueMemory, claudeDecision,
|
|
|
41
41
|
|
|
42
42
|
return {
|
|
43
43
|
key: issue.key,
|
|
44
|
+
epicKey: epicMemory.jira_key || issue.key,
|
|
44
45
|
status: issue.status,
|
|
45
46
|
labels: normalizeLabels(issue.labels),
|
|
46
47
|
projectKey: issue.projectKey,
|
|
@@ -49,6 +50,11 @@ export function buildIssueState(issue, epicMemory, issueMemory, claudeDecision,
|
|
|
49
50
|
nextAction: live.nextAction,
|
|
50
51
|
repoCount: epicMemory.repos.length,
|
|
51
52
|
repoUrls,
|
|
53
|
+
repoConfigs: epicMemory.repos.map((repo) => ({
|
|
54
|
+
url: repo.url,
|
|
55
|
+
working_branch: repo.working_branch || ""
|
|
56
|
+
})),
|
|
57
|
+
prRepoUrl: epicMemory.pr_repo_url || "",
|
|
52
58
|
localRepoPaths,
|
|
53
59
|
githubIssueUrls,
|
|
54
60
|
claudeDecision,
|