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/index.js
CHANGED
|
@@ -46140,6 +46140,82 @@ function truncateValidationOutput(value) {
|
|
|
46140
46140
|
return `${text.slice(0, REFINE_VALIDATION_SUMMARY_CHARS)}
|
|
46141
46141
|
[truncated ${text.length - REFINE_VALIDATION_SUMMARY_CHARS} chars]`;
|
|
46142
46142
|
}
|
|
46143
|
+
function recordMeshRefineStage(stages, stage, status, startedAt, details) {
|
|
46144
|
+
stages.push({
|
|
46145
|
+
stage,
|
|
46146
|
+
status,
|
|
46147
|
+
durationMs: Date.now() - startedAt,
|
|
46148
|
+
...details || {}
|
|
46149
|
+
});
|
|
46150
|
+
}
|
|
46151
|
+
async function computeGitPatchId(cwd, fromRef, toRef) {
|
|
46152
|
+
const { execFileSync: execFileSync6 } = await import("child_process");
|
|
46153
|
+
const diff = execFileSync6("git", ["diff", "--patch", "--full-index", fromRef, toRef], {
|
|
46154
|
+
cwd,
|
|
46155
|
+
encoding: "utf8",
|
|
46156
|
+
maxBuffer: REFINE_PATCH_EQUIVALENCE_OUTPUT_LIMIT_BYTES
|
|
46157
|
+
});
|
|
46158
|
+
if (!diff.trim()) return "";
|
|
46159
|
+
const patchId = execFileSync6("git", ["patch-id", "--stable"], {
|
|
46160
|
+
cwd,
|
|
46161
|
+
input: diff,
|
|
46162
|
+
encoding: "utf8",
|
|
46163
|
+
maxBuffer: REFINE_PATCH_EQUIVALENCE_OUTPUT_LIMIT_BYTES
|
|
46164
|
+
}).trim();
|
|
46165
|
+
return patchId.split(/\s+/)[0] || "";
|
|
46166
|
+
}
|
|
46167
|
+
async function runMeshRefinePatchEquivalenceGate(repoRoot, baseHead, branchHead) {
|
|
46168
|
+
const startedAt = Date.now();
|
|
46169
|
+
try {
|
|
46170
|
+
const { execFileSync: execFileSync6 } = await import("child_process");
|
|
46171
|
+
const git = (args) => execFileSync6("git", args, {
|
|
46172
|
+
cwd: repoRoot,
|
|
46173
|
+
encoding: "utf8",
|
|
46174
|
+
maxBuffer: REFINE_PATCH_EQUIVALENCE_OUTPUT_LIMIT_BYTES
|
|
46175
|
+
});
|
|
46176
|
+
const mergeBase = git(["merge-base", baseHead, branchHead]).trim();
|
|
46177
|
+
const mergeTreeStdout = git(["merge-tree", "--write-tree", baseHead, branchHead]);
|
|
46178
|
+
const mergedTree = mergeTreeStdout.trim().split(/\s+/)[0] || "";
|
|
46179
|
+
if (!mergeBase || !mergedTree) {
|
|
46180
|
+
return {
|
|
46181
|
+
status: "failed",
|
|
46182
|
+
equivalent: false,
|
|
46183
|
+
baseHead,
|
|
46184
|
+
branchHead,
|
|
46185
|
+
mergeBase: mergeBase || void 0,
|
|
46186
|
+
mergedTree: mergedTree || void 0,
|
|
46187
|
+
durationMs: Date.now() - startedAt,
|
|
46188
|
+
error: "patch equivalence preflight could not resolve merge-base or synthetic merge tree",
|
|
46189
|
+
stdout: truncateValidationOutput(mergeTreeStdout)
|
|
46190
|
+
};
|
|
46191
|
+
}
|
|
46192
|
+
const expectedPatchId = await computeGitPatchId(repoRoot, mergeBase, branchHead);
|
|
46193
|
+
const actualPatchId = await computeGitPatchId(repoRoot, baseHead, mergedTree);
|
|
46194
|
+
const equivalent = expectedPatchId === actualPatchId;
|
|
46195
|
+
return {
|
|
46196
|
+
status: equivalent ? "passed" : "failed",
|
|
46197
|
+
equivalent,
|
|
46198
|
+
baseHead,
|
|
46199
|
+
branchHead,
|
|
46200
|
+
mergeBase,
|
|
46201
|
+
mergedTree,
|
|
46202
|
+
expectedPatchId,
|
|
46203
|
+
actualPatchId,
|
|
46204
|
+
durationMs: Date.now() - startedAt
|
|
46205
|
+
};
|
|
46206
|
+
} catch (e) {
|
|
46207
|
+
return {
|
|
46208
|
+
status: "failed",
|
|
46209
|
+
equivalent: false,
|
|
46210
|
+
baseHead,
|
|
46211
|
+
branchHead,
|
|
46212
|
+
durationMs: Date.now() - startedAt,
|
|
46213
|
+
error: e?.message || String(e),
|
|
46214
|
+
stdout: truncateValidationOutput(e?.stdout),
|
|
46215
|
+
stderr: truncateValidationOutput(e?.stderr)
|
|
46216
|
+
};
|
|
46217
|
+
}
|
|
46218
|
+
}
|
|
46143
46219
|
function readPackageScripts(workspace) {
|
|
46144
46220
|
try {
|
|
46145
46221
|
const packageJsonPath = (0, import_path7.join)(workspace, "package.json");
|
|
@@ -46483,7 +46559,7 @@ function summarizeSessionHostPruneResult(result) {
|
|
|
46483
46559
|
keptCount: Array.isArray(value.keptSessionIds) ? value.keptSessionIds.length : void 0
|
|
46484
46560
|
};
|
|
46485
46561
|
}
|
|
46486
|
-
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;
|
|
46562
|
+
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;
|
|
46487
46563
|
var init_router = __esm({
|
|
46488
46564
|
"../../oss/packages/daemon-core/src/commands/router.ts"() {
|
|
46489
46565
|
"use strict";
|
|
@@ -46525,6 +46601,7 @@ var init_router = __esm({
|
|
|
46525
46601
|
REFINE_VALIDATION_OUTPUT_LIMIT_BYTES = 128 * 1024;
|
|
46526
46602
|
REFINE_VALIDATION_SUMMARY_CHARS = 2e3;
|
|
46527
46603
|
REFINE_VALIDATION_MAX_COMMANDS = 4;
|
|
46604
|
+
REFINE_PATCH_EQUIVALENCE_OUTPUT_LIMIT_BYTES = 4 * 1024 * 1024;
|
|
46528
46605
|
CHAT_COMMANDS = [
|
|
46529
46606
|
"send_chat",
|
|
46530
46607
|
"new_chat",
|
|
@@ -47826,26 +47903,41 @@ var init_router = __esm({
|
|
|
47826
47903
|
const meshId = typeof args?.meshId === "string" ? args.meshId.trim() : "";
|
|
47827
47904
|
const nodeId = typeof args?.nodeId === "string" ? args.nodeId.trim() : "";
|
|
47828
47905
|
if (!meshId || !nodeId) return { success: false, error: "meshId and nodeId required" };
|
|
47906
|
+
const refineStages = [];
|
|
47829
47907
|
try {
|
|
47830
47908
|
const meshRecord = await this.getMeshForCommand(meshId, args?.inlineMesh);
|
|
47831
47909
|
const mesh = meshRecord?.mesh;
|
|
47832
47910
|
const node = mesh?.nodes?.find((n) => n.id === nodeId || n.nodeId === nodeId);
|
|
47833
|
-
if (!node) return { success: false, error: `Node '${nodeId}' not found in mesh
|
|
47911
|
+
if (!node) return { success: false, error: `Node '${nodeId}' not found in mesh`, refineStages };
|
|
47834
47912
|
if (!node.isLocalWorktree || !node.workspace) {
|
|
47835
|
-
return { success: false, error: `Refinery requires a local worktree node
|
|
47913
|
+
return { success: false, error: `Refinery requires a local worktree node`, refineStages };
|
|
47836
47914
|
}
|
|
47837
47915
|
const sourceNode = node.clonedFromNodeId ? mesh?.nodes.find((n) => n.id === node.clonedFromNodeId || n.nodeId === node.clonedFromNodeId) : mesh?.nodes.find((n) => !n.isLocalWorktree);
|
|
47838
47916
|
const repoRoot = sourceNode?.repoRoot || sourceNode?.workspace;
|
|
47839
|
-
if (!repoRoot) return { success: false, error: "Source node repoRoot not found" };
|
|
47917
|
+
if (!repoRoot) return { success: false, error: "Source node repoRoot not found", refineStages };
|
|
47840
47918
|
const { execFile: execFile3 } = await import("child_process");
|
|
47841
47919
|
const { promisify: promisify3 } = await import("util");
|
|
47842
47920
|
const execFileAsync3 = promisify3(execFile3);
|
|
47921
|
+
const resolveStarted = Date.now();
|
|
47843
47922
|
const { stdout: branchStdout } = await execFileAsync3("git", ["branch", "--show-current"], { cwd: node.workspace, encoding: "utf8" });
|
|
47844
47923
|
const branch = branchStdout.trim();
|
|
47845
|
-
if (!branch) return { success: false, error: "Could not determine branch of the worktree node" };
|
|
47924
|
+
if (!branch) return { success: false, error: "Could not determine branch of the worktree node", refineStages };
|
|
47846
47925
|
const { stdout: baseBranchStdout } = await execFileAsync3("git", ["branch", "--show-current"], { cwd: repoRoot, encoding: "utf8" });
|
|
47847
47926
|
const baseBranch = baseBranchStdout.trim();
|
|
47927
|
+
const { stdout: baseHeadStdout } = await execFileAsync3("git", ["rev-parse", "HEAD"], { cwd: repoRoot, encoding: "utf8" });
|
|
47928
|
+
const { stdout: branchHeadStdout } = await execFileAsync3("git", ["rev-parse", branch], { cwd: node.workspace, encoding: "utf8" });
|
|
47929
|
+
const baseHead = baseHeadStdout.trim();
|
|
47930
|
+
const branchHead = branchHeadStdout.trim();
|
|
47931
|
+
recordMeshRefineStage(refineStages, "resolve_refs", "passed", resolveStarted, { branch, baseBranch, baseHead, branchHead });
|
|
47932
|
+
const validationStarted = Date.now();
|
|
47848
47933
|
const validationSummary = await runMeshRefineValidationGate(mesh, node.workspace);
|
|
47934
|
+
recordMeshRefineStage(
|
|
47935
|
+
refineStages,
|
|
47936
|
+
"validation",
|
|
47937
|
+
validationSummary.status === "passed" ? "passed" : validationSummary.status === "failed" ? "failed" : "skipped",
|
|
47938
|
+
validationStarted,
|
|
47939
|
+
{ validationStatus: validationSummary.status, commandsRun: validationSummary.commandsRun.length }
|
|
47940
|
+
);
|
|
47849
47941
|
if (validationSummary.status === "failed") {
|
|
47850
47942
|
return {
|
|
47851
47943
|
success: false,
|
|
@@ -47855,6 +47947,7 @@ var init_router = __esm({
|
|
|
47855
47947
|
branch,
|
|
47856
47948
|
into: baseBranch,
|
|
47857
47949
|
validationSummary,
|
|
47950
|
+
refineStages,
|
|
47858
47951
|
finalBranchConvergenceState: {
|
|
47859
47952
|
branch,
|
|
47860
47953
|
baseBranch,
|
|
@@ -47874,6 +47967,7 @@ var init_router = __esm({
|
|
|
47874
47967
|
branch,
|
|
47875
47968
|
into: baseBranch,
|
|
47876
47969
|
validationSummary,
|
|
47970
|
+
refineStages,
|
|
47877
47971
|
finalBranchConvergenceState: {
|
|
47878
47972
|
branch,
|
|
47879
47973
|
baseBranch,
|
|
@@ -47884,37 +47978,121 @@ var init_router = __esm({
|
|
|
47884
47978
|
}
|
|
47885
47979
|
};
|
|
47886
47980
|
}
|
|
47981
|
+
const patchEquivalenceStarted = Date.now();
|
|
47982
|
+
const patchEquivalence = await runMeshRefinePatchEquivalenceGate(repoRoot, baseHead, branchHead);
|
|
47983
|
+
recordMeshRefineStage(refineStages, "patch_equivalence", patchEquivalence.status, patchEquivalenceStarted, {
|
|
47984
|
+
equivalent: patchEquivalence.equivalent,
|
|
47985
|
+
expectedPatchId: patchEquivalence.expectedPatchId,
|
|
47986
|
+
actualPatchId: patchEquivalence.actualPatchId,
|
|
47987
|
+
error: patchEquivalence.error
|
|
47988
|
+
});
|
|
47989
|
+
if (!patchEquivalence.equivalent) {
|
|
47990
|
+
return {
|
|
47991
|
+
success: false,
|
|
47992
|
+
code: "patch_equivalence_failed",
|
|
47993
|
+
convergenceStatus: "blocked_review",
|
|
47994
|
+
error: "Refinery patch-equivalence preflight failed; merge/refine was not attempted.",
|
|
47995
|
+
branch,
|
|
47996
|
+
into: baseBranch,
|
|
47997
|
+
validationSummary,
|
|
47998
|
+
patchEquivalence,
|
|
47999
|
+
refineStages,
|
|
48000
|
+
finalBranchConvergenceState: {
|
|
48001
|
+
branch,
|
|
48002
|
+
baseBranch,
|
|
48003
|
+
merged: false,
|
|
48004
|
+
removed: false,
|
|
48005
|
+
validation: "passed",
|
|
48006
|
+
patchEquivalence: "failed",
|
|
48007
|
+
status: "blocked_review"
|
|
48008
|
+
}
|
|
48009
|
+
};
|
|
48010
|
+
}
|
|
48011
|
+
let mergeResult;
|
|
48012
|
+
const mergeStarted = Date.now();
|
|
47887
48013
|
try {
|
|
47888
|
-
await execFileAsync3("git", ["merge", "--no-ff", branch, "-m", `Auto-merge branch '${branch}' via Refinery`], { cwd: repoRoot, encoding: "utf8" });
|
|
48014
|
+
const result = await execFileAsync3("git", ["merge", "--no-ff", branch, "-m", `Auto-merge branch '${branch}' via Refinery`], { cwd: repoRoot, encoding: "utf8" });
|
|
48015
|
+
mergeResult = {
|
|
48016
|
+
stdout: truncateValidationOutput(result.stdout),
|
|
48017
|
+
stderr: truncateValidationOutput(result.stderr),
|
|
48018
|
+
durationMs: Date.now() - mergeStarted
|
|
48019
|
+
};
|
|
48020
|
+
recordMeshRefineStage(refineStages, "merge", "passed", mergeStarted, mergeResult);
|
|
47889
48021
|
} catch (e) {
|
|
48022
|
+
recordMeshRefineStage(refineStages, "merge", "failed", mergeStarted, {
|
|
48023
|
+
error: e?.message || String(e),
|
|
48024
|
+
stdout: truncateValidationOutput(e?.stdout),
|
|
48025
|
+
stderr: truncateValidationOutput(e?.stderr)
|
|
48026
|
+
});
|
|
47890
48027
|
return {
|
|
47891
48028
|
success: false,
|
|
47892
48029
|
error: `Merge failed (conflicts?): ${e.message}`,
|
|
47893
48030
|
validationSummary,
|
|
48031
|
+
patchEquivalence,
|
|
48032
|
+
refineStages,
|
|
47894
48033
|
finalBranchConvergenceState: {
|
|
47895
48034
|
branch,
|
|
47896
48035
|
baseBranch,
|
|
47897
48036
|
merged: false,
|
|
47898
48037
|
removed: false,
|
|
47899
48038
|
validation: "passed",
|
|
48039
|
+
patchEquivalence: "passed",
|
|
47900
48040
|
status: "not_mergeable"
|
|
47901
48041
|
}
|
|
47902
48042
|
};
|
|
47903
48043
|
}
|
|
48044
|
+
const cleanupStarted = Date.now();
|
|
47904
48045
|
const removeResult = await this.execute("remove_mesh_node", {
|
|
47905
48046
|
meshId,
|
|
47906
48047
|
nodeId,
|
|
47907
|
-
sessionCleanupMode: "
|
|
48048
|
+
sessionCleanupMode: "preserve",
|
|
47908
48049
|
inlineMesh: args?.inlineMesh
|
|
47909
48050
|
});
|
|
48051
|
+
recordMeshRefineStage(refineStages, "cleanup", removeResult?.success === false ? "failed" : "passed", cleanupStarted, {
|
|
48052
|
+
removed: removeResult?.removed,
|
|
48053
|
+
code: removeResult?.code,
|
|
48054
|
+
error: removeResult?.error
|
|
48055
|
+
});
|
|
48056
|
+
let ledgerError;
|
|
48057
|
+
const ledgerStarted = Date.now();
|
|
47910
48058
|
try {
|
|
47911
48059
|
const { appendLedgerEntry: appendLedgerEntry2 } = await Promise.resolve().then(() => (init_mesh_ledger(), mesh_ledger_exports));
|
|
47912
48060
|
appendLedgerEntry2(meshId, {
|
|
47913
48061
|
kind: "node_removed",
|
|
47914
48062
|
nodeId,
|
|
47915
|
-
payload: { refined: true, mergedBranch: branch, into: baseBranch, validationSummary }
|
|
48063
|
+
payload: { refined: true, mergedBranch: branch, into: baseBranch, validationSummary, patchEquivalence }
|
|
47916
48064
|
});
|
|
47917
|
-
|
|
48065
|
+
recordMeshRefineStage(refineStages, "ledger", "passed", ledgerStarted);
|
|
48066
|
+
} catch (e) {
|
|
48067
|
+
ledgerError = e?.message || String(e);
|
|
48068
|
+
recordMeshRefineStage(refineStages, "ledger", "failed", ledgerStarted, { error: ledgerError });
|
|
48069
|
+
}
|
|
48070
|
+
const finalBranchConvergenceState = {
|
|
48071
|
+
branch: baseBranch,
|
|
48072
|
+
mergedBranch: branch,
|
|
48073
|
+
baseBranch,
|
|
48074
|
+
merged: true,
|
|
48075
|
+
removed: removeResult?.success !== false,
|
|
48076
|
+
validation: "passed",
|
|
48077
|
+
patchEquivalence: "passed",
|
|
48078
|
+
status: removeResult?.success === false ? "merged_cleanup_failed" : "merged"
|
|
48079
|
+
};
|
|
48080
|
+
if (removeResult?.success === false) {
|
|
48081
|
+
return {
|
|
48082
|
+
success: false,
|
|
48083
|
+
code: "cleanup_failed",
|
|
48084
|
+
error: "Refinery merge completed but worktree cleanup failed; manual cleanup/retry is required.",
|
|
48085
|
+
merged: true,
|
|
48086
|
+
branch,
|
|
48087
|
+
into: baseBranch,
|
|
48088
|
+
removeResult,
|
|
48089
|
+
validationSummary,
|
|
48090
|
+
patchEquivalence,
|
|
48091
|
+
mergeResult,
|
|
48092
|
+
refineStages,
|
|
48093
|
+
...ledgerError ? { ledgerError } : {},
|
|
48094
|
+
finalBranchConvergenceState
|
|
48095
|
+
};
|
|
47918
48096
|
}
|
|
47919
48097
|
return {
|
|
47920
48098
|
success: true,
|
|
@@ -47923,18 +48101,14 @@ var init_router = __esm({
|
|
|
47923
48101
|
into: baseBranch,
|
|
47924
48102
|
removeResult,
|
|
47925
48103
|
validationSummary,
|
|
47926
|
-
|
|
47927
|
-
|
|
47928
|
-
|
|
47929
|
-
|
|
47930
|
-
|
|
47931
|
-
removed: removeResult?.success !== false,
|
|
47932
|
-
validation: "passed",
|
|
47933
|
-
status: removeResult?.success === false ? "merged_cleanup_failed" : "merged"
|
|
47934
|
-
}
|
|
48104
|
+
patchEquivalence,
|
|
48105
|
+
mergeResult,
|
|
48106
|
+
refineStages,
|
|
48107
|
+
...ledgerError ? { ledgerError } : {},
|
|
48108
|
+
finalBranchConvergenceState
|
|
47935
48109
|
};
|
|
47936
48110
|
} catch (e) {
|
|
47937
|
-
return { success: false, error: e.message };
|
|
48111
|
+
return { success: false, error: e.message, refineStages };
|
|
47938
48112
|
}
|
|
47939
48113
|
}
|
|
47940
48114
|
case "remove_mesh_node": {
|
|
@@ -57244,7 +57418,9 @@ var init_server_connection = __esm({
|
|
|
57244
57418
|
const requestId = `mesh_${crypto.randomUUID()}`;
|
|
57245
57419
|
const timer = setTimeout(() => {
|
|
57246
57420
|
this.off("daemon_mesh_result", handler);
|
|
57247
|
-
reject(new Error(
|
|
57421
|
+
reject(new Error(
|
|
57422
|
+
`Mesh command '${command}' to ${targetDaemonId.slice(0, 12)} timed out after ${timeoutMs}ms (requestId=${requestId})`
|
|
57423
|
+
));
|
|
57248
57424
|
}, timeoutMs);
|
|
57249
57425
|
const handler = (msg) => {
|
|
57250
57426
|
const body = msg.payload && typeof msg.payload === "object" ? { ...msg, ...msg.payload } : msg;
|
|
@@ -67142,7 +67318,18 @@ var init_daemon_mesh_manager = __esm({
|
|
|
67142
67318
|
peer.pendingCandidates = [];
|
|
67143
67319
|
}
|
|
67144
67320
|
} catch (err) {
|
|
67145
|
-
|
|
67321
|
+
const errorMessage = err?.message || "Failed to set remote description";
|
|
67322
|
+
const isDuplicateStableAnswer = type2 === "mesh_p2p_answer" && /Unexpected remote answer description in signaling state stable/i.test(errorMessage);
|
|
67323
|
+
this.logMeshCommandEvent(isDuplicateStableAnswer ? "remote_desc_duplicate_ignored" : "remote_desc_failed", {
|
|
67324
|
+
targetDaemonId,
|
|
67325
|
+
signalType: type2,
|
|
67326
|
+
receivedAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
67327
|
+
peerState: peer.state,
|
|
67328
|
+
error: errorMessage
|
|
67329
|
+
});
|
|
67330
|
+
if (isDuplicateStableAnswer) return;
|
|
67331
|
+
LOG.warn("Mesh", `[Mesh] Failed to set remote desc for ${type2} from ${targetDaemonId.slice(0, 12)}: ${errorMessage}`);
|
|
67332
|
+
this.invalidatePeer(targetDaemonId, `P2P remote description failed: ${errorMessage}`, { rejectPending: true, closeResources: true });
|
|
67146
67333
|
}
|
|
67147
67334
|
} else if (type2 === "mesh_p2p_ice") {
|
|
67148
67335
|
try {
|
|
@@ -67592,7 +67779,7 @@ var init_adhdev_daemon = __esm({
|
|
|
67592
67779
|
init_version();
|
|
67593
67780
|
init_src();
|
|
67594
67781
|
init_runtime_defaults();
|
|
67595
|
-
pkgVersion = resolvePackageVersion({ injectedVersion: "0.9.82-rc.
|
|
67782
|
+
pkgVersion = resolvePackageVersion({ injectedVersion: "0.9.82-rc.37" });
|
|
67596
67783
|
AdhdevDaemon = class _AdhdevDaemon {
|
|
67597
67784
|
localHttpServer = null;
|
|
67598
67785
|
localWss = null;
|