@xingular/harness 0.1.6 → 0.1.7

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 (133) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/NOTICE.md +38 -0
  3. package/README.md +118 -26
  4. package/dist/cli.js +6106 -912
  5. package/dist/terminal-pi.js +462 -11
  6. package/docs/README.md +12 -0
  7. package/docs/decisions/ADR-0001-owned-terminal.md +87 -0
  8. package/docs/evidence/terminal-2026-10-17/120x40-completed-transcript.ansi.gz +0 -0
  9. package/docs/evidence/terminal-2026-10-17/40x20-settings-interaction.ansi.gz +0 -0
  10. package/docs/evidence/terminal-2026-10-17/40x20-settings-keyboard.ansi.gz +0 -0
  11. package/docs/evidence/terminal-2026-10-17/40x20-welcome.ansi.gz +0 -0
  12. package/docs/evidence/terminal-2026-10-17/80x24-approval-0.ansi.gz +0 -0
  13. package/docs/evidence/terminal-2026-10-17/80x24-question.ansi.gz +0 -0
  14. package/docs/evidence/terminal-2026-10-17/verification.json +130 -0
  15. package/docs/evidence/terminal-2026-10-17-followup/120x40-completed-transcript.ansi.gz +0 -0
  16. package/docs/evidence/terminal-2026-10-17-followup/40x20-settings-interaction.ansi.gz +0 -0
  17. package/docs/evidence/terminal-2026-10-17-followup/40x20-settings-keyboard.ansi.gz +0 -0
  18. package/docs/evidence/terminal-2026-10-17-followup/40x20-welcome.ansi.gz +0 -0
  19. package/docs/evidence/terminal-2026-10-17-followup/80x24-approval-0.ansi.gz +0 -0
  20. package/docs/evidence/terminal-2026-10-17-followup/80x24-plugin-light.ansi.gz +0 -0
  21. package/docs/evidence/terminal-2026-10-17-followup/80x24-question-batch.ansi.gz +0 -0
  22. package/docs/evidence/terminal-2026-10-17-followup/80x24-question.ansi.gz +0 -0
  23. package/docs/evidence/terminal-2026-10-17-followup/app-bundle/80x24-approval-0.ansi.gz +0 -0
  24. package/docs/evidence/terminal-2026-10-17-followup/app-bundle/80x24-plugin-light.ansi.gz +0 -0
  25. package/docs/evidence/terminal-2026-10-17-followup/app-bundle/80x24-question-batch.ansi.gz +0 -0
  26. package/docs/evidence/terminal-2026-10-17-followup/app-bundle/80x24-question.ansi.gz +0 -0
  27. package/docs/evidence/terminal-2026-10-17-followup/app-bundle/verification.json +95 -0
  28. package/docs/evidence/terminal-2026-10-17-followup/global-install/80x24-approval-0.ansi.gz +0 -0
  29. package/docs/evidence/terminal-2026-10-17-followup/global-install/80x24-plugin-light.ansi.gz +0 -0
  30. package/docs/evidence/terminal-2026-10-17-followup/global-install/80x24-question-batch.ansi.gz +0 -0
  31. package/docs/evidence/terminal-2026-10-17-followup/global-install/80x24-question.ansi.gz +0 -0
  32. package/docs/evidence/terminal-2026-10-17-followup/global-install/README.md +27 -0
  33. package/docs/evidence/terminal-2026-10-17-followup/global-install/shell-command-80x24.ansi.gz +0 -0
  34. package/docs/evidence/terminal-2026-10-17-followup/global-install/shell-command.json +18 -0
  35. package/docs/evidence/terminal-2026-10-17-followup/global-install/verification.json +95 -0
  36. package/docs/evidence/terminal-2026-10-17-followup/harness-reference-80x24.json.gz +0 -0
  37. package/docs/evidence/terminal-2026-10-17-followup/harness-reference-final-80x24.json.gz +0 -0
  38. package/docs/evidence/terminal-2026-10-17-followup/harness-reference-scenario.json +60 -0
  39. package/docs/evidence/terminal-2026-10-17-followup/live-codex/README.md +24 -0
  40. package/docs/evidence/terminal-2026-10-17-followup/live-codex/complete-80x24.ansi.gz +0 -0
  41. package/docs/evidence/terminal-2026-10-17-followup/live-codex/verification.json +57 -0
  42. package/docs/evidence/terminal-2026-10-17-followup/omp-reference-80x24-early.json.gz +0 -0
  43. package/docs/evidence/terminal-2026-10-17-followup/omp-reference-80x24.json.gz +0 -0
  44. package/docs/evidence/terminal-2026-10-17-followup/omp-reference-scenario.json +58 -0
  45. package/docs/evidence/terminal-2026-10-17-followup/omp-supplemental-static.json.gz +0 -0
  46. package/docs/evidence/terminal-2026-10-17-followup/rea-artifacts.json +320 -0
  47. package/docs/evidence/terminal-2026-10-17-followup/reference-comparison.json +30 -0
  48. package/docs/evidence/terminal-2026-10-17-followup/reference-comparison.md +133 -0
  49. package/docs/evidence/terminal-2026-10-17-followup/reference-source-observations.json +20 -0
  50. package/docs/evidence/terminal-2026-10-17-followup/verification.json +207 -0
  51. package/docs/terminal-tui.md +254 -0
  52. package/package.json +8 -2
  53. package/src/accounts/accounts.test.ts +110 -0
  54. package/src/accounts/accounts.ts +146 -10
  55. package/src/cli.ts +7 -3
  56. package/src/harness.ts +16 -3
  57. package/src/hub/catalog.json +123 -0
  58. package/src/hub/cli.ts +59 -0
  59. package/src/hub/hub.test.ts +205 -0
  60. package/src/hub/hub.ts +256 -0
  61. package/src/hub/schema.ts +81 -0
  62. package/src/index.ts +6 -1
  63. package/src/memory/api.ts +16 -2
  64. package/src/memory/blocks.ts +3 -1
  65. package/src/memory/caller.ts +13 -1
  66. package/src/memory/curation.test.ts +163 -0
  67. package/src/memory/curation.ts +64 -0
  68. package/src/memory/maintenance.ts +199 -11
  69. package/src/memory/operations.ts +12 -0
  70. package/src/memory/proposals.ts +16 -8
  71. package/src/memory/recall.test.ts +11 -0
  72. package/src/memory/recall.ts +9 -2
  73. package/src/server/methods.ts +37 -2
  74. package/src/sessions/contracts.ts +29 -3
  75. package/src/sessions/conversation.test.ts +27 -0
  76. package/src/sessions/policy.ts +4 -0
  77. package/src/sessions/questionBatches.test.ts +110 -0
  78. package/src/sessions/registry.ts +109 -22
  79. package/src/sessions/runner.ts +36 -1
  80. package/src/sessions/sessions.test.ts +95 -1
  81. package/src/sessions/sessions.ts +53 -9
  82. package/src/skills/registry.ts +16 -10
  83. package/src/terminal/accountsMenu.test.ts +225 -0
  84. package/src/terminal/accountsMenu.ts +382 -0
  85. package/src/terminal/control.test.ts +23 -0
  86. package/src/terminal/control.ts +23 -0
  87. package/src/terminal/controller.ts +68 -4
  88. package/src/terminal/hubMenu.ts +24 -0
  89. package/src/terminal/launch.test.ts +5 -14
  90. package/src/terminal/launch.ts +2 -42
  91. package/src/terminal/piExtension.lifecycle.test.ts +55 -0
  92. package/src/terminal/piExtension.ts +50 -1
  93. package/src/terminal/socket.ts +13 -2
  94. package/src/terminal/standalone.test.ts +37 -0
  95. package/src/terminal/standalone.ts +16 -7
  96. package/src/terminal/terminal.test.ts +70 -1
  97. package/src/terminal/terminals.ts +122 -12
  98. package/src/terminal/tui/application.test.ts +114 -0
  99. package/src/terminal/tui/application.ts +491 -0
  100. package/src/terminal/tui/commands.test.ts +218 -0
  101. package/src/terminal/tui/commands.ts +361 -0
  102. package/src/terminal/tui/dialogs.ts +301 -0
  103. package/src/terminal/tui/editor.test.ts +84 -0
  104. package/src/terminal/tui/editor.ts +79 -0
  105. package/src/terminal/tui/keybindings.test.ts +22 -0
  106. package/src/terminal/tui/keybindings.ts +50 -0
  107. package/src/terminal/tui/piAdapter.ts +62 -0
  108. package/src/terminal/tui/presentation.test.ts +79 -0
  109. package/src/terminal/tui/questions.test.ts +41 -0
  110. package/src/terminal/tui/questions.ts +47 -0
  111. package/src/terminal/tui/runtime.socket.test.ts +104 -0
  112. package/src/terminal/tui/runtime.test.ts +215 -0
  113. package/src/terminal/tui/runtime.ts +388 -0
  114. package/src/terminal/tui/sessionUi.ts +24 -0
  115. package/src/terminal/tui/settings.test.ts +150 -0
  116. package/src/terminal/tui/settings.ts +188 -0
  117. package/src/terminal/tui/status.test.ts +70 -0
  118. package/src/terminal/tui/status.ts +109 -0
  119. package/src/terminal/tui/theme.ts +174 -0
  120. package/src/terminal/tui/tools.test.ts +145 -0
  121. package/src/terminal/tui/tools.ts +142 -0
  122. package/src/terminal/tui/transcript.test.ts +25 -0
  123. package/src/terminal/tui/transcript.ts +124 -0
  124. package/src/terminal/tui/ui.test.ts +313 -0
  125. package/src/terminal/tui/ui.ts +166 -0
  126. package/src/terminal/tui/welcome.ts +102 -0
  127. package/src/tools/askUser.test.ts +69 -0
  128. package/src/tools/askUser.ts +31 -17
  129. package/src/tools/maintenance.ts +24 -0
  130. package/src/tools/memoryTools.ts +1 -1
  131. package/src/tools/registryWrite.test.ts +101 -0
  132. package/src/tools/registryWrite.ts +182 -0
  133. package/src/tools/spawnSubagent.ts +92 -0
