@tryarcanist/cli 0.1.259 → 0.1.261
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/README.md +1 -6
- package/dist/index.js +7 -47
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -184,7 +184,6 @@ Creates a new session and sends the initial prompt.
|
|
|
184
184
|
```bash
|
|
185
185
|
arcanist sessions create https://github.com/your-org/your-repo "fix the login bug"
|
|
186
186
|
arcanist sessions create your-org/your-repo "continue this work" --start-branch wip/resume-me
|
|
187
|
-
arcanist sessions create your-org/your-repo "finish this PR" --continue-pr https://github.com/your-org/your-repo/pull/123
|
|
188
187
|
printf "add tests" | arcanist sessions create your-org/your-repo --prompt-stdin --json
|
|
189
188
|
printf "add tests" | arcanist sessions create your-org/your-repo --prompt-stdin --wait
|
|
190
189
|
arcanist sessions create your-org/your-repo - --model gpt-5.5
|
|
@@ -208,8 +207,6 @@ Use `--base-branch <branch>` to target a non-default base branch. The CLI only v
|
|
|
208
207
|
|
|
209
208
|
Use `--start-branch <branch>` to resume an existing branch with its history instead of forking a fresh branch off base; the control plane verifies the branch exists on the remote and fails closed if it does not.
|
|
210
209
|
|
|
211
|
-
Use `--continue-pr <url>` to continue an open same-repo pull request. The control plane checks out the PR head branch before the prompt runs. `--continue-mode update-pr` updates the referenced PR; `--continue-mode new-pr` starts from that PR head but leaves publish free to open a fresh PR. `auto` is the default and currently resolves to same-PR update for supported open same-repo PRs.
|
|
212
|
-
|
|
213
210
|
Repeatable `--uploaded-file <path>` flags attach local UTF-8 text files to the prompt. Uploaded file names come from the local basename; directory components are not sent.
|
|
214
211
|
|
|
215
212
|
Sessions always start from a fresh sandbox (the warm sandbox pool was removed).
|
|
@@ -217,9 +214,7 @@ Sessions always start from a fresh sandbox (the warm sandbox pool was removed).
|
|
|
217
214
|
`--idempotency-key <uuid>` is for manually retrying a create request that may have reached the server.
|
|
218
215
|
The CLI derives separate session and prompt idempotency keys from the provided value.
|
|
219
216
|
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
JSON mode returns `{sessionId, sessionUrl?, repoUrl, model?, reasoningEffort?, autoVerify?, baseBranch?, startBranch?, continuePrUrl?, continueMode?, onboarding?, promptId?}`. With `--wait`, JSON mode also includes best-effort result fields when available: `prUrl?`, `publishedBranch?`, and `lastBranch?`.
|
|
217
|
+
JSON mode returns `{sessionId, sessionUrl?, repoUrl, model?, reasoningEffort?, autoVerify?, baseBranch?, startBranch?, promptId?}`. With `--wait`, JSON mode also includes best-effort result fields when available: `prUrl?`, `publishedBranch?`, and `lastBranch?`.
|
|
223
218
|
|
|
224
219
|
### `arcanist sessions send <session-id> [prompt]`
|
|
225
220
|
|
package/dist/index.js
CHANGED
|
@@ -8845,7 +8845,6 @@ function isNonContentInterstitial(event) {
|
|
|
8845
8845
|
switch (event.type) {
|
|
8846
8846
|
case "agent_progress":
|
|
8847
8847
|
case "retry_status":
|
|
8848
|
-
case "memory_usage":
|
|
8849
8848
|
case "memory_recall_usage":
|
|
8850
8849
|
case "agent_timeline":
|
|
8851
8850
|
return true;
|
|
@@ -9038,18 +9037,6 @@ function projectPromptRetrying(data, index) {
|
|
|
9038
9037
|
...typeof data?.reason === "string" ? { reason: data.reason } : {}
|
|
9039
9038
|
};
|
|
9040
9039
|
}
|
|
9041
|
-
function projectMemoryUsage(data, index) {
|
|
9042
|
-
const activeMemoryIds = Array.isArray(data?.activeMemoryIds) ? data.activeMemoryIds.filter((id) => typeof id === "string" && id.trim().length > 0) : [];
|
|
9043
|
-
const activeMemories = mergeMemoryRefs(activeMemoryIds, data?.activeMemories);
|
|
9044
|
-
return {
|
|
9045
|
-
type: "memory_usage",
|
|
9046
|
-
id: `mem-${data?.timestamp ?? index}`,
|
|
9047
|
-
activeMemoryIds,
|
|
9048
|
-
activeMemories,
|
|
9049
|
-
usageSource: data?.usageSource === "company_bootstrap" ? "company_bootstrap" : "prompt_start",
|
|
9050
|
-
...resolvePromptId(data) ? { promptId: resolvePromptId(data) } : {}
|
|
9051
|
-
};
|
|
9052
|
-
}
|
|
9053
9040
|
function projectMemoryRecallUsage(data, index) {
|
|
9054
9041
|
const requestedMemoryIds = Array.isArray(data?.requestedMemoryIds) ? data.requestedMemoryIds.filter((id) => typeof id === "string" && id.trim().length > 0) : [];
|
|
9055
9042
|
const returnedMemoryIds = Array.isArray(data?.returnedMemoryIds) ? data.returnedMemoryIds.filter((id) => typeof id === "string" && id.trim().length > 0) : [];
|
|
@@ -9324,9 +9311,6 @@ function flattenSessionEvents(raw) {
|
|
|
9324
9311
|
case "prompt_retrying":
|
|
9325
9312
|
pushEvent(state, projectPromptRetrying(data, state.merged.length));
|
|
9326
9313
|
break;
|
|
9327
|
-
case "memory_usage":
|
|
9328
|
-
pushEvent(state, projectMemoryUsage(data, state.merged.length));
|
|
9329
|
-
break;
|
|
9330
9314
|
case "memory_recall_usage":
|
|
9331
9315
|
pushEvent(state, projectMemoryRecallUsage(data, state.merged.length));
|
|
9332
9316
|
break;
|
|
@@ -9520,8 +9504,7 @@ var SCAFFOLDING_MARKERS = [
|
|
|
9520
9504
|
/^Previous Slack message\b/im,
|
|
9521
9505
|
/^Current Slack message author:/im,
|
|
9522
9506
|
/^Current Slack channel:/im,
|
|
9523
|
-
/^Repository:\s+\S+$/im
|
|
9524
|
-
/^\[arcanist:review-loop\b/im
|
|
9507
|
+
/^Repository:\s+\S+$/im
|
|
9525
9508
|
];
|
|
9526
9509
|
var REVIEW_PROMPT_FIRST_LINE_RE = /^Review pull request \S+ at its current head\./;
|
|
9527
9510
|
function stripReviewPromptEnrichment(text) {
|
|
@@ -9551,11 +9534,6 @@ function stripPromptScaffolding(text) {
|
|
|
9551
9534
|
return kept.join("\n").replace(/\n{3,}/g, "\n\n").trim();
|
|
9552
9535
|
}
|
|
9553
9536
|
function derivePromptDisplayText(prompt) {
|
|
9554
|
-
if (prompt.prompt.trimStart().startsWith("[arcanist:review-loop")) {
|
|
9555
|
-
const reply2 = prompt.replyToText?.trim();
|
|
9556
|
-
if (reply2 && reply2 !== prompt.prompt.trim() && !promptContainsScaffolding(reply2)) return reply2;
|
|
9557
|
-
return prompt.prompt.trim();
|
|
9558
|
-
}
|
|
9559
9537
|
const reply = prompt.replyToText?.trim();
|
|
9560
9538
|
if (reply && !promptContainsScaffolding(reply)) return reply;
|
|
9561
9539
|
if (REVIEW_PROMPT_FIRST_LINE_RE.test(prompt.prompt.trimStart())) {
|
|
@@ -9582,6 +9560,8 @@ var ERROR_CODES = [
|
|
|
9582
9560
|
"model_overloaded",
|
|
9583
9561
|
"config_error",
|
|
9584
9562
|
"failed_edits",
|
|
9563
|
+
// No producer since the memory subsystem was removed. Retained because the code is
|
|
9564
|
+
// persisted on historical session rows, which would otherwise render as "unknown".
|
|
9585
9565
|
"memory_enforcement_failed",
|
|
9586
9566
|
"failure_loop_suspected",
|
|
9587
9567
|
"empty_completion",
|
|
@@ -9721,10 +9701,6 @@ ${event.answer ? `**Answer:** ${event.answer}
|
|
|
9721
9701
|
}
|
|
9722
9702
|
return `*[${event.tool} output truncated]*
|
|
9723
9703
|
`;
|
|
9724
|
-
// Historical sessions may still carry `memory_usage`. Memory subsystem is
|
|
9725
|
-
// gone; keep the case for ActivityEvent exhaustiveness and render nothing.
|
|
9726
|
-
case "memory_usage":
|
|
9727
|
-
return "";
|
|
9728
9704
|
// Despite the name, `memory_recall_usage` is Zeus's telemetry transport for
|
|
9729
9705
|
// some events and still appears in projected transcripts. Keep handling.
|
|
9730
9706
|
case "memory_recall_usage":
|
|
@@ -10659,7 +10635,6 @@ function validateRepoUrl(url) {
|
|
|
10659
10635
|
var PROMPT_TERMINAL_STATUSES = /* @__PURE__ */ new Set(["completed", "failed"]);
|
|
10660
10636
|
var RESULT_FETCH_ATTEMPTS = 5;
|
|
10661
10637
|
var SESSION_CREATE_PROMPT_PREVIEW_MAX_CHARS = 4e3;
|
|
10662
|
-
var ONBOARDING_PROMPT = "Onboard this repository onto Arcanist.";
|
|
10663
10638
|
function selectCreatedPrompt(prompts, promptId) {
|
|
10664
10639
|
if (prompts.length === 0) return null;
|
|
10665
10640
|
if (promptId) {
|
|
@@ -10747,7 +10722,7 @@ async function createCommand(repoUrl, promptArg, options, command) {
|
|
|
10747
10722
|
assertArcanistSessionMutationAllowed("create");
|
|
10748
10723
|
const config = requireConfig(runtime);
|
|
10749
10724
|
resolveModelAndBackend(options);
|
|
10750
|
-
const prompt =
|
|
10725
|
+
const prompt = await resolvePromptInput(promptArg, options);
|
|
10751
10726
|
const waitPollIntervalMs = options.wait ? parsePollInterval(options.pollInterval) : null;
|
|
10752
10727
|
const repoError = validateRepoUrl(repoUrl);
|
|
10753
10728
|
if (repoError) {
|
|
@@ -10761,14 +10736,6 @@ async function createCommand(repoUrl, promptArg, options, command) {
|
|
|
10761
10736
|
if (options.startBranch !== void 0 && !startBranch) {
|
|
10762
10737
|
throw new CliError("user", "--start-branch must not be empty.");
|
|
10763
10738
|
}
|
|
10764
|
-
const continuePr = options.continuePr?.trim();
|
|
10765
|
-
if (options.continuePr !== void 0 && !continuePr) {
|
|
10766
|
-
throw new CliError("user", "--continue-pr must not be empty.");
|
|
10767
|
-
}
|
|
10768
|
-
const continueMode = options.continueMode?.trim();
|
|
10769
|
-
if (options.continueMode !== void 0 && !continueMode) {
|
|
10770
|
-
throw new CliError("user", "--continue-mode must not be empty.");
|
|
10771
|
-
}
|
|
10772
10739
|
const uploadedFiles = await resolveUploadedFileOptions(options.uploadedFile);
|
|
10773
10740
|
const idempotencyKey = options.idempotencyKey ?? randomIdempotencyKey();
|
|
10774
10741
|
const sessionIdempotencyKey = `${idempotencyKey}:session`;
|
|
@@ -10781,9 +10748,6 @@ async function createCommand(repoUrl, promptArg, options, command) {
|
|
|
10781
10748
|
if (promptPreview) body.prompt = promptPreview;
|
|
10782
10749
|
if (baseBranch) body.baseBranch = baseBranch;
|
|
10783
10750
|
if (startBranch) body.startBranch = startBranch;
|
|
10784
|
-
if (continuePr) body.continuePrUrl = continuePr;
|
|
10785
|
-
if (continueMode) body.continueMode = continueMode;
|
|
10786
|
-
if (options.onboarding) body.onboarding = true;
|
|
10787
10751
|
const browserIdentity = options.browserIdentity?.trim();
|
|
10788
10752
|
if (options.browserIdentity !== void 0 && !browserIdentity) {
|
|
10789
10753
|
throw new CliError("user", "--browser-identity must be an identity ID or 'none'.");
|
|
@@ -10855,9 +10819,6 @@ async function createCommand(repoUrl, promptArg, options, command) {
|
|
|
10855
10819
|
if (options.autoVerify) output.autoVerify = true;
|
|
10856
10820
|
if (baseBranch) output.baseBranch = baseBranch;
|
|
10857
10821
|
if (startBranch) output.startBranch = startBranch;
|
|
10858
|
-
if (continuePr) output.continuePrUrl = continuePr;
|
|
10859
|
-
if (continueMode) output.continueMode = continueMode;
|
|
10860
|
-
if (options.onboarding) output.onboarding = true;
|
|
10861
10822
|
if (promptId) output.promptId = promptId;
|
|
10862
10823
|
Object.assign(output, waitResultFields);
|
|
10863
10824
|
writeJson(output);
|
|
@@ -12755,7 +12716,7 @@ function addCreateOptions(cmd) {
|
|
|
12755
12716
|
return cmd.argument("<repo-url>", "Repository URL").argument("[prompt]", "Prompt to send, or '-' to read stdin").option("--model <model>", "Model to use").option("--reasoning-effort <effort>", "Reasoning effort to use for models that support it").option("--auto-verify", "Opt this session into automatic QA verification after PR creation").option("--base-branch <branch>", "Base branch to create the session against (defaults to the repo default branch)").option(
|
|
12756
12717
|
"--start-branch <branch>",
|
|
12757
12718
|
"Resume an existing branch with its history instead of forking a new one off base"
|
|
12758
|
-
).option("--
|
|
12719
|
+
).option("--browser-identity <id|none>", "Attach a business browser identity, or explicitly attach none").option("--prompt-stdin", "Read prompt from stdin").option(
|
|
12759
12720
|
"--uploaded-file <path>",
|
|
12760
12721
|
"Attach a local text file to the prompt as uploadedFiles; repeat for multiple files",
|
|
12761
12722
|
collectUploadedFileOption
|
|
@@ -12763,19 +12724,18 @@ function addCreateOptions(cmd) {
|
|
|
12763
12724
|
"--poll-interval <ms>",
|
|
12764
12725
|
"Polling interval in milliseconds while waiting",
|
|
12765
12726
|
String(DEFAULT_WATCH_POLL_INTERVAL_MS)
|
|
12766
|
-
).option("--idempotency-key <uuid>", "Request idempotency key for safe manual retries").
|
|
12727
|
+
).option("--idempotency-key <uuid>", "Request idempotency key for safe manual retries").addHelpText(
|
|
12767
12728
|
"after",
|
|
12768
12729
|
`
|
|
12769
12730
|
Examples:
|
|
12770
12731
|
arcanist sessions create https://github.com/org/repo "fix bug"
|
|
12771
|
-
arcanist sessions create https://github.com/org/repo "finish this PR" --continue-pr https://github.com/org/repo/pull/123
|
|
12772
12732
|
arcanist sessions create https://github.com/org/repo "review this trace" --uploaded-file trace.txt
|
|
12773
12733
|
printf "fix bug" | arcanist sessions create https://github.com/org/repo --prompt-stdin --json
|
|
12774
12734
|
printf "fix bug" | arcanist sessions create https://github.com/org/repo --prompt-stdin --wait
|
|
12775
12735
|
arcanist sessions create https://github.com/org/repo - --json | jq -r .sessionId | xargs -I{} arcanist sessions events {} --follow --json
|
|
12776
12736
|
|
|
12777
12737
|
JSON:
|
|
12778
|
-
JSON mode returns {sessionId, sessionUrl?, repoUrl, model?, reasoningEffort?, autoVerify?, baseBranch?, startBranch?,
|
|
12738
|
+
JSON mode returns {sessionId, sessionUrl?, repoUrl, model?, reasoningEffort?, autoVerify?, baseBranch?, startBranch?, promptId?}
|
|
12779
12739
|
--wait --json also includes best-effort result fields when available: prUrl?, publishedBranch?, lastBranch?
|
|
12780
12740
|
Follow async progress with: arcanist sessions events <session-id> --follow --json
|
|
12781
12741
|
`
|