@datafog/fogclaw 0.2.0 → 0.3.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/CHANGELOG.md +11 -0
- package/dist/backlog-tools.d.ts +57 -0
- package/dist/backlog-tools.d.ts.map +1 -0
- package/dist/backlog-tools.js +173 -0
- package/dist/backlog-tools.js.map +1 -0
- package/dist/backlog.d.ts +82 -0
- package/dist/backlog.d.ts.map +1 -0
- package/dist/backlog.js +169 -0
- package/dist/backlog.js.map +1 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +6 -0
- package/dist/config.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +87 -2
- package/dist/index.js.map +1 -1
- package/dist/message-sending-handler.d.ts +2 -1
- package/dist/message-sending-handler.d.ts.map +1 -1
- package/dist/message-sending-handler.js +5 -1
- package/dist/message-sending-handler.js.map +1 -1
- package/dist/tool-result-handler.d.ts +2 -1
- package/dist/tool-result-handler.d.ts.map +1 -1
- package/dist/tool-result-handler.js +5 -1
- package/dist/tool-result-handler.js.map +1 -1
- package/dist/types.d.ts +15 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/openclaw.plugin.json +11 -1
- package/package.json +7 -1
- package/.github/workflows/harness-docs.yml +0 -30
- package/AGENTS.md +0 -28
- package/docs/DATA.md +0 -28
- package/docs/DESIGN.md +0 -17
- package/docs/DOMAIN_DOCS.md +0 -30
- package/docs/FRONTEND.md +0 -24
- package/docs/OBSERVABILITY.md +0 -32
- package/docs/PLANS.md +0 -171
- package/docs/PRODUCT_SENSE.md +0 -20
- package/docs/RELIABILITY.md +0 -60
- package/docs/SECURITY.md +0 -52
- package/docs/design-docs/core-beliefs.md +0 -17
- package/docs/design-docs/index.md +0 -8
- package/docs/generated/README.md +0 -36
- package/docs/generated/memory.md +0 -1
- package/docs/plans/2026-02-16-fogclaw-design.md +0 -172
- package/docs/plans/2026-02-16-fogclaw-implementation.md +0 -1606
- package/docs/plans/README.md +0 -15
- package/docs/plans/active/2026-02-16-feat-openclaw-official-submission-plan.md +0 -386
- package/docs/plans/active/2026-02-17-feat-release-fogclaw-via-datafog-package-plan.md +0 -328
- package/docs/plans/active/2026-02-17-feat-submit-fogclaw-to-openclaw-plan.md +0 -244
- package/docs/plans/active/2026-02-17-feat-tool-result-pii-scanning-plan.md +0 -293
- package/docs/plans/tech-debt-tracker.md +0 -42
- package/docs/plugins/fogclaw.md +0 -101
- package/docs/runbooks/address-review-findings.md +0 -30
- package/docs/runbooks/ci-failures.md +0 -46
- package/docs/runbooks/code-review.md +0 -34
- package/docs/runbooks/merge-change.md +0 -28
- package/docs/runbooks/pull-request.md +0 -45
- package/docs/runbooks/record-evidence.md +0 -43
- package/docs/runbooks/reproduce-bug.md +0 -42
- package/docs/runbooks/respond-to-feedback.md +0 -42
- package/docs/runbooks/review-findings.md +0 -31
- package/docs/runbooks/submit-openclaw-plugin.md +0 -68
- package/docs/runbooks/update-agents-md.md +0 -59
- package/docs/runbooks/update-domain-docs.md +0 -42
- package/docs/runbooks/validate-current-state.md +0 -41
- package/docs/runbooks/verify-release.md +0 -69
- package/docs/specs/2026-02-16-feat-openclaw-official-submission-spec.md +0 -115
- package/docs/specs/2026-02-17-feat-outbound-message-pii-scanning-spec.md +0 -93
- package/docs/specs/2026-02-17-feat-submit-fogclaw-to-openclaw.md +0 -125
- package/docs/specs/2026-02-17-feat-tool-result-pii-scanning-spec.md +0 -122
- package/docs/specs/README.md +0 -5
- package/docs/specs/index.md +0 -8
- package/docs/spikes/README.md +0 -8
- package/fogclaw.config.example.json +0 -33
- package/scripts/ci/he-docs-config.json +0 -123
- package/scripts/ci/he-docs-drift.sh +0 -112
- package/scripts/ci/he-docs-lint.sh +0 -234
- package/scripts/ci/he-plans-lint.sh +0 -354
- package/scripts/ci/he-runbooks-lint.sh +0 -445
- package/scripts/ci/he-specs-lint.sh +0 -258
- package/scripts/ci/he-spikes-lint.sh +0 -249
- package/scripts/runbooks/select-runbooks.sh +0 -154
- package/src/config.ts +0 -183
- package/src/engines/gliner.ts +0 -240
- package/src/engines/regex.ts +0 -71
- package/src/extract.ts +0 -98
- package/src/index.ts +0 -381
- package/src/message-sending-handler.ts +0 -87
- package/src/redactor.ts +0 -51
- package/src/scanner.ts +0 -196
- package/src/tool-result-handler.ts +0 -133
- package/src/types.ts +0 -75
- package/tests/config.test.ts +0 -78
- package/tests/extract.test.ts +0 -185
- package/tests/gliner.test.ts +0 -289
- package/tests/message-sending-handler.test.ts +0 -244
- package/tests/plugin-smoke.test.ts +0 -250
- package/tests/redactor.test.ts +0 -320
- package/tests/regex.test.ts +0 -345
- package/tests/scanner.test.ts +0 -348
- package/tests/tool-result-handler.test.ts +0 -329
- package/tsconfig.json +0 -20
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,16 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.3.0
|
|
4
|
+
|
|
5
|
+
### Added
|
|
6
|
+
|
|
7
|
+
- **PII access request backlog** — agents can request access to redacted data via `fogclaw_request_access`, users review via `fogclaw_requests`, and resolve (approve/deny/follow-up) via `fogclaw_resolve`. Full async workflow with batch resolve support.
|
|
8
|
+
- **RedactionMapStore** — captures placeholder-to-original text mappings from all three scanning hooks, enabling backlog approvals to reveal original data.
|
|
9
|
+
- **Configurable `maxPendingRequests`** — caps the number of pending access requests per session (default: 50). Configurable in `fogclaw.config.json` and `openclaw.plugin.json`.
|
|
10
|
+
- **FIFO eviction for redaction mappings** — `RedactionMapStore` caps at 10,000 entries by default with oldest-first eviction to prevent unbounded PII accumulation in memory.
|
|
11
|
+
- **Access request audit events** — `access_request_created` and `access_request_resolved` structured audit log entries when `auditEnabled: true`. Never includes raw PII.
|
|
12
|
+
- **ARCHITECTURE.md** — top-level architecture document covering components, scanning layers, tools, data flow, and key invariants.
|
|
13
|
+
|
|
3
14
|
## 0.2.0
|
|
4
15
|
|
|
5
16
|
### Added
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool handler factories for the PII access request backlog.
|
|
3
|
+
*
|
|
4
|
+
* Three tools:
|
|
5
|
+
* - fogclaw_request_access: agent submits a request for redacted data
|
|
6
|
+
* - fogclaw_requests: list/filter backlog requests
|
|
7
|
+
* - fogclaw_resolve: user approves, denies, or asks follow-up
|
|
8
|
+
*/
|
|
9
|
+
import type { BacklogStore } from "./backlog.js";
|
|
10
|
+
import type { FogClawConfig } from "./types.js";
|
|
11
|
+
interface Logger {
|
|
12
|
+
info(msg: string): void;
|
|
13
|
+
warn(msg: string): void;
|
|
14
|
+
}
|
|
15
|
+
interface ToolResponse {
|
|
16
|
+
content: Array<{
|
|
17
|
+
type: "text";
|
|
18
|
+
text: string;
|
|
19
|
+
}>;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Create handler for fogclaw_request_access tool.
|
|
23
|
+
*
|
|
24
|
+
* Agent calls this when it encounters redacted content and wants
|
|
25
|
+
* to request access to the original text.
|
|
26
|
+
*/
|
|
27
|
+
export declare function createRequestAccessHandler(backlog: BacklogStore, config: FogClawConfig, logger?: Logger): (params: {
|
|
28
|
+
placeholder: string;
|
|
29
|
+
entity_type: string;
|
|
30
|
+
reason: string;
|
|
31
|
+
context?: string;
|
|
32
|
+
}) => ToolResponse;
|
|
33
|
+
/**
|
|
34
|
+
* Create handler for fogclaw_requests tool.
|
|
35
|
+
*
|
|
36
|
+
* Lists backlog requests, optionally filtered by status.
|
|
37
|
+
* For approved requests, includes the original text.
|
|
38
|
+
*/
|
|
39
|
+
export declare function createRequestsListHandler(backlog: BacklogStore, config: FogClawConfig, logger?: Logger): (params: {
|
|
40
|
+
status?: string;
|
|
41
|
+
}) => ToolResponse;
|
|
42
|
+
/**
|
|
43
|
+
* Create handler for fogclaw_resolve tool.
|
|
44
|
+
*
|
|
45
|
+
* User resolves a request: approve (reveals original text),
|
|
46
|
+
* deny, or follow_up (asks agent for more context).
|
|
47
|
+
*
|
|
48
|
+
* Supports single request_id or batch request_ids.
|
|
49
|
+
*/
|
|
50
|
+
export declare function createResolveHandler(backlog: BacklogStore, config: FogClawConfig, logger?: Logger): (params: {
|
|
51
|
+
request_id?: string;
|
|
52
|
+
request_ids?: string[];
|
|
53
|
+
action: string;
|
|
54
|
+
message?: string;
|
|
55
|
+
}) => ToolResponse;
|
|
56
|
+
export {};
|
|
57
|
+
//# sourceMappingURL=backlog-tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backlog-tools.d.ts","sourceRoot":"","sources":["../src/backlog-tools.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,UAAU,MAAM;IACd,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,UAAU,YAAY;IACpB,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAChD;AAYD;;;;;GAKG;AACH,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,YAAY,EACrB,MAAM,EAAE,aAAa,EACrB,MAAM,CAAC,EAAE,MAAM,GACd,CAAC,MAAM,EAAE;IACV,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,KAAK,YAAY,CA6BjB;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,YAAY,EACrB,MAAM,EAAE,aAAa,EACrB,MAAM,CAAC,EAAE,MAAM,GACd,CAAC,MAAM,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,KAAK,YAAY,CAoD/C;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,YAAY,EACrB,MAAM,EAAE,aAAa,EACrB,MAAM,CAAC,EAAE,MAAM,GACd,CAAC,MAAM,EAAE;IACV,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,KAAK,YAAY,CAkGjB"}
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool handler factories for the PII access request backlog.
|
|
3
|
+
*
|
|
4
|
+
* Three tools:
|
|
5
|
+
* - fogclaw_request_access: agent submits a request for redacted data
|
|
6
|
+
* - fogclaw_requests: list/filter backlog requests
|
|
7
|
+
* - fogclaw_resolve: user approves, denies, or asks follow-up
|
|
8
|
+
*/
|
|
9
|
+
function jsonResponse(data) {
|
|
10
|
+
return {
|
|
11
|
+
content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
function errorResponse(message) {
|
|
15
|
+
return jsonResponse({ error: message });
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Create handler for fogclaw_request_access tool.
|
|
19
|
+
*
|
|
20
|
+
* Agent calls this when it encounters redacted content and wants
|
|
21
|
+
* to request access to the original text.
|
|
22
|
+
*/
|
|
23
|
+
export function createRequestAccessHandler(backlog, config, logger) {
|
|
24
|
+
return (params) => {
|
|
25
|
+
try {
|
|
26
|
+
const request = backlog.createRequest(params.placeholder, params.entity_type, params.reason, params.context);
|
|
27
|
+
if (config.auditEnabled && logger) {
|
|
28
|
+
logger.info(`[FOGCLAW AUDIT] access_request_created ${JSON.stringify({
|
|
29
|
+
request_id: request.id,
|
|
30
|
+
entity_type: request.entityType,
|
|
31
|
+
source: "backlog",
|
|
32
|
+
})}`);
|
|
33
|
+
}
|
|
34
|
+
return jsonResponse({
|
|
35
|
+
request_id: request.id,
|
|
36
|
+
status: request.status,
|
|
37
|
+
message: `Access request ${request.id} created for ${params.entity_type} entity "${params.placeholder}". A user must review and approve this request before the original text is revealed.`,
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
catch (err) {
|
|
41
|
+
return errorResponse(err.message);
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Create handler for fogclaw_requests tool.
|
|
47
|
+
*
|
|
48
|
+
* Lists backlog requests, optionally filtered by status.
|
|
49
|
+
* For approved requests, includes the original text.
|
|
50
|
+
*/
|
|
51
|
+
export function createRequestsListHandler(backlog, config, logger) {
|
|
52
|
+
return (params) => {
|
|
53
|
+
const validStatuses = ["pending", "approved", "denied", "follow_up"];
|
|
54
|
+
const statusFilter = params.status;
|
|
55
|
+
if (statusFilter && !validStatuses.includes(statusFilter)) {
|
|
56
|
+
return errorResponse(`Invalid status filter "${params.status}". Must be one of: ${validStatuses.join(", ")}`);
|
|
57
|
+
}
|
|
58
|
+
const requests = backlog.listRequests(statusFilter);
|
|
59
|
+
const items = requests.map((req) => {
|
|
60
|
+
const item = {
|
|
61
|
+
id: req.id,
|
|
62
|
+
placeholder: req.placeholder,
|
|
63
|
+
entity_type: req.entityType,
|
|
64
|
+
reason: req.reason,
|
|
65
|
+
context: req.context,
|
|
66
|
+
status: req.status,
|
|
67
|
+
created_at: req.createdAt,
|
|
68
|
+
};
|
|
69
|
+
if (req.status === "approved") {
|
|
70
|
+
item.original_text = req.originalText;
|
|
71
|
+
item.resolved_at = req.resolvedAt;
|
|
72
|
+
}
|
|
73
|
+
if (req.status === "denied") {
|
|
74
|
+
item.resolved_at = req.resolvedAt;
|
|
75
|
+
item.response_message = req.responseMessage;
|
|
76
|
+
}
|
|
77
|
+
if (req.status === "follow_up") {
|
|
78
|
+
item.follow_up_message = req.followUpMessage;
|
|
79
|
+
}
|
|
80
|
+
return item;
|
|
81
|
+
});
|
|
82
|
+
return jsonResponse({
|
|
83
|
+
requests: items,
|
|
84
|
+
total: items.length,
|
|
85
|
+
filter: statusFilter ?? "all",
|
|
86
|
+
});
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Create handler for fogclaw_resolve tool.
|
|
91
|
+
*
|
|
92
|
+
* User resolves a request: approve (reveals original text),
|
|
93
|
+
* deny, or follow_up (asks agent for more context).
|
|
94
|
+
*
|
|
95
|
+
* Supports single request_id or batch request_ids.
|
|
96
|
+
*/
|
|
97
|
+
export function createResolveHandler(backlog, config, logger) {
|
|
98
|
+
return (params) => {
|
|
99
|
+
const validActions = ["approve", "deny", "follow_up"];
|
|
100
|
+
if (!validActions.includes(params.action)) {
|
|
101
|
+
return errorResponse(`Invalid action "${params.action}". Must be one of: ${validActions.join(", ")}`);
|
|
102
|
+
}
|
|
103
|
+
const action = params.action;
|
|
104
|
+
// Batch resolve
|
|
105
|
+
if (params.request_ids && params.request_ids.length > 0) {
|
|
106
|
+
const results = backlog.resolveMultiple(params.request_ids, action, params.message);
|
|
107
|
+
if (config.auditEnabled && logger) {
|
|
108
|
+
for (const r of results) {
|
|
109
|
+
if (r.result) {
|
|
110
|
+
logger.info(`[FOGCLAW AUDIT] access_request_resolved ${JSON.stringify({
|
|
111
|
+
request_id: r.id,
|
|
112
|
+
action,
|
|
113
|
+
entity_type: r.result.entityType,
|
|
114
|
+
source: "backlog",
|
|
115
|
+
})}`);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
return jsonResponse({
|
|
120
|
+
results: results.map((r) => {
|
|
121
|
+
if (r.error) {
|
|
122
|
+
return { id: r.id, error: r.error };
|
|
123
|
+
}
|
|
124
|
+
const item = {
|
|
125
|
+
id: r.id,
|
|
126
|
+
status: r.result.status,
|
|
127
|
+
};
|
|
128
|
+
if (action === "approve") {
|
|
129
|
+
item.original_text = r.result.originalText;
|
|
130
|
+
}
|
|
131
|
+
return item;
|
|
132
|
+
}),
|
|
133
|
+
action,
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
// Single resolve
|
|
137
|
+
if (!params.request_id) {
|
|
138
|
+
return errorResponse("Either request_id or request_ids must be provided.");
|
|
139
|
+
}
|
|
140
|
+
try {
|
|
141
|
+
const resolved = backlog.resolveRequest(params.request_id, action, params.message);
|
|
142
|
+
if (config.auditEnabled && logger) {
|
|
143
|
+
logger.info(`[FOGCLAW AUDIT] access_request_resolved ${JSON.stringify({
|
|
144
|
+
request_id: resolved.id,
|
|
145
|
+
action,
|
|
146
|
+
entity_type: resolved.entityType,
|
|
147
|
+
source: "backlog",
|
|
148
|
+
})}`);
|
|
149
|
+
}
|
|
150
|
+
const result = {
|
|
151
|
+
request_id: resolved.id,
|
|
152
|
+
status: resolved.status,
|
|
153
|
+
};
|
|
154
|
+
if (action === "approve") {
|
|
155
|
+
result.original_text = resolved.originalText;
|
|
156
|
+
result.message = resolved.originalText
|
|
157
|
+
? `Access approved. Original text: ${resolved.originalText}`
|
|
158
|
+
: "Access approved, but original text was not captured during redaction.";
|
|
159
|
+
}
|
|
160
|
+
else if (action === "deny") {
|
|
161
|
+
result.message = params.message ?? "Access denied.";
|
|
162
|
+
}
|
|
163
|
+
else if (action === "follow_up") {
|
|
164
|
+
result.message = `Follow-up question sent to agent: "${params.message ?? ""}"`;
|
|
165
|
+
}
|
|
166
|
+
return jsonResponse(result);
|
|
167
|
+
}
|
|
168
|
+
catch (err) {
|
|
169
|
+
return errorResponse(err.message);
|
|
170
|
+
}
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
//# sourceMappingURL=backlog-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backlog-tools.js","sourceRoot":"","sources":["../src/backlog-tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* In-memory backlog store for PII access requests.
|
|
3
|
+
*
|
|
4
|
+
* RedactionMapStore captures placeholder → original text mappings from hooks.
|
|
5
|
+
* BacklogStore manages the access request lifecycle (create, list, resolve).
|
|
6
|
+
*
|
|
7
|
+
* Both are session-scoped: state lives in runtime memory only and is
|
|
8
|
+
* discarded when the process exits.
|
|
9
|
+
*/
|
|
10
|
+
import type { AccessRequest, RequestStatus } from "./types.js";
|
|
11
|
+
/**
|
|
12
|
+
* Stores redaction mappings from hook handlers so that access request
|
|
13
|
+
* approvals can retrieve the original pre-redaction text.
|
|
14
|
+
*
|
|
15
|
+
* Each time a hook redacts text, it calls addMapping() with the
|
|
16
|
+
* redactor's mapping (placeholder → original). When an access request
|
|
17
|
+
* is approved, the backlog looks up the original text here.
|
|
18
|
+
*/
|
|
19
|
+
export declare class RedactionMapStore {
|
|
20
|
+
private store;
|
|
21
|
+
private maxMappings;
|
|
22
|
+
constructor(maxMappings?: number);
|
|
23
|
+
/** Merge new placeholder → original entries into the store. */
|
|
24
|
+
addMapping(mapping: Record<string, string>): void;
|
|
25
|
+
/** Look up the original text for a redacted placeholder. */
|
|
26
|
+
getOriginal(placeholder: string): string | undefined;
|
|
27
|
+
/** Reset all stored mappings. */
|
|
28
|
+
clear(): void;
|
|
29
|
+
/** Number of stored mappings. */
|
|
30
|
+
get size(): number;
|
|
31
|
+
/** Evict oldest entries (FIFO by Map insertion order) when over capacity. */
|
|
32
|
+
private evict;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Manages PII access requests throughout their lifecycle.
|
|
36
|
+
*
|
|
37
|
+
* Requests transition through: pending → approved | denied | follow_up.
|
|
38
|
+
* A follow_up request can later be resolved to approved or denied.
|
|
39
|
+
*/
|
|
40
|
+
export declare class BacklogStore {
|
|
41
|
+
private requests;
|
|
42
|
+
private counter;
|
|
43
|
+
private redactionMap;
|
|
44
|
+
private maxPending;
|
|
45
|
+
constructor(redactionMap: RedactionMapStore, maxPending?: number);
|
|
46
|
+
/** Number of pending requests. */
|
|
47
|
+
get pendingCount(): number;
|
|
48
|
+
/** Total number of requests in any status. */
|
|
49
|
+
get totalCount(): number;
|
|
50
|
+
/**
|
|
51
|
+
* Create a new access request.
|
|
52
|
+
*
|
|
53
|
+
* Looks up the original text from the RedactionMapStore automatically.
|
|
54
|
+
* Throws if the pending request limit is reached.
|
|
55
|
+
*/
|
|
56
|
+
createRequest(placeholder: string, entityType: string, reason: string, context?: string): AccessRequest;
|
|
57
|
+
/** Get a single request by ID. */
|
|
58
|
+
getRequest(id: string): AccessRequest | undefined;
|
|
59
|
+
/** List requests, optionally filtered by status. */
|
|
60
|
+
listRequests(statusFilter?: RequestStatus): AccessRequest[];
|
|
61
|
+
/**
|
|
62
|
+
* Resolve a single request.
|
|
63
|
+
*
|
|
64
|
+
* - approve: marks as approved, stores response message
|
|
65
|
+
* - deny: marks as denied, stores response message
|
|
66
|
+
* - follow_up: marks as follow_up, stores the follow-up question
|
|
67
|
+
*
|
|
68
|
+
* A follow_up request can be resolved again to approved or denied.
|
|
69
|
+
* Throws if request not found or already in a terminal state (approved/denied).
|
|
70
|
+
*/
|
|
71
|
+
resolveRequest(id: string, action: "approve" | "deny" | "follow_up", message?: string): AccessRequest;
|
|
72
|
+
/**
|
|
73
|
+
* Resolve multiple requests with the same action.
|
|
74
|
+
* Returns an array of results (resolved request or error message per ID).
|
|
75
|
+
*/
|
|
76
|
+
resolveMultiple(ids: string[], action: "approve" | "deny" | "follow_up", message?: string): Array<{
|
|
77
|
+
id: string;
|
|
78
|
+
result: AccessRequest | null;
|
|
79
|
+
error: string | null;
|
|
80
|
+
}>;
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=backlog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backlog.d.ts","sourceRoot":"","sources":["../src/backlog.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE/D;;;;;;;GAOG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,KAAK,CAA6B;IAC1C,OAAO,CAAC,WAAW,CAAS;gBAEhB,WAAW,SAAS;IAIhC,+DAA+D;IAC/D,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;IAOjD,4DAA4D;IAC5D,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAIpD,iCAAiC;IACjC,KAAK,IAAI,IAAI;IAIb,iCAAiC;IACjC,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,6EAA6E;IAC7E,OAAO,CAAC,KAAK;CASd;AAED;;;;;GAKG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAoC;IACpD,OAAO,CAAC,OAAO,CAAK;IACpB,OAAO,CAAC,YAAY,CAAoB;IACxC,OAAO,CAAC,UAAU,CAAS;gBAEf,YAAY,EAAE,iBAAiB,EAAE,UAAU,SAAK;IAK5D,kCAAkC;IAClC,IAAI,YAAY,IAAI,MAAM,CAMzB;IAED,8CAA8C;IAC9C,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED;;;;;OAKG;IACH,aAAa,CACX,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,MAAM,GACf,aAAa;IA6BhB,kCAAkC;IAClC,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAIjD,oDAAoD;IACpD,YAAY,CAAC,YAAY,CAAC,EAAE,aAAa,GAAG,aAAa,EAAE;IAM3D;;;;;;;;;OASG;IACH,cAAc,CACZ,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,SAAS,GAAG,MAAM,GAAG,WAAW,EACxC,OAAO,CAAC,EAAE,MAAM,GACf,aAAa;IA0BhB;;;OAGG;IACH,eAAe,CACb,GAAG,EAAE,MAAM,EAAE,EACb,MAAM,EAAE,SAAS,GAAG,MAAM,GAAG,WAAW,EACxC,OAAO,CAAC,EAAE,MAAM,GACf,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAAC;QAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;CAU7E"}
|
package/dist/backlog.js
ADDED
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* In-memory backlog store for PII access requests.
|
|
3
|
+
*
|
|
4
|
+
* RedactionMapStore captures placeholder → original text mappings from hooks.
|
|
5
|
+
* BacklogStore manages the access request lifecycle (create, list, resolve).
|
|
6
|
+
*
|
|
7
|
+
* Both are session-scoped: state lives in runtime memory only and is
|
|
8
|
+
* discarded when the process exits.
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Stores redaction mappings from hook handlers so that access request
|
|
12
|
+
* approvals can retrieve the original pre-redaction text.
|
|
13
|
+
*
|
|
14
|
+
* Each time a hook redacts text, it calls addMapping() with the
|
|
15
|
+
* redactor's mapping (placeholder → original). When an access request
|
|
16
|
+
* is approved, the backlog looks up the original text here.
|
|
17
|
+
*/
|
|
18
|
+
export class RedactionMapStore {
|
|
19
|
+
store = new Map();
|
|
20
|
+
maxMappings;
|
|
21
|
+
constructor(maxMappings = 10_000) {
|
|
22
|
+
this.maxMappings = maxMappings;
|
|
23
|
+
}
|
|
24
|
+
/** Merge new placeholder → original entries into the store. */
|
|
25
|
+
addMapping(mapping) {
|
|
26
|
+
for (const [placeholder, original] of Object.entries(mapping)) {
|
|
27
|
+
this.store.set(placeholder, original);
|
|
28
|
+
}
|
|
29
|
+
this.evict();
|
|
30
|
+
}
|
|
31
|
+
/** Look up the original text for a redacted placeholder. */
|
|
32
|
+
getOriginal(placeholder) {
|
|
33
|
+
return this.store.get(placeholder);
|
|
34
|
+
}
|
|
35
|
+
/** Reset all stored mappings. */
|
|
36
|
+
clear() {
|
|
37
|
+
this.store.clear();
|
|
38
|
+
}
|
|
39
|
+
/** Number of stored mappings. */
|
|
40
|
+
get size() {
|
|
41
|
+
return this.store.size;
|
|
42
|
+
}
|
|
43
|
+
/** Evict oldest entries (FIFO by Map insertion order) when over capacity. */
|
|
44
|
+
evict() {
|
|
45
|
+
if (this.store.size <= this.maxMappings)
|
|
46
|
+
return;
|
|
47
|
+
const excess = this.store.size - this.maxMappings;
|
|
48
|
+
const iter = this.store.keys();
|
|
49
|
+
for (let i = 0; i < excess; i++) {
|
|
50
|
+
const key = iter.next().value;
|
|
51
|
+
if (key !== undefined)
|
|
52
|
+
this.store.delete(key);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Manages PII access requests throughout their lifecycle.
|
|
58
|
+
*
|
|
59
|
+
* Requests transition through: pending → approved | denied | follow_up.
|
|
60
|
+
* A follow_up request can later be resolved to approved or denied.
|
|
61
|
+
*/
|
|
62
|
+
export class BacklogStore {
|
|
63
|
+
requests = new Map();
|
|
64
|
+
counter = 0;
|
|
65
|
+
redactionMap;
|
|
66
|
+
maxPending;
|
|
67
|
+
constructor(redactionMap, maxPending = 50) {
|
|
68
|
+
this.redactionMap = redactionMap;
|
|
69
|
+
this.maxPending = maxPending;
|
|
70
|
+
}
|
|
71
|
+
/** Number of pending requests. */
|
|
72
|
+
get pendingCount() {
|
|
73
|
+
let count = 0;
|
|
74
|
+
for (const req of this.requests.values()) {
|
|
75
|
+
if (req.status === "pending" || req.status === "follow_up")
|
|
76
|
+
count++;
|
|
77
|
+
}
|
|
78
|
+
return count;
|
|
79
|
+
}
|
|
80
|
+
/** Total number of requests in any status. */
|
|
81
|
+
get totalCount() {
|
|
82
|
+
return this.requests.size;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Create a new access request.
|
|
86
|
+
*
|
|
87
|
+
* Looks up the original text from the RedactionMapStore automatically.
|
|
88
|
+
* Throws if the pending request limit is reached.
|
|
89
|
+
*/
|
|
90
|
+
createRequest(placeholder, entityType, reason, context) {
|
|
91
|
+
if (this.pendingCount >= this.maxPending) {
|
|
92
|
+
throw new Error(`Maximum pending requests reached (${this.maxPending}). Resolve existing requests before submitting new ones.`);
|
|
93
|
+
}
|
|
94
|
+
this.counter++;
|
|
95
|
+
const id = `REQ-${this.counter}`;
|
|
96
|
+
const originalText = this.redactionMap.getOriginal(placeholder) ?? null;
|
|
97
|
+
const request = {
|
|
98
|
+
id,
|
|
99
|
+
placeholder,
|
|
100
|
+
entityType,
|
|
101
|
+
originalText,
|
|
102
|
+
reason,
|
|
103
|
+
context: context ?? null,
|
|
104
|
+
status: "pending",
|
|
105
|
+
createdAt: new Date().toISOString(),
|
|
106
|
+
resolvedAt: null,
|
|
107
|
+
followUpMessage: null,
|
|
108
|
+
responseMessage: null,
|
|
109
|
+
};
|
|
110
|
+
this.requests.set(id, request);
|
|
111
|
+
return request;
|
|
112
|
+
}
|
|
113
|
+
/** Get a single request by ID. */
|
|
114
|
+
getRequest(id) {
|
|
115
|
+
return this.requests.get(id);
|
|
116
|
+
}
|
|
117
|
+
/** List requests, optionally filtered by status. */
|
|
118
|
+
listRequests(statusFilter) {
|
|
119
|
+
const all = Array.from(this.requests.values());
|
|
120
|
+
if (!statusFilter)
|
|
121
|
+
return all;
|
|
122
|
+
return all.filter((req) => req.status === statusFilter);
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Resolve a single request.
|
|
126
|
+
*
|
|
127
|
+
* - approve: marks as approved, stores response message
|
|
128
|
+
* - deny: marks as denied, stores response message
|
|
129
|
+
* - follow_up: marks as follow_up, stores the follow-up question
|
|
130
|
+
*
|
|
131
|
+
* A follow_up request can be resolved again to approved or denied.
|
|
132
|
+
* Throws if request not found or already in a terminal state (approved/denied).
|
|
133
|
+
*/
|
|
134
|
+
resolveRequest(id, action, message) {
|
|
135
|
+
const request = this.requests.get(id);
|
|
136
|
+
if (!request) {
|
|
137
|
+
throw new Error(`Request "${id}" not found.`);
|
|
138
|
+
}
|
|
139
|
+
if (request.status === "approved" || request.status === "denied") {
|
|
140
|
+
throw new Error(`Request "${id}" is already ${request.status}. Cannot resolve again.`);
|
|
141
|
+
}
|
|
142
|
+
const now = new Date().toISOString();
|
|
143
|
+
if (action === "follow_up") {
|
|
144
|
+
request.status = "follow_up";
|
|
145
|
+
request.followUpMessage = message ?? null;
|
|
146
|
+
return request;
|
|
147
|
+
}
|
|
148
|
+
request.status = action === "approve" ? "approved" : "denied";
|
|
149
|
+
request.resolvedAt = now;
|
|
150
|
+
request.responseMessage = message ?? null;
|
|
151
|
+
return request;
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Resolve multiple requests with the same action.
|
|
155
|
+
* Returns an array of results (resolved request or error message per ID).
|
|
156
|
+
*/
|
|
157
|
+
resolveMultiple(ids, action, message) {
|
|
158
|
+
return ids.map((id) => {
|
|
159
|
+
try {
|
|
160
|
+
const resolved = this.resolveRequest(id, action, message);
|
|
161
|
+
return { id, result: resolved, error: null };
|
|
162
|
+
}
|
|
163
|
+
catch (err) {
|
|
164
|
+
return { id, result: null, error: err.message };
|
|
165
|
+
}
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
//# sourceMappingURL=backlog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backlog.js","sourceRoot":"","sources":["../src/backlog.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH;;;;;;;GAOG;AACH,MAAM,OAAO,iBAAiB;IACpB,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAC;IAClC,WAAW,CAAS;IAE5B,YAAY,WAAW,GAAG,MAAM;QAC9B,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACjC,CAAC;IAED,+DAA+D;IAC/D,UAAU,CAAC,OAA+B;QACxC,KAAK,MAAM,CAAC,WAAW,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YAC9D,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;QACxC,CAAC;QACD,IAAI,CAAC,KAAK,EAAE,CAAC;IACf,CAAC;IAED,4DAA4D;IAC5D,WAAW,CAAC,WAAmB;QAC7B,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IACrC,CAAC;IAED,iCAAiC;IACjC,KAAK;QACH,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;IAED,iCAAiC;IACjC,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;IACzB,CAAC;IAED,6EAA6E;IACrE,KAAK;QACX,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,WAAW;YAAE,OAAO;QAChD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC;QAClD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAChC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;YAC9B,IAAI,GAAG,KAAK,SAAS;gBAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;CACF;AAED;;;;;GAKG;AACH,MAAM,OAAO,YAAY;IACf,QAAQ,GAAG,IAAI,GAAG,EAAyB,CAAC;IAC5C,OAAO,GAAG,CAAC,CAAC;IACZ,YAAY,CAAoB;IAChC,UAAU,CAAS;IAE3B,YAAY,YAA+B,EAAE,UAAU,GAAG,EAAE;QAC1D,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;IAED,kCAAkC;IAClC,IAAI,YAAY;QACd,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;YACzC,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,IAAI,GAAG,CAAC,MAAM,KAAK,WAAW;gBAAE,KAAK,EAAE,CAAC;QACtE,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,8CAA8C;IAC9C,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;IAC5B,CAAC;IAED;;;;;OAKG;IACH,aAAa,CACX,WAAmB,EACnB,UAAkB,EAClB,MAAc,EACd,OAAgB;QAEhB,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACzC,MAAM,IAAI,KAAK,CACb,qCAAqC,IAAI,CAAC,UAAU,0DAA0D,CAC/G,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,MAAM,EAAE,GAAG,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;QACjC,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC;QAExE,MAAM,OAAO,GAAkB;YAC7B,EAAE;YACF,WAAW;YACX,UAAU;YACV,YAAY;YACZ,MAAM;YACN,OAAO,EAAE,OAAO,IAAI,IAAI;YACxB,MAAM,EAAE,SAAS;YACjB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,UAAU,EAAE,IAAI;YAChB,eAAe,EAAE,IAAI;YACrB,eAAe,EAAE,IAAI;SACtB,CAAC;QAEF,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QAC/B,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,kCAAkC;IAClC,UAAU,CAAC,EAAU;QACnB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC/B,CAAC;IAED,oDAAoD;IACpD,YAAY,CAAC,YAA4B;QACvC,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;QAC/C,IAAI,CAAC,YAAY;YAAE,OAAO,GAAG,CAAC;QAC9B,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,KAAK,YAAY,CAAC,CAAC;IAC1D,CAAC;IAED;;;;;;;;;OASG;IACH,cAAc,CACZ,EAAU,EACV,MAAwC,EACxC,OAAgB;QAEhB,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACtC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;QAChD,CAAC;QAED,IAAI,OAAO,CAAC,MAAM,KAAK,UAAU,IAAI,OAAO,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YACjE,MAAM,IAAI,KAAK,CACb,YAAY,EAAE,gBAAgB,OAAO,CAAC,MAAM,yBAAyB,CACtE,CAAC;QACJ,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAErC,IAAI,MAAM,KAAK,WAAW,EAAE,CAAC;YAC3B,OAAO,CAAC,MAAM,GAAG,WAAW,CAAC;YAC7B,OAAO,CAAC,eAAe,GAAG,OAAO,IAAI,IAAI,CAAC;YAC1C,OAAO,OAAO,CAAC;QACjB,CAAC;QAED,OAAO,CAAC,MAAM,GAAG,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC;QAC9D,OAAO,CAAC,UAAU,GAAG,GAAG,CAAC;QACzB,OAAO,CAAC,eAAe,GAAG,OAAO,IAAI,IAAI,CAAC;QAC1C,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;;OAGG;IACH,eAAe,CACb,GAAa,EACb,MAAwC,EACxC,OAAgB;QAEhB,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE;YACpB,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;gBAC1D,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;YAC/C,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAG,GAAa,CAAC,OAAO,EAAE,CAAC;YAC7D,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;CACF"}
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,aAAa,EAGnB,MAAM,YAAY,CAAC;AAoGpB,eAAO,MAAM,cAAc,EAAE,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,aAAa,EAGnB,MAAM,YAAY,CAAC;AAoGpB,eAAO,MAAM,cAAc,EAAE,aAgB5B,CAAC;AAEF,wBAAgB,UAAU,CAAC,SAAS,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,aAAa,CAqE3E"}
|
package/dist/config.js
CHANGED
|
@@ -84,6 +84,7 @@ export const DEFAULT_CONFIG = {
|
|
|
84
84
|
entities: {},
|
|
85
85
|
},
|
|
86
86
|
auditEnabled: true,
|
|
87
|
+
maxPendingRequests: 50,
|
|
87
88
|
};
|
|
88
89
|
export function loadConfig(overrides) {
|
|
89
90
|
const config = {
|
|
@@ -115,6 +116,11 @@ export function loadConfig(overrides) {
|
|
|
115
116
|
if (typeof config.auditEnabled !== "boolean") {
|
|
116
117
|
throw new Error(`auditEnabled must be true or false`);
|
|
117
118
|
}
|
|
119
|
+
if (typeof config.maxPendingRequests !== "number" ||
|
|
120
|
+
!Number.isInteger(config.maxPendingRequests) ||
|
|
121
|
+
config.maxPendingRequests < 1) {
|
|
122
|
+
throw new Error(`maxPendingRequests must be a positive integer, got ${String(config.maxPendingRequests)}`);
|
|
123
|
+
}
|
|
118
124
|
const normalizedActions = {};
|
|
119
125
|
for (const [entityType, action] of Object.entries(config.entityActions)) {
|
|
120
126
|
if (!VALID_GUARDRAIL_MODES.includes(action)) {
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
export { Scanner } from "./scanner.js";
|
|
2
2
|
export { redact } from "./redactor.js";
|
|
3
3
|
export { loadConfig, DEFAULT_CONFIG } from "./config.js";
|
|
4
|
-
export
|
|
4
|
+
export { RedactionMapStore, BacklogStore } from "./backlog.js";
|
|
5
|
+
export type { Entity, FogClawConfig, ScanResult, RedactResult, RedactStrategy, GuardrailAction, AccessRequest, RequestStatus, } from "./types.js";
|
|
5
6
|
/**
|
|
6
7
|
* OpenClaw plugin definition.
|
|
7
8
|
*
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAwBA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC/D,YAAY,EACV,MAAM,EACN,aAAa,EACb,UAAU,EACV,YAAY,EACZ,cAAc,EACd,eAAe,EACf,aAAa,EACb,aAAa,GACd,MAAM,YAAY,CAAC;AAqEpB;;;;;;;;GAQG;AACH,QAAA,MAAM,OAAO;;;kBAIG,GAAG;CA8WlB,CAAC;AAEF,eAAe,OAAO,CAAC"}
|