@prohost/cli 0.11.0 → 0.12.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/CHANGELOG.md +26 -0
- package/README.md +20 -11
- package/dist/agent/daemon.d.ts +4 -1
- package/dist/agent/prompt.d.ts +1 -1
- package/dist/agent/prompt.js +7 -1
- package/dist/agent/run.d.ts +11 -9
- package/dist/agent/run.js +10 -9
- package/dist/agent/scheduler.d.ts +11 -3
- package/dist/agent/scheduler.js +11 -3
- package/dist/agent/worktrees.d.ts +6 -0
- package/dist/agent/worktrees.js +12 -1
- package/dist/index.js +2 -2
- package/dist/version.d.ts +2 -2
- package/dist/version.js +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,32 @@ Versions follow [semver](https://semver.org/). Publishing is automated: merging
|
|
|
4
4
|
a version bump to `main` triggers `.github/workflows/npm-publish-cli.yml`, which
|
|
5
5
|
builds via `prepack`, runs the suite, publishes, and tags `cli-v<version>`.
|
|
6
6
|
|
|
7
|
+
## 0.12.0
|
|
8
|
+
|
|
9
|
+
- **`agent run` handles up to three conversations at once by default.**
|
|
10
|
+
`--concurrency` used to default to 1, so a one-line question in one thread
|
|
11
|
+
waited behind a long job in another. It now defaults to 3. Runs in the same
|
|
12
|
+
conversation still take turns, in order; only different conversations
|
|
13
|
+
overlap.
|
|
14
|
+
- **This changes existing pairings on upgrade.** `install-daemon` records
|
|
15
|
+
`--concurrency` only when it was given, so a daemon installed without it
|
|
16
|
+
goes from one run at a time to three once it restarts on 0.12.0. Two things
|
|
17
|
+
follow:
|
|
18
|
+
- every run spends the same login's quota, so at busy times a subscription's
|
|
19
|
+
window is used up to three times as fast;
|
|
20
|
+
- without `--repos`, overlapping runs share every checkout on the machine.
|
|
21
|
+
Each run is told so, and told not to switch a shared checkout's branch.
|
|
22
|
+
Pass `--repos` to give each conversation its own.
|
|
23
|
+
- **`--concurrency 1` is the old behaviour**, exactly: one run at a time, in
|
|
24
|
+
arrival order, and a prompt that says nothing about sharing the machine. For
|
|
25
|
+
a daemon, run `install-daemon` again with `--concurrency 1`.
|
|
26
|
+
- **`--repos ~/app,~/site` means what it says.** A shell expands only the `~`
|
|
27
|
+
that starts the word, so every entry after the first used to resolve to a
|
|
28
|
+
directory named `~` under the current one. The CLI now reads a leading `~`
|
|
29
|
+
or `~/` on each entry as the home directory.
|
|
30
|
+
- The startup line that reports the limit says when it is the default and how
|
|
31
|
+
to turn it off.
|
|
32
|
+
|
|
7
33
|
## 0.11.0
|
|
8
34
|
|
|
9
35
|
- **Pair only with the workspace you expect.** `prohost agent pair --code <c>
|
package/README.md
CHANGED
|
@@ -513,9 +513,9 @@ on the machine via `ps` and a process environment is not. Literal `headers`,
|
|
|
513
513
|
treatment: the CLI translates them to Codex's environment-indirection fields,
|
|
514
514
|
so their values do not appear in process arguments.
|
|
515
515
|
|
|
516
|
-
|
|
517
|
-
several conversations at once"
|
|
518
|
-
machine** — even across restarts. Started runs are recorded in
|
|
516
|
+
Up to three runs are handled at once, in different conversations (see "Running
|
|
517
|
+
several conversations at once"; `--concurrency 1` is one at a time), and each
|
|
518
|
+
run executes **at most once on this machine** — even across restarts. Started runs are recorded in
|
|
519
519
|
`~/.prohost/runs.json` before the command launches, so a webhook redelivery
|
|
520
520
|
that arrives after a crash or restart will close the run out rather than run
|
|
521
521
|
your agent a second time. That matters because your agent holds a credential:
|
|
@@ -569,21 +569,30 @@ naming the pid that holds `$PROHOST_HOME/run.lock`.
|
|
|
569
569
|
|
|
570
570
|
### Running several conversations at once
|
|
571
571
|
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
572
|
+
Up to three runs execute at once, so a one-line question in one thread does
|
|
573
|
+
not sit behind a two-hour job in another. `--concurrency <n>` (1 to 16) sets
|
|
574
|
+
the limit:
|
|
575
575
|
|
|
576
576
|
```bash
|
|
577
|
-
prohost agent run --exec 'claude -p' --concurrency
|
|
577
|
+
prohost agent run --exec 'claude -p' --concurrency 5 --repos ~/code/app,~/code/site
|
|
578
578
|
```
|
|
579
579
|
|
|
580
|
+
`--concurrency 1` is one run at a time, in the order they arrived — what every
|
|
581
|
+
version before 0.12.0 did unless told otherwise.
|
|
582
|
+
|
|
580
583
|
- **Runs in the same conversation still take turns, in order.** Each turn
|
|
581
584
|
resumes the session the last one left, so two turns of one thread never
|
|
582
585
|
overlap. Only different conversations run side by side.
|
|
583
586
|
- **Every run spends the same login's quota.** Three runs at once use a
|
|
584
|
-
subscription's 5-hour window about three times as fast.
|
|
587
|
+
subscription's 5-hour window about three times as fast. Lower the limit if
|
|
588
|
+
the window runs out at busy times.
|
|
585
589
|
- **They share the machine.** The agent is told other runs may be executing
|
|
586
|
-
beside it
|
|
590
|
+
beside it and, without `--repos`, that no git checkout is its own. If it
|
|
591
|
+
edits code, pass `--repos`.
|
|
592
|
+
- **A daemon follows the default.** `install-daemon` records `--concurrency`
|
|
593
|
+
only when you give it, so a daemon installed without it runs three at once
|
|
594
|
+
after upgrading to 0.12.0 and restarting. Reinstall with `--concurrency 1`
|
|
595
|
+
to keep it at one.
|
|
587
596
|
|
|
588
597
|
`--repos` takes a comma-separated list of git checkouts the agent works on.
|
|
589
598
|
Each conversation then gets its own `git worktree` of every one, at
|
|
@@ -601,7 +610,7 @@ original repository and are never touched. Each worktree is a full working
|
|
|
601
610
|
copy, and dependencies installed inside it are not shared, so budget disk for
|
|
602
611
|
it.
|
|
603
612
|
|
|
604
|
-
`--repos` works
|
|
613
|
+
`--repos` works at any `--concurrency`, 1 included. If a checkout cannot be made (a
|
|
605
614
|
full disk, a path that is no longer a repository), the run still happens: the
|
|
606
615
|
agent is told to treat that repository as read-only for the run.
|
|
607
616
|
|
|
@@ -659,7 +668,7 @@ same judgement.
|
|
|
659
668
|
| `--exec` | *(required)* | Command to run for each requested run. Prompt arrives on stdin. |
|
|
660
669
|
| `--idle-timeout` | `900` | Seconds a run may produce **no output at all** before it is treated as stalled and killed. Any byte on stdout or stderr resets it. `0` disables it — see "Long runs". |
|
|
661
670
|
| `--timeout` | `0` | Seconds one run may take before the command is killed, however busy it is. `0` — the default — means no wall-clock limit. Set it if you want a hard ceiling as well. |
|
|
662
|
-
| `--concurrency` | `
|
|
671
|
+
| `--concurrency` | `3` | How many runs may execute at once (1–16); `1` is one at a time. Runs in one conversation always take turns. See "Running several conversations at once". |
|
|
663
672
|
| `--repos` | — | Comma-separated git checkouts the agent works on. Each conversation gets its own worktree of every one. |
|
|
664
673
|
| `--dry-run` | off | Print the reply that would be posted; write nothing. |
|
|
665
674
|
| `--workdir` | `~/.prohost/workspace` | Working directory for the command. See "Where your agent runs". |
|
package/dist/agent/daemon.d.ts
CHANGED
|
@@ -90,7 +90,10 @@ export interface HarnessInvocation {
|
|
|
90
90
|
allowUnverified?: boolean;
|
|
91
91
|
/** Gate tools behind permission prompts (the `--safe-tools` opt-out). */
|
|
92
92
|
safeTools?: boolean;
|
|
93
|
-
/**
|
|
93
|
+
/**
|
|
94
|
+
* Runs allowed at once. Omitted unless `--concurrency` was given, so an
|
|
95
|
+
* installed daemon follows the CLI's default rather than freezing one.
|
|
96
|
+
*/
|
|
94
97
|
concurrency?: number;
|
|
95
98
|
/** Absolute checkouts each conversation gets its own worktree of. */
|
|
96
99
|
repos?: string[];
|
package/dist/agent/prompt.d.ts
CHANGED
|
@@ -74,7 +74,7 @@ export interface PromptContext {
|
|
|
74
74
|
idleTimeoutMs?: number;
|
|
75
75
|
/**
|
|
76
76
|
* Other runs may be executing on this machine at the same moment
|
|
77
|
-
* (`--concurrency`
|
|
77
|
+
* (the default; `--concurrency 1` turns it off).
|
|
78
78
|
*
|
|
79
79
|
* Said because it changes what is safe: an agent that believes it has the
|
|
80
80
|
* machine to itself switches branches in a shared checkout and writes
|
package/dist/agent/prompt.js
CHANGED
|
@@ -10,7 +10,7 @@ import { NO_REPLY_TOKEN } from './contract.js';
|
|
|
10
10
|
/**
|
|
11
11
|
* What the agent is told about sharing the machine and where its checkouts are.
|
|
12
12
|
*
|
|
13
|
-
* Empty
|
|
13
|
+
* Empty for `--concurrency 1` without `--repos`.
|
|
14
14
|
*/
|
|
15
15
|
function isolationLines(context) {
|
|
16
16
|
const lines = [];
|
|
@@ -18,6 +18,12 @@ function isolationLines(context) {
|
|
|
18
18
|
const failures = context.checkoutFailures ?? [];
|
|
19
19
|
if (context.parallel) {
|
|
20
20
|
lines.push('- Other conversations may be running on this machine right now, as other', ' processes of you, in this same working directory. Give any scratch file', ' a name unique to this run, and do not assume a file or a git branch', ' you did not create in this conversation is yours to change.');
|
|
21
|
+
// Without `--repos` — the usual pairing — nothing moves a run off the
|
|
22
|
+
// checkouts its standing instructions name, and `git switch` there changes
|
|
23
|
+
// the files under whichever run is reading them.
|
|
24
|
+
if (checkouts.length === 0 && failures.length === 0) {
|
|
25
|
+
lines.push('- No git checkout on this machine is private to this conversation.', ' Another run may be reading one while you work, so do not switch its', ' branch or leave it half-changed: if the work needs a branch of its', ' own, do it in a separate `git worktree` you create for it.');
|
|
26
|
+
}
|
|
21
27
|
}
|
|
22
28
|
if (checkouts.length > 0) {
|
|
23
29
|
lines.push('- This conversation has its own git checkouts. Do all repository work', ' in them, and nowhere else:', ...checkouts.map((checkout) => ` ${checkout.name}: ${checkout.path}`), ' They are worktrees private to this conversation and they persist', ' between your runs here, so a branch or an uncommitted change you find', ' in one is your own earlier work in this thread. Wherever your other', ' instructions name one of these as the place to work, use the path', ' above instead:', ...checkouts.map((checkout) => ` ${checkout.source}`), ' Never switch branches, commit, or edit files in those originals —', ' other runs read them. Do not run `git worktree add` yourself.');
|
package/dist/agent/run.d.ts
CHANGED
|
@@ -10,12 +10,13 @@
|
|
|
10
10
|
*
|
|
11
11
|
* Two deliberate safety properties:
|
|
12
12
|
*
|
|
13
|
-
* * **Runs are serialized
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
* each conversation its own git
|
|
13
|
+
* * **Runs in one conversation are serialized.** Two turns of one conversation
|
|
14
|
+
* never overlap (see `scheduler.ts`). Runs in *different* conversations may:
|
|
15
|
+
* up to `--concurrency` of them at once, {@link DEFAULT_CONCURRENCY} when the
|
|
16
|
+
* flag is absent, and frames beyond that queue. Agents hold working
|
|
17
|
+
* directories and rate limits, so every overlapping run is told it is
|
|
18
|
+
* sharing the machine, `--repos` gives each conversation its own git
|
|
19
|
+
* checkouts (see `worktrees.ts`), and `--concurrency 1` is one run at a time.
|
|
19
20
|
* * **Runs are deduped on ``run_id``.** Webhook deliveries retry, and each
|
|
20
21
|
* attempt is mirrored to this socket. Without dedupe a retry would execute
|
|
21
22
|
* the command a second time and post a second reply.
|
|
@@ -108,9 +109,10 @@ export interface AgentRunOptions {
|
|
|
108
109
|
*/
|
|
109
110
|
cwd?: string;
|
|
110
111
|
/**
|
|
111
|
-
* How many runs may execute at once. Defaults to
|
|
112
|
-
*
|
|
113
|
-
* conversation still wait for each other.
|
|
112
|
+
* How many runs may execute at once. Defaults to
|
|
113
|
+
* {@link DEFAULT_CONCURRENCY}. Above 1, runs in different conversations
|
|
114
|
+
* overlap; runs in the same conversation still wait for each other. 1 is one
|
|
115
|
+
* run at a time, in arrival order.
|
|
114
116
|
*/
|
|
115
117
|
concurrency?: number;
|
|
116
118
|
/**
|
package/dist/agent/run.js
CHANGED
|
@@ -10,12 +10,13 @@
|
|
|
10
10
|
*
|
|
11
11
|
* Two deliberate safety properties:
|
|
12
12
|
*
|
|
13
|
-
* * **Runs are serialized
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
* each conversation its own git
|
|
13
|
+
* * **Runs in one conversation are serialized.** Two turns of one conversation
|
|
14
|
+
* never overlap (see `scheduler.ts`). Runs in *different* conversations may:
|
|
15
|
+
* up to `--concurrency` of them at once, {@link DEFAULT_CONCURRENCY} when the
|
|
16
|
+
* flag is absent, and frames beyond that queue. Agents hold working
|
|
17
|
+
* directories and rate limits, so every overlapping run is told it is
|
|
18
|
+
* sharing the machine, `--repos` gives each conversation its own git
|
|
19
|
+
* checkouts (see `worktrees.ts`), and `--concurrency 1` is one run at a time.
|
|
19
20
|
* * **Runs are deduped on ``run_id``.** Webhook deliveries retry, and each
|
|
20
21
|
* attempt is mirrored to this socket. Without dedupe a retry would execute
|
|
21
22
|
* the command a second time and post a second reply.
|
|
@@ -43,7 +44,7 @@ import { HeartbeatLoop } from './heartbeat.js';
|
|
|
43
44
|
import { buildPrompt, replyFromStdout } from './prompt.js';
|
|
44
45
|
import { NO_CAPABILITIES, capabilityProbe } from './capabilities.js';
|
|
45
46
|
import { RunStore } from './runstore.js';
|
|
46
|
-
import { MAX_CONCURRENCY, RunScheduler } from './scheduler.js';
|
|
47
|
+
import { DEFAULT_CONCURRENCY, MAX_CONCURRENCY, RunScheduler } from './scheduler.js';
|
|
47
48
|
import { RUNTIME_STATUS_FEATURE, RuntimeStatusReporter, claudeQuotaProvider, codexConfiguredModel, codexQuotaProvider, modelFromExec, parseVersion, readCodexObservation, } from './runtime_status.js';
|
|
48
49
|
import { SessionStore, sessionKeyFor } from './sessionstore.js';
|
|
49
50
|
import { verifySignature } from './signature.js';
|
|
@@ -1152,11 +1153,11 @@ export async function runAgentHarness(options) {
|
|
|
1152
1153
|
}
|
|
1153
1154
|
return true;
|
|
1154
1155
|
};
|
|
1155
|
-
const concurrency = Math.min(MAX_CONCURRENCY, Math.max(1, Math.floor(options.concurrency ??
|
|
1156
|
+
const concurrency = Math.min(MAX_CONCURRENCY, Math.max(1, Math.floor(options.concurrency ?? DEFAULT_CONCURRENCY)));
|
|
1156
1157
|
const scheduler = new RunScheduler(concurrency);
|
|
1157
1158
|
const worktrees = new WorktreeManager({ repos: options.repos ?? [], env: options.env, log });
|
|
1158
1159
|
if (concurrency > 1) {
|
|
1159
|
-
log(`${timestamp()} ⚙ up to ${concurrency} runs at once — runs in the same conversation still take turns` +
|
|
1160
|
+
log(`${timestamp()} ⚙ up to ${concurrency} runs at once${options.concurrency === undefined ? ' (the default; --concurrency 1 for one at a time)' : ''} — runs in the same conversation still take turns` +
|
|
1160
1161
|
(worktrees.enabled
|
|
1161
1162
|
? ''
|
|
1162
1163
|
: '. No --repos given: runs share every checkout on this machine, so name the ' +
|
|
@@ -2,10 +2,11 @@
|
|
|
2
2
|
* Which accepted runs execute now, and which wait.
|
|
3
3
|
*
|
|
4
4
|
* `agent run` used to chain every run onto one promise: one local agent, one
|
|
5
|
-
* run at a time.
|
|
6
|
-
*
|
|
5
|
+
* run at a time. With a limit of 1 this scheduler is still exactly that chain
|
|
6
|
+
* — strict arrival order, nothing overlapping — and `--concurrency 1` asks for
|
|
7
|
+
* it. The harness default is {@link DEFAULT_CONCURRENCY}.
|
|
7
8
|
*
|
|
8
|
-
*
|
|
9
|
+
* A limit above 1 lifts the cap without lifting the rule that actually
|
|
9
10
|
* protects an answer: **two runs on the same lane never overlap, and they start
|
|
10
11
|
* in the order they arrived.** A lane is a conversation (see `sessionKeyFor`).
|
|
11
12
|
* Each turn resumes the session the previous turn left, so running two turns of
|
|
@@ -19,6 +20,13 @@
|
|
|
19
20
|
*/
|
|
20
21
|
/** Most runs one harness will execute at once, whatever the flag says. */
|
|
21
22
|
export declare const MAX_CONCURRENCY = 16;
|
|
23
|
+
/**
|
|
24
|
+
* Runs `agent run` executes at once when `--concurrency` is not given.
|
|
25
|
+
*
|
|
26
|
+
* Not 1: a one-line question in one thread should not sit behind a two-hour
|
|
27
|
+
* job in another. Not higher: every run spends the same login's quota.
|
|
28
|
+
*/
|
|
29
|
+
export declare const DEFAULT_CONCURRENCY = 3;
|
|
22
30
|
export declare class RunScheduler {
|
|
23
31
|
private readonly limit;
|
|
24
32
|
private readonly pending;
|
package/dist/agent/scheduler.js
CHANGED
|
@@ -2,10 +2,11 @@
|
|
|
2
2
|
* Which accepted runs execute now, and which wait.
|
|
3
3
|
*
|
|
4
4
|
* `agent run` used to chain every run onto one promise: one local agent, one
|
|
5
|
-
* run at a time.
|
|
6
|
-
*
|
|
5
|
+
* run at a time. With a limit of 1 this scheduler is still exactly that chain
|
|
6
|
+
* — strict arrival order, nothing overlapping — and `--concurrency 1` asks for
|
|
7
|
+
* it. The harness default is {@link DEFAULT_CONCURRENCY}.
|
|
7
8
|
*
|
|
8
|
-
*
|
|
9
|
+
* A limit above 1 lifts the cap without lifting the rule that actually
|
|
9
10
|
* protects an answer: **two runs on the same lane never overlap, and they start
|
|
10
11
|
* in the order they arrived.** A lane is a conversation (see `sessionKeyFor`).
|
|
11
12
|
* Each turn resumes the session the previous turn left, so running two turns of
|
|
@@ -19,6 +20,13 @@
|
|
|
19
20
|
*/
|
|
20
21
|
/** Most runs one harness will execute at once, whatever the flag says. */
|
|
21
22
|
export const MAX_CONCURRENCY = 16;
|
|
23
|
+
/**
|
|
24
|
+
* Runs `agent run` executes at once when `--concurrency` is not given.
|
|
25
|
+
*
|
|
26
|
+
* Not 1: a one-line question in one thread should not sit behind a two-hour
|
|
27
|
+
* job in another. Not higher: every run spends the same login's quota.
|
|
28
|
+
*/
|
|
29
|
+
export const DEFAULT_CONCURRENCY = 3;
|
|
22
30
|
export class RunScheduler {
|
|
23
31
|
limit;
|
|
24
32
|
pending = [];
|
|
@@ -72,10 +72,16 @@ export declare function laneDirName(lane: string): string;
|
|
|
72
72
|
* forever. A running harness instead reports the checkout it could not make on
|
|
73
73
|
* each run, and keeps answering.
|
|
74
74
|
*
|
|
75
|
+
* A leading `~` is the home directory. A shell only expands the one that
|
|
76
|
+
* starts the word, so in `--repos ~/app,~/site` the second arrives as typed —
|
|
77
|
+
* and resolved as-is it would name a directory called `~` under wherever the
|
|
78
|
+
* harness was started.
|
|
79
|
+
*
|
|
75
80
|
* @throws ReposFlagError naming the entry that is wrong.
|
|
76
81
|
*/
|
|
77
82
|
export declare function parseReposFlag(raw: string, options?: {
|
|
78
83
|
requireCheckouts?: boolean;
|
|
84
|
+
home?: string;
|
|
79
85
|
}): string[];
|
|
80
86
|
/** Whether `repo` is the top of a git checkout (a clone, or a worktree of one). */
|
|
81
87
|
export declare function isCheckout(repo: string): boolean;
|
package/dist/agent/worktrees.js
CHANGED
|
@@ -30,6 +30,7 @@
|
|
|
30
30
|
import { execFile } from 'node:child_process';
|
|
31
31
|
import { createHash } from 'node:crypto';
|
|
32
32
|
import { existsSync, mkdirSync, readdirSync, rmdirSync, rmSync, statSync, utimesSync, writeFileSync } from 'node:fs';
|
|
33
|
+
import os from 'node:os';
|
|
33
34
|
import path from 'node:path';
|
|
34
35
|
import { prohostHome } from './credentials.js';
|
|
35
36
|
/** Child-process env var naming the directory that holds this run's checkouts. */
|
|
@@ -83,6 +84,11 @@ function lastLine(text) {
|
|
|
83
84
|
* forever. A running harness instead reports the checkout it could not make on
|
|
84
85
|
* each run, and keeps answering.
|
|
85
86
|
*
|
|
87
|
+
* A leading `~` is the home directory. A shell only expands the one that
|
|
88
|
+
* starts the word, so in `--repos ~/app,~/site` the second arrives as typed —
|
|
89
|
+
* and resolved as-is it would name a directory called `~` under wherever the
|
|
90
|
+
* harness was started.
|
|
91
|
+
*
|
|
86
92
|
* @throws ReposFlagError naming the entry that is wrong.
|
|
87
93
|
*/
|
|
88
94
|
export function parseReposFlag(raw, options = {}) {
|
|
@@ -95,7 +101,7 @@ export function parseReposFlag(raw, options = {}) {
|
|
|
95
101
|
const repos = [];
|
|
96
102
|
const names = new Map();
|
|
97
103
|
for (const entry of entries) {
|
|
98
|
-
const repo = path.resolve(entry);
|
|
104
|
+
const repo = path.resolve(expandHome(entry, options.home));
|
|
99
105
|
if (options.requireCheckouts && !isCheckout(repo)) {
|
|
100
106
|
throw new ReposFlagError(`--repos: ${repo} is not the top of a git checkout (no .git there).`);
|
|
101
107
|
}
|
|
@@ -110,6 +116,11 @@ export function parseReposFlag(raw, options = {}) {
|
|
|
110
116
|
}
|
|
111
117
|
return repos;
|
|
112
118
|
}
|
|
119
|
+
function expandHome(entry, home = os.homedir()) {
|
|
120
|
+
if (entry === '~')
|
|
121
|
+
return home;
|
|
122
|
+
return entry.startsWith('~/') ? path.join(home, entry.slice(2)) : entry;
|
|
123
|
+
}
|
|
113
124
|
/** Whether `repo` is the top of a git checkout (a clone, or a worktree of one). */
|
|
114
125
|
export function isCheckout(repo) {
|
|
115
126
|
return existsSync(path.join(repo, '.git'));
|
package/dist/index.js
CHANGED
|
@@ -65,10 +65,10 @@ function printHelp() {
|
|
|
65
65
|
' --timeout Seconds one run may take before it is killed, however busy it is.',
|
|
66
66
|
' Defaults to 0 — no wall-clock limit, because a long run is not a stuck',
|
|
67
67
|
' one. Set it if you want a hard ceiling as well as the stall watchdog.',
|
|
68
|
-
' --concurrency How many runs may execute at once, 1 to 16. Defaults to
|
|
68
|
+
' --concurrency How many runs may execute at once, 1 to 16. Defaults to 3. Runs in the same',
|
|
69
69
|
' conversation always take turns, so only different conversations overlap.',
|
|
70
70
|
' Every run spends the same login\'s quota, and they share this machine —',
|
|
71
|
-
' pair it with --repos if the agent edits code.',
|
|
71
|
+
' pair it with --repos if the agent edits code. Pass 1 for one run at a time.',
|
|
72
72
|
' --repos Comma-separated git checkouts the agent works on. Each conversation gets',
|
|
73
73
|
' its own `git worktree` of every one under $PROHOST_HOME/worktrees, kept for',
|
|
74
74
|
' the life of the thread and removed after 14 idle days if it is clean. The',
|
package/dist/version.d.ts
CHANGED
|
@@ -7,6 +7,6 @@
|
|
|
7
7
|
* `package.json`, so a release bump that forgets this file fails the suite
|
|
8
8
|
* instead of shipping a `User-Agent` that lies about which build is calling.
|
|
9
9
|
*/
|
|
10
|
-
export declare const CLI_VERSION = "0.
|
|
10
|
+
export declare const CLI_VERSION = "0.12.0";
|
|
11
11
|
/** Sent on every HTTP request the CLI makes back into ProhostAI. */
|
|
12
|
-
export declare const USER_AGENT = "prohost-cli/0.
|
|
12
|
+
export declare const USER_AGENT = "prohost-cli/0.12.0";
|
package/dist/version.js
CHANGED
|
@@ -7,6 +7,6 @@
|
|
|
7
7
|
* `package.json`, so a release bump that forgets this file fails the suite
|
|
8
8
|
* instead of shipping a `User-Agent` that lies about which build is calling.
|
|
9
9
|
*/
|
|
10
|
-
export const CLI_VERSION = '0.
|
|
10
|
+
export const CLI_VERSION = '0.12.0';
|
|
11
11
|
/** Sent on every HTTP request the CLI makes back into ProhostAI. */
|
|
12
12
|
export const USER_AGENT = `prohost-cli/${CLI_VERSION}`;
|