glimmervoid 0.42.1 → 0.42.2
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 +2 -2
- package/dist/bin/glimmervoid.js +8 -8
- package/dist/chunks/{adapters-CWIHOfVo.js → adapters-Bga1N6Ie.js} +2 -2
- package/dist/chunks/{adapters-DzClvFt5.js → adapters-DeqV4wUv.js} +1 -1
- package/dist/chunks/{agent-api-cli-Cn-g_ej_.js → agent-api-cli-DWVeqlLu.js} +1 -1
- package/dist/chunks/{agent-api-cli-2FKWf5jj.js → agent-api-cli-YvQ8WxHA.js} +1 -1
- package/dist/chunks/{agent-api-core-CP4J2B39.js → agent-api-core-DFYLP1bF.js} +1 -1
- package/dist/chunks/config-store-CGrS8s6x.js +1 -0
- package/dist/chunks/{config-store-Br2PY4Tg.js → config-store-DOGtTJ1d.js} +2 -69
- package/dist/chunks/{contracts-DJqeCtR3.js → contracts-Ds_eevZs.js} +2 -12
- package/dist/chunks/{control-messages-DHDEMTLI.js → control-messages-Dgap3JRR.js} +1 -44
- package/dist/chunks/{main-ZpBLKI1h.js → main-Ywst1s6Z.js} +25 -454
- package/dist/chunks/{pair-cli-DW5mUBZa.js → pair-cli-PCXITdEd.js} +2 -2
- package/dist/chunks/{remote-config-DcmhRuRc.js → remote-config-DeWURqqr.js} +1 -1
- package/dist/chunks/{settings-cli-BnM9rg8B.js → settings-cli-xpR7vk9L.js} +4 -4
- package/dist/chunks/{settings-readout-core-2XunjdBA.js → settings-readout-core-C2mOk9Yz.js} +1 -1
- package/dist/chunks/{ssh-sign-cli-CmnA5lFM.js → ssh-sign-cli-rKiqiNem.js} +1 -1
- package/dist/client/assets/index-D9A5nTKg.js +177 -0
- package/dist/client/assets/index-NhAGtpDY.css +2 -0
- package/dist/client/index.html +2 -3
- package/dist/server/index.js +1 -1
- package/package.json +2 -2
- package/dist/chunks/config-store-DwYjz6h1.js +0 -1
- package/dist/client/assets/index-CBGmkbVV.js +0 -176
- package/dist/client/assets/index-NhlaT6eP.css +0 -2
|
@@ -4,9 +4,9 @@ import { a as sanitizeWorktreeName, i as safePathSegment, n as equalsIgnoringCas
|
|
|
4
4
|
import { a as packageRoot, n as cliPath, o as relayPath, r as clientDir, s as resolvePackageBin, t as bundled } from "./runtime-paths-BkeftE60.js";
|
|
5
5
|
import { $t as STATES, A as SIGN_URL_ENV, At as TeamReviewStatus, B as LinkedPr, Bt as shortSha, Ct as ReviewThreadId, Dt as TeamReviewCompareFiles, E as SESSION_DOC_BODY_CAP_BYTES, Ft as decisionAsIfApprovalRequired, G as MyPrKeepMergeableRequest, H as MyPrAutoRebase, Ht as NODE_ID_RE, I as SshSignRequest, J as MyPrMergeMethod, L as TASK_TITLE_CONTROL_CHARACTERS, Lt as hasStandingViewerApproval, Mt as TeamReviewThreadResult, Nt as TeamReviewThreadsRepository, O as SESSION_NAME_PATTERN, Ot as TeamReviewResolveResponse, Pt as canApproveAfterComment, Q as MyPrMergeWhenReadyRequest, Qt as RESTARTABLE_STATES, R as TaskTitle, S as ConversationQuestion, St as ReviewResult, Tt as TeamReviewActionRequest, U as MyPrCheckContext, Ut as REPO_SLUG_RE, V as MyPr, Vt as GH_SEGMENT, W as MyPrCheckContextsResponse, Wt as repoParts, Xt as KILLABLE_STATES, Y as MyPrMergeRequest, Yt as BADGE_LABELS, Z as MyPrMergeStateResponse, Zt as MERGEABLE_LIVE_STATES, _ as CONVERSATION_TOOL_RESULT_HOOK_EVENT, _t as QueuedReview, bt as ReviewDraft, dt as EarlierReview, ft as FindingSeverity, g as CONVERSATION_PERMISSION_HOOK_EVENT, gt as PrDetail, h as CONVERSATION_APPROVAL_SUMMARY_MAX_CHARS, ht as PostingPlan, it as MyPrsState, j as SSH_SIGN_BODY_CAP_BYTES, jt as TeamReviewThreadCommentsResponse, k as SESSION_NAME_RULE_TEXT, kt as TeamReviewStateEntry, lt as CommitSha, m as COHERENCE_HOOKS_INACTIVE, mt as GithubReviewState, n as AGENT_URL_ENV, nt as MyPrThreadsResponse, q as MyPrLaneEntry, r as ASK_USER_QUESTION_TOOL_NAME, rt as MyPrsSnapshot, tt as MyPrThreadNode, ut as DECIDING_REVIEW_STATES, w as RefinedTaskTitle, wt as ReviewVerdict, xt as ReviewFinding, yt as ReviewComment, zt as HEX_SHA_RE } from "./session-3eSP3t1i.js";
|
|
6
6
|
import { n as execFileAsync, o as spawn, r as execFileSync, t as execFile } from "./child-process-safe-D4hyVIXj.js";
|
|
7
|
-
import { At as
|
|
7
|
+
import { At as GithubIssueResponse, C as comparablePrKey, Ct as PLAN_RESULT_HOOK_EVENT, Dt as parseExitPlanModeHookPayload, E as WorkflowsSettings, Et as PlanRevision, F as KEEP_MERGEABLE_TIMEOUT_MINUTES_RANGE, Ft as IssuesStatus, It as issuePullRequestStateFromGithub, Mt as IssueUpdate, Nt as IssuesSearchResponse, O as WorkflowsState, Ot as planTitle, Pt as IssuesState, S as GithubPrsFrame, St as PLAN_HOOK_OUTPUT_MAX_CHARS, T as WorkflowLabelName, Tt as PlanDecision, _ as MinedPrReviewData, _t as CoherenceJournalOutput, b as GithubPrKey, bt as PLAN_BODY_CAP_BYTES, c as BenchmarkActionRequest, d as BenchmarkJudgement, f as BenchmarkRun, ft as UpdateJournal, g as MergedPrListing, gt as TraceRecord, h as CommitComparison, ht as TraceCheckpoint, jt as IssueKey, kt as GithubIssuePullRequestsRepository, l as BenchmarkCase, m as BenchmarkSuite, mt as MAX_RAW_LINE_CHARS, n as ClientMessage, p as BenchmarkStatus, pt as SessionSetup, s as pullRequestKeyFromReference, t as CONTROL_FRAME_MAX_BYTES, tt as USAGE_INTEGER_RANGES, u as BenchmarkId, v as PrCheckoutCaseInput, vt as ChangeMap, w as WorkflowCommentBody, wt as PLAN_TOOL_NAME, x as GithubPrLightSearchNode, xt as PLAN_HOOK_EVENT, y as GithubPrDetailNode, yt as changeMapFactId } from "./control-messages-Dgap3JRR.js";
|
|
8
8
|
import { a as permitsHelpCommand, r as describeSessionLimits } from "./session-routes-B2oSzmQn.js";
|
|
9
|
-
import { a as decideSpawnAllowance, c as describeKeptChildAttention, d as describeUnpushedCloseRefusal, h as projectReviews, i as decideAgentRequest, l as describePushLanding, m as projectMyPrs, n as REFUSAL_REASON, o as deriveChildSessionName, p as parseAgentVerb, s as describeChildEndNote, u as describeRoleRefusal } from "./agent-api-core-
|
|
9
|
+
import { a as decideSpawnAllowance, c as describeKeptChildAttention, d as describeUnpushedCloseRefusal, h as projectReviews, i as decideAgentRequest, l as describePushLanding, m as projectMyPrs, n as REFUSAL_REASON, o as deriveChildSessionName, p as parseAgentVerb, s as describeChildEndNote, u as describeRoleRefusal } from "./agent-api-core-DFYLP1bF.js";
|
|
10
10
|
import { n as glimmervoidHomeDir, t as decideConfigPath } from "./config-path-core-DFt-TemS.js";
|
|
11
11
|
import { i as parseCommandLine, n as warnWhenGitIsTooOld } from "./git-version-DqagvnAZ.js";
|
|
12
12
|
import { n as checkGuardrailsDependencies, t as allowGuardedSpawn } from "./guardrails-deps-BjPzk1rE.js";
|
|
@@ -21,13 +21,13 @@ import { n as DEFAULT_MAX_MS, r as nextBackoffMs, t as DEFAULT_BASE_MS } from ".
|
|
|
21
21
|
import { n as unrefTimer, t as DEFAULT_TIMER_FNS } from "./timer-deps-u2DAQLok.js";
|
|
22
22
|
import { n as shellQuote } from "./hook-command-core-qTNK-xMF.js";
|
|
23
23
|
import { C as parseCgroupBytes, S as memoryReserveBytes, T as parseMemAvailableBytes, _ as createSpawnGate, a as jsonStateLoadError, b as cgroupLimitBytes, c as loadedJsonValue, d as writeJsonAtomicSync, f as writeTextAtomic, g as createSerialQueue, h as createMemoryAdmission, i as createJsonStateWriter, m as createKeyedSerialQueue, n as appendJsonLines, o as loadJsonStateFile, p as writeTextAtomicSync, r as createJsonStateStore, s as loadJsonStateFileSync, t as appendJsonLine, u as writeJsonAtomic, v as isQueueAdmissionTimeout, w as parseCgroupV2Path, x as headroomFromReadings, y as cgroupAncestorPaths } from "./json-file-DFCTvPjj.js";
|
|
24
|
-
import { $ as DEFAULT_BRANCH_GC_PREFIXES, B as buildExceptionProperties, F as TELEMETRY_BATCH_URL, G as exceptionFingerprint, H as decideIsDevInstall, I as TELEMETRY_FLAGS_URL, J as resolveProjectToken, K as nodeMajorVersion, L as adapterBucket, P as FIRST_RUN_NOTICE, R as buildAiGenerationEvents, U as decideRemoteTelemetryState, V as classifySessionExit, W as decideTelemetryConsent, Z as stableConfigKey, a as generateProjectId, at as worktreeIntegrationTips, b as validateSettingsBlock, ct as isSameDirectoryPath, d as assetForPlatform, et as matchedPrefix, f as decideRtkInstall, g as verifyDigest, h as isRtkBinaryName, i as ensureProjectIds, it as usablePrefixes, m as installTargetPath, n as DEFAULT_CONFIG, nt as planWorktreeGc, o as glimmervoidHomeDir$1, ot as canonicalizePath, p as findEscapingArchiveMember, q as parsePosthogReleaseId, r as createConfigStore, rt as sessionIdFromBranch, st as comparableDirectoryPath, t as ABORT_CONFIG_SAVE, tt as planBranchGc, v as mergeSettingsBlock, y as settingsBlockSpecFor, z as buildBrowserExceptionProperties } from "./config-store-
|
|
25
|
-
import {
|
|
26
|
-
import { A as dedupeCodexFiles, B as shouldPersistWarehouse, C as shortSha$1, D as codexSessionIdFromPath, E as codexRootCandidates, F as passOutcome, H as claudeCode, I as projectDirCandidates, L as resolveProjectsDirs, M as grokHomes, N as grokRootCandidates, O as continuationDelayMs, P as isUsageFile, R as scopedClaudeRoots, S as parseResolvedSha, T as codexHomes, V as splitLines$1, _ as isCheckFresh, a as describeAgentResolvability, b as parseRegistryDeprecation, c as isKnownAgentId, d as resolveAdapter, f as setCustomAgents, g as decideUpdateStatus, h as decideInstallFlavor, i as customAgentFingerprint, j as expandTilde, k as decideFileRead, l as listAgentIds, m as readHostCodexVersion, n as cachedAgentResolvability, o as getAdapter, p as codex, r as commandFor, s as hookProfileOf, t as DEFAULT_AGENT_ID, u as resetCommandCache, v as normalizeSha, w as codexFallbackRoots, x as parseRegistryLatest, y as normalizeUpdateChannel, z as shouldEvaluateDespiteIoFailures } from "./adapters-
|
|
24
|
+
import { $ as DEFAULT_BRANCH_GC_PREFIXES, B as buildExceptionProperties, F as TELEMETRY_BATCH_URL, G as exceptionFingerprint, H as decideIsDevInstall, I as TELEMETRY_FLAGS_URL, J as resolveProjectToken, K as nodeMajorVersion, L as adapterBucket, P as FIRST_RUN_NOTICE, R as buildAiGenerationEvents, U as decideRemoteTelemetryState, V as classifySessionExit, W as decideTelemetryConsent, Z as stableConfigKey, a as generateProjectId, at as worktreeIntegrationTips, b as validateSettingsBlock, ct as isSameDirectoryPath, d as assetForPlatform, et as matchedPrefix, f as decideRtkInstall, g as verifyDigest, h as isRtkBinaryName, i as ensureProjectIds, it as usablePrefixes, m as installTargetPath, n as DEFAULT_CONFIG, nt as planWorktreeGc, o as glimmervoidHomeDir$1, ot as canonicalizePath, p as findEscapingArchiveMember, q as parsePosthogReleaseId, r as createConfigStore, rt as sessionIdFromBranch, st as comparableDirectoryPath, t as ABORT_CONFIG_SAVE, tt as planBranchGc, v as mergeSettingsBlock, y as settingsBlockSpecFor, z as buildBrowserExceptionProperties } from "./config-store-DOGtTJ1d.js";
|
|
25
|
+
import { T as USAGE_VENDOR_KEYS, _ as PersistedTaskTitle, a as parseDataClientMessage, b as configIssueMessage, c as PendingCrashReport, d as TelemetryState, g as ConfigUpdate, i as parseDataAttachHistory, l as TELEMETRY_EVENT_SCHEMAS, m as BrowserConfig, n as HookEnvelope, o as DashboardTelemetryReport, r as DEEP_HISTORY_SCROLLBACK_LINES, t as HTTP_URL_RE, v as RUNTIME_CONFIG_SCALAR_KEYS, w as USAGE_COST_MODES, y as TASK_TITLE_SOURCE_PRIORITY } from "./contracts-Ds_eevZs.js";
|
|
26
|
+
import { A as dedupeCodexFiles, B as shouldPersistWarehouse, C as shortSha$1, D as codexSessionIdFromPath, E as codexRootCandidates, F as passOutcome, H as claudeCode, I as projectDirCandidates, L as resolveProjectsDirs, M as grokHomes, N as grokRootCandidates, O as continuationDelayMs, P as isUsageFile, R as scopedClaudeRoots, S as parseResolvedSha, T as codexHomes, V as splitLines$1, _ as isCheckFresh, a as describeAgentResolvability, b as parseRegistryDeprecation, c as isKnownAgentId, d as resolveAdapter, f as setCustomAgents, g as decideUpdateStatus, h as decideInstallFlavor, i as customAgentFingerprint, j as expandTilde, k as decideFileRead, l as listAgentIds, m as readHostCodexVersion, n as cachedAgentResolvability, o as getAdapter, p as codex, r as commandFor, s as hookProfileOf, t as DEFAULT_AGENT_ID, u as resetCommandCache, v as normalizeSha, w as codexFallbackRoots, x as parseRegistryLatest, y as normalizeUpdateChannel, z as shouldEvaluateDespiteIoFailures } from "./adapters-Bga1N6Ie.js";
|
|
27
27
|
import { t as HOOK_TOOLS } from "./hook-tools-Dl7-r2Eb.js";
|
|
28
28
|
import { a as formatSshPublicKey, c as orderAgentSockets, i as commitSigningShimText, l as parseSshPublicKey, n as NO_AGENT_HOLDS_KEY, o as isForwardedAgentDirName, r as agentListsKey, s as isSignableGitObject, t as COMMIT_SIGNING_SHIM_NAME } from "./ssh-signing-core-CRhVVWNW.js";
|
|
29
|
-
import { a as configSiblingPath, c as defaultPairingsPath, d as decideDeviceAuth, f as deviceNameFromUserAgent, l as defaultSeenPath, n as normalizeRemoteConfig, o as createPairingsStore, p as hashSecret, r as validateRemoteConfig, s as createSeenStore, t as decideBindHost, u as DEFAULT_DEVICE_MAX_AGE_MS } from "./remote-config-
|
|
30
|
-
import { n as configFileViewOf, u as readSettingsForAgent } from "./settings-readout-core-
|
|
29
|
+
import { a as configSiblingPath, c as defaultPairingsPath, d as decideDeviceAuth, f as deviceNameFromUserAgent, l as defaultSeenPath, n as normalizeRemoteConfig, o as createPairingsStore, p as hashSecret, r as validateRemoteConfig, s as createSeenStore, t as decideBindHost, u as DEFAULT_DEVICE_MAX_AGE_MS } from "./remote-config-DeWURqqr.js";
|
|
30
|
+
import { n as configFileViewOf, u as readSettingsForAgent } from "./settings-readout-core-C2mOk9Yz.js";
|
|
31
31
|
import { _ as escapeMarkup, g as createLaneLog, n as createVisionsSetup } from "./visions-setup-DB2P8JUL.js";
|
|
32
32
|
import { t as getRtkPath } from "./rtk-resolver-BDHi6RMv.js";
|
|
33
33
|
import { createRequire } from "node:module";
|
|
@@ -3874,7 +3874,6 @@ function createBackendShutdown(dependencies) {
|
|
|
3874
3874
|
stoppers.add("telegram-outbox", () => dependencies.telegramOutbox.idle());
|
|
3875
3875
|
destroySessions([
|
|
3876
3876
|
dependencies.visionsSessions,
|
|
3877
|
-
dependencies.changeMapSessions,
|
|
3878
3877
|
dependencies.taskTitleSessions ?? /* @__PURE__ */ new Map(),
|
|
3879
3878
|
dependencies.benchmarkSessions ?? /* @__PURE__ */ new Map()
|
|
3880
3879
|
], pendingReaps);
|
|
@@ -34791,319 +34790,6 @@ function createIngestLane({ config = null, broadcast = null, logger = console, l
|
|
|
34791
34790
|
};
|
|
34792
34791
|
}
|
|
34793
34792
|
//#endregion
|
|
34794
|
-
//#region server/change-map/core/change-narrative-core.ts
|
|
34795
|
-
var FACT_GROUPS = [
|
|
34796
|
-
"files",
|
|
34797
|
-
"subsystems",
|
|
34798
|
-
"coChangeGaps",
|
|
34799
|
-
"hotspots",
|
|
34800
|
-
"blastRadius",
|
|
34801
|
-
"untestedFiles",
|
|
34802
|
-
"collisions",
|
|
34803
|
-
"links"
|
|
34804
|
-
];
|
|
34805
|
-
function narrativeFacts(map) {
|
|
34806
|
-
return { repos: map.repos.map((repo) => ({
|
|
34807
|
-
name: repo.name,
|
|
34808
|
-
base: repo.base,
|
|
34809
|
-
totalCounts: Object.fromEntries(FACT_GROUPS.map((group) => [group, repo[group].length])),
|
|
34810
|
-
files: capFacts(repo.files, compareFactIds),
|
|
34811
|
-
subsystems: capFacts(repo.subsystems, compareFactIds).map(capSubsystemPaths),
|
|
34812
|
-
coChangeGaps: capFacts(repo.coChangeGaps, compareFactIds),
|
|
34813
|
-
hotspots: capFacts(repo.hotspots, compareFactIds),
|
|
34814
|
-
blastRadius: capFacts(repo.blastRadius, compareBlastRadius),
|
|
34815
|
-
untestedFiles: capFacts(repo.untestedFiles, compareFactIds),
|
|
34816
|
-
collisions: capFacts(repo.collisions, compareFactIds),
|
|
34817
|
-
links: capFacts(repo.links, compareLinks)
|
|
34818
|
-
})).sort((left, right) => left.name.localeCompare(right.name)) };
|
|
34819
|
-
}
|
|
34820
|
-
function capFacts(facts, compare) {
|
|
34821
|
-
return [...facts].sort(compare).slice(0, 20);
|
|
34822
|
-
}
|
|
34823
|
-
function capSubsystemPaths(subsystem) {
|
|
34824
|
-
return {
|
|
34825
|
-
...subsystem,
|
|
34826
|
-
paths: subsystem.paths.slice(0, 20),
|
|
34827
|
-
pathCount: subsystem.paths.length
|
|
34828
|
-
};
|
|
34829
|
-
}
|
|
34830
|
-
function compareFactIds(left, right) {
|
|
34831
|
-
return left.factId.localeCompare(right.factId);
|
|
34832
|
-
}
|
|
34833
|
-
function compareBlastRadius(left, right) {
|
|
34834
|
-
return right.transitiveDependentCount - left.transitiveDependentCount || compareFactIds(left, right);
|
|
34835
|
-
}
|
|
34836
|
-
function compareLinks(left, right) {
|
|
34837
|
-
return right.changedImporterCount - left.changedImporterCount || right.importerCount - left.importerCount || compareFactIds(left, right);
|
|
34838
|
-
}
|
|
34839
|
-
function factsHashInput(map) {
|
|
34840
|
-
return JSON.stringify(narrativeFacts(map), (_key, value) => {
|
|
34841
|
-
if (!value || typeof value !== "object" || Array.isArray(value)) return value;
|
|
34842
|
-
return Object.fromEntries(Object.entries(value).sort(([left], [right]) => {
|
|
34843
|
-
if (left < right) return -1;
|
|
34844
|
-
if (left > right) return 1;
|
|
34845
|
-
return 0;
|
|
34846
|
-
}));
|
|
34847
|
-
});
|
|
34848
|
-
}
|
|
34849
|
-
function hasNarratableFacts(map) {
|
|
34850
|
-
return map.repos.some((repo) => repo.files.length > 0);
|
|
34851
|
-
}
|
|
34852
|
-
function knownNarrativeFactIds(map) {
|
|
34853
|
-
const knownFactIds = /* @__PURE__ */ new Set();
|
|
34854
|
-
for (const repo of narrativeFacts(map).repos) for (const group of FACT_GROUPS) for (const fact of repo[group]) knownFactIds.add(fact.factId);
|
|
34855
|
-
return knownFactIds;
|
|
34856
|
-
}
|
|
34857
|
-
function buildNarrativePrompt({ facts, resultPath }) {
|
|
34858
|
-
const deliveryLines = resultPath ? ["Use no tools except Write to the exact result file path below.", "Write"] : ["Answer with the JSON as your final message and write no files.", "Return"];
|
|
34859
|
-
return [
|
|
34860
|
-
"The facts below are your only source of truth. Read nothing else.",
|
|
34861
|
-
deliveryLines[0],
|
|
34862
|
-
`${deliveryLines[1]} JSON { "claims": [{ "text": string, "factIds": string[] }] } with at most 12 claims.`,
|
|
34863
|
-
"Each claim must be one or two plain-English sentences about how a change connects to the codebase or what risk it carries.",
|
|
34864
|
-
"Every claim must cite one or more factIds copied exactly from the facts. Do not invent facts or identifiers.",
|
|
34865
|
-
"When links are present, lead with how a change in one repository reaches another through them.",
|
|
34866
|
-
`Each fact list and subsystem path list holds at most 20 entries; totalCounts and pathCount give the full sizes.`,
|
|
34867
|
-
`Keep each claim within 600 characters.`,
|
|
34868
|
-
...resultPath ? [`Result file: ${resultPath}`] : [],
|
|
34869
|
-
`Facts JSON: ${JSON.stringify(facts)}`
|
|
34870
|
-
].join("\n");
|
|
34871
|
-
}
|
|
34872
|
-
function validateNarrative({ raw, knownFactIds, factsHash, model }) {
|
|
34873
|
-
if (!raw || typeof raw !== "object" || Array.isArray(raw)) return null;
|
|
34874
|
-
const offeredClaims = "claims" in raw ? raw.claims : null;
|
|
34875
|
-
if (!Array.isArray(offeredClaims)) return null;
|
|
34876
|
-
const claims = [];
|
|
34877
|
-
for (const offeredClaim of offeredClaims) {
|
|
34878
|
-
if (!offeredClaim || typeof offeredClaim !== "object" || Array.isArray(offeredClaim)) continue;
|
|
34879
|
-
const text = "text" in offeredClaim ? offeredClaim.text : null;
|
|
34880
|
-
const factIds = "factIds" in offeredClaim ? offeredClaim.factIds : null;
|
|
34881
|
-
if (typeof text !== "string" || text.length > 600) continue;
|
|
34882
|
-
if (!Array.isArray(factIds)) continue;
|
|
34883
|
-
const cleanText = text.replaceAll(String.fromCharCode(8212), "-").replaceAll(String.fromCharCode(8211), "-").replaceAll(String.fromCharCode(8230), "...").trim();
|
|
34884
|
-
if (!cleanText || cleanText.length > 600) continue;
|
|
34885
|
-
const citedFactIds = [...new Set(factIds.filter((factId) => typeof factId === "string" && knownFactIds.has(factId)))];
|
|
34886
|
-
if (citedFactIds.length === 0) continue;
|
|
34887
|
-
claims.push({
|
|
34888
|
-
text: cleanText,
|
|
34889
|
-
factIds: citedFactIds
|
|
34890
|
-
});
|
|
34891
|
-
if (claims.length >= 12) break;
|
|
34892
|
-
}
|
|
34893
|
-
if (claims.length === 0) return null;
|
|
34894
|
-
return {
|
|
34895
|
-
factsHash,
|
|
34896
|
-
model,
|
|
34897
|
-
claims
|
|
34898
|
-
};
|
|
34899
|
-
}
|
|
34900
|
-
//#endregion
|
|
34901
|
-
//#region server/change-map/change-narrator.ts
|
|
34902
|
-
var MAX_CACHED_HASHES = 64;
|
|
34903
|
-
var PROMPT_FILE$2 = "change-narrative-prompt.txt";
|
|
34904
|
-
var RESULT_FILE$2 = "change-narrative-result.json";
|
|
34905
|
-
var SCHEMA_FILE = "change-narrative-schema.json";
|
|
34906
|
-
var BOOTSTRAP_PROMPT$1 = `Read ${PROMPT_FILE$2} and follow its instructions`;
|
|
34907
|
-
var CODEX_BOOTSTRAP_PROMPT = `Read ${PROMPT_FILE$2} in your cwd and answer only with the JSON`;
|
|
34908
|
-
var CODEX_OUTPUT_SCHEMA = {
|
|
34909
|
-
type: "object",
|
|
34910
|
-
additionalProperties: false,
|
|
34911
|
-
required: ["claims"],
|
|
34912
|
-
properties: { claims: {
|
|
34913
|
-
type: "array",
|
|
34914
|
-
maxItems: 12,
|
|
34915
|
-
items: {
|
|
34916
|
-
type: "object",
|
|
34917
|
-
additionalProperties: false,
|
|
34918
|
-
required: ["text", "factIds"],
|
|
34919
|
-
properties: {
|
|
34920
|
-
text: { type: "string" },
|
|
34921
|
-
factIds: {
|
|
34922
|
-
type: "array",
|
|
34923
|
-
items: { type: "string" }
|
|
34924
|
-
}
|
|
34925
|
-
}
|
|
34926
|
-
}
|
|
34927
|
-
} }
|
|
34928
|
-
};
|
|
34929
|
-
async function codexLaunch(workDir, resultPath, codexModel) {
|
|
34930
|
-
const schemaPath = path.join(workDir, SCHEMA_FILE);
|
|
34931
|
-
await fsp.writeFile(schemaPath, JSON.stringify(CODEX_OUTPUT_SCHEMA), "utf8");
|
|
34932
|
-
return {
|
|
34933
|
-
promptResultPath: null,
|
|
34934
|
-
bootstrapPrompt: CODEX_BOOTSTRAP_PROMPT,
|
|
34935
|
-
agent: "codex",
|
|
34936
|
-
extraArgs: [
|
|
34937
|
-
"exec",
|
|
34938
|
-
"--ephemeral",
|
|
34939
|
-
"--skip-git-repo-check",
|
|
34940
|
-
"--output-schema",
|
|
34941
|
-
schemaPath,
|
|
34942
|
-
"-o",
|
|
34943
|
-
resultPath,
|
|
34944
|
-
...codexModel ? ["-m", codexModel] : []
|
|
34945
|
-
],
|
|
34946
|
-
model: null
|
|
34947
|
-
};
|
|
34948
|
-
}
|
|
34949
|
-
function claudeLaunch(resultPath, model) {
|
|
34950
|
-
return {
|
|
34951
|
-
promptResultPath: resultPath,
|
|
34952
|
-
bootstrapPrompt: BOOTSTRAP_PROMPT$1,
|
|
34953
|
-
agent: void 0,
|
|
34954
|
-
extraArgs: [],
|
|
34955
|
-
model
|
|
34956
|
-
};
|
|
34957
|
-
}
|
|
34958
|
-
function makeNarrationWorkDir() {
|
|
34959
|
-
return fsp.mkdtemp(path.join(os.tmpdir(), "glimmervoid-change-narrative-"));
|
|
34960
|
-
}
|
|
34961
|
-
async function spawnNarrationWithSession({ map, factsHash, engine, model, codexModel, timeoutSeconds }, spawn, nowFn) {
|
|
34962
|
-
const workDir = await makeNarrationWorkDir();
|
|
34963
|
-
const promptPath = path.join(workDir, PROMPT_FILE$2);
|
|
34964
|
-
const resultPath = path.join(workDir, RESULT_FILE$2);
|
|
34965
|
-
const controller = new AbortController();
|
|
34966
|
-
const timeout = setTimeout(() => controller.abort(), timeoutSeconds * 1e3);
|
|
34967
|
-
timeout.unref();
|
|
34968
|
-
try {
|
|
34969
|
-
const launch = engine === "codex" ? await codexLaunch(workDir, resultPath, codexModel) : claudeLaunch(resultPath, model);
|
|
34970
|
-
await fsp.writeFile(promptPath, buildNarrativePrompt({
|
|
34971
|
-
facts: narrativeFacts(map),
|
|
34972
|
-
resultPath: launch.promptResultPath
|
|
34973
|
-
}), "utf8");
|
|
34974
|
-
await spawn({
|
|
34975
|
-
id: `change-narrative:${nowFn()}:${crypto.randomUUID()}`,
|
|
34976
|
-
name: "Change map narrative",
|
|
34977
|
-
cwd: workDir,
|
|
34978
|
-
prompt: launch.bootstrapPrompt,
|
|
34979
|
-
agent: launch.agent,
|
|
34980
|
-
extraArgs: launch.extraArgs,
|
|
34981
|
-
model: launch.model,
|
|
34982
|
-
signal: controller.signal
|
|
34983
|
-
});
|
|
34984
|
-
if (controller.signal.aborted) return null;
|
|
34985
|
-
return validateNarrative({
|
|
34986
|
-
raw: await readLaneResultFile(resultPath),
|
|
34987
|
-
knownFactIds: knownNarrativeFactIds(map),
|
|
34988
|
-
factsHash,
|
|
34989
|
-
model
|
|
34990
|
-
});
|
|
34991
|
-
} finally {
|
|
34992
|
-
clearTimeout(timeout);
|
|
34993
|
-
await fsp.rm(workDir, {
|
|
34994
|
-
recursive: true,
|
|
34995
|
-
force: true
|
|
34996
|
-
});
|
|
34997
|
-
}
|
|
34998
|
-
}
|
|
34999
|
-
function createChangeNarrator({ getConfig, spawnNarration, spawnLane = createLaneSpawn({ laneName: "change-map" }), nowFn = () => Date.now() }) {
|
|
35000
|
-
const runNarration = spawnNarration ?? ((request) => spawnNarrationWithSession(request, spawnLane, nowFn));
|
|
35001
|
-
const cachedByHash = /* @__PURE__ */ new Map();
|
|
35002
|
-
const queuedBySessionId = /* @__PURE__ */ new Map();
|
|
35003
|
-
let active = null;
|
|
35004
|
-
function narratorSettings() {
|
|
35005
|
-
const parsed = BrowserConfig.shape.changeMap.safeParse(getConfig().changeMap);
|
|
35006
|
-
if (!parsed.success) return null;
|
|
35007
|
-
return parsed.data?.narrator ?? null;
|
|
35008
|
-
}
|
|
35009
|
-
function cache(factsHash, narrative) {
|
|
35010
|
-
cachedByHash.delete(factsHash);
|
|
35011
|
-
cachedByHash.set(factsHash, narrative);
|
|
35012
|
-
if (cachedByHash.size <= MAX_CACHED_HASHES) return;
|
|
35013
|
-
const oldestHash = cachedByHash.keys().next().value;
|
|
35014
|
-
if (oldestHash) cachedByHash.delete(oldestHash);
|
|
35015
|
-
}
|
|
35016
|
-
function start(request) {
|
|
35017
|
-
const callbacksBySessionId = /* @__PURE__ */ new Map([[request.sessionId, request.onSettled]]);
|
|
35018
|
-
active = {
|
|
35019
|
-
factsHash: request.factsHash,
|
|
35020
|
-
callbacksBySessionId
|
|
35021
|
-
};
|
|
35022
|
-
Promise.resolve().then(() => runNarration(request)).then((narrative) => finish(request.factsHash, narrative), () => finish(request.factsHash, null));
|
|
35023
|
-
}
|
|
35024
|
-
function startNext() {
|
|
35025
|
-
if (active) return;
|
|
35026
|
-
for (const [sessionId, request] of queuedBySessionId) {
|
|
35027
|
-
queuedBySessionId.delete(sessionId);
|
|
35028
|
-
if (!narratorSettings()?.enabled || cachedByHash.has(request.factsHash)) {
|
|
35029
|
-
request.onSettled();
|
|
35030
|
-
continue;
|
|
35031
|
-
}
|
|
35032
|
-
start(request);
|
|
35033
|
-
break;
|
|
35034
|
-
}
|
|
35035
|
-
}
|
|
35036
|
-
function finish(factsHash, narrative) {
|
|
35037
|
-
if (!active || active.factsHash !== factsHash) return;
|
|
35038
|
-
const callbacks = [...active.callbacksBySessionId.values()];
|
|
35039
|
-
cache(factsHash, narrative);
|
|
35040
|
-
active = null;
|
|
35041
|
-
startNext();
|
|
35042
|
-
for (const callback of callbacks) callback();
|
|
35043
|
-
}
|
|
35044
|
-
function narrationFor(map, onSettled, { mayStart = true } = {}) {
|
|
35045
|
-
const config = narratorSettings();
|
|
35046
|
-
if (!config?.enabled || !hasNarratableFacts(map)) {
|
|
35047
|
-
queuedBySessionId.delete(map.sessionId);
|
|
35048
|
-
return {
|
|
35049
|
-
narrative: null,
|
|
35050
|
-
narratorState: "disabled"
|
|
35051
|
-
};
|
|
35052
|
-
}
|
|
35053
|
-
const engine = config.engine ?? "claude";
|
|
35054
|
-
const configuredModel = config.model?.trim() || "";
|
|
35055
|
-
const model = configuredModel || (engine === "claude" ? "haiku" : "codex default");
|
|
35056
|
-
const factsHash = crypto.createHash("sha256").update(JSON.stringify([
|
|
35057
|
-
factsHashInput(map),
|
|
35058
|
-
engine,
|
|
35059
|
-
configuredModel
|
|
35060
|
-
])).digest("hex");
|
|
35061
|
-
if (cachedByHash.has(factsHash)) {
|
|
35062
|
-
queuedBySessionId.delete(map.sessionId);
|
|
35063
|
-
const narrative = cachedByHash.get(factsHash) ?? null;
|
|
35064
|
-
return {
|
|
35065
|
-
narrative,
|
|
35066
|
-
narratorState: narrative ? "ready" : "failed"
|
|
35067
|
-
};
|
|
35068
|
-
}
|
|
35069
|
-
if (active?.factsHash === factsHash) {
|
|
35070
|
-
active.callbacksBySessionId.set(map.sessionId, onSettled);
|
|
35071
|
-
queuedBySessionId.delete(map.sessionId);
|
|
35072
|
-
return {
|
|
35073
|
-
narrative: null,
|
|
35074
|
-
narratorState: "pending"
|
|
35075
|
-
};
|
|
35076
|
-
}
|
|
35077
|
-
if (!mayStart) return {
|
|
35078
|
-
narrative: null,
|
|
35079
|
-
narratorState: queuedBySessionId.has(map.sessionId) ? "pending" : "disabled"
|
|
35080
|
-
};
|
|
35081
|
-
const request = {
|
|
35082
|
-
map,
|
|
35083
|
-
factsHash,
|
|
35084
|
-
sessionId: map.sessionId,
|
|
35085
|
-
onSettled,
|
|
35086
|
-
engine,
|
|
35087
|
-
model,
|
|
35088
|
-
codexModel: engine === "codex" ? configuredModel || null : null,
|
|
35089
|
-
timeoutSeconds: config.timeoutSeconds ?? 90
|
|
35090
|
-
};
|
|
35091
|
-
if (active) {
|
|
35092
|
-
queuedBySessionId.set(map.sessionId, request);
|
|
35093
|
-
return {
|
|
35094
|
-
narrative: null,
|
|
35095
|
-
narratorState: "pending"
|
|
35096
|
-
};
|
|
35097
|
-
}
|
|
35098
|
-
start(request);
|
|
35099
|
-
return {
|
|
35100
|
-
narrative: null,
|
|
35101
|
-
narratorState: "pending"
|
|
35102
|
-
};
|
|
35103
|
-
}
|
|
35104
|
-
return { narrationFor };
|
|
35105
|
-
}
|
|
35106
|
-
//#endregion
|
|
35107
34793
|
//#region server/task-title-refiner.ts
|
|
35108
34794
|
var PROMPT_FILE$1 = "task-title-prompt.txt";
|
|
35109
34795
|
var RESULT_FILE$1 = "task-title-result.json";
|
|
@@ -46476,7 +46162,6 @@ function createBackendLanes(dependencies) {
|
|
|
46476
46162
|
reviewSessions,
|
|
46477
46163
|
investigationSessions,
|
|
46478
46164
|
visionsSessions,
|
|
46479
|
-
changeMapSessions,
|
|
46480
46165
|
taskTitleSessions,
|
|
46481
46166
|
benchmarkSessions
|
|
46482
46167
|
];
|
|
@@ -46757,21 +46442,6 @@ function createBackendLanes(dependencies) {
|
|
|
46757
46442
|
...notice
|
|
46758
46443
|
});
|
|
46759
46444
|
});
|
|
46760
|
-
const changeMapSessions = /* @__PURE__ */ new Map();
|
|
46761
|
-
const changeMapNarrator = createChangeNarrator({
|
|
46762
|
-
getConfig: () => configStore.config,
|
|
46763
|
-
spawnLane: createLaneSpawn({
|
|
46764
|
-
sessions: changeMapSessions,
|
|
46765
|
-
closeSessionDataClients,
|
|
46766
|
-
hookRouter,
|
|
46767
|
-
getHookPort,
|
|
46768
|
-
spawnGate,
|
|
46769
|
-
recordLane,
|
|
46770
|
-
replayBufferKB: config.replayBufferKB,
|
|
46771
|
-
laneName: "change-map",
|
|
46772
|
-
guardrailsRefusal
|
|
46773
|
-
})
|
|
46774
|
-
});
|
|
46775
46445
|
const taskTitleSessions = /* @__PURE__ */ new Map();
|
|
46776
46446
|
const taskTitleRefiner = createTaskTitleRefiner({
|
|
46777
46447
|
getConfig: () => configStore.config,
|
|
@@ -46959,13 +46629,11 @@ function createBackendLanes(dependencies) {
|
|
|
46959
46629
|
branchGc,
|
|
46960
46630
|
coderActivity,
|
|
46961
46631
|
coderEnv,
|
|
46962
|
-
changeMapNarrator,
|
|
46963
46632
|
taskTitleRefiner,
|
|
46964
46633
|
taskTitleSessions,
|
|
46965
46634
|
current,
|
|
46966
46635
|
currentIngest,
|
|
46967
46636
|
currentVisions,
|
|
46968
|
-
changeMapSessions,
|
|
46969
46637
|
gitWorkspace,
|
|
46970
46638
|
gitWorkspaceSync,
|
|
46971
46639
|
githubStore,
|
|
@@ -49391,34 +49059,6 @@ function createSessionFactory(dependencies) {
|
|
|
49391
49059
|
};
|
|
49392
49060
|
}
|
|
49393
49061
|
//#endregion
|
|
49394
|
-
//#region server/core/diff-annotations-core.ts
|
|
49395
|
-
var DIFF_ANNOTATION_HEADER = "Operator review notes on the current worktree diff:";
|
|
49396
|
-
var DIFF_ANNOTATION_CLOSING = "Address each note, then reply with what changed.";
|
|
49397
|
-
var REMOVED_LINE_MARKER = "(removed line)";
|
|
49398
|
-
function sortAnnotations(list) {
|
|
49399
|
-
return [...list].sort((left, right) => {
|
|
49400
|
-
if (left.path !== right.path) return left.path < right.path ? -1 : 1;
|
|
49401
|
-
if (left.line !== right.line) return left.line - right.line;
|
|
49402
|
-
if (left.side === right.side) return 0;
|
|
49403
|
-
return left.side < right.side ? -1 : 1;
|
|
49404
|
-
});
|
|
49405
|
-
}
|
|
49406
|
-
function formatDiffAnnotationMessage(annotations) {
|
|
49407
|
-
const entries = sortAnnotations(annotations).flatMap((annotation) => {
|
|
49408
|
-
const note = scrubForPaste(annotation.note, DIFF_ANNOTATION_NOTE_MAX_CHARS);
|
|
49409
|
-
const path = scrubForPaste(annotation.path, 400);
|
|
49410
|
-
if (!note || !path) return [];
|
|
49411
|
-
const marker = annotation.side === "old" ? ` ${REMOVED_LINE_MARKER}` : "";
|
|
49412
|
-
return [`- ${path}:${annotation.line} (${annotation.section})${marker} ${note}`];
|
|
49413
|
-
});
|
|
49414
|
-
if (entries.length === 0) return "";
|
|
49415
|
-
return [
|
|
49416
|
-
DIFF_ANNOTATION_HEADER,
|
|
49417
|
-
...entries,
|
|
49418
|
-
DIFF_ANNOTATION_CLOSING
|
|
49419
|
-
].join("\n");
|
|
49420
|
-
}
|
|
49421
|
-
//#endregion
|
|
49422
49062
|
//#region server/github/core/github-issues-core.ts
|
|
49423
49063
|
var GITHUB_ISSUE_BODY_MAX_CHARS = 12e3;
|
|
49424
49064
|
function fencedBody(body) {
|
|
@@ -50406,7 +50046,7 @@ function changedFilesOf(scope) {
|
|
|
50406
50046
|
isCommitted: false
|
|
50407
50047
|
}));
|
|
50408
50048
|
}
|
|
50409
|
-
function createChangeMapService({ sessions,
|
|
50049
|
+
function createChangeMapService({ sessions, runGit = runGitAsync, nowFn = Date.now }) {
|
|
50410
50050
|
const specifierCache = createFileFactCache(extractImportSpecifiers, []);
|
|
50411
50051
|
const pythonSpecifierCache = createFileFactCache(extractPythonImportSpecifiers, []);
|
|
50412
50052
|
const tsconfigCache = createFileFactCache((text) => ({ config: parseTsconfigJsonc(text) }), { config: null });
|
|
@@ -50557,7 +50197,7 @@ function createChangeMapService({ sessions, narrator = null, onNarrationSettled
|
|
|
50557
50197
|
};
|
|
50558
50198
|
}
|
|
50559
50199
|
}
|
|
50560
|
-
async function assemble(session
|
|
50200
|
+
async function assemble(session) {
|
|
50561
50201
|
forgetEndedSiblings();
|
|
50562
50202
|
const scopes = await session.getChangeScopes();
|
|
50563
50203
|
const inputsByRoot = /* @__PURE__ */ new Map();
|
|
@@ -50638,44 +50278,31 @@ function createChangeMapService({ sessions, narrator = null, onNarrationSettled
|
|
|
50638
50278
|
for (const repo of repos) repo.links = [];
|
|
50639
50279
|
}
|
|
50640
50280
|
}
|
|
50641
|
-
|
|
50281
|
+
return ChangeMap.parse({
|
|
50642
50282
|
sessionId: session.id,
|
|
50643
50283
|
sig: hashText(JSON.stringify(scopes)),
|
|
50644
50284
|
generatedAt: nowFn(),
|
|
50645
|
-
repos
|
|
50646
|
-
|
|
50647
|
-
narratorState: "disabled"
|
|
50648
|
-
};
|
|
50649
|
-
const narration = narrator ? narrator.narrationFor(factsOnly, () => onNarrationSettled(session.id), { mayStart: mayStartNarration }) : null;
|
|
50650
|
-
return ChangeMap.parse(narration ? {
|
|
50651
|
-
...factsOnly,
|
|
50652
|
-
...narration
|
|
50653
|
-
} : factsOnly);
|
|
50285
|
+
repos
|
|
50286
|
+
});
|
|
50654
50287
|
}
|
|
50655
|
-
function startAssembly(session
|
|
50656
|
-
const running = assemble(session
|
|
50288
|
+
function startAssembly(session) {
|
|
50289
|
+
const running = assemble(session).finally(() => {
|
|
50657
50290
|
if (runningBySessionId.get(session.id) === running) runningBySessionId.delete(session.id);
|
|
50658
50291
|
});
|
|
50659
50292
|
runningBySessionId.set(session.id, running);
|
|
50660
50293
|
return running;
|
|
50661
50294
|
}
|
|
50662
|
-
function build(session
|
|
50295
|
+
function build(session) {
|
|
50663
50296
|
const queued = queuedBySessionId.get(session.id);
|
|
50664
|
-
if (queued)
|
|
50665
|
-
queued.mayStartNarration ||= mayStartNarration;
|
|
50666
|
-
return queued.promise;
|
|
50667
|
-
}
|
|
50297
|
+
if (queued) return queued;
|
|
50668
50298
|
const running = runningBySessionId.get(session.id);
|
|
50669
|
-
if (!running) return startAssembly(session
|
|
50670
|
-
const followUp = {
|
|
50671
|
-
|
|
50672
|
-
|
|
50673
|
-
|
|
50674
|
-
return startAssembly(session, followUp.mayStartNarration);
|
|
50675
|
-
})
|
|
50676
|
-
};
|
|
50299
|
+
if (!running) return startAssembly(session);
|
|
50300
|
+
const followUp = running.then(ignoreOutcome, ignoreOutcome).then(() => {
|
|
50301
|
+
queuedBySessionId.delete(session.id);
|
|
50302
|
+
return startAssembly(session);
|
|
50303
|
+
});
|
|
50677
50304
|
queuedBySessionId.set(session.id, followUp);
|
|
50678
|
-
return followUp
|
|
50305
|
+
return followUp;
|
|
50679
50306
|
}
|
|
50680
50307
|
return { build };
|
|
50681
50308
|
}
|
|
@@ -50969,12 +50596,6 @@ function requestValidationErrorReply(msg, message) {
|
|
|
50969
50596
|
ok: false,
|
|
50970
50597
|
error: message
|
|
50971
50598
|
}),
|
|
50972
|
-
"send-diff-annotations": () => ({
|
|
50973
|
-
type: "send-diff-annotations-result",
|
|
50974
|
-
requestId,
|
|
50975
|
-
ok: false,
|
|
50976
|
-
error: message
|
|
50977
|
-
}),
|
|
50978
50599
|
"session-doc-read": () => ({
|
|
50979
50600
|
type: "session-doc-response",
|
|
50980
50601
|
requestId,
|
|
@@ -51042,25 +50663,8 @@ function registerControlHandlers(controlWss, deps) {
|
|
|
51042
50663
|
issue: null,
|
|
51043
50664
|
error: "Issues polling is not running."
|
|
51044
50665
|
}
|
|
51045
|
-
}), issueProjectRepos = null, serverBuild = () => null, getUsageSessions = null, getUsageReport = null, requestUsageReport = null, getPlanLimits = null, controlReplayLog = null, getRtkInstallStatus = () => null, telegramDelivery = null, resolveRtkPath = () => getRtkPath(), conversationFs = fs, conversationGit = runGitForConversationHistory, conversationProjectsDir = claudeProjectsDir(process.env, os.homedir()), readTracePage = null, readPlanRevision = null, decidePlanReview = null, sessionDocs = null, coherenceFeed = null,
|
|
51046
|
-
const changeMaps = createChangeMapService({
|
|
51047
|
-
sessions,
|
|
51048
|
-
narrator: changeMapNarrator,
|
|
51049
|
-
onNarrationSettled: (sessionId) => {
|
|
51050
|
-
broadcastChangeMap(sessionId).catch((error) => {
|
|
51051
|
-
console.warn(`[control] change-map broadcast failed: id=${sessionId}: ${errorMessage(error)}`);
|
|
51052
|
-
});
|
|
51053
|
-
}
|
|
51054
|
-
});
|
|
51055
|
-
async function broadcastChangeMap(sessionId) {
|
|
51056
|
-
const session = sessions.get(sessionId);
|
|
51057
|
-
if (!session) return;
|
|
51058
|
-
broadcastControl({
|
|
51059
|
-
type: "change-map",
|
|
51060
|
-
id: session.id,
|
|
51061
|
-
map: await changeMaps.build(session, { mayStartNarration: false })
|
|
51062
|
-
});
|
|
51063
|
-
}
|
|
50666
|
+
}), issueProjectRepos = null, serverBuild = () => null, getUsageSessions = null, getUsageReport = null, requestUsageReport = null, getPlanLimits = null, controlReplayLog = null, getRtkInstallStatus = () => null, telegramDelivery = null, resolveRtkPath = () => getRtkPath(), conversationFs = fs, conversationGit = runGitForConversationHistory, conversationProjectsDir = claudeProjectsDir(process.env, os.homedir()), readTracePage = null, readPlanRevision = null, decidePlanReview = null, sessionDocs = null, coherenceFeed = null, coderEnv = null, remoteRepoGit = null, agentConnect = null } = deps;
|
|
50667
|
+
const changeMaps = createChangeMapService({ sessions });
|
|
51064
50668
|
function buildSettingsPayload$1() {
|
|
51065
50669
|
return buildSettingsPayload({
|
|
51066
50670
|
configStore,
|
|
@@ -52337,33 +51941,6 @@ function registerControlHandlers(controlWss, deps) {
|
|
|
52337
51941
|
error: res.error || null
|
|
52338
51942
|
});
|
|
52339
51943
|
}
|
|
52340
|
-
function handleSendDiffAnnotations(msg, ws) {
|
|
52341
|
-
const reply = (payload) => replyTo(ws, msg, "send-diff-annotations-result", {
|
|
52342
|
-
ok: false,
|
|
52343
|
-
error: null,
|
|
52344
|
-
...payload
|
|
52345
|
-
});
|
|
52346
|
-
const session = findSession(msg);
|
|
52347
|
-
if (!session) {
|
|
52348
|
-
reply({ error: "Session not found" });
|
|
52349
|
-
return;
|
|
52350
|
-
}
|
|
52351
|
-
const text = formatDiffAnnotationMessage(msg.annotations ?? []);
|
|
52352
|
-
if (!text) {
|
|
52353
|
-
reply({ error: "No review notes to send" });
|
|
52354
|
-
return;
|
|
52355
|
-
}
|
|
52356
|
-
const pasted = session.pasteTextWhenReady(text);
|
|
52357
|
-
if (!pasted.ok) {
|
|
52358
|
-
reply({ error: `Could not write to "${session.name}" (${pasted.reason})` });
|
|
52359
|
-
return;
|
|
52360
|
-
}
|
|
52361
|
-
session.noteOperatorDraft();
|
|
52362
|
-
reply({
|
|
52363
|
-
ok: true,
|
|
52364
|
-
pending: pasted.deferred === true
|
|
52365
|
-
});
|
|
52366
|
-
}
|
|
52367
51944
|
async function handleRequestUsageReport(msg, ws) {
|
|
52368
51945
|
if (!requestUsageReport) {
|
|
52369
51946
|
ws.send(JSON.stringify({
|
|
@@ -52563,7 +52140,6 @@ function registerControlHandlers(controlWss, deps) {
|
|
|
52563
52140
|
"request-hooks-report": handleRequestHooksReport,
|
|
52564
52141
|
"save-hook": handleSaveHook,
|
|
52565
52142
|
"delete-hook": handleDeleteHook,
|
|
52566
|
-
"send-diff-annotations": handleSendDiffAnnotations,
|
|
52567
52143
|
"kill": (msg) => {
|
|
52568
52144
|
const s = findSession(msg);
|
|
52569
52145
|
if (s) s.killSession();
|
|
@@ -52632,8 +52208,6 @@ function registerControlHandlers(controlWss, deps) {
|
|
|
52632
52208
|
sig: null,
|
|
52633
52209
|
generatedAt: Date.now(),
|
|
52634
52210
|
repos: [],
|
|
52635
|
-
narrative: null,
|
|
52636
|
-
narratorState: "disabled",
|
|
52637
52211
|
error: `Change map could not be built: ${errorMessage(error)}`
|
|
52638
52212
|
};
|
|
52639
52213
|
});
|
|
@@ -53090,7 +52664,6 @@ function createBackendControl(dependencies) {
|
|
|
53090
52664
|
decidePlanReview: dependencies.decidePlanReview,
|
|
53091
52665
|
sessionDocs: dependencies.sessionDocs,
|
|
53092
52666
|
coherenceFeed: dependencies.coherenceFeed,
|
|
53093
|
-
changeMapNarrator: dependencies.changeMapNarrator,
|
|
53094
52667
|
coderEnv: laneAssembly.coderEnv,
|
|
53095
52668
|
remoteRepoGit: laneAssembly.gitWorkspace,
|
|
53096
52669
|
agentConnect: dependencies.agentConnect
|
|
@@ -56905,7 +56478,7 @@ function createBackend(httpServer, options = {}) {
|
|
|
56905
56478
|
logger: console,
|
|
56906
56479
|
renameSessionFromTaskTitle
|
|
56907
56480
|
});
|
|
56908
|
-
const { allLiveSessions, branchGc, coderActivity,
|
|
56481
|
+
const { allLiveSessions, branchGc, coderActivity, gitWorkspace: assembledGitWorkspace, gitWorkspaceSync, posthog, recordLane, spawnGate, tapIngestForSession, teamReview, myPrs, issues, traceChangeBroadcast, traceWiring, uploadsWiring, usage, visionsSessions, visionsSetup } = laneAssembly;
|
|
56909
56482
|
gitWorkspace = assembledGitWorkspace;
|
|
56910
56483
|
agentApi = createAgentApiWiring({
|
|
56911
56484
|
config,
|
|
@@ -57093,7 +56666,6 @@ function createBackend(httpServer, options = {}) {
|
|
|
57093
56666
|
reviewSessions,
|
|
57094
56667
|
investigationSessions,
|
|
57095
56668
|
visionsSessions,
|
|
57096
|
-
changeMapSessions,
|
|
57097
56669
|
taskTitleSessions: laneAssembly.taskTitleSessions,
|
|
57098
56670
|
benchmarkSessions: laneAssembly.benchmarkSessions,
|
|
57099
56671
|
branchGc,
|
|
@@ -57169,7 +56741,6 @@ function createBackend(httpServer, options = {}) {
|
|
|
57169
56741
|
decidePlanReview: laneAssembly.planReview?.decide ?? null,
|
|
57170
56742
|
sessionDocs,
|
|
57171
56743
|
coherenceFeed,
|
|
57172
|
-
changeMapNarrator: laneAssembly.changeMapNarrator,
|
|
57173
56744
|
serverBuild: () => serverBuild,
|
|
57174
56745
|
telemetry,
|
|
57175
56746
|
logger: console
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { r as errorMessage } from "./text-DoirglWV.js";
|
|
2
|
-
import { c as resolveConfigPath } from "./config-store-
|
|
3
|
-
import { c as defaultPairingsPath, i as REVOCATION_PROPAGATION_SECONDS, l as defaultSeenPath, n as normalizeRemoteConfig, o as createPairingsStore, s as createSeenStore } from "./remote-config-
|
|
2
|
+
import { c as resolveConfigPath } from "./config-store-DOGtTJ1d.js";
|
|
3
|
+
import { c as defaultPairingsPath, i as REVOCATION_PROPAGATION_SECONDS, l as defaultSeenPath, n as normalizeRemoteConfig, o as createPairingsStore, s as createSeenStore } from "./remote-config-DeWURqqr.js";
|
|
4
4
|
import fs from "node:fs";
|
|
5
5
|
//#region server/text-format.ts
|
|
6
6
|
function trimIso(iso) {
|
|
@@ -3,7 +3,7 @@ import { n as equalsIgnoringCaseOnWindows } from "./paths-Bu4eH1Yd.js";
|
|
|
3
3
|
import { n as isRecord } from "./coerce-NSst8oRP.js";
|
|
4
4
|
import { n as unrefTimer, t as DEFAULT_TIMER_FNS } from "./timer-deps-u2DAQLok.js";
|
|
5
5
|
import { a as jsonStateLoadError, d as writeJsonAtomicSync, l as sleepSync, s as loadJsonStateFileSync, u as writeJsonAtomic } from "./json-file-DFCTvPjj.js";
|
|
6
|
-
import { o as glimmervoidHomeDir, ot as canonicalizePath } from "./config-store-
|
|
6
|
+
import { o as glimmervoidHomeDir, ot as canonicalizePath } from "./config-store-DOGtTJ1d.js";
|
|
7
7
|
import fs from "node:fs";
|
|
8
8
|
import path from "node:path";
|
|
9
9
|
import crypto from "node:crypto";
|