@sergeychuvayev/claude-fleet 0.12.0 → 0.12.1
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/public/app.js +2 -1
- package/public/control.js +7 -1
- package/public/styles.css +21 -4
- package/public/teams.js +8 -3
package/package.json
CHANGED
package/public/app.js
CHANGED
|
@@ -287,7 +287,8 @@ function sessionRowHtml(s, spawnCounts) {
|
|
|
287
287
|
const childSelectedHere = !!selectedChild && (s.delegations || []).some(d => d.id === selectedChild)
|
|
288
288
|
const name = (s.managed ? 'FLEET · ' : '') + (s.name || s.shortId || 'Unnamed session')
|
|
289
289
|
const top = `<span class="session-top">${hasUnseen(s) ? '<span class="unseen" aria-label="New output"></span>' : ''}${status(s)}<span class="session-name">${esc(name)}</span>${rowTags(s, spawnCounts)}</span>`
|
|
290
|
-
const
|
|
290
|
+
const title = `<span class="session-title">${esc(s.title || s.lastPrompt || 'Untitled session')}</span>`
|
|
291
|
+
const body = `${top}<span class="session-title-row">${initiativeTag(s)}${title}</span>${rowMeta(s)}${turnRow(s)}`
|
|
291
292
|
return `<button class="session${childSelectedHere ? ' session-ancestor' : ''}" draggable="true" data-session="${esc(key(s))}" aria-pressed="${selected === key(s) && !childSelectedHere}" aria-controls="detail" title="${hasUnseen(s) ? 'New output since you last opened this' : ''}"><span>${body}</span>${contextCell(s)}</button>${childRowsHtml(s)}`
|
|
292
293
|
}
|
|
293
294
|
// The trigger names whichever combination is active instead of repeating every
|
package/public/control.js
CHANGED
|
@@ -60,8 +60,14 @@ async function loadLaunchTeams() {
|
|
|
60
60
|
function openLaunch(source=null) {
|
|
61
61
|
window.FleetTeams?.reset()
|
|
62
62
|
resumeSource=source
|
|
63
|
+
// Leftover text, a picked team, a swapped model or approval mode from a task that
|
|
64
|
+
// was never launched should not greet the next one. The remembered project
|
|
65
|
+
// directory is the one thing worth carrying forward, so it survives the reset.
|
|
66
|
+
const form=$('launch-form'), cwd=form.elements.cwd.value
|
|
67
|
+
form.reset()
|
|
68
|
+
form.elements.cwd.value=cwd
|
|
63
69
|
$('launch-title').textContent=source ? 'Continue this conversation in Fleet.' : 'Give your next task a home.'
|
|
64
|
-
if(source){$('launch-cwd').value=source.cwd || ''
|
|
70
|
+
if(source){$('launch-cwd').value=source.cwd || '';form.elements.name.value=source.title || source.name || ''}
|
|
65
71
|
loadLaunchTeams()
|
|
66
72
|
$('launch-cwd').readOnly=!!source
|
|
67
73
|
openModal('launch-backdrop', '[name=prompt]')
|
package/public/styles.css
CHANGED
|
@@ -233,6 +233,16 @@ select {
|
|
|
233
233
|
overflow:hidden;
|
|
234
234
|
margin-bottom:8px;
|
|
235
235
|
}
|
|
236
|
+
.session-title-row {
|
|
237
|
+
display:flex;
|
|
238
|
+
align-items:baseline;
|
|
239
|
+
gap:8px;
|
|
240
|
+
min-width:0;
|
|
241
|
+
}
|
|
242
|
+
.session-title-row .session-title {
|
|
243
|
+
flex:1;
|
|
244
|
+
min-width:0;
|
|
245
|
+
}
|
|
236
246
|
.session-meta {
|
|
237
247
|
display:flex;
|
|
238
248
|
gap:9px;
|
|
@@ -1074,8 +1084,12 @@ body {
|
|
|
1074
1084
|
}
|
|
1075
1085
|
.filter-trigger:hover { background:color-mix(in oklab,var(--raised) 85%,var(--text)) }
|
|
1076
1086
|
.filter-chevron {
|
|
1087
|
+
display:inline-block;
|
|
1088
|
+
position:relative;
|
|
1089
|
+
top:1px;
|
|
1077
1090
|
color:var(--faint);
|
|
1078
1091
|
font-size:var(--text-xs);
|
|
1092
|
+
line-height:1;
|
|
1079
1093
|
transition:transform .12s ease;
|
|
1080
1094
|
}
|
|
1081
1095
|
.filter-trigger[aria-expanded="true"] .filter-chevron { transform:rotate(180deg) }
|
|
@@ -1268,8 +1282,9 @@ body {
|
|
|
1268
1282
|
}
|
|
1269
1283
|
.detail:has(#composer) .conversation-header {
|
|
1270
1284
|
margin:0 0 10px;
|
|
1271
|
-
padding:0;
|
|
1285
|
+
padding:0 0 10px;
|
|
1272
1286
|
border:0;
|
|
1287
|
+
border-bottom:1px solid var(--line);
|
|
1273
1288
|
flex:none;
|
|
1274
1289
|
}
|
|
1275
1290
|
/* The console takes whatever is left, until it is dragged to an explicit height. */
|
|
@@ -2197,14 +2212,17 @@ body[data-modal] { overflow:hidden }
|
|
|
2197
2212
|
@keyframes update-pill-in { from{opacity:0;transform:translateY(-3px)}to{opacity:1;transform:none} }
|
|
2198
2213
|
.initiative-tag {
|
|
2199
2214
|
display:inline-block;
|
|
2200
|
-
|
|
2201
|
-
|
|
2215
|
+
flex:none;
|
|
2216
|
+
max-width:50%;
|
|
2202
2217
|
padding:2px 6px;
|
|
2203
2218
|
border:1px solid var(--line);
|
|
2204
2219
|
border-radius:var(--radius-sm);
|
|
2205
2220
|
color:var(--muted);
|
|
2206
2221
|
font-size:var(--text-xs);
|
|
2207
2222
|
overflow-wrap:anywhere;
|
|
2223
|
+
white-space:nowrap;
|
|
2224
|
+
overflow:hidden;
|
|
2225
|
+
text-overflow:ellipsis;
|
|
2208
2226
|
}
|
|
2209
2227
|
.block[data-tool="Task"], .block[data-tool="Agent"] { border-left:2px solid var(--accent) }
|
|
2210
2228
|
.block[data-tool="Task"] .block-tool, .block[data-tool="Agent"] .block-tool {
|
|
@@ -2684,7 +2702,6 @@ body[data-modal] { overflow:hidden }
|
|
|
2684
2702
|
.block-reference summary{cursor:pointer;color:var(--accent);overflow-wrap:anywhere}
|
|
2685
2703
|
.block-reference summary span,.block-reference p{color:var(--muted);font-size:10px}
|
|
2686
2704
|
.block-reference pre{max-height:240px;overflow:auto;white-space:pre-wrap;overflow-wrap:anywhere;font:11px/1.6 var(--mono);color:var(--muted)}
|
|
2687
|
-
.session[draggable=true]{cursor:grab}
|
|
2688
2705
|
.session[draggable=true]:active{cursor:grabbing}
|
|
2689
2706
|
.reference-state{font-size:10px;color:var(--muted)}
|
|
2690
2707
|
|
package/public/teams.js
CHANGED
|
@@ -4,7 +4,7 @@ window.FleetTeams=(()=>{
|
|
|
4
4
|
const { esc, toast } = window.Fleet
|
|
5
5
|
const control = () => window.FleetControl
|
|
6
6
|
const api = (...args) => window.FleetControl.api(...args)
|
|
7
|
-
let draft=null,tools=[],originalId=null,returnTeam=null
|
|
7
|
+
let draft=null,tools=[],originalId=null,returnTeam=null,openToken=0
|
|
8
8
|
const escape=value=>esc(String(value ?? ''))
|
|
9
9
|
const field=(label,key,value,max=500)=>`<label>${label}<input data-team-field="${key}" value="${escape(value)}" maxlength="${max}" required></label>`
|
|
10
10
|
function mount() {
|
|
@@ -34,9 +34,14 @@ window.FleetTeams=(()=>{
|
|
|
34
34
|
}
|
|
35
35
|
async function open() {
|
|
36
36
|
mount()
|
|
37
|
+
// Closing (or resetting) the launch modal bumps this past whatever token a call
|
|
38
|
+
// to open() captured, so a fetch that resolves after the dialog moved on updates
|
|
39
|
+
// nothing instead of quietly hijacking whatever's open now into team-edit mode.
|
|
40
|
+
const token=++openToken
|
|
37
41
|
try {
|
|
38
42
|
const selected=document.getElementById('launch-team').value || 'delivery'
|
|
39
43
|
const [data,catalog]=await Promise.all([api(`/api/teams/${encodeURIComponent(selected)}`),api('/api/teams')])
|
|
44
|
+
if(token!==openToken)return
|
|
40
45
|
tools=catalog.tools;draft=data.team;returnTeam=selected
|
|
41
46
|
const custom=catalog.teams.find(t=>t.id===selected)?.custom
|
|
42
47
|
originalId=custom ? selected:null
|
|
@@ -44,7 +49,7 @@ window.FleetTeams=(()=>{
|
|
|
44
49
|
draft.workflow ||= {reviewers:['qa'],maxAttempts:3,budgetUsd:10}
|
|
45
50
|
for(const [name,role] of Object.entries(draft.roles))role.tools ||= tools.filter(t=>!(role.disallowedTools || []).includes(t) && (name!==draft.manager || ['Read','Glob','Grep','WebSearch','WebFetch'].includes(t)))
|
|
46
51
|
render();toggle(true)
|
|
47
|
-
} catch(error){toast(error.message)}
|
|
52
|
+
} catch(error){if(token===openToken)toast(error.message)}
|
|
48
53
|
}
|
|
49
54
|
function render() {
|
|
50
55
|
document.getElementById('team-editor-error').hidden=true
|
|
@@ -134,6 +139,6 @@ window.FleetTeams=(()=>{
|
|
|
134
139
|
catch(error){const el=box.querySelector('p');el.textContent=error.message;el.hidden=false;event.target.disabled=false}
|
|
135
140
|
})
|
|
136
141
|
}
|
|
137
|
-
function reset(){if(document.getElementById('team-editor'))toggle(false)}
|
|
142
|
+
function reset(){openToken++;if(document.getElementById('team-editor'))toggle(false)}
|
|
138
143
|
return {open,board,reset,save,isEditing:()=>!!document.getElementById('team-editor') && !document.getElementById('team-editor').hidden}
|
|
139
144
|
})()
|