@autonav/core 1.12.1 → 2.0.1
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/README.md +1 -1
- package/dist/adapter/navigator-adapter.d.ts +2 -1
- package/dist/adapter/navigator-adapter.d.ts.map +1 -1
- package/dist/adapter/navigator-adapter.js +31 -2
- package/dist/adapter/navigator-adapter.js.map +1 -1
- package/dist/cli/nav-chat.d.ts.map +1 -1
- package/dist/cli/nav-chat.js +57 -35
- package/dist/cli/nav-chat.js.map +1 -1
- package/dist/cli/nav-init.d.ts.map +1 -1
- package/dist/cli/nav-init.js +20 -0
- package/dist/cli/nav-init.js.map +1 -1
- package/dist/cli/nav-mend.js +5 -5
- package/dist/cli/nav-mend.js.map +1 -1
- package/dist/cli/nav-query.d.ts.map +1 -1
- package/dist/cli/nav-query.js +37 -4
- package/dist/cli/nav-query.js.map +1 -1
- package/dist/cli/nav-update.d.ts.map +1 -1
- package/dist/cli/nav-update.js +37 -4
- package/dist/cli/nav-update.js.map +1 -1
- package/dist/cli/resolve-nav.d.ts +11 -0
- package/dist/cli/resolve-nav.d.ts.map +1 -0
- package/dist/cli/resolve-nav.js +71 -0
- package/dist/cli/resolve-nav.js.map +1 -0
- package/dist/conversation/App.d.ts +6 -4
- package/dist/conversation/App.d.ts.map +1 -1
- package/dist/conversation/App.js +70 -65
- package/dist/conversation/App.js.map +1 -1
- package/dist/conversation/index.d.ts +7 -3
- package/dist/conversation/index.d.ts.map +1 -1
- package/dist/conversation/index.js.map +1 -1
- package/dist/harness/chibi-harness.d.ts.map +1 -1
- package/dist/harness/chibi-harness.js +13 -6
- package/dist/harness/chibi-harness.js.map +1 -1
- package/dist/harness/claude-code-harness.d.ts.map +1 -1
- package/dist/harness/claude-code-harness.js +65 -7
- package/dist/harness/claude-code-harness.js.map +1 -1
- package/dist/harness/index.d.ts +1 -1
- package/dist/harness/index.d.ts.map +1 -1
- package/dist/harness/index.js +1 -1
- package/dist/harness/index.js.map +1 -1
- package/dist/harness/sandbox.d.ts +104 -20
- package/dist/harness/sandbox.d.ts.map +1 -1
- package/dist/harness/sandbox.js +261 -42
- package/dist/harness/sandbox.js.map +1 -1
- package/dist/harness/types.d.ts +4 -0
- package/dist/harness/types.d.ts.map +1 -1
- package/dist/interview/App.d.ts +2 -1
- package/dist/interview/App.d.ts.map +1 -1
- package/dist/interview/App.js +65 -57
- package/dist/interview/App.js.map +1 -1
- package/dist/interview/prompts.d.ts +1 -1
- package/dist/interview/prompts.d.ts.map +1 -1
- package/dist/interview/prompts.js +8 -5
- package/dist/interview/prompts.js.map +1 -1
- package/dist/tools/sandbox-query.d.ts +24 -0
- package/dist/tools/sandbox-query.d.ts.map +1 -0
- package/dist/tools/sandbox-query.js +172 -0
- package/dist/tools/sandbox-query.js.map +1 -0
- package/package.json +4 -1
package/dist/harness/sandbox.js
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Sandbox Utility (nono)
|
|
2
|
+
* Sandbox Utility (nono-ts)
|
|
3
3
|
*
|
|
4
|
-
* Wraps subprocess commands with nono
|
|
5
|
-
* (Landlock on Linux, Seatbelt on macOS).
|
|
6
|
-
*
|
|
4
|
+
* Wraps subprocess commands with nono for kernel-enforced sandboxing
|
|
5
|
+
* (Landlock on Linux, Seatbelt on macOS). Uses the nono-ts CapabilitySet
|
|
6
|
+
* API to programmatically build sandbox profiles, then serializes them
|
|
7
|
+
* to JSON config files for child processes.
|
|
7
8
|
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
9
|
+
* Both harnesses use nono as the unified sandbox:
|
|
10
|
+
* - ClaudeCodeHarness → nono wrapper script via pathToClaudeCodeExecutable
|
|
11
|
+
* - ChibiHarness → nono run --config <profile> -- chibi-json
|
|
11
12
|
*
|
|
12
13
|
* Per-operation sandbox profiles:
|
|
13
14
|
* - query: read-only access to navigator directory
|
|
@@ -19,26 +20,70 @@
|
|
|
19
20
|
* own API calls (chibi). It's only useful for scenarios where the API
|
|
20
21
|
* connection is managed in-process.
|
|
21
22
|
*
|
|
22
|
-
* Falls back gracefully when nono is not
|
|
23
|
-
*
|
|
23
|
+
* Falls back gracefully when nono-ts native module is not available
|
|
24
|
+
* (e.g., unsupported platform, missing native binary in CI) — the
|
|
25
|
+
* process runs without sandboxing.
|
|
26
|
+
*
|
|
27
|
+
* CRITICAL: Never call nono-ts `apply()` — that sandboxes the autonav
|
|
28
|
+
* process itself. We only build profiles for child processes.
|
|
24
29
|
*/
|
|
25
|
-
import {
|
|
30
|
+
import { createRequire } from "node:module";
|
|
26
31
|
import * as fs from "node:fs";
|
|
27
32
|
import * as os from "node:os";
|
|
33
|
+
import * as path from "node:path";
|
|
34
|
+
// ── Lazy nono-ts loading ─────────────────────────────────────────────
|
|
35
|
+
// nono-ts uses NAPI-RS native bindings that may not be available on all
|
|
36
|
+
// platforms (e.g., CI runners without the native binary). We load it
|
|
37
|
+
// lazily so the module itself always loads — functions just return
|
|
38
|
+
// "not available" when the native module is missing.
|
|
39
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
40
|
+
let nonoModule = null;
|
|
41
|
+
let nonoLoadAttempted = false;
|
|
42
|
+
function loadNono() {
|
|
43
|
+
if (nonoLoadAttempted)
|
|
44
|
+
return nonoModule !== null;
|
|
45
|
+
nonoLoadAttempted = true;
|
|
46
|
+
try {
|
|
47
|
+
// Use createRequire for synchronous loading in ESM context.
|
|
48
|
+
// nono-ts is a native module (NAPI-RS) that may not have binaries
|
|
49
|
+
// for all platforms. This fails gracefully when the native binary
|
|
50
|
+
// is missing (e.g., CI runners without platform-specific binaries).
|
|
51
|
+
const req = createRequire(import.meta.url);
|
|
52
|
+
nonoModule = req("nono-ts");
|
|
53
|
+
}
|
|
54
|
+
catch {
|
|
55
|
+
nonoModule = null;
|
|
56
|
+
}
|
|
57
|
+
return nonoModule !== null;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Access mode for sandbox path queries.
|
|
61
|
+
* Mirrors nono-ts AccessMode enum so consumers don't need to import nono-ts directly.
|
|
62
|
+
*/
|
|
63
|
+
export var AccessMode;
|
|
64
|
+
(function (AccessMode) {
|
|
65
|
+
AccessMode[AccessMode["Read"] = 0] = "Read";
|
|
66
|
+
AccessMode[AccessMode["Write"] = 1] = "Write";
|
|
67
|
+
AccessMode[AccessMode["ReadWrite"] = 2] = "ReadWrite";
|
|
68
|
+
})(AccessMode || (AccessMode = {}));
|
|
28
69
|
let nonoAvailableCache = null;
|
|
29
70
|
/**
|
|
30
|
-
* Check if nono is available on
|
|
71
|
+
* Check if nono sandboxing is available on this platform (result is cached).
|
|
72
|
+
*
|
|
73
|
+
* Uses nono-ts isSupported() which checks for Seatbelt (macOS) or
|
|
74
|
+
* Landlock (Linux 5.13+) support without spawning a subprocess.
|
|
75
|
+
* Falls back to false if nono-ts native module isn't available.
|
|
31
76
|
*/
|
|
32
77
|
export function isNonoAvailable() {
|
|
33
78
|
if (nonoAvailableCache !== null) {
|
|
34
79
|
return nonoAvailableCache;
|
|
35
80
|
}
|
|
81
|
+
if (!loadNono()) {
|
|
82
|
+
nonoAvailableCache = false;
|
|
83
|
+
return false;
|
|
84
|
+
}
|
|
36
85
|
try {
|
|
37
|
-
|
|
38
|
-
stdio: ["ignore", "ignore", "ignore"],
|
|
39
|
-
timeout: 3_000,
|
|
40
|
-
});
|
|
41
|
-
nonoAvailableCache = true;
|
|
86
|
+
nonoAvailableCache = nonoModule.isSupported() === true;
|
|
42
87
|
}
|
|
43
88
|
catch {
|
|
44
89
|
nonoAvailableCache = false;
|
|
@@ -51,7 +96,7 @@ export function isNonoAvailable() {
|
|
|
51
96
|
* Priority:
|
|
52
97
|
* 1. config.enabled (explicit opt-in/out)
|
|
53
98
|
* 2. AUTONAV_SANDBOX env var ("0" to disable)
|
|
54
|
-
* 3. Auto-detect nono
|
|
99
|
+
* 3. Auto-detect via nono-ts isSupported()
|
|
55
100
|
*/
|
|
56
101
|
export function isSandboxEnabled(config) {
|
|
57
102
|
// Explicit config takes priority
|
|
@@ -93,60 +138,234 @@ function getSystemReadPaths() {
|
|
|
93
138
|
return paths;
|
|
94
139
|
}
|
|
95
140
|
/**
|
|
96
|
-
* Build nono
|
|
141
|
+
* Build a nono-ts CapabilitySet from a SandboxConfig.
|
|
97
142
|
*
|
|
98
|
-
*
|
|
99
|
-
*
|
|
143
|
+
* Maps config fields to nono capabilities:
|
|
144
|
+
* - System read paths (macOS/Linux binaries, homebrew)
|
|
145
|
+
* - readPaths → allowPath(p, AccessMode.Read)
|
|
146
|
+
* - writePaths → allowPath(p, AccessMode.ReadWrite)
|
|
147
|
+
* - allowedCommands → allowCommand(cmd)
|
|
148
|
+
* - blockNetwork → blockNetwork()
|
|
149
|
+
*
|
|
150
|
+
* Paths that don't exist on disk are silently skipped (nono-ts
|
|
151
|
+
* validates path existence and throws on missing paths).
|
|
152
|
+
*
|
|
153
|
+
* Returns null if nono-ts is not available.
|
|
100
154
|
*/
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
const
|
|
155
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
156
|
+
export function buildCapabilitySet(config) {
|
|
157
|
+
if (!loadNono())
|
|
158
|
+
return null;
|
|
159
|
+
const { CapabilitySet: CapsClass, AccessMode: AM } = nonoModule;
|
|
160
|
+
const caps = new CapsClass();
|
|
106
161
|
// System binary paths (read-only) — needed for plugin script execution
|
|
107
162
|
for (const p of getSystemReadPaths()) {
|
|
108
|
-
|
|
163
|
+
try {
|
|
164
|
+
caps.allowPath(p, AM.Read);
|
|
165
|
+
}
|
|
166
|
+
catch {
|
|
167
|
+
// Path may not exist or be inaccessible — skip
|
|
168
|
+
}
|
|
109
169
|
}
|
|
110
170
|
// Read-only paths
|
|
111
171
|
if (config.readPaths) {
|
|
112
172
|
for (const p of config.readPaths) {
|
|
113
|
-
|
|
173
|
+
try {
|
|
174
|
+
caps.allowPath(p, AM.Read);
|
|
175
|
+
}
|
|
176
|
+
catch {
|
|
177
|
+
// Path doesn't exist — skip silently
|
|
178
|
+
}
|
|
114
179
|
}
|
|
115
180
|
}
|
|
116
181
|
// Read+write paths
|
|
117
182
|
if (config.writePaths) {
|
|
118
183
|
for (const p of config.writePaths) {
|
|
119
|
-
|
|
184
|
+
try {
|
|
185
|
+
caps.allowPath(p, AM.ReadWrite);
|
|
186
|
+
}
|
|
187
|
+
catch {
|
|
188
|
+
// Path doesn't exist — skip silently
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
// Allowed commands
|
|
193
|
+
if (config.allowedCommands) {
|
|
194
|
+
for (const cmd of config.allowedCommands) {
|
|
195
|
+
caps.allowCommand(cmd);
|
|
120
196
|
}
|
|
121
197
|
}
|
|
122
198
|
// Network blocking
|
|
123
199
|
if (config.blockNetwork) {
|
|
124
|
-
|
|
200
|
+
caps.blockNetwork();
|
|
201
|
+
}
|
|
202
|
+
return caps;
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Write a nono sandbox profile JSON file to disk.
|
|
206
|
+
*
|
|
207
|
+
* Serializes the CapabilitySet via SandboxState and writes to a temp file.
|
|
208
|
+
* Returns the absolute path to the profile file.
|
|
209
|
+
*
|
|
210
|
+
* Note: allowedCommands are NOT included in the profile JSON (nono-ts
|
|
211
|
+
* SandboxState only serializes fs + network). Commands are passed as
|
|
212
|
+
* --allow-command flags on the CLI.
|
|
213
|
+
*/
|
|
214
|
+
export function writeProfile(config, dir) {
|
|
215
|
+
const caps = buildCapabilitySet(config);
|
|
216
|
+
if (!caps) {
|
|
217
|
+
throw new Error("nono-ts not available — cannot write sandbox profile");
|
|
218
|
+
}
|
|
219
|
+
const { SandboxState: SSClass } = nonoModule;
|
|
220
|
+
const state = SSClass.fromCaps(caps);
|
|
221
|
+
const json = state.toJson();
|
|
222
|
+
const profilePath = path.join(dir, `nono-profile-${Date.now()}.json`);
|
|
223
|
+
fs.writeFileSync(profilePath, json, "utf-8");
|
|
224
|
+
return profilePath;
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Build CLI arguments for allowedCommands (not included in profile JSON).
|
|
228
|
+
*/
|
|
229
|
+
function commandFlags(config) {
|
|
230
|
+
if (!config?.allowedCommands?.length)
|
|
231
|
+
return [];
|
|
232
|
+
const flags = [];
|
|
233
|
+
for (const cmd of config.allowedCommands) {
|
|
234
|
+
flags.push("--allow-command", cmd);
|
|
125
235
|
}
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
236
|
+
return flags;
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Build nono CLI flags string for env var passing (NONO_FLAGS).
|
|
240
|
+
*
|
|
241
|
+
* Used by ClaudeCodeHarness where the wrapper script reads NONO_FLAGS
|
|
242
|
+
* from the environment (trellis pattern).
|
|
243
|
+
*/
|
|
244
|
+
export function buildNonoFlags(config) {
|
|
245
|
+
// Note: do NOT include --exec here. The SDK spawns claude with pipes
|
|
246
|
+
// (not TTY), and --exec causes nono to do execvp() which can interfere
|
|
247
|
+
// with pipe-based stdio management. --exec is only for interactive
|
|
248
|
+
// terminal sessions (e.g., running `nono run -- claude` directly).
|
|
249
|
+
const parts = ["--allow-cwd"];
|
|
250
|
+
parts.push(...commandFlags(config));
|
|
251
|
+
return parts.join(" ");
|
|
129
252
|
}
|
|
130
253
|
/**
|
|
131
254
|
* Wrap a command with nono sandbox if enabled.
|
|
132
255
|
*
|
|
133
|
-
*
|
|
134
|
-
*
|
|
256
|
+
* Uses profile-based approach:
|
|
257
|
+
* nono run --config <profile> --silent --allow-cwd [--allow-command X] -- cmd args
|
|
135
258
|
*
|
|
136
|
-
* If disabled
|
|
137
|
-
*
|
|
259
|
+
* If sandboxing is disabled, returns the command unchanged (passthrough).
|
|
260
|
+
*
|
|
261
|
+
* @param profileDir - Directory to write the profile file. Defaults to os.tmpdir().
|
|
138
262
|
*/
|
|
139
|
-
export function wrapCommand(command, args, config) {
|
|
263
|
+
export function wrapCommand(command, args, config, profileDir) {
|
|
140
264
|
if (!config || !isSandboxEnabled(config)) {
|
|
141
265
|
return { command, args };
|
|
142
266
|
}
|
|
143
|
-
const
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
267
|
+
const dir = profileDir || os.tmpdir();
|
|
268
|
+
const profilePath = writeProfile(config, dir);
|
|
269
|
+
const nonoArgs = [
|
|
270
|
+
"run",
|
|
271
|
+
"--config", profilePath,
|
|
272
|
+
"--silent",
|
|
273
|
+
"--allow-cwd",
|
|
274
|
+
...commandFlags(config),
|
|
275
|
+
"--",
|
|
276
|
+
command,
|
|
277
|
+
...args,
|
|
278
|
+
];
|
|
147
279
|
return {
|
|
148
280
|
command: "nono",
|
|
149
|
-
args:
|
|
281
|
+
args: nonoArgs,
|
|
150
282
|
};
|
|
151
283
|
}
|
|
284
|
+
/**
|
|
285
|
+
* Create a shell wrapper script for the Claude Code SDK.
|
|
286
|
+
*
|
|
287
|
+
* The SDK accepts `pathToClaudeCodeExecutable` — a custom executable path.
|
|
288
|
+
* This generates a temp shell script that wraps `claude` with nono enforcement.
|
|
289
|
+
*
|
|
290
|
+
* Uses --exec flag to preserve TTY for interactive Claude Code sessions.
|
|
291
|
+
*
|
|
292
|
+
* @returns Absolute path to the wrapper script.
|
|
293
|
+
*/
|
|
294
|
+
export function createSdkWrapper(_profilePath, dir, _config) {
|
|
295
|
+
const wrapperPath = path.join(dir, "nono-claude-wrapper.sh");
|
|
296
|
+
// Use nono's built-in claude-code profile as a base — it provides all
|
|
297
|
+
// the paths claude needs (config, keychain, tmp dirs, etc.) and is
|
|
298
|
+
// maintained by the nono team. Our custom --config adds navigator-specific
|
|
299
|
+
// paths on top, and NONO_FLAGS adds --allow-command flags.
|
|
300
|
+
//
|
|
301
|
+
// Workaround: nono --silent doesn't suppress WARN messages for missing
|
|
302
|
+
// optional profile paths (e.g., ~/.vscode) and they go to stdout,
|
|
303
|
+
// corrupting the SDK's JSON stream. We use --exec so nono replaces
|
|
304
|
+
// itself with claude (no monitoring layer), and pre-create the dirs
|
|
305
|
+
// nono expects so it doesn't warn. This is simpler and avoids fd
|
|
306
|
+
// juggling that can interfere with multi-turn pipe management.
|
|
307
|
+
const script = `#!/usr/bin/env bash
|
|
308
|
+
set -euo pipefail
|
|
309
|
+
# Pre-create optional paths the claude-code profile references to
|
|
310
|
+
# avoid nono WARN messages on stdout that corrupt the SDK JSON stream.
|
|
311
|
+
mkdir -p "\${HOME}/.vscode" 2>/dev/null || true
|
|
312
|
+
mkdir -p "\${HOME}/Library/Application Support/Code" 2>/dev/null || true
|
|
313
|
+
touch "\${HOME}/.gitignore_global" 2>/dev/null || true
|
|
314
|
+
exec nono run \\
|
|
315
|
+
--silent \\
|
|
316
|
+
--no-diagnostics \\
|
|
317
|
+
--exec \\
|
|
318
|
+
--profile claude-code \\
|
|
319
|
+
--config "\${NONO_PROFILE}" \\
|
|
320
|
+
\${NONO_FLAGS:-} \\
|
|
321
|
+
--allow "\${HOME}/.claude-personal" \\
|
|
322
|
+
-- claude "$@"
|
|
323
|
+
`;
|
|
324
|
+
fs.writeFileSync(wrapperPath, script, "utf-8");
|
|
325
|
+
fs.chmodSync(wrapperPath, 0o755);
|
|
326
|
+
return wrapperPath;
|
|
327
|
+
}
|
|
328
|
+
/**
|
|
329
|
+
* Query whether a path operation would be allowed by a sandbox config.
|
|
330
|
+
*
|
|
331
|
+
* Uses nono-ts QueryContext for dry-run policy checks without
|
|
332
|
+
* actually applying any sandbox. Useful for the sandbox_query
|
|
333
|
+
* debugging tool.
|
|
334
|
+
*/
|
|
335
|
+
export function querySandbox(config, targetPath, mode) {
|
|
336
|
+
const caps = buildCapabilitySet(config);
|
|
337
|
+
if (!caps) {
|
|
338
|
+
return { status: "allowed", reason: "nono_unavailable" };
|
|
339
|
+
}
|
|
340
|
+
const { QueryContext: QCClass, AccessMode: AM } = nonoModule;
|
|
341
|
+
const nonoMode = mode === AccessMode.Read ? AM.Read
|
|
342
|
+
: mode === AccessMode.Write ? AM.Write
|
|
343
|
+
: AM.ReadWrite;
|
|
344
|
+
const qc = new QCClass(caps);
|
|
345
|
+
return qc.queryPath(targetPath, nonoMode);
|
|
346
|
+
}
|
|
347
|
+
/**
|
|
348
|
+
* Query whether network access would be allowed by a sandbox config.
|
|
349
|
+
*/
|
|
350
|
+
export function querySandboxNetwork(config) {
|
|
351
|
+
const caps = buildCapabilitySet(config);
|
|
352
|
+
if (!caps) {
|
|
353
|
+
return { status: "allowed", reason: "nono_unavailable" };
|
|
354
|
+
}
|
|
355
|
+
const { QueryContext: QCClass } = nonoModule;
|
|
356
|
+
const qc = new QCClass(caps);
|
|
357
|
+
return qc.queryNetwork();
|
|
358
|
+
}
|
|
359
|
+
/**
|
|
360
|
+
* Get a human-readable summary of the sandbox policy.
|
|
361
|
+
*
|
|
362
|
+
* Uses CapabilitySet.summary() from nono-ts.
|
|
363
|
+
*/
|
|
364
|
+
export function getSandboxSummary(config) {
|
|
365
|
+
const caps = buildCapabilitySet(config);
|
|
366
|
+
if (!caps) {
|
|
367
|
+
return "Sandbox: nono-ts not available on this platform";
|
|
368
|
+
}
|
|
369
|
+
return caps.summary();
|
|
370
|
+
}
|
|
152
371
|
//# sourceMappingURL=sandbox.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sandbox.js","sourceRoot":"","sources":["../../src/harness/sandbox.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"sandbox.js","sourceRoot":"","sources":["../../src/harness/sandbox.ts"],"names":[],"mappings":"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"}
|
package/dist/harness/types.d.ts
CHANGED
|
@@ -32,6 +32,10 @@ export interface SandboxConfig {
|
|
|
32
32
|
writePaths?: string[];
|
|
33
33
|
/** Block all network access */
|
|
34
34
|
blockNetwork?: boolean;
|
|
35
|
+
/** CLI tools nono should permit (e.g., "linear", "gh") */
|
|
36
|
+
allowedCommands?: string[];
|
|
37
|
+
/** Future: network host allowlist (not yet supported by nono) */
|
|
38
|
+
allowedHosts?: string[];
|
|
35
39
|
}
|
|
36
40
|
/**
|
|
37
41
|
* Configuration for an agent session.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/harness/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEvD;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,aAAa,GAAG,OAAO,GAAG,UAAU,CAAC;AAE/D;;;;;;;;;GASG;AACH,MAAM,WAAW,aAAa;IAC5B,kGAAkG;IAClG,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,kCAAkC;IAClC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,mCAAmC;IACnC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,+BAA+B;IAC/B,YAAY,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/harness/types.ts"],"names":[],"mappings":"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"}
|
package/dist/interview/App.d.ts
CHANGED
|
@@ -9,13 +9,14 @@ import { type Harness } from "../harness/index.js";
|
|
|
9
9
|
interface Message {
|
|
10
10
|
role: "user" | "assistant";
|
|
11
11
|
content: string;
|
|
12
|
+
id: number;
|
|
12
13
|
}
|
|
13
14
|
interface InterviewAppProps {
|
|
14
15
|
name: string;
|
|
15
16
|
navigatorPath: string;
|
|
16
17
|
packContext?: PackContext;
|
|
17
18
|
analysisContext?: AnalysisResult;
|
|
18
|
-
initialMessages?: Message[];
|
|
19
|
+
initialMessages?: Omit<Message, "id">[];
|
|
19
20
|
onComplete: (config: NavigatorConfig) => void;
|
|
20
21
|
harness: Harness;
|
|
21
22
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"App.d.ts","sourceRoot":"","sources":["../../src/interview/App.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,EAGL,KAAK,eAAe,EACpB,KAAK,WAAW,EACjB,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAGhE,OAAO,EAAE,KAAK,OAAO,EAAgC,MAAM,qBAAqB,CAAC;AAwHjF,UAAU,OAAO;IACf,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"App.d.ts","sourceRoot":"","sources":["../../src/interview/App.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,EAGL,KAAK,eAAe,EACpB,KAAK,WAAW,EACjB,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAGhE,OAAO,EAAE,KAAK,OAAO,EAAgC,MAAM,qBAAqB,CAAC;AAwHjF,UAAU,OAAO;IACf,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,UAAU,iBAAiB;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,eAAe,CAAC,EAAE,cAAc,CAAC;IACjC,eAAe,CAAC,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC;IACxC,UAAU,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,IAAI,CAAC;IAC9C,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,wBAAgB,YAAY,CAAC,EAC3B,IAAI,EACJ,aAAa,EACb,WAAW,EACX,eAAe,EACf,eAAe,EACf,UAAU,EACV,OAAO,GACR,EAAE,iBAAiB,2CA+WnB"}
|