syntaur 0.46.0 → 0.48.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-RQBuJKcX.js → _basePickBy-Cie7FXcV.js} +1 -1
- package/dashboard/dist/assets/{_baseUniq-_J7s4kD3.js → _baseUniq-C2af7-lW.js} +1 -1
- package/dashboard/dist/assets/{arc-_9SyUgKQ.js → arc-BHKGjEv8.js} +1 -1
- package/dashboard/dist/assets/{architectureDiagram-2XIMDMQ5-C8LeFMgr.js → architectureDiagram-2XIMDMQ5-CWqzcG1t.js} +1 -1
- package/dashboard/dist/assets/{blockDiagram-WCTKOSBZ-gMh0EPEh.js → blockDiagram-WCTKOSBZ-CHLC0M63.js} +1 -1
- package/dashboard/dist/assets/{c4Diagram-IC4MRINW-cHwecwLI.js → c4Diagram-IC4MRINW-Bx6GTZzJ.js} +1 -1
- package/dashboard/dist/assets/channel-CXlttLwe.js +1 -0
- package/dashboard/dist/assets/{chunk-4BX2VUAB-Bb2anYuQ.js → chunk-4BX2VUAB-7cTgwG6c.js} +1 -1
- package/dashboard/dist/assets/{chunk-55IACEB6-DYIRGzA1.js → chunk-55IACEB6-DQmdA20e.js} +1 -1
- package/dashboard/dist/assets/{chunk-FMBD7UC4-sgRWBbaF.js → chunk-FMBD7UC4-knmOnIKI.js} +1 -1
- package/dashboard/dist/assets/{chunk-JSJVCQXG-DlYKMl_j.js → chunk-JSJVCQXG-CaiLHJFn.js} +1 -1
- package/dashboard/dist/assets/{chunk-KX2RTZJC-D0YDLAOF.js → chunk-KX2RTZJC-Crp4zWuY.js} +1 -1
- package/dashboard/dist/assets/{chunk-NQ4KR5QH-D-Y-CUx6.js → chunk-NQ4KR5QH-DDjtdNaK.js} +1 -1
- package/dashboard/dist/assets/{chunk-QZHKN3VN-D7FpSvb5.js → chunk-QZHKN3VN-Cbm1IieP.js} +1 -1
- package/dashboard/dist/assets/{chunk-WL4C6EOR-CtXgQLdS.js → chunk-WL4C6EOR-CdrRh6R4.js} +1 -1
- package/dashboard/dist/assets/classDiagram-VBA2DB6C-BJM0Dprk.js +1 -0
- package/dashboard/dist/assets/classDiagram-v2-RAHNMMFH-BJM0Dprk.js +1 -0
- package/dashboard/dist/assets/clone-BTq7ueDt.js +1 -0
- package/dashboard/dist/assets/{cose-bilkent-S5V4N54A-YbTaohoJ.js → cose-bilkent-S5V4N54A-DyNajnMF.js} +1 -1
- package/dashboard/dist/assets/{dagre-KLK3FWXG-CMtwGAnP.js → dagre-KLK3FWXG-CIBjpfqE.js} +1 -1
- package/dashboard/dist/assets/{diagram-E7M64L7V-D8wBMBAX.js → diagram-E7M64L7V-CDENlpZN.js} +1 -1
- package/dashboard/dist/assets/{diagram-IFDJBPK2-DfudLpiJ.js → diagram-IFDJBPK2-CIGMJoFB.js} +1 -1
- package/dashboard/dist/assets/{diagram-P4PSJMXO-CyMy61wE.js → diagram-P4PSJMXO-C27fj5wp.js} +1 -1
- package/dashboard/dist/assets/{erDiagram-INFDFZHY-BlB4ZQl9.js → erDiagram-INFDFZHY-M2CywJym.js} +1 -1
- package/dashboard/dist/assets/{flowDiagram-PKNHOUZH-DbhDQJM3.js → flowDiagram-PKNHOUZH-CTV6ROYf.js} +1 -1
- package/dashboard/dist/assets/{ganttDiagram-A5KZAMGK-DJFqteNi.js → ganttDiagram-A5KZAMGK-CxH3f3e5.js} +1 -1
- package/dashboard/dist/assets/{gitGraphDiagram-K3NZZRJ6-D8etA_mm.js → gitGraphDiagram-K3NZZRJ6-CwhnVvHE.js} +1 -1
- package/dashboard/dist/assets/{graph-Ce86jeZn.js → graph-DGkI_ekZ.js} +1 -1
- package/dashboard/dist/assets/{index-DzHQIE2n.css → index-BxO2I5dN.css} +1 -1
- package/dashboard/dist/assets/index-CTdFARW9.js +567 -0
- package/dashboard/dist/assets/{infoDiagram-LFFYTUFH-Cx35U-h8.js → infoDiagram-LFFYTUFH-CuKReAi2.js} +1 -1
- package/dashboard/dist/assets/{ishikawaDiagram-PHBUUO56-C04Y2nj8.js → ishikawaDiagram-PHBUUO56-DyBMt5Mw.js} +1 -1
- package/dashboard/dist/assets/{journeyDiagram-4ABVD52K-D8-cxbxE.js → journeyDiagram-4ABVD52K-CnwtbTNs.js} +1 -1
- package/dashboard/dist/assets/{kanban-definition-K7BYSVSG-DVKqMylP.js → kanban-definition-K7BYSVSG-5Sh1bC5j.js} +1 -1
- package/dashboard/dist/assets/{layout-98xZDpgu.js → layout-W2Vytcip.js} +1 -1
- package/dashboard/dist/assets/{linear-0jk_IwAc.js → linear-UTm9E6c4.js} +1 -1
- package/dashboard/dist/assets/{mermaid.core-C337VWfr.js → mermaid.core-B0EB-dBk.js} +4 -4
- package/dashboard/dist/assets/{mindmap-definition-YRQLILUH-8sNYGYEP.js → mindmap-definition-YRQLILUH-CH4L08eg.js} +1 -1
- package/dashboard/dist/assets/{pieDiagram-SKSYHLDU-afcmzHxf.js → pieDiagram-SKSYHLDU-CQ3PMl-w.js} +1 -1
- package/dashboard/dist/assets/{quadrantDiagram-337W2JSQ-B4RjcpOq.js → quadrantDiagram-337W2JSQ-DbZgXUm5.js} +1 -1
- package/dashboard/dist/assets/{requirementDiagram-Z7DCOOCP-CRavU6cI.js → requirementDiagram-Z7DCOOCP-CxJWytQa.js} +1 -1
- package/dashboard/dist/assets/{sankeyDiagram-WA2Y5GQK-DFomU3z-.js → sankeyDiagram-WA2Y5GQK-3YeEasvh.js} +1 -1
- package/dashboard/dist/assets/{sequenceDiagram-2WXFIKYE-CGKO7nmK.js → sequenceDiagram-2WXFIKYE-F2EyvYsW.js} +1 -1
- package/dashboard/dist/assets/{stateDiagram-RAJIS63D-BjFI1K8h.js → stateDiagram-RAJIS63D-DrmiemaD.js} +1 -1
- package/dashboard/dist/assets/stateDiagram-v2-FVOUBMTO-DfyvP5EF.js +1 -0
- package/dashboard/dist/assets/{timeline-definition-YZTLITO2-BBo8XJFG.js → timeline-definition-YZTLITO2-CBee2YiE.js} +1 -1
- package/dashboard/dist/assets/{treemap-KZPCXAKY-COd6i6TE.js → treemap-KZPCXAKY-BkPRIS3K.js} +1 -1
- package/dashboard/dist/assets/{vennDiagram-LZ73GAT5-CGQweQ36.js → vennDiagram-LZ73GAT5-CTsfwv8G.js} +1 -1
- package/dashboard/dist/assets/{xychartDiagram-JWTSCODW-mfJ5So7N.js → xychartDiagram-JWTSCODW-DUSo-c6w.js} +1 -1
- package/dashboard/dist/index.html +2 -2
- package/dist/dashboard/server.js +188 -73
- package/dist/dashboard/server.js.map +1 -1
- package/dist/index.js +198 -74
- package/dist/index.js.map +1 -1
- package/dist/launch/index.d.ts +25 -12
- package/dist/launch/index.js +62 -58
- 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/skills/manage-statuses/SKILL.md +7 -0
- package/platforms/codex/.codex-plugin/plugin.json +1 -1
- package/platforms/codex/skills/manage-statuses/SKILL.md +7 -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/skills/manage-statuses/SKILL.md +7 -0
- package/dashboard/dist/assets/channel-C36dnl_e.js +0 -1
- package/dashboard/dist/assets/classDiagram-VBA2DB6C-BsoGa6_a.js +0 -1
- package/dashboard/dist/assets/classDiagram-v2-RAHNMMFH-BsoGa6_a.js +0 -1
- package/dashboard/dist/assets/clone-Bz6jW3OY.js +0 -1
- package/dashboard/dist/assets/index-DRng26Jg.js +0 -567
- package/dashboard/dist/assets/stateDiagram-v2-FVOUBMTO-BtxefYKD.js +0 -1
package/dist/launch/index.d.ts
CHANGED
|
@@ -112,6 +112,31 @@ interface AgentConfig {
|
|
|
112
112
|
launchPrompt?: string;
|
|
113
113
|
}
|
|
114
114
|
|
|
115
|
+
/**
|
|
116
|
+
* Browser-safe fact-vocabulary module.
|
|
117
|
+
*
|
|
118
|
+
* Extracted for the same reason as `saved-view-builder.ts`: both the dashboard
|
|
119
|
+
* (Vite/browser build, `@shared/*` alias) and Node-side modules need these
|
|
120
|
+
* definitions. The ONLY import here is from `./query/index.js` — no
|
|
121
|
+
* Node-coupled modules (no `config.ts`, no `fs`, no `path`).
|
|
122
|
+
*
|
|
123
|
+
* Consumers (`src/lifecycle/derive.ts`, `src/utils/config.ts`) re-export
|
|
124
|
+
* everything from here so no existing import path needs to change.
|
|
125
|
+
*/
|
|
126
|
+
|
|
127
|
+
/**
|
|
128
|
+
* A custom-fact declaration EXACTLY as parsed from `statuses.facts` — loose
|
|
129
|
+
* parse (Locked Decisions): every field is a raw string so user input
|
|
130
|
+
* round-trips through serialization even when invalid. The strict
|
|
131
|
+
* {@link FactDeclaration} is derived from this via {@link normalizeFactDeclarations}
|
|
132
|
+
* (defined in `config.ts`, which imports this type).
|
|
133
|
+
*/
|
|
134
|
+
interface RawFactDeclaration {
|
|
135
|
+
name: string;
|
|
136
|
+
type: string;
|
|
137
|
+
binds: string | null;
|
|
138
|
+
}
|
|
139
|
+
|
|
115
140
|
interface WorkspaceVisibilityConfig {
|
|
116
141
|
/** Names of workspaces hidden from the left nav. Absent = visible. */
|
|
117
142
|
hidden: string[];
|
|
@@ -163,18 +188,6 @@ interface DeriveConfig {
|
|
|
163
188
|
disposition: DispositionRule[];
|
|
164
189
|
headline: HeadlineProjection;
|
|
165
190
|
}
|
|
166
|
-
/**
|
|
167
|
-
* A custom-fact declaration EXACTLY as parsed from `statuses.facts` — loose
|
|
168
|
-
* parse (Locked Decisions): every field is a raw string so user input
|
|
169
|
-
* round-trips through serialization even when invalid. The strict
|
|
170
|
-
* {@link FactDeclaration} is derived from this via {@link normalizeFactDeclarations}.
|
|
171
|
-
*/
|
|
172
|
-
interface RawFactDeclaration {
|
|
173
|
-
name: string;
|
|
174
|
-
type: string;
|
|
175
|
-
binds: string | null;
|
|
176
|
-
}
|
|
177
|
-
|
|
178
191
|
interface StatusConfig {
|
|
179
192
|
statuses: StatusDefinition[];
|
|
180
193
|
order: string[];
|
package/dist/launch/index.js
CHANGED
|
@@ -1686,6 +1686,53 @@ function factFieldNames(decl) {
|
|
|
1686
1686
|
].map((k) => k.toLowerCase()) : [exportNames.fact.toLowerCase()];
|
|
1687
1687
|
return { storageKey: name, exports: exportNames, registryKeys };
|
|
1688
1688
|
}
|
|
1689
|
+
function validateFactDeclarations(raw) {
|
|
1690
|
+
const problems = [];
|
|
1691
|
+
const owners = /* @__PURE__ */ new Map();
|
|
1692
|
+
for (const key of Object.keys(DERIVE_FIELDS)) owners.set(key, "built-in");
|
|
1693
|
+
for (const key of Object.keys(ASSIGNMENT_FIELDS)) owners.set(key, "built-in");
|
|
1694
|
+
for (const row of raw ?? []) {
|
|
1695
|
+
const name = (row?.name ?? "").trim();
|
|
1696
|
+
if (!/^[a-z][a-zA-Z0-9]*$/.test(name)) {
|
|
1697
|
+
problems.push(
|
|
1698
|
+
`fact "${row?.name ?? ""}": invalid name \u2014 must match /^[a-z][a-zA-Z0-9]*$/`
|
|
1699
|
+
);
|
|
1700
|
+
continue;
|
|
1701
|
+
}
|
|
1702
|
+
const type = (row.type ?? "").trim();
|
|
1703
|
+
if (type !== "bool" && type !== "number" && type !== "attestation") {
|
|
1704
|
+
problems.push(
|
|
1705
|
+
`fact "${name}": invalid type "${row.type ?? ""}" \u2014 expected bool, number, or attestation`
|
|
1706
|
+
);
|
|
1707
|
+
continue;
|
|
1708
|
+
}
|
|
1709
|
+
if (type === "attestation") {
|
|
1710
|
+
const binds = (row.binds ?? "none").toString().trim() || "none";
|
|
1711
|
+
if (binds !== "plan" && binds !== "commit" && binds !== "none") {
|
|
1712
|
+
problems.push(
|
|
1713
|
+
`fact "${name}": invalid binds "${row.binds}" \u2014 expected plan, commit, or none`
|
|
1714
|
+
);
|
|
1715
|
+
continue;
|
|
1716
|
+
}
|
|
1717
|
+
}
|
|
1718
|
+
const decl = type === "attestation" ? { name, type, binds: "none" } : { name, type };
|
|
1719
|
+
const keys = factFieldNames(decl).registryKeys;
|
|
1720
|
+
const collidingKey = keys.find((k) => owners.has(k));
|
|
1721
|
+
if (collidingKey !== void 0) {
|
|
1722
|
+
const owner = owners.get(collidingKey);
|
|
1723
|
+
if (owner === "built-in") {
|
|
1724
|
+
problems.push(`fact "${name}": exported field "${collidingKey}" collides with a built-in field`);
|
|
1725
|
+
} else if (owner === name) {
|
|
1726
|
+
problems.push(`fact "${name}": duplicate declaration (a fact named "${name}" is already declared)`);
|
|
1727
|
+
} else {
|
|
1728
|
+
problems.push(`fact "${name}": exported field "${collidingKey}" collides with fact "${owner}"`);
|
|
1729
|
+
}
|
|
1730
|
+
continue;
|
|
1731
|
+
}
|
|
1732
|
+
for (const key of keys) owners.set(key, name);
|
|
1733
|
+
}
|
|
1734
|
+
return problems;
|
|
1735
|
+
}
|
|
1689
1736
|
function acceptFactDeclarations(declarations) {
|
|
1690
1737
|
const taken = /* @__PURE__ */ new Set([
|
|
1691
1738
|
...Object.keys(DERIVE_FIELDS),
|
|
@@ -2194,7 +2241,6 @@ function parseStatusConfig(content) {
|
|
|
2194
2241
|
continue;
|
|
2195
2242
|
}
|
|
2196
2243
|
}
|
|
2197
|
-
if (statuses.length === 0) return null;
|
|
2198
2244
|
const derive = phaseLadder.length > 0 || disposition.length > 0 || Object.keys(headline).length > 0 ? {
|
|
2199
2245
|
phaseLadder: phaseLadder.length > 0 ? phaseLadder : DEFAULT_DERIVE_CONFIG.phaseLadder,
|
|
2200
2246
|
disposition: disposition.length > 0 ? disposition : DEFAULT_DERIVE_CONFIG.disposition,
|
|
@@ -2205,6 +2251,7 @@ function parseStatusConfig(content) {
|
|
|
2205
2251
|
active: "phase"
|
|
2206
2252
|
}
|
|
2207
2253
|
} : null;
|
|
2254
|
+
if (statuses.length === 0 && facts.length === 0 && derive === null) return null;
|
|
2208
2255
|
return {
|
|
2209
2256
|
statuses,
|
|
2210
2257
|
order: order.length > 0 ? order : statuses.map((s) => s.id),
|
|
@@ -2330,53 +2377,6 @@ function validateDeriveConfig(derive, statusConfig, validateWhen = () => null) {
|
|
|
2330
2377
|
}
|
|
2331
2378
|
return problems;
|
|
2332
2379
|
}
|
|
2333
|
-
function validateFactDeclarations(raw) {
|
|
2334
|
-
const problems = [];
|
|
2335
|
-
const owners = /* @__PURE__ */ new Map();
|
|
2336
|
-
for (const key of Object.keys(DERIVE_FIELDS)) owners.set(key, "built-in");
|
|
2337
|
-
for (const key of Object.keys(ASSIGNMENT_FIELDS)) owners.set(key, "built-in");
|
|
2338
|
-
for (const row of raw ?? []) {
|
|
2339
|
-
const name = (row?.name ?? "").trim();
|
|
2340
|
-
if (!/^[a-z][a-zA-Z0-9]*$/.test(name)) {
|
|
2341
|
-
problems.push(
|
|
2342
|
-
`fact "${row?.name ?? ""}": invalid name \u2014 must match /^[a-z][a-zA-Z0-9]*$/`
|
|
2343
|
-
);
|
|
2344
|
-
continue;
|
|
2345
|
-
}
|
|
2346
|
-
const type = (row.type ?? "").trim();
|
|
2347
|
-
if (type !== "bool" && type !== "number" && type !== "attestation") {
|
|
2348
|
-
problems.push(
|
|
2349
|
-
`fact "${name}": invalid type "${row.type ?? ""}" \u2014 expected bool, number, or attestation`
|
|
2350
|
-
);
|
|
2351
|
-
continue;
|
|
2352
|
-
}
|
|
2353
|
-
if (type === "attestation") {
|
|
2354
|
-
const binds = (row.binds ?? "none").toString().trim() || "none";
|
|
2355
|
-
if (binds !== "plan" && binds !== "commit" && binds !== "none") {
|
|
2356
|
-
problems.push(
|
|
2357
|
-
`fact "${name}": invalid binds "${row.binds}" \u2014 expected plan, commit, or none`
|
|
2358
|
-
);
|
|
2359
|
-
continue;
|
|
2360
|
-
}
|
|
2361
|
-
}
|
|
2362
|
-
const decl = type === "attestation" ? { name, type, binds: "none" } : { name, type };
|
|
2363
|
-
const keys = factFieldNames(decl).registryKeys;
|
|
2364
|
-
const collidingKey = keys.find((k) => owners.has(k));
|
|
2365
|
-
if (collidingKey !== void 0) {
|
|
2366
|
-
const owner = owners.get(collidingKey);
|
|
2367
|
-
if (owner === "built-in") {
|
|
2368
|
-
problems.push(`fact "${name}": exported field "${collidingKey}" collides with a built-in field`);
|
|
2369
|
-
} else if (owner === name) {
|
|
2370
|
-
problems.push(`fact "${name}": duplicate declaration (a fact named "${name}" is already declared)`);
|
|
2371
|
-
} else {
|
|
2372
|
-
problems.push(`fact "${name}": exported field "${collidingKey}" collides with fact "${owner}"`);
|
|
2373
|
-
}
|
|
2374
|
-
continue;
|
|
2375
|
-
}
|
|
2376
|
-
for (const key of keys) owners.set(key, name);
|
|
2377
|
-
}
|
|
2378
|
-
return problems;
|
|
2379
|
-
}
|
|
2380
2380
|
function serializeIntegrationConfig(integrations) {
|
|
2381
2381
|
const lines = [];
|
|
2382
2382
|
if (integrations.claudePluginDir) {
|
|
@@ -3456,7 +3456,6 @@ var init_config2 = __esm({
|
|
|
3456
3456
|
init_agents_schema();
|
|
3457
3457
|
init_slug();
|
|
3458
3458
|
init_fact_registry();
|
|
3459
|
-
init_query();
|
|
3460
3459
|
init_terminal_schema();
|
|
3461
3460
|
init_workspace_visibility_schema();
|
|
3462
3461
|
DEFAULT_DERIVE_CONFIG = {
|
|
@@ -4259,7 +4258,8 @@ function rowToSession(row) {
|
|
|
4259
4258
|
transcriptPath: row.transcript_path ?? null,
|
|
4260
4259
|
pid: row.pid ?? null,
|
|
4261
4260
|
pidStartedAt: row.pid_started_at ?? null,
|
|
4262
|
-
originalHeadSha: row.original_head_sha ?? null
|
|
4261
|
+
originalHeadSha: row.original_head_sha ?? null,
|
|
4262
|
+
updatedAt: row.updated_at ?? null
|
|
4263
4263
|
};
|
|
4264
4264
|
}
|
|
4265
4265
|
async function parseSessionsIndex(_projectDir, projectSlug) {
|
|
@@ -4774,24 +4774,28 @@ async function getStatusConfig() {
|
|
|
4774
4774
|
if (_cachedConfig) return _cachedConfig;
|
|
4775
4775
|
const config = await readConfig();
|
|
4776
4776
|
if (config.statuses) {
|
|
4777
|
+
const sc = config.statuses;
|
|
4778
|
+
const defaults = sc.statuses.length === 0 ? buildDefaultStatusConfig() : null;
|
|
4779
|
+
const effectiveStatuses = defaults ? defaults.statuses : sc.statuses;
|
|
4780
|
+
const effectiveOrder = defaults ? defaults.order : sc.order;
|
|
4777
4781
|
const terminalSet = new Set(
|
|
4778
|
-
|
|
4782
|
+
effectiveStatuses.filter((s) => s.terminal).map((s) => s.id)
|
|
4779
4783
|
);
|
|
4780
|
-
const hasCustomTransitions =
|
|
4781
|
-
const effectiveTransitions = hasCustomTransitions ?
|
|
4784
|
+
const hasCustomTransitions = sc.transitions.length > 0;
|
|
4785
|
+
const effectiveTransitions = hasCustomTransitions ? sc.transitions : Array.from(DEFAULT_TRANSITION_TABLE.entries()).map(([key, to]) => {
|
|
4782
4786
|
const [from, command] = key.split(":");
|
|
4783
4787
|
return { from, command, to };
|
|
4784
4788
|
});
|
|
4785
|
-
const accepted = acceptFactDeclarations(normalizeFactDeclarations(
|
|
4789
|
+
const accepted = acceptFactDeclarations(normalizeFactDeclarations(sc.facts ?? null));
|
|
4786
4790
|
_cachedConfig = {
|
|
4787
4791
|
custom: true,
|
|
4788
|
-
statuses:
|
|
4789
|
-
order:
|
|
4792
|
+
statuses: effectiveStatuses,
|
|
4793
|
+
order: effectiveOrder,
|
|
4790
4794
|
transitions: effectiveTransitions,
|
|
4791
4795
|
transitionTable: buildTransitionTable(effectiveTransitions),
|
|
4792
4796
|
terminalStatuses: terminalSet.size > 0 ? terminalSet : /* @__PURE__ */ new Set(["completed", "failed"]),
|
|
4793
|
-
derive:
|
|
4794
|
-
facts:
|
|
4797
|
+
derive: sc.derive ?? null,
|
|
4798
|
+
facts: sc.facts ?? null,
|
|
4795
4799
|
factDeclarations: accepted,
|
|
4796
4800
|
deriveRegistry: buildDeriveRegistry(accepted),
|
|
4797
4801
|
queryRegistry: buildQueryRegistry(accepted)
|