negotium 0.1.37 → 0.1.39
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 +19 -0
- package/dist/agent-helpers.js +15637 -5674
- package/dist/agent-helpers.js.map +85 -37
- package/dist/browser-runtime.js +1600 -0
- package/dist/browser-runtime.js.map +28 -0
- package/dist/hosted-agent.js +8 -8
- package/dist/hosted-agent.js.map +6 -5
- package/dist/main.js +3790 -3113
- package/dist/main.js.map +33 -29
- package/dist/mcp-factories.js +15141 -301
- package/dist/mcp-factories.js.map +100 -7
- package/dist/prompts.js +117 -49
- package/dist/prompts.js.map +3 -3
- package/dist/query-runtime.js +310 -1
- package/dist/query-runtime.js.map +10 -5
- package/dist/runtime/src/agents/archiver.ts +407 -296
- package/dist/runtime/src/agents/mcp-tools/ask-user.ts +440 -274
- package/dist/runtime/src/agents/mcp-tools/self-config.ts +139 -65
- package/dist/runtime/src/agents/mcp-tools/spawn-subagent.ts +1037 -816
- package/dist/runtime/src/agents/public-helpers.ts +82 -0
- package/dist/runtime/src/agents/self-config-core.ts +574 -278
- package/dist/runtime/src/agents/topic-cleanup.ts +167 -129
- package/dist/runtime/src/index.ts +4 -1
- package/dist/runtime/src/mcp/factories/index.ts +9 -0
- package/dist/runtime/src/mcp/session-comm/topic-catalog.ts +132 -0
- package/dist/runtime/src/mcp/session-comm/topics.ts +23 -57
- package/dist/runtime/src/platform/mcp-config.ts +2 -4
- package/dist/runtime/src/platform/playwright/browser-processes.ts +3 -2
- package/dist/runtime/src/platform/playwright/capability.ts +5 -0
- package/dist/runtime/src/platform/playwright/manager.ts +380 -66
- package/dist/runtime/src/platform/playwright/public-runtime.ts +45 -0
- package/dist/runtime/src/platform/playwright/transport-probe.ts +89 -0
- package/dist/runtime/src/prompts/builders.ts +192 -51
- package/dist/runtime/src/query/active-rooms.ts +2 -0
- package/dist/runtime/src/query/public-runtime.ts +8 -0
- package/dist/runtime/src/query/state.ts +69 -33
- package/dist/runtime/src/query/types.ts +1 -0
- package/dist/runtime/src/runtime/playwright-turn-abort.ts +59 -0
- package/dist/runtime/src/runtime/turn-event-stream.ts +23 -6
- package/dist/runtime/src/runtime/turn-runner.ts +6 -1
- package/dist/runtime/src/version.ts +1 -1
- package/dist/types/packages/core/src/agents/api-topic-agent-switch.d.ts +38 -0
- package/dist/types/packages/core/src/agents/archiver.d.ts +52 -16
- package/dist/types/packages/core/src/agents/mcp-tools/ask-user.d.ts +75 -4
- package/dist/types/packages/core/src/agents/mcp-tools/self-config.d.ts +17 -0
- package/dist/types/packages/core/src/agents/mcp-tools/spawn-subagent.d.ts +112 -25
- package/dist/types/packages/core/src/agents/public-helpers.d.ts +7 -0
- package/dist/types/packages/core/src/agents/self-config-core.d.ts +185 -0
- package/dist/types/packages/core/src/agents/topic-cleanup.d.ts +30 -24
- package/dist/types/packages/core/src/mcp/factories/index.d.ts +1 -0
- package/dist/types/packages/core/src/mcp/session-comm/topic-catalog.d.ts +46 -0
- package/dist/types/packages/core/src/platform/mcp-config.d.ts +2 -1
- package/dist/types/packages/core/src/platform/playwright/capability.d.ts +1 -0
- package/dist/types/packages/core/src/platform/playwright/manager.d.ts +65 -5
- package/dist/types/packages/core/src/platform/playwright/public-runtime.d.ts +4 -0
- package/dist/types/packages/core/src/platform/playwright/transport-probe.d.ts +13 -0
- package/dist/types/packages/core/src/prompts/builders.d.ts +29 -3
- package/dist/types/packages/core/src/query/active-rooms.d.ts +2 -0
- package/dist/types/packages/core/src/query/public-runtime.d.ts +1 -0
- package/dist/types/packages/core/src/query/state.d.ts +13 -0
- package/dist/types/packages/core/src/query/types.d.ts +2 -1
- package/dist/types/packages/core/src/runtime/playwright-turn-abort.d.ts +12 -0
- package/dist/types/packages/core/src/version.d.ts +1 -1
- package/package.json +6 -1
package/dist/query-runtime.js
CHANGED
|
@@ -429,6 +429,7 @@ var AbortReason;
|
|
|
429
429
|
AbortReason2["None"] = "none";
|
|
430
430
|
AbortReason2["Internal"] = "internal";
|
|
431
431
|
AbortReason2["External"] = "external";
|
|
432
|
+
AbortReason2["Infrastructure"] = "infrastructure";
|
|
432
433
|
})(AbortReason ||= {});
|
|
433
434
|
|
|
434
435
|
// ../../packages/core/src/query/active-rooms.ts
|
|
@@ -590,15 +591,323 @@ var interSessionQueue = new InterSessionQueue;
|
|
|
590
591
|
function wsAbortReason(reason) {
|
|
591
592
|
return reason === "internal" /* Internal */ ? "superseded" : "stopped";
|
|
592
593
|
}
|
|
594
|
+
// ../../packages/core/src/query/state.ts
|
|
595
|
+
import { mkdirSync as mkdirSync3, renameSync, unlinkSync, writeFileSync as writeFileSync2 } from "fs";
|
|
596
|
+
import { basename, join as join3 } from "path";
|
|
597
|
+
|
|
598
|
+
// ../../packages/core/src/platform/config.ts
|
|
599
|
+
import { execFileSync } from "child_process";
|
|
600
|
+
import { randomBytes } from "crypto";
|
|
601
|
+
import {
|
|
602
|
+
accessSync,
|
|
603
|
+
chmodSync,
|
|
604
|
+
constants,
|
|
605
|
+
existsSync,
|
|
606
|
+
mkdirSync as mkdirSync2,
|
|
607
|
+
readFileSync,
|
|
608
|
+
writeFileSync
|
|
609
|
+
} from "fs";
|
|
610
|
+
import { homedir as homedir2 } from "os";
|
|
611
|
+
import { dirname as dirname2, join as join2, resolve as resolve2 } from "path";
|
|
612
|
+
import { fileURLToPath } from "url";
|
|
613
|
+
|
|
614
|
+
// ../../packages/core/src/platform/config-helpers.ts
|
|
615
|
+
function readEnvText(env, key) {
|
|
616
|
+
const value = env[key]?.trim();
|
|
617
|
+
return value || undefined;
|
|
618
|
+
}
|
|
619
|
+
function parseRuntimePort(value, fallback) {
|
|
620
|
+
if (!value)
|
|
621
|
+
return fallback;
|
|
622
|
+
const port = Number.parseInt(value, 10);
|
|
623
|
+
return Number.isInteger(port) && port > 0 && port <= 65535 ? port : fallback;
|
|
624
|
+
}
|
|
625
|
+
|
|
626
|
+
// ../../packages/core/src/types.ts
|
|
627
|
+
var SUPPORTED_AGENTS = ["maestro", "claude", "codex"];
|
|
628
|
+
function isAgentKind(value) {
|
|
629
|
+
return typeof value === "string" && SUPPORTED_AGENTS.includes(value);
|
|
630
|
+
}
|
|
631
|
+
|
|
632
|
+
// ../../packages/core/src/platform/config.ts
|
|
633
|
+
function envText(envKey) {
|
|
634
|
+
return readEnvText(process.env, envKey);
|
|
635
|
+
}
|
|
636
|
+
function resolveAgentEnv(envKey, fallback, legacyEnvKey) {
|
|
637
|
+
const value = envText(envKey) ?? (legacyEnvKey ? envText(legacyEnvKey) : undefined);
|
|
638
|
+
return isAgentKind(value) ? value : fallback;
|
|
639
|
+
}
|
|
640
|
+
var HOME = homedir2();
|
|
641
|
+
function resolveProjectRoot() {
|
|
642
|
+
const moduleDir = dirname2(fileURLToPath(import.meta.url));
|
|
643
|
+
const packagedRuntime = resolve2(moduleDir, "runtime");
|
|
644
|
+
if (existsSync(resolve2(packagedRuntime, "src")))
|
|
645
|
+
return packagedRuntime;
|
|
646
|
+
return resolve2(moduleDir, "../..");
|
|
647
|
+
}
|
|
648
|
+
var PROJECT_ROOT = resolveProjectRoot();
|
|
649
|
+
function resolveDependencyBin(name) {
|
|
650
|
+
let dir = PROJECT_ROOT;
|
|
651
|
+
while (true) {
|
|
652
|
+
const candidate = resolve2(dir, "node_modules", ".bin", name);
|
|
653
|
+
if (existsSync(candidate))
|
|
654
|
+
return candidate;
|
|
655
|
+
const parent = dirname2(dir);
|
|
656
|
+
if (parent === dir)
|
|
657
|
+
return candidate;
|
|
658
|
+
dir = parent;
|
|
659
|
+
}
|
|
660
|
+
}
|
|
661
|
+
var STATE_DIR_ENV = envText("NEGOTIUM_STATE_DIR");
|
|
662
|
+
var STATE_DIR = STATE_DIR_ENV ? resolve2(STATE_DIR_ENV) : resolve2(HOME, ".negotium");
|
|
663
|
+
function resolveLocalStateDir(envKey, stateName) {
|
|
664
|
+
const envValue = envText(envKey);
|
|
665
|
+
if (envValue)
|
|
666
|
+
return resolve2(envValue);
|
|
667
|
+
return resolve2(STATE_DIR, stateName);
|
|
668
|
+
}
|
|
669
|
+
function parsePortEnv(envValue, fallback) {
|
|
670
|
+
return parseRuntimePort(envValue, fallback);
|
|
671
|
+
}
|
|
672
|
+
var WORKSPACE_DIR = resolveLocalStateDir("NEGOTIUM_WORKSPACE_DIR", "workspace");
|
|
673
|
+
var TOPIC_WORKSPACE_DIR = resolve2(WORKSPACE_DIR, "topics");
|
|
674
|
+
var SHARED_WIKI_DIR = resolve2(WORKSPACE_DIR, "wiki");
|
|
675
|
+
var CONTEXTS_DIR = resolve2(WORKSPACE_DIR, "contexts");
|
|
676
|
+
var BROWSER_PROFILES_DIR = resolve2(WORKSPACE_DIR, "browser-profiles");
|
|
677
|
+
var DM_WORKSPACE_DIR = resolve2(WORKSPACE_DIR, "dm");
|
|
678
|
+
var SESSION_WORKSPACE_DIR = resolve2(WORKSPACE_DIR, "sessions");
|
|
679
|
+
var CLAUDE_EXECUTABLE_ENV = envText("NEGOTIUM_CLAUDE_EXECUTABLE");
|
|
680
|
+
var CLAUDE_EXECUTABLE = CLAUDE_EXECUTABLE_ENV ? resolve2(CLAUDE_EXECUTABLE_ENV) : undefined;
|
|
681
|
+
function resolveBrowserMcpBin(envValue) {
|
|
682
|
+
const override = envValue?.trim();
|
|
683
|
+
if (override) {
|
|
684
|
+
if (!/(^|\/)(mcp-patchright|mcp-patchright-http\.mjs)$/.test(override)) {
|
|
685
|
+
throw new Error("NEGOTIUM_BROWSER_MCP_BIN must point to the authenticated mcp-patchright wrapper.");
|
|
686
|
+
}
|
|
687
|
+
return override;
|
|
688
|
+
}
|
|
689
|
+
return PATCHRIGHT_MCP_BIN;
|
|
690
|
+
}
|
|
691
|
+
var PATCHRIGHT_MCP_BIN = resolve2(PROJECT_ROOT, "scripts/mcp-patchright-http.mjs");
|
|
692
|
+
var PLAYWRIGHT_MCP_BIN = resolveBrowserMcpBin(envText("NEGOTIUM_BROWSER_MCP_BIN"));
|
|
693
|
+
var BROWSER_RS_VERSION = "v0.1.13";
|
|
694
|
+
var BROWSER_RS_MIN_SECURE_VERSION = "0.1.13";
|
|
695
|
+
function versionAtLeast(actualVersion, minimumVersion) {
|
|
696
|
+
const actual = actualVersion.split(".").map(Number);
|
|
697
|
+
const minimum = minimumVersion.split(".").map(Number);
|
|
698
|
+
if (actual.some(Number.isNaN) || minimum.some(Number.isNaN))
|
|
699
|
+
return false;
|
|
700
|
+
for (let index = 0;index < minimum.length; index += 1) {
|
|
701
|
+
if ((actual[index] ?? 0) > (minimum[index] ?? 0))
|
|
702
|
+
return true;
|
|
703
|
+
if ((actual[index] ?? 0) < (minimum[index] ?? 0))
|
|
704
|
+
return false;
|
|
705
|
+
}
|
|
706
|
+
return true;
|
|
707
|
+
}
|
|
708
|
+
function browserRsMeetsMinimumVersion(candidate) {
|
|
709
|
+
try {
|
|
710
|
+
const output = execFileSync(candidate, ["--version"], {
|
|
711
|
+
encoding: "utf8",
|
|
712
|
+
timeout: 2000,
|
|
713
|
+
stdio: ["ignore", "pipe", "ignore"]
|
|
714
|
+
}).trim();
|
|
715
|
+
const match = output.match(/^browser-rs (\d+)\.(\d+)\.(\d+)$/);
|
|
716
|
+
if (!match)
|
|
717
|
+
return false;
|
|
718
|
+
return versionAtLeast(match.slice(1).join("."), BROWSER_RS_MIN_SECURE_VERSION);
|
|
719
|
+
} catch {
|
|
720
|
+
return false;
|
|
721
|
+
}
|
|
722
|
+
}
|
|
723
|
+
function resolveBrowserRsBin(envValue) {
|
|
724
|
+
const override = envValue?.trim();
|
|
725
|
+
if (!override && !versionAtLeast(BROWSER_RS_VERSION.replace(/^v/, ""), BROWSER_RS_MIN_SECURE_VERSION)) {
|
|
726
|
+
return;
|
|
727
|
+
}
|
|
728
|
+
const candidate = override ? resolve2(override) : resolve2(STATE_DIR, "bin", "browser-rs", BROWSER_RS_VERSION, "browser-rs");
|
|
729
|
+
try {
|
|
730
|
+
accessSync(candidate, constants.X_OK);
|
|
731
|
+
return browserRsMeetsMinimumVersion(candidate) ? candidate : undefined;
|
|
732
|
+
} catch {
|
|
733
|
+
return;
|
|
734
|
+
}
|
|
735
|
+
}
|
|
736
|
+
var BROWSER_RS_BIN = resolveBrowserRsBin(envText("NEGOTIUM_BROWSER_RS_BIN"));
|
|
737
|
+
var TSX_BIN = resolveDependencyBin("tsx");
|
|
738
|
+
var TSCONFIG_PATH = resolve2(PROJECT_ROOT, "tsconfig.json");
|
|
739
|
+
var SESSION_COMM_SERVER = resolve2(PROJECT_ROOT, "src/mcp/session-comm/server.ts");
|
|
740
|
+
var TASK_SERVER = resolve2(PROJECT_ROOT, "src/mcp/task-server.ts");
|
|
741
|
+
var BROWSER_MCP_SSE_PROXY_SERVER = resolve2(PROJECT_ROOT, "src/mcp/browser-sse-proxy-server.ts");
|
|
742
|
+
var CANONICAL_MCP_PROXY_SERVER = resolve2(PROJECT_ROOT, "src/mcp/canonical-proxy-server.ts");
|
|
743
|
+
var WIKI_SERVER = resolve2(PROJECT_ROOT, "src/mcp/wiki-server.ts");
|
|
744
|
+
var TOKEN_STATS_SERVER = resolve2(PROJECT_ROOT, "src/mcp/token-stats-server.ts");
|
|
745
|
+
var COMPACTION_LOG_SERVER = resolve2(PROJECT_ROOT, "src/mcp/compaction-log-server.ts");
|
|
746
|
+
var SYSTEM_HEALTH_SERVER = resolve2(PROJECT_ROOT, "src/mcp/system-health-server.ts");
|
|
747
|
+
var AGENT_HEALTH_SERVER = resolve2(PROJECT_ROOT, "src/mcp/agent-health-server.ts");
|
|
748
|
+
var BACKGROUND_BASH_SERVER = resolve2(PROJECT_ROOT, "src/mcp/background-bash-server.ts");
|
|
749
|
+
var VAULT_SERVER = resolve2(PROJECT_ROOT, "src/mcp/vault-server.ts");
|
|
750
|
+
var BG_BASH_BASE_PORT = parsePortEnv(process.env.BG_BASH_BASE_PORT, 9700);
|
|
751
|
+
var BG_BASH_MAX_PORT = parsePortEnv(process.env.BG_BASH_MAX_PORT, 9799);
|
|
752
|
+
function loadOrCreateLocalSecret(envKey, filename, options = {}) {
|
|
753
|
+
const envValue = envText(envKey);
|
|
754
|
+
const secretFile = resolve2(STATE_DIR, filename);
|
|
755
|
+
mkdirSync2(dirname2(secretFile), { recursive: true });
|
|
756
|
+
if (envValue) {
|
|
757
|
+
if (options.persistEnvValue) {
|
|
758
|
+
writeFileSync(secretFile, `${envValue}
|
|
759
|
+
`, { mode: 384 });
|
|
760
|
+
chmodSync(secretFile, 384);
|
|
761
|
+
}
|
|
762
|
+
return envValue;
|
|
763
|
+
}
|
|
764
|
+
if (existsSync(secretFile)) {
|
|
765
|
+
const stored = readFileSync(secretFile, "utf-8").trim();
|
|
766
|
+
if (stored) {
|
|
767
|
+
chmodSync(secretFile, 384);
|
|
768
|
+
return stored;
|
|
769
|
+
}
|
|
770
|
+
}
|
|
771
|
+
const secret = randomBytes(32).toString("base64url");
|
|
772
|
+
try {
|
|
773
|
+
writeFileSync(secretFile, `${secret}
|
|
774
|
+
`, { mode: 384, flag: "wx" });
|
|
775
|
+
return secret;
|
|
776
|
+
} catch (error) {
|
|
777
|
+
if (error.code !== "EEXIST")
|
|
778
|
+
throw error;
|
|
779
|
+
const stored = readFileSync(secretFile, "utf-8").trim();
|
|
780
|
+
if (!stored)
|
|
781
|
+
throw new Error(`Secret file exists but is empty: ${secretFile}`);
|
|
782
|
+
chmodSync(secretFile, 384);
|
|
783
|
+
return stored;
|
|
784
|
+
}
|
|
785
|
+
}
|
|
786
|
+
var RUNTIME_MCP_SECRET = loadOrCreateLocalSecret("RUNTIME_MCP_SECRET", "runtime-mcp-secret");
|
|
787
|
+
var NODE_CONTROL_TOKEN = loadOrCreateLocalSecret("NEGOTIUM_CONTROL_TOKEN", "node-control-token");
|
|
788
|
+
var VAULT_MASTER_KEY = loadOrCreateLocalSecret("NEGOTIUM_VAULT_MASTER_KEY", "vault-master-key", { persistEnvValue: true });
|
|
789
|
+
delete process.env.NEGOTIUM_VAULT_MASTER_KEY;
|
|
790
|
+
var NEGOTIUM_PORT = parseInt(process.env.NEGOTIUM_PORT || "7777", 10);
|
|
791
|
+
var hostname = process.env.HOSTNAME || "127.0.0.1";
|
|
792
|
+
var DATA_DIR = resolveLocalStateDir("NEGOTIUM_DATA_DIR", "data");
|
|
793
|
+
var LOG_DIR = resolveLocalStateDir("NEGOTIUM_LOG_DIR", "logs");
|
|
794
|
+
var SESSIONS_DB = process.env.SESSIONS_DB_PATH ? resolve2(process.env.SESSIONS_DB_PATH) : resolve2(DATA_DIR, "sessions.db");
|
|
795
|
+
var DEBUG_FILE = resolve2(DATA_DIR, "debug-users.json");
|
|
796
|
+
var USERS_LOG_DIR = resolve2(DATA_DIR, "users");
|
|
797
|
+
var RUN_DIR = resolveLocalStateDir("NEGOTIUM_RUN_DIR", "run");
|
|
798
|
+
var PROGRESS_DIR = resolve2(RUN_DIR, "progress");
|
|
799
|
+
var DM_CMD_DIR = resolve2(RUN_DIR, "dm-commands");
|
|
800
|
+
var DM_RESP_DIR = resolve2(RUN_DIR, "dm-responses");
|
|
801
|
+
var SESSION_INBOX_DIR = resolve2(RUN_DIR, "session-inbox");
|
|
802
|
+
var SESSION_ASKS_DIR = resolve2(RUN_DIR, "session-asks");
|
|
803
|
+
var PLAYWRIGHT_BASE_PORT = parsePortEnv(process.env.PLAYWRIGHT_BASE_PORT, 9100);
|
|
804
|
+
var PLAYWRIGHT_MAX_PORT = parsePortEnv(process.env.PLAYWRIGHT_MAX_PORT, 9499);
|
|
805
|
+
var PLAYWRIGHT_PORTS_DIR = resolve2(RUN_DIR, "playwright-ports");
|
|
806
|
+
mkdirSync2(STATE_DIR, { recursive: true });
|
|
807
|
+
mkdirSync2(DATA_DIR, { recursive: true });
|
|
808
|
+
mkdirSync2(LOG_DIR, { recursive: true });
|
|
809
|
+
mkdirSync2(PROGRESS_DIR, { recursive: true });
|
|
810
|
+
mkdirSync2(DM_CMD_DIR, { recursive: true });
|
|
811
|
+
mkdirSync2(DM_RESP_DIR, { recursive: true });
|
|
812
|
+
mkdirSync2(SESSION_INBOX_DIR, { recursive: true });
|
|
813
|
+
mkdirSync2(SESSION_ASKS_DIR, { recursive: true });
|
|
814
|
+
mkdirSync2(PLAYWRIGHT_PORTS_DIR, { recursive: true });
|
|
815
|
+
mkdirSync2(WORKSPACE_DIR, { recursive: true });
|
|
816
|
+
mkdirSync2(TOPIC_WORKSPACE_DIR, { recursive: true });
|
|
817
|
+
mkdirSync2(SHARED_WIKI_DIR, { recursive: true });
|
|
818
|
+
mkdirSync2(CONTEXTS_DIR, { recursive: true });
|
|
819
|
+
mkdirSync2(BROWSER_PROFILES_DIR, { recursive: true });
|
|
820
|
+
mkdirSync2(DM_WORKSPACE_DIR, { recursive: true });
|
|
821
|
+
mkdirSync2(SESSION_WORKSPACE_DIR, { recursive: true });
|
|
822
|
+
var ACTIVE_QUERY_STALE_MS = 10 * 60 * 1000;
|
|
823
|
+
var AGENTS_PROMPTS_DIR = resolve2(PROJECT_ROOT, "src/prompts/agents");
|
|
824
|
+
var RESOURCES_DIR = resolve2(PROJECT_ROOT, "src/resources");
|
|
825
|
+
var FALLBACK_AGENT = resolveAgentEnv("FALLBACK_AGENT", "maestro", "DEFAULT_AGENT");
|
|
826
|
+
var SESSION_AGENT = resolveAgentEnv("SESSION_AGENT", FALLBACK_AGENT);
|
|
827
|
+
var GATEWAY_AGENT = resolveAgentEnv("GATEWAY_AGENT", FALLBACK_AGENT);
|
|
828
|
+
var FALLBACK_MODEL = envText("FALLBACK_MODEL") ?? envText("DEFAULT_MODEL");
|
|
829
|
+
function resolveModelEnv(envKey, agentConst) {
|
|
830
|
+
return envText(envKey) ?? (agentConst === FALLBACK_AGENT ? FALLBACK_MODEL : undefined);
|
|
831
|
+
}
|
|
832
|
+
var SESSION_MODEL = resolveModelEnv("SESSION_MODEL", SESSION_AGENT);
|
|
833
|
+
var GATEWAY_MODEL = resolveModelEnv("GATEWAY_MODEL", GATEWAY_AGENT);
|
|
834
|
+
var FFMPEG_BIN = envText("FFMPEG_BIN");
|
|
835
|
+
var FFPROBE_BIN = envText("FFPROBE_BIN");
|
|
836
|
+
var PYTHON_BIN = envText("PYTHON_BIN") ?? "python3";
|
|
837
|
+
var FASTER_WHISPER_WRAPPER = envText("FASTER_WHISPER_WRAPPER") ?? resolve2(PROJECT_ROOT, "scripts/faster-whisper-wrapper.py");
|
|
838
|
+
var WHISPER_MODEL = envText("WHISPER_MODEL_FILE") ?? "turbo";
|
|
839
|
+
var TESSERACT_BIN = envText("TESSERACT_BIN") ?? "tesseract";
|
|
840
|
+
var PDFTOTEXT_BIN = envText("PDFTOTEXT_BIN") ?? "pdftotext";
|
|
841
|
+
var _envMaxTellDepth = Number.parseInt(process.env.MAX_TELL_DEPTH ?? "", 10);
|
|
842
|
+
var MAX_TELL_DEPTH = Number.isInteger(_envMaxTellDepth) && _envMaxTellDepth > 0 ? _envMaxTellDepth : 20;
|
|
843
|
+
|
|
844
|
+
// ../../packages/core/src/security/sanitize.ts
|
|
845
|
+
function sanitizeId(id) {
|
|
846
|
+
return id.replace(/[^a-zA-Z0-9_-]/g, "_") || "_";
|
|
847
|
+
}
|
|
848
|
+
|
|
849
|
+
// ../../packages/core/src/query/state.ts
|
|
850
|
+
function createQueryStateStore(options) {
|
|
851
|
+
const sanitize = options.sanitizeTopicId ?? sanitizeId;
|
|
852
|
+
const queryStateDirPath = (userId) => join3(options.usersLogDir, String(userId), "active-queries");
|
|
853
|
+
const queryStateFile = (userId, topicId) => join3(queryStateDirPath(userId), `${sanitize(topicId)}.json`);
|
|
854
|
+
const legacyQueryStateFile = (userId, topicName) => {
|
|
855
|
+
if (!topicName || topicName === "." || topicName === ".." || basename(topicName) !== topicName) {
|
|
856
|
+
return null;
|
|
857
|
+
}
|
|
858
|
+
return join3(queryStateDirPath(userId), `${topicName}.json`);
|
|
859
|
+
};
|
|
860
|
+
return {
|
|
861
|
+
write(userId, topicId, topicName, task) {
|
|
862
|
+
const dir = queryStateDirPath(userId);
|
|
863
|
+
mkdirSync3(dir, { recursive: true });
|
|
864
|
+
const state = { topicId, topicName, since: new Date().toISOString() };
|
|
865
|
+
if (task)
|
|
866
|
+
state.task = [...task.replace(/\n+/g, " ").trim()].slice(0, 100).join("");
|
|
867
|
+
const target = queryStateFile(userId, topicId);
|
|
868
|
+
const tmp = `${target}.${process.pid}.${Date.now()}.tmp`;
|
|
869
|
+
writeFileSync2(tmp, JSON.stringify(state));
|
|
870
|
+
renameSync(tmp, target);
|
|
871
|
+
},
|
|
872
|
+
clear(userId, topicId, legacyTopicName) {
|
|
873
|
+
const paths = [
|
|
874
|
+
queryStateFile(userId, topicId),
|
|
875
|
+
legacyQueryStateFile(userId, legacyTopicName)
|
|
876
|
+
].filter((path) => Boolean(path));
|
|
877
|
+
for (const path of new Set(paths)) {
|
|
878
|
+
try {
|
|
879
|
+
unlinkSync(path);
|
|
880
|
+
} catch (error) {
|
|
881
|
+
if (error?.code !== "ENOENT") {
|
|
882
|
+
options.logger?.warn({ err: error, userId, topicId, path }, "Failed to clear query state file");
|
|
883
|
+
}
|
|
884
|
+
}
|
|
885
|
+
}
|
|
886
|
+
}
|
|
887
|
+
};
|
|
888
|
+
}
|
|
889
|
+
var defaultQueryStateStore = createQueryStateStore({
|
|
890
|
+
usersLogDir: USERS_LOG_DIR,
|
|
891
|
+
logger
|
|
892
|
+
});
|
|
893
|
+
function writeQueryState(userId, topicId, topicName, task) {
|
|
894
|
+
defaultQueryStateStore.write(userId, topicId, topicName, task);
|
|
895
|
+
}
|
|
896
|
+
function clearQueryState(userId, topicId, legacyTopicName) {
|
|
897
|
+
defaultQueryStateStore.clear(userId, topicId, legacyTopicName);
|
|
898
|
+
}
|
|
593
899
|
export {
|
|
594
900
|
wsAbortReason,
|
|
901
|
+
writeQueryState,
|
|
595
902
|
isolatedTurnRoomId,
|
|
596
903
|
isUserOrigin,
|
|
597
904
|
isIsolatedTurnRoomId,
|
|
598
905
|
createRoomQueryRegistry,
|
|
906
|
+
createQueryStateStore,
|
|
907
|
+
clearQueryState,
|
|
599
908
|
InterSessionQueue,
|
|
600
909
|
DeferredInjectBatcher,
|
|
601
910
|
AbortReason
|
|
602
911
|
};
|
|
603
912
|
|
|
604
|
-
//# debugId=
|
|
913
|
+
//# debugId=C8DEEEED5A27B0EF64756E2164756E21
|