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.
Files changed (175) hide show
  1. package/harness/auto-quota-resume.ts +129 -0
  2. package/harness/e2e/minimax-quota-scraper.ts +10 -4
  3. package/harness/index.ts +8 -0
  4. package/harness/loop-runtime.ts +57 -0
  5. package/index.ts +47 -11
  6. package/mirror.ts +40 -18
  7. package/package.json +1 -1
  8. package/packages/a2a-adapter/package.json +1 -1
  9. package/packages/auth/package.json +1 -1
  10. package/packages/autonomous-refactor/package.json +1 -1
  11. package/packages/autonomous-runtime/README.md +48 -0
  12. package/packages/autonomous-runtime/dist/inbox.d.ts +75 -0
  13. package/packages/autonomous-runtime/dist/inbox.d.ts.map +1 -0
  14. package/packages/autonomous-runtime/dist/inbox.js +212 -0
  15. package/packages/autonomous-runtime/dist/inbox.js.map +1 -0
  16. package/packages/autonomous-runtime/dist/index.d.ts +17 -0
  17. package/packages/autonomous-runtime/dist/index.d.ts.map +1 -0
  18. package/packages/autonomous-runtime/dist/index.js +17 -0
  19. package/packages/autonomous-runtime/dist/index.js.map +1 -0
  20. package/packages/autonomous-runtime/dist/lease.d.ts +78 -0
  21. package/packages/autonomous-runtime/dist/lease.d.ts.map +1 -0
  22. package/packages/autonomous-runtime/dist/lease.js +273 -0
  23. package/packages/autonomous-runtime/dist/lease.js.map +1 -0
  24. package/packages/autonomous-runtime/dist/types.d.ts +160 -0
  25. package/packages/autonomous-runtime/dist/types.d.ts.map +1 -0
  26. package/packages/autonomous-runtime/dist/types.js +31 -0
  27. package/packages/autonomous-runtime/dist/types.js.map +1 -0
  28. package/packages/autonomous-runtime/dist/worker.d.ts +63 -0
  29. package/packages/autonomous-runtime/dist/worker.d.ts.map +1 -0
  30. package/packages/autonomous-runtime/dist/worker.js +133 -0
  31. package/packages/autonomous-runtime/dist/worker.js.map +1 -0
  32. package/packages/autonomous-runtime/package.json +34 -0
  33. package/packages/autonomous-runtime/src/inbox.ts +266 -0
  34. package/packages/autonomous-runtime/src/index.ts +22 -0
  35. package/packages/autonomous-runtime/src/lease.ts +318 -0
  36. package/packages/autonomous-runtime/src/types.ts +257 -0
  37. package/packages/autonomous-runtime/test/autonomous-runtime.test.ts +194 -0
  38. package/packages/autonomous-runtime/test/inbox.test.mjs +266 -0
  39. package/packages/autonomous-runtime/test/inbox.test.ts +80 -0
  40. package/packages/autonomous-runtime/test/types.test.ts +68 -0
  41. package/packages/autonomous-runtime/tsconfig.json +22 -0
  42. package/packages/autonomous-runtime/tsconfig.tsbuildinfo +1 -0
  43. package/packages/cache-strategy/package.json +1 -1
  44. package/packages/capability-registry/package.json +1 -1
  45. package/packages/checkpoint/package.json +1 -1
  46. package/packages/cli-plugin-sdk/package.json +1 -1
  47. package/packages/code-generation/package.json +1 -1
  48. package/packages/code-review/package.json +1 -1
  49. package/packages/codex-adapter/package.json +1 -1
  50. package/packages/context-compiler/package.json +1 -1
  51. package/packages/context-manager/package.json +1 -1
  52. package/packages/cookie-sanitizer/package.json +1 -1
  53. package/packages/cost-optimizer/package.json +1 -1
  54. package/packages/django-plugin/package.json +1 -1
  55. package/packages/doc-generator/package.json +1 -1
  56. package/packages/evaluation-engine/package.json +1 -1
  57. package/packages/evaluation-runner/package.json +1 -1
  58. package/packages/experience-replay/package.json +1 -1
  59. package/packages/feedback-collector/package.json +1 -1
  60. package/packages/framework-detector/package.json +1 -1
  61. package/packages/framework-plugin-sdk/package.json +1 -1
  62. package/packages/frappe-plugin/package.json +1 -1
  63. package/packages/generic-web-plugin/package.json +1 -1
  64. package/packages/health-monitor/package.json +1 -1
  65. package/packages/laravel-plugin/package.json +1 -1
  66. package/packages/learning-engine/package.json +1 -1
  67. package/packages/mcp-adapter/package.json +1 -1
  68. package/packages/memory-engine/package.json +1 -1
  69. package/packages/model-registry/package.json +1 -1
  70. package/packages/nextjs-plugin/package.json +1 -1
  71. package/packages/notification/package.json +1 -1
  72. package/packages/observability/package.json +1 -1
  73. package/packages/performance-optimizer/package.json +1 -1
  74. package/packages/privilege-broker/README.md +45 -0
  75. package/packages/privilege-broker/config/privileges.yaml.example +172 -0
  76. package/packages/privilege-broker/dist/approval.d.ts +23 -0
  77. package/packages/privilege-broker/dist/approval.d.ts.map +1 -0
  78. package/packages/privilege-broker/dist/approval.js +45 -0
  79. package/packages/privilege-broker/dist/approval.js.map +1 -0
  80. package/packages/privilege-broker/dist/audit.d.ts +38 -0
  81. package/packages/privilege-broker/dist/audit.d.ts.map +1 -0
  82. package/packages/privilege-broker/dist/audit.js +125 -0
  83. package/packages/privilege-broker/dist/audit.js.map +1 -0
  84. package/packages/privilege-broker/dist/executor.d.ts +25 -0
  85. package/packages/privilege-broker/dist/executor.d.ts.map +1 -0
  86. package/packages/privilege-broker/dist/executor.js +83 -0
  87. package/packages/privilege-broker/dist/executor.js.map +1 -0
  88. package/packages/privilege-broker/dist/index.d.ts +30 -0
  89. package/packages/privilege-broker/dist/index.d.ts.map +1 -0
  90. package/packages/privilege-broker/dist/index.js +5 -0
  91. package/packages/privilege-broker/dist/index.js.map +1 -0
  92. package/packages/privilege-broker/dist/registry.d.ts +15 -0
  93. package/packages/privilege-broker/dist/registry.d.ts.map +1 -0
  94. package/packages/privilege-broker/dist/registry.js +76 -0
  95. package/packages/privilege-broker/dist/registry.js.map +1 -0
  96. package/packages/privilege-broker/dist/types.d.ts +77 -0
  97. package/packages/privilege-broker/dist/types.d.ts.map +1 -0
  98. package/packages/privilege-broker/dist/types.js +11 -0
  99. package/packages/privilege-broker/dist/types.js.map +1 -0
  100. package/packages/privilege-broker/package.json +35 -0
  101. package/packages/privilege-broker/src/approval.ts +70 -0
  102. package/packages/privilege-broker/src/audit.ts +142 -0
  103. package/packages/privilege-broker/src/executor.ts +110 -0
  104. package/packages/privilege-broker/src/index.ts +46 -0
  105. package/packages/privilege-broker/src/registry.ts +98 -0
  106. package/packages/privilege-broker/src/types.ts +105 -0
  107. package/packages/privilege-broker/tsconfig.json +22 -0
  108. package/packages/privilege-broker/tsconfig.tsbuildinfo +1 -0
  109. package/packages/project-analyzer/package.json +1 -1
  110. package/packages/prompt-compiler/package.json +1 -1
  111. package/packages/prompt-versioning/package.json +1 -1
  112. package/packages/provider-adapter-sdk/package.json +1 -1
  113. package/packages/provider-router/package.json +1 -1
  114. package/packages/provider-selector/package.json +1 -1
  115. package/packages/providers/dist/provider-id.d.ts +2 -0
  116. package/packages/providers/dist/provider-id.d.ts.map +1 -1
  117. package/packages/providers/dist/provider-id.js +9 -0
  118. package/packages/providers/dist/provider-id.js.map +1 -1
  119. package/packages/providers/package.json +1 -1
  120. package/packages/providers/src/provider-id.ts +12 -0
  121. package/packages/quota-manager/package.json +1 -1
  122. package/packages/rate-limiter/package.json +1 -1
  123. package/packages/react-vite-plugin/package.json +1 -1
  124. package/packages/release-manager/package.json +1 -1
  125. package/packages/requirement-compiler/package.json +1 -1
  126. package/packages/runtime/package.json +1 -1
  127. package/packages/scheduler/package.json +1 -1
  128. package/packages/scheduler-adapter/README.md +36 -0
  129. package/packages/scheduler-adapter/dist/cron.d.ts +21 -0
  130. package/packages/scheduler-adapter/dist/cron.d.ts.map +1 -0
  131. package/packages/scheduler-adapter/dist/cron.js +116 -0
  132. package/packages/scheduler-adapter/dist/cron.js.map +1 -0
  133. package/packages/scheduler-adapter/dist/index.d.ts +9 -0
  134. package/packages/scheduler-adapter/dist/index.d.ts.map +1 -0
  135. package/packages/scheduler-adapter/dist/index.js +8 -0
  136. package/packages/scheduler-adapter/dist/index.js.map +1 -0
  137. package/packages/scheduler-adapter/dist/interface.d.ts +61 -0
  138. package/packages/scheduler-adapter/dist/interface.d.ts.map +1 -0
  139. package/packages/scheduler-adapter/dist/interface.js +2 -0
  140. package/packages/scheduler-adapter/dist/interface.js.map +1 -0
  141. package/packages/scheduler-adapter/dist/internal.d.ts +30 -0
  142. package/packages/scheduler-adapter/dist/internal.d.ts.map +1 -0
  143. package/packages/scheduler-adapter/dist/internal.js +82 -0
  144. package/packages/scheduler-adapter/dist/internal.js.map +1 -0
  145. package/packages/scheduler-adapter/dist/systemd.d.ts +31 -0
  146. package/packages/scheduler-adapter/dist/systemd.d.ts.map +1 -0
  147. package/packages/scheduler-adapter/dist/systemd.js +203 -0
  148. package/packages/scheduler-adapter/dist/systemd.js.map +1 -0
  149. package/packages/scheduler-adapter/package.json +32 -0
  150. package/packages/scheduler-adapter/src/cron.ts +123 -0
  151. package/packages/scheduler-adapter/src/index.ts +9 -0
  152. package/packages/scheduler-adapter/src/interface.ts +61 -0
  153. package/packages/scheduler-adapter/src/internal.ts +99 -0
  154. package/packages/scheduler-adapter/src/systemd.ts +221 -0
  155. package/packages/scheduler-adapter/tsconfig.json +22 -0
  156. package/packages/scheduler-adapter/tsconfig.tsbuildinfo +1 -0
  157. package/packages/session/package.json +1 -1
  158. package/packages/shared-context/package.json +1 -1
  159. package/packages/skill-registry/package.json +1 -1
  160. package/packages/sprint-planner/package.json +1 -1
  161. package/packages/task-compiler/package.json +1 -1
  162. package/packages/test-data-generator/package.json +1 -1
  163. package/packages/test-generator/package.json +1 -1
  164. package/packages/token-estimation/package.json +1 -1
  165. package/packages/token-optimizer/package.json +1 -1
  166. package/packages/tui/package.json +1 -1
  167. package/packages/types/dist/runtime-types.d.ts +6 -0
  168. package/packages/types/dist/runtime-types.d.ts.map +1 -1
  169. package/packages/types/dist/runtime-types.js +2 -1
  170. package/packages/types/dist/runtime-types.js.map +1 -1
  171. package/packages/types/package.json +1 -1
  172. package/packages/types/src/ai-providers.ts +73 -0
  173. package/packages/types/src/runtime-types.ts +15 -0
  174. package/packages/types/tsconfig.tsbuildinfo +1 -1
  175. package/packages/worktree/package.json +1 -1
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi/context-compiler",
3
- "version": "0.9.11",
3
+ "version": "0.9.15",
4
4
  "description": "Bounded context selection engine for pi-harness-runtime",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/context-manager",
