@flowdesk/core 0.1.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/dist/agent-profiles.d.ts +38 -0
- package/dist/agent-profiles.d.ts.map +1 -0
- package/dist/agent-profiles.js +138 -0
- package/dist/agent-profiles.js.map +1 -0
- package/dist/audit.d.ts +11 -0
- package/dist/audit.d.ts.map +1 -0
- package/dist/audit.js +65 -0
- package/dist/audit.js.map +1 -0
- package/dist/bootstrap-foundation.d.ts +83 -0
- package/dist/bootstrap-foundation.d.ts.map +1 -0
- package/dist/bootstrap-foundation.js +773 -0
- package/dist/bootstrap-foundation.js.map +1 -0
- package/dist/chat-routing.d.ts +15 -0
- package/dist/chat-routing.d.ts.map +1 -0
- package/dist/chat-routing.js +172 -0
- package/dist/chat-routing.js.map +1 -0
- package/dist/command-manifest.d.ts +39 -0
- package/dist/command-manifest.d.ts.map +1 -0
- package/dist/command-manifest.js +240 -0
- package/dist/command-manifest.js.map +1 -0
- package/dist/config-policy.d.ts +31 -0
- package/dist/config-policy.d.ts.map +1 -0
- package/dist/config-policy.js +341 -0
- package/dist/config-policy.js.map +1 -0
- package/dist/fake-runtime.d.ts +68 -0
- package/dist/fake-runtime.d.ts.map +1 -0
- package/dist/fake-runtime.js +285 -0
- package/dist/fake-runtime.js.map +1 -0
- package/dist/guard-boundary.d.ts +53 -0
- package/dist/guard-boundary.d.ts.map +1 -0
- package/dist/guard-boundary.js +220 -0
- package/dist/guard-boundary.js.map +1 -0
- package/dist/guarded-dry-run.d.ts +46 -0
- package/dist/guarded-dry-run.d.ts.map +1 -0
- package/dist/guarded-dry-run.js +111 -0
- package/dist/guarded-dry-run.js.map +1 -0
- package/dist/hook-harness.d.ts +8 -0
- package/dist/hook-harness.d.ts.map +1 -0
- package/dist/hook-harness.js +130 -0
- package/dist/hook-harness.js.map +1 -0
- package/dist/index.d.ts +41 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +51 -0
- package/dist/index.js.map +1 -0
- package/dist/lane-observability.d.ts +22 -0
- package/dist/lane-observability.d.ts.map +1 -0
- package/dist/lane-observability.js +138 -0
- package/dist/lane-observability.js.map +1 -0
- package/dist/plan.d.ts +37 -0
- package/dist/plan.d.ts.map +1 -0
- package/dist/plan.js +137 -0
- package/dist/plan.js.map +1 -0
- package/dist/production-enablement.d.ts +57 -0
- package/dist/production-enablement.d.ts.map +1 -0
- package/dist/production-enablement.js +259 -0
- package/dist/production-enablement.js.map +1 -0
- package/dist/provider-failures.d.ts +19 -0
- package/dist/provider-failures.d.ts.map +1 -0
- package/dist/provider-failures.js +116 -0
- package/dist/provider-failures.js.map +1 -0
- package/dist/provider-usage-collector.d.ts +60 -0
- package/dist/provider-usage-collector.d.ts.map +1 -0
- package/dist/provider-usage-collector.js +502 -0
- package/dist/provider-usage-collector.js.map +1 -0
- package/dist/redaction.d.ts +5 -0
- package/dist/redaction.d.ts.map +1 -0
- package/dist/redaction.js +11 -0
- package/dist/redaction.js.map +1 -0
- package/dist/release1-contracts.d.ts +1203 -0
- package/dist/release1-contracts.d.ts.map +1 -0
- package/dist/release1-contracts.js +256 -0
- package/dist/release1-contracts.js.map +1 -0
- package/dist/retry.d.ts +21 -0
- package/dist/retry.d.ts.map +1 -0
- package/dist/retry.js +107 -0
- package/dist/retry.js.map +1 -0
- package/dist/reviewer-lane-conformance.d.ts +35 -0
- package/dist/reviewer-lane-conformance.d.ts.map +1 -0
- package/dist/reviewer-lane-conformance.js +124 -0
- package/dist/reviewer-lane-conformance.js.map +1 -0
- package/dist/schema-artifacts.d.ts +19 -0
- package/dist/schema-artifacts.d.ts.map +1 -0
- package/dist/schema-artifacts.js +182 -0
- package/dist/schema-artifacts.js.map +1 -0
- package/dist/schema-registry.d.ts +32 -0
- package/dist/schema-registry.d.ts.map +1 -0
- package/dist/schema-registry.js +163 -0
- package/dist/schema-registry.js.map +1 -0
- package/dist/session-evidence.d.ts +71 -0
- package/dist/session-evidence.d.ts.map +1 -0
- package/dist/session-evidence.js +336 -0
- package/dist/session-evidence.js.map +1 -0
- package/dist/state-paths.d.ts +20 -0
- package/dist/state-paths.d.ts.map +1 -0
- package/dist/state-paths.js +72 -0
- package/dist/state-paths.js.map +1 -0
- package/dist/state-store.d.ts +75 -0
- package/dist/state-store.d.ts.map +1 -0
- package/dist/state-store.js +567 -0
- package/dist/state-store.js.map +1 -0
- package/dist/status.d.ts +37 -0
- package/dist/status.d.ts.map +1 -0
- package/dist/status.js +304 -0
- package/dist/status.js.map +1 -0
- package/dist/tool-contract-fixtures.d.ts +134 -0
- package/dist/tool-contract-fixtures.d.ts.map +1 -0
- package/dist/tool-contract-fixtures.js +389 -0
- package/dist/tool-contract-fixtures.js.map +1 -0
- package/dist/top-tier-reviewer-lane-probe.d.ts +10 -0
- package/dist/top-tier-reviewer-lane-probe.d.ts.map +1 -0
- package/dist/top-tier-reviewer-lane-probe.js +76 -0
- package/dist/top-tier-reviewer-lane-probe.js.map +1 -0
- package/dist/usage-health.d.ts +44 -0
- package/dist/usage-health.d.ts.map +1 -0
- package/dist/usage-health.js +105 -0
- package/dist/usage-health.js.map +1 -0
- package/dist/validators.d.ts +142 -0
- package/dist/validators.d.ts.map +1 -0
- package/dist/validators.js +1690 -0
- package/dist/validators.js.map +1 -0
- package/package.json +37 -0
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { FLOWDESK_CANONICAL_REVIEW_AGENT_ID } from "./release1-contracts.js";
|
|
2
|
+
import type { ValidationResult } from "./validators.js";
|
|
3
|
+
export interface FlowDeskAgentProfileV1 {
|
|
4
|
+
agent_id: string;
|
|
5
|
+
purpose: string;
|
|
6
|
+
expertise: string[];
|
|
7
|
+
categories: string[];
|
|
8
|
+
use_when: string[];
|
|
9
|
+
do_not_use_when: string[];
|
|
10
|
+
required_inputs: string[];
|
|
11
|
+
output_contract: string;
|
|
12
|
+
allowed_permissions: string[];
|
|
13
|
+
allowed_tools: string[];
|
|
14
|
+
allowed_workflows: string[];
|
|
15
|
+
disallowed_actions: string[];
|
|
16
|
+
reference_sources: string[];
|
|
17
|
+
model_requirements: Record<string, unknown>;
|
|
18
|
+
verification: string[];
|
|
19
|
+
handoff: string;
|
|
20
|
+
escalation: string[];
|
|
21
|
+
mode_eligibility: string[];
|
|
22
|
+
}
|
|
23
|
+
export interface AgentProfileAliasMigrationV1 {
|
|
24
|
+
from_agent_id: "critic";
|
|
25
|
+
to_agent_id: typeof FLOWDESK_CANONICAL_REVIEW_AGENT_ID;
|
|
26
|
+
audit_ref: string;
|
|
27
|
+
reason: "legacy-reviewer-alias";
|
|
28
|
+
}
|
|
29
|
+
export interface AgentProfileValidationResult extends ValidationResult {
|
|
30
|
+
canonicalAgentId?: string;
|
|
31
|
+
migration?: AgentProfileAliasMigrationV1;
|
|
32
|
+
}
|
|
33
|
+
export interface AgentProfileValidationOptions {
|
|
34
|
+
allowAuditedCriticAlias?: boolean;
|
|
35
|
+
auditRef?: string;
|
|
36
|
+
}
|
|
37
|
+
export declare function validateAgentProfileV1(value: unknown, options?: AgentProfileValidationOptions): AgentProfileValidationResult;
|
|
38
|
+
//# sourceMappingURL=agent-profiles.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-profiles.d.ts","sourceRoot":"","sources":["../src/agent-profiles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kCAAkC,EAAE,MAAM,yBAAyB,CAAC;AAC7E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAGxD,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC5C,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,gBAAgB,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,4BAA4B;IAC3C,aAAa,EAAE,QAAQ,CAAC;IACxB,WAAW,EAAE,OAAO,kCAAkC,CAAC;IACvD,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,uBAAuB,CAAC;CACjC;AAED,MAAM,WAAW,4BAA6B,SAAQ,gBAAgB;IACpE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,EAAE,4BAA4B,CAAC;CAC1C;AAED,MAAM,WAAW,6BAA6B;IAC5C,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AA+DD,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,GAAE,6BAAkC,GAAG,4BAA4B,CAqEhI"}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import { FLOWDESK_CANONICAL_REVIEW_AGENT_ID } from "./release1-contracts.js";
|
|
2
|
+
import { invalid, valid, validateNoForbiddenRawPayloads, validateOpaqueRef } from "./validators.js";
|
|
3
|
+
const requiredFields = [
|
|
4
|
+
"agent_id",
|
|
5
|
+
"purpose",
|
|
6
|
+
"expertise",
|
|
7
|
+
"categories",
|
|
8
|
+
"use_when",
|
|
9
|
+
"do_not_use_when",
|
|
10
|
+
"required_inputs",
|
|
11
|
+
"output_contract",
|
|
12
|
+
"allowed_permissions",
|
|
13
|
+
"allowed_tools",
|
|
14
|
+
"allowed_workflows",
|
|
15
|
+
"disallowed_actions",
|
|
16
|
+
"reference_sources",
|
|
17
|
+
"model_requirements",
|
|
18
|
+
"verification",
|
|
19
|
+
"handoff",
|
|
20
|
+
"escalation",
|
|
21
|
+
"mode_eligibility"
|
|
22
|
+
];
|
|
23
|
+
function isRecord(value) {
|
|
24
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
25
|
+
}
|
|
26
|
+
function arrayFieldIsPresent(value, key) {
|
|
27
|
+
return Array.isArray(value[key]) && value[key].length > 0;
|
|
28
|
+
}
|
|
29
|
+
function stringArray(value, key) {
|
|
30
|
+
return Array.isArray(value[key]) ? value[key].filter((item) => typeof item === "string") : [];
|
|
31
|
+
}
|
|
32
|
+
function hasUnsafeAuthorityToken(values) {
|
|
33
|
+
const unsafe = /(^|[_\s-])(guard|dispatch|approve|approval|authorize|authority|fallback|reselection|no.?reply|hard.?cancel|real.?opencode.?dispatch|real.?dispatch|opencode.?run|spawn|exec|child_process)($|[_\s-])/i;
|
|
34
|
+
return values.some((value) => {
|
|
35
|
+
const normalized = value.toLowerCase().replace(/[^a-z0-9]/g, "");
|
|
36
|
+
return (unsafe.test(value) ||
|
|
37
|
+
normalized === "guard" ||
|
|
38
|
+
normalized.includes("guardauthority") ||
|
|
39
|
+
normalized.includes("dispatch") ||
|
|
40
|
+
normalized.includes("fallback") ||
|
|
41
|
+
normalized.includes("reselection") ||
|
|
42
|
+
normalized.includes("noreply") ||
|
|
43
|
+
normalized.includes("hardcancel") ||
|
|
44
|
+
normalized.includes("realopencodedispatch") ||
|
|
45
|
+
normalized.includes("realdispatch") ||
|
|
46
|
+
normalized.includes("opencoderun") ||
|
|
47
|
+
normalized.includes("childprocess") ||
|
|
48
|
+
normalized === "spawn" ||
|
|
49
|
+
normalized === "exec");
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
function hasMandatoryPathTraversal(values) {
|
|
53
|
+
const unsafePath = /(read this file first|follow this document path|use these docs in this order|\/users\/|\.\.\/|\.\.\\|^\/|[a-z]:\\|omc|omo|\.claude|agents\.md)/i;
|
|
54
|
+
return values.some((value) => unsafePath.test(value));
|
|
55
|
+
}
|
|
56
|
+
export function validateAgentProfileV1(value, options = {}) {
|
|
57
|
+
if (!isRecord(value))
|
|
58
|
+
return { ...invalid("agent profile must be an object") };
|
|
59
|
+
const errors = [];
|
|
60
|
+
const unknown = Object.keys(value).filter((key) => !requiredFields.includes(key));
|
|
61
|
+
if (unknown.length > 0)
|
|
62
|
+
errors.push(`unknown properties: ${unknown.join(",")}`);
|
|
63
|
+
for (const field of requiredFields) {
|
|
64
|
+
if (!(field in value))
|
|
65
|
+
errors.push(`missing required field: ${field}`);
|
|
66
|
+
}
|
|
67
|
+
for (const field of ["expertise", "categories", "use_when", "do_not_use_when", "required_inputs", "allowed_permissions", "allowed_tools", "allowed_workflows", "disallowed_actions", "reference_sources", "verification", "escalation", "mode_eligibility"]) {
|
|
68
|
+
if (field in value && !arrayFieldIsPresent(value, field))
|
|
69
|
+
errors.push(`${field} must be a non-empty array`);
|
|
70
|
+
if (field in value && Array.isArray(value[field]) && value[field].some((item) => typeof item !== "string"))
|
|
71
|
+
errors.push(`${field} must contain only strings`);
|
|
72
|
+
}
|
|
73
|
+
if (typeof value.output_contract !== "string" || value.output_contract.length === 0)
|
|
74
|
+
errors.push("output_contract is required");
|
|
75
|
+
if (typeof value.handoff !== "string" || value.handoff.length === 0)
|
|
76
|
+
errors.push("handoff is required");
|
|
77
|
+
if (!isRecord(value.model_requirements))
|
|
78
|
+
errors.push("model_requirements must be an object");
|
|
79
|
+
if (stringArray(value, "verification").length === 0)
|
|
80
|
+
errors.push("verification obligations are required");
|
|
81
|
+
if (stringArray(value, "expertise").length === 0 || stringArray(value, "do_not_use_when").length === 0)
|
|
82
|
+
errors.push("expertise and exclusion boundaries are required");
|
|
83
|
+
if (hasUnsafeAuthorityToken(stringArray(value, "allowed_permissions")))
|
|
84
|
+
errors.push("allowed_permissions must not grant Guard, dispatch, fallback, or hard cancellation authority");
|
|
85
|
+
if (hasUnsafeAuthorityToken(stringArray(value, "allowed_workflows")))
|
|
86
|
+
errors.push("allowed_workflows must not include real dispatch, fallback, hard cancellation, subprocess, or opencode run workflows");
|
|
87
|
+
if (hasMandatoryPathTraversal([...stringArray(value, "required_inputs"), ...stringArray(value, "reference_sources"), ...stringArray(value, "use_when")])) {
|
|
88
|
+
errors.push("profile must not require mandatory document-path traversal or OMO/OMC/local paths");
|
|
89
|
+
}
|
|
90
|
+
const disallowedActions = stringArray(value, "disallowed_actions").join(" ").toLowerCase();
|
|
91
|
+
for (const requiredBoundary of ["dispatch", "guard", "scope", "verification"]) {
|
|
92
|
+
if (!disallowedActions.includes(requiredBoundary))
|
|
93
|
+
errors.push(`disallowed_actions must state ${requiredBoundary} boundary`);
|
|
94
|
+
}
|
|
95
|
+
const agentId = typeof value.agent_id === "string" ? value.agent_id : undefined;
|
|
96
|
+
let canonicalAgentId = agentId;
|
|
97
|
+
let migration;
|
|
98
|
+
if (agentId === "critic") {
|
|
99
|
+
if (!options.allowAuditedCriticAlias || options.auditRef === undefined || !validateOpaqueRef(options.auditRef, "auditRef").ok) {
|
|
100
|
+
errors.push("critic alias requires audited migration to reviewer");
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
canonicalAgentId = FLOWDESK_CANONICAL_REVIEW_AGENT_ID;
|
|
104
|
+
migration = { from_agent_id: "critic", to_agent_id: FLOWDESK_CANONICAL_REVIEW_AGENT_ID, audit_ref: options.auditRef, reason: "legacy-reviewer-alias" };
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
else if (agentId !== undefined && !/^[a-z][a-z0-9-]*$/.test(agentId)) {
|
|
108
|
+
errors.push("agent_id must be stable kebab-case");
|
|
109
|
+
}
|
|
110
|
+
const serialized = JSON.stringify(value).toLowerCase();
|
|
111
|
+
const forbiddenFragments = [
|
|
112
|
+
"read this file first",
|
|
113
|
+
"follow this document path",
|
|
114
|
+
"use these docs in this order",
|
|
115
|
+
"opencode run",
|
|
116
|
+
"guard bypass",
|
|
117
|
+
"approve dispatch",
|
|
118
|
+
"replace guard",
|
|
119
|
+
"self-approve",
|
|
120
|
+
"suppress verification",
|
|
121
|
+
"scope widening",
|
|
122
|
+
"hard cancellation",
|
|
123
|
+
"no-reply",
|
|
124
|
+
"omc",
|
|
125
|
+
"omo",
|
|
126
|
+
"/users/",
|
|
127
|
+
"../",
|
|
128
|
+
"..\\"
|
|
129
|
+
];
|
|
130
|
+
for (const fragment of forbiddenFragments) {
|
|
131
|
+
if (serialized.includes(fragment))
|
|
132
|
+
errors.push(`agent profile contains forbidden fragment: ${fragment}`);
|
|
133
|
+
}
|
|
134
|
+
const redaction = validateNoForbiddenRawPayloads(value, "agent_profile");
|
|
135
|
+
errors.push(...redaction.errors);
|
|
136
|
+
return errors.length === 0 ? { ...valid(), canonicalAgentId, migration } : { ...invalid(...errors), canonicalAgentId, migration };
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=agent-profiles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-profiles.js","sourceRoot":"","sources":["../src/agent-profiles.ts"],"names":[],"mappings":"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"}
|
package/dist/audit.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { FlowDeskAuditEventV1, FlowDeskAuditRecordV1, OpaqueRef } from "./release1-contracts.js";
|
|
2
|
+
import { type FlowDeskStatePrepareResult } from "./state-store.js";
|
|
3
|
+
export interface FlowDeskAuditRecordOptions {
|
|
4
|
+
auditRef: OpaqueRef;
|
|
5
|
+
checkpointId?: string;
|
|
6
|
+
evidenceRefs?: OpaqueRef[];
|
|
7
|
+
}
|
|
8
|
+
export declare function auditEventToAuditRecord(event: FlowDeskAuditEventV1, options: FlowDeskAuditRecordOptions): FlowDeskStatePrepareResult<FlowDeskAuditRecordV1>;
|
|
9
|
+
export declare function prepareAuditEventWriteIntent(sessionId: string, event: FlowDeskAuditEventV1, options: FlowDeskAuditRecordOptions): FlowDeskStatePrepareResult<FlowDeskAuditRecordV1>;
|
|
10
|
+
export declare function preparePreRunAuditWriteIntent(sessionId: string, event: FlowDeskAuditEventV1, options: FlowDeskAuditRecordOptions): FlowDeskStatePrepareResult<FlowDeskAuditRecordV1>;
|
|
11
|
+
//# sourceMappingURL=audit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../src/audit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACtG,OAAO,EAAiC,KAAK,0BAA0B,EAAE,MAAM,kBAAkB,CAAC;AAGlG,MAAM,WAAW,0BAA0B;IACzC,QAAQ,EAAE,SAAS,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,SAAS,EAAE,CAAC;CAC5B;AAaD,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,oBAAoB,EAAE,OAAO,EAAE,0BAA0B,GAAG,0BAA0B,CAAC,qBAAqB,CAAC,CA+B3J;AAED,wBAAgB,4BAA4B,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,oBAAoB,EAAE,OAAO,EAAE,0BAA0B,GAAG,0BAA0B,CAAC,qBAAqB,CAAC,CAInL;AAED,wBAAgB,6BAA6B,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,oBAAoB,EAAE,OAAO,EAAE,0BAA0B,GAAG,0BAA0B,CAAC,qBAAqB,CAAC,CAIpL"}
|
package/dist/audit.js
ADDED
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { prepareAuditRecordWriteIntent } from "./state-store.js";
|
|
2
|
+
import { invalid, validateAuditEventV1, validateAuditRecordV1, validateOpaqueId, validateOpaqueRef, valid } from "./validators.js";
|
|
3
|
+
function validateRefArray(values, label, maxItems) {
|
|
4
|
+
if (values === undefined)
|
|
5
|
+
return valid();
|
|
6
|
+
if (!Array.isArray(values))
|
|
7
|
+
return invalid(`${label} must be an array`);
|
|
8
|
+
const errors = [];
|
|
9
|
+
if (values.length > maxItems)
|
|
10
|
+
errors.push(`${label} exceeds max items ${maxItems}`);
|
|
11
|
+
values.forEach((value, index) => {
|
|
12
|
+
errors.push(...validateOpaqueRef(value, `${label}[${index}]`).errors);
|
|
13
|
+
});
|
|
14
|
+
return errors.length === 0 ? valid() : invalid(...errors);
|
|
15
|
+
}
|
|
16
|
+
export function auditEventToAuditRecord(event, options) {
|
|
17
|
+
const eventResult = validateAuditEventV1(event);
|
|
18
|
+
if (!eventResult.ok)
|
|
19
|
+
return eventResult;
|
|
20
|
+
const optionResult = validateRefArray(options.evidenceRefs, "evidence_refs", 20);
|
|
21
|
+
if (!optionResult.ok)
|
|
22
|
+
return optionResult;
|
|
23
|
+
const auditRefResult = validateOpaqueRef(options.auditRef, "audit_ref");
|
|
24
|
+
if (!auditRefResult.ok)
|
|
25
|
+
return auditRefResult;
|
|
26
|
+
if (options.checkpointId !== undefined) {
|
|
27
|
+
const checkpointResult = validateOpaqueId(options.checkpointId, "checkpoint_id");
|
|
28
|
+
if (!checkpointResult.ok)
|
|
29
|
+
return checkpointResult;
|
|
30
|
+
}
|
|
31
|
+
const record = {
|
|
32
|
+
schema_version: "flowdesk.audit_record.v1",
|
|
33
|
+
audit_ref: options.auditRef,
|
|
34
|
+
event_id: event.event_id,
|
|
35
|
+
workflow_id: event.workflow_id,
|
|
36
|
+
attempt_id: event.attempt_id,
|
|
37
|
+
step_id: event.step_id,
|
|
38
|
+
checkpoint_id: options.checkpointId,
|
|
39
|
+
event_type: event.event_type,
|
|
40
|
+
created_at: event.created_at,
|
|
41
|
+
actor_class: event.actor_class,
|
|
42
|
+
summary_label: event.summary_label,
|
|
43
|
+
policy_ref: event.policy_ref,
|
|
44
|
+
decision_ref: event.decision_ref,
|
|
45
|
+
evidence_refs: [...(options.evidenceRefs ?? [])],
|
|
46
|
+
artifact_refs: [...event.artifact_refs],
|
|
47
|
+
redaction_version: event.redaction_version
|
|
48
|
+
};
|
|
49
|
+
const recordResult = validateAuditRecordV1(record);
|
|
50
|
+
return recordResult.ok ? { ...recordResult, record } : recordResult;
|
|
51
|
+
}
|
|
52
|
+
export function prepareAuditEventWriteIntent(sessionId, event, options) {
|
|
53
|
+
const recordResult = auditEventToAuditRecord(event, options);
|
|
54
|
+
if (!recordResult.ok || recordResult.record === undefined)
|
|
55
|
+
return recordResult;
|
|
56
|
+
return prepareAuditRecordWriteIntent(sessionId, recordResult.record);
|
|
57
|
+
}
|
|
58
|
+
export function preparePreRunAuditWriteIntent(sessionId, event, options) {
|
|
59
|
+
if (!event.event_type.includes("pre") || (!event.event_type.includes("run") && !event.event_type.includes("dispatch")))
|
|
60
|
+
return invalid("pre-run audit event_type must identify pre-run or pre-dispatch audit");
|
|
61
|
+
if (event.workflow_id === undefined || event.attempt_id === undefined)
|
|
62
|
+
return invalid("pre-run audit requires workflow_id and attempt_id");
|
|
63
|
+
return prepareAuditEventWriteIntent(sessionId, event, options);
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=audit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit.js","sourceRoot":"","sources":["../src/audit.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import type { DoctorFailureCategoryOutcomeV1, DoctorFailureCategoryV1, FlowDeskBootstrapBackupManifestV1, FlowDeskBootstrapInstallPlanV1, FlowDeskBootstrapReportV1, FlowDeskBootstrapRollbackPlanV1, FlowDeskBootstrapRollbackResultV1, FlowDeskCommandGenerationSummaryV1, FlowDeskConfigScaffoldSummaryV1, FlowDeskDoctorHandoffV1, FlowDeskDoctorReportV1, FlowDeskOmoCleanupSummaryV1, FlowDeskProfileMutationSummaryV1, OpaqueRef, SafeNextAction } from "./release1-contracts.js";
|
|
2
|
+
import { type ValidationResult } from "./validators.js";
|
|
3
|
+
export type FlowDeskBootstrapArtifactV1 = FlowDeskBootstrapInstallPlanV1 | FlowDeskBootstrapBackupManifestV1 | FlowDeskProfileMutationSummaryV1 | FlowDeskOmoCleanupSummaryV1 | FlowDeskCommandGenerationSummaryV1 | FlowDeskConfigScaffoldSummaryV1 | FlowDeskBootstrapRollbackPlanV1 | FlowDeskBootstrapRollbackResultV1 | FlowDeskBootstrapReportV1 | FlowDeskDoctorHandoffV1 | FlowDeskDoctorReportV1;
|
|
4
|
+
export type FlowDeskBootstrapSchemaIdV1 = FlowDeskBootstrapArtifactV1["schema_version"];
|
|
5
|
+
export interface FlowDeskBootstrapWriteIntent<TRecord = FlowDeskBootstrapArtifactV1> {
|
|
6
|
+
operation: "write_json";
|
|
7
|
+
path: string;
|
|
8
|
+
schemaId: FlowDeskBootstrapSchemaIdV1;
|
|
9
|
+
authority: "redacted_bootstrap_artifact";
|
|
10
|
+
record: TRecord;
|
|
11
|
+
serialization: "json";
|
|
12
|
+
fsSafety: "validated_relative_flowdesk_path_only";
|
|
13
|
+
atomicity: {
|
|
14
|
+
strategy: "temp_then_rename_intent";
|
|
15
|
+
tempPath: string;
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
export interface FlowDeskBootstrapPrepareResult<TRecord = FlowDeskBootstrapArtifactV1> extends ValidationResult {
|
|
19
|
+
record?: TRecord;
|
|
20
|
+
writeIntent?: FlowDeskBootstrapWriteIntent<TRecord>;
|
|
21
|
+
}
|
|
22
|
+
export interface FlowDeskBootstrapDurableApplyResult extends ValidationResult {
|
|
23
|
+
rootDir?: string;
|
|
24
|
+
writtenPaths?: string[];
|
|
25
|
+
bootstrapAuthority: "redacted_bootstrap_artifact";
|
|
26
|
+
productionRegistrationEligible: false;
|
|
27
|
+
dispatchApprovalEligible: false;
|
|
28
|
+
realOpenCodeDispatch: false;
|
|
29
|
+
actualLaneLaunch: false;
|
|
30
|
+
providerCall: false;
|
|
31
|
+
runtimeExecution: false;
|
|
32
|
+
}
|
|
33
|
+
export interface FlowDeskBootstrapTypedConfirmationBindingV1 {
|
|
34
|
+
confirmation_ref: OpaqueRef;
|
|
35
|
+
target_profile_ref: OpaqueRef;
|
|
36
|
+
install_plan_ref: OpaqueRef;
|
|
37
|
+
backup_manifest_ref: OpaqueRef;
|
|
38
|
+
rollback_plan_ref: OpaqueRef;
|
|
39
|
+
expires_at: string;
|
|
40
|
+
actor_class: "user";
|
|
41
|
+
consumed_by?: "profile_mutation" | "rollback" | "doctor_handoff";
|
|
42
|
+
consumed_ref?: OpaqueRef;
|
|
43
|
+
}
|
|
44
|
+
export interface FlowDeskBootstrapFailureEvidenceV1 {
|
|
45
|
+
installPlan: FlowDeskBootstrapInstallPlanV1;
|
|
46
|
+
backupManifest?: FlowDeskBootstrapBackupManifestV1;
|
|
47
|
+
profileMutation?: FlowDeskProfileMutationSummaryV1;
|
|
48
|
+
omoCleanup?: FlowDeskOmoCleanupSummaryV1;
|
|
49
|
+
commandGeneration?: FlowDeskCommandGenerationSummaryV1;
|
|
50
|
+
configScaffold?: FlowDeskConfigScaffoldSummaryV1;
|
|
51
|
+
rollbackPlan?: FlowDeskBootstrapRollbackPlanV1;
|
|
52
|
+
rollbackResult?: FlowDeskBootstrapRollbackResultV1;
|
|
53
|
+
bootstrapReport?: FlowDeskBootstrapReportV1;
|
|
54
|
+
doctorHandoff?: FlowDeskDoctorHandoffV1;
|
|
55
|
+
doctorReport?: FlowDeskDoctorReportV1;
|
|
56
|
+
typedConfirmation?: FlowDeskBootstrapTypedConfirmationBindingV1;
|
|
57
|
+
bootstrapAuthorityRequestedAfterDoctorPass?: boolean;
|
|
58
|
+
}
|
|
59
|
+
export declare function getDoctorFailureCategoryOutcomeV1(category: DoctorFailureCategoryV1): DoctorFailureCategoryOutcomeV1;
|
|
60
|
+
export declare function buildDoctorSectionResultV1(input: Omit<FlowDeskDoctorReportV1["category_results"][number], "schema_version" | "safe_next_actions"> & {
|
|
61
|
+
safe_next_actions?: readonly SafeNextAction[];
|
|
62
|
+
}): FlowDeskDoctorReportV1["category_results"][number];
|
|
63
|
+
export declare function validateDoctorSectionResultV1(value: unknown): ValidationResult;
|
|
64
|
+
export declare function validateBootstrapInstallPlanV1(value: unknown): ValidationResult;
|
|
65
|
+
export declare function validateBootstrapBackupManifestV1(value: unknown): ValidationResult;
|
|
66
|
+
export declare function validateProfileMutationSummaryV1(value: unknown): ValidationResult;
|
|
67
|
+
export declare function validateOmoCleanupSummaryV1(value: unknown): ValidationResult;
|
|
68
|
+
export declare function validateCommandGenerationSummaryV1(value: unknown): ValidationResult;
|
|
69
|
+
export declare function validateConfigScaffoldSummaryV1(value: unknown): ValidationResult;
|
|
70
|
+
export declare function validateBootstrapRollbackPlanV1(value: unknown): ValidationResult;
|
|
71
|
+
export declare function validateBootstrapRollbackResultV1(value: unknown): ValidationResult;
|
|
72
|
+
export declare function validateBootstrapReportV1(value: unknown): ValidationResult;
|
|
73
|
+
export declare function validateDoctorReportV1(value: unknown): ValidationResult;
|
|
74
|
+
export declare function validateDoctorHandoffV1(value: unknown): ValidationResult;
|
|
75
|
+
export declare function validateBootstrapFailureEvidenceV1(value: unknown): ValidationResult;
|
|
76
|
+
export declare function validateFlowDeskBootstrapArtifactV1(value: unknown): ValidationResult;
|
|
77
|
+
export declare function assertFlowDeskBootstrapArtifactV1(value: unknown): asserts value is FlowDeskBootstrapArtifactV1;
|
|
78
|
+
export declare function prepareRedactedBootstrapArtifactWriteIntent<TRecord extends FlowDeskBootstrapArtifactV1>(installPlanId: string, record: TRecord): FlowDeskBootstrapPrepareResult<TRecord>;
|
|
79
|
+
export declare function validateRedactedBootstrapArtifactWriteIntent(intent: unknown): ValidationResult;
|
|
80
|
+
export declare function applyBootstrapWriteIntentsToInMemoryState(intents: readonly FlowDeskBootstrapWriteIntent[], initial?: ReadonlyMap<string, string>): Map<string, string>;
|
|
81
|
+
export declare function applyBootstrapWriteIntentsToDurableState(rootDir: string, intents: readonly FlowDeskBootstrapWriteIntent[]): FlowDeskBootstrapDurableApplyResult;
|
|
82
|
+
export declare function redactedBootstrapRef(ref: OpaqueRef): OpaqueRef;
|
|
83
|
+
//# sourceMappingURL=bootstrap-foundation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bootstrap-foundation.d.ts","sourceRoot":"","sources":["../src/bootstrap-foundation.ts"],"names":[],"mappings":"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"}
|