@jmanuelcorral/openteam 0.1.42 → 0.2.1
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/.opencode/openteam.example.json +6 -1
- package/README.es.md +5 -5
- package/README.md +5 -5
- package/dist/capabilities/types.d.ts +4 -4
- package/dist/classifier/types.d.ts +3 -3
- package/dist/cli.js +11 -0
- package/dist/commands/doctor.d.ts +2 -0
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/graph.d.ts +28 -2
- package/dist/commands/graph.d.ts.map +1 -1
- package/dist/config/graphFeatureGate.d.ts +101 -0
- package/dist/config/graphFeatureGate.d.ts.map +1 -0
- package/dist/config/migrations.d.ts.map +1 -1
- package/dist/config/resolve.d.ts +20 -1
- package/dist/config/resolve.d.ts.map +1 -1
- package/dist/config/schema.d.ts +22 -19
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/console/render.d.ts.map +1 -1
- package/dist/context/redaction.d.ts +23 -0
- package/dist/context/redaction.d.ts.map +1 -1
- package/dist/context/schema.d.ts +3 -3
- package/dist/contract/opencode.d.ts +2 -2
- package/dist/contract/opencode.d.ts.map +1 -1
- package/dist/graph/certificate.d.ts +515 -0
- package/dist/graph/certificate.d.ts.map +1 -0
- package/dist/graph/ids.d.ts +9 -0
- package/dist/graph/ids.d.ts.map +1 -1
- package/dist/graph/privacyPolicy.d.ts.map +1 -1
- package/dist/graph/reducer.d.ts.map +1 -1
- package/dist/graph/replay.d.ts.map +1 -1
- package/dist/graph/reviewerPolicy.d.ts.map +1 -1
- package/dist/graph/schema.d.ts +33 -33
- package/dist/graph/schema.d.ts.map +1 -1
- package/dist/graph/soakLedger.d.ts +167 -0
- package/dist/graph/soakLedger.d.ts.map +1 -0
- package/dist/graph/types.d.ts +2 -0
- package/dist/graph/types.d.ts.map +1 -1
- package/dist/graph/validate.d.ts.map +1 -1
- package/dist/index.d.ts +52 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2452 -279
- package/dist/local/registry.d.ts.map +1 -1
- package/dist/memory/types.d.ts +2 -2
- package/dist/orchestrator/graphFacade.d.ts +39 -0
- package/dist/orchestrator/graphFacade.d.ts.map +1 -0
- package/dist/orchestrator/graphIngress.d.ts +136 -0
- package/dist/orchestrator/graphIngress.d.ts.map +1 -0
- package/dist/orchestrator/graphShadow.d.ts +121 -0
- package/dist/orchestrator/graphShadow.d.ts.map +1 -0
- package/dist/orchestrator/ledger.d.ts +11 -30
- package/dist/orchestrator/ledger.d.ts.map +1 -1
- package/dist/orchestrator/opencodeSessionAdapter.d.ts.map +1 -1
- package/dist/orchestrator/roles.d.ts +3 -3
- package/dist/orchestrator/sddCompiler.d.ts +31 -3
- package/dist/orchestrator/sddCompiler.d.ts.map +1 -1
- package/dist/orchestrator/worktreeAdapter.d.ts.map +1 -1
- package/dist/orchestrator/worktreeDispatch.d.ts.map +1 -1
- package/dist/plugin/graphShadowIngress.d.ts +165 -0
- package/dist/plugin/graphShadowIngress.d.ts.map +1 -0
- package/dist/plugin/graphTool.d.ts +63 -0
- package/dist/plugin/graphTool.d.ts.map +1 -0
- package/dist/plugin/hooks.d.ts +6 -0
- package/dist/plugin/hooks.d.ts.map +1 -1
- package/dist/plugin/legacyRunProducer.d.ts +60 -0
- package/dist/plugin/legacyRunProducer.d.ts.map +1 -0
- package/dist/plugin/reportRunSchema.d.ts +60 -0
- package/dist/plugin/reportRunSchema.d.ts.map +1 -0
- package/dist/plugin/sessionTracker.d.ts +42 -0
- package/dist/plugin/sessionTracker.d.ts.map +1 -0
- package/dist/plugin/shadowPipeline.d.ts +49 -0
- package/dist/plugin/shadowPipeline.d.ts.map +1 -0
- package/dist/plugin/soakObserver.d.ts +73 -0
- package/dist/plugin/soakObserver.d.ts.map +1 -0
- package/dist/storage/graph/codec.d.ts.map +1 -1
- package/dist/storage/graph/migrateLegacyBriefs.d.ts.map +1 -1
- package/dist/storage/graph/migration.d.ts +91 -0
- package/dist/storage/graph/migration.d.ts.map +1 -0
- package/dist/storage/graph/provider.d.ts +1 -0
- package/dist/storage/graph/provider.d.ts.map +1 -1
- package/dist/storage/graph/recovery.d.ts.map +1 -1
- package/dist/storage/graph/runRegistry.d.ts.map +1 -1
- package/dist/storage/graph/soakRecorder.d.ts +59 -0
- package/dist/storage/graph/soakRecorder.d.ts.map +1 -0
- package/dist/storage/graph/workspaceLease.d.ts.map +1 -1
- package/dist/storage/graph/worktreeRegistry.d.ts.map +1 -1
- package/dist/storage/graph/writer.d.ts +15 -0
- package/dist/storage/graph/writer.d.ts.map +1 -1
- package/dist/storage/path.d.ts.map +1 -1
- package/dist/telemetry/events.d.ts +12 -12
- package/dist/telemetry/graphRuntimeHealth.d.ts +53 -0
- package/dist/telemetry/graphRuntimeHealth.d.ts.map +1 -0
- package/dist/telemetry/graphView.d.ts +1 -0
- package/dist/telemetry/graphView.d.ts.map +1 -1
- package/dist/telemetry/types.d.ts +4 -4
- package/package.json +7 -5
- package/dist/orchestrator/sdd.d.ts +0 -126
- package/dist/orchestrator/sdd.d.ts.map +0 -1
|
@@ -53,5 +53,10 @@
|
|
|
53
53
|
"frontierTokensPerSession": 250000,
|
|
54
54
|
"hardStopOnBudgetExhaustion": false
|
|
55
55
|
},
|
|
56
|
-
"privacyMode": "forceLocalOnSensitive"
|
|
56
|
+
"privacyMode": "forceLocalOnSensitive",
|
|
57
|
+
"graph": {
|
|
58
|
+
"mode": "off",
|
|
59
|
+
"killSwitch": false,
|
|
60
|
+
"operatorApproval": false
|
|
61
|
+
}
|
|
57
62
|
}
|
package/README.es.md
CHANGED
|
@@ -46,7 +46,7 @@ El router mantiene una garantía de privacidad: con `privacyMode: "forceLocalOnS
|
|
|
46
46
|
|
|
47
47
|
## Requisitos
|
|
48
48
|
|
|
49
|
-
- opencode compatible con `@opencode-ai/plugin` `1.
|
|
49
|
+
- opencode compatible con `@opencode-ai/plugin` `1.18.18`.
|
|
50
50
|
- Bun `1.3.14` para instalaciones, desarrollo y tests reproducibles.
|
|
51
51
|
- Node.js `^22.22.2 || ^24.15.0 || >=26.0.0` para la CLI y el plugin publicados.
|
|
52
52
|
- Runtimes locales opcionales:
|
|
@@ -723,13 +723,13 @@ Gates no negociables:
|
|
|
723
723
|
|
|
724
724
|
## Compatibilidad
|
|
725
725
|
|
|
726
|
-
Consulta [docs/compatibility.md](docs/compatibility.md). Resumen verificado el `2026-08-
|
|
726
|
+
Consulta [docs/compatibility.md](docs/compatibility.md). Resumen verificado el `2026-08-23`:
|
|
727
727
|
|
|
728
728
|
| Superficie | Versión / contrato |
|
|
729
729
|
| --- | --- |
|
|
730
|
-
| openteam | `0.1
|
|
731
|
-
| `@opencode-ai/plugin` | `1.
|
|
732
|
-
| `@opencode-ai/sdk` | `1.
|
|
730
|
+
| openteam | `0.2.1`; versión actual del paquete |
|
|
731
|
+
| `@opencode-ai/plugin` | `1.18.18` |
|
|
732
|
+
| `@opencode-ai/sdk` | `1.18.18` |
|
|
733
733
|
| Hook de routing | `chat.message`; no `chat.params` para cambiar modelo |
|
|
734
734
|
| Subsesiones | `client.session.create` + `client.session.prompt({ body: { model } })` |
|
|
735
735
|
|
package/README.md
CHANGED
|
@@ -51,7 +51,7 @@ The router keeps a privacy guarantee: with `privacyMode: "forceLocalOnSensitive"
|
|
|
51
51
|
|
|
52
52
|
## Requirements
|
|
53
53
|
|
|
54
|
-
- opencode compatible with `@opencode-ai/plugin` `1.
|
|
54
|
+
- opencode compatible with `@opencode-ai/plugin` `1.18.18`.
|
|
55
55
|
- [Bun](https://bun.sh) `1.3.14` for reproducible installs, development, and tests.
|
|
56
56
|
- Node.js `^22.22.2 || ^24.15.0 || >=26.0.0` for the published CLI/plugin.
|
|
57
57
|
- Optional local runtimes:
|
|
@@ -340,13 +340,13 @@ Non-negotiable gates (see [docs/testing-and-quality.md](docs/testing-and-quality
|
|
|
340
340
|
|
|
341
341
|
## Compatibility
|
|
342
342
|
|
|
343
|
-
See [docs/compatibility.md](docs/compatibility.md). Verified summary as of `2026-08-
|
|
343
|
+
See [docs/compatibility.md](docs/compatibility.md). Verified summary as of `2026-08-23`:
|
|
344
344
|
|
|
345
345
|
| Surface | Version / contract |
|
|
346
346
|
| --- | --- |
|
|
347
|
-
| openteam | `0.1
|
|
348
|
-
| `@opencode-ai/plugin` | `1.
|
|
349
|
-
| `@opencode-ai/sdk` | `1.
|
|
347
|
+
| openteam | `0.2.1`; current package version |
|
|
348
|
+
| `@opencode-ai/plugin` | `1.18.18` |
|
|
349
|
+
| `@opencode-ai/sdk` | `1.18.18` |
|
|
350
350
|
| Routing hook | `chat.message`; not `chat.params` for model changes |
|
|
351
351
|
| Child sessions | `client.session.create` + `client.session.prompt({ body: { model } })` |
|
|
352
352
|
|
|
@@ -2,10 +2,10 @@ import { z } from "zod";
|
|
|
2
2
|
import type { ModelSelection, ProviderKind } from "../router/types";
|
|
3
3
|
export type ComplexityTier = "trivial" | "simple" | "moderate" | "hard";
|
|
4
4
|
export declare const ComplexityTierSchema: z.ZodEnum<{
|
|
5
|
-
trivial: "trivial";
|
|
6
|
-
simple: "simple";
|
|
7
|
-
moderate: "moderate";
|
|
8
5
|
hard: "hard";
|
|
6
|
+
moderate: "moderate";
|
|
7
|
+
simple: "simple";
|
|
8
|
+
trivial: "trivial";
|
|
9
9
|
}>;
|
|
10
10
|
export declare const ModelCapabilityProfileSchema: z.ZodObject<{
|
|
11
11
|
ref: z.ZodObject<{
|
|
@@ -13,9 +13,9 @@ export declare const ModelCapabilityProfileSchema: z.ZodObject<{
|
|
|
13
13
|
modelID: z.ZodString;
|
|
14
14
|
}, z.core.$strip>;
|
|
15
15
|
kind: z.ZodEnum<{
|
|
16
|
+
frontier: "frontier";
|
|
16
17
|
local: "local";
|
|
17
18
|
router: "router";
|
|
18
|
-
frontier: "frontier";
|
|
19
19
|
}>;
|
|
20
20
|
contextWindow: z.ZodNumber;
|
|
21
21
|
maxOutputTokens: z.ZodNumber;
|
|
@@ -8,10 +8,10 @@ export type ClassifierResult = {
|
|
|
8
8
|
};
|
|
9
9
|
export declare const LocalClassifierOutputSchema: z.ZodObject<{
|
|
10
10
|
tier: z.ZodEnum<{
|
|
11
|
-
trivial: "trivial";
|
|
12
|
-
simple: "simple";
|
|
13
|
-
moderate: "moderate";
|
|
14
11
|
hard: "hard";
|
|
12
|
+
moderate: "moderate";
|
|
13
|
+
simple: "simple";
|
|
14
|
+
trivial: "trivial";
|
|
15
15
|
}>;
|
|
16
16
|
confidence: z.ZodNumber;
|
|
17
17
|
reasons: z.ZodArray<z.ZodString>;
|
package/dist/cli.js
CHANGED
|
@@ -674,6 +674,7 @@ var GraphModeSchema = z3.enum(["off", "shadow", "active"]);
|
|
|
674
674
|
var GraphConfigSchema = z3.object({
|
|
675
675
|
mode: GraphModeSchema.default("off"),
|
|
676
676
|
killSwitch: z3.boolean().default(false),
|
|
677
|
+
operatorApproval: z3.boolean().default(false),
|
|
677
678
|
worktrees: z3.object({
|
|
678
679
|
enabled: z3.boolean().default(false)
|
|
679
680
|
}).default({ enabled: false })
|
|
@@ -2035,6 +2036,7 @@ function healthBanner(health) {
|
|
|
2035
2036
|
'<div class="graph-health" role="status">',
|
|
2036
2037
|
chip("gh-recovery", health.recoveryRequired, health.recoveryRequired ? "recuperación requerida" : "sin recuperación"),
|
|
2037
2038
|
chip("gh-unknown", health.unknownEffects > 0, `efectos desconocidos: ${health.unknownEffects}`),
|
|
2039
|
+
chip("gh-stale", health.staleCompletions > 0, `completaciones tardías: ${health.staleCompletions}`),
|
|
2038
2040
|
chip("gh-conflict", health.conflicts > 0, `conflictos lease/worktree: ${health.conflicts}`),
|
|
2039
2041
|
chip("gh-kill", health.killSwitch, health.killSwitch ? "kill switch activo" : "kill switch inactivo"),
|
|
2040
2042
|
"</div>"
|
|
@@ -4424,6 +4426,15 @@ function renderDoctor(input) {
|
|
|
4424
4426
|
if (reachable === 0) {
|
|
4425
4427
|
lines.push(" ⚠ Ningún runtime local alcanzable: todo el tráfico irá a frontier.");
|
|
4426
4428
|
}
|
|
4429
|
+
if (input.graphHealth !== undefined) {
|
|
4430
|
+
const h = input.graphHealth;
|
|
4431
|
+
lines.push(" graph health:");
|
|
4432
|
+
lines.push(` recuperación requerida: ${h.recoveryRequired ? "sí" : "no"}`);
|
|
4433
|
+
lines.push(` efectos desconocidos: ${h.unknownEffects}`);
|
|
4434
|
+
lines.push(` completaciones tardías: ${h.staleCompletions}`);
|
|
4435
|
+
lines.push(` conflictos: ${h.conflicts}`);
|
|
4436
|
+
lines.push(` kill switch: ${h.killSwitch ? "activo" : "inactivo"}`);
|
|
4437
|
+
}
|
|
4427
4438
|
return lines.join(`
|
|
4428
4439
|
`);
|
|
4429
4440
|
}
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import type { OpenTeamConfig } from "../config/schema";
|
|
2
2
|
import type { LocalRuntimeSnapshot } from "../local/types";
|
|
3
|
+
import type { GraphViewHealth } from "../telemetry/graphView";
|
|
3
4
|
export type DoctorInput = {
|
|
4
5
|
config: OpenTeamConfig;
|
|
5
6
|
snapshots: readonly LocalRuntimeSnapshot[];
|
|
6
7
|
telemetryPath: string;
|
|
7
8
|
telemetryRecords: number;
|
|
9
|
+
graphHealth?: GraphViewHealth;
|
|
8
10
|
};
|
|
9
11
|
export declare function renderDoctor(input: DoctorInput): string;
|
|
10
12
|
//# sourceMappingURL=doctor.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAE9D,MAAM,MAAM,WAAW,GAAG;IACxB,MAAM,EAAE,cAAc,CAAC;IACvB,SAAS,EAAE,SAAS,oBAAoB,EAAE,CAAC;IAC3C,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,eAAe,CAAC;CAC/B,CAAC;AAWF,wBAAgB,YAAY,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAgDvD"}
|
package/dist/commands/graph.d.ts
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import type { ConfigSource } from "../config/resolve";
|
|
2
2
|
import type { GraphMode } from "../config/schema";
|
|
3
|
+
import type { GraphJournalHealth } from "../graph/types";
|
|
3
4
|
import type { WorktreeReconcileReport } from "../orchestrator/worktreeReconciler";
|
|
5
|
+
import type { LegacyImportRecordV1 } from "../storage/graph/importLegacy";
|
|
6
|
+
import type { MigrationBackup, MigrationPlan } from "../storage/graph/migration";
|
|
4
7
|
import type { LeaseRecord } from "../storage/graph/workspaceLease";
|
|
5
8
|
/**
|
|
6
9
|
* GE-045 — operator commands for the graph runtime as pure dry-run plans.
|
|
@@ -17,8 +20,6 @@ import type { LeaseRecord } from "../storage/graph/workspaceLease";
|
|
|
17
20
|
* - Cancelling a run held by another holder (a stale takeover) is blocked
|
|
18
21
|
* unless the operator explicitly forces it.
|
|
19
22
|
*/
|
|
20
|
-
/** Health of the on-disk journal tail as classified by recovery. */
|
|
21
|
-
export type GraphJournalHealth = "clean" | "recovered" | "corrupt";
|
|
22
23
|
/** Settled, side-effect-free view of the graph runtime for the operator. */
|
|
23
24
|
export type GraphHealthSnapshot = {
|
|
24
25
|
/** Where the effective graph config was resolved from. */
|
|
@@ -70,4 +71,29 @@ export declare function planGraphCancel(snapshot: GraphHealthSnapshot, options:
|
|
|
70
71
|
* the operator can see isolation is off without any worktree being touched.
|
|
71
72
|
*/
|
|
72
73
|
export declare function renderWorktreeReconciliation(report: WorktreeReconcileReport): string;
|
|
74
|
+
/** Action a migration command would take. */
|
|
75
|
+
export type MigrationActionKind = "none" | "dry-run" | "backup" | "apply" | "rollback" | "blocked";
|
|
76
|
+
/** Result of planning a migration command. */
|
|
77
|
+
export type MigrationActionPlan = {
|
|
78
|
+
readonly kind: MigrationActionKind;
|
|
79
|
+
readonly reason: string;
|
|
80
|
+
readonly safe: boolean;
|
|
81
|
+
/** Number of records the action would affect. */
|
|
82
|
+
readonly recordCount: number;
|
|
83
|
+
};
|
|
84
|
+
/** Plan a migration dry-run from a settled migration plan. */
|
|
85
|
+
export declare function planMigrationDryRun(plan: MigrationPlan): MigrationActionPlan;
|
|
86
|
+
/** Plan a backup creation from current authority. */
|
|
87
|
+
export declare function planMigrationBackup(authority: readonly LegacyImportRecordV1[]): MigrationActionPlan;
|
|
88
|
+
/** Options for planning a migration apply. */
|
|
89
|
+
export type MigrationApplyOptions = {
|
|
90
|
+
/** Operator explicitly acknowledges applying a migration. */
|
|
91
|
+
readonly acknowledge?: boolean;
|
|
92
|
+
};
|
|
93
|
+
/** Plan a migration apply from a settled migration plan. */
|
|
94
|
+
export declare function planMigrationApply(plan: MigrationPlan, options?: MigrationApplyOptions): MigrationActionPlan;
|
|
95
|
+
/** Plan a rollback from a validated backup. */
|
|
96
|
+
export declare function planMigrationRollback(backup: MigrationBackup, currentAuthority: readonly LegacyImportRecordV1[]): MigrationActionPlan;
|
|
97
|
+
/** Render a migration action plan for the operator. */
|
|
98
|
+
export declare function renderMigrationPlan(plan: MigrationActionPlan): string;
|
|
73
99
|
//# sourceMappingURL=graph.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graph.d.ts","sourceRoot":"","sources":["../../src/commands/graph.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AAClF,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"graph.d.ts","sourceRoot":"","sources":["../../src/commands/graph.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* **Cutover gate** for Graph active mode (GE-057).
|
|
3
|
+
*
|
|
4
|
+
* Pure and deterministic — no I/O, clock, random, or env vars. The gate
|
|
5
|
+
* evaluates pre-parsed certificate statuses, migration state, and operator
|
|
6
|
+
* approval. All inputs are injected by the wiring layer (`index.ts`).
|
|
7
|
+
*
|
|
8
|
+
* Design decisions:
|
|
9
|
+
*
|
|
10
|
+
* 1. **Noisy degradation, not abort.** When the gate denies `active`, the
|
|
11
|
+
* effective mode degrades to `off` with explicit violations. This is
|
|
12
|
+
* preferable to aborting the entire plugin (disproportionate for an opt-in
|
|
13
|
+
* feature) and to silent degradation (the operator would believe they're in
|
|
14
|
+
* `active`). Every violation carries a distinct code and human-readable
|
|
15
|
+
* detail so the operator can distinguish "absent" from "invalid" from
|
|
16
|
+
* "stale" — diagnostics with different remedies.
|
|
17
|
+
*
|
|
18
|
+
* 2. **No raw certificate reads.** The gate never inspects certificate fields.
|
|
19
|
+
* It receives `CertificateStatus` values produced by the recomputing
|
|
20
|
+
* parsers (`parseShadowCertificate`, `parseReleaseCertificate`,
|
|
21
|
+
* `parseSoakCertificate`), which derive verdicts from evidence. This module
|
|
22
|
+
* itself contains no version logic. A `status: "valid"` means the parser
|
|
23
|
+
* accepted it — verdict recomputed from the embedded evidence and digest
|
|
24
|
+
* verified. For shadow and release that acceptance additionally required the
|
|
25
|
+
* live opencode version to match the version stamped in the certificate; the
|
|
26
|
+
* soak parser performs no live-version check, so its opencode guarantee rests
|
|
27
|
+
* on the eligibility filter applied to the recorded evidence, not on this
|
|
28
|
+
* gate.
|
|
29
|
+
*
|
|
30
|
+
* 3. **Operator approval is a declaration, not a proof.** The `operatorApproval`
|
|
31
|
+
* flag records that the operator has reviewed the certificates and completed
|
|
32
|
+
* migration. Nothing in the system can verify the operator actually read the
|
|
33
|
+
* certificates or performed migration locally. This is an organizational
|
|
34
|
+
* trust boundary, not a cryptographic guarantee. We say so explicitly rather
|
|
35
|
+
* than building a mechanism that *appears* to verify what it cannot.
|
|
36
|
+
*
|
|
37
|
+
* 4. **Absence is not zero — it's a distinct failure.** Missing, unreadable,
|
|
38
|
+
* expired, and invalid certificates are all distinguished so the operator
|
|
39
|
+
* gets the right remediation advice.
|
|
40
|
+
*/
|
|
41
|
+
/** Status of a certificate after the wiring layer attempted to parse it. */
|
|
42
|
+
export type CertificateStatus = {
|
|
43
|
+
readonly status: "valid";
|
|
44
|
+
readonly digest: string;
|
|
45
|
+
} | {
|
|
46
|
+
readonly status: "absent";
|
|
47
|
+
} | {
|
|
48
|
+
readonly status: "invalid";
|
|
49
|
+
readonly code: string;
|
|
50
|
+
readonly detail: string;
|
|
51
|
+
};
|
|
52
|
+
/**
|
|
53
|
+
* Migration readiness as determined by the wiring layer.
|
|
54
|
+
*
|
|
55
|
+
* - `complete`: no pending migration work (empty ledger, or all imported).
|
|
56
|
+
* - `pending`: ledger has entries that may not be imported yet.
|
|
57
|
+
* - `unknown`: could not determine (e.g., ledger unreadable).
|
|
58
|
+
*/
|
|
59
|
+
export type MigrationStatus = "complete" | "pending" | "unknown";
|
|
60
|
+
/** All inputs the gate needs, pre-resolved by the wiring layer. */
|
|
61
|
+
export type GraphGateInput = {
|
|
62
|
+
readonly shadow: CertificateStatus;
|
|
63
|
+
readonly release: CertificateStatus;
|
|
64
|
+
readonly soak: CertificateStatus;
|
|
65
|
+
readonly migration: MigrationStatus;
|
|
66
|
+
readonly operatorApproval: boolean;
|
|
67
|
+
};
|
|
68
|
+
/**
|
|
69
|
+
* Violation codes. Each maps to a distinct failure with a distinct remedy.
|
|
70
|
+
* Codes use kebab-case with the certificate name as prefix so log grep is
|
|
71
|
+
* unambiguous.
|
|
72
|
+
*/
|
|
73
|
+
export type GateViolationCode = "shadow-certificate-absent" | "shadow-certificate-invalid" | "release-certificate-absent" | "release-certificate-invalid" | "soak-certificate-absent" | "soak-certificate-invalid" | "migration-pending" | "migration-unknown" | "operator-approval-missing";
|
|
74
|
+
/** A single gate violation with code and human-readable detail. */
|
|
75
|
+
export type GateViolation = {
|
|
76
|
+
readonly code: GateViolationCode;
|
|
77
|
+
readonly detail: string;
|
|
78
|
+
};
|
|
79
|
+
/** Result of evaluating the cutover gate. */
|
|
80
|
+
export type GraphGateResult = {
|
|
81
|
+
/** `true` only when every condition is satisfied. */
|
|
82
|
+
readonly allowed: boolean;
|
|
83
|
+
/** All violations found, even when `allowed` is already `false`. */
|
|
84
|
+
readonly violations: readonly GateViolation[];
|
|
85
|
+
};
|
|
86
|
+
/**
|
|
87
|
+
* Evaluates the cutover gate. Pure and deterministic: same inputs always
|
|
88
|
+
* produce the same result.
|
|
89
|
+
*
|
|
90
|
+
* All five conditions are **independently necessary**: shadow, release, soak,
|
|
91
|
+
* migration, and operator approval. A single missing condition closes the gate.
|
|
92
|
+
* All violations are collected (not short-circuited) so the operator sees
|
|
93
|
+
* everything that needs fixing.
|
|
94
|
+
*/
|
|
95
|
+
export declare function evaluateGraphGate(input: GraphGateInput): GraphGateResult;
|
|
96
|
+
/**
|
|
97
|
+
* Whether the cutover gate applies to a given mode. Only `active` mode
|
|
98
|
+
* requires the gate — `shadow` and `off` bypass it entirely.
|
|
99
|
+
*/
|
|
100
|
+
export declare function isGateApplicable(mode: "off" | "shadow" | "active"): boolean;
|
|
101
|
+
//# sourceMappingURL=graphFeatureGate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graphFeatureGate.d.ts","sourceRoot":"","sources":["../../src/config/graphFeatureGate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AAIH,4EAA4E;AAC5E,MAAM,MAAM,iBAAiB,GACzB;IAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACrD;IAAE,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAA;CAAE,GAC7B;IACE,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB,CAAC;AAIN;;;;;;GAMG;AACH,MAAM,MAAM,eAAe,GAAG,UAAU,GAAG,SAAS,GAAG,SAAS,CAAC;AAIjE,mEAAmE;AACnE,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC;IACnC,QAAQ,CAAC,OAAO,EAAE,iBAAiB,CAAC;IACpC,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAC;IACjC,QAAQ,CAAC,SAAS,EAAE,eAAe,CAAC;IACpC,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAC;CACpC,CAAC;AAIF;;;;GAIG;AACH,MAAM,MAAM,iBAAiB,GACzB,2BAA2B,GAC3B,4BAA4B,GAC5B,4BAA4B,GAC5B,6BAA6B,GAC7B,yBAAyB,GACzB,0BAA0B,GAC1B,mBAAmB,GACnB,mBAAmB,GACnB,2BAA2B,CAAC;AAEhC,mEAAmE;AACnE,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB,CAAC;AAIF,6CAA6C;AAC7C,MAAM,MAAM,eAAe,GAAG;IAC5B,qDAAqD;IACrD,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,oEAAoE;IACpE,QAAQ,CAAC,UAAU,EAAE,SAAS,aAAa,EAAE,CAAC;CAC/C,CAAC;AAuBF;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,cAAc,GAAG,eAAe,CAyCxE;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,KAAK,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAE3E"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migrations.d.ts","sourceRoot":"","sources":["../../src/config/migrations.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,kDAAkD;AAClD,eAAO,MAAM,sBAAsB,EAAG,CAAU,CAAC;AAEjD,8CAA8C;AAC9C,MAAM,MAAM,wBAAwB,GAChC,iBAAiB,GACjB,qBAAqB,CAAC;AAE1B,yDAAyD;AACzD,qBAAa,oBAAqB,SAAQ,KAAK;IAC7C,QAAQ,CAAC,IAAI,EAAE,wBAAwB,CAAC;IACxC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"migrations.d.ts","sourceRoot":"","sources":["../../src/config/migrations.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,kDAAkD;AAClD,eAAO,MAAM,sBAAsB,EAAG,CAAU,CAAC;AAEjD,8CAA8C;AAC9C,MAAM,MAAM,wBAAwB,GAChC,iBAAiB,GACjB,qBAAqB,CAAC;AAE1B,yDAAyD;AACzD,qBAAa,oBAAqB,SAAQ,KAAK;IAC7C,QAAQ,CAAC,IAAI,EAAE,wBAAwB,CAAC;IACxC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAExB,YAAY,IAAI,EAAE,wBAAwB,EAAE,MAAM,EAAE,MAAM,EAKzD;CACF;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAoBnD"}
|
package/dist/config/resolve.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { GateViolation, GraphGateResult } from "./graphFeatureGate";
|
|
1
2
|
import type { GraphMode, OpenTeamConfig } from "./schema";
|
|
2
3
|
/**
|
|
3
4
|
* Resolver **efectivo** y compartido de la config de Graph (GE-040).
|
|
@@ -11,6 +12,10 @@ import type { GraphMode, OpenTeamConfig } from "./schema";
|
|
|
11
12
|
* - **Shadow sin executor**: solo `active` habilita el executor; `shadow` y
|
|
12
13
|
* `off` no reciben executor.
|
|
13
14
|
* - **Fuente visible**: el origen de la config se propaga al resultado.
|
|
15
|
+
* - **Cutover gate (GE-057)**: `active` mode additionally requires the cutover
|
|
16
|
+
* gate to pass. When the gate denies, `effectiveMode` degrades to `off` and
|
|
17
|
+
* `gateDenied` is `true`. This degradation is **never silent**: the wiring
|
|
18
|
+
* layer emits warnings for each violation.
|
|
14
19
|
*
|
|
15
20
|
* Puro: sin I/O, reloj ni estado global.
|
|
16
21
|
*/
|
|
@@ -20,7 +25,7 @@ export type ConfigSource = "file" | "inline" | "default";
|
|
|
20
25
|
export type ResolvedGraphConfig = {
|
|
21
26
|
/** Modo declarado en la config (default `off`). */
|
|
22
27
|
readonly configuredMode: GraphMode;
|
|
23
|
-
/** Modo efectivo tras aplicar el kill switch. */
|
|
28
|
+
/** Modo efectivo tras aplicar el kill switch and cutover gate. */
|
|
24
29
|
readonly effectiveMode: GraphMode;
|
|
25
30
|
/** Solo `active` habilita el executor. */
|
|
26
31
|
readonly executorEnabled: boolean;
|
|
@@ -28,7 +33,21 @@ export type ResolvedGraphConfig = {
|
|
|
28
33
|
readonly killSwitch: boolean;
|
|
29
34
|
/** Origen de la config. */
|
|
30
35
|
readonly source: ConfigSource;
|
|
36
|
+
/**
|
|
37
|
+
* `true` when the cutover gate denied `active` mode and degraded to `off`.
|
|
38
|
+
* Absent or `false` when the gate was not evaluated (non-active modes) or
|
|
39
|
+
* when it passed.
|
|
40
|
+
*/
|
|
41
|
+
readonly gateDenied?: boolean;
|
|
42
|
+
/** Violations found by the cutover gate, if evaluated. */
|
|
43
|
+
readonly gateViolations?: readonly GateViolation[];
|
|
31
44
|
};
|
|
32
45
|
/** Resuelve la config de Graph efectiva a partir de la config y su origen. */
|
|
33
46
|
export declare function resolveGraphConfig(config: OpenTeamConfig, source: ConfigSource): ResolvedGraphConfig;
|
|
47
|
+
/**
|
|
48
|
+
* Applies the cutover gate result to a resolved config. When the gate denies
|
|
49
|
+
* `active` mode, degrades `effectiveMode` to `off` and marks `gateDenied`.
|
|
50
|
+
* Pure: the gate result is pre-computed by the wiring layer.
|
|
51
|
+
*/
|
|
52
|
+
export declare function applyGraphGate(resolved: ResolvedGraphConfig, gateResult: GraphGateResult): ResolvedGraphConfig;
|
|
34
53
|
//# sourceMappingURL=resolve.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../src/config/resolve.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE1D
|
|
1
|
+
{"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../src/config/resolve.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACzE,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE1D;;;;;;;;;;;;;;;;;;GAkBG;AAEH,uEAAuE;AACvE,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC;AAEzD,iDAAiD;AACjD,MAAM,MAAM,mBAAmB,GAAG;IAChC,mDAAmD;IACnD,QAAQ,CAAC,cAAc,EAAE,SAAS,CAAC;IACnC,kEAAkE;IAClE,QAAQ,CAAC,aAAa,EAAE,SAAS,CAAC;IAClC,0CAA0C;IAC1C,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;IAClC,2BAA2B;IAC3B,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,2BAA2B;IAC3B,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B;;;;OAIG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;IAC9B,0DAA0D;IAC1D,QAAQ,CAAC,cAAc,CAAC,EAAE,SAAS,aAAa,EAAE,CAAC;CACpD,CAAC;AAEF,8EAA8E;AAC9E,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,cAAc,EACtB,MAAM,EAAE,YAAY,GACnB,mBAAmB,CAWrB;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,mBAAmB,EAC7B,UAAU,EAAE,eAAe,GAC1B,mBAAmB,CAWrB"}
|
package/dist/config/schema.d.ts
CHANGED
|
@@ -4,13 +4,13 @@ export declare const ModelRefSchema: z.ZodObject<{
|
|
|
4
4
|
modelID: z.ZodString;
|
|
5
5
|
}, z.core.$strip>;
|
|
6
6
|
export declare const RouterModeSchema: z.ZodEnum<{
|
|
7
|
-
economy: "economy";
|
|
8
7
|
balanced: "balanced";
|
|
8
|
+
economy: "economy";
|
|
9
9
|
quality: "quality";
|
|
10
10
|
}>;
|
|
11
11
|
export declare const PrivacyModeSchema: z.ZodEnum<{
|
|
12
|
-
forceLocalOnSensitive: "forceLocalOnSensitive";
|
|
13
12
|
consentBeforeFrontier: "consentBeforeFrontier";
|
|
13
|
+
forceLocalOnSensitive: "forceLocalOnSensitive";
|
|
14
14
|
off: "off";
|
|
15
15
|
}>;
|
|
16
16
|
export declare const BaselineModeSchema: z.ZodEnum<{
|
|
@@ -22,9 +22,9 @@ export declare const BaselineModeSchema: z.ZodEnum<{
|
|
|
22
22
|
* observa sin ejecutar efectos; `active` habilita el executor. Default `off`.
|
|
23
23
|
*/
|
|
24
24
|
export declare const GraphModeSchema: z.ZodEnum<{
|
|
25
|
+
active: "active";
|
|
25
26
|
off: "off";
|
|
26
27
|
shadow: "shadow";
|
|
27
|
-
active: "active";
|
|
28
28
|
}>;
|
|
29
29
|
/**
|
|
30
30
|
* Sección `graph` de la config. Opcional: cuando falta, el resolver aplica
|
|
@@ -32,11 +32,12 @@ export declare const GraphModeSchema: z.ZodEnum<{
|
|
|
32
32
|
*/
|
|
33
33
|
export declare const GraphConfigSchema: z.ZodObject<{
|
|
34
34
|
mode: z.ZodDefault<z.ZodEnum<{
|
|
35
|
+
active: "active";
|
|
35
36
|
off: "off";
|
|
36
37
|
shadow: "shadow";
|
|
37
|
-
active: "active";
|
|
38
38
|
}>>;
|
|
39
39
|
killSwitch: z.ZodDefault<z.ZodBoolean>;
|
|
40
|
+
operatorApproval: z.ZodDefault<z.ZodBoolean>;
|
|
40
41
|
worktrees: z.ZodDefault<z.ZodObject<{
|
|
41
42
|
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
42
43
|
}, z.core.$strip>>;
|
|
@@ -80,16 +81,16 @@ export declare const StorageConfigSchema: z.ZodDefault<z.ZodObject<{
|
|
|
80
81
|
}, z.core.$strip>>;
|
|
81
82
|
export declare const LocalRuntimeSchema: z.ZodObject<{
|
|
82
83
|
id: z.ZodEnum<{
|
|
83
|
-
ollama: "ollama";
|
|
84
|
-
lmstudio: "lmstudio";
|
|
85
84
|
"foundry-local": "foundry-local";
|
|
85
|
+
lmstudio: "lmstudio";
|
|
86
|
+
ollama: "ollama";
|
|
86
87
|
}>;
|
|
87
88
|
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
88
89
|
baseURL: z.ZodOptional<z.ZodString>;
|
|
89
90
|
discovery: z.ZodOptional<z.ZodEnum<{
|
|
90
91
|
cli: "cli";
|
|
91
|
-
sdk: "sdk";
|
|
92
92
|
manual: "manual";
|
|
93
|
+
sdk: "sdk";
|
|
93
94
|
}>>;
|
|
94
95
|
defaultModel: z.ZodObject<{
|
|
95
96
|
providerID: z.ZodString;
|
|
@@ -218,8 +219,8 @@ export declare const OpenTeamConfigObjectSchema: z.ZodObject<{
|
|
|
218
219
|
}, z.core.$strip>>;
|
|
219
220
|
router: z.ZodDefault<z.ZodObject<{
|
|
220
221
|
mode: z.ZodDefault<z.ZodEnum<{
|
|
221
|
-
economy: "economy";
|
|
222
222
|
balanced: "balanced";
|
|
223
|
+
economy: "economy";
|
|
223
224
|
quality: "quality";
|
|
224
225
|
}>>;
|
|
225
226
|
localDefault: z.ZodDefault<z.ZodObject<{
|
|
@@ -233,16 +234,16 @@ export declare const OpenTeamConfigObjectSchema: z.ZodObject<{
|
|
|
233
234
|
local: z.ZodDefault<z.ZodObject<{
|
|
234
235
|
runtimes: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
235
236
|
id: z.ZodEnum<{
|
|
236
|
-
ollama: "ollama";
|
|
237
|
-
lmstudio: "lmstudio";
|
|
238
237
|
"foundry-local": "foundry-local";
|
|
238
|
+
lmstudio: "lmstudio";
|
|
239
|
+
ollama: "ollama";
|
|
239
240
|
}>;
|
|
240
241
|
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
241
242
|
baseURL: z.ZodOptional<z.ZodString>;
|
|
242
243
|
discovery: z.ZodOptional<z.ZodEnum<{
|
|
243
244
|
cli: "cli";
|
|
244
|
-
sdk: "sdk";
|
|
245
245
|
manual: "manual";
|
|
246
|
+
sdk: "sdk";
|
|
246
247
|
}>>;
|
|
247
248
|
defaultModel: z.ZodObject<{
|
|
248
249
|
providerID: z.ZodString;
|
|
@@ -257,8 +258,8 @@ export declare const OpenTeamConfigObjectSchema: z.ZodObject<{
|
|
|
257
258
|
hardStopOnBudgetExhaustion: z.ZodDefault<z.ZodBoolean>;
|
|
258
259
|
}, z.core.$strip>>;
|
|
259
260
|
privacyMode: z.ZodDefault<z.ZodEnum<{
|
|
260
|
-
forceLocalOnSensitive: "forceLocalOnSensitive";
|
|
261
261
|
consentBeforeFrontier: "consentBeforeFrontier";
|
|
262
|
+
forceLocalOnSensitive: "forceLocalOnSensitive";
|
|
262
263
|
off: "off";
|
|
263
264
|
}>>;
|
|
264
265
|
console: z.ZodDefault<z.ZodObject<{
|
|
@@ -330,11 +331,12 @@ export declare const OpenTeamConfigObjectSchema: z.ZodObject<{
|
|
|
330
331
|
}, z.core.$strip>>;
|
|
331
332
|
graph: z.ZodOptional<z.ZodObject<{
|
|
332
333
|
mode: z.ZodDefault<z.ZodEnum<{
|
|
334
|
+
active: "active";
|
|
333
335
|
off: "off";
|
|
334
336
|
shadow: "shadow";
|
|
335
|
-
active: "active";
|
|
336
337
|
}>>;
|
|
337
338
|
killSwitch: z.ZodDefault<z.ZodBoolean>;
|
|
339
|
+
operatorApproval: z.ZodDefault<z.ZodBoolean>;
|
|
338
340
|
worktrees: z.ZodDefault<z.ZodObject<{
|
|
339
341
|
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
340
342
|
}, z.core.$strip>>;
|
|
@@ -358,8 +360,8 @@ export declare const OpenTeamConfigSchema: z.ZodObject<{
|
|
|
358
360
|
}, z.core.$strip>>;
|
|
359
361
|
router: z.ZodDefault<z.ZodObject<{
|
|
360
362
|
mode: z.ZodDefault<z.ZodEnum<{
|
|
361
|
-
economy: "economy";
|
|
362
363
|
balanced: "balanced";
|
|
364
|
+
economy: "economy";
|
|
363
365
|
quality: "quality";
|
|
364
366
|
}>>;
|
|
365
367
|
localDefault: z.ZodDefault<z.ZodObject<{
|
|
@@ -373,16 +375,16 @@ export declare const OpenTeamConfigSchema: z.ZodObject<{
|
|
|
373
375
|
local: z.ZodDefault<z.ZodObject<{
|
|
374
376
|
runtimes: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
375
377
|
id: z.ZodEnum<{
|
|
376
|
-
ollama: "ollama";
|
|
377
|
-
lmstudio: "lmstudio";
|
|
378
378
|
"foundry-local": "foundry-local";
|
|
379
|
+
lmstudio: "lmstudio";
|
|
380
|
+
ollama: "ollama";
|
|
379
381
|
}>;
|
|
380
382
|
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
381
383
|
baseURL: z.ZodOptional<z.ZodString>;
|
|
382
384
|
discovery: z.ZodOptional<z.ZodEnum<{
|
|
383
385
|
cli: "cli";
|
|
384
|
-
sdk: "sdk";
|
|
385
386
|
manual: "manual";
|
|
387
|
+
sdk: "sdk";
|
|
386
388
|
}>>;
|
|
387
389
|
defaultModel: z.ZodObject<{
|
|
388
390
|
providerID: z.ZodString;
|
|
@@ -397,8 +399,8 @@ export declare const OpenTeamConfigSchema: z.ZodObject<{
|
|
|
397
399
|
hardStopOnBudgetExhaustion: z.ZodDefault<z.ZodBoolean>;
|
|
398
400
|
}, z.core.$strip>>;
|
|
399
401
|
privacyMode: z.ZodDefault<z.ZodEnum<{
|
|
400
|
-
forceLocalOnSensitive: "forceLocalOnSensitive";
|
|
401
402
|
consentBeforeFrontier: "consentBeforeFrontier";
|
|
403
|
+
forceLocalOnSensitive: "forceLocalOnSensitive";
|
|
402
404
|
off: "off";
|
|
403
405
|
}>>;
|
|
404
406
|
console: z.ZodDefault<z.ZodObject<{
|
|
@@ -470,11 +472,12 @@ export declare const OpenTeamConfigSchema: z.ZodObject<{
|
|
|
470
472
|
}, z.core.$strip>>;
|
|
471
473
|
graph: z.ZodOptional<z.ZodObject<{
|
|
472
474
|
mode: z.ZodDefault<z.ZodEnum<{
|
|
475
|
+
active: "active";
|
|
473
476
|
off: "off";
|
|
474
477
|
shadow: "shadow";
|
|
475
|
-
active: "active";
|
|
476
478
|
}>>;
|
|
477
479
|
killSwitch: z.ZodDefault<z.ZodBoolean>;
|
|
480
|
+
operatorApproval: z.ZodDefault<z.ZodBoolean>;
|
|
478
481
|
worktrees: z.ZodDefault<z.ZodObject<{
|
|
479
482
|
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
480
483
|
}, z.core.$strip>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,cAAc;;;iBAGzB,CAAC;AAEH,eAAO,MAAM,gBAAgB;;;;EAA6C,CAAC;AAC3E,eAAO,MAAM,iBAAiB;;;;EAI5B,CAAC;AACH,eAAO,MAAM,kBAAkB;;;EAA6B,CAAC;AAE7D;;;GAGG;AACH,eAAO,MAAM,eAAe;;;;EAAsC,CAAC;AAEnE;;;GAGG;AACH,eAAO,MAAM,iBAAiB
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,cAAc;;;iBAGzB,CAAC;AAEH,eAAO,MAAM,gBAAgB;;;;EAA6C,CAAC;AAC3E,eAAO,MAAM,iBAAiB;;;;EAI5B,CAAC;AACH,eAAO,MAAM,kBAAkB;;;EAA6B,CAAC;AAE7D;;;GAGG;AACH,eAAO,MAAM,eAAe;;;;EAAsC,CAAC;AAEnE;;;GAGG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;iBAyB5B,CAAC;AAEH,eAAO,MAAM,iBAAiB;;;EAAqC,CAAC;AAEpE,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;kBA8C5B,CAAC;AAEL;;GAEG;AAEH;;;;GAIG;AACH,eAAO,MAAM,mBAAmB;;;;;kBAW5B,CAAC;AAWL,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;iBAM7B,CAAC;AAEH;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB;;;EAA8B,CAAC;AAC7D,eAAO,MAAM,0BAA0B;;;EAGrC,CAAC;AACH,eAAO,MAAM,8BAA8B;;;EAA4B,CAAC;AAExE,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAkD7B,CAAC;AAEL;;;;GAIG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAE7B,CAAC;AAEH,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAgErC,CAAC;AAEH,gDAAgD;AAChD,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAA6B,CAAC;AAE/D,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AACtD,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAC1D,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAC5D,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AACxD,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAC5D,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAClE,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAC9D,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAChE,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAChE,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAC9D,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAExE;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,cAAc,GACrB,oBAAoB,CAEtB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../src/console/render.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAGV,qBAAqB,EACtB,MAAM,wBAAwB,CAAC;AAGhC,OAAO,KAAK,EAGV,YAAY,EAIb,MAAM,SAAS,CAAC;AASjB,mFAAmF;AACnF,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAOhD;AAyhBD;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,UAAU,EAAE,qBAAqB,GAAG,IAAI,GACvC,MAAM,CAwBR;
|
|
1
|
+
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../src/console/render.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAGV,qBAAqB,EACtB,MAAM,wBAAwB,CAAC;AAGhC,OAAO,KAAK,EAGV,YAAY,EAIb,MAAM,SAAS,CAAC;AASjB,mFAAmF;AACnF,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAOhD;AAyhBD;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,UAAU,EAAE,qBAAqB,GAAG,IAAI,GACvC,MAAM,CAwBR;AAwED,MAAM,MAAM,aAAa,GAAG;IAC1B,gDAAgD;IAChD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oEAAoE;IACpE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kEAAkE;IAClE,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,+DAA+D;IAC/D,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;;OAKG;IACH,SAAS,CAAC,EAAE;QACV,QAAQ,CAAC,UAAU,EAAE,qBAAqB,GAAG,IAAI,CAAC;KACnD,CAAC;IACF;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,YAAY,EACnB,OAAO,GAAE,aAAkB,GAC1B,MAAM,CAyDR"}
|
|
@@ -39,10 +39,33 @@ export declare function redactedRef(ref: ContextRef): {
|
|
|
39
39
|
sha256: string;
|
|
40
40
|
bytes: number;
|
|
41
41
|
};
|
|
42
|
+
/** Claves prohibidas por transportar potencialmente contenido crudo. */
|
|
43
|
+
export declare const FORBIDDEN_RAW_KEYS: ReadonlySet<string>;
|
|
42
44
|
/**
|
|
43
45
|
* Recorre una estructura y lanza `RedactionError` si encuentra alguna clave de
|
|
44
46
|
* contenido crudo. Guard barato para journal/snapshots/telemetría; no valida
|
|
45
47
|
* esquema, solo ausencia de campos crudos.
|
|
46
48
|
*/
|
|
47
49
|
export declare function assertReferenceOnly(value: unknown): void;
|
|
50
|
+
/** Result of a counting privacy scan. */
|
|
51
|
+
export type PrivacyScanResult = {
|
|
52
|
+
/** Number of top-level structures scanned (the denominator). */
|
|
53
|
+
readonly surfacesScanned: number;
|
|
54
|
+
/**
|
|
55
|
+
* Total forbidden-key occurrences across all surfaces. Zero means the
|
|
56
|
+
* scanner ran, examined the surfaces, and found nothing forbidden.
|
|
57
|
+
*/
|
|
58
|
+
readonly rawFindings: number;
|
|
59
|
+
};
|
|
60
|
+
/**
|
|
61
|
+
* Counting privacy scanner. Walks one or more structures and returns both the
|
|
62
|
+
* number of surfaces examined and the total forbidden-key findings, without
|
|
63
|
+
* throwing.
|
|
64
|
+
*
|
|
65
|
+
* **Surface definition:** one surface = one top-level value passed in the
|
|
66
|
+
* `surfaces` array. In soak context, this is the trace being scanned — one
|
|
67
|
+
* trace per observation. The definition is deliberately not inflatable: it
|
|
68
|
+
* counts logical units of work, not internal leaves.
|
|
69
|
+
*/
|
|
70
|
+
export declare function scanReferenceOnly(surfaces: readonly unknown[]): PrivacyScanResult;
|
|
48
71
|
//# sourceMappingURL=redaction.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"redaction.d.ts","sourceRoot":"","sources":["../../src/context/redaction.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAE1D;;;;;;;;;GASG;AAEH,mEAAmE;AACnE,qBAAa,cAAe,SAAQ,KAAK;IACvC,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAC7B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"redaction.d.ts","sourceRoot":"","sources":["../../src/context/redaction.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAE1D;;;;;;;;;GASG;AAEH,mEAAmE;AACnE,qBAAa,cAAe,SAAQ,KAAK;IACvC,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAC7B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IAErB,YAAY,GAAG,EAAE,MAAM,EAKtB;CACF;AAED,2DAA2D;AAC3D,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE/C;AAED,qEAAqE;AACrE,MAAM,MAAM,MAAM,GAAG;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,2EAA2E;AAC3E,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAK/C;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,GAAG,CAAC,EAAE,UAAU,GACf,aAAa,CAKf;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,UAAU,GAAG;IAC5C,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf,CAEA;AAED,wEAAwE;AACxE,eAAO,MAAM,kBAAkB,EAAE,WAAW,CAAC,MAAM,CAWjD,CAAC;AA+BH;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAIxD;AAED,yCAAyC;AACzC,MAAM,MAAM,iBAAiB,GAAG;IAC9B,gEAAgE;IAChE,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC;;;OAGG;IACH,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B,CAAC;AAEF;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,SAAS,OAAO,EAAE,GAC3B,iBAAiB,CASnB"}
|
package/dist/context/schema.d.ts
CHANGED
|
@@ -14,8 +14,8 @@ import { z } from "zod";
|
|
|
14
14
|
*/
|
|
15
15
|
/** Clase de privacidad de un artefacto o contrato de contexto. */
|
|
16
16
|
export declare const PrivacyClassSchema: z.ZodEnum<{
|
|
17
|
-
public: "public";
|
|
18
17
|
internal: "internal";
|
|
18
|
+
public: "public";
|
|
19
19
|
sensitive: "sensitive";
|
|
20
20
|
}>;
|
|
21
21
|
export type PrivacyClass = z.infer<typeof PrivacyClassSchema>;
|
|
@@ -74,8 +74,8 @@ export declare const ArtifactManifestSchema: z.ZodObject<{
|
|
|
74
74
|
version: z.ZodLiteral<1>;
|
|
75
75
|
taskID: z.ZodString;
|
|
76
76
|
privacyClass: z.ZodEnum<{
|
|
77
|
-
public: "public";
|
|
78
77
|
internal: "internal";
|
|
78
|
+
public: "public";
|
|
79
79
|
sensitive: "sensitive";
|
|
80
80
|
}>;
|
|
81
81
|
entries: z.ZodArray<z.ZodObject<{
|
|
@@ -105,8 +105,8 @@ export declare const NodeContextContractSchema: z.ZodObject<{
|
|
|
105
105
|
mediaType: z.ZodOptional<z.ZodString>;
|
|
106
106
|
}, z.core.$strict>>;
|
|
107
107
|
privacyClass: z.ZodEnum<{
|
|
108
|
-
public: "public";
|
|
109
108
|
internal: "internal";
|
|
109
|
+
public: "public";
|
|
110
110
|
sensitive: "sensitive";
|
|
111
111
|
}>;
|
|
112
112
|
maxInputTokens: z.ZodOptional<z.ZodNumber>;
|