humanish 0.0.1 → 0.15.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 (205) hide show
  1. package/AGENTS.md +77 -0
  2. package/CONTRIBUTING.md +39 -0
  3. package/LICENSE +21 -0
  4. package/README.md +437 -8
  5. package/SECURITY.md +34 -0
  6. package/dist/actor-contract.d.ts +107 -0
  7. package/dist/actor-contract.js +286 -0
  8. package/dist/actor-contract.js.map +1 -0
  9. package/dist/actor-registry.d.ts +73 -0
  10. package/dist/actor-registry.js +93 -0
  11. package/dist/actor-registry.js.map +1 -0
  12. package/dist/adapter-extension.d.ts +54 -0
  13. package/dist/adapter-extension.js +214 -0
  14. package/dist/adapter-extension.js.map +1 -0
  15. package/dist/argv.d.ts +1 -0
  16. package/dist/argv.js +8 -0
  17. package/dist/argv.js.map +1 -0
  18. package/dist/artifact-reference.d.ts +22 -0
  19. package/dist/artifact-reference.js +47 -0
  20. package/dist/artifact-reference.js.map +1 -0
  21. package/dist/browser-evidence-hygiene.d.ts +7 -0
  22. package/dist/browser-evidence-hygiene.js +40 -0
  23. package/dist/browser-evidence-hygiene.js.map +1 -0
  24. package/dist/claude-agent-sdk.d.ts +94 -0
  25. package/dist/claude-agent-sdk.js +363 -0
  26. package/dist/claude-agent-sdk.js.map +1 -0
  27. package/dist/cli.d.ts +2 -0
  28. package/dist/cli.js +5 -0
  29. package/dist/cli.js.map +1 -0
  30. package/dist/codex-app-server-ui.d.ts +39 -0
  31. package/dist/codex-app-server-ui.js +357 -0
  32. package/dist/codex-app-server-ui.js.map +1 -0
  33. package/dist/codex-app-server.d.ts +144 -0
  34. package/dist/codex-app-server.js +754 -0
  35. package/dist/codex-app-server.js.map +1 -0
  36. package/dist/command-failure.d.ts +29 -0
  37. package/dist/command-failure.js +54 -0
  38. package/dist/command-failure.js.map +1 -0
  39. package/dist/computer-use-actor.d.ts +52 -0
  40. package/dist/computer-use-actor.js +48 -0
  41. package/dist/computer-use-actor.js.map +1 -0
  42. package/dist/computer-use.d.ts +232 -0
  43. package/dist/computer-use.js +615 -0
  44. package/dist/computer-use.js.map +1 -0
  45. package/dist/concurrency.d.ts +1 -0
  46. package/dist/concurrency.js +27 -0
  47. package/dist/concurrency.js.map +1 -0
  48. package/dist/concurrent-shared-world-lab.d.ts +115 -0
  49. package/dist/concurrent-shared-world-lab.js +1094 -0
  50. package/dist/concurrent-shared-world-lab.js.map +1 -0
  51. package/dist/core/git-state.d.ts +33 -0
  52. package/dist/core/git-state.js +277 -0
  53. package/dist/core/git-state.js.map +1 -0
  54. package/dist/core/git-workspace.d.ts +31 -0
  55. package/dist/core/git-workspace.js +447 -0
  56. package/dist/core/git-workspace.js.map +1 -0
  57. package/dist/core/index.d.ts +4 -0
  58. package/dist/core/index.js +3 -0
  59. package/dist/core/index.js.map +1 -0
  60. package/dist/core/run-primitives.d.ts +66 -0
  61. package/dist/core/run-primitives.js +120 -0
  62. package/dist/core/run-primitives.js.map +1 -0
  63. package/dist/cua-actor-lab.d.ts +621 -0
  64. package/dist/cua-actor-lab.js +2845 -0
  65. package/dist/cua-actor-lab.js.map +1 -0
  66. package/dist/device-presets.d.ts +67 -0
  67. package/dist/device-presets.js +50 -0
  68. package/dist/device-presets.js.map +1 -0
  69. package/dist/e2b-desktop-executor.d.ts +101 -0
  70. package/dist/e2b-desktop-executor.js +309 -0
  71. package/dist/e2b-desktop-executor.js.map +1 -0
  72. package/dist/e2b-desktop-launch.d.ts +144 -0
  73. package/dist/e2b-desktop-launch.js +59 -0
  74. package/dist/e2b-desktop-launch.js.map +1 -0
  75. package/dist/e2b-detached.d.ts +53 -0
  76. package/dist/e2b-detached.js +130 -0
  77. package/dist/e2b-detached.js.map +1 -0
  78. package/dist/e2b-terminal-lab.d.ts +345 -0
  79. package/dist/e2b-terminal-lab.js +1532 -0
  80. package/dist/e2b-terminal-lab.js.map +1 -0
  81. package/dist/env-file.d.ts +14 -0
  82. package/dist/env-file.js +108 -0
  83. package/dist/env-file.js.map +1 -0
  84. package/dist/feedback.d.ts +51 -0
  85. package/dist/feedback.js +351 -0
  86. package/dist/feedback.js.map +1 -0
  87. package/dist/image-evidence.d.ts +2 -0
  88. package/dist/image-evidence.js +33 -0
  89. package/dist/image-evidence.js.map +1 -0
  90. package/dist/index.d.ts +63 -0
  91. package/dist/index.js +33 -0
  92. package/dist/index.js.map +1 -0
  93. package/dist/init-templates.d.ts +12 -0
  94. package/dist/init-templates.js +369 -0
  95. package/dist/init-templates.js.map +1 -0
  96. package/dist/init.d.ts +26 -0
  97. package/dist/init.js +429 -0
  98. package/dist/init.js.map +1 -0
  99. package/dist/lab-app-runner.d.ts +78 -0
  100. package/dist/lab-app-runner.js +403 -0
  101. package/dist/lab-app-runner.js.map +1 -0
  102. package/dist/lab-config.d.ts +583 -0
  103. package/dist/lab-config.js +1789 -0
  104. package/dist/lab-config.js.map +1 -0
  105. package/dist/lab-engine.d.ts +77 -0
  106. package/dist/lab-engine.js +216 -0
  107. package/dist/lab-engine.js.map +1 -0
  108. package/dist/lab-preflight.d.ts +67 -0
  109. package/dist/lab-preflight.js +385 -0
  110. package/dist/lab-preflight.js.map +1 -0
  111. package/dist/labs.d.ts +53 -0
  112. package/dist/labs.js +382 -0
  113. package/dist/labs.js.map +1 -0
  114. package/dist/observer-assets.d.ts +2 -0
  115. package/dist/observer-assets.js +2630 -0
  116. package/dist/observer-assets.js.map +1 -0
  117. package/dist/observer-data.d.ts +63 -0
  118. package/dist/observer-data.js +145 -0
  119. package/dist/observer-data.js.map +1 -0
  120. package/dist/observer-static.d.ts +39 -0
  121. package/dist/observer-static.js +306 -0
  122. package/dist/observer-static.js.map +1 -0
  123. package/dist/observer.d.ts +46 -0
  124. package/dist/observer.js +550 -0
  125. package/dist/observer.js.map +1 -0
  126. package/dist/openai-responses-cu.d.ts +113 -0
  127. package/dist/openai-responses-cu.js +545 -0
  128. package/dist/openai-responses-cu.js.map +1 -0
  129. package/dist/oss-lab.d.ts +52 -0
  130. package/dist/oss-lab.js +344 -0
  131. package/dist/oss-lab.js.map +1 -0
  132. package/dist/oss-meta-lab-scoring.d.ts +15 -0
  133. package/dist/oss-meta-lab-scoring.js +145 -0
  134. package/dist/oss-meta-lab-scoring.js.map +1 -0
  135. package/dist/oss-meta-lab.d.ts +277 -0
  136. package/dist/oss-meta-lab.js +4529 -0
  137. package/dist/oss-meta-lab.js.map +1 -0
  138. package/dist/oss-remote-telemetry.d.ts +77 -0
  139. package/dist/oss-remote-telemetry.js +403 -0
  140. package/dist/oss-remote-telemetry.js.map +1 -0
  141. package/dist/persona.d.ts +35 -0
  142. package/dist/persona.js +133 -0
  143. package/dist/persona.js.map +1 -0
  144. package/dist/pi-agent-core.d.ts +77 -0
  145. package/dist/pi-agent-core.js +203 -0
  146. package/dist/pi-agent-core.js.map +1 -0
  147. package/dist/program.d.ts +54 -0
  148. package/dist/program.js +2349 -0
  149. package/dist/program.js.map +1 -0
  150. package/dist/redaction.d.ts +90 -0
  151. package/dist/redaction.js +292 -0
  152. package/dist/redaction.js.map +1 -0
  153. package/dist/run-paths.d.ts +56 -0
  154. package/dist/run-paths.js +340 -0
  155. package/dist/run-paths.js.map +1 -0
  156. package/dist/run.d.ts +794 -0
  157. package/dist/run.js +4844 -0
  158. package/dist/run.js.map +1 -0
  159. package/dist/scripted-browser-actor.d.ts +297 -0
  160. package/dist/scripted-browser-actor.js +1399 -0
  161. package/dist/scripted-browser-actor.js.map +1 -0
  162. package/dist/scripted-browser-lab.d.ts +107 -0
  163. package/dist/scripted-browser-lab.js +788 -0
  164. package/dist/scripted-browser-lab.js.map +1 -0
  165. package/dist/selected-output-paths.d.ts +49 -0
  166. package/dist/selected-output-paths.js +354 -0
  167. package/dist/selected-output-paths.js.map +1 -0
  168. package/dist/shared-world-lab.d.ts +208 -0
  169. package/dist/shared-world-lab.js +1049 -0
  170. package/dist/shared-world-lab.js.map +1 -0
  171. package/dist/source-archive.d.ts +82 -0
  172. package/dist/source-archive.js +408 -0
  173. package/dist/source-archive.js.map +1 -0
  174. package/dist/stop-conditions.d.ts +26 -0
  175. package/dist/stop-conditions.js +66 -0
  176. package/dist/stop-conditions.js.map +1 -0
  177. package/dist/terminal-agent-actor.d.ts +36 -0
  178. package/dist/terminal-agent-actor.js +23 -0
  179. package/dist/terminal-agent-actor.js.map +1 -0
  180. package/docs/architecture/actor-contract.md +431 -0
  181. package/docs/architecture/github-feedback-loop.md +189 -0
  182. package/docs/architecture/local-codex-tui-actor.md +213 -0
  183. package/docs/architecture/observer.md +118 -0
  184. package/docs/architecture/oss-lab-poc.md +250 -0
  185. package/docs/architecture/project-layout.md +166 -0
  186. package/docs/architecture/state-driven-executor.md +203 -0
  187. package/docs/architecture/terminal-product-lane.md +148 -0
  188. package/docs/contracts/adapter-fixtures.md +80 -0
  189. package/docs/contracts/core.md +71 -0
  190. package/docs/contracts/feedback.md +145 -0
  191. package/docs/contracts/policy.md +311 -0
  192. package/docs/contracts/run-bundle.md +358 -0
  193. package/docs/contracts/schemas.md +984 -0
  194. package/docs/goals/current.md +428 -0
  195. package/docs/principles/invariants-and-defaults.md +135 -0
  196. package/docs/principles/self-driving-harness.md +129 -0
  197. package/docs/product/open-source-install-experience.md +237 -0
  198. package/docs/ramp/README.md +207 -0
  199. package/docs/release/open-source-readiness.md +208 -0
  200. package/docs/release/public-readiness-standard.md +205 -0
  201. package/docs/roadmap/world-class-open-source-v0.md +311 -0
  202. package/package.json +102 -8
  203. package/skills/humanish/SKILL.md +244 -0
  204. package/skills/humanish/agents/openai.yaml +7 -0
  205. package/index.js +0 -1
