engineering-behavior-observatory 0.2.1

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 (178) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +151 -0
  3. package/contracts/codex-app-server-0.150.1/manifest.json +25 -0
  4. package/contracts/codex-app-server-0.150.1/schema/InitializeParams.json +84 -0
  5. package/contracts/codex-app-server-0.150.1/schema/JSONRPCMessage.json +137 -0
  6. package/contracts/codex-app-server-0.150.1/schema/v2/ThreadReadParams.json +17 -0
  7. package/contracts/codex-app-server-0.150.1/schema/v2/ThreadTokenUsageUpdatedNotification.json +82 -0
  8. package/contracts/codex-app-server-0.150.1/schema/v2/TurnInterruptParams.json +17 -0
  9. package/contracts/codex-app-server-0.150.1/types/AskForApproval.ts +5 -0
  10. package/contracts/codex-app-server-0.150.1/types/ClientNotification.ts +5 -0
  11. package/contracts/codex-app-server-0.150.1/types/SandboxMode.ts +5 -0
  12. package/contracts/codex-app-server-0.150.1/types/ThreadReadParams.ts +9 -0
  13. package/contracts/codex-app-server-0.150.1/types/TokenUsageBreakdown.ts +5 -0
  14. package/contracts/codex-app-server-0.150.1/types/TurnInterruptParams.ts +5 -0
  15. package/contracts/codex-app-server-0.153.4/manifest.json +27 -0
  16. package/contracts/codex-app-server-0.153.4/schema/JSONRPCMessage.json +137 -0
  17. package/contracts/codex-app-server-0.153.4/schema/v1/InitializeParams.json +84 -0
  18. package/contracts/codex-app-server-0.153.4/schema/v2/ThreadReadParams.json +17 -0
  19. package/contracts/codex-app-server-0.153.4/schema/v2/ThreadStartParams.json +515 -0
  20. package/contracts/codex-app-server-0.153.4/schema/v2/ThreadTokenUsageUpdatedNotification.json +82 -0
  21. package/contracts/codex-app-server-0.153.4/schema/v2/TurnInterruptParams.json +17 -0
  22. package/contracts/codex-app-server-0.153.4/schema/v2/TurnStartParams.json +921 -0
  23. package/contracts/codex-app-server-0.153.4/types/AskForApproval.ts +5 -0
  24. package/contracts/codex-app-server-0.153.4/types/ClientNotification.ts +5 -0
  25. package/contracts/codex-app-server-0.153.4/types/SandboxMode.ts +5 -0
  26. package/contracts/codex-app-server-0.153.4/types/ThreadReadParams.ts +12 -0
  27. package/contracts/codex-app-server-0.153.4/types/TokenUsageBreakdown.ts +5 -0
  28. package/contracts/codex-app-server-0.153.4/types/TurnInterruptParams.ts +5 -0
  29. package/contracts/openhands-agent-server-v1.44.1.json +65 -0
  30. package/contracts/openhands-agent-server-v1.46.0.json +46 -0
  31. package/dist/contracts/codex-app-server-0.153.4/types/AskForApproval.d.ts +9 -0
  32. package/dist/contracts/codex-app-server-0.153.4/types/AskForApproval.js +2 -0
  33. package/dist/contracts/codex-app-server-0.153.4/types/ClientNotification.d.ts +3 -0
  34. package/dist/contracts/codex-app-server-0.153.4/types/ClientNotification.js +2 -0
  35. package/dist/contracts/codex-app-server-0.153.4/types/SandboxMode.d.ts +1 -0
  36. package/dist/contracts/codex-app-server-0.153.4/types/SandboxMode.js +2 -0
  37. package/dist/contracts/codex-app-server-0.153.4/types/ThreadReadParams.d.ts +10 -0
  38. package/dist/contracts/codex-app-server-0.153.4/types/ThreadReadParams.js +2 -0
  39. package/dist/contracts/codex-app-server-0.153.4/types/TokenUsageBreakdown.d.ts +8 -0
  40. package/dist/contracts/codex-app-server-0.153.4/types/TokenUsageBreakdown.js +2 -0
  41. package/dist/contracts/codex-app-server-0.153.4/types/TurnInterruptParams.d.ts +4 -0
  42. package/dist/contracts/codex-app-server-0.153.4/types/TurnInterruptParams.js +2 -0
  43. package/dist/src/agent-sdk-normalizer.d.ts +22 -0
  44. package/dist/src/agent-sdk-normalizer.js +995 -0
  45. package/dist/src/agent-sdk-run.d.ts +31 -0
  46. package/dist/src/agent-sdk-run.js +242 -0
  47. package/dist/src/agent-sdk-runner.d.ts +96 -0
  48. package/dist/src/agent-sdk-runner.js +407 -0
  49. package/dist/src/agent-sdk.d.ts +294 -0
  50. package/dist/src/agent-sdk.js +644 -0
  51. package/dist/src/aggregation.d.ts +183 -0
  52. package/dist/src/aggregation.js +513 -0
  53. package/dist/src/artifacts.d.ts +36 -0
  54. package/dist/src/artifacts.js +1372 -0
  55. package/dist/src/atlas-grafana.d.ts +377 -0
  56. package/dist/src/atlas-grafana.js +47 -0
  57. package/dist/src/atlas-html.d.ts +2 -0
  58. package/dist/src/atlas-html.js +34 -0
  59. package/dist/src/atlas.d.ts +130 -0
  60. package/dist/src/atlas.js +235 -0
  61. package/dist/src/behavior-assertions.d.ts +95 -0
  62. package/dist/src/behavior-assertions.js +154 -0
  63. package/dist/src/cli.d.ts +5 -0
  64. package/dist/src/cli.js +957 -0
  65. package/dist/src/codex-judge.d.ts +44 -0
  66. package/dist/src/codex-judge.js +214 -0
  67. package/dist/src/codex-run.d.ts +114 -0
  68. package/dist/src/codex-run.js +519 -0
  69. package/dist/src/codex.d.ts +187 -0
  70. package/dist/src/codex.js +1028 -0
  71. package/dist/src/contracts.d.ts +155 -0
  72. package/dist/src/contracts.js +866 -0
  73. package/dist/src/corpus.d.ts +67 -0
  74. package/dist/src/corpus.js +540 -0
  75. package/dist/src/cursor-sdk-runner.d.ts +81 -0
  76. package/dist/src/cursor-sdk-runner.js +362 -0
  77. package/dist/src/cursor-sdk.d.ts +81 -0
  78. package/dist/src/cursor-sdk.js +1078 -0
  79. package/dist/src/deepseek-adapter.d.ts +152 -0
  80. package/dist/src/deepseek-adapter.js +777 -0
  81. package/dist/src/exports.d.ts +69 -0
  82. package/dist/src/exports.js +966 -0
  83. package/dist/src/human-calibration.d.ts +167 -0
  84. package/dist/src/human-calibration.js +618 -0
  85. package/dist/src/index.d.ts +71 -0
  86. package/dist/src/index.js +38 -0
  87. package/dist/src/lifecycle.d.ts +196 -0
  88. package/dist/src/lifecycle.js +1889 -0
  89. package/dist/src/normalization-integrity.d.ts +128 -0
  90. package/dist/src/normalization-integrity.js +429 -0
  91. package/dist/src/openhands-run.d.ts +36 -0
  92. package/dist/src/openhands-run.js +415 -0
  93. package/dist/src/openhands.d.ts +130 -0
  94. package/dist/src/openhands.js +859 -0
  95. package/dist/src/pi.d.ts +203 -0
  96. package/dist/src/pi.js +1345 -0
  97. package/dist/src/process-protocol.d.ts +245 -0
  98. package/dist/src/process-protocol.js +1261 -0
  99. package/dist/src/retained-evidence.d.ts +12 -0
  100. package/dist/src/retained-evidence.js +201 -0
  101. package/dist/src/run-bundles.d.ts +193 -0
  102. package/dist/src/run-bundles.js +993 -0
  103. package/dist/src/scheduler.d.ts +109 -0
  104. package/dist/src/scheduler.js +1080 -0
  105. package/dist/src/semantic-judge.d.ts +194 -0
  106. package/dist/src/semantic-judge.js +875 -0
  107. package/dist/src/structural-observations.d.ts +124 -0
  108. package/dist/src/structural-observations.js +671 -0
  109. package/dist/src/task-packets.d.ts +115 -0
  110. package/dist/src/task-packets.js +683 -0
  111. package/dist/src/uniform-events.d.ts +120 -0
  112. package/dist/src/uniform-events.js +158 -0
  113. package/dist/src/verifiers.d.ts +116 -0
  114. package/dist/src/verifiers.js +819 -0
  115. package/dist/src/workspaces.d.ts +56 -0
  116. package/dist/src/workspaces.js +1314 -0
  117. package/docs/README.md +60 -0
  118. package/docs/development/README.md +71 -0
  119. package/docs/development/documentation-sync.md +58 -0
  120. package/docs/development/extension-contracts.md +307 -0
  121. package/docs/evaluation/README.md +48 -0
  122. package/docs/evaluation/aggregation.md +112 -0
  123. package/docs/evaluation/behavior-assertions.md +45 -0
  124. package/docs/evaluation/human-calibration.md +170 -0
  125. package/docs/evaluation/normalization-integrity.md +80 -0
  126. package/docs/evaluation/semantic-judge.md +188 -0
  127. package/docs/evaluation/structural-observations.md +84 -0
  128. package/docs/evaluation/uniform-events.md +131 -0
  129. package/docs/guides/atlas.md +144 -0
  130. package/docs/guides/evidence-and-sharing.md +100 -0
  131. package/docs/guides/operator-guide.md +424 -0
  132. package/docs/guides/quickstart.md +152 -0
  133. package/docs/guides/telemetry.md +66 -0
  134. package/docs/harnesses/README.md +31 -0
  135. package/docs/harnesses/claude-agent-sdk.md +61 -0
  136. package/docs/harnesses/codex-harness.md +174 -0
  137. package/docs/harnesses/cursor-sdk.md +149 -0
  138. package/docs/harnesses/deepseek-harness.md +134 -0
  139. package/docs/harnesses/openhands-agent-server.md +153 -0
  140. package/docs/harnesses/pi-sdk.md +66 -0
  141. package/docs/reference/README.md +19 -0
  142. package/docs/reference/agent-sdk-operational-runner.md +118 -0
  143. package/docs/reference/cli.md +114 -0
  144. package/docs/reference/contracts.md +222 -0
  145. package/docs/reference/run-bundle-contract.md +354 -0
  146. package/docs/reference/run-lifecycle.md +54 -0
  147. package/examples/cursor-sdk/README.md +11 -0
  148. package/examples/cursor-sdk/capture-profile.json +1 -0
  149. package/examples/cursor-sdk/harness.json +1 -0
  150. package/examples/cursor-sdk/model.json +1 -0
  151. package/examples/cursor-sdk/native-limits.json +1 -0
  152. package/examples/cursor-sdk/native-tool-policy.json +1 -0
  153. package/ontology/behavior-categories.v1.json +46 -0
  154. package/package.json +66 -0
  155. package/release/0.1.0/KNOWN_LIMITATIONS.md +35 -0
  156. package/release/0.1.0/README.md +46 -0
  157. package/release/0.1.0/reproducibility.json +61 -0
  158. package/release/0.2.0/KNOWN_LIMITATIONS.md +40 -0
  159. package/release/0.2.0/README.md +42 -0
  160. package/release/0.2.0/reproducibility.json +73 -0
  161. package/release/0.2.1/KNOWN_LIMITATIONS.md +18 -0
  162. package/release/0.2.1/README.md +63 -0
  163. package/release/0.2.1/reproducibility.json +73 -0
  164. package/release/README.md +13 -0
  165. package/schemas/aggregation.v1.json +293 -0
  166. package/schemas/behavior-assertions.v1.json +220 -0
  167. package/schemas/deepseek-runtime-composition.v1.schema.json +122 -0
  168. package/schemas/experiment.v1.schema.json +188 -0
  169. package/schemas/human-calibration.v1.json +336 -0
  170. package/schemas/normalization-integrity.v1.json +302 -0
  171. package/schemas/run-bundles/v1.json +1040 -0
  172. package/schemas/run-queue.v1.schema.json +206 -0
  173. package/schemas/semantic-judge.v1.json +380 -0
  174. package/schemas/structural-observations.v1.json +131 -0
  175. package/schemas/task-packet-freeze.v1.schema.json +106 -0
  176. package/schemas/task-packet.v1.schema.json +234 -0
  177. package/schemas/uniform-events/v1.json +289 -0
  178. package/scripts/atlas-grafana.sh +18 -0
