@galda/cli 0.10.110 → 0.10.111
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/app/index.html +20 -2
- package/package.json +1 -1
package/app/index.html
CHANGED
|
@@ -3485,7 +3485,7 @@ const savedTheme = (() => {
|
|
|
3485
3485
|
if (v !== s) localStorage.setItem('theme', v);
|
|
3486
3486
|
return v;
|
|
3487
3487
|
})();
|
|
3488
|
-
const state = { repos: null, repoHome: '', /* GET /api/repos — the folders a project can point at (Context Bar) */ projects: [], goals: [], tasks: [], act: {}, actAt: {}, todos: {}, chatTurns: {}, active: localStorage.getItem('sel:project') || 'default', editing: null, attach: [], connectCommand: '', models: ['sonnet'], agentModels: null, agentEfforts: null, agents: ['claude-code', 'codex'], auth: null, expanded: new Set(), openThreads: new Set(), queueOrder: {}, externalActivity: [], selectedGoal: null, composerDetachedGoal: null, workflowColumns: {}, wfDraft: null, reviewDefinitions: {}, rdDraft: null, runningCounts: {}, parallelLimits: null, hostReadiness: [], connectedApp: localStorage.getItem('sel:agent') || 'claude-code', reviewOpenGoal: null, reviewApprovals: {}, goalDetailOpen: null, qreplyOpen: new Set(), logCollapsed: localStorage.getItem('logCollapsed') !== '0', logEntries: [], layout: localStorage.getItem('layout') || 'flagship', theme: savedTheme, boardskin: localStorage.getItem('boardskin') || 'auto', summaryPattern: Number(localStorage.getItem('summaryPattern')) || 3, peraSpot: 0, skill: null, skillsCache: null, projectRules: {}, rulesOpen: false,
|
|
3488
|
+
const state = { repos: null, repoHome: '', /* GET /api/repos — the folders a project can point at (Context Bar) */ projects: [], goals: [], tasks: [], act: {}, actAt: {}, todos: {}, chatTurns: {}, active: localStorage.getItem('sel:project') || 'default', editing: null, attach: [], connectCommand: '', models: ['sonnet'], agentModels: null, agentEfforts: null, agents: ['claude-code', 'codex'], auth: null, expanded: new Set(), openThreads: new Set(), queueOrder: {}, queueWaits: {}, externalActivity: [], selectedGoal: null, composerDetachedGoal: null, workflowColumns: {}, wfDraft: null, reviewDefinitions: {}, rdDraft: null, runningCounts: {}, parallelLimits: null, hostReadiness: [], connectedApp: localStorage.getItem('sel:agent') || 'claude-code', reviewOpenGoal: null, reviewApprovals: {}, goalDetailOpen: null, qreplyOpen: new Set(), logCollapsed: localStorage.getItem('logCollapsed') !== '0', logEntries: [], layout: localStorage.getItem('layout') || 'flagship', theme: savedTheme, boardskin: localStorage.getItem('boardskin') || 'auto', summaryPattern: Number(localStorage.getItem('summaryPattern')) || 3, peraSpot: 0, skill: null, skillsCache: null, projectRules: {}, rulesOpen: false,
|
|
3489
3489
|
// per-message send overrides set via slash-commands (reset after each send,
|
|
3490
3490
|
// except model which is sticky in localStorage). palette = open command list.
|
|
3491
3491
|
// Scoped per project (msgByProject) so a skill/mode picked in one project can't leak
|
|
@@ -4617,7 +4617,25 @@ function renderQueue(){
|
|
|
4617
4617
|
// layouts keep the explanatory sentence.
|
|
4618
4618
|
const qn = ob.length + stacked.length + planning.length;
|
|
4619
4619
|
const headHtml = qn > 0 ? `<div class="qhead">${state.layout === 'flagship' ? `Queued · ${qn}` : `${qn} queued · goals become To dos in ~30s`}</div>` : '';
|
|
4620
|
+
// Why this queued goal is not moving, in the SERVER's words (state.queueWaits,
|
|
4621
|
+
// keyed by goal id — engine/lib.mjs buildQueueWaits). The server owns the slot
|
|
4622
|
+
// accounting, so it is the only thing that can answer this without disagreeing
|
|
4623
|
+
// with itself.
|
|
4624
|
+
//
|
|
4625
|
+
// The fallback below is what this used to do always: re-derive the answer in the
|
|
4626
|
+
// browser from running TASKS plus planning goals. That is the accounting #541
|
|
4627
|
+
// replaced — a goal whose task sat in the queue counted for nothing — so the
|
|
4628
|
+
// browser could print "Next up · starts automatically" about a goal the server
|
|
4629
|
+
// had blocked. Kept only for a server older than queueWaits; when the field is
|
|
4630
|
+
// there, the row repeats the server rather than guessing alongside it.
|
|
4620
4631
|
const stackedMeta = (g) => {
|
|
4632
|
+
const wait = state.queueWaits?.[g.id];
|
|
4633
|
+
if (wait) {
|
|
4634
|
+
const targets = (wait.targetGoalIds ?? []).filter((id) => id !== g.id);
|
|
4635
|
+
const active = targets.length ? ` · active ${targets.map((id) => `#${id}`).join(', ')}` : '';
|
|
4636
|
+
const ops = targets.length ? ' · Run next / switch Agent' : '';
|
|
4637
|
+
return `Waiting · ${wait.reason}${active} · starts when ${wait.condition}${ops}`;
|
|
4638
|
+
}
|
|
4621
4639
|
const project = state.projects.find((p) => p.id === g.projectId);
|
|
4622
4640
|
if (project?.paused) return 'Paused · press play to start';
|
|
4623
4641
|
const activeIds = [...new Set([
|
|
@@ -8784,7 +8802,7 @@ async function refresh(){
|
|
|
8784
8802
|
setAgentEffort(state.connectedApp);
|
|
8785
8803
|
renderModelSelect();
|
|
8786
8804
|
renderEffortSelect();
|
|
8787
|
-
state.queueOrder = s.queueOrder ?? {}; state.externalActivity = s.externalActivity ?? [];
|
|
8805
|
+
state.queueOrder = s.queueOrder ?? {}; state.queueWaits = s.queueWaits ?? {}; state.externalActivity = s.externalActivity ?? [];
|
|
8788
8806
|
state.runningCounts = s.runningCounts ?? {}; state.parallelLimits = s.parallelLimits ?? null;
|
|
8789
8807
|
state.workflowColumns = s.workflowColumns ?? {};
|
|
8790
8808
|
state.reviewDefinitions = s.reviewDefinitions ?? {};
|
package/package.json
CHANGED