@namzu/cli 19.0.0 → 21.0.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/CHANGELOG.md +308 -0
- package/README.md +42 -2
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +24 -2
- package/dist/cli.js.map +1 -1
- package/dist/commands/acp.d.ts.map +1 -1
- package/dist/commands/acp.js +6 -1
- package/dist/commands/acp.js.map +1 -1
- package/dist/commands/run-stream.d.ts.map +1 -1
- package/dist/commands/run-stream.js +9 -1
- package/dist/commands/run-stream.js.map +1 -1
- package/dist/commands/run.d.ts.map +1 -1
- package/dist/commands/run.js +14 -11
- package/dist/commands/run.js.map +1 -1
- package/dist/config/load.d.ts.map +1 -1
- package/dist/config/load.js +21 -0
- package/dist/config/load.js.map +1 -1
- package/dist/config/schema.d.ts +11 -4
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js.map +1 -1
- package/dist/doctor/checks/chain.d.ts.map +1 -1
- package/dist/doctor/checks/chain.js +11 -5
- package/dist/doctor/checks/chain.js.map +1 -1
- package/dist/doctor/checks/credentials.d.ts.map +1 -1
- package/dist/doctor/checks/credentials.js +5 -1
- package/dist/doctor/checks/credentials.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/integrations/providers/access.d.ts +7 -0
- package/dist/integrations/providers/access.d.ts.map +1 -0
- package/dist/integrations/providers/access.js +17 -0
- package/dist/integrations/providers/access.js.map +1 -0
- package/dist/integrations/providers/discover.d.ts +17 -54
- package/dist/integrations/providers/discover.d.ts.map +1 -1
- package/dist/integrations/providers/discover.js +46 -58
- package/dist/integrations/providers/discover.js.map +1 -1
- package/dist/integrations/providers/harness-credentials.d.ts +14 -0
- package/dist/integrations/providers/harness-credentials.d.ts.map +1 -1
- package/dist/integrations/providers/harness-credentials.js +46 -0
- package/dist/integrations/providers/harness-credentials.js.map +1 -1
- package/dist/integrations/providers/model-reasoning.d.ts +4 -0
- package/dist/integrations/providers/model-reasoning.d.ts.map +1 -0
- package/dist/integrations/providers/model-reasoning.js +46 -0
- package/dist/integrations/providers/model-reasoning.js.map +1 -0
- package/dist/integrations/providers/register.d.ts +1 -1
- package/dist/integrations/providers/register.d.ts.map +1 -1
- package/dist/integrations/providers/register.js +11 -1
- package/dist/integrations/providers/register.js.map +1 -1
- package/dist/integrations/providers/registry.d.ts +4 -4
- package/dist/integrations/providers/registry.d.ts.map +1 -1
- package/dist/integrations/providers/registry.js +23 -0
- package/dist/integrations/providers/registry.js.map +1 -1
- package/dist/integrations/sessions/context-inventory.d.ts +4 -0
- package/dist/integrations/sessions/context-inventory.d.ts.map +1 -0
- package/dist/integrations/sessions/context-inventory.js +44 -0
- package/dist/integrations/sessions/context-inventory.js.map +1 -0
- package/dist/integrations/sessions/conversation-search.d.ts +60 -0
- package/dist/integrations/sessions/conversation-search.d.ts.map +1 -0
- package/dist/integrations/sessions/conversation-search.js +461 -0
- package/dist/integrations/sessions/conversation-search.js.map +1 -0
- package/dist/integrations/sessions/task-context.d.ts +4 -0
- package/dist/integrations/sessions/task-context.d.ts.map +1 -0
- package/dist/integrations/sessions/task-context.js +73 -0
- package/dist/integrations/sessions/task-context.js.map +1 -0
- package/dist/integrations/subagents/activity.d.ts +3 -1
- package/dist/integrations/subagents/activity.d.ts.map +1 -1
- package/dist/integrations/subagents/activity.js +20 -2
- package/dist/integrations/subagents/activity.js.map +1 -1
- package/dist/integrations/subagents/runtime.d.ts +15 -6
- package/dist/integrations/subagents/runtime.d.ts.map +1 -1
- package/dist/integrations/subagents/runtime.js +274 -46
- package/dist/integrations/subagents/runtime.js.map +1 -1
- package/dist/memory/io.d.ts +12 -0
- package/dist/memory/io.d.ts.map +1 -0
- package/dist/memory/io.js +177 -0
- package/dist/memory/io.js.map +1 -0
- package/dist/memory/presentation.d.ts +12 -0
- package/dist/memory/presentation.d.ts.map +1 -0
- package/dist/memory/presentation.js +51 -0
- package/dist/memory/presentation.js.map +1 -0
- package/dist/memory/store.d.ts +17 -3
- package/dist/memory/store.d.ts.map +1 -1
- package/dist/memory/store.js +61 -35
- package/dist/memory/store.js.map +1 -1
- package/dist/output-schema.d.ts +4 -0
- package/dist/output-schema.d.ts.map +1 -0
- package/dist/output-schema.js +18 -0
- package/dist/output-schema.js.map +1 -0
- package/dist/permissions/mode.d.ts +3 -0
- package/dist/permissions/mode.d.ts.map +1 -1
- package/dist/permissions/mode.js +18 -0
- package/dist/permissions/mode.js.map +1 -1
- package/dist/tui/AgentExplorer.d.ts +13 -2
- package/dist/tui/AgentExplorer.d.ts.map +1 -1
- package/dist/tui/AgentExplorer.js +93 -23
- package/dist/tui/AgentExplorer.js.map +1 -1
- package/dist/tui/App.d.ts.map +1 -1
- package/dist/tui/App.js +554 -107
- package/dist/tui/App.js.map +1 -1
- package/dist/tui/BrandHeader.d.ts +2 -5
- package/dist/tui/BrandHeader.d.ts.map +1 -1
- package/dist/tui/BrandHeader.js +3 -6
- package/dist/tui/BrandHeader.js.map +1 -1
- package/dist/tui/Composer.d.ts +3 -2
- package/dist/tui/Composer.d.ts.map +1 -1
- package/dist/tui/Composer.js +11 -9
- package/dist/tui/Composer.js.map +1 -1
- package/dist/tui/ComposerFrame.d.ts.map +1 -1
- package/dist/tui/ComposerFrame.js +1 -1
- package/dist/tui/ComposerFrame.js.map +1 -1
- package/dist/tui/PermissionOverlay.d.ts +1 -1
- package/dist/tui/PermissionOverlay.d.ts.map +1 -1
- package/dist/tui/PermissionOverlay.js +12 -4
- package/dist/tui/PermissionOverlay.js.map +1 -1
- package/dist/tui/Picker.d.ts.map +1 -1
- package/dist/tui/Picker.js +97 -21
- package/dist/tui/Picker.js.map +1 -1
- package/dist/tui/TextPrompt.d.ts +3 -1
- package/dist/tui/TextPrompt.d.ts.map +1 -1
- package/dist/tui/TextPrompt.js +55 -9
- package/dist/tui/TextPrompt.js.map +1 -1
- package/dist/tui/Transcript.d.ts +1 -9
- package/dist/tui/Transcript.d.ts.map +1 -1
- package/dist/tui/Transcript.js +32 -44
- package/dist/tui/Transcript.js.map +1 -1
- package/dist/tui/agent.d.ts +21 -4
- package/dist/tui/agent.d.ts.map +1 -1
- package/dist/tui/agent.js +207 -78
- package/dist/tui/agent.js.map +1 -1
- package/dist/tui/model-choices.d.ts +3 -1
- package/dist/tui/model-choices.d.ts.map +1 -1
- package/dist/tui/model-choices.js +12 -1
- package/dist/tui/model-choices.js.map +1 -1
- package/dist/tui/model-search.d.ts +4 -0
- package/dist/tui/model-search.d.ts.map +1 -0
- package/dist/tui/model-search.js +11 -0
- package/dist/tui/model-search.js.map +1 -0
- package/dist/tui/model-selection-intent.d.ts +8 -0
- package/dist/tui/model-selection-intent.d.ts.map +1 -0
- package/dist/tui/model-selection-intent.js +96 -0
- package/dist/tui/model-selection-intent.js.map +1 -0
- package/dist/tui/model-switch-tool.d.ts +7 -0
- package/dist/tui/model-switch-tool.d.ts.map +1 -0
- package/dist/tui/model-switch-tool.js +74 -0
- package/dist/tui/model-switch-tool.js.map +1 -0
- package/dist/tui/model-switch.d.ts +35 -0
- package/dist/tui/model-switch.d.ts.map +1 -0
- package/dist/tui/model-switch.js +106 -0
- package/dist/tui/model-switch.js.map +1 -0
- package/dist/tui/permission-review.d.ts.map +1 -1
- package/dist/tui/permission-review.js +25 -12
- package/dist/tui/permission-review.js.map +1 -1
- package/dist/tui/run-interruption.d.ts +7 -0
- package/dist/tui/run-interruption.d.ts.map +1 -1
- package/dist/tui/run-interruption.js +41 -0
- package/dist/tui/run-interruption.js.map +1 -1
- package/dist/tui/slashCommands.d.ts +5 -0
- package/dist/tui/slashCommands.d.ts.map +1 -1
- package/dist/tui/slashCommands.js +188 -15
- package/dist/tui/slashCommands.js.map +1 -1
- package/dist/tui/types.d.ts +6 -13
- package/dist/tui/types.d.ts.map +1 -1
- package/package.json +8 -7
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
import { constants, closeSync, fstatSync, lstatSync, mkdirSync, openSync, readSync, realpathSync, writeSync, } from 'node:fs';
|
|
2
|
+
import { isAbsolute, join, relative, resolve, sep } from 'node:path';
|
|
3
|
+
/** Maximum bytes accepted from one curated file, before decoding or prompt clipping. */
|
|
4
|
+
export const MEMORY_FILE_MAX_BYTES = 1024 * 1024;
|
|
5
|
+
function missing(error) {
|
|
6
|
+
return error.code === 'ENOENT';
|
|
7
|
+
}
|
|
8
|
+
function within(path, root) {
|
|
9
|
+
const part = relative(root, path);
|
|
10
|
+
return !isAbsolute(part) && part !== '..' && !part.startsWith(`..${sep}`);
|
|
11
|
+
}
|
|
12
|
+
/** Resolve every existing segment before following the next, including symlink ancestors. */
|
|
13
|
+
export function resolveMemoryPath(location, createParents = false) {
|
|
14
|
+
const root = resolve(location.root);
|
|
15
|
+
const path = resolve(location.path);
|
|
16
|
+
if (!within(path, root))
|
|
17
|
+
throw new Error('Memory path is outside its allowed scope.');
|
|
18
|
+
let rootStat;
|
|
19
|
+
try {
|
|
20
|
+
rootStat = lstatSync(root);
|
|
21
|
+
}
|
|
22
|
+
catch (error) {
|
|
23
|
+
if (!missing(error))
|
|
24
|
+
throw error;
|
|
25
|
+
if (!createParents)
|
|
26
|
+
return null;
|
|
27
|
+
mkdirSync(root, { recursive: true, mode: 0o700 });
|
|
28
|
+
rootStat = lstatSync(root);
|
|
29
|
+
}
|
|
30
|
+
if (rootStat.isSymbolicLink())
|
|
31
|
+
throw new Error('Memory scope root is a symlink outside its allowed scope.');
|
|
32
|
+
if (!rootStat.isDirectory())
|
|
33
|
+
throw new Error('Memory scope root must be a directory.');
|
|
34
|
+
const canonicalRoot = realpathSync(root);
|
|
35
|
+
const parts = relative(root, path).split(sep);
|
|
36
|
+
let candidate = canonicalRoot;
|
|
37
|
+
for (let i = 0; i < parts.length; i += 1) {
|
|
38
|
+
const part = parts[i];
|
|
39
|
+
if (part === undefined)
|
|
40
|
+
throw new Error('Memory path has an invalid segment.');
|
|
41
|
+
candidate = join(candidate, part);
|
|
42
|
+
const leaf = i === parts.length - 1;
|
|
43
|
+
let stat;
|
|
44
|
+
try {
|
|
45
|
+
stat = lstatSync(candidate);
|
|
46
|
+
}
|
|
47
|
+
catch (error) {
|
|
48
|
+
if (!missing(error))
|
|
49
|
+
throw error;
|
|
50
|
+
if (!createParents)
|
|
51
|
+
return null;
|
|
52
|
+
if (leaf)
|
|
53
|
+
return candidate;
|
|
54
|
+
mkdirSync(candidate, { mode: 0o700 });
|
|
55
|
+
stat = lstatSync(candidate);
|
|
56
|
+
}
|
|
57
|
+
if (stat.isSymbolicLink()) {
|
|
58
|
+
try {
|
|
59
|
+
candidate = realpathSync(candidate);
|
|
60
|
+
}
|
|
61
|
+
catch (error) {
|
|
62
|
+
if (missing(error))
|
|
63
|
+
throw new Error('Memory path contains a broken symlink.');
|
|
64
|
+
throw error;
|
|
65
|
+
}
|
|
66
|
+
if (!within(candidate, canonicalRoot))
|
|
67
|
+
throw new Error('Memory path resolves outside its allowed scope.');
|
|
68
|
+
stat = lstatSync(candidate);
|
|
69
|
+
}
|
|
70
|
+
if (leaf ? !stat.isFile() : !stat.isDirectory()) {
|
|
71
|
+
throw new Error(leaf ? 'Memory must be a regular file.' : 'Memory path parent must be a directory.');
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
return candidate;
|
|
75
|
+
}
|
|
76
|
+
function readBounded(fd) {
|
|
77
|
+
const stat = fstatSync(fd);
|
|
78
|
+
if (!stat.isFile())
|
|
79
|
+
throw new Error('Memory must be a regular file.');
|
|
80
|
+
if (stat.size > MEMORY_FILE_MAX_BYTES)
|
|
81
|
+
throw new Error(`Memory exceeds the ${MEMORY_FILE_MAX_BYTES}-byte file limit.`);
|
|
82
|
+
const chunks = [];
|
|
83
|
+
let total = 0;
|
|
84
|
+
while (total <= MEMORY_FILE_MAX_BYTES) {
|
|
85
|
+
const chunk = Buffer.allocUnsafe(Math.min(64 * 1024, MEMORY_FILE_MAX_BYTES + 1 - total));
|
|
86
|
+
const count = readSync(fd, chunk, 0, chunk.length, total);
|
|
87
|
+
if (count === 0)
|
|
88
|
+
break;
|
|
89
|
+
total += count;
|
|
90
|
+
if (total > MEMORY_FILE_MAX_BYTES)
|
|
91
|
+
throw new Error(`Memory exceeds the ${MEMORY_FILE_MAX_BYTES}-byte file limit.`);
|
|
92
|
+
chunks.push(chunk.subarray(0, count));
|
|
93
|
+
}
|
|
94
|
+
let text;
|
|
95
|
+
try {
|
|
96
|
+
text = new TextDecoder('utf-8', { fatal: true }).decode(Buffer.concat(chunks, total));
|
|
97
|
+
}
|
|
98
|
+
catch {
|
|
99
|
+
throw new Error('Memory is not valid UTF-8 text.');
|
|
100
|
+
}
|
|
101
|
+
if (text.includes('\0'))
|
|
102
|
+
throw new Error('Memory contains NUL bytes; expected UTF-8 text.');
|
|
103
|
+
return text;
|
|
104
|
+
}
|
|
105
|
+
/** Open only the validated file; recheck path identity before reading or mutating it. */
|
|
106
|
+
function openMemory(location, append) {
|
|
107
|
+
const path = resolveMemoryPath(location, append);
|
|
108
|
+
if (path === null)
|
|
109
|
+
return null;
|
|
110
|
+
let existed = true;
|
|
111
|
+
let before;
|
|
112
|
+
try {
|
|
113
|
+
before = lstatSync(path);
|
|
114
|
+
}
|
|
115
|
+
catch (error) {
|
|
116
|
+
if (!append || !missing(error))
|
|
117
|
+
throw error;
|
|
118
|
+
existed = false;
|
|
119
|
+
}
|
|
120
|
+
const flags = (append ? constants.O_RDWR | constants.O_APPEND : constants.O_RDONLY) |
|
|
121
|
+
(constants.O_NOFOLLOW ?? 0) |
|
|
122
|
+
(constants.O_NONBLOCK ?? 0) |
|
|
123
|
+
(existed ? 0 : constants.O_CREAT | constants.O_EXCL);
|
|
124
|
+
const fd = openSync(path, flags, 0o600);
|
|
125
|
+
try {
|
|
126
|
+
const opened = fstatSync(fd);
|
|
127
|
+
const currentPath = resolveMemoryPath(location);
|
|
128
|
+
if (currentPath !== path ||
|
|
129
|
+
(before && (opened.dev !== before.dev || opened.ino !== before.ino))) {
|
|
130
|
+
throw new Error('Memory path changed while opening it; no content was read or appended.');
|
|
131
|
+
}
|
|
132
|
+
const current = lstatSync(path);
|
|
133
|
+
if (!opened.isFile() || current.dev !== opened.dev || current.ino !== opened.ino) {
|
|
134
|
+
throw new Error('Memory path changed or is not a regular file.');
|
|
135
|
+
}
|
|
136
|
+
return fd;
|
|
137
|
+
}
|
|
138
|
+
catch (error) {
|
|
139
|
+
closeSync(fd);
|
|
140
|
+
throw error;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
export function readMemoryFile(location) {
|
|
144
|
+
const fd = openMemory(location, false);
|
|
145
|
+
if (fd === null)
|
|
146
|
+
return null;
|
|
147
|
+
try {
|
|
148
|
+
return readBounded(fd);
|
|
149
|
+
}
|
|
150
|
+
finally {
|
|
151
|
+
closeSync(fd);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
/** Validate existing text before any append, refusing invalid files without replacing them. */
|
|
155
|
+
export function appendMemoryFile(location, text) {
|
|
156
|
+
if (Buffer.byteLength(text, 'utf8') > MEMORY_FILE_MAX_BYTES) {
|
|
157
|
+
throw new Error(`Appending would exceed the ${MEMORY_FILE_MAX_BYTES}-byte memory file limit; curate the file first.`);
|
|
158
|
+
}
|
|
159
|
+
const fd = openMemory(location, true);
|
|
160
|
+
if (fd === null)
|
|
161
|
+
throw new Error('Could not open memory for append.');
|
|
162
|
+
try {
|
|
163
|
+
const existing = readBounded(fd);
|
|
164
|
+
const bytes = Buffer.from(text, 'utf8');
|
|
165
|
+
if (fstatSync(fd).size + bytes.length > MEMORY_FILE_MAX_BYTES) {
|
|
166
|
+
throw new Error(`Appending would exceed the ${MEMORY_FILE_MAX_BYTES}-byte memory file limit; curate the file first.`);
|
|
167
|
+
}
|
|
168
|
+
let written = 0;
|
|
169
|
+
while (written < bytes.length)
|
|
170
|
+
written += writeSync(fd, bytes, written, bytes.length - written);
|
|
171
|
+
return `${existing}${text}`;
|
|
172
|
+
}
|
|
173
|
+
finally {
|
|
174
|
+
closeSync(fd);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
//# sourceMappingURL=io.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"io.js","sourceRoot":"","sources":["../../src/memory/io.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { type AppendMemoryResult, type MemoryContent } from './store.js';
|
|
2
|
+
export declare const MEMORY_PREVIEW_MAX_CHARS = 2000;
|
|
3
|
+
export declare const MEMORY_PREVIEW_MAX_LINES = 20;
|
|
4
|
+
/** Human-facing memory inspection; model prompt instructions belong in composeMemoryPrompt. */
|
|
5
|
+
export declare function renderMemoryReport(content: MemoryContent, options: {
|
|
6
|
+
readonly cwd: string;
|
|
7
|
+
readonly home?: string;
|
|
8
|
+
}): string;
|
|
9
|
+
/** Operator notices for refused files; these are not model prompt instructions. */
|
|
10
|
+
export declare function formatMemoryDiagnostics(content: MemoryContent): readonly string[];
|
|
11
|
+
export declare function renderMemorySaveResult(result: AppendMemoryResult, text: string): string;
|
|
12
|
+
//# sourceMappingURL=presentation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"presentation.d.ts","sourceRoot":"","sources":["../../src/memory/presentation.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,KAAK,kBAAkB,EAEvB,KAAK,aAAa,EAIlB,MAAM,YAAY,CAAA;AAEnB,eAAO,MAAM,wBAAwB,OAAQ,CAAA;AAC7C,eAAO,MAAM,wBAAwB,KAAK,CAAA;AAkB1C,+FAA+F;AAC/F,wBAAgB,kBAAkB,CACjC,OAAO,EAAE,aAAa,EACtB,OAAO,EAAE;IAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GACvD,MAAM,CAYR;AAED,mFAAmF;AACnF,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,aAAa,GAAG,SAAS,MAAM,EAAE,CAIjF;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,kBAAkB,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAMvF"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { MEMORY_SECTION_MAX_CHARS, memoryFilePath, projectMemoryFilePath, userFilePath, } from './store.js';
|
|
2
|
+
export const MEMORY_PREVIEW_MAX_CHARS = 2_000;
|
|
3
|
+
export const MEMORY_PREVIEW_MAX_LINES = 20;
|
|
4
|
+
function preview(text, path) {
|
|
5
|
+
let end = Math.min(text.length, MEMORY_PREVIEW_MAX_CHARS);
|
|
6
|
+
let position = 0;
|
|
7
|
+
for (let line = 0; line < MEMORY_PREVIEW_MAX_LINES; line += 1) {
|
|
8
|
+
const newline = text.indexOf('\n', position);
|
|
9
|
+
if (newline < 0 || newline >= end)
|
|
10
|
+
break;
|
|
11
|
+
if (line === MEMORY_PREVIEW_MAX_LINES - 1)
|
|
12
|
+
end = newline;
|
|
13
|
+
position = newline + 1;
|
|
14
|
+
}
|
|
15
|
+
if (end === text.length)
|
|
16
|
+
return text;
|
|
17
|
+
// Do not split a supplementary character at the preview boundary.
|
|
18
|
+
const last = text.charCodeAt(end - 1);
|
|
19
|
+
if (last >= 0xd800 && last <= 0xdbff)
|
|
20
|
+
end -= 1;
|
|
21
|
+
return `${text.slice(0, end)}\n\n[${text.length - end} more characters omitted. Full text: ${path}]`;
|
|
22
|
+
}
|
|
23
|
+
/** Human-facing memory inspection; model prompt instructions belong in composeMemoryPrompt. */
|
|
24
|
+
export function renderMemoryReport(content, options) {
|
|
25
|
+
const sections = [];
|
|
26
|
+
const add = (label, text, path) => {
|
|
27
|
+
if (text)
|
|
28
|
+
sections.push(`${label}\n${path}\n\n${preview(text, path)}`);
|
|
29
|
+
};
|
|
30
|
+
if (content.project)
|
|
31
|
+
add('Project memory', content.project, projectMemoryFilePath(options.cwd));
|
|
32
|
+
add('User memory (all projects)', content.memory, memoryFilePath(options.home));
|
|
33
|
+
add('About you', content.user, userFilePath(options.home));
|
|
34
|
+
sections.push(...formatMemoryDiagnostics(content));
|
|
35
|
+
return sections.length > 0
|
|
36
|
+
? sections.join('\n\n')
|
|
37
|
+
: 'No saved memory. Use /memory add <text> for this project, or /memory --user add <text> for all projects.';
|
|
38
|
+
}
|
|
39
|
+
/** Operator notices for refused files; these are not model prompt instructions. */
|
|
40
|
+
export function formatMemoryDiagnostics(content) {
|
|
41
|
+
return (content.diagnostics ?? []).map(({ path, reason }) => `Memory not loaded: ${path} — ${reason}`);
|
|
42
|
+
}
|
|
43
|
+
export function renderMemorySaveResult(result, text) {
|
|
44
|
+
if (!result.appended)
|
|
45
|
+
return `No memory added (${result.path}). Use /memory add <text>.`;
|
|
46
|
+
if (!result.includedInPrompt) {
|
|
47
|
+
return `Saved to ${result.path}, but this note will not be fully included in the next prompt because the section exceeds ${MEMORY_SECTION_MAX_CHARS.toLocaleString('en-US')} characters. Curate that file to include the note.`;
|
|
48
|
+
}
|
|
49
|
+
return `Remembered ${result.scope === 'user' ? 'for every project' : 'for this project'} (${result.path}): ${text}`;
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=presentation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"presentation.js","sourceRoot":"","sources":["../../src/memory/presentation.ts"],"names":[],"mappings":"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"}
|
package/dist/memory/store.d.ts
CHANGED
|
@@ -16,8 +16,9 @@
|
|
|
16
16
|
* to edit the file — which is the whole point of a curated memory.
|
|
17
17
|
*
|
|
18
18
|
* Separate from the kernel's memory store (`save_memory` / `search_memory`),
|
|
19
|
-
* which holds
|
|
19
|
+
* which holds structured records retrieved by tools or bounded automatic recall.
|
|
20
20
|
*/
|
|
21
|
+
export { MEMORY_FILE_MAX_BYTES } from './io.js';
|
|
21
22
|
/** Characters of one section injected before the rest is left to the file. */
|
|
22
23
|
export declare const MEMORY_SECTION_MAX_CHARS = 8000;
|
|
23
24
|
export type MemoryScope = 'project' | 'user';
|
|
@@ -26,13 +27,18 @@ export declare function userFilePath(home?: string): string;
|
|
|
26
27
|
export declare function memoryFilePath(home?: string): string;
|
|
27
28
|
/** Share checkout memory unless this directory already owns a memory file. */
|
|
28
29
|
export declare function projectMemoryFilePath(cwd: string): string;
|
|
30
|
+
export interface MemoryDiagnostic {
|
|
31
|
+
readonly path: string;
|
|
32
|
+
readonly reason: string;
|
|
33
|
+
}
|
|
29
34
|
export interface MemoryContent {
|
|
30
35
|
readonly user: string | null;
|
|
31
36
|
readonly memory: string | null;
|
|
32
|
-
/** The project's own file; null when
|
|
37
|
+
/** The project's own file; null when absent, empty, or refused with a diagnostic. */
|
|
33
38
|
readonly project: string | null;
|
|
39
|
+
readonly diagnostics?: readonly MemoryDiagnostic[];
|
|
34
40
|
}
|
|
35
|
-
/** Read
|
|
41
|
+
/** Read bounded, valid UTF-8 files; distinguish missing/empty files from refused content. */
|
|
36
42
|
export declare function readMemory(home?: string, cwd?: string): MemoryContent;
|
|
37
43
|
export declare function composeMemoryPrompt(content: MemoryContent): string | null;
|
|
38
44
|
export interface AppendMemoryTarget {
|
|
@@ -46,4 +52,12 @@ export interface AppendMemoryTarget {
|
|
|
46
52
|
* second argument names the application home and means the user scope.
|
|
47
53
|
*/
|
|
48
54
|
export declare function appendMemory(text: string, target?: string | AppendMemoryTarget): string;
|
|
55
|
+
export interface AppendMemoryResult {
|
|
56
|
+
readonly path: string;
|
|
57
|
+
readonly scope: MemoryScope;
|
|
58
|
+
readonly appended: boolean;
|
|
59
|
+
/** Whether the entire appended note fits in this section's next prompt snapshot. */
|
|
60
|
+
readonly includedInPrompt: boolean;
|
|
61
|
+
}
|
|
62
|
+
export declare function appendMemoryWithStatus(text: string, target?: string | AppendMemoryTarget): AppendMemoryResult;
|
|
49
63
|
//# sourceMappingURL=store.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/memory/store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/memory/store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAUH,OAAO,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAA;AAE/C,8EAA8E;AAC9E,eAAO,MAAM,wBAAwB,OAAQ,CAAA;AAE7C,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,MAAM,CAAA;AAE5C,wBAAgB,SAAS,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAE/C;AAED,wBAAgB,YAAY,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAElD;AAED,wBAAgB,cAAc,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED,8EAA8E;AAC9E,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAYzD;AAED,MAAM,WAAW,gBAAgB;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CACvB;AAED,MAAM,WAAW,aAAa;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,qFAAqF;IACrF,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IAC/B,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,gBAAgB,EAAE,CAAA;CAClD;AAOD,6FAA6F;AAC7F,wBAAgB,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,aAAa,CA8BrE;AAaD,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,GAAG,IAAI,CAezE;AAED,MAAM,WAAW,kBAAkB;IAClC,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAA;IAC3B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IACtB,sCAAsC;IACtC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CACrB;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,kBAAkB,GAAG,MAAM,CAEvF;AAED,MAAM,WAAW,kBAAkB;IAClC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAA;IAC3B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;IAC1B,oFAAoF;IACpF,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAA;CAClC;AAED,wBAAgB,sBAAsB,CACrC,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,MAAM,GAAG,kBAAkB,GAClC,kBAAkB,CAqBpB"}
|
package/dist/memory/store.js
CHANGED
|
@@ -16,14 +16,14 @@
|
|
|
16
16
|
* to edit the file — which is the whole point of a curated memory.
|
|
17
17
|
*
|
|
18
18
|
* Separate from the kernel's memory store (`save_memory` / `search_memory`),
|
|
19
|
-
* which holds
|
|
19
|
+
* which holds structured records retrieved by tools or bounded automatic recall.
|
|
20
20
|
*/
|
|
21
|
-
import {
|
|
22
|
-
import {
|
|
21
|
+
import { realpathSync } from 'node:fs';
|
|
22
|
+
import { join, resolve } from 'node:path';
|
|
23
23
|
import { namzuHomePath } from '../integrations/state/home.js';
|
|
24
24
|
import { cliProjectRoot } from '../integrations/state/project.js';
|
|
25
|
-
|
|
26
|
-
|
|
25
|
+
import { appendMemoryFile, readMemoryFile, resolveMemoryPath } from './io.js';
|
|
26
|
+
export { MEMORY_FILE_MAX_BYTES } from './io.js';
|
|
27
27
|
/** Characters of one section injected before the rest is left to the file. */
|
|
28
28
|
export const MEMORY_SECTION_MAX_CHARS = 8_000;
|
|
29
29
|
export function memoryDir(home) {
|
|
@@ -45,39 +45,58 @@ export function projectMemoryFilePath(cwd) {
|
|
|
45
45
|
if (error.code !== 'ENOENT')
|
|
46
46
|
throw error;
|
|
47
47
|
}
|
|
48
|
+
const root = cliProjectRoot(directory);
|
|
48
49
|
const local = join(directory, '.namzu', 'MEMORY.md');
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
lstatSync(local);
|
|
50
|
+
// An empty file or an in-scope symlink remains an intentional local file.
|
|
51
|
+
if (resolveMemoryPath({ path: local, root }) !== null)
|
|
52
52
|
return local;
|
|
53
|
-
|
|
54
|
-
catch (error) {
|
|
55
|
-
if (error.code !== 'ENOENT')
|
|
56
|
-
throw error;
|
|
57
|
-
}
|
|
58
|
-
return join(cliProjectRoot(directory), '.namzu', 'MEMORY.md');
|
|
53
|
+
return join(root, '.namzu', 'MEMORY.md');
|
|
59
54
|
}
|
|
60
|
-
function
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
return text.length > 0 ? text : null;
|
|
64
|
-
}
|
|
65
|
-
catch {
|
|
66
|
-
return null;
|
|
67
|
-
}
|
|
55
|
+
function projectLocation(cwd) {
|
|
56
|
+
const directory = realpathSync(resolve(cwd));
|
|
57
|
+
return { path: projectMemoryFilePath(directory), root: cliProjectRoot(directory) };
|
|
68
58
|
}
|
|
69
|
-
/** Read
|
|
59
|
+
/** Read bounded, valid UTF-8 files; distinguish missing/empty files from refused content. */
|
|
70
60
|
export function readMemory(home, cwd) {
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
61
|
+
const diagnostics = [];
|
|
62
|
+
const read = (path, location) => {
|
|
63
|
+
let selectedPath = path;
|
|
64
|
+
try {
|
|
65
|
+
const selected = location();
|
|
66
|
+
selectedPath = selected.path;
|
|
67
|
+
const text = readMemoryFile(selected)?.trim();
|
|
68
|
+
return text || null;
|
|
69
|
+
}
|
|
70
|
+
catch (error) {
|
|
71
|
+
diagnostics.push({
|
|
72
|
+
path: selectedPath,
|
|
73
|
+
reason: error instanceof Error ? error.message : String(error),
|
|
74
|
+
});
|
|
75
|
+
return null;
|
|
76
|
+
}
|
|
75
77
|
};
|
|
78
|
+
const userRoot = memoryDir(home);
|
|
79
|
+
const user = read(join(userRoot, 'USER.md'), () => ({
|
|
80
|
+
root: userRoot,
|
|
81
|
+
path: join(userRoot, 'USER.md'),
|
|
82
|
+
}));
|
|
83
|
+
const memory = read(join(userRoot, 'MEMORY.md'), () => ({
|
|
84
|
+
root: userRoot,
|
|
85
|
+
path: join(userRoot, 'MEMORY.md'),
|
|
86
|
+
}));
|
|
87
|
+
const project = cwd
|
|
88
|
+
? read(join(resolve(cwd), '.namzu', 'MEMORY.md'), () => projectLocation(cwd))
|
|
89
|
+
: null;
|
|
90
|
+
return { user, memory, project, ...(diagnostics.length > 0 ? { diagnostics } : {}) };
|
|
76
91
|
}
|
|
77
92
|
function capped(text, file) {
|
|
78
93
|
if (text.length <= MEMORY_SECTION_MAX_CHARS)
|
|
79
94
|
return text;
|
|
80
|
-
|
|
95
|
+
let end = MEMORY_SECTION_MAX_CHARS;
|
|
96
|
+
const last = text.charCodeAt(end - 1);
|
|
97
|
+
if (last >= 0xd800 && last <= 0xdbff)
|
|
98
|
+
end -= 1;
|
|
99
|
+
const head = text.slice(0, end);
|
|
81
100
|
const cut = head.lastIndexOf('\n');
|
|
82
101
|
const kept = cut > MEMORY_SECTION_MAX_CHARS / 2 ? head.slice(0, cut) : head;
|
|
83
102
|
return `${kept}\n\n(… ${text.length - kept.length} more characters in ${file} were not included; the file wants curating.)`;
|
|
@@ -106,23 +125,30 @@ export function composeMemoryPrompt(content) {
|
|
|
106
125
|
* second argument names the application home and means the user scope.
|
|
107
126
|
*/
|
|
108
127
|
export function appendMemory(text, target) {
|
|
128
|
+
return appendMemoryWithStatus(text, target).path;
|
|
129
|
+
}
|
|
130
|
+
export function appendMemoryWithStatus(text, target) {
|
|
109
131
|
const trimmed = text.trim();
|
|
110
132
|
const scope = typeof target === 'object' ? target.scope : 'user';
|
|
111
133
|
const home = typeof target === 'object' ? target.home : target;
|
|
112
|
-
let
|
|
134
|
+
let location;
|
|
113
135
|
if (scope === 'project') {
|
|
114
136
|
const cwd = typeof target === 'object' ? target.cwd : undefined;
|
|
115
137
|
if (!cwd)
|
|
116
138
|
throw new Error('A project memory needs the working directory it belongs to.');
|
|
117
|
-
|
|
139
|
+
location = projectLocation(cwd);
|
|
118
140
|
}
|
|
119
141
|
else {
|
|
120
|
-
|
|
142
|
+
location = { path: memoryFilePath(home), root: memoryDir(home) };
|
|
121
143
|
}
|
|
122
144
|
if (trimmed.length === 0)
|
|
123
|
-
return path;
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
145
|
+
return { path: location.path, scope, appended: false, includedInPrompt: false };
|
|
146
|
+
const combined = appendMemoryFile(location, `- ${trimmed}\n`);
|
|
147
|
+
return {
|
|
148
|
+
path: location.path,
|
|
149
|
+
scope,
|
|
150
|
+
appended: true,
|
|
151
|
+
includedInPrompt: combined.trim().length <= MEMORY_SECTION_MAX_CHARS,
|
|
152
|
+
};
|
|
127
153
|
}
|
|
128
154
|
//# sourceMappingURL=store.js.map
|
package/dist/memory/store.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/memory/store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/memory/store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"output-schema.d.ts","sourceRoot":"","sources":["../src/output-schema.ts"],"names":[],"mappings":"AAEA,OAAO,EAEN,KAAK,sBAAsB,EAG3B,MAAM,YAAY,CAAA;AAEnB,wEAAwE;AACxE,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,sBAAsB,CAcrE"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { readFileSync } from 'node:fs';
|
|
2
|
+
import { isDeepStrictEqual } from 'node:util';
|
|
3
|
+
import { mcpJsonSchemaToZod, renderToolSchema, } from '@namzu/sdk';
|
|
4
|
+
/** Resolve once at launch; the schema remains fixed for the session. */
|
|
5
|
+
export function loadOutputSchema(path) {
|
|
6
|
+
const value = JSON.parse(readFileSync(path, 'utf8'));
|
|
7
|
+
if (!value || typeof value !== 'object' || Array.isArray(value))
|
|
8
|
+
throw new Error('Output schema must be a JSON Schema object.');
|
|
9
|
+
const schema = mcpJsonSchemaToZod(value);
|
|
10
|
+
const { $schema: _dialect, ...expected } = value;
|
|
11
|
+
if (!isDeepStrictEqual(renderToolSchema(schema), expected))
|
|
12
|
+
throw new Error('Output schema cannot be represented losslessly. Use an explicit object schema with properties, required and additionalProperties; unsupported constraints are not discarded.');
|
|
13
|
+
return {
|
|
14
|
+
mode: 'native',
|
|
15
|
+
schema,
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=output-schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"output-schema.js","sourceRoot":"","sources":["../src/output-schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AACtC,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAA;AAC7C,OAAO,EAGN,kBAAkB,EAClB,gBAAgB,GAChB,MAAM,YAAY,CAAA;AAEnB,wEAAwE;AACxE,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC5C,MAAM,KAAK,GAAY,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAA;IAC7D,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAC9D,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAA;IAC/D,MAAM,MAAM,GAAG,kBAAkB,CAAC,KAAsB,CAAC,CAAA;IACzD,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,QAAQ,EAAE,GAAG,KAAgC,CAAA;IAC3E,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC;QACzD,MAAM,IAAI,KAAK,CACd,8KAA8K,CAC9K,CAAA;IACF,OAAO;QACN,IAAI,EAAE,QAAQ;QACd,MAAM;KACN,CAAA;AACF,CAAC"}
|
|
@@ -30,6 +30,9 @@ export type PermissionMode = ReviewMode;
|
|
|
30
30
|
export declare const PERMISSION_MODES: readonly PermissionMode[];
|
|
31
31
|
export { ACCEPT_EDITS_TOOLS, PLAN_MODE_REFUSAL } from '@namzu/sdk';
|
|
32
32
|
export declare const isPermissionMode: (value: unknown) => value is PermissionMode;
|
|
33
|
+
export declare function permissionModeLabel(mode: PermissionMode): string;
|
|
34
|
+
/** Session-wide approval overrides prompting, but never plan or strict mode. */
|
|
35
|
+
export declare function effectivePermissionMode(mode: PermissionMode, approvedAll: boolean): PermissionMode;
|
|
33
36
|
/** The behavior shown by both the permission selector and the session report. */
|
|
34
37
|
export declare function permissionModeDescription(mode: PermissionMode): string;
|
|
35
38
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mode.d.ts","sourceRoot":"","sources":["../../src/permissions/mode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,UAAU,EAAgB,MAAM,YAAY,CAAA;AAExE;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,MAAM,cAAc,GAAG,UAAU,CAAA;AAEvC,eAAO,MAAM,gBAAgB,EAAE,SAAS,cAAc,EAAiB,CAAA;AAEvE,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAElE,eAAO,MAAM,gBAAgB,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,KAAK,IAAI,cAA6B,CAAA;AAEzF,iFAAiF;AACjF,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,cAAc,GAAG,MAAM,CAatE;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE;IAC3C,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7B,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAA;IAClC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAA;CAC7B,GAAG;IAAE,IAAI,EAAE,cAAc,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAa/C"}
|
|
1
|
+
{"version":3,"file":"mode.d.ts","sourceRoot":"","sources":["../../src/permissions/mode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,UAAU,EAAgB,MAAM,YAAY,CAAA;AAExE;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,MAAM,cAAc,GAAG,UAAU,CAAA;AAEvC,eAAO,MAAM,gBAAgB,EAAE,SAAS,cAAc,EAAiB,CAAA;AAEvE,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAElE,eAAO,MAAM,gBAAgB,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,KAAK,IAAI,cAA6B,CAAA;AAEzF,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,cAAc,GAAG,MAAM,CAahE;AAED,gFAAgF;AAChF,wBAAgB,uBAAuB,CACtC,IAAI,EAAE,cAAc,EACpB,WAAW,EAAE,OAAO,GAClB,cAAc,CAEhB;AAED,iFAAiF;AACjF,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,cAAc,GAAG,MAAM,CAatE;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE;IAC3C,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7B,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAA;IAClC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAA;CAC7B,GAAG;IAAE,IAAI,EAAE,cAAc,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAa/C"}
|
package/dist/permissions/mode.js
CHANGED
|
@@ -2,6 +2,24 @@ import { REVIEW_MODES, isReviewMode } from '@namzu/sdk';
|
|
|
2
2
|
export const PERMISSION_MODES = REVIEW_MODES;
|
|
3
3
|
export { ACCEPT_EDITS_TOOLS, PLAN_MODE_REFUSAL } from '@namzu/sdk';
|
|
4
4
|
export const isPermissionMode = isReviewMode;
|
|
5
|
+
export function permissionModeLabel(mode) {
|
|
6
|
+
switch (mode) {
|
|
7
|
+
case 'prompt':
|
|
8
|
+
return 'Ask before changes';
|
|
9
|
+
case 'accept-edits':
|
|
10
|
+
return 'Auto-approve edits';
|
|
11
|
+
case 'auto':
|
|
12
|
+
return 'Auto-approve tools';
|
|
13
|
+
case 'strict':
|
|
14
|
+
return 'Preapproved tools only';
|
|
15
|
+
case 'plan':
|
|
16
|
+
return 'Plan (read-only)';
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
/** Session-wide approval overrides prompting, but never plan or strict mode. */
|
|
20
|
+
export function effectivePermissionMode(mode, approvedAll) {
|
|
21
|
+
return approvedAll && (mode === 'prompt' || mode === 'accept-edits') ? 'auto' : mode;
|
|
22
|
+
}
|
|
5
23
|
/** The behavior shown by both the permission selector and the session report. */
|
|
6
24
|
export function permissionModeDescription(mode) {
|
|
7
25
|
switch (mode) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mode.js","sourceRoot":"","sources":["../../src/permissions/mode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAmB,YAAY,EAAE,MAAM,YAAY,CAAA;AA+BxE,MAAM,CAAC,MAAM,gBAAgB,GAA8B,YAAY,CAAA;AAEvE,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAElE,MAAM,CAAC,MAAM,gBAAgB,GAAgD,YAAY,CAAA;AAEzF,iFAAiF;AACjF,MAAM,UAAU,yBAAyB,CAAC,IAAoB;IAC7D,QAAQ,IAAI,EAAE,CAAC;QACd,KAAK,QAAQ;YACZ,OAAO,wCAAwC,CAAA;QAChD,KAAK,cAAc;YAClB,OAAO,gEAAgE,CAAA;QACxE,KAAK,MAAM;YACV,OAAO,0DAA0D,CAAA;QAClE,KAAK,QAAQ;YACZ,OAAO,6DAA6D,CAAA;QACrE,KAAK,MAAM;YACV,OAAO,qDAAqD,CAAA;IAC9D,CAAC;AACF,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAIrC;IACA,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,EAAE,EAAE,CAAC;QAC3C,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAClC,OAAO;gBACN,KAAK,EAAE,qCAAqC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,IAAI;aAC9F,CAAA;QACF,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAA;IAC3B,CAAC;IACD,IAAI,IAAI,CAAC,eAAe;QAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAA;IACjD,4EAA4E;IAC5E,kEAAkE;IAClE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAA;AACtD,CAAC"}
|
|
1
|
+
{"version":3,"file":"mode.js","sourceRoot":"","sources":["../../src/permissions/mode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAmB,YAAY,EAAE,MAAM,YAAY,CAAA;AA+BxE,MAAM,CAAC,MAAM,gBAAgB,GAA8B,YAAY,CAAA;AAEvE,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAElE,MAAM,CAAC,MAAM,gBAAgB,GAAgD,YAAY,CAAA;AAEzF,MAAM,UAAU,mBAAmB,CAAC,IAAoB;IACvD,QAAQ,IAAI,EAAE,CAAC;QACd,KAAK,QAAQ;YACZ,OAAO,oBAAoB,CAAA;QAC5B,KAAK,cAAc;YAClB,OAAO,oBAAoB,CAAA;QAC5B,KAAK,MAAM;YACV,OAAO,oBAAoB,CAAA;QAC5B,KAAK,QAAQ;YACZ,OAAO,wBAAwB,CAAA;QAChC,KAAK,MAAM;YACV,OAAO,kBAAkB,CAAA;IAC3B,CAAC;AACF,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,uBAAuB,CACtC,IAAoB,EACpB,WAAoB;IAEpB,OAAO,WAAW,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,cAAc,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAA;AACrF,CAAC;AAED,iFAAiF;AACjF,MAAM,UAAU,yBAAyB,CAAC,IAAoB;IAC7D,QAAQ,IAAI,EAAE,CAAC;QACd,KAAK,QAAQ;YACZ,OAAO,wCAAwC,CAAA;QAChD,KAAK,cAAc;YAClB,OAAO,gEAAgE,CAAA;QACxE,KAAK,MAAM;YACV,OAAO,0DAA0D,CAAA;QAClE,KAAK,QAAQ;YACZ,OAAO,6DAA6D,CAAA;QACrE,KAAK,MAAM;YACV,OAAO,qDAAqD,CAAA;IAC9D,CAAC;AACF,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAIrC;IACA,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,EAAE,EAAE,CAAC;QAC3C,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAClC,OAAO;gBACN,KAAK,EAAE,qCAAqC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,IAAI;aAC9F,CAAA;QACF,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAA;IAC3B,CAAC;IACD,IAAI,IAAI,CAAC,eAAe;QAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAA;IACjD,4EAA4E;IAC5E,kEAAkE;IAClE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAA;AACtD,CAAC"}
|
|
@@ -20,7 +20,15 @@ export declare function agentTaskPanelPageSize(terminalRows: number | undefined)
|
|
|
20
20
|
* retained by the monitor for explicit history but never reappear here.
|
|
21
21
|
*/
|
|
22
22
|
export declare function activeSubagentCohorts(agents: readonly SubagentActivity[]): readonly SubagentActivity[];
|
|
23
|
-
export type AgentCockpitFocus = 'phases' | 'agents';
|
|
23
|
+
export type AgentCockpitFocus = 'workflows' | 'phases' | 'agents';
|
|
24
|
+
export interface AgentWorkflow {
|
|
25
|
+
readonly id: string;
|
|
26
|
+
readonly name: string;
|
|
27
|
+
readonly startedAt: number;
|
|
28
|
+
readonly status: SubagentActivityStatus;
|
|
29
|
+
readonly phases: readonly AgentPhase[];
|
|
30
|
+
readonly agents: readonly SubagentActivity[];
|
|
31
|
+
}
|
|
24
32
|
export interface AgentPhase {
|
|
25
33
|
readonly id: string;
|
|
26
34
|
readonly workflowId: string;
|
|
@@ -46,6 +54,9 @@ export interface AgentCockpitProps {
|
|
|
46
54
|
*/
|
|
47
55
|
export declare function AgentCockpit({ agents, selectedPhaseId, selectedId, focus, terminalRows, terminalColumns, }: AgentCockpitProps): import("react/jsx-runtime").JSX.Element;
|
|
48
56
|
export declare function agentCockpitIsWide(terminalColumns: number): boolean;
|
|
57
|
+
/** Group retained work before exposing phases. Labels do not create execution dependencies. */
|
|
58
|
+
export declare function agentWorkflows(agents: readonly SubagentActivity[]): readonly AgentWorkflow[];
|
|
59
|
+
export declare function agentWorkflowPageSize(terminalRows: number): number;
|
|
49
60
|
export declare function agentPhases(agents: readonly SubagentActivity[]): readonly AgentPhase[];
|
|
50
61
|
export declare function agentPhasePageSize(terminalRows: number, wide?: boolean): number;
|
|
51
62
|
export interface AgentTranscriptProps {
|
|
@@ -55,7 +66,7 @@ export interface AgentTranscriptProps {
|
|
|
55
66
|
readonly terminalRows: number;
|
|
56
67
|
readonly terminalColumns: number;
|
|
57
68
|
}
|
|
58
|
-
/**
|
|
69
|
+
/** Child screen; leave two parent footer rows and one terminal cursor row free. */
|
|
59
70
|
export declare function AgentTranscript({ agent, tailOffset, terminalRows, terminalColumns, }: AgentTranscriptProps): import("react/jsx-runtime").JSX.Element;
|
|
60
71
|
export declare function agentPickerPageSize(terminalRows: number, wide?: boolean): number;
|
|
61
72
|
export declare function agentTranscriptPageSize(terminalRows: number): number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AgentExplorer.d.ts","sourceRoot":"","sources":["../../src/tui/AgentExplorer.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"AgentExplorer.d.ts","sourceRoot":"","sources":["../../src/tui/AgentExplorer.tsx"],"names":[],"mappings":"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"}
|