3
- "version": "0.9.11",
3
+ "version": "0.9.15",
4
4
  "description": "Context Window Manager — prevents model context overflow via compaction and resume prompts (RFC-0010)",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/cookie-sanitizer",
3
- "version": "0.9.11",
3
+ "version": "0.9.15",
4
4
  "description": "pi-harness-runtime — cookie sanitizer (provider-quota cookie file normaliser)",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/cost-optimizer",
3
- "version": "0.9.11",
3
+ "version": "0.9.15",
4
4
  "description": "Cost Optimizer for pi-harness-runtime — budget tracking, forecasting, and model selection optimization",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi/django-plugin",
3
- "version": "0.9.11",
3
+ "version": "0.9.15",
4
4
  "description": "Django framework analysis — models, management commands, settings",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/doc-generator",
3
- "version": "0.9.11",
3
+ "version": "0.9.15",
4
4
  "description": "Auto-Doc Generator — generate documentation from source code (RFC-0014)",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/evaluation-engine",
3
- "version": "0.9.11",
3
+ "version": "0.9.15",
4
4
  "description": "Evaluation engine for pi-harness runtime (RFC-0057)",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi/evaluation-runner",
3
- "version": "0.9.11",
3
+ "version": "0.9.15",
4
4
  "type": "module",