@@ -0,0 +1,403 @@
1
+ export const OSS_REMOTE_TELEMETRY_SCHEMA = "humanish.oss-remote-telemetry.v1";
2
+ const REDACTED_URL_PARAM = "[redacted-url-param]";
3
+ const DEFAULT_COMPLETION_CHECKED_AT = "1970-01-01T00:00:00.000Z";
4
+ const secretPatterns = [
5
+ {
6
+ name: "openai-token",
7
+ pattern: /\bsk-(?:proj-)?[A-Za-z0-9_-]{20,}\b/g,
8
+ replacement: "[redacted-openai-key]"
9
+ },
10
+ {
11
+ name: "github-token",
12
+ pattern: /\b(?:gh[pousr]_[A-Za-z0-9_]{12,}|github_pat_[A-Za-z0-9_]{12,})\b/g,
13
+ replacement: "[redacted-github-token]"
14
+ },
15
+ {
16
+ name: "e2b-token",
17
+ pattern: /\be2b_[A-Za-z0-9_-]{12,}\b/g,
18
+ replacement: "[redacted-e2b-key]"
19
+ },
20
+ {
21
+ name: "bearer-token",
22
+ pattern: /\bBearer\s+[A-Za-z0-9._~+/=-]{12,}\b/gi,
23
+ replacement: "Bearer [redacted-token]"
24
+ },
25
+ {
26
+ name: "remote-home-path",
27
+ pattern: /\/home\/(?:user|runner)\/[^\s"']+/gi,
28
+ replacement: "[redacted-remote-path]"
29
+ },
30
+ {
31
+ name: "remote-tmp-path",
32
+ pattern: /\/tmp\/[^\s"']+/gi,
33
+ replacement: "[redacted-remote-path]"
34
+ }
35
+ ];
36
+ export function buildOssRemoteTelemetry(input) {
37
+ const checkedAt = input.checkedAt ?? new Date().toISOString();
38
+ const redactedFields = new Set();
39
+ const sanitizeField = (field, value) => {
40
+ const sanitized = redactOssRemoteTelemetryText(value);
41
+ if (sanitized !== value) {
42
+ redactedFields.add(field);
43
+ }
44
+ return sanitized;
45
+ };
46
+ const sanitizeUrlField = (field, value) => {
47
+ const sanitized = sanitizeOssRemoteTelemetryUrl(value);
48
+ if (sanitized !== value) {
49
+ redactedFields.add(field);
50
+ }
51
+ return sanitized;
52
+ };
53
+ const fallbackLogTail = sanitizeField("logTail", input.logTail ?? "");
54
+ const completion = parseOssRemoteCompletion(input.completionJson ?? null, {
55
+ checkedAt,
56
+ fallbackLogTail
57
+ });
58
+ const processText = sanitizeField("processStateText", input.processStateText ?? "");
59
+ const process = {
60
+ state: classifyOssRemoteProcessState(processText),
61
+ summary: summarizeProcessState(processText),
62
+ text: processText
63
+ };
64
+ const appStatusText = sanitizeField("appStatusText", input.appStatusText ?? "");
65
+ const appUrl = normalizeOptionalText(input.appUrl);
66
+ const sanitizedAppUrl = appUrl ? sanitizeUrlField("appUrl", appUrl) : undefined;
67
+ const app = {
68
+ status: classifyOssRemoteAppStatus({
69
+ statusText: appStatusText,
70
+ ...(sanitizedAppUrl ? { url: sanitizedAppUrl } : {})
71
+ }),
72
+ statusText: appStatusText,
73
+ ...(sanitizedAppUrl ? { url: sanitizedAppUrl } : {})
74
+ };
75
+ const streamUrl = normalizeOptionalText(input.streamUrl);
76
+ const sanitizedStreamUrl = streamUrl ? sanitizeUrlField("streamUrl", streamUrl) : undefined;
77
+ const stream = {
78
+ present: Boolean(sanitizedStreamUrl),
79
+ ...(sanitizedStreamUrl ? { url: sanitizedStreamUrl } : {})
80
+ };
81
+ const nestedObserverPath = normalizeOptionalText(input.nestedObserverPath);
82
+ const sanitizedNestedObserverPath = nestedObserverPath
83
+ ? sanitizeField("nestedObserverPath", nestedObserverPath)
84
+ : undefined;
85
+ const nestedObserverPresent = input.nestedObserverPresent ?? completion.nestedObserverPresent;
86
+ const nestedObserver = {
87
+ presence: nestedObserverPresent === true
88
+ ? "present"
89
+ : nestedObserverPresent === false ? "missing" : "unknown",
90
+ ...(sanitizedNestedObserverPath ? { path: sanitizedNestedObserverPath } : {})
91
+ };
92
+ const actorText = sanitizeField("actorStateText", input.actorStateText ?? "");
93
+ const actorState = classifyOssRemoteActorState(actorText, process.state, completion.status);
94
+ const actor = {
95
+ state: actorState,
96
+ summary: summarizeActorState(actorState, actorText),
97
+ text: actorText
98
+ };
99
+ const status = resolveLaneStatus(completion.status, process.state, app.status, actor.state);
100
+ return {
101
+ schema: OSS_REMOTE_TELEMETRY_SCHEMA,
102
+ checkedAt,
103
+ status,
104
+ completion,
105
+ process,
106
+ app,
107
+ stream,
108
+ nestedObserver,
109
+ actor,
110
+ redaction: {
111
+ status: "passed",
112
+ redacted: redactedFields.size > 0,
113
+ fields: [...redactedFields].sort(),
114
+ notes: redactedFields.size > 0
115
+ ? "Remote bootstrap evidence was sanitized before telemetry modeling."
116
+ : "Remote bootstrap evidence contained no recognized token or auth URL patterns."
117
+ }
118
+ };
119
+ }
120
+ export function parseOssRemoteCompletion(payload, options = {}) {
121
+ const checkedAt = options.checkedAt ?? DEFAULT_COMPLETION_CHECKED_AT;
122
+ const parsed = parseCompletionPayload(payload);
123
+ if (!parsed) {
124
+ return {
125
+ checkedAt,
126
+ present: false,
127
+ ...(options.fallbackLogTail ? { logTail: tailLines(options.fallbackLogTail, 80) } : {}),
128
+ reason: "Remote bootstrap completion marker is missing.",
129
+ status: "missing"
130
+ };
131
+ }
132
+ const status = normalizeOssRemoteCompletionStatus(parsed.status);
133
+ if (!status) {
134
+ return {
135
+ checkedAt,
136
+ present: false,
137
+ ...(options.fallbackLogTail ? { logTail: tailLines(options.fallbackLogTail, 80) } : {}),
138
+ reason: "Remote bootstrap completion marker is missing a recognized status.",
139
+ status: "missing"
140
+ };
141
+ }
142
+ const nestedVerifyPassed = normalizeNestedVerifyPassed(parsed);
143
+ const logTail = typeof parsed.logTail === "string"
144
+ ? tailLines(redactOssRemoteTelemetryText(parsed.logTail), 80)
145
+ : options.fallbackLogTail ? tailLines(options.fallbackLogTail, 80) : undefined;
146
+ return {
147
+ checkedAt: typeof parsed.completedAt === "string" && parsed.completedAt.trim()
148
+ ? redactOssRemoteTelemetryText(parsed.completedAt).trim()
149
+ : checkedAt,
150
+ present: true,
151
+ reason: completionReason(parsed.reason, status),
152
+ status,
153
+ ...(typeof parsed.exitCode === "number" && Number.isFinite(parsed.exitCode) ? { exitCode: parsed.exitCode } : {}),
154
+ ...(logTail ? { logTail } : {}),
155
+ ...(typeof parsed.nestedObserverPresent === "boolean" ? { nestedObserverPresent: parsed.nestedObserverPresent } : {}),
156
+ ...(nestedVerifyPassed === undefined ? {} : { nestedVerifyPassed })
157
+ };
158
+ }
159
+ export function normalizeOssRemoteCompletionStatus(value) {
160
+ return value === "running"
161
+ || value === "passed"
162
+ || value === "failed"
163
+ || value === "blocked"
164
+ || value === "timed_out"
165
+ ? value
166
+ : null;
167
+ }
168
+ export function classifyOssRemoteProcessState(text) {
169
+ const normalized = text.trim();
170
+ if (!normalized) {
171
+ return "unknown";
172
+ }
173
+ if (/\bsuspended\b|\bstopped\b|\bsigtstp\b|\bsigstop\b/i.test(normalized)
174
+ || /\bstate\s*[:=]\s*t\b/i.test(normalized)
175
+ || /\bstat(?:e)?\s*[:=]?\s*[^\n]*\bT\+?\b/.test(normalized)
176
+ || /(?:^|\n)\s*\d+\s+T\+?\s+\S+/.test(normalized)
177
+ || /\bT\+?\s+(?:\d|pts\/|tty)/.test(normalized)) {
178
+ return "suspended";
179
+ }
180
+ if (/\b(?:exited|exit code|terminated|defunct|zombie|not running|no process|dead)\b/i.test(normalized)) {
181
+ return "exited";
182
+ }
183
+ if (/\b(?:running|listening|ready|started|pid\s*[=:]?\s*\d+)\b/i.test(normalized)
184
+ || /\bstate\s*[:=]\s*[rs]\b/i.test(normalized)
185
+ || /\bstat(?:e)?\s*[:=]?\s*[^\n]*\b[RS]\+?\b/.test(normalized)) {
186
+ return "running";
187
+ }
188
+ return "unknown";
189
+ }
190
+ export function classifyOssRemoteAppStatus(input) {
191
+ const statusText = input.statusText?.trim() ?? "";
192
+ if (!statusText && !input.url) {
193
+ return "missing";
194
+ }
195
+ if (/\b(?:200|204|ok|healthy|ready|running|listening|started|serving|vite ready|compiled successfully)\b/i.test(statusText)) {
196
+ return "running";
197
+ }
198
+ if (/\b(?:connection refused|eaddrinuse|failed|stopped|not running|timeout|timed out|cannot connect|no server)\b/i.test(statusText)) {
199
+ return "stopped";
200
+ }
201
+ return input.url ? "unknown" : "missing";
202
+ }
203
+ export function classifyOssRemoteActorState(actorStateText, processState = "unknown", completionStatus = "missing") {
204
+ const normalized = actorStateText.trim();
205
+ if (/\bsuspended\b|\bstopped\b|\bsigtstp\b|\bsigstop\b/i.test(normalized) || processState === "suspended") {
206
+ return "suspended";
207
+ }
208
+ if (/\btimed[ _-]?out\b|\btimeout\b/i.test(normalized) || completionStatus === "timed_out") {
209
+ return "timed_out";
210
+ }
211
+ if (/\bblocked\b/i.test(normalized) || completionStatus === "blocked") {
212
+ return "blocked";
213
+ }
214
+ if (/\b(?:failed|failure|exit code [1-9]\d*)\b/i.test(normalized) || completionStatus === "failed") {
215
+ return "failed";
216
+ }
217
+ if (/\b(?:passed|success|complete|completed)\b/i.test(normalized) || completionStatus === "passed") {
218
+ return "passed";
219
+ }
220
+ if (/\b(?:running|watching|active|spawned|pid\s*[=:]?\s*\d+)\b/i.test(normalized)
221
+ || processState === "running"
222
+ || completionStatus === "running") {
223
+ return "running";
224
+ }
225
+ return "unknown";
226
+ }
227
+ export function redactOssRemoteTelemetryText(value) {
228
+ const withoutUrlSecrets = replaceUrls(value, sanitizeOssRemoteTelemetryUrl);
229
+ return applySecretPatterns(withoutUrlSecrets);
230
+ }
231
+ export function sanitizeOssRemoteTelemetryUrl(value) {
232
+ return redactAuthQueryParams(applySecretPatterns(value));
233
+ }
234
+ function parseCompletionPayload(payload) {
235
+ if (!payload) {
236
+ return null;
237
+ }
238
+ if (typeof payload !== "string") {
239
+ return payload;
240
+ }
241
+ if (!payload.trim()) {
242
+ return null;
243
+ }
244
+ try {
245
+ const parsed = JSON.parse(payload);
246
+ return isRecord(parsed) ? parsed : null;
247
+ }
248
+ catch {
249
+ return null;
250
+ }
251
+ }
252
+ function normalizeNestedVerifyPassed(parsed) {
253
+ if (typeof parsed.nestedVerifyPassed === "boolean") {
254
+ return parsed.nestedVerifyPassed;
255
+ }
256
+ if (parsed.nestedVerifyStatus === "passed") {
257
+ return true;
258
+ }
259
+ if (parsed.nestedVerifyStatus === "failed") {
260
+ return false;
261
+ }
262
+ return undefined;
263
+ }
264
+ function completionReason(reason, status) {
265
+ if (typeof reason === "string" && reason.trim()) {
266
+ return compactReason(redactOssRemoteTelemetryText(reason));
267
+ }
268
+ switch (status) {
269
+ case "passed":
270
+ return "Remote bootstrap completed successfully.";
271
+ case "failed":
272
+ return "Remote bootstrap failed.";
273
+ case "blocked":
274
+ return "Remote bootstrap is blocked.";
275
+ case "timed_out":
276
+ return "Remote bootstrap completion timed out.";
277
+ case "running":
278
+ return "Remote bootstrap is still running.";
279
+ }
280
+ }
281
+ function resolveLaneStatus(completionStatus, processState, appStatus, actorState) {
282
+ if (completionStatus === "passed"
283
+ || completionStatus === "failed"
284
+ || completionStatus === "blocked"
285
+ || completionStatus === "timed_out"
286
+ || completionStatus === "running") {
287
+ return completionStatus;
288
+ }
289
+ if (actorState === "failed" || actorState === "blocked" || actorState === "timed_out" || actorState === "passed") {
290
+ return actorState;
291
+ }
292
+ if (actorState === "suspended" || processState === "suspended") {
293
+ return "blocked";
294
+ }
295
+ if (actorState === "running" || processState === "running" || appStatus === "running") {
296
+ return "running";
297
+ }
298
+ return "missing";
299
+ }
300
+ function summarizeProcessState(text) {
301
+ const state = classifyOssRemoteProcessState(text);
302
+ switch (state) {
303
+ case "running":
304
+ return "Remote process state indicates the bootstrap or actor is still running.";
305
+ case "suspended":
306
+ return "Remote process state indicates the actor is suspended or stopped.";
307
+ case "exited":
308
+ return "Remote process state indicates the bootstrap or actor exited.";
309
+ case "unknown":
310
+ return text.trim()
311
+ ? "Remote process state was captured but could not be classified."
312
+ : "No remote process state captured.";
313
+ }
314
+ }
315
+ function summarizeActorState(state, text) {
316
+ switch (state) {
317
+ case "running":
318
+ return "Actor state indicates work is still running.";
319
+ case "suspended":
320
+ return "Actor state indicates the process is suspended or stopped.";
321
+ case "passed":
322
+ return "Actor state indicates successful completion.";
323
+ case "failed":
324
+ return "Actor state indicates failure.";
325
+ case "blocked":
326
+ return "Actor state indicates a blocker.";
327
+ case "timed_out":
328
+ return "Actor state indicates timeout.";
329
+ case "unknown":
330
+ return text.trim()
331
+ ? "Actor state was captured but could not be classified."
332
+ : "No actor state captured.";
333
+ }
334
+ }
335
+ function compactReason(value) {
336
+ return value.replace(/\s+/g, " ").trim().slice(0, 240);
337
+ }
338
+ function tailLines(value, limit) {
339
+ return value.split(/\r?\n/).slice(-limit).join("\n").trim();
340
+ }
341
+ function normalizeOptionalText(value) {
342
+ const normalized = value?.trim();
343
+ return normalized ? normalized : undefined;
344
+ }
345
+ function applySecretPatterns(value) {
346
+ return secretPatterns.reduce((current, entry) => current.replace(entry.pattern, entry.replacement), value);
347
+ }
348
+ function replaceUrls(value, replacer) {
349
+ return value.replace(/\bhttps?:\/\/[^\s"'<>]+/gi, (candidate) => {
350
+ const trailing = candidate.match(/[),.;\]]+$/)?.[0] ?? "";
351
+ const body = trailing ? candidate.slice(0, -trailing.length) : candidate;
352
+ return `${replacer(body)}${trailing}`;
353
+ });
354
+ }
355
+ function redactAuthQueryParams(value) {
356
+ const queryStart = value.indexOf("?");
357
+ if (queryStart === -1) {
358
+ return value;
359
+ }
360
+ const hashStart = value.indexOf("#", queryStart);
361
+ const queryEnd = hashStart === -1 ? value.length : hashStart;
362
+ const query = value.slice(queryStart + 1, queryEnd);
363
+ const sanitizedQuery = query.split("&").map((part) => {
364
+ if (!part) {
365
+ return part;
366
+ }
367
+ const equalsIndex = part.indexOf("=");
368
+ const key = equalsIndex === -1 ? part : part.slice(0, equalsIndex);
369
+ if (!isAuthLikeQueryKey(key)) {
370
+ return part;
371
+ }
372
+ return equalsIndex === -1 ? key : `${key}=${REDACTED_URL_PARAM}`;
373
+ }).join("&");
374
+ return `${value.slice(0, queryStart + 1)}${sanitizedQuery}${value.slice(queryEnd)}`;
375
+ }
376
+ function isAuthLikeQueryKey(value) {
377
+ const normalized = safeDecodeURIComponent(value).replace(/[^a-z0-9]/gi, "").toLowerCase();
378
+ return normalized.includes("token")
379
+ || normalized.includes("secret")
380
+ || normalized.includes("password")
381
+ || normalized.includes("credential")
382
+ || normalized.includes("auth")
383
+ || normalized.includes("apikey")
384
+ || normalized.includes("signature")
385
+ || normalized.includes("bearer")
386
+ || normalized.includes("jwt")
387
+ || normalized.includes("session")
388
+ || normalized === "key"
389
+ || normalized.endsWith("key")
390
+ || normalized === "sig";
391
+ }
392
+ function safeDecodeURIComponent(value) {
393
+ try {
394
+ return decodeURIComponent(value);
395
+ }
396
+ catch {
397
+ return value;
398
+ }
399
+ }
400
+ function isRecord(value) {
401
+ return typeof value === "object" && value !== null && !Array.isArray(value);
402
+ }
403
+ //# sourceMappingURL=oss-remote-telemetry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oss-remote-telemetry.js","sourceRoot":"","sources":["../src/oss-remote-telemetry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ export type PersonaLevel = "low" | "medium" | "high";
2
+ export interface ResolvedPersona {
3
+ id: string;
4
+ name: string;
5
+ summary?: string;
6
+ traits: {
7
+ patience: PersonaLevel;
8
+ skill: PersonaLevel;
9
+ accessibilityNeeds?: string;
10
+ };
11
+ constraints: string[];
12
+ }
13
+ export interface PersonaDirectives {
14
+ frictionTolerance: string;
15
+ skillBias: string;
16
+ accessibilityBehavior?: string;
17
+ constraints: string[];
18
+ traitsApplied: string[];
19
+ }
20
+ /**
21
+ * Parse a YAML-parsed persona object into a normalized ResolvedPersona. `fallback`
22
+ * supplies id/name when the document omits them (or is not a record at all).
23
+ */
24
+ export declare function parseResolvedPersona(raw: unknown, fallback: {
25
+ id: string;
26
+ name: string;
27
+ }): ResolvedPersona;
28
+ export declare function personaToDirectives(persona: ResolvedPersona): PersonaDirectives;
29
+ /**
30
+ * Render the persona section injected into an actor prompt. Replaces the bare
31
+ * `Persona: <name>.` line so the persona's friction tolerance, skill, and
32
+ * accessibility behavior actually shape the run. Returns a single space-joined
33
+ * string to match the existing prompt-builder style.
34
+ */
35
+ export declare function renderPersonaPromptSection(persona: ResolvedPersona): string;
@@ -0,0 +1,133 @@
1
+ // Compiles a committed persona (humanish/personas/*.yaml) into actor-neutral
2
+ // behavioral directives so persona traits actually drive how the actor uses the
3
+ // product, instead of being inert metadata. See docs/architecture/actor-contract.md.
4
+ //
5
+ // Patience is modeled as FRICTION TOLERANCE, never a turn/tool-call budget: the
6
+ // directive tells the actor when, in character, to stop and report the friction.
7
+ const LEVELS = ["low", "medium", "high"];
8
+ function normalizeLevel(value, fallback = "medium") {
9
+ if (typeof value === "string") {
10
+ const lowered = value.trim().toLowerCase();
11
+ if (LEVELS.includes(lowered)) {
12
+ return lowered;
13
+ }
14
+ }
15
+ return fallback;
16
+ }
17
+ // Persona files are committed public-safe source, but they still flow into an
18
+ // actor prompt, so replace control characters with spaces and cap length to
19
+ // limit prompt-injection surface from a hand-authored persona.
20
+ function stripControlChars(value) {
21
+ let out = "";
22
+ for (const ch of value) {
23
+ const code = ch.codePointAt(0) ?? 0;
24
+ out += code < 0x20 || code === 0x7f ? " " : ch;
25
+ }
26
+ return out;
27
+ }
28
+ function sanitizePersonaText(value, maxLength) {
29
+ if (typeof value !== "string") {
30
+ return undefined;
31
+ }
32
+ const cleaned = stripControlChars(value)
33
+ // Neutralize the actor verdict/nonce markers so persona text injected into a
34
+ // prompt cannot forge a verdict line an actor might echo back.
35
+ .replace(/HUMANISH_ACTOR_(?:VERDICT|NONCE)/gi, "HUMANISH_ACTOR_[neutralized]")
36
+ .replace(/\s+/g, " ")
37
+ .trim();
38
+ if (cleaned.length === 0) {
39
+ return undefined;
40
+ }
41
+ return cleaned.length > maxLength ? `${cleaned.slice(0, maxLength - 1)}…` : cleaned;
42
+ }
43
+ function isRecord(value) {
44
+ return typeof value === "object" && value !== null && !Array.isArray(value);
45
+ }
46
+ /**
47
+ * Parse a YAML-parsed persona object into a normalized ResolvedPersona. `fallback`
48
+ * supplies id/name when the document omits them (or is not a record at all).
49
+ */
50
+ export function parseResolvedPersona(raw, fallback) {
51
+ const record = isRecord(raw) ? raw : {};
52
+ const traits = isRecord(record.traits) ? record.traits : {};
53
+ const id = sanitizePersonaText(record.id, 120) ?? fallback.id;
54
+ const name = sanitizePersonaText(record.name, 120) ?? fallback.name;
55
+ const summary = sanitizePersonaText(record.summary, 280);
56
+ const accessibilityNeeds = sanitizePersonaText(traits.accessibility_needs, 80);
57
+ const constraints = Array.isArray(record.constraints)
58
+ ? record.constraints
59
+ .map((entry) => sanitizePersonaText(entry, 160))
60
+ .filter((entry) => entry !== undefined)
61
+ .slice(0, 8)
62
+ : [];
63
+ return {
64
+ id,
65
+ name,
66
+ ...(summary === undefined ? {} : { summary }),
67
+ traits: {
68
+ patience: normalizeLevel(traits.patience),
69
+ // Persona YAML uses `technical_confidence`; the directive model calls it skill.
70
+ skill: normalizeLevel(traits.technical_confidence),
71
+ ...(accessibilityNeeds === undefined ? {} : { accessibilityNeeds })
72
+ },
73
+ constraints
74
+ };
75
+ }
76
+ const FRICTION_TOLERANCE = {
77
+ low: "You are impatient: if you hit repeated friction (errors, dead-ends, confusing UI) or stop making progress toward your goal, stop and report exactly what blocked you instead of pushing through.",
78
+ medium: "You have moderate patience: work through some friction, but if you repeatedly fail to make progress toward your goal, stop and report what blocked you.",
79
+ high: "You are determined: push through friction and try recovery paths, but if you reach an unrecoverable dead-end, stop and report it."
80
+ };
81
+ const SKILL_BIAS = {
82
+ low: "You are not technically confident: prefer obvious UI affordances over CLI flags or config, and narrate your confusion whenever the interface is ambiguous.",
83
+ medium: "You have moderate technical confidence: use straightforward paths and try one recovery step before giving up.",
84
+ high: "You are technically confident: use keyboard shortcuts, inspect configuration, and try the recovery paths an expert would."
85
+ };
86
+ function accessibilityBehavior(needs) {
87
+ const lowered = needs.toLowerCase();
88
+ if (lowered.includes("keyboard")) {
89
+ return "Navigate using the keyboard; treat a control that requires a mouse and offers no keyboard path as a defect and report it.";
90
+ }
91
+ if (lowered.includes("terminal") || lowered.includes("output")) {
92
+ return "You rely on clear terminal output; flag noisy, unreadable, or ambiguous output as a defect.";
93
+ }
94
+ return `You have the accessibility need "${needs}"; treat violations of it as defects and report them.`;
95
+ }
96
+ export function personaToDirectives(persona) {
97
+ const traitsApplied = [`patience:${persona.traits.patience}`, `skill:${persona.traits.skill}`];
98
+ const accessibility = persona.traits.accessibilityNeeds
99
+ ? accessibilityBehavior(persona.traits.accessibilityNeeds)
100
+ : undefined;
101
+ if (persona.traits.accessibilityNeeds) {
102
+ traitsApplied.push(`accessibility:${persona.traits.accessibilityNeeds}`);
103
+ }
104
+ if (persona.constraints.length > 0) {
105
+ traitsApplied.push(`constraints:${persona.constraints.length}`);
106
+ }
107
+ return {
108
+ frictionTolerance: FRICTION_TOLERANCE[persona.traits.patience],
109
+ skillBias: SKILL_BIAS[persona.traits.skill],
110
+ ...(accessibility === undefined ? {} : { accessibilityBehavior: accessibility }),
111
+ constraints: persona.constraints,
112
+ traitsApplied
113
+ };
114
+ }
115
+ /**
116
+ * Render the persona section injected into an actor prompt. Replaces the bare
117
+ * `Persona: <name>.` line so the persona's friction tolerance, skill, and
118
+ * accessibility behavior actually shape the run. Returns a single space-joined
119
+ * string to match the existing prompt-builder style.
120
+ */
121
+ export function renderPersonaPromptSection(persona) {
122
+ const directives = personaToDirectives(persona);
123
+ const parts = [
124
+ `Persona: ${persona.name}.`,
125
+ ...(persona.summary ? [persona.summary] : []),
126
+ directives.frictionTolerance,
127
+ directives.skillBias,
128
+ ...(directives.accessibilityBehavior ? [directives.accessibilityBehavior] : []),
129
+ ...(directives.constraints.length > 0 ? [`Honor these constraints: ${directives.constraints.join("; ")}.`] : [])
130
+ ];
131
+ return parts.join(" ");
132
+ }
133
+ //# sourceMappingURL=persona.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"persona.js","sourceRoot":"","sources":["../src/persona.ts"],"names":[],"mappings":"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"}