inhuman 0.1.0 → 0.3.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 (91) hide show
  1. package/README.md +49 -0
  2. package/bin/inhuman.mjs +2 -20
  3. package/dist/bin.d.ts +6 -0
  4. package/dist/bin.d.ts.map +1 -0
  5. package/dist/bin.js +16 -0
  6. package/dist/bin.js.map +1 -0
  7. package/dist/cli/blobs-command.d.ts +31 -0
  8. package/dist/cli/blobs-command.d.ts.map +1 -0
  9. package/dist/cli/blobs-command.js +184 -0
  10. package/dist/cli/blobs-command.js.map +1 -0
  11. package/dist/cli/browser.d.ts +3 -0
  12. package/dist/cli/browser.d.ts.map +1 -0
  13. package/dist/cli/browser.js +10 -0
  14. package/dist/cli/browser.js.map +1 -0
  15. package/dist/cli/completion-command.d.ts +15 -0
  16. package/dist/cli/completion-command.d.ts.map +1 -0
  17. package/dist/cli/completion-command.js +201 -0
  18. package/dist/cli/completion-command.js.map +1 -0
  19. package/dist/cli/context.d.ts +23 -0
  20. package/dist/cli/context.d.ts.map +1 -0
  21. package/dist/cli/context.js +67 -0
  22. package/dist/cli/context.js.map +1 -0
  23. package/dist/cli/daemon.d.ts +22 -0
  24. package/dist/cli/daemon.d.ts.map +1 -0
  25. package/dist/cli/daemon.js +61 -0
  26. package/dist/cli/daemon.js.map +1 -0
  27. package/dist/cli/eval-command.d.ts +16 -0
  28. package/dist/cli/eval-command.d.ts.map +1 -0
  29. package/dist/cli/eval-command.js +114 -0
  30. package/dist/cli/eval-command.js.map +1 -0
  31. package/dist/cli/install-command.d.ts +8 -0
  32. package/dist/cli/install-command.d.ts.map +1 -0
  33. package/dist/cli/install-command.js +25 -0
  34. package/dist/cli/install-command.js.map +1 -0
  35. package/dist/cli/kernel-client.d.ts +3 -0
  36. package/dist/cli/kernel-client.d.ts.map +1 -0
  37. package/dist/cli/kernel-client.js +12 -0
  38. package/dist/cli/kernel-client.js.map +1 -0
  39. package/dist/cli/mcp-commands.d.ts +61 -0
  40. package/dist/cli/mcp-commands.d.ts.map +1 -0
  41. package/dist/cli/mcp-commands.js +139 -0
  42. package/dist/cli/mcp-commands.js.map +1 -0
  43. package/dist/cli/mcp.d.ts +25 -0
  44. package/dist/cli/mcp.d.ts.map +1 -0
  45. package/dist/cli/mcp.js +261 -0
  46. package/dist/cli/mcp.js.map +1 -0
  47. package/dist/cli/register.d.ts +12 -0
  48. package/dist/cli/register.d.ts.map +1 -0
  49. package/dist/cli/register.js +133 -0
  50. package/dist/cli/register.js.map +1 -0
  51. package/dist/cli/remote-commands.d.ts +49 -0
  52. package/dist/cli/remote-commands.d.ts.map +1 -0
  53. package/dist/cli/remote-commands.js +184 -0
  54. package/dist/cli/remote-commands.js.map +1 -0
  55. package/dist/cli/resume-complete.d.ts +24 -0
  56. package/dist/cli/resume-complete.d.ts.map +1 -0
  57. package/dist/cli/resume-complete.js +35 -0
  58. package/dist/cli/resume-complete.js.map +1 -0
  59. package/dist/cli/shell-import.d.ts +22 -0
  60. package/dist/cli/shell-import.d.ts.map +1 -0
  61. package/dist/cli/shell-import.js +32 -0
  62. package/dist/cli/shell-import.js.map +1 -0
  63. package/dist/cli/tui-command.d.ts +11 -0
  64. package/dist/cli/tui-command.d.ts.map +1 -0
  65. package/dist/cli/tui-command.js +41 -0
  66. package/dist/cli/tui-command.js.map +1 -0
  67. package/dist/cli/web-commands.d.ts +54 -0
  68. package/dist/cli/web-commands.d.ts.map +1 -0
  69. package/dist/cli/web-commands.js +106 -0
  70. package/dist/cli/web-commands.js.map +1 -0
  71. package/dist/cli/web-door-command.d.ts +11 -0
  72. package/dist/cli/web-door-command.d.ts.map +1 -0
  73. package/dist/cli/web-door-command.js +151 -0
  74. package/dist/cli/web-door-command.js.map +1 -0
  75. package/dist/cli/web-door.d.ts +25 -0
  76. package/dist/cli/web-door.d.ts.map +1 -0
  77. package/dist/cli/web-door.js +116 -0
  78. package/dist/cli/web-door.js.map +1 -0
  79. package/dist/cli/web-static.d.ts +8 -0
  80. package/dist/cli/web-static.d.ts.map +1 -0
  81. package/dist/cli/web-static.js +23 -0
  82. package/dist/cli/web-static.js.map +1 -0
  83. package/dist/eval/progress.d.ts +8 -0
  84. package/dist/eval/progress.d.ts.map +1 -0
  85. package/dist/eval/progress.js +64 -0
  86. package/dist/eval/progress.js.map +1 -0
  87. package/dist/eval/run.d.ts +20 -0
  88. package/dist/eval/run.d.ts.map +1 -0
  89. package/dist/eval/run.js +301 -0
  90. package/dist/eval/run.js.map +1 -0
  91. package/package.json +42 -5
