humanish 0.0.1 → 0.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (196) hide show
  1. package/AGENTS.md +77 -0
  2. package/CONTRIBUTING.md +39 -0
  3. package/LICENSE +21 -0
  4. package/README.md +435 -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 +356 -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 +327 -0
  32. package/dist/codex-app-server-ui.js.map +1 -0
  33. package/dist/codex-app-server.d.ts +141 -0
  34. package/dist/codex-app-server.js +747 -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 +1092 -0
  50. package/dist/concurrent-shared-world-lab.js.map +1 -0
  51. package/dist/core/git-state.d.ts +31 -0
  52. package/dist/core/git-state.js +142 -0
  53. package/dist/core/git-state.js.map +1 -0
  54. package/dist/core/index.d.ts +4 -0
  55. package/dist/core/index.js +3 -0
  56. package/dist/core/index.js.map +1 -0
  57. package/dist/core/run-primitives.d.ts +66 -0
  58. package/dist/core/run-primitives.js +120 -0
  59. package/dist/core/run-primitives.js.map +1 -0
  60. package/dist/cua-actor-lab.d.ts +620 -0
  61. package/dist/cua-actor-lab.js +2834 -0
  62. package/dist/cua-actor-lab.js.map +1 -0
  63. package/dist/device-presets.d.ts +67 -0
  64. package/dist/device-presets.js +50 -0
  65. package/dist/device-presets.js.map +1 -0
  66. package/dist/e2b-desktop-executor.d.ts +101 -0
  67. package/dist/e2b-desktop-executor.js +309 -0
  68. package/dist/e2b-desktop-executor.js.map +1 -0
  69. package/dist/e2b-desktop-launch.d.ts +144 -0
  70. package/dist/e2b-desktop-launch.js +59 -0
  71. package/dist/e2b-desktop-launch.js.map +1 -0
  72. package/dist/e2b-detached.d.ts +53 -0
  73. package/dist/e2b-detached.js +130 -0
  74. package/dist/e2b-detached.js.map +1 -0
  75. package/dist/e2b-terminal-lab.d.ts +345 -0
  76. package/dist/e2b-terminal-lab.js +1467 -0
  77. package/dist/e2b-terminal-lab.js.map +1 -0
  78. package/dist/env-file.d.ts +14 -0
  79. package/dist/env-file.js +108 -0
  80. package/dist/env-file.js.map +1 -0
  81. package/dist/feedback.d.ts +51 -0
  82. package/dist/feedback.js +313 -0
  83. package/dist/feedback.js.map +1 -0
  84. package/dist/image-evidence.d.ts +2 -0
  85. package/dist/image-evidence.js +33 -0
  86. package/dist/image-evidence.js.map +1 -0
  87. package/dist/index.d.ts +63 -0
  88. package/dist/index.js +33 -0
  89. package/dist/index.js.map +1 -0
  90. package/dist/init-templates.d.ts +12 -0
  91. package/dist/init-templates.js +369 -0
  92. package/dist/init-templates.js.map +1 -0
  93. package/dist/init.d.ts +26 -0
  94. package/dist/init.js +343 -0
  95. package/dist/init.js.map +1 -0
  96. package/dist/lab-app-runner.d.ts +78 -0
  97. package/dist/lab-app-runner.js +403 -0
  98. package/dist/lab-app-runner.js.map +1 -0
  99. package/dist/lab-config.d.ts +578 -0
  100. package/dist/lab-config.js +1751 -0
  101. package/dist/lab-config.js.map +1 -0
  102. package/dist/lab-engine.d.ts +77 -0
  103. package/dist/lab-engine.js +216 -0
  104. package/dist/lab-engine.js.map +1 -0
  105. package/dist/lab-preflight.d.ts +67 -0
  106. package/dist/lab-preflight.js +385 -0
  107. package/dist/lab-preflight.js.map +1 -0
  108. package/dist/labs.d.ts +53 -0
  109. package/dist/labs.js +176 -0
  110. package/dist/labs.js.map +1 -0
  111. package/dist/observer-assets.d.ts +2 -0
  112. package/dist/observer-assets.js +2630 -0
  113. package/dist/observer-assets.js.map +1 -0
  114. package/dist/observer-data.d.ts +63 -0
  115. package/dist/observer-data.js +145 -0
  116. package/dist/observer-data.js.map +1 -0
  117. package/dist/observer-static.d.ts +39 -0
  118. package/dist/observer-static.js +192 -0
  119. package/dist/observer-static.js.map +1 -0
  120. package/dist/observer.d.ts +46 -0
  121. package/dist/observer.js +353 -0
  122. package/dist/observer.js.map +1 -0
  123. package/dist/openai-responses-cu.d.ts +113 -0
  124. package/dist/openai-responses-cu.js +531 -0
  125. package/dist/openai-responses-cu.js.map +1 -0
  126. package/dist/oss-lab.d.ts +52 -0
  127. package/dist/oss-lab.js +299 -0
  128. package/dist/oss-lab.js.map +1 -0
  129. package/dist/oss-meta-lab-scoring.d.ts +15 -0
  130. package/dist/oss-meta-lab-scoring.js +145 -0
  131. package/dist/oss-meta-lab-scoring.js.map +1 -0
  132. package/dist/oss-meta-lab.d.ts +279 -0
  133. package/dist/oss-meta-lab.js +4889 -0
  134. package/dist/oss-meta-lab.js.map +1 -0
  135. package/dist/oss-remote-telemetry.d.ts +77 -0
  136. package/dist/oss-remote-telemetry.js +403 -0
  137. package/dist/oss-remote-telemetry.js.map +1 -0
  138. package/dist/persona.d.ts +35 -0
  139. package/dist/persona.js +133 -0
  140. package/dist/persona.js.map +1 -0
  141. package/dist/pi-agent-core.d.ts +77 -0
  142. package/dist/pi-agent-core.js +203 -0
  143. package/dist/pi-agent-core.js.map +1 -0
  144. package/dist/program.d.ts +54 -0
  145. package/dist/program.js +2347 -0
  146. package/dist/program.js.map +1 -0
  147. package/dist/redaction.d.ts +90 -0
  148. package/dist/redaction.js +292 -0
  149. package/dist/redaction.js.map +1 -0
  150. package/dist/run.d.ts +784 -0
  151. package/dist/run.js +4555 -0
  152. package/dist/run.js.map +1 -0
  153. package/dist/scripted-browser-actor.d.ts +294 -0
  154. package/dist/scripted-browser-actor.js +1286 -0
  155. package/dist/scripted-browser-actor.js.map +1 -0
  156. package/dist/scripted-browser-lab.d.ts +107 -0
  157. package/dist/scripted-browser-lab.js +738 -0
  158. package/dist/scripted-browser-lab.js.map +1 -0
  159. package/dist/shared-world-lab.d.ts +208 -0
  160. package/dist/shared-world-lab.js +1048 -0
  161. package/dist/shared-world-lab.js.map +1 -0
  162. package/dist/source-archive.d.ts +82 -0
  163. package/dist/source-archive.js +365 -0
  164. package/dist/source-archive.js.map +1 -0
  165. package/dist/stop-conditions.d.ts +26 -0
  166. package/dist/stop-conditions.js +66 -0
  167. package/dist/stop-conditions.js.map +1 -0
  168. package/dist/terminal-agent-actor.d.ts +36 -0
  169. package/dist/terminal-agent-actor.js +23 -0
  170. package/dist/terminal-agent-actor.js.map +1 -0
  171. package/docs/architecture/actor-contract.md +431 -0
  172. package/docs/architecture/github-feedback-loop.md +189 -0
  173. package/docs/architecture/local-codex-tui-actor.md +213 -0
  174. package/docs/architecture/observer.md +118 -0
  175. package/docs/architecture/oss-lab-poc.md +242 -0
  176. package/docs/architecture/project-layout.md +166 -0
  177. package/docs/architecture/state-driven-executor.md +203 -0
  178. package/docs/architecture/terminal-product-lane.md +148 -0
  179. package/docs/contracts/adapter-fixtures.md +80 -0
  180. package/docs/contracts/core.md +71 -0
  181. package/docs/contracts/feedback.md +145 -0
  182. package/docs/contracts/policy.md +305 -0
  183. package/docs/contracts/run-bundle.md +358 -0
  184. package/docs/contracts/schemas.md +984 -0
  185. package/docs/goals/current.md +409 -0
  186. package/docs/principles/invariants-and-defaults.md +135 -0
  187. package/docs/principles/self-driving-harness.md +129 -0
  188. package/docs/product/open-source-install-experience.md +229 -0
  189. package/docs/ramp/README.md +200 -0
  190. package/docs/release/open-source-readiness.md +208 -0
  191. package/docs/release/public-readiness-standard.md +205 -0
  192. package/docs/roadmap/world-class-open-source-v0.md +311 -0
  193. package/package.json +102 -8
  194. package/skills/humanish/SKILL.md +244 -0
  195. package/skills/humanish/agents/openai.yaml +7 -0
  196. package/index.js +0 -1
