pi-harness-runtime 1.1.336 → 1.1.337

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 (180) hide show
  1. package/index.ts +21 -12
  2. package/package.json +1 -1
  3. package/packages/a2a-adapter/package.json +1 -1
  4. package/packages/agent-policy/package.json +1 -1
  5. package/packages/architecture-generator/package.json +1 -1
  6. package/packages/auth/package.json +1 -1
  7. package/packages/autonomous-refactor/package.json +1 -1
  8. package/packages/autonomous-runtime/package.json +1 -1
  9. package/packages/cache-strategy/package.json +1 -1
  10. package/packages/capability-registry/package.json +1 -1
  11. package/packages/checkpoint/package.json +1 -1
  12. package/packages/cli-plugin-sdk/package.json +1 -1
  13. package/packages/clipboard/package.json +1 -1
  14. package/packages/clipboard-plugin/package.json +1 -1
  15. package/packages/code-generation/package.json +1 -1
  16. package/packages/code-review/package.json +1 -1
  17. package/packages/codex-adapter/package.json +1 -1
  18. package/packages/codex-watcher/package.json +1 -1
  19. package/packages/config-capture/package.json +1 -1
  20. package/packages/connection-runtime/dist/index.d.ts +11 -0
  21. package/packages/connection-runtime/dist/index.js +11 -0
  22. package/packages/connection-runtime/dist/registry.d.ts +69 -0
  23. package/packages/connection-runtime/dist/registry.js +117 -0
  24. package/packages/connection-runtime/dist/supervisor.d.ts +89 -0
  25. package/packages/connection-runtime/dist/supervisor.js +169 -0
  26. package/packages/connection-runtime/dist/types.d.ts +70 -0
  27. package/packages/connection-runtime/dist/types.js +16 -0
  28. package/packages/connection-runtime/package.json +24 -0
  29. package/packages/connection-runtime/src/index.ts +12 -0
  30. package/packages/connection-runtime/src/registry.ts +142 -0
  31. package/packages/connection-runtime/src/supervisor.ts +224 -0
  32. package/packages/connection-runtime/src/types.ts +88 -0
  33. package/packages/context-compiler/package.json +1 -1
  34. package/packages/context-discovery/package.json +1 -1
  35. package/packages/context-manager/package.json +1 -1
  36. package/packages/contracts/dist/approvals.d.ts +273 -0
  37. package/packages/contracts/dist/approvals.js +93 -0
  38. package/packages/contracts/dist/base.d.ts +78 -0
  39. package/packages/contracts/dist/base.js +82 -0
  40. package/packages/contracts/dist/events.d.ts +99 -0
  41. package/packages/contracts/dist/events.js +65 -0
  42. package/packages/contracts/dist/index.d.ts +20 -0
  43. package/packages/contracts/dist/index.js +20 -0
  44. package/packages/contracts/dist/jobs.d.ts +234 -0
  45. package/packages/contracts/dist/jobs.js +79 -0
  46. package/packages/contracts/dist/notifications.d.ts +317 -0
  47. package/packages/contracts/dist/notifications.js +85 -0
  48. package/packages/contracts/dist/projects.d.ts +171 -0
  49. package/packages/contracts/dist/projects.js +62 -0
  50. package/packages/contracts/dist/sessions.d.ts +226 -0
  51. package/packages/contracts/dist/sessions.js +82 -0
  52. package/packages/contracts/package.json +24 -0
  53. package/packages/contracts/src/approvals.ts +115 -0
  54. package/packages/contracts/src/base.ts +126 -0
  55. package/packages/contracts/src/events.ts +78 -0
  56. package/packages/contracts/src/index.ts +21 -0
  57. package/packages/contracts/src/jobs.ts +101 -0
  58. package/packages/contracts/src/notifications.ts +104 -0
  59. package/packages/contracts/src/projects.ts +81 -0
  60. package/packages/contracts/src/sessions.ts +104 -0
  61. package/packages/cookie-sanitizer/package.json +1 -1
  62. package/packages/cost-optimizer/package.json +1 -1
  63. package/packages/dependency-analyzer/package.json +1 -1
  64. package/packages/django-plugin/package.json +1 -1
  65. package/packages/doc-generator/package.json +1 -1
  66. package/packages/durable-review/package.json +1 -1
  67. package/packages/e2e-tester/package.json +1 -1
  68. package/packages/evaluation-engine/package.json +1 -1
  69. package/packages/evaluation-runner/package.json +1 -1
  70. package/packages/event-bus/package.json +1 -1
  71. package/packages/event-sink/dist/index.d.ts +12 -0
  72. package/packages/event-sink/dist/index.js +12 -0
  73. package/packages/event-sink/dist/outbox.d.ts +51 -0
  74. package/packages/event-sink/dist/outbox.js +88 -0
  75. package/packages/event-sink/dist/projection.d.ts +41 -0
  76. package/packages/event-sink/dist/projection.js +62 -0
  77. package/packages/event-sink/dist/sink.d.ts +81 -0
  78. package/packages/event-sink/dist/sink.js +106 -0
  79. package/packages/event-sink/package.json +28 -0
  80. package/packages/event-sink/src/index.ts +15 -0
  81. package/packages/event-sink/src/outbox.ts +119 -0
  82. package/packages/event-sink/src/projection.ts +84 -0
  83. package/packages/event-sink/src/sink.ts +167 -0
  84. package/packages/event-store/package.json +1 -1
  85. package/packages/experience-replay/package.json +1 -1
  86. package/packages/feedback-collector/package.json +1 -1
  87. package/packages/file-copy-helper/package.json +1 -1
  88. package/packages/framework-detector/package.json +1 -1
  89. package/packages/framework-plugin-sdk/package.json +1 -1
  90. package/packages/frappe-plugin/package.json +1 -1
  91. package/packages/generic-web-plugin/package.json +1 -1
  92. package/packages/health-monitor/package.json +1 -1
  93. package/packages/intent-analyzer/package.json +1 -1
  94. package/packages/jev-judge/package.json +1 -1
  95. package/packages/knowledge-graph/package.json +1 -1
  96. package/packages/knowledge-retrieval/package.json +1 -1
  97. package/packages/laravel-plugin/package.json +1 -1
  98. package/packages/learning-engine/package.json +1 -1
  99. package/packages/mcp-adapter/package.json +1 -1
  100. package/packages/memory-engine/package.json +1 -1
  101. package/packages/milestone-manager/package.json +1 -1
  102. package/packages/model-registry/package.json +1 -1
  103. package/packages/nextjs-plugin/package.json +1 -1
  104. package/packages/notification/package.json +1 -1
  105. package/packages/observability/package.json +1 -1
  106. package/packages/okf-indexer/package.json +1 -1
  107. package/packages/paperclip-integration/package.json +1 -1
  108. package/packages/performance-optimizer/package.json +1 -1
  109. package/packages/permission-mode/dist/checker.d.ts +66 -0
  110. package/packages/permission-mode/dist/checker.js +64 -0
  111. package/packages/permission-mode/dist/index.d.ts +12 -0
  112. package/packages/permission-mode/dist/index.js +11 -0
  113. package/packages/permission-mode/dist/manager.d.ts +65 -0
  114. package/packages/permission-mode/dist/manager.js +91 -0
  115. package/packages/permission-mode/dist/mode.d.ts +31 -0
  116. package/packages/permission-mode/dist/mode.js +47 -0
  117. package/packages/permission-mode/package.json +24 -0
  118. package/packages/permission-mode/src/checker.ts +103 -0
  119. package/packages/permission-mode/src/index.ts +13 -0
  120. package/packages/permission-mode/src/manager.ts +154 -0
  121. package/packages/permission-mode/src/mode.ts +73 -0
  122. package/packages/privilege-broker/package.json +1 -1
  123. package/packages/project-analyzer/package.json +1 -1
  124. package/packages/project-bootstrap/package.json +1 -1
  125. package/packages/projection-engine/package.json +1 -1
  126. package/packages/prompt-compiler/package.json +1 -1
  127. package/packages/prompt-versioning/package.json +1 -1
  128. package/packages/provider-adapter-sdk/package.json +1 -1
  129. package/packages/provider-router/package.json +1 -1
  130. package/packages/provider-selector/package.json +1 -1
  131. package/packages/providers/package.json +1 -1
  132. package/packages/qdrant-skills/package.json +1 -1
  133. package/packages/quota-manager/package.json +1 -1
  134. package/packages/rate-limiter/package.json +1 -1
  135. package/packages/react-vite-plugin/package.json +1 -1
  136. package/packages/relay/dist/client.d.ts +53 -0
  137. package/packages/relay/dist/client.js +95 -0
  138. package/packages/relay/dist/index.d.ts +9 -0
  139. package/packages/relay/dist/index.js +8 -0
  140. package/packages/relay/dist/server.d.ts +58 -0
  141. package/packages/relay/dist/server.js +93 -0
  142. package/packages/relay/dist/types.d.ts +35 -0
  143. package/packages/relay/dist/types.js +4 -0
  144. package/packages/relay/package.json +24 -0
  145. package/packages/relay/src/client.ts +119 -0
  146. package/packages/relay/src/index.ts +10 -0
  147. package/packages/relay/src/server.ts +120 -0
  148. package/packages/relay/src/types.ts +38 -0
  149. package/packages/release-manager/package.json +1 -1
  150. package/packages/requirement-compiler/package.json +1 -1
  151. package/packages/runtime/package.json +1 -1
  152. package/packages/scheduler/package.json +1 -1
  153. package/packages/scheduler-adapter/package.json +1 -1
  154. package/packages/session/package.json +1 -1
  155. package/packages/session-api/package.json +1 -1
  156. package/packages/session-export/package.json +1 -1
  157. package/packages/shared-context/package.json +1 -1
  158. package/packages/skill-mcp-client/package.json +1 -1
  159. package/packages/skill-registry/package.json +1 -1
  160. package/packages/skills/package.json +1 -1
  161. package/packages/sprint-planner/package.json +1 -1
  162. package/packages/subscription-engine/package.json +1 -1
  163. package/packages/task-compiler/package.json +1 -1
  164. package/packages/telegram/package.json +1 -1
  165. package/packages/tencentdb-memory/package.json +1 -1
  166. package/packages/tencentdb-sync/package.json +1 -1
  167. package/packages/test-data-generator/package.json +1 -1
  168. package/packages/test-generator/package.json +1 -1
  169. package/packages/todo-bd-sync/package.json +1 -1
  170. package/packages/token-estimation/package.json +1 -1
  171. package/packages/token-optimizer/package.json +1 -1
  172. package/packages/trajectory/package.json +1 -1
  173. package/packages/tui/package.json +1 -1
  174. package/packages/types/package.json +1 -1
  175. package/packages/webmcp-tester/package.json +1 -1
  176. package/packages/wiki/package.json +1 -1
  177. package/packages/workflow-events/package.json +1 -1
  178. package/packages/workspace-scanner/package.json +1 -1
  179. package/packages/worktree/package.json +1 -1
  180. package/packages/write-review/package.json +1 -1