5
5
  "description": "Framework-agnostic evaluation framework for AI outputs (RFC-0020)",
6
6
  "main": "dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/experience-replay",
3
- "version": "0.9.11",
3
+ "version": "0.9.15",
4
4
  "description": "Experience replay for debugging and reproducibility (RFC-0059)",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi/feedback-collector",
3
- "version": "0.9.11",
3
+ "version": "0.9.15",
4
4
  "type": "module",
5
5
  "description": "Collect and aggregate human/automated feedback (RFC-0021)",
6
6
  "main": "dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi/framework-detector",
3
- "version": "0.9.11",
3
+ "version": "0.9.15",
4
4
  "description": "Framework detection system for pi-harness-runtime",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi/framework-plugin-sdk",
3
- "version": "0.9.11",
3
+ "version": "0.9.15",
4
4
  "description": "Framework plugin SDK for pi-harness-runtime",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi/frappe-plugin",
3
- "version": "0.9.11",
3
+ "version": "0.9.15",
4
4
  "description": "Frappe/ERPNext framework analysis — DocTypes, hooks, bench sites, site config",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi/generic-web-plugin",
3
- "version": "0.9.11",
3
+ "version": "0.9.15",
4
4
  "description": "Generic web framework analysis — REST/GraphQL endpoints, OpenAPI, auth",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi/health-monitor",
