pi-harness-runtime 0.9.14 → 0.9.16
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/harness/auto-quota-resume.ts +129 -0
- package/harness/e2e/minimax-quota-scraper.ts +10 -4
- package/harness/index.ts +8 -0
- package/harness/loop-runtime.ts +57 -0
- package/index.ts +47 -11
- package/mirror.ts +40 -18
- package/package.json +1 -1
- package/packages/a2a-adapter/package.json +1 -1
- package/packages/auth/package.json +1 -1
- package/packages/autonomous-refactor/package.json +1 -1
- package/packages/autonomous-runtime/README.md +48 -0
- package/packages/autonomous-runtime/dist/inbox.d.ts +75 -0
- package/packages/autonomous-runtime/dist/inbox.d.ts.map +1 -0
- package/packages/autonomous-runtime/dist/inbox.js +212 -0
- package/packages/autonomous-runtime/dist/inbox.js.map +1 -0
- package/packages/autonomous-runtime/dist/index.d.ts +17 -0
- package/packages/autonomous-runtime/dist/index.d.ts.map +1 -0
- package/packages/autonomous-runtime/dist/index.js +17 -0
- package/packages/autonomous-runtime/dist/index.js.map +1 -0
- package/packages/autonomous-runtime/dist/lease.d.ts +78 -0
- package/packages/autonomous-runtime/dist/lease.d.ts.map +1 -0
- package/packages/autonomous-runtime/dist/lease.js +273 -0
- package/packages/autonomous-runtime/dist/lease.js.map +1 -0
- package/packages/autonomous-runtime/dist/types.d.ts +160 -0
- package/packages/autonomous-runtime/dist/types.d.ts.map +1 -0
- package/packages/autonomous-runtime/dist/types.js +31 -0
- package/packages/autonomous-runtime/dist/types.js.map +1 -0
- package/packages/autonomous-runtime/dist/worker.d.ts +63 -0
- package/packages/autonomous-runtime/dist/worker.d.ts.map +1 -0
- package/packages/autonomous-runtime/dist/worker.js +133 -0
- package/packages/autonomous-runtime/dist/worker.js.map +1 -0
- package/packages/autonomous-runtime/package.json +34 -0
- package/packages/autonomous-runtime/src/inbox.ts +266 -0
- package/packages/autonomous-runtime/src/index.ts +22 -0
- package/packages/autonomous-runtime/src/lease.ts +318 -0
- package/packages/autonomous-runtime/src/types.ts +257 -0
- package/packages/autonomous-runtime/test/autonomous-runtime.test.ts +194 -0
- package/packages/autonomous-runtime/test/inbox.test.mjs +266 -0
- package/packages/autonomous-runtime/test/inbox.test.ts +80 -0
- package/packages/autonomous-runtime/test/types.test.ts +68 -0
- package/packages/autonomous-runtime/tsconfig.json +22 -0
- package/packages/autonomous-runtime/tsconfig.tsbuildinfo +1 -0
- package/packages/cache-strategy/package.json +1 -1
- package/packages/capability-registry/package.json +1 -1
- package/packages/checkpoint/package.json +1 -1
- package/packages/cli-plugin-sdk/package.json +1 -1
- package/packages/code-generation/package.json +1 -1
- package/packages/code-review/package.json +1 -1
- package/packages/codex-adapter/package.json +1 -1
- package/packages/context-compiler/package.json +1 -1
- package/packages/context-manager/package.json +1 -1
- package/packages/cookie-sanitizer/package.json +1 -1
- package/packages/cost-optimizer/package.json +1 -1
- package/packages/django-plugin/package.json +1 -1
- package/packages/doc-generator/package.json +1 -1
- package/packages/evaluation-engine/package.json +1 -1
- package/packages/evaluation-runner/package.json +1 -1
- package/packages/experience-replay/package.json +1 -1
- package/packages/feedback-collector/package.json +1 -1
- package/packages/framework-detector/package.json +1 -1
- package/packages/framework-plugin-sdk/package.json +1 -1
- package/packages/frappe-plugin/package.json +1 -1
- package/packages/generic-web-plugin/package.json +1 -1
- package/packages/health-monitor/package.json +1 -1
- package/packages/laravel-plugin/package.json +1 -1
- package/packages/learning-engine/package.json +1 -1
- package/packages/mcp-adapter/package.json +1 -1
- package/packages/memory-engine/package.json +1 -1
- package/packages/model-registry/package.json +1 -1
- package/packages/nextjs-plugin/package.json +1 -1
- package/packages/notification/package.json +1 -1
- package/packages/observability/package.json +1 -1
- package/packages/performance-optimizer/package.json +1 -1
- package/packages/privilege-broker/README.md +45 -0
- package/packages/privilege-broker/config/privileges.yaml.example +172 -0
- package/packages/privilege-broker/dist/approval.d.ts +23 -0
- package/packages/privilege-broker/dist/approval.d.ts.map +1 -0
- package/packages/privilege-broker/dist/approval.js +45 -0
- package/packages/privilege-broker/dist/approval.js.map +1 -0
- package/packages/privilege-broker/dist/audit.d.ts +38 -0
- package/packages/privilege-broker/dist/audit.d.ts.map +1 -0
- package/packages/privilege-broker/dist/audit.js +125 -0
- package/packages/privilege-broker/dist/audit.js.map +1 -0
- package/packages/privilege-broker/dist/executor.d.ts +25 -0
- package/packages/privilege-broker/dist/executor.d.ts.map +1 -0
- package/packages/privilege-broker/dist/executor.js +83 -0
- package/packages/privilege-broker/dist/executor.js.map +1 -0
- package/packages/privilege-broker/dist/index.d.ts +30 -0
- package/packages/privilege-broker/dist/index.d.ts.map +1 -0
- package/packages/privilege-broker/dist/index.js +5 -0
- package/packages/privilege-broker/dist/index.js.map +1 -0
- package/packages/privilege-broker/dist/registry.d.ts +15 -0
- package/packages/privilege-broker/dist/registry.d.ts.map +1 -0
- package/packages/privilege-broker/dist/registry.js +76 -0
- package/packages/privilege-broker/dist/registry.js.map +1 -0
- package/packages/privilege-broker/dist/types.d.ts +77 -0
- package/packages/privilege-broker/dist/types.d.ts.map +1 -0
- package/packages/privilege-broker/dist/types.js +11 -0
- package/packages/privilege-broker/dist/types.js.map +1 -0
- package/packages/privilege-broker/package.json +35 -0
- package/packages/privilege-broker/src/approval.ts +70 -0
- package/packages/privilege-broker/src/audit.ts +142 -0
- package/packages/privilege-broker/src/executor.ts +110 -0
- package/packages/privilege-broker/src/index.ts +46 -0
- package/packages/privilege-broker/src/registry.ts +98 -0
- package/packages/privilege-broker/src/types.ts +105 -0
- package/packages/privilege-broker/tsconfig.json +22 -0
- package/packages/privilege-broker/tsconfig.tsbuildinfo +1 -0
- package/packages/project-analyzer/package.json +1 -1
- package/packages/prompt-compiler/package.json +1 -1
- package/packages/prompt-versioning/package.json +1 -1
- package/packages/provider-adapter-sdk/package.json +1 -1
- package/packages/provider-router/package.json +1 -1
- package/packages/provider-selector/package.json +1 -1
- package/packages/providers/dist/provider-id.d.ts +2 -0
- package/packages/providers/dist/provider-id.d.ts.map +1 -1
- package/packages/providers/dist/provider-id.js +9 -0
- package/packages/providers/dist/provider-id.js.map +1 -1
- package/packages/providers/package.json +1 -1
- package/packages/providers/src/provider-id.ts +12 -0
- package/packages/quota-manager/package.json +1 -1
- package/packages/rate-limiter/package.json +1 -1
- package/packages/react-vite-plugin/package.json +1 -1
- package/packages/release-manager/package.json +1 -1
- package/packages/requirement-compiler/package.json +1 -1
- package/packages/runtime/package.json +1 -1
- package/packages/scheduler/package.json +1 -1
- package/packages/scheduler-adapter/README.md +36 -0
- package/packages/scheduler-adapter/dist/cron.d.ts +21 -0
- package/packages/scheduler-adapter/dist/cron.d.ts.map +1 -0
- package/packages/scheduler-adapter/dist/cron.js +116 -0
- package/packages/scheduler-adapter/dist/cron.js.map +1 -0
- package/packages/scheduler-adapter/dist/index.d.ts +9 -0
- package/packages/scheduler-adapter/dist/index.d.ts.map +1 -0
- package/packages/scheduler-adapter/dist/index.js +8 -0
- package/packages/scheduler-adapter/dist/index.js.map +1 -0
- package/packages/scheduler-adapter/dist/interface.d.ts +61 -0
- package/packages/scheduler-adapter/dist/interface.d.ts.map +1 -0
- package/packages/scheduler-adapter/dist/interface.js +2 -0
- package/packages/scheduler-adapter/dist/interface.js.map +1 -0
- package/packages/scheduler-adapter/dist/internal.d.ts +30 -0
- package/packages/scheduler-adapter/dist/internal.d.ts.map +1 -0
- package/packages/scheduler-adapter/dist/internal.js +82 -0
- package/packages/scheduler-adapter/dist/internal.js.map +1 -0
- package/packages/scheduler-adapter/dist/systemd.d.ts +31 -0
- package/packages/scheduler-adapter/dist/systemd.d.ts.map +1 -0
- package/packages/scheduler-adapter/dist/systemd.js +203 -0
- package/packages/scheduler-adapter/dist/systemd.js.map +1 -0
- package/packages/scheduler-adapter/package.json +32 -0
- package/packages/scheduler-adapter/src/cron.ts +123 -0
- package/packages/scheduler-adapter/src/index.ts +9 -0
- package/packages/scheduler-adapter/src/interface.ts +61 -0
- package/packages/scheduler-adapter/src/internal.ts +99 -0
- package/packages/scheduler-adapter/src/systemd.ts +221 -0
- package/packages/scheduler-adapter/tsconfig.json +22 -0
- package/packages/scheduler-adapter/tsconfig.tsbuildinfo +1 -0
- package/packages/session/package.json +1 -1
- package/packages/shared-context/package.json +1 -1
- package/packages/skill-registry/package.json +1 -1
- package/packages/sprint-planner/package.json +1 -1
- package/packages/task-compiler/package.json +1 -1
- package/packages/test-data-generator/package.json +1 -1
- package/packages/test-generator/package.json +1 -1
- package/packages/token-estimation/package.json +1 -1
- package/packages/token-optimizer/package.json +1 -1
- package/packages/tui/package.json +1 -1
- package/packages/types/dist/runtime-types.d.ts +6 -0
- package/packages/types/dist/runtime-types.d.ts.map +1 -1
- package/packages/types/dist/runtime-types.js +2 -1
- package/packages/types/dist/runtime-types.js.map +1 -1
- package/packages/types/package.json +1 -1
- package/packages/types/src/ai-providers.ts +73 -0
- package/packages/types/src/runtime-types.ts +15 -0
- package/packages/types/tsconfig.tsbuildinfo +1 -1
- package/packages/worktree/package.json +1 -1
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# Privilege Broker — RFC-0101 §7
|
|
2
|
+
|
|
3
|
+
Safe privilege escalation for autonomous tasks.
|
|
4
|
+
|
|
5
|
+
## Package
|
|
6
|
+
|
|
7
|
+
`@pi-harness/privilege-broker`
|
|
8
|
+
|
|
9
|
+
## Capabilities
|
|
10
|
+
|
|
11
|
+
| Capability | Description | Auto-approve? |
|
|
12
|
+
|---|---|---|
|
|
13
|
+
| `read_files` | Read any file | Yes |
|
|
14
|
+
| `write_files` | Write to non-system paths | No |
|
|
15
|
+
| `run_command` | Execute shell commands | No |
|
|
16
|
+
| `sudo_command` | Execute with sudo | No |
|
|
17
|
+
| `network_request` | HTTP/HTTPS requests | Yes |
|
|
18
|
+
| `git_push` | Push to configured remotes | No |
|
|
19
|
+
| `package_install` | Install npm packages | No |
|
|
20
|
+
| `env_read` | Read environment variables | Yes |
|
|
21
|
+
|
|
22
|
+
## Usage
|
|
23
|
+
|
|
24
|
+
```ts
|
|
25
|
+
import { PrivilegeBroker, ConsoleAuditLogger } from "@pi-harness/privilege-broker";
|
|
26
|
+
|
|
27
|
+
const broker = new PrivilegeBroker({
|
|
28
|
+
audit: new ConsoleAuditLogger(),
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
// Check before running a command
|
|
32
|
+
const result = await broker.check(
|
|
33
|
+
"run_command",
|
|
34
|
+
{ command: "ls /tmp", cwd: "/tmp" },
|
|
35
|
+
async (msg) => confirm(msg),
|
|
36
|
+
);
|
|
37
|
+
|
|
38
|
+
if (result.approved) {
|
|
39
|
+
await broker.execute("run_command", { command: "ls /tmp" });
|
|
40
|
+
}
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## Status
|
|
44
|
+
|
|
45
|
+
Phase 1 done. Approval classes and conditions implemented.
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
# Privilege Registry — RFC-0101 §7
|
|
2
|
+
#
|
|
3
|
+
# Copy this file to `privileges.yaml` and review it before starting the worker.
|
|
4
|
+
# The worker will reject unknown capabilities and refuse to start if this file
|
|
5
|
+
# is missing or invalid.
|
|
6
|
+
#
|
|
7
|
+
# IMPORTANT: Only add entries that have been reviewed and approved by the operator.
|
|
8
|
+
# The broker uses these argv templates literally — no shell interpolation.
|
|
9
|
+
# Each argv element is passed directly to execve(2).
|
|
10
|
+
|
|
11
|
+
version: "1.0"
|
|
12
|
+
updatedAt: "2026-07-23T00:00:00Z"
|
|
13
|
+
|
|
14
|
+
entries:
|
|
15
|
+
# ── Git ────────────────────────────────────────────────────────────────────
|
|
16
|
+
|
|
17
|
+
- name: "git.commit"
|
|
18
|
+
description: "Commit staged changes to a git repository"
|
|
19
|
+
argv:
|
|
20
|
+
- "git"
|
|
21
|
+
- "commit"
|
|
22
|
+
- "-m"
|
|
23
|
+
- "{message}"
|
|
24
|
+
envWhitelist:
|
|
25
|
+
- "GIT_AUTHOR_NAME"
|
|
26
|
+
- "GIT_AUTHOR_EMAIL"
|
|
27
|
+
- "GIT_COMMITTER_NAME"
|
|
28
|
+
- "GIT_COMMITTER_EMAIL"
|
|
29
|
+
- "GIT_DIR"
|
|
30
|
+
user: "frappe"
|
|
31
|
+
timeoutMs: 30_000
|
|
32
|
+
production: false # requires operator review before enabling
|
|
33
|
+
|
|
34
|
+
- name: "git.push"
|
|
35
|
+
description: "Push commits to a remote git repository"
|
|
36
|
+
argv:
|
|
37
|
+
- "git"
|
|
38
|
+
- "push"
|
|
39
|
+
- "--quiet"
|
|
40
|
+
- "origin"
|
|
41
|
+
- "{branch}"
|
|
42
|
+
envWhitelist:
|
|
43
|
+
- "GIT_DIR"
|
|
44
|
+
- "GIT_SSH_COMMAND"
|
|
45
|
+
user: "frappe"
|
|
46
|
+
timeoutMs: 60_000
|
|
47
|
+
production: false
|
|
48
|
+
|
|
49
|
+
- name: "git.pull"
|
|
50
|
+
description: "Pull changes from a remote git repository"
|
|
51
|
+
argv:
|
|
52
|
+
- "git"
|
|
53
|
+
- "pull"
|
|
54
|
+
- "--quiet"
|
|
55
|
+
- "origin"
|
|
56
|
+
- "{branch}"
|
|
57
|
+
envWhitelist:
|
|
58
|
+
- "GIT_DIR"
|
|
59
|
+
- "GIT_SSH_COMMAND"
|
|
60
|
+
user: "frappe"
|
|
61
|
+
timeoutMs: 120_000
|
|
62
|
+
production: false
|
|
63
|
+
|
|
64
|
+
# ── Bench commands ──────────────────────────────────────────────────────────
|
|
65
|
+
|
|
66
|
+
- name: "bench.build"
|
|
67
|
+
description: "Build a Frappe/ERPNext app via bench"
|
|
68
|
+
argv:
|
|
69
|
+
- "bench"
|
|
70
|
+
- "--site"
|
|
71
|
+
- "{site}"
|
|
72
|
+
- "build"
|
|
73
|
+
- "--app"
|
|
74
|
+
- "{app}"
|
|
75
|
+
envWhitelist:
|
|
76
|
+
- "FRAPPE_SITE"
|
|
77
|
+
user: "frappe"
|
|
78
|
+
timeoutMs: 300_000
|
|
79
|
+
production: false
|
|
80
|
+
|
|
81
|
+
- name: "bench.migrate"
|
|
82
|
+
description: "Run database migrations via bench"
|
|
83
|
+
argv:
|
|
84
|
+
- "bench"
|
|
85
|
+
- "--site"
|
|
86
|
+
- "{site}"
|
|
87
|
+
- "migrate"
|
|
88
|
+
envWhitelist:
|
|
89
|
+
- "FRAPPE_SITE"
|
|
90
|
+
user: "frappe"
|
|
91
|
+
timeoutMs: 600_000
|
|
92
|
+
production: false
|
|
93
|
+
|
|
94
|
+
- name: "bench.restart"
|
|
95
|
+
description: "Restart the Frappe/ERPNext web workers"
|
|
96
|
+
argv:
|
|
97
|
+
- "bench"
|
|
98
|
+
- "restart"
|
|
99
|
+
user: "frappe"
|
|
100
|
+
timeoutMs: 30_000
|
|
101
|
+
production: false
|
|
102
|
+
|
|
103
|
+
# ── System ─────────────────────────────────────────────────────────────────
|
|
104
|
+
|
|
105
|
+
- name: "system.restart"
|
|
106
|
+
description: "Restart the pi-harness runtime service via systemctl"
|
|
107
|
+
argv:
|
|
108
|
+
- "systemctl"
|
|
109
|
+
- "restart"
|
|
110
|
+
- "pi-harness-runtime"
|
|
111
|
+
user: "root"
|
|
112
|
+
timeoutMs: 60_000
|
|
113
|
+
production: false
|
|
114
|
+
|
|
115
|
+
- name: "system.logs"
|
|
116
|
+
description: "Read recent systemd journal logs for the pi-harness runtime"
|
|
117
|
+
argv:
|
|
118
|
+
- "journalctl"
|
|
119
|
+
- "--no-pager"
|
|
120
|
+
- "-n"
|
|
121
|
+
- "100"
|
|
122
|
+
- "-u"
|
|
123
|
+
- "pi-harness-runtime"
|
|
124
|
+
user: "frappe"
|
|
125
|
+
timeoutMs: 15_000
|
|
126
|
+
production: true
|
|
127
|
+
|
|
128
|
+
# ── OKF ───────────────────────────────────────────────────────────────────
|
|
129
|
+
|
|
130
|
+
- name: "okf.promote-pattern"
|
|
131
|
+
description: "Promote a task result as a reusable pattern in the OKF"
|
|
132
|
+
argv:
|
|
133
|
+
- "okf"
|
|
134
|
+
- "promote"
|
|
135
|
+
- "pattern"
|
|
136
|
+
- "--path"
|
|
137
|
+
- "{path}"
|
|
138
|
+
- "--hash"
|
|
139
|
+
- "{contentHash}"
|
|
140
|
+
user: "frappe"
|
|
141
|
+
timeoutMs: 30_000
|
|
142
|
+
production: false
|
|
143
|
+
|
|
144
|
+
- name: "okf.promote-lesson"
|
|
145
|
+
description: "Promote a classified failure as a lesson in the OKF"
|
|
146
|
+
argv:
|
|
147
|
+
- "okf"
|
|
148
|
+
- "promote"
|
|
149
|
+
- "lesson"
|
|
150
|
+
- "--path"
|
|
151
|
+
- "{path}"
|
|
152
|
+
- "--category"
|
|
153
|
+
- "{category}"
|
|
154
|
+
user: "frappe"
|
|
155
|
+
timeoutMs: 30_000
|
|
156
|
+
production: false
|
|
157
|
+
|
|
158
|
+
# ── Notify ────────────────────────────────────────────────────────────────
|
|
159
|
+
|
|
160
|
+
- name: "notify.send"
|
|
161
|
+
description: "Send a notification via the notification runtime (RFC-0022)"
|
|
162
|
+
argv:
|
|
163
|
+
- "notify-send"
|
|
164
|
+
- "--title"
|
|
165
|
+
- "{title}"
|
|
166
|
+
- "--body"
|
|
167
|
+
- "{body}"
|
|
168
|
+
- "--urgency"
|
|
169
|
+
- "{urgency}"
|
|
170
|
+
user: "frappe"
|
|
171
|
+
timeoutMs: 10_000
|
|
172
|
+
production: true
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Approval Class — RFC-0101 §8
|
|
3
|
+
*
|
|
4
|
+
* Replaces runtime-wide `require-approval` flag with per-capability policies.
|
|
5
|
+
* Human approves or denies on first use; decision is cached for subsequent uses
|
|
6
|
+
* within the same session.
|
|
7
|
+
*/
|
|
8
|
+
import type { ApprovalClass, CapabilityName } from "./types.js";
|
|
9
|
+
/** Result of an approval check. */
|
|
10
|
+
export type ApprovalResult = "granted" | "denied" | "error";
|
|
11
|
+
/**
|
|
12
|
+
* Register an approval class by id.
|
|
13
|
+
* Must be called before any checkApproval() call.
|
|
14
|
+
*/
|
|
15
|
+
export declare function registerApprovalClass(cls: ApprovalClass): void;
|
|
16
|
+
/**
|
|
17
|
+
* Check if a capability is approved for an actor.
|
|
18
|
+
* Asks the human via requestor() on first use; caches for the session.
|
|
19
|
+
*/
|
|
20
|
+
export declare function checkApproval(capability: CapabilityName, actor: string, requestor: (msg: string) => Promise<boolean>): Promise<ApprovalResult>;
|
|
21
|
+
/** Clear the approval cache (e.g., at session start). */
|
|
22
|
+
export declare function clearApprovalCache(): void;
|
|
23
|
+
//# sourceMappingURL=approval.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"approval.d.ts","sourceRoot":"","sources":["../src/approval.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEhE,mCAAmC;AACnC,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,CAAC;AAY5D;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,aAAa,GAAG,IAAI,CAE9D;AAED;;;GAGG;AACH,wBAAsB,aAAa,CAClC,UAAU,EAAE,cAAc,EAC1B,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,GAC1C,OAAO,CAAC,cAAc,CAAC,CA0BzB;AAED,yDAAyD;AACzD,wBAAgB,kBAAkB,IAAI,IAAI,CAEzC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/** Cache of session-level approval decisions. */
|
|
2
|
+
const approved = new Map();
|
|
3
|
+
/** Map from class id → its policy. */
|
|
4
|
+
const classes = new Map();
|
|
5
|
+
function cacheKey(capability, actor) {
|
|
6
|
+
return `${actor}::${capability}`;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Register an approval class by id.
|
|
10
|
+
* Must be called before any checkApproval() call.
|
|
11
|
+
*/
|
|
12
|
+
export function registerApprovalClass(cls) {
|
|
13
|
+
classes.set(cls.id, cls);
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Check if a capability is approved for an actor.
|
|
17
|
+
* Asks the human via requestor() on first use; caches for the session.
|
|
18
|
+
*/
|
|
19
|
+
export async function checkApproval(capability, actor, requestor) {
|
|
20
|
+
const key = cacheKey(capability, actor);
|
|
21
|
+
if (approved.has(key)) {
|
|
22
|
+
return approved.get(key);
|
|
23
|
+
}
|
|
24
|
+
// Find the approval class for this capability
|
|
25
|
+
const cls = classes.get(capability);
|
|
26
|
+
if (!cls) {
|
|
27
|
+
// No approval class registered — default deny
|
|
28
|
+
approved.set(key, "denied");
|
|
29
|
+
return "denied";
|
|
30
|
+
}
|
|
31
|
+
try {
|
|
32
|
+
const decision = await cls.prompt(capability, actor, `Allow capability "${capability}" for actor "${actor}"?`);
|
|
33
|
+
approved.set(key, decision);
|
|
34
|
+
return decision;
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
approved.set(key, "error");
|
|
38
|
+
return "error";
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
/** Clear the approval cache (e.g., at session start). */
|
|
42
|
+
export function clearApprovalCache() {
|
|
43
|
+
approved.clear();
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=approval.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"approval.js","sourceRoot":"","sources":["../src/approval.ts"],"names":[],"mappings":"AAYA,iDAAiD;AACjD,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA0B,CAAC;AAEnD,sCAAsC;AACtC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAyB,CAAC;AAEjD,SAAS,QAAQ,CAAC,UAA0B,EAAE,KAAa;IAC1D,OAAO,GAAG,KAAK,KAAK,UAAU,EAAE,CAAC;AAClC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,GAAkB;IACvD,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;AAC1B,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAClC,UAA0B,EAC1B,KAAa,EACb,SAA4C;IAE5C,MAAM,GAAG,GAAG,QAAQ,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IACxC,IAAI,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;QACvB,OAAO,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC;IAC3B,CAAC;IAED,8CAA8C;IAC9C,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACpC,IAAI,CAAC,GAAG,EAAE,CAAC;QACV,8CAA8C;QAC9C,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QAC5B,OAAO,QAAQ,CAAC;IACjB,CAAC;IAED,IAAI,CAAC;QACJ,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,MAAM,CAChC,UAAU,EACV,KAAK,EACL,qBAAqB,UAAU,gBAAgB,KAAK,IAAI,CACxD,CAAC;QACF,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QAC5B,OAAO,QAAQ,CAAC;IACjB,CAAC;IAAC,MAAM,CAAC;QACR,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAC3B,OAAO,OAAO,CAAC;IAChB,CAAC;AACF,CAAC;AAED,yDAAyD;AACzD,MAAM,UAAU,kBAAkB;IACjC,QAAQ,CAAC,KAAK,EAAE,CAAC;AAClB,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { AuditEntry, AuditLogger } from "./types.js";
|
|
2
|
+
/** No-op logger — discards all events. */
|
|
3
|
+
export declare class NoOpAuditLogger implements AuditLogger {
|
|
4
|
+
log(_entry: AuditEntry): void;
|
|
5
|
+
}
|
|
6
|
+
/** Console logger — writes human-readable lines to stdout/stderr. */
|
|
7
|
+
export declare class ConsoleAuditLogger implements AuditLogger {
|
|
8
|
+
log(entry: AuditEntry): void;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* JSON Lines file logger — appends one JSON object per event.
|
|
12
|
+
* Auto-creates parent directory. Auto-rotates when file exceeds maxSizeBytes.
|
|
13
|
+
*/
|
|
14
|
+
export declare class FileAuditLogger implements AuditLogger {
|
|
15
|
+
private readonly logPath;
|
|
16
|
+
private readonly maxSizeBytes;
|
|
17
|
+
private readonly maxRotations;
|
|
18
|
+
constructor(options?: {
|
|
19
|
+
logPath?: string;
|
|
20
|
+
maxSizeBytes?: number;
|
|
21
|
+
maxRotations?: number;
|
|
22
|
+
});
|
|
23
|
+
log(entry: AuditEntry): void;
|
|
24
|
+
private _ensureDir;
|
|
25
|
+
private _rotateIfNeeded;
|
|
26
|
+
/**
|
|
27
|
+
* Read recent audit entries.
|
|
28
|
+
* Returns newest entries last.
|
|
29
|
+
*/
|
|
30
|
+
query(options?: {
|
|
31
|
+
workerId?: string;
|
|
32
|
+
taskId?: string;
|
|
33
|
+
capability?: string;
|
|
34
|
+
success?: boolean;
|
|
35
|
+
limit?: number;
|
|
36
|
+
}): AuditEntry[];
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=audit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../src/audit.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE1D,0CAA0C;AAC1C,qBAAa,eAAgB,YAAW,WAAW;IAClD,GAAG,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI,CAE5B;CACD;AAED,qEAAqE;AACrE,qBAAa,kBAAmB,YAAW,WAAW;IACrD,GAAG,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,CAsB3B;CACD;AAED;;;GAGG;AACH,qBAAa,eAAgB,YAAW,WAAW;IAClD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IAEtC,YACC,OAAO,GAAE;QACR,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,YAAY,CAAC,EAAE,MAAM,CAAC;KACjB,EAQN;IAED,GAAG,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,CAI3B;IAED,OAAO,CAAC,UAAU;IAOlB,OAAO,CAAC,eAAe;IAqBvB;;;OAGG;IACH,KAAK,CAAC,OAAO,CAAC,EAAE;QACf,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,KAAK,CAAC,EAAE,MAAM,CAAC;KACf,GAAG,UAAU,EAAE,CAqBf;CACD"}
|