@namzu/cli 12.1.0 → 14.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/README.md +35 -2
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +119 -60
- package/dist/cli.js.map +1 -1
- package/dist/commands/acp.d.ts +24 -8
- package/dist/commands/acp.d.ts.map +1 -1
- package/dist/commands/acp.js +221 -80
- package/dist/commands/acp.js.map +1 -1
- package/dist/commands/drain.d.ts.map +1 -1
- package/dist/commands/drain.js +45 -9
- package/dist/commands/drain.js.map +1 -1
- package/dist/commands/login.d.ts +2 -0
- package/dist/commands/login.d.ts.map +1 -1
- package/dist/commands/login.js +79 -21
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/prior-messages.d.ts +11 -0
- package/dist/commands/prior-messages.d.ts.map +1 -0
- package/dist/commands/prior-messages.js +280 -0
- package/dist/commands/prior-messages.js.map +1 -0
- package/dist/commands/resume.d.ts.map +1 -1
- package/dist/commands/resume.js +21 -19
- package/dist/commands/resume.js.map +1 -1
- package/dist/commands/run-stream.d.ts +5 -3
- package/dist/commands/run-stream.d.ts.map +1 -1
- package/dist/commands/run-stream.js +66 -62
- package/dist/commands/run-stream.js.map +1 -1
- package/dist/commands/run.d.ts.map +1 -1
- package/dist/commands/run.js +50 -37
- package/dist/commands/run.js.map +1 -1
- package/dist/config/debug.d.ts +55 -0
- package/dist/config/debug.d.ts.map +1 -0
- package/dist/config/debug.js +126 -0
- package/dist/config/debug.js.map +1 -0
- package/dist/config/load.d.ts +88 -4
- package/dist/config/load.d.ts.map +1 -1
- package/dist/config/load.js +386 -56
- package/dist/config/load.js.map +1 -1
- package/dist/config/schema.d.ts +87 -5
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js +5 -5
- package/dist/config/schema.js.map +1 -1
- package/dist/config/trusted-project-context.d.ts +11 -0
- package/dist/config/trusted-project-context.d.ts.map +1 -0
- package/dist/config/trusted-project-context.js +28 -0
- package/dist/config/trusted-project-context.js.map +1 -0
- package/dist/context/project-path.d.ts +3 -0
- package/dist/context/project-path.d.ts.map +1 -0
- package/dist/context/project-path.js +16 -0
- package/dist/context/project-path.js.map +1 -0
- package/dist/context/project-tracker.d.ts +30 -0
- package/dist/context/project-tracker.d.ts.map +1 -0
- package/dist/context/project-tracker.js +217 -0
- package/dist/context/project-tracker.js.map +1 -0
- package/dist/context/sandbox.d.ts +29 -9
- package/dist/context/sandbox.d.ts.map +1 -1
- package/dist/context/sandbox.js +8 -0
- package/dist/context/sandbox.js.map +1 -1
- package/dist/doctor/checks/credentials.d.ts.map +1 -1
- package/dist/doctor/checks/credentials.js +7 -1
- package/dist/doctor/checks/credentials.js.map +1 -1
- package/dist/exit-codes.d.ts +5 -4
- package/dist/exit-codes.d.ts.map +1 -1
- package/dist/exit-codes.js +5 -4
- package/dist/exit-codes.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/integrations/clipboard/text.d.ts +43 -0
- package/dist/integrations/clipboard/text.d.ts.map +1 -0
- package/dist/integrations/clipboard/text.js +43 -0
- package/dist/integrations/clipboard/text.js.map +1 -0
- package/dist/integrations/mcp/servers.d.ts +9 -0
- package/dist/integrations/mcp/servers.d.ts.map +1 -1
- package/dist/integrations/mcp/servers.js +11 -4
- package/dist/integrations/mcp/servers.js.map +1 -1
- package/dist/integrations/notifications/terminal.d.ts +32 -0
- package/dist/integrations/notifications/terminal.d.ts.map +1 -0
- package/dist/integrations/notifications/terminal.js +46 -0
- package/dist/integrations/notifications/terminal.js.map +1 -0
- package/dist/integrations/plugins/runtime.d.ts +17 -0
- package/dist/integrations/plugins/runtime.d.ts.map +1 -0
- package/dist/integrations/plugins/runtime.js +100 -0
- package/dist/integrations/plugins/runtime.js.map +1 -0
- package/dist/integrations/providers/codex-device-login.d.ts +27 -0
- package/dist/integrations/providers/codex-device-login.d.ts.map +1 -0
- package/dist/integrations/providers/codex-device-login.js +195 -0
- package/dist/integrations/providers/codex-device-login.js.map +1 -0
- package/dist/integrations/providers/codex-oauth.d.ts +10 -0
- package/dist/integrations/providers/codex-oauth.d.ts.map +1 -0
- package/dist/integrations/providers/codex-oauth.js +95 -0
- package/dist/integrations/providers/codex-oauth.js.map +1 -0
- package/dist/integrations/providers/credential-store.d.ts +40 -4
- package/dist/integrations/providers/credential-store.d.ts.map +1 -1
- package/dist/integrations/providers/credential-store.js +236 -18
- package/dist/integrations/providers/credential-store.js.map +1 -1
- package/dist/integrations/providers/discover.d.ts +25 -13
- package/dist/integrations/providers/discover.d.ts.map +1 -1
- package/dist/integrations/providers/discover.js +98 -44
- package/dist/integrations/providers/discover.js.map +1 -1
- package/dist/integrations/providers/harness-credentials.d.ts +36 -0
- package/dist/integrations/providers/harness-credentials.d.ts.map +1 -0
- package/dist/integrations/providers/harness-credentials.js +146 -0
- package/dist/integrations/providers/harness-credentials.js.map +1 -0
- package/dist/integrations/providers/identity.d.ts +8 -15
- package/dist/integrations/providers/identity.d.ts.map +1 -1
- package/dist/integrations/providers/identity.js +8 -15
- package/dist/integrations/providers/identity.js.map +1 -1
- package/dist/integrations/providers/index.d.ts +7 -4
- package/dist/integrations/providers/index.d.ts.map +1 -1
- package/dist/integrations/providers/index.js +6 -3
- package/dist/integrations/providers/index.js.map +1 -1
- package/dist/integrations/providers/keychain.d.ts +0 -13
- package/dist/integrations/providers/keychain.d.ts.map +1 -1
- package/dist/integrations/providers/keychain.js +0 -76
- package/dist/integrations/providers/keychain.js.map +1 -1
- package/dist/integrations/providers/oauth.d.ts +46 -17
- package/dist/integrations/providers/oauth.d.ts.map +1 -1
- package/dist/integrations/providers/oauth.js +175 -45
- package/dist/integrations/providers/oauth.js.map +1 -1
- package/dist/integrations/providers/register.d.ts.map +1 -1
- package/dist/integrations/providers/register.js +9 -1
- package/dist/integrations/providers/register.js.map +1 -1
- package/dist/integrations/providers/registry.d.ts +8 -1
- package/dist/integrations/providers/registry.d.ts.map +1 -1
- package/dist/integrations/providers/registry.js +29 -0
- package/dist/integrations/providers/registry.js.map +1 -1
- package/dist/integrations/providers/subscription-login.d.ts +2 -0
- package/dist/integrations/providers/subscription-login.d.ts.map +1 -1
- package/dist/integrations/providers/subscription-login.js +117 -14
- package/dist/integrations/providers/subscription-login.js.map +1 -1
- package/dist/integrations/sessions/store.d.ts +111 -1
- package/dist/integrations/sessions/store.d.ts.map +1 -1
- package/dist/integrations/sessions/store.js +400 -7
- package/dist/integrations/sessions/store.js.map +1 -1
- package/dist/integrations/sessions/transcript-export.d.ts +25 -0
- package/dist/integrations/sessions/transcript-export.d.ts.map +1 -0
- package/dist/integrations/sessions/transcript-export.js +441 -0
- package/dist/integrations/sessions/transcript-export.js.map +1 -0
- package/dist/integrations/sessions/turn-evidence.d.ts +138 -0
- package/dist/integrations/sessions/turn-evidence.d.ts.map +1 -0
- package/dist/integrations/sessions/turn-evidence.js +506 -0
- package/dist/integrations/sessions/turn-evidence.js.map +1 -0
- package/dist/integrations/subagents/runtime.d.ts +7 -12
- package/dist/integrations/subagents/runtime.d.ts.map +1 -1
- package/dist/integrations/subagents/runtime.js +19 -10
- package/dist/integrations/subagents/runtime.js.map +1 -1
- package/dist/integrations/trust/store.d.ts.map +1 -1
- package/dist/integrations/trust/store.js +27 -13
- package/dist/integrations/trust/store.js.map +1 -1
- package/dist/permissions/canonical-project.d.ts +9 -0
- package/dist/permissions/canonical-project.d.ts.map +1 -0
- package/dist/permissions/canonical-project.js +13 -0
- package/dist/permissions/canonical-project.js.map +1 -0
- package/dist/permissions/checks.d.ts +65 -0
- package/dist/permissions/checks.d.ts.map +1 -0
- package/dist/permissions/checks.js +122 -0
- package/dist/permissions/checks.js.map +1 -0
- package/dist/permissions/headless-trust.d.ts +9 -5
- package/dist/permissions/headless-trust.d.ts.map +1 -1
- package/dist/permissions/headless-trust.js +18 -4
- package/dist/permissions/headless-trust.js.map +1 -1
- package/dist/permissions/rules.d.ts +16 -7
- package/dist/permissions/rules.d.ts.map +1 -1
- package/dist/permissions/rules.js +78 -13
- package/dist/permissions/rules.js.map +1 -1
- package/dist/tui/App.d.ts +5 -2
- package/dist/tui/App.d.ts.map +1 -1
- package/dist/tui/App.js +1621 -196
- package/dist/tui/App.js.map +1 -1
- package/dist/tui/Composer.d.ts +14 -3
- package/dist/tui/Composer.d.ts.map +1 -1
- package/dist/tui/Composer.js +53 -15
- package/dist/tui/Composer.js.map +1 -1
- package/dist/tui/EditPromptPicker.d.ts +8 -0
- package/dist/tui/EditPromptPicker.d.ts.map +1 -0
- package/dist/tui/EditPromptPicker.js +18 -0
- package/dist/tui/EditPromptPicker.js.map +1 -0
- package/dist/tui/LiveActivity.d.ts.map +1 -1
- package/dist/tui/LiveActivity.js +2 -1
- package/dist/tui/LiveActivity.js.map +1 -1
- package/dist/tui/Markdown.d.ts.map +1 -1
- package/dist/tui/Markdown.js +2 -1
- package/dist/tui/Markdown.js.map +1 -1
- package/dist/tui/PermissionOverlay.d.ts.map +1 -1
- package/dist/tui/PermissionOverlay.js +7 -1
- package/dist/tui/PermissionOverlay.js.map +1 -1
- package/dist/tui/Picker.d.ts +8 -6
- package/dist/tui/Picker.d.ts.map +1 -1
- package/dist/tui/Picker.js +145 -18
- package/dist/tui/Picker.js.map +1 -1
- package/dist/tui/ResumePicker.d.ts.map +1 -1
- package/dist/tui/ResumePicker.js +1 -1
- package/dist/tui/ResumePicker.js.map +1 -1
- package/dist/tui/Transcript.d.ts +4 -2
- package/dist/tui/Transcript.d.ts.map +1 -1
- package/dist/tui/Transcript.js +31 -5
- package/dist/tui/Transcript.js.map +1 -1
- package/dist/tui/agent.d.ts +123 -19
- package/dist/tui/agent.d.ts.map +1 -1
- package/dist/tui/agent.js +757 -144
- package/dist/tui/agent.js.map +1 -1
- package/dist/tui/compact-transcript.d.ts +24 -0
- package/dist/tui/compact-transcript.d.ts.map +1 -0
- package/dist/tui/compact-transcript.js +46 -0
- package/dist/tui/compact-transcript.js.map +1 -0
- package/dist/tui/conversation-history.d.ts +33 -0
- package/dist/tui/conversation-history.d.ts.map +1 -0
- package/dist/tui/conversation-history.js +42 -0
- package/dist/tui/conversation-history.js.map +1 -0
- package/dist/tui/edit-prompts.d.ts +23 -0
- package/dist/tui/edit-prompts.d.ts.map +1 -0
- package/dist/tui/edit-prompts.js +35 -0
- package/dist/tui/edit-prompts.js.map +1 -0
- package/dist/tui/live-window.d.ts +3 -1
- package/dist/tui/live-window.d.ts.map +1 -1
- package/dist/tui/live-window.js +20 -8
- package/dist/tui/live-window.js.map +1 -1
- package/dist/tui/login-prompt.d.ts +5 -0
- package/dist/tui/login-prompt.d.ts.map +1 -1
- package/dist/tui/login-prompt.js +14 -0
- package/dist/tui/login-prompt.js.map +1 -1
- package/dist/tui/slashCommands.d.ts +178 -9
- package/dist/tui/slashCommands.d.ts.map +1 -1
- package/dist/tui/slashCommands.js +340 -16
- package/dist/tui/slashCommands.js.map +1 -1
- package/dist/tui/terminal-display.d.ts +12 -0
- package/dist/tui/terminal-display.d.ts.map +1 -0
- package/dist/tui/terminal-display.js +65 -0
- package/dist/tui/terminal-display.js.map +1 -0
- package/dist/tui/types.d.ts +14 -2
- package/dist/tui/types.d.ts.map +1 -1
- package/dist/tui/workspace-diff.d.ts +40 -0
- package/dist/tui/workspace-diff.d.ts.map +1 -0
- package/dist/tui/workspace-diff.js +101 -0
- package/dist/tui/workspace-diff.js.map +1 -0
- package/package.json +8 -8
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Values-free configuration provenance for the interactive debug surface.
|
|
3
|
+
*
|
|
4
|
+
* `NamzuCliConfig` can carry command arguments, destinations and permission
|
|
5
|
+
* patterns. None belongs in a terminal diagnostic merely because the loader
|
|
6
|
+
* knows it. This snapshot therefore has no slot for a value: it keeps only the
|
|
7
|
+
* top-level key and the source that won.
|
|
8
|
+
*/
|
|
9
|
+
import { LOG_SECRET_PATTERNS } from '@namzu/sdk';
|
|
10
|
+
/**
|
|
11
|
+
* Copy launch-time provenance and apply the two CLI value overrides.
|
|
12
|
+
*
|
|
13
|
+
* Booleans rather than the flag values themselves are deliberate: a config
|
|
14
|
+
* value cannot leak through an API that never accepts one.
|
|
15
|
+
*/
|
|
16
|
+
export function createConfigDebugSnapshot(provenance, options = {}) {
|
|
17
|
+
const sources = {
|
|
18
|
+
...provenance,
|
|
19
|
+
};
|
|
20
|
+
if (options.formatFromCli)
|
|
21
|
+
sources.format = { kind: 'cli-flag', flag: '--format' };
|
|
22
|
+
if (options.quietFromCli)
|
|
23
|
+
sources.quiet = { kind: 'cli-flag', flag: '--quiet' };
|
|
24
|
+
const selectedProfile = options.selectedProfile
|
|
25
|
+
? Object.freeze({ ...options.selectedProfile })
|
|
26
|
+
: undefined;
|
|
27
|
+
return Object.freeze({
|
|
28
|
+
sources: Object.freeze(sources),
|
|
29
|
+
...(selectedProfile ? { selectedProfile } : {}),
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
/** One formatter for boot logs and operator diagnostics. */
|
|
33
|
+
export function formatConfigSource(source, dynamic = (value) => value) {
|
|
34
|
+
switch (source.kind) {
|
|
35
|
+
case 'default':
|
|
36
|
+
return 'default';
|
|
37
|
+
case 'user-file':
|
|
38
|
+
return `user-file ${dynamic(source.path)}`;
|
|
39
|
+
case 'project-file':
|
|
40
|
+
return `project-file ${dynamic(source.path)}`;
|
|
41
|
+
case 'profile':
|
|
42
|
+
// The name AND the file. Neither answers on its own: the name does
|
|
43
|
+
// not say which file to open, and the path does not say which of
|
|
44
|
+
// that file's profiles is in force.
|
|
45
|
+
return `profile ${dynamic(source.name)} (${dynamic(source.path)})`;
|
|
46
|
+
case 'env':
|
|
47
|
+
return `env ${dynamic(source.variable)}`;
|
|
48
|
+
case 'managed':
|
|
49
|
+
return `managed ${dynamic(source.path)}`;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
/** Render the source snapshot without ever receiving a resolved config value. */
|
|
53
|
+
export function renderConfigDebug(snapshot) {
|
|
54
|
+
if (!snapshot) {
|
|
55
|
+
return [
|
|
56
|
+
'Configuration provenance is unavailable in this embedded TUI.',
|
|
57
|
+
'Restart through the namzu CLI to inspect launch-time sources.',
|
|
58
|
+
].join('\n');
|
|
59
|
+
}
|
|
60
|
+
const lines = [
|
|
61
|
+
'Configuration precedence (low -> high):',
|
|
62
|
+
' default -> user file -> project file -> selected profile(s) -> environment -> managed file',
|
|
63
|
+
' --format and --quiet override only their matching keys for this process.',
|
|
64
|
+
];
|
|
65
|
+
if (snapshot.selectedProfile) {
|
|
66
|
+
lines.push('', `Selected profile: ${configMetadataLiteral(snapshot.selectedProfile.name)} (selected by ${snapshot.selectedProfile.selectedBy})`);
|
|
67
|
+
}
|
|
68
|
+
lines.push('', 'Winning sources (resolved values are deliberately omitted):');
|
|
69
|
+
const entries = Object.entries(snapshot.sources).sort(([left], [right]) => left < right ? -1 : left > right ? 1 : 0);
|
|
70
|
+
if (entries.length === 0) {
|
|
71
|
+
lines.push(' <none>');
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
for (const [key, source] of entries) {
|
|
75
|
+
if (!source)
|
|
76
|
+
continue;
|
|
77
|
+
lines.push(` ${key}: ${formatEffectiveSource(source)}`);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
return lines.join('\n');
|
|
81
|
+
}
|
|
82
|
+
function formatEffectiveSource(source) {
|
|
83
|
+
return source.kind === 'cli-flag'
|
|
84
|
+
? `CLI flag ${source.flag}`
|
|
85
|
+
: formatConfigSource(source, configMetadataLiteral);
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Dynamic source metadata becomes a quoted printable-ASCII literal.
|
|
89
|
+
*
|
|
90
|
+
* Escaping every non-ASCII code point is intentionally stronger than a C0
|
|
91
|
+
* filter: C1 CSI/OSC/ST controls and bidi format characters can otherwise
|
|
92
|
+
* change terminal state or make the visible precedence read backwards. A
|
|
93
|
+
* backslash is escaped too, so a literal `\\u{202e}` in a path cannot be
|
|
94
|
+
* mistaken for a code point this function encoded.
|
|
95
|
+
*/
|
|
96
|
+
export function configMetadataLiteral(value) {
|
|
97
|
+
const redacted = redactSourceMetadata(value);
|
|
98
|
+
let out = '"';
|
|
99
|
+
for (const character of redacted) {
|
|
100
|
+
const codePoint = character.codePointAt(0);
|
|
101
|
+
if (codePoint === undefined)
|
|
102
|
+
continue;
|
|
103
|
+
if (character === '\\')
|
|
104
|
+
out += '\\\\';
|
|
105
|
+
else if (character === '"')
|
|
106
|
+
out += '\\"';
|
|
107
|
+
else if (codePoint >= 0x20 && codePoint <= 0x7e)
|
|
108
|
+
out += character;
|
|
109
|
+
else
|
|
110
|
+
out += `\\u{${codePoint.toString(16).padStart(4, '0')}}`;
|
|
111
|
+
}
|
|
112
|
+
return `${out}"`;
|
|
113
|
+
}
|
|
114
|
+
/** Use the SDK logger's one credential-pattern vocabulary at this new sink boundary. */
|
|
115
|
+
function redactSourceMetadata(value) {
|
|
116
|
+
let out = value;
|
|
117
|
+
for (const [label, pattern] of LOG_SECRET_PATTERNS) {
|
|
118
|
+
// The public table contains reusable global regexes. Reset on both sides
|
|
119
|
+
// so rendering one source cannot change whether the next source matches.
|
|
120
|
+
pattern.lastIndex = 0;
|
|
121
|
+
out = out.replace(pattern, `[REDACTED:${label}]`);
|
|
122
|
+
pattern.lastIndex = 0;
|
|
123
|
+
}
|
|
124
|
+
return out;
|
|
125
|
+
}
|
|
126
|
+
//# sourceMappingURL=debug.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"debug.js","sourceRoot":"","sources":["../../src/config/debug.ts"],"names":[],"mappings":"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"}
|
package/dist/config/load.d.ts
CHANGED
|
@@ -1,21 +1,25 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Config cascade for @namzu/cli
|
|
2
|
+
* Config cascade and runtime admission for @namzu/cli.
|
|
3
3
|
*
|
|
4
4
|
* Resolution order (highest priority first):
|
|
5
|
-
* 1. CLI flags (handled by Commander, merged in `
|
|
5
|
+
* 1. CLI flags (handled by Commander, merged in `cli.ts`)
|
|
6
6
|
* 2. Environment variables prefixed `NAMZU_`
|
|
7
7
|
* 3. Project config: `./namzu.config.json` (TS variant added in a later
|
|
8
8
|
* milestone when a build step is justified)
|
|
9
9
|
* 4. User config: `~/.namzu/config.yaml`
|
|
10
10
|
* 5. Built-in defaults from `schema.ts`
|
|
11
11
|
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
12
|
+
* This module owns steps 2–5. CLI-flag merging happens in `cli.ts`, where
|
|
13
|
+
* Commander knows what was explicitly set rather than merely defaulted.
|
|
14
14
|
*
|
|
15
15
|
* A file that is not there contributes nothing, and that is a default. A file
|
|
16
16
|
* that IS there and cannot be read throws {@link ConfigLoadError} — this loader
|
|
17
17
|
* has no way to say "some of your settings", and will not pretend the ones it
|
|
18
18
|
* failed to read were never written.
|
|
19
|
+
*
|
|
20
|
+
* A source Namzu can parse but whose known key carries an invalid value throws
|
|
21
|
+
* {@link ConfigValueError}. Absence, syntax failure, and semantic rejection are
|
|
22
|
+
* three different states and none is represented by another.
|
|
19
23
|
*/
|
|
20
24
|
import { type NamzuCliConfig } from './schema.js';
|
|
21
25
|
export interface LoadConfigOptions {
|
|
@@ -25,7 +29,37 @@ export interface LoadConfigOptions {
|
|
|
25
29
|
readonly cwd?: string;
|
|
26
30
|
/** Replacement env source (testing). */
|
|
27
31
|
readonly env?: NodeJS.ProcessEnv;
|
|
32
|
+
/**
|
|
33
|
+
* Which profile to apply, if any.
|
|
34
|
+
*
|
|
35
|
+
* A name that no file declares is an ERROR rather than a no-op. Someone
|
|
36
|
+
* who typed `--profile revew` is running under settings they did not
|
|
37
|
+
* choose, and every reading of the run after that is wrong; the cost of
|
|
38
|
+
* refusing is one retyped word.
|
|
39
|
+
*/
|
|
40
|
+
readonly profile?: string;
|
|
41
|
+
/** Overridable for tests; defaults to {@link MANAGED_CONFIG_PATH}. */
|
|
42
|
+
readonly managedPath?: string;
|
|
28
43
|
}
|
|
44
|
+
/**
|
|
45
|
+
* A machine-wide config that wins the cascade.
|
|
46
|
+
*
|
|
47
|
+
* It exists for the case where the person running namzu is not the person
|
|
48
|
+
* deciding what it may do — a shared build machine, a managed workstation.
|
|
49
|
+
* Applied LAST, so it beats the project file and the environment both, which
|
|
50
|
+
* is the only ordering that makes it worth having.
|
|
51
|
+
*
|
|
52
|
+
* **Its guarantee is the file system's and nothing more.** namzu does not
|
|
53
|
+
* verify a signature, does not check an owner, and cannot tell an
|
|
54
|
+
* administrator's file from one the user wrote there. What stops a user
|
|
55
|
+
* editing it is that the path needs privileges they do not have, on a machine
|
|
56
|
+
* somebody configured that way. That is a real control and a narrow one, and
|
|
57
|
+
* stating it precisely is the difference between a security boundary and the
|
|
58
|
+
* appearance of one.
|
|
59
|
+
*
|
|
60
|
+
* Absent on almost every machine, which is the expected case and not an error.
|
|
61
|
+
*/
|
|
62
|
+
export declare const MANAGED_CONFIG_PATH: string;
|
|
29
63
|
/**
|
|
30
64
|
* A config value's source, one variant per cascade layer.
|
|
31
65
|
*
|
|
@@ -44,9 +78,26 @@ export type ConfigSource = {
|
|
|
44
78
|
} | {
|
|
45
79
|
readonly kind: 'project-file';
|
|
46
80
|
readonly path: string;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* A selected profile, and the file it was declared in.
|
|
84
|
+
*
|
|
85
|
+
* Both are named because neither alone answers the question an operator
|
|
86
|
+
* asks here. "profile" does not say which file to open, and the path does
|
|
87
|
+
* not say which of that file's profiles is in force.
|
|
88
|
+
*/
|
|
89
|
+
| {
|
|
90
|
+
readonly kind: 'profile';
|
|
91
|
+
readonly name: string;
|
|
92
|
+
readonly path: string;
|
|
47
93
|
} | {
|
|
48
94
|
readonly kind: 'env';
|
|
49
95
|
readonly variable: string;
|
|
96
|
+
}
|
|
97
|
+
/** A machine-wide file that wins the cascade; see `MANAGED_CONFIG_PATH`. */
|
|
98
|
+
| {
|
|
99
|
+
readonly kind: 'managed';
|
|
100
|
+
readonly path: string;
|
|
50
101
|
};
|
|
51
102
|
/**
|
|
52
103
|
* Which `ConfigSource` won each key of the resolved config.
|
|
@@ -74,6 +125,17 @@ export declare function loadConfigWithProvenance(opts?: LoadConfigOptions): {
|
|
|
74
125
|
config: NamzuCliConfig;
|
|
75
126
|
provenance: ConfigProvenance;
|
|
76
127
|
};
|
|
128
|
+
/**
|
|
129
|
+
* Resolve only process/user/managed authority before a project is trusted.
|
|
130
|
+
*
|
|
131
|
+
* Internal CLI seam: deliberately not re-exported from the package root. A
|
|
132
|
+
* selected profile may be declared by the project layer, so an otherwise
|
|
133
|
+
* unknown profile is deferred until the trusted, full resolution pass.
|
|
134
|
+
*/
|
|
135
|
+
export declare function loadBootstrapConfigWithProvenance(opts?: LoadConfigOptions): {
|
|
136
|
+
config: NamzuCliConfig;
|
|
137
|
+
provenance: ConfigProvenance;
|
|
138
|
+
};
|
|
77
139
|
export declare function loadConfig(opts?: LoadConfigOptions): NamzuCliConfig;
|
|
78
140
|
/**
|
|
79
141
|
* A config file namzu could not read.
|
|
@@ -89,6 +151,28 @@ export declare class ConfigLoadError extends Error {
|
|
|
89
151
|
cause?: unknown;
|
|
90
152
|
});
|
|
91
153
|
}
|
|
154
|
+
/** The explicit source that supplied a semantically invalid config value. */
|
|
155
|
+
export type ConfigValueSource = {
|
|
156
|
+
readonly kind: 'file';
|
|
157
|
+
readonly path: string;
|
|
158
|
+
} | {
|
|
159
|
+
readonly kind: 'environment';
|
|
160
|
+
readonly variable: string;
|
|
161
|
+
};
|
|
162
|
+
/**
|
|
163
|
+
* A known config key whose explicit value does not satisfy its public type.
|
|
164
|
+
*
|
|
165
|
+
* Kept distinct from {@link ConfigLoadError}: that class means a file could
|
|
166
|
+
* not be read or parsed at all, while this one means the source was readable
|
|
167
|
+
* and named a setting Namzu cannot honour. Public loaders throw both; the
|
|
168
|
+
* standalone binary maps both to `EX_CONFIG`.
|
|
169
|
+
*/
|
|
170
|
+
export declare class ConfigValueError extends Error {
|
|
171
|
+
readonly source: ConfigValueSource;
|
|
172
|
+
/** Dot/bracket path to the invalid known setting, without its source. */
|
|
173
|
+
readonly settingPath: string;
|
|
174
|
+
constructor(source: ConfigValueSource, settingPath: string, message: string);
|
|
175
|
+
}
|
|
92
176
|
/**
|
|
93
177
|
* Which `NAMZU_*` variable a field reads from, or `undefined` when env does
|
|
94
178
|
* not set it at all.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"load.d.ts","sourceRoot":"","sources":["../../src/config/load.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"load.d.ts","sourceRoot":"","sources":["../../src/config/load.ts"],"names":[],"mappings":"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"}
|