@osva-ai/cli 1.1.0-rc.1 → 1.1.0-rc.2

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/README.md +178 -0
  2. package/dist/bin/osva.js +83 -5
  3. package/dist/bin/osva.js.map +1 -1
  4. package/dist/commands/index.js +13 -1
  5. package/dist/commands/index.js.map +1 -1
  6. package/dist/doctor/format.d.ts +4 -0
  7. package/dist/doctor/format.d.ts.map +1 -0
  8. package/dist/doctor/format.js +18 -0
  9. package/dist/doctor/format.js.map +1 -0
  10. package/dist/doctor/http-probe.d.ts +17 -0
  11. package/dist/doctor/http-probe.d.ts.map +1 -0
  12. package/dist/doctor/http-probe.js +104 -0
  13. package/dist/doctor/http-probe.js.map +1 -0
  14. package/dist/doctor/index.d.ts +7 -0
  15. package/dist/doctor/index.d.ts.map +1 -0
  16. package/dist/doctor/index.js +15 -0
  17. package/dist/doctor/index.js.map +1 -0
  18. package/dist/doctor/read-env.d.ts +3 -0
  19. package/dist/doctor/read-env.d.ts.map +1 -0
  20. package/dist/doctor/read-env.js +27 -0
  21. package/dist/doctor/read-env.js.map +1 -0
  22. package/dist/doctor/redact.d.ts +2 -0
  23. package/dist/doctor/redact.d.ts.map +1 -0
  24. package/dist/doctor/redact.js +10 -0
  25. package/dist/doctor/redact.js.map +1 -0
  26. package/dist/doctor/run-doctor.d.ts +6 -0
  27. package/dist/doctor/run-doctor.d.ts.map +1 -0
  28. package/dist/doctor/run-doctor.js +250 -0
  29. package/dist/doctor/run-doctor.js.map +1 -0
  30. package/dist/doctor/types.d.ts +22 -0
  31. package/dist/doctor/types.d.ts.map +1 -0
  32. package/dist/doctor/types.js +2 -0
  33. package/dist/doctor/types.js.map +1 -0
  34. package/dist/exit.d.ts +7 -0
  35. package/dist/exit.d.ts.map +1 -0
  36. package/dist/exit.js +9 -0
  37. package/dist/exit.js.map +1 -0
  38. package/dist/init/index.d.ts +7 -0
  39. package/dist/init/index.d.ts.map +1 -0
  40. package/dist/init/index.js +40 -0
  41. package/dist/init/index.js.map +1 -0
  42. package/dist/init/resolve-target.d.ts +2 -0
  43. package/dist/init/resolve-target.d.ts.map +1 -0
  44. package/dist/init/resolve-target.js +15 -0
  45. package/dist/init/resolve-target.js.map +1 -0
  46. package/dist/init/run-init.d.ts +6 -0
  47. package/dist/init/run-init.d.ts.map +1 -0
  48. package/dist/init/run-init.js +34 -0
  49. package/dist/init/run-init.js.map +1 -0
  50. package/dist/init/scaffold.d.ts +6 -0
  51. package/dist/init/scaffold.d.ts.map +1 -0
  52. package/dist/init/scaffold.js +66 -0
  53. package/dist/init/scaffold.js.map +1 -0
  54. package/dist/init/template-root.d.ts +3 -0
  55. package/dist/init/template-root.d.ts.map +1 -0
  56. package/dist/init/template-root.js +8 -0
  57. package/dist/init/template-root.js.map +1 -0
  58. package/dist/init/template-vars.d.ts +4 -0
  59. package/dist/init/template-vars.d.ts.map +1 -0
  60. package/dist/init/template-vars.js +18 -0
  61. package/dist/init/template-vars.js.map +1 -0
  62. package/dist/init/types.d.ts +18 -0
  63. package/dist/init/types.d.ts.map +1 -0
  64. package/dist/init/types.js +2 -0
  65. package/dist/init/types.js.map +1 -0
  66. package/dist/init/validate-project-name.d.ts +3 -0
  67. package/dist/init/validate-project-name.d.ts.map +1 -0
  68. package/dist/init/validate-project-name.js +26 -0
  69. package/dist/init/validate-project-name.js.map +1 -0
  70. package/dist/project/compose-volume.d.ts +11 -0
  71. package/dist/project/compose-volume.d.ts.map +1 -0
  72. package/dist/project/compose-volume.js +66 -0
  73. package/dist/project/compose-volume.js.map +1 -0
  74. package/dist/project/deploy-env.d.ts +12 -0
  75. package/dist/project/deploy-env.d.ts.map +1 -0
  76. package/dist/project/deploy-env.js +50 -0
  77. package/dist/project/deploy-env.js.map +1 -0
  78. package/dist/project/ensure-agent-version.d.ts +17 -0
  79. package/dist/project/ensure-agent-version.d.ts.map +1 -0
  80. package/dist/project/ensure-agent-version.js +105 -0
  81. package/dist/project/ensure-agent-version.js.map +1 -0
  82. package/dist/project/errors.d.ts +10 -0
  83. package/dist/project/errors.d.ts.map +1 -0
  84. package/dist/project/errors.js +19 -0
  85. package/dist/project/errors.js.map +1 -0
  86. package/dist/project/format.d.ts +42 -0
  87. package/dist/project/format.d.ts.map +1 -0
  88. package/dist/project/format.js +66 -0
  89. package/dist/project/format.js.map +1 -0
  90. package/dist/project/index.d.ts +5 -0
  91. package/dist/project/index.d.ts.map +1 -0
  92. package/dist/project/index.js +101 -0
  93. package/dist/project/index.js.map +1 -0
  94. package/dist/project/install-trusted-runtime.d.ts +14 -0
  95. package/dist/project/install-trusted-runtime.d.ts.map +1 -0
  96. package/dist/project/install-trusted-runtime.js +82 -0
  97. package/dist/project/install-trusted-runtime.js.map +1 -0
  98. package/dist/project/load-manifest.d.ts +3 -0
  99. package/dist/project/load-manifest.d.ts.map +1 -0
  100. package/dist/project/load-manifest.js +13 -0
  101. package/dist/project/load-manifest.js.map +1 -0
  102. package/dist/project/manifest.d.ts +4 -0
  103. package/dist/project/manifest.d.ts.map +1 -0
  104. package/dist/project/manifest.js +12 -0
  105. package/dist/project/manifest.js.map +1 -0
  106. package/dist/project/parse-run-input.d.ts +6 -0
  107. package/dist/project/parse-run-input.d.ts.map +1 -0
  108. package/dist/project/parse-run-input.js +43 -0
  109. package/dist/project/parse-run-input.js.map +1 -0
  110. package/dist/project/poll.d.ts +15 -0
  111. package/dist/project/poll.d.ts.map +1 -0
  112. package/dist/project/poll.js +32 -0
  113. package/dist/project/poll.js.map +1 -0
  114. package/dist/project/run-deploy.d.ts +16 -0
  115. package/dist/project/run-deploy.d.ts.map +1 -0
  116. package/dist/project/run-deploy.js +142 -0
  117. package/dist/project/run-deploy.js.map +1 -0
  118. package/dist/project/run-run.d.ts +17 -0
  119. package/dist/project/run-run.d.ts.map +1 -0
  120. package/dist/project/run-run.js +203 -0
  121. package/dist/project/run-run.js.map +1 -0
  122. package/dist/project/run-status.d.ts +15 -0
  123. package/dist/project/run-status.d.ts.map +1 -0
  124. package/dist/project/run-status.js +122 -0
  125. package/dist/project/run-status.js.map +1 -0
  126. package/dist/project/sdk-error.d.ts +10 -0
  127. package/dist/project/sdk-error.d.ts.map +1 -0
  128. package/dist/project/sdk-error.js +49 -0
  129. package/dist/project/sdk-error.js.map +1 -0
  130. package/dist/project/state.d.ts +28 -0
  131. package/dist/project/state.d.ts.map +1 -0
  132. package/dist/project/state.js +54 -0
  133. package/dist/project/state.js.map +1 -0
  134. package/dist/project/workspace-context.d.ts +6 -0
  135. package/dist/project/workspace-context.d.ts.map +1 -0
  136. package/dist/project/workspace-context.js +25 -0
  137. package/dist/project/workspace-context.js.map +1 -0
  138. package/dist/stdout.d.ts +3 -0
  139. package/dist/stdout.d.ts.map +1 -0
  140. package/dist/stdout.js +27 -0
  141. package/dist/stdout.js.map +1 -0
  142. package/dist/tsconfig.tsbuildinfo +1 -1
  143. package/dist/validate/canonical-json.d.ts +2 -0
  144. package/dist/validate/canonical-json.d.ts.map +1 -0
  145. package/dist/validate/canonical-json.js +17 -0
  146. package/dist/validate/canonical-json.js.map +1 -0
  147. package/dist/validate/exit-code.d.ts +3 -0
  148. package/dist/validate/exit-code.d.ts.map +1 -0
  149. package/dist/validate/exit-code.js +4 -0
  150. package/dist/validate/exit-code.js.map +1 -0
  151. package/dist/validate/format.d.ts +4 -0
  152. package/dist/validate/format.d.ts.map +1 -0
  153. package/dist/validate/format.js +23 -0
  154. package/dist/validate/format.js.map +1 -0
  155. package/dist/validate/index.d.ts +6 -0
  156. package/dist/validate/index.d.ts.map +1 -0
  157. package/dist/validate/index.js +29 -0
  158. package/dist/validate/index.js.map +1 -0
  159. package/dist/validate/integrity.d.ts +4 -0
  160. package/dist/validate/integrity.d.ts.map +1 -0
  161. package/dist/validate/integrity.js +24 -0
  162. package/dist/validate/integrity.js.map +1 -0
  163. package/dist/validate/json-schema-draft.d.ts +8 -0
  164. package/dist/validate/json-schema-draft.d.ts.map +1 -0
  165. package/dist/validate/json-schema-draft.js +32 -0
  166. package/dist/validate/json-schema-draft.js.map +1 -0
  167. package/dist/validate/project-config.d.ts +24 -0
  168. package/dist/validate/project-config.d.ts.map +1 -0
  169. package/dist/validate/project-config.js +27 -0
  170. package/dist/validate/project-config.js.map +1 -0
  171. package/dist/validate/resolve-project-dir.d.ts +12 -0
  172. package/dist/validate/resolve-project-dir.d.ts.map +1 -0
  173. package/dist/validate/resolve-project-dir.js +27 -0
  174. package/dist/validate/resolve-project-dir.js.map +1 -0
  175. package/dist/validate/run-validate.d.ts +3 -0
  176. package/dist/validate/run-validate.d.ts.map +1 -0
  177. package/dist/validate/run-validate.js +278 -0
  178. package/dist/validate/run-validate.js.map +1 -0
  179. package/dist/validate/safe-path.d.ts +4 -0
  180. package/dist/validate/safe-path.d.ts.map +1 -0
  181. package/dist/validate/safe-path.js +42 -0
  182. package/dist/validate/safe-path.js.map +1 -0
  183. package/dist/validate/types.d.ts +14 -0
  184. package/dist/validate/types.d.ts.map +1 -0
  185. package/dist/validate/types.js +2 -0
  186. package/dist/validate/types.js.map +1 -0
  187. package/package.json +6 -3
  188. package/templates/agent-typescript/.gitignore +4 -0
  189. package/templates/agent-typescript/README.md.template +56 -0
  190. package/templates/agent-typescript/agent/agent.ts.template +25 -0
  191. package/templates/agent-typescript/contracts/input.v1.schema.json +12 -0
  192. package/templates/agent-typescript/contracts/output.v1.schema.json +12 -0
  193. package/templates/agent-typescript/osva-agent.project.json.template +21 -0
  194. package/templates/agent-typescript/package.json.template +16 -0
  195. package/templates/agent-typescript/scripts/build-manifest.mjs +53 -0
  196. package/templates/agent-typescript/tsconfig.json +19 -0
