@jeger-ai/opengantry 2.5.0 → 2.6.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 +4 -3
- package/dist/cli/commands/init.d.ts +2 -0
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +4 -4
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/lib/command-reporter.d.ts.map +1 -1
- package/dist/cli/lib/command-reporter.js +10 -0
- package/dist/cli/lib/command-reporter.js.map +1 -1
- package/dist/cli/lib/defensive-guard.d.ts +16 -0
- package/dist/cli/lib/defensive-guard.d.ts.map +1 -1
- package/dist/cli/lib/defensive-guard.js +253 -32
- package/dist/cli/lib/defensive-guard.js.map +1 -1
- package/dist/cli/lib/defensive-profile-presets.d.ts +10 -0
- package/dist/cli/lib/defensive-profile-presets.d.ts.map +1 -0
- package/dist/cli/lib/defensive-profile-presets.js +76 -0
- package/dist/cli/lib/defensive-profile-presets.js.map +1 -0
- package/dist/cli/lib/defensive-profile.d.ts +40 -4
- package/dist/cli/lib/defensive-profile.d.ts.map +1 -1
- package/dist/cli/lib/defensive-profile.js +136 -24
- package/dist/cli/lib/defensive-profile.js.map +1 -1
- package/dist/cli/lib/init-defensive-profile.d.ts +5 -0
- package/dist/cli/lib/init-defensive-profile.d.ts.map +1 -0
- package/dist/cli/lib/init-defensive-profile.js +14 -0
- package/dist/cli/lib/init-defensive-profile.js.map +1 -0
- package/dist/cli/lib/init-interactive.d.ts.map +1 -1
- package/dist/cli/lib/init-interactive.js +34 -0
- package/dist/cli/lib/init-interactive.js.map +1 -1
- package/dist/cli/lib/init-plan.d.ts +1 -1
- package/dist/cli/lib/init-plan.d.ts.map +1 -1
- package/dist/cli/lib/init-plan.js +6 -2
- package/dist/cli/lib/init-plan.js.map +1 -1
- package/dist/cli/lib/init-profile.d.ts +5 -0
- package/dist/cli/lib/init-profile.d.ts.map +1 -1
- package/dist/cli/lib/init-profile.js +9 -0
- package/dist/cli/lib/init-profile.js.map +1 -1
- package/dist/cli/lib/verify-defensive-phase.d.ts +20 -0
- package/dist/cli/lib/verify-defensive-phase.d.ts.map +1 -0
- package/dist/cli/lib/verify-defensive-phase.js +44 -0
- package/dist/cli/lib/verify-defensive-phase.js.map +1 -0
- package/dist/cli/lib/verify-engine.d.ts +4 -0
- package/dist/cli/lib/verify-engine.d.ts.map +1 -1
- package/dist/cli/lib/verify-engine.js +41 -37
- package/dist/cli/lib/verify-engine.js.map +1 -1
- package/dist/cli/lib/verify-payload-types.d.ts +2 -0
- package/dist/cli/lib/verify-payload-types.d.ts.map +1 -1
- package/dist/cli/lib/verify-payload.d.ts.map +1 -1
- package/dist/cli/lib/verify-payload.js +6 -0
- package/dist/cli/lib/verify-payload.js.map +1 -1
- package/dist/cli/lib/version.gen.d.ts +1 -1
- package/dist/cli/lib/version.gen.js +1 -1
- package/dist/cli/program-core.d.ts.map +1 -1
- package/dist/cli/program-core.js +2 -0
- package/dist/cli/program-core.js.map +1 -1
- package/package.json +1 -1
- package/templates/.gitagent/config.json +12 -0
- package/templates/.gitagent/foreman/SUBSTRATE.version.json +1 -1
- package/templates/integrations/compatibility.json +1 -1
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
export const DEFENSIVE_PROFILE_PRESET_NAMES = [
|
|
2
|
+
"strict_enterprise",
|
|
3
|
+
"balanced_partner",
|
|
4
|
+
"lean_scratchpad",
|
|
5
|
+
];
|
|
6
|
+
export const DEFENSIVE_PROFILE_PRESET_LABELS = {
|
|
7
|
+
strict_enterprise: "Strict Enterprise — block risky diffs",
|
|
8
|
+
balanced_partner: "Balanced Partner — warn on risky diffs",
|
|
9
|
+
lean_scratchpad: "Lean Scratchpad — audit telemetry only",
|
|
10
|
+
};
|
|
11
|
+
export function isDefensiveProfilePresetName(value) {
|
|
12
|
+
return DEFENSIVE_PROFILE_PRESET_NAMES.includes(value);
|
|
13
|
+
}
|
|
14
|
+
export function parseDefensiveProfilePreset(raw) {
|
|
15
|
+
if (!isDefensiveProfilePresetName(raw)) {
|
|
16
|
+
throw new Error(`defensive profile preset must be one of: ${DEFENSIVE_PROFILE_PRESET_NAMES.join(", ")}`);
|
|
17
|
+
}
|
|
18
|
+
return raw;
|
|
19
|
+
}
|
|
20
|
+
const PRESET_DEFAULTS = {
|
|
21
|
+
strict_enterprise: {
|
|
22
|
+
severity: "block",
|
|
23
|
+
max_net_loc: 300,
|
|
24
|
+
max_files: 15,
|
|
25
|
+
max_churn_ratio: 0.65,
|
|
26
|
+
min_assertion_delta: 0,
|
|
27
|
+
},
|
|
28
|
+
balanced_partner: {
|
|
29
|
+
severity: "warn",
|
|
30
|
+
max_net_loc: 500,
|
|
31
|
+
max_files: 25,
|
|
32
|
+
max_churn_ratio: 0.75,
|
|
33
|
+
min_assertion_delta: 0,
|
|
34
|
+
},
|
|
35
|
+
lean_scratchpad: {
|
|
36
|
+
severity: "audit",
|
|
37
|
+
max_net_loc: 800,
|
|
38
|
+
max_files: 40,
|
|
39
|
+
max_churn_ratio: 0.85,
|
|
40
|
+
min_assertion_delta: 0,
|
|
41
|
+
},
|
|
42
|
+
};
|
|
43
|
+
/** Build a full defensive_profile config for init scaffolding from a named preset. */
|
|
44
|
+
export function buildDefensiveProfileFromPreset(preset) {
|
|
45
|
+
const d = PRESET_DEFAULTS[preset];
|
|
46
|
+
return {
|
|
47
|
+
enabled: true,
|
|
48
|
+
preset,
|
|
49
|
+
guards: {
|
|
50
|
+
net_loc_budget: {
|
|
51
|
+
enabled: true,
|
|
52
|
+
severity: d.severity,
|
|
53
|
+
max_net_loc: d.max_net_loc,
|
|
54
|
+
},
|
|
55
|
+
file_scope: {
|
|
56
|
+
enabled: true,
|
|
57
|
+
severity: d.severity,
|
|
58
|
+
max_files: d.max_files,
|
|
59
|
+
},
|
|
60
|
+
churn_ratio: {
|
|
61
|
+
enabled: true,
|
|
62
|
+
severity: d.severity,
|
|
63
|
+
max_ratio: d.max_churn_ratio,
|
|
64
|
+
},
|
|
65
|
+
test_to_code: {
|
|
66
|
+
enabled: true,
|
|
67
|
+
severity: d.severity,
|
|
68
|
+
min_assertion_delta: d.min_assertion_delta,
|
|
69
|
+
},
|
|
70
|
+
},
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
export function presetDefaultSeverity(preset) {
|
|
74
|
+
return PRESET_DEFAULTS[preset].severity;
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=defensive-profile-presets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defensive-profile-presets.js","sourceRoot":"","sources":["../../../src/cli/lib/defensive-profile-presets.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,8BAA8B,GAAG;IAC5C,mBAAmB;IACnB,kBAAkB;IAClB,iBAAiB;CACT,CAAC;AAIX,MAAM,CAAC,MAAM,+BAA+B,GAA+C;IACzF,iBAAiB,EAAE,uCAAuC;IAC1D,gBAAgB,EAAE,wCAAwC;IAC1D,eAAe,EAAE,wCAAwC;CAC1D,CAAC;AAEF,MAAM,UAAU,4BAA4B,CAAC,KAAa;IACxD,OAAQ,8BAAoD,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC/E,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,GAAW;IACrD,IAAI,CAAC,4BAA4B,CAAC,GAAG,CAAC,EAAE,CAAC;QACvC,MAAM,IAAI,KAAK,CACb,4CAA4C,8BAA8B,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACxF,CAAC;IACJ,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAUD,MAAM,eAAe,GAA4D;IAC/E,iBAAiB,EAAE;QACjB,QAAQ,EAAE,OAAO;QACjB,WAAW,EAAE,GAAG;QAChB,SAAS,EAAE,EAAE;QACb,eAAe,EAAE,IAAI;QACrB,mBAAmB,EAAE,CAAC;KACvB;IACD,gBAAgB,EAAE;QAChB,QAAQ,EAAE,MAAM;QAChB,WAAW,EAAE,GAAG;QAChB,SAAS,EAAE,EAAE;QACb,eAAe,EAAE,IAAI;QACrB,mBAAmB,EAAE,CAAC;KACvB;IACD,eAAe,EAAE;QACf,QAAQ,EAAE,OAAO;QACjB,WAAW,EAAE,GAAG;QAChB,SAAS,EAAE,EAAE;QACb,eAAe,EAAE,IAAI;QACrB,mBAAmB,EAAE,CAAC;KACvB;CACF,CAAC;AAEF,sFAAsF;AACtF,MAAM,UAAU,+BAA+B,CAC7C,MAAkC;IAElC,MAAM,CAAC,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IAClC,OAAO;QACL,OAAO,EAAE,IAAI;QACb,MAAM;QACN,MAAM,EAAE;YACN,cAAc,EAAE;gBACd,OAAO,EAAE,IAAI;gBACb,QAAQ,EAAE,CAAC,CAAC,QAAQ;gBACpB,WAAW,EAAE,CAAC,CAAC,WAAW;aAC3B;YACD,UAAU,EAAE;gBACV,OAAO,EAAE,IAAI;gBACb,QAAQ,EAAE,CAAC,CAAC,QAAQ;gBACpB,SAAS,EAAE,CAAC,CAAC,SAAS;aACvB;YACD,WAAW,EAAE;gBACX,OAAO,EAAE,IAAI;gBACb,QAAQ,EAAE,CAAC,CAAC,QAAQ;gBACpB,SAAS,EAAE,CAAC,CAAC,eAAe;aAC7B;YACD,YAAY,EAAE;gBACZ,OAAO,EAAE,IAAI;gBACb,QAAQ,EAAE,CAAC,CAAC,QAAQ;gBACpB,mBAAmB,EAAE,CAAC,CAAC,mBAAmB;aAC3C;SACF;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,MAAkC;IACtE,OAAO,eAAe,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC;AAC1C,CAAC"}
|
|
@@ -1,22 +1,58 @@
|
|
|
1
1
|
import type { GxtConfig } from "./gxt-config.js";
|
|
2
|
-
|
|
2
|
+
import { type DefensiveProfilePresetName } from "./defensive-profile-presets.js";
|
|
3
|
+
export type GuardSeverity = "block" | "warn" | "audit";
|
|
4
|
+
export declare const GUARD_SEVERITIES: readonly GuardSeverity[];
|
|
5
|
+
export interface GuardConfigBase {
|
|
3
6
|
enabled?: boolean;
|
|
7
|
+
severity?: GuardSeverity;
|
|
8
|
+
}
|
|
9
|
+
export interface NetLocBudgetGuard extends GuardConfigBase {
|
|
4
10
|
max_net_loc?: number;
|
|
5
11
|
}
|
|
12
|
+
export interface FileScopeGuard extends GuardConfigBase {
|
|
13
|
+
max_files?: number;
|
|
14
|
+
}
|
|
15
|
+
export interface ChurnRatioGuard extends GuardConfigBase {
|
|
16
|
+
max_ratio?: number;
|
|
17
|
+
}
|
|
18
|
+
export interface TestToCodeGuard extends GuardConfigBase {
|
|
19
|
+
min_assertion_delta?: number;
|
|
20
|
+
}
|
|
6
21
|
export interface DefensiveProfileGuards {
|
|
7
22
|
net_loc_budget?: NetLocBudgetGuard;
|
|
23
|
+
file_scope?: FileScopeGuard;
|
|
24
|
+
churn_ratio?: ChurnRatioGuard;
|
|
25
|
+
test_to_code?: TestToCodeGuard;
|
|
8
26
|
}
|
|
9
27
|
export interface DefensiveProfileConfig {
|
|
10
28
|
enabled?: boolean;
|
|
29
|
+
preset?: DefensiveProfilePresetName | "custom";
|
|
11
30
|
guards?: DefensiveProfileGuards;
|
|
12
31
|
}
|
|
13
|
-
export interface
|
|
32
|
+
export interface ResolvedGuard<T> {
|
|
14
33
|
enabled: true;
|
|
15
|
-
|
|
34
|
+
severity: GuardSeverity;
|
|
35
|
+
config: T;
|
|
16
36
|
}
|
|
37
|
+
export type ResolvedNetLocBudget = ResolvedGuard<{
|
|
38
|
+
max_net_loc: number;
|
|
39
|
+
}>;
|
|
40
|
+
export type ResolvedFileScope = ResolvedGuard<{
|
|
41
|
+
max_files: number;
|
|
42
|
+
}>;
|
|
43
|
+
export type ResolvedChurnRatio = ResolvedGuard<{
|
|
44
|
+
max_ratio: number;
|
|
45
|
+
}>;
|
|
46
|
+
export type ResolvedTestToCode = ResolvedGuard<{
|
|
47
|
+
min_assertion_delta: number;
|
|
48
|
+
}>;
|
|
17
49
|
export interface ResolvedDefensiveProfile {
|
|
18
50
|
enabled: boolean;
|
|
19
|
-
|
|
51
|
+
preset: DefensiveProfilePresetName | "custom" | null;
|
|
52
|
+
net_loc_budget: ResolvedNetLocBudget | null;
|
|
53
|
+
file_scope: ResolvedFileScope | null;
|
|
54
|
+
churn_ratio: ResolvedChurnRatio | null;
|
|
55
|
+
test_to_code: ResolvedTestToCode | null;
|
|
20
56
|
}
|
|
21
57
|
export declare function validateDefensiveProfile(raw: unknown): DefensiveProfileConfig;
|
|
22
58
|
/** Fail-closed resolution: profile must be explicitly enabled; guards opt-in per guard. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defensive-profile.d.ts","sourceRoot":"","sources":["../../../src/cli/lib/defensive-profile.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"defensive-profile.d.ts","sourceRoot":"","sources":["../../../src/cli/lib/defensive-profile.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAGL,KAAK,0BAA0B,EAChC,MAAM,gCAAgC,CAAC;AAExC,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC;AAEvD,eAAO,MAAM,gBAAgB,EAAE,SAAS,aAAa,EAA+B,CAAC;AAErF,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,aAAa,CAAC;CAC1B;AAED,MAAM,WAAW,iBAAkB,SAAQ,eAAe;IACxD,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,cAAe,SAAQ,eAAe;IACrD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,eAAgB,SAAQ,eAAe;IACtD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,eAAgB,SAAQ,eAAe;IACtD,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,sBAAsB;IACrC,cAAc,CAAC,EAAE,iBAAiB,CAAC;IACnC,UAAU,CAAC,EAAE,cAAc,CAAC;IAC5B,WAAW,CAAC,EAAE,eAAe,CAAC;IAC9B,YAAY,CAAC,EAAE,eAAe,CAAC;CAChC;AAED,MAAM,WAAW,sBAAsB;IACrC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,0BAA0B,GAAG,QAAQ,CAAC;IAC/C,MAAM,CAAC,EAAE,sBAAsB,CAAC;CACjC;AAED,MAAM,WAAW,aAAa,CAAC,CAAC;IAC9B,OAAO,EAAE,IAAI,CAAC;IACd,QAAQ,EAAE,aAAa,CAAC;IACxB,MAAM,EAAE,CAAC,CAAC;CACX;AAED,MAAM,MAAM,oBAAoB,GAAG,aAAa,CAAC;IAAE,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAC1E,MAAM,MAAM,iBAAiB,GAAG,aAAa,CAAC;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AACrE,MAAM,MAAM,kBAAkB,GAAG,aAAa,CAAC;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AACtE,MAAM,MAAM,kBAAkB,GAAG,aAAa,CAAC;IAAE,mBAAmB,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAEhF,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,0BAA0B,GAAG,QAAQ,GAAG,IAAI,CAAC;IACrD,cAAc,EAAE,oBAAoB,GAAG,IAAI,CAAC;IAC5C,UAAU,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACrC,WAAW,EAAE,kBAAkB,GAAG,IAAI,CAAC;IACvC,YAAY,EAAE,kBAAkB,GAAG,IAAI,CAAC;CACzC;AAgED,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,OAAO,GAAG,sBAAsB,CA4E7E;AA+BD,2FAA2F;AAC3F,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,SAAS,GAAG,wBAAwB,CAgCnF"}
|
|
@@ -1,10 +1,59 @@
|
|
|
1
|
+
import { isDefensiveProfilePresetName, presetDefaultSeverity, } from "./defensive-profile-presets.js";
|
|
2
|
+
export const GUARD_SEVERITIES = ["block", "warn", "audit"];
|
|
1
3
|
const DEFAULT_NET_LOC_BUDGET = 500;
|
|
4
|
+
const DEFAULT_MAX_FILES = 25;
|
|
5
|
+
const DEFAULT_MAX_CHURN_RATIO = 0.75;
|
|
6
|
+
const DEFAULT_MIN_ASSERTION_DELTA = 0;
|
|
2
7
|
function parsePositiveInt(value, field) {
|
|
3
8
|
if (typeof value !== "number" || !Number.isInteger(value) || value < 1) {
|
|
4
9
|
throw new Error(`defensive_profile: ${field} must be a positive integer`);
|
|
5
10
|
}
|
|
6
11
|
return value;
|
|
7
12
|
}
|
|
13
|
+
function parseNonNegativeInt(value, field) {
|
|
14
|
+
if (typeof value !== "number" || !Number.isInteger(value) || value < 0) {
|
|
15
|
+
throw new Error(`defensive_profile: ${field} must be a non-negative integer`);
|
|
16
|
+
}
|
|
17
|
+
return value;
|
|
18
|
+
}
|
|
19
|
+
function parseRatio(value, field) {
|
|
20
|
+
if (typeof value !== "number" || !Number.isFinite(value) || value <= 0 || value > 1) {
|
|
21
|
+
throw new Error(`defensive_profile: ${field} must be a number in (0, 1]`);
|
|
22
|
+
}
|
|
23
|
+
return value;
|
|
24
|
+
}
|
|
25
|
+
function parseSeverity(value, field) {
|
|
26
|
+
if (value == null)
|
|
27
|
+
return undefined;
|
|
28
|
+
if (typeof value !== "string" || !GUARD_SEVERITIES.includes(value)) {
|
|
29
|
+
throw new Error(`defensive_profile: ${field} must be block, warn, or audit`);
|
|
30
|
+
}
|
|
31
|
+
return value;
|
|
32
|
+
}
|
|
33
|
+
function parseGuardEnabled(value, field) {
|
|
34
|
+
if (value == null)
|
|
35
|
+
return undefined;
|
|
36
|
+
if (typeof value !== "boolean") {
|
|
37
|
+
throw new Error(`defensive_profile: ${field}.enabled must be a boolean`);
|
|
38
|
+
}
|
|
39
|
+
return value;
|
|
40
|
+
}
|
|
41
|
+
function validateGuardObject(raw, guardName, validateFields) {
|
|
42
|
+
if (raw == null)
|
|
43
|
+
return undefined;
|
|
44
|
+
if (typeof raw !== "object") {
|
|
45
|
+
throw new Error(`defensive_profile.guards.${guardName} must be an object`);
|
|
46
|
+
}
|
|
47
|
+
const g = raw;
|
|
48
|
+
const enabled = parseGuardEnabled(g.enabled, `guards.${guardName}`);
|
|
49
|
+
const severity = parseSeverity(g.severity, `guards.${guardName}.severity`);
|
|
50
|
+
const fields = validateFields(g);
|
|
51
|
+
return {
|
|
52
|
+
...(enabled != null ? { enabled } : {}),
|
|
53
|
+
...(severity != null ? { severity } : {}),
|
|
54
|
+
...fields,
|
|
55
|
+
};
|
|
56
|
+
}
|
|
8
57
|
export function validateDefensiveProfile(raw) {
|
|
9
58
|
if (raw == null)
|
|
10
59
|
return {};
|
|
@@ -15,52 +64,115 @@ export function validateDefensiveProfile(raw) {
|
|
|
15
64
|
if (o.enabled != null && typeof o.enabled !== "boolean") {
|
|
16
65
|
throw new Error("defensive_profile.enabled must be a boolean");
|
|
17
66
|
}
|
|
67
|
+
let preset;
|
|
68
|
+
if (o.preset != null) {
|
|
69
|
+
if (typeof o.preset !== "string") {
|
|
70
|
+
throw new Error("defensive_profile.preset must be a string");
|
|
71
|
+
}
|
|
72
|
+
if (o.preset !== "custom" && !isDefensiveProfilePresetName(o.preset)) {
|
|
73
|
+
throw new Error("defensive_profile.preset must be strict_enterprise, balanced_partner, lean_scratchpad, or custom");
|
|
74
|
+
}
|
|
75
|
+
preset = o.preset;
|
|
76
|
+
}
|
|
18
77
|
let guards;
|
|
19
78
|
if (o.guards != null) {
|
|
20
79
|
if (typeof o.guards !== "object") {
|
|
21
80
|
throw new Error("defensive_profile.guards must be an object");
|
|
22
81
|
}
|
|
23
82
|
const g = o.guards;
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
if (typeof g.net_loc_budget !== "object") {
|
|
27
|
-
throw new Error("defensive_profile.guards.net_loc_budget must be an object");
|
|
28
|
-
}
|
|
29
|
-
const nlb = g.net_loc_budget;
|
|
30
|
-
if (nlb.enabled != null && typeof nlb.enabled !== "boolean") {
|
|
31
|
-
throw new Error("defensive_profile.guards.net_loc_budget.enabled must be a boolean");
|
|
32
|
-
}
|
|
83
|
+
const net_loc_budget = validateGuardObject(g.net_loc_budget, "net_loc_budget", (nlb) => {
|
|
84
|
+
const out = {};
|
|
33
85
|
if (nlb.max_net_loc != null) {
|
|
34
86
|
parsePositiveInt(nlb.max_net_loc, "guards.net_loc_budget.max_net_loc");
|
|
87
|
+
out.max_net_loc = nlb.max_net_loc;
|
|
35
88
|
}
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
};
|
|
40
|
-
|
|
41
|
-
|
|
89
|
+
return out;
|
|
90
|
+
});
|
|
91
|
+
const file_scope = validateGuardObject(g.file_scope, "file_scope", (fs) => {
|
|
92
|
+
const out = {};
|
|
93
|
+
if (fs.max_files != null) {
|
|
94
|
+
parsePositiveInt(fs.max_files, "guards.file_scope.max_files");
|
|
95
|
+
out.max_files = fs.max_files;
|
|
96
|
+
}
|
|
97
|
+
return out;
|
|
98
|
+
});
|
|
99
|
+
const churn_ratio = validateGuardObject(g.churn_ratio, "churn_ratio", (cr) => {
|
|
100
|
+
const out = {};
|
|
101
|
+
if (cr.max_ratio != null) {
|
|
102
|
+
parseRatio(cr.max_ratio, "guards.churn_ratio.max_ratio");
|
|
103
|
+
out.max_ratio = cr.max_ratio;
|
|
104
|
+
}
|
|
105
|
+
return out;
|
|
106
|
+
});
|
|
107
|
+
const test_to_code = validateGuardObject(g.test_to_code, "test_to_code", (ttc) => {
|
|
108
|
+
const out = {};
|
|
109
|
+
if (ttc.min_assertion_delta != null) {
|
|
110
|
+
parseNonNegativeInt(ttc.min_assertion_delta, "guards.test_to_code.min_assertion_delta");
|
|
111
|
+
out.min_assertion_delta = ttc.min_assertion_delta;
|
|
112
|
+
}
|
|
113
|
+
return out;
|
|
114
|
+
});
|
|
115
|
+
guards = {
|
|
116
|
+
...(net_loc_budget ? { net_loc_budget } : {}),
|
|
117
|
+
...(file_scope ? { file_scope } : {}),
|
|
118
|
+
...(churn_ratio ? { churn_ratio } : {}),
|
|
119
|
+
...(test_to_code ? { test_to_code } : {}),
|
|
120
|
+
};
|
|
42
121
|
}
|
|
43
122
|
return {
|
|
44
123
|
...(o.enabled != null ? { enabled: o.enabled } : {}),
|
|
124
|
+
...(preset ? { preset } : {}),
|
|
45
125
|
...(guards ? { guards } : {}),
|
|
46
126
|
};
|
|
47
127
|
}
|
|
128
|
+
function defaultSeverityForPreset(preset) {
|
|
129
|
+
if (preset && preset !== "custom" && isDefensiveProfilePresetName(preset)) {
|
|
130
|
+
return presetDefaultSeverity(preset);
|
|
131
|
+
}
|
|
132
|
+
return "block";
|
|
133
|
+
}
|
|
134
|
+
function resolveGuardSeverity(guard, preset) {
|
|
135
|
+
return guard?.severity ?? defaultSeverityForPreset(preset);
|
|
136
|
+
}
|
|
137
|
+
function resolveEnabledGuard(guard, preset, buildConfig) {
|
|
138
|
+
if (!guard?.enabled)
|
|
139
|
+
return null;
|
|
140
|
+
return {
|
|
141
|
+
enabled: true,
|
|
142
|
+
severity: resolveGuardSeverity(guard, preset),
|
|
143
|
+
config: buildConfig(),
|
|
144
|
+
};
|
|
145
|
+
}
|
|
48
146
|
/** Fail-closed resolution: profile must be explicitly enabled; guards opt-in per guard. */
|
|
49
147
|
export function resolveDefensiveProfile(config) {
|
|
50
148
|
const raw = config.defensive_profile;
|
|
51
149
|
if (!raw?.enabled) {
|
|
52
|
-
return {
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
150
|
+
return {
|
|
151
|
+
enabled: false,
|
|
152
|
+
preset: null,
|
|
153
|
+
net_loc_budget: null,
|
|
154
|
+
file_scope: null,
|
|
155
|
+
churn_ratio: null,
|
|
156
|
+
test_to_code: null,
|
|
157
|
+
};
|
|
57
158
|
}
|
|
159
|
+
const preset = raw.preset ?? null;
|
|
160
|
+
const guards = raw.guards;
|
|
58
161
|
return {
|
|
59
162
|
enabled: true,
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
max_net_loc:
|
|
63
|
-
},
|
|
163
|
+
preset,
|
|
164
|
+
net_loc_budget: resolveEnabledGuard(guards?.net_loc_budget, preset, () => ({
|
|
165
|
+
max_net_loc: guards?.net_loc_budget?.max_net_loc ?? DEFAULT_NET_LOC_BUDGET,
|
|
166
|
+
})),
|
|
167
|
+
file_scope: resolveEnabledGuard(guards?.file_scope, preset, () => ({
|
|
168
|
+
max_files: guards?.file_scope?.max_files ?? DEFAULT_MAX_FILES,
|
|
169
|
+
})),
|
|
170
|
+
churn_ratio: resolveEnabledGuard(guards?.churn_ratio, preset, () => ({
|
|
171
|
+
max_ratio: guards?.churn_ratio?.max_ratio ?? DEFAULT_MAX_CHURN_RATIO,
|
|
172
|
+
})),
|
|
173
|
+
test_to_code: resolveEnabledGuard(guards?.test_to_code, preset, () => ({
|
|
174
|
+
min_assertion_delta: guards?.test_to_code?.min_assertion_delta ?? DEFAULT_MIN_ASSERTION_DELTA,
|
|
175
|
+
})),
|
|
64
176
|
};
|
|
65
177
|
}
|
|
66
178
|
//# sourceMappingURL=defensive-profile.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defensive-profile.js","sourceRoot":"","sources":["../../../src/cli/lib/defensive-profile.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"defensive-profile.js","sourceRoot":"","sources":["../../../src/cli/lib/defensive-profile.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { type DefensiveProfilePresetName } from "./defensive-profile-presets.js";
|
|
2
|
+
/** Merge defensive_profile preset into scaffolded config.json body. */
|
|
3
|
+
export declare function mergeDefensiveProfileIntoConfigBody(templateBody: string, preset: DefensiveProfilePresetName | null | undefined): string;
|
|
4
|
+
export declare function isConfigJsonTarget(targetPath: string): boolean;
|
|
5
|
+
//# sourceMappingURL=init-defensive-profile.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init-defensive-profile.d.ts","sourceRoot":"","sources":["../../../src/cli/lib/init-defensive-profile.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,0BAA0B,EAChC,MAAM,gCAAgC,CAAC;AAIxC,uEAAuE;AACvE,wBAAgB,mCAAmC,CACjD,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,0BAA0B,GAAG,IAAI,GAAG,SAAS,GACpD,MAAM,CAMR;AAED,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAE9D"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { buildDefensiveProfileFromPreset, } from "./defensive-profile-presets.js";
|
|
2
|
+
const CONFIG_REL = ".gitagent/config.json";
|
|
3
|
+
/** Merge defensive_profile preset into scaffolded config.json body. */
|
|
4
|
+
export function mergeDefensiveProfileIntoConfigBody(templateBody, preset) {
|
|
5
|
+
const parsed = JSON.parse(templateBody);
|
|
6
|
+
if (preset) {
|
|
7
|
+
parsed.defensive_profile = buildDefensiveProfileFromPreset(preset);
|
|
8
|
+
}
|
|
9
|
+
return `${JSON.stringify(parsed, null, 2)}\n`;
|
|
10
|
+
}
|
|
11
|
+
export function isConfigJsonTarget(targetPath) {
|
|
12
|
+
return targetPath.replace(/\\/g, "/") === CONFIG_REL;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=init-defensive-profile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init-defensive-profile.js","sourceRoot":"","sources":["../../../src/cli/lib/init-defensive-profile.ts"],"names":[],"mappings":"AACA,OAAO,EACL,+BAA+B,GAEhC,MAAM,gCAAgC,CAAC;AAExC,MAAM,UAAU,GAAG,uBAAuB,CAAC;AAE3C,uEAAuE;AACvE,MAAM,UAAU,mCAAmC,CACjD,YAAoB,EACpB,MAAqD;IAErD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAA4B,CAAC;IACnE,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,CAAC,iBAAiB,GAAG,+BAA+B,CAAC,MAAM,CAAsC,CAAC;IAC1G,CAAC;IACD,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,UAAkB;IACnD,OAAO,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,KAAK,UAAU,CAAC;AACvD,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init-interactive.d.ts","sourceRoot":"","sources":["../../../src/cli/lib/init-interactive.ts"],"names":[],"mappings":"AAOA,OAAO,EAIL,KAAK,WAAW,EAEjB,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"init-interactive.d.ts","sourceRoot":"","sources":["../../../src/cli/lib/init-interactive.ts"],"names":[],"mappings":"AAOA,OAAO,EAIL,KAAK,WAAW,EAEjB,MAAM,mBAAmB,CAAC;AAkM3B,wBAAsB,wBAAwB,CAC5C,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,OAAO,CAAC,WAAW,CAAC,GAC5B,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAsD7B;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAO9F;AAED,wBAAsB,4BAA4B,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAc/F"}
|
|
@@ -2,6 +2,7 @@ import * as p from "@clack/prompts";
|
|
|
2
2
|
import { INTEGRATION_IDE_KEYS, integrationWizardLabel, loadIntegrationCompat, } from "./integration-compat.js";
|
|
3
3
|
import { defaultInitProfile, mergeInitProfile, } from "./init-profile.js";
|
|
4
4
|
import { defaultArchitectureLocation } from "./init-compose.js";
|
|
5
|
+
import { DEFENSIVE_PROFILE_PRESET_LABELS, DEFENSIVE_PROFILE_PRESET_NAMES, } from "./defensive-profile-presets.js";
|
|
5
6
|
function wizardCancelled(value) {
|
|
6
7
|
return p.isCancel(value);
|
|
7
8
|
}
|
|
@@ -101,6 +102,29 @@ async function promptInitArchitecture(partial, base) {
|
|
|
101
102
|
architectureAccessRequired,
|
|
102
103
|
};
|
|
103
104
|
}
|
|
105
|
+
async function promptDefensiveProfile(partial) {
|
|
106
|
+
const choice = await p.select({
|
|
107
|
+
message: "Defensive profile baseline",
|
|
108
|
+
options: [
|
|
109
|
+
{ value: "skip", label: "Skip — keep template defaults (disabled)" },
|
|
110
|
+
...DEFENSIVE_PROFILE_PRESET_NAMES.map((value) => ({
|
|
111
|
+
value,
|
|
112
|
+
label: DEFENSIVE_PROFILE_PRESET_LABELS[value],
|
|
113
|
+
})),
|
|
114
|
+
],
|
|
115
|
+
initialValue: partial.defensiveProfilePreset === null
|
|
116
|
+
? "skip"
|
|
117
|
+
: (partial.defensiveProfilePreset ?? "balanced_partner"),
|
|
118
|
+
});
|
|
119
|
+
if (wizardCancelled(choice)) {
|
|
120
|
+
p.cancel("init cancelled");
|
|
121
|
+
return null;
|
|
122
|
+
}
|
|
123
|
+
if (choice === "skip") {
|
|
124
|
+
return { defensiveProfilePreset: null };
|
|
125
|
+
}
|
|
126
|
+
return { defensiveProfilePreset: choice };
|
|
127
|
+
}
|
|
104
128
|
async function promptInitInfrastructure(partial, base) {
|
|
105
129
|
const skills = await p.select({
|
|
106
130
|
message: "Skills preset",
|
|
@@ -146,6 +170,11 @@ export async function runInitInteractiveWizard(repoRoot, templatesRoot, partial)
|
|
|
146
170
|
const architecture = await promptInitArchitecture(partial, base);
|
|
147
171
|
if (!architecture)
|
|
148
172
|
return null;
|
|
173
|
+
const defensive = partial.defensiveProfilePreset !== undefined
|
|
174
|
+
? { defensiveProfilePreset: partial.defensiveProfilePreset }
|
|
175
|
+
: await promptDefensiveProfile(partial);
|
|
176
|
+
if (!defensive)
|
|
177
|
+
return null;
|
|
149
178
|
const infrastructure = await promptInitInfrastructure(partial, base);
|
|
150
179
|
if (!infrastructure)
|
|
151
180
|
return null;
|
|
@@ -153,12 +182,17 @@ export async function runInitInteractiveWizard(repoRoot, templatesRoot, partial)
|
|
|
153
182
|
...partial,
|
|
154
183
|
...integrations,
|
|
155
184
|
...architecture,
|
|
185
|
+
...defensive,
|
|
156
186
|
...infrastructure,
|
|
157
187
|
});
|
|
188
|
+
const defensiveLine = profile.defensiveProfilePreset == null
|
|
189
|
+
? "Defensive profile: disabled (template default)"
|
|
190
|
+
: `Defensive profile: ${profile.defensiveProfilePreset}`;
|
|
158
191
|
p.note([
|
|
159
192
|
`IDEs: ${profile.ides.join(", ")}`,
|
|
160
193
|
`Doc: ${profile.integrationsDocPath}`,
|
|
161
194
|
`Architecture: ${profile.architectureSource}${profile.architectureLocation ? ` → ${profile.architectureLocation}` : ""}`,
|
|
195
|
+
defensiveLine,
|
|
162
196
|
`Skills: ${profile.skillsPreset}`,
|
|
163
197
|
`Hooks: ${profile.gitHooks ? "yes" : "no"}`,
|
|
164
198
|
`CI: ${profile.ciWorkflow ? "yes" : "no"}`,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init-interactive.js","sourceRoot":"","sources":["../../../src/cli/lib/init-interactive.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;AACpC,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,qBAAqB,GAEtB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,kBAAkB,EAClB,gBAAgB,GAIjB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,2BAA2B,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"init-interactive.js","sourceRoot":"","sources":["../../../src/cli/lib/init-interactive.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,7 +13,7 @@ export interface InitPlanResult {
|
|
|
13
13
|
unchanged: string[];
|
|
14
14
|
conflicts: string[];
|
|
15
15
|
}
|
|
16
|
-
export declare function planInitAssets(assets: (InitAsset | InitAssetSpec)[], templatesRoot: string, repoRoot: string, force: boolean): InitPlanResult;
|
|
16
|
+
export declare function planInitAssets(assets: (InitAsset | InitAssetSpec)[], templatesRoot: string, repoRoot: string, force: boolean, profile?: InitProfile): InitPlanResult;
|
|
17
17
|
export declare function applyInitWrites(writes: PlannedWrite[]): void;
|
|
18
18
|
export declare function logInitSummary(writes: PlannedWrite[], skippedUserMutable: string[], unchanged: string[]): void;
|
|
19
19
|
export declare function logInitNextSteps(profile?: InitProfile): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init-plan.d.ts","sourceRoot":"","sources":["../../../src/cli/lib/init-plan.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAwB,KAAK,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACnF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"init-plan.d.ts","sourceRoot":"","sources":["../../../src/cli/lib/init-plan.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAwB,KAAK,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACnF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAMrD,MAAM,WAAW,YAAY;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,wBAAgB,cAAc,CAC5B,MAAM,EAAE,CAAC,SAAS,GAAG,aAAa,CAAC,EAAE,EACrC,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,OAAO,EACd,OAAO,CAAC,EAAE,WAAW,GACpB,cAAc,CA4ChB;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,IAAI,CAM5D;AAED,wBAAgB,cAAc,CAC5B,MAAM,EAAE,YAAY,EAAE,EACtB,kBAAkB,EAAE,MAAM,EAAE,EAC5B,SAAS,EAAE,MAAM,EAAE,GAClB,IAAI,CAQN;AAGD,wBAAgB,gBAAgB,CAAC,OAAO,CAAC,EAAE,WAAW,GAAG,IAAI,CAgB5D"}
|
|
@@ -5,7 +5,8 @@ import { logError, logInfo } from "./cli-io.js";
|
|
|
5
5
|
import { audienceSectionTitle, filterTaggedStepsForAudience, formatAudienceNextStep, INIT_TAGGED_NEXT_STEPS, } from "./audience-output.js";
|
|
6
6
|
import { getOutputAudience } from "./output-context.js";
|
|
7
7
|
import { templatePathForAsset } from "./init-asset-catalog.js";
|
|
8
|
-
|
|
8
|
+
import { isConfigJsonTarget, mergeDefensiveProfileIntoConfigBody, } from "./init-defensive-profile.js";
|
|
9
|
+
export function planInitAssets(assets, templatesRoot, repoRoot, force, profile) {
|
|
9
10
|
const writes = [];
|
|
10
11
|
const conflicts = [];
|
|
11
12
|
const skippedUserMutable = [];
|
|
@@ -21,7 +22,10 @@ export function planInitAssets(assets, templatesRoot, repoRoot, force) {
|
|
|
21
22
|
logError(`init: missing template for ${asset.targetPath} at ${templateAbs}`);
|
|
22
23
|
return { ok: false, writes, skippedUserMutable, unchanged, conflicts };
|
|
23
24
|
}
|
|
24
|
-
const
|
|
25
|
+
const bodyRaw = fs.readFileSync(templateAbs, "utf8");
|
|
26
|
+
const body = profile?.defensiveProfilePreset && isConfigJsonTarget(asset.targetPath)
|
|
27
|
+
? mergeDefensiveProfileIntoConfigBody(bodyRaw, profile.defensiveProfilePreset)
|
|
28
|
+
: bodyRaw;
|
|
25
29
|
const existing = fs.existsSync(targetAbs) ? fs.readFileSync(targetAbs, "utf8") : null;
|
|
26
30
|
if (existing === null) {
|
|
27
31
|
writes.push({ absoluteTarget: targetAbs, body, executable: asset.executable === true });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init-plan.js","sourceRoot":"","sources":["../../../src/cli/lib/init-plan.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EACL,oBAAoB,EACpB,4BAA4B,EAC5B,sBAAsB,EACtB,sBAAsB,GAEvB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD,OAAO,EAAE,oBAAoB,EAAsB,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"init-plan.js","sourceRoot":"","sources":["../../../src/cli/lib/init-plan.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { IntegrationIdeKey } from "./integration-compat.js";
|
|
2
|
+
import { type DefensiveProfilePresetName } from "./defensive-profile-presets.js";
|
|
2
3
|
export type SkillsPreset = "minimal" | "specimen";
|
|
3
4
|
/** Where code architecture docs live — unset means agents must ask before implementing. */
|
|
4
5
|
export type ArchitectureSourceKind = "unset" | "file" | "directory" | "external";
|
|
@@ -13,6 +14,8 @@ export interface InitProfile {
|
|
|
13
14
|
architectureAccessRequired?: boolean;
|
|
14
15
|
architectureCredentialSlot?: string;
|
|
15
16
|
architectureAuthHint?: string;
|
|
17
|
+
/** Selected defensive profile preset; undefined = prompt/default, null = explicit skip */
|
|
18
|
+
defensiveProfilePreset?: DefensiveProfilePresetName | null;
|
|
16
19
|
}
|
|
17
20
|
export declare const DEFAULT_INTEGRATIONS_DOC_PATH = "docs/INTEGRATIONS.md";
|
|
18
21
|
export declare function defaultInitProfile(): InitProfile;
|
|
@@ -29,6 +32,8 @@ export declare function profileFromCliFlags(opts: {
|
|
|
29
32
|
noCi?: boolean;
|
|
30
33
|
archSource?: string;
|
|
31
34
|
archLocation?: string;
|
|
35
|
+
defensiveProfile?: string;
|
|
36
|
+
noDefensiveProfile?: boolean;
|
|
32
37
|
}): Partial<InitProfile>;
|
|
33
38
|
export declare function mergeInitProfile(base: InitProfile, partial: Partial<InitProfile>): InitProfile;
|
|
34
39
|
export declare function hasFullCliProfile(partial: Partial<InitProfile>): boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init-profile.d.ts","sourceRoot":"","sources":["../../../src/cli/lib/init-profile.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"init-profile.d.ts","sourceRoot":"","sources":["../../../src/cli/lib/init-profile.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAEL,KAAK,0BAA0B,EAChC,MAAM,gCAAgC,CAAC;AAExC,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,UAAU,CAAC;AAElD,2FAA2F;AAC3F,MAAM,MAAM,sBAAsB,GAAG,OAAO,GAAG,MAAM,GAAG,WAAW,GAAG,UAAU,CAAC;AAEjF,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,iBAAiB,EAAE,CAAC;IAC1B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,YAAY,EAAE,YAAY,CAAC;IAC3B,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,OAAO,CAAC;IACpB,kBAAkB,EAAE,sBAAsB,CAAC;IAC3C,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,0BAA0B,CAAC,EAAE,OAAO,CAAC;IACrC,0BAA0B,CAAC,EAAE,MAAM,CAAC;IACpC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,0FAA0F;IAC1F,sBAAsB,CAAC,EAAE,0BAA0B,GAAG,IAAI,CAAC;CAC5D;AAED,eAAO,MAAM,6BAA6B,yBAAyB,CAAC;AAEpE,wBAAgB,kBAAkB,IAAI,WAAW,CAShD;AAED,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,MAAM,GAAG,sBAAsB,CAK3E;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,iBAAiB,EAAE,CAO7D;AAED,wBAAgB,2BAA2B,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAUrF;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE;IACxC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,EAAE,CAAC,EAAE,OAAO,CAAC;IACb,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B,GAAG,OAAO,CAAC,WAAW,CAAC,CAgBvB;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,WAAW,CAiB9F;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,OAAO,CAQxE;AAED,wBAAgB,0BAA0B,CAAC,OAAO,EAAE;IAClD,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;CAC/B,GAAG,OAAO,CAKV"}
|