@wipcomputer/memory-crystal 0.7.32 → 0.7.33
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/SKILL.md +1 -1
- package/cloud/wrangler.toml +30 -0
- package/dist/bridge.d.ts +7 -0
- package/dist/bridge.js +14 -0
- package/dist/bulk-copy.d.ts +17 -0
- package/dist/bulk-copy.js +90 -0
- package/dist/cc-hook.d.ts +8 -0
- package/dist/cc-hook.js +368 -0
- package/dist/cc-poller.d.ts +1 -0
- package/dist/cc-poller.js +550 -0
- package/dist/chunk-25LXQJ4Z.js +110 -0
- package/dist/chunk-2DRXIRQW.js +97 -0
- package/dist/chunk-2GBYLMEF.js +1385 -0
- package/dist/chunk-2ZNH5F6E.js +1281 -0
- package/dist/chunk-3G3SFYYI.js +288 -0
- package/dist/chunk-3RG5ZIWI.js +10 -0
- package/dist/chunk-3S6TI23B.js +97 -0
- package/dist/chunk-3VFIJYS4.js +818 -0
- package/dist/chunk-437F27T6.js +97 -0
- package/dist/chunk-52QE3YI3.js +1169 -0
- package/dist/chunk-57RP3DIN.js +1205 -0
- package/dist/chunk-5HSZ4W2P.js +62 -0
- package/dist/chunk-5I7GMRDN.js +146 -0
- package/dist/chunk-645IPXW3.js +290 -0
- package/dist/chunk-7A7ELD4C.js +1205 -0
- package/dist/chunk-7FYY4GZM.js +1205 -0
- package/dist/chunk-7IUE7ODU.js +254 -0
- package/dist/chunk-7RMLKZIS.js +108 -0
- package/dist/chunk-AA3OPP4Z.js +432 -0
- package/dist/chunk-AEWLSYPH.js +72 -0
- package/dist/chunk-ASSZDR6I.js +108 -0
- package/dist/chunk-AYRJVWUC.js +1205 -0
- package/dist/chunk-CCYI5O3D.js +148 -0
- package/dist/chunk-CGIDSAJB.js +288 -0
- package/dist/chunk-D3I3ZSE2.js +411 -0
- package/dist/chunk-D3MACYZ4.js +108 -0
- package/dist/chunk-DACSKLY6.js +219 -0
- package/dist/chunk-DFQ72B7M.js +248 -0
- package/dist/chunk-DW5B4BL7.js +108 -0
- package/dist/chunk-EKSACBTJ.js +1070 -0
- package/dist/chunk-EXEZZADG.js +248 -0
- package/dist/chunk-F3Y7EL7K.js +83 -0
- package/dist/chunk-FBQWSDPC.js +1328 -0
- package/dist/chunk-FHRZNOMW.js +1205 -0
- package/dist/chunk-IM7N24MT.js +129 -0
- package/dist/chunk-IPNYIXFK.js +1178 -0
- package/dist/chunk-J7MRSZIO.js +167 -0
- package/dist/chunk-JITKI2OI.js +106 -0
- package/dist/chunk-JWZXYVET.js +1068 -0
- package/dist/chunk-KCQUXVYT.js +108 -0
- package/dist/chunk-KOQ43OX6.js +1281 -0
- package/dist/chunk-KYVWO6ZM.js +1069 -0
- package/dist/chunk-L3VHARQH.js +413 -0
- package/dist/chunk-LBWDS6BE.js +288 -0
- package/dist/chunk-LOVAHSQV.js +411 -0
- package/dist/chunk-LQOYCAGG.js +446 -0
- package/dist/chunk-LWAIPJ2W.js +146 -0
- package/dist/chunk-M5DHKW7M.js +127 -0
- package/dist/chunk-MBKCIJHM.js +1328 -0
- package/dist/chunk-MK42FMEG.js +147 -0
- package/dist/chunk-MOBMYHKL.js +1205 -0
- package/dist/chunk-MPLTNMRG.js +67 -0
- package/dist/chunk-NIJCVN3O.js +147 -0
- package/dist/chunk-NX647OM3.js +310 -0
- package/dist/chunk-NZCFSZQ7.js +1205 -0
- package/dist/chunk-O2UITJGH.js +465 -0
- package/dist/chunk-OCRA44AZ.js +108 -0
- package/dist/chunk-P3KJR66H.js +117 -0
- package/dist/chunk-PEK6JH65.js +432 -0
- package/dist/chunk-PJ6FFKEX.js +77 -0
- package/dist/chunk-PLUBBZYR.js +800 -0
- package/dist/chunk-PNKVD2UK.js +26 -0
- package/dist/chunk-PSQZURHO.js +229 -0
- package/dist/chunk-SGL6ISBJ.js +1061 -0
- package/dist/chunk-SJABZZT5.js +97 -0
- package/dist/chunk-TD3P3K32.js +1199 -0
- package/dist/chunk-TMDZJJKV.js +288 -0
- package/dist/chunk-UNHVZB5G.js +411 -0
- package/dist/chunk-VAFTWSTE.js +1061 -0
- package/dist/chunk-VNFXFQBB.js +217 -0
- package/dist/chunk-X3GVFKSJ.js +1205 -0
- package/dist/chunk-XZ3S56RQ.js +1061 -0
- package/dist/chunk-Y72C7F6O.js +148 -0
- package/dist/chunk-YLICP577.js +1205 -0
- package/dist/chunk-YX6AXLVK.js +159 -0
- package/dist/chunk-ZCQYHTNU.js +146 -0
- package/dist/cli.d.ts +1 -0
- package/dist/cli.js +1160 -0
- package/dist/cloud-crystal.js +6 -0
- package/dist/core.d.ts +252 -0
- package/dist/core.js +12 -0
- package/dist/crypto.d.ts +20 -0
- package/dist/crypto.js +27 -0
- package/dist/crystal-capture.sh +29 -0
- package/dist/crystal-serve.d.ts +4 -0
- package/dist/crystal-serve.js +252 -0
- package/dist/dev-update-SZ2Z4WCQ.js +6 -0
- package/dist/discover.d.ts +30 -0
- package/dist/discover.js +177 -0
- package/dist/doctor.d.ts +9 -0
- package/dist/doctor.js +342 -0
- package/dist/dream-weaver.d.ts +8 -0
- package/dist/dream-weaver.js +56 -0
- package/dist/file-sync.d.ts +48 -0
- package/dist/file-sync.js +18 -0
- package/dist/installer.d.ts +61 -0
- package/dist/installer.js +772 -0
- package/dist/ldm-backup.sh +116 -0
- package/dist/ldm.d.ts +50 -0
- package/dist/ldm.js +32 -0
- package/dist/llm-XXLYPIOF.js +16 -0
- package/dist/mcp-server.d.ts +1 -0
- package/dist/mcp-server.js +277 -0
- package/dist/migrate.d.ts +1 -0
- package/dist/migrate.js +89 -0
- package/dist/mirror-sync.d.ts +1 -0
- package/dist/mirror-sync.js +159 -0
- package/dist/mlx-setup-XKU67WCT.js +289 -0
- package/dist/oc-backfill.d.ts +19 -0
- package/dist/oc-backfill.js +74 -0
- package/dist/openclaw.d.ts +5 -0
- package/dist/openclaw.js +434 -0
- package/dist/pair.d.ts +4 -0
- package/dist/pair.js +75 -0
- package/dist/poller.d.ts +1 -0
- package/dist/poller.js +634 -0
- package/dist/role.d.ts +24 -0
- package/dist/role.js +13 -0
- package/dist/search-pipeline-4K4OJSSS.js +255 -0
- package/dist/search-pipeline-4PRS6LI7.js +280 -0
- package/dist/search-pipeline-7UJMXPLO.js +280 -0
- package/dist/search-pipeline-CBV25NX7.js +99 -0
- package/dist/search-pipeline-DQTRLGBH.js +74 -0
- package/dist/search-pipeline-HNG37REH.js +282 -0
- package/dist/search-pipeline-IZFPLBUB.js +280 -0
- package/dist/search-pipeline-MID6F26Q.js +73 -0
- package/dist/search-pipeline-N52JZFNN.js +282 -0
- package/dist/search-pipeline-OPB2PRQQ.js +280 -0
- package/dist/search-pipeline-VXTE5HAD.js +262 -0
- package/dist/search-pipeline-XHFKADRG.js +73 -0
- package/dist/staging.d.ts +29 -0
- package/dist/staging.js +21 -0
- package/dist/summarize.d.ts +19 -0
- package/dist/summarize.js +10 -0
- package/dist/worker-demo.js +186 -0
- package/dist/worker-mcp.js +404 -0
- package/dist/worker.js +137 -0
- package/package.json +15 -1
- package/.env.example +0 -20
- package/.publish-skill.json +0 -1
- package/CHANGELOG.md +0 -1372
- package/README-ENTERPRISE.md +0 -226
- package/RELAY.md +0 -199
- package/wrangler-demo.toml +0 -8
- package/wrangler-mcp.toml +0 -24
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
// src/ldm.ts
|
|
2
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync, copyFileSync, chmodSync } from "fs";
|
|
3
|
+
import { join, dirname } from "path";
|
|
4
|
+
import { execSync } from "child_process";
|
|
5
|
+
import { fileURLToPath } from "url";
|
|
6
|
+
var HOME = process.env.HOME || "";
|
|
7
|
+
var LDM_ROOT = join(HOME, ".ldm");
|
|
8
|
+
function getAgentId() {
|
|
9
|
+
return process.env.CRYSTAL_AGENT_ID || "cc-mini";
|
|
10
|
+
}
|
|
11
|
+
function ldmPaths(agentId) {
|
|
12
|
+
const id = agentId || getAgentId();
|
|
13
|
+
const agentRoot = join(LDM_ROOT, "agents", id);
|
|
14
|
+
return {
|
|
15
|
+
root: LDM_ROOT,
|
|
16
|
+
bin: join(LDM_ROOT, "bin"),
|
|
17
|
+
secrets: join(LDM_ROOT, "secrets"),
|
|
18
|
+
state: join(LDM_ROOT, "state"),
|
|
19
|
+
config: join(LDM_ROOT, "config.json"),
|
|
20
|
+
crystalDb: join(LDM_ROOT, "memory", "crystal.db"),
|
|
21
|
+
crystalLance: join(LDM_ROOT, "memory", "lance"),
|
|
22
|
+
agentRoot,
|
|
23
|
+
transcripts: join(agentRoot, "memory", "transcripts"),
|
|
24
|
+
sessions: join(agentRoot, "memory", "sessions"),
|
|
25
|
+
daily: join(agentRoot, "memory", "daily"),
|
|
26
|
+
journals: join(agentRoot, "memory", "journals")
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
function loadConfig() {
|
|
30
|
+
const configPath = join(LDM_ROOT, "config.json");
|
|
31
|
+
try {
|
|
32
|
+
if (existsSync(configPath)) {
|
|
33
|
+
return JSON.parse(readFileSync(configPath, "utf-8"));
|
|
34
|
+
}
|
|
35
|
+
} catch {
|
|
36
|
+
}
|
|
37
|
+
return null;
|
|
38
|
+
}
|
|
39
|
+
function saveConfig(config) {
|
|
40
|
+
const configPath = join(LDM_ROOT, "config.json");
|
|
41
|
+
writeFileSync(configPath, JSON.stringify(config, null, 2) + "\n");
|
|
42
|
+
}
|
|
43
|
+
function scaffoldLdm(agentId) {
|
|
44
|
+
const paths = ldmPaths(agentId);
|
|
45
|
+
mkdirSync(join(paths.root, "memory"), { recursive: true });
|
|
46
|
+
mkdirSync(paths.crystalLance, { recursive: true });
|
|
47
|
+
mkdirSync(paths.bin, { recursive: true });
|
|
48
|
+
mkdirSync(paths.secrets, { recursive: true, mode: 448 });
|
|
49
|
+
mkdirSync(paths.state, { recursive: true });
|
|
50
|
+
mkdirSync(paths.transcripts, { recursive: true });
|
|
51
|
+
mkdirSync(paths.sessions, { recursive: true });
|
|
52
|
+
mkdirSync(paths.daily, { recursive: true });
|
|
53
|
+
mkdirSync(paths.journals, { recursive: true });
|
|
54
|
+
const id = agentId || getAgentId();
|
|
55
|
+
let config = loadConfig();
|
|
56
|
+
if (!config) {
|
|
57
|
+
config = {
|
|
58
|
+
version: "1.0.0",
|
|
59
|
+
agents: [id],
|
|
60
|
+
createdAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
61
|
+
updatedAt: (/* @__PURE__ */ new Date()).toISOString()
|
|
62
|
+
};
|
|
63
|
+
} else {
|
|
64
|
+
if (!config.agents.includes(id)) {
|
|
65
|
+
config.agents.push(id);
|
|
66
|
+
}
|
|
67
|
+
config.updatedAt = (/* @__PURE__ */ new Date()).toISOString();
|
|
68
|
+
}
|
|
69
|
+
saveConfig(config);
|
|
70
|
+
return paths;
|
|
71
|
+
}
|
|
72
|
+
function deployCaptureScript() {
|
|
73
|
+
const paths = ldmPaths();
|
|
74
|
+
mkdirSync(paths.bin, { recursive: true });
|
|
75
|
+
const thisDir = dirname(fileURLToPath(import.meta.url));
|
|
76
|
+
let scriptSrc = join(thisDir, "crystal-capture.sh");
|
|
77
|
+
if (!existsSync(scriptSrc)) {
|
|
78
|
+
scriptSrc = join(thisDir, "..", "scripts", "crystal-capture.sh");
|
|
79
|
+
}
|
|
80
|
+
const scriptDest = join(paths.bin, "crystal-capture.sh");
|
|
81
|
+
if (!existsSync(scriptSrc)) {
|
|
82
|
+
throw new Error(`crystal-capture.sh not found at ${scriptSrc}`);
|
|
83
|
+
}
|
|
84
|
+
copyFileSync(scriptSrc, scriptDest);
|
|
85
|
+
chmodSync(scriptDest, 493);
|
|
86
|
+
return scriptDest;
|
|
87
|
+
}
|
|
88
|
+
var CRON_TAG = "# crystal-capture";
|
|
89
|
+
var CRON_ENTRY = "* * * * * ~/.ldm/bin/crystal-capture.sh >> /tmp/ldm-dev-tools/crystal-capture.log 2>&1";
|
|
90
|
+
function isCrystalCaptureLine(line) {
|
|
91
|
+
return line === CRON_TAG || line.includes("crystal-capture.sh") && line.startsWith("*");
|
|
92
|
+
}
|
|
93
|
+
function installCron() {
|
|
94
|
+
mkdirSync("/tmp/ldm-dev-tools", { recursive: true });
|
|
95
|
+
let existing = "";
|
|
96
|
+
try {
|
|
97
|
+
existing = execSync("crontab -l 2>/dev/null", { encoding: "utf8" });
|
|
98
|
+
} catch {
|
|
99
|
+
}
|
|
100
|
+
const lines = existing.split("\n").filter((line) => !isCrystalCaptureLine(line));
|
|
101
|
+
lines.push(CRON_TAG);
|
|
102
|
+
lines.push(CRON_ENTRY);
|
|
103
|
+
const newCrontab = lines.filter((l, i, arr) => !(l === "" && i === arr.length - 1)).join("\n") + "\n";
|
|
104
|
+
execSync("crontab -", { input: newCrontab, encoding: "utf8" });
|
|
105
|
+
}
|
|
106
|
+
function removeCron() {
|
|
107
|
+
let existing = "";
|
|
108
|
+
try {
|
|
109
|
+
existing = execSync("crontab -l 2>/dev/null", { encoding: "utf8" });
|
|
110
|
+
} catch {
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
const lines = existing.split("\n").filter((line) => !isCrystalCaptureLine(line));
|
|
114
|
+
const newCrontab = lines.join("\n");
|
|
115
|
+
execSync("crontab -", { input: newCrontab, encoding: "utf8" });
|
|
116
|
+
}
|
|
117
|
+
var LEGACY_OC_DIR = join(HOME, ".openclaw");
|
|
118
|
+
function resolveStatePath(filename) {
|
|
119
|
+
const paths = ldmPaths();
|
|
120
|
+
const ldmPath = join(paths.state, filename);
|
|
121
|
+
if (existsSync(ldmPath)) return ldmPath;
|
|
122
|
+
const legacyPath = join(LEGACY_OC_DIR, "memory", filename);
|
|
123
|
+
if (existsSync(legacyPath)) return legacyPath;
|
|
124
|
+
return ldmPath;
|
|
125
|
+
}
|
|
126
|
+
function stateWritePath(filename) {
|
|
127
|
+
const paths = ldmPaths();
|
|
128
|
+
const dir = paths.state;
|
|
129
|
+
if (!existsSync(dir)) mkdirSync(dir, { recursive: true });
|
|
130
|
+
return join(dir, filename);
|
|
131
|
+
}
|
|
132
|
+
function resolveSecretPath(filename) {
|
|
133
|
+
const paths = ldmPaths();
|
|
134
|
+
const ldmPath = join(paths.secrets, filename);
|
|
135
|
+
if (existsSync(ldmPath)) return ldmPath;
|
|
136
|
+
const legacyPath = join(LEGACY_OC_DIR, "secrets", filename);
|
|
137
|
+
if (existsSync(legacyPath)) return legacyPath;
|
|
138
|
+
return ldmPath;
|
|
139
|
+
}
|
|
140
|
+
function ensureLdm(agentId) {
|
|
141
|
+
const paths = ldmPaths(agentId);
|
|
142
|
+
if (existsSync(paths.transcripts) && existsSync(paths.config)) {
|
|
143
|
+
return paths;
|
|
144
|
+
}
|
|
145
|
+
return scaffoldLdm(agentId);
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
export {
|
|
149
|
+
getAgentId,
|
|
150
|
+
ldmPaths,
|
|
151
|
+
scaffoldLdm,
|
|
152
|
+
deployCaptureScript,
|
|
153
|
+
installCron,
|
|
154
|
+
removeCron,
|
|
155
|
+
resolveStatePath,
|
|
156
|
+
stateWritePath,
|
|
157
|
+
resolveSecretPath,
|
|
158
|
+
ensureLdm
|
|
159
|
+
};
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import {
|
|
2
|
+
ensureLdm,
|
|
3
|
+
ldmPaths
|
|
4
|
+
} from "./chunk-EXEZZADG.js";
|
|
5
|
+
|
|
6
|
+
// src/staging.ts
|
|
7
|
+
import {
|
|
8
|
+
existsSync,
|
|
9
|
+
mkdirSync,
|
|
10
|
+
readdirSync,
|
|
11
|
+
renameSync,
|
|
12
|
+
unlinkSync,
|
|
13
|
+
writeFileSync
|
|
14
|
+
} from "fs";
|
|
15
|
+
import { join } from "path";
|
|
16
|
+
import { execSync } from "child_process";
|
|
17
|
+
var HOME = process.env.HOME || "";
|
|
18
|
+
var STAGING_ROOT = join(HOME, ".ldm", "staging");
|
|
19
|
+
function stagingPaths(agentId) {
|
|
20
|
+
const root = join(STAGING_ROOT, agentId);
|
|
21
|
+
return {
|
|
22
|
+
root,
|
|
23
|
+
transcripts: join(root, "transcripts"),
|
|
24
|
+
readyFile: join(root, "READY")
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
function ensureStaging(agentId) {
|
|
28
|
+
const paths = stagingPaths(agentId);
|
|
29
|
+
mkdirSync(paths.transcripts, { recursive: true });
|
|
30
|
+
return paths;
|
|
31
|
+
}
|
|
32
|
+
function markReady(agentId) {
|
|
33
|
+
const paths = stagingPaths(agentId);
|
|
34
|
+
writeFileSync(paths.readyFile, JSON.stringify({
|
|
35
|
+
markedAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
36
|
+
agentId
|
|
37
|
+
}));
|
|
38
|
+
}
|
|
39
|
+
function isNewAgent(agentId) {
|
|
40
|
+
const paths = ldmPaths(agentId);
|
|
41
|
+
return !existsSync(paths.agentRoot);
|
|
42
|
+
}
|
|
43
|
+
function hasStagedData(agentId) {
|
|
44
|
+
const paths = stagingPaths(agentId);
|
|
45
|
+
return existsSync(paths.readyFile);
|
|
46
|
+
}
|
|
47
|
+
function listStagedAgents() {
|
|
48
|
+
if (!existsSync(STAGING_ROOT)) return [];
|
|
49
|
+
const agents = [];
|
|
50
|
+
for (const entry of readdirSync(STAGING_ROOT, { withFileTypes: true })) {
|
|
51
|
+
if (!entry.isDirectory()) continue;
|
|
52
|
+
if (existsSync(join(STAGING_ROOT, entry.name, "READY"))) {
|
|
53
|
+
agents.push(entry.name);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return agents;
|
|
57
|
+
}
|
|
58
|
+
async function processStagedAgent(agentId) {
|
|
59
|
+
const startTime = Date.now();
|
|
60
|
+
const staging = stagingPaths(agentId);
|
|
61
|
+
if (!existsSync(staging.readyFile)) {
|
|
62
|
+
throw new Error(`No READY file for agent ${agentId}`);
|
|
63
|
+
}
|
|
64
|
+
const agentPaths = ensureLdm(agentId);
|
|
65
|
+
const stagedFiles = existsSync(staging.transcripts) ? readdirSync(staging.transcripts).filter((f) => f.endsWith(".jsonl")) : [];
|
|
66
|
+
if (stagedFiles.length === 0) {
|
|
67
|
+
unlinkSync(staging.readyFile);
|
|
68
|
+
return {
|
|
69
|
+
agentId,
|
|
70
|
+
transcriptsProcessed: 0,
|
|
71
|
+
backfillChunks: 0,
|
|
72
|
+
dreamWeaverRan: false,
|
|
73
|
+
durationMs: Date.now() - startTime
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
for (const file of stagedFiles) {
|
|
77
|
+
const src = join(staging.transcripts, file);
|
|
78
|
+
const dest = join(agentPaths.transcripts, file);
|
|
79
|
+
try {
|
|
80
|
+
renameSync(src, dest);
|
|
81
|
+
} catch {
|
|
82
|
+
const { copyFileSync } = await import("fs");
|
|
83
|
+
copyFileSync(src, dest);
|
|
84
|
+
unlinkSync(src);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
let backfillChunks = 0;
|
|
88
|
+
let dreamWeaverRan = false;
|
|
89
|
+
try {
|
|
90
|
+
const output = execSync(
|
|
91
|
+
`crystal backfill --agent ${agentId}`,
|
|
92
|
+
{ encoding: "utf-8", timeout: 6e5 }
|
|
93
|
+
);
|
|
94
|
+
const match = output.match(/(\d+) chunks embedded/);
|
|
95
|
+
if (match) backfillChunks = parseInt(match[1], 10);
|
|
96
|
+
} catch (err) {
|
|
97
|
+
process.stderr.write(`[staging] backfill failed for ${agentId}: ${err.message}
|
|
98
|
+
`);
|
|
99
|
+
}
|
|
100
|
+
try {
|
|
101
|
+
execSync(
|
|
102
|
+
`crystal dream-weave --agent ${agentId} --mode full`,
|
|
103
|
+
{ encoding: "utf-8", timeout: 6e5 }
|
|
104
|
+
);
|
|
105
|
+
dreamWeaverRan = true;
|
|
106
|
+
} catch (err) {
|
|
107
|
+
process.stderr.write(`[staging] dream-weave failed for ${agentId}: ${err.message}
|
|
108
|
+
`);
|
|
109
|
+
}
|
|
110
|
+
try {
|
|
111
|
+
unlinkSync(staging.readyFile);
|
|
112
|
+
} catch {
|
|
113
|
+
}
|
|
114
|
+
return {
|
|
115
|
+
agentId,
|
|
116
|
+
transcriptsProcessed: stagedFiles.length,
|
|
117
|
+
backfillChunks,
|
|
118
|
+
dreamWeaverRan,
|
|
119
|
+
durationMs: Date.now() - startTime
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
async function processAllStaged() {
|
|
123
|
+
const agents = listStagedAgents();
|
|
124
|
+
const results = [];
|
|
125
|
+
for (const agentId of agents) {
|
|
126
|
+
try {
|
|
127
|
+
const result = await processStagedAgent(agentId);
|
|
128
|
+
results.push(result);
|
|
129
|
+
} catch (err) {
|
|
130
|
+
process.stderr.write(`[staging] failed to process ${agentId}: ${err.message}
|
|
131
|
+
`);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
return results;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
export {
|
|
138
|
+
stagingPaths,
|
|
139
|
+
ensureStaging,
|
|
140
|
+
markReady,
|
|
141
|
+
isNewAgent,
|
|
142
|
+
hasStagedData,
|
|
143
|
+
listStagedAgents,
|
|
144
|
+
processStagedAgent,
|
|
145
|
+
processAllStaged
|
|
146
|
+
};
|
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
#!/usr/bin/env node
|