create-principles-disciple 1.80.0 → 1.82.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/core/dist/runtime-v2/__tests__/admission-gate.test.js +6 -6
- package/core/dist/runtime-v2/__tests__/admission-gate.test.js.map +1 -1
- package/core/dist/runtime-v2/__tests__/architecture-regression.test.js +39 -0
- package/core/dist/runtime-v2/__tests__/architecture-regression.test.js.map +1 -1
- package/core/dist/runtime-v2/__tests__/artificer-runner-vslice.test.js +52 -0
- package/core/dist/runtime-v2/__tests__/artificer-runner-vslice.test.js.map +1 -1
- package/core/dist/runtime-v2/__tests__/evaluator-runner-vslice.test.js +245 -1
- package/core/dist/runtime-v2/__tests__/evaluator-runner-vslice.test.js.map +1 -1
- package/core/dist/runtime-v2/__tests__/feedback/redact-sensitive.test.js +131 -1
- package/core/dist/runtime-v2/__tests__/feedback/redact-sensitive.test.js.map +1 -1
- package/core/dist/runtime-v2/__tests__/scribe-runner-vslice.test.js +425 -2
- package/core/dist/runtime-v2/__tests__/scribe-runner-vslice.test.js.map +1 -1
- package/core/dist/runtime-v2/__tests__/telemetry-event.test.d.ts +2 -0
- package/core/dist/runtime-v2/__tests__/telemetry-event.test.d.ts.map +1 -0
- package/core/dist/runtime-v2/__tests__/telemetry-event.test.js +69 -0
- package/core/dist/runtime-v2/__tests__/telemetry-event.test.js.map +1 -0
- package/core/dist/runtime-v2/admission-gate.d.ts.map +1 -1
- package/core/dist/runtime-v2/admission-gate.js +0 -8
- package/core/dist/runtime-v2/admission-gate.js.map +1 -1
- package/core/dist/runtime-v2/config/__tests__/pd-config-contract.test.d.ts +15 -0
- package/core/dist/runtime-v2/config/__tests__/pd-config-contract.test.d.ts.map +1 -0
- package/core/dist/runtime-v2/config/__tests__/pd-config-contract.test.js +685 -0
- package/core/dist/runtime-v2/config/__tests__/pd-config-contract.test.js.map +1 -0
- package/core/dist/runtime-v2/config/__tests__/pd-config-redaction-deep.test.d.ts +13 -0
- package/core/dist/runtime-v2/config/__tests__/pd-config-redaction-deep.test.d.ts.map +1 -0
- package/core/dist/runtime-v2/config/__tests__/pd-config-redaction-deep.test.js +447 -0
- package/core/dist/runtime-v2/config/__tests__/pd-config-redaction-deep.test.js.map +1 -0
- package/core/dist/runtime-v2/config/__tests__/pd-config-validation-edge-cases.test.d.ts +12 -0
- package/core/dist/runtime-v2/config/__tests__/pd-config-validation-edge-cases.test.d.ts.map +1 -0
- package/core/dist/runtime-v2/config/__tests__/pd-config-validation-edge-cases.test.js +433 -0
- package/core/dist/runtime-v2/config/__tests__/pd-config-validation-edge-cases.test.js.map +1 -0
- package/core/dist/runtime-v2/config/index.d.ts +14 -0
- package/core/dist/runtime-v2/config/index.d.ts.map +1 -0
- package/core/dist/runtime-v2/config/index.js +16 -0
- package/core/dist/runtime-v2/config/index.js.map +1 -0
- package/core/dist/runtime-v2/config/pd-config-defaults.d.ts +14 -0
- package/core/dist/runtime-v2/config/pd-config-defaults.d.ts.map +1 -0
- package/core/dist/runtime-v2/config/pd-config-defaults.js +74 -0
- package/core/dist/runtime-v2/config/pd-config-defaults.js.map +1 -0
- package/core/dist/runtime-v2/config/pd-config-effective.d.ts +14 -0
- package/core/dist/runtime-v2/config/pd-config-effective.d.ts.map +1 -0
- package/core/dist/runtime-v2/config/pd-config-effective.js +118 -0
- package/core/dist/runtime-v2/config/pd-config-effective.js.map +1 -0
- package/core/dist/runtime-v2/config/pd-config-feature-flags.d.ts +35 -0
- package/core/dist/runtime-v2/config/pd-config-feature-flags.d.ts.map +1 -0
- package/core/dist/runtime-v2/config/pd-config-feature-flags.js +99 -0
- package/core/dist/runtime-v2/config/pd-config-feature-flags.js.map +1 -0
- package/core/dist/runtime-v2/config/pd-config-redaction.d.ts +22 -0
- package/core/dist/runtime-v2/config/pd-config-redaction.d.ts.map +1 -0
- package/core/dist/runtime-v2/config/pd-config-redaction.js +179 -0
- package/core/dist/runtime-v2/config/pd-config-redaction.js.map +1 -0
- package/core/dist/runtime-v2/config/pd-config-types.d.ts +124 -0
- package/core/dist/runtime-v2/config/pd-config-types.d.ts.map +1 -0
- package/core/dist/runtime-v2/config/pd-config-types.js +35 -0
- package/core/dist/runtime-v2/config/pd-config-types.js.map +1 -0
- package/core/dist/runtime-v2/config/pd-config-validate.d.ts +16 -0
- package/core/dist/runtime-v2/config/pd-config-validate.d.ts.map +1 -0
- package/core/dist/runtime-v2/config/pd-config-validate.js +443 -0
- package/core/dist/runtime-v2/config/pd-config-validate.js.map +1 -0
- package/core/dist/runtime-v2/feature-flags/plugin-surface-registry.js +10 -10
- package/core/dist/runtime-v2/feature-flags/plugin-surface-registry.js.map +1 -1
- package/core/dist/runtime-v2/feedback/index.d.ts +1 -1
- package/core/dist/runtime-v2/feedback/index.d.ts.map +1 -1
- package/core/dist/runtime-v2/feedback/index.js +1 -1
- package/core/dist/runtime-v2/feedback/index.js.map +1 -1
- package/core/dist/runtime-v2/feedback/redact-sensitive.d.ts +2 -0
- package/core/dist/runtime-v2/feedback/redact-sensitive.d.ts.map +1 -1
- package/core/dist/runtime-v2/feedback/redact-sensitive.js +32 -3
- package/core/dist/runtime-v2/feedback/redact-sensitive.js.map +1 -1
- package/core/dist/runtime-v2/index.d.ts +5 -1
- package/core/dist/runtime-v2/index.d.ts.map +1 -1
- package/core/dist/runtime-v2/index.js +9 -1
- package/core/dist/runtime-v2/index.js.map +1 -1
- package/core/dist/runtime-v2/internalization/__tests__/philosopher-runner-trust-boundary.test.d.ts +2 -0
- package/core/dist/runtime-v2/internalization/__tests__/philosopher-runner-trust-boundary.test.d.ts.map +1 -0
- package/core/dist/runtime-v2/internalization/__tests__/philosopher-runner-trust-boundary.test.js +398 -0
- package/core/dist/runtime-v2/internalization/__tests__/philosopher-runner-trust-boundary.test.js.map +1 -0
- package/core/dist/runtime-v2/internalization/artificer-output.d.ts +3 -2
- package/core/dist/runtime-v2/internalization/artificer-output.d.ts.map +1 -1
- package/core/dist/runtime-v2/internalization/artificer-output.js +40 -31
- package/core/dist/runtime-v2/internalization/artificer-output.js.map +1 -1
- package/core/dist/runtime-v2/internalization/artificer-runner.d.ts +59 -38
- package/core/dist/runtime-v2/internalization/artificer-runner.d.ts.map +1 -1
- package/core/dist/runtime-v2/internalization/artificer-runner.js +121 -395
- package/core/dist/runtime-v2/internalization/artificer-runner.js.map +1 -1
- package/core/dist/runtime-v2/internalization/dreamer-output.d.ts +4 -3
- package/core/dist/runtime-v2/internalization/dreamer-output.d.ts.map +1 -1
- package/core/dist/runtime-v2/internalization/dreamer-output.js +11 -9
- package/core/dist/runtime-v2/internalization/dreamer-output.js.map +1 -1
- package/core/dist/runtime-v2/internalization/dreamer-runner.d.ts +31 -92
- package/core/dist/runtime-v2/internalization/dreamer-runner.d.ts.map +1 -1
- package/core/dist/runtime-v2/internalization/dreamer-runner.js +79 -495
- package/core/dist/runtime-v2/internalization/dreamer-runner.js.map +1 -1
- package/core/dist/runtime-v2/internalization/evaluator-output.d.ts +2 -2
- package/core/dist/runtime-v2/internalization/evaluator-output.d.ts.map +1 -1
- package/core/dist/runtime-v2/internalization/evaluator-output.js +29 -23
- package/core/dist/runtime-v2/internalization/evaluator-output.js.map +1 -1
- package/core/dist/runtime-v2/internalization/evaluator-runner.d.ts +74 -48
- package/core/dist/runtime-v2/internalization/evaluator-runner.d.ts.map +1 -1
- package/core/dist/runtime-v2/internalization/evaluator-runner.js +164 -444
- package/core/dist/runtime-v2/internalization/evaluator-runner.js.map +1 -1
- package/core/dist/runtime-v2/internalization/philosopher-output.d.ts +8 -2
- package/core/dist/runtime-v2/internalization/philosopher-output.d.ts.map +1 -1
- package/core/dist/runtime-v2/internalization/philosopher-output.js +16 -11
- package/core/dist/runtime-v2/internalization/philosopher-output.js.map +1 -1
- package/core/dist/runtime-v2/internalization/philosopher-runner.d.ts +36 -55
- package/core/dist/runtime-v2/internalization/philosopher-runner.d.ts.map +1 -1
- package/core/dist/runtime-v2/internalization/philosopher-runner.js +117 -401
- package/core/dist/runtime-v2/internalization/philosopher-runner.js.map +1 -1
- package/core/dist/runtime-v2/internalization/scribe-output.d.ts +8 -2
- package/core/dist/runtime-v2/internalization/scribe-output.d.ts.map +1 -1
- package/core/dist/runtime-v2/internalization/scribe-output.js +33 -17
- package/core/dist/runtime-v2/internalization/scribe-output.js.map +1 -1
- package/core/dist/runtime-v2/internalization/scribe-runner.d.ts +56 -49
- package/core/dist/runtime-v2/internalization/scribe-runner.d.ts.map +1 -1
- package/core/dist/runtime-v2/internalization/scribe-runner.js +116 -398
- package/core/dist/runtime-v2/internalization/scribe-runner.js.map +1 -1
- package/core/dist/runtime-v2/runner/__tests__/base-peer-runner-trust-boundary.test.d.ts +2 -0
- package/core/dist/runtime-v2/runner/__tests__/base-peer-runner-trust-boundary.test.d.ts.map +1 -0
- package/core/dist/runtime-v2/runner/__tests__/base-peer-runner-trust-boundary.test.js +379 -0
- package/core/dist/runtime-v2/runner/__tests__/base-peer-runner-trust-boundary.test.js.map +1 -0
- package/core/dist/runtime-v2/runner/base-peer-runner.d.ts +122 -0
- package/core/dist/runtime-v2/runner/base-peer-runner.d.ts.map +1 -0
- package/core/dist/runtime-v2/runner/base-peer-runner.js +528 -0
- package/core/dist/runtime-v2/runner/base-peer-runner.js.map +1 -0
- package/core/dist/runtime-v2/runner/peer-runner-types.d.ts +107 -0
- package/core/dist/runtime-v2/runner/peer-runner-types.d.ts.map +1 -0
- package/core/dist/runtime-v2/runner/peer-runner-types.js +13 -0
- package/core/dist/runtime-v2/runner/peer-runner-types.js.map +1 -0
- package/core/dist/telemetry-event.d.ts +2 -2
- package/core/dist/telemetry-event.d.ts.map +1 -1
- package/core/dist/telemetry-event.js +89 -0
- package/core/dist/telemetry-event.js.map +1 -1
- package/dist/installer.d.ts +1 -1
- package/dist/installer.d.ts.map +1 -1
- package/dist/installer.js +24 -10
- package/dist/installer.js.map +1 -1
- package/dist/mvp-config.d.ts +33 -0
- package/dist/mvp-config.d.ts.map +1 -1
- package/dist/mvp-config.js +174 -0
- package/dist/mvp-config.js.map +1 -1
- package/package.json +1 -1
- package/pd-cli/dist/commands/config-doctor.d.ts +17 -0
- package/pd-cli/dist/commands/config-doctor.d.ts.map +1 -0
- package/pd-cli/dist/commands/config-doctor.js +143 -0
- package/pd-cli/dist/commands/config-doctor.js.map +1 -0
- package/pd-cli/dist/commands/console.d.ts +18 -0
- package/pd-cli/dist/commands/console.d.ts.map +1 -1
- package/pd-cli/dist/commands/console.js +439 -0
- package/pd-cli/dist/commands/console.js.map +1 -1
- package/pd-cli/dist/commands/runtime-features.d.ts +23 -8
- package/pd-cli/dist/commands/runtime-features.d.ts.map +1 -1
- package/pd-cli/dist/commands/runtime-features.js +72 -31
- package/pd-cli/dist/commands/runtime-features.js.map +1 -1
- package/pd-cli/dist/index.d.ts +1 -1
- package/pd-cli/dist/index.js +83 -31
- package/pd-cli/dist/index.js.map +1 -1
- package/pd-cli/dist/services/config-doctor.d.ts +102 -0
- package/pd-cli/dist/services/config-doctor.d.ts.map +1 -0
- package/pd-cli/dist/services/config-doctor.js +426 -0
- package/pd-cli/dist/services/config-doctor.js.map +1 -0
- package/pd-cli/dist/services/console-launcher.d.ts +110 -0
- package/pd-cli/dist/services/console-launcher.d.ts.map +1 -0
- package/pd-cli/dist/services/console-launcher.js +282 -0
- package/pd-cli/dist/services/console-launcher.js.map +1 -0
- package/pd-cli/dist/services/pd-config-loader.d.ts +64 -0
- package/pd-cli/dist/services/pd-config-loader.d.ts.map +1 -0
- package/pd-cli/dist/services/pd-config-loader.js +156 -0
- package/pd-cli/dist/services/pd-config-loader.js.map +1 -0
- package/pd-cli/package.json +3 -1
- package/plugin/dist/core/event-log.d.ts +10 -0
- package/plugin/dist/core/event-log.js +85 -1
- package/plugin/dist/core/pd-config-loader.d.ts +96 -0
- package/plugin/dist/core/pd-config-loader.js +307 -0
- package/plugin/dist/core/runtime-v2-prompt-activation-reader.d.ts +4 -0
- package/plugin/dist/core/runtime-v2-prompt-activation-reader.js +12 -56
- package/plugin/dist/core/surface-guard.d.ts +12 -8
- package/plugin/dist/core/surface-guard.js +51 -2
- package/plugin/dist/hooks/gate.js +3 -0
- package/plugin/dist/index.d.ts +4 -0
- package/plugin/dist/index.js +8 -52
- package/plugin/dist/service/correction-observer-service.d.ts +8 -0
- package/plugin/dist/service/correction-observer-service.js +48 -29
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PD Config Effective Config — PRI-304
|
|
3
|
+
*
|
|
4
|
+
* Merges validated user config with defaults.
|
|
5
|
+
* Missing fields get deterministic defaults.
|
|
6
|
+
* Per-agent override beats default runtime.
|
|
7
|
+
*/
|
|
8
|
+
import { PD_CONFIG_VERSION, INTERNAL_AGENT_NAMES, DANGEROUS_KEYS, } from './pd-config-types.js';
|
|
9
|
+
import { DEFAULT_FEATURE_FLAGS, DEFAULT_RUNTIME_PROFILE_ID, DEFAULT_RUNTIME_PROFILE, DEFAULT_UI, getDefaultInternalAgents, getDefaultPdConfig, } from './pd-config-defaults.js';
|
|
10
|
+
/**
|
|
11
|
+
* Compute effective PD config by merging validated user config with defaults.
|
|
12
|
+
* If userConfig is null/undefined, returns pure defaults.
|
|
13
|
+
*/
|
|
14
|
+
export function computeEffectivePdConfig(userConfig) {
|
|
15
|
+
if (userConfig === null || userConfig === undefined) {
|
|
16
|
+
return {
|
|
17
|
+
config: getDefaultPdConfig(),
|
|
18
|
+
source: 'defaults',
|
|
19
|
+
warnings: [],
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
const warnings = [];
|
|
23
|
+
// Merge features: user overrides for known flags, defaults for missing
|
|
24
|
+
const features = {};
|
|
25
|
+
for (const [flagId, defaultEntry] of Object.entries(DEFAULT_FEATURE_FLAGS)) {
|
|
26
|
+
if (Object.hasOwn(userConfig.features, flagId)) {
|
|
27
|
+
const userEntry = userConfig.features[flagId];
|
|
28
|
+
if (!userEntry) {
|
|
29
|
+
features[flagId] = { ...defaultEntry };
|
|
30
|
+
continue;
|
|
31
|
+
}
|
|
32
|
+
// Gone flags can never be re-enabled
|
|
33
|
+
if (defaultEntry.category === 'gone' && userEntry.enabled) {
|
|
34
|
+
features[flagId] = { ...defaultEntry };
|
|
35
|
+
warnings.push(`feature '${flagId}': gone flag cannot be re-enabled`);
|
|
36
|
+
continue;
|
|
37
|
+
}
|
|
38
|
+
// Core flags can never be disabled
|
|
39
|
+
if (defaultEntry.category === 'core' && !userEntry.enabled) {
|
|
40
|
+
features[flagId] = { ...defaultEntry };
|
|
41
|
+
warnings.push(`feature '${flagId}': core flag cannot be disabled`);
|
|
42
|
+
continue;
|
|
43
|
+
}
|
|
44
|
+
features[flagId] = { category: userEntry.category, enabled: userEntry.enabled };
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
features[flagId] = { ...defaultEntry };
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
// Add user-only features (not in defaults)
|
|
51
|
+
for (const [flagId, userEntry] of Object.entries(userConfig.features)) {
|
|
52
|
+
if (DANGEROUS_KEYS.has(flagId))
|
|
53
|
+
continue;
|
|
54
|
+
if (!Object.hasOwn(features, flagId)) {
|
|
55
|
+
features[flagId] = { ...userEntry };
|
|
56
|
+
warnings.push(`feature '${flagId}': unknown flag accepted as-is`);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
// Runtime profiles: use user profiles directly
|
|
60
|
+
const runtimeProfiles = {};
|
|
61
|
+
for (const [profileId, profile] of Object.entries(userConfig.runtimeProfiles)) {
|
|
62
|
+
if (DANGEROUS_KEYS.has(profileId))
|
|
63
|
+
continue;
|
|
64
|
+
runtimeProfiles[profileId] = { ...profile };
|
|
65
|
+
}
|
|
66
|
+
// Ensure default profile exists
|
|
67
|
+
if (!Object.hasOwn(runtimeProfiles, DEFAULT_RUNTIME_PROFILE_ID)) {
|
|
68
|
+
runtimeProfiles[DEFAULT_RUNTIME_PROFILE_ID] = { ...DEFAULT_RUNTIME_PROFILE };
|
|
69
|
+
warnings.push(`runtime profile '${DEFAULT_RUNTIME_PROFILE_ID}' not found in config, using default`);
|
|
70
|
+
}
|
|
71
|
+
// Internal agents: merge user overrides with defaults
|
|
72
|
+
const defaultAgents = getDefaultInternalAgents();
|
|
73
|
+
const agents = {};
|
|
74
|
+
for (const name of INTERNAL_AGENT_NAMES) {
|
|
75
|
+
const userBinding = userConfig.internalAgents.agents[name];
|
|
76
|
+
const defaultBinding = defaultAgents.agents[name];
|
|
77
|
+
if (userBinding !== undefined) {
|
|
78
|
+
// Per-agent override: use user's enabled + runtime profile
|
|
79
|
+
agents[name] = {
|
|
80
|
+
enabled: userBinding.enabled,
|
|
81
|
+
runtimeProfile: userBinding.runtimeProfile ?? userConfig.internalAgents.defaultRuntime,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
// No override: use default enabled + user's defaultRuntime (not the hard-coded default)
|
|
86
|
+
agents[name] = {
|
|
87
|
+
enabled: defaultBinding.enabled,
|
|
88
|
+
runtimeProfile: userConfig.internalAgents.defaultRuntime,
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
// Validate runtime profile references
|
|
93
|
+
for (const name of INTERNAL_AGENT_NAMES) {
|
|
94
|
+
const binding = agents[name];
|
|
95
|
+
if (binding && binding.enabled && binding.runtimeProfile && !Object.hasOwn(runtimeProfiles, binding.runtimeProfile)) {
|
|
96
|
+
warnings.push(`agent '${name}': runtime profile '${binding.runtimeProfile}' not found in runtimeProfiles`);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
const internalAgents = {
|
|
100
|
+
defaultRuntime: userConfig.internalAgents.defaultRuntime,
|
|
101
|
+
agents: agents,
|
|
102
|
+
};
|
|
103
|
+
// UI: use user config or default
|
|
104
|
+
const ui = userConfig.ui ?? { ...DEFAULT_UI };
|
|
105
|
+
const config = {
|
|
106
|
+
version: PD_CONFIG_VERSION,
|
|
107
|
+
features,
|
|
108
|
+
runtimeProfiles,
|
|
109
|
+
internalAgents,
|
|
110
|
+
ui,
|
|
111
|
+
};
|
|
112
|
+
return {
|
|
113
|
+
config,
|
|
114
|
+
source: 'user_config',
|
|
115
|
+
warnings,
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=pd-config-effective.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pd-config-effective.js","sourceRoot":"","sources":["../../../src/runtime-v2/config/pd-config-effective.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PD Config Feature Flags — PRI-304
|
|
3
|
+
*
|
|
4
|
+
* Compute effective feature flags from the new PD config contract.
|
|
5
|
+
* Replaces the old `.pd/feature-flags.yaml` computation.
|
|
6
|
+
* Feature flags now come from `.pd/config.yaml.features`.
|
|
7
|
+
*/
|
|
8
|
+
import { type EffectivePdConfig, type FeatureCategory } from './pd-config-types.js';
|
|
9
|
+
export interface EffectiveFeatureFlag {
|
|
10
|
+
id: string;
|
|
11
|
+
category: FeatureCategory;
|
|
12
|
+
enabled: boolean;
|
|
13
|
+
}
|
|
14
|
+
export interface FeatureFlagsResult {
|
|
15
|
+
flags: Record<string, EffectiveFeatureFlag>;
|
|
16
|
+
/** Which MVP channels are enabled */
|
|
17
|
+
enabledChannels: string[];
|
|
18
|
+
/** Warnings from flag computation */
|
|
19
|
+
warnings: string[];
|
|
20
|
+
}
|
|
21
|
+
export declare const MVP_CHANNEL_IDS: readonly ["prompt", "code_tool_hook", "defer_archive"];
|
|
22
|
+
/**
|
|
23
|
+
* Compute effective feature flags from the PD config.
|
|
24
|
+
* This replaces the old `computeEffectiveFlags()` from feature-flag-contract.ts.
|
|
25
|
+
*/
|
|
26
|
+
export declare function computeFeatureFlagsFromConfig(effective: EffectivePdConfig): FeatureFlagsResult;
|
|
27
|
+
/**
|
|
28
|
+
* Check if a specific feature flag is enabled.
|
|
29
|
+
*/
|
|
30
|
+
export declare function isFeatureEnabled(result: FeatureFlagsResult, flagId: string): boolean;
|
|
31
|
+
/**
|
|
32
|
+
* Get all enabled feature flag IDs.
|
|
33
|
+
*/
|
|
34
|
+
export declare function getEnabledFlagIds(result: FeatureFlagsResult): string[];
|
|
35
|
+
//# sourceMappingURL=pd-config-feature-flags.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pd-config-feature-flags.d.ts","sourceRoot":"","sources":["../../../src/runtime-v2/config/pd-config-feature-flags.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,eAAe,EAGrB,MAAM,sBAAsB,CAAC;AAK9B,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,eAAe,CAAC;IAC1B,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;IAC5C,qCAAqC;IACrC,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,qCAAqC;IACrC,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAID,eAAO,MAAM,eAAe,wDAAyD,CAAC;AAItF;;;GAGG;AACH,wBAAgB,6BAA6B,CAAC,SAAS,EAAE,iBAAiB,GAAG,kBAAkB,CAqE9F;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,kBAAkB,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAGpF;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,kBAAkB,GAAG,MAAM,EAAE,CAItE"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PD Config Feature Flags — PRI-304
|
|
3
|
+
*
|
|
4
|
+
* Compute effective feature flags from the new PD config contract.
|
|
5
|
+
* Replaces the old `.pd/feature-flags.yaml` computation.
|
|
6
|
+
* Feature flags now come from `.pd/config.yaml.features`.
|
|
7
|
+
*/
|
|
8
|
+
import { VALID_FEATURE_CATEGORIES, DANGEROUS_KEYS, } from './pd-config-types.js';
|
|
9
|
+
import { DEFAULT_FEATURE_FLAGS } from './pd-config-defaults.js';
|
|
10
|
+
// ── MVP Channel IDs ─────────────────────────────────────────────────────────
|
|
11
|
+
export const MVP_CHANNEL_IDS = ['prompt', 'code_tool_hook', 'defer_archive'];
|
|
12
|
+
// ── Compute Feature Flags ───────────────────────────────────────────────────
|
|
13
|
+
/**
|
|
14
|
+
* Compute effective feature flags from the PD config.
|
|
15
|
+
* This replaces the old `computeEffectiveFlags()` from feature-flag-contract.ts.
|
|
16
|
+
*/
|
|
17
|
+
export function computeFeatureFlagsFromConfig(effective) {
|
|
18
|
+
const { config } = effective;
|
|
19
|
+
const warnings = [];
|
|
20
|
+
const flags = {};
|
|
21
|
+
// Start with defaults
|
|
22
|
+
for (const [id, defaultEntry] of Object.entries(DEFAULT_FEATURE_FLAGS)) {
|
|
23
|
+
flags[id] = {
|
|
24
|
+
id,
|
|
25
|
+
category: defaultEntry.category,
|
|
26
|
+
enabled: defaultEntry.enabled,
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
// Apply user config overrides
|
|
30
|
+
for (const [id, userEntry] of Object.entries(config.features)) {
|
|
31
|
+
if (DANGEROUS_KEYS.has(id))
|
|
32
|
+
continue;
|
|
33
|
+
if (!userEntry)
|
|
34
|
+
continue;
|
|
35
|
+
if (Object.hasOwn(flags, id)) {
|
|
36
|
+
const defaultFlag = flags[id];
|
|
37
|
+
if (!defaultFlag)
|
|
38
|
+
continue;
|
|
39
|
+
// Gone flags can never be re-enabled
|
|
40
|
+
if (defaultFlag.category === 'gone' && userEntry.enabled) {
|
|
41
|
+
warnings.push(`feature '${id}': gone flag cannot be re-enabled`);
|
|
42
|
+
continue;
|
|
43
|
+
}
|
|
44
|
+
// Core flags can never be disabled
|
|
45
|
+
if (defaultFlag.category === 'core' && !userEntry.enabled) {
|
|
46
|
+
warnings.push(`feature '${id}': core flag cannot be disabled`);
|
|
47
|
+
continue;
|
|
48
|
+
}
|
|
49
|
+
flags[id] = {
|
|
50
|
+
id,
|
|
51
|
+
category: userEntry.category,
|
|
52
|
+
enabled: userEntry.enabled,
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
// Unknown flag — accept as-is
|
|
57
|
+
if (!VALID_FEATURE_CATEGORIES.includes(userEntry.category)) {
|
|
58
|
+
warnings.push(`feature '${id}': invalid category '${userEntry.category}', ignored`);
|
|
59
|
+
continue;
|
|
60
|
+
}
|
|
61
|
+
flags[id] = {
|
|
62
|
+
id,
|
|
63
|
+
category: userEntry.category,
|
|
64
|
+
enabled: userEntry.enabled,
|
|
65
|
+
};
|
|
66
|
+
warnings.push(`feature '${id}': unknown flag accepted`);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
// Compute enabled channels
|
|
70
|
+
const enabledChannels = [];
|
|
71
|
+
for (const channelId of MVP_CHANNEL_IDS) {
|
|
72
|
+
const flag = flags[channelId];
|
|
73
|
+
if (flag && flag.enabled) {
|
|
74
|
+
enabledChannels.push(channelId);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
return {
|
|
78
|
+
flags,
|
|
79
|
+
enabledChannels,
|
|
80
|
+
warnings,
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Check if a specific feature flag is enabled.
|
|
85
|
+
*/
|
|
86
|
+
export function isFeatureEnabled(result, flagId) {
|
|
87
|
+
if (!Object.hasOwn(result.flags, flagId))
|
|
88
|
+
return false;
|
|
89
|
+
return result.flags[flagId]?.enabled ?? false;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Get all enabled feature flag IDs.
|
|
93
|
+
*/
|
|
94
|
+
export function getEnabledFlagIds(result) {
|
|
95
|
+
return Object.values(result.flags)
|
|
96
|
+
.filter((f) => f !== undefined && f.enabled)
|
|
97
|
+
.map(f => f.id);
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=pd-config-feature-flags.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pd-config-feature-flags.js","sourceRoot":"","sources":["../../../src/runtime-v2/config/pd-config-feature-flags.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PD Config Redaction — PRI-304
|
|
3
|
+
*
|
|
4
|
+
* Produces safe summaries for CLI/Console display.
|
|
5
|
+
* Never includes token/API key values or raw OpenClaw provider objects.
|
|
6
|
+
* Uses safe serialization for previews (ERR-014, ERR-016, ERR-017).
|
|
7
|
+
* Redaction uses ANY-segment logic for sensitive keys (ERR-045).
|
|
8
|
+
* String values run through full redaction pipeline before truncation (ERR-046).
|
|
9
|
+
*/
|
|
10
|
+
import { type EffectivePdConfig, type RedactedPdConfigSummary } from './pd-config-types.js';
|
|
11
|
+
/**
|
|
12
|
+
* Produce a redacted summary of the effective PD config.
|
|
13
|
+
* Safe for CLI output, Console display, and diagnostics copy.
|
|
14
|
+
* Never includes token/API key values or raw provider objects.
|
|
15
|
+
*/
|
|
16
|
+
export declare function redactPdConfig(effective: EffectivePdConfig): RedactedPdConfigSummary;
|
|
17
|
+
/**
|
|
18
|
+
* Redact an arbitrary value for safe display.
|
|
19
|
+
* Runs through sensitive key detection and string redaction.
|
|
20
|
+
*/
|
|
21
|
+
export declare function redactConfigValue(value: unknown, key?: string): unknown;
|
|
22
|
+
//# sourceMappingURL=pd-config-redaction.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pd-config-redaction.d.ts","sourceRoot":"","sources":["../../../src/runtime-v2/config/pd-config-redaction.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,uBAAuB,EAO7B,MAAM,sBAAsB,CAAC;AAqF9B;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,iBAAiB,GAAG,uBAAuB,CA6DpF;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CA6BvE"}
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PD Config Redaction — PRI-304
|
|
3
|
+
*
|
|
4
|
+
* Produces safe summaries for CLI/Console display.
|
|
5
|
+
* Never includes token/API key values or raw OpenClaw provider objects.
|
|
6
|
+
* Uses safe serialization for previews (ERR-014, ERR-016, ERR-017).
|
|
7
|
+
* Redaction uses ANY-segment logic for sensitive keys (ERR-045).
|
|
8
|
+
* String values run through full redaction pipeline before truncation (ERR-046).
|
|
9
|
+
*/
|
|
10
|
+
import { DANGEROUS_KEYS, } from './pd-config-types.js';
|
|
11
|
+
// ── Sensitive Key Detection ─────────────────────────────────────────────────
|
|
12
|
+
const SENSITIVE_KEY_SEGMENTS = new Set([
|
|
13
|
+
'key', 'token', 'secret', 'password', 'auth', 'credential', 'apikey', 'api_key',
|
|
14
|
+
'accesstoken', 'access_token', 'refreshtoken', 'refresh_token',
|
|
15
|
+
'private', 'certificate', 'signature',
|
|
16
|
+
]);
|
|
17
|
+
function isSensitiveKey(key) {
|
|
18
|
+
const segments = key.toLowerCase().split(/[_\-.]/);
|
|
19
|
+
if (segments.length === 0)
|
|
20
|
+
return false;
|
|
21
|
+
// ANY-segment match (ERR-045): flag if any segment is sensitive
|
|
22
|
+
return segments.some(seg => SENSITIVE_KEY_SEGMENTS.has(seg));
|
|
23
|
+
}
|
|
24
|
+
// ── Safe String Redaction ───────────────────────────────────────────────────
|
|
25
|
+
const TOKEN_PATTERN = /\bsk-(?:ant-)?[A-Za-z0-9_-]{8,}\b/g;
|
|
26
|
+
const BEARER_PATTERN = /\bBearer\s+[A-Za-z0-9._\-+/=]{8,}\b/g;
|
|
27
|
+
const KEY_ASSIGN_PATTERN = /\b(api[_-]?key|token|secret|password)\s*[:=]\s*['"]?([^\s'",}{]{4,})['"]?/gi;
|
|
28
|
+
function redactString(value) {
|
|
29
|
+
return value
|
|
30
|
+
.replace(TOKEN_PATTERN, '[REDACTED]')
|
|
31
|
+
.replace(BEARER_PATTERN, '[REDACTED]')
|
|
32
|
+
.replace(KEY_ASSIGN_PATTERN, (_m, key) => `${key}=[REDACTED]`);
|
|
33
|
+
}
|
|
34
|
+
function safeTruncate(value, maxLen) {
|
|
35
|
+
if (value.length <= maxLen)
|
|
36
|
+
return value;
|
|
37
|
+
return value.slice(0, maxLen) + '…';
|
|
38
|
+
}
|
|
39
|
+
// ── Profile Label ───────────────────────────────────────────────────────────
|
|
40
|
+
function buildProfileLabel(id, profile) {
|
|
41
|
+
if (profile.type === 'openclaw') {
|
|
42
|
+
const oc = profile;
|
|
43
|
+
const parts = ['openclaw'];
|
|
44
|
+
if (oc.provider)
|
|
45
|
+
parts.push(oc.provider);
|
|
46
|
+
if (oc.model)
|
|
47
|
+
parts.push(oc.model);
|
|
48
|
+
if (oc.source && !oc.provider && !oc.model)
|
|
49
|
+
parts.push(oc.source);
|
|
50
|
+
return parts.join(': ');
|
|
51
|
+
}
|
|
52
|
+
// pi-ai
|
|
53
|
+
const pd = profile;
|
|
54
|
+
return `pi-ai: ${pd.provider}/${pd.model}`;
|
|
55
|
+
}
|
|
56
|
+
// ── Profile Readiness ───────────────────────────────────────────────────────
|
|
57
|
+
function assessProfileReadiness(profile) {
|
|
58
|
+
if (profile.type === 'openclaw') {
|
|
59
|
+
const oc = profile;
|
|
60
|
+
// OpenClaw profile with source=default is always "ready" (delegated to OpenClaw)
|
|
61
|
+
if (oc.source === 'default')
|
|
62
|
+
return 'ready';
|
|
63
|
+
// OpenClaw profile with provider+model may be ready
|
|
64
|
+
if (oc.provider && oc.model)
|
|
65
|
+
return 'ready';
|
|
66
|
+
return 'needs_setup';
|
|
67
|
+
}
|
|
68
|
+
// pi-ai: needs apiKeyEnv set
|
|
69
|
+
const pd = profile;
|
|
70
|
+
if (!pd.provider || !pd.model || !pd.apiKeyEnv)
|
|
71
|
+
return 'needs_setup';
|
|
72
|
+
return 'not_ready'; // has config but runtime availability unknown
|
|
73
|
+
}
|
|
74
|
+
// ── Agent Readiness ─────────────────────────────────────────────────────────
|
|
75
|
+
function assessAgentReadiness(enabled, profileId, profiles) {
|
|
76
|
+
if (!enabled)
|
|
77
|
+
return 'disabled';
|
|
78
|
+
if (!Object.hasOwn(profiles, profileId))
|
|
79
|
+
return 'needs_setup';
|
|
80
|
+
const profile = profiles[profileId];
|
|
81
|
+
if (!profile)
|
|
82
|
+
return 'needs_setup';
|
|
83
|
+
const profileReadiness = assessProfileReadiness(profile);
|
|
84
|
+
return profileReadiness;
|
|
85
|
+
}
|
|
86
|
+
// ── Redact Config ───────────────────────────────────────────────────────────
|
|
87
|
+
/**
|
|
88
|
+
* Produce a redacted summary of the effective PD config.
|
|
89
|
+
* Safe for CLI output, Console display, and diagnostics copy.
|
|
90
|
+
* Never includes token/API key values or raw provider objects.
|
|
91
|
+
*/
|
|
92
|
+
export function redactPdConfig(effective) {
|
|
93
|
+
const { config, source, warnings } = effective;
|
|
94
|
+
// Features
|
|
95
|
+
const features = [];
|
|
96
|
+
for (const [id, entry] of Object.entries(config.features)) {
|
|
97
|
+
if (DANGEROUS_KEYS.has(id))
|
|
98
|
+
continue;
|
|
99
|
+
features.push({
|
|
100
|
+
id,
|
|
101
|
+
category: entry.category,
|
|
102
|
+
enabled: entry.enabled,
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
// Runtime profiles — redacted
|
|
106
|
+
const runtimeProfiles = [];
|
|
107
|
+
for (const [id, profile] of Object.entries(config.runtimeProfiles)) {
|
|
108
|
+
if (DANGEROUS_KEYS.has(id))
|
|
109
|
+
continue;
|
|
110
|
+
const summary = {
|
|
111
|
+
id,
|
|
112
|
+
type: profile.type,
|
|
113
|
+
label: buildProfileLabel(id, profile),
|
|
114
|
+
readiness: assessProfileReadiness(profile),
|
|
115
|
+
};
|
|
116
|
+
// For pi-ai profiles: show apiKeyEnv name, never the value
|
|
117
|
+
if (profile.type === 'pi-ai') {
|
|
118
|
+
const pd = profile;
|
|
119
|
+
summary.apiKeyEnv = pd.apiKeyEnv;
|
|
120
|
+
}
|
|
121
|
+
runtimeProfiles.push(summary);
|
|
122
|
+
}
|
|
123
|
+
// Agents — redacted
|
|
124
|
+
const agents = [];
|
|
125
|
+
for (const name of Object.keys(config.internalAgents.agents)) {
|
|
126
|
+
const binding = config.internalAgents.agents[name];
|
|
127
|
+
const profileId = binding.runtimeProfile ?? config.internalAgents.defaultRuntime;
|
|
128
|
+
const profile = config.runtimeProfiles[profileId];
|
|
129
|
+
agents.push({
|
|
130
|
+
name,
|
|
131
|
+
enabled: binding.enabled,
|
|
132
|
+
runtimeProfileId: profileId,
|
|
133
|
+
runtimeProfileLabel: profile ? buildProfileLabel(profileId, profile) : `unknown:${profileId}`,
|
|
134
|
+
readiness: assessAgentReadiness(binding.enabled, profileId, config.runtimeProfiles),
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
return {
|
|
138
|
+
version: config.version,
|
|
139
|
+
source,
|
|
140
|
+
features,
|
|
141
|
+
runtimeProfiles,
|
|
142
|
+
defaultRuntime: config.internalAgents.defaultRuntime,
|
|
143
|
+
agents,
|
|
144
|
+
ui: config.ui,
|
|
145
|
+
warnings,
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Redact an arbitrary value for safe display.
|
|
150
|
+
* Runs through sensitive key detection and string redaction.
|
|
151
|
+
*/
|
|
152
|
+
export function redactConfigValue(value, key) {
|
|
153
|
+
// If the key itself is sensitive, redact the entire value
|
|
154
|
+
if (key !== undefined && isSensitiveKey(key)) {
|
|
155
|
+
return '[REDACTED]';
|
|
156
|
+
}
|
|
157
|
+
if (value === null || value === undefined)
|
|
158
|
+
return value;
|
|
159
|
+
if (typeof value === 'string') {
|
|
160
|
+
return safeTruncate(redactString(value), 200);
|
|
161
|
+
}
|
|
162
|
+
if (typeof value === 'number' || typeof value === 'boolean')
|
|
163
|
+
return value;
|
|
164
|
+
if (Array.isArray(value)) {
|
|
165
|
+
return value.slice(0, 20).map((v) => redactConfigValue(v, undefined));
|
|
166
|
+
}
|
|
167
|
+
if (typeof value === 'object' && value !== null && !Array.isArray(value)) {
|
|
168
|
+
const result = {};
|
|
169
|
+
const entries = Object.entries(value).slice(0, 30);
|
|
170
|
+
for (const [k, v] of entries) {
|
|
171
|
+
if (DANGEROUS_KEYS.has(k))
|
|
172
|
+
continue;
|
|
173
|
+
result[k] = redactConfigValue(v, k);
|
|
174
|
+
}
|
|
175
|
+
return result;
|
|
176
|
+
}
|
|
177
|
+
return '[REDACTED]';
|
|
178
|
+
}
|
|
179
|
+
//# sourceMappingURL=pd-config-redaction.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pd-config-redaction.js","sourceRoot":"","sources":["../../../src/runtime-v2/config/pd-config-redaction.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PD-Owned Config Contract — PRI-304
|
|
3
|
+
*
|
|
4
|
+
* Pure types and constants for `.pd/config.yaml`.
|
|
5
|
+
* No I/O — YAML loading lives in pd-cli / plugin boundary.
|
|
6
|
+
*
|
|
7
|
+
* ADR-0016: PD owns exactly one user config file.
|
|
8
|
+
* .pd/feature-flags.yaml is retired into this contract.
|
|
9
|
+
* .state/workflows.yaml is not a compatibility input.
|
|
10
|
+
* PD does not own provider secrets.
|
|
11
|
+
*/
|
|
12
|
+
export declare const PD_CONFIG_VERSION = 1;
|
|
13
|
+
export type PdConfigVersion = 1;
|
|
14
|
+
export declare const VALID_FEATURE_CATEGORIES: readonly ["core", "quiet", "gone"];
|
|
15
|
+
export type FeatureCategory = (typeof VALID_FEATURE_CATEGORIES)[number];
|
|
16
|
+
export interface FeatureFlagEntry {
|
|
17
|
+
category: FeatureCategory;
|
|
18
|
+
enabled: boolean;
|
|
19
|
+
}
|
|
20
|
+
export declare const VALID_PROFILE_TYPES: readonly ["openclaw", "pi-ai"];
|
|
21
|
+
export type RuntimeProfileType = (typeof VALID_PROFILE_TYPES)[number];
|
|
22
|
+
/** OpenClaw profile: references only, no secrets */
|
|
23
|
+
export interface OpenClawRuntimeProfile {
|
|
24
|
+
type: 'openclaw';
|
|
25
|
+
/** Optional provider label (e.g. "lmstudio") */
|
|
26
|
+
provider?: string;
|
|
27
|
+
/** Optional model label (e.g. "qwen3.6-27b-mtp") */
|
|
28
|
+
model?: string;
|
|
29
|
+
/** Optional source identifier (e.g. "default") */
|
|
30
|
+
source?: string;
|
|
31
|
+
}
|
|
32
|
+
/** PD-local pi-ai profile: non-secret fields + apiKeyEnv name */
|
|
33
|
+
export interface PdLocalRuntimeProfile {
|
|
34
|
+
type: 'pi-ai';
|
|
35
|
+
provider: string;
|
|
36
|
+
model: string;
|
|
37
|
+
/** Environment variable name containing the API key — never the key value itself */
|
|
38
|
+
apiKeyEnv: string;
|
|
39
|
+
/** Optional base URL override */
|
|
40
|
+
baseUrl?: string;
|
|
41
|
+
/** Optional timeout in milliseconds */
|
|
42
|
+
timeoutMs?: number;
|
|
43
|
+
}
|
|
44
|
+
export type RuntimeProfile = OpenClawRuntimeProfile | PdLocalRuntimeProfile;
|
|
45
|
+
export declare const INTERNAL_AGENT_NAMES: readonly ["diagnostician", "dreamer", "philosopher", "scribe", "artificer", "evaluator", "rolloutReviewer", "trainer", "correctionObserver", "empathyObserver"];
|
|
46
|
+
export type InternalAgentName = (typeof INTERNAL_AGENT_NAMES)[number];
|
|
47
|
+
export interface InternalAgentBinding {
|
|
48
|
+
enabled: boolean;
|
|
49
|
+
/** Runtime profile ID referencing a profile in runtimeProfiles */
|
|
50
|
+
runtimeProfile?: string;
|
|
51
|
+
}
|
|
52
|
+
export interface InternalAgentsConfig {
|
|
53
|
+
/** Default runtime profile for all agents without explicit override */
|
|
54
|
+
defaultRuntime: string;
|
|
55
|
+
/** Per-agent overrides */
|
|
56
|
+
agents: Record<InternalAgentName, InternalAgentBinding>;
|
|
57
|
+
}
|
|
58
|
+
export declare const VALID_DIAGNOSTICS_MODES: readonly ["simple", "advanced"];
|
|
59
|
+
export type DiagnosticsMode = (typeof VALID_DIAGNOSTICS_MODES)[number];
|
|
60
|
+
export interface UiConfig {
|
|
61
|
+
diagnostics: {
|
|
62
|
+
mode: DiagnosticsMode;
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
export interface PdConfig {
|
|
66
|
+
version: PdConfigVersion;
|
|
67
|
+
features: Record<string, FeatureFlagEntry>;
|
|
68
|
+
runtimeProfiles: Record<string, RuntimeProfile>;
|
|
69
|
+
internalAgents: InternalAgentsConfig;
|
|
70
|
+
ui: UiConfig;
|
|
71
|
+
}
|
|
72
|
+
export interface PdConfigValidationError {
|
|
73
|
+
path: string;
|
|
74
|
+
reason: string;
|
|
75
|
+
nextAction: string;
|
|
76
|
+
}
|
|
77
|
+
export interface PdConfigValidationResultOk {
|
|
78
|
+
ok: true;
|
|
79
|
+
value: PdConfig;
|
|
80
|
+
}
|
|
81
|
+
export interface PdConfigValidationResultErr {
|
|
82
|
+
ok: false;
|
|
83
|
+
errors: PdConfigValidationError[];
|
|
84
|
+
}
|
|
85
|
+
export type PdConfigValidationResult = PdConfigValidationResultOk | PdConfigValidationResultErr;
|
|
86
|
+
export interface EffectivePdConfig {
|
|
87
|
+
config: PdConfig;
|
|
88
|
+
source: 'defaults' | 'user_config';
|
|
89
|
+
warnings: string[];
|
|
90
|
+
}
|
|
91
|
+
export interface RedactedRuntimeProfileSummary {
|
|
92
|
+
id: string;
|
|
93
|
+
type: RuntimeProfileType;
|
|
94
|
+
/** Safe label for display (e.g. "openclaw: lmstudio/qwen3.6-27b-mtp") */
|
|
95
|
+
label: string;
|
|
96
|
+
/** For pi-ai profiles: the env var name, never the value */
|
|
97
|
+
apiKeyEnv?: string;
|
|
98
|
+
/** Whether the profile appears ready (has required fields) */
|
|
99
|
+
readiness: 'ready' | 'not_ready' | 'needs_setup' | 'disabled' | 'unknown';
|
|
100
|
+
}
|
|
101
|
+
export interface RedactedAgentSummary {
|
|
102
|
+
name: InternalAgentName;
|
|
103
|
+
enabled: boolean;
|
|
104
|
+
runtimeProfileId: string;
|
|
105
|
+
runtimeProfileLabel: string;
|
|
106
|
+
readiness: 'ready' | 'not_ready' | 'needs_setup' | 'disabled' | 'unknown';
|
|
107
|
+
}
|
|
108
|
+
export interface RedactedFeatureSummary {
|
|
109
|
+
id: string;
|
|
110
|
+
category: FeatureCategory;
|
|
111
|
+
enabled: boolean;
|
|
112
|
+
}
|
|
113
|
+
export interface RedactedPdConfigSummary {
|
|
114
|
+
version: PdConfigVersion;
|
|
115
|
+
source: 'defaults' | 'user_config';
|
|
116
|
+
features: RedactedFeatureSummary[];
|
|
117
|
+
runtimeProfiles: RedactedRuntimeProfileSummary[];
|
|
118
|
+
defaultRuntime: string;
|
|
119
|
+
agents: RedactedAgentSummary[];
|
|
120
|
+
ui: UiConfig;
|
|
121
|
+
warnings: string[];
|
|
122
|
+
}
|
|
123
|
+
export declare const DANGEROUS_KEYS: Set<string>;
|
|
124
|
+
//# sourceMappingURL=pd-config-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pd-config-types.d.ts","sourceRoot":"","sources":["../../../src/runtime-v2/config/pd-config-types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PD-Owned Config Contract — PRI-304
|
|
3
|
+
*
|
|
4
|
+
* Pure types and constants for `.pd/config.yaml`.
|
|
5
|
+
* No I/O — YAML loading lives in pd-cli / plugin boundary.
|
|
6
|
+
*
|
|
7
|
+
* ADR-0016: PD owns exactly one user config file.
|
|
8
|
+
* .pd/feature-flags.yaml is retired into this contract.
|
|
9
|
+
* .state/workflows.yaml is not a compatibility input.
|
|
10
|
+
* PD does not own provider secrets.
|
|
11
|
+
*/
|
|
12
|
+
// ── Config Version ──────────────────────────────────────────────────────────
|
|
13
|
+
export const PD_CONFIG_VERSION = 1;
|
|
14
|
+
// ── Feature Flag Category ───────────────────────────────────────────────────
|
|
15
|
+
export const VALID_FEATURE_CATEGORIES = ['core', 'quiet', 'gone'];
|
|
16
|
+
// ── Runtime Profile Types ───────────────────────────────────────────────────
|
|
17
|
+
export const VALID_PROFILE_TYPES = ['openclaw', 'pi-ai'];
|
|
18
|
+
// ── Internal Agent Names ────────────────────────────────────────────────────
|
|
19
|
+
export const INTERNAL_AGENT_NAMES = [
|
|
20
|
+
'diagnostician',
|
|
21
|
+
'dreamer',
|
|
22
|
+
'philosopher',
|
|
23
|
+
'scribe',
|
|
24
|
+
'artificer',
|
|
25
|
+
'evaluator',
|
|
26
|
+
'rolloutReviewer',
|
|
27
|
+
'trainer',
|
|
28
|
+
'correctionObserver',
|
|
29
|
+
'empathyObserver',
|
|
30
|
+
];
|
|
31
|
+
// ── UI Config ───────────────────────────────────────────────────────────────
|
|
32
|
+
export const VALID_DIAGNOSTICS_MODES = ['simple', 'advanced'];
|
|
33
|
+
// ── Dangerous Keys ──────────────────────────────────────────────────────────
|
|
34
|
+
export const DANGEROUS_KEYS = new Set(['__proto__', 'constructor', 'prototype']);
|
|
35
|
+
//# sourceMappingURL=pd-config-types.js.map
|