@rosthq/cli 0.7.72 → 0.7.73
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/dist/index.js +327 -42
- package/dist/index.js.map +4 -4
- package/dist/runner-serve.d.ts +1 -0
- package/dist/runner-serve.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -38281,10 +38281,10 @@ var CATALOG_ENTRIES = [
|
|
|
38281
38281
|
title: "Run a script (sandbox)",
|
|
38282
38282
|
provider: "rost",
|
|
38283
38283
|
description: "Call this to run a short program (shell/node/python) in an isolated, network-disabled microVM for pure computation \u2014 parsing, transforming, calculating, or validating data the agent already holds. The sandbox has NO credentials and NO network access; it cannot read files, call APIs, or reach the internet. Use it for compute, never to fetch or send data. Every run is metered and audited; availability is a per-account entitlement and each call is confirmed by default (arbitrary code execution).",
|
|
38284
|
-
// Compute-only
|
|
38285
|
-
//
|
|
38286
|
-
default_scope_tier: "
|
|
38287
|
-
scope_tiers: ["
|
|
38284
|
+
// Compute-only, but still arbitrary code execution. In the capability UI this
|
|
38285
|
+
// belongs to the action-capable "Read & act" posture, never read-only.
|
|
38286
|
+
default_scope_tier: "draft",
|
|
38287
|
+
scope_tiers: ["draft"],
|
|
38288
38288
|
// v1 injects ZERO credentials (secret grants are DER-1585) — never a vault ref.
|
|
38289
38289
|
credential_required: false,
|
|
38290
38290
|
// Conservative by default (invariant #10): arbitrary code execution routes to the
|
|
@@ -38410,10 +38410,20 @@ var CATALOG_ENTRIES = [
|
|
|
38410
38410
|
default_access_policy: "always_ask"
|
|
38411
38411
|
},
|
|
38412
38412
|
{
|
|
38413
|
-
id: "web.
|
|
38413
|
+
id: "web.search",
|
|
38414
38414
|
title: "Web research",
|
|
38415
38415
|
provider: "web",
|
|
38416
|
-
description: "Call this to
|
|
38416
|
+
description: "Call this to search public web sources with citations. Read-only; it uses the server-side Exa provider, never exposes provider keys, and escalates paid data sources or sensitive personal data.",
|
|
38417
|
+
default_scope_tier: "read",
|
|
38418
|
+
scope_tiers: ["read"],
|
|
38419
|
+
credential_required: false,
|
|
38420
|
+
default_access_policy: "always_allow"
|
|
38421
|
+
},
|
|
38422
|
+
{
|
|
38423
|
+
id: "web.fetch",
|
|
38424
|
+
title: "Read public web page",
|
|
38425
|
+
provider: "web",
|
|
38426
|
+
description: "Call this to fetch and extract text from one public HTTPS page. It validates DNS, redirects, content type, size, and private-network boundaries before reading.",
|
|
38417
38427
|
default_scope_tier: "read",
|
|
38418
38428
|
scope_tiers: ["read"],
|
|
38419
38429
|
credential_required: false,
|
|
@@ -38655,7 +38665,7 @@ function accessLevelForScope(scopeTier) {
|
|
|
38655
38665
|
}
|
|
38656
38666
|
function providerRequirementFor(entry) {
|
|
38657
38667
|
if (!entry.credential_required) {
|
|
38658
|
-
return entry.provider === "rost" ? "platform_managed" : "none";
|
|
38668
|
+
return entry.provider === "rost" || entry.provider === "web" ? "platform_managed" : "none";
|
|
38659
38669
|
}
|
|
38660
38670
|
return entry.id === "secret.broker" ? "vault_ref" : "connection";
|
|
38661
38671
|
}
|
|
@@ -38682,7 +38692,7 @@ function enrichCatalogEntry(entry) {
|
|
|
38682
38692
|
access_levels: accessLevels,
|
|
38683
38693
|
default_access_level: accessLevelForScope(entry.default_scope_tier),
|
|
38684
38694
|
provider_requirement: providerRequirementFor(entry),
|
|
38685
|
-
cost_class: entry.id === "script.run" || entry.id === "secret.broker" ? "metered_standard" : "included",
|
|
38695
|
+
cost_class: entry.id === "script.run" || entry.id === "secret.broker" ? "metered_standard" : entry.id === "web.search" || entry.id === "web.fetch" || entry.id === "browser.read" ? "metered_low" : "included",
|
|
38686
38696
|
lane_support: ["cloud", "runner", "mcp"],
|
|
38687
38697
|
trusted_required_metadata: trustedRequiredMetadataFor(entry)
|
|
38688
38698
|
};
|
|
@@ -39405,6 +39415,27 @@ var agentCreateFromTemplateOutputSchema = agentSetupStateSchema.extend({
|
|
|
39405
39415
|
occupancy_created: external_exports.boolean()
|
|
39406
39416
|
}).strict();
|
|
39407
39417
|
|
|
39418
|
+
// ../../packages/protocol/src/provider-costs.ts
|
|
39419
|
+
var providerCostKinds = ["managed_llm", "exa", "browser", "sandbox"];
|
|
39420
|
+
var providerCostKindSchema = external_exports.enum(providerCostKinds);
|
|
39421
|
+
var keySourceSchema = external_exports.enum(["rost_managed", "tenant_byok"]);
|
|
39422
|
+
var atSchema = external_exports.union([external_exports.date(), external_exports.string().datetime()]).optional();
|
|
39423
|
+
var providerCostEntrySchema = external_exports.object({
|
|
39424
|
+
kind: providerCostKindSchema,
|
|
39425
|
+
effectiveFrom: external_exports.string().datetime(),
|
|
39426
|
+
estimatedCents: external_exports.number().int().nonnegative(),
|
|
39427
|
+
provider: external_exports.string().min(1)
|
|
39428
|
+
}).strict();
|
|
39429
|
+
var PROVIDER_COST_REGISTRY = Object.freeze([
|
|
39430
|
+
{ kind: "exa", provider: "exa", effectiveFrom: "2026-07-11T00:00:00.000Z", estimatedCents: 30 },
|
|
39431
|
+
{ kind: "exa", provider: "exa", effectiveFrom: "2026-07-15T00:00:00.000Z", estimatedCents: 35 },
|
|
39432
|
+
{ kind: "browser", provider: "browser", effectiveFrom: "2026-07-11T00:00:00.000Z", estimatedCents: 60 },
|
|
39433
|
+
{ kind: "sandbox", provider: "sandbox", effectiveFrom: "2026-07-11T00:00:00.000Z", estimatedCents: 120 }
|
|
39434
|
+
]);
|
|
39435
|
+
for (const entry of PROVIDER_COST_REGISTRY) {
|
|
39436
|
+
providerCostEntrySchema.parse(entry);
|
|
39437
|
+
}
|
|
39438
|
+
|
|
39408
39439
|
// ../../packages/protocol/src/agent-builder.ts
|
|
39409
39440
|
var uuidSchema4 = external_exports.string().uuid();
|
|
39410
39441
|
var singleLineSchema = external_exports.string().trim().min(1).max(500).regex(/^[^\n\r]+$/, "Value must be a single line.");
|
|
@@ -39864,6 +39895,83 @@ var toolPolicyGetOutputSchema = external_exports.object({
|
|
|
39864
39895
|
tool_policy: storedTenantToolPolicySchema
|
|
39865
39896
|
}).strict();
|
|
39866
39897
|
|
|
39898
|
+
// ../../packages/protocol/src/web-research.ts
|
|
39899
|
+
var webResearchCitationSchema = external_exports.object({
|
|
39900
|
+
id: external_exports.string().min(1).max(80),
|
|
39901
|
+
url: external_exports.string().url(),
|
|
39902
|
+
title: external_exports.string().min(1).max(300)
|
|
39903
|
+
}).strict();
|
|
39904
|
+
var webSearchInputSchema = external_exports.object({
|
|
39905
|
+
query: external_exports.string().trim().min(1).max(500),
|
|
39906
|
+
max_results: external_exports.number().int().min(1).max(10).default(5),
|
|
39907
|
+
timeout_ms: external_exports.number().int().min(250).max(2e4).default(8e3)
|
|
39908
|
+
}).strict();
|
|
39909
|
+
var webSearchResultSchema = external_exports.object({
|
|
39910
|
+
citation_id: external_exports.string().min(1).max(80),
|
|
39911
|
+
title: external_exports.string().min(1).max(300),
|
|
39912
|
+
url: external_exports.string().url(),
|
|
39913
|
+
snippet: external_exports.string().min(1).max(1200),
|
|
39914
|
+
published_at: external_exports.string().datetime().nullable()
|
|
39915
|
+
}).strict();
|
|
39916
|
+
var webSearchOutputSchema = external_exports.object({
|
|
39917
|
+
ok: external_exports.literal(true),
|
|
39918
|
+
provider: external_exports.literal("exa"),
|
|
39919
|
+
query: external_exports.string().min(1).max(500),
|
|
39920
|
+
results: external_exports.array(webSearchResultSchema).max(10),
|
|
39921
|
+
citations: external_exports.array(webResearchCitationSchema).max(10),
|
|
39922
|
+
cost: external_exports.object({
|
|
39923
|
+
provider: external_exports.literal("exa"),
|
|
39924
|
+
cost_class: external_exports.literal("metered_low"),
|
|
39925
|
+
estimated_units: external_exports.number().nonnegative()
|
|
39926
|
+
}).strict()
|
|
39927
|
+
}).strict();
|
|
39928
|
+
var webFetchInputSchema = external_exports.object({
|
|
39929
|
+
url: external_exports.string().url().max(2048),
|
|
39930
|
+
timeout_ms: external_exports.number().int().min(250).max(2e4).default(8e3),
|
|
39931
|
+
max_bytes: external_exports.number().int().min(1024).max(1e6).default(25e4)
|
|
39932
|
+
}).strict();
|
|
39933
|
+
var webFetchOutputSchema = external_exports.object({
|
|
39934
|
+
ok: external_exports.literal(true),
|
|
39935
|
+
url: external_exports.string().url(),
|
|
39936
|
+
final_url: external_exports.string().url(),
|
|
39937
|
+
title: external_exports.string().max(300).nullable(),
|
|
39938
|
+
text: external_exports.string().max(12e4),
|
|
39939
|
+
content_type: external_exports.string().max(120),
|
|
39940
|
+
bytes: external_exports.number().int().nonnegative(),
|
|
39941
|
+
truncated: external_exports.boolean(),
|
|
39942
|
+
provenance: external_exports.object({
|
|
39943
|
+
fetched_at: external_exports.string().datetime(),
|
|
39944
|
+
redirect_count: external_exports.number().int().min(0).max(5),
|
|
39945
|
+
pinned_addresses: external_exports.array(external_exports.string().min(1)).min(1).max(6)
|
|
39946
|
+
}).strict()
|
|
39947
|
+
}).strict();
|
|
39948
|
+
var browserReadOperationSchema = external_exports.enum(["navigate", "inspect", "screenshot", "extract_text"]);
|
|
39949
|
+
var browserReadInputSchema = external_exports.object({
|
|
39950
|
+
url: external_exports.string().url().max(2048),
|
|
39951
|
+
operation: browserReadOperationSchema.default("inspect"),
|
|
39952
|
+
selector: external_exports.string().trim().min(1).max(240).optional(),
|
|
39953
|
+
timeout_ms: external_exports.number().int().min(250).max(2e4).default(8e3)
|
|
39954
|
+
}).strict();
|
|
39955
|
+
var browserReadOutputSchema = external_exports.object({
|
|
39956
|
+
ok: external_exports.literal(true),
|
|
39957
|
+
operation: browserReadOperationSchema,
|
|
39958
|
+
url: external_exports.string().url(),
|
|
39959
|
+
final_url: external_exports.string().url(),
|
|
39960
|
+
title: external_exports.string().max(300).nullable(),
|
|
39961
|
+
text: external_exports.string().max(6e4).optional(),
|
|
39962
|
+
screenshot_artifact: external_exports.object({
|
|
39963
|
+
artifact_id: external_exports.string().min(1).max(160),
|
|
39964
|
+
tenant_id: external_exports.string().min(1).max(120),
|
|
39965
|
+
mime_type: external_exports.literal("image/png"),
|
|
39966
|
+
bytes: external_exports.number().int().nonnegative()
|
|
39967
|
+
}).strict().optional(),
|
|
39968
|
+
provenance: external_exports.object({
|
|
39969
|
+
fetched_at: external_exports.string().datetime(),
|
|
39970
|
+
sandbox: external_exports.literal("ephemeral_read_only"),
|
|
39971
|
+
persistent_state: external_exports.literal(false)
|
|
39972
|
+
}).strict()
|
|
39973
|
+
}).strict();
|
|
39974
|
+
|
|
39867
39975
|
// ../../packages/protocol/src/agent-policy.ts
|
|
39868
39976
|
var AUTONOMOUS_RISK_LEVELS = ["low", "medium", "high", "critical"];
|
|
39869
39977
|
var autonomousRiskLevelSchema = external_exports.enum(AUTONOMOUS_RISK_LEVELS);
|
|
@@ -40587,6 +40695,54 @@ var charterSchema = charterPersistedObjectSchema.superRefine(refineAutonomousBou
|
|
|
40587
40695
|
var charterDocSchema = charterDocObjectSchema.superRefine(refineAutonomousBoundaries);
|
|
40588
40696
|
var charterDocEditsSchema = charterDocObjectSchema.omit({ payload_version: true }).partial().strict();
|
|
40589
40697
|
|
|
40698
|
+
// ../../packages/protocol/src/trusted-budget.ts
|
|
40699
|
+
var TRUSTED_BUDGET_FORMULA_VERSION = "trusted-budget.v1";
|
|
40700
|
+
var MODEL_TOKEN_PROXY = Object.freeze({
|
|
40701
|
+
inputTokens: 12e3,
|
|
40702
|
+
outputTokens: 3e3
|
|
40703
|
+
});
|
|
40704
|
+
var LANE_MULTIPLIERS = Object.freeze({
|
|
40705
|
+
cloud: 1,
|
|
40706
|
+
runner: 1.1,
|
|
40707
|
+
mcp_session: 1.2
|
|
40708
|
+
});
|
|
40709
|
+
var CADENCE_MULTIPLIERS = Object.freeze({
|
|
40710
|
+
daily: 0.8,
|
|
40711
|
+
weekly: 1,
|
|
40712
|
+
monthly: 1.25,
|
|
40713
|
+
quarterly: 1.5
|
|
40714
|
+
});
|
|
40715
|
+
var CADENCE_BASE_RESERVES = Object.freeze({
|
|
40716
|
+
daily: 25,
|
|
40717
|
+
weekly: 50,
|
|
40718
|
+
monthly: 100,
|
|
40719
|
+
quarterly: 200
|
|
40720
|
+
});
|
|
40721
|
+
var TOOL_COST_HINT_CENTS = Object.freeze({
|
|
40722
|
+
included: 0,
|
|
40723
|
+
metered_low: 25,
|
|
40724
|
+
metered_standard: 100,
|
|
40725
|
+
metered_high: 250
|
|
40726
|
+
});
|
|
40727
|
+
var trustedBudgetCharterBudgetSchema = external_exports.object({
|
|
40728
|
+
monthly_usd: external_exports.number().nonnegative().nullable(),
|
|
40729
|
+
approval_required_over_usd: external_exports.number().nonnegative().nullable()
|
|
40730
|
+
}).strict();
|
|
40731
|
+
var trustedBudgetInputSchema = external_exports.object({
|
|
40732
|
+
lane: external_exports.enum(["cloud", "runner", "mcp_session"]),
|
|
40733
|
+
model: external_exports.string().trim().min(1).max(120),
|
|
40734
|
+
cadence: external_exports.enum(["daily", "weekly", "monthly", "quarterly"]),
|
|
40735
|
+
expected_turns: external_exports.number().int().positive().max(1e4),
|
|
40736
|
+
tool_cost_hints: external_exports.array(external_exports.string().trim().min(1).max(120)).default([]),
|
|
40737
|
+
charter_budget: trustedBudgetCharterBudgetSchema.optional()
|
|
40738
|
+
}).strict();
|
|
40739
|
+
var trustedBudgetSuggestionSchema = external_exports.object({
|
|
40740
|
+
budget_cents: external_exports.number().int().nonnegative(),
|
|
40741
|
+
money_authority_cents: external_exports.number().int().nonnegative(),
|
|
40742
|
+
assumptions: external_exports.array(external_exports.string().min(1)).min(1),
|
|
40743
|
+
formula_version: external_exports.literal(TRUSTED_BUDGET_FORMULA_VERSION)
|
|
40744
|
+
}).strict();
|
|
40745
|
+
|
|
40590
40746
|
// ../../packages/protocol/src/eos-intelligence.ts
|
|
40591
40747
|
var uuid3 = external_exports.string().uuid();
|
|
40592
40748
|
var frictionSeveritySchema = external_exports.enum(["low", "med", "high", "critical"]);
|
|
@@ -43075,6 +43231,101 @@ var errorLogSupersedeOutputSchema = external_exports.object({
|
|
|
43075
43231
|
resolved_at: isoDateTime3
|
|
43076
43232
|
}).strict();
|
|
43077
43233
|
|
|
43234
|
+
// ../../packages/protocol/src/working-files.ts
|
|
43235
|
+
var WORKING_FILE_MAX_PATH_CHARS = 512;
|
|
43236
|
+
var WORKING_FILE_MAX_CONTENT_CHARS = 16384;
|
|
43237
|
+
var isoDateTime4 = external_exports.string().datetime({ offset: true });
|
|
43238
|
+
var workingFileContentTypeSchema = external_exports.enum([
|
|
43239
|
+
"text/plain",
|
|
43240
|
+
"text/markdown",
|
|
43241
|
+
"application/json",
|
|
43242
|
+
"text/csv",
|
|
43243
|
+
"text/yaml",
|
|
43244
|
+
"application/yaml",
|
|
43245
|
+
"text/x-typescript",
|
|
43246
|
+
"text/typescript",
|
|
43247
|
+
"text/javascript",
|
|
43248
|
+
"application/javascript"
|
|
43249
|
+
]);
|
|
43250
|
+
var workingFileStateSchema = external_exports.enum(["ephemeral", "published"]);
|
|
43251
|
+
var workingFileRetentionClassSchema = external_exports.enum(["ephemeral_7d", "published_90d"]);
|
|
43252
|
+
function normalizeWorkingFilePath(value) {
|
|
43253
|
+
return value.trim().replace(/\\/g, "/");
|
|
43254
|
+
}
|
|
43255
|
+
function isSafeWorkingFilePath(value) {
|
|
43256
|
+
if (value.includes("\\")) {
|
|
43257
|
+
return false;
|
|
43258
|
+
}
|
|
43259
|
+
const normalized = normalizeWorkingFilePath(value);
|
|
43260
|
+
if (normalized.length === 0 || normalized.length > WORKING_FILE_MAX_PATH_CHARS) {
|
|
43261
|
+
return false;
|
|
43262
|
+
}
|
|
43263
|
+
if (normalized.startsWith("/") || normalized.startsWith("./") || normalized.startsWith("../")) {
|
|
43264
|
+
return false;
|
|
43265
|
+
}
|
|
43266
|
+
if (normalized.includes("\0") || normalized.includes("//")) {
|
|
43267
|
+
return false;
|
|
43268
|
+
}
|
|
43269
|
+
const segments = normalized.split("/");
|
|
43270
|
+
return segments.every((segment) => segment.length > 0 && segment !== "." && segment !== "..");
|
|
43271
|
+
}
|
|
43272
|
+
var workingFilePathSchema = external_exports.string().trim().min(1).max(WORKING_FILE_MAX_PATH_CHARS).refine(isSafeWorkingFilePath, "Working file paths must be tenant-local relative paths without traversal segments");
|
|
43273
|
+
var workingFileCreateInputSchema = external_exports.object({
|
|
43274
|
+
path: workingFilePathSchema,
|
|
43275
|
+
content_type: workingFileContentTypeSchema,
|
|
43276
|
+
content: external_exports.string().min(1).max(WORKING_FILE_MAX_CONTENT_CHARS)
|
|
43277
|
+
}).strict();
|
|
43278
|
+
var workingFileReadInputSchema = external_exports.object({
|
|
43279
|
+
path: workingFilePathSchema
|
|
43280
|
+
}).strict();
|
|
43281
|
+
var workingFileListInputSchema = external_exports.object({
|
|
43282
|
+
state: workingFileStateSchema.optional()
|
|
43283
|
+
}).strict();
|
|
43284
|
+
var workingFilePublishInputSchema = external_exports.object({
|
|
43285
|
+
path: workingFilePathSchema
|
|
43286
|
+
}).strict();
|
|
43287
|
+
var workingFilesReadToolInputSchema = external_exports.discriminatedUnion("operation", [
|
|
43288
|
+
external_exports.object({
|
|
43289
|
+
operation: external_exports.literal("read"),
|
|
43290
|
+
path: workingFilePathSchema
|
|
43291
|
+
}).strict(),
|
|
43292
|
+
external_exports.object({
|
|
43293
|
+
operation: external_exports.literal("list"),
|
|
43294
|
+
state: workingFileStateSchema.optional()
|
|
43295
|
+
}).strict()
|
|
43296
|
+
]);
|
|
43297
|
+
var workingFilesWriteToolInputSchema = external_exports.discriminatedUnion("operation", [
|
|
43298
|
+
external_exports.object({
|
|
43299
|
+
operation: external_exports.literal("create"),
|
|
43300
|
+
path: workingFilePathSchema,
|
|
43301
|
+
content_type: workingFileContentTypeSchema,
|
|
43302
|
+
content: external_exports.string().min(1).max(WORKING_FILE_MAX_CONTENT_CHARS)
|
|
43303
|
+
}).strict(),
|
|
43304
|
+
external_exports.object({
|
|
43305
|
+
operation: external_exports.literal("publish"),
|
|
43306
|
+
path: workingFilePathSchema
|
|
43307
|
+
}).strict()
|
|
43308
|
+
]);
|
|
43309
|
+
var workingFileSummarySchema = external_exports.object({
|
|
43310
|
+
file_ref: external_exports.string().min(1),
|
|
43311
|
+
path: workingFilePathSchema,
|
|
43312
|
+
state: workingFileStateSchema,
|
|
43313
|
+
content_type: workingFileContentTypeSchema,
|
|
43314
|
+
content_chars: external_exports.number().int().nonnegative(),
|
|
43315
|
+
published_ref: external_exports.string().min(1).nullable(),
|
|
43316
|
+
published_at: isoDateTime4.nullable(),
|
|
43317
|
+
expires_at: isoDateTime4,
|
|
43318
|
+
created_at: isoDateTime4,
|
|
43319
|
+
updated_at: isoDateTime4
|
|
43320
|
+
}).strict();
|
|
43321
|
+
var workingFileReadResultSchema = workingFileSummarySchema.extend({
|
|
43322
|
+
content: external_exports.string(),
|
|
43323
|
+
content_truncated: external_exports.boolean()
|
|
43324
|
+
}).strict();
|
|
43325
|
+
var workingFilesListOutputSchema = external_exports.object({
|
|
43326
|
+
files: external_exports.array(workingFileSummarySchema)
|
|
43327
|
+
}).strict();
|
|
43328
|
+
|
|
43078
43329
|
// ../../packages/protocol/src/run-summary.ts
|
|
43079
43330
|
var runSummaryOutputSchema = external_exports.object({
|
|
43080
43331
|
summary: external_exports.string().min(1).max(140)
|
|
@@ -43082,7 +43333,7 @@ var runSummaryOutputSchema = external_exports.object({
|
|
|
43082
43333
|
|
|
43083
43334
|
// ../../packages/protocol/src/runner-settings.ts
|
|
43084
43335
|
var uuid8 = external_exports.string().uuid();
|
|
43085
|
-
var
|
|
43336
|
+
var isoDateTime5 = external_exports.string().datetime({ offset: true });
|
|
43086
43337
|
var runnerHealthSchema = external_exports.enum(["online", "stale", "offline", "revoked", "unpaired"]);
|
|
43087
43338
|
var runnerExecutionStateSchema = external_exports.enum([
|
|
43088
43339
|
"ready",
|
|
@@ -43102,8 +43353,8 @@ var runnerExecutionReadinessSchema = external_exports.object({
|
|
|
43102
43353
|
due_queued_work_orders: external_exports.number().int().nonnegative(),
|
|
43103
43354
|
claimed_work_orders: external_exports.number().int().nonnegative(),
|
|
43104
43355
|
running_work_orders: external_exports.number().int().nonnegative(),
|
|
43105
|
-
recent_completed_at:
|
|
43106
|
-
recent_failed_at:
|
|
43356
|
+
recent_completed_at: isoDateTime5.nullable(),
|
|
43357
|
+
recent_failed_at: isoDateTime5.nullable()
|
|
43107
43358
|
}).strict();
|
|
43108
43359
|
var runnerSandboxPostureSchema = external_exports.enum(["guard", "strict", "off", "none", "unknown"]);
|
|
43109
43360
|
var runnerPostureSchema = external_exports.object({
|
|
@@ -43120,10 +43371,10 @@ var runnerSummarySchema = external_exports.object({
|
|
|
43120
43371
|
cli_version: external_exports.string().nullable(),
|
|
43121
43372
|
posture: runnerPostureSchema,
|
|
43122
43373
|
execution: runnerExecutionReadinessSchema,
|
|
43123
|
-
paired_at:
|
|
43124
|
-
last_heartbeat_at:
|
|
43125
|
-
revoked_at:
|
|
43126
|
-
created_at:
|
|
43374
|
+
paired_at: isoDateTime5.nullable(),
|
|
43375
|
+
last_heartbeat_at: isoDateTime5.nullable(),
|
|
43376
|
+
revoked_at: isoDateTime5.nullable(),
|
|
43377
|
+
created_at: isoDateTime5
|
|
43127
43378
|
}).strict();
|
|
43128
43379
|
var runnerListInputSchema = external_exports.object({
|
|
43129
43380
|
include_revoked: external_exports.boolean().optional()
|
|
@@ -43142,7 +43393,7 @@ var runnerPairingStartOutputSchema = external_exports.object({
|
|
|
43142
43393
|
pairing_session_id: uuid8,
|
|
43143
43394
|
user_code: external_exports.string(),
|
|
43144
43395
|
verification_uri: external_exports.string(),
|
|
43145
|
-
expires_at:
|
|
43396
|
+
expires_at: isoDateTime5,
|
|
43146
43397
|
expires_in: external_exports.number().int().nonnegative()
|
|
43147
43398
|
}).strict();
|
|
43148
43399
|
var runnerRevokeInputSchema = external_exports.object({
|
|
@@ -43160,9 +43411,9 @@ var workOrderSummarySchema = external_exports.object({
|
|
|
43160
43411
|
lane: external_exports.enum(["cloud", "runner"]),
|
|
43161
43412
|
status: workOrderStatusSchema,
|
|
43162
43413
|
claimed_by_runner_id: uuid8.nullable(),
|
|
43163
|
-
scheduled_for:
|
|
43164
|
-
grace_deadline:
|
|
43165
|
-
created_at:
|
|
43414
|
+
scheduled_for: isoDateTime5,
|
|
43415
|
+
grace_deadline: isoDateTime5,
|
|
43416
|
+
created_at: isoDateTime5
|
|
43166
43417
|
}).strict();
|
|
43167
43418
|
var workOrderListInputSchema = external_exports.object({
|
|
43168
43419
|
status: workOrderStatusSchema.optional(),
|
|
@@ -43175,7 +43426,7 @@ var workOrderListOutputSchema = external_exports.object({
|
|
|
43175
43426
|
}).strict();
|
|
43176
43427
|
var workOrderEnqueueInputSchema = external_exports.object({
|
|
43177
43428
|
agent_id: uuid8,
|
|
43178
|
-
scheduled_for:
|
|
43429
|
+
scheduled_for: isoDateTime5.optional(),
|
|
43179
43430
|
task_id: uuid8.optional()
|
|
43180
43431
|
}).strict();
|
|
43181
43432
|
var agentRunNowInputSchema = external_exports.object({
|
|
@@ -43202,8 +43453,8 @@ var runnerDiagnoseOutputSchema = external_exports.object({
|
|
|
43202
43453
|
platform: external_exports.string(),
|
|
43203
43454
|
health: runnerHealthSchema,
|
|
43204
43455
|
capabilities: runnerCapabilityDetailSchema,
|
|
43205
|
-
last_heartbeat_at:
|
|
43206
|
-
paired_at:
|
|
43456
|
+
last_heartbeat_at: isoDateTime5.nullable(),
|
|
43457
|
+
paired_at: isoDateTime5.nullable(),
|
|
43207
43458
|
revocation_state: external_exports.enum(["active", "revoked", "unpaired"]),
|
|
43208
43459
|
repair_guidance: external_exports.array(external_exports.object({
|
|
43209
43460
|
action: external_exports.string(),
|
|
@@ -43264,7 +43515,7 @@ var notificationErrorSummarySchema = external_exports.object({
|
|
|
43264
43515
|
source: external_exports.enum(["run", "llm", "tool", "mcp", "runner", "integration", "job", "web"]).nullable(),
|
|
43265
43516
|
seat_id: uuid8.nullable(),
|
|
43266
43517
|
run_id: uuid8.nullable(),
|
|
43267
|
-
created_at:
|
|
43518
|
+
created_at: isoDateTime5
|
|
43268
43519
|
}).strict();
|
|
43269
43520
|
var notificationListErrorsOutputSchema = external_exports.object({
|
|
43270
43521
|
errors: external_exports.array(notificationErrorSummarySchema)
|
|
@@ -43381,7 +43632,7 @@ var integrationSummarySchema = external_exports.object({
|
|
|
43381
43632
|
id: uuid8,
|
|
43382
43633
|
provider: external_exports.string(),
|
|
43383
43634
|
status: external_exports.enum(["connected", "error", "disconnected"]),
|
|
43384
|
-
last_synced_at:
|
|
43635
|
+
last_synced_at: isoDateTime5.nullable()
|
|
43385
43636
|
}).strict();
|
|
43386
43637
|
var settingsGetInputSchema = external_exports.object({}).strict();
|
|
43387
43638
|
var settingsGetOutputSchema = external_exports.object({
|
|
@@ -43417,7 +43668,7 @@ var tenantRenameOutputSchema = external_exports.object({
|
|
|
43417
43668
|
|
|
43418
43669
|
// ../../packages/protocol/src/system-health.ts
|
|
43419
43670
|
var uuidSchema14 = external_exports.string().uuid();
|
|
43420
|
-
var
|
|
43671
|
+
var isoDateTime6 = external_exports.string().datetime({ offset: true });
|
|
43421
43672
|
var systemHealthCallerKindSchema = external_exports.enum(["tenant_admin", "member", "seat_token"]);
|
|
43422
43673
|
var systemHealthCallerSchema = external_exports.object({
|
|
43423
43674
|
kind: systemHealthCallerKindSchema,
|
|
@@ -43507,7 +43758,7 @@ var systemHealthConnectivitySectionSchema = external_exports.object({
|
|
|
43507
43758
|
failed_notification_count: external_exports.number().int().nonnegative()
|
|
43508
43759
|
}).strict();
|
|
43509
43760
|
var systemHealthSyncSectionSchema = external_exports.object({
|
|
43510
|
-
latest_brief_at:
|
|
43761
|
+
latest_brief_at: isoDateTime6.nullable(),
|
|
43511
43762
|
missing_latest_brief: external_exports.boolean(),
|
|
43512
43763
|
flagged_gap_count: external_exports.number().int().nonnegative()
|
|
43513
43764
|
}).strict();
|
|
@@ -43527,7 +43778,7 @@ var systemHealthCheckInputSchema = systemHealthInputSchema.extend({
|
|
|
43527
43778
|
caller: systemHealthCallerSchema
|
|
43528
43779
|
}).strict();
|
|
43529
43780
|
var systemHealthOutputSchema = external_exports.object({
|
|
43530
|
-
generated_at:
|
|
43781
|
+
generated_at: isoDateTime6,
|
|
43531
43782
|
scope: systemHealthScopeSchema,
|
|
43532
43783
|
verdict: systemHealthVerdictSchema,
|
|
43533
43784
|
top_actions: external_exports.array(systemHealthActionSchema),
|
|
@@ -45130,16 +45381,16 @@ var syncBriefSchema = external_exports.object({
|
|
|
45130
45381
|
}).strict();
|
|
45131
45382
|
|
|
45132
45383
|
// ../../packages/protocol/src/usage.ts
|
|
45133
|
-
var
|
|
45384
|
+
var isoDateTime7 = external_exports.string().datetime({ offset: true });
|
|
45134
45385
|
var periodKeySchema = external_exports.string().regex(/^\d{4}-\d{2}-\d{2}$/);
|
|
45135
45386
|
var countSchema = external_exports.number().int().nonnegative();
|
|
45136
45387
|
var usdSchema = external_exports.string();
|
|
45137
45388
|
var bigCountSchema = external_exports.string();
|
|
45138
45389
|
var usagePeriodSchema = external_exports.object({
|
|
45139
45390
|
period: periodKeySchema,
|
|
45140
|
-
period_start:
|
|
45141
|
-
period_end:
|
|
45142
|
-
captured_at:
|
|
45391
|
+
period_start: isoDateTime7,
|
|
45392
|
+
period_end: isoDateTime7,
|
|
45393
|
+
captured_at: isoDateTime7,
|
|
45143
45394
|
run_count: countSchema,
|
|
45144
45395
|
agent_count: countSchema,
|
|
45145
45396
|
succeeded_run_count: countSchema,
|
|
@@ -45191,7 +45442,7 @@ var usageSnapshotInputSchema = external_exports.object({
|
|
|
45191
45442
|
// current month. Normalized to the first of that month server-side.
|
|
45192
45443
|
period: external_exports.union([
|
|
45193
45444
|
external_exports.string().regex(/^\d{4}-\d{2}-\d{2}$/),
|
|
45194
|
-
|
|
45445
|
+
isoDateTime7
|
|
45195
45446
|
]).optional()
|
|
45196
45447
|
}).strict();
|
|
45197
45448
|
var usageSnapshotOutputSchema = external_exports.object({
|
|
@@ -46787,7 +47038,7 @@ There is exactly one way to give a connected tool its credential, and it is the
|
|
|
46787
47038
|
order: 47,
|
|
46788
47039
|
title: "Available tools guide",
|
|
46789
47040
|
summary: "How to think about tool categories available to seats and what each category should be used for.",
|
|
46790
|
-
version: "2026-07-13.
|
|
47041
|
+
version: "2026-07-13.3",
|
|
46791
47042
|
public: true,
|
|
46792
47043
|
audiences: ["human", "cli", "mcp", "in_app_agent"],
|
|
46793
47044
|
stages: ["staffing"],
|
|
@@ -46825,7 +47076,7 @@ Start from the seat's responsibility, not the tool list. If a tool does not dire
|
|
|
46825
47076
|
|
|
46826
47077
|
Skills are reusable procedures a seat can learn from; they are not tools and they never grant authority. A skill package may declare required or optional tool dependencies so setup can identify blockers before assignment. Those dependencies are checked against the discoverable \`tool.catalog\` ids, scope tiers, and provider-neutral access levels, then compared to the seat's Charter permission manifest. Missing required tools block approval; optional tools produce setup warnings. A published skill version is immutable, so later corrections create a new version instead of rewriting what a run may have used.
|
|
46827
47078
|
|
|
46828
|
-
The catalog covers both the platform verbs (status, escalation, Signal readings) and the business tools the stock-agent templates grant \u2014 accounts-payable and receivable reads, AP-inbox and collections drafts, helpdesk triage, CRM reads,
|
|
47079
|
+
The catalog covers both the platform verbs (status, escalation, Signal readings) and the business tools the stock-agent templates grant \u2014 accounts-payable and receivable reads, AP-inbox and collections drafts, helpdesk triage, CRM reads, web search, public-page fetch, browser read, working files, script execution, content-calendar, release-artifact, and issue drafts. Each is listed with a conservative scope tier (read for the reads, draft for the drafts and action-capable internal workbench tools), a provider-neutral access level, a provider requirement, cost class, lane support, and any Trusted-mode metadata that must be present before a standing authorization can apply. Business tools are credential-gated unless they are {{brand}}-managed generic workbench tools. Because a skill's required tool id is matched against these ids, a skill that requires one of them resolves against the catalog rather than reporting an unknown tool. Catalog membership is configuration only: it still confers no authority, and a listed id runs only once a live handler exists behind the seat's signed permission manifest, the server guard, and any required credential \u2014 the manifest and guard remain the control plane. Unknown tool ids or unsupported access levels fail closed.
|
|
46829
47080
|
|
|
46830
47081
|
## How agents should request tools
|
|
46831
47082
|
|
|
@@ -46835,14 +47086,14 @@ Agents should explain the job, the required tool category, the minimum permissio
|
|
|
46835
47086
|
|
|
46836
47087
|
Every tool call passes the server-side guard first: the guard checks the call against the seat's signed permission manifest and records a tool-call audit row for **every** call \u2014 allowed, denied, or escalated. Tool selection is never authorization. An explicitly declined manifest entry is enforced as denied, even when the tool exists and the client asks for it. Only an allowed call reaches its handler. A connected credential is bound into the handler for the duration of the call only; the secret never appears in the result, the audit summary, logs, or the model's context.
|
|
46837
47088
|
|
|
46838
|
-
External connectors are being rolled out provider by provider, conservatively (read and draft before send; write behind approval). A selected tool is only a permission until a live handler exists and the seat has the required credential or binding. Today the built-in execution path supports internal status reporting, the generic REST GET connector when a signed host/path allowlist and credential exist, \`slack.post_message\` for a bound Slack channel,
|
|
47089
|
+
External connectors are being rolled out provider by provider, conservatively (read and draft before send; write behind approval). A selected tool is only a permission until a live handler exists and the seat has the required credential or binding. Today the built-in execution path supports internal status reporting, the generic REST GET connector when a signed host/path allowlist and credential exist, \`slack.post_message\` for a bound Slack channel, Google handlers for \`gmail.read\`, \`gmail.draft\`, \`sheets.read\`, and approval-held \`sheets.write\` when Google is connected, plus the governed workbench tools \`web.search\`, \`web.fetch\`, \`browser.read\`, \`files.read\`, \`files.write\`, and \`script.run\`. \`web.search\` uses a server-side Exa provider and returns normalized cited results without exposing provider keys. \`web.fetch\` reads one public HTTPS page only after scheme, DNS/IP, redirect, content-type, size, and timeout checks pass. \`browser.read\` opens an ephemeral read-only public-network browser session for navigation, inspection, screenshot, or extraction; it does not submit forms, persist authenticated state, execute downloads, or expose cross-tenant artifacts. \`files.read\` and \`files.write\` operate on bounded tenant-scoped working files and published \`rost://working-files/<id>\` references; they reject traversal, cap text payloads, retain ephemeral files briefly, and never execute file contents. \`script.run\` is compute-only and network-denied by default, but arbitrary code execution is action-capable, so read-only posture does not grant it; it still requires the \`agent.script_run\` entitlement and returns size-capped output. \`gmail.send\` remains held for approval and live external send stays gated on Google verification. Before that verification is complete, partner demos should show sandbox dry runs, setup previews, and approval-held examples rather than claim production Google readiness. Other provider entries remain configuration-only until their connector ships, so nothing runs silently.`
|
|
46839
47090
|
},
|
|
46840
47091
|
{
|
|
46841
47092
|
slug: "mcp-and-cli-guide",
|
|
46842
47093
|
order: 48,
|
|
46843
47094
|
title: "CLI and MCP installation guide",
|
|
46844
47095
|
summary: "Install the public CLI, register remote token-backed MCP clients, and find the full command and tool catalog.",
|
|
46845
|
-
version: "2026-07-13.
|
|
47096
|
+
version: "2026-07-13.4",
|
|
46846
47097
|
public: true,
|
|
46847
47098
|
audiences: ["human", "cli", "mcp", "in_app_agent"],
|
|
46848
47099
|
stages: ["company_setup", "staffing"],
|
|
@@ -46943,6 +47194,10 @@ The MCP server is remote and token-backed. There is no local MCP daemon to insta
|
|
|
46943
47194
|
|
|
46944
47195
|
AICOS MCP mode is deliberately seat-scoped. In Settings, the AICOS panel can create a token for the canonical AI Chief of Staff seat and then marks MCP selectable only while a non-revoked, unexpired AICOS seat token exists. Do not use a tenant-admin MCP token to staff or test AICOS; it should operate as its own governed seat, with the web panel remaining the readiness monitor and transcript surface.
|
|
46945
47196
|
|
|
47197
|
+
MCP clients may also expose their own native browser, search, file, or shell tools. Those native client actions are outside {{brand}} receipts, cost accounting, and audit. Treat them as ungoverned scratch work until the source is fetched or recorded through a {{brand}} MCP tool such as \`web.fetch\`, \`web.search\`, \`browser.read\`, a work-log evidence call, or another governed command. Only the {{brand}} tool call creates the permission receipt and evidence record.
|
|
47198
|
+
|
|
47199
|
+
Managed Runner turns use a generated {{brand}} MCP configuration instead of the operator's local MCP/client config. Ordinary business-agent runner turns are MCP-only, run in a read-only sandbox, and do not receive local provider keys such as Exa or browser-provider credentials. Codex runner turns ignore user config/rules, run ephemerally, and disable native search, browser, and computer-use features; Forge developer profiles keep their separate local-code workspace behavior.
|
|
47200
|
+
|
|
46946
47201
|
## Prerequisite: a human approver in a browser
|
|
46947
47202
|
|
|
46948
47203
|
A headless agent cannot complete setup unattended. Two things always require a human, so plan to announce the handoff rather than stall silently:
|
|
@@ -48540,7 +48795,7 @@ Stop before: approving a Charter, signing a manifest, connecting a tool or crede
|
|
|
48540
48795
|
order: 71,
|
|
48541
48796
|
title: "Billing and pricing guide",
|
|
48542
48797
|
summary: "How {{brand}} packages company-wide access, Stripe billing, and governed-agent usage without per-human-seat pricing.",
|
|
48543
|
-
version: "2026-07-
|
|
48798
|
+
version: "2026-07-13.1",
|
|
48544
48799
|
public: true,
|
|
48545
48800
|
audiences: ["human", "cli", "mcp", "in_app_agent"],
|
|
48546
48801
|
stages: ["company_setup", "staffing", "operating_rhythm"],
|
|
@@ -48596,6 +48851,14 @@ The first meter is billable-successful-agent-run based because the current platf
|
|
|
48596
48851
|
|
|
48597
48852
|
Billable true-up is service-owned and runs after a period is closed. The tenant-facing \`usage.snapshot\` command is an ROI/reporting tool; an early current-period snapshot must not become, replace, or block the final billable close. The billing close records a separate \`billing_usage_true_ups\` row keyed by tenant and period with the source kind, included allowance, billable overage, status, and Stripe meter event identifier. A closed usage snapshot is preferred only when it was captured after the period ended; otherwise the service close uses a live rollup for that closed period so an early ROI snapshot cannot undercount the invoice true-up.
|
|
48598
48853
|
|
|
48854
|
+
## Launch credits and recovery access
|
|
48855
|
+
|
|
48856
|
+
Eligible launch tenants can receive one configured launch credit for {{brand}}-managed variable costs. Managed LLM, Exa, browser, and sandbox costs are estimated before the provider call, reserved atomically against the active launch credit, and then settled to actual usage or released if the call does not complete. BYOK model calls do not draw down launch credit, but they still keep their ordinary audit and usage records.
|
|
48857
|
+
|
|
48858
|
+
Launch-credit notifications are informational and idempotent: owners may see threshold, exhaustion, or expiry notices with recovery actions when the remaining credit drops or the credit approaches its expiry window.
|
|
48859
|
+
|
|
48860
|
+
When an unsubscribed tenant's launch credit expires, {{brand}} enters a recovery-safe posture instead of deleting the workspace or letting agents continue spending. Billing, BYOK setup, export, cancel, and delete/recovery routes stay reachable so a human can restore or leave cleanly. Operational writes, schedules, cloud agent runs, and other cost-creating actions pause until the tenant has an active subscription or active launch credit again.
|
|
48861
|
+
|
|
48599
48862
|
## Stripe boundary
|
|
48600
48863
|
|
|
48601
48864
|
Stripe owns payment collection, payment methods, invoices, and hosted customer self-service.
|
|
@@ -49781,7 +50044,7 @@ This worked document **omits** \`unanswered_boundaries\` and \`seat_type_recomme
|
|
|
49781
50044
|
order: 43,
|
|
49782
50045
|
title: "Agent builder guide",
|
|
49783
50046
|
summary: "The full agent setup sequence on the CLI/MCP path \u2014 seat, steward, job, boundaries, tools, credentials, model, schedule, dry-run, go-live \u2014 with the structured model config and access tiers.",
|
|
49784
|
-
version: "2026-07-
|
|
50047
|
+
version: "2026-07-13.1",
|
|
49785
50048
|
public: true,
|
|
49786
50049
|
audiences: ["cli", "mcp", "in_app_agent"],
|
|
49787
50050
|
stages: ["staffing"],
|
|
@@ -49870,7 +50133,7 @@ Conservative by default: anything beyond read/draft defaults to \`always_ask\`.
|
|
|
49870
50133
|
|
|
49871
50134
|
- **Finance clerk (AP/AR).** Tight read + draft scopes (\`ap.invoices.read\`, \`accounting.bills.draft_update\`); posting and payment escalate; measurables track drafted-on-time and discrepancies caught. Balanced model.
|
|
49872
50135
|
- **Inbox / scheduling assistant.** \`gmail.read\` + draft + \`calendar.propose_hold\`; sends and confirmed meetings are approval-gated; sensitive messages escalate. Triage or balanced model.
|
|
49873
|
-
- **Research / SDR.** \`web.
|
|
50136
|
+
- **Research / SDR.** \`web.search\` + \`crm.contacts.draft_update\` (draft only); outreach and paid data escalate. Balanced model.
|
|
49874
50137
|
- **Reviewer / QA.** Read release artifacts + draft issues; release approval and production changes escalate. Complex model for judgment.
|
|
49875
50138
|
|
|
49876
50139
|
## The full JSON shape
|
|
@@ -55483,6 +55746,20 @@ var RUNNER_AICOS_TURN_TOOLS = [
|
|
|
55483
55746
|
"mcp__rost__rost_aicos_turn_load_context",
|
|
55484
55747
|
"mcp__rost__rost_get_tasks"
|
|
55485
55748
|
];
|
|
55749
|
+
var CODEX_NATIVE_TOOL_ISOLATION_CONFIG_ARGS = [
|
|
55750
|
+
"--config",
|
|
55751
|
+
'web_search="disabled"',
|
|
55752
|
+
"--config",
|
|
55753
|
+
"features.browser_use=false",
|
|
55754
|
+
"--config",
|
|
55755
|
+
"features.in_app_browser=false",
|
|
55756
|
+
"--config",
|
|
55757
|
+
"features.browser_use_external=false",
|
|
55758
|
+
"--config",
|
|
55759
|
+
"features.browser_use_full_cdp_access=false",
|
|
55760
|
+
"--config",
|
|
55761
|
+
"features.computer_use=false"
|
|
55762
|
+
];
|
|
55486
55763
|
var CLAUDE_WORKSPACE_WRITE_LOCAL_TOOLS = ["Read", "Write", "Edit", "Glob", "Grep", "Bash"];
|
|
55487
55764
|
var CLAUDE_READ_LOCAL_TOOLS = ["Read", "Glob", "Grep"];
|
|
55488
55765
|
var READ_STUB_TIMEOUT_MS = 18e4;
|
|
@@ -56249,7 +56526,8 @@ function resolveTurnPlan(input) {
|
|
|
56249
56526
|
codexSandbox: "read-only",
|
|
56250
56527
|
outputFormat: input.kind === "turn_execution" ? "json" : "text",
|
|
56251
56528
|
repoDir: null,
|
|
56252
|
-
timeoutMs: READ_STUB_TIMEOUT_MS
|
|
56529
|
+
timeoutMs: READ_STUB_TIMEOUT_MS,
|
|
56530
|
+
isolateCodexNativeTools: input.kind === "work_order"
|
|
56253
56531
|
};
|
|
56254
56532
|
}
|
|
56255
56533
|
const execution = input.execution;
|
|
@@ -56267,7 +56545,8 @@ function resolveTurnPlan(input) {
|
|
|
56267
56545
|
// Only a Forge workspace grants a repo cwd; a needs_repo contract with no prepared
|
|
56268
56546
|
// workspace (broker/clone failed upstream) falls back to tmpdir rather than a bad cwd.
|
|
56269
56547
|
repoDir: execution.needs_repo ? input.repoDir : null,
|
|
56270
|
-
timeoutMs: resolveExecutionTimeoutMs(execution)
|
|
56548
|
+
timeoutMs: resolveExecutionTimeoutMs(execution),
|
|
56549
|
+
isolateCodexNativeTools: execution.profile === "seat_work"
|
|
56271
56550
|
};
|
|
56272
56551
|
}
|
|
56273
56552
|
function buildTurnCommand(input) {
|
|
@@ -56284,7 +56563,13 @@ function buildTurnCommand(input) {
|
|
|
56284
56563
|
plan.codexSandbox,
|
|
56285
56564
|
// Skip the git-repo check only when the cwd is NOT a checkout (read stub in
|
|
56286
56565
|
// tmpdir); a prepared Forge workspace IS a repo, so drop the flag there.
|
|
56287
|
-
...plan.repoDir === null ? ["--skip-git-repo-check"] : []
|
|
56566
|
+
...plan.repoDir === null ? ["--skip-git-repo-check"] : [],
|
|
56567
|
+
...plan.isolateCodexNativeTools ? [
|
|
56568
|
+
"--ignore-user-config",
|
|
56569
|
+
"--ignore-rules",
|
|
56570
|
+
"--ephemeral",
|
|
56571
|
+
...CODEX_NATIVE_TOOL_ISOLATION_CONFIG_ARGS
|
|
56572
|
+
] : []
|
|
56288
56573
|
]
|
|
56289
56574
|
};
|
|
56290
56575
|
}
|