@pickle-pee/runtime 0.0.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.
Files changed (149) hide show
  1. package/README.md +99 -0
  2. package/dist/adapters/index.d.ts +3 -0
  3. package/dist/adapters/index.js +10 -0
  4. package/dist/adapters/index.js.map +1 -0
  5. package/dist/adapters/kernel-session-adapter.d.ts +73 -0
  6. package/dist/adapters/kernel-session-adapter.js +10 -0
  7. package/dist/adapters/kernel-session-adapter.js.map +1 -0
  8. package/dist/adapters/pi-mono-event-bridge.d.ts +54 -0
  9. package/dist/adapters/pi-mono-event-bridge.js +159 -0
  10. package/dist/adapters/pi-mono-event-bridge.js.map +1 -0
  11. package/dist/adapters/pi-mono-session-adapter.d.ts +75 -0
  12. package/dist/adapters/pi-mono-session-adapter.js +490 -0
  13. package/dist/adapters/pi-mono-session-adapter.js.map +1 -0
  14. package/dist/create-app-runtime.d.ts +52 -0
  15. package/dist/create-app-runtime.js +163 -0
  16. package/dist/create-app-runtime.js.map +1 -0
  17. package/dist/domain/index.d.ts +1 -0
  18. package/dist/domain/index.js +5 -0
  19. package/dist/domain/index.js.map +1 -0
  20. package/dist/events/event-bus.d.ts +23 -0
  21. package/dist/events/event-bus.js +85 -0
  22. package/dist/events/event-bus.js.map +1 -0
  23. package/dist/events/index.d.ts +3 -0
  24. package/dist/events/index.js +6 -0
  25. package/dist/events/index.js.map +1 -0
  26. package/dist/events/runtime-event.d.ts +158 -0
  27. package/dist/events/runtime-event.js +13 -0
  28. package/dist/events/runtime-event.js.map +1 -0
  29. package/dist/governance/tool-governor.d.ts +63 -0
  30. package/dist/governance/tool-governor.js +639 -0
  31. package/dist/governance/tool-governor.js.map +1 -0
  32. package/dist/index.d.ts +33 -0
  33. package/dist/index.js +76 -0
  34. package/dist/index.js.map +1 -0
  35. package/dist/planning/index.d.ts +6 -0
  36. package/dist/planning/index.js +16 -0
  37. package/dist/planning/index.js.map +1 -0
  38. package/dist/planning/plan-engine.d.ts +49 -0
  39. package/dist/planning/plan-engine.js +174 -0
  40. package/dist/planning/plan-engine.js.map +1 -0
  41. package/dist/planning/plan-events.d.ts +14 -0
  42. package/dist/planning/plan-events.js +94 -0
  43. package/dist/planning/plan-events.js.map +1 -0
  44. package/dist/planning/plan-orchestrator.d.ts +56 -0
  45. package/dist/planning/plan-orchestrator.js +167 -0
  46. package/dist/planning/plan-orchestrator.js.map +1 -0
  47. package/dist/planning/plan-types.d.ts +36 -0
  48. package/dist/planning/plan-types.js +9 -0
  49. package/dist/planning/plan-types.js.map +1 -0
  50. package/dist/runtime-context.d.ts +21 -0
  51. package/dist/runtime-context.js +37 -0
  52. package/dist/runtime-context.js.map +1 -0
  53. package/dist/services/event-normalizer.d.ts +22 -0
  54. package/dist/services/event-normalizer.js +162 -0
  55. package/dist/services/event-normalizer.js.map +1 -0
  56. package/dist/services/index.d.ts +1 -0
  57. package/dist/services/index.js +7 -0
  58. package/dist/services/index.js.map +1 -0
  59. package/dist/session/session-events.d.ts +11 -0
  60. package/dist/session/session-events.js +52 -0
  61. package/dist/session/session-events.js.map +1 -0
  62. package/dist/session/session-facade.d.ts +88 -0
  63. package/dist/session/session-facade.js +439 -0
  64. package/dist/session/session-facade.js.map +1 -0
  65. package/dist/session/session-state.d.ts +14 -0
  66. package/dist/session/session-state.js +75 -0
  67. package/dist/session/session-state.js.map +1 -0
  68. package/dist/subagent/aggregation.d.ts +25 -0
  69. package/dist/subagent/aggregation.js +124 -0
  70. package/dist/subagent/aggregation.js.map +1 -0
  71. package/dist/subagent/index.d.ts +10 -0
  72. package/dist/subagent/index.js +29 -0
  73. package/dist/subagent/index.js.map +1 -0
  74. package/dist/subagent/path-scope.d.ts +24 -0
  75. package/dist/subagent/path-scope.js +86 -0
  76. package/dist/subagent/path-scope.js.map +1 -0
  77. package/dist/subagent/result-types.d.ts +61 -0
  78. package/dist/subagent/result-types.js +9 -0
  79. package/dist/subagent/result-types.js.map +1 -0
  80. package/dist/subagent/stop-condition.d.ts +34 -0
  81. package/dist/subagent/stop-condition.js +76 -0
  82. package/dist/subagent/stop-condition.js.map +1 -0
  83. package/dist/subagent/task-types.d.ts +48 -0
  84. package/dist/subagent/task-types.js +10 -0
  85. package/dist/subagent/task-types.js.map +1 -0
  86. package/dist/subagent/task-validator.d.ts +22 -0
  87. package/dist/subagent/task-validator.js +79 -0
  88. package/dist/subagent/task-validator.js.map +1 -0
  89. package/dist/subagent/verification.d.ts +22 -0
  90. package/dist/subagent/verification.js +55 -0
  91. package/dist/subagent/verification.js.map +1 -0
  92. package/dist/test/aggregation.test.d.ts +1 -0
  93. package/dist/test/aggregation.test.js +201 -0
  94. package/dist/test/aggregation.test.js.map +1 -0
  95. package/dist/test/create-app-runtime.test.d.ts +1 -0
  96. package/dist/test/create-app-runtime.test.js +286 -0
  97. package/dist/test/create-app-runtime.test.js.map +1 -0
  98. package/dist/test/event-bus.test.d.ts +1 -0
  99. package/dist/test/event-bus.test.js +81 -0
  100. package/dist/test/event-bus.test.js.map +1 -0
  101. package/dist/test/event-normalizer.test.d.ts +1 -0
  102. package/dist/test/event-normalizer.test.js +143 -0
  103. package/dist/test/event-normalizer.test.js.map +1 -0
  104. package/dist/test/path-scope.test.d.ts +1 -0
  105. package/dist/test/path-scope.test.js +71 -0
  106. package/dist/test/path-scope.test.js.map +1 -0
  107. package/dist/test/pi-mono-event-bridge.test.d.ts +1 -0
  108. package/dist/test/pi-mono-event-bridge.test.js +125 -0
  109. package/dist/test/pi-mono-event-bridge.test.js.map +1 -0
  110. package/dist/test/pi-mono-live.test.d.ts +1 -0
  111. package/dist/test/pi-mono-live.test.js +289 -0
  112. package/dist/test/pi-mono-live.test.js.map +1 -0
  113. package/dist/test/pi-mono-session-adapter.test.d.ts +1 -0
  114. package/dist/test/pi-mono-session-adapter.test.js +260 -0
  115. package/dist/test/pi-mono-session-adapter.test.js.map +1 -0
  116. package/dist/test/plan-engine.test.d.ts +1 -0
  117. package/dist/test/plan-engine.test.js +235 -0
  118. package/dist/test/plan-engine.test.js.map +1 -0
  119. package/dist/test/plan-events.test.d.ts +1 -0
  120. package/dist/test/plan-events.test.js +81 -0
  121. package/dist/test/plan-events.test.js.map +1 -0
  122. package/dist/test/plan-orchestrator.test.d.ts +1 -0
  123. package/dist/test/plan-orchestrator.test.js +324 -0
  124. package/dist/test/plan-orchestrator.test.js.map +1 -0
  125. package/dist/test/runtime-context.test.d.ts +1 -0
  126. package/dist/test/runtime-context.test.js +70 -0
  127. package/dist/test/runtime-context.test.js.map +1 -0
  128. package/dist/test/session-facade.test.d.ts +1 -0
  129. package/dist/test/session-facade.test.js +1011 -0
  130. package/dist/test/session-facade.test.js.map +1 -0
  131. package/dist/test/session-state.test.d.ts +1 -0
  132. package/dist/test/session-state.test.js +118 -0
  133. package/dist/test/session-state.test.js.map +1 -0
  134. package/dist/test/stop-condition.test.d.ts +1 -0
  135. package/dist/test/stop-condition.test.js +105 -0
  136. package/dist/test/stop-condition.test.js.map +1 -0
  137. package/dist/test/stubs/stub-kernel-session-adapter.d.ts +45 -0
  138. package/dist/test/stubs/stub-kernel-session-adapter.js +186 -0
  139. package/dist/test/stubs/stub-kernel-session-adapter.js.map +1 -0
  140. package/dist/test/task-validator.test.d.ts +1 -0
  141. package/dist/test/task-validator.test.js +97 -0
  142. package/dist/test/task-validator.test.js.map +1 -0
  143. package/dist/test/tool-governor.test.d.ts +1 -0
  144. package/dist/test/tool-governor.test.js +379 -0
  145. package/dist/test/tool-governor.test.js.map +1 -0
  146. package/dist/types/index.d.ts +77 -0
  147. package/dist/types/index.js +9 -0
  148. package/dist/types/index.js.map +1 -0
  149. package/package.json +28 -0