@@ -0,0 +1,301 @@
1
+ var __addDisposableResource = (this && this.__addDisposableResource) || function (env, value, async) {
2
+ if (value !== null && value !== void 0) {
3
+ if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected.");
4
+ var dispose, inner;
5
+ if (async) {
6
+ if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined.");
7
+ dispose = value[Symbol.asyncDispose];
8
+ }
9
+ if (dispose === void 0) {
10
+ if (!Symbol.dispose) throw new TypeError("Symbol.dispose is not defined.");
11
+ dispose = value[Symbol.dispose];
12
+ if (async) inner = dispose;
13
+ }
14
+ if (typeof dispose !== "function") throw new TypeError("Object not disposable.");
15
+ if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };
16
+ env.stack.push({ value: value, dispose: dispose, async: async });
17
+ }
18
+ else if (async) {
19
+ env.stack.push({ async: true });
20
+ }
21
+ return value;
22
+ };
23
+ var __disposeResources = (this && this.__disposeResources) || (function (SuppressedError) {
24
+ return function (env) {
25
+ function fail(e) {
26
+ env.error = env.hasError ? new SuppressedError(e, env.error, "An error was suppressed during disposal.") : e;
27
+ env.hasError = true;
28
+ }
29
+ var r, s = 0;
30
+ function next() {
31
+ while (r = env.stack.pop()) {
32
+ try {
33
+ if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);
34
+ if (r.dispose) {
35
+ var result = r.dispose.call(r.value);
36
+ if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });
37
+ }
38
+ else s |= 1;
39
+ }
40
+ catch (e) {
41
+ fail(e);
42
+ }
43
+ }
44
+ if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();
45
+ if (env.hasError) throw env.error;
46
+ }
47
+ return next();
48
+ };
49
+ })(typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
50
+ var e = new Error(message);
51
+ return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
52
+ });
53
+ /**
54
+ * Unattended eval client. Submits one request, watches that turn, never
55
+ * writes `approved`. Authorization stays in the daemon.
56
+ */
57
+ import { randomUUID } from "node:crypto";
58
+ import { toSExprString } from "@here.build/arrival-serializer";
59
+ import { isRpcContractError } from "@inhuman.tools/harness-contract";
60
+ import { evalProgramOf, findEvalTurnByRequestId, ProgrammaticJob, reactChunks, tapeCompletion, ToolCallJob, } from "@inhuman.tools/harness-model";
61
+ import { Client, ObservableAbortSignal } from "@inhuman.tools/harness-sdk";
62
+ import { applyResolvedAgent, hasCliAgentFlags, resolveCliAgent, stampTermContinue, } from "@inhuman.tools/harness-sdk/launch";
63
+ import { formatIdentity, receiptPlainText, workCellFace } from "@inhuman.tools/harness-sdk/text";
64
+ import { autorun, when } from "mobx";
65
+ import { visitEvalProgress } from "./progress.js";
66
+ export async function runEval(opts) {
67
+ const requestId = randomUUID();
68
+ const cancel = new AbortController();
69
+ const abandon = new AbortController();
70
+ const abandoned = ObservableAbortSignal.from(abandon.signal);
71
+ const emitted = new Set();
72
+ let turnId;
73
+ let session;
74
+ let cancelAcked = false;
75
+ let cancelSending = false;
76
+ let stopWatch;
77
+ let disposeAbandon;
78
+ let leaving = false;
79
+ const emit = (work, indent) => {
80
+ const sealed = work.completed || (work instanceof ToolCallJob && work.receiptJson != null && work.receiptJson !== "");
81
+ if (!sealed || emitted.has(work.uuid))
82
+ return;
83
+ emitted.add(work.uuid);
84
+ const face = workCellFace(work, indent ? "inner" : "cell", indent);
85
+ const pad = indent ? " " : "";
86
+ const width = Math.max(8, (opts.streams.stderr.columns || opts.streams.stdout.columns || 80) - pad.length);
87
+ const line = face.pretty
88
+ ? face.status === ""
89
+ ? face.object
90
+ : `${face.object} ${face.status}`
91
+ : formatIdentity({ name: face.name, object: face.object, status: face.status }, width, face.pathShaped);
92
+ const parts = [`${pad}${line}`];
93
+ if (face.pretty && face.caption !== "")
94
+ parts.push(`${pad}${face.caption}`);
95
+ if (face.receipt.kind === "diff") {
96
+ parts.push(`${pad}${face.receipt.path}`, `${pad}${face.receipt.old}`, `${pad}${face.receipt.new}`);
97
+ }
98
+ else {
99
+ const body = receiptPlainText(face.receipt);
100
+ if (body !== "")
101
+ parts.push(`${pad}${body}`);
102
+ }
103
+ opts.streams.stderr.write(`${parts.join("\n")}\n`);
104
+ };
105
+ const flushCancel = () => {
106
+ const pump = session;
107
+ if (leaving || cancelAcked || cancelSending || pump == null || pump.lost || !cancel.signal.aborted) {
108
+ return;
109
+ }
110
+ cancelSending = true;
111
+ const target = turnId == null ? { requestId } : { turnId };
112
+ void pump.request("turn/cancel", target).then(() => {
113
+ cancelAcked = true;
114
+ cancelSending = false;
115
+ return undefined;
116
+ }, (error) => {
117
+ cancelSending = false;
118
+ if (leaving || pump.lost || isRpcContractError(error) || abandoned.aborted)
119
+ return undefined;
120
+ flushCancel();
121
+ return undefined;
122
+ });
123
+ };
124
+ const onSignal = () => {
125
+ if (!abandoned.aborted)
126
+ abandon.abort();
127
+ cancel.abort();
128
+ // Exit without waiting on the socket. A blocked tool keeps the daemon from
129
+ // reading, and the send itself then never returns.
130
+ opts.streams.stderr.write("cancellation unconfirmed; execution may still be running\n");
131
+ process.exit(1);
132
+ };
133
+ process.on("SIGINT", onSignal);
134
+ process.on("SIGTERM", onSignal);
135
+ try {
136
+ await opts.ensure(opts.kernel);
137
+ let started;
138
+ if (hasCliAgentFlags(opts.agent ?? {})) {
139
+ const env_1 = { stack: [], error: void 0, hasError: false };
140
+ try {
141
+ const handle = __addDisposableResource(env_1, await Client.kernel(opts.kernel), true);
142
+ const resolved = await resolveCliAgent(handle, opts.agent ?? {});
143
+ if (!resolved.ok) {
144
+ opts.streams.writeErr(resolved.error);
145
+ return 1;
146
+ }
147
+ started = await Client.start(opts.kernel, opts.project);
148
+ session = started;
149
+ await applyResolvedAgent((method, params) => started.request(method, params), resolved.agent);
150
+ }
151
+ catch (e_1) {
152
+ env_1.error = e_1;
153
+ env_1.hasError = true;
154
+ }
155
+ finally {
156
+ const result_1 = __disposeResources(env_1);
157
+ if (result_1)
158
+ await result_1;
159
+ }
160
+ }
161
+ else {
162
+ started = await Client.start(opts.kernel, opts.project);
163
+ session = started;
164
+ }
165
+ await stampTermContinue((method, params) => started.kernelRequest(method, params), process.env, started.sessionRoot);
166
+ opts.streams.stderr.write(`connect later with --resume ${started.sessionId}\n`);
167
+ stopWatch = autorun(() => {
168
+ const turn = findEvalTurnByRequestId(started.sessionRoot, requestId);
169
+ if (turn == null)
170
+ return;
171
+ for (const chunk of reactChunks(turn)) {
172
+ const pew = tapeCompletion(chunk);
173
+ if (pew != null) {
174
+ const text = pew.responseText.trim();
175
+ if (!pew.isDone || text === "" || emitted.has(pew.uuid))
176
+ continue;
177
+ emitted.add(pew.uuid);
178
+ opts.streams.stderr.write(`${text}\n`);
179
+ continue;
180
+ }
181
+ if (chunk instanceof ProgrammaticJob) {
182
+ visitEvalProgress(chunk, (id, line) => {
183
+ if (emitted.has(id))
184
+ return;
185
+ emitted.add(id);
186
+ opts.streams.stderr.write(`${line}\n`);
187
+ });
188
+ for (const inner of chunk.toolCalls)
189
+ emit(inner, true);
190
+ emit(chunk, false);
191
+ continue;
192
+ }
193
+ if (chunk instanceof ToolCallJob)
194
+ emit(chunk, false);
195
+ }
196
+ });
197
+ const evalTurnFailed = () => {
198
+ const turn = findEvalTurnByRequestId(started.sessionRoot, requestId);
199
+ if (turn == null)
200
+ return false;
201
+ for (const chunk of reactChunks(turn)) {
202
+ if (chunk instanceof ToolCallJob && chunk.classifierAbstain != null && !chunk.completed)
203
+ return true;
204
+ if (chunk instanceof ProgrammaticJob &&
205
+ chunk.toolCalls.some((inner) => inner.classifierAbstain != null && !inner.completed))
206
+ return true;
207
+ }
208
+ return false;
209
+ };
210
+ if (cancel.signal.aborted) {
211
+ flushCancel();
212
+ return 1;
213
+ }
214
+ const result = await Promise.race([
215
+ started.request("eval", {
216
+ requestId,
217
+ expr: opts.expr,
218
+ policy: opts.policy,
219
+ ...(opts.source != null ? { source: opts.source } : {}),
220
+ ...(opts.sourcePath != null ? { sourcePath: opts.sourcePath } : {}),
221
+ }),
222
+ new Promise((resolve) => {
223
+ disposeAbandon = when(() => abandoned.aborted, () => resolve());
224
+ }),
225
+ ]);
226
+ if (abandoned.aborted || cancel.signal.aborted)
227
+ return 1;
228
+ const admitted = result;
229
+ if (admitted.ok !== true) {
230
+ if (!cancel.signal.aborted)
231
+ opts.streams.writeErr(admitted.text ?? admitted.code ?? "eval failed");
232
+ return 1;
233
+ }
234
+ turnId = admitted.turnId;
235
+ if (cancel.signal.aborted)
236
+ flushCancel();
237
+ await when(() => {
238
+ if (abandoned.aborted)
239
+ return true;
240
+ const turn = findEvalTurnByRequestId(started.sessionRoot, requestId);
241
+ if (turn == null)
242
+ return false;
243
+ if (turn.cancelRequested || turn.cancelled)
244
+ return true;
245
+ return evalProgramOf(turn)?.completed === true || evalTurnFailed();
246
+ });
247
+ if (cancel.signal.aborted || abandoned.aborted)
248
+ return 1;
249
+ const turn = findEvalTurnByRequestId(started.sessionRoot, requestId);
250
+ if (turn == null)
251
+ return 1;
252
+ const snap = evalProgramOf(turn)?.outcomeSnap;
253
+ if (snap == null || !snap.ok || !("value" in snap) || !Array.isArray(snap.value))
254
+ return 1;
255
+ if (opts.format === "json") {
256
+ if (typeof snap.jsonError === "string" && snap.jsonError !== "") {
257
+ opts.streams.writeErr(snap.jsonError);
258
+ return 1;
259
+ }
260
+ if ("json" in snap) {
261
+ opts.streams.stdout.write(`${JSON.stringify(snap.json)}\n`);
262
+ return 0;
263
+ }
264
+ }
265
+ if (snap.value.length === 0)
266
+ return 0;
267
+ const last = snap.value.at(-1);
268
+ const line = opts.format === "json"
269
+ ? `${JSON.stringify(last)}\n`
270
+ : typeof last === "string"
271
+ ? `${last}\n`
272
+ : `${toSExprString(last)}\n`;
273
+ opts.streams.stdout.write(line);
274
+ return 0;
275
+ }
276
+ catch (error) {
277
+ // A lost daemon cannot acknowledge cancellation. Keep the process around
278
+ // for the explicit second interrupt so the caller gets the unconfirmed
279
+ // cancellation warning instead of silently exiting on socket loss.
280
+ if (session?.lost === true || (error instanceof Error && error.message === "rpc: socket closed")) {
281
+ if (!abandoned.aborted)
282
+ await when(() => abandoned.aborted);
283
+ return 1;
284
+ }
285
+ if (cancel.signal.aborted || abandoned.aborted)
286
+ return 1;
287
+ opts.streams.writeErr(error);
288
+ return 1;
289
+ }
290
+ finally {
291
+ leaving = true;
292
+ disposeAbandon?.();
293
+ process.off("SIGINT", onSignal);
294
+ process.off("SIGTERM", onSignal);
295
+ stopWatch?.();
296
+ if (session != null && (session.lost || (!cancel.signal.aborted && !abandoned.aborted))) {
297
+ await session[Symbol.asyncDispose]();
298
+ }
299
+ }
300
+ }
301
+ //# sourceMappingURL=run.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/eval/run.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "inhuman",
3
- "version": "0.1.0",
4
- "description": "npx inhuman: start the inhuman harness daemon if needed and open its web client.",
3
+ "version": "0.3.0",
4
+ "description": "inhuman: the agent harness CLI — TUI, web client, daemon, remote access.",
5
5
  "keywords": [
6
6
  "inhuman",
7
7
  "harness",
@@ -24,7 +24,11 @@
24
24
  "inhuman": "./bin/inhuman.mjs"
25
25
  },
