@remnic/core 9.3.691 → 9.3.692
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/access-boundary.d.ts +5 -4
- package/dist/access-boundary.js +11 -11
- package/dist/access-cli.js +18 -16
- package/dist/access-cli.js.map +1 -1
- package/dist/access-http.d.ts +5 -4
- package/dist/access-http.js +15 -15
- package/dist/access-mcp.d.ts +5 -4
- package/dist/access-mcp.js +14 -14
- package/dist/access-operations.d.ts +5 -4
- package/dist/access-operations.js +13 -13
- package/dist/access-schema.js +3 -3
- package/dist/{access-service-CKnFdxH-.d.ts → access-service-DvApf9LZ.d.ts} +1 -1
- package/dist/access-service.d.ts +5 -4
- package/dist/access-service.js +10 -10
- package/dist/access-surface-catalog.d.ts +5 -4
- package/dist/bootstrap.d.ts +4 -3
- package/dist/{chunk-VH2DHBHG.js → chunk-2EN5WZQB.js} +2 -2
- package/dist/{chunk-QNG35H27.js → chunk-4IQNAOP3.js} +5 -141
- package/dist/chunk-4IQNAOP3.js.map +1 -0
- package/dist/chunk-6C2BMUZA.js +444 -0
- package/dist/chunk-6C2BMUZA.js.map +1 -0
- package/dist/{chunk-UUMYB3FR.js → chunk-6ZNIUGXB.js} +10 -10
- package/dist/{chunk-TSGREOYY.js → chunk-DO7MDZMU.js} +4 -4
- package/dist/{chunk-IPJD7WJH.js → chunk-E6BOD3UJ.js} +2 -2
- package/dist/{chunk-D3DNGQNQ.js → chunk-FM7KLRKN.js} +2 -2
- package/dist/chunk-HXNMDPHN.js +149 -0
- package/dist/chunk-HXNMDPHN.js.map +1 -0
- package/dist/{chunk-IPLYGWQF.js → chunk-KQAFEZQX.js} +5 -5
- package/dist/{chunk-OOO7ZKOD.js → chunk-KYH53EFD.js} +3 -3
- package/dist/{chunk-LQ6JI4VH.js → chunk-LD53WPMU.js} +4 -4
- package/dist/{chunk-7UVDIWLL.js → chunk-NEILAC3H.js} +4 -4
- package/dist/{chunk-K7I24ZO2.js → chunk-O4ZIV62T.js} +20 -20
- package/dist/{chunk-NCRDCTEJ.js → chunk-SEK4XIDN.js} +5 -5
- package/dist/{chunk-5CEJH5ZN.js → chunk-TAPSNIMA.js} +4 -4
- package/dist/{chunk-QLRYXOAD.js → chunk-UDJLF3BO.js} +2 -2
- package/dist/{chunk-KO6OL4I7.js → chunk-V56S3A23.js} +3 -3
- package/dist/{chunk-TJ5IIQIR.js → chunk-W4MICQIZ.js} +39 -368
- package/dist/chunk-W4MICQIZ.js.map +1 -0
- package/dist/{chunk-WRFKZEO6.js → chunk-YQGHW5ML.js} +4 -4
- package/dist/{cli-CrSW_KRq.d.ts → cli-BjsY9Le7.d.ts} +2 -2
- package/dist/cli.d.ts +6 -5
- package/dist/cli.js +25 -24
- package/dist/contradiction/index.js +4 -4
- package/dist/explicit-capture.d.ts +4 -3
- package/dist/index.d.ts +6 -5
- package/dist/index.js +32 -30
- package/dist/index.js.map +1 -1
- package/dist/mcp-memory-inspector-app.d.ts +5 -4
- package/dist/namespaces/migrate.js +8 -8
- package/dist/namespaces/search.js +7 -7
- package/dist/operator-toolkit.js +11 -10
- package/dist/orchestration/maintenance.d.ts +112 -0
- package/dist/orchestration/maintenance.js +39 -0
- package/dist/orchestration/maintenance.js.map +1 -0
- package/dist/{orchestrator-DvswGK76.d.ts → orchestrator-CNJCYjZ1.d.ts} +9 -33
- package/dist/orchestrator.d.ts +2 -1
- package/dist/orchestrator.js +12 -10
- package/dist/search/factory.js +6 -6
- package/dist/search/index.js +11 -11
- package/dist/search/lancedb-backend.js +2 -2
- package/dist/search/meilisearch-backend.js +2 -2
- package/dist/search/orama-backend.js +2 -2
- package/dist/transfer/autodetect.js +1 -1
- package/dist/transfer/backup.js +1 -1
- package/dist/transfer/capsule-export.js +2 -2
- package/package.json +12 -2
- package/src/orchestration/maintenance.test.ts +738 -0
- package/src/orchestration/maintenance.ts +557 -0
- package/src/orchestrator-flush.test.ts +0 -599
- package/src/orchestrator.ts +33 -419
- package/dist/chunk-QNG35H27.js.map +0 -1
- package/dist/chunk-TJ5IIQIR.js.map +0 -1
- /package/dist/{chunk-VH2DHBHG.js.map → chunk-2EN5WZQB.js.map} +0 -0
- /package/dist/{chunk-UUMYB3FR.js.map → chunk-6ZNIUGXB.js.map} +0 -0
- /package/dist/{chunk-TSGREOYY.js.map → chunk-DO7MDZMU.js.map} +0 -0
- /package/dist/{chunk-IPJD7WJH.js.map → chunk-E6BOD3UJ.js.map} +0 -0
- /package/dist/{chunk-D3DNGQNQ.js.map → chunk-FM7KLRKN.js.map} +0 -0
- /package/dist/{chunk-IPLYGWQF.js.map → chunk-KQAFEZQX.js.map} +0 -0
- /package/dist/{chunk-OOO7ZKOD.js.map → chunk-KYH53EFD.js.map} +0 -0
- /package/dist/{chunk-LQ6JI4VH.js.map → chunk-LD53WPMU.js.map} +0 -0
- /package/dist/{chunk-7UVDIWLL.js.map → chunk-NEILAC3H.js.map} +0 -0
- /package/dist/{chunk-K7I24ZO2.js.map → chunk-O4ZIV62T.js.map} +0 -0
- /package/dist/{chunk-NCRDCTEJ.js.map → chunk-SEK4XIDN.js.map} +0 -0
- /package/dist/{chunk-5CEJH5ZN.js.map → chunk-TAPSNIMA.js.map} +0 -0
- /package/dist/{chunk-QLRYXOAD.js.map → chunk-UDJLF3BO.js.map} +0 -0
- /package/dist/{chunk-KO6OL4I7.js.map → chunk-V56S3A23.js.map} +0 -0
- /package/dist/{chunk-WRFKZEO6.js.map → chunk-YQGHW5ML.js.map} +0 -0
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import {
|
|
2
|
+
planNamespaceMaintenance,
|
|
3
|
+
readNamespaceMaintenanceLastRanStatuses,
|
|
4
|
+
readNamespaceMaintenanceStatuses,
|
|
5
|
+
runNamespaceMaintenancePlan
|
|
6
|
+
} from "./chunk-4IQNAOP3.js";
|
|
7
|
+
|
|
8
|
+
// src/maintenance/namespace-maintenance-fanout.ts
|
|
9
|
+
var NAMESPACE_MAINTENANCE_JOBS = [
|
|
10
|
+
"qmd",
|
|
11
|
+
"pattern-reinforcement",
|
|
12
|
+
"contradiction-scan",
|
|
13
|
+
"semantic-consolidation",
|
|
14
|
+
"governance",
|
|
15
|
+
"lifecycle",
|
|
16
|
+
"graph-decay",
|
|
17
|
+
"fact-archival",
|
|
18
|
+
"tier-migration"
|
|
19
|
+
];
|
|
20
|
+
async function runNamespaceMaintenanceFanout(options) {
|
|
21
|
+
if (options.enabled === false) {
|
|
22
|
+
return {
|
|
23
|
+
jobName: options.jobName,
|
|
24
|
+
generatedAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
25
|
+
ran: 0,
|
|
26
|
+
skipped: 0,
|
|
27
|
+
failed: 0,
|
|
28
|
+
statuses: []
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
const plan = await planNamespaceMaintenance(options.config, {
|
|
32
|
+
jobName: options.jobName,
|
|
33
|
+
catalog: options.catalog
|
|
34
|
+
});
|
|
35
|
+
return runNamespaceMaintenancePlan(
|
|
36
|
+
options.config,
|
|
37
|
+
plan,
|
|
38
|
+
async (candidate) => {
|
|
39
|
+
return options.runner({
|
|
40
|
+
config: options.config,
|
|
41
|
+
candidate,
|
|
42
|
+
resolveStorage: options.resolveStorage
|
|
43
|
+
});
|
|
44
|
+
},
|
|
45
|
+
options.catalog
|
|
46
|
+
);
|
|
47
|
+
}
|
|
48
|
+
async function summarizeNamespaceMaintenanceHealth(config) {
|
|
49
|
+
const generatedAt = (/* @__PURE__ */ new Date()).toISOString();
|
|
50
|
+
const statuses = await readNamespaceMaintenanceStatuses(config);
|
|
51
|
+
const lastRanStatuses = await readNamespaceMaintenanceLastRanStatuses(config);
|
|
52
|
+
const lastRanByJobNs = /* @__PURE__ */ new Map();
|
|
53
|
+
for (const lr of lastRanStatuses) {
|
|
54
|
+
lastRanByJobNs.set(`${lr.jobName}\0${lr.namespace}`, lr);
|
|
55
|
+
}
|
|
56
|
+
const byJob = /* @__PURE__ */ new Map();
|
|
57
|
+
for (const status of statuses) {
|
|
58
|
+
const bucket = byJob.get(status.jobName);
|
|
59
|
+
if (bucket) {
|
|
60
|
+
bucket.push(status);
|
|
61
|
+
} else {
|
|
62
|
+
byJob.set(status.jobName, [status]);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
const knownJobs = new Set(NAMESPACE_MAINTENANCE_JOBS);
|
|
66
|
+
for (const jobName of byJob.keys()) {
|
|
67
|
+
knownJobs.add(jobName);
|
|
68
|
+
}
|
|
69
|
+
const jobs = [];
|
|
70
|
+
let totalRan = 0;
|
|
71
|
+
let totalSkipped = 0;
|
|
72
|
+
let totalFailed = 0;
|
|
73
|
+
for (const jobName of [...knownJobs].sort()) {
|
|
74
|
+
const jobStatuses = byJob.get(jobName) ?? [];
|
|
75
|
+
const ran = jobStatuses.filter((s) => s.state === "ran").length;
|
|
76
|
+
const skipped = jobStatuses.filter((s) => s.state === "skipped").length;
|
|
77
|
+
const failed = jobStatuses.filter((s) => s.state === "failed").length;
|
|
78
|
+
const candidates = [];
|
|
79
|
+
for (const st of jobStatuses) {
|
|
80
|
+
if (typeof st.completedAt === "string") candidates.push(st.completedAt);
|
|
81
|
+
const lr = lastRanByJobNs.get(`${jobName}\0${st.namespace}`);
|
|
82
|
+
if (lr && typeof lr.completedAt === "string") candidates.push(lr.completedAt);
|
|
83
|
+
}
|
|
84
|
+
const lastRunAt = candidates.sort().at(-1) ?? null;
|
|
85
|
+
totalRan += ran;
|
|
86
|
+
totalSkipped += skipped;
|
|
87
|
+
totalFailed += failed;
|
|
88
|
+
jobs.push({
|
|
89
|
+
jobName,
|
|
90
|
+
ran,
|
|
91
|
+
skipped,
|
|
92
|
+
failed,
|
|
93
|
+
lastRunAt,
|
|
94
|
+
namespaces: jobStatuses
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
return {
|
|
98
|
+
generatedAt,
|
|
99
|
+
fanoutEnabled: config.maintenanceNamespaceFanoutEnabled !== false,
|
|
100
|
+
namespacesEnabled: config.namespacesEnabled,
|
|
101
|
+
maxNamespacesPerCycle: config.maintenanceMaxNamespacesPerCycle,
|
|
102
|
+
jobs,
|
|
103
|
+
totalRan,
|
|
104
|
+
totalSkipped,
|
|
105
|
+
totalFailed
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
function formatNamespaceMaintenanceHealthText(summary) {
|
|
109
|
+
const lines = [
|
|
110
|
+
"=== Namespace Maintenance ===",
|
|
111
|
+
"",
|
|
112
|
+
` fanout: ${summary.fanoutEnabled ? "enabled" : "disabled"}`,
|
|
113
|
+
` namespaces: ${summary.namespacesEnabled ? "enabled" : "disabled"}`,
|
|
114
|
+
` max/cycle: ${summary.maxNamespacesPerCycle}`,
|
|
115
|
+
` total ran: ${summary.totalRan}`,
|
|
116
|
+
` total skipped: ${summary.totalSkipped}`,
|
|
117
|
+
` total failed: ${summary.totalFailed}`,
|
|
118
|
+
""
|
|
119
|
+
];
|
|
120
|
+
if (summary.totalRan === 0 && summary.totalSkipped === 0 && summary.totalFailed === 0) {
|
|
121
|
+
lines.push(" (no maintenance status recorded yet)");
|
|
122
|
+
return lines.join("\n");
|
|
123
|
+
}
|
|
124
|
+
lines.push(" Per-job breakdown:");
|
|
125
|
+
for (const job of summary.jobs) {
|
|
126
|
+
const parts = [
|
|
127
|
+
`ran=${job.ran}`,
|
|
128
|
+
`skipped=${job.skipped}`,
|
|
129
|
+
`failed=${job.failed}`
|
|
130
|
+
];
|
|
131
|
+
if (job.lastRunAt) {
|
|
132
|
+
parts.push(`last=${job.lastRunAt}`);
|
|
133
|
+
}
|
|
134
|
+
lines.push(` ${job.jobName}: ${parts.join(", ")}`);
|
|
135
|
+
const failedNs = job.namespaces.filter((n) => n.state === "failed");
|
|
136
|
+
for (const ns of failedNs) {
|
|
137
|
+
const detail = ns.error ? `: ${ns.error}` : "";
|
|
138
|
+
lines.push(` ! ${ns.namespace} failed (reason=${ns.reason ?? "unknown"})${detail}`);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
return lines.join("\n");
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
export {
|
|
145
|
+
runNamespaceMaintenanceFanout,
|
|
146
|
+
summarizeNamespaceMaintenanceHealth,
|
|
147
|
+
formatNamespaceMaintenanceHealthText
|
|
148
|
+
};
|
|
149
|
+
//# sourceMappingURL=chunk-HXNMDPHN.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/maintenance/namespace-maintenance-fanout.ts"],"sourcesContent":["/**\n * Namespace maintenance fanout coordinator (issue #1500).\n *\n * Builds on the namespace-aware maintenance planner (#1499 / #1517) to fan out\n * the REMAINING background maintenance jobs — dreams, pattern reinforcement,\n * governance/lifecycle, contradiction scans, semantic/causal consolidation,\n * graph decay, fact archival, tier migration — across all maintained\n * namespaces.\n *\n * The planner (`namespace-planner.ts`) already handles namespace discovery\n * (configured + catalog), per-kind gating, cycle budgeting, per-job+namespace\n * locking, status recording, and catalog maintenance timestamps. QMD\n * maintenance was wired through it in #1517. This module standardizes the\n * per-job adapter pattern so every other maintenance job can be fanned out\n * with one call, and aggregates per-namespace health for doctor/dashboard.\n *\n * Design contract (issue #1500 compatibility requirements):\n * - Existing direct `runJob({ namespace })` calls continue to work unchanged.\n * - Namespaces disabled: fanout is a no-op (the planner returns only the\n * default namespace; jobs run exactly as before).\n * - `maintenanceNamespaceFanoutEnabled: false`: fanout is a no-op.\n * - A failure in one namespace must not abort other namespaces (the planner\n * already isolates per-namespace failures).\n * - Per-namespace locks prevent duplicate concurrent runs (planner-provided).\n */\n\nimport type { NamespaceCatalog } from \"../namespaces/catalog.js\";\nimport type { PluginConfig } from \"../types.js\";\nimport {\n planNamespaceMaintenance,\n readNamespaceMaintenanceLastRanStatuses,\n readNamespaceMaintenanceStatuses,\n runNamespaceMaintenancePlan,\n type NamespaceMaintenanceCandidate,\n type NamespaceMaintenanceRunStatus,\n type NamespaceMaintenanceSummary,\n} from \"./namespace-planner.js\";\n\n/**\n * Standard maintenance job names fanned out across namespaces.\n *\n * These strings are used as the `jobName` key in:\n * - per-namespace status files (`state/namespace-maintenance-status/<job>/...`)\n * - catalog `lastMaintenanceAt[jobName]` timestamps\n * - per-job+namespace lock files (`state/maintenance-locks/<job>/...`)\n *\n * Keeping them centralized ensures the doctor, CLI, and dashboard all report\n * against the same keys.\n */\nexport const NAMESPACE_MAINTENANCE_JOBS = [\n \"qmd\",\n \"pattern-reinforcement\",\n \"contradiction-scan\",\n \"semantic-consolidation\",\n \"governance\",\n \"lifecycle\",\n \"graph-decay\",\n \"fact-archival\",\n \"tier-migration\",\n] as const;\n\nexport type NamespaceMaintenanceStandardJob =\n (typeof NAMESPACE_MAINTENANCE_JOBS)[number];\n\n/**\n * Context passed to a fanout job runner. The runner receives the per-namespace\n * candidate (namespace name, kind, storage dir) and a storage resolver that\n * the orchestrator wires to `storageRouter.storageFor(namespace)`.\n *\n * The storage resolver is intentionally typed as `unknown` here so this module\n * does not depend on the `StorageManager` class — the orchestrator provides the\n * typed resolver. This keeps the fanout module free of orchestrator/storage\n * imports and unit-testable with a stub.\n */\nexport interface NamespaceMaintenanceFanoutRunnerContext {\n config: PluginConfig;\n candidate: NamespaceMaintenanceCandidate;\n resolveStorage: (namespace: string) => Promise<unknown>;\n}\n\n/**\n * Result returned by a fanout job runner. `itemCount` is optional and\n * domain-specific (e.g. memories scanned, edges decayed, embeddings updated).\n *\n * `skipped`/`skipReason`: when a runner performs no work for a namespace\n * (e.g. the job's own cadence gate throttled it), set `skipped: true`. The\n * planner records the namespace as `state: \"skipped\"` and does NOT touch\n * the catalog's `lastMaintenanceAt`, so a throttled namespace is not\n * falsely reported as maintained.\n */\nexport interface NamespaceMaintenanceFanoutRunnerResult {\n itemCount?: number;\n skipped?: boolean;\n skipReason?: string;\n}\n\nexport type NamespaceMaintenanceFanoutRunner = (\n ctx: NamespaceMaintenanceFanoutRunnerContext,\n) => Promise<NamespaceMaintenanceFanoutRunnerResult | undefined>;\n\nexport interface RunNamespaceMaintenanceFanoutOptions {\n config: PluginConfig;\n catalog?: NamespaceCatalog;\n jobName: string;\n runner: NamespaceMaintenanceFanoutRunner;\n resolveStorage: (namespace: string) => Promise<unknown>;\n /**\n * When `false`, skip fanout entirely and return a zero-summary without\n * touching the planner or locks. This lets callers gate fanout on\n * per-job config (e.g. `semanticConsolidationEnabled`) without repeating\n * the namespace-discovery logic.\n */\n enabled?: boolean;\n}\n\n/**\n * Fan out a single maintenance job across all maintained namespaces.\n *\n * This is the primary entry point for wiring a maintenance job through the\n * namespace-aware planner. It:\n * 1. Plans which namespaces should be maintained (configured + catalog,\n * budgeted, kind-gated).\n * 2. Runs the job per-namespace through `runNamespaceMaintenancePlan`, which\n * acquires per-job+namespace locks, records status files, and touches the\n * catalog's `lastMaintenanceAt`.\n *\n * When namespaces are disabled or fanout is off, the planner returns only the\n * default namespace, so the job runs exactly once against default storage —\n * preserving single-user behavior.\n */\nexport async function runNamespaceMaintenanceFanout(\n options: RunNamespaceMaintenanceFanoutOptions,\n): Promise<NamespaceMaintenanceSummary> {\n if (options.enabled === false) {\n return {\n jobName: options.jobName,\n generatedAt: new Date().toISOString(),\n ran: 0,\n skipped: 0,\n failed: 0,\n statuses: [],\n };\n }\n\n const plan = await planNamespaceMaintenance(options.config, {\n jobName: options.jobName,\n catalog: options.catalog,\n });\n\n return runNamespaceMaintenancePlan(\n options.config,\n plan,\n async (candidate) => {\n return options.runner({\n config: options.config,\n candidate,\n resolveStorage: options.resolveStorage,\n });\n },\n options.catalog,\n );\n}\n\n// ---------------------------------------------------------------------------\n// Health summary for doctor / dashboard / CLI\n// ---------------------------------------------------------------------------\n\nexport interface NamespaceMaintenanceJobHealth {\n jobName: string;\n ran: number;\n skipped: number;\n failed: number;\n lastRunAt: string | null;\n namespaces: NamespaceMaintenanceRunStatus[];\n}\n\nexport interface NamespaceMaintenanceHealthSummary {\n generatedAt: string;\n fanoutEnabled: boolean;\n namespacesEnabled: boolean;\n maxNamespacesPerCycle: number;\n jobs: NamespaceMaintenanceJobHealth[];\n totalRan: number;\n totalSkipped: number;\n totalFailed: number;\n}\n\n/**\n * Read all per-namespace maintenance status files and aggregate them into a\n * health summary suitable for `remnic doctor` and the admin dashboard.\n *\n * This is a pure read operation — it never runs maintenance or acquires locks.\n */\nexport async function summarizeNamespaceMaintenanceHealth(\n config: PluginConfig,\n): Promise<NamespaceMaintenanceHealthSummary> {\n const generatedAt = new Date().toISOString();\n const statuses = await readNamespaceMaintenanceStatuses(config);\n // Merge last-successful-run records so lastRunAt reflects the most recent\n // successful maintenance, not just the latest (possibly skipped/failed)\n // outcome. The latest status file is overwritten on every run; without\n // this merge a namespace that ran then got budget-skipped shows ran=0 /\n // lastRunAt=null (review #1622: preserve last successful run).\n const lastRanStatuses = await readNamespaceMaintenanceLastRanStatuses(config);\n const lastRanByJobNs = new Map<string, NamespaceMaintenanceRunStatus>();\n for (const lr of lastRanStatuses) {\n lastRanByJobNs.set(`${lr.jobName}\\u0000${lr.namespace}`, lr);\n }\n\n const byJob = new Map<string, NamespaceMaintenanceRunStatus[]>();\n for (const status of statuses) {\n const bucket = byJob.get(status.jobName);\n if (bucket) {\n bucket.push(status);\n } else {\n byJob.set(status.jobName, [status]);\n }\n }\n\n const knownJobs = new Set<string>(NAMESPACE_MAINTENANCE_JOBS);\n // Include any job names seen in status files that are not in the standard\n // set (e.g. custom jobs registered by the orchestrator) so the doctor does\n // not silently hide them.\n for (const jobName of byJob.keys()) {\n knownJobs.add(jobName);\n }\n\n const jobs: NamespaceMaintenanceJobHealth[] = [];\n let totalRan = 0;\n let totalSkipped = 0;\n let totalFailed = 0;\n\n for (const jobName of [...knownJobs].sort()) {\n const jobStatuses = byJob.get(jobName) ?? [];\n const ran = jobStatuses.filter((s) => s.state === \"ran\").length;\n const skipped = jobStatuses.filter((s) => s.state === \"skipped\").length;\n const failed = jobStatuses.filter((s) => s.state === \"failed\").length;\n // Consider BOTH the latest outcome and the last successful run so a\n // namespace that ran then was later skipped still reports lastRunAt.\n const candidates: string[] = [];\n for (const st of jobStatuses) {\n if (typeof st.completedAt === \"string\") candidates.push(st.completedAt);\n const lr = lastRanByJobNs.get(`${jobName}\\u0000${st.namespace}`);\n if (lr && typeof lr.completedAt === \"string\") candidates.push(lr.completedAt);\n }\n const lastRunAt = candidates.sort().at(-1) ?? null;\n\n totalRan += ran;\n totalSkipped += skipped;\n totalFailed += failed;\n\n jobs.push({\n jobName,\n ran,\n skipped,\n failed,\n lastRunAt,\n namespaces: jobStatuses,\n });\n }\n\n return {\n generatedAt,\n fanoutEnabled: config.maintenanceNamespaceFanoutEnabled !== false,\n namespacesEnabled: config.namespacesEnabled,\n maxNamespacesPerCycle: config.maintenanceMaxNamespacesPerCycle,\n jobs,\n totalRan,\n totalSkipped,\n totalFailed,\n };\n}\n\n/**\n * Format the health summary as human-readable text for the CLI.\n */\nexport function formatNamespaceMaintenanceHealthText(\n summary: NamespaceMaintenanceHealthSummary,\n): string {\n const lines: string[] = [\n \"=== Namespace Maintenance ===\",\n \"\",\n ` fanout: ${summary.fanoutEnabled ? \"enabled\" : \"disabled\"}`,\n ` namespaces: ${summary.namespacesEnabled ? \"enabled\" : \"disabled\"}`,\n ` max/cycle: ${summary.maxNamespacesPerCycle}`,\n ` total ran: ${summary.totalRan}`,\n ` total skipped: ${summary.totalSkipped}`,\n ` total failed: ${summary.totalFailed}`,\n \"\",\n ];\n\n if (summary.totalRan === 0 && summary.totalSkipped === 0 && summary.totalFailed === 0) {\n lines.push(\" (no maintenance status recorded yet)\");\n return lines.join(\"\\n\");\n }\n\n lines.push(\" Per-job breakdown:\");\n for (const job of summary.jobs) {\n const parts = [\n `ran=${job.ran}`,\n `skipped=${job.skipped}`,\n `failed=${job.failed}`,\n ];\n if (job.lastRunAt) {\n parts.push(`last=${job.lastRunAt}`);\n }\n lines.push(` ${job.jobName}: ${parts.join(\", \")}`);\n // Surface failed namespaces with their reason/error so operators know\n // WHAT to fix without rerunning with --json (review #1622).\n const failedNs = job.namespaces.filter((n) => n.state === \"failed\");\n for (const ns of failedNs) {\n const detail = ns.error ? `: ${ns.error}` : \"\";\n lines.push(` ! ${ns.namespace} failed (reason=${ns.reason ?? \"unknown\"})${detail}`);\n }\n }\n\n return lines.join(\"\\n\");\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1,7 +1,3 @@
|
|
|
1
|
-
import {
|
|
2
|
-
CAPSULE_SCHEMA_VERSION,
|
|
3
|
-
EXPORT_FORMAT
|
|
4
|
-
} from "./chunk-J4EB7DNW.js";
|
|
5
1
|
import {
|
|
6
2
|
CAPSULE_ID_PATTERN,
|
|
7
3
|
CapsuleBlockSchema,
|
|
@@ -11,6 +7,10 @@ import {
|
|
|
11
7
|
import {
|
|
12
8
|
encryptCapsuleFile
|
|
13
9
|
} from "./chunk-X7Y7WX73.js";
|
|
10
|
+
import {
|
|
11
|
+
CAPSULE_SCHEMA_VERSION,
|
|
12
|
+
EXPORT_FORMAT
|
|
13
|
+
} from "./chunk-J4EB7DNW.js";
|
|
14
14
|
import {
|
|
15
15
|
DEFAULT_TRANSFER_EXCLUDE_DIRS,
|
|
16
16
|
computeTransferOutputRel
|
|
@@ -261,4 +261,4 @@ export {
|
|
|
261
261
|
exportCapsule,
|
|
262
262
|
isValidCapsuleSince
|
|
263
263
|
};
|
|
264
|
-
//# sourceMappingURL=chunk-
|
|
264
|
+
//# sourceMappingURL=chunk-KQAFEZQX.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
listNamespaces
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-FM7KLRKN.js";
|
|
4
4
|
import {
|
|
5
5
|
runConsolidationProvenanceCheck
|
|
6
6
|
} from "./chunk-7XH7VJN4.js";
|
|
@@ -9,7 +9,7 @@ import {
|
|
|
9
9
|
} from "./chunk-YBPYIAA5.js";
|
|
10
10
|
import {
|
|
11
11
|
summarizeNamespaceMaintenanceHealth
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-HXNMDPHN.js";
|
|
13
13
|
import {
|
|
14
14
|
analyzeSessionIntegrity,
|
|
15
15
|
applySessionRepair,
|
|
@@ -1347,4 +1347,4 @@ export {
|
|
|
1347
1347
|
runBenchmarkRecall,
|
|
1348
1348
|
runOperatorRepair
|
|
1349
1349
|
};
|
|
1350
|
-
//# sourceMappingURL=chunk-
|
|
1350
|
+
//# sourceMappingURL=chunk-KYH53EFD.js.map
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
scanMemoryDir
|
|
3
|
-
} from "./chunk-AER6MT24.js";
|
|
4
1
|
import {
|
|
5
2
|
isSearchAborted,
|
|
6
3
|
throwIfSearchAborted
|
|
7
4
|
} from "./chunk-CINZGPSJ.js";
|
|
5
|
+
import {
|
|
6
|
+
scanMemoryDir
|
|
7
|
+
} from "./chunk-AER6MT24.js";
|
|
8
8
|
import {
|
|
9
9
|
resolveEnsureCollectionArgs
|
|
10
10
|
} from "./chunk-YNQ6DFSV.js";
|
|
@@ -605,4 +605,4 @@ export {
|
|
|
605
605
|
resolveOramaCollectionDbFilePath,
|
|
606
606
|
OramaBackend
|
|
607
607
|
};
|
|
608
|
-
//# sourceMappingURL=chunk-
|
|
608
|
+
//# sourceMappingURL=chunk-LD53WPMU.js.map
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import {
|
|
2
2
|
memoryStoreRequestSchema
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-UDJLF3BO.js";
|
|
4
4
|
import {
|
|
5
5
|
defineOperation
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-2EN5WZQB.js";
|
|
7
7
|
import {
|
|
8
8
|
DECISION_SUBCOMMANDS
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-V56S3A23.js";
|
|
10
10
|
|
|
11
11
|
// src/access-operations.ts
|
|
12
12
|
import { z } from "zod";
|
|
@@ -150,4 +150,4 @@ export {
|
|
|
150
150
|
codingArchitectureOperation,
|
|
151
151
|
REGISTERED_OPERATIONS
|
|
152
152
|
};
|
|
153
|
-
//# sourceMappingURL=chunk-
|
|
153
|
+
//# sourceMappingURL=chunk-NEILAC3H.js.map
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
import {
|
|
2
|
+
chatgptReplayNormalizer
|
|
3
|
+
} from "./chunk-MC4FJXPA.js";
|
|
1
4
|
import {
|
|
2
5
|
claudeReplayNormalizer
|
|
3
6
|
} from "./chunk-LQHDIS7L.js";
|
|
@@ -5,8 +8,8 @@ import {
|
|
|
5
8
|
openclawReplayNormalizer
|
|
6
9
|
} from "./chunk-7F7Z6MOS.js";
|
|
7
10
|
import {
|
|
8
|
-
|
|
9
|
-
} from "./chunk-
|
|
11
|
+
importSqlite
|
|
12
|
+
} from "./chunk-AGNBY3VG.js";
|
|
10
13
|
import {
|
|
11
14
|
exportJsonBundle
|
|
12
15
|
} from "./chunk-UP6MOYCB.js";
|
|
@@ -16,9 +19,6 @@ import {
|
|
|
16
19
|
import {
|
|
17
20
|
importMarkdownBundle
|
|
18
21
|
} from "./chunk-HDDRVXX4.js";
|
|
19
|
-
import {
|
|
20
|
-
importSqlite
|
|
21
|
-
} from "./chunk-AGNBY3VG.js";
|
|
22
22
|
import {
|
|
23
23
|
detectImportFormat
|
|
24
24
|
} from "./chunk-OZKVVUJB.js";
|
|
@@ -31,17 +31,17 @@ import {
|
|
|
31
31
|
import {
|
|
32
32
|
exportMarkdownBundle
|
|
33
33
|
} from "./chunk-765K3SAT.js";
|
|
34
|
+
import {
|
|
35
|
+
buildReplayNormalizerRegistry,
|
|
36
|
+
clampBatchSize,
|
|
37
|
+
runReplay
|
|
38
|
+
} from "./chunk-HOJZMQ4J.js";
|
|
34
39
|
import {
|
|
35
40
|
TailscaleHelper
|
|
36
41
|
} from "./chunk-EEC4PCG5.js";
|
|
37
42
|
import {
|
|
38
43
|
WebDavServer
|
|
39
44
|
} from "./chunk-PYIFUBRK.js";
|
|
40
|
-
import {
|
|
41
|
-
buildReplayNormalizerRegistry,
|
|
42
|
-
clampBatchSize,
|
|
43
|
-
runReplay
|
|
44
|
-
} from "./chunk-HOJZMQ4J.js";
|
|
45
45
|
import {
|
|
46
46
|
migrateObservations
|
|
47
47
|
} from "./chunk-D6RIFG4O.js";
|
|
@@ -102,22 +102,22 @@ import {
|
|
|
102
102
|
runOperatorInventory,
|
|
103
103
|
runOperatorRepair,
|
|
104
104
|
runOperatorSetup
|
|
105
|
-
} from "./chunk-
|
|
105
|
+
} from "./chunk-KYH53EFD.js";
|
|
106
106
|
import {
|
|
107
107
|
listNamespaces,
|
|
108
108
|
runNamespaceMigration,
|
|
109
109
|
verifyNamespaces
|
|
110
|
-
} from "./chunk-
|
|
110
|
+
} from "./chunk-FM7KLRKN.js";
|
|
111
111
|
import {
|
|
112
112
|
GraphDashboardServer
|
|
113
113
|
} from "./chunk-YNDLCWXS.js";
|
|
114
|
-
import {
|
|
115
|
-
RoutingRulesStore
|
|
116
|
-
} from "./chunk-WIWPSQYU.js";
|
|
117
114
|
import {
|
|
118
115
|
isReplaySource,
|
|
119
116
|
normalizeReplaySessionKey
|
|
120
117
|
} from "./chunk-2PRQG7PV.js";
|
|
118
|
+
import {
|
|
119
|
+
RoutingRulesStore
|
|
120
|
+
} from "./chunk-WIWPSQYU.js";
|
|
121
121
|
import {
|
|
122
122
|
getUtilityLearningStatus,
|
|
123
123
|
learnUtilityPromotionWeights
|
|
@@ -149,7 +149,7 @@ import {
|
|
|
149
149
|
} from "./chunk-33JBK2XP.js";
|
|
150
150
|
import {
|
|
151
151
|
formatNamespaceMaintenanceHealthText
|
|
152
|
-
} from "./chunk-
|
|
152
|
+
} from "./chunk-HXNMDPHN.js";
|
|
153
153
|
import {
|
|
154
154
|
analyzeSessionIntegrity,
|
|
155
155
|
applySessionRepair,
|
|
@@ -219,16 +219,16 @@ import {
|
|
|
219
219
|
} from "./chunk-OADWQ5CR.js";
|
|
220
220
|
import {
|
|
221
221
|
EngramAccessHttpServer
|
|
222
|
-
} from "./chunk-
|
|
222
|
+
} from "./chunk-SEK4XIDN.js";
|
|
223
223
|
import {
|
|
224
224
|
WearablesInputError
|
|
225
225
|
} from "./chunk-7WV3F5DQ.js";
|
|
226
226
|
import {
|
|
227
227
|
EngramMcpServer
|
|
228
|
-
} from "./chunk-
|
|
228
|
+
} from "./chunk-DO7MDZMU.js";
|
|
229
229
|
import {
|
|
230
230
|
EngramAccessService
|
|
231
|
-
} from "./chunk-
|
|
231
|
+
} from "./chunk-V56S3A23.js";
|
|
232
232
|
import {
|
|
233
233
|
WorkStorage
|
|
234
234
|
} from "./chunk-GDB4J2H3.js";
|
|
@@ -7326,4 +7326,4 @@ export {
|
|
|
7326
7326
|
listMemoryMarkdownFilePaths,
|
|
7327
7327
|
registerCli
|
|
7328
7328
|
};
|
|
7329
|
-
//# sourceMappingURL=chunk-
|
|
7329
|
+
//# sourceMappingURL=chunk-O4ZIV62T.js.map
|
|
@@ -6,16 +6,16 @@ import {
|
|
|
6
6
|
} from "./chunk-7WV3F5DQ.js";
|
|
7
7
|
import {
|
|
8
8
|
EngramMcpServer
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-DO7MDZMU.js";
|
|
10
10
|
import {
|
|
11
11
|
validateRequest
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-UDJLF3BO.js";
|
|
13
13
|
import {
|
|
14
14
|
getOperation
|
|
15
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-2EN5WZQB.js";
|
|
16
16
|
import {
|
|
17
17
|
EngramAccessInputError
|
|
18
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-V56S3A23.js";
|
|
19
19
|
import {
|
|
20
20
|
projectTagProjectId
|
|
21
21
|
} from "./chunk-7MOTEVAA.js";
|
|
@@ -2079,4 +2079,4 @@ function positiveIntQueryParam(value, label) {
|
|
|
2079
2079
|
export {
|
|
2080
2080
|
EngramAccessHttpServer
|
|
2081
2081
|
};
|
|
2082
|
-
//# sourceMappingURL=chunk-
|
|
2082
|
+
//# sourceMappingURL=chunk-SEK4XIDN.js.map
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
scanMemoryDir
|
|
3
|
-
} from "./chunk-AER6MT24.js";
|
|
4
1
|
import {
|
|
5
2
|
isSearchAborted,
|
|
6
3
|
throwIfSearchAborted
|
|
7
4
|
} from "./chunk-CINZGPSJ.js";
|
|
5
|
+
import {
|
|
6
|
+
scanMemoryDir
|
|
7
|
+
} from "./chunk-AER6MT24.js";
|
|
8
8
|
import {
|
|
9
9
|
resolveEnsureCollectionArgs
|
|
10
10
|
} from "./chunk-YNQ6DFSV.js";
|
|
@@ -491,4 +491,4 @@ function isMissingVectorProviderColumnError(err) {
|
|
|
491
491
|
export {
|
|
492
492
|
LanceDbBackend
|
|
493
493
|
};
|
|
494
|
-
//# sourceMappingURL=chunk-
|
|
494
|
+
//# sourceMappingURL=chunk-TAPSNIMA.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
isValidCapsuleSince
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-KQAFEZQX.js";
|
|
4
4
|
import {
|
|
5
5
|
CAPSULE_ID_PATTERN
|
|
6
6
|
} from "./chunk-WEHSQBFR.js";
|
|
@@ -433,4 +433,4 @@ export {
|
|
|
433
433
|
actionConfidenceRequestSchema,
|
|
434
434
|
validateRequest
|
|
435
435
|
};
|
|
436
|
-
//# sourceMappingURL=chunk-
|
|
436
|
+
//# sourceMappingURL=chunk-UDJLF3BO.js.map
|
|
@@ -61,7 +61,7 @@ import {
|
|
|
61
61
|
} from "./chunk-SAC5V6JT.js";
|
|
62
62
|
import {
|
|
63
63
|
namespaceCollectionName
|
|
64
|
-
} from "./chunk-
|
|
64
|
+
} from "./chunk-E6BOD3UJ.js";
|
|
65
65
|
import {
|
|
66
66
|
namespaceIdentityFromToken
|
|
67
67
|
} from "./chunk-ZFXCQPNO.js";
|
|
@@ -131,7 +131,7 @@ import {
|
|
|
131
131
|
} from "./chunk-VF4XKTX3.js";
|
|
132
132
|
import {
|
|
133
133
|
exportCapsule
|
|
134
|
-
} from "./chunk-
|
|
134
|
+
} from "./chunk-KQAFEZQX.js";
|
|
135
135
|
import {
|
|
136
136
|
OFFLINE_SYNC_SNAPSHOT_FORMAT,
|
|
137
137
|
applyOfflineSyncChangeset,
|
|
@@ -6660,4 +6660,4 @@ export {
|
|
|
6660
6660
|
shapeMemorySummary,
|
|
6661
6661
|
EngramAccessService
|
|
6662
6662
|
};
|
|
6663
|
-
//# sourceMappingURL=chunk-
|
|
6663
|
+
//# sourceMappingURL=chunk-V56S3A23.js.map
|