adhdev 0.9.82-rc.35 → 0.9.82-rc.37
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/index.js +209 -22
- package/dist/cli/index.js.map +1 -1
- package/dist/index.js +209 -22
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/cli/index.js
CHANGED
|
@@ -47128,6 +47128,82 @@ function truncateValidationOutput(value) {
|
|
|
47128
47128
|
return `${text.slice(0, REFINE_VALIDATION_SUMMARY_CHARS)}
|
|
47129
47129
|
[truncated ${text.length - REFINE_VALIDATION_SUMMARY_CHARS} chars]`;
|
|
47130
47130
|
}
|
|
47131
|
+
function recordMeshRefineStage(stages, stage, status, startedAt, details) {
|
|
47132
|
+
stages.push({
|
|
47133
|
+
stage,
|
|
47134
|
+
status,
|
|
47135
|
+
durationMs: Date.now() - startedAt,
|
|
47136
|
+
...details || {}
|
|
47137
|
+
});
|
|
47138
|
+
}
|
|
47139
|
+
async function computeGitPatchId(cwd, fromRef, toRef) {
|
|
47140
|
+
const { execFileSync: execFileSync7 } = await import("child_process");
|
|
47141
|
+
const diff = execFileSync7("git", ["diff", "--patch", "--full-index", fromRef, toRef], {
|
|
47142
|
+
cwd,
|
|
47143
|
+
encoding: "utf8",
|
|
47144
|
+
maxBuffer: REFINE_PATCH_EQUIVALENCE_OUTPUT_LIMIT_BYTES
|
|
47145
|
+
});
|
|
47146
|
+
if (!diff.trim()) return "";
|
|
47147
|
+
const patchId = execFileSync7("git", ["patch-id", "--stable"], {
|
|
47148
|
+
cwd,
|
|
47149
|
+
input: diff,
|
|
47150
|
+
encoding: "utf8",
|
|
47151
|
+
maxBuffer: REFINE_PATCH_EQUIVALENCE_OUTPUT_LIMIT_BYTES
|
|
47152
|
+
}).trim();
|
|
47153
|
+
return patchId.split(/\s+/)[0] || "";
|
|
47154
|
+
}
|
|
47155
|
+
async function runMeshRefinePatchEquivalenceGate(repoRoot, baseHead, branchHead) {
|
|
47156
|
+
const startedAt = Date.now();
|
|
47157
|
+
try {
|
|
47158
|
+
const { execFileSync: execFileSync7 } = await import("child_process");
|
|
47159
|
+
const git = (args) => execFileSync7("git", args, {
|
|
47160
|
+
cwd: repoRoot,
|
|
47161
|
+
encoding: "utf8",
|
|
47162
|
+
maxBuffer: REFINE_PATCH_EQUIVALENCE_OUTPUT_LIMIT_BYTES
|
|
47163
|
+
});
|
|
47164
|
+
const mergeBase = git(["merge-base", baseHead, branchHead]).trim();
|
|
47165
|
+
const mergeTreeStdout = git(["merge-tree", "--write-tree", baseHead, branchHead]);
|
|
47166
|
+
const mergedTree = mergeTreeStdout.trim().split(/\s+/)[0] || "";
|
|
47167
|
+
if (!mergeBase || !mergedTree) {
|
|
47168
|
+
return {
|
|
47169
|
+
status: "failed",
|
|
47170
|
+
equivalent: false,
|
|
47171
|
+
baseHead,
|
|
47172
|
+
branchHead,
|
|
47173
|
+
mergeBase: mergeBase || void 0,
|
|
47174
|
+
mergedTree: mergedTree || void 0,
|
|
47175
|
+
durationMs: Date.now() - startedAt,
|
|
47176
|
+
error: "patch equivalence preflight could not resolve merge-base or synthetic merge tree",
|
|
47177
|
+
stdout: truncateValidationOutput(mergeTreeStdout)
|
|
47178
|
+
};
|
|
47179
|
+
}
|
|
47180
|
+
const expectedPatchId = await computeGitPatchId(repoRoot, mergeBase, branchHead);
|
|
47181
|
+
const actualPatchId = await computeGitPatchId(repoRoot, baseHead, mergedTree);
|
|
47182
|
+
const equivalent = expectedPatchId === actualPatchId;
|
|
47183
|
+
return {
|
|
47184
|
+
status: equivalent ? "passed" : "failed",
|
|
47185
|
+
equivalent,
|
|
47186
|
+
baseHead,
|
|
47187
|
+
branchHead,
|
|
47188
|
+
mergeBase,
|
|
47189
|
+
mergedTree,
|
|
47190
|
+
expectedPatchId,
|
|
47191
|
+
actualPatchId,
|
|
47192
|
+
durationMs: Date.now() - startedAt
|
|
47193
|
+
};
|
|
47194
|
+
} catch (e) {
|
|
47195
|
+
return {
|
|
47196
|
+
status: "failed",
|
|
47197
|
+
equivalent: false,
|
|
47198
|
+
baseHead,
|
|
47199
|
+
branchHead,
|
|
47200
|
+
durationMs: Date.now() - startedAt,
|
|
47201
|
+
error: e?.message || String(e),
|
|
47202
|
+
stdout: truncateValidationOutput(e?.stdout),
|
|
47203
|
+
stderr: truncateValidationOutput(e?.stderr)
|
|
47204
|
+
};
|
|
47205
|
+
}
|
|
47206
|
+
}
|
|
47131
47207
|
function readPackageScripts(workspace) {
|
|
47132
47208
|
try {
|
|
47133
47209
|
const packageJsonPath = (0, import_path7.join)(workspace, "package.json");
|
|
@@ -47471,7 +47547,7 @@ function summarizeSessionHostPruneResult(result) {
|
|
|
47471
47547
|
keptCount: Array.isArray(value.keptSessionIds) ? value.keptSessionIds.length : void 0
|
|
47472
47548
|
};
|
|
47473
47549
|
}
|
|
47474
|
-
var import_os4, import_path7, fs10, CHANNEL_NPM_TAG, CHANNEL_SERVER_URL, REFINE_VALIDATION_CATEGORIES, REFINE_VALIDATION_TIMEOUT_MS, REFINE_VALIDATION_OUTPUT_LIMIT_BYTES, REFINE_VALIDATION_SUMMARY_CHARS, REFINE_VALIDATION_MAX_COMMANDS, CHAT_COMMANDS, READ_DEBUG_ENABLED2, DaemonCommandRouter;
|
|
47550
|
+
var import_os4, import_path7, fs10, CHANNEL_NPM_TAG, CHANNEL_SERVER_URL, REFINE_VALIDATION_CATEGORIES, REFINE_VALIDATION_TIMEOUT_MS, REFINE_VALIDATION_OUTPUT_LIMIT_BYTES, REFINE_VALIDATION_SUMMARY_CHARS, REFINE_VALIDATION_MAX_COMMANDS, REFINE_PATCH_EQUIVALENCE_OUTPUT_LIMIT_BYTES, CHAT_COMMANDS, READ_DEBUG_ENABLED2, DaemonCommandRouter;
|
|
47475
47551
|
var init_router = __esm({
|
|
47476
47552
|
"../../oss/packages/daemon-core/src/commands/router.ts"() {
|
|
47477
47553
|
"use strict";
|
|
@@ -47513,6 +47589,7 @@ var init_router = __esm({
|
|
|
47513
47589
|
REFINE_VALIDATION_OUTPUT_LIMIT_BYTES = 128 * 1024;
|
|
47514
47590
|
REFINE_VALIDATION_SUMMARY_CHARS = 2e3;
|
|
47515
47591
|
REFINE_VALIDATION_MAX_COMMANDS = 4;
|
|
47592
|
+
REFINE_PATCH_EQUIVALENCE_OUTPUT_LIMIT_BYTES = 4 * 1024 * 1024;
|
|
47516
47593
|
CHAT_COMMANDS = [
|
|
47517
47594
|
"send_chat",
|
|
47518
47595
|
"new_chat",
|
|
@@ -48814,26 +48891,41 @@ var init_router = __esm({
|
|
|
48814
48891
|
const meshId = typeof args?.meshId === "string" ? args.meshId.trim() : "";
|
|
48815
48892
|
const nodeId = typeof args?.nodeId === "string" ? args.nodeId.trim() : "";
|
|
48816
48893
|
if (!meshId || !nodeId) return { success: false, error: "meshId and nodeId required" };
|
|
48894
|
+
const refineStages = [];
|
|
48817
48895
|
try {
|
|
48818
48896
|
const meshRecord = await this.getMeshForCommand(meshId, args?.inlineMesh);
|
|
48819
48897
|
const mesh = meshRecord?.mesh;
|
|
48820
48898
|
const node = mesh?.nodes?.find((n) => n.id === nodeId || n.nodeId === nodeId);
|
|
48821
|
-
if (!node) return { success: false, error: `Node '${nodeId}' not found in mesh
|
|
48899
|
+
if (!node) return { success: false, error: `Node '${nodeId}' not found in mesh`, refineStages };
|
|
48822
48900
|
if (!node.isLocalWorktree || !node.workspace) {
|
|
48823
|
-
return { success: false, error: `Refinery requires a local worktree node
|
|
48901
|
+
return { success: false, error: `Refinery requires a local worktree node`, refineStages };
|
|
48824
48902
|
}
|
|
48825
48903
|
const sourceNode = node.clonedFromNodeId ? mesh?.nodes.find((n) => n.id === node.clonedFromNodeId || n.nodeId === node.clonedFromNodeId) : mesh?.nodes.find((n) => !n.isLocalWorktree);
|
|
48826
48904
|
const repoRoot = sourceNode?.repoRoot || sourceNode?.workspace;
|
|
48827
|
-
if (!repoRoot) return { success: false, error: "Source node repoRoot not found" };
|
|
48905
|
+
if (!repoRoot) return { success: false, error: "Source node repoRoot not found", refineStages };
|
|
48828
48906
|
const { execFile: execFile3 } = await import("child_process");
|
|
48829
48907
|
const { promisify: promisify3 } = await import("util");
|
|
48830
48908
|
const execFileAsync3 = promisify3(execFile3);
|
|
48909
|
+
const resolveStarted = Date.now();
|
|
48831
48910
|
const { stdout: branchStdout } = await execFileAsync3("git", ["branch", "--show-current"], { cwd: node.workspace, encoding: "utf8" });
|
|
48832
48911
|
const branch = branchStdout.trim();
|
|
48833
|
-
if (!branch) return { success: false, error: "Could not determine branch of the worktree node" };
|
|
48912
|
+
if (!branch) return { success: false, error: "Could not determine branch of the worktree node", refineStages };
|
|
48834
48913
|
const { stdout: baseBranchStdout } = await execFileAsync3("git", ["branch", "--show-current"], { cwd: repoRoot, encoding: "utf8" });
|
|
48835
48914
|
const baseBranch = baseBranchStdout.trim();
|
|
48915
|
+
const { stdout: baseHeadStdout } = await execFileAsync3("git", ["rev-parse", "HEAD"], { cwd: repoRoot, encoding: "utf8" });
|
|
48916
|
+
const { stdout: branchHeadStdout } = await execFileAsync3("git", ["rev-parse", branch], { cwd: node.workspace, encoding: "utf8" });
|
|
48917
|
+
const baseHead = baseHeadStdout.trim();
|
|
48918
|
+
const branchHead = branchHeadStdout.trim();
|
|
48919
|
+
recordMeshRefineStage(refineStages, "resolve_refs", "passed", resolveStarted, { branch, baseBranch, baseHead, branchHead });
|
|
48920
|
+
const validationStarted = Date.now();
|
|
48836
48921
|
const validationSummary = await runMeshRefineValidationGate(mesh, node.workspace);
|
|
48922
|
+
recordMeshRefineStage(
|
|
48923
|
+
refineStages,
|
|
48924
|
+
"validation",
|
|
48925
|
+
validationSummary.status === "passed" ? "passed" : validationSummary.status === "failed" ? "failed" : "skipped",
|
|
48926
|
+
validationStarted,
|
|
48927
|
+
{ validationStatus: validationSummary.status, commandsRun: validationSummary.commandsRun.length }
|
|
48928
|
+
);
|
|
48837
48929
|
if (validationSummary.status === "failed") {
|
|
48838
48930
|
return {
|
|
48839
48931
|
success: false,
|
|
@@ -48843,6 +48935,7 @@ var init_router = __esm({
|
|
|
48843
48935
|
branch,
|
|
48844
48936
|
into: baseBranch,
|
|
48845
48937
|
validationSummary,
|
|
48938
|
+
refineStages,
|
|
48846
48939
|
finalBranchConvergenceState: {
|
|
48847
48940
|
branch,
|
|
48848
48941
|
baseBranch,
|
|
@@ -48862,6 +48955,7 @@ var init_router = __esm({
|
|
|
48862
48955
|
branch,
|
|
48863
48956
|
into: baseBranch,
|
|
48864
48957
|
validationSummary,
|
|
48958
|
+
refineStages,
|
|
48865
48959
|
finalBranchConvergenceState: {
|
|
48866
48960
|
branch,
|
|
48867
48961
|
baseBranch,
|
|
@@ -48872,37 +48966,121 @@ var init_router = __esm({
|
|
|
48872
48966
|
}
|
|
48873
48967
|
};
|
|
48874
48968
|
}
|
|
48969
|
+
const patchEquivalenceStarted = Date.now();
|
|
48970
|
+
const patchEquivalence = await runMeshRefinePatchEquivalenceGate(repoRoot, baseHead, branchHead);
|
|
48971
|
+
recordMeshRefineStage(refineStages, "patch_equivalence", patchEquivalence.status, patchEquivalenceStarted, {
|
|
48972
|
+
equivalent: patchEquivalence.equivalent,
|
|
48973
|
+
expectedPatchId: patchEquivalence.expectedPatchId,
|
|
48974
|
+
actualPatchId: patchEquivalence.actualPatchId,
|
|
48975
|
+
error: patchEquivalence.error
|
|
48976
|
+
});
|
|
48977
|
+
if (!patchEquivalence.equivalent) {
|
|
48978
|
+
return {
|
|
48979
|
+
success: false,
|
|
48980
|
+
code: "patch_equivalence_failed",
|
|
48981
|
+
convergenceStatus: "blocked_review",
|
|
48982
|
+
error: "Refinery patch-equivalence preflight failed; merge/refine was not attempted.",
|
|
48983
|
+
branch,
|
|
48984
|
+
into: baseBranch,
|
|
48985
|
+
validationSummary,
|
|
48986
|
+
patchEquivalence,
|
|
48987
|
+
refineStages,
|
|
48988
|
+
finalBranchConvergenceState: {
|
|
48989
|
+
branch,
|
|
48990
|
+
baseBranch,
|
|
48991
|
+
merged: false,
|
|
48992
|
+
removed: false,
|
|
48993
|
+
validation: "passed",
|
|
48994
|
+
patchEquivalence: "failed",
|
|
48995
|
+
status: "blocked_review"
|
|
48996
|
+
}
|
|
48997
|
+
};
|
|
48998
|
+
}
|
|
48999
|
+
let mergeResult;
|
|
49000
|
+
const mergeStarted = Date.now();
|
|
48875
49001
|
try {
|
|
48876
|
-
await execFileAsync3("git", ["merge", "--no-ff", branch, "-m", `Auto-merge branch '${branch}' via Refinery`], { cwd: repoRoot, encoding: "utf8" });
|
|
49002
|
+
const result = await execFileAsync3("git", ["merge", "--no-ff", branch, "-m", `Auto-merge branch '${branch}' via Refinery`], { cwd: repoRoot, encoding: "utf8" });
|
|
49003
|
+
mergeResult = {
|
|
49004
|
+
stdout: truncateValidationOutput(result.stdout),
|
|
49005
|
+
stderr: truncateValidationOutput(result.stderr),
|
|
49006
|
+
durationMs: Date.now() - mergeStarted
|
|
49007
|
+
};
|
|
49008
|
+
recordMeshRefineStage(refineStages, "merge", "passed", mergeStarted, mergeResult);
|
|
48877
49009
|
} catch (e) {
|
|
49010
|
+
recordMeshRefineStage(refineStages, "merge", "failed", mergeStarted, {
|
|
49011
|
+
error: e?.message || String(e),
|
|
49012
|
+
stdout: truncateValidationOutput(e?.stdout),
|
|
49013
|
+
stderr: truncateValidationOutput(e?.stderr)
|
|
49014
|
+
});
|
|
48878
49015
|
return {
|
|
48879
49016
|
success: false,
|
|
48880
49017
|
error: `Merge failed (conflicts?): ${e.message}`,
|
|
48881
49018
|
validationSummary,
|
|
49019
|
+
patchEquivalence,
|
|
49020
|
+
refineStages,
|
|
48882
49021
|
finalBranchConvergenceState: {
|
|
48883
49022
|
branch,
|
|
48884
49023
|
baseBranch,
|
|
48885
49024
|
merged: false,
|
|
48886
49025
|
removed: false,
|
|
48887
49026
|
validation: "passed",
|
|
49027
|
+
patchEquivalence: "passed",
|
|
48888
49028
|
status: "not_mergeable"
|
|
48889
49029
|
}
|
|
48890
49030
|
};
|
|
48891
49031
|
}
|
|
49032
|
+
const cleanupStarted = Date.now();
|
|
48892
49033
|
const removeResult = await this.execute("remove_mesh_node", {
|
|
48893
49034
|
meshId,
|
|
48894
49035
|
nodeId,
|
|
48895
|
-
sessionCleanupMode: "
|
|
49036
|
+
sessionCleanupMode: "preserve",
|
|
48896
49037
|
inlineMesh: args?.inlineMesh
|
|
48897
49038
|
});
|
|
49039
|
+
recordMeshRefineStage(refineStages, "cleanup", removeResult?.success === false ? "failed" : "passed", cleanupStarted, {
|
|
49040
|
+
removed: removeResult?.removed,
|
|
49041
|
+
code: removeResult?.code,
|
|
49042
|
+
error: removeResult?.error
|
|
49043
|
+
});
|
|
49044
|
+
let ledgerError;
|
|
49045
|
+
const ledgerStarted = Date.now();
|
|
48898
49046
|
try {
|
|
48899
49047
|
const { appendLedgerEntry: appendLedgerEntry2 } = await Promise.resolve().then(() => (init_mesh_ledger(), mesh_ledger_exports));
|
|
48900
49048
|
appendLedgerEntry2(meshId, {
|
|
48901
49049
|
kind: "node_removed",
|
|
48902
49050
|
nodeId,
|
|
48903
|
-
payload: { refined: true, mergedBranch: branch, into: baseBranch, validationSummary }
|
|
49051
|
+
payload: { refined: true, mergedBranch: branch, into: baseBranch, validationSummary, patchEquivalence }
|
|
48904
49052
|
});
|
|
48905
|
-
|
|
49053
|
+
recordMeshRefineStage(refineStages, "ledger", "passed", ledgerStarted);
|
|
49054
|
+
} catch (e) {
|
|
49055
|
+
ledgerError = e?.message || String(e);
|
|
49056
|
+
recordMeshRefineStage(refineStages, "ledger", "failed", ledgerStarted, { error: ledgerError });
|
|
49057
|
+
}
|
|
49058
|
+
const finalBranchConvergenceState = {
|
|
49059
|
+
branch: baseBranch,
|
|
49060
|
+
mergedBranch: branch,
|
|
49061
|
+
baseBranch,
|
|
49062
|
+
merged: true,
|
|
49063
|
+
removed: removeResult?.success !== false,
|
|
49064
|
+
validation: "passed",
|
|
49065
|
+
patchEquivalence: "passed",
|
|
49066
|
+
status: removeResult?.success === false ? "merged_cleanup_failed" : "merged"
|
|
49067
|
+
};
|
|
49068
|
+
if (removeResult?.success === false) {
|
|
49069
|
+
return {
|
|
49070
|
+
success: false,
|
|
49071
|
+
code: "cleanup_failed",
|
|
49072
|
+
error: "Refinery merge completed but worktree cleanup failed; manual cleanup/retry is required.",
|
|
49073
|
+
merged: true,
|
|
49074
|
+
branch,
|
|
49075
|
+
into: baseBranch,
|
|
49076
|
+
removeResult,
|
|
49077
|
+
validationSummary,
|
|
49078
|
+
patchEquivalence,
|
|
49079
|
+
mergeResult,
|
|
49080
|
+
refineStages,
|
|
49081
|
+
...ledgerError ? { ledgerError } : {},
|
|
49082
|
+
finalBranchConvergenceState
|
|
49083
|
+
};
|
|
48906
49084
|
}
|
|
48907
49085
|
return {
|
|
48908
49086
|
success: true,
|
|
@@ -48911,18 +49089,14 @@ var init_router = __esm({
|
|
|
48911
49089
|
into: baseBranch,
|
|
48912
49090
|
removeResult,
|
|
48913
49091
|
validationSummary,
|
|
48914
|
-
|
|
48915
|
-
|
|
48916
|
-
|
|
48917
|
-
|
|
48918
|
-
|
|
48919
|
-
removed: removeResult?.success !== false,
|
|
48920
|
-
validation: "passed",
|
|
48921
|
-
status: removeResult?.success === false ? "merged_cleanup_failed" : "merged"
|
|
48922
|
-
}
|
|
49092
|
+
patchEquivalence,
|
|
49093
|
+
mergeResult,
|
|
49094
|
+
refineStages,
|
|
49095
|
+
...ledgerError ? { ledgerError } : {},
|
|
49096
|
+
finalBranchConvergenceState
|
|
48923
49097
|
};
|
|
48924
49098
|
} catch (e) {
|
|
48925
|
-
return { success: false, error: e.message };
|
|
49099
|
+
return { success: false, error: e.message, refineStages };
|
|
48926
49100
|
}
|
|
48927
49101
|
}
|
|
48928
49102
|
case "remove_mesh_node": {
|
|
@@ -88911,7 +89085,9 @@ var init_server_connection = __esm({
|
|
|
88911
89085
|
const requestId = `mesh_${crypto.randomUUID()}`;
|
|
88912
89086
|
const timer = setTimeout(() => {
|
|
88913
89087
|
this.off("daemon_mesh_result", handler);
|
|
88914
|
-
reject(new Error(
|
|
89088
|
+
reject(new Error(
|
|
89089
|
+
`Mesh command '${command}' to ${targetDaemonId.slice(0, 12)} timed out after ${timeoutMs}ms (requestId=${requestId})`
|
|
89090
|
+
));
|
|
88915
89091
|
}, timeoutMs);
|
|
88916
89092
|
const handler = (msg) => {
|
|
88917
89093
|
const body = msg.payload && typeof msg.payload === "object" ? { ...msg, ...msg.payload } : msg;
|
|
@@ -98315,7 +98491,18 @@ var init_daemon_mesh_manager = __esm({
|
|
|
98315
98491
|
peer.pendingCandidates = [];
|
|
98316
98492
|
}
|
|
98317
98493
|
} catch (err) {
|
|
98318
|
-
|
|
98494
|
+
const errorMessage = err?.message || "Failed to set remote description";
|
|
98495
|
+
const isDuplicateStableAnswer = type2 === "mesh_p2p_answer" && /Unexpected remote answer description in signaling state stable/i.test(errorMessage);
|
|
98496
|
+
this.logMeshCommandEvent(isDuplicateStableAnswer ? "remote_desc_duplicate_ignored" : "remote_desc_failed", {
|
|
98497
|
+
targetDaemonId,
|
|
98498
|
+
signalType: type2,
|
|
98499
|
+
receivedAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
98500
|
+
peerState: peer.state,
|
|
98501
|
+
error: errorMessage
|
|
98502
|
+
});
|
|
98503
|
+
if (isDuplicateStableAnswer) return;
|
|
98504
|
+
LOG.warn("Mesh", `[Mesh] Failed to set remote desc for ${type2} from ${targetDaemonId.slice(0, 12)}: ${errorMessage}`);
|
|
98505
|
+
this.invalidatePeer(targetDaemonId, `P2P remote description failed: ${errorMessage}`, { rejectPending: true, closeResources: true });
|
|
98319
98506
|
}
|
|
98320
98507
|
} else if (type2 === "mesh_p2p_ice") {
|
|
98321
98508
|
try {
|
|
@@ -98765,7 +98952,7 @@ var init_adhdev_daemon = __esm({
|
|
|
98765
98952
|
init_version();
|
|
98766
98953
|
init_src();
|
|
98767
98954
|
init_runtime_defaults();
|
|
98768
|
-
pkgVersion = resolvePackageVersion({ injectedVersion: "0.9.82-rc.
|
|
98955
|
+
pkgVersion = resolvePackageVersion({ injectedVersion: "0.9.82-rc.37" });
|
|
98769
98956
|
AdhdevDaemon = class _AdhdevDaemon {
|
|
98770
98957
|
localHttpServer = null;
|
|
98771
98958
|
localWss = null;
|