@@ -0,0 +1,320 @@
1
+ {
2
+ "format": "complete REA Evidence JSON compressed with gzip",
3
+ "records": [
4
+ {
5
+ "file": "omp-supplemental-static.json.gz",
6
+ "evidenceId": "ev_4438bf7b94a78ee2d13d0fe3b7a22238671d48b29a68f8beafbf942b9cee930c",
7
+ "operation": "analyze_javascript_application",
8
+ "rawBytes": 31432471,
9
+ "rawSha256": "33f28ff0bfa504b1701ff5e220382c086f6b8ffcf9beee1b097fb0e530467849",
10
+ "archiveBytes": 5785158,
11
+ "archiveSha256": "11123cad79e5e7a0fc7af135bb8ede75e0347ef9cb1e66653ef024bbe2268810",
12
+ "subject": {
13
+ "name": "package",
14
+ "digest": {
15
+ "sha256": "476c4be9445479f63043ee043f2f633c842c79140c228051b9b3da534054ab0e"
16
+ },
17
+ "local_path": "/private/tmp/xingular-omp-18.11.3-ugzs7h2m/pi-tui/package",
18
+ "format": "directory",
19
+ "architecture": null
20
+ },
21
+ "limitations": [
22
+ "Caller-selected source analysis leaves 939 inventoried files outside analysis scope. Inventory identity covers the complete artifact; relationships through unselected sources remain unknown.",
23
+ "CommonJS and ESM binding relationships were recovered from inert syntax and resolved only within the inventoried artifact container.",
24
+ "Graph coverage is incomplete; unavailable facts remain explicit and must not be read as absence.",
25
+ "JavaScript and HTML were parsed as inert text; bundle bootstrap code was never executed.",
26
+ "Static imports, entrypoints, workers, endpoints, and storage relationships do not prove runtime execution.",
27
+ "Static paths and relationships may remain unresolved when expressions are dynamic or obfuscated.",
28
+ "Webpack/Rspack factories were recovered from AST literals; REA did not invoke push handlers or bundle bootstrap code."
29
+ ],
30
+ "sourceSelection": {
31
+ "requested_paths": [
32
+ "package.json",
33
+ "src/components/composer/band.ts",
34
+ "src/prompt/composer.ts",
35
+ "src/theme/light.json",
36
+ "src/overlays/hook-selector.ts",
37
+ "src/overlays/approval-dialog.ts",
38
+ "src/overlays/ask-dialog.ts",
39
+ "src/chrome/error-block.ts",
40
+ "src/tools/default-renderer.ts"
41
+ ],
42
+ "unselected_files": 939
43
+ },
44
+ "exit": null,
45
+ "truncated": null,
46
+ "residualUnknowns": null
47
+ },
48
+ {
49
+ "file": "omp-reference-80x24-early.json.gz",
50
+ "evidenceId": "ev_d4fc1bd805ec0e3704024a58584477430cec8203e468824ea9872511a05bf2f9",
51
+ "operation": "capture_process_scenario",
52
+ "rawBytes": 727079,
53
+ "rawSha256": "746740b710b8ce4ab681ec839e88ca88b0ec633377d37dc93f1b446301b3dc83",
54
+ "archiveBytes": 32006,
55
+ "archiveSha256": "5c3a7c5f464403543413691ea777117122050c100426d83f650c51f6bca06071",
56
+ "subject": null,
57
+ "limitations": [
58
+ "Artifact identity is unavailable for this observation.",
59
+ "The executable digest is a prelaunch file sample; matching path metadata immediately after spawn does not prove an atomic operating-system image binding.",
60
+ "Process trees are sampled and may omit short-lived descendants.",
61
+ "Filesystem observations are before/after snapshots, not syscall traces.",
62
+ "Inherited host environment variables are not recorded and may affect results.",
63
+ "No filesystem observation paths were selected; filesystem effects remain unknown."
64
+ ],
65
+ "sourceSelection": null,
66
+ "exit": {
67
+ "code": null,
68
+ "signal": 9,
69
+ "reason": "timeout"
70
+ },
71
+ "truncated": false,
72
+ "residualUnknowns": [
73
+ {
74
+ "scope": "process",
75
+ "reason": "Process trees are sampled and may omit short-lived descendants."
76
+ },
77
+ {
78
+ "scope": "process",
79
+ "reason": "The executable digest is a prelaunch file sample; operating-system image binding is not atomically observed."
80
+ },
81
+ {
82
+ "scope": "environment",
83
+ "reason": "Inherited host environment variables are not recorded."
84
+ },
85
+ {
86
+ "scope": "network",
87
+ "reason": "Network activity is not observed by this capture."
88
+ },
89
+ {
90
+ "scope": "filesystem",
91
+ "reason": "No filesystem observation paths were selected; filesystem effects remain unknown."
92
+ },
93
+ {
94
+ "scope": "process",
95
+ "reason": "Ownership of unrelated process 84451 could not be verified; it was left untouched: sysctl_failed_22"
96
+ },
97
+ {
98
+ "scope": "process",
99
+ "reason": "Ownership of unrelated process 84509 could not be verified; it was left untouched: sysctl_failed_22"
100
+ },
101
+ {
102
+ "scope": "process",
103
+ "reason": "Ownership of unrelated process 84793 could not be verified; it was left untouched: platform_binary_environment_withheld"
104
+ },
105
+ {
106
+ "scope": "process",
107
+ "reason": "Ownership of unrelated process 84794 could not be verified; it was left untouched: platform_binary_environment_withheld"
108
+ },
109
+ {
110
+ "scope": "process",
111
+ "reason": "Ownership of unrelated process 84837 could not be verified; it was left untouched: platform_binary_environment_withheld"
112
+ },
113
+ {
114
+ "scope": "process",
115
+ "reason": "Ownership of unrelated process 84915 could not be verified; it was left untouched: platform_binary_environment_withheld"
116
+ },
117
+ {
118
+ "scope": "process",
119
+ "reason": "Ownership of unrelated process 84951 could not be verified; it was left untouched: platform_binary_environment_withheld"
120
+ },
121
+ {
122
+ "scope": "process",
123
+ "reason": "Ownership of unrelated process 84952 could not be verified; it was left untouched: platform_binary_environment_withheld"
124
+ },
125
+ {
126
+ "scope": "process",
127
+ "reason": "Ownership of unrelated process 85016 could not be verified; it was left untouched: platform_binary_environment_withheld"
128
+ },
129
+ {
130
+ "scope": "process",
131
+ "reason": "Ownership of unrelated process 85017 could not be verified; it was left untouched: platform_binary_environment_withheld"
132
+ },
133
+ {
134
+ "scope": "process",
135
+ "reason": "Ownership of unrelated process 85018 could not be verified; it was left untouched: platform_binary_environment_withheld"
136
+ },
137
+ {
138
+ "scope": "process",
139
+ "reason": "Ownership of unrelated process 85145 could not be verified; it was left untouched: platform_binary_environment_withheld"
140
+ },
141
+ {
142
+ "scope": "process",
143
+ "reason": "Ownership of unrelated process 85146 could not be verified; it was left untouched: platform_binary_environment_withheld"
144
+ },
145
+ {
146
+ "scope": "process",
147
+ "reason": "Ownership of unrelated process 85273 could not be verified; it was left untouched: platform_binary_environment_withheld"
148
+ },
149
+ {
150
+ "scope": "process",
151
+ "reason": "Ownership of unrelated process 85541 could not be verified; it was left untouched: platform_binary_environment_withheld"
152
+ }
153
+ ]
154
+ },
155
+ {
156
+ "file": "omp-reference-80x24.json.gz",
157
+ "evidenceId": "ev_60e1d747658d669029d0702be3d5fb30440e1145c7021a62a145f4ee49b6f7e8",
158
+ "operation": "capture_process_scenario",
159
+ "rawBytes": 728360,
160
+ "rawSha256": "2c77d9eb50e73ad88724c8767a51566e3bf29259e09c92fb9f395691685a0f0f",
161
+ "archiveBytes": 31797,
162
+ "archiveSha256": "2cde2f6837b5b188ed8a7c4aff77ab1bd99a15c92c4f9ed85d25d0dfe16a5398",
163
+ "subject": null,
164
+ "limitations": [
165
+ "Artifact identity is unavailable for this observation.",
166
+ "The executable digest is a prelaunch file sample; matching path metadata immediately after spawn does not prove an atomic operating-system image binding.",
167
+ "Process trees are sampled and may omit short-lived descendants.",
168
+ "Filesystem observations are before/after snapshots, not syscall traces.",
169
+ "Inherited host environment variables are not recorded and may affect results.",
170
+ "No filesystem observation paths were selected; filesystem effects remain unknown."
171
+ ],
172
+ "sourceSelection": null,
173
+ "exit": {
174
+ "code": 0,
175
+ "signal": 0,
176
+ "reason": "exited"
177
+ },
178
+ "truncated": false,
179
+ "residualUnknowns": [
180
+ {
181
+ "scope": "process",
182
+ "reason": "Process trees are sampled and may omit short-lived descendants."
183
+ },
184
+ {
185
+ "scope": "process",
186
+ "reason": "The executable digest is a prelaunch file sample; operating-system image binding is not atomically observed."
187
+ },
188
+ {
189
+ "scope": "environment",
190
+ "reason": "Inherited host environment variables are not recorded."
191
+ },
192
+ {
193
+ "scope": "network",
194
+ "reason": "Network activity is not observed by this capture."
195
+ },
196
+ {
197
+ "scope": "filesystem",
198
+ "reason": "No filesystem observation paths were selected; filesystem effects remain unknown."
199
+ }
200
+ ]
201
+ },
202
+ {
203
+ "file": "harness-reference-80x24.json.gz",
204
+ "evidenceId": "ev_33784029787117e58a741ab459c7daef86b25e1be60e01bfb62f7d513e43af6c",
205
+ "operation": "capture_process_scenario",
206
+ "rawBytes": 112601,
207
+ "rawSha256": "d28b20b6713bb7dc4a8571ef66a97c069733c14a9456d06f320ba0660747ce26",
208
+ "archiveBytes": 7847,
209
+ "archiveSha256": "4ce2691617e4a222ccae43c3bbe838599b4e963be31c5914f104c90e97bb059b",
210
+ "subject": null,
211
+ "limitations": [
212
+ "Artifact identity is unavailable for this observation.",
213
+ "The executable digest is a prelaunch file sample; matching path metadata immediately after spawn does not prove an atomic operating-system image binding.",
214
+ "Process trees are sampled and may omit short-lived descendants.",
215
+ "Filesystem observations are before/after snapshots, not syscall traces.",
216
+ "Inherited host environment variables are not recorded and may affect results.",
217
+ "No filesystem observation paths were selected; filesystem effects remain unknown."
218
+ ],
219
+ "sourceSelection": null,
220
+ "exit": {
221
+ "code": 0,
222
+ "signal": 0,
223
+ "reason": "exited"
224
+ },
225
+ "truncated": false,
226
+ "residualUnknowns": [
227
+ {
228
+ "scope": "process",
229
+ "reason": "Process trees are sampled and may omit short-lived descendants."
230
+ },
231
+ {
232
+ "scope": "process",
233
+ "reason": "The executable digest is a prelaunch file sample; operating-system image binding is not atomically observed."
234
+ },
235
+ {
236
+ "scope": "environment",
237
+ "reason": "Inherited host environment variables are not recorded."
238
+ },
239
+ {
240
+ "scope": "network",
241
+ "reason": "Network activity is not observed by this capture."
242
+ },
243
+ {
244
+ "scope": "filesystem",
245
+ "reason": "No filesystem observation paths were selected; filesystem effects remain unknown."
246
+ },
247
+ {
248
+ "scope": "process",
249
+ "reason": "Ownership of unrelated process 97608 could not be verified; it was left untouched: sysctl_failed_22"
250
+ },
251
+ {
252
+ "scope": "process",
253
+ "reason": "Ownership of unrelated process 97617 could not be verified; it was left untouched: sysctl_failed_22"
254
+ }
255
+ ]
256
+ },
257
+ {
258
+ "file": "harness-reference-final-80x24.json.gz",
259
+ "evidenceId": "ev_f77284e263113f813d2f8a06a085b5447e55626af345e3a96aaf47eca0b7d95a",
260
+ "operation": "capture_process_scenario",
261
+ "rawBytes": 116713,
262
+ "rawSha256": "0705a6322f7a1a3e4a98c1ff531ba21c043cf148d6a8d75c20712a1ab9b1ae96",
263
+ "archiveBytes": 7994,
264
+ "archiveSha256": "89cc78a19c92fb4cd3891365144f1023f67a6ff38a319923ce45eabcd4d5645e",
265
+ "subject": null,
266
+ "limitations": [
267
+ "Artifact identity is unavailable for this observation.",
268
+ "The executable digest is a prelaunch file sample; matching path metadata immediately after spawn does not prove an atomic operating-system image binding.",
269
+ "Process trees are sampled and may omit short-lived descendants.",
270
+ "Filesystem observations are before/after snapshots, not syscall traces.",
271
+ "Inherited host environment variables are not recorded and may affect results."
272
+ ],
273
+ "sourceSelection": null,
274
+ "exit": {
275
+ "code": 0,
276
+ "signal": 0,
277
+ "reason": "exited"
278
+ },
279
+ "truncated": false,
280
+ "residualUnknowns": [
281
+ {
282
+ "scope": "process",
283
+ "reason": "Process trees are sampled and may omit short-lived descendants."
284
+ },
285
+ {
286
+ "scope": "process",
287
+ "reason": "The executable digest is a prelaunch file sample; operating-system image binding is not atomically observed."
288
+ },
289
+ {
290
+ "scope": "environment",
291
+ "reason": "Inherited host environment variables are not recorded."
292
+ },
293
+ {
294
+ "scope": "network",
295
+ "reason": "Network activity is not observed by this capture."
296
+ }
297
+ ],
298
+ "cliBefore": [
299
+ {
300
+ "path": "root_0:.",
301
+ "mode": 33261,
302
+ "size": 802804,
303
+ "type": "file",
304
+ "sha256": "2f5df943661a1e89440d0e81d59cd4a5bdb7aaf087a2a930e232b6743d5db093",
305
+ "symlink_target": null
306
+ }
307
+ ],
308
+ "cliAfter": [
309
+ {
310
+ "path": "root_0:.",
311
+ "mode": 33261,
312
+ "size": 802804,
313
+ "type": "file",
314
+ "sha256": "2f5df943661a1e89440d0e81d59cd4a5bdb7aaf087a2a930e232b6743d5db093",
315
+ "symlink_target": null
316
+ }
317
+ ]
318
+ }
319
+ ]
320
+ }
@@ -0,0 +1,30 @@
1
+ [
2
+ {
3
+ "label": "OMP",
4
+ "evidenceId": "ev_60e1d747658d669029d0702be3d5fb30440e1145c7021a62a145f4ee49b6f7e8",
5
+ "exit": {
6
+ "code": 0,
7
+ "signal": 0,
8
+ "reason": "exited"
9
+ },
10
+ "truncated": false,
11
+ "selectedFrames": {
12
+ "Welcome": 155,
13
+ "Settings": 163
14
+ }
15
+ },
16
+ {
17
+ "label": "Harness",
18
+ "evidenceId": "ev_f77284e263113f813d2f8a06a085b5447e55626af345e3a96aaf47eca0b7d95a",
19
+ "exit": {
20
+ "code": 0,
21
+ "signal": 0,
22
+ "reason": "exited"
23
+ },
24
+ "truncated": false,
25
+ "selectedFrames": {
26
+ "Welcome": 7,
27
+ "Settings": 15
28
+ }
29
+ }
30
+ ]
@@ -0,0 +1,133 @@
1
+ # Terminal reference comparison
2
+
3
+ Observed startup and settings at 80×24 from the pinned OMP binary and final production Harness CLI, using disposable profiles without a model request. Profile paths and literal product names are normalized; ASCII wordmarks, versions, random tips, capability menus and runtime values remain visible differences. This is bounded visual review, not a pixel-equivalence score.
4
+
5
+ ## OMP — Welcome
6
+
7
+ Evidence: `ev_60e1d747658d669029d0702be3d5fb30440e1145c7021a62a145f4ee49b6f7e8`; frame 155 at 3680 ms.
8
+
9
+ ```text
10
+
11
+ ████████████
12
+ ██ ██ ▄▀▀▄ █▀▄▀▄ █▀▀▄
13
+ ██ ██ ▀▄▄▀ █ █ █ █▄▄▀
14
+ ▒▒ ██ █
15
+ ██ v18.11.3
16
+
17
+ Tip: `/copy code` grabs the last code block to your clipboard — `/copy
18
+ cmd` grabs the last shell/python command
19
+
20
+ Warning: No default model selected. Use /login, set an API key environment
21
+ variable, or select a local model with /model or --model.
22
+
23
+ π > ⬢ no-model > 🗑 /profile/project > ◫ 2.2K/? ⟲ ▶───────
24
+ ╰─ ⇧⇥ to change thinking effort
25
+
26
+
27
+
28
+
29
+
30
+
31
+
32
+
33
+
34
+ ```
35
+
36
+ ## OMP — Settings
37
+
38
+ Evidence: `ev_60e1d747658d669029d0702be3d5fb30440e1145c7021a62a145f4ee49b6f7e8`; frame 163 at 8030 ms.
39
+
40
+ ```text
41
+ ╭─ Settings ───────────────────────────────────────────────────────────────────╮
42
+ │ 🎨 Appearance 🤖 ⌨ 📋 🧠 📁 💻 🔧 📦 🌐 📦 │
43
+ ├──────────────────────────────────────────────────────────────────────────────┤
44
+ │ Theme █ │
45
+ │ ❯ Dark Theme titanium █ │
46
+ │ Light Theme light │ │
47
+ │ Symbol Preset unicode │ │
48
+ │ Color-Blind Mode false │ │
49
+ │ Composer │ │
50
+ │ Composer Shape band │ │
51
+ │ Generation Rate false │ │
52
+ │ Status Line │ │
53
+ │ Status Line Preset default │ │
54
+ │ Status Line Separator powerline-thin │ │
55
+ │ │
56
+ │ Theme used when the terminal has a dark background │
57
+ │ │
58
+ │ │
59
+ │ │
60
+ │ Preview: │
61
+ │ π > ⬢ no-model > 🗑 /profile/project > ◫ 2.2K/? ⟲ ▶──… │
62
+ ├──────────────────────────────────────────────────────────────────────────────┤
63
+ │ ⏎/␣ to change · ⇥ to jump sections · ←/→ to switch tabs · Type to search · … │
64
+ ╰──────────────────────────────────────────────────────────────────────────────╯
65
+ ```
66
+
67
+ ## Harness — Welcome
68
+
69
+ Evidence: `ev_f77284e263113f813d2f8a06a085b5447e55626af345e3a96aaf47eca0b7d95a`; frame 7 at 2910 ms.
70
+
71
+ ```text
72
+
73
+ ████████████
74
+ ██ ██ PRODUCT
75
+ ██ ██
76
+ ▒▒ ██
77
+ ██ v0.1.6
78
+
79
+ Tip: Use /accounts to manage sign-ins, /plugins to manage extensions,
80
+ and /hub to browse reusable skills.
81
+
82
+
83
+ No model is configured. Use /accounts or /login to sign in.
84
+ π > ⬢ no-model > 📁 /private/var/folders/69/1vwvfl494kx0s... > Default ▶───────
85
+ ╰─ ⇧⇥ to change thinking effort
86
+
87
+
88
+
89
+
90
+
91
+
92
+
93
+
94
+
95
+
96
+ ```
97
+
98
+ ## Harness — Settings
99
+
100
+ Evidence: `ev_f77284e263113f813d2f8a06a085b5447e55626af345e3a96aaf47eca0b7d95a`; frame 15 at 8030 ms.
101
+
102
+ ```text
103
+ ╭─ Settings ───────────────────────────────────────────────────────────────────╮
104
+ │ 🎨 Appearance 🤖 Model ⌨ Interaction 📋 Context │
105
+ ├──────────────────────────────────────────────────────────────────────────────┤
106
+ │ Theme │
107
+ │ ❯ Theme harness-titanium │
108
+ │ Display │
109
+ │ Hide thinking off │
110
+ │ Images │
111
+ │ Show images on │
112
+ │ Resize images on │
113
+ │ │
114
+ │ │
115
+ │ │
116
+ │ │
117
+ │ │
118
+ │ │
119
+ │ │
120
+ │ │
121
+ │ Theme loaded from the trusted resource catalog. │
122
+ │ │
123
+ │ │
124
+ ├──────────────────────────────────────────────────────────────────────────────┤
125
+ │ Enter/Space change · Tab jump sections · ←/→ switch tabs · Type to search · │
126
+ ╰──────────────────────────────────────────────────────────────────────────────╯
127
+ ```
128
+
129
+ ## Observations
130
+
131
+ Both screens use a centered five-row logo, status band and curved composer. Settings use rounded full-screen borders and inline section headings at 80 columns. Wider Harness screens show a section rail only when at least 60 columns remain for editable rows, following the inspected upstream constraint. Supported tabs, setting labels, current values and available actions differ with the capability set. The Harness status includes its pinned account.
132
+
133
+ OMP’s large capability catalog and configurable status presets were not imported. The initial OMP capture sent input before startup completed; it timed out and is retained as `omp-reference-80x24-early.json.gz`, excluded above. Both compared captures completed with code 0 and no output truncation. The final Harness capture also records the bundled CLI file digest before and after execution. Runtime and environmental limitations remain in the complete records.
@@ -0,0 +1,20 @@
1
+ [
2
+ {
3
+ "observationType": "direct static read of shipped npm package source; no runtime inference",
4
+ "package": "@oh-my-pi/pi-tui",
5
+ "version": "18.11.3",
6
+ "path": "src/components/settings-list.ts",
7
+ "sha256": "2f947978cbeadb5d688f0db64ef78e1fba851a1c14f27575972e7df3e430112b",
8
+ "bytes": 42326,
9
+ "finding": "The split layout returns to flat rows when the editable pane has fewer than 60 columns; the sidebar is capped at 22 label columns plus four columns of indentation/gap."
10
+ },
11
+ {
12
+ "observationType": "direct static read of shipped npm package source; no runtime inference",
13
+ "package": "@oh-my-pi/pi-tui",
14
+ "version": "18.11.3",
15
+ "path": "src/theme/light.json",
16
+ "sha256": "e439bbc9a0903a94114eecf4a496838f4eedc9edeb3618557823463418aa8d8b",
17
+ "bytes": 2779,
18
+ "finding": "The shipped light palette supplies transcript and status colors; Harness adds only the Pi-specific fallback tokens absent upstream."
19
+ }
20
+ ]