@mrciphersmith/keryx 0.2.134 → 0.2.136
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/dist/cli.js +57 -12
- package/dist/core.js +13 -1
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -37876,7 +37876,8 @@ function createFlowService(deps) {
|
|
|
37876
37876
|
});
|
|
37877
37877
|
} catch {}
|
|
37878
37878
|
}
|
|
37879
|
-
|
|
37879
|
+
const shared = duplicateFlowIds(summaries.map((summary) => summary.id));
|
|
37880
|
+
return summaries.map((summary) => ({ ...summary, duplicateId: shared.has(summary.id) }));
|
|
37880
37881
|
},
|
|
37881
37882
|
async get({ cwd, id }) {
|
|
37882
37883
|
return (await load(cwd, id)).flow;
|
|
@@ -39197,7 +39198,8 @@ function createMetaprojectAdapter(cwd, overrides = {}) {
|
|
|
39197
39198
|
title: f.title,
|
|
39198
39199
|
tasksDone: f.tasksDone,
|
|
39199
39200
|
tasksTotal: f.tasksTotal,
|
|
39200
|
-
dir: f.dir
|
|
39201
|
+
dir: f.dir,
|
|
39202
|
+
...f.duplicateId !== undefined ? { duplicateId: f.duplicateId } : {}
|
|
39201
39203
|
}))
|
|
39202
39204
|
};
|
|
39203
39205
|
} catch (cause) {
|
|
@@ -39702,8 +39704,14 @@ function formatFlowStatus(result) {
|
|
|
39702
39704
|
if (result.flows.length === 0) {
|
|
39703
39705
|
return { output: "No matching flows.", isError: false };
|
|
39704
39706
|
}
|
|
39705
|
-
const lines = result.flows.map((f) => ` - ${f.id}${f.slug !== undefined ? ` (${f.slug})` : ""} [${f.status}] ${f.title} ` + `(${f.tasksDone}/${f.tasksTotal} tasks)`);
|
|
39706
|
-
|
|
39707
|
+
const lines = result.flows.map((f) => ` - ${f.id}${f.duplicateId === true ? " \u2717 duplicate id" : ""}` + `${f.slug !== undefined ? ` (${f.slug})` : ""} [${f.status}] ${f.title} ` + `(${f.tasksDone}/${f.tasksTotal} tasks)`);
|
|
39708
|
+
const output = [`Flows (${result.flows.length}):`, ...lines];
|
|
39709
|
+
const duplicated = result.flows.filter((f) => f.duplicateId === true);
|
|
39710
|
+
if (duplicated.length > 0) {
|
|
39711
|
+
const ids = [...new Set(duplicated.map((f) => f.id))].sort();
|
|
39712
|
+
output.push("", `${ids.length} duplicated id(s) \u2014 every bare-id command on these is refused as ambiguous, ` + "so the repair has to name the directory:", ...duplicated.map((f) => ` - ${f.id}: ${f.dir}`), 'Repair with: keryx flow renumber <dir> --to <free id> --reason "<why>"');
|
|
39713
|
+
}
|
|
39714
|
+
return { output: output.join(`
|
|
39707
39715
|
`), isError: false };
|
|
39708
39716
|
}
|
|
39709
39717
|
function formatSymbol(result) {
|
|
@@ -51133,7 +51141,7 @@ import path47 from "path";
|
|
|
51133
51141
|
// package.json
|
|
51134
51142
|
var package_default = {
|
|
51135
51143
|
name: "@mrciphersmith/keryx",
|
|
51136
|
-
version: "0.2.
|
|
51144
|
+
version: "0.2.136",
|
|
51137
51145
|
description: "Version-controlled project context for AI coding agents: code graph, architecture wiki, project memory, relevant tests, quality signals, and task flows.",
|
|
51138
51146
|
private: false,
|
|
51139
51147
|
publishConfig: {
|
|
@@ -95024,6 +95032,7 @@ async function createShellChrome(otui, renderer, opts) {
|
|
|
95024
95032
|
flexDirection: "column",
|
|
95025
95033
|
border: ["left"],
|
|
95026
95034
|
borderColor: getTheme().highlight,
|
|
95035
|
+
backgroundColor: getTheme().panel,
|
|
95027
95036
|
paddingLeft: SIDEBAR_PADDING_LEFT,
|
|
95028
95037
|
paddingRight: SIDEBAR_PADDING_RIGHT,
|
|
95029
95038
|
paddingTop: 1
|
|
@@ -95087,10 +95096,14 @@ async function createShellChrome(otui, renderer, opts) {
|
|
|
95087
95096
|
flexShrink: 0,
|
|
95088
95097
|
flexDirection: "row",
|
|
95089
95098
|
justifyContent: "space-between",
|
|
95099
|
+
backgroundColor: getTheme().panel,
|
|
95090
95100
|
paddingLeft: 1,
|
|
95091
95101
|
paddingRight: 1
|
|
95092
95102
|
});
|
|
95093
|
-
const headerLeft = new otui.TextRenderable(r, {
|
|
95103
|
+
const headerLeft = new otui.TextRenderable(r, {
|
|
95104
|
+
id: "header-left",
|
|
95105
|
+
content: otui.t`${otui.bold(`\u25C6 ${opts.title}`)}`
|
|
95106
|
+
});
|
|
95094
95107
|
header.add(headerLeft);
|
|
95095
95108
|
const headerRight = new otui.TextRenderable(r, { id: "header-right", content: "" });
|
|
95096
95109
|
header.add(headerRight);
|
|
@@ -95207,7 +95220,8 @@ async function createShellChrome(otui, renderer, opts) {
|
|
|
95207
95220
|
flexDirection: "column",
|
|
95208
95221
|
borderStyle: "rounded",
|
|
95209
95222
|
border: true,
|
|
95210
|
-
borderColor: getTheme().
|
|
95223
|
+
borderColor: getTheme().highlight,
|
|
95224
|
+
backgroundColor: getTheme().panel,
|
|
95211
95225
|
paddingLeft: 1,
|
|
95212
95226
|
paddingRight: 1
|
|
95213
95227
|
});
|
|
@@ -95290,6 +95304,7 @@ async function createShellChrome(otui, renderer, opts) {
|
|
|
95290
95304
|
flexShrink: 0,
|
|
95291
95305
|
flexDirection: "row",
|
|
95292
95306
|
justifyContent: "space-between",
|
|
95307
|
+
backgroundColor: getTheme().panel,
|
|
95293
95308
|
paddingLeft: 1,
|
|
95294
95309
|
paddingRight: 1
|
|
95295
95310
|
});
|
|
@@ -95519,11 +95534,15 @@ async function createShellChrome(otui, renderer, opts) {
|
|
|
95519
95534
|
r.setBackgroundColor(theme.bg);
|
|
95520
95535
|
} catch {}
|
|
95521
95536
|
sidebar.borderColor = theme.highlight;
|
|
95537
|
+
sidebar.backgroundColor = theme.panel;
|
|
95538
|
+
header.backgroundColor = theme.panel;
|
|
95539
|
+
footer.backgroundColor = theme.panel;
|
|
95522
95540
|
dock.backgroundColor = theme.panel;
|
|
95523
95541
|
dock.borderColor = theme.border;
|
|
95524
95542
|
queueDock.backgroundColor = theme.panel;
|
|
95525
95543
|
queueDock.borderColor = theme.border;
|
|
95526
|
-
composer.borderColor = theme.
|
|
95544
|
+
composer.borderColor = theme.highlight;
|
|
95545
|
+
composer.backgroundColor = theme.panel;
|
|
95527
95546
|
menu.backgroundColor = theme.panel;
|
|
95528
95547
|
menu.focusedBackgroundColor = theme.panel;
|
|
95529
95548
|
menu.selectedBackgroundColor = theme.highlight;
|
|
@@ -97930,11 +97949,15 @@ function presentSessionInfo(openModal, otui, chrome, options) {
|
|
|
97930
97949
|
} catch {}
|
|
97931
97950
|
};
|
|
97932
97951
|
let unsubscribeKey;
|
|
97952
|
+
const contextRows = Math.max(1, formatContextUsageText(snapshot.context).trimEnd().split(`
|
|
97953
|
+
`).length);
|
|
97954
|
+
const contentRows = Math.max(snapshot.sessionRows.length + snapshot.usageRows.length, contextRows, snapshot.workspaceLines.length, snapshot.flowLines.length);
|
|
97933
97955
|
const handle = openModal(otui, chrome, {
|
|
97934
97956
|
title: "/status",
|
|
97935
97957
|
tabs: statusModalTabs(snapshot),
|
|
97936
97958
|
initialTab: "status",
|
|
97937
97959
|
footer: SESSION_INFO_FOOTER,
|
|
97960
|
+
contentRows,
|
|
97938
97961
|
renderTab: (tabId, body, ctx) => {
|
|
97939
97962
|
const renderer = options.renderer ?? chrome?.renderer;
|
|
97940
97963
|
const width = ctx?.width;
|
|
@@ -98429,6 +98452,7 @@ function presentThemePicker(openModal, otui, chrome, options) {
|
|
|
98429
98452
|
tabs: [{ id: "picker", label: "Theme" }],
|
|
98430
98453
|
initialTab: "picker",
|
|
98431
98454
|
footer: THEME_PICKER_FOOTER,
|
|
98455
|
+
contentRows: 22,
|
|
98432
98456
|
renderTab: (_tabId, body) => {
|
|
98433
98457
|
if (core === undefined || body === undefined || body === null) {
|
|
98434
98458
|
return;
|
|
@@ -103964,11 +103988,12 @@ function sessionPickerOptions(sessions, leaseState = () => "free") {
|
|
|
103964
103988
|
const updated = formatSessionDate(s.updatedAt);
|
|
103965
103989
|
const short = shortSessionId(s.id);
|
|
103966
103990
|
const title = s.title.length > 52 ? `${s.title.slice(0, 49)}\u2026` : s.title;
|
|
103967
|
-
const label = withLeaseMarker(`${
|
|
103991
|
+
const label = withLeaseMarker(`${title} \xB7 ${short}`, leaseState(s.id));
|
|
103992
|
+
const messages = `${s.messageCount} ${s.messageCount === 1 ? "message" : "messages"}`;
|
|
103968
103993
|
return {
|
|
103969
103994
|
value: s.id,
|
|
103970
103995
|
label,
|
|
103971
|
-
description:
|
|
103996
|
+
description: `updated ${updated} \xB7 created ${created} \xB7 ${messages}`,
|
|
103972
103997
|
search: `${s.id} ${label} ${s.projectPath} ${s.title} ${created} ${updated}`.toLowerCase()
|
|
103973
103998
|
};
|
|
103974
103999
|
});
|
|
@@ -104017,7 +104042,7 @@ function pickSessionInTui(otui, rOrChrome, sessions, leaseState) {
|
|
|
104017
104042
|
renderTab: (_tabId, body, ctx) => {
|
|
104018
104043
|
const list = mountFilterList(otui, r, body, {
|
|
104019
104044
|
...listSpec,
|
|
104020
|
-
idleHint: "type to filter
|
|
104045
|
+
idleHint: "type to filter \xB7 title, id, date",
|
|
104021
104046
|
width: "100%",
|
|
104022
104047
|
height: adaptiveSelectHeight(all.length, Math.max(1, ctx.height - 1), ROWS_PER_SESSION),
|
|
104023
104048
|
onPick: (row) => {
|
|
@@ -104841,6 +104866,26 @@ async function launchTuiAgentShell(opts) {
|
|
|
104841
104866
|
const mainWidth = chrome.main.width > 0 ? chrome.main.width : r.width - SIDEBAR_WIDTH;
|
|
104842
104867
|
return renderCommandHelp("agent", undefined, Math.max(HELP_MIN_COLS, mainWidth - TRANSCRIPT_CHROME_COLS));
|
|
104843
104868
|
};
|
|
104869
|
+
const openHelp = () => {
|
|
104870
|
+
const content = helpText().trimEnd();
|
|
104871
|
+
openModal(otui, chrome, {
|
|
104872
|
+
title: "/help",
|
|
104873
|
+
tabs: [{ id: "commands", label: "Commands" }],
|
|
104874
|
+
initialTab: "commands",
|
|
104875
|
+
footer: [
|
|
104876
|
+
{ key: "\u2191/\u2193", label: "scroll" },
|
|
104877
|
+
{ key: "esc", label: "close" }
|
|
104878
|
+
],
|
|
104879
|
+
contentRows: Math.max(1, content.split(`
|
|
104880
|
+
`).length),
|
|
104881
|
+
renderTab: (_tabId, body) => {
|
|
104882
|
+
body.add(new otui.TextRenderable(r, {
|
|
104883
|
+
id: `help-${uid++}`,
|
|
104884
|
+
content
|
|
104885
|
+
}));
|
|
104886
|
+
}
|
|
104887
|
+
});
|
|
104888
|
+
};
|
|
104844
104889
|
const sessionCwd = opts.session?.cwd ?? process.cwd();
|
|
104845
104890
|
let permissionMode = opts.initialPermissionMode ?? getProjectPermissionMode(sessionCwd) ?? DEFAULT_PERMISSION_MODE;
|
|
104846
104891
|
io.permissionMode = () => permissionMode;
|
|
@@ -106573,7 +106618,7 @@ Usage: /reasoning <${REASONING_EFFORT_LEVELS.join("|")}>
|
|
|
106573
106618
|
})();
|
|
106574
106619
|
return;
|
|
106575
106620
|
}
|
|
106576
|
-
|
|
106621
|
+
openHelp();
|
|
106577
106622
|
return;
|
|
106578
106623
|
}
|
|
106579
106624
|
if (line.startsWith("/")) {
|
package/dist/core.js
CHANGED
|
@@ -10949,6 +10949,17 @@ async function listFlowDirs(cwd) {
|
|
|
10949
10949
|
function flowIdOf(dir) {
|
|
10950
10950
|
return dir.slice(0, 3);
|
|
10951
10951
|
}
|
|
10952
|
+
function duplicateFlowIds(ids) {
|
|
10953
|
+
const seen = new Set;
|
|
10954
|
+
const duplicates = new Set;
|
|
10955
|
+
for (const id of ids) {
|
|
10956
|
+
if (seen.has(id)) {
|
|
10957
|
+
duplicates.add(id);
|
|
10958
|
+
}
|
|
10959
|
+
seen.add(id);
|
|
10960
|
+
}
|
|
10961
|
+
return duplicates;
|
|
10962
|
+
}
|
|
10952
10963
|
function groupFlowDirsById(dirs) {
|
|
10953
10964
|
const groups = new Map;
|
|
10954
10965
|
for (const dir of dirs) {
|
|
@@ -13404,7 +13415,8 @@ function createFlowService(deps) {
|
|
|
13404
13415
|
});
|
|
13405
13416
|
} catch {}
|
|
13406
13417
|
}
|
|
13407
|
-
|
|
13418
|
+
const shared = duplicateFlowIds(summaries.map((summary) => summary.id));
|
|
13419
|
+
return summaries.map((summary) => ({ ...summary, duplicateId: shared.has(summary.id) }));
|
|
13408
13420
|
},
|
|
13409
13421
|
async get({ cwd, id }) {
|
|
13410
13422
|
return (await load(cwd, id)).flow;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mrciphersmith/keryx",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.136",
|
|
4
4
|
"description": "Version-controlled project context for AI coding agents: code graph, architecture wiki, project memory, relevant tests, quality signals, and task flows.",
|
|
5
5
|
"private": false,
|
|
6
6
|
"publishConfig": {
|