harnery 0.44.0 → 0.45.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.
- package/dist/commander.js +1 -0
- package/dist/commands/files.d.ts +2 -2
- package/dist/commands/files.d.ts.map +1 -1
- package/dist/commands/files.js +7 -4
- package/dist/commands/servers.d.ts.map +1 -1
- package/dist/commands/servers.js +11 -17
- package/dist/commands/tunnel.d.ts +15 -0
- package/dist/commands/tunnel.d.ts.map +1 -1
- package/dist/commands/tunnel.js +453 -153
- package/dist/commands/turn-rollback.d.ts +5 -0
- package/dist/commands/turn-rollback.d.ts.map +1 -0
- package/dist/commands/turn-rollback.js +76 -0
- package/dist/commands/workflow.d.ts.map +1 -1
- package/dist/commands/workflow.js +44 -0
- package/dist/core/agents/coord-client.d.ts.map +1 -1
- package/dist/core/agents/coord-client.js +18 -0
- package/dist/core/agents/state/proc-start.d.ts +5 -6
- package/dist/core/agents/state/proc-start.d.ts.map +1 -1
- package/dist/core/agents/state/proc-start.js +13 -9
- package/dist/core/agents/state/process-handle.d.ts +26 -0
- package/dist/core/agents/state/process-handle.d.ts.map +1 -0
- package/dist/core/agents/state/process-handle.js +121 -0
- package/dist/core/artifacts/delivery-card.d.ts.map +1 -1
- package/dist/core/artifacts/delivery-card.js +2 -1
- package/dist/core/resources/service.d.ts +2 -16
- package/dist/core/resources/service.d.ts.map +1 -1
- package/dist/core/resources/service.js +1 -78
- package/dist/core/semantic/service.d.ts.map +1 -1
- package/dist/core/semantic/service.js +2 -9
- package/dist/core/servers/index.d.ts +12 -11
- package/dist/core/servers/index.d.ts.map +1 -1
- package/dist/core/servers/index.js +194 -81
- package/dist/core/servers/tunnels.d.ts +5 -3
- package/dist/core/servers/tunnels.d.ts.map +1 -1
- package/dist/core/servers/tunnels.js +45 -2
- package/dist/core/supervisor/service.d.ts +2 -4
- package/dist/core/supervisor/service.d.ts.map +1 -1
- package/dist/core/turn-rollback/content.d.ts +53 -0
- package/dist/core/turn-rollback/content.d.ts.map +1 -0
- package/dist/core/turn-rollback/content.js +396 -0
- package/dist/core/turn-rollback/index.d.ts +72 -0
- package/dist/core/turn-rollback/index.d.ts.map +1 -0
- package/dist/core/turn-rollback/index.js +443 -0
- package/dist/core/workflow/index.d.ts +4 -2
- package/dist/core/workflow/index.d.ts.map +1 -1
- package/dist/core/workflow/index.js +2 -1
- package/dist/core/workflow/recovery-audit.d.ts +30 -0
- package/dist/core/workflow/recovery-audit.d.ts.map +1 -0
- package/dist/core/workflow/recovery-audit.js +116 -0
- package/dist/core/workflow/run-state.d.ts +19 -2
- package/dist/core/workflow/run-state.d.ts.map +1 -1
- package/dist/core/workflow/run-state.js +113 -8
- package/dist/core/workflow/workspaces/local-git.d.ts.map +1 -1
- package/dist/core/workflow/workspaces/local-git.js +70 -14
- package/dist/core/workflow/workspaces/reclaim.d.ts +6 -1
- package/dist/core/workflow/workspaces/reclaim.d.ts.map +1 -1
- package/dist/core/workflow/workspaces/recovery.d.ts +2 -0
- package/dist/core/workflow/workspaces/recovery.d.ts.map +1 -1
- package/dist/core/workflow/workspaces/recovery.js +24 -0
- package/dist/lib/tunnel/state.d.ts +13 -6
- package/dist/lib/tunnel/state.d.ts.map +1 -1
- package/dist/lib/tunnel/state.js +58 -12
- package/package.json +6 -1
- package/src/commander.ts +10 -0
- package/src/commands/files.ts +13 -5
- package/src/commands/servers.ts +12 -23
- package/src/commands/tunnel.ts +533 -166
- package/src/commands/turn-rollback.ts +111 -0
- package/src/commands/workflow.ts +59 -0
- package/src/core/agents/coord-client.ts +20 -0
- package/src/core/agents/state/proc-start.ts +14 -11
- package/src/core/agents/state/process-handle.ts +165 -0
- package/src/core/artifacts/delivery-card.ts +7 -1
- package/src/core/resources/service.ts +3 -88
- package/src/core/semantic/service.ts +2 -8
- package/src/core/servers/index.ts +234 -85
- package/src/core/servers/tunnels.ts +55 -3
- package/src/core/supervisor/service.ts +2 -3
- package/src/core/turn-rollback/content.ts +499 -0
- package/src/core/turn-rollback/index.ts +580 -0
- package/src/core/workflow/index.ts +12 -1
- package/src/core/workflow/recovery-audit.ts +181 -0
- package/src/core/workflow/run-state.ts +137 -8
- package/src/core/workflow/workspaces/local-git.ts +86 -15
- package/src/core/workflow/workspaces/reclaim.ts +4 -0
- package/src/core/workflow/workspaces/recovery.ts +23 -0
- package/src/lib/tunnel/state.ts +70 -15
package/dist/commander.js
CHANGED
|
@@ -202,6 +202,7 @@ function harneryCommandBundles({ emit, context, binName, }) {
|
|
|
202
202
|
],
|
|
203
203
|
load: async (program) => (await import("./commands/workflow.js")).registerWorkflowCommand(program, emit),
|
|
204
204
|
},
|
|
205
|
+
lazy("turn-rollback", "Capture and review exact turn paths before restoring owned content.", async (program) => (await import("./commands/turn-rollback.js")).registerTurnRollbackCommand(program, emit, context)),
|
|
205
206
|
lazy("work", "Track durable objectives across bounded workflow attempts.", async (program) => (await import("./commands/work.js")).registerWorkCommand(program, emit)),
|
|
206
207
|
lazy("governor", "Run a bounded specialist team over a durable-work dependency graph.", async (program) => (await import("./commands/governor.js")).registerGovernorCommand(program, emit)),
|
|
207
208
|
lazy("web", "Standalone read-only dashboard for harnery's coord state", async (program) => (await import("./commands/web.js")).registerWebCommand(program, emit)),
|
package/dist/commands/files.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { Command } from "commander";
|
|
2
2
|
import type { EmitContext, HarneryProgramContext } from "../commander.js";
|
|
3
|
-
import { type
|
|
3
|
+
import { type TunnelReadinessVerifier, type TunnelState } from "../lib/tunnel/state.js";
|
|
4
4
|
export { FILES_ORIGIN_HOST } from "../lib/local-file-url.js";
|
|
5
5
|
export type LocalFileUrlMode = "auto" | "raw" | "viewer";
|
|
6
6
|
export interface LocalFileUrlOptions {
|
|
@@ -45,6 +45,6 @@ export declare class TunnelLinkError extends Error {
|
|
|
45
45
|
* In both cases the tunnel's path scope must forward the request, or its gate
|
|
46
46
|
* would refuse the link, so a tunnel that does not cover the file is skipped.
|
|
47
47
|
*/
|
|
48
|
-
export declare function tunnelFileUrl(local: LocalFileUrl, port: number, states: TunnelState[],
|
|
48
|
+
export declare function tunnelFileUrl(local: LocalFileUrl, port: number, states: TunnelState[], verifier: TunnelReadinessVerifier): string;
|
|
49
49
|
export declare function registerFilesCommand(program: Command, emit: EmitContext, context?: HarneryProgramContext): void;
|
|
50
50
|
//# sourceMappingURL=files.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../../src/commands/files.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../../src/commands/files.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAa1E,OAAO,EAEL,KAAK,uBAAuB,EAC5B,KAAK,WAAW,EAGjB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE7D,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,CAAC;AAEzD,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,gBAAgB,CAAC;CACzB;AAED,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,OAAO,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;CACzC;AAED,MAAM,MAAM,sBAAsB,GAC9B,uBAAuB,GACvB,gCAAgC,GAChC,yBAAyB,CAAC;AAE9B,qBAAa,kBAAmB,SAAQ,KAAK;IAEzC,QAAQ,CAAC,IAAI,EAAE,sBAAsB;IAErC,QAAQ,CAAC,IAAI,EAAE,MAAM;gBAFZ,IAAI,EAAE,sBAAsB,EACrC,OAAO,EAAE,MAAM,EACN,IAAI,EAAE,MAAM;CAKxB;AAMD,MAAM,MAAM,kBAAkB,GAAG,CAC/B,KAAK,EAAE,MAAM,GAAG,GAAG,GAAG,OAAO,EAC7B,IAAI,CAAC,EAAE,WAAW,KACf,OAAO,CAAC,QAAQ,CAAC,CAAC;AAEvB;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,SAAS,GAAE,kBAA0B,GACpC,OAAO,CAAC,IAAI,CAAC,CAmDf;AAuCD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,mBAAmB,GAAG,YAAY,CAS1F;AAED,qBAAa,eAAgB,SAAQ,KAAK;IAGtC,QAAQ,CAAC,IAAI,EAAE,MAAM;gBADrB,OAAO,EAAE,MAAM,EACN,IAAI,EAAE,MAAM;CAKxB;AAUD;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,YAAY,EACnB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,WAAW,EAAE,EACrB,QAAQ,EAAE,uBAAuB,GAChC,MAAM,CA+BR;AAED,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,WAAW,EACjB,OAAO,CAAC,EAAE,qBAAqB,GAC9B,IAAI,CA4FN"}
|
package/dist/commands/files.js
CHANGED
|
@@ -2,10 +2,11 @@ import { realpathSync, statSync } from "node:fs";
|
|
|
2
2
|
import path from "node:path";
|
|
3
3
|
import { resolveCoordRoot } from "../core/agents/coord-client.js";
|
|
4
4
|
import { DEFAULT_WEB_PORT, resolveWebPort } from "../core/config.js";
|
|
5
|
+
import { createTunnelReadinessVerifier } from "../core/servers/index.js";
|
|
5
6
|
import { coordRootId, localCoordRootIdUrl } from "../lib/coord-root-id.js";
|
|
6
7
|
import { encodedRepoPath, encodeLinkSafeComponent, FILES_ORIGIN_HOST, localFilesOriginUrl, localFileViewerUrl, } from "../lib/local-file-url.js";
|
|
7
8
|
import { isPathAllowed } from "../lib/tunnel/path-scope.js";
|
|
8
|
-
import {
|
|
9
|
+
import { listStates, tunnelReadiness, tunnelTargetPort, } from "../lib/tunnel/state.js";
|
|
9
10
|
export { FILES_ORIGIN_HOST } from "../lib/local-file-url.js";
|
|
10
11
|
export class DashboardRootError extends Error {
|
|
11
12
|
code;
|
|
@@ -125,8 +126,8 @@ function newestFirst(states) {
|
|
|
125
126
|
* In both cases the tunnel's path scope must forward the request, or its gate
|
|
126
127
|
* would refuse the link, so a tunnel that does not cover the file is skipped.
|
|
127
128
|
*/
|
|
128
|
-
export function tunnelFileUrl(local, port, states,
|
|
129
|
-
const live = states.filter((state) => tunnelTargetPort(state) === port &&
|
|
129
|
+
export function tunnelFileUrl(local, port, states, verifier) {
|
|
130
|
+
const live = states.filter((state) => tunnelTargetPort(state) === port && tunnelReadiness(state, verifier) === "ready");
|
|
130
131
|
if (local.mode === "raw") {
|
|
131
132
|
const path = `/${encodedRepoPath(local.relPath)}`;
|
|
132
133
|
const tunnel = newestFirst(live).find((state) => vhostName(state.vhost) === FILES_ORIGIN_HOST && isPathAllowed(path, state.allow_paths));
|
|
@@ -193,7 +194,9 @@ export function registerFilesCommand(program, emit, context) {
|
|
|
193
194
|
});
|
|
194
195
|
if (opts.verify !== false)
|
|
195
196
|
await verifyDashboardRoot(coordRoot, port);
|
|
196
|
-
const url = opts.tunnel
|
|
197
|
+
const url = opts.tunnel
|
|
198
|
+
? tunnelFileUrl(result, port, listStates(coordRoot), createTunnelReadinessVerifier({ coordRoot }))
|
|
199
|
+
: result.url;
|
|
197
200
|
emit.text(`${url}\n`);
|
|
198
201
|
}
|
|
199
202
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"servers.d.ts","sourceRoot":"","sources":["../../src/commands/servers.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"servers.d.ts","sourceRoot":"","sources":["../../src/commands/servers.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAG1E,OAAO,EAWL,KAAK,aAAa,EAMnB,MAAM,0BAA0B,CAAC;AAElC,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,WAAW,EACjB,OAAO,CAAC,EAAE,qBAAqB,GAC9B,IAAI,CA4YN;AA8BD,4DAA4D;AAC5D,wBAAgB,YAAY,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAmDvE"}
|
package/dist/commands/servers.js
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { existsSync, readFileSync, statSync } from "node:fs";
|
|
2
|
-
import { hostname } from "node:os";
|
|
3
2
|
import { resolveCoordRoot } from "../core/agents/coord-client.js";
|
|
4
3
|
import { resolveBinName, serverGcConfig } from "../core/config.js";
|
|
5
4
|
import { adoptServer, allocateServerPort, isValidServerId, listServers, planServerGc, readServer, registerServer, SERVER_DEFAULT_IDLE_HOURS, SERVER_DEFAULT_OWNER_STALE_HOURS, stopServer, touchServer, unregisterServer, } from "../core/servers/index.js";
|
|
@@ -74,18 +73,13 @@ export function registerServersCommand(program, emit, context) {
|
|
|
74
73
|
const preview = Boolean(options.type) && !options.yes;
|
|
75
74
|
const results = [];
|
|
76
75
|
for (const stray of strays) {
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
id: `pid-${stray.pid}`,
|
|
80
|
-
kind: "session",
|
|
76
|
+
const receipt = adoptServer(stray.pid, {
|
|
77
|
+
coordRoot,
|
|
81
78
|
type: "unregistered",
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
started_at: new Date().toISOString(),
|
|
87
|
-
registered_at: new Date().toISOString(),
|
|
88
|
-
}, { coordRoot }));
|
|
79
|
+
owner: "none",
|
|
80
|
+
dependencies: { listServers: () => report },
|
|
81
|
+
});
|
|
82
|
+
results.push(await stopServer(receipt, { coordRoot }));
|
|
89
83
|
}
|
|
90
84
|
for (const view of selected) {
|
|
91
85
|
if (preview && !ids.includes(view.record.id))
|
|
@@ -305,14 +299,14 @@ export function registerServersCommand(program, emit, context) {
|
|
|
305
299
|
});
|
|
306
300
|
cmd
|
|
307
301
|
.command("unregister <id>")
|
|
308
|
-
.description("Remove
|
|
302
|
+
.description("Remove the exact observed server registration (optionally require --pid)")
|
|
309
303
|
.option("--pid <pid>", "Only remove when the record names this pid")
|
|
310
304
|
.action((id, options) => {
|
|
311
305
|
try {
|
|
312
|
-
const
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
});
|
|
306
|
+
const coordRoot = root();
|
|
307
|
+
const record = readServer(id, { coordRoot });
|
|
308
|
+
const matchesPid = !options.pid || record?.pid === integer(options.pid, "--pid");
|
|
309
|
+
const removed = !!record && matchesPid && unregisterServer(record, { coordRoot });
|
|
316
310
|
emit.config({ format: "json" });
|
|
317
311
|
emit.data({ id, removed });
|
|
318
312
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { Command } from "commander";
|
|
2
2
|
import type { EmitContext, HarneryProgramContext } from "../commander.js";
|
|
3
|
+
import { type ServerRecord } from "../core/servers/index.js";
|
|
3
4
|
import { type DetectOptions, detectPublicAddresses } from "../lib/tunnel/current-address.js";
|
|
4
5
|
import { type TunnelProvider, type TunnelState } from "../lib/tunnel/state.js";
|
|
5
6
|
export declare function tunnelLogDestinations(name: string, provider: TunnelProvider, env?: NodeJS.ProcessEnv, root?: string): {
|
|
@@ -42,6 +43,20 @@ export declare function resolveGateLaunch(i: GateLaunchInputs): GateLaunch | nul
|
|
|
42
43
|
* `tunnel log-worker` task instead.
|
|
43
44
|
*/
|
|
44
45
|
export declare function resolveWorkerLaunch(i: GateLaunchInputs): GateLaunch | undefined;
|
|
46
|
+
export interface TunnelRoute {
|
|
47
|
+
path: string;
|
|
48
|
+
httpsPort: number;
|
|
49
|
+
}
|
|
50
|
+
/** Serialize the instance and every shared provider route before any external effect. */
|
|
51
|
+
export declare function withTunnelLifecycleCustody<T>(name: string, requested: TunnelRoute | null, effect: () => PromiseLike<T>): Promise<T>;
|
|
52
|
+
export declare function withTunnelLifecycleCustody<T>(name: string, requested: TunnelRoute | null, effect: () => T): T;
|
|
53
|
+
/** Retain a refused launch without overwriting another launch's canonical state. */
|
|
54
|
+
export declare function recordRefusedTunnelLaunch(state: TunnelState): string;
|
|
55
|
+
/** A canonical state frame may be published only by its current registration. */
|
|
56
|
+
export declare function publishTunnelState(state: TunnelState, receipt: ServerRecord): void;
|
|
57
|
+
/** Retain pending route intent before asking the provider to change external state. */
|
|
58
|
+
export declare function beginTailscaleRoute<T>(state: TunnelState, receipt: ServerRecord, effect: () => T): T;
|
|
59
|
+
/** Unknown saved identities retain state and never authorize a signal. */
|
|
45
60
|
export declare function downOne(name: string, killed: Set<number>): number;
|
|
46
61
|
/**
|
|
47
62
|
* Restart ONE instance's gate in place, deliberately leaving the provider
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tunnel.d.ts","sourceRoot":"","sources":["../../src/commands/tunnel.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"tunnel.d.ts","sourceRoot":"","sources":["../../src/commands/tunnel.ts"],"names":[],"mappings":"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"}
|