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.
Files changed (227) hide show
  1. package/package.json +1 -1
  2. package/src/commands/a2a.js +196 -28
  3. package/src/commands/activitypub.js +364 -27
  4. package/src/commands/agent-network.js +217 -0
  5. package/src/commands/agent.js +587 -103
  6. package/src/commands/audit.js +206 -0
  7. package/src/commands/automation.js +201 -0
  8. package/src/commands/bi.js +355 -27
  9. package/src/commands/bm25.js +111 -27
  10. package/src/commands/browse.js +403 -29
  11. package/src/commands/ccron.js +128 -28
  12. package/src/commands/chat.js +207 -0
  13. package/src/commands/codegen.js +207 -0
  14. package/src/commands/collab.js +211 -0
  15. package/src/commands/compliance.js +824 -34
  16. package/src/commands/compt.js +127 -29
  17. package/src/commands/consol.js +8 -2
  18. package/src/commands/cowork.js +783 -34
  19. package/src/commands/crosschain.js +182 -28
  20. package/src/commands/dao.js +182 -28
  21. package/src/commands/dbevo.js +227 -0
  22. package/src/commands/dev.js +207 -0
  23. package/src/commands/did-v2.js +217 -0
  24. package/src/commands/did.js +221 -0
  25. package/src/commands/dlp.js +385 -27
  26. package/src/commands/economy.js +205 -50
  27. package/src/commands/evolution.js +203 -50
  28. package/src/commands/evomap.js +387 -27
  29. package/src/commands/export.js +213 -0
  30. package/src/commands/federation.js +209 -0
  31. package/src/commands/fflag.js +74 -22
  32. package/src/commands/fusion.js +205 -0
  33. package/src/commands/git.js +177 -37
  34. package/src/commands/governance.js +209 -0
  35. package/src/commands/hardening.js +209 -0
  36. package/src/commands/hmemory.js +204 -50
  37. package/src/commands/hook.js +209 -0
  38. package/src/commands/import.js +209 -0
  39. package/src/commands/incentive.js +209 -0
  40. package/src/commands/inference.js +170 -34
  41. package/src/commands/infra.js +203 -0
  42. package/src/commands/instinct.js +209 -0
  43. package/src/commands/ipfs.js +207 -0
  44. package/src/commands/itbudget.js +149 -33
  45. package/src/commands/kg.js +206 -0
  46. package/src/commands/llm.js +217 -0
  47. package/src/commands/lowcode.js +195 -38
  48. package/src/commands/marketplace.js +206 -0
  49. package/src/commands/matrix.js +386 -27
  50. package/src/commands/mcp.js +217 -0
  51. package/src/commands/mcpscaf.js +145 -33
  52. package/src/commands/meminj.js +145 -33
  53. package/src/commands/memory.js +209 -0
  54. package/src/commands/multimodal.js +203 -0
  55. package/src/commands/nlprog.js +225 -0
  56. package/src/commands/nostr.js +387 -27
  57. package/src/commands/note.js +205 -0
  58. package/src/commands/ops.js +219 -0
  59. package/src/commands/orchestrate.js +217 -0
  60. package/src/commands/orchgov.js +144 -33
  61. package/src/commands/org.js +209 -0
  62. package/src/commands/p2p.js +209 -0
  63. package/src/commands/pdfp.js +109 -27
  64. package/src/commands/perception.js +209 -0
  65. package/src/commands/perf.js +169 -32
  66. package/src/commands/perm.js +144 -33
  67. package/src/commands/permmem.js +203 -0
  68. package/src/commands/pipeline.js +207 -52
  69. package/src/commands/planmode.js +141 -32
  70. package/src/commands/plugin-ecosystem.js +209 -0
  71. package/src/commands/pqc.js +213 -0
  72. package/src/commands/privacy.js +203 -0
  73. package/src/commands/promcomp.js +111 -27
  74. package/src/commands/quantization.js +207 -0
  75. package/src/commands/rcache.js +205 -0
  76. package/src/commands/recommend.js +410 -34
  77. package/src/commands/reputation.js +208 -0
  78. package/src/commands/runtime.js +205 -0
  79. package/src/commands/sandbox.js +206 -0
  80. package/src/commands/scim.js +209 -0
  81. package/src/commands/seshhook.js +145 -33
  82. package/src/commands/seshsearch.js +141 -33
  83. package/src/commands/seshtail.js +144 -33
  84. package/src/commands/seshu.js +152 -33
  85. package/src/commands/session.js +209 -0
  86. package/src/commands/sganal.js +123 -29
  87. package/src/commands/siem.js +201 -34
  88. package/src/commands/skill.js +207 -0
  89. package/src/commands/sla.js +212 -0
  90. package/src/commands/slotfill.js +146 -33
  91. package/src/commands/social.js +358 -32
  92. package/src/commands/sso.js +209 -0
  93. package/src/commands/stress.js +206 -0
  94. package/src/commands/svccont.js +145 -33
  95. package/src/commands/sync.js +209 -0
  96. package/src/commands/tech.js +209 -0
  97. package/src/commands/tenant.js +217 -0
  98. package/src/commands/terraform.js +206 -0
  99. package/src/commands/tms.js +171 -33
  100. package/src/commands/tokens.js +209 -0
  101. package/src/commands/topiccls.js +146 -33
  102. package/src/commands/trust.js +217 -0
  103. package/src/commands/uprof.js +141 -32
  104. package/src/commands/vcheck.js +122 -28
  105. package/src/commands/wallet.js +209 -0
  106. package/src/commands/webfetch.js +141 -32
  107. package/src/commands/workflow.js +203 -0
  108. package/src/commands/zkp.js +184 -28
  109. package/src/index.js +180 -0
  110. package/src/lib/a2a-protocol.js +319 -51
  111. package/src/lib/activitypub-bridge.js +622 -50
  112. package/src/lib/agent-economy.js +304 -51
  113. package/src/lib/agent-network.js +341 -0
  114. package/src/lib/aiops.js +346 -0
  115. package/src/lib/app-builder.js +279 -46
  116. package/src/lib/audit-logger.js +321 -0
  117. package/src/lib/automation-engine.js +335 -0
  118. package/src/lib/autonomous-agent.js +284 -48
  119. package/src/lib/autonomous-developer.js +332 -0
  120. package/src/lib/bi-engine.js +616 -49
  121. package/src/lib/bm25-search.js +301 -49
  122. package/src/lib/browser-automation.js +630 -49
  123. package/src/lib/chat-core.js +336 -0
  124. package/src/lib/claude-code-bridge.js +341 -0
  125. package/src/lib/code-agent.js +339 -0
  126. package/src/lib/collaboration-governance.js +334 -0
  127. package/src/lib/community-governance.js +346 -0
  128. package/src/lib/compliance-framework-reporter.js +305 -51
  129. package/src/lib/compliance-manager.js +330 -0
  130. package/src/lib/compression-telemetry.js +301 -49
  131. package/src/lib/content-recommendation.js +351 -0
  132. package/src/lib/content-recommender.js +317 -52
  133. package/src/lib/cowork-cron.js +298 -49
  134. package/src/lib/cowork-learning.js +333 -0
  135. package/src/lib/cowork-share.js +338 -0
  136. package/src/lib/cowork-task-runner.js +308 -51
  137. package/src/lib/cowork-workflow.js +327 -0
  138. package/src/lib/cross-chain.js +311 -51
  139. package/src/lib/dao-governance.js +280 -46
  140. package/src/lib/dbevo.js +351 -0
  141. package/src/lib/decentral-infra.js +330 -0
  142. package/src/lib/did-manager.js +341 -0
  143. package/src/lib/did-v2-manager.js +341 -0
  144. package/src/lib/dlp-engine.js +626 -49
  145. package/src/lib/evolution-system.js +278 -47
  146. package/src/lib/evomap-governance.js +334 -0
  147. package/src/lib/evomap-manager.js +280 -46
  148. package/src/lib/execution-backend.js +294 -48
  149. package/src/lib/feature-flags.js +294 -49
  150. package/src/lib/federation-hardening.js +340 -0
  151. package/src/lib/git-integration.js +285 -47
  152. package/src/lib/hardening-manager.js +341 -0
  153. package/src/lib/hierarchical-memory.js +284 -48
  154. package/src/lib/hook-manager.js +341 -0
  155. package/src/lib/inference-network.js +308 -51
  156. package/src/lib/instinct-manager.js +346 -0
  157. package/src/lib/ipfs-storage.js +334 -0
  158. package/src/lib/iteration-budget.js +302 -50
  159. package/src/lib/knowledge-exporter.js +341 -0
  160. package/src/lib/knowledge-graph.js +333 -0
  161. package/src/lib/knowledge-importer.js +341 -0
  162. package/src/lib/llm-providers.js +346 -0
  163. package/src/lib/matrix-bridge.js +620 -47
  164. package/src/lib/mcp-registry.js +346 -0
  165. package/src/lib/mcp-scaffold.js +318 -54
  166. package/src/lib/memory-injection.js +288 -49
  167. package/src/lib/memory-manager.js +336 -0
  168. package/src/lib/multimodal.js +330 -0
  169. package/src/lib/nl-programming.js +341 -0
  170. package/src/lib/nostr-bridge.js +622 -49
  171. package/src/lib/note-versioning.js +339 -0
  172. package/src/lib/orchestrator.js +293 -48
  173. package/src/lib/org-manager.js +336 -0
  174. package/src/lib/p2p-manager.js +341 -0
  175. package/src/lib/pdf-parser.js +298 -49
  176. package/src/lib/perception.js +346 -0
  177. package/src/lib/perf-tuning.js +309 -50
  178. package/src/lib/permanent-memory.js +327 -0
  179. package/src/lib/permission-engine.js +287 -49
  180. package/src/lib/pipeline-orchestrator.js +289 -49
  181. package/src/lib/plan-mode.js +298 -51
  182. package/src/lib/plugin-ecosystem.js +346 -0
  183. package/src/lib/pqc-manager.js +346 -0
  184. package/src/lib/privacy-computing.js +335 -0
  185. package/src/lib/protocol-fusion.js +338 -0
  186. package/src/lib/quantization.js +337 -0
  187. package/src/lib/reputation-optimizer.js +340 -0
  188. package/src/lib/response-cache.js +333 -0
  189. package/src/lib/sandbox-v2.js +327 -0
  190. package/src/lib/scim-manager.js +346 -0
  191. package/src/lib/service-container.js +313 -52
  192. package/src/lib/session-consolidator.js +296 -49
  193. package/src/lib/session-hooks.js +312 -53
  194. package/src/lib/session-manager.js +334 -0
  195. package/src/lib/session-search.js +304 -51
  196. package/src/lib/session-tail.js +288 -49
  197. package/src/lib/session-usage.js +298 -52
  198. package/src/lib/siem-exporter.js +298 -51
  199. package/src/lib/skill-loader.js +334 -0
  200. package/src/lib/skill-marketplace.js +345 -0
  201. package/src/lib/sla-manager.js +341 -0
  202. package/src/lib/slot-filler.js +303 -51
  203. package/src/lib/social-graph-analytics.js +295 -49
  204. package/src/lib/social-graph.js +272 -49
  205. package/src/lib/social-manager.js +330 -0
  206. package/src/lib/sso-manager.js +340 -0
  207. package/src/lib/stress-tester.js +342 -0
  208. package/src/lib/sub-agent-registry.js +302 -53
  209. package/src/lib/sync-manager.js +336 -0
  210. package/src/lib/task-model-selector.js +302 -50
  211. package/src/lib/tech-learning-engine.js +341 -0
  212. package/src/lib/tenant-saas.js +341 -0
  213. package/src/lib/terraform-manager.js +333 -0
  214. package/src/lib/threat-intel.js +330 -0
  215. package/src/lib/todo-manager.js +281 -47
  216. package/src/lib/token-incentive.js +341 -0
  217. package/src/lib/token-tracker.js +336 -0
  218. package/src/lib/topic-classifier.js +297 -49
  219. package/src/lib/trust-security.js +343 -0
  220. package/src/lib/ueba.js +340 -0
  221. package/src/lib/universal-runtime.js +330 -0
  222. package/src/lib/user-profile.js +294 -50
  223. package/src/lib/version-checker.js +304 -50
  224. package/src/lib/wallet-manager.js +336 -0
  225. package/src/lib/web-fetch.js +292 -51
  226. package/src/lib/workflow-engine.js +330 -0
  227. package/src/lib/zkp-engine.js +286 -49
