harnery 0.46.0 → 0.47.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 (187) hide show
  1. package/README.md +24 -0
  2. package/bin/README.md +10 -0
  3. package/bin/agent-coord.mjs +3 -0
  4. package/bin/agent-hook.mjs +3 -0
  5. package/bin/harn.mjs +3 -0
  6. package/bin/run.mjs +43 -0
  7. package/dist/commander.d.ts +18 -6
  8. package/dist/commander.d.ts.map +1 -1
  9. package/dist/commander.js +74 -2
  10. package/dist/commands/agents.d.ts +25 -0
  11. package/dist/commands/agents.d.ts.map +1 -1
  12. package/dist/commands/agents.js +70 -27
  13. package/dist/commands/autoupdate.d.ts +12 -0
  14. package/dist/commands/autoupdate.d.ts.map +1 -0
  15. package/dist/commands/autoupdate.js +190 -0
  16. package/dist/commands/computer.d.ts +45 -0
  17. package/dist/commands/computer.d.ts.map +1 -0
  18. package/dist/commands/computer.js +509 -0
  19. package/dist/commands/docs.js +3 -1
  20. package/dist/commands/fetch.js +11 -1
  21. package/dist/commands/grep.d.ts +72 -0
  22. package/dist/commands/grep.d.ts.map +1 -1
  23. package/dist/commands/grep.js +200 -47
  24. package/dist/commands/init.d.ts.map +1 -1
  25. package/dist/commands/init.js +15 -9
  26. package/dist/commands/rm.js +2 -2
  27. package/dist/commands/web.d.ts.map +1 -1
  28. package/dist/commands/web.js +2 -0
  29. package/dist/core/agents/canonical-emit.d.ts.map +1 -1
  30. package/dist/core/agents/canonical-emit.js +2 -3
  31. package/dist/core/agents/coord-bin.d.ts +3 -0
  32. package/dist/core/agents/coord-bin.d.ts.map +1 -1
  33. package/dist/core/agents/coord-bin.js +6 -0
  34. package/dist/core/agents/coord-client.d.ts.map +1 -1
  35. package/dist/core/agents/coord-client.js +6 -2
  36. package/dist/core/agents/render/prompt-context.d.ts +55 -7
  37. package/dist/core/agents/render/prompt-context.d.ts.map +1 -1
  38. package/dist/core/agents/render/prompt-context.js +122 -48
  39. package/dist/core/agents/rules/claim-conflict.d.ts.map +1 -1
  40. package/dist/core/agents/rules/claim-conflict.js +36 -16
  41. package/dist/core/agents/rules/stop-hook.d.ts +6 -0
  42. package/dist/core/agents/rules/stop-hook.d.ts.map +1 -1
  43. package/dist/core/agents/rules/stop-hook.js +20 -1
  44. package/dist/core/agents/state/proc-start.d.ts +3 -1
  45. package/dist/core/agents/state/proc-start.d.ts.map +1 -1
  46. package/dist/core/agents/state/proc-start.js +26 -4
  47. package/dist/core/autoupdate/engine.d.ts +97 -0
  48. package/dist/core/autoupdate/engine.d.ts.map +1 -0
  49. package/dist/core/autoupdate/engine.js +548 -0
  50. package/dist/core/autoupdate/fingerprint.d.ts +16 -0
  51. package/dist/core/autoupdate/fingerprint.d.ts.map +1 -0
  52. package/dist/core/autoupdate/fingerprint.js +73 -0
  53. package/dist/core/autoupdate/git.d.ts +30 -0
  54. package/dist/core/autoupdate/git.d.ts.map +1 -0
  55. package/dist/core/autoupdate/git.js +82 -0
  56. package/dist/core/autoupdate/index.d.ts +6 -0
  57. package/dist/core/autoupdate/index.d.ts.map +1 -0
  58. package/dist/core/autoupdate/index.js +4 -0
  59. package/dist/core/autoupdate/state.d.ts +59 -0
  60. package/dist/core/autoupdate/state.d.ts.map +1 -0
  61. package/dist/core/autoupdate/state.js +214 -0
  62. package/dist/core/autoupdate/types.d.ts +113 -0
  63. package/dist/core/autoupdate/types.d.ts.map +1 -0
  64. package/dist/core/autoupdate/types.js +35 -0
  65. package/dist/core/config.d.ts +53 -1
  66. package/dist/core/config.d.ts.map +1 -1
  67. package/dist/core/config.js +114 -1
  68. package/dist/core/events/v3/bootstrap.js +1 -0
  69. package/dist/core/events/v3/runtime-build.d.ts.map +1 -1
  70. package/dist/core/events/v3/runtime-build.js +1 -0
  71. package/dist/core/hooks/adapter/wiring.d.ts +12 -2
  72. package/dist/core/hooks/adapter/wiring.d.ts.map +1 -1
  73. package/dist/core/hooks/adapter/wiring.js +38 -8
  74. package/dist/core/hooks/autoupdate-cue.d.ts +29 -0
  75. package/dist/core/hooks/autoupdate-cue.d.ts.map +1 -0
  76. package/dist/core/hooks/autoupdate-cue.js +53 -0
  77. package/dist/core/hooks/cli.js +52 -4
  78. package/dist/core/hooks/effects/index.js +4 -4
  79. package/dist/core/hooks/resolve/coord-root.js +1 -0
  80. package/dist/core/hooks/resolve/transcript.d.ts +12 -0
  81. package/dist/core/hooks/resolve/transcript.d.ts.map +1 -1
  82. package/dist/core/hooks/resolve/transcript.js +54 -0
  83. package/dist/core/semantic/contract.d.ts +3 -3
  84. package/dist/core/semantic/service.d.ts.map +1 -1
  85. package/dist/core/semantic/service.js +4 -2
  86. package/dist/core/storage/modes.d.ts +1 -1
  87. package/dist/core/storage/modes.d.ts.map +1 -1
  88. package/dist/core/storage/modes.js +5 -1
  89. package/dist/core/workflow/durable-record.d.ts +2 -0
  90. package/dist/core/workflow/durable-record.d.ts.map +1 -1
  91. package/dist/core/workflow/durable-record.js +13 -1
  92. package/dist/core/workflow/engine.js +4 -0
  93. package/dist/core/workflow/spawn-claude.d.ts +7 -0
  94. package/dist/core/workflow/spawn-claude.d.ts.map +1 -1
  95. package/dist/core/workflow/spawn-claude.js +16 -4
  96. package/dist/core/workflow/specialists.d.ts.map +1 -1
  97. package/dist/core/workflow/specialists.js +1 -0
  98. package/dist/core/workflow/types.d.ts +10 -0
  99. package/dist/core/workflow/types.d.ts.map +1 -1
  100. package/dist/core/workflow/workspaces/leases.d.ts.map +1 -1
  101. package/dist/core/workflow/workspaces/leases.js +1 -9
  102. package/dist/lib/computer/cua.d.ts +50 -0
  103. package/dist/lib/computer/cua.d.ts.map +1 -0
  104. package/dist/lib/computer/cua.js +474 -0
  105. package/dist/lib/computer/host.d.ts +19 -0
  106. package/dist/lib/computer/host.d.ts.map +1 -0
  107. package/dist/lib/computer/host.js +72 -0
  108. package/dist/lib/computer/lease.d.ts +13 -0
  109. package/dist/lib/computer/lease.d.ts.map +1 -0
  110. package/dist/lib/computer/lease.js +269 -0
  111. package/dist/lib/computer/types.d.ts +163 -0
  112. package/dist/lib/computer/types.d.ts.map +1 -0
  113. package/dist/lib/computer/types.js +10 -0
  114. package/dist/lib/docs-metadata-v2.d.ts.map +1 -1
  115. package/dist/lib/docs-metadata-v2.js +6 -5
  116. package/dist/lib/exec.d.ts.map +1 -1
  117. package/dist/lib/exec.js +1 -0
  118. package/dist/lib/guarded-remove.d.ts.map +1 -1
  119. package/dist/lib/guarded-remove.js +5 -4
  120. package/dist/lib/headless/index.d.ts +33 -0
  121. package/dist/lib/headless/index.d.ts.map +1 -1
  122. package/dist/lib/headless/index.js +38 -2
  123. package/dist/lib/http/client.d.ts +2 -9
  124. package/dist/lib/http/client.d.ts.map +1 -1
  125. package/dist/lib/http/client.js +30 -9
  126. package/dist/lib/instructions/apply.d.ts +9 -0
  127. package/dist/lib/instructions/apply.d.ts.map +1 -1
  128. package/dist/lib/instructions/apply.js +92 -14
  129. package/dist/lib/instructions/git-hooks.d.ts.map +1 -1
  130. package/dist/lib/instructions/git-hooks.js +8 -4
  131. package/dist/lib/instructions/templates.d.ts +11 -0
  132. package/dist/lib/instructions/templates.d.ts.map +1 -1
  133. package/dist/lib/instructions/templates.js +81 -1
  134. package/package.json +5 -5
  135. package/schemas/config.schema.json +89 -1
  136. package/src/commander.ts +98 -8
  137. package/src/commands/agents.ts +100 -32
  138. package/src/commands/autoupdate.ts +250 -0
  139. package/src/commands/computer.ts +682 -0
  140. package/src/commands/docs.ts +3 -1
  141. package/src/commands/fetch.ts +11 -1
  142. package/src/commands/grep.ts +274 -59
  143. package/src/commands/init.ts +17 -7
  144. package/src/commands/rm.ts +2 -2
  145. package/src/commands/web.ts +2 -0
  146. package/src/core/agents/canonical-emit.ts +2 -3
  147. package/src/core/agents/coord-bin.ts +30 -0
  148. package/src/core/agents/coord-client.ts +6 -2
  149. package/src/core/agents/render/prompt-context.ts +152 -53
  150. package/src/core/agents/rules/claim-conflict.ts +50 -18
  151. package/src/core/agents/rules/stop-hook.ts +28 -1
  152. package/src/core/agents/state/proc-start.ts +29 -5
  153. package/src/core/autoupdate/engine.ts +691 -0
  154. package/src/core/autoupdate/fingerprint.ts +89 -0
  155. package/src/core/autoupdate/git.ts +120 -0
  156. package/src/core/autoupdate/index.ts +29 -0
  157. package/src/core/autoupdate/state.ts +269 -0
  158. package/src/core/autoupdate/types.ts +135 -0
  159. package/src/core/config.ts +142 -1
  160. package/src/core/events/v3/bootstrap.ts +1 -0
  161. package/src/core/events/v3/runtime-build.ts +1 -0
  162. package/src/core/hooks/adapter/wiring.ts +51 -6
  163. package/src/core/hooks/autoupdate-cue.ts +72 -0
  164. package/src/core/hooks/cli.ts +54 -1
  165. package/src/core/hooks/effects/index.ts +4 -4
  166. package/src/core/hooks/resolve/coord-root.ts +1 -0
  167. package/src/core/hooks/resolve/transcript.ts +61 -0
  168. package/src/core/semantic/service.ts +6 -2
  169. package/src/core/storage/modes.ts +7 -1
  170. package/src/core/workflow/durable-record.ts +15 -1
  171. package/src/core/workflow/engine.ts +3 -0
  172. package/src/core/workflow/spawn-claude.ts +16 -4
  173. package/src/core/workflow/specialists.ts +1 -0
  174. package/src/core/workflow/types.ts +10 -0
  175. package/src/core/workflow/workspaces/leases.ts +1 -9
  176. package/src/lib/computer/cua.ts +572 -0
  177. package/src/lib/computer/host.ts +87 -0
  178. package/src/lib/computer/lease.ts +299 -0
  179. package/src/lib/computer/types.ts +177 -0
  180. package/src/lib/docs-metadata-v2.ts +24 -5
  181. package/src/lib/exec.ts +1 -0
  182. package/src/lib/guarded-remove.ts +5 -3
  183. package/src/lib/headless/index.ts +66 -2
  184. package/src/lib/http/client.ts +33 -19
  185. package/src/lib/instructions/apply.ts +100 -12
  186. package/src/lib/instructions/git-hooks.ts +8 -4
  187. package/src/lib/instructions/templates.ts +95 -1
