syntaur 0.55.0 → 0.56.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-DmVNJO8J.js → _basePickBy-BboQhTYn.js} +1 -1
- package/dashboard/dist/assets/{_baseUniq-BtWQDHxm.js → _baseUniq-C6ARYdEJ.js} +1 -1
- package/dashboard/dist/assets/{arc-BDZ8fFmA.js → arc-D76wUYJ-.js} +1 -1
- package/dashboard/dist/assets/{architectureDiagram-2XIMDMQ5-DmE3bMva.js → architectureDiagram-2XIMDMQ5-eoW8_dbN.js} +1 -1
- package/dashboard/dist/assets/{blockDiagram-WCTKOSBZ-BUpzLbve.js → blockDiagram-WCTKOSBZ--XxaNbBK.js} +1 -1
- package/dashboard/dist/assets/{c4Diagram-IC4MRINW-5lB7kxgt.js → c4Diagram-IC4MRINW-D2B-NJq6.js} +1 -1
- package/dashboard/dist/assets/channel-BPykMjmL.js +1 -0
- package/dashboard/dist/assets/{chunk-4BX2VUAB-DdRqNqOP.js → chunk-4BX2VUAB-CY34rkdT.js} +1 -1
- package/dashboard/dist/assets/{chunk-55IACEB6-D_qI2OxO.js → chunk-55IACEB6-CLXE1Ejn.js} +1 -1
- package/dashboard/dist/assets/{chunk-FMBD7UC4-BMtQHZt3.js → chunk-FMBD7UC4-D00VtmIk.js} +1 -1
- package/dashboard/dist/assets/{chunk-JSJVCQXG-CeCGSMMb.js → chunk-JSJVCQXG-_EITJTaI.js} +1 -1
- package/dashboard/dist/assets/{chunk-KX2RTZJC-Biv2a0MB.js → chunk-KX2RTZJC-DrqZI_kX.js} +1 -1
- package/dashboard/dist/assets/{chunk-NQ4KR5QH-CbkEQT8f.js → chunk-NQ4KR5QH-DnYhUmZY.js} +1 -1
- package/dashboard/dist/assets/{chunk-QZHKN3VN-BU54yyBK.js → chunk-QZHKN3VN-CqCcFoFI.js} +1 -1
- package/dashboard/dist/assets/{chunk-WL4C6EOR-ypzKdtzY.js → chunk-WL4C6EOR-Bwx5h46l.js} +1 -1
- package/dashboard/dist/assets/classDiagram-VBA2DB6C-z8L393gl.js +1 -0
- package/dashboard/dist/assets/classDiagram-v2-RAHNMMFH-z8L393gl.js +1 -0
- package/dashboard/dist/assets/clone--rMJOGpf.js +1 -0
- package/dashboard/dist/assets/{cose-bilkent-S5V4N54A-Cfexs6Pq.js → cose-bilkent-S5V4N54A-QUZroYuH.js} +1 -1
- package/dashboard/dist/assets/{dagre-KLK3FWXG-BjdeaK5Z.js → dagre-KLK3FWXG-D8hYiZ7i.js} +1 -1
- package/dashboard/dist/assets/{diagram-E7M64L7V-BVZRb5bD.js → diagram-E7M64L7V-Cl_n980P.js} +1 -1
- package/dashboard/dist/assets/{diagram-IFDJBPK2-6fnO4hw1.js → diagram-IFDJBPK2-01DdmzmS.js} +1 -1
- package/dashboard/dist/assets/{diagram-P4PSJMXO-DX_fbvo0.js → diagram-P4PSJMXO-GcqkAPB2.js} +1 -1
- package/dashboard/dist/assets/{erDiagram-INFDFZHY-Dc-Ult_U.js → erDiagram-INFDFZHY-DQnXbhhn.js} +1 -1
- package/dashboard/dist/assets/{flowDiagram-PKNHOUZH-nrIBfe3g.js → flowDiagram-PKNHOUZH-DSmXtiZK.js} +1 -1
- package/dashboard/dist/assets/{ganttDiagram-A5KZAMGK-7zt_k1Nl.js → ganttDiagram-A5KZAMGK-BLyt9LDp.js} +1 -1
- package/dashboard/dist/assets/{gitGraphDiagram-K3NZZRJ6-2yK7iOPo.js → gitGraphDiagram-K3NZZRJ6-FWlr0I_j.js} +1 -1
- package/dashboard/dist/assets/{graph-DD0OOYtL.js → graph-Czw8ZNXY.js} +1 -1
- package/dashboard/dist/assets/index-EntCfH3I.css +1 -0
- package/dashboard/dist/assets/index-zHNBGpC7.js +602 -0
- package/dashboard/dist/assets/{infoDiagram-LFFYTUFH-7nottSf8.js → infoDiagram-LFFYTUFH-CygGWMzd.js} +1 -1
- package/dashboard/dist/assets/{ishikawaDiagram-PHBUUO56-DHd9lm-i.js → ishikawaDiagram-PHBUUO56-39XaFufR.js} +1 -1
- package/dashboard/dist/assets/{journeyDiagram-4ABVD52K-BS86Ecdy.js → journeyDiagram-4ABVD52K-DCMzi84v.js} +1 -1
- package/dashboard/dist/assets/{kanban-definition-K7BYSVSG-B9uccuva.js → kanban-definition-K7BYSVSG-RSNF4GmM.js} +1 -1
- package/dashboard/dist/assets/{layout-Bq6MeguZ.js → layout-AOYFASCy.js} +1 -1
- package/dashboard/dist/assets/{linear-XkyDYAy6.js → linear-Bf-cRRMe.js} +1 -1
- package/dashboard/dist/assets/{mermaid.core-BH9rlHr4.js → mermaid.core-7QJzPWTu.js} +4 -4
- package/dashboard/dist/assets/{mindmap-definition-YRQLILUH-Cc-hDkvW.js → mindmap-definition-YRQLILUH-Ck4L1K7y.js} +1 -1
- package/dashboard/dist/assets/{pieDiagram-SKSYHLDU-BFIPTP1F.js → pieDiagram-SKSYHLDU-BHEH_9Yh.js} +1 -1
- package/dashboard/dist/assets/{quadrantDiagram-337W2JSQ-yVL8WrSz.js → quadrantDiagram-337W2JSQ-DScQHhsU.js} +1 -1
- package/dashboard/dist/assets/{requirementDiagram-Z7DCOOCP-DxWjrQut.js → requirementDiagram-Z7DCOOCP-DLmxwUdt.js} +1 -1
- package/dashboard/dist/assets/{sankeyDiagram-WA2Y5GQK-BPkz1Yl7.js → sankeyDiagram-WA2Y5GQK-B6OZtKmg.js} +1 -1
- package/dashboard/dist/assets/{sequenceDiagram-2WXFIKYE-DlgeS-S7.js → sequenceDiagram-2WXFIKYE-woFPqQIY.js} +1 -1
- package/dashboard/dist/assets/{stateDiagram-RAJIS63D-DBpOK-Ql.js → stateDiagram-RAJIS63D-Db9HV_HG.js} +1 -1
- package/dashboard/dist/assets/stateDiagram-v2-FVOUBMTO-DZsj07hg.js +1 -0
- package/dashboard/dist/assets/{timeline-definition-YZTLITO2-abDjZ0W-.js → timeline-definition-YZTLITO2-CGVOTXAD.js} +1 -1
- package/dashboard/dist/assets/{treemap-KZPCXAKY-bF6AoBlY.js → treemap-KZPCXAKY-CGmqtjaL.js} +1 -1
- package/dashboard/dist/assets/{vennDiagram-LZ73GAT5-lUeCE7KT.js → vennDiagram-LZ73GAT5-DAuyqqKn.js} +1 -1
- package/dashboard/dist/assets/{xychartDiagram-JWTSCODW-ByECFP6v.js → xychartDiagram-JWTSCODW--uOFgr6-.js} +1 -1
- package/dashboard/dist/index.html +2 -2
- package/dist/dashboard/server.js +290 -23
- package/dist/dashboard/server.js.map +1 -1
- package/dist/index.js +290 -23
- package/dist/index.js.map +1 -1
- package/dist/launch/index.d.ts +25 -0
- package/dist/launch/index.js +187 -1
- 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/codex/.codex-plugin/plugin.json +1 -1
- 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-SCYGGwh4.js +0 -1
- package/dashboard/dist/assets/classDiagram-VBA2DB6C-DDovN08E.js +0 -1
- package/dashboard/dist/assets/classDiagram-v2-RAHNMMFH-DDovN08E.js +0 -1
- package/dashboard/dist/assets/clone-DjHcKoH3.js +0 -1
- package/dashboard/dist/assets/index-BKfPPYKw.js +0 -602
- package/dashboard/dist/assets/index-C8THdvxD.css +0 -1
- package/dashboard/dist/assets/stateDiagram-v2-FVOUBMTO-CS61beS7.js +0 -1
package/dist/launch/index.d.ts
CHANGED
|
@@ -180,6 +180,30 @@ interface DeriveConfig {
|
|
|
180
180
|
headline: HeadlineProjection;
|
|
181
181
|
}
|
|
182
182
|
|
|
183
|
+
/**
|
|
184
|
+
* Search-config schema — the shape behind the `search:` block in
|
|
185
|
+
* `~/.syntaur/config.md` and the command palette's customizable behavior.
|
|
186
|
+
*
|
|
187
|
+
* Browser-safe: no Node-only imports. Consumed by both the server
|
|
188
|
+
* (`src/dashboard/api-search-config.ts`, `src/utils/config.ts`) and the SPA
|
|
189
|
+
* (via the `@shared/search-schema` alias) so palette aliases, default scope, and
|
|
190
|
+
* external-ID indexing validate against ONE source of truth.
|
|
191
|
+
*
|
|
192
|
+
* See `claude-info/plans/2026-06-15-command-palette-ui-design.md`.
|
|
193
|
+
*/
|
|
194
|
+
/** The five searchable entity kinds an alias prefix can target. */
|
|
195
|
+
type EntityKind = 'assignment' | 'project' | 'todo' | 'server' | 'playbook';
|
|
196
|
+
/** Default search scope: `all` (everything) or one entity kind. */
|
|
197
|
+
type DefaultScope = 'all' | EntityKind;
|
|
198
|
+
interface SearchConfig {
|
|
199
|
+
/** With no explicit type prefix, inject an implicit `kind:<scope>` gate. `all` = no gate. */
|
|
200
|
+
defaultScope: DefaultScope;
|
|
201
|
+
/** Prefix → entity kind. Replaces the hardcoded palette `TYPE_ALIASES`. */
|
|
202
|
+
aliases: Record<string, EntityKind>;
|
|
203
|
+
/** Fold external IDs into the index + enable `jira:`/`externalid:`/bare-ID matching. */
|
|
204
|
+
externalIds: boolean;
|
|
205
|
+
}
|
|
206
|
+
|
|
183
207
|
interface WorkspaceVisibilityConfig {
|
|
184
208
|
/** Names of workspaces hidden from the left nav. Absent = visible. */
|
|
185
209
|
hidden: string[];
|
|
@@ -281,6 +305,7 @@ interface SyntaurConfig {
|
|
|
281
305
|
theme: ThemeConfig | null;
|
|
282
306
|
hotkeys: HotkeyBindingsConfig | null;
|
|
283
307
|
terminal: TerminalChoice | null;
|
|
308
|
+
searchConfig: SearchConfig | null;
|
|
284
309
|
workspaceVisibility: WorkspaceVisibilityConfig;
|
|
285
310
|
}
|
|
286
311
|
|
package/dist/launch/index.js
CHANGED
|
@@ -2001,6 +2001,74 @@ var init_fact_registry = __esm({
|
|
|
2001
2001
|
}
|
|
2002
2002
|
});
|
|
2003
2003
|
|
|
2004
|
+
// src/utils/search-schema.ts
|
|
2005
|
+
function isEntityKind(value) {
|
|
2006
|
+
return typeof value === "string" && ENTITY_KINDS.includes(value);
|
|
2007
|
+
}
|
|
2008
|
+
function isDefaultScope(value) {
|
|
2009
|
+
return value === "all" || isEntityKind(value);
|
|
2010
|
+
}
|
|
2011
|
+
function normalizeSearchConfig(raw) {
|
|
2012
|
+
if (!raw || typeof raw !== "object") {
|
|
2013
|
+
return cloneDefaultSearchConfig();
|
|
2014
|
+
}
|
|
2015
|
+
const r = raw;
|
|
2016
|
+
const defaultScope = isDefaultScope(r["defaultScope"]) ? r["defaultScope"] : DEFAULT_SEARCH_CONFIG.defaultScope;
|
|
2017
|
+
const externalIds = typeof r["externalIds"] === "boolean" ? r["externalIds"] : DEFAULT_SEARCH_CONFIG.externalIds;
|
|
2018
|
+
let aliases;
|
|
2019
|
+
if (r["aliases"] && typeof r["aliases"] === "object") {
|
|
2020
|
+
aliases = {};
|
|
2021
|
+
for (const [key, value] of Object.entries(r["aliases"])) {
|
|
2022
|
+
if (ALIAS_KEY_RE.test(key) && key !== RESERVED_ALIAS && !SEARCH_FIELD_NAMES.includes(key) && isEntityKind(value)) {
|
|
2023
|
+
aliases[key] = value;
|
|
2024
|
+
}
|
|
2025
|
+
}
|
|
2026
|
+
} else {
|
|
2027
|
+
aliases = { ...DEFAULT_SEARCH_CONFIG.aliases };
|
|
2028
|
+
}
|
|
2029
|
+
return { defaultScope, aliases, externalIds };
|
|
2030
|
+
}
|
|
2031
|
+
function cloneDefaultSearchConfig() {
|
|
2032
|
+
return {
|
|
2033
|
+
defaultScope: DEFAULT_SEARCH_CONFIG.defaultScope,
|
|
2034
|
+
aliases: { ...DEFAULT_SEARCH_CONFIG.aliases },
|
|
2035
|
+
externalIds: DEFAULT_SEARCH_CONFIG.externalIds
|
|
2036
|
+
};
|
|
2037
|
+
}
|
|
2038
|
+
var ENTITY_KINDS, DEFAULT_SEARCH_CONFIG, SEARCH_FIELD_NAMES, RESERVED_ALIAS, ALIAS_KEY_RE;
|
|
2039
|
+
var init_search_schema = __esm({
|
|
2040
|
+
"src/utils/search-schema.ts"() {
|
|
2041
|
+
"use strict";
|
|
2042
|
+
ENTITY_KINDS = [
|
|
2043
|
+
"assignment",
|
|
2044
|
+
"project",
|
|
2045
|
+
"todo",
|
|
2046
|
+
"server",
|
|
2047
|
+
"playbook"
|
|
2048
|
+
];
|
|
2049
|
+
DEFAULT_SEARCH_CONFIG = {
|
|
2050
|
+
defaultScope: "all",
|
|
2051
|
+
aliases: { a: "assignment", p: "project", t: "todo", s: "server", pb: "playbook" },
|
|
2052
|
+
externalIds: true
|
|
2053
|
+
};
|
|
2054
|
+
SEARCH_FIELD_NAMES = [
|
|
2055
|
+
"kind",
|
|
2056
|
+
"status",
|
|
2057
|
+
"tag",
|
|
2058
|
+
"tags",
|
|
2059
|
+
"assignee",
|
|
2060
|
+
"type",
|
|
2061
|
+
"project",
|
|
2062
|
+
"externalid",
|
|
2063
|
+
"jira",
|
|
2064
|
+
"title",
|
|
2065
|
+
"search"
|
|
2066
|
+
];
|
|
2067
|
+
RESERVED_ALIAS = "all";
|
|
2068
|
+
ALIAS_KEY_RE = /^[a-z][a-z0-9]*$/;
|
|
2069
|
+
}
|
|
2070
|
+
});
|
|
2071
|
+
|
|
2004
2072
|
// src/utils/workspace-visibility-schema.ts
|
|
2005
2073
|
function normalizeHiddenList(input) {
|
|
2006
2074
|
if (!Array.isArray(input)) return [];
|
|
@@ -2041,18 +2109,22 @@ __export(config_exports, {
|
|
|
2041
2109
|
buildDefaultStatusConfig: () => buildDefaultStatusConfig,
|
|
2042
2110
|
deleteAgentsConfig: () => deleteAgentsConfig,
|
|
2043
2111
|
deleteHotkeyBindingsConfig: () => deleteHotkeyBindingsConfig,
|
|
2112
|
+
deleteSearchConfig: () => deleteSearchConfig,
|
|
2044
2113
|
deleteStatusConfig: () => deleteStatusConfig,
|
|
2045
2114
|
deleteTerminalConfig: () => deleteTerminalConfig,
|
|
2046
2115
|
deleteThemeConfig: () => deleteThemeConfig,
|
|
2047
2116
|
deleteWorkspaceVisibilityConfig: () => deleteWorkspaceVisibilityConfig,
|
|
2048
2117
|
getAgents: () => getAgents,
|
|
2049
2118
|
getAssignmentTypes: () => getAssignmentTypes,
|
|
2119
|
+
getSearchConfig: () => getSearchConfig,
|
|
2050
2120
|
getTerminal: () => getTerminal,
|
|
2051
2121
|
normalizeFactDeclarations: () => normalizeFactDeclarations,
|
|
2052
2122
|
parseAgentCommand: () => parseAgentCommand,
|
|
2123
|
+
parseSearchConfig: () => parseSearchConfig,
|
|
2053
2124
|
parseStatusConfig: () => parseStatusConfig,
|
|
2054
2125
|
parseTerminalConfig: () => parseTerminalConfig,
|
|
2055
2126
|
readConfig: () => readConfig,
|
|
2127
|
+
serializeSearchConfig: () => serializeSearchConfig,
|
|
2056
2128
|
serializeStatusConfig: () => serializeStatusConfig,
|
|
2057
2129
|
toTitleCase: () => toTitleCase,
|
|
2058
2130
|
updateAgentsConfig: () => updateAgentsConfig,
|
|
@@ -2066,6 +2138,7 @@ __export(config_exports, {
|
|
|
2066
2138
|
validateFactDeclarations: () => validateFactDeclarations,
|
|
2067
2139
|
writeAgentsConfig: () => writeAgentsConfig,
|
|
2068
2140
|
writeHotkeyBindingsConfig: () => writeHotkeyBindingsConfig,
|
|
2141
|
+
writeSearchConfig: () => writeSearchConfig,
|
|
2069
2142
|
writeStatusConfig: () => writeStatusConfig,
|
|
2070
2143
|
writeTerminalConfig: () => writeTerminalConfig,
|
|
2071
2144
|
writeThemeConfig: () => writeThemeConfig,
|
|
@@ -2873,7 +2946,7 @@ function stripTopLevelBlock(fmBlock, key) {
|
|
|
2873
2946
|
if (!blockStart) {
|
|
2874
2947
|
return fmBlock.replace(/\n+$/, "");
|
|
2875
2948
|
}
|
|
2876
|
-
const startIdx =
|
|
2949
|
+
const startIdx = blockStart.index ?? 0;
|
|
2877
2950
|
const before = fmBlock.slice(0, startIdx);
|
|
2878
2951
|
const after = fmBlock.slice(startIdx + blockStart[0].length);
|
|
2879
2952
|
const remaining = after.split("\n");
|
|
@@ -3299,6 +3372,116 @@ ${cleanedFm}
|
|
|
3299
3372
|
---${afterFrontmatter}`;
|
|
3300
3373
|
await writeFileForce(configPath, newContent);
|
|
3301
3374
|
}
|
|
3375
|
+
function parseSearchConfig(content) {
|
|
3376
|
+
const match = content.match(/^---\n([\s\S]*?)\n---/);
|
|
3377
|
+
if (!match) return null;
|
|
3378
|
+
const fmBlock = match[1];
|
|
3379
|
+
const blockStart = fmBlock.match(/^search:\s*$/m);
|
|
3380
|
+
if (!blockStart) return null;
|
|
3381
|
+
const startIdx = (blockStart.index ?? 0) + blockStart[0].length;
|
|
3382
|
+
const lines = fmBlock.slice(startIdx).split("\n");
|
|
3383
|
+
const unquote = (v) => {
|
|
3384
|
+
const t = v.trim();
|
|
3385
|
+
if (t.startsWith('"') && t.endsWith('"') || t.startsWith("'") && t.endsWith("'")) {
|
|
3386
|
+
return t.slice(1, -1);
|
|
3387
|
+
}
|
|
3388
|
+
return t;
|
|
3389
|
+
};
|
|
3390
|
+
const raw = {};
|
|
3391
|
+
let inAliases = false;
|
|
3392
|
+
for (const line of lines) {
|
|
3393
|
+
if (line.trim() === "") continue;
|
|
3394
|
+
const trimmed = line.trimStart();
|
|
3395
|
+
const indent = line.length - trimmed.length;
|
|
3396
|
+
if (indent === 0) break;
|
|
3397
|
+
if (indent <= 2) {
|
|
3398
|
+
inAliases = false;
|
|
3399
|
+
if (trimmed === "aliases:") {
|
|
3400
|
+
inAliases = true;
|
|
3401
|
+
raw.aliases = {};
|
|
3402
|
+
continue;
|
|
3403
|
+
}
|
|
3404
|
+
const ci = trimmed.indexOf(":");
|
|
3405
|
+
if (ci <= 0) continue;
|
|
3406
|
+
const key = trimmed.slice(0, ci).trim();
|
|
3407
|
+
const value = unquote(trimmed.slice(ci + 1).trim());
|
|
3408
|
+
if (key === "defaultScope") {
|
|
3409
|
+
raw.defaultScope = value;
|
|
3410
|
+
} else if (key === "externalIds") {
|
|
3411
|
+
const v = value.toLowerCase();
|
|
3412
|
+
if (v === "true") raw.externalIds = true;
|
|
3413
|
+
else if (v === "false") raw.externalIds = false;
|
|
3414
|
+
}
|
|
3415
|
+
} else if (inAliases) {
|
|
3416
|
+
const ci = trimmed.indexOf(":");
|
|
3417
|
+
if (ci <= 0) continue;
|
|
3418
|
+
raw.aliases ??= {};
|
|
3419
|
+
raw.aliases[trimmed.slice(0, ci).trim()] = unquote(trimmed.slice(ci + 1).trim());
|
|
3420
|
+
}
|
|
3421
|
+
}
|
|
3422
|
+
return normalizeSearchConfig(raw);
|
|
3423
|
+
}
|
|
3424
|
+
function serializeSearchConfig(search) {
|
|
3425
|
+
const cfg = normalizeSearchConfig(search);
|
|
3426
|
+
const lines = ["search:"];
|
|
3427
|
+
lines.push(` defaultScope: ${cfg.defaultScope}`);
|
|
3428
|
+
lines.push(" aliases:");
|
|
3429
|
+
for (const [prefix, kind] of Object.entries(cfg.aliases)) {
|
|
3430
|
+
lines.push(` ${prefix}: ${kind}`);
|
|
3431
|
+
}
|
|
3432
|
+
lines.push(` externalIds: ${cfg.externalIds ? "true" : "false"}`);
|
|
3433
|
+
return lines.join("\n");
|
|
3434
|
+
}
|
|
3435
|
+
async function writeSearchConfig(search) {
|
|
3436
|
+
const configPath = resolve6(syntaurRoot(), "config.md");
|
|
3437
|
+
const searchBlock = serializeSearchConfig(search);
|
|
3438
|
+
if (!await fileExists(configPath)) {
|
|
3439
|
+
const content = `---
|
|
3440
|
+
version: "2.0"
|
|
3441
|
+
defaultProjectDir: ~/projects
|
|
3442
|
+
${searchBlock}
|
|
3443
|
+
---
|
|
3444
|
+
`;
|
|
3445
|
+
await writeFileForce(configPath, content);
|
|
3446
|
+
return;
|
|
3447
|
+
}
|
|
3448
|
+
const existing = await readFile5(configPath, "utf-8");
|
|
3449
|
+
const fmMatch = existing.match(/^(---\n)([\s\S]*?)\n(---)/);
|
|
3450
|
+
if (!fmMatch) {
|
|
3451
|
+
const content = `---
|
|
3452
|
+
version: "2.0"
|
|
3453
|
+
${searchBlock}
|
|
3454
|
+
---
|
|
3455
|
+
${existing}`;
|
|
3456
|
+
await writeFileForce(configPath, content);
|
|
3457
|
+
return;
|
|
3458
|
+
}
|
|
3459
|
+
const fmBlock = fmMatch[2];
|
|
3460
|
+
const afterFrontmatter = existing.slice(fmMatch[0].length);
|
|
3461
|
+
const cleanedFm = stripTopLevelBlock(fmBlock, "search");
|
|
3462
|
+
const newContent = `---
|
|
3463
|
+
${cleanedFm}
|
|
3464
|
+
${searchBlock}
|
|
3465
|
+
---${afterFrontmatter}`;
|
|
3466
|
+
await writeFileForce(configPath, newContent);
|
|
3467
|
+
}
|
|
3468
|
+
async function deleteSearchConfig() {
|
|
3469
|
+
const configPath = resolve6(syntaurRoot(), "config.md");
|
|
3470
|
+
if (!await fileExists(configPath)) return;
|
|
3471
|
+
const existing = await readFile5(configPath, "utf-8");
|
|
3472
|
+
const fmMatch = existing.match(/^(---\n)([\s\S]*?)\n(---)/);
|
|
3473
|
+
if (!fmMatch) return;
|
|
3474
|
+
const fmBlock = fmMatch[2];
|
|
3475
|
+
const afterFrontmatter = existing.slice(fmMatch[0].length);
|
|
3476
|
+
const cleanedFm = stripTopLevelBlock(fmBlock, "search");
|
|
3477
|
+
const newContent = `---
|
|
3478
|
+
${cleanedFm}
|
|
3479
|
+
---${afterFrontmatter}`;
|
|
3480
|
+
await writeFileForce(configPath, newContent);
|
|
3481
|
+
}
|
|
3482
|
+
function getSearchConfig(config) {
|
|
3483
|
+
return config.searchConfig ?? DEFAULT_SEARCH_CONFIG;
|
|
3484
|
+
}
|
|
3302
3485
|
async function updateIntegrationConfig(integrations) {
|
|
3303
3486
|
const configPath = resolve6(syntaurRoot(), "config.md");
|
|
3304
3487
|
const nextIntegrations = {
|
|
@@ -3470,6 +3653,7 @@ async function readConfig() {
|
|
|
3470
3653
|
return null;
|
|
3471
3654
|
}
|
|
3472
3655
|
})(),
|
|
3656
|
+
searchConfig: parseSearchConfig(content),
|
|
3473
3657
|
workspaceVisibility: parseWorkspaceVisibilityConfig(fmBlock)
|
|
3474
3658
|
};
|
|
3475
3659
|
}
|
|
@@ -3548,6 +3732,7 @@ var init_config2 = __esm({
|
|
|
3548
3732
|
init_derive_config();
|
|
3549
3733
|
init_fact_registry();
|
|
3550
3734
|
init_terminal_schema();
|
|
3735
|
+
init_search_schema();
|
|
3551
3736
|
init_workspace_visibility_schema();
|
|
3552
3737
|
DEFAULT_ASSIGNMENT_TYPES = {
|
|
3553
3738
|
definitions: [
|
|
@@ -3588,6 +3773,7 @@ var init_config2 = __esm({
|
|
|
3588
3773
|
theme: null,
|
|
3589
3774
|
hotkeys: null,
|
|
3590
3775
|
terminal: null,
|
|
3776
|
+
searchConfig: null,
|
|
3591
3777
|
workspaceVisibility: {
|
|
3592
3778
|
hidden: []
|
|
3593
3779
|
}
|