chainlesschain 0.143.0 → 0.152.0
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/package.json +1 -1
- package/src/commands/a2a.js +196 -28
- package/src/commands/activitypub.js +364 -27
- package/src/commands/agent-network.js +217 -0
- package/src/commands/agent.js +587 -103
- package/src/commands/audit.js +206 -0
- package/src/commands/automation.js +201 -0
- package/src/commands/bi.js +355 -27
- package/src/commands/bm25.js +111 -27
- package/src/commands/browse.js +403 -29
- package/src/commands/ccron.js +128 -28
- package/src/commands/chat.js +207 -0
- package/src/commands/codegen.js +207 -0
- package/src/commands/collab.js +211 -0
- package/src/commands/compliance.js +824 -34
- package/src/commands/compt.js +127 -29
- package/src/commands/consol.js +8 -2
- package/src/commands/cowork.js +783 -34
- package/src/commands/crosschain.js +182 -28
- package/src/commands/dao.js +182 -28
- package/src/commands/dbevo.js +227 -0
- package/src/commands/dev.js +207 -0
- package/src/commands/did-v2.js +217 -0
- package/src/commands/did.js +221 -0
- package/src/commands/dlp.js +385 -27
- package/src/commands/economy.js +205 -50
- package/src/commands/evolution.js +203 -50
- package/src/commands/evomap.js +387 -27
- package/src/commands/export.js +213 -0
- package/src/commands/federation.js +209 -0
- package/src/commands/fflag.js +74 -22
- package/src/commands/fusion.js +205 -0
- package/src/commands/git.js +177 -37
- package/src/commands/governance.js +209 -0
- package/src/commands/hardening.js +209 -0
- package/src/commands/hmemory.js +204 -50
- package/src/commands/hook.js +209 -0
- package/src/commands/import.js +209 -0
- package/src/commands/incentive.js +209 -0
- package/src/commands/inference.js +170 -34
- package/src/commands/infra.js +203 -0
- package/src/commands/instinct.js +209 -0
- package/src/commands/ipfs.js +207 -0
- package/src/commands/itbudget.js +149 -33
- package/src/commands/kg.js +206 -0
- package/src/commands/llm.js +217 -0
- package/src/commands/lowcode.js +195 -38
- package/src/commands/marketplace.js +206 -0
- package/src/commands/matrix.js +386 -27
- package/src/commands/mcp.js +217 -0
- package/src/commands/mcpscaf.js +145 -33
- package/src/commands/meminj.js +145 -33
- package/src/commands/memory.js +209 -0
- package/src/commands/multimodal.js +203 -0
- package/src/commands/nlprog.js +225 -0
- package/src/commands/nostr.js +387 -27
- package/src/commands/note.js +205 -0
- package/src/commands/ops.js +219 -0
- package/src/commands/orchestrate.js +217 -0
- package/src/commands/orchgov.js +144 -33
- package/src/commands/org.js +209 -0
- package/src/commands/p2p.js +209 -0
- package/src/commands/pdfp.js +109 -27
- package/src/commands/perception.js +209 -0
- package/src/commands/perf.js +169 -32
- package/src/commands/perm.js +144 -33
- package/src/commands/permmem.js +203 -0
- package/src/commands/pipeline.js +207 -52
- package/src/commands/planmode.js +141 -32
- package/src/commands/plugin-ecosystem.js +209 -0
- package/src/commands/pqc.js +213 -0
- package/src/commands/privacy.js +203 -0
- package/src/commands/promcomp.js +111 -27
- package/src/commands/quantization.js +207 -0
- package/src/commands/rcache.js +205 -0
- package/src/commands/recommend.js +410 -34
- package/src/commands/reputation.js +208 -0
- package/src/commands/runtime.js +205 -0
- package/src/commands/sandbox.js +206 -0
- package/src/commands/scim.js +209 -0
- package/src/commands/seshhook.js +145 -33
- package/src/commands/seshsearch.js +141 -33
- package/src/commands/seshtail.js +144 -33
- package/src/commands/seshu.js +152 -33
- package/src/commands/session.js +209 -0
- package/src/commands/sganal.js +123 -29
- package/src/commands/siem.js +201 -34
- package/src/commands/skill.js +207 -0
- package/src/commands/sla.js +212 -0
- package/src/commands/slotfill.js +146 -33
- package/src/commands/social.js +358 -32
- package/src/commands/sso.js +209 -0
- package/src/commands/stress.js +206 -0
- package/src/commands/svccont.js +145 -33
- package/src/commands/sync.js +209 -0
- package/src/commands/tech.js +209 -0
- package/src/commands/tenant.js +217 -0
- package/src/commands/terraform.js +206 -0
- package/src/commands/tms.js +171 -33
- package/src/commands/tokens.js +209 -0
- package/src/commands/topiccls.js +146 -33
- package/src/commands/trust.js +217 -0
- package/src/commands/uprof.js +141 -32
- package/src/commands/vcheck.js +122 -28
- package/src/commands/wallet.js +209 -0
- package/src/commands/webfetch.js +141 -32
- package/src/commands/workflow.js +203 -0
- package/src/commands/zkp.js +184 -28
- package/src/index.js +180 -0
- package/src/lib/a2a-protocol.js +319 -51
- package/src/lib/activitypub-bridge.js +622 -50
- package/src/lib/agent-economy.js +304 -51
- package/src/lib/agent-network.js +341 -0
- package/src/lib/aiops.js +346 -0
- package/src/lib/app-builder.js +279 -46
- package/src/lib/audit-logger.js +321 -0
- package/src/lib/automation-engine.js +335 -0
- package/src/lib/autonomous-agent.js +284 -48
- package/src/lib/autonomous-developer.js +332 -0
- package/src/lib/bi-engine.js +616 -49
- package/src/lib/bm25-search.js +301 -49
- package/src/lib/browser-automation.js +630 -49
- package/src/lib/chat-core.js +336 -0
- package/src/lib/claude-code-bridge.js +341 -0
- package/src/lib/code-agent.js +339 -0
- package/src/lib/collaboration-governance.js +334 -0
- package/src/lib/community-governance.js +346 -0
- package/src/lib/compliance-framework-reporter.js +305 -51
- package/src/lib/compliance-manager.js +330 -0
- package/src/lib/compression-telemetry.js +301 -49
- package/src/lib/content-recommendation.js +351 -0
- package/src/lib/content-recommender.js +317 -52
- package/src/lib/cowork-cron.js +298 -49
- package/src/lib/cowork-learning.js +333 -0
- package/src/lib/cowork-share.js +338 -0
- package/src/lib/cowork-task-runner.js +308 -51
- package/src/lib/cowork-workflow.js +327 -0
- package/src/lib/cross-chain.js +311 -51
- package/src/lib/dao-governance.js +280 -46
- package/src/lib/dbevo.js +351 -0
- package/src/lib/decentral-infra.js +330 -0
- package/src/lib/did-manager.js +341 -0
- package/src/lib/did-v2-manager.js +341 -0
- package/src/lib/dlp-engine.js +626 -49
- package/src/lib/evolution-system.js +278 -47
- package/src/lib/evomap-governance.js +334 -0
- package/src/lib/evomap-manager.js +280 -46
- package/src/lib/execution-backend.js +294 -48
- package/src/lib/feature-flags.js +294 -49
- package/src/lib/federation-hardening.js +340 -0
- package/src/lib/git-integration.js +285 -47
- package/src/lib/hardening-manager.js +341 -0
- package/src/lib/hierarchical-memory.js +284 -48
- package/src/lib/hook-manager.js +341 -0
- package/src/lib/inference-network.js +308 -51
- package/src/lib/instinct-manager.js +346 -0
- package/src/lib/ipfs-storage.js +334 -0
- package/src/lib/iteration-budget.js +302 -50
- package/src/lib/knowledge-exporter.js +341 -0
- package/src/lib/knowledge-graph.js +333 -0
- package/src/lib/knowledge-importer.js +341 -0
- package/src/lib/llm-providers.js +346 -0
- package/src/lib/matrix-bridge.js +620 -47
- package/src/lib/mcp-registry.js +346 -0
- package/src/lib/mcp-scaffold.js +318 -54
- package/src/lib/memory-injection.js +288 -49
- package/src/lib/memory-manager.js +336 -0
- package/src/lib/multimodal.js +330 -0
- package/src/lib/nl-programming.js +341 -0
- package/src/lib/nostr-bridge.js +622 -49
- package/src/lib/note-versioning.js +339 -0
- package/src/lib/orchestrator.js +293 -48
- package/src/lib/org-manager.js +336 -0
- package/src/lib/p2p-manager.js +341 -0
- package/src/lib/pdf-parser.js +298 -49
- package/src/lib/perception.js +346 -0
- package/src/lib/perf-tuning.js +309 -50
- package/src/lib/permanent-memory.js +327 -0
- package/src/lib/permission-engine.js +287 -49
- package/src/lib/pipeline-orchestrator.js +289 -49
- package/src/lib/plan-mode.js +298 -51
- package/src/lib/plugin-ecosystem.js +346 -0
- package/src/lib/pqc-manager.js +346 -0
- package/src/lib/privacy-computing.js +335 -0
- package/src/lib/protocol-fusion.js +338 -0
- package/src/lib/quantization.js +337 -0
- package/src/lib/reputation-optimizer.js +340 -0
- package/src/lib/response-cache.js +333 -0
- package/src/lib/sandbox-v2.js +327 -0
- package/src/lib/scim-manager.js +346 -0
- package/src/lib/service-container.js +313 -52
- package/src/lib/session-consolidator.js +296 -49
- package/src/lib/session-hooks.js +312 -53
- package/src/lib/session-manager.js +334 -0
- package/src/lib/session-search.js +304 -51
- package/src/lib/session-tail.js +288 -49
- package/src/lib/session-usage.js +298 -52
- package/src/lib/siem-exporter.js +298 -51
- package/src/lib/skill-loader.js +334 -0
- package/src/lib/skill-marketplace.js +345 -0
- package/src/lib/sla-manager.js +341 -0
- package/src/lib/slot-filler.js +303 -51
- package/src/lib/social-graph-analytics.js +295 -49
- package/src/lib/social-graph.js +272 -49
- package/src/lib/social-manager.js +330 -0
- package/src/lib/sso-manager.js +340 -0
- package/src/lib/stress-tester.js +342 -0
- package/src/lib/sub-agent-registry.js +302 -53
- package/src/lib/sync-manager.js +336 -0
- package/src/lib/task-model-selector.js +302 -50
- package/src/lib/tech-learning-engine.js +341 -0
- package/src/lib/tenant-saas.js +341 -0
- package/src/lib/terraform-manager.js +333 -0
- package/src/lib/threat-intel.js +330 -0
- package/src/lib/todo-manager.js +281 -47
- package/src/lib/token-incentive.js +341 -0
- package/src/lib/token-tracker.js +336 -0
- package/src/lib/topic-classifier.js +297 -49
- package/src/lib/trust-security.js +343 -0
- package/src/lib/ueba.js +340 -0
- package/src/lib/universal-runtime.js +330 -0
- package/src/lib/user-profile.js +294 -50
- package/src/lib/version-checker.js +304 -50
- package/src/lib/wallet-manager.js +336 -0
- package/src/lib/web-fetch.js +292 -51
- package/src/lib/workflow-engine.js +330 -0
- package/src/lib/zkp-engine.js +286 -49
package/src/lib/pdf-parser.js
CHANGED
|
@@ -95,83 +95,332 @@ function decodePdfString(str) {
|
|
|
95
95
|
.replace(/\\\\/g, "\\");
|
|
96
96
|
}
|
|
97
97
|
|
|
98
|
-
|
|
99
98
|
// =====================================================================
|
|
100
99
|
// PDF Parser V2 governance overlay
|
|
101
100
|
// =====================================================================
|
|
102
|
-
export const PDFP_PROFILE_MATURITY_V2 = Object.freeze({
|
|
103
|
-
|
|
101
|
+
export const PDFP_PROFILE_MATURITY_V2 = Object.freeze({
|
|
102
|
+
PENDING: "pending",
|
|
103
|
+
ACTIVE: "active",
|
|
104
|
+
STALE: "stale",
|
|
105
|
+
ARCHIVED: "archived",
|
|
106
|
+
});
|
|
107
|
+
export const PDFP_PARSE_LIFECYCLE_V2 = Object.freeze({
|
|
108
|
+
QUEUED: "queued",
|
|
109
|
+
PARSING: "parsing",
|
|
110
|
+
PARSED: "parsed",
|
|
111
|
+
FAILED: "failed",
|
|
112
|
+
CANCELLED: "cancelled",
|
|
113
|
+
});
|
|
104
114
|
const _pdfpPTrans = new Map([
|
|
105
|
-
[
|
|
106
|
-
|
|
107
|
-
|
|
115
|
+
[
|
|
116
|
+
PDFP_PROFILE_MATURITY_V2.PENDING,
|
|
117
|
+
new Set([
|
|
118
|
+
PDFP_PROFILE_MATURITY_V2.ACTIVE,
|
|
119
|
+
PDFP_PROFILE_MATURITY_V2.ARCHIVED,
|
|
120
|
+
]),
|
|
121
|
+
],
|
|
122
|
+
[
|
|
123
|
+
PDFP_PROFILE_MATURITY_V2.ACTIVE,
|
|
124
|
+
new Set([
|
|
125
|
+
PDFP_PROFILE_MATURITY_V2.STALE,
|
|
126
|
+
PDFP_PROFILE_MATURITY_V2.ARCHIVED,
|
|
127
|
+
]),
|
|
128
|
+
],
|
|
129
|
+
[
|
|
130
|
+
PDFP_PROFILE_MATURITY_V2.STALE,
|
|
131
|
+
new Set([
|
|
132
|
+
PDFP_PROFILE_MATURITY_V2.ACTIVE,
|
|
133
|
+
PDFP_PROFILE_MATURITY_V2.ARCHIVED,
|
|
134
|
+
]),
|
|
135
|
+
],
|
|
108
136
|
[PDFP_PROFILE_MATURITY_V2.ARCHIVED, new Set()],
|
|
109
137
|
]);
|
|
110
138
|
const _pdfpPTerminal = new Set([PDFP_PROFILE_MATURITY_V2.ARCHIVED]);
|
|
111
139
|
const _pdfpJTrans = new Map([
|
|
112
|
-
[
|
|
113
|
-
|
|
140
|
+
[
|
|
141
|
+
PDFP_PARSE_LIFECYCLE_V2.QUEUED,
|
|
142
|
+
new Set([
|
|
143
|
+
PDFP_PARSE_LIFECYCLE_V2.PARSING,
|
|
144
|
+
PDFP_PARSE_LIFECYCLE_V2.CANCELLED,
|
|
145
|
+
]),
|
|
146
|
+
],
|
|
147
|
+
[
|
|
148
|
+
PDFP_PARSE_LIFECYCLE_V2.PARSING,
|
|
149
|
+
new Set([
|
|
150
|
+
PDFP_PARSE_LIFECYCLE_V2.PARSED,
|
|
151
|
+
PDFP_PARSE_LIFECYCLE_V2.FAILED,
|
|
152
|
+
PDFP_PARSE_LIFECYCLE_V2.CANCELLED,
|
|
153
|
+
]),
|
|
154
|
+
],
|
|
114
155
|
[PDFP_PARSE_LIFECYCLE_V2.PARSED, new Set()],
|
|
115
156
|
[PDFP_PARSE_LIFECYCLE_V2.FAILED, new Set()],
|
|
116
157
|
[PDFP_PARSE_LIFECYCLE_V2.CANCELLED, new Set()],
|
|
117
158
|
]);
|
|
118
159
|
const _pdfpPsV2 = new Map();
|
|
119
160
|
const _pdfpJsV2 = new Map();
|
|
120
|
-
let _pdfpMaxActive = 6,
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
function
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
161
|
+
let _pdfpMaxActive = 6,
|
|
162
|
+
_pdfpMaxPending = 12,
|
|
163
|
+
_pdfpIdleMs = 30 * 24 * 60 * 60 * 1000,
|
|
164
|
+
_pdfpStuckMs = 60 * 1000;
|
|
165
|
+
function _pdfpPos(n, label) {
|
|
166
|
+
const v = Math.floor(Number(n));
|
|
167
|
+
if (!Number.isFinite(v) || v <= 0)
|
|
168
|
+
throw new Error(`${label} must be positive integer`);
|
|
169
|
+
return v;
|
|
170
|
+
}
|
|
171
|
+
function _pdfpCheckP(from, to) {
|
|
172
|
+
const a = _pdfpPTrans.get(from);
|
|
173
|
+
if (!a || !a.has(to))
|
|
174
|
+
throw new Error(`invalid pdfp profile transition ${from} → ${to}`);
|
|
175
|
+
}
|
|
176
|
+
function _pdfpCheckJ(from, to) {
|
|
177
|
+
const a = _pdfpJTrans.get(from);
|
|
178
|
+
if (!a || !a.has(to))
|
|
179
|
+
throw new Error(`invalid pdfp parse transition ${from} → ${to}`);
|
|
180
|
+
}
|
|
181
|
+
function _pdfpCountActive(owner) {
|
|
182
|
+
let c = 0;
|
|
183
|
+
for (const p of _pdfpPsV2.values())
|
|
184
|
+
if (p.owner === owner && p.status === PDFP_PROFILE_MATURITY_V2.ACTIVE) c++;
|
|
185
|
+
return c;
|
|
186
|
+
}
|
|
187
|
+
function _pdfpCountPending(profileId) {
|
|
188
|
+
let c = 0;
|
|
189
|
+
for (const j of _pdfpJsV2.values())
|
|
190
|
+
if (
|
|
191
|
+
j.profileId === profileId &&
|
|
192
|
+
(j.status === PDFP_PARSE_LIFECYCLE_V2.QUEUED ||
|
|
193
|
+
j.status === PDFP_PARSE_LIFECYCLE_V2.PARSING)
|
|
194
|
+
)
|
|
195
|
+
c++;
|
|
196
|
+
return c;
|
|
197
|
+
}
|
|
198
|
+
export function setMaxActivePdfpProfilesPerOwnerV2(n) {
|
|
199
|
+
_pdfpMaxActive = _pdfpPos(n, "maxActivePdfpProfilesPerOwner");
|
|
200
|
+
}
|
|
201
|
+
export function getMaxActivePdfpProfilesPerOwnerV2() {
|
|
202
|
+
return _pdfpMaxActive;
|
|
203
|
+
}
|
|
204
|
+
export function setMaxPendingPdfpParsesPerProfileV2(n) {
|
|
205
|
+
_pdfpMaxPending = _pdfpPos(n, "maxPendingPdfpParsesPerProfile");
|
|
206
|
+
}
|
|
207
|
+
export function getMaxPendingPdfpParsesPerProfileV2() {
|
|
208
|
+
return _pdfpMaxPending;
|
|
209
|
+
}
|
|
210
|
+
export function setPdfpProfileIdleMsV2(n) {
|
|
211
|
+
_pdfpIdleMs = _pdfpPos(n, "pdfpProfileIdleMs");
|
|
212
|
+
}
|
|
213
|
+
export function getPdfpProfileIdleMsV2() {
|
|
214
|
+
return _pdfpIdleMs;
|
|
215
|
+
}
|
|
216
|
+
export function setPdfpParseStuckMsV2(n) {
|
|
217
|
+
_pdfpStuckMs = _pdfpPos(n, "pdfpParseStuckMs");
|
|
218
|
+
}
|
|
219
|
+
export function getPdfpParseStuckMsV2() {
|
|
220
|
+
return _pdfpStuckMs;
|
|
221
|
+
}
|
|
222
|
+
export function _resetStatePdfParserV2() {
|
|
223
|
+
_pdfpPsV2.clear();
|
|
224
|
+
_pdfpJsV2.clear();
|
|
225
|
+
_pdfpMaxActive = 6;
|
|
226
|
+
_pdfpMaxPending = 12;
|
|
227
|
+
_pdfpIdleMs = 30 * 24 * 60 * 60 * 1000;
|
|
228
|
+
_pdfpStuckMs = 60 * 1000;
|
|
229
|
+
}
|
|
135
230
|
export function registerPdfpProfileV2({ id, owner, encoding, metadata } = {}) {
|
|
136
231
|
if (!id || !owner) throw new Error("id and owner required");
|
|
137
232
|
if (_pdfpPsV2.has(id)) throw new Error(`pdfp profile ${id} already exists`);
|
|
138
233
|
const now = Date.now();
|
|
139
|
-
const p = {
|
|
140
|
-
|
|
234
|
+
const p = {
|
|
235
|
+
id,
|
|
236
|
+
owner,
|
|
237
|
+
encoding: encoding || "utf-8",
|
|
238
|
+
status: PDFP_PROFILE_MATURITY_V2.PENDING,
|
|
239
|
+
createdAt: now,
|
|
240
|
+
updatedAt: now,
|
|
241
|
+
lastTouchedAt: now,
|
|
242
|
+
activatedAt: null,
|
|
243
|
+
archivedAt: null,
|
|
244
|
+
metadata: { ...(metadata || {}) },
|
|
245
|
+
};
|
|
246
|
+
_pdfpPsV2.set(id, p);
|
|
247
|
+
return { ...p, metadata: { ...p.metadata } };
|
|
141
248
|
}
|
|
142
249
|
export function activatePdfpProfileV2(id) {
|
|
143
|
-
const p = _pdfpPsV2.get(id);
|
|
250
|
+
const p = _pdfpPsV2.get(id);
|
|
251
|
+
if (!p) throw new Error(`pdfp profile ${id} not found`);
|
|
144
252
|
const isInitial = p.status === PDFP_PROFILE_MATURITY_V2.PENDING;
|
|
145
253
|
_pdfpCheckP(p.status, PDFP_PROFILE_MATURITY_V2.ACTIVE);
|
|
146
|
-
if (isInitial && _pdfpCountActive(p.owner) >= _pdfpMaxActive)
|
|
147
|
-
|
|
254
|
+
if (isInitial && _pdfpCountActive(p.owner) >= _pdfpMaxActive)
|
|
255
|
+
throw new Error(`max active pdfp profiles for owner ${p.owner} reached`);
|
|
256
|
+
const now = Date.now();
|
|
257
|
+
p.status = PDFP_PROFILE_MATURITY_V2.ACTIVE;
|
|
258
|
+
p.updatedAt = now;
|
|
259
|
+
p.lastTouchedAt = now;
|
|
148
260
|
if (!p.activatedAt) p.activatedAt = now;
|
|
149
261
|
return { ...p, metadata: { ...p.metadata } };
|
|
150
262
|
}
|
|
151
|
-
export function stalePdfpProfileV2(id) {
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
263
|
+
export function stalePdfpProfileV2(id) {
|
|
264
|
+
const p = _pdfpPsV2.get(id);
|
|
265
|
+
if (!p) throw new Error(`pdfp profile ${id} not found`);
|
|
266
|
+
_pdfpCheckP(p.status, PDFP_PROFILE_MATURITY_V2.STALE);
|
|
267
|
+
p.status = PDFP_PROFILE_MATURITY_V2.STALE;
|
|
268
|
+
p.updatedAt = Date.now();
|
|
269
|
+
return { ...p, metadata: { ...p.metadata } };
|
|
270
|
+
}
|
|
271
|
+
export function archivePdfpProfileV2(id) {
|
|
272
|
+
const p = _pdfpPsV2.get(id);
|
|
273
|
+
if (!p) throw new Error(`pdfp profile ${id} not found`);
|
|
274
|
+
_pdfpCheckP(p.status, PDFP_PROFILE_MATURITY_V2.ARCHIVED);
|
|
275
|
+
const now = Date.now();
|
|
276
|
+
p.status = PDFP_PROFILE_MATURITY_V2.ARCHIVED;
|
|
277
|
+
p.updatedAt = now;
|
|
278
|
+
if (!p.archivedAt) p.archivedAt = now;
|
|
279
|
+
return { ...p, metadata: { ...p.metadata } };
|
|
280
|
+
}
|
|
281
|
+
export function touchPdfpProfileV2(id) {
|
|
282
|
+
const p = _pdfpPsV2.get(id);
|
|
283
|
+
if (!p) throw new Error(`pdfp profile ${id} not found`);
|
|
284
|
+
if (_pdfpPTerminal.has(p.status))
|
|
285
|
+
throw new Error(`cannot touch terminal pdfp profile ${id}`);
|
|
286
|
+
const now = Date.now();
|
|
287
|
+
p.lastTouchedAt = now;
|
|
288
|
+
p.updatedAt = now;
|
|
289
|
+
return { ...p, metadata: { ...p.metadata } };
|
|
290
|
+
}
|
|
291
|
+
export function getPdfpProfileV2(id) {
|
|
292
|
+
const p = _pdfpPsV2.get(id);
|
|
293
|
+
if (!p) return null;
|
|
294
|
+
return { ...p, metadata: { ...p.metadata } };
|
|
295
|
+
}
|
|
296
|
+
export function listPdfpProfilesV2() {
|
|
297
|
+
return [..._pdfpPsV2.values()].map((p) => ({
|
|
298
|
+
...p,
|
|
299
|
+
metadata: { ...p.metadata },
|
|
300
|
+
}));
|
|
301
|
+
}
|
|
156
302
|
export function createPdfpParseV2({ id, profileId, path, metadata } = {}) {
|
|
157
303
|
if (!id || !profileId) throw new Error("id and profileId required");
|
|
158
304
|
if (_pdfpJsV2.has(id)) throw new Error(`pdfp parse ${id} already exists`);
|
|
159
|
-
if (!_pdfpPsV2.has(profileId))
|
|
160
|
-
|
|
305
|
+
if (!_pdfpPsV2.has(profileId))
|
|
306
|
+
throw new Error(`pdfp profile ${profileId} not found`);
|
|
307
|
+
if (_pdfpCountPending(profileId) >= _pdfpMaxPending)
|
|
308
|
+
throw new Error(`max pending pdfp parses for profile ${profileId} reached`);
|
|
309
|
+
const now = Date.now();
|
|
310
|
+
const j = {
|
|
311
|
+
id,
|
|
312
|
+
profileId,
|
|
313
|
+
path: path || "",
|
|
314
|
+
status: PDFP_PARSE_LIFECYCLE_V2.QUEUED,
|
|
315
|
+
createdAt: now,
|
|
316
|
+
updatedAt: now,
|
|
317
|
+
startedAt: null,
|
|
318
|
+
settledAt: null,
|
|
319
|
+
metadata: { ...(metadata || {}) },
|
|
320
|
+
};
|
|
321
|
+
_pdfpJsV2.set(id, j);
|
|
322
|
+
return { ...j, metadata: { ...j.metadata } };
|
|
323
|
+
}
|
|
324
|
+
export function parsingPdfpParseV2(id) {
|
|
325
|
+
const j = _pdfpJsV2.get(id);
|
|
326
|
+
if (!j) throw new Error(`pdfp parse ${id} not found`);
|
|
327
|
+
_pdfpCheckJ(j.status, PDFP_PARSE_LIFECYCLE_V2.PARSING);
|
|
328
|
+
const now = Date.now();
|
|
329
|
+
j.status = PDFP_PARSE_LIFECYCLE_V2.PARSING;
|
|
330
|
+
j.updatedAt = now;
|
|
331
|
+
if (!j.startedAt) j.startedAt = now;
|
|
332
|
+
return { ...j, metadata: { ...j.metadata } };
|
|
333
|
+
}
|
|
334
|
+
export function parsePdfpParseV2(id) {
|
|
335
|
+
const j = _pdfpJsV2.get(id);
|
|
336
|
+
if (!j) throw new Error(`pdfp parse ${id} not found`);
|
|
337
|
+
_pdfpCheckJ(j.status, PDFP_PARSE_LIFECYCLE_V2.PARSED);
|
|
338
|
+
const now = Date.now();
|
|
339
|
+
j.status = PDFP_PARSE_LIFECYCLE_V2.PARSED;
|
|
340
|
+
j.updatedAt = now;
|
|
341
|
+
if (!j.settledAt) j.settledAt = now;
|
|
342
|
+
return { ...j, metadata: { ...j.metadata } };
|
|
343
|
+
}
|
|
344
|
+
export function failPdfpParseV2(id, reason) {
|
|
345
|
+
const j = _pdfpJsV2.get(id);
|
|
346
|
+
if (!j) throw new Error(`pdfp parse ${id} not found`);
|
|
347
|
+
_pdfpCheckJ(j.status, PDFP_PARSE_LIFECYCLE_V2.FAILED);
|
|
161
348
|
const now = Date.now();
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
export function cancelPdfpParseV2(id, reason) {
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
349
|
+
j.status = PDFP_PARSE_LIFECYCLE_V2.FAILED;
|
|
350
|
+
j.updatedAt = now;
|
|
351
|
+
if (!j.settledAt) j.settledAt = now;
|
|
352
|
+
if (reason) j.metadata.failReason = String(reason);
|
|
353
|
+
return { ...j, metadata: { ...j.metadata } };
|
|
354
|
+
}
|
|
355
|
+
export function cancelPdfpParseV2(id, reason) {
|
|
356
|
+
const j = _pdfpJsV2.get(id);
|
|
357
|
+
if (!j) throw new Error(`pdfp parse ${id} not found`);
|
|
358
|
+
_pdfpCheckJ(j.status, PDFP_PARSE_LIFECYCLE_V2.CANCELLED);
|
|
359
|
+
const now = Date.now();
|
|
360
|
+
j.status = PDFP_PARSE_LIFECYCLE_V2.CANCELLED;
|
|
361
|
+
j.updatedAt = now;
|
|
362
|
+
if (!j.settledAt) j.settledAt = now;
|
|
363
|
+
if (reason) j.metadata.cancelReason = String(reason);
|
|
364
|
+
return { ...j, metadata: { ...j.metadata } };
|
|
365
|
+
}
|
|
366
|
+
export function getPdfpParseV2(id) {
|
|
367
|
+
const j = _pdfpJsV2.get(id);
|
|
368
|
+
if (!j) return null;
|
|
369
|
+
return { ...j, metadata: { ...j.metadata } };
|
|
370
|
+
}
|
|
371
|
+
export function listPdfpParsesV2() {
|
|
372
|
+
return [..._pdfpJsV2.values()].map((j) => ({
|
|
373
|
+
...j,
|
|
374
|
+
metadata: { ...j.metadata },
|
|
375
|
+
}));
|
|
376
|
+
}
|
|
377
|
+
export function autoStaleIdlePdfpProfilesV2({ now } = {}) {
|
|
378
|
+
const t = now ?? Date.now();
|
|
379
|
+
const flipped = [];
|
|
380
|
+
for (const p of _pdfpPsV2.values())
|
|
381
|
+
if (
|
|
382
|
+
p.status === PDFP_PROFILE_MATURITY_V2.ACTIVE &&
|
|
383
|
+
t - p.lastTouchedAt >= _pdfpIdleMs
|
|
384
|
+
) {
|
|
385
|
+
p.status = PDFP_PROFILE_MATURITY_V2.STALE;
|
|
386
|
+
p.updatedAt = t;
|
|
387
|
+
flipped.push(p.id);
|
|
388
|
+
}
|
|
389
|
+
return { flipped, count: flipped.length };
|
|
390
|
+
}
|
|
391
|
+
export function autoFailStuckPdfpParsesV2({ now } = {}) {
|
|
392
|
+
const t = now ?? Date.now();
|
|
393
|
+
const flipped = [];
|
|
394
|
+
for (const j of _pdfpJsV2.values())
|
|
395
|
+
if (
|
|
396
|
+
j.status === PDFP_PARSE_LIFECYCLE_V2.PARSING &&
|
|
397
|
+
j.startedAt != null &&
|
|
398
|
+
t - j.startedAt >= _pdfpStuckMs
|
|
399
|
+
) {
|
|
400
|
+
j.status = PDFP_PARSE_LIFECYCLE_V2.FAILED;
|
|
401
|
+
j.updatedAt = t;
|
|
402
|
+
if (!j.settledAt) j.settledAt = t;
|
|
403
|
+
j.metadata.failReason = "auto-fail-stuck";
|
|
404
|
+
flipped.push(j.id);
|
|
405
|
+
}
|
|
406
|
+
return { flipped, count: flipped.length };
|
|
407
|
+
}
|
|
173
408
|
export function getPdfParserGovStatsV2() {
|
|
174
|
-
const profilesByStatus = {};
|
|
175
|
-
|
|
176
|
-
|
|
409
|
+
const profilesByStatus = {};
|
|
410
|
+
for (const v of Object.values(PDFP_PROFILE_MATURITY_V2))
|
|
411
|
+
profilesByStatus[v] = 0;
|
|
412
|
+
for (const p of _pdfpPsV2.values()) profilesByStatus[p.status]++;
|
|
413
|
+
const parsesByStatus = {};
|
|
414
|
+
for (const v of Object.values(PDFP_PARSE_LIFECYCLE_V2)) parsesByStatus[v] = 0;
|
|
415
|
+
for (const j of _pdfpJsV2.values()) parsesByStatus[j.status]++;
|
|
416
|
+
return {
|
|
417
|
+
totalPdfpProfilesV2: _pdfpPsV2.size,
|
|
418
|
+
totalPdfpParsesV2: _pdfpJsV2.size,
|
|
419
|
+
maxActivePdfpProfilesPerOwner: _pdfpMaxActive,
|
|
420
|
+
maxPendingPdfpParsesPerProfile: _pdfpMaxPending,
|
|
421
|
+
pdfpProfileIdleMs: _pdfpIdleMs,
|
|
422
|
+
pdfpParseStuckMs: _pdfpStuckMs,
|
|
423
|
+
profilesByStatus,
|
|
424
|
+
parsesByStatus,
|
|
425
|
+
};
|
|
177
426
|
}
|