@dv.nghiem/flowdeck 0.4.11 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +0 -2
- package/dist/agents/orchestrator.d.ts.map +1 -1
- package/dist/config/index.d.ts +1 -1
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/schema.d.ts +27 -1
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/dashboard/lib/state-reader.d.ts +2 -1
- package/dist/dashboard/lib/state-reader.d.ts.map +1 -1
- package/dist/dashboard/server.mjs +128 -13
- package/dist/dashboard/types.d.ts +12 -0
- package/dist/dashboard/types.d.ts.map +1 -1
- package/dist/hooks/approval-hook.d.ts +16 -2
- package/dist/hooks/approval-hook.d.ts.map +1 -1
- package/dist/hooks/compaction-hook.d.ts +1 -1
- package/dist/hooks/compaction-hook.d.ts.map +1 -1
- package/dist/hooks/context-window-monitor.d.ts +7 -1
- package/dist/hooks/context-window-monitor.d.ts.map +1 -1
- package/dist/hooks/decision-trace-hook.d.ts +3 -0
- package/dist/hooks/decision-trace-hook.d.ts.map +1 -1
- package/dist/hooks/event-log-hook.d.ts +19 -3
- package/dist/hooks/event-log-hook.d.ts.map +1 -1
- package/dist/hooks/guard-rails.d.ts +16 -5
- package/dist/hooks/guard-rails.d.ts.map +1 -1
- package/dist/hooks/orchestrator-guard-hook.d.ts +8 -5
- package/dist/hooks/orchestrator-guard-hook.d.ts.map +1 -1
- package/dist/hooks/shell-env-hook.d.ts.map +1 -1
- package/dist/hooks/tool-guard.d.ts +19 -3
- package/dist/hooks/tool-guard.d.ts.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8401 -4863
- package/dist/services/agent-contract-registry.d.ts.map +1 -1
- package/dist/services/agent-trace-graph.d.ts +4 -0
- package/dist/services/agent-trace-graph.d.ts.map +1 -1
- package/dist/services/agent-validator.d.ts +2 -1
- package/dist/services/agent-validator.d.ts.map +1 -1
- package/dist/services/approval-manager.d.ts +14 -1
- package/dist/services/approval-manager.d.ts.map +1 -1
- package/dist/services/audit-log.d.ts +23 -0
- package/dist/services/audit-log.d.ts.map +1 -0
- package/dist/services/context-ingress.d.ts +75 -0
- package/dist/services/context-ingress.d.ts.map +1 -0
- package/dist/services/deadlock-detector.d.ts.map +1 -1
- package/dist/services/delegation-budget.d.ts +55 -0
- package/dist/services/delegation-budget.d.ts.map +1 -0
- package/dist/services/event-logger.d.ts +3 -1
- package/dist/services/event-logger.d.ts.map +1 -1
- package/dist/services/execution-substrate.d.ts +35 -0
- package/dist/services/execution-substrate.d.ts.map +1 -0
- package/dist/services/harness-controller.d.ts +58 -0
- package/dist/services/harness-controller.d.ts.map +1 -0
- package/dist/services/harness-policy.d.ts +24 -0
- package/dist/services/harness-policy.d.ts.map +1 -0
- package/dist/services/harness-types.d.ts +178 -0
- package/dist/services/harness-types.d.ts.map +1 -0
- package/dist/services/lazy-rule-loader.d.ts +2 -0
- package/dist/services/lazy-rule-loader.d.ts.map +1 -1
- package/dist/services/loop-detector.d.ts.map +1 -1
- package/dist/services/prompt-cache.d.ts +25 -0
- package/dist/services/prompt-cache.d.ts.map +1 -0
- package/dist/services/recovery-layer.d.ts +26 -0
- package/dist/services/recovery-layer.d.ts.map +1 -0
- package/dist/services/run-trace.d.ts +17 -0
- package/dist/services/run-trace.d.ts.map +1 -1
- package/dist/services/state-persistence.d.ts +22 -0
- package/dist/services/state-persistence.d.ts.map +1 -0
- package/dist/services/supervisor-binding.d.ts +9 -0
- package/dist/services/supervisor-binding.d.ts.map +1 -1
- package/dist/services/token-metrics.d.ts +39 -0
- package/dist/services/token-metrics.d.ts.map +1 -0
- package/dist/services/verification-layer.d.ts +24 -0
- package/dist/services/verification-layer.d.ts.map +1 -0
- package/dist/services/workflow-scorecard.d.ts +5 -0
- package/dist/services/workflow-scorecard.d.ts.map +1 -1
- package/dist/tools/decision-trace.d.ts +4 -0
- package/dist/tools/decision-trace.d.ts.map +1 -1
- package/dist/tools/delegate.d.ts +16 -0
- package/dist/tools/delegate.d.ts.map +1 -0
- package/dist/tools/failure-replay.d.ts +8 -0
- package/dist/tools/failure-replay.d.ts.map +1 -1
- package/dist/tools/policy-engine.d.ts +1 -0
- package/dist/tools/policy-engine.d.ts.map +1 -1
- package/docs/concepts/HARNESS_ARCHITECTURE.md +241 -0
- package/docs/concepts/HARNESS_LAYERS.md +378 -0
- package/docs/concepts/HARNESS_WIRING.md +404 -0
- package/docs/getting-started/installation.md +0 -18
- package/docs/index.md +0 -1
- package/docs/reference/hooks.md +1 -16
- package/package.json +6 -6
- package/src/commands/fd-guarded-edit.md +69 -0
- package/src/rules/common/agent-defense.md +66 -0
- package/src/rules/common/agent-orchestration.md +35 -1
- package/src/skills/context-budget/SKILL.md +266 -0
- package/src/skills/context-guard/SKILL.md +172 -0
- package/src/skills/context-steward/SKILL.md +297 -0
- package/src/skills/decision-trace/SKILL.md +137 -0
- package/src/skills/research-first/SKILL.md +344 -0
- package/src/skills/session-persistence/SKILL.md +320 -0
- package/src/skills/telemetry-steward/SKILL.md +191 -0
- package/dist/services/rtk-manager.d.ts +0 -80
- package/dist/services/rtk-manager.d.ts.map +0 -1
- package/dist/services/rtk-policy.d.ts +0 -26
- package/dist/services/rtk-policy.d.ts.map +0 -1
- package/dist/tools/rtk-setup.d.ts +0 -22
- package/dist/tools/rtk-setup.d.ts.map +0 -1
- package/docs/reference/rtk.md +0 -162
package/README.md
CHANGED
|
@@ -26,7 +26,6 @@ FlowDeck adds a structured, multi-agent development workflow to OpenCode. It coo
|
|
|
26
26
|
- 🧭 **Adaptive Workflow Routing** — scores tasks across 5 dimensions (complexity, risk, confidence, blast radius, codebase freshness) and selects the minimal sufficient workflow class dynamically
|
|
27
27
|
- ⚙️ **Model-agnostic** — no model is hardcoded. Every agent uses your currently selected OpenCode model. Override per-agent in `flowdeck.json`.
|
|
28
28
|
- 💰 **Cost Optimization** — USD cost estimation (40+ models), per-workflow budget enforcement, retry-cost tracking, and concurrency limits to control total production spend.
|
|
29
|
-
- 📦 **rtk Integration** — optional [rtk](https://github.com/rtk-ai/rtk) output-compression layer compresses noisy CLI output (git, npm, test runners, linters) 60–90% before it reaches the model. Auto-detected, telemetry-disabled by default.
|
|
30
29
|
|
|
31
30
|
---
|
|
32
31
|
|
|
@@ -173,7 +172,6 @@ Agents not listed in `agents` inherit the active OpenCode model. See [Configurat
|
|
|
173
172
|
| [docs/USER_GUIDE.md](docs/USER_GUIDE.md) | Full agent and skill usage reference with examples |
|
|
174
173
|
| [docs/workflows.md](docs/workflows.md) | Command architecture and workflow patterns |
|
|
175
174
|
| [docs/intelligence.md](docs/intelligence.md) | AI safety features: patch trust, volatility map, failure replay, regression prediction |
|
|
176
|
-
| [docs/reference/rtk.md](docs/reference/rtk.md) | rtk CLI output compression: detection, telemetry, supported commands, setup |
|
|
177
175
|
|
|
178
176
|
---
|
|
179
177
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../src/agents/orchestrator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../src/agents/orchestrator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAwV/C,wBAAgB,uBAAuB,CACrC,cAAc,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,EAC5B,aAAa,CAAC,EAAE,MAAM,GACrB,MAAM,CA6BR;AAED,wBAAgB,uBAAuB,CACrC,KAAK,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC,MAAM,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,EACjE,YAAY,CAAC,EAAE,MAAM,EACrB,kBAAkB,CAAC,EAAE,MAAM,EAC3B,cAAc,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,EAC5B,aAAa,CAAC,EAAE,MAAM,GACrB,eAAe,CAuBjB"}
|
package/dist/config/index.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
export { loadFlowDeckConfig, resolveDesignFirstConfig } from './loader';
|
|
2
|
-
export type { FlowDeckConfig, AgentModelConfig } from './schema';
|
|
2
|
+
export type { FlowDeckConfig, AgentModelConfig, HarnessConfig, GovernanceConfig } from './schema';
|
|
3
3
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,MAAM,UAAU,CAAC;AACxE,YAAY,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,MAAM,UAAU,CAAC;AACxE,YAAY,EAAE,cAAc,EAAE,gBAAgB,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC"}
|
package/dist/config/schema.d.ts
CHANGED
|
@@ -11,6 +11,16 @@ export interface AgentModelConfig {
|
|
|
11
11
|
/** Model to use for this agent (e.g. "github-copilot/sonnet-4.6"). If not set, uses the currently selected model. */
|
|
12
12
|
model?: string;
|
|
13
13
|
}
|
|
14
|
+
export interface HarnessConfig {
|
|
15
|
+
/** Whether the runtime harness is active. Default: true */
|
|
16
|
+
enabled?: boolean;
|
|
17
|
+
/**
|
|
18
|
+
* strict: policy denials block execution
|
|
19
|
+
* advisory: policy violations are logged but do not block
|
|
20
|
+
* Default: "strict"
|
|
21
|
+
*/
|
|
22
|
+
mode?: "strict" | "advisory";
|
|
23
|
+
}
|
|
14
24
|
export interface GovernanceConfig {
|
|
15
25
|
validator?: {
|
|
16
26
|
/**
|
|
@@ -34,6 +44,12 @@ export interface GovernanceConfig {
|
|
|
34
44
|
/** Automatically stop the run when a signal fires. Default: false */
|
|
35
45
|
autoStop?: boolean;
|
|
36
46
|
};
|
|
47
|
+
/** Whether the tool-guard layer is active. Default: true */
|
|
48
|
+
toolGuard?: boolean;
|
|
49
|
+
/** Whether the guard-rails layer is active. Default: true */
|
|
50
|
+
guardRails?: boolean;
|
|
51
|
+
/** Whether approval gating is active. Default: true */
|
|
52
|
+
approvals?: boolean;
|
|
37
53
|
scorecard?: {
|
|
38
54
|
/** Whether to generate scorecards after each run. Default: true */
|
|
39
55
|
enabled?: boolean;
|
|
@@ -69,10 +85,18 @@ export interface GovernanceConfig {
|
|
|
69
85
|
*/
|
|
70
86
|
onExhaustion?: "warn" | "stop" | "escalate";
|
|
71
87
|
};
|
|
88
|
+
delegationBudget?: {
|
|
89
|
+
/** Maximum number of tool calls allowed per run. Default: 200 */
|
|
90
|
+
maxToolCalls?: number;
|
|
91
|
+
/** Maximum delegation depth (parent-child run nesting). Default: 3 */
|
|
92
|
+
maxDepth?: number;
|
|
93
|
+
/** Maximum retries for the same step before escalation. Default: 3 */
|
|
94
|
+
maxSameStepRetries?: number;
|
|
95
|
+
};
|
|
72
96
|
supervisor?: {
|
|
73
97
|
/**
|
|
74
98
|
* Whether the supervisor review layer is active.
|
|
75
|
-
* Default:
|
|
99
|
+
* Default: true
|
|
76
100
|
*/
|
|
77
101
|
enabled?: boolean;
|
|
78
102
|
/**
|
|
@@ -119,6 +143,8 @@ export interface FlowDeckConfig {
|
|
|
119
143
|
modelOverrides?: Record<string, string>;
|
|
120
144
|
defaultSkillsByTaskType?: Record<string, string[]>;
|
|
121
145
|
};
|
|
146
|
+
/** Runtime harness configuration */
|
|
147
|
+
harness?: HarnessConfig;
|
|
122
148
|
/** Reliability and governance layer: contracts, validation, tracing, budgets, loop detection, scoring */
|
|
123
149
|
governance?: GovernanceConfig;
|
|
124
150
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,WAAW,gBAAgB;IAC/B,qHAAqH;IACrH,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,CAAC,EAAE;QACV;;;;WAIG;QACH,IAAI,CAAC,EAAE,KAAK,GAAG,UAAU,GAAG,QAAQ,CAAC;QACrC,kFAAkF;QAClF,mBAAmB,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,QAAQ,CAAC;KACjD,CAAC;IACF,iBAAiB,CAAC,EAAE;QAClB,0DAA0D;QAC1D,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,iFAAiF;QACjF,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,+EAA+E;QAC/E,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5B,yFAAyF;QACzF,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAC3B,qEAAqE;QACrE,QAAQ,CAAC,EAAE,OAAO,CAAC;KACpB,CAAC;IACF,SAAS,CAAC,EAAE;QACV,mEAAmE;QACnE,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,qCAAqC;QACrC,WAAW,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;KAChC,CAAC;IACF,aAAa,CAAC,EAAE;QACd,sDAAsD;QACtD,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,gFAAgF;QAChF,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,mFAAmF;QACnF,mBAAmB,CAAC,EAAE,MAAM,CAAC;QAC7B,2EAA2E;QAC3E,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,UAAU,CAAC,EAAE;QACX;;;WAGG;QACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;QAC7B,iEAAiE;QACjE,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,kEAAkE;QAClE,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB;;;;;;WAMG;QACH,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,UAAU,CAAC;KAC7C,CAAC;IACF,UAAU,CAAC,EAAE;QACX;;;WAGG;QACH,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB;;;;WAIG;QACH,IAAI,CAAC,EAAE,UAAU,GAAG,QAAQ,CAAC;QAC7B;;;;WAIG;QACH,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;QAC3B;;;;WAIG;QACH,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB;;;;WAIG;QACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;QAC7B;;;WAGG;QACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;KAC/B,CAAC;CACH;AAED,MAAM,WAAW,cAAc;IAC7B;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IAC1C,WAAW,CAAC,EAAE;QACZ,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,WAAW,CAAC,EAAE,QAAQ,GAAG,UAAU,CAAC;QACpC,mCAAmC,CAAC,EAAE,OAAO,CAAC;QAC9C,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACxC,uBAAuB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;KACpD,CAAC;IACF,yGAAyG;IACzG,UAAU,CAAC,EAAE,gBAAgB,CAAC;CAC/B"}
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
-
import type { DashboardData } from "../types";
|
|
1
|
+
import type { DashboardData, Readiness } from "../types";
|
|
2
|
+
export declare function computeReadiness(dir: string): Readiness;
|
|
2
3
|
export declare function readDashboardData(dir: string): DashboardData;
|
|
3
4
|
//# sourceMappingURL=state-reader.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state-reader.d.ts","sourceRoot":"","sources":["../../../src/dashboard/lib/state-reader.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAS,aAAa,EAAmE,MAAM,UAAU,CAAA;
|
|
1
|
+
{"version":3,"file":"state-reader.d.ts","sourceRoot":"","sources":["../../../src/dashboard/lib/state-reader.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAS,aAAa,EAAmE,SAAS,EAAkB,MAAM,UAAU,CAAA;AAgLhJ,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAiCvD;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,CAwE5D"}
|
|
@@ -21,7 +21,7 @@ import path2 from "path";
|
|
|
21
21
|
import { fileURLToPath } from "url";
|
|
22
22
|
|
|
23
23
|
// src/dashboard/lib/state-reader.ts
|
|
24
|
-
import { existsSync as existsSync6, readFileSync as readFileSync6 } from "fs";
|
|
24
|
+
import { existsSync as existsSync6, readFileSync as readFileSync6, statSync } from "fs";
|
|
25
25
|
import { join as join6 } from "path";
|
|
26
26
|
|
|
27
27
|
// src/tools/planning-state-lib.ts
|
|
@@ -12670,6 +12670,123 @@ function findCurrentPhase(phases) {
|
|
|
12670
12670
|
return phases[phases.length - 1].number;
|
|
12671
12671
|
return 0;
|
|
12672
12672
|
}
|
|
12673
|
+
var ONE_DAY_MS = 24 * 60 * 60 * 1000;
|
|
12674
|
+
var HIGH_RISK_THRESHOLD = 70;
|
|
12675
|
+
function checkPlanningBlockers(state) {
|
|
12676
|
+
const count = state.blockers?.length ?? 0;
|
|
12677
|
+
if (count > 0) {
|
|
12678
|
+
return { name: "Planning Blockers", status: "warn", message: `${count} blocker(s) recorded in STATE.md` };
|
|
12679
|
+
}
|
|
12680
|
+
return { name: "Planning Blockers", status: "pass", message: "No blockers" };
|
|
12681
|
+
}
|
|
12682
|
+
function checkTestStatus(state, traces) {
|
|
12683
|
+
const tdd = state.tdd;
|
|
12684
|
+
if (tdd && tdd.failing_tests > 0) {
|
|
12685
|
+
return { name: "Test Status", status: "fail", message: `${tdd.failing_tests} failing test(s) in TDD state` };
|
|
12686
|
+
}
|
|
12687
|
+
const testFailures = traces.filter((t) => t.status === "failed" && /test|spec/i.test(t.command));
|
|
12688
|
+
if (testFailures.length > 0) {
|
|
12689
|
+
return { name: "Test Status", status: "fail", message: `${testFailures.length} recent test run(s) failed` };
|
|
12690
|
+
}
|
|
12691
|
+
if (tdd && tdd.passing_tests > 0) {
|
|
12692
|
+
return { name: "Test Status", status: "pass", message: `${tdd.passing_tests} test(s) passing` };
|
|
12693
|
+
}
|
|
12694
|
+
return { name: "Test Status", status: "pass", message: "No failing tests detected" };
|
|
12695
|
+
}
|
|
12696
|
+
function checkPendingApprovals(dir) {
|
|
12697
|
+
const approvals = getPendingApprovals(dir);
|
|
12698
|
+
const highRisk = approvals.filter((a) => a.risk_score >= HIGH_RISK_THRESHOLD);
|
|
12699
|
+
if (highRisk.length > 0) {
|
|
12700
|
+
return { name: "Pending Approvals", status: "warn", message: `${highRisk.length} high-risk approval(s) pending` };
|
|
12701
|
+
}
|
|
12702
|
+
if (approvals.length > 0) {
|
|
12703
|
+
return { name: "Pending Approvals", status: "pass", message: `${approvals.length} approval(s) pending, none high-risk` };
|
|
12704
|
+
}
|
|
12705
|
+
return { name: "Pending Approvals", status: "pass", message: "No pending approvals" };
|
|
12706
|
+
}
|
|
12707
|
+
function checkDecisionHealth(dir) {
|
|
12708
|
+
const decisionsPath = join6(dir, ".codebase", "DECISIONS.jsonl");
|
|
12709
|
+
if (!existsSync6(decisionsPath)) {
|
|
12710
|
+
return { name: "Decision Health", status: "pass", message: "No decisions recorded" };
|
|
12711
|
+
}
|
|
12712
|
+
try {
|
|
12713
|
+
const content = readFileSync6(decisionsPath, "utf-8");
|
|
12714
|
+
const entries = content.split(`
|
|
12715
|
+
`).filter((l) => l.trim()).map((l) => {
|
|
12716
|
+
try {
|
|
12717
|
+
return JSON.parse(l);
|
|
12718
|
+
} catch {
|
|
12719
|
+
return null;
|
|
12720
|
+
}
|
|
12721
|
+
}).filter(Boolean);
|
|
12722
|
+
const riskyWithoutEvidence = entries.filter((e) => e.risk_level === "high" && (!e.evidence || e.evidence.length === 0));
|
|
12723
|
+
if (riskyWithoutEvidence.length > 0) {
|
|
12724
|
+
return { name: "Decision Health", status: "warn", message: `${riskyWithoutEvidence.length} high-risk decision(s) without evidence` };
|
|
12725
|
+
}
|
|
12726
|
+
return { name: "Decision Health", status: "pass", message: "All high-risk decisions have evidence" };
|
|
12727
|
+
} catch {
|
|
12728
|
+
return { name: "Decision Health", status: "warn", message: "Unable to read decisions file" };
|
|
12729
|
+
}
|
|
12730
|
+
}
|
|
12731
|
+
function checkLintTypeStatus(traces) {
|
|
12732
|
+
const failures = traces.filter((t) => t.status === "failed");
|
|
12733
|
+
const lintFailures = failures.filter((t) => /lint|type|build|check/i.test(t.command));
|
|
12734
|
+
if (lintFailures.length > 0) {
|
|
12735
|
+
return { name: "Lint/Type Status", status: "fail", message: `${lintFailures.length} recent lint/type/build failure(s)` };
|
|
12736
|
+
}
|
|
12737
|
+
if (failures.length > 0) {
|
|
12738
|
+
return { name: "Lint/Type Status", status: "warn", message: `${failures.length} recent run failure(s)` };
|
|
12739
|
+
}
|
|
12740
|
+
return { name: "Lint/Type Status", status: "pass", message: "No recent failures" };
|
|
12741
|
+
}
|
|
12742
|
+
function checkSessionHealth(dir) {
|
|
12743
|
+
const sp = statePath(dir);
|
|
12744
|
+
if (!existsSync6(sp)) {
|
|
12745
|
+
return { name: "Session Health", status: "warn", message: "STATE.md not found" };
|
|
12746
|
+
}
|
|
12747
|
+
try {
|
|
12748
|
+
const stats = statSync(sp);
|
|
12749
|
+
const ageMs = Date.now() - stats.mtime.getTime();
|
|
12750
|
+
if (ageMs > ONE_DAY_MS) {
|
|
12751
|
+
const hours = Math.round(ageMs / (60 * 60 * 1000));
|
|
12752
|
+
return { name: "Session Health", status: "warn", message: `STATE.md is ${hours}h old (>24h)` };
|
|
12753
|
+
}
|
|
12754
|
+
return { name: "Session Health", status: "pass", message: "STATE.md updated within 24h" };
|
|
12755
|
+
} catch {
|
|
12756
|
+
return { name: "Session Health", status: "warn", message: "Unable to check STATE.md age" };
|
|
12757
|
+
}
|
|
12758
|
+
}
|
|
12759
|
+
function computeReadiness(dir) {
|
|
12760
|
+
const state = readPlanningState(dir);
|
|
12761
|
+
const traces = listTraces(dir, 20);
|
|
12762
|
+
const checks3 = [
|
|
12763
|
+
checkPlanningBlockers(state),
|
|
12764
|
+
checkTestStatus(state, traces),
|
|
12765
|
+
checkPendingApprovals(dir),
|
|
12766
|
+
checkDecisionHealth(dir),
|
|
12767
|
+
checkLintTypeStatus(traces),
|
|
12768
|
+
checkSessionHealth(dir)
|
|
12769
|
+
];
|
|
12770
|
+
const failCount = checks3.filter((c) => c.status === "fail").length;
|
|
12771
|
+
const warnCount = checks3.filter((c) => c.status === "warn").length;
|
|
12772
|
+
let status;
|
|
12773
|
+
if (failCount > 0)
|
|
12774
|
+
status = "critical";
|
|
12775
|
+
else if (warnCount > 0)
|
|
12776
|
+
status = "attention";
|
|
12777
|
+
else
|
|
12778
|
+
status = "ok";
|
|
12779
|
+
const score = Math.max(0, 100 - failCount * 20 - warnCount * 10);
|
|
12780
|
+
let summary;
|
|
12781
|
+
if (status === "ok") {
|
|
12782
|
+
summary = "All readiness checks passed";
|
|
12783
|
+
} else if (status === "critical") {
|
|
12784
|
+
summary = `${failCount} check(s) failed, ${warnCount} warning(s)`;
|
|
12785
|
+
} else {
|
|
12786
|
+
summary = `${warnCount} check(s) need attention`;
|
|
12787
|
+
}
|
|
12788
|
+
return { status, score, checks: checks3, summary };
|
|
12789
|
+
}
|
|
12673
12790
|
function readDashboardData(dir) {
|
|
12674
12791
|
const pd = planningDir(dir);
|
|
12675
12792
|
const state = readPlanningState(dir);
|
|
@@ -12730,7 +12847,8 @@ function readDashboardData(dir) {
|
|
|
12730
12847
|
avg_duration_ms: Math.round(e.total_duration_ms / e.runs)
|
|
12731
12848
|
})),
|
|
12732
12849
|
toolFailureCount: 0,
|
|
12733
|
-
tdd: buildTDDDashboardState(state)
|
|
12850
|
+
tdd: buildTDDDashboardState(state),
|
|
12851
|
+
readiness: computeReadiness(dir)
|
|
12734
12852
|
};
|
|
12735
12853
|
}
|
|
12736
12854
|
function buildTDDDashboardState(state) {
|
|
@@ -12785,10 +12903,6 @@ import fs from "fs";
|
|
|
12785
12903
|
import path from "path";
|
|
12786
12904
|
|
|
12787
12905
|
// node_modules/ejs/lib/esm/utils.js
|
|
12788
|
-
var exports_utils = {};
|
|
12789
|
-
__export(exports_utils, {
|
|
12790
|
-
default: () => utils_default
|
|
12791
|
-
});
|
|
12792
12906
|
var utils = {};
|
|
12793
12907
|
var regExpChars = /[|\\{}()[\]^$+*?.]/g;
|
|
12794
12908
|
var hasOwnProperty = Object.prototype.hasOwnProperty;
|
|
@@ -12919,9 +13033,6 @@ utils.hasOwnOnlyObject = function(obj) {
|
|
|
12919
13033
|
}
|
|
12920
13034
|
return o;
|
|
12921
13035
|
};
|
|
12922
|
-
if (typeof exports_utils != "undefined") {
|
|
12923
|
-
module_utils.exports = utils;
|
|
12924
|
-
}
|
|
12925
13036
|
var utils_default = utils;
|
|
12926
13037
|
|
|
12927
13038
|
// node_modules/ejs/lib/esm/ejs.js
|
|
@@ -13176,6 +13287,7 @@ function Template(text, optsParam) {
|
|
|
13176
13287
|
options.async = opts.async;
|
|
13177
13288
|
options.destructuredLocals = opts.destructuredLocals;
|
|
13178
13289
|
options.legacyInclude = typeof opts.legacyInclude != "undefined" ? !!opts.legacyInclude : true;
|
|
13290
|
+
options.unsafePrototypeLocals = !!opts.unsafePrototypeLocals;
|
|
13179
13291
|
if (options.strict) {
|
|
13180
13292
|
options._with = false;
|
|
13181
13293
|
} else {
|
|
@@ -13317,7 +13429,13 @@ Template.prototype = {
|
|
|
13317
13429
|
}
|
|
13318
13430
|
return includeFile(path2, opts)(d);
|
|
13319
13431
|
};
|
|
13320
|
-
|
|
13432
|
+
let locals;
|
|
13433
|
+
if (opts.unsafePrototypeLocals) {
|
|
13434
|
+
locals = data || utils_default.createNullProtoObjWherePossible();
|
|
13435
|
+
} else {
|
|
13436
|
+
locals = utils_default.shallowCopy(utils_default.createNullProtoObjWherePossible(), data);
|
|
13437
|
+
}
|
|
13438
|
+
return fn.apply(opts.context, [locals, escapeFn, include, rethrow]);
|
|
13321
13439
|
};
|
|
13322
13440
|
if (opts.filename && typeof Object.defineProperty === "function") {
|
|
13323
13441
|
let filename = opts.filename;
|
|
@@ -13486,9 +13604,6 @@ ejs.__express = ejs.renderFile;
|
|
|
13486
13604
|
if (typeof window != "undefined") {
|
|
13487
13605
|
window.ejs = ejs;
|
|
13488
13606
|
}
|
|
13489
|
-
if (typeof module_ejs != "undefined") {
|
|
13490
|
-
module_ejs.exports = ejs;
|
|
13491
|
-
}
|
|
13492
13607
|
var ejs_default = ejs;
|
|
13493
13608
|
|
|
13494
13609
|
// src/dashboard/server.ts
|
|
@@ -50,6 +50,17 @@ export interface TDDDashboardState {
|
|
|
50
50
|
bugs_missing_regression: number;
|
|
51
51
|
overrides_used: number;
|
|
52
52
|
}
|
|
53
|
+
export interface ReadinessCheck {
|
|
54
|
+
name: string;
|
|
55
|
+
status: "pass" | "warn" | "fail";
|
|
56
|
+
message: string;
|
|
57
|
+
}
|
|
58
|
+
export interface Readiness {
|
|
59
|
+
status: "ok" | "attention" | "critical";
|
|
60
|
+
score: number;
|
|
61
|
+
checks: ReadinessCheck[];
|
|
62
|
+
summary: string;
|
|
63
|
+
}
|
|
53
64
|
export interface AgentSpanSummary {
|
|
54
65
|
span_id: string;
|
|
55
66
|
agent: string;
|
|
@@ -138,5 +149,6 @@ export interface DashboardData {
|
|
|
138
149
|
toolFailureCount: number;
|
|
139
150
|
tdd?: TDDDashboardState;
|
|
140
151
|
governance?: GovernanceDashboardState;
|
|
152
|
+
readiness?: Readiness;
|
|
141
153
|
}
|
|
142
154
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/dashboard/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/dashboard/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,22 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Approval Hook
|
|
3
3
|
* Intercepts write/edit operations on sensitive files and blocks them
|
|
4
|
-
* unless a recent approval exists.
|
|
5
|
-
*
|
|
4
|
+
* unless a recent approval exists.
|
|
5
|
+
*
|
|
6
|
+
* The exported evaluate() function returns a PolicyDecision so the harness
|
|
7
|
+
* can compose it with other governance layers. The legacy approvalHook
|
|
8
|
+
* remains a thin adapter that throws on ask/deny for existing hook wiring.
|
|
9
|
+
*/
|
|
10
|
+
import type { PolicyDecision, PolicyInput } from "../services/harness-types";
|
|
11
|
+
/**
|
|
12
|
+
* Evaluate whether a write/edit tool on a sensitive path needs approval.
|
|
13
|
+
*
|
|
14
|
+
* No longer gated by environment variables — the harness decides whether to
|
|
15
|
+
* invoke this layer via `governance.approvals` in flowdeck.json.
|
|
16
|
+
*/
|
|
17
|
+
export declare function evaluate(input: PolicyInput): PolicyDecision;
|
|
18
|
+
/**
|
|
19
|
+
* Legacy hook adapter. Throws when approval is required.
|
|
6
20
|
*/
|
|
7
21
|
export declare function approvalHook(context: {
|
|
8
22
|
directory?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"approval-hook.d.ts","sourceRoot":"","sources":["../../src/hooks/approval-hook.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"approval-hook.d.ts","sourceRoot":"","sources":["../../src/hooks/approval-hook.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAiB,MAAM,2BAA2B,CAAA;AAyB3F;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,WAAW,GAAG,cAAc,CA6B3D;AAED;;GAEG;AACH,wBAAsB,YAAY,CAChC,OAAO,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,EAC/B,SAAS,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,EAC3C,MAAM,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,GACzC,OAAO,CAAC,IAAI,CAAC,CAuBf"}
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
import type { SessionFileTracker } from "./file-tracker";
|
|
20
20
|
export declare function createCompactionHook(ctx: {
|
|
21
21
|
directory: string;
|
|
22
|
-
}, tracker: SessionFileTracker): (input: {
|
|
22
|
+
}, tracker: SessionFileTracker, promptFragment?: string | ((sessionID: string) => string | undefined)): (input: {
|
|
23
23
|
sessionID: string;
|
|
24
24
|
}, output: {
|
|
25
25
|
context: string[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compaction-hook.d.ts","sourceRoot":"","sources":["../../src/hooks/compaction-hook.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAIH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AAmExD,wBAAgB,oBAAoB,CAClC,GAAG,EAAE;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,EAC1B,OAAO,EAAE,kBAAkB,
|
|
1
|
+
{"version":3,"file":"compaction-hook.d.ts","sourceRoot":"","sources":["../../src/hooks/compaction-hook.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAIH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AAmExD,wBAAgB,oBAAoB,CAClC,GAAG,EAAE;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,EAC1B,OAAO,EAAE,kBAAkB,EAC3B,cAAc,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,SAAS,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC,IAGnE,OAAO;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,EAC5B,QAAQ;IAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,mBA2EjD"}
|
|
@@ -5,7 +5,13 @@
|
|
|
5
5
|
*
|
|
6
6
|
* Inspired by oh-my-openagent's context-window-monitor.ts.
|
|
7
7
|
*/
|
|
8
|
-
export
|
|
8
|
+
export interface ContextWindowMonitorOptions {
|
|
9
|
+
/** Optional source for the total token budget for a session. */
|
|
10
|
+
getTotalBudget?: (sessionID: string) => number;
|
|
11
|
+
/** Fallback limit when no budget source is provided or returns nothing. */
|
|
12
|
+
defaultLimit?: number;
|
|
13
|
+
}
|
|
14
|
+
export declare function createContextWindowMonitorHook(options?: ContextWindowMonitorOptions): {
|
|
9
15
|
"tool.execute.after": (input: {
|
|
10
16
|
sessionID: string;
|
|
11
17
|
}, output: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context-window-monitor.d.ts","sourceRoot":"","sources":["../../src/hooks/context-window-monitor.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;
|
|
1
|
+
{"version":3,"file":"context-window-monitor.d.ts","sourceRoot":"","sources":["../../src/hooks/context-window-monitor.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AA4BH,MAAM,WAAW,2BAA2B;IAC1C,gEAAgE;IAChE,cAAc,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,MAAM,CAAA;IAC9C,2EAA2E;IAC3E,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAED,wBAAgB,8BAA8B,CAAC,OAAO,CAAC,EAAE,2BAA2B;kCAKzE;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,UACpB;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE;uBAyBI;QAAE,KAAK,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,UAAU,CAAC,EAAE,OAAO,CAAA;SAAE,CAAA;KAAE;EAuBlF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decision-trace-hook.d.ts","sourceRoot":"","sources":["../../src/hooks/decision-trace-hook.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,wBAAsB,iBAAiB,CACrC,GAAG,EAAE;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,EAC1B,KAAK,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,EACvB,MAAM,EAAE;IAAE,IAAI,EAAE,GAAG,CAAA;CAAE,
|
|
1
|
+
{"version":3,"file":"decision-trace-hook.d.ts","sourceRoot":"","sources":["../../src/hooks/decision-trace-hook.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,wBAAsB,iBAAiB,CACrC,GAAG,EAAE;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,EAC1B,KAAK,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,EACvB,MAAM,EAAE;IAAE,IAAI,EAAE,GAAG,CAAA;CAAE,EACrB,OAAO,CAAC,EAAE;IAAE,YAAY,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,GACzD,OAAO,CAAC,IAAI,CAAC,CAgCf"}
|
|
@@ -1,5 +1,21 @@
|
|
|
1
|
+
import type { SpanStatus } from "@/services/harness-types";
|
|
1
2
|
type AppLog = (msg: string) => void;
|
|
2
3
|
export type OnToolAfterCallback = (toolName: string, args: Record<string, unknown>, output: unknown, sessionId: string, status: string) => void;
|
|
4
|
+
export interface SpanLifecycleCallbacks {
|
|
5
|
+
/** Called when a delegated session starts (span open). */
|
|
6
|
+
onSpanOpen?: (props: {
|
|
7
|
+
spanId: string;
|
|
8
|
+
agent: string;
|
|
9
|
+
sessionId: string;
|
|
10
|
+
parentSessionId?: string;
|
|
11
|
+
}) => void;
|
|
12
|
+
/** Called when a delegated session ends (span close). */
|
|
13
|
+
onSpanClose?: (props: {
|
|
14
|
+
spanId: string;
|
|
15
|
+
status: Exclude<SpanStatus, "running">;
|
|
16
|
+
sessionId: string;
|
|
17
|
+
}) => void;
|
|
18
|
+
}
|
|
3
19
|
export declare function setStaleThresholdMs(ms: number): void;
|
|
4
20
|
export declare function cleanupStaleToolStartTimes(): void;
|
|
5
21
|
/**
|
|
@@ -7,7 +23,7 @@ export declare function cleanupStaleToolStartTimes(): void;
|
|
|
7
23
|
* All tool and session events are persisted to .opencode/flowdeck-events.jsonl
|
|
8
24
|
* AND displayed in the TUI's bounded log panel through the provided appLog fn.
|
|
9
25
|
*/
|
|
10
|
-
export declare function createEventLogHooks(appLog: AppLog, onToolAfter?: OnToolAfterCallback): {
|
|
26
|
+
export declare function createEventLogHooks(appLog: AppLog, onToolAfter?: OnToolAfterCallback, spanLifecycle?: SpanLifecycleCallbacks): {
|
|
11
27
|
before(ctx: {
|
|
12
28
|
directory: string;
|
|
13
29
|
}, toolInput: any, toolOutput: any): Promise<void>;
|
|
@@ -16,7 +32,7 @@ export declare function createEventLogHooks(appLog: AppLog, onToolAfter?: OnTool
|
|
|
16
32
|
}, toolInput: any, toolOutput: any): Promise<boolean>;
|
|
17
33
|
session(ctx: {
|
|
18
34
|
directory: string;
|
|
19
|
-
}, event: any): Promise<
|
|
35
|
+
}, event: any): Promise<boolean>;
|
|
20
36
|
};
|
|
21
37
|
export declare function eventLogBeforeHook(ctx: {
|
|
22
38
|
directory: string;
|
|
@@ -26,6 +42,6 @@ export declare function eventLogAfterHook(ctx: {
|
|
|
26
42
|
}, toolInput: any, toolOutput: any): Promise<boolean>;
|
|
27
43
|
export declare function eventLogSessionHook(ctx: {
|
|
28
44
|
directory: string;
|
|
29
|
-
}, event: any): Promise<
|
|
45
|
+
}, event: any): Promise<boolean>;
|
|
30
46
|
export {};
|
|
31
47
|
//# sourceMappingURL=event-log-hook.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event-log-hook.d.ts","sourceRoot":"","sources":["../../src/hooks/event-log-hook.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"event-log-hook.d.ts","sourceRoot":"","sources":["../../src/hooks/event-log-hook.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AAE1D,KAAK,MAAM,GAAG,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;AAEnC,MAAM,MAAM,mBAAmB,GAAG,CAChC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,MAAM,EAAE,OAAO,EACf,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,KACX,IAAI,CAAA;AAET,MAAM,WAAW,sBAAsB;IACrC,0DAA0D;IAC1D,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE;QACnB,MAAM,EAAE,MAAM,CAAA;QACd,KAAK,EAAE,MAAM,CAAA;QACb,SAAS,EAAE,MAAM,CAAA;QACjB,eAAe,CAAC,EAAE,MAAM,CAAA;KACzB,KAAK,IAAI,CAAA;IACV,yDAAyD;IACzD,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE;QACpB,MAAM,EAAE,MAAM,CAAA;QACd,MAAM,EAAE,OAAO,CAAC,UAAU,EAAE,SAAS,CAAC,CAAA;QACtC,SAAS,EAAE,MAAM,CAAA;KAClB,KAAK,IAAI,CAAA;CACX;AASD,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAEpD;AAED,wBAAgB,0BAA0B,IAAI,IAAI,CAOjD;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,MAAM,EACd,WAAW,CAAC,EAAE,mBAAmB,EACjC,aAAa,CAAC,EAAE,sBAAsB;gBASlB;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,aAAa,GAAG,cAAc,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;eA2BvE;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,aAAa,GAAG,cAAc,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC;iBA0CvE;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,SAAS,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC;EA4G1E;AAGD,wBAAsB,kBAAkB,CACtC,GAAG,EAAE;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,EAC1B,SAAS,EAAE,GAAG,EACd,UAAU,EAAE,GAAG,GACd,OAAO,CAAC,IAAI,CAAC,CAEf;AAED,wBAAsB,iBAAiB,CACrC,GAAG,EAAE;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,EAC1B,SAAS,EAAE,GAAG,EACd,UAAU,EAAE,GAAG,GACd,OAAO,CAAC,OAAO,CAAC,CAElB;AAED,wBAAsB,mBAAmB,CACvC,GAAG,EAAE;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,EAC1B,KAAK,EAAE,GAAG,GACT,OAAO,CAAC,OAAO,CAAC,CAElB"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { PolicyDecision, PolicyInput } from "../services/harness-types";
|
|
1
2
|
/**
|
|
2
3
|
* Safe Execution Mode — three tiers of AI edit safety.
|
|
3
4
|
* auto: AI can apply edits without confirmation (default, low-risk changes)
|
|
@@ -12,14 +13,24 @@ export type ExecutionMode = "auto" | "guarded" | "review-only";
|
|
|
12
13
|
export declare function resolveExecutionMode(configPath: string, trustScore: number | null, // 0–100, null = unknown
|
|
13
14
|
volatility?: string): ExecutionMode;
|
|
14
15
|
export type Severity = "warn" | "block" | null;
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
16
|
+
/**
|
|
17
|
+
* Evaluate a tool call against workspace, plan-confirmation, design-gate, and
|
|
18
|
+
* build/deploy guard rules.
|
|
19
|
+
*/
|
|
20
|
+
export declare function evaluate(input: PolicyInput): PolicyDecision;
|
|
20
21
|
/**
|
|
21
22
|
* Determine effective severity based on config.json override or STATE.md plan_confirmed.
|
|
22
23
|
*/
|
|
23
24
|
export declare function effectiveSeverity(configPath: string, statePath: string): Severity;
|
|
24
25
|
export declare function getPlanConfirmed(statePath: string): boolean;
|
|
26
|
+
/**
|
|
27
|
+
* Legacy hook adapter. Throws when evaluate returns deny.
|
|
28
|
+
*/
|
|
29
|
+
export declare function guardRailsHook(ctx: {
|
|
30
|
+
directory: string;
|
|
31
|
+
}, input: {
|
|
32
|
+
tool: string;
|
|
33
|
+
}, output: {
|
|
34
|
+
args?: Record<string, unknown>;
|
|
35
|
+
}): Promise<void>;
|
|
25
36
|
//# sourceMappingURL=guard-rails.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"guard-rails.d.ts","sourceRoot":"","sources":["../../src/hooks/guard-rails.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"guard-rails.d.ts","sourceRoot":"","sources":["../../src/hooks/guard-rails.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAiB,MAAM,2BAA2B,CAAA;AAM3F;;;;;GAKG;AACH,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,SAAS,GAAG,aAAa,CAAA;AAE9D;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,GAAG,IAAI,EAAG,wBAAwB;AACpD,UAAU,CAAC,EAAE,MAAM,GAClB,aAAa,CAkBf;AAgBD,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAA;AA6B9C;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,WAAW,GAAG,cAAc,CA0E3D;AA0BD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,QAAQ,CAWjF;AAED,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAS3D;AAgBD;;GAEG;AACH,wBAAsB,cAAc,CAClC,GAAG,EAAE;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,EAC1B,KAAK,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,EACvB,MAAM,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,GACzC,OAAO,CAAC,IAAI,CAAC,CAaf"}
|
|
@@ -2,15 +2,18 @@
|
|
|
2
2
|
* Orchestrator Guard Hook
|
|
3
3
|
*
|
|
4
4
|
* Enforces the "orchestrator as coordinator, not executor" rule for the primary session.
|
|
5
|
-
* The
|
|
6
|
-
*
|
|
7
|
-
*
|
|
5
|
+
* The guard consults the orchestrator capability contract in agent-contract-registry
|
|
6
|
+
* and the harness policy. Any tool not in the orchestrator's allowedTools list is
|
|
7
|
+
* blocked when run from the primary session.
|
|
8
8
|
*
|
|
9
9
|
* To disable: set FLOWDECK_ORCHESTRATOR_GUARD=off in the environment.
|
|
10
10
|
* Default is ON.
|
|
11
11
|
*/
|
|
12
|
+
import type { HarnessPolicy } from "../services/harness-policy";
|
|
12
13
|
export declare class OrchestratorGuard {
|
|
13
14
|
private primarySessionId;
|
|
15
|
+
private policy?;
|
|
16
|
+
setPolicy(policy: HarnessPolicy): void;
|
|
14
17
|
onEvent(event: {
|
|
15
18
|
type?: string;
|
|
16
19
|
properties?: unknown;
|
|
@@ -19,9 +22,9 @@ export declare class OrchestratorGuard {
|
|
|
19
22
|
sessionId?: string;
|
|
20
23
|
}): void;
|
|
21
24
|
check(sessionId: string, toolName: string): void;
|
|
22
|
-
/**
|
|
25
|
+
/** Returns true if the tool is not in the orchestrator contract allowlist. */
|
|
23
26
|
_isBlockedForTest(name: string): boolean;
|
|
24
|
-
/**
|
|
27
|
+
/** Returns true if the tool is in the orchestrator contract allowlist. */
|
|
25
28
|
_isAllowedForTest(name: string): boolean;
|
|
26
29
|
/** Exposed for testing. */
|
|
27
30
|
_setPrimarySessionIdForTest(id: string | null): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orchestrator-guard-hook.d.ts","sourceRoot":"","sources":["../../src/hooks/orchestrator-guard-hook.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;
|
|
1
|
+
{"version":3,"file":"orchestrator-guard-hook.d.ts","sourceRoot":"","sources":["../../src/hooks/orchestrator-guard-hook.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAkB,MAAM,4BAA4B,CAAA;AA6B/E,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,gBAAgB,CAAsB;IAC9C,OAAO,CAAC,MAAM,CAAC,CAAe;IAE9B,SAAS,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI;IAItC,OAAO,CAAC,KAAK,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAkBtH,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAyBhD,8EAA8E;IAC9E,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAOxC,0EAA0E;IAC1E,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIxC,2BAA2B;IAC3B,2BAA2B,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;CAGrD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shell-env-hook.d.ts","sourceRoot":"","sources":["../../src/hooks/shell-env-hook.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;
|
|
1
|
+
{"version":3,"file":"shell-env-hook.d.ts","sourceRoot":"","sources":["../../src/hooks/shell-env-hook.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAyEH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,IAGhE,QAAQ,OAAO,EAAE,QAAQ;IAAE,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,mBAiBvE"}
|