@@ -52,10 +52,11 @@ let cachedBootId;
52
52
  */
53
53
  export function startTokenProbe() {
54
54
  const override = coordEnv("PID_PROBE");
55
- if (override === "procfs" || override === "ps")
55
+ if (override === "procfs" || override === "ps" || override === "windows")
56
56
  return override;
57
57
  if (cachedProbe === undefined) {
58
- cachedProbe = existsSync("/proc/self/stat") ? "procfs" : "ps";
58
+ cachedProbe =
59
+ process.platform === "win32" ? "windows" : existsSync("/proc/self/stat") ? "procfs" : "ps";
59
60
  }
60
61
  return cachedProbe;
61
62
  }
@@ -147,9 +148,30 @@ function defaultPsRun(pid) {
147
148
  * will not say.
148
149
  */
149
150
  export function processStartToken(pid) {
150
- if (!Number.isFinite(pid) || pid <= 0)
151
+ if (!Number.isSafeInteger(pid) || pid <= 0)
151
152
  return null;
152
- return startTokenProbe() === "procfs" ? procfsStartToken(pid) : psStartToken(pid);
153
+ const probe = startTokenProbe();
154
+ if (probe === "windows")
155
+ return windowsStartToken(pid);
156
+ return probe === "procfs" ? procfsStartToken(pid) : psStartToken(pid);
157
+ }
158
+ /** Windows process creation time in invariant UTC ticks, independent of locale. */
159
+ export function windowsStartToken(pid) {
160
+ if (!Number.isSafeInteger(pid) || pid <= 0)
161
+ return null;
162
+ try {
163
+ const out = spawnSync("powershell.exe", [
164
+ "-NoProfile",
165
+ "-NonInteractive",
166
+ "-Command",
167
+ `try { (Get-Process -Id ${pid} -ErrorAction Stop).StartTime.ToUniversalTime().Ticks } catch { exit 1 }`,
168
+ ], { encoding: "utf8", timeout: 4_000, windowsHide: true });
169
+ const ticks = out.stdout?.trim();
170
+ return out.status === 0 && ticks && /^\d+$/.test(ticks) ? `w${ticks}` : null;
171
+ }
172
+ catch {
173
+ return null;
174
+ }
153
175
  }
154
176
  /**
155
177
  * Does `pid` still name the run that wrote `recordedToken`?
@@ -0,0 +1,97 @@
1
+ /**
2
+ * Project self-update engine (ADR 0229).
3
+ *
4
+ * `autoUpdateTick` is the hot path every prompt, session start, and host CLI
5
+ * command calls: one stat of the throttle stamp when nothing is due. When the
6
+ * stamp is stale it claims the stamp and launches a detached
7
+ * `<harn> autoupdate run --background`, which decides with `checkForUpdate`
8
+ * and, only when needed, runs the host's configured steps under a lock.
9
+ */
10
+ import { type GitRunner } from "./git.js";
11
+ import { type LockInspection, type LockOwner } from "./state.js";
12
+ import { type AutoUpdateConfig, type AutoUpdateNotice, type AutoUpdateState, type CheckDecision, type RunOutcome, type RunRecord, type TickResult } from "./types.js";
13
+ /** Set on the detached runner and every step so nested CLI calls never tick. */
14
+ export declare const AUTOUPDATE_CHILD_ENV = "HARNERY_AUTOUPDATE_CHILD";
15
+ export interface StepRunResult {
16
+ exitCode: number | null;
17
+ timedOut: boolean;
18
+ output: string;
19
+ ms: number;
20
+ }
21
+ export type StepRunner = (argv: string[], opts: {
22
+ cwd: string;
23
+ timeoutMs: number;
24
+ env: NodeJS.ProcessEnv;
25
+ onChunk?: (chunk: string, stream: "stdout" | "stderr") => void;
26
+ }) => Promise<StepRunResult>;
27
+ export interface AutoUpdateDeps {
28
+ now?: () => number;
29
+ env?: NodeJS.ProcessEnv;
30
+ readConfig?: (coordRoot: string) => AutoUpdateConfig | null;
31
+ git?: GitRunner;
32
+ /** Launch the detached runner (tick). */
33
+ spawnRunner?: (coordRoot: string) => void;
34
+ runStep?: StepRunner;
35
+ /** Expired-artifact cleanup; best effort. */
36
+ runCleanup?: (coordRoot: string) => void;
37
+ binName?: string;
38
+ }
39
+ /** The CLI entry the detached runner executes with `process.execPath`. */
40
+ export declare function harnCliEntry(): string;
41
+ /** Set the throttle stamp's mtime (creating it), which is all the tick reads. */
42
+ export declare function setStamp(coordRoot: string, atMs: number): void;
43
+ /** Keep the log bounded: past 256 KB, keep only its last 64 KB. */
44
+ export declare function rotateLog(path: string): void;
45
+ export declare function isInstructionPath(path: string): boolean;
46
+ export declare function isHookConfigPath(path: string): boolean;
47
+ /** `harnery-notice:` lines in step output. */
48
+ export declare function parseNoticeLines(output: string): string[];
49
+ /**
50
+ * Activity hook. Never throws. When throttled it reads the config and stats
51
+ * one file; it runs no Git and parses no state.
52
+ */
53
+ export declare function autoUpdateTick(coordRoot: string, deps?: AutoUpdateDeps): TickResult;
54
+ export declare function checkForUpdate(coordRoot: string, cfg: AutoUpdateConfig, state: AutoUpdateState, deps?: AutoUpdateDeps & {
55
+ force?: boolean;
56
+ }): CheckDecision;
57
+ /**
58
+ * Resolve a step's argv for the current platform. On Windows a bare command
59
+ * name such as `bun` or `git` is looked up on PATH with PATHEXT, because
60
+ * spawning without a shell does not try `.cmd` shims; a `.cmd` or `.bat`
61
+ * match runs through `cmd.exe`. Elsewhere the argv is used as is.
62
+ */
63
+ export declare function resolveStepCommand(cmd: string, args: string[], env: NodeJS.ProcessEnv, platform?: NodeJS.Platform, exists?: (path: string) => boolean): {
64
+ cmd: string;
65
+ args: string[];
66
+ verbatim: boolean;
67
+ };
68
+ export declare const defaultStepRunner: StepRunner;
69
+ export interface RunAutoUpdateOptions {
70
+ force?: boolean;
71
+ /** Detached runner: output goes to the log only. */
72
+ background?: boolean;
73
+ /** Foreground streaming of step output (in addition to the log). */
74
+ onOutput?: (chunk: string, stream: "stdout" | "stderr") => void;
75
+ deps?: AutoUpdateDeps;
76
+ }
77
+ export interface RunAutoUpdateResult {
78
+ outcome: RunOutcome;
79
+ decision: CheckDecision | null;
80
+ record: RunRecord | null;
81
+ /** Notices recorded by this run. */
82
+ notices: AutoUpdateNotice[];
83
+ /** Holder of the lock when `skipped-locked`. */
84
+ lockOwner?: LockOwner | null;
85
+ }
86
+ export declare function runAutoUpdate(coordRootRaw: string, opts?: RunAutoUpdateOptions): Promise<RunAutoUpdateResult>;
87
+ export interface AutoUpdateStatus {
88
+ config: AutoUpdateConfig | null;
89
+ state: AutoUpdateState;
90
+ /** Milliseconds since the throttle stamp (negative while backing off); null when never checked. */
91
+ stampAge: number | null;
92
+ /** Milliseconds until a tick would launch a check; 0 when due. */
93
+ nextCheckMs: number | null;
94
+ locked: LockInspection;
95
+ }
96
+ export declare function autoUpdateStatus(coordRootRaw: string, deps?: AutoUpdateDeps): AutoUpdateStatus;
97
+ //# sourceMappingURL=engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../../src/core/autoupdate/engine.ts"],"names":[],"mappings":"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"}