@@ -0,0 +1,88 @@
1
+ /**
2
+ * Connection types
3
+ *
4
+ * Note: Uses minimal EventEmitter-like interface to avoid Node.js dependency.
5
+ * Implementations can swap in Node's EventEmitter or use any compatible event system.
6
+ */
7
+
8
+ /**
9
+ * Minimal event emitter interface
10
+ */
11
+ export interface EventEmitter {
12
+ on(event: string, listener: (...args: unknown[]) => void): void;
13
+ off(event: string, listener: (...args: unknown[]) => void): void;
14
+ emit(event: string, ...args: unknown[]): void;
15
+ once(event: string, listener: (...args: unknown[]) => void): void;
16
+ removeAllListeners(event?: string): void;
17
+ }
18
+
19
+ /**
20
+ * Connection state
21
+ */
22
+ export type ConnectionState =
23
+ | 'disconnected'
24
+ | 'connecting'
25
+ | 'connected'
26
+ | 'reconnecting'
27
+ | 'error';
28
+
29
+ /**
30
+ * Connection error
31
+ */
32
+ export interface ConnectionError extends Error {
33
+ code?: string;
34
+ recoverable?: boolean;
35
+ }
36
+
37
+ /**
38
+ * Transport interface
39
+ */
40
+ export interface Transport {
41
+ /** Open the connection */
42
+ open(): Promise<void>;
43
+ /** Close the connection */
44
+ close(): Promise<void>;
45
+ /** Send a message */
46
+ send(data: unknown): Promise<void>;
47
+ /** Check if connected */
48
+ isConnected(): boolean;
49
+ /** Event emitter for connection events */
50
+ events: EventEmitter;
51
+ }
52
+
53
+ /**
54
+ * Transport events
55
+ */
56
+ export interface TransportEvents {
57
+ 'open': () => void;
58
+ 'close': () => void;
59
+ 'error': (error: Error) => void;
60
+ 'message': (data: unknown) => void;
61
+ }
62
+
63
+ /**
64
+ * Connection options
65
+ */
66
+ export interface ConnectionOptions {
67
+ /** Initial retry delay in ms */
68
+ initialDelay?: number;
69
+ /** Maximum retry delay in ms */
70
+ maxDelay?: number;
71
+ /** Maximum number of retries (0 = infinite) */
72
+ maxRetries?: number;
73
+ /** Enable jitter (recommended) */
74
+ jitter?: boolean;
75
+ /** Enable verbose logging */
76
+ verbose?: boolean;
77
+ }
78
+
79
+ /**
80
+ * Default connection options
81
+ */
82
+ export const DEFAULT_CONNECTION_OPTIONS: Required<ConnectionOptions> = {
83
+ initialDelay: 1000,
84
+ maxDelay: 5 * 60 * 1000, // 5 minutes
85
+ maxRetries: 0, // Infinite
86
+ jitter: true,
87
+ verbose: false,
88
+ };
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi/context-compiler",
3
- "version": "1.1.336",
3
+ "version": "1.1.337",
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/context-discovery",
3
- "version": "1.1.336",
3
+ "version": "1.1.337",
4
4
  "type": "module",