3
- "version": "0.9.11",
3
+ "version": "0.9.15",
4
4
  "type": "module",
5
5
  "description": "Health monitoring and auto-healing",
6
6
  "main": "dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi/laravel-plugin",
3
- "version": "0.9.11",
3
+ "version": "0.9.15",
4
4
  "description": "Laravel framework analysis — artisan commands, Eloquent models, Blade",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/learning-engine",
3
- "version": "0.9.11",
3
+ "version": "0.9.15",
4
4
  "description": "Learning engine for extracting lessons from runtime execution (RFC-0058)",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi/mcp-adapter",
3
- "version": "0.9.11",
3
+ "version": "0.9.15",
4
4
  "type": "module",
5
5
  "description": "MCP server adapter for pi-harness — exposes harness capabilities as MCP tools/resources/prompts (RFC-0068)",
6
6
  "main": "dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/memory-engine",
3
- "version": "0.9.11",
3
+ "version": "0.9.15",
4
4
  "description": "Memory engine with OKF integration for durable knowledge management (RFC-0060)",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/model-registry",
3
- "version": "0.9.11",
3
+ "version": "0.9.15",
4
4
  "description": "Model Registry for pi-harness-runtime — centralized model metadata with pricing",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/nextjs-plugin",
3
- "version": "0.9.11",
3
+ "version": "0.9.15",
4
4
  "description": "Next.js framework detection and analysis for pi-harness-runtime (RFC-0062)",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/notification",
3
- "version": "0.9.11",
3
+ "version": "0.9.15",
4
4
  "description": "pi-harness-runtime — notification",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi/observability",
3
- "version": "0.9.11",
3
+ "version": "0.9.15",
4
4
  "description": "Comprehensive observability system with structured logging, tracing, metrics, and alerting",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/performance-optimizer",
3
- "version": "0.9.11",
3
+ "version": "0.9.15",
4
4
  "description": "Performance optimization analyzer for pi-harness runtime (RFC-0056)",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -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"}