@@ -0,0 +1,245 @@
1
+ import { type SpawnOptions } from "node:child_process";
2
+ export type ProtocolIdentity = string | number | null;
3
+ export type ProtocolObservationKind = "frame" | "request" | "response" | "notification" | "completion" | "capability" | "error" | "process";
4
+ export type ProtocolObservation = {
5
+ schemaVersion: "ebo.protocol-observation/v1";
6
+ sequence: number;
7
+ observedAt: string;
8
+ kind: ProtocolObservationKind;
9
+ source: string;
10
+ stream?: "stdout" | "stderr";
11
+ method?: string;
12
+ id?: ProtocolIdentity;
13
+ sourceIdentity?: string;
14
+ raw?: string;
15
+ parseError?: string;
16
+ payload?: unknown;
17
+ evidence?: unknown;
18
+ status?: string;
19
+ capability?: string;
20
+ };
21
+ export type ProtocolObservationInput = {
22
+ source: string;
23
+ method: string;
24
+ id?: ProtocolIdentity;
25
+ sourceIdentity?: string;
26
+ payload?: unknown;
27
+ observedAt?: string;
28
+ };
29
+ export type ProtocolCompletionEvidence = {
30
+ source: string;
31
+ status: string;
32
+ evidence: unknown;
33
+ method?: string;
34
+ sourceIdentity?: string;
35
+ observedAt?: string;
36
+ };
37
+ export type ProtocolCapability = {
38
+ source: string;
39
+ name: string;
40
+ status: "available" | "unsupported" | "missing" | "not-checked";
41
+ details?: unknown;
42
+ observedAt?: string;
43
+ };
44
+ export type JsonlEvidenceWriterOptions = {
45
+ maxLineBytes?: number;
46
+ fsync?: boolean;
47
+ exclusive?: boolean;
48
+ };
49
+ declare const INTERNAL_RECORDER_TOKEN: unique symbol;
50
+ /**
51
+ * Appends JSON records one line at a time and optionally fsyncs each append.
52
+ * A queued writer keeps records ordered even when protocol callbacks overlap.
53
+ */
54
+ export declare class JsonlEvidenceWriter {
55
+ readonly path: string;
56
+ private readonly maxLineBytes;
57
+ private readonly shouldFsync;
58
+ private readonly exclusive;
59
+ private handle;
60
+ private queue;
61
+ private closed;
62
+ private poisoned;
63
+ private claimed;
64
+ private preparedExclusive;
65
+ private hasWrites;
66
+ private claimLockFd;
67
+ private claimLockPath;
68
+ private claimCanonicalPath;
69
+ private _count;
70
+ constructor(path: string, options?: JsonlEvidenceWriterOptions);
71
+ get count(): number;
72
+ get maxRecordBytes(): number;
73
+ append(record: unknown, token?: typeof INTERNAL_RECORDER_TOKEN): Promise<void>;
74
+ flush(): Promise<void>;
75
+ close(): Promise<void>;
76
+ ensureOpen(): Promise<void>;
77
+ claim(token?: typeof INTERNAL_RECORDER_TOKEN): number;
78
+ releaseClaim(token?: typeof INTERNAL_RECORDER_TOKEN): void;
79
+ private releaseClaimNow;
80
+ private openHandle;
81
+ private prepareForClaim;
82
+ }
83
+ export declare function openJsonlEvidenceWriter(path: string, options?: JsonlEvidenceWriterOptions): Promise<JsonlEvidenceWriter>;
84
+ export type BoundedDiagnostic = {
85
+ bytes: Buffer;
86
+ text: string;
87
+ sizeBytes: number;
88
+ truncated: boolean;
89
+ maxBytes: number;
90
+ };
91
+ /** Keeps a bounded diagnostic prefix while continuing to drain the stream. */
92
+ export declare class BoundedDiagnosticCapture {
93
+ readonly maxBytes: number;
94
+ private readonly chunks;
95
+ private _sizeBytes;
96
+ private _truncated;
97
+ private keptBytes;
98
+ constructor(maxBytes?: number);
99
+ write(chunk: Uint8Array): void;
100
+ get sizeBytes(): number;
101
+ get truncated(): boolean;
102
+ result(): BoundedDiagnostic;
103
+ }
104
+ export type ProtocolProcessOptions = {
105
+ command: string;
106
+ args?: readonly string[];
107
+ cwd?: string;
108
+ env?: NodeJS.ProcessEnv;
109
+ source: string;
110
+ evidencePath?: string;
111
+ writer?: JsonlEvidenceWriter;
112
+ stderrPath?: string;
113
+ maxStderrBytes?: number;
114
+ maxLineBytes?: number;
115
+ shutdownGraceMs?: number;
116
+ killGraceMs?: number;
117
+ maxInMemoryObservations?: number;
118
+ signal?: AbortSignal;
119
+ now?: () => string;
120
+ spawnOptions?: Omit<SpawnOptions, "stdio" | "env" | "cwd" | "signal" | "timeout" | "killSignal">;
121
+ onStderr?: (chunk: Uint8Array, final: boolean, recorder: ProtocolEvidenceRecorder) => void | Promise<void>;
122
+ onFrame?: (payload: unknown, recorder: ProtocolEvidenceRecorder) => void | Promise<void>;
123
+ };
124
+ export type ProcessTermination = "natural" | "shutdown" | "interrupted" | "malformed" | "recorder-error";
125
+ export type ProtocolProcessResult = {
126
+ status: "completed" | "failed" | "malformed" | "interrupted" | "shutdown";
127
+ partial: boolean;
128
+ protocolOnly: true;
129
+ launch: {
130
+ command: string;
131
+ args: string[];
132
+ cwd: string;
133
+ pid: number | null;
134
+ startedAt: string;
135
+ endedAt: string;
136
+ exitCode: number | null;
137
+ signal: NodeJS.Signals | null;
138
+ };
139
+ termination: ProcessTermination;
140
+ stdoutFrames: number;
141
+ stderr: BoundedDiagnostic;
142
+ error?: string;
143
+ recorderError?: string;
144
+ protocolError?: {
145
+ line: number;
146
+ message: string;
147
+ raw?: string;
148
+ };
149
+ evidencePath?: string;
150
+ stderrPath?: string;
151
+ droppedObservations: number;
152
+ observations: ProtocolObservation[];
153
+ };
154
+ export declare class ProtocolEvidenceRecorder {
155
+ private readonly writer;
156
+ private readonly source;
157
+ private readonly now;
158
+ private sequence;
159
+ private readonly records;
160
+ private readonly maxInMemoryObservations;
161
+ private queue;
162
+ private fenced;
163
+ private _dropped;
164
+ constructor(writer: JsonlEvidenceWriter, source: string, now?: () => string, maxInMemoryObservations?: number);
165
+ get observations(): readonly ProtocolObservation[];
166
+ get droppedObservations(): number;
167
+ /** Prevents late observer callbacks from appending after process finalization. */
168
+ fence(): void;
169
+ recordFrame(payload: unknown, observedAt?: string, raw?: string, parseError?: string): Promise<ProtocolObservation>;
170
+ recordRequest(input: ProtocolObservationInput): Promise<ProtocolObservation>;
171
+ recordResponse(input: ProtocolObservationInput): Promise<ProtocolObservation>;
172
+ recordNotification(input: ProtocolObservationInput): Promise<ProtocolObservation>;
173
+ recordCompletion(input: ProtocolCompletionEvidence): Promise<ProtocolObservation>;
174
+ recordCapability(input: ProtocolCapability): Promise<ProtocolObservation>;
175
+ recordError(message: string, evidence?: unknown, token?: typeof INTERNAL_RECORDER_TOKEN): Promise<ProtocolObservation>;
176
+ recordProcess(status: string, evidence?: unknown, token?: typeof INTERNAL_RECORDER_TOKEN): Promise<ProtocolObservation>;
177
+ flush(): Promise<void>;
178
+ close(): Promise<void>;
179
+ private record;
180
+ }
181
+ export declare class ProtocolProcess {
182
+ private readonly options;
183
+ private readonly child;
184
+ private readonly recorder;
185
+ private readonly stderrCapture;
186
+ private readonly stdoutLineLimit;
187
+ private readonly shutdownGraceMs;
188
+ private readonly killGraceMs;
189
+ private readonly maxInMemoryObservations;
190
+ private readonly writer;
191
+ private readonly now;
192
+ private readonly command;
193
+ private readonly detached;
194
+ private readonly ownsWriter;
195
+ private readonly evidencePath?;
196
+ private readonly stderrPath?;
197
+ private stderrPersisted;
198
+ private readonly startedAt;
199
+ private readonly cwd;
200
+ private readonly args;
201
+ private readonly onFrame;
202
+ private nextLineNumber;
203
+ private frameCount;
204
+ private lineQueue;
205
+ private pendingLineParts;
206
+ private pendingLineBytes;
207
+ private protocolFailureQueued;
208
+ private readonly waitPromise;
209
+ private termination;
210
+ private protocolError;
211
+ private recorderError;
212
+ private childError;
213
+ private signalQueue;
214
+ private abortListener;
215
+ private closeObserved;
216
+ private finishStarted;
217
+ private resolveResult;
218
+ constructor(options: ProtocolProcessOptions);
219
+ get pid(): number | undefined;
220
+ get stdin(): NodeJS.WritableStream;
221
+ get evidence(): ProtocolEvidenceRecorder;
222
+ wait(): Promise<ProtocolProcessResult>;
223
+ shutdown(): Promise<ProtocolProcessResult>;
224
+ interrupt(graceMs?: number, killGraceMs?: number): Promise<ProtocolProcessResult>;
225
+ private attachStreams;
226
+ private consumeStdout;
227
+ private appendPendingLine;
228
+ private queuePendingLine;
229
+ private flushPendingLine;
230
+ private processLine;
231
+ private failProtocol;
232
+ private failRecorder;
233
+ private setTermination;
234
+ private sendSignal;
235
+ private sendSignalNow;
236
+ private waitForClose;
237
+ private beginFinish;
238
+ private forceFinish;
239
+ private finish;
240
+ }
241
+ export declare function spawnProtocolProcess(options: ProtocolProcessOptions): ProtocolProcess;
242
+ export declare function runProtocolProcess(options: ProtocolProcessOptions): Promise<ProtocolProcessResult>;
243
+ /** Validate a retained protocol envelope against its physical JSONL line. */
244
+ export declare function assertProtocolObservation(value: unknown, lineNumber: number): asserts value is ProtocolObservation;
245
+ export {};