@@ -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({ PENDING: "pending", ACTIVE: "active", STALE: "stale", ARCHIVED: "archived" });
103
- export const PDFP_PARSE_LIFECYCLE_V2 = Object.freeze({ QUEUED: "queued", PARSING: "parsing", PARSED: "parsed", FAILED: "failed", CANCELLED: "cancelled" });
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
- [PDFP_PROFILE_MATURITY_V2.PENDING, new Set([PDFP_PROFILE_MATURITY_V2.ACTIVE, PDFP_PROFILE_MATURITY_V2.ARCHIVED])],
106
- [PDFP_PROFILE_MATURITY_V2.ACTIVE, new Set([PDFP_PROFILE_MATURITY_V2.STALE, PDFP_PROFILE_MATURITY_V2.ARCHIVED])],
107
- [PDFP_PROFILE_MATURITY_V2.STALE, new Set([PDFP_PROFILE_MATURITY_V2.ACTIVE, PDFP_PROFILE_MATURITY_V2.ARCHIVED])],
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
- [PDFP_PARSE_LIFECYCLE_V2.QUEUED, new Set([PDFP_PARSE_LIFECYCLE_V2.PARSING, PDFP_PARSE_LIFECYCLE_V2.CANCELLED])],
113
- [PDFP_PARSE_LIFECYCLE_V2.PARSING, new Set([PDFP_PARSE_LIFECYCLE_V2.PARSED, PDFP_PARSE_LIFECYCLE_V2.FAILED, PDFP_PARSE_LIFECYCLE_V2.CANCELLED])],
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, _pdfpMaxPending = 12, _pdfpIdleMs = 30 * 24 * 60 * 60 * 1000, _pdfpStuckMs = 60 * 1000;
121
- function _pdfpPos(n, label) { const v = Math.floor(Number(n)); if (!Number.isFinite(v) || v <= 0) throw new Error(`${label} must be positive integer`); return v; }
122
- function _pdfpCheckP(from, to) { const a = _pdfpPTrans.get(from); if (!a || !a.has(to)) throw new Error(`invalid pdfp profile transition ${from} → ${to}`); }
123
- function _pdfpCheckJ(from, to) { const a = _pdfpJTrans.get(from); if (!a || !a.has(to)) throw new Error(`invalid pdfp parse transition ${from} → ${to}`); }
124
- function _pdfpCountActive(owner) { let c = 0; for (const p of _pdfpPsV2.values()) if (p.owner === owner && p.status === PDFP_PROFILE_MATURITY_V2.ACTIVE) c++; return c; }
125
- function _pdfpCountPending(profileId) { let c = 0; for (const j of _pdfpJsV2.values()) if (j.profileId === profileId && (j.status === PDFP_PARSE_LIFECYCLE_V2.QUEUED || j.status === PDFP_PARSE_LIFECYCLE_V2.PARSING)) c++; return c; }
126
- export function setMaxActivePdfpProfilesPerOwnerV2(n) { _pdfpMaxActive = _pdfpPos(n, "maxActivePdfpProfilesPerOwner"); }
127
- export function getMaxActivePdfpProfilesPerOwnerV2() { return _pdfpMaxActive; }
128
- export function setMaxPendingPdfpParsesPerProfileV2(n) { _pdfpMaxPending = _pdfpPos(n, "maxPendingPdfpParsesPerProfile"); }
129
- export function getMaxPendingPdfpParsesPerProfileV2() { return _pdfpMaxPending; }
130
- export function setPdfpProfileIdleMsV2(n) { _pdfpIdleMs = _pdfpPos(n, "pdfpProfileIdleMs"); }
131
- export function getPdfpProfileIdleMsV2() { return _pdfpIdleMs; }
132
- export function setPdfpParseStuckMsV2(n) { _pdfpStuckMs = _pdfpPos(n, "pdfpParseStuckMs"); }
133
- export function getPdfpParseStuckMsV2() { return _pdfpStuckMs; }
134
- export function _resetStatePdfParserV2() { _pdfpPsV2.clear(); _pdfpJsV2.clear(); _pdfpMaxActive = 6; _pdfpMaxPending = 12; _pdfpIdleMs = 30 * 24 * 60 * 60 * 1000; _pdfpStuckMs = 60 * 1000; }
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 = { id, owner, encoding: encoding || "utf-8", status: PDFP_PROFILE_MATURITY_V2.PENDING, createdAt: now, updatedAt: now, lastTouchedAt: now, activatedAt: null, archivedAt: null, metadata: { ...(metadata || {}) } };
140
- _pdfpPsV2.set(id, p); return { ...p, metadata: { ...p.metadata } };
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); if (!p) throw new Error(`pdfp profile ${id} not found`);
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) throw new Error(`max active pdfp profiles for owner ${p.owner} reached`);
147
- const now = Date.now(); p.status = PDFP_PROFILE_MATURITY_V2.ACTIVE; p.updatedAt = now; p.lastTouchedAt = now;
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) { const p = _pdfpPsV2.get(id); if (!p) throw new Error(`pdfp profile ${id} not found`); _pdfpCheckP(p.status, PDFP_PROFILE_MATURITY_V2.STALE); p.status = PDFP_PROFILE_MATURITY_V2.STALE; p.updatedAt = Date.now(); return { ...p, metadata: { ...p.metadata } }; }
152
- export function archivePdfpProfileV2(id) { const p = _pdfpPsV2.get(id); if (!p) throw new Error(`pdfp profile ${id} not found`); _pdfpCheckP(p.status, PDFP_PROFILE_MATURITY_V2.ARCHIVED); const now = Date.now(); p.status = PDFP_PROFILE_MATURITY_V2.ARCHIVED; p.updatedAt = now; if (!p.archivedAt) p.archivedAt = now; return { ...p, metadata: { ...p.metadata } }; }
153
- export function touchPdfpProfileV2(id) { const p = _pdfpPsV2.get(id); if (!p) throw new Error(`pdfp profile ${id} not found`); if (_pdfpPTerminal.has(p.status)) throw new Error(`cannot touch terminal pdfp profile ${id}`); const now = Date.now(); p.lastTouchedAt = now; p.updatedAt = now; return { ...p, metadata: { ...p.metadata } }; }
154
- export function getPdfpProfileV2(id) { const p = _pdfpPsV2.get(id); if (!p) return null; return { ...p, metadata: { ...p.metadata } }; }
155
- export function listPdfpProfilesV2() { return [..._pdfpPsV2.values()].map((p) => ({ ...p, metadata: { ...p.metadata } })); }
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)) throw new Error(`pdfp profile ${profileId} not found`);
160
- if (_pdfpCountPending(profileId) >= _pdfpMaxPending) throw new Error(`max pending pdfp parses for profile ${profileId} reached`);
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
- const j = { id, profileId, path: path || "", status: PDFP_PARSE_LIFECYCLE_V2.QUEUED, createdAt: now, updatedAt: now, startedAt: null, settledAt: null, metadata: { ...(metadata || {}) } };
163
- _pdfpJsV2.set(id, j); return { ...j, metadata: { ...j.metadata } };
164
- }
165
- export function parsingPdfpParseV2(id) { const j = _pdfpJsV2.get(id); if (!j) throw new Error(`pdfp parse ${id} not found`); _pdfpCheckJ(j.status, PDFP_PARSE_LIFECYCLE_V2.PARSING); const now = Date.now(); j.status = PDFP_PARSE_LIFECYCLE_V2.PARSING; j.updatedAt = now; if (!j.startedAt) j.startedAt = now; return { ...j, metadata: { ...j.metadata } }; }
166
- export function parsePdfpParseV2(id) { const j = _pdfpJsV2.get(id); if (!j) throw new Error(`pdfp parse ${id} not found`); _pdfpCheckJ(j.status, PDFP_PARSE_LIFECYCLE_V2.PARSED); const now = Date.now(); j.status = PDFP_PARSE_LIFECYCLE_V2.PARSED; j.updatedAt = now; if (!j.settledAt) j.settledAt = now; return { ...j, metadata: { ...j.metadata } }; }
167
- export function failPdfpParseV2(id, reason) { const j = _pdfpJsV2.get(id); if (!j) throw new Error(`pdfp parse ${id} not found`); _pdfpCheckJ(j.status, PDFP_PARSE_LIFECYCLE_V2.FAILED); const now = Date.now(); j.status = PDFP_PARSE_LIFECYCLE_V2.FAILED; j.updatedAt = now; if (!j.settledAt) j.settledAt = now; if (reason) j.metadata.failReason = String(reason); return { ...j, metadata: { ...j.metadata } }; }
168
- export function cancelPdfpParseV2(id, reason) { const j = _pdfpJsV2.get(id); if (!j) throw new Error(`pdfp parse ${id} not found`); _pdfpCheckJ(j.status, PDFP_PARSE_LIFECYCLE_V2.CANCELLED); const now = Date.now(); j.status = PDFP_PARSE_LIFECYCLE_V2.CANCELLED; j.updatedAt = now; if (!j.settledAt) j.settledAt = now; if (reason) j.metadata.cancelReason = String(reason); return { ...j, metadata: { ...j.metadata } }; }
169
- export function getPdfpParseV2(id) { const j = _pdfpJsV2.get(id); if (!j) return null; return { ...j, metadata: { ...j.metadata } }; }
170
- export function listPdfpParsesV2() { return [..._pdfpJsV2.values()].map((j) => ({ ...j, metadata: { ...j.metadata } })); }
171
- export function autoStaleIdlePdfpProfilesV2({ now } = {}) { const t = now ?? Date.now(); const flipped = []; for (const p of _pdfpPsV2.values()) if (p.status === PDFP_PROFILE_MATURITY_V2.ACTIVE && (t - p.lastTouchedAt) >= _pdfpIdleMs) { p.status = PDFP_PROFILE_MATURITY_V2.STALE; p.updatedAt = t; flipped.push(p.id); } return { flipped, count: flipped.length }; }
172
- export function autoFailStuckPdfpParsesV2({ now } = {}) { const t = now ?? Date.now(); const flipped = []; for (const j of _pdfpJsV2.values()) if (j.status === PDFP_PARSE_LIFECYCLE_V2.PARSING && j.startedAt != null && (t - j.startedAt) >= _pdfpStuckMs) { j.status = PDFP_PARSE_LIFECYCLE_V2.FAILED; j.updatedAt = t; if (!j.settledAt) j.settledAt = t; j.metadata.failReason = "auto-fail-stuck"; flipped.push(j.id); } return { flipped, count: flipped.length }; }
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 = {}; for (const v of Object.values(PDFP_PROFILE_MATURITY_V2)) profilesByStatus[v] = 0; for (const p of _pdfpPsV2.values()) profilesByStatus[p.status]++;
175
- const parsesByStatus = {}; for (const v of Object.values(PDFP_PARSE_LIFECYCLE_V2)) parsesByStatus[v] = 0; for (const j of _pdfpJsV2.values()) parsesByStatus[j.status]++;
176
- return { totalPdfpProfilesV2: _pdfpPsV2.size, totalPdfpParsesV2: _pdfpJsV2.size, maxActivePdfpProfilesPerOwner: _pdfpMaxActive, maxPendingPdfpParsesPerProfile: _pdfpMaxPending, pdfpProfileIdleMs: _pdfpIdleMs, pdfpParseStuckMs: _pdfpStuckMs, profilesByStatus, parsesByStatus };
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
  }