@@ -0,0 +1,77 @@
1
+ import { type ActorCompletionReason, type ActorPersonaRef, type ActorStatus, type ActorTrace } from "./actor-contract.js";
2
+ export type PiStopReason = "stop" | "toolUse" | "length" | "error" | "aborted";
3
+ export type PiAgentEvent = {
4
+ type: "agent_start";
5
+ } | {
6
+ type: "agent_end";
7
+ } | {
8
+ type: "turn_start";
9
+ } | {
10
+ type: "turn_end";
11
+ } | {
12
+ type: "message_start";
13
+ role?: string;
14
+ } | {
15
+ type: "message_update";
16
+ textDelta?: string;
17
+ thinkingDelta?: string;
18
+ } | {
19
+ type: "message_end";
20
+ text?: string;
21
+ thinking?: string;
22
+ } | {
23
+ type: "tool_execution_start";
24
+ toolCallId: string;
25
+ toolName: string;
26
+ } | {
27
+ type: "tool_execution_end";
28
+ toolCallId: string;
29
+ toolName?: string;
30
+ isError?: boolean;
31
+ } | {
32
+ type: "queue_update";
33
+ summary?: string;
34
+ } | {
35
+ type: "compaction_start";
36
+ } | {
37
+ type: "compaction_end";
38
+ } | {
39
+ type: "auto_retry_start";
40
+ } | {
41
+ type: "auto_retry_end";
42
+ } | {
43
+ type: "notice";
44
+ method?: string;
45
+ message?: string;
46
+ };
47
+ export interface PiSessionStats {
48
+ tokens?: {
49
+ input?: number;
50
+ output?: number;
51
+ total?: number;
52
+ cacheRead?: number;
53
+ cacheWrite?: number;
54
+ };
55
+ cost?: number;
56
+ }
57
+ export interface PiSessionResult {
58
+ events: PiAgentEvent[];
59
+ sessionId?: string;
60
+ model?: string;
61
+ providerVersion?: string;
62
+ startedAt: string;
63
+ completedAt: string;
64
+ durationMs: number;
65
+ status: ActorStatus;
66
+ reason: string;
67
+ stats?: PiSessionStats;
68
+ }
69
+ export declare function piStopReasonToStatus(stop: PiStopReason): ActorStatus;
70
+ export declare function piStatusToCompletionReason(status: ActorStatus): ActorCompletionReason;
71
+ /**
72
+ * Map a pi-agent-core session into the provider-neutral ActorTrace. Pure and
73
+ * side-effect-free; mirrors codexResultToActorTrace. The persona reference is
74
+ * supplied by the harness. Used by the actorRegistry to prove the contract is
75
+ * provider-neutral ahead of the live SDK shim.
76
+ */
77
+ export declare function piSessionToActorTrace(session: PiSessionResult, persona: ActorPersonaRef): ActorTrace;
@@ -0,0 +1,203 @@
1
+ import { ACTOR_TRACE_SCHEMA, PI_AGENT_CORE_CAPABILITIES } from "./actor-contract.js";
2
+ import { redactText } from "./redaction.js";
3
+ export function piStopReasonToStatus(stop) {
4
+ switch (stop) {
5
+ case "stop":
6
+ case "toolUse":
7
+ return "passed";
8
+ case "length":
9
+ return "timed_out";
10
+ case "aborted":
11
+ return "blocked";
12
+ case "error":
13
+ return "failed";
14
+ }
15
+ }
16
+ export function piStatusToCompletionReason(status) {
17
+ switch (status) {
18
+ case "passed":
19
+ return "turn_completed";
20
+ case "timed_out":
21
+ return "timed_out";
22
+ case "blocked":
23
+ return "blocked_approval";
24
+ case "failed":
25
+ return "actor_error";
26
+ }
27
+ }
28
+ function pickPiTokenUsage(stats) {
29
+ if (!stats) {
30
+ return undefined;
31
+ }
32
+ const num = (value) => typeof value === "number" && Number.isFinite(value) ? value : undefined;
33
+ const input = num(stats.tokens?.input);
34
+ const output = num(stats.tokens?.output);
35
+ const total = num(stats.tokens?.total);
36
+ const costUsd = num(stats.cost);
37
+ const usage = {
38
+ ...(input === undefined ? {} : { input }),
39
+ ...(output === undefined ? {} : { output }),
40
+ ...(total === undefined ? {} : { total }),
41
+ ...(costUsd === undefined ? {} : { costUsd })
42
+ };
43
+ return Object.keys(usage).length > 0 ? usage : undefined;
44
+ }
45
+ // Project the pi event stream into provider-neutral ActorTraceItems. pi has no
46
+ // native file_change / screenshot / ui_action / approval events today, so none
47
+ // are fabricated (intentional, not incomplete). Bash runs surface as tool_call,
48
+ // not command, until the live shim can inspect tool results.
49
+ function piEventsToActorItems(events) {
50
+ const items = [];
51
+ const toolNames = new Map();
52
+ let messageOrdinal = 0;
53
+ let noticeOrdinal = 0;
54
+ let textBuffer = "";
55
+ let thinkingBuffer = "";
56
+ const flushMessage = (endText, endThinking) => {
57
+ const text = (endText ?? textBuffer).trim();
58
+ const thinking = (endThinking ?? thinkingBuffer).trim();
59
+ messageOrdinal += 1;
60
+ if (thinking.length > 0) {
61
+ items.push({
62
+ id: `reasoning-${messageOrdinal}`,
63
+ kind: "reasoning",
64
+ lifecycle: "completed",
65
+ title: "Reasoning",
66
+ text: redactText(thinking)
67
+ });
68
+ }
69
+ items.push({
70
+ id: `message-${messageOrdinal}`,
71
+ kind: "message",
72
+ lifecycle: "completed",
73
+ title: "Assistant message",
74
+ ...(text.length > 0 ? { text: redactText(text) } : {})
75
+ });
76
+ textBuffer = "";
77
+ thinkingBuffer = "";
78
+ };
79
+ for (const event of events) {
80
+ switch (event.type) {
81
+ case "message_start":
82
+ items.push({ id: `message-start-${messageOrdinal + 1}`, kind: "message", lifecycle: "started", title: "Assistant message" });
83
+ break;
84
+ case "message_update":
85
+ if (event.textDelta) {
86
+ textBuffer += event.textDelta;
87
+ }
88
+ if (event.thinkingDelta) {
89
+ thinkingBuffer += event.thinkingDelta;
90
+ }
91
+ break;
92
+ case "message_end":
93
+ flushMessage(event.text, event.thinking);
94
+ break;
95
+ case "tool_execution_start": {
96
+ toolNames.set(event.toolCallId, event.toolName);
97
+ const name = redactText(event.toolName);
98
+ items.push({
99
+ id: event.toolCallId,
100
+ kind: "tool_call",
101
+ lifecycle: "started",
102
+ title: name,
103
+ tool: { name }
104
+ });
105
+ break;
106
+ }
107
+ case "tool_execution_end": {
108
+ const name = redactText(event.toolName ?? toolNames.get(event.toolCallId) ?? "tool");
109
+ items.push({
110
+ id: `${event.toolCallId}-end`,
111
+ kind: "tool_call",
112
+ lifecycle: "completed",
113
+ ...(event.isError ? { status: "error" } : {}),
114
+ title: name,
115
+ tool: { name }
116
+ });
117
+ break;
118
+ }
119
+ case "queue_update":
120
+ noticeOrdinal += 1;
121
+ items.push({
122
+ id: `plan-${noticeOrdinal}`,
123
+ kind: "plan",
124
+ lifecycle: "completed",
125
+ title: "Queue update",
126
+ ...(event.summary ? { text: redactText(event.summary) } : {})
127
+ });
128
+ break;
129
+ case "compaction_start":
130
+ case "compaction_end":
131
+ case "auto_retry_start":
132
+ case "auto_retry_end":
133
+ noticeOrdinal += 1;
134
+ items.push({
135
+ id: `notice-${noticeOrdinal}`,
136
+ kind: "notice",
137
+ lifecycle: event.type.endsWith("_start") ? "started" : "completed",
138
+ title: event.type
139
+ });
140
+ break;
141
+ case "notice":
142
+ noticeOrdinal += 1;
143
+ items.push({
144
+ id: `notice-${noticeOrdinal}`,
145
+ kind: "notice",
146
+ lifecycle: "completed",
147
+ title: event.method ?? "notice",
148
+ ...(event.message ? { text: redactText(event.message) } : {})
149
+ });
150
+ break;
151
+ default:
152
+ // agent_start / agent_end / turn_start / turn_end carry no item evidence.
153
+ break;
154
+ }
155
+ }
156
+ // Terminal flush: if the stream ended mid-message (abnormal termination such as
157
+ // an error/abort/length cutoff), preserve the partial assistant text/reasoning.
158
+ if (textBuffer.length > 0 || thinkingBuffer.length > 0) {
159
+ flushMessage(undefined, undefined);
160
+ }
161
+ return items;
162
+ }
163
+ /**
164
+ * Map a pi-agent-core session into the provider-neutral ActorTrace. Pure and
165
+ * side-effect-free; mirrors codexResultToActorTrace. The persona reference is
166
+ * supplied by the harness. Used by the actorRegistry to prove the contract is
167
+ * provider-neutral ahead of the live SDK shim.
168
+ */
169
+ export function piSessionToActorTrace(session, persona) {
170
+ const tokenUsage = pickPiTokenUsage(session.stats);
171
+ const items = piEventsToActorItems(session.events);
172
+ return {
173
+ schema: ACTOR_TRACE_SCHEMA,
174
+ provider: "pi-agent-core",
175
+ ...(session.providerVersion === undefined ? {} : { providerVersion: session.providerVersion }),
176
+ protocol: "in-process-sdk",
177
+ lane: "code",
178
+ persona,
179
+ redaction: {
180
+ status: "passed",
181
+ screenshots: "n/a",
182
+ notes: "pi event stream projected to actor trace; secret-like text is rejected by verify."
183
+ },
184
+ startedAt: session.startedAt,
185
+ completedAt: session.completedAt,
186
+ durationMs: session.durationMs,
187
+ status: session.status,
188
+ completionReason: piStatusToCompletionReason(session.status),
189
+ reason: redactText(session.reason),
190
+ ids: {
191
+ ...(session.sessionId === undefined ? {} : { sessionId: session.sessionId }),
192
+ ...(session.model === undefined ? {} : { model: session.model })
193
+ },
194
+ counts: {
195
+ events: session.events.length,
196
+ items: items.length
197
+ },
198
+ items,
199
+ ...(tokenUsage === undefined ? {} : { tokenUsage }),
200
+ capabilities: PI_AGENT_CORE_CAPABILITIES
201
+ };
202
+ }
203
+ //# sourceMappingURL=pi-agent-core.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pi-agent-core.js","sourceRoot":"","sources":["../src/pi-agent-core.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,54 @@
1
+ import { Command } from "commander";
2
+ import type { ObserverResult, ObserverServer } from "./observer.js";
3
+ import type { OssMetaLabResult } from "./oss-meta-lab.js";
4
+ export declare const CLI_RESPONSE_SCHEMA = "humanish.cli-response.v1";
5
+ export interface CliIo {
6
+ writeOut(text: string): void;
7
+ writeErr(text: string): void;
8
+ setExitCode(code: number): void;
9
+ }
10
+ export interface UnexpectedErrorEnvelope {
11
+ schema: typeof CLI_RESPONSE_SCHEMA;
12
+ ok: false;
13
+ error: {
14
+ code: "HUMANISH_UNEXPECTED";
15
+ message: string;
16
+ };
17
+ }
18
+ export declare function createProgram(io?: Partial<CliIo>): Command;
19
+ /**
20
+ * Default browser-open policy for a lab backend run. Mirrors the observe/watch gate:
21
+ * an explicit --open/--no-open wins; --json (machine mode) never auto-opens; otherwise a
22
+ * lab-config `defaults.open` wins, and the final fallback opens only for an interactive
23
+ * `watch` on a real TTY. Extracted so all lab backends share one gate (and one test).
24
+ */
25
+ export declare function resolveBackendShouldOpen(args: {
26
+ optionOpen: boolean | undefined;
27
+ defaultsOpen: boolean | undefined;
28
+ mode: string;
29
+ wantsMachine: boolean;
30
+ }): boolean;
31
+ export declare function writeResult<T>(command: Command, io: CliIo, result: T, formatHuman: (result: T) => string): void;
32
+ type WatchStopSignal = "SIGINT" | "SIGTERM" | "SIGHUP";
33
+ interface WatchSignalTarget {
34
+ once(event: WatchStopSignal, listener: () => void): unknown;
35
+ removeListener(event: WatchStopSignal, listener: () => void): unknown;
36
+ }
37
+ export declare function followObserver(io: CliIo, result: ObserverResult, server: ObserverServer, options?: {
38
+ onStop?: () => Promise<string[]>;
39
+ signalTarget?: WatchSignalTarget;
40
+ signals?: WatchStopSignal[];
41
+ }): Promise<void>;
42
+ export declare function shouldForceExitAfterOssMetaLab(output: OssMetaLabResult, options: {
43
+ detach: boolean;
44
+ wantsMachine: boolean;
45
+ }): boolean;
46
+ export declare function shouldServeOssMetaLabObserver(output: OssMetaLabResult, options: {
47
+ wantsFollow: boolean;
48
+ }): output is OssMetaLabResult & {
49
+ observer: ObserverResult & {
50
+ ok: true;
51
+ };
52
+ };
53
+ export declare function exitCodeForOssMetaLab(output: OssMetaLabResult): number;
54
+ export {};