5
5
  "main": "src/index.ts",
6
6
  "exports": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/context-manager",
3
- "version": "1.1.336",
3
+ "version": "1.1.337",
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",
@@ -0,0 +1,273 @@
1
+ /**
2
+ * Approval schemas for pi-harness
3
+ */
4
+ import { z } from 'zod';
5
+ /**
6
+ * Approval status
7
+ */
8
+ export declare const ApprovalStatus: z.ZodEnum<["pending", "approved", "rejected", "expired"]>;
9
+ export type ApprovalStatus = z.infer<typeof ApprovalStatus>;
10
+ /**
11
+ * Approval type
12
+ */
13
+ export declare const ApprovalType: z.ZodEnum<["tool_execution", "file_write", "file_delete", "command_execution", "network_request", "external_action"]>;
14
+ export type ApprovalType = z.infer<typeof ApprovalType>;
15
+ /**
16
+ * Approval definition
17
+ */
18
+ export declare const Approval: z.ZodObject<{
19
+ id: z.ZodString;
20
+ type: z.ZodEnum<["tool_execution", "file_write", "file_delete", "command_execution", "network_request", "external_action"]>;
21
+ status: z.ZodDefault<z.ZodEnum<["pending", "approved", "rejected", "expired"]>>;
22
+ workspaceId: z.ZodString;
23
+ sessionId: z.ZodString;
24
+ jobId: z.ZodOptional<z.ZodString>;
25
+ tool: z.ZodOptional<z.ZodString>;
26
+ command: z.ZodOptional<z.ZodString>;
27
+ file: z.ZodOptional<z.ZodString>;
28
+ description: z.ZodString;
29
+ reason: z.ZodOptional<z.ZodString>;
30
+ requestedAt: z.ZodString;
31
+ respondedAt: z.ZodOptional<z.ZodString>;
32
+ expiresAt: z.ZodOptional<z.ZodString>;
33
+ requestedBy: z.ZodString;
34
+ approvedBy: z.ZodOptional<z.ZodString>;
35
+ metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
36
+ }, "strip", z.ZodTypeAny, {
37
+ id: string;
38
+ type: "command_execution" | "external_action" | "file_delete" | "file_write" | "network_request" | "tool_execution";
39
+ status: "approved" | "expired" | "pending" | "rejected";
40
+ workspaceId: string;
41
+ sessionId: string;
42
+ jobId?: string | undefined;
43
+ tool?: string | undefined;
44
+ command?: string | undefined;
45
+ file?: string | undefined;
46
+ description: string;
47
+ reason?: string | undefined;
48
+ requestedAt: string;
49
+ respondedAt?: string | undefined;
50
+ expiresAt?: string | undefined;
51
+ requestedBy: string;
52
+ approvedBy?: string | undefined;
53
+ metadata?: Record<string, unknown> | undefined;
54
+ }, {
55
+ id: string;
56
+ type: "command_execution" | "external_action" | "file_delete" | "file_write" | "network_request" | "tool_execution";
57
+ status?: "approved" | "expired" | "pending" | "rejected" | undefined;
58
+ workspaceId: string;
59
+ sessionId: string;
60
+ jobId?: string | undefined;
61
+ tool?: string | undefined;
62
+ command?: string | undefined;
63
+ file?: string | undefined;
64
+ description: string;
65
+ reason?: string | undefined;
66
+ requestedAt: string;
67
+ respondedAt?: string | undefined;
68
+ expiresAt?: string | undefined;
69
+ requestedBy: string;
70
+ approvedBy?: string | undefined;
71
+ metadata?: Record<string, unknown> | undefined;
72
+ }>;
73
+ export type Approval = z.infer<typeof Approval>;
74
+ /**
75
+ * Approval request input
76
+ */
77
+ export declare const ApprovalRequest: z.ZodObject<{
78
+ type: z.ZodEnum<["tool_execution", "file_write", "file_delete", "command_execution", "network_request", "external_action"]>;
79
+ workspaceId: z.ZodString;
80
+ sessionId: z.ZodString;
81
+ jobId: z.ZodOptional<z.ZodString>;
82
+ tool: z.ZodOptional<z.ZodString>;
83
+ command: z.ZodOptional<z.ZodString>;
84
+ file: z.ZodOptional<z.ZodString>;
85
+ description: z.ZodString;
86
+ reason: z.ZodOptional<z.ZodString>;
87
+ expiresIn: z.ZodOptional<z.ZodNumber>;
88
+ metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
89
+ }, "strip", z.ZodTypeAny, {
90
+ type: "command_execution" | "external_action" | "file_delete" | "file_write" | "network_request" | "tool_execution";
91
+ workspaceId: string;
92
+ sessionId: string;
93
+ jobId?: string | undefined;
94
+ tool?: string | undefined;
95
+ command?: string | undefined;
96
+ file?: string | undefined;
97
+ description: string;
98
+ reason?: string | undefined;
99
+ expiresIn?: number | undefined;
100
+ metadata?: Record<string, unknown> | undefined;
101
+ }, {
102
+ type: "command_execution" | "external_action" | "file_delete" | "file_write" | "network_request" | "tool_execution";
103
+ workspaceId: string;
104
+ sessionId: string;
105
+ jobId?: string | undefined;
106
+ tool?: string | undefined;
107
+ command?: string | undefined;
108
+ file?: string | undefined;
109
+ description: string;
110
+ reason?: string | undefined;
111
+ expiresIn?: number | undefined;
112
+ metadata?: Record<string, unknown> | undefined;
113
+ }>;
114
+ export type ApprovalRequest = z.infer<typeof ApprovalRequest>;
115
+ /**
116
+ * Approval response input
117
+ */
118
+ export declare const ApprovalResponse: z.ZodObject<{
119
+ id: z.ZodString;
120
+ approved: z.ZodBoolean;
121
+ reason: z.ZodOptional<z.ZodString>;
122
+ }, "strip", z.ZodTypeAny, {
123
+ id: string;
124
+ approved: boolean;
125
+ reason?: string | undefined;
126
+ }, {
127
+ id: string;
128
+ approved: boolean;
129
+ reason?: string | undefined;
130
+ }>;
131
+ export type ApprovalResponse = z.infer<typeof ApprovalResponse>;
132
+ /**
133
+ * Approval filter
134
+ */
135
+ export declare const ApprovalFilter: z.ZodObject<{
136
+ workspaceId: z.ZodOptional<z.ZodString>;
137
+ sessionId: z.ZodOptional<z.ZodString>;
138
+ jobId: z.ZodOptional<z.ZodString>;
139
+ status: z.ZodOptional<z.ZodEnum<["pending", "approved", "rejected", "expired"]>>;
140
+ type: z.ZodOptional<z.ZodEnum<["tool_execution", "file_write", "file_delete", "command_execution", "network_request", "external_action"]>>;
141
+ since: z.ZodOptional<z.ZodString>;
142
+ until: z.ZodOptional<z.ZodString>;
143
+ limit: z.ZodDefault<z.ZodNumber>;
144
+ cursor: z.ZodOptional<z.ZodString>;
145
+ }, "strip", z.ZodTypeAny, {
146
+ workspaceId?: string | undefined;
147
+ sessionId?: string | undefined;
148
+ jobId?: string | undefined;
149
+ status?: "approved" | "expired" | "pending" | "rejected" | undefined;
150
+ type?: "command_execution" | "external_action" | "file_delete" | "file_write" | "network_request" | "tool_execution" | undefined;
151
+ since?: string | undefined;
152
+ until?: string | undefined;
153
+ limit: number;
154
+ cursor?: string | undefined;
155
+ }, {
156
+ workspaceId?: string | undefined;
157
+ sessionId?: string | undefined;
158
+ jobId?: string | undefined;
159
+ status?: "approved" | "expired" | "pending" | "rejected" | undefined;
160
+ type?: "command_execution" | "external_action" | "file_delete" | "file_write" | "network_request" | "tool_execution" | undefined;
161
+ since?: string | undefined;
162
+ until?: string | undefined;
163
+ limit?: number | undefined;
164
+ cursor?: string | undefined;
165
+ }>;
166
+ export type ApprovalFilter = z.infer<typeof ApprovalFilter>;
167
+ /**
168
+ * Approval list response
169
+ */
170
+ export declare const ApprovalList: z.ZodObject<{
171
+ items: z.ZodArray<z.ZodObject<{
172
+ id: z.ZodString;
173
+ type: z.ZodEnum<["tool_execution", "file_write", "file_delete", "command_execution", "network_request", "external_action"]>;
174
+ status: z.ZodDefault<z.ZodEnum<["pending", "approved", "rejected", "expired"]>>;
175
+ workspaceId: z.ZodString;
176
+ sessionId: z.ZodString;
177
+ jobId: z.ZodOptional<z.ZodString>;
178
+ tool: z.ZodOptional<z.ZodString>;
179
+ command: z.ZodOptional<z.ZodString>;
180
+ file: z.ZodOptional<z.ZodString>;
181
+ description: z.ZodString;
182
+ reason: z.ZodOptional<z.ZodString>;
183
+ requestedAt: z.ZodString;
184
+ respondedAt: z.ZodOptional<z.ZodString>;
185
+ expiresAt: z.ZodOptional<z.ZodString>;
186
+ requestedBy: z.ZodString;
187
+ approvedBy: z.ZodOptional<z.ZodString>;
188
+ metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
189
+ }, "strip", z.ZodTypeAny, {
190
+ id: string;
191
+ type: "command_execution" | "external_action" | "file_delete" | "file_write" | "network_request" | "tool_execution";
192
+ status: "approved" | "expired" | "pending" | "rejected";
193
+ workspaceId: string;
194
+ sessionId: string;
195
+ jobId?: string | undefined;
196
+ tool?: string | undefined;
197
+ command?: string | undefined;
198
+ file?: string | undefined;
199
+ description: string;
200
+ reason?: string | undefined;
201
+ requestedAt: string;
202
+ respondedAt?: string | undefined;
203
+ expiresAt?: string | undefined;
204
+ requestedBy: string;
205
+ approvedBy?: string | undefined;
206
+ metadata?: Record<string, unknown> | undefined;
207
+ }, {
208
+ id: string;
209
+ type: "command_execution" | "external_action" | "file_delete" | "file_write" | "network_request" | "tool_execution";
210
+ status?: "approved" | "expired" | "pending" | "rejected" | undefined;
211
+ workspaceId: string;
212
+ sessionId: string;
213
+ jobId?: string | undefined;
214
+ tool?: string | undefined;
215
+ command?: string | undefined;
216
+ file?: string | undefined;
217
+ description: string;
218
+ reason?: string | undefined;
219
+ requestedAt: string;
220
+ respondedAt?: string | undefined;
221
+ expiresAt?: string | undefined;
222
+ requestedBy: string;
223
+ approvedBy?: string | undefined;
224
+ metadata?: Record<string, unknown> | undefined;
225
+ }>, "many">;
226
+ nextCursor: z.ZodOptional<z.ZodString>;
227
+ total: z.ZodOptional<z.ZodNumber>;
228
+ }, "strip", z.ZodTypeAny, {
229
+ items: {
230
+ id: string;
231
+ type: "command_execution" | "external_action" | "file_delete" | "file_write" | "network_request" | "tool_execution";
232
+ status: "approved" | "expired" | "pending" | "rejected";
233
+ workspaceId: string;
234
+ sessionId: string;
235
+ jobId?: string | undefined;
236
+ tool?: string | undefined;
237
+ command?: string | undefined;
238
+ file?: string | undefined;
239
+ description: string;
240
+ reason?: string | undefined;
241
+ requestedAt: string;
242
+ respondedAt?: string | undefined;
243
+ expiresAt?: string | undefined;
244
+ requestedBy: string;
245
+ approvedBy?: string | undefined;
246
+ metadata?: Record<string, unknown> | undefined;
247
+ }[];
248
+ nextCursor?: string | undefined;
249
+ total?: number | undefined;
250
+ }, {
251
+ items: {
252
+ id: string;
253
+ type: "command_execution" | "external_action" | "file_delete" | "file_write" | "network_request" | "tool_execution";
254
+ status?: "approved" | "expired" | "pending" | "rejected" | undefined;
255
+ workspaceId: string;
256
+ sessionId: string;
257
+ jobId?: string | undefined;
258
+ tool?: string | undefined;
259
+ command?: string | undefined;
260
+ file?: string | undefined;
261
+ description: string;
262
+ reason?: string | undefined;
263
+ requestedAt: string;
264
+ respondedAt?: string | undefined;
265
+ expiresAt?: string | undefined;
266
+ requestedBy: string;
267
+ approvedBy?: string | undefined;
268
+ metadata?: Record<string, unknown> | undefined;
269
+ }[];
270
+ nextCursor?: string | undefined;
271
+ total?: number | undefined;
272
+ }>;
273
+ export type ApprovalList = z.infer<typeof ApprovalList>;
@@ -0,0 +1,93 @@
1
+ /**
2
+ * Approval schemas for pi-harness
3
+ */
4
+ import { z } from 'zod';
5
+ import { Timestamp, UUID, NonEmptyString } from './base.js';
6
+ /**
7
+ * Approval status
8
+ */
9
+ export const ApprovalStatus = z.enum([
10
+ 'pending',
11
+ 'approved',
12
+ 'rejected',
13
+ 'expired',
14
+ ]);
15
+ /**
16
+ * Approval type
17
+ */
18
+ export const ApprovalType = z.enum([
19
+ 'tool_execution',
20
+ 'file_write',
21
+ 'file_delete',
22
+ 'command_execution',
23
+ 'network_request',
24
+ 'external_action',
25
+ ]);
26
+ /**
27
+ * Approval definition
28
+ */
29
+ export const Approval = z.object({
30
+ id: UUID,
31
+ type: ApprovalType,
32
+ status: ApprovalStatus.default('pending'),
33
+ workspaceId: z.string(),
34
+ sessionId: z.string(),
35
+ jobId: z.string().optional(),
36
+ tool: NonEmptyString.optional(),
37
+ command: NonEmptyString.optional(),
38
+ file: NonEmptyString.optional(),
39
+ description: NonEmptyString,
40
+ reason: z.string().optional(),
41
+ requestedAt: Timestamp,
42
+ respondedAt: Timestamp.optional(),
43
+ expiresAt: Timestamp.optional(),
44
+ requestedBy: NonEmptyString,
45
+ approvedBy: NonEmptyString.optional(),
46
+ metadata: z.record(z.string(), z.unknown()).optional(),
47
+ });
48
+ /**
49
+ * Approval request input
50
+ */
51
+ export const ApprovalRequest = z.object({
52
+ type: ApprovalType,
53
+ workspaceId: z.string(),
54
+ sessionId: z.string(),
55
+ jobId: z.string().optional(),
56
+ tool: NonEmptyString.optional(),
57
+ command: NonEmptyString.optional(),
58
+ file: NonEmptyString.optional(),
59
+ description: NonEmptyString,
60
+ reason: z.string().optional(),
61
+ expiresIn: z.number().int().positive().optional(), // seconds, default 5 min
62
+ metadata: z.record(z.string(), z.unknown()).optional(),
63
+ });
64
+ /**
65
+ * Approval response input
66
+ */
67
+ export const ApprovalResponse = z.object({
68
+ id: UUID,
69
+ approved: z.boolean(),
70
+ reason: z.string().optional(),
71
+ });
72
+ /**
73
+ * Approval filter
74
+ */
75
+ export const ApprovalFilter = z.object({
76
+ workspaceId: z.string().optional(),
77
+ sessionId: z.string().optional(),
78
+ jobId: z.string().optional(),
79
+ status: ApprovalStatus.optional(),
80
+ type: ApprovalType.optional(),
81
+ since: Timestamp.optional(),
82
+ until: Timestamp.optional(),
83
+ limit: z.number().int().positive().max(100).default(50),
84
+ cursor: z.string().optional(),
85
+ });
86
+ /**
87
+ * Approval list response
88
+ */
89
+ export const ApprovalList = z.object({
90
+ items: z.array(Approval),
91
+ nextCursor: z.string().optional(),
92
+ total: z.number().optional(),
93
+ });
@@ -0,0 +1,78 @@
1
+ /**
2
+ * Base schemas for pi-harness contracts
3
+ */
4
+ import { z } from 'zod';
5
+ /**
6
+ * Base64-encoded content
7
+ */
8
+ export declare const Base64Content: z.ZodString;
9
+ /**
10
+ * ISO 8601 timestamp
11
+ */
12
+ export declare const Timestamp: z.ZodString;
13
+ /**
14
+ * UUID v4
15
+ */
16
+ export declare const UUID: z.ZodString;
17
+ /**
18
+ * Non-empty string
19
+ */
20
+ export declare const NonEmptyString: z.ZodString;
21
+ /**
22
+ * Positive integer
23
+ */
24
+ export declare const PositiveInt: z.ZodNumber;
25
+ /**
26
+ * Generic success result wrapper
27
+ */
28
+ export declare function success<T>(data: T): {
29
+ readonly ok: true;
30
+ readonly data: T;
31
+ };
32
+ /**
33
+ * Generic error result wrapper
34
+ */
35
+ export declare function error(message: string, code?: string): {
36
+ readonly ok: false;
37
+ readonly error: {
38
+ readonly message: string;
39
+ readonly code: string | undefined;
40
+ };
41
+ };
42
+ /**
43
+ * Result type for operations that can fail
44
+ */
45
+ export type Result<T, E = {
46
+ message: string;
47
+ code?: string;
48
+ }> = {
49
+ ok: true;
50
+ data: T;
51
+ } | {
52
+ ok: false;
53
+ error: E;
54
+ };
55
+ /**
56
+ * Pagination cursor
57
+ */
58
+ export interface PageCursor {
59
+ after?: string;
60
+ before?: string;
61
+ limit?: number;
62
+ }
63
+ /**
64
+ * Paginated response
65
+ */
66
+ export interface Page<T> {
67
+ items: T[];
68
+ nextCursor?: string;
69
+ total?: number;
70
+ }
71
+ /**
72
+ * Base64 encode utility (pure TypeScript, no DOM dependencies)
73
+ */
74
+ export declare function base64Encode(str: string): string;
75
+ /**
76
+ * Base64 decode utility (pure TypeScript, no DOM dependencies)
77
+ */
78
+ export declare function base64Decode(str: string): string;
@@ -0,0 +1,82 @@
1
+ /**
2
+ * Base schemas for pi-harness contracts
3
+ */
4
+ import { z } from 'zod';
5
+ /**
6
+ * Base64-encoded content
7
+ */
8
+ export const Base64Content = z.string().regex(/^[A-Za-z0-9+/]*={0,2}$/);
9
+ /**
10
+ * ISO 8601 timestamp
11
+ */
12
+ export const Timestamp = z.string().datetime();
13
+ /**
14
+ * UUID v4
15
+ */
16
+ export const UUID = z.string().uuid();
17
+ /**
18
+ * Non-empty string
19
+ */
20
+ export const NonEmptyString = z.string().min(1);
21
+ /**
22
+ * Positive integer
23
+ */
24
+ export const PositiveInt = z.number().int().positive();
25
+ /**
26
+ * Generic success result wrapper
27
+ */
28
+ export function success(data) {
29
+ return { ok: true, data };
30
+ }
31
+ /**
32
+ * Generic error result wrapper
33
+ */
34
+ export function error(message, code) {
35
+ return { ok: false, error: { message, code } };
36
+ }
37
+ /**
38
+ * Base64 encode utility (pure TypeScript, no DOM dependencies)
39
+ */
40
+ export function base64Encode(str) {
41
+ // Use Node.js Buffer if available (most common in runtime)
42
+ // Otherwise use manual base64 encoding
43
+ const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
44
+ let result = '';
45
+ let i = 0;
46
+ while (i < str.length) {
47
+ const a = str.charCodeAt(i++);
48
+ const b = i < str.length ? str.charCodeAt(i++) : 0;
49
+ const c = i < str.length ? str.charCodeAt(i++) : 0;
50
+ const triplet = (a << 16) | (b << 8) | c;
51
+ result += chars[(triplet >> 18) & 0x3f];
52
+ result += chars[(triplet >> 12) & 0x3f];
53
+ result += i - 2 < str.length ? chars[(triplet >> 6) & 0x3f] : '=';
54
+ result += i - 1 < str.length ? chars[triplet & 0x3f] : '=';
55
+ }
56
+ return result;
57
+ }
58
+ /**
59
+ * Base64 decode utility (pure TypeScript, no DOM dependencies)
60
+ */
61
+ export function base64Decode(str) {
62
+ const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
63
+ let result = '';
64
+ let i = 0;
65
+ // Remove padding
66
+ const cleanStr = str.replace(/=/g, '');
67
+ while (i < cleanStr.length) {
68
+ const a = chars.indexOf(cleanStr[i++]);
69
+ const b = i < cleanStr.length ? chars.indexOf(cleanStr[i++]) : 0;
70
+ const c = i < cleanStr.length ? chars.indexOf(cleanStr[i++]) : 0;
71
+ const d = i < cleanStr.length ? chars.indexOf(cleanStr[i++]) : 0;
72
+ const triplet = (a << 18) | (b << 12) | (c << 6) | d;
73
+ result += String.fromCharCode((triplet >> 16) & 0xff);
74
+ if (cleanStr[i - 2] !== undefined) {
75
+ result += String.fromCharCode((triplet >> 8) & 0xff);
76
+ }
77
+ if (cleanStr[i - 1] !== undefined) {
78
+ result += String.fromCharCode(triplet & 0xff);
79
+ }
80
+ }
81
+ return result;
82
+ }