26
26
  "files": [
27
- "bin"
27
+ "bin",
28
+ "dist"
29
+ ],
30
+ "browserslist": [
31
+ "node >= 22"
28
32
  ],
29
33
  "publishConfig": {
30
34
  "access": "public"
@@ -33,7 +37,40 @@
33
37
  "node": ">=22"
34
38
  },
35
39
  "dependencies": {
36
- "@inhuman.tools/harness-cli": "^0.1.0",
37
- "@inhuman.tools/harness-web-app": "^0.1.0"
40
+ "@here.build/arrival-serializer": "^0.10.2",
41
+ "clipanion": "4.0.0-rc.4",
42
+ "mobx": "6.16.1",
43
+ "typanion": "3.14.0",
44
+ "@inhuman.tools/harness-sdk": "^0.2.1",
45
+ "@inhuman.tools/harness-tui": "^0.3.0",
46
+ "@inhuman.tools/harness": "^0.3.0",
47
+ "@inhuman.tools/harness-contract": "^0.2.1",
48
+ "@inhuman.tools/harness-web-app": "^0.3.0",
49
+ "@inhuman.tools/harness-diagnostics": "^0.2.0",
50
+ "@inhuman.tools/harness-model": "^0.3.0"
51
+ },
52
+ "devDependencies": {
53
+ "@here.build/arrival": "^0.10.2",
54
+ "@here.build/plexus": "^0.9.6",
55
+ "@types/node": "^24.19.2",
56
+ "eslint": "10.13.0",
57
+ "typescript": "6.0.3",
58
+ "vitest": "5.0.5",
59
+ "y-websocket": "3.1.0",
60
+ "yjs": "13.6.33",
61
+ "@-internal-/eslint-configs": "0.0.0",
62
+ "@inhuman.tools/harness-commons": "^0.3.0",
63
+ "@inhuman.tools/harness-peer": "^0.2.1",
64
+ "@inhuman.tools/plexus-expectations": "^0.3.0"
65
+ },
66
+ "scripts": {
67
+ "build": "tsc -p tsconfig.build.json",
68
+ "dev": "tsc -p tsconfig.build.json && env DEBUG='*' node dist/bin.js --restart-daemon",
69
+ "dev:no-restart": "tsc -p tsconfig.build.json && env DEBUG='*' node dist/bin.js",
70
+ "lint": "eslint .",
71
+ "lint:fix": "eslint . --fix",
72
+ "typecheck": "tsc -p tsconfig.json --noEmit",
73
+ "test": "tsc -p tsconfig.json --noEmit && vitest run --project logic",
74
+ "test:process": "vitest run --project process"
38
75
  }
39
76
  }