@@ -0,0 +1,97 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const vitest_1 = require("vitest");
4
+ const task_validator_js_1 = require("../subagent/task-validator.js");
5
+ // ---------------------------------------------------------------------------
6
+ // Helpers
7
+ // ---------------------------------------------------------------------------
8
+ function makeTask(overrides) {
9
+ return {
10
+ taskId: "task-001",
11
+ goal: "Implement feature X",
12
+ scope: {
13
+ allowedPaths: ["packages/app-runtime/**"],
14
+ forbiddenPaths: ["packages/app-ui/**"],
15
+ },
16
+ inputs: { docs: [], files: [], assumptions: [] },
17
+ deliverables: ["code"],
18
+ verification: [{ name: "build", type: "command", command: "npm run build", description: "Build passes" }],
19
+ stopConditions: [{ type: "boundary_violation", description: "Stop on boundary violation" }],
20
+ ...overrides,
21
+ };
22
+ }
23
+ // ---------------------------------------------------------------------------
24
+ // Tests
25
+ // ---------------------------------------------------------------------------
26
+ (0, vitest_1.describe)("TaskValidator", () => {
27
+ (0, vitest_1.describe)("validateTask", () => {
28
+ (0, vitest_1.it)("accepts a valid task", () => {
29
+ const result = (0, task_validator_js_1.validateTask)(makeTask());
30
+ (0, vitest_1.expect)(result.valid).toBe(true);
31
+ (0, vitest_1.expect)(result.errors).toHaveLength(0);
32
+ });
33
+ (0, vitest_1.it)("rejects task without taskId", () => {
34
+ const result = (0, task_validator_js_1.validateTask)(makeTask({ taskId: "" }));
35
+ (0, vitest_1.expect)(result.valid).toBe(false);
36
+ (0, vitest_1.expect)(result.errors).toContain("taskId must be non-empty");
37
+ });
38
+ (0, vitest_1.it)("rejects task with whitespace-only taskId", () => {
39
+ const result = (0, task_validator_js_1.validateTask)(makeTask({ taskId: " " }));
40
+ (0, vitest_1.expect)(result.valid).toBe(false);
41
+ });
42
+ (0, vitest_1.it)("rejects task without goal", () => {
43
+ const result = (0, task_validator_js_1.validateTask)(makeTask({ goal: "" }));
44
+ (0, vitest_1.expect)(result.valid).toBe(false);
45
+ (0, vitest_1.expect)(result.errors).toContain("goal must be non-empty");
46
+ });
47
+ (0, vitest_1.it)("rejects task without allowedPaths", () => {
48
+ const result = (0, task_validator_js_1.validateTask)(makeTask({ scope: { allowedPaths: [], forbiddenPaths: [] } }));
49
+ (0, vitest_1.expect)(result.valid).toBe(false);
50
+ (0, vitest_1.expect)(result.errors.some((e) => e.includes("allowedPaths"))).toBe(true);
51
+ });
52
+ (0, vitest_1.it)("rejects task without verification", () => {
53
+ const result = (0, task_validator_js_1.validateTask)(makeTask({ verification: [] }));
54
+ (0, vitest_1.expect)(result.valid).toBe(false);
55
+ (0, vitest_1.expect)(result.errors.some((e) => e.includes("verification"))).toBe(true);
56
+ });
57
+ (0, vitest_1.it)("rejects task without stopConditions", () => {
58
+ const result = (0, task_validator_js_1.validateTask)(makeTask({ stopConditions: [] }));
59
+ (0, vitest_1.expect)(result.valid).toBe(false);
60
+ (0, vitest_1.expect)(result.errors.some((e) => e.includes("stopConditions"))).toBe(true);
61
+ });
62
+ (0, vitest_1.it)("collects multiple errors at once", () => {
63
+ const result = (0, task_validator_js_1.validateTask)(makeTask({ taskId: "", goal: "", verification: [], stopConditions: [] }));
64
+ (0, vitest_1.expect)(result.valid).toBe(false);
65
+ (0, vitest_1.expect)(result.errors.length).toBeGreaterThanOrEqual(4);
66
+ });
67
+ });
68
+ (0, vitest_1.describe)("hasRequiredFields", () => {
69
+ (0, vitest_1.it)("returns valid for complete task", () => {
70
+ const result = (0, task_validator_js_1.hasRequiredFields)(makeTask());
71
+ (0, vitest_1.expect)(result.valid).toBe(true);
72
+ });
73
+ (0, vitest_1.it)("lists missing field names", () => {
74
+ const result = (0, task_validator_js_1.hasRequiredFields)(makeTask({ taskId: "", verification: [] }));
75
+ (0, vitest_1.expect)(result.valid).toBe(false);
76
+ (0, vitest_1.expect)(result.errors).toContain("taskId");
77
+ (0, vitest_1.expect)(result.errors).toContain("verification");
78
+ });
79
+ });
80
+ (0, vitest_1.describe)("hasConsistentScope", () => {
81
+ (0, vitest_1.it)("returns valid for non-overlapping scope", () => {
82
+ const scope = {
83
+ allowedPaths: ["packages/a/**"],
84
+ forbiddenPaths: ["packages/b/**"],
85
+ };
86
+ (0, vitest_1.expect)((0, task_validator_js_1.hasConsistentScope)(scope).valid).toBe(true);
87
+ });
88
+ (0, vitest_1.it)("detects overlapping scope", () => {
89
+ const scope = {
90
+ allowedPaths: ["packages/a/**"],
91
+ forbiddenPaths: ["packages/a/**"],
92
+ };
93
+ (0, vitest_1.expect)((0, task_validator_js_1.hasConsistentScope)(scope).valid).toBe(false);
94
+ });
95
+ });
96
+ });
97
+ //# sourceMappingURL=task-validator.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-validator.test.js","sourceRoot":"","sources":["../../src/test/task-validator.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,379 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const vitest_1 = require("vitest");
4
+ const tool_governor_js_1 = require("../governance/tool-governor.js");
5
+ // ---------------------------------------------------------------------------
6
+ // Test helpers
7
+ // ---------------------------------------------------------------------------
8
+ function makeToolDef(overrides = {}) {
9
+ return {
10
+ identity: {
11
+ name: "test_tool",
12
+ category: "file-read",
13
+ },
14
+ contract: {
15
+ parameterSchema: { type: "object", properties: {} },
16
+ output: { type: "text" },
17
+ errorTypes: [],
18
+ },
19
+ policy: {
20
+ riskLevel: "L0",
21
+ readOnly: true,
22
+ concurrency: "unlimited",
23
+ confirmation: "never",
24
+ subAgentAllowed: true,
25
+ timeoutMs: 0,
26
+ },
27
+ executorTag: "test_tool",
28
+ ...overrides,
29
+ };
30
+ }
31
+ const L0_READ = makeToolDef();
32
+ const L2_EDIT = makeToolDef({
33
+ identity: { name: "edit", category: "file-mutation" },
34
+ policy: {
35
+ riskLevel: "L2",
36
+ readOnly: false,
37
+ concurrency: "per_target",
38
+ confirmation: "on_write",
39
+ subAgentAllowed: true,
40
+ timeoutMs: 30_000,
41
+ },
42
+ executorTag: "edit",
43
+ });
44
+ const L3_BASH = makeToolDef({
45
+ identity: { name: "bash", category: "command-execution" },
46
+ policy: {
47
+ riskLevel: "L3",
48
+ readOnly: false,
49
+ concurrency: "unlimited",
50
+ confirmation: "always",
51
+ subAgentAllowed: false,
52
+ timeoutMs: 120_000,
53
+ },
54
+ executorTag: "bash",
55
+ });
56
+ // ---------------------------------------------------------------------------
57
+ // Tests
58
+ // ---------------------------------------------------------------------------
59
+ (0, vitest_1.describe)("ToolGovernor", () => {
60
+ function executionContext(overrides = {}) {
61
+ return {
62
+ sessionId: "session-1",
63
+ toolName: "test_tool",
64
+ toolCallId: "call_1",
65
+ workingDirectory: "/project",
66
+ sessionMode: "interactive",
67
+ isSubAgent: false,
68
+ ...overrides,
69
+ };
70
+ }
71
+ (0, vitest_1.describe)("beforeExecution", () => {
72
+ (0, vitest_1.it)("allows a registered L0 tool", () => {
73
+ const governor = (0, tool_governor_js_1.createToolGovernor)();
74
+ governor.catalog.register(L0_READ);
75
+ const decision = governor.beforeExecution(executionContext());
76
+ (0, vitest_1.expect)(decision.type).toBe("allow");
77
+ });
78
+ (0, vitest_1.it)("denies an unregistered tool", () => {
79
+ const governor = (0, tool_governor_js_1.createToolGovernor)();
80
+ const decision = governor.beforeExecution(executionContext({ toolName: "unknown_tool" }));
81
+ (0, vitest_1.expect)(decision.type).toBe("deny");
82
+ if (decision.type === "deny") {
83
+ (0, vitest_1.expect)(decision.reason).toContain("not registered");
84
+ }
85
+ });
86
+ (0, vitest_1.it)("returns ask_user for L2 tool without prior approval", () => {
87
+ const governor = (0, tool_governor_js_1.createToolGovernor)();
88
+ governor.catalog.register(L2_EDIT);
89
+ const decision = governor.beforeExecution(executionContext({
90
+ toolName: "edit",
91
+ targetPath: "/project/src/main.ts",
92
+ }));
93
+ (0, vitest_1.expect)(decision.type).toBe("ask_user");
94
+ if (decision.type === "ask_user") {
95
+ (0, vitest_1.expect)(decision.riskLevel).toBe("L2");
96
+ }
97
+ });
98
+ (0, vitest_1.it)("denies when mutation queue has conflict for per_target tool", () => {
99
+ const governor = (0, tool_governor_js_1.createToolGovernor)();
100
+ governor.catalog.register(L2_EDIT);
101
+ // First call: approve via session approval
102
+ governor.recordSessionApproval({
103
+ sessionId: "session-1",
104
+ toolName: "edit",
105
+ riskLevel: "L2",
106
+ targetPattern: "/project/src/main.ts",
107
+ verdict: "allow_for_session",
108
+ grantedAt: Date.now(),
109
+ });
110
+ // First execution: accepted
111
+ const first = governor.beforeExecution(executionContext({
112
+ toolName: "edit",
113
+ toolCallId: "call_1",
114
+ targetPath: "/project/src/main.ts",
115
+ }));
116
+ (0, vitest_1.expect)(first.type).toBe("allow");
117
+ // Second execution to same file: conflict
118
+ const second = governor.beforeExecution(executionContext({
119
+ toolName: "edit",
120
+ toolCallId: "call_2",
121
+ targetPath: "/project/src/main.ts",
122
+ }));
123
+ (0, vitest_1.expect)(second.type).toBe("deny");
124
+ if (second.type === "deny") {
125
+ (0, vitest_1.expect)(second.reason).toContain("already being mutated");
126
+ }
127
+ });
128
+ (0, vitest_1.it)("denies sub-agent restricted tool", () => {
129
+ const governor = (0, tool_governor_js_1.createToolGovernor)();
130
+ governor.catalog.register(L3_BASH);
131
+ const decision = governor.beforeExecution(executionContext({
132
+ toolName: "bash",
133
+ isSubAgent: true,
134
+ }));
135
+ (0, vitest_1.expect)(decision.type).toBe("deny");
136
+ });
137
+ (0, vitest_1.it)("mentions outside-cwd paths using the real working directory", () => {
138
+ const governor = (0, tool_governor_js_1.createToolGovernor)();
139
+ governor.catalog.register(L2_EDIT);
140
+ const decision = governor.beforeExecution(executionContext({
141
+ toolName: "edit",
142
+ targetPath: "/etc/passwd",
143
+ }));
144
+ (0, vitest_1.expect)(decision.type).toBe("ask_user");
145
+ if (decision.type === "ask_user") {
146
+ (0, vitest_1.expect)(decision.reason).toContain("outside working directory");
147
+ }
148
+ });
149
+ (0, vitest_1.it)("escalates destructive commands to L4 before permission evaluation", () => {
150
+ const governor = (0, tool_governor_js_1.createToolGovernor)();
151
+ governor.catalog.register(L3_BASH);
152
+ const decision = governor.beforeExecution(executionContext({
153
+ toolName: "bash",
154
+ parameters: { command: "rm -rf /tmp/danger" },
155
+ }));
156
+ (0, vitest_1.expect)(decision.type).toBe("deny");
157
+ if (decision.type === "deny") {
158
+ (0, vitest_1.expect)(decision.riskLevel).toBe("L4");
159
+ }
160
+ });
161
+ (0, vitest_1.it)("auto-allows read-only pwd commands for bash", () => {
162
+ const governor = (0, tool_governor_js_1.createToolGovernor)();
163
+ governor.catalog.register(L3_BASH);
164
+ const decision = governor.beforeExecution(executionContext({
165
+ toolName: "bash",
166
+ parameters: { command: "pwd -P" },
167
+ }));
168
+ (0, vitest_1.expect)(decision.type).toBe("allow");
169
+ });
170
+ (0, vitest_1.it)("auto-allows read-only ls commands for bash", () => {
171
+ const governor = (0, tool_governor_js_1.createToolGovernor)();
172
+ governor.catalog.register(L3_BASH);
173
+ const decision = governor.beforeExecution(executionContext({
174
+ toolName: "bash",
175
+ parameters: { command: "ls -lah src" },
176
+ }));
177
+ (0, vitest_1.expect)(decision.type).toBe("allow");
178
+ });
179
+ (0, vitest_1.it)("auto-allows cat for bash", () => {
180
+ const governor = (0, tool_governor_js_1.createToolGovernor)();
181
+ governor.catalog.register(L3_BASH);
182
+ const decision = governor.beforeExecution(executionContext({
183
+ toolName: "bash",
184
+ toolCallId: "call_cat",
185
+ parameters: { command: "cat README.md" },
186
+ }));
187
+ (0, vitest_1.expect)(decision.type).toBe("allow");
188
+ });
189
+ (0, vitest_1.it)("auto-allows head for bash", () => {
190
+ const governor = (0, tool_governor_js_1.createToolGovernor)();
191
+ governor.catalog.register(L3_BASH);
192
+ const decision = governor.beforeExecution(executionContext({
193
+ toolName: "bash",
194
+ toolCallId: "call_head",
195
+ parameters: { command: "head -n 10 README.md" },
196
+ }));
197
+ (0, vitest_1.expect)(decision.type).toBe("allow");
198
+ });
199
+ (0, vitest_1.it)("auto-allows tail for bash", () => {
200
+ const governor = (0, tool_governor_js_1.createToolGovernor)();
201
+ governor.catalog.register(L3_BASH);
202
+ const decision = governor.beforeExecution(executionContext({
203
+ toolName: "bash",
204
+ toolCallId: "call_tail",
205
+ parameters: { command: 'tail -f "logs/app.log"' },
206
+ }));
207
+ (0, vitest_1.expect)(decision.type).toBe("allow");
208
+ });
209
+ (0, vitest_1.it)("auto-allows wc for bash", () => {
210
+ const governor = (0, tool_governor_js_1.createToolGovernor)();
211
+ governor.catalog.register(L3_BASH);
212
+ const decision = governor.beforeExecution(executionContext({
213
+ toolName: "bash",
214
+ toolCallId: "call_wc",
215
+ parameters: { command: "wc -l src/index.ts" },
216
+ }));
217
+ (0, vitest_1.expect)(decision.type).toBe("allow");
218
+ });
219
+ (0, vitest_1.it)("auto-allows grep for bash", () => {
220
+ const governor = (0, tool_governor_js_1.createToolGovernor)();
221
+ governor.catalog.register(L3_BASH);
222
+ const decision = governor.beforeExecution(executionContext({
223
+ toolName: "bash",
224
+ toolCallId: "call_grep",
225
+ parameters: { command: 'grep -n "Genesis CLI" README.md' },
226
+ }));
227
+ (0, vitest_1.expect)(decision.type).toBe("allow");
228
+ });
229
+ (0, vitest_1.it)("auto-allows rg for bash", () => {
230
+ const governor = (0, tool_governor_js_1.createToolGovernor)();
231
+ governor.catalog.register(L3_BASH);
232
+ const decision = governor.beforeExecution(executionContext({
233
+ toolName: "bash",
234
+ toolCallId: "call_rg",
235
+ parameters: { command: 'rg -n --glob "*.ts" "createToolGovernor" packages' },
236
+ }));
237
+ (0, vitest_1.expect)(decision.type).toBe("allow");
238
+ });
239
+ (0, vitest_1.it)("auto-allows find for bash", () => {
240
+ const governor = (0, tool_governor_js_1.createToolGovernor)();
241
+ governor.catalog.register(L3_BASH);
242
+ const decision = governor.beforeExecution(executionContext({
243
+ toolName: "bash",
244
+ toolCallId: "call_find",
245
+ parameters: { command: 'find . -name "*.ts" -type f' },
246
+ }));
247
+ (0, vitest_1.expect)(decision.type).toBe("allow");
248
+ });
249
+ (0, vitest_1.it)("auto-allows fd for bash", () => {
250
+ const governor = (0, tool_governor_js_1.createToolGovernor)();
251
+ governor.catalog.register(L3_BASH);
252
+ const decision = governor.beforeExecution(executionContext({
253
+ toolName: "bash",
254
+ toolCallId: "call_fd",
255
+ parameters: { command: 'fd -t f "governor" packages' },
256
+ }));
257
+ (0, vitest_1.expect)(decision.type).toBe("allow");
258
+ });
259
+ (0, vitest_1.it)("still asks for non-allowlisted bash commands", () => {
260
+ const governor = (0, tool_governor_js_1.createToolGovernor)();
261
+ governor.catalog.register(L3_BASH);
262
+ const decision = governor.beforeExecution(executionContext({
263
+ toolName: "bash",
264
+ parameters: { command: "echo hello" },
265
+ }));
266
+ (0, vitest_1.expect)(decision.type).toBe("ask_user");
267
+ });
268
+ (0, vitest_1.it)("still asks for risky rg forms even though rg is readonly by default", () => {
269
+ const governor = (0, tool_governor_js_1.createToolGovernor)();
270
+ governor.catalog.register(L3_BASH);
271
+ const decision = governor.beforeExecution(executionContext({
272
+ toolName: "bash",
273
+ toolCallId: "call_rg_risky",
274
+ parameters: { command: 'rg --pre "bash" foo' },
275
+ }));
276
+ (0, vitest_1.expect)(decision.type).toBe("ask_user");
277
+ });
278
+ (0, vitest_1.it)("still asks for risky find forms", () => {
279
+ const governor = (0, tool_governor_js_1.createToolGovernor)();
280
+ governor.catalog.register(L3_BASH);
281
+ const decision = governor.beforeExecution(executionContext({
282
+ toolName: "bash",
283
+ toolCallId: "call_find_risky",
284
+ parameters: { command: 'find . -name "*.ts" -delete' },
285
+ }));
286
+ (0, vitest_1.expect)(decision.type).toBe("ask_user");
287
+ });
288
+ });
289
+ (0, vitest_1.describe)("afterExecution", () => {
290
+ (0, vitest_1.it)("records in audit log", () => {
291
+ const governor = (0, tool_governor_js_1.createToolGovernor)();
292
+ governor.catalog.register(L0_READ);
293
+ governor.beforeExecution(executionContext());
294
+ governor.afterExecution({
295
+ toolName: "test_tool",
296
+ toolCallId: "call_1",
297
+ status: "success",
298
+ durationMs: 100,
299
+ });
300
+ (0, vitest_1.expect)(governor.audit.size).toBe(1);
301
+ const entries = governor.audit.getByTool("test_tool");
302
+ (0, vitest_1.expect)(entries).toHaveLength(1);
303
+ (0, vitest_1.expect)(entries[0].status).toBe("success");
304
+ (0, vitest_1.expect)(entries[0].toolCallId).toBe("call_1");
305
+ });
306
+ (0, vitest_1.it)("releases mutation queue entry for per_target tool", () => {
307
+ const governor = (0, tool_governor_js_1.createToolGovernor)();
308
+ governor.catalog.register(L2_EDIT);
309
+ governor.recordSessionApproval({
310
+ sessionId: "session-1",
311
+ toolName: "edit",
312
+ riskLevel: "L2",
313
+ targetPattern: "/project/src/main.ts",
314
+ verdict: "allow_for_session",
315
+ grantedAt: Date.now(),
316
+ });
317
+ // First execution
318
+ governor.beforeExecution(executionContext({
319
+ toolName: "edit",
320
+ toolCallId: "call_1",
321
+ targetPath: "/project/src/main.ts",
322
+ }));
323
+ (0, vitest_1.expect)(governor.mutations.isPending("/project/src/main.ts")).toBe(true);
324
+ // Complete the first execution
325
+ governor.afterExecution({
326
+ toolName: "edit",
327
+ toolCallId: "call_1",
328
+ status: "success",
329
+ durationMs: 100,
330
+ });
331
+ (0, vitest_1.expect)(governor.mutations.isPending("/project/src/main.ts")).toBe(false);
332
+ // Second execution should now succeed
333
+ const second = governor.beforeExecution(executionContext({
334
+ toolName: "edit",
335
+ toolCallId: "call_2",
336
+ targetPath: "/project/src/main.ts",
337
+ }));
338
+ (0, vitest_1.expect)(second.type).toBe("allow");
339
+ });
340
+ });
341
+ (0, vitest_1.describe)("recordSessionApproval", () => {
342
+ (0, vitest_1.it)("enables subsequent allow for L2 tool", () => {
343
+ const governor = (0, tool_governor_js_1.createToolGovernor)();
344
+ governor.catalog.register(L2_EDIT);
345
+ // Without approval: ask_user
346
+ const first = governor.beforeExecution(executionContext({
347
+ toolName: "edit",
348
+ targetPath: "/project/src/main.ts",
349
+ }));
350
+ (0, vitest_1.expect)(first.type).toBe("ask_user");
351
+ // Record approval
352
+ governor.recordSessionApproval({
353
+ sessionId: "session-1",
354
+ toolName: "edit",
355
+ riskLevel: "L2",
356
+ targetPattern: "/project/src/main.ts",
357
+ verdict: "allow_for_session",
358
+ grantedAt: Date.now(),
359
+ });
360
+ // With approval: allow
361
+ const second = governor.beforeExecution(executionContext({
362
+ toolName: "edit",
363
+ toolCallId: "call_2",
364
+ targetPath: "/project/src/main.ts",
365
+ }));
366
+ (0, vitest_1.expect)(second.type).toBe("allow");
367
+ });
368
+ });
369
+ (0, vitest_1.describe)("governance components", () => {
370
+ (0, vitest_1.it)("exposes catalog, permissions, mutations, and audit", () => {
371
+ const governor = (0, tool_governor_js_1.createToolGovernor)();
372
+ (0, vitest_1.expect)(governor.catalog).toBeDefined();
373
+ (0, vitest_1.expect)(governor.permissions).toBeDefined();
374
+ (0, vitest_1.expect)(governor.mutations).toBeDefined();
375
+ (0, vitest_1.expect)(governor.audit).toBeDefined();
376
+ });
377
+ });
378
+ });
379
+ //# sourceMappingURL=tool-governor.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-governor.test.js","sourceRoot":"","sources":["../../src/test/tool-governor.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,77 @@
1
+ /**
2
+ * Core type definitions for the product-layer runtime.
3
+ *
4
+ * All public types consumed by app-tools, app-ui, app-extensions,
5
+ * app-evaluation, and app-cli are defined here.
6
+ */
7
+ /** Determines how input is received and output is formatted. All modes share the same runtime. */
8
+ export type CliMode = "interactive" | "print" | "json" | "rpc";
9
+ /** Branded session identifier for type-safe session references. */
10
+ export interface SessionId {
11
+ readonly value: string;
12
+ }
13
+ export type SessionStatus = "creating" | "active" | "suspended" | "recovering" | "closing" | "closed";
14
+ /** Describes the active LLM model for a session. */
15
+ export interface ModelDescriptor {
16
+ readonly id: string;
17
+ readonly provider: string;
18
+ readonly displayName?: string;
19
+ }
20
+ /** Set of enabled tool names. ReadonlySet ensures immutability at the type level. */
21
+ export type ToolSetDescriptor = ReadonlySet<string>;
22
+ export type TaskStatus = "idle" | "running" | "paused" | "completed" | "failed";
23
+ export interface TaskState {
24
+ readonly status: TaskStatus;
25
+ readonly currentTaskId: string | null;
26
+ readonly startedAt: number | null;
27
+ }
28
+ /** Summary of the most recent context compaction operation. */
29
+ export interface CompactionSummary {
30
+ readonly compressedAt: number;
31
+ readonly originalMessageCount: number;
32
+ readonly retainedMessageCount: number;
33
+ readonly estimatedTokensSaved: number;
34
+ }
35
+ export type { PlanOutcomeReason, PlanStatus, PlanStep, PlanStepDetail, PlanStepStatus, PlanSummary, } from "../planning/plan-types.js";
36
+ import type { PlanSummary as _PlanSummary } from "../planning/plan-types.js";
37
+ export interface SessionState {
38
+ readonly id: SessionId;
39
+ readonly status: SessionStatus;
40
+ readonly createdAt: number;
41
+ readonly updatedAt: number;
42
+ readonly model: ModelDescriptor;
43
+ readonly toolSet: ToolSetDescriptor;
44
+ readonly planSummary: _PlanSummary | null;
45
+ readonly compactionSummary: CompactionSummary | null;
46
+ readonly taskState: TaskState;
47
+ }
48
+ /**
49
+ * Serializable snapshot used to persist and restore a session.
50
+ *
51
+ * Uses `readonly string[]` for the tool set instead of `ReadonlySet`
52
+ * so that the payload can round-trip through `JSON.stringify`.
53
+ */
54
+ export interface SessionRecoveryData {
55
+ readonly sessionId: SessionId;
56
+ readonly model: ModelDescriptor;
57
+ readonly toolSet: readonly string[];
58
+ readonly planSummary: _PlanSummary | null;
59
+ readonly compactionSummary: CompactionSummary | null;
60
+ readonly taskState: TaskState;
61
+ readonly workingDirectory?: string;
62
+ readonly sessionFile?: string;
63
+ readonly agentDir?: string;
64
+ }
65
+ export interface RuntimeContext {
66
+ readonly sessionId: SessionId;
67
+ readonly workingDirectory: string;
68
+ readonly agentDir?: string;
69
+ readonly configSources?: Readonly<Record<string, {
70
+ layer: string;
71
+ detail: string;
72
+ }>>;
73
+ readonly mode: CliMode;
74
+ readonly model: ModelDescriptor;
75
+ readonly toolSet: ToolSetDescriptor;
76
+ readonly taskState: TaskState;
77
+ }
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ /**
3
+ * Core type definitions for the product-layer runtime.
4
+ *
5
+ * All public types consumed by app-tools, app-ui, app-extensions,
6
+ * app-evaluation, and app-cli are defined here.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":";AAAA;;;;;GAKG"}
package/package.json ADDED
@@ -0,0 +1,28 @@
1
+ {
2
+ "name": "@pickle-pee/runtime",
3
+ "version": "0.0.0",
4
+ "description": "Product-layer runtime: session facade, plan execution, event normalization",
5
+ "main": "./dist/index.js",
6
+ "types": "./dist/index.d.ts",
7
+ "exports": {
8
+ ".": {
9
+ "types": "./dist/index.d.ts",
10
+ "default": "./dist/index.js"
11
+ }
12
+ },
13
+ "scripts": {
14
+ "build": "node -e \"const fs = require('node:fs'); fs.rmSync('dist', { recursive: true, force: true }); fs.rmSync('tsconfig.build.tsbuildinfo', { force: true });\" && tsc -p tsconfig.build.json",
15
+ "test": "vitest run"
16
+ },
17
+ "dependencies": {
18
+ "@pickle-pee/kernel": "0.0.0",
19
+ "@pickle-pee/tools": "0.0.0"
20
+ },
21
+ "publishConfig": {
22
+ "access": "public"
23
+ },
24
+ "files": [
25
+ "dist",
26
+ "README.md"
27
+ ]
28
+ }