syntaur 0.67.0 → 0.69.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/.claude-plugin/plugin.json +1 -1
- package/dashboard/dist/assets/{_basePickBy-CE2CIvur.js → _basePickBy-DKk6tHtk.js} +1 -1
- package/dashboard/dist/assets/{_baseUniq-BznLQqID.js → _baseUniq-DM-f7DWz.js} +1 -1
- package/dashboard/dist/assets/{arc-B6JqtWve.js → arc-ZBlA3YdV.js} +1 -1
- package/dashboard/dist/assets/{architectureDiagram-2XIMDMQ5-P8UCT3rj.js → architectureDiagram-2XIMDMQ5-BUmvtGTF.js} +1 -1
- package/dashboard/dist/assets/{blockDiagram-WCTKOSBZ-C1ATZKSf.js → blockDiagram-WCTKOSBZ-B3qxWK6s.js} +1 -1
- package/dashboard/dist/assets/{c4Diagram-IC4MRINW-AvN1yayQ.js → c4Diagram-IC4MRINW-BEq_UJO-.js} +1 -1
- package/dashboard/dist/assets/channel-fypxffzQ.js +1 -0
- package/dashboard/dist/assets/{chunk-4BX2VUAB-CyYz6mlJ.js → chunk-4BX2VUAB-C-Y9ryMm.js} +1 -1
- package/dashboard/dist/assets/{chunk-55IACEB6-QyOF7ox_.js → chunk-55IACEB6-CGdtbsjw.js} +1 -1
- package/dashboard/dist/assets/{chunk-FMBD7UC4-DVTHM99U.js → chunk-FMBD7UC4-DllxJhUp.js} +1 -1
- package/dashboard/dist/assets/{chunk-JSJVCQXG-DQfxaQtT.js → chunk-JSJVCQXG-jjMM8O5F.js} +1 -1
- package/dashboard/dist/assets/{chunk-KX2RTZJC-4R1oobH6.js → chunk-KX2RTZJC-B_6BPltQ.js} +1 -1
- package/dashboard/dist/assets/{chunk-NQ4KR5QH-D8H_7yNS.js → chunk-NQ4KR5QH-D0hJiXHp.js} +1 -1
- package/dashboard/dist/assets/{chunk-QZHKN3VN-DLxDUSuo.js → chunk-QZHKN3VN-BCWo4hLS.js} +1 -1
- package/dashboard/dist/assets/{chunk-WL4C6EOR-CWuFDkVp.js → chunk-WL4C6EOR-DH_jEAwg.js} +1 -1
- package/dashboard/dist/assets/classDiagram-VBA2DB6C-1KnjQvtL.js +1 -0
- package/dashboard/dist/assets/classDiagram-v2-RAHNMMFH-1KnjQvtL.js +1 -0
- package/dashboard/dist/assets/clone-CKMabBhS.js +1 -0
- package/dashboard/dist/assets/{cose-bilkent-S5V4N54A-D23Dy_Za.js → cose-bilkent-S5V4N54A-5ld00TOH.js} +1 -1
- package/dashboard/dist/assets/{dagre-KLK3FWXG-CaKBk8eh.js → dagre-KLK3FWXG-Cnu6eQWy.js} +1 -1
- package/dashboard/dist/assets/{diagram-E7M64L7V-BAPQPki-.js → diagram-E7M64L7V-_CBBKNP-.js} +1 -1
- package/dashboard/dist/assets/{diagram-IFDJBPK2-Cla6qyvn.js → diagram-IFDJBPK2-DE6WjIb1.js} +1 -1
- package/dashboard/dist/assets/{diagram-P4PSJMXO-DnTZq_y6.js → diagram-P4PSJMXO-DpW7UzNK.js} +1 -1
- package/dashboard/dist/assets/{erDiagram-INFDFZHY-yc1_7ebn.js → erDiagram-INFDFZHY-BD2409fE.js} +1 -1
- package/dashboard/dist/assets/{flowDiagram-PKNHOUZH-CMt2tF6O.js → flowDiagram-PKNHOUZH-1p0khhFI.js} +1 -1
- package/dashboard/dist/assets/{ganttDiagram-A5KZAMGK-CXiK-5Gp.js → ganttDiagram-A5KZAMGK-B2zFyA4s.js} +1 -1
- package/dashboard/dist/assets/{gitGraphDiagram-K3NZZRJ6-B4PbW06T.js → gitGraphDiagram-K3NZZRJ6-bH-4YH7h.js} +1 -1
- package/dashboard/dist/assets/{graph-CjdFy-q-.js → graph-BT24B6iQ.js} +1 -1
- package/dashboard/dist/assets/{index-DlUgV5eO.css → index-BZwPAi8K.css} +1 -1
- package/dashboard/dist/assets/index-Cxqr3rQB.js +670 -0
- package/dashboard/dist/assets/{infoDiagram-LFFYTUFH-BeOWVt7p.js → infoDiagram-LFFYTUFH-CMzP4Hcg.js} +1 -1
- package/dashboard/dist/assets/{ishikawaDiagram-PHBUUO56-LE7swZOH.js → ishikawaDiagram-PHBUUO56-DMEmFC7M.js} +1 -1
- package/dashboard/dist/assets/{journeyDiagram-4ABVD52K-DG9-sksf.js → journeyDiagram-4ABVD52K-CAtzYQUm.js} +1 -1
- package/dashboard/dist/assets/{kanban-definition-K7BYSVSG-7CKAw6eI.js → kanban-definition-K7BYSVSG-d1JVbtvX.js} +1 -1
- package/dashboard/dist/assets/{layout-CHChKPuz.js → layout-BVuI38I_.js} +1 -1
- package/dashboard/dist/assets/{linear-BWSj4au4.js → linear-Bc8PGMbp.js} +1 -1
- package/dashboard/dist/assets/{mermaid.core-CAwQaPqG.js → mermaid.core-UtwFYLNj.js} +4 -4
- package/dashboard/dist/assets/{mindmap-definition-YRQLILUH-CtZWMkVN.js → mindmap-definition-YRQLILUH-DHc5RCDj.js} +1 -1
- package/dashboard/dist/assets/{pieDiagram-SKSYHLDU-CstCoaK7.js → pieDiagram-SKSYHLDU-9anIsdIA.js} +1 -1
- package/dashboard/dist/assets/{quadrantDiagram-337W2JSQ-DD8zRtaB.js → quadrantDiagram-337W2JSQ-FZ0D9HnU.js} +1 -1
- package/dashboard/dist/assets/{requirementDiagram-Z7DCOOCP-BWpKIK3b.js → requirementDiagram-Z7DCOOCP-BkjCvH_u.js} +1 -1
- package/dashboard/dist/assets/{sankeyDiagram-WA2Y5GQK-08gqQtFM.js → sankeyDiagram-WA2Y5GQK-DzqwYHDo.js} +1 -1
- package/dashboard/dist/assets/{sequenceDiagram-2WXFIKYE-DsfIDBUH.js → sequenceDiagram-2WXFIKYE-BW4g5Ao-.js} +1 -1
- package/dashboard/dist/assets/{stateDiagram-RAJIS63D-Dqzfk_yy.js → stateDiagram-RAJIS63D-D0tKU3Z0.js} +1 -1
- package/dashboard/dist/assets/stateDiagram-v2-FVOUBMTO-DxWQhjNO.js +1 -0
- package/dashboard/dist/assets/{timeline-definition-YZTLITO2-DgH_p9jR.js → timeline-definition-YZTLITO2-Bu269QDX.js} +1 -1
- package/dashboard/dist/assets/{treemap-KZPCXAKY-7XKqMhq9.js → treemap-KZPCXAKY-BGu_rrva.js} +1 -1
- package/dashboard/dist/assets/{vennDiagram-LZ73GAT5-BFtNLBWM.js → vennDiagram-LZ73GAT5-Cx_n5FRZ.js} +1 -1
- package/dashboard/dist/assets/{xychartDiagram-JWTSCODW-CQPevMNl.js → xychartDiagram-JWTSCODW-BOJsKV_W.js} +1 -1
- package/dashboard/dist/index.html +2 -2
- package/dist/dashboard/server.js +459 -63
- package/dist/dashboard/server.js.map +1 -1
- package/dist/index.js +1158 -702
- package/dist/index.js.map +1 -1
- package/dist/launch/index.d.ts +18 -0
- package/dist/launch/index.js +120 -12
- package/dist/launch/index.js.map +1 -1
- package/package.json +1 -1
- package/platforms/claude-code/.claude-plugin/plugin.json +1 -1
- package/platforms/claude-code/hooks/hooks.json +1 -1
- package/platforms/claude-code/hooks/session-cleanup.sh +21 -0
- package/platforms/codex/.codex-plugin/plugin.json +1 -1
- package/platforms/codex/hooks.json +1 -1
- package/platforms/codex/scripts/session-cleanup.sh +13 -0
- package/platforms/hermes/plugins/syntaur/__pycache__/__init__.cpython-312.pyc +0 -0
- package/platforms/hermes/plugins/syntaur/__pycache__/boundary.cpython-312.pyc +0 -0
- package/dashboard/dist/assets/channel-IZujZyS6.js +0 -1
- package/dashboard/dist/assets/classDiagram-VBA2DB6C-ChnJofe3.js +0 -1
- package/dashboard/dist/assets/classDiagram-v2-RAHNMMFH-ChnJofe3.js +0 -1
- package/dashboard/dist/assets/clone-JjIbzsqJ.js +0 -1
- package/dashboard/dist/assets/index-COOcebN7.js +0 -659
- package/dashboard/dist/assets/stateDiagram-v2-FVOUBMTO-D542UPiR.js +0 -1
package/dist/launch/index.d.ts
CHANGED
|
@@ -180,6 +180,19 @@ interface DeriveConfig {
|
|
|
180
180
|
headline: HeadlineProjection;
|
|
181
181
|
}
|
|
182
182
|
|
|
183
|
+
/**
|
|
184
|
+
* Per-reason age gates (ms). Defaults are sensible; Task 5 lets config override
|
|
185
|
+
* these keyed on disposition/phase. `deps_unsatisfied` has no age gate (a hard
|
|
186
|
+
* contradiction), so it is intentionally absent here.
|
|
187
|
+
*/
|
|
188
|
+
interface StaleThresholds {
|
|
189
|
+
inProgressNoActivityMs: number;
|
|
190
|
+
readyUnclaimedMs: number;
|
|
191
|
+
reviewAgingMs: number;
|
|
192
|
+
blockedAgingMs: number;
|
|
193
|
+
planApprovalAgingMs: number;
|
|
194
|
+
}
|
|
195
|
+
|
|
183
196
|
/**
|
|
184
197
|
* Search-config schema — the shape behind the `search:` block in
|
|
185
198
|
* `~/.syntaur/config.md` and the command palette's customizable behavior.
|
|
@@ -307,6 +320,11 @@ interface SyntaurConfig {
|
|
|
307
320
|
terminal: TerminalChoice | null;
|
|
308
321
|
searchConfig: SearchConfig | null;
|
|
309
322
|
workspaceVisibility: WorkspaceVisibilityConfig;
|
|
323
|
+
/** Optional per-reason staleness age-gate overrides (defaults-first; null = all defaults). */
|
|
324
|
+
staleness: Partial<StaleThresholds> | null;
|
|
325
|
+
/** Opt-in: run the read-only staleness watchdog on the dashboard loop (emits
|
|
326
|
+
* staleness-detected/cleared audit events; never mutates status). Off by default. */
|
|
327
|
+
stalenessWatchdog: boolean;
|
|
310
328
|
}
|
|
311
329
|
|
|
312
330
|
/**
|
package/dist/launch/index.js
CHANGED
|
@@ -2153,7 +2153,9 @@ __export(config_exports, {
|
|
|
2153
2153
|
getTerminal: () => getTerminal,
|
|
2154
2154
|
normalizeFactDeclarations: () => normalizeFactDeclarations,
|
|
2155
2155
|
parseAgentCommand: () => parseAgentCommand,
|
|
2156
|
+
parseDurationMs: () => parseDurationMs,
|
|
2156
2157
|
parseSearchConfig: () => parseSearchConfig,
|
|
2158
|
+
parseStalenessConfig: () => parseStalenessConfig,
|
|
2157
2159
|
parseStatusConfig: () => parseStatusConfig,
|
|
2158
2160
|
parseTerminalConfig: () => parseTerminalConfig,
|
|
2159
2161
|
readConfig: () => readConfig,
|
|
@@ -2169,6 +2171,7 @@ __export(config_exports, {
|
|
|
2169
2171
|
validateDeriveConfig: () => validateDeriveConfig,
|
|
2170
2172
|
validateDeriveShape: () => validateDeriveShape,
|
|
2171
2173
|
validateFactDeclarations: () => validateFactDeclarations,
|
|
2174
|
+
validateStalenessConfig: () => validateStalenessConfig,
|
|
2172
2175
|
writeAgentsConfig: () => writeAgentsConfig,
|
|
2173
2176
|
writeHotkeyBindingsConfig: () => writeHotkeyBindingsConfig,
|
|
2174
2177
|
writeSearchConfig: () => writeSearchConfig,
|
|
@@ -2180,6 +2183,13 @@ __export(config_exports, {
|
|
|
2180
2183
|
import { readFile as readFile5 } from "fs/promises";
|
|
2181
2184
|
import { spawnSync } from "child_process";
|
|
2182
2185
|
import { resolve as resolve7, isAbsolute } from "path";
|
|
2186
|
+
function parseDurationMs(raw) {
|
|
2187
|
+
const m = raw.trim().match(DURATION_RE);
|
|
2188
|
+
if (!m) return null;
|
|
2189
|
+
const n = Number(m[1]);
|
|
2190
|
+
if (!Number.isFinite(n) || n <= 0) return null;
|
|
2191
|
+
return n * DURATION_UNIT_MS[m[2] ?? "ms"];
|
|
2192
|
+
}
|
|
2183
2193
|
function parseAgentCommand(value, agentId) {
|
|
2184
2194
|
if (typeof value !== "string" || value.trim() === "") {
|
|
2185
2195
|
throw new AgentConfigError(
|
|
@@ -3416,6 +3426,65 @@ ${cleanedFm}
|
|
|
3416
3426
|
---${afterFrontmatter}`;
|
|
3417
3427
|
await writeFileForce(configPath, newContent);
|
|
3418
3428
|
}
|
|
3429
|
+
function parseStalenessConfig(content) {
|
|
3430
|
+
const match = content.match(/^---\n([\s\S]*?)\n---/);
|
|
3431
|
+
if (!match) return null;
|
|
3432
|
+
const fmBlock = match[1];
|
|
3433
|
+
const blockStart = fmBlock.match(/^staleness:\s*$/m);
|
|
3434
|
+
if (!blockStart) return null;
|
|
3435
|
+
const startIdx = (blockStart.index ?? 0) + blockStart[0].length;
|
|
3436
|
+
const lines = fmBlock.slice(startIdx).split("\n");
|
|
3437
|
+
const out = {};
|
|
3438
|
+
for (const line of lines) {
|
|
3439
|
+
if (line.trim() === "") continue;
|
|
3440
|
+
const trimmed = line.trimStart();
|
|
3441
|
+
const indent = line.length - trimmed.length;
|
|
3442
|
+
if (indent === 0) break;
|
|
3443
|
+
const ci = trimmed.indexOf(":");
|
|
3444
|
+
if (ci <= 0) continue;
|
|
3445
|
+
const key = trimmed.slice(0, ci).trim();
|
|
3446
|
+
const field = STALENESS_KEY_TO_FIELD[key];
|
|
3447
|
+
if (!field) continue;
|
|
3448
|
+
let value = trimmed.slice(ci + 1).trim();
|
|
3449
|
+
if (value.startsWith('"') && value.endsWith('"') || value.startsWith("'") && value.endsWith("'")) {
|
|
3450
|
+
value = value.slice(1, -1);
|
|
3451
|
+
}
|
|
3452
|
+
const ms = parseDurationMs(value);
|
|
3453
|
+
if (ms !== null) out[field] = ms;
|
|
3454
|
+
}
|
|
3455
|
+
return Object.keys(out).length > 0 ? out : null;
|
|
3456
|
+
}
|
|
3457
|
+
function validateStalenessConfig(content) {
|
|
3458
|
+
const match = content.match(/^---\n([\s\S]*?)\n---/);
|
|
3459
|
+
if (!match) return [];
|
|
3460
|
+
const fmBlock = match[1];
|
|
3461
|
+
const blockStart = fmBlock.match(/^staleness:\s*$/m);
|
|
3462
|
+
if (!blockStart) return [];
|
|
3463
|
+
const startIdx = (blockStart.index ?? 0) + blockStart[0].length;
|
|
3464
|
+
const lines = fmBlock.slice(startIdx).split("\n");
|
|
3465
|
+
const problems = [];
|
|
3466
|
+
for (const line of lines) {
|
|
3467
|
+
if (line.trim() === "") continue;
|
|
3468
|
+
const trimmed = line.trimStart();
|
|
3469
|
+
const indent = line.length - trimmed.length;
|
|
3470
|
+
if (indent === 0) break;
|
|
3471
|
+
const ci = trimmed.indexOf(":");
|
|
3472
|
+
if (ci <= 0) continue;
|
|
3473
|
+
const key = trimmed.slice(0, ci).trim();
|
|
3474
|
+
let value = trimmed.slice(ci + 1).trim();
|
|
3475
|
+
if (value.startsWith('"') && value.endsWith('"') || value.startsWith("'") && value.endsWith("'")) {
|
|
3476
|
+
value = value.slice(1, -1);
|
|
3477
|
+
}
|
|
3478
|
+
if (!(key in STALENESS_KEY_TO_FIELD)) {
|
|
3479
|
+
problems.push(`staleness.${key}: unknown key (expected one of ${Object.keys(STALENESS_KEY_TO_FIELD).join(", ")})`);
|
|
3480
|
+
continue;
|
|
3481
|
+
}
|
|
3482
|
+
if (parseDurationMs(value) === null) {
|
|
3483
|
+
problems.push(`staleness.${key}: "${value}" is not a positive duration (e.g. 7d, 12h, 30m, 90s, 500ms)`);
|
|
3484
|
+
}
|
|
3485
|
+
}
|
|
3486
|
+
return problems;
|
|
3487
|
+
}
|
|
3419
3488
|
function parseSearchConfig(content) {
|
|
3420
3489
|
const match = content.match(/^---\n([\s\S]*?)\n---/);
|
|
3421
3490
|
if (!match) return null;
|
|
@@ -3698,7 +3767,9 @@ async function readConfig() {
|
|
|
3698
3767
|
}
|
|
3699
3768
|
})(),
|
|
3700
3769
|
searchConfig: parseSearchConfig(content),
|
|
3701
|
-
workspaceVisibility: parseWorkspaceVisibilityConfig(fmBlock)
|
|
3770
|
+
workspaceVisibility: parseWorkspaceVisibilityConfig(fmBlock),
|
|
3771
|
+
staleness: parseStalenessConfig(content),
|
|
3772
|
+
stalenessWatchdog: String(fm["stalenessWatchdog"]).toLowerCase() === "true"
|
|
3702
3773
|
};
|
|
3703
3774
|
}
|
|
3704
3775
|
function getAssignmentTypes(config) {
|
|
@@ -3761,7 +3832,7 @@ async function updateAgentsConfig(mutation, options = {}) {
|
|
|
3761
3832
|
await writeAgentsConfig(next);
|
|
3762
3833
|
return { previous, next, written: true };
|
|
3763
3834
|
}
|
|
3764
|
-
var DEFAULT_ASSIGNMENT_TYPES, DEFAULT_CONFIG, AUTO_CREATE_WORKTREE_VALUES, SESSION_AUTO_TRACK_VALUES, AgentConfigError, DEFAULT_STATUS_COLORS, KNOWN_AGENT_SCALAR_FIELDS, migratedConfigPaths, TerminalConfigError;
|
|
3835
|
+
var STALENESS_KEY_TO_FIELD, DURATION_RE, DURATION_UNIT_MS, DEFAULT_ASSIGNMENT_TYPES, DEFAULT_CONFIG, AUTO_CREATE_WORKTREE_VALUES, SESSION_AUTO_TRACK_VALUES, AgentConfigError, DEFAULT_STATUS_COLORS, KNOWN_AGENT_SCALAR_FIELDS, migratedConfigPaths, TerminalConfigError;
|
|
3765
3836
|
var init_config2 = __esm({
|
|
3766
3837
|
"src/utils/config.ts"() {
|
|
3767
3838
|
"use strict";
|
|
@@ -3778,6 +3849,21 @@ var init_config2 = __esm({
|
|
|
3778
3849
|
init_terminal_schema();
|
|
3779
3850
|
init_search_schema();
|
|
3780
3851
|
init_workspace_visibility_schema();
|
|
3852
|
+
STALENESS_KEY_TO_FIELD = {
|
|
3853
|
+
inProgressNoActivity: "inProgressNoActivityMs",
|
|
3854
|
+
readyUnclaimed: "readyUnclaimedMs",
|
|
3855
|
+
reviewAging: "reviewAgingMs",
|
|
3856
|
+
blockedAging: "blockedAgingMs",
|
|
3857
|
+
planApprovalAging: "planApprovalAgingMs"
|
|
3858
|
+
};
|
|
3859
|
+
DURATION_RE = /^(\d+(?:\.\d+)?)\s*(ms|s|m|h|d)?$/;
|
|
3860
|
+
DURATION_UNIT_MS = {
|
|
3861
|
+
ms: 1,
|
|
3862
|
+
s: 1e3,
|
|
3863
|
+
m: 6e4,
|
|
3864
|
+
h: 36e5,
|
|
3865
|
+
d: 864e5
|
|
3866
|
+
};
|
|
3781
3867
|
DEFAULT_ASSIGNMENT_TYPES = {
|
|
3782
3868
|
definitions: [
|
|
3783
3869
|
{ id: "feature", label: "Feature" },
|
|
@@ -3820,7 +3906,9 @@ var init_config2 = __esm({
|
|
|
3820
3906
|
searchConfig: null,
|
|
3821
3907
|
workspaceVisibility: {
|
|
3822
3908
|
hidden: []
|
|
3823
|
-
}
|
|
3909
|
+
},
|
|
3910
|
+
staleness: null,
|
|
3911
|
+
stalenessWatchdog: false
|
|
3824
3912
|
};
|
|
3825
3913
|
AUTO_CREATE_WORKTREE_VALUES = ["skip", "ask", "always"];
|
|
3826
3914
|
SESSION_AUTO_TRACK_VALUES = ["all", "workspaces-only", "off"];
|
|
@@ -5075,8 +5163,24 @@ var init_overviewCopy = __esm({
|
|
|
5075
5163
|
}
|
|
5076
5164
|
});
|
|
5077
5165
|
|
|
5166
|
+
// src/staleness/classify.ts
|
|
5167
|
+
var DAY, DEFAULT_STALE_THRESHOLDS;
|
|
5168
|
+
var init_classify = __esm({
|
|
5169
|
+
"src/staleness/classify.ts"() {
|
|
5170
|
+
"use strict";
|
|
5171
|
+
DAY = 24 * 60 * 60 * 1e3;
|
|
5172
|
+
DEFAULT_STALE_THRESHOLDS = {
|
|
5173
|
+
inProgressNoActivityMs: 7 * DAY,
|
|
5174
|
+
readyUnclaimedMs: 3 * DAY,
|
|
5175
|
+
reviewAgingMs: 3 * DAY,
|
|
5176
|
+
blockedAgingMs: 3 * DAY,
|
|
5177
|
+
planApprovalAgingMs: 3 * DAY
|
|
5178
|
+
};
|
|
5179
|
+
}
|
|
5180
|
+
});
|
|
5181
|
+
|
|
5078
5182
|
// src/dashboard/api.ts
|
|
5079
|
-
import { readdir as readdir9, readFile as readFile12, writeFile as writeFile3 } from "fs/promises";
|
|
5183
|
+
import { readdir as readdir9, readFile as readFile12, writeFile as writeFile3, stat as stat2 } from "fs/promises";
|
|
5080
5184
|
import { resolve as resolve15, dirname as dirname2, basename } from "path";
|
|
5081
5185
|
function activeAssignments(items) {
|
|
5082
5186
|
return items.filter((item) => item.archived !== true);
|
|
@@ -5951,7 +6055,7 @@ function getProjectActivityTimestamp(projectUpdated, assignments) {
|
|
|
5951
6055
|
}
|
|
5952
6056
|
return latest;
|
|
5953
6057
|
}
|
|
5954
|
-
var
|
|
6058
|
+
var projectRecordsCache, standaloneRecordsCache, DEFAULT_TRANSITION_DEFINITIONS, _cachedConfig, REFERENCED_BY_LIMIT, migratedProjectsDirs, DEFAULT_GRAPH_COLORS;
|
|
5955
6059
|
var init_api = __esm({
|
|
5956
6060
|
"src/dashboard/api.ts"() {
|
|
5957
6061
|
"use strict";
|
|
@@ -5969,7 +6073,7 @@ var init_api = __esm({
|
|
|
5969
6073
|
init_help();
|
|
5970
6074
|
init_agent_sessions();
|
|
5971
6075
|
init_overviewCopy();
|
|
5972
|
-
|
|
6076
|
+
init_classify();
|
|
5973
6077
|
projectRecordsCache = /* @__PURE__ */ new Map();
|
|
5974
6078
|
standaloneRecordsCache = /* @__PURE__ */ new Map();
|
|
5975
6079
|
DEFAULT_TRANSITION_DEFINITIONS = [
|
|
@@ -6461,25 +6565,29 @@ async function resolveSessionPlan(input, terminal) {
|
|
|
6461
6565
|
}
|
|
6462
6566
|
let cwd = session.path;
|
|
6463
6567
|
let fallbackWarning = null;
|
|
6464
|
-
if (session.
|
|
6465
|
-
const detail = await getAssignmentDetail(
|
|
6568
|
+
if (!isExistingDir(session.path)) {
|
|
6569
|
+
const detail = session.projectSlug && session.assignmentSlug ? await getAssignmentDetail(
|
|
6466
6570
|
input.projectsDir,
|
|
6467
6571
|
session.projectSlug,
|
|
6468
6572
|
session.assignmentSlug
|
|
6469
|
-
)
|
|
6573
|
+
) : session.assignmentSlug ? await getAssignmentDetailById(
|
|
6574
|
+
input.projectsDir,
|
|
6575
|
+
input.assignmentsDir,
|
|
6576
|
+
session.assignmentSlug
|
|
6577
|
+
) : null;
|
|
6470
6578
|
if (detail) {
|
|
6471
6579
|
const picked = resolveWorkspaceCwd({
|
|
6472
6580
|
worktreePath: detail.workspace.worktreePath,
|
|
6473
6581
|
repository: detail.workspace.repository,
|
|
6474
6582
|
branch: detail.workspace.branch,
|
|
6475
|
-
assignmentSlug:
|
|
6583
|
+
assignmentSlug: detail.slug
|
|
6476
6584
|
});
|
|
6477
6585
|
if (picked.cwd !== null) {
|
|
6478
6586
|
cwd = picked.cwd;
|
|
6479
6587
|
fallbackWarning = picked.fallbackWarning;
|
|
6480
6588
|
} else {
|
|
6481
6589
|
fallbackWarning = formatFallbackCwdWarning({
|
|
6482
|
-
assignmentSlug:
|
|
6590
|
+
assignmentSlug: detail.slug,
|
|
6483
6591
|
workspaceDir: session.path,
|
|
6484
6592
|
worktreePath: detail.workspace.worktreePath,
|
|
6485
6593
|
branch: detail.workspace.branch
|
|
@@ -6615,7 +6723,7 @@ function captureProcessStartedAt(pid) {
|
|
|
6615
6723
|
|
|
6616
6724
|
// src/usage/cwd-extractor.ts
|
|
6617
6725
|
init_paths();
|
|
6618
|
-
import { open as open2, readdir as readdir10, stat as
|
|
6726
|
+
import { open as open2, readdir as readdir10, stat as stat3 } from "fs/promises";
|
|
6619
6727
|
import { join as join4 } from "path";
|
|
6620
6728
|
import { homedir as homedir3 } from "os";
|
|
6621
6729
|
|