@jmanuelcorral/openteam 0.2.1 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.opencode/command/openteam.md +2 -1
- package/.opencode/openteam.example.json +27 -8
- package/AGENTS.md +5 -2
- package/README.es.md +155 -59
- package/README.md +418 -62
- package/dist/capabilities/types.d.ts +3 -3
- package/dist/capabilities/types.d.ts.map +1 -1
- package/dist/classifier/localClassifier.d.ts +0 -2
- package/dist/classifier/localClassifier.d.ts.map +1 -1
- package/dist/cli/consoleServe.d.ts +30 -1
- package/dist/cli/consoleServe.d.ts.map +1 -1
- package/dist/cli/graphOperator.d.ts +22 -0
- package/dist/cli/graphOperator.d.ts.map +1 -0
- package/dist/cli/graphStatusSnapshot.d.ts +16 -0
- package/dist/cli/graphStatusSnapshot.d.ts.map +1 -0
- package/dist/cli/graphViewProvider.d.ts +30 -0
- package/dist/cli/graphViewProvider.d.ts.map +1 -0
- package/dist/cli/migrateAdapter.d.ts +12 -0
- package/dist/cli/migrateAdapter.d.ts.map +1 -0
- package/dist/cli/purgeAdapter.d.ts +10 -0
- package/dist/cli/purgeAdapter.d.ts.map +1 -0
- package/dist/cli/setupAdapters.d.ts.map +1 -1
- package/dist/cli.js +13480 -5176
- package/dist/commands/agents.d.ts +102 -2
- package/dist/commands/agents.d.ts.map +1 -1
- package/dist/commands/baseline.d.ts.map +1 -1
- package/dist/commands/clearCache.d.ts +23 -0
- package/dist/commands/clearCache.d.ts.map +1 -0
- package/dist/commands/dispatch.d.ts +197 -4
- package/dist/commands/dispatch.d.ts.map +1 -1
- package/dist/commands/doctor.d.ts +40 -0
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/frontierCatalog.d.ts +8 -14
- package/dist/commands/frontierCatalog.d.ts.map +1 -1
- package/dist/commands/graph.d.ts +0 -27
- package/dist/commands/graph.d.ts.map +1 -1
- package/dist/commands/local.d.ts.map +1 -1
- package/dist/commands/migrate.d.ts +11 -0
- package/dist/commands/migrate.d.ts.map +1 -0
- package/dist/commands/purge.d.ts +132 -0
- package/dist/commands/purge.d.ts.map +1 -0
- package/dist/commands/report.d.ts +1 -0
- package/dist/commands/report.d.ts.map +1 -1
- package/dist/commands/setup.d.ts +62 -5
- package/dist/commands/setup.d.ts.map +1 -1
- package/dist/config/errors.d.ts +10 -0
- package/dist/config/errors.d.ts.map +1 -0
- package/dist/config/legacyMigration.d.ts +82 -0
- package/dist/config/legacyMigration.d.ts.map +1 -0
- package/dist/config/legacyPaths.d.ts +105 -0
- package/dist/config/legacyPaths.d.ts.map +1 -0
- package/dist/config/load.d.ts.map +1 -1
- package/dist/config/opencode.d.ts +63 -0
- package/dist/config/opencode.d.ts.map +1 -0
- package/dist/config/persist.d.ts +8 -0
- package/dist/config/persist.d.ts.map +1 -1
- package/dist/config/resolve.d.ts +1 -1
- package/dist/config/resolve.d.ts.map +1 -1
- package/dist/config/runtime.d.ts +62 -0
- package/dist/config/runtime.d.ts.map +1 -0
- package/dist/config/schema.d.ts +145 -77
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/console/assets.d.ts +2 -2
- package/dist/console/assets.d.ts.map +1 -1
- package/dist/console/configView.d.ts +74 -0
- package/dist/console/configView.d.ts.map +1 -0
- package/dist/console/opencodeClient.d.ts +8 -6
- package/dist/console/opencodeClient.d.ts.map +1 -1
- package/dist/console/protocol.d.ts +30 -6
- package/dist/console/protocol.d.ts.map +1 -1
- package/dist/console/render.d.ts +30 -1
- package/dist/console/render.d.ts.map +1 -1
- package/dist/console/types.d.ts +1 -1
- package/dist/console/types.d.ts.map +1 -1
- package/dist/context/redaction.d.ts +27 -19
- package/dist/context/redaction.d.ts.map +1 -1
- package/dist/context/schema.d.ts +26 -26
- package/dist/context/schema.d.ts.map +1 -1
- package/dist/context/types.d.ts +3 -3
- package/dist/contract/opencode.d.ts +39 -23
- package/dist/contract/opencode.d.ts.map +1 -1
- package/dist/graph/certificate.d.ts +37 -16
- package/dist/graph/certificate.d.ts.map +1 -1
- package/dist/graph/langgraph/adapter.d.ts +56 -0
- package/dist/graph/langgraph/adapter.d.ts.map +1 -0
- package/dist/graph/langgraph/certification.d.ts +64 -0
- package/dist/graph/langgraph/certification.d.ts.map +1 -0
- package/dist/graph/langgraph/checkpointReplay.d.ts +49 -0
- package/dist/graph/langgraph/checkpointReplay.d.ts.map +1 -0
- package/dist/graph/langgraph/checkpointer.d.ts +49 -0
- package/dist/graph/langgraph/checkpointer.d.ts.map +1 -0
- package/dist/graph/langgraph/engine.d.ts +34 -0
- package/dist/graph/langgraph/engine.d.ts.map +1 -0
- package/dist/graph/langgraph/graphModel.d.ts +37 -0
- package/dist/graph/langgraph/graphModel.d.ts.map +1 -0
- package/dist/graph/langgraph/reducer.d.ts +18 -0
- package/dist/graph/langgraph/reducer.d.ts.map +1 -0
- package/dist/graph/langgraph/retirement.d.ts +59 -0
- package/dist/graph/langgraph/retirement.d.ts.map +1 -0
- package/dist/graph/langgraph/types.d.ts +65 -0
- package/dist/graph/langgraph/types.d.ts.map +1 -0
- package/dist/graph/privacyPolicy.d.ts +7 -0
- package/dist/graph/privacyPolicy.d.ts.map +1 -1
- package/dist/graph/soakLedger.d.ts.map +1 -1
- package/dist/graph/types.d.ts +0 -2
- package/dist/graph/types.d.ts.map +1 -1
- package/dist/index.d.ts +48 -16
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11596 -4180
- package/dist/local/cacheAdapter.d.ts +7 -0
- package/dist/local/cacheAdapter.d.ts.map +1 -0
- package/dist/local/concurrency.d.ts +52 -0
- package/dist/local/concurrency.d.ts.map +1 -0
- package/dist/local/embeddings.d.ts +10 -10
- package/dist/local/embeddings.d.ts.map +1 -1
- package/dist/local/extractClient.d.ts +13 -10
- package/dist/local/extractClient.d.ts.map +1 -1
- package/dist/local/lemonade.d.ts +4 -0
- package/dist/local/lemonade.d.ts.map +1 -0
- package/dist/local/registry.d.ts +16 -0
- package/dist/local/registry.d.ts.map +1 -1
- package/dist/local/types.d.ts +1 -1
- package/dist/local/types.d.ts.map +1 -1
- package/dist/mcp/semanticRecall.d.ts +18 -1
- package/dist/mcp/semanticRecall.d.ts.map +1 -1
- package/dist/mcp/server.d.ts +41 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/memory/embedText.d.ts +4 -0
- package/dist/memory/embedText.d.ts.map +1 -0
- package/dist/memory/extract.d.ts +33 -18
- package/dist/memory/extract.d.ts.map +1 -1
- package/dist/memory/fold.d.ts +3 -2
- package/dist/memory/fold.d.ts.map +1 -1
- package/dist/memory/index.d.ts +1 -0
- package/dist/memory/index.d.ts.map +1 -1
- package/dist/memory/inject.d.ts.map +1 -1
- package/dist/memory/log.d.ts +15 -4
- package/dist/memory/log.d.ts.map +1 -1
- package/dist/memory/merge.d.ts +18 -1
- package/dist/memory/merge.d.ts.map +1 -1
- package/dist/memory/traverse.d.ts +80 -0
- package/dist/memory/traverse.d.ts.map +1 -0
- package/dist/memory/types.d.ts +53 -7
- package/dist/memory/types.d.ts.map +1 -1
- package/dist/messages/commands.d.ts +84 -0
- package/dist/messages/commands.d.ts.map +1 -0
- package/dist/messages/index.d.ts +46 -0
- package/dist/messages/index.d.ts.map +1 -0
- package/dist/opencodeArtifacts/index.d.ts +33 -0
- package/dist/opencodeArtifacts/index.d.ts.map +1 -0
- package/dist/opencodeArtifacts/orchestratorAgent.d.ts +29 -0
- package/dist/opencodeArtifacts/orchestratorAgent.d.ts.map +1 -0
- package/dist/opencodeArtifacts/slashCommand.d.ts +31 -0
- package/dist/opencodeArtifacts/slashCommand.d.ts.map +1 -0
- package/dist/orchestrator/coordinator.d.ts +188 -2
- package/dist/orchestrator/coordinator.d.ts.map +1 -1
- package/dist/orchestrator/graphCancellation.d.ts +40 -37
- package/dist/orchestrator/graphCancellation.d.ts.map +1 -1
- package/dist/orchestrator/graphEffects.d.ts +24 -24
- package/dist/orchestrator/graphEffects.d.ts.map +1 -1
- package/dist/orchestrator/graphFacade.d.ts +16 -16
- package/dist/orchestrator/graphFacade.d.ts.map +1 -1
- package/dist/orchestrator/graphIngress.d.ts +49 -45
- package/dist/orchestrator/graphIngress.d.ts.map +1 -1
- package/dist/orchestrator/graphReview.d.ts +24 -23
- package/dist/orchestrator/graphReview.d.ts.map +1 -1
- package/dist/orchestrator/graphRuntime.d.ts +27 -26
- package/dist/orchestrator/graphRuntime.d.ts.map +1 -1
- package/dist/orchestrator/graphShadow.d.ts +70 -69
- package/dist/orchestrator/graphShadow.d.ts.map +1 -1
- package/dist/orchestrator/opencodeSessionAdapter.d.ts +25 -25
- package/dist/orchestrator/opencodeSessionAdapter.d.ts.map +1 -1
- package/dist/orchestrator/permissions.d.ts.map +1 -1
- package/dist/orchestrator/ralphLoop.d.ts +57 -0
- package/dist/orchestrator/ralphLoop.d.ts.map +1 -0
- package/dist/orchestrator/roles.d.ts +50 -8
- package/dist/orchestrator/roles.d.ts.map +1 -1
- package/dist/orchestrator/roster.d.ts +103 -0
- package/dist/orchestrator/roster.d.ts.map +1 -0
- package/dist/orchestrator/rosterPersistence.d.ts +22 -0
- package/dist/orchestrator/rosterPersistence.d.ts.map +1 -0
- package/dist/orchestrator/runtimeSelection.d.ts +46 -0
- package/dist/orchestrator/runtimeSelection.d.ts.map +1 -0
- package/dist/orchestrator/sddCompiler.d.ts +34 -34
- package/dist/orchestrator/sddCompiler.d.ts.map +1 -1
- package/dist/orchestrator/sessionReconciler.d.ts +31 -29
- package/dist/orchestrator/sessionReconciler.d.ts.map +1 -1
- package/dist/orchestrator/shadowComparator.d.ts +23 -23
- package/dist/orchestrator/shadowComparator.d.ts.map +1 -1
- package/dist/orchestrator/subsessions.d.ts.map +1 -1
- package/dist/orchestrator/worktreeAdapter.d.ts +12 -12
- package/dist/orchestrator/worktreeAdapter.d.ts.map +1 -1
- package/dist/orchestrator/worktreeDispatch.d.ts +34 -34
- package/dist/orchestrator/worktreeDispatch.d.ts.map +1 -1
- package/dist/orchestrator/worktreeReconciler.d.ts +37 -36
- package/dist/orchestrator/worktreeReconciler.d.ts.map +1 -1
- package/dist/plugin/availability.d.ts.map +1 -1
- package/dist/plugin/capture.d.ts +12 -12
- package/dist/plugin/capture.d.ts.map +1 -1
- package/dist/plugin/commandTool.d.ts +1 -1
- package/dist/plugin/commandTool.d.ts.map +1 -1
- package/dist/plugin/graphShadowIngress.d.ts +50 -48
- package/dist/plugin/graphShadowIngress.d.ts.map +1 -1
- package/dist/plugin/graphTool.d.ts +25 -23
- package/dist/plugin/graphTool.d.ts.map +1 -1
- package/dist/plugin/hooks.d.ts +10 -10
- package/dist/plugin/hooks.d.ts.map +1 -1
- package/dist/plugin/legacyRunProducer.d.ts +22 -22
- package/dist/plugin/legacyRunProducer.d.ts.map +1 -1
- package/dist/plugin/memoryInject.d.ts +6 -6
- package/dist/plugin/memoryInject.d.ts.map +1 -1
- package/dist/plugin/memoryTool.d.ts +36 -0
- package/dist/plugin/memoryTool.d.ts.map +1 -0
- package/dist/plugin/orchestrateTool.d.ts +230 -0
- package/dist/plugin/orchestrateTool.d.ts.map +1 -0
- package/dist/plugin/reportRunSchema.d.ts +8 -8
- package/dist/plugin/reportRunSchema.d.ts.map +1 -1
- package/dist/plugin/sessionTracker.d.ts +15 -15
- package/dist/plugin/sessionTracker.d.ts.map +1 -1
- package/dist/plugin/shadowPipeline.d.ts +2 -1
- package/dist/plugin/shadowPipeline.d.ts.map +1 -1
- package/dist/plugin/soakObserver.d.ts +18 -11
- package/dist/plugin/soakObserver.d.ts.map +1 -1
- package/dist/plugin/toolcalls.d.ts +3 -3
- package/dist/router/chooseModel.d.ts.map +1 -1
- package/dist/router/frontierBaseline.d.ts +3 -3
- package/dist/router/modelSelection.d.ts +12 -4
- package/dist/router/modelSelection.d.ts.map +1 -1
- package/dist/router/types.d.ts +6 -1
- package/dist/router/types.d.ts.map +1 -1
- package/dist/storage/graph/snapshot.d.ts.map +1 -1
- package/dist/storage/graph/soakRecorder.d.ts +14 -1
- package/dist/storage/graph/soakRecorder.d.ts.map +1 -1
- package/dist/storage/graph/workspaceLease.d.ts +1 -1
- package/dist/storage/graph/workspaceLease.d.ts.map +1 -1
- package/dist/storage/graph/worktreeRegistry.d.ts +1 -1
- package/dist/storage/graph/worktreeRegistry.d.ts.map +1 -1
- package/dist/storage/httpStorageProvider.d.ts +2 -2
- package/dist/storage/index/bunSqlite.d.ts +1 -0
- package/dist/storage/index/bunSqlite.d.ts.map +1 -1
- package/dist/storage/index/memoryConsolidate.d.ts +2 -0
- package/dist/storage/index/memoryConsolidate.d.ts.map +1 -1
- package/dist/storage/index/memoryEmbeddings.d.ts +51 -0
- package/dist/storage/index/memoryEmbeddings.d.ts.map +1 -0
- package/dist/storage/index/memoryIndex.d.ts +36 -4
- package/dist/storage/index/memoryIndex.d.ts.map +1 -1
- package/dist/storage/index/memoryRecall.d.ts +1 -1
- package/dist/storage/index/memoryRecall.d.ts.map +1 -1
- package/dist/storage/index/memoryRuntime.d.ts +2 -0
- package/dist/storage/index/memoryRuntime.d.ts.map +1 -1
- package/dist/storage/index/sqliteIndex.d.ts +18 -1
- package/dist/storage/index/sqliteIndex.d.ts.map +1 -1
- package/dist/storage/path.d.ts.map +1 -1
- package/dist/telemetry/aggregate.d.ts +12 -12
- package/dist/telemetry/aggregate.d.ts.map +1 -1
- package/dist/telemetry/cost.d.ts.map +1 -1
- package/dist/telemetry/decisions.d.ts +11 -11
- package/dist/telemetry/decisions.d.ts.map +1 -1
- package/dist/telemetry/eventLog.d.ts +41 -25
- package/dist/telemetry/eventLog.d.ts.map +1 -1
- package/dist/telemetry/events.d.ts +79 -34
- package/dist/telemetry/events.d.ts.map +1 -1
- package/dist/telemetry/fanout.d.ts +18 -0
- package/dist/telemetry/fanout.d.ts.map +1 -0
- package/dist/telemetry/graphProjection.d.ts +12 -12
- package/dist/telemetry/graphProjection.d.ts.map +1 -1
- package/dist/telemetry/graphRuntimeHealth.d.ts +26 -26
- package/dist/telemetry/graphRuntimeHealth.d.ts.map +1 -1
- package/dist/telemetry/graphView.d.ts +20 -20
- package/dist/telemetry/graphView.d.ts.map +1 -1
- package/dist/telemetry/otel.d.ts +86 -0
- package/dist/telemetry/otel.d.ts.map +1 -0
- package/dist/telemetry/otelConfig.d.ts +128 -0
- package/dist/telemetry/otelConfig.d.ts.map +1 -0
- package/dist/telemetry/otelExporter.d.ts +7 -0
- package/dist/telemetry/otelExporter.d.ts.map +1 -0
- package/dist/telemetry/read.d.ts +18 -4
- package/dist/telemetry/read.d.ts.map +1 -1
- package/dist/telemetry/types.d.ts +3 -2
- package/dist/telemetry/types.d.ts.map +1 -1
- package/dist/version.d.ts +3 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/web/configApi.d.ts +154 -0
- package/dist/web/configApi.d.ts.map +1 -0
- package/dist/web/configRoute.d.ts +57 -0
- package/dist/web/configRoute.d.ts.map +1 -0
- package/dist/web/console.d.ts +8 -0
- package/dist/web/console.d.ts.map +1 -1
- package/dist/web/paths.d.ts +4 -3
- package/dist/web/paths.d.ts.map +1 -1
- package/dist/web/server.d.ts +30 -1
- package/dist/web/server.d.ts.map +1 -1
- package/dist/web/start.d.ts +15 -0
- package/dist/web/start.d.ts.map +1 -1
- package/dist/web/storageRoute.d.ts +2 -2
- package/package.json +13 -7
- package/dist/cli/tunnel.d.ts +0 -89
- package/dist/cli/tunnel.d.ts.map +0 -1
- package/dist/commands/orchestratorAgent.d.ts +0 -30
- package/dist/commands/orchestratorAgent.d.ts.map +0 -1
- package/dist/commands/slashCommand.d.ts +0 -39
- package/dist/commands/slashCommand.d.ts.map +0 -1
- package/dist/orchestrator/ledger.d.ts +0 -28
- package/dist/orchestrator/ledger.d.ts.map +0 -1
- package/dist/storage/graph/importLegacy.d.ts +0 -62
- package/dist/storage/graph/importLegacy.d.ts.map +0 -1
- package/dist/storage/graph/migrateLegacyBriefs.d.ts +0 -32
- package/dist/storage/graph/migrateLegacyBriefs.d.ts.map +0 -1
- package/dist/storage/graph/migration.d.ts +0 -91
- package/dist/storage/graph/migration.d.ts.map +0 -1
- package/dist/storage/graph/projections.d.ts +0 -31
- package/dist/storage/graph/projections.d.ts.map +0 -1
|
@@ -1,10 +1,14 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
1
2
|
import type { BudgetState } from "../capabilities/budget";
|
|
2
3
|
import type { ModelCapabilityProfile } from "../capabilities/types";
|
|
3
4
|
import type { OpenTeamConfig } from "../config/schema";
|
|
5
|
+
import type { RuntimeConcurrencyLimiter } from "../local/concurrency";
|
|
6
|
+
import type { LocalRuntimeId } from "../local/types";
|
|
4
7
|
import type { AvailableModel, RoutingDecision, TaskSignals } from "../router/types";
|
|
5
8
|
import { type EventSink } from "../telemetry/eventLog";
|
|
6
9
|
import { type MeetingEvent, type RouteEvent } from "../telemetry/events";
|
|
7
10
|
import type { CostRecord } from "../telemetry/types";
|
|
11
|
+
import { type AgentRoleProfile } from "./roles";
|
|
8
12
|
import { type OpencodeSessionClient, type SubsessionResult } from "./subsessions";
|
|
9
13
|
export type RoleTaskInput = {
|
|
10
14
|
roleID: string;
|
|
@@ -18,8 +22,18 @@ export type RoleTaskInput = {
|
|
|
18
22
|
title?: string;
|
|
19
23
|
systemPrompt?: string;
|
|
20
24
|
directory?: string;
|
|
25
|
+
/**
|
|
26
|
+
* Dispatch alias override for the roleID/agentName split (#172, W3-S02). When a
|
|
27
|
+
* roster themes a role (e.g. roleID `scribe` → agentName `gandalf`), routing
|
|
28
|
+
* still keys on `roleID` but opencode must dispatch to the themed `agentName`.
|
|
29
|
+
* When set, it wins over the role profile's `opencodeAgent`; when absent, the
|
|
30
|
+
* profile's `opencodeAgent` is used exactly as before.
|
|
31
|
+
*/
|
|
32
|
+
agentOverride?: string;
|
|
21
33
|
/** Correlación opcional con una tarea del loop SDD/backlog (Fase D). */
|
|
22
34
|
taskID?: string;
|
|
35
|
+
/** Role IDs this task depends on. Dependents only run after dependencies succeed. */
|
|
36
|
+
dependsOn?: readonly string[];
|
|
23
37
|
};
|
|
24
38
|
export type CoordinatorDeps = {
|
|
25
39
|
client: OpencodeSessionClient;
|
|
@@ -27,6 +41,58 @@ export type CoordinatorDeps = {
|
|
|
27
41
|
now: () => number;
|
|
28
42
|
newDecisionID: () => string;
|
|
29
43
|
timeoutMs?: number;
|
|
44
|
+
/** Optional warn sink; defaults to `console.warn`. Injectable for tests. */
|
|
45
|
+
warn?: (message?: unknown) => void;
|
|
46
|
+
/**
|
|
47
|
+
* Caller-owned Set for once-per-roleID dedup of `warnUnknownRole`. Production
|
|
48
|
+
* callers pass a long-lived Set (one per plugin instance) so the warning is
|
|
49
|
+
* emitted at most once per session. Test callers pass `new Set()` per case
|
|
50
|
+
* for full isolation. When absent, every call to `warnUnknownRole` emits.
|
|
51
|
+
*/
|
|
52
|
+
warnedRoles?: Set<string>;
|
|
53
|
+
/**
|
|
54
|
+
* Reachability probe for local runtimes (#143). A REQUIRED injected I/O port —
|
|
55
|
+
* probing lives in `src/local/**`; the coordinator receives only the boolean
|
|
56
|
+
* result, so this module stays I/O-free. Consulted ONLY for roles that carry
|
|
57
|
+
* `requiresLocalRuntime === true`; returns true when at least one local runtime
|
|
58
|
+
* is reachable, treating a configured-but-unreachable runtime as absent.
|
|
59
|
+
*
|
|
60
|
+
* Deliberately required, with NO fallback. A prohibition must never fail open:
|
|
61
|
+
* an enabled-but-unreachable runtime (e.g. a stopped daemon) is the very case
|
|
62
|
+
* #143 exists to catch, and an `enabled`-flag fallback would pass the gate for
|
|
63
|
+
* it. Making the port mandatory also turns a missing composition-root wiring
|
|
64
|
+
* into a compile error, so the gate cannot be silently bypassed by dropping the
|
|
65
|
+
* injection.
|
|
66
|
+
*/
|
|
67
|
+
localRuntimeReachable: () => boolean | Promise<boolean>;
|
|
68
|
+
/**
|
|
69
|
+
* Optional per-runtime reachability probe (#144). Returns the set of local
|
|
70
|
+
* runtime ids currently reachable, so the dispatcher can fail over across the
|
|
71
|
+
* ordered list a role declares (`localRuntimes`): an unreachable runtime is
|
|
72
|
+
* absent from the set and is skipped in favour of the next listed one.
|
|
73
|
+
*
|
|
74
|
+
* Injected I/O port, like `localRuntimeReachable` — probing lives in
|
|
75
|
+
* `src/local/**`. Optional so existing callers (and the many test construction
|
|
76
|
+
* sites) need no change and keep the pre-#144 boolean-only behaviour; when it
|
|
77
|
+
* is absent the coordinator falls back to `localRuntimeReachable` and roles
|
|
78
|
+
* without a list are unaffected. When present alongside a role that declares a
|
|
79
|
+
* list, it is the single probe consulted for the batch, and `any reachable` is
|
|
80
|
+
* derived from it — the two ports are never both probed for one batch.
|
|
81
|
+
*/
|
|
82
|
+
reachableRuntimeIds?: () => ReadonlySet<LocalRuntimeId> | Promise<ReadonlySet<LocalRuntimeId>>;
|
|
83
|
+
/**
|
|
84
|
+
* Optional per-runtime concurrency limiter (#144). Caps concurrent generations
|
|
85
|
+
* per runtime to its configured slot count and QUEUES excess work rather than
|
|
86
|
+
* dropping it or spilling it to another runtime. Optional so existing callers
|
|
87
|
+
* need no change; when absent, no cap is enforced (pre-#144 behaviour).
|
|
88
|
+
*
|
|
89
|
+
* The coordinator takes a slot with the synchronous `tryAcquire` on the happy
|
|
90
|
+
* path — adding no `await` before dispatch, so concurrent telemetry emission
|
|
91
|
+
* order within a wave is unperturbed — and only awaits `acquire` when the
|
|
92
|
+
* runtime is saturated. A task holds its slot for the whole subsession and is
|
|
93
|
+
* released in a `finally`, so it stays pinned to its runtime for its duration.
|
|
94
|
+
*/
|
|
95
|
+
runtimeLimiter?: RuntimeConcurrencyLimiter;
|
|
30
96
|
};
|
|
31
97
|
export type CorrelatedCostRecord = CostRecord & {
|
|
32
98
|
decisionID: string;
|
|
@@ -42,10 +108,118 @@ export type RoleTaskResult = {
|
|
|
42
108
|
subsession: SubsessionResult;
|
|
43
109
|
record: CorrelatedCostRecord;
|
|
44
110
|
};
|
|
111
|
+
/**
|
|
112
|
+
* Emits an observable warning the first time an unknown roleID is encountered
|
|
113
|
+
* within a given `warnedRoles` Set. Callers own the Set and its lifetime:
|
|
114
|
+
* production callers pass a long-lived Set (no repeat logs); test callers pass
|
|
115
|
+
* a fresh `new Set()` per case (full isolation). When `warnedRoles` is not
|
|
116
|
+
* provided the warning is emitted unconditionally on every call.
|
|
117
|
+
*
|
|
118
|
+
* Follows the `warn*` convention used throughout the codebase
|
|
119
|
+
* (see `warnInertPrivacySetting`, `warnCostRecordRejections`).
|
|
120
|
+
*/
|
|
121
|
+
export declare function warnUnknownRole(roleID: string, warn?: (message?: unknown) => void, warnedRoles?: Set<string>): void;
|
|
122
|
+
/**
|
|
123
|
+
* Actionable, English pre-dispatch failure for a role that requires a local
|
|
124
|
+
* runtime when none is reachable (#143). Names the role, states the hard
|
|
125
|
+
* requirement, lists the three supported local runtimes a user typically forgot
|
|
126
|
+
* to start, and points at `openteam doctor`. Deliberately not a generic provider
|
|
127
|
+
* error: a forgotten daemon is the overwhelmingly likely cause.
|
|
128
|
+
*/
|
|
129
|
+
export declare function mandatoryLocalRuntimeMessage(roleID: string): string;
|
|
130
|
+
/**
|
|
131
|
+
* Enforces the mandatory-local requirement (#143) BEFORE any model dispatch.
|
|
132
|
+
* For a role with `requiresLocalRuntime === true`, refuses the request when no
|
|
133
|
+
* local runtime is reachable — it never falls through to frontier. This does not
|
|
134
|
+
* overturn the 2026-08-26 fallback ruling: that ruling preserves explicit
|
|
135
|
+
* prohibitions, and this is one such prohibition, carried per role.
|
|
136
|
+
*
|
|
137
|
+
* Reachability is resolved ONCE per batch by `resolveLocalRuntimeReachable` and
|
|
138
|
+
* passed in as data, so this check is synchronous and adds no `await` inside a
|
|
139
|
+
* concurrent wave (telemetry emission order is unperturbed). There is
|
|
140
|
+
* deliberately no fallback: a prohibition must fail closed, so anything other
|
|
141
|
+
* than an explicit `true` refuses the request.
|
|
142
|
+
*/
|
|
143
|
+
export declare function assertLocalRuntimeForRole(role: AgentRoleProfile, roleID: string, reachable: boolean | undefined): void;
|
|
144
|
+
/**
|
|
145
|
+
* Reachability resolved once for a batch (#143/#144). `any` is whether at least
|
|
146
|
+
* one local runtime is reachable (the #143 boolean signal); `set`, when present,
|
|
147
|
+
* is the per-runtime reachability used to fail over across a role's ordered list
|
|
148
|
+
* and to select which runtime a task pins to. `set` is `undefined` when the
|
|
149
|
+
* per-runtime port is not wired or the batch has no role that declares a list —
|
|
150
|
+
* in which case only the boolean path is used, preserving pre-#144 behaviour.
|
|
151
|
+
*/
|
|
152
|
+
export type BatchReachability = {
|
|
153
|
+
readonly any: boolean | undefined;
|
|
154
|
+
readonly set: ReadonlySet<LocalRuntimeId> | undefined;
|
|
155
|
+
};
|
|
156
|
+
/**
|
|
157
|
+
* Classifies a raw failure reason into a bounded, non-free-form code for
|
|
158
|
+
* persisted telemetry. The raw `failureReason` from `errorReason()` in
|
|
159
|
+
* `subsessions.ts` can contain SDK error messages that echo request content
|
|
160
|
+
* (provider content-filter rejections, validation errors quoting the payload).
|
|
161
|
+
* Persisting those verbatim violates the project's telemetry policy: "auditable
|
|
162
|
+
* JSONL with a hashed prompt by default; do not store sensitive prompts."
|
|
163
|
+
*
|
|
164
|
+
* The classified code preserves the debugging signal that actually gets
|
|
165
|
+
* aggregated (timeout vs. rejection vs. missing session) while carrying no
|
|
166
|
+
* payload. The raw string remains available in-memory via
|
|
167
|
+
* `CorrelatedCostRecord.failureReason` for the tool response.
|
|
168
|
+
*
|
|
169
|
+
* Pure: no I/O, clock, random, or env.
|
|
170
|
+
*/
|
|
171
|
+
/**
|
|
172
|
+
* Classifies a raw failure reason into a bounded, non-free-form code for
|
|
173
|
+
* persisted telemetry AND the console failure viewer (P11c, see #195). The raw
|
|
174
|
+
* `failureReason` from `errorReason()` in `subsessions.ts` can contain SDK error
|
|
175
|
+
* messages that echo request content (provider content-filter rejections,
|
|
176
|
+
* validation errors quoting the payload). Persisting or rendering those verbatim
|
|
177
|
+
* violates the project's telemetry policy: "auditable JSONL with a hashed prompt
|
|
178
|
+
* by default; do not store sensitive prompts."
|
|
179
|
+
*
|
|
180
|
+
* The classified code preserves the debugging signal that actually gets
|
|
181
|
+
* aggregated (timeout vs. auth vs. rate-limit vs. rejection vs. missing session)
|
|
182
|
+
* while carrying no payload. The raw string remains available in-memory via
|
|
183
|
+
* `CorrelatedCostRecord.failureReason` for the tool response.
|
|
184
|
+
*
|
|
185
|
+
* Pure: no I/O, clock, random, or env.
|
|
186
|
+
*/
|
|
187
|
+
export declare const TelemetryFailureClassSchema: z.ZodEnum<{
|
|
188
|
+
"create-no-id": "create-no-id";
|
|
189
|
+
"create-rejected": "create-rejected";
|
|
190
|
+
"prompt-auth": "prompt-auth";
|
|
191
|
+
"prompt-connection": "prompt-connection";
|
|
192
|
+
"prompt-content-filter": "prompt-content-filter";
|
|
193
|
+
"prompt-context-length": "prompt-context-length";
|
|
194
|
+
"prompt-rate-limited": "prompt-rate-limited";
|
|
195
|
+
"prompt-rejected": "prompt-rejected";
|
|
196
|
+
"prompt-server": "prompt-server";
|
|
197
|
+
"prompt-timeout": "prompt-timeout";
|
|
198
|
+
"prompt-validation": "prompt-validation";
|
|
199
|
+
unknown: "unknown";
|
|
200
|
+
}>;
|
|
201
|
+
export type TelemetryFailureClass = z.infer<typeof TelemetryFailureClassSchema>;
|
|
202
|
+
export declare function classifyFailureForTelemetry(failureReason: string, failureStage: string | undefined): TelemetryFailureClass;
|
|
203
|
+
/**
|
|
204
|
+
* Console-facing classifier for an opencode `session.error` frame (P11c, see
|
|
205
|
+
* #195). The console failure viewer currently renders `error.message` verbatim;
|
|
206
|
+
* this maps the frame to a bounded {@link TelemetryFailureClass} so the viewer can
|
|
207
|
+
* render a class instead of a free-form provider string. Total and content-free:
|
|
208
|
+
* a frame with no recognised cause — or no message at all — maps to `unknown`, and
|
|
209
|
+
* the raw message is never returned.
|
|
210
|
+
*/
|
|
211
|
+
export declare function classifyOpencodeSessionError(error: {
|
|
212
|
+
readonly name?: string | undefined;
|
|
213
|
+
readonly message?: string | undefined;
|
|
214
|
+
} | undefined): TelemetryFailureClass;
|
|
45
215
|
/**
|
|
46
216
|
* Mapea un `CorrelatedCostRecord` a un `route` event preservando la correlación
|
|
47
|
-
* (decisionID/agent/success/batchID/
|
|
217
|
+
* (decisionID/agent/success/batchID/failureStage) que el sink de
|
|
48
218
|
* `CostRecord` legacy descartaba. Puro.
|
|
219
|
+
*
|
|
220
|
+
* `failureReason` is classified into a bounded code via
|
|
221
|
+
* `classifyFailureForTelemetry` rather than copied raw — the raw string may
|
|
222
|
+
* contain SDK error messages that echo request content.
|
|
49
223
|
*/
|
|
50
224
|
export declare function correlatedCostRecordToRouteEvent(record: CorrelatedCostRecord): RouteEvent;
|
|
51
225
|
/**
|
|
@@ -54,5 +228,17 @@ export declare function correlatedCostRecordToRouteEvent(record: CorrelatedCostR
|
|
|
54
228
|
*/
|
|
55
229
|
export declare function buildMeetingEvent(inputs: readonly RoleTaskInput[], batchID: string, decisionIDs: readonly string[], ts: number): MeetingEvent | undefined;
|
|
56
230
|
export declare function runRoleTask(input: RoleTaskInput, deps: CoordinatorDeps): Promise<RoleTaskResult>;
|
|
57
|
-
export
|
|
231
|
+
export type RoleBatchResult = {
|
|
232
|
+
readonly batchID: string;
|
|
233
|
+
readonly results: RoleTaskResult[];
|
|
234
|
+
/** Role IDs that were not executed because a dependency failed or was cancelled. */
|
|
235
|
+
readonly cancelled: readonly string[];
|
|
236
|
+
};
|
|
237
|
+
/**
|
|
238
|
+
* Computes topological waves from inputs: each wave contains roles whose
|
|
239
|
+
* dependencies all appear in earlier waves. Roles with no `dependsOn` are in
|
|
240
|
+
* wave 0. Pure and deterministic: same inputs produce the same waves.
|
|
241
|
+
*/
|
|
242
|
+
export declare function topologicalWaves(inputs: readonly RoleTaskInput[]): RoleTaskInput[][];
|
|
243
|
+
export declare function runRoleTasks(inputs: readonly RoleTaskInput[], deps: CoordinatorDeps): Promise<RoleBatchResult>;
|
|
58
244
|
//# sourceMappingURL=coordinator.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"coordinator.d.ts","sourceRoot":"","sources":["../../src/orchestrator/coordinator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAE1D,OAAO,KAAK,EAEV,sBAAsB,EACvB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"coordinator.d.ts","sourceRoot":"","sources":["../../src/orchestrator/coordinator.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,71 +1,74 @@
|
|
|
1
1
|
import type { GraphState, NodeStatus, RunStatus } from "../graph/types";
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
3
|
+
* Pure policies for cancellation, timeout, and late completion (GE-034).
|
|
4
4
|
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
5
|
+
* They decide, without I/O or a clock, what to do in three Graph runtime
|
|
6
|
+
* situations. The runtime injects the already observed evidence (node state,
|
|
7
|
+
* whether the abort was already requested, whether the grace window expired)
|
|
8
|
+
* and applies the result:
|
|
8
9
|
*
|
|
9
|
-
* - `timeoutAction`:
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
* - `planCancellation`:
|
|
13
|
-
* `running` (
|
|
14
|
-
* `running
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
10
|
+
* - `timeoutAction`: on a timeout, request abort **first** and only reconcile
|
|
11
|
+
* after exhausting a bounded grace window; a non-`running` node has nothing to
|
|
12
|
+
* expire.
|
|
13
|
+
* - `planCancellation`: cancelling an in-progress run cancels its `pending` and
|
|
14
|
+
* `running` nodes (so `pending` ones are never dispatched) and requests abort
|
|
15
|
+
* for the `running` ones; cancelling an already terminal run is an idempotent
|
|
16
|
+
* no-op.
|
|
17
|
+
* - `classifyLateCompletion`: a result that arrives late is **audited** but
|
|
18
|
+
* cannot revive an attempt that was cancelled, superseded (another
|
|
19
|
+
* `attemptID`/`operationID`), or belongs to an already terminal run.
|
|
18
20
|
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
+
* Everything is deterministic: the same evidence produces the same decision, so
|
|
22
|
+
* it is reproduced the same way after a restart.
|
|
21
23
|
*/
|
|
22
|
-
/**
|
|
24
|
+
/** Timeout action for the in-flight node. */
|
|
23
25
|
export type TimeoutAction = "noop" | "request-abort" | "awaiting-grace" | "reconcile";
|
|
24
|
-
/**
|
|
26
|
+
/** Injected evidence for deciding a node timeout. */
|
|
25
27
|
export type TimeoutInput = {
|
|
26
28
|
readonly nodeStatus: NodeStatus;
|
|
27
|
-
/** `true`
|
|
29
|
+
/** `true` if the runtime has already requested the abort for this attempt. */
|
|
28
30
|
readonly abortRequested: boolean;
|
|
29
|
-
/** `true`
|
|
31
|
+
/** `true` if the bounded grace window has already expired. */
|
|
30
32
|
readonly graceExceeded: boolean;
|
|
31
33
|
};
|
|
32
34
|
/**
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
*
|
|
35
|
+
* Decides the timeout action. Only a `running` node can expire: if abort has not
|
|
36
|
+
* been requested yet, request it; if it has already been requested, wait until
|
|
37
|
+
* grace is exhausted and then reconcile. A non-`running` node is a no-op.
|
|
36
38
|
*/
|
|
37
39
|
export declare function timeoutAction(input: TimeoutInput): TimeoutAction;
|
|
38
|
-
/**
|
|
40
|
+
/** Deterministic plan for cancelling a run. */
|
|
39
41
|
export type CancellationPlan = {
|
|
40
|
-
/** `true`
|
|
42
|
+
/** `true` if the run is still in progress and should be marked `cancelled`. */
|
|
41
43
|
readonly cancelRun: boolean;
|
|
42
|
-
/**
|
|
44
|
+
/** Nodes to mark `cancelled` (the `pending` and `running` ones), in stable order. */
|
|
43
45
|
readonly cancelNodeIDs: readonly string[];
|
|
44
|
-
/**
|
|
46
|
+
/** `running` nodes whose effect should be aborted, in stable order. */
|
|
45
47
|
readonly abortNodeIDs: readonly string[];
|
|
46
48
|
};
|
|
47
49
|
/**
|
|
48
|
-
*
|
|
49
|
-
*
|
|
50
|
-
* terminal
|
|
50
|
+
* Plans cancellation of the run. Cancels `pending` nodes (so they never get
|
|
51
|
+
* dispatched) and `running` nodes, and requests abort for the `running` ones. An
|
|
52
|
+
* already terminal run is not cancelled again and leaves no nodes to cancel
|
|
53
|
+
* (idempotent).
|
|
51
54
|
*/
|
|
52
55
|
export declare function planCancellation(state: GraphState): CancellationPlan;
|
|
53
|
-
/**
|
|
56
|
+
/** Reason why a late completion is discarded. */
|
|
54
57
|
export type LateCompletionReason = "run-terminal" | "unknown-node" | "not-running" | "superseded";
|
|
55
|
-
/**
|
|
58
|
+
/** Verdict for a receipt that arrives late. */
|
|
56
59
|
export type LateCompletionVerdict = {
|
|
57
60
|
readonly kind: "apply";
|
|
58
61
|
} | {
|
|
59
62
|
readonly kind: "stale";
|
|
60
63
|
readonly reason: LateCompletionReason;
|
|
61
64
|
};
|
|
62
|
-
/**
|
|
65
|
+
/** Minimum state of the target node for the late receipt. */
|
|
63
66
|
export type LateCompletionNode = {
|
|
64
67
|
readonly status: NodeStatus;
|
|
65
68
|
readonly operationID?: string;
|
|
66
69
|
readonly attemptID?: string;
|
|
67
70
|
};
|
|
68
|
-
/**
|
|
71
|
+
/** Input for classifying a late completion. */
|
|
69
72
|
export type LateCompletionInput = {
|
|
70
73
|
readonly runStatus: RunStatus;
|
|
71
74
|
readonly node: LateCompletionNode | undefined;
|
|
@@ -75,10 +78,10 @@ export type LateCompletionInput = {
|
|
|
75
78
|
};
|
|
76
79
|
};
|
|
77
80
|
/**
|
|
78
|
-
*
|
|
79
|
-
* `operationID`/`attemptID
|
|
80
|
-
*
|
|
81
|
-
*
|
|
81
|
+
* Classifies a late receipt. It applies only to the current `running` attempt
|
|
82
|
+
* with matching `operationID`/`attemptID`; in any other case (terminal run,
|
|
83
|
+
* unknown node, non-`running` node, superseded attempt) it is marked `stale` so
|
|
84
|
+
* it can be audited without mutating state.
|
|
82
85
|
*/
|
|
83
86
|
export declare function classifyLateCompletion(input: LateCompletionInput): LateCompletionVerdict;
|
|
84
87
|
//# sourceMappingURL=graphCancellation.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graphCancellation.d.ts","sourceRoot":"","sources":["../../src/orchestrator/graphCancellation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAExE
|
|
1
|
+
{"version":3,"file":"graphCancellation.d.ts","sourceRoot":"","sources":["../../src/orchestrator/graphCancellation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAExE;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,6CAA6C;AAC7C,MAAM,MAAM,aAAa,GACrB,MAAM,GACN,eAAe,GACf,gBAAgB,GAChB,WAAW,CAAC;AAEhB,qDAAqD;AACrD,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAChC,8EAA8E;IAC9E,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IACjC,8DAA8D;IAC9D,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;CACjC,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,YAAY,GAAG,aAAa,CAQhE;AAED,+CAA+C;AAC/C,MAAM,MAAM,gBAAgB,GAAG;IAC7B,+EAA+E;IAC/E,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,qFAAqF;IACrF,QAAQ,CAAC,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1C,uEAAuE;IACvE,QAAQ,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;CAC1C,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,UAAU,GAAG,gBAAgB,CAiBpE;AAED,iDAAiD;AACjD,MAAM,MAAM,oBAAoB,GAC5B,cAAc,GACd,cAAc,GACd,aAAa,GACb,YAAY,CAAC;AAEjB,+CAA+C;AAC/C,MAAM,MAAM,qBAAqB,GAC7B;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;CAAE,GAC1B;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,oBAAoB,CAAA;CAAE,CAAC;AAEtE,6DAA6D;AAC7D,MAAM,MAAM,kBAAkB,GAAG;IAC/B,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B,CAAC;AAEF,+CAA+C;AAC/C,MAAM,MAAM,mBAAmB,GAAG;IAChC,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,QAAQ,CAAC,IAAI,EAAE,kBAAkB,GAAG,SAAS,CAAC;IAC9C,QAAQ,CAAC,OAAO,EAAE;QAChB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;QAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;KAC5B,CAAC;CACH,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,mBAAmB,GACzB,qBAAqB,CAkBvB"}
|
|
@@ -2,24 +2,25 @@ import type { ContextRef, PrivacyClass } from "../context/schema";
|
|
|
2
2
|
import { type PrivacyMode, type RouteKind } from "../graph/privacyPolicy";
|
|
3
3
|
import type { ErrorClass, GraphNode } from "../graph/schema";
|
|
4
4
|
/**
|
|
5
|
-
* `GraphEffectExecutor` —
|
|
6
|
-
* (GE-031)
|
|
7
|
-
*
|
|
8
|
-
* `node.failed`) **
|
|
5
|
+
* `GraphEffectExecutor` — port for the only effect that the Graph runtime
|
|
6
|
+
* (GE-031) executes per node. The runtime commits the intention
|
|
7
|
+
* (`node.dispatched`) to the journal **before** invoking `execute`, and the
|
|
8
|
+
* receipt (`node.succeeded` or `node.failed`) **after**; the executor only
|
|
9
|
+
* produces the effect result.
|
|
9
10
|
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
* seam
|
|
11
|
+
* This module is types only: no I/O, SDK, storage, or global state. The runtime
|
|
12
|
+
* receives an injected executor; in production the opencode session adapter
|
|
13
|
+
* (GE-030) will implement it, and in tests a deterministic double. Keeping the
|
|
14
|
+
* seam as a port allows testing the runtime without real network or SDK.
|
|
14
15
|
*/
|
|
15
|
-
/**
|
|
16
|
+
/** Request to execute an effect for a specific node and attempt. */
|
|
16
17
|
export type EffectRequest = {
|
|
17
18
|
readonly runID: string;
|
|
18
19
|
readonly node: GraphNode;
|
|
19
20
|
readonly operationID: string;
|
|
20
21
|
readonly attemptID: string;
|
|
21
22
|
};
|
|
22
|
-
/**
|
|
23
|
+
/** Effect receipt: success with a referenced artifact, or classified failure. */
|
|
23
24
|
export type EffectReceipt = {
|
|
24
25
|
readonly outcome: "succeeded";
|
|
25
26
|
readonly artifact: ContextRef;
|
|
@@ -27,14 +28,14 @@ export type EffectReceipt = {
|
|
|
27
28
|
readonly outcome: "failed";
|
|
28
29
|
readonly errorClass: ErrorClass;
|
|
29
30
|
};
|
|
30
|
-
/**
|
|
31
|
+
/** Injectable executor for a node effect. Deterministic for a given request. */
|
|
31
32
|
export interface GraphEffectExecutor {
|
|
32
33
|
execute(request: EffectRequest): Promise<EffectReceipt>;
|
|
33
34
|
}
|
|
34
35
|
/**
|
|
35
|
-
*
|
|
36
|
-
*
|
|
37
|
-
*
|
|
36
|
+
* Privacy context for a dispatch: node privacy class, effective config mode,
|
|
37
|
+
* and the route preferred by the router. Leaves the reference-only/frontier
|
|
38
|
+
* decision to the effects seam before and after invoking the executor.
|
|
38
39
|
*/
|
|
39
40
|
export type EffectDispatchContext = {
|
|
40
41
|
readonly privacyClass: PrivacyClass;
|
|
@@ -42,22 +43,21 @@ export type EffectDispatchContext = {
|
|
|
42
43
|
readonly routeKind: RouteKind;
|
|
43
44
|
};
|
|
44
45
|
/**
|
|
45
|
-
*
|
|
46
|
-
* frontier
|
|
47
|
-
*
|
|
48
|
-
* **
|
|
46
|
+
* Resolves the **effective** route for a dispatch (GE-037). If policy forbids
|
|
47
|
+
* frontier for the privacy class under the active mode, degrades to `local`
|
|
48
|
+
* instead of throwing: a `sensitive` node with `forceLocalOnSensitive` produces
|
|
49
|
+
* **zero** frontier dispatches. Pure and deterministic.
|
|
49
50
|
*/
|
|
50
51
|
export declare function resolveDispatchRoute(privacyClass: PrivacyClass, mode: PrivacyMode, preferred: RouteKind): RouteKind;
|
|
51
52
|
/**
|
|
52
|
-
*
|
|
53
|
-
* `
|
|
54
|
-
* intenta una ruta frontier.
|
|
53
|
+
* Privacy gate **before** invoking the executor: throws `PrivacyPolicyError` if
|
|
54
|
+
* a `sensitive` node under `forceLocalOnSensitive` attempts a frontier route.
|
|
55
55
|
*/
|
|
56
56
|
export declare function assertDispatchAllowed(ctx: EffectDispatchContext): void;
|
|
57
57
|
/**
|
|
58
|
-
*
|
|
59
|
-
* `ContextRef` (
|
|
60
|
-
*
|
|
58
|
+
* Reference-only gate **after** the executor: the receipt may only carry a
|
|
59
|
+
* `ContextRef` (success) or an error class (failure); throws `RedactionError` if
|
|
60
|
+
* any structure carries a raw content field.
|
|
61
61
|
*/
|
|
62
62
|
export declare function assertReceiptReferenceOnly(receipt: EffectReceipt): void;
|
|
63
63
|
//# sourceMappingURL=graphEffects.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graphEffects.d.ts","sourceRoot":"","sources":["../../src/orchestrator/graphEffects.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAClE,OAAO,EAGL,KAAK,WAAW,EAChB,KAAK,SAAS,EACf,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE7D
|
|
1
|
+
{"version":3,"file":"graphEffects.d.ts","sourceRoot":"","sources":["../../src/orchestrator/graphEffects.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAClE,OAAO,EAGL,KAAK,WAAW,EAChB,KAAK,SAAS,EACf,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE7D;;;;;;;;;;;GAWG;AAEH,oEAAoE;AACpE,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF,iFAAiF;AACjF,MAAM,MAAM,aAAa,GACrB;IAAE,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,UAAU,CAAA;CAAE,GAChE;IAAE,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAA;CAAE,CAAC;AAEpE,gFAAgF;AAChF,MAAM,WAAW,mBAAmB;IAClC,OAAO,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;CACzD;AAED;;;;GAIG;AACH,MAAM,MAAM,qBAAqB,GAAG;IAClC,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IACpC,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;CAC/B,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,YAAY,EAAE,YAAY,EAC1B,IAAI,EAAE,WAAW,EACjB,SAAS,EAAE,SAAS,GACnB,SAAS,CAIX;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,qBAAqB,GAAG,IAAI,CAEtE;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,CAEvE"}
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import { type ShadowMirror, type ShadowMirrorErrorCode } from "./graphShadow";
|
|
2
2
|
/**
|
|
3
|
-
* **
|
|
3
|
+
* **Shadow mirror containment facade** (GE-043).
|
|
4
4
|
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* **total** —
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
5
|
+
* The mirror observes the legacy path; it never governs it. This boundary makes
|
|
6
|
+
* that guarantee structural rather than disciplinary: `mirrorLegacyTrace` is
|
|
7
|
+
* **total** —it does not throw for any input value, not even hostile objects
|
|
8
|
+
* whose accessors explode— and `mirrorAlongsideLegacy` returns the legacy result
|
|
9
|
+
* **by identity**, without copying or inspecting it. A mirror failure degrades
|
|
10
|
+
* to a typed result that the caller can ignore; there is no path by which it
|
|
11
|
+
* alters the production outcome.
|
|
12
12
|
*/
|
|
13
|
-
/**
|
|
13
|
+
/** Contained mirror result: success with evidence, or typed failure. */
|
|
14
14
|
export type ShadowMirrorResult = {
|
|
15
15
|
readonly ok: true;
|
|
16
16
|
readonly mirror: ShadowMirror;
|
|
@@ -19,21 +19,21 @@ export type ShadowMirrorResult = {
|
|
|
19
19
|
readonly code: ShadowMirrorErrorCode;
|
|
20
20
|
readonly detail: string;
|
|
21
21
|
};
|
|
22
|
-
/**
|
|
22
|
+
/** Production result with its mirror attached, never merged. */
|
|
23
23
|
export type LegacyWithShadow<T> = {
|
|
24
24
|
readonly legacy: T;
|
|
25
25
|
readonly shadow: ShadowMirrorResult;
|
|
26
26
|
};
|
|
27
27
|
/**
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
*
|
|
28
|
+
* Builds the mirror from an untrusted trace. Any failure — invalid trace,
|
|
29
|
+
* unrepresentable graph, illegal sequence, or unexpected error — is returned as
|
|
30
|
+
* a value.
|
|
31
31
|
*/
|
|
32
32
|
export declare function mirrorLegacyTrace(trace: unknown): ShadowMirrorResult;
|
|
33
33
|
/**
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
*
|
|
34
|
+
* Attaches the mirror to an already computed legacy outcome. The legacy value is
|
|
35
|
+
* returned exactly as it arrived: referential identity is the proof that the
|
|
36
|
+
* mirror could not touch it.
|
|
37
37
|
*/
|
|
38
38
|
export declare function mirrorAlongsideLegacy<T>(legacy: T, trace: unknown): LegacyWithShadow<T>;
|
|
39
39
|
//# sourceMappingURL=graphFacade.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graphFacade.d.ts","sourceRoot":"","sources":["../../src/orchestrator/graphFacade.ts"],"names":[],"mappings":"AAIA,OAAO,EAEL,KAAK,YAAY,EAEjB,KAAK,qBAAqB,EAC3B,MAAM,eAAe,CAAC;AAEvB;;;;;;;;;;GAUG;AAEH,
|
|
1
|
+
{"version":3,"file":"graphFacade.d.ts","sourceRoot":"","sources":["../../src/orchestrator/graphFacade.ts"],"names":[],"mappings":"AAIA,OAAO,EAEL,KAAK,YAAY,EAEjB,KAAK,qBAAqB,EAC3B,MAAM,eAAe,CAAC;AAEvB;;;;;;;;;;GAUG;AAEH,wEAAwE;AACxE,MAAM,MAAM,kBAAkB,GAC1B;IAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAA;CAAE,GACpD;IACE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IACnB,QAAQ,CAAC,IAAI,EAAE,qBAAqB,CAAC;IACrC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB,CAAC;AAEN,gEAAgE;AAChE,MAAM,MAAM,gBAAgB,CAAC,CAAC,IAAI;IAChC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IACnB,QAAQ,CAAC,MAAM,EAAE,kBAAkB,CAAC;CACrC,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,kBAAkB,CAuBpE;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,CAAC,EACrC,MAAM,EAAE,CAAC,EACT,KAAK,EAAE,OAAO,GACb,gBAAgB,CAAC,CAAC,CAAC,CAErB"}
|