@nail00749/agent-gvozd 0.1.2 → 0.1.3
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/defaults/agents/devops.jsonc +918 -29
- package/defaults/agents/git.jsonc +1035 -36
- package/defaults/agents/verifier.jsonc +873 -20
- package/defaults/prompts/git.md +3 -1
- package/defaults/prompts/master.md +10 -1
- package/defaults/prompts/verifier.md +3 -1
- package/defaults/schema.json +11 -1
- package/dist/cli.js +467 -8
- package/dist/index.js +342 -258
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -2462,6 +2462,14 @@ function cleanRegex(source) {
|
|
|
2462
2462
|
const end = source.endsWith("$") ? source.length - 1 : source.length;
|
|
2463
2463
|
return source.slice(start, end);
|
|
2464
2464
|
}
|
|
2465
|
+
function floatSafeRemainder(val, step) {
|
|
2466
|
+
const ratio = val / step;
|
|
2467
|
+
const roundedRatio = Math.round(ratio);
|
|
2468
|
+
const tolerance = Number.EPSILON * Math.max(Math.abs(ratio), 1);
|
|
2469
|
+
if (Math.abs(ratio - roundedRatio) < tolerance)
|
|
2470
|
+
return 0;
|
|
2471
|
+
return ratio - roundedRatio;
|
|
2472
|
+
}
|
|
2465
2473
|
var EVALUATING = /* @__PURE__ */ Symbol("evaluating");
|
|
2466
2474
|
function defineLazy(object, key, getter) {
|
|
2467
2475
|
let value = undefined;
|
|
@@ -3020,6 +3028,7 @@ var string = (params) => {
|
|
|
3020
3028
|
const regex = params ? `[\\s\\S]{${params?.minimum ?? 0},${params?.maximum ?? ""}}` : `[\\s\\S]*`;
|
|
3021
3029
|
return new RegExp(`^${regex}$`);
|
|
3022
3030
|
};
|
|
3031
|
+
var integer = /^-?\d+$/;
|
|
3023
3032
|
var number = /^-?\d+(?:\.\d+)?$/;
|
|
3024
3033
|
var boolean = /^(?:true|false)$/i;
|
|
3025
3034
|
var lowercase = /^[^A-Z]*$/;
|
|
@@ -3032,6 +3041,168 @@ var $ZodCheck = /* @__PURE__ */ $constructor("$ZodCheck", (inst, def) => {
|
|
|
3032
3041
|
inst._zod.def = def;
|
|
3033
3042
|
(_a = inst._zod).onattach ?? (_a.onattach = []);
|
|
3034
3043
|
});
|
|
3044
|
+
var numericOriginMap = {
|
|
3045
|
+
number: "number",
|
|
3046
|
+
bigint: "bigint",
|
|
3047
|
+
object: "date"
|
|
3048
|
+
};
|
|
3049
|
+
var $ZodCheckLessThan = /* @__PURE__ */ $constructor("$ZodCheckLessThan", (inst, def) => {
|
|
3050
|
+
$ZodCheck.init(inst, def);
|
|
3051
|
+
const origin = numericOriginMap[typeof def.value];
|
|
3052
|
+
inst._zod.onattach.push((inst) => {
|
|
3053
|
+
const bag = inst._zod.bag;
|
|
3054
|
+
const curr = (def.inclusive ? bag.maximum : bag.exclusiveMaximum) ?? Number.POSITIVE_INFINITY;
|
|
3055
|
+
if (def.value < curr) {
|
|
3056
|
+
if (def.inclusive)
|
|
3057
|
+
bag.maximum = def.value;
|
|
3058
|
+
else
|
|
3059
|
+
bag.exclusiveMaximum = def.value;
|
|
3060
|
+
}
|
|
3061
|
+
});
|
|
3062
|
+
inst._zod.check = (payload) => {
|
|
3063
|
+
if (def.inclusive ? payload.value <= def.value : payload.value < def.value) {
|
|
3064
|
+
return;
|
|
3065
|
+
}
|
|
3066
|
+
payload.issues.push({
|
|
3067
|
+
origin,
|
|
3068
|
+
code: "too_big",
|
|
3069
|
+
maximum: typeof def.value === "object" ? def.value.getTime() : def.value,
|
|
3070
|
+
input: payload.value,
|
|
3071
|
+
inclusive: def.inclusive,
|
|
3072
|
+
inst,
|
|
3073
|
+
continue: !def.abort
|
|
3074
|
+
});
|
|
3075
|
+
};
|
|
3076
|
+
});
|
|
3077
|
+
var $ZodCheckGreaterThan = /* @__PURE__ */ $constructor("$ZodCheckGreaterThan", (inst, def) => {
|
|
3078
|
+
$ZodCheck.init(inst, def);
|
|
3079
|
+
const origin = numericOriginMap[typeof def.value];
|
|
3080
|
+
inst._zod.onattach.push((inst) => {
|
|
3081
|
+
const bag = inst._zod.bag;
|
|
3082
|
+
const curr = (def.inclusive ? bag.minimum : bag.exclusiveMinimum) ?? Number.NEGATIVE_INFINITY;
|
|
3083
|
+
if (def.value > curr) {
|
|
3084
|
+
if (def.inclusive)
|
|
3085
|
+
bag.minimum = def.value;
|
|
3086
|
+
else
|
|
3087
|
+
bag.exclusiveMinimum = def.value;
|
|
3088
|
+
}
|
|
3089
|
+
});
|
|
3090
|
+
inst._zod.check = (payload) => {
|
|
3091
|
+
if (def.inclusive ? payload.value >= def.value : payload.value > def.value) {
|
|
3092
|
+
return;
|
|
3093
|
+
}
|
|
3094
|
+
payload.issues.push({
|
|
3095
|
+
origin,
|
|
3096
|
+
code: "too_small",
|
|
3097
|
+
minimum: typeof def.value === "object" ? def.value.getTime() : def.value,
|
|
3098
|
+
input: payload.value,
|
|
3099
|
+
inclusive: def.inclusive,
|
|
3100
|
+
inst,
|
|
3101
|
+
continue: !def.abort
|
|
3102
|
+
});
|
|
3103
|
+
};
|
|
3104
|
+
});
|
|
3105
|
+
var $ZodCheckMultipleOf = /* @__PURE__ */ $constructor("$ZodCheckMultipleOf", (inst, def) => {
|
|
3106
|
+
$ZodCheck.init(inst, def);
|
|
3107
|
+
inst._zod.onattach.push((inst) => {
|
|
3108
|
+
var _a;
|
|
3109
|
+
(_a = inst._zod.bag).multipleOf ?? (_a.multipleOf = def.value);
|
|
3110
|
+
});
|
|
3111
|
+
inst._zod.check = (payload) => {
|
|
3112
|
+
if (typeof payload.value !== typeof def.value)
|
|
3113
|
+
throw new Error("Cannot mix number and bigint in multiple_of check.");
|
|
3114
|
+
const isMultiple = typeof payload.value === "bigint" ? payload.value % def.value === BigInt(0) : floatSafeRemainder(payload.value, def.value) === 0;
|
|
3115
|
+
if (isMultiple)
|
|
3116
|
+
return;
|
|
3117
|
+
payload.issues.push({
|
|
3118
|
+
origin: typeof payload.value,
|
|
3119
|
+
code: "not_multiple_of",
|
|
3120
|
+
divisor: def.value,
|
|
3121
|
+
input: payload.value,
|
|
3122
|
+
inst,
|
|
3123
|
+
continue: !def.abort
|
|
3124
|
+
});
|
|
3125
|
+
};
|
|
3126
|
+
});
|
|
3127
|
+
var $ZodCheckNumberFormat = /* @__PURE__ */ $constructor("$ZodCheckNumberFormat", (inst, def) => {
|
|
3128
|
+
$ZodCheck.init(inst, def);
|
|
3129
|
+
def.format = def.format || "float64";
|
|
3130
|
+
const isInt = def.format?.includes("int");
|
|
3131
|
+
const origin = isInt ? "int" : "number";
|
|
3132
|
+
const [minimum, maximum] = NUMBER_FORMAT_RANGES[def.format];
|
|
3133
|
+
inst._zod.onattach.push((inst) => {
|
|
3134
|
+
const bag = inst._zod.bag;
|
|
3135
|
+
bag.format = def.format;
|
|
3136
|
+
bag.minimum = minimum;
|
|
3137
|
+
bag.maximum = maximum;
|
|
3138
|
+
if (isInt)
|
|
3139
|
+
bag.pattern = integer;
|
|
3140
|
+
});
|
|
3141
|
+
inst._zod.check = (payload) => {
|
|
3142
|
+
const input = payload.value;
|
|
3143
|
+
if (isInt) {
|
|
3144
|
+
if (!Number.isInteger(input)) {
|
|
3145
|
+
payload.issues.push({
|
|
3146
|
+
expected: origin,
|
|
3147
|
+
format: def.format,
|
|
3148
|
+
code: "invalid_type",
|
|
3149
|
+
continue: false,
|
|
3150
|
+
input,
|
|
3151
|
+
inst
|
|
3152
|
+
});
|
|
3153
|
+
return;
|
|
3154
|
+
}
|
|
3155
|
+
if (!Number.isSafeInteger(input)) {
|
|
3156
|
+
if (input > 0) {
|
|
3157
|
+
payload.issues.push({
|
|
3158
|
+
input,
|
|
3159
|
+
code: "too_big",
|
|
3160
|
+
maximum: Number.MAX_SAFE_INTEGER,
|
|
3161
|
+
note: "Integers must be within the safe integer range.",
|
|
3162
|
+
inst,
|
|
3163
|
+
origin,
|
|
3164
|
+
inclusive: true,
|
|
3165
|
+
continue: !def.abort
|
|
3166
|
+
});
|
|
3167
|
+
} else {
|
|
3168
|
+
payload.issues.push({
|
|
3169
|
+
input,
|
|
3170
|
+
code: "too_small",
|
|
3171
|
+
minimum: Number.MIN_SAFE_INTEGER,
|
|
3172
|
+
note: "Integers must be within the safe integer range.",
|
|
3173
|
+
inst,
|
|
3174
|
+
origin,
|
|
3175
|
+
inclusive: true,
|
|
3176
|
+
continue: !def.abort
|
|
3177
|
+
});
|
|
3178
|
+
}
|
|
3179
|
+
return;
|
|
3180
|
+
}
|
|
3181
|
+
}
|
|
3182
|
+
if (input < minimum) {
|
|
3183
|
+
payload.issues.push({
|
|
3184
|
+
origin: "number",
|
|
3185
|
+
input,
|
|
3186
|
+
code: "too_small",
|
|
3187
|
+
minimum,
|
|
3188
|
+
inclusive: true,
|
|
3189
|
+
inst,
|
|
3190
|
+
continue: !def.abort
|
|
3191
|
+
});
|
|
3192
|
+
}
|
|
3193
|
+
if (input > maximum) {
|
|
3194
|
+
payload.issues.push({
|
|
3195
|
+
origin: "number",
|
|
3196
|
+
input,
|
|
3197
|
+
code: "too_big",
|
|
3198
|
+
maximum,
|
|
3199
|
+
inclusive: true,
|
|
3200
|
+
inst,
|
|
3201
|
+
continue: !def.abort
|
|
3202
|
+
});
|
|
3203
|
+
}
|
|
3204
|
+
};
|
|
3205
|
+
});
|
|
3035
3206
|
var $ZodCheckMaxLength = /* @__PURE__ */ $constructor("$ZodCheckMaxLength", (inst, def) => {
|
|
3036
3207
|
var _a;
|
|
3037
3208
|
$ZodCheck.init(inst, def);
|
|
@@ -3714,6 +3885,33 @@ var $ZodJWT = /* @__PURE__ */ $constructor("$ZodJWT", (inst, def) => {
|
|
|
3714
3885
|
});
|
|
3715
3886
|
};
|
|
3716
3887
|
});
|
|
3888
|
+
var $ZodNumber = /* @__PURE__ */ $constructor("$ZodNumber", (inst, def) => {
|
|
3889
|
+
$ZodType.init(inst, def);
|
|
3890
|
+
inst._zod.pattern = inst._zod.bag.pattern ?? number;
|
|
3891
|
+
inst._zod.parse = (payload, _ctx) => {
|
|
3892
|
+
if (def.coerce)
|
|
3893
|
+
try {
|
|
3894
|
+
payload.value = Number(payload.value);
|
|
3895
|
+
} catch (_) {}
|
|
3896
|
+
const input = payload.value;
|
|
3897
|
+
if (typeof input === "number" && !Number.isNaN(input) && Number.isFinite(input)) {
|
|
3898
|
+
return payload;
|
|
3899
|
+
}
|
|
3900
|
+
const received = typeof input === "number" ? Number.isNaN(input) ? "NaN" : !Number.isFinite(input) ? "Infinity" : undefined : undefined;
|
|
3901
|
+
payload.issues.push({
|
|
3902
|
+
expected: "number",
|
|
3903
|
+
code: "invalid_type",
|
|
3904
|
+
input,
|
|
3905
|
+
inst,
|
|
3906
|
+
...received ? { received } : {}
|
|
3907
|
+
});
|
|
3908
|
+
return payload;
|
|
3909
|
+
};
|
|
3910
|
+
});
|
|
3911
|
+
var $ZodNumberFormat = /* @__PURE__ */ $constructor("$ZodNumberFormat", (inst, def) => {
|
|
3912
|
+
$ZodCheckNumberFormat.init(inst, def);
|
|
3913
|
+
$ZodNumber.init(inst, def);
|
|
3914
|
+
});
|
|
3717
3915
|
var $ZodBoolean = /* @__PURE__ */ $constructor("$ZodBoolean", (inst, def) => {
|
|
3718
3916
|
$ZodType.init(inst, def);
|
|
3719
3917
|
inst._zod.pattern = boolean;
|
|
@@ -4928,6 +5126,22 @@ function _isoDuration(Class, params) {
|
|
|
4928
5126
|
...normalizeParams(params)
|
|
4929
5127
|
});
|
|
4930
5128
|
}
|
|
5129
|
+
function _number(Class, params) {
|
|
5130
|
+
return new Class({
|
|
5131
|
+
type: "number",
|
|
5132
|
+
checks: [],
|
|
5133
|
+
...normalizeParams(params)
|
|
5134
|
+
});
|
|
5135
|
+
}
|
|
5136
|
+
function _int(Class, params) {
|
|
5137
|
+
return new Class({
|
|
5138
|
+
type: "number",
|
|
5139
|
+
check: "number_format",
|
|
5140
|
+
abort: false,
|
|
5141
|
+
format: "safeint",
|
|
5142
|
+
...normalizeParams(params)
|
|
5143
|
+
});
|
|
5144
|
+
}
|
|
4931
5145
|
function _boolean(Class, params) {
|
|
4932
5146
|
return new Class({
|
|
4933
5147
|
type: "boolean",
|
|
@@ -4945,6 +5159,45 @@ function _never(Class, params) {
|
|
|
4945
5159
|
...normalizeParams(params)
|
|
4946
5160
|
});
|
|
4947
5161
|
}
|
|
5162
|
+
function _lt(value, params) {
|
|
5163
|
+
return new $ZodCheckLessThan({
|
|
5164
|
+
check: "less_than",
|
|
5165
|
+
...normalizeParams(params),
|
|
5166
|
+
value,
|
|
5167
|
+
inclusive: false
|
|
5168
|
+
});
|
|
5169
|
+
}
|
|
5170
|
+
function _lte(value, params) {
|
|
5171
|
+
return new $ZodCheckLessThan({
|
|
5172
|
+
check: "less_than",
|
|
5173
|
+
...normalizeParams(params),
|
|
5174
|
+
value,
|
|
5175
|
+
inclusive: true
|
|
5176
|
+
});
|
|
5177
|
+
}
|
|
5178
|
+
function _gt(value, params) {
|
|
5179
|
+
return new $ZodCheckGreaterThan({
|
|
5180
|
+
check: "greater_than",
|
|
5181
|
+
...normalizeParams(params),
|
|
5182
|
+
value,
|
|
5183
|
+
inclusive: false
|
|
5184
|
+
});
|
|
5185
|
+
}
|
|
5186
|
+
function _gte(value, params) {
|
|
5187
|
+
return new $ZodCheckGreaterThan({
|
|
5188
|
+
check: "greater_than",
|
|
5189
|
+
...normalizeParams(params),
|
|
5190
|
+
value,
|
|
5191
|
+
inclusive: true
|
|
5192
|
+
});
|
|
5193
|
+
}
|
|
5194
|
+
function _multipleOf(value, params) {
|
|
5195
|
+
return new $ZodCheckMultipleOf({
|
|
5196
|
+
check: "multiple_of",
|
|
5197
|
+
...normalizeParams(params),
|
|
5198
|
+
value
|
|
5199
|
+
});
|
|
5200
|
+
}
|
|
4948
5201
|
function _maxLength(maximum, params) {
|
|
4949
5202
|
const ch = new $ZodCheckMaxLength({
|
|
4950
5203
|
check: "max_length",
|
|
@@ -5470,6 +5723,39 @@ var stringProcessor = (schema, ctx, _json, _params) => {
|
|
|
5470
5723
|
}
|
|
5471
5724
|
}
|
|
5472
5725
|
};
|
|
5726
|
+
var numberProcessor = (schema, ctx, _json, _params) => {
|
|
5727
|
+
const json = _json;
|
|
5728
|
+
const { minimum, maximum, format, multipleOf, exclusiveMaximum, exclusiveMinimum } = schema._zod.bag;
|
|
5729
|
+
if (typeof format === "string" && format.includes("int"))
|
|
5730
|
+
json.type = "integer";
|
|
5731
|
+
else
|
|
5732
|
+
json.type = "number";
|
|
5733
|
+
const exMin = typeof exclusiveMinimum === "number" && exclusiveMinimum >= (minimum ?? Number.NEGATIVE_INFINITY);
|
|
5734
|
+
const exMax = typeof exclusiveMaximum === "number" && exclusiveMaximum <= (maximum ?? Number.POSITIVE_INFINITY);
|
|
5735
|
+
const legacy = ctx.target === "draft-04" || ctx.target === "openapi-3.0";
|
|
5736
|
+
if (exMin) {
|
|
5737
|
+
if (legacy) {
|
|
5738
|
+
json.minimum = exclusiveMinimum;
|
|
5739
|
+
json.exclusiveMinimum = true;
|
|
5740
|
+
} else {
|
|
5741
|
+
json.exclusiveMinimum = exclusiveMinimum;
|
|
5742
|
+
}
|
|
5743
|
+
} else if (typeof minimum === "number") {
|
|
5744
|
+
json.minimum = minimum;
|
|
5745
|
+
}
|
|
5746
|
+
if (exMax) {
|
|
5747
|
+
if (legacy) {
|
|
5748
|
+
json.maximum = exclusiveMaximum;
|
|
5749
|
+
json.exclusiveMaximum = true;
|
|
5750
|
+
} else {
|
|
5751
|
+
json.exclusiveMaximum = exclusiveMaximum;
|
|
5752
|
+
}
|
|
5753
|
+
} else if (typeof maximum === "number") {
|
|
5754
|
+
json.maximum = maximum;
|
|
5755
|
+
}
|
|
5756
|
+
if (typeof multipleOf === "number")
|
|
5757
|
+
json.multipleOf = multipleOf;
|
|
5758
|
+
};
|
|
5473
5759
|
var booleanProcessor = (_schema, _ctx, json, _params) => {
|
|
5474
5760
|
json.type = "boolean";
|
|
5475
5761
|
};
|
|
@@ -6093,6 +6379,74 @@ var ZodJWT = /* @__PURE__ */ $constructor("ZodJWT", (inst, def) => {
|
|
|
6093
6379
|
$ZodJWT.init(inst, def);
|
|
6094
6380
|
ZodStringFormat.init(inst, def);
|
|
6095
6381
|
});
|
|
6382
|
+
var ZodNumber = /* @__PURE__ */ $constructor("ZodNumber", (inst, def) => {
|
|
6383
|
+
$ZodNumber.init(inst, def);
|
|
6384
|
+
ZodType.init(inst, def);
|
|
6385
|
+
inst._zod.processJSONSchema = (ctx, json, params) => numberProcessor(inst, ctx, json, params);
|
|
6386
|
+
_installLazyMethods(inst, "ZodNumber", {
|
|
6387
|
+
gt(value, params) {
|
|
6388
|
+
return this.check(_gt(value, params));
|
|
6389
|
+
},
|
|
6390
|
+
gte(value, params) {
|
|
6391
|
+
return this.check(_gte(value, params));
|
|
6392
|
+
},
|
|
6393
|
+
min(value, params) {
|
|
6394
|
+
return this.check(_gte(value, params));
|
|
6395
|
+
},
|
|
6396
|
+
lt(value, params) {
|
|
6397
|
+
return this.check(_lt(value, params));
|
|
6398
|
+
},
|
|
6399
|
+
lte(value, params) {
|
|
6400
|
+
return this.check(_lte(value, params));
|
|
6401
|
+
},
|
|
6402
|
+
max(value, params) {
|
|
6403
|
+
return this.check(_lte(value, params));
|
|
6404
|
+
},
|
|
6405
|
+
int(params) {
|
|
6406
|
+
return this.check(int(params));
|
|
6407
|
+
},
|
|
6408
|
+
safe(params) {
|
|
6409
|
+
return this.check(int(params));
|
|
6410
|
+
},
|
|
6411
|
+
positive(params) {
|
|
6412
|
+
return this.check(_gt(0, params));
|
|
6413
|
+
},
|
|
6414
|
+
nonnegative(params) {
|
|
6415
|
+
return this.check(_gte(0, params));
|
|
6416
|
+
},
|
|
6417
|
+
negative(params) {
|
|
6418
|
+
return this.check(_lt(0, params));
|
|
6419
|
+
},
|
|
6420
|
+
nonpositive(params) {
|
|
6421
|
+
return this.check(_lte(0, params));
|
|
6422
|
+
},
|
|
6423
|
+
multipleOf(value, params) {
|
|
6424
|
+
return this.check(_multipleOf(value, params));
|
|
6425
|
+
},
|
|
6426
|
+
step(value, params) {
|
|
6427
|
+
return this.check(_multipleOf(value, params));
|
|
6428
|
+
},
|
|
6429
|
+
finite() {
|
|
6430
|
+
return this;
|
|
6431
|
+
}
|
|
6432
|
+
});
|
|
6433
|
+
const bag = inst._zod.bag;
|
|
6434
|
+
inst.minValue = Math.max(bag.minimum ?? Number.NEGATIVE_INFINITY, bag.exclusiveMinimum ?? Number.NEGATIVE_INFINITY) ?? null;
|
|
6435
|
+
inst.maxValue = Math.min(bag.maximum ?? Number.POSITIVE_INFINITY, bag.exclusiveMaximum ?? Number.POSITIVE_INFINITY) ?? null;
|
|
6436
|
+
inst.isInt = (bag.format ?? "").includes("int") || Number.isSafeInteger(bag.multipleOf ?? 0.5);
|
|
6437
|
+
inst.isFinite = true;
|
|
6438
|
+
inst.format = bag.format ?? null;
|
|
6439
|
+
});
|
|
6440
|
+
function number2(params) {
|
|
6441
|
+
return _number(ZodNumber, params);
|
|
6442
|
+
}
|
|
6443
|
+
var ZodNumberFormat = /* @__PURE__ */ $constructor("ZodNumberFormat", (inst, def) => {
|
|
6444
|
+
$ZodNumberFormat.init(inst, def);
|
|
6445
|
+
ZodNumber.init(inst, def);
|
|
6446
|
+
});
|
|
6447
|
+
function int(params) {
|
|
6448
|
+
return _int(ZodNumberFormat, params);
|
|
6449
|
+
}
|
|
6096
6450
|
var ZodBoolean = /* @__PURE__ */ $constructor("ZodBoolean", (inst, def) => {
|
|
6097
6451
|
$ZodBoolean.init(inst, def);
|
|
6098
6452
|
ZodType.init(inst, def);
|
|
@@ -6633,6 +6987,10 @@ function computeProjectTrustToken(projectDirectory) {
|
|
|
6633
6987
|
return `sha256:${hash.digest("hex")}`;
|
|
6634
6988
|
}
|
|
6635
6989
|
|
|
6990
|
+
// src/file-leases.ts
|
|
6991
|
+
var DEFAULT_RESERVATION_TTL_MS = 5 * 60 * 1000;
|
|
6992
|
+
var DEFAULT_ACTIVE_TTL_MS = 30 * 60 * 1000;
|
|
6993
|
+
|
|
6636
6994
|
// src/config.ts
|
|
6637
6995
|
var permissionSchema = object({
|
|
6638
6996
|
action: string2().min(1),
|
|
@@ -6653,11 +7011,16 @@ var agentPatchSchema = object({
|
|
|
6653
7011
|
fileLease: fileLeaseRoleSchema.optional(),
|
|
6654
7012
|
disabled: boolean2().optional()
|
|
6655
7013
|
}).strict();
|
|
7014
|
+
var leaseSchema = object({
|
|
7015
|
+
reservationTtlMinutes: number2().int().positive().max(24 * 60).optional(),
|
|
7016
|
+
activeTtlMinutes: number2().int().positive().max(24 * 60).optional()
|
|
7017
|
+
}).strict();
|
|
6656
7018
|
var rootPatchSchema = object({
|
|
6657
7019
|
$schema: string2().min(1).optional(),
|
|
6658
7020
|
defaultAgent: agentIdSchema.optional(),
|
|
6659
7021
|
agentsDirectory: string2().min(1).optional(),
|
|
6660
|
-
agents: record(agentIdSchema, agentPatchSchema).optional()
|
|
7022
|
+
agents: record(agentIdSchema, agentPatchSchema).optional(),
|
|
7023
|
+
lease: leaseSchema.optional()
|
|
6661
7024
|
}).strict();
|
|
6662
7025
|
var resolvedAgentSchema = agentPatchSchema.extend({
|
|
6663
7026
|
description: string2().min(1),
|
|
@@ -6721,7 +7084,7 @@ function loadLayer(directory, rootFileName, required, projectPolicy) {
|
|
|
6721
7084
|
}
|
|
6722
7085
|
const root = rootPatchSchema.parse(readJsonc2(rootPath));
|
|
6723
7086
|
if (projectPolicy && !projectPolicy.trusted) {
|
|
6724
|
-
const restricted = ["defaultAgent", "agentsDirectory"].filter((field) => Object.prototype.hasOwnProperty.call(root, field));
|
|
7087
|
+
const restricted = ["defaultAgent", "agentsDirectory", "lease"].filter((field) => Object.prototype.hasOwnProperty.call(root, field));
|
|
6725
7088
|
if (restricted.length > 0)
|
|
6726
7089
|
throw new Error(`Untrusted project config ${rootPath} cannot override ${restricted.join(", ")}`);
|
|
6727
7090
|
}
|
|
@@ -6754,6 +7117,7 @@ function loadLayer(directory, rootFileName, required, projectPolicy) {
|
|
|
6754
7117
|
return {
|
|
6755
7118
|
defaultAgent: root.defaultAgent,
|
|
6756
7119
|
agents,
|
|
7120
|
+
lease: root.lease,
|
|
6757
7121
|
sources: [rootPath]
|
|
6758
7122
|
};
|
|
6759
7123
|
}
|
|
@@ -6815,6 +7179,20 @@ function loadConfig(projectDirectory, options = {}) {
|
|
|
6815
7179
|
throw new Error("Project configuration changed while its trust token was being validated; review it and compute a new token");
|
|
6816
7180
|
}
|
|
6817
7181
|
const layers = [...baseLayers, ...projectLayer ? [projectLayer] : []];
|
|
7182
|
+
const lease = {
|
|
7183
|
+
reservationTtlMs: DEFAULT_RESERVATION_TTL_MS,
|
|
7184
|
+
activeTtlMs: DEFAULT_ACTIVE_TTL_MS
|
|
7185
|
+
};
|
|
7186
|
+
for (const layer of layers) {
|
|
7187
|
+
if (!layer.lease)
|
|
7188
|
+
continue;
|
|
7189
|
+
if (layer.lease.reservationTtlMinutes !== undefined) {
|
|
7190
|
+
lease.reservationTtlMs = layer.lease.reservationTtlMinutes * 60000;
|
|
7191
|
+
}
|
|
7192
|
+
if (layer.lease.activeTtlMinutes !== undefined) {
|
|
7193
|
+
lease.activeTtlMs = layer.lease.activeTtlMinutes * 60000;
|
|
7194
|
+
}
|
|
7195
|
+
}
|
|
6818
7196
|
let defaultAgent;
|
|
6819
7197
|
const agents = {};
|
|
6820
7198
|
for (const layer of layers) {
|
|
@@ -6841,6 +7219,7 @@ function loadConfig(projectDirectory, options = {}) {
|
|
|
6841
7219
|
return {
|
|
6842
7220
|
defaultAgent,
|
|
6843
7221
|
agents: resolvedAgents,
|
|
7222
|
+
lease,
|
|
6844
7223
|
packageRoot,
|
|
6845
7224
|
projectRoot,
|
|
6846
7225
|
projectConfigDirectory,
|
|
@@ -6853,6 +7232,69 @@ function loadConfig(projectDirectory, options = {}) {
|
|
|
6853
7232
|
import { existsSync as existsSync3, lstatSync as lstatSync3, readFileSync as readFileSync3, readdirSync as readdirSync3 } from "node:fs";
|
|
6854
7233
|
import { join as join4, resolve as resolve4 } from "node:path";
|
|
6855
7234
|
|
|
7235
|
+
// src/tool-permissions.ts
|
|
7236
|
+
function family(command, ...variants) {
|
|
7237
|
+
return [command, ...variants].map((entry) => ({
|
|
7238
|
+
exact: entry,
|
|
7239
|
+
wildcard: `${entry} *`
|
|
7240
|
+
}));
|
|
7241
|
+
}
|
|
7242
|
+
var INSPECTION_COMMANDS = [
|
|
7243
|
+
...family("pwd", "true", "test"),
|
|
7244
|
+
...family("cat", "head", "tail", "wc", "sort", "uniq"),
|
|
7245
|
+
...family("grep", "rg", "find", "diff", "cmp"),
|
|
7246
|
+
...family("ls", "du", "df", "stat", "file", "realpath", "basename", "dirname"),
|
|
7247
|
+
...family("shasum", "sha256sum", "md5sum"),
|
|
7248
|
+
...family("uname", "whoami", "hostname", "date", "printenv"),
|
|
7249
|
+
...family("which", "command -v"),
|
|
7250
|
+
...family("mktemp"),
|
|
7251
|
+
...family("tr", "cut", "paste", "column"),
|
|
7252
|
+
...family("node --version", "python3 --version", "python --version", "deno --version")
|
|
7253
|
+
];
|
|
7254
|
+
var TOOLCHAIN_COMMANDS = [
|
|
7255
|
+
...family("bun test", "bun run test", "bun --version"),
|
|
7256
|
+
...family("bun run typecheck", "bun run lint", "bun run build", "bun run check"),
|
|
7257
|
+
...family("tsc --noEmit", "npx tsc --noEmit"),
|
|
7258
|
+
...family("eslint", "biome check", "prettier --check"),
|
|
7259
|
+
...family("npm test", "npm run test", "npm run typecheck", "npm run lint", "npm run build"),
|
|
7260
|
+
...family("pnpm test", "pnpm run test", "pnpm run build"),
|
|
7261
|
+
...family("yarn test", "yarn build"),
|
|
7262
|
+
...family("vitest run", "jest", "playwright test"),
|
|
7263
|
+
...family("cargo check", "cargo test", "cargo build", "cargo clippy", "cargo fmt --check", "cargo --version"),
|
|
7264
|
+
...family("go build ./...", "go test ./...", "go vet ./...", "go version"),
|
|
7265
|
+
...family("pytest", "python3 -m pytest", "python -m pytest"),
|
|
7266
|
+
...family("ruff check", "mypy", "pyright"),
|
|
7267
|
+
...family("mvn test", "mvn verify", "gradle test", "gradle check", "./gradlew test", "./gradlew check"),
|
|
7268
|
+
...family("make test", "make check", "make build", "make --version"),
|
|
7269
|
+
...family("just --list")
|
|
7270
|
+
];
|
|
7271
|
+
var GIT_READONLY_COMMANDS = [
|
|
7272
|
+
...family("git status", "git status --short", "git status --short --branch", "git status --porcelain", "git status --porcelain=v1 --branch"),
|
|
7273
|
+
...family("git diff", "git diff --stat", "git diff --cached", "git diff --check"),
|
|
7274
|
+
...family("git log", "git show", "git reflog"),
|
|
7275
|
+
...family("git rev-parse", "git rev-list", "git show-ref", "git cat-file", "git symbolic-ref"),
|
|
7276
|
+
...family("git ls-files", "git ls-remote", "git grep"),
|
|
7277
|
+
...family("git branch", "git remote", "git stash list", "git tag", "git describe"),
|
|
7278
|
+
...family("git config --get", "git config --get-regexp"),
|
|
7279
|
+
...family("git -C")
|
|
7280
|
+
];
|
|
7281
|
+
var GIT_MUTATING_COMMANDS = [
|
|
7282
|
+
...family("git add", "git rm --cached"),
|
|
7283
|
+
...family("git commit", "git merge --ff-only", "git merge --no-ff"),
|
|
7284
|
+
...family("git push", "git fetch", "git pull --ff-only"),
|
|
7285
|
+
...family("git tag -a", "git tag -v", "git tag --list"),
|
|
7286
|
+
...family("git stash", "git cherry-pick", "git revert"),
|
|
7287
|
+
...family("git switch", "git checkout -b", "git worktree list", "git worktree add")
|
|
7288
|
+
];
|
|
7289
|
+
var GIT_ENV_PREFIXES = ["GIT_OPTIONAL_LOCKS=0"];
|
|
7290
|
+
function withEnvPrefixes(rule, prefixes = GIT_ENV_PREFIXES) {
|
|
7291
|
+
return prefixes.map((prefix) => ({
|
|
7292
|
+
action: rule.action,
|
|
7293
|
+
resource: `${prefix} ${rule.resource}`,
|
|
7294
|
+
effect: rule.effect
|
|
7295
|
+
}));
|
|
7296
|
+
}
|
|
7297
|
+
|
|
6856
7298
|
// src/agent-permissions.ts
|
|
6857
7299
|
function normalizeMcpName(name) {
|
|
6858
7300
|
return name.replaceAll(/[^A-Za-z0-9_-]/g, "_");
|
|
@@ -6872,15 +7314,24 @@ function buildAgentPermissions(agent, mcpServers) {
|
|
|
6872
7314
|
});
|
|
6873
7315
|
result.push(...agent.permissions.filter((rule) => rule.action.startsWith(prefix)));
|
|
6874
7316
|
}
|
|
7317
|
+
for (const rule of agent.permissions) {
|
|
7318
|
+
if (rule.action !== "shell")
|
|
7319
|
+
continue;
|
|
7320
|
+
if (!/(^|\s|["'])git(?:$|\s)/.test(rule.resource))
|
|
7321
|
+
continue;
|
|
7322
|
+
if (rule.resource.startsWith("GIT_"))
|
|
7323
|
+
continue;
|
|
7324
|
+
result.push(...withEnvPrefixes(rule));
|
|
7325
|
+
}
|
|
6875
7326
|
return result;
|
|
6876
7327
|
}
|
|
6877
7328
|
|
|
6878
7329
|
// src/release-metadata.ts
|
|
6879
7330
|
var PACKAGE_NAME = "@nail00749/agent-gvozd";
|
|
6880
|
-
var PACKAGE_VERSION = "0.1.
|
|
7331
|
+
var PACKAGE_VERSION = "0.1.3";
|
|
6881
7332
|
var PACKAGE_SPEC = `${PACKAGE_NAME}@${PACKAGE_VERSION}`;
|
|
6882
7333
|
var SUPPORTED_OPENCODE_VERSION = "0.0.0-beta-19425";
|
|
6883
|
-
var CONFIG_SCHEMA_VERSION =
|
|
7334
|
+
var CONFIG_SCHEMA_VERSION = 2;
|
|
6884
7335
|
|
|
6885
7336
|
// src/constants.ts
|
|
6886
7337
|
var GENERATED_MARKER = "# Generated by agent-gvozd sync. Do not edit this file directly.";
|
|
@@ -6897,7 +7348,13 @@ function hasGeneratedPluginMarker(content) {
|
|
|
6897
7348
|
function hasGeneratedSchemaMarker(content) {
|
|
6898
7349
|
const errors = [];
|
|
6899
7350
|
const value = parse2(content, errors, { allowTrailingComma: true, disallowComments: false });
|
|
6900
|
-
|
|
7351
|
+
if (errors.length > 0 || value === null || typeof value !== "object" || Array.isArray(value)) {
|
|
7352
|
+
return false;
|
|
7353
|
+
}
|
|
7354
|
+
if (value.$comment !== GENERATED_PLUGIN_MARKER)
|
|
7355
|
+
return false;
|
|
7356
|
+
const version = value["x-agent-gvozd-schema-version"];
|
|
7357
|
+
return typeof version === "number" && Number.isSafeInteger(version) && version >= 1 && version <= CONFIG_SCHEMA_VERSION;
|
|
6901
7358
|
}
|
|
6902
7359
|
function stable(value) {
|
|
6903
7360
|
if (Array.isArray(value))
|
|
@@ -7363,7 +7820,7 @@ async function runDoctor(input) {
|
|
|
7363
7820
|
checks.push({ id: "runtime-agents", status: "fail", summary: `runtime agent check failed: ${redactDiagnostic(error)}`, remediation: `${input.client.executable} service restart` });
|
|
7364
7821
|
}
|
|
7365
7822
|
checks.push(config ? checkLegacy(config) : { id: "legacy-local", status: "warn", summary: "legacy duplicates could not be checked" });
|
|
7366
|
-
return { schemaVersion:
|
|
7823
|
+
return { schemaVersion: CONFIG_SCHEMA_VERSION, status: aggregate(checks), checks };
|
|
7367
7824
|
}
|
|
7368
7825
|
function doctorExitCode(report) {
|
|
7369
7826
|
return report.status === "fail" ? 1 : 0;
|
|
@@ -7388,7 +7845,7 @@ function doctorOperationalFailure(error) {
|
|
|
7388
7845
|
summary: `OpenCode discovery failed: ${redactDiagnostic(error)}`,
|
|
7389
7846
|
remediation: `Install OpenCode ${SUPPORTED_OPENCODE_VERSION} and run gvozd doctor again`
|
|
7390
7847
|
}];
|
|
7391
|
-
return { schemaVersion:
|
|
7848
|
+
return { schemaVersion: CONFIG_SCHEMA_VERSION, status: "fail", checks };
|
|
7392
7849
|
}
|
|
7393
7850
|
|
|
7394
7851
|
// src/cli/setup.ts
|
|
@@ -7550,8 +8007,10 @@ function assertWriteable(path, label) {
|
|
|
7550
8007
|
function legacySchemaMatches(source, generated) {
|
|
7551
8008
|
try {
|
|
7552
8009
|
const previous = JSON.parse(source);
|
|
7553
|
-
|
|
8010
|
+
const previousVersion = previous["x-agent-gvozd-schema-version"];
|
|
8011
|
+
if (previous.$comment !== undefined || previousVersion !== undefined && previousVersion !== CONFIG_SCHEMA_VERSION) {
|
|
7554
8012
|
return false;
|
|
8013
|
+
}
|
|
7555
8014
|
if (previous.$id !== "https://example.invalid/agent-gvozd.schema.json")
|
|
7556
8015
|
return false;
|
|
7557
8016
|
return generated ? isEquivalentLegacySchema(source, generated) : true;
|