@@ -0,0 +1,203 @@
1
+ import { OsvaClient } from "@osva-ai/sdk";
2
+ import { validateExitCode } from "../validate/exit-code.js";
3
+ import { formatValidateHuman, formatValidateJson } from "../validate/format.js";
4
+ import { resolveValidateProjectDir } from "../validate/resolve-project-dir.js";
5
+ import { runValidatePipeline } from "../validate/run-validate.js";
6
+ import { loadProjectDeployEnv } from "./deploy-env.js";
7
+ import { ProjectConfigurationError, ProjectStateError } from "./errors.js";
8
+ import { loadProjectManifest } from "./load-manifest.js";
9
+ import { manifestFingerprint } from "./manifest.js";
10
+ import { parseRunInput } from "./parse-run-input.js";
11
+ import { pollUntilReady, ProjectPollError } from "./poll.js";
12
+ import { assertDeploymentContext, readDeploymentState, writeDeploymentState, } from "./state.js";
13
+ import { resolveAuthenticatedWorkspace } from "./workspace-context.js";
14
+ const TERMINAL_RUN_STATUSES = new Set([
15
+ "SUCCEEDED",
16
+ "FAILED",
17
+ "CANCELLED",
18
+ "TIMED_OUT",
19
+ ]);
20
+ export async function runRunPipeline(input) {
21
+ const cwd = input.cwd ?? process.cwd();
22
+ const wait = input.flags.wait === true;
23
+ const resolved = await resolveValidateProjectDir({ cwd, flags: input.flags });
24
+ if (!resolved.ok) {
25
+ return {
26
+ ok: false,
27
+ exitCode: 1,
28
+ message: resolved.error,
29
+ };
30
+ }
31
+ const validateReport = await runValidatePipeline(resolved.projectDir);
32
+ const validateExit = validateExitCode(validateReport);
33
+ if (validateExit !== 0) {
34
+ const json = input.config.json;
35
+ return {
36
+ ok: false,
37
+ exitCode: validateExit,
38
+ validateStdout: json
39
+ ? formatValidateJson(validateReport)
40
+ : formatValidateHuman(validateReport),
41
+ };
42
+ }
43
+ let deployEnv;
44
+ try {
45
+ deployEnv = loadProjectDeployEnv();
46
+ }
47
+ catch (error) {
48
+ return {
49
+ ok: false,
50
+ exitCode: 1,
51
+ message: error instanceof ProjectConfigurationError
52
+ ? error.message
53
+ : "Invalid configuration.",
54
+ };
55
+ }
56
+ const manifest = await loadProjectManifest(resolved.projectDir);
57
+ const runtime = manifest.runtime;
58
+ if (runtime.type !== "TRUSTED_TYPESCRIPT") {
59
+ return { ok: false, exitCode: 1, message: "Invalid manifest runtime." };
60
+ }
61
+ const fingerprint = manifestFingerprint(manifest);
62
+ const state = await readDeploymentState(resolved.projectDir);
63
+ if (state === null) {
64
+ return {
65
+ ok: false,
66
+ exitCode: 1,
67
+ message: "No deployment found. Run osva deploy before osva run.",
68
+ };
69
+ }
70
+ let runInput;
71
+ try {
72
+ runInput = await parseRunInput({
73
+ projectDir: resolved.projectDir,
74
+ flags: input.flags,
75
+ });
76
+ }
77
+ catch (error) {
78
+ return {
79
+ ok: false,
80
+ exitCode: 1,
81
+ message: error instanceof ProjectConfigurationError
82
+ ? error.message
83
+ : "Invalid run input.",
84
+ };
85
+ }
86
+ const client = new OsvaClient({
87
+ baseUrl: input.config.baseUrl,
88
+ apiKey: input.config.apiKey,
89
+ timeoutMs: deployEnv.runPollTimeoutMs,
90
+ });
91
+ let workspaceId;
92
+ try {
93
+ workspaceId = await resolveAuthenticatedWorkspace({
94
+ client,
95
+ configuredWorkspaceId: process.env.OSVA_WORKSPACE_ID,
96
+ });
97
+ }
98
+ catch (error) {
99
+ return {
100
+ ok: false,
101
+ exitCode: 1,
102
+ message: error instanceof ProjectConfigurationError
103
+ ? error.message
104
+ : "Could not resolve workspace.",
105
+ };
106
+ }
107
+ try {
108
+ assertDeploymentContext({
109
+ state,
110
+ baseUrl: input.config.baseUrl,
111
+ workspaceId,
112
+ manifestFingerprint: fingerprint,
113
+ integrity: runtime.integrity,
114
+ });
115
+ }
116
+ catch (error) {
117
+ return {
118
+ ok: false,
119
+ exitCode: 1,
120
+ message: error instanceof ProjectStateError
121
+ ? error.message
122
+ : "Deployment state is stale.",
123
+ };
124
+ }
125
+ const created = await client.runs.create({
126
+ agentId: state.agentId,
127
+ agentVersionId: state.agentVersionId,
128
+ input: runInput,
129
+ });
130
+ let runStatus = created.run.status;
131
+ let attemptStatus = created.runAttempt.status;
132
+ let output = created.runAttempt.output ?? null;
133
+ if (wait) {
134
+ let terminalRun;
135
+ try {
136
+ terminalRun = await pollUntilReady({
137
+ label: "Agent Run",
138
+ intervalMs: deployEnv.runPollIntervalMs,
139
+ timeoutMs: deployEnv.runPollTimeoutMs,
140
+ fetch: () => client.runs.get(created.run.id),
141
+ getStatus: (run) => run.status,
142
+ isReady: (run) => run.status === "SUCCEEDED",
143
+ isFailed: (run) => run.status === "FAILED" ||
144
+ run.status === "CANCELLED" ||
145
+ run.status === "TIMED_OUT",
146
+ });
147
+ }
148
+ catch (error) {
149
+ return {
150
+ ok: false,
151
+ exitCode: 1,
152
+ message: error instanceof ProjectPollError
153
+ ? error.message
154
+ : "Run polling failed.",
155
+ };
156
+ }
157
+ runStatus = terminalRun.status;
158
+ const attempt = await client.runs.getAttempt(created.run.id, created.runAttempt.id);
159
+ attemptStatus = attempt.status;
160
+ output = attempt.output ?? null;
161
+ if (!TERMINAL_RUN_STATUSES.has(runStatus)) {
162
+ return {
163
+ ok: false,
164
+ exitCode: 1,
165
+ message: `Run ended in unexpected status '${runStatus}'.`,
166
+ };
167
+ }
168
+ if (runStatus === "SUCCEEDED" && attemptStatus !== "SUCCEEDED") {
169
+ return {
170
+ ok: false,
171
+ exitCode: 1,
172
+ message: `Run reached ${runStatus} but RunAttempt status is ${attemptStatus}.`,
173
+ };
174
+ }
175
+ if (runStatus !== "SUCCEEDED") {
176
+ return {
177
+ ok: false,
178
+ exitCode: 1,
179
+ message: `Run finished with status ${runStatus} (RunAttempt: ${attemptStatus}).`,
180
+ };
181
+ }
182
+ }
183
+ await writeDeploymentState(resolved.projectDir, {
184
+ ...state,
185
+ updatedAt: new Date().toISOString(),
186
+ lastRunId: created.run.id,
187
+ lastRunAttemptId: created.runAttempt.id,
188
+ });
189
+ return {
190
+ ok: true,
191
+ waited: wait,
192
+ payload: {
193
+ runId: created.run.id,
194
+ runAttemptId: created.runAttempt.id,
195
+ agentId: state.agentId,
196
+ agentVersionId: state.agentVersionId,
197
+ status: runStatus,
198
+ runAttemptStatus: attemptStatus,
199
+ output,
200
+ },
201
+ };
202
+ }
203
+ //# sourceMappingURL=run-run.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-run.js","sourceRoot":"","sources":["../../src/project/run-run.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import type { CliConfig } from "../config.js";
2
+ import type { StatusResultPayload } from "./format.js";
3
+ export declare function runStatusPipeline(input: {
4
+ readonly config: CliConfig;
5
+ readonly flags: Readonly<Record<string, string | boolean>>;
6
+ readonly cwd?: string;
7
+ }): Promise<{
8
+ ok: true;
9
+ payload: StatusResultPayload;
10
+ } | {
11
+ ok: false;
12
+ exitCode: number;
13
+ message: string;
14
+ }>;
15
+ //# sourceMappingURL=run-status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-status.d.ts","sourceRoot":"","sources":["../../src/project/run-status.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAI9C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAMvD,wBAAsB,iBAAiB,CAAC,KAAK,EAAE;IAC7C,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IAC3D,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;CACvB,GAAG,OAAO,CACP;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,mBAAmB,CAAA;CAAE,GAC1C;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CACnD,CAyHA"}
@@ -0,0 +1,122 @@
1
+ import { OsvaClient } from "@osva-ai/sdk";
2
+ import { resolveValidateProjectDir } from "../validate/resolve-project-dir.js";
3
+ import { loadProjectDeployEnv } from "./deploy-env.js";
4
+ import { ProjectConfigurationError, ProjectStateError } from "./errors.js";
5
+ import { loadProjectManifest } from "./load-manifest.js";
6
+ import { manifestFingerprint } from "./manifest.js";
7
+ import { assertDeploymentContext, readDeploymentState } from "./state.js";
8
+ import { resolveAuthenticatedWorkspace } from "./workspace-context.js";
9
+ export async function runStatusPipeline(input) {
10
+ const cwd = input.cwd ?? process.cwd();
11
+ const resolved = await resolveValidateProjectDir({ cwd, flags: input.flags });
12
+ if (!resolved.ok) {
13
+ return { ok: false, exitCode: 1, message: resolved.error };
14
+ }
15
+ const state = await readDeploymentState(resolved.projectDir);
16
+ if (state === null) {
17
+ return {
18
+ ok: true,
19
+ payload: { deployment: null },
20
+ };
21
+ }
22
+ let deployEnv;
23
+ try {
24
+ deployEnv = loadProjectDeployEnv();
25
+ }
26
+ catch (error) {
27
+ return {
28
+ ok: false,
29
+ exitCode: 1,
30
+ message: error instanceof ProjectConfigurationError
31
+ ? error.message
32
+ : "Invalid configuration.",
33
+ };
34
+ }
35
+ const client = new OsvaClient({
36
+ baseUrl: input.config.baseUrl,
37
+ apiKey: input.config.apiKey,
38
+ timeoutMs: deployEnv.runPollTimeoutMs,
39
+ });
40
+ let workspaceId;
41
+ try {
42
+ workspaceId = await resolveAuthenticatedWorkspace({
43
+ client,
44
+ configuredWorkspaceId: process.env.OSVA_WORKSPACE_ID,
45
+ });
46
+ }
47
+ catch (error) {
48
+ return {
49
+ ok: false,
50
+ exitCode: 1,
51
+ message: error instanceof ProjectConfigurationError
52
+ ? error.message
53
+ : "Could not resolve workspace.",
54
+ };
55
+ }
56
+ try {
57
+ const manifest = await loadProjectManifest(resolved.projectDir);
58
+ const runtime = manifest.runtime;
59
+ if (runtime.type !== "TRUSTED_TYPESCRIPT") {
60
+ return { ok: false, exitCode: 1, message: "Invalid manifest runtime." };
61
+ }
62
+ assertDeploymentContext({
63
+ state,
64
+ baseUrl: input.config.baseUrl,
65
+ workspaceId,
66
+ manifestFingerprint: manifestFingerprint(manifest),
67
+ integrity: runtime.integrity,
68
+ });
69
+ }
70
+ catch (error) {
71
+ return {
72
+ ok: false,
73
+ exitCode: 1,
74
+ message: error instanceof ProjectStateError
75
+ ? error.message
76
+ : "Deployment state is stale.",
77
+ };
78
+ }
79
+ let lastRun;
80
+ if (state.lastRunId !== undefined) {
81
+ try {
82
+ const run = await client.runs.get(state.lastRunId);
83
+ let runAttemptStatus;
84
+ if (state.lastRunAttemptId !== undefined) {
85
+ const attempt = await client.runs.getAttempt(state.lastRunId, state.lastRunAttemptId);
86
+ runAttemptStatus = attempt.status;
87
+ }
88
+ lastRun = {
89
+ id: run.id,
90
+ status: run.status,
91
+ ...(state.lastRunAttemptId === undefined
92
+ ? {}
93
+ : { runAttemptId: state.lastRunAttemptId }),
94
+ ...(runAttemptStatus === undefined ? {} : { runAttemptStatus }),
95
+ };
96
+ }
97
+ catch {
98
+ // Keep local deployment info even when the run is no longer visible.
99
+ }
100
+ }
101
+ return {
102
+ ok: true,
103
+ payload: {
104
+ deployment: {
105
+ agentId: state.agentId,
106
+ agentVersionId: state.agentVersionId,
107
+ agentKey: state.agentKey,
108
+ deployTarget: state.deployTarget,
109
+ integrity: state.integrity,
110
+ updatedAt: state.updatedAt,
111
+ ...(state.lastRunId === undefined
112
+ ? {}
113
+ : { lastRunId: state.lastRunId }),
114
+ ...(state.lastRunAttemptId === undefined
115
+ ? {}
116
+ : { lastRunAttemptId: state.lastRunAttemptId }),
117
+ },
118
+ ...(lastRun === undefined ? {} : { lastRun }),
119
+ },
120
+ };
121
+ }
122
+ //# sourceMappingURL=run-status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-status.js","sourceRoot":"","sources":["../../src/project/run-status.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export declare function mapProjectSdkError(input: {
2
+ readonly error: unknown;
3
+ readonly json: boolean;
4
+ }): {
5
+ ok: false;
6
+ exitCode: number;
7
+ stdout?: string;
8
+ message?: string;
9
+ } | null;
10
+ //# sourceMappingURL=sdk-error.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sdk-error.d.ts","sourceRoot":"","sources":["../../src/project/sdk-error.ts"],"names":[],"mappings":"AAIA,wBAAgB,kBAAkB,CAAC,KAAK,EAAE;IACxC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;CACxB,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAwD5E"}
@@ -0,0 +1,49 @@
1
+ import { OsvaApiError, OsvaTransportError } from "@osva-ai/sdk";
2
+ import { redactSecrets } from "../doctor/redact.js";
3
+ export function mapProjectSdkError(input) {
4
+ if (input.error instanceof OsvaApiError) {
5
+ if (input.json) {
6
+ return {
7
+ ok: false,
8
+ exitCode: 1,
9
+ stdout: `${JSON.stringify({
10
+ error: {
11
+ kind: "api",
12
+ status: input.error.status,
13
+ body: input.error.body,
14
+ requestId: input.error.requestId,
15
+ },
16
+ }, null, 2)}\n`,
17
+ };
18
+ }
19
+ const requestSuffix = input.error.requestId === undefined
20
+ ? ""
21
+ : ` (requestId: ${input.error.requestId})`;
22
+ return {
23
+ ok: false,
24
+ exitCode: 1,
25
+ message: redactSecrets(`${input.error.message}${requestSuffix}`),
26
+ };
27
+ }
28
+ if (input.error instanceof OsvaTransportError) {
29
+ if (input.json) {
30
+ return {
31
+ ok: false,
32
+ exitCode: 1,
33
+ stdout: `${JSON.stringify({
34
+ error: {
35
+ kind: "transport",
36
+ message: redactSecrets(input.error.message),
37
+ },
38
+ }, null, 2)}\n`,
39
+ };
40
+ }
41
+ return {
42
+ ok: false,
43
+ exitCode: 1,
44
+ message: redactSecrets(input.error.message),
45
+ };
46
+ }
47
+ return null;
48
+ }
49
+ //# sourceMappingURL=sdk-error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sdk-error.js","sourceRoot":"","sources":["../../src/project/sdk-error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAEhE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,MAAM,UAAU,kBAAkB,CAAC,KAGlC;IACC,IAAI,KAAK,CAAC,KAAK,YAAY,YAAY,EAAE,CAAC;QACxC,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;YACf,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,QAAQ,EAAE,CAAC;gBACX,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,CACvB;oBACE,KAAK,EAAE;wBACL,IAAI,EAAE,KAAK;wBACX,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM;wBAC1B,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,IAAI;wBACtB,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC,SAAS;qBACjC;iBACF,EACD,IAAI,EACJ,CAAC,CACF,IAAI;aACN,CAAC;QACJ,CAAC;QACD,MAAM,aAAa,GACjB,KAAK,CAAC,KAAK,CAAC,SAAS,KAAK,SAAS;YACjC,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,gBAAgB,KAAK,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC;QAC/C,OAAO;YACL,EAAE,EAAE,KAAK;YACT,QAAQ,EAAE,CAAC;YACX,OAAO,EAAE,aAAa,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,GAAG,aAAa,EAAE,CAAC;SACjE,CAAC;IACJ,CAAC;IAED,IAAI,KAAK,CAAC,KAAK,YAAY,kBAAkB,EAAE,CAAC;QAC9C,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;YACf,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,QAAQ,EAAE,CAAC;gBACX,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,CACvB;oBACE,KAAK,EAAE;wBACL,IAAI,EAAE,WAAW;wBACjB,OAAO,EAAE,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC;qBAC5C;iBACF,EACD,IAAI,EACJ,CAAC,CACF,IAAI;aACN,CAAC;QACJ,CAAC;QACD,OAAO;YACL,EAAE,EAAE,KAAK;YACT,QAAQ,EAAE,CAAC;YACX,OAAO,EAAE,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC;SAC5C,CAAC;IACJ,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,28 @@
1
+ export declare const DEPLOYMENT_STATE_SCHEMA_VERSION: "1";
2
+ export interface ProjectDeploymentState {
3
+ readonly schemaVersion: typeof DEPLOYMENT_STATE_SCHEMA_VERSION;
4
+ readonly baseUrl: string;
5
+ readonly workspaceId: string;
6
+ readonly agentKey: string;
7
+ readonly agentId: string;
8
+ readonly agentVersionId: string;
9
+ readonly manifestFingerprint: string;
10
+ readonly integrity: string;
11
+ readonly deployTarget: string;
12
+ readonly entrypoint: string;
13
+ readonly updatedAt: string;
14
+ readonly lastRunId?: string;
15
+ readonly lastRunAttemptId?: string;
16
+ }
17
+ export declare function deploymentStatePath(projectDir: string): string;
18
+ export declare function assertStateHasNoSecrets(state: ProjectDeploymentState): void;
19
+ export declare function readDeploymentState(projectDir: string): Promise<ProjectDeploymentState | null>;
20
+ export declare function writeDeploymentState(projectDir: string, state: ProjectDeploymentState): Promise<void>;
21
+ export declare function assertDeploymentContext(input: {
22
+ readonly state: ProjectDeploymentState;
23
+ readonly baseUrl: string;
24
+ readonly workspaceId: string;
25
+ readonly manifestFingerprint: string;
26
+ readonly integrity: string;
27
+ }): void;
28
+ //# sourceMappingURL=state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/project/state.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,+BAA+B,EAAG,GAAY,CAAC;AAE5D,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,aAAa,EAAE,OAAO,+BAA+B,CAAC;IAC/D,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;CACpC;AAID,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAE9D;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,sBAAsB,GAAG,IAAI,CAO3E;AAED,wBAAsB,mBAAmB,CACvC,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,sBAAsB,GAAG,IAAI,CAAC,CAqBxC;AAED,wBAAsB,oBAAoB,CACxC,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,sBAAsB,GAC5B,OAAO,CAAC,IAAI,CAAC,CAKf;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE;IAC7C,QAAQ,CAAC,KAAK,EAAE,sBAAsB,CAAC;IACvC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B,GAAG,IAAI,CAmBP"}
@@ -0,0 +1,54 @@
1
+ import { mkdir, readFile, writeFile } from "node:fs/promises";
2
+ import path from "node:path";
3
+ import { ProjectStateError } from "./errors.js";
4
+ export const DEPLOYMENT_STATE_SCHEMA_VERSION = "1";
5
+ const SECRET_KEY_PATTERN = /api[_-]?key|secret|password|token|authorization/i;
6
+ export function deploymentStatePath(projectDir) {
7
+ return path.join(projectDir, ".osva", "deployment.json");
8
+ }
9
+ export function assertStateHasNoSecrets(state) {
10
+ const serialized = JSON.stringify(state);
11
+ if (SECRET_KEY_PATTERN.test(serialized)) {
12
+ throw new ProjectStateError("Refusing to persist state containing secret-like keys.");
13
+ }
14
+ }
15
+ export async function readDeploymentState(projectDir) {
16
+ try {
17
+ const raw = await readFile(deploymentStatePath(projectDir), "utf8");
18
+ const parsed = JSON.parse(raw);
19
+ if (parsed.schemaVersion !== DEPLOYMENT_STATE_SCHEMA_VERSION) {
20
+ return null;
21
+ }
22
+ return parsed;
23
+ }
24
+ catch (error) {
25
+ if (error instanceof Error &&
26
+ "code" in error &&
27
+ error.code === "ENOENT") {
28
+ return null;
29
+ }
30
+ if (error instanceof SyntaxError) {
31
+ return null;
32
+ }
33
+ throw error;
34
+ }
35
+ }
36
+ export async function writeDeploymentState(projectDir, state) {
37
+ assertStateHasNoSecrets(state);
38
+ const filePath = deploymentStatePath(projectDir);
39
+ await mkdir(path.dirname(filePath), { recursive: true });
40
+ await writeFile(filePath, `${JSON.stringify(state, null, 2)}\n`, "utf8");
41
+ }
42
+ export function assertDeploymentContext(input) {
43
+ if (input.state.baseUrl !== input.baseUrl) {
44
+ throw new ProjectStateError("Local deployment state was created for a different OSVA_BASE_URL. Run osva deploy again after pointing at the intended control plane.");
45
+ }
46
+ if (input.state.workspaceId !== input.workspaceId) {
47
+ throw new ProjectStateError("Local deployment state belongs to a different workspace. Run osva deploy with the correct OSVA_API_KEY.");
48
+ }
49
+ if (input.state.manifestFingerprint !== input.manifestFingerprint ||
50
+ input.state.integrity !== input.integrity) {
51
+ throw new ProjectStateError("Project manifest or executable changed since the last deploy. Run osva deploy before osva run.");
52
+ }
53
+ }
54
+ //# sourceMappingURL=state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/project/state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEhD,MAAM,CAAC,MAAM,+BAA+B,GAAG,GAAY,CAAC;AAkB5D,MAAM,kBAAkB,GAAG,kDAAkD,CAAC;AAE9E,MAAM,UAAU,mBAAmB,CAAC,UAAkB;IACpD,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,iBAAiB,CAAC,CAAC;AAC3D,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,KAA6B;IACnE,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACzC,IAAI,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QACxC,MAAM,IAAI,iBAAiB,CACzB,wDAAwD,CACzD,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,UAAkB;IAElB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,mBAAmB,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,CAAC;QACpE,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAA2B,CAAC;QACzD,IAAI,MAAM,CAAC,aAAa,KAAK,+BAA+B,EAAE,CAAC;YAC7D,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IACE,KAAK,YAAY,KAAK;YACtB,MAAM,IAAI,KAAK;YACd,KAA+B,CAAC,IAAI,KAAK,QAAQ,EAClD,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,KAAK,YAAY,WAAW,EAAE,CAAC;YACjC,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,UAAkB,EAClB,KAA6B;IAE7B,uBAAuB,CAAC,KAAK,CAAC,CAAC;IAC/B,MAAM,QAAQ,GAAG,mBAAmB,CAAC,UAAU,CAAC,CAAC;IACjD,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzD,MAAM,SAAS,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAC3E,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,KAMvC;IACC,IAAI,KAAK,CAAC,KAAK,CAAC,OAAO,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC;QAC1C,MAAM,IAAI,iBAAiB,CACzB,uIAAuI,CACxI,CAAC;IACJ,CAAC;IACD,IAAI,KAAK,CAAC,KAAK,CAAC,WAAW,KAAK,KAAK,CAAC,WAAW,EAAE,CAAC;QAClD,MAAM,IAAI,iBAAiB,CACzB,yGAAyG,CAC1G,CAAC;IACJ,CAAC;IACD,IACE,KAAK,CAAC,KAAK,CAAC,mBAAmB,KAAK,KAAK,CAAC,mBAAmB;QAC7D,KAAK,CAAC,KAAK,CAAC,SAAS,KAAK,KAAK,CAAC,SAAS,EACzC,CAAC;QACD,MAAM,IAAI,iBAAiB,CACzB,gGAAgG,CACjG,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { OsvaClient } from "@osva-ai/sdk";
2
+ export declare function resolveAuthenticatedWorkspace(input: {
3
+ readonly client: OsvaClient;
4
+ readonly configuredWorkspaceId?: string;
5
+ }): Promise<string>;
6
+ //# sourceMappingURL=workspace-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace-context.d.ts","sourceRoot":"","sources":["../../src/project/workspace-context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAI/C,wBAAsB,6BAA6B,CAAC,KAAK,EAAE;IACzD,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,QAAQ,CAAC,qBAAqB,CAAC,EAAE,MAAM,CAAC;CACzC,GAAG,OAAO,CAAC,MAAM,CAAC,CA6BlB"}
@@ -0,0 +1,25 @@
1
+ import { ProjectConfigurationError } from "./errors.js";
2
+ export async function resolveAuthenticatedWorkspace(input) {
3
+ let context;
4
+ try {
5
+ context = await input.client.auth.getContext();
6
+ }
7
+ catch (error) {
8
+ const message = error instanceof Error
9
+ ? error.message
10
+ : "Could not resolve authenticated workspace.";
11
+ throw new ProjectConfigurationError(message);
12
+ }
13
+ const workspaceId = context.workspaceId.trim();
14
+ if (workspaceId.length === 0) {
15
+ throw new ProjectConfigurationError("Authenticated workspace id is empty.");
16
+ }
17
+ const configured = input.configuredWorkspaceId?.trim();
18
+ if (configured !== undefined &&
19
+ configured.length > 0 &&
20
+ configured !== workspaceId) {
21
+ throw new ProjectConfigurationError(`OSVA_WORKSPACE_ID (${configured}) does not match the workspace for OSVA_API_KEY (${workspaceId}).`);
22
+ }
23
+ return workspaceId;
24
+ }
25
+ //# sourceMappingURL=workspace-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace-context.js","sourceRoot":"","sources":["../../src/project/workspace-context.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAExD,MAAM,CAAC,KAAK,UAAU,6BAA6B,CAAC,KAGnD;IACC,IAAI,OAAO,CAAC;IACZ,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;IACjD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GACX,KAAK,YAAY,KAAK;YACpB,CAAC,CAAC,KAAK,CAAC,OAAO;YACf,CAAC,CAAC,4CAA4C,CAAC;QACnD,MAAM,IAAI,yBAAyB,CAAC,OAAO,CAAC,CAAC;IAC/C,CAAC;IAED,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;IAC/C,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,yBAAyB,CAAC,sCAAsC,CAAC,CAAC;IAC9E,CAAC;IAED,MAAM,UAAU,GAAG,KAAK,CAAC,qBAAqB,EAAE,IAAI,EAAE,CAAC;IACvD,IACE,UAAU,KAAK,SAAS;QACxB,UAAU,CAAC,MAAM,GAAG,CAAC;QACrB,UAAU,KAAK,WAAW,EAC1B,CAAC;QACD,MAAM,IAAI,yBAAyB,CACjC,sBAAsB,UAAU,oDAAoD,WAAW,IAAI,CACpG,CAAC;IACJ,CAAC;IAED,OAAO,WAAW,CAAC;AACrB,CAAC"}
@@ -0,0 +1,3 @@
1
+ /** Write all bytes to stdout and wait until the write completes (Windows-safe shutdown). */
2
+ export declare function writeStdout(text: string): Promise<void>;
3
+ //# sourceMappingURL=stdout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stdout.d.ts","sourceRoot":"","sources":["../src/stdout.ts"],"names":[],"mappings":"AAAA,4FAA4F;AAC5F,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAuBvD"}
package/dist/stdout.js ADDED
@@ -0,0 +1,27 @@
1
+ /** Write all bytes to stdout and wait until the write completes (Windows-safe shutdown). */
2
+ export function writeStdout(text) {
3
+ return new Promise((resolve, reject) => {
4
+ let settled = false;
5
+ const finish = (error) => {
6
+ if (settled) {
7
+ return;
8
+ }
9
+ settled = true;
10
+ if (error) {
11
+ reject(error);
12
+ return;
13
+ }
14
+ resolve();
15
+ };
16
+ try {
17
+ const accepted = process.stdout.write(text, "utf8", finish);
18
+ if (accepted) {
19
+ finish();
20
+ }
21
+ }
22
+ catch (error) {
23
+ finish(error instanceof Error ? error : new Error(String(error)));
24
+ }
25
+ });
26
+ }
27
+ //# sourceMappingURL=stdout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stdout.js","sourceRoot":"","sources":["../src/stdout.ts"],"names":[],"mappings":"AAAA,4FAA4F;AAC5F,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,MAAM,MAAM,GAAG,CAAC,KAAoB,EAAQ,EAAE;YAC5C,IAAI,OAAO,EAAE,CAAC;gBACZ,OAAO;YACT,CAAC;YACD,OAAO,GAAG,IAAI,CAAC;YACf,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,CAAC,KAAK,CAAC,CAAC;gBACd,OAAO;YACT,CAAC;YACD,OAAO,EAAE,CAAC;QACZ,CAAC,CAAC;QACF,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;YAC5D,IAAI,QAAQ,EAAE,CAAC;gBACb,MAAM,EAAE,CAAC;YACX,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACpE,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC"}