@webskill/sdk 0.9.0 → 0.11.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 (36) hide show
  1. package/dist/agent.d.ts +3 -2
  2. package/dist/agent.js +3 -1098
  3. package/dist/browser.d.ts +260 -11
  4. package/dist/browser.js +772 -52
  5. package/dist/{catalogComponents-DfxxfUvn-T7Ic8QFV.js → catalogComponents-BFoqpT1v-CjUBZ3bc.js} +1604 -426
  6. package/dist/{dist-CFmkV45C.js → dist-B-cOu08W.js} +874 -107
  7. package/dist/{dist-BQe1uglQ.js → dist-DTHZS2k1.js} +524 -30
  8. package/dist/dist-qnlI2Iup.js +1280 -0
  9. package/dist/{eventTypes-DbOpAECr-BjcjZVms.js → eventTypes-FllCrX-Z-DNDeHWoG.js} +9 -2
  10. package/dist/governance.d.ts +33 -6
  11. package/dist/governance.js +45 -7
  12. package/dist/{index-znZjobkr.d.ts → index-D3mONFHD.d.ts} +281 -11
  13. package/dist/{index-DXNTIa-6.d.ts → index-DACk2_XZ.d.ts} +114 -7
  14. package/dist/{index-lLcCpHE-.d.ts → index-DWbs58LF.d.ts} +234 -14
  15. package/dist/index.d.ts +4 -4
  16. package/dist/index.js +3 -3
  17. package/dist/mcp.d.ts +49 -6
  18. package/dist/mcp.js +146 -38
  19. package/dist/node.d.ts +3 -3
  20. package/dist/node.js +52 -2
  21. package/dist/{openUiLibrary-DURlAxjk-Do_yqg3u.js → openUiLibrary-D5u8oIvx-BLOAQCho.js} +3 -3
  22. package/dist/processSandboxEntry.js +6 -0
  23. package/dist/sandboxWorkerEntry.js +6 -0
  24. package/dist/{skillVersionStore-Bl-ElD45-dMJ8Ybhb.d.ts → skillVersionStore-D-qHk9ZE-BcmFLykd.d.ts} +13 -5
  25. package/dist/{testing-Csg5ljNm.js → testing-WPTyXQYt.js} +26 -3
  26. package/dist/testing.d.ts +1 -1
  27. package/dist/testing.js +1 -1
  28. package/dist/{types-B3n0cMZu-BDhheIhX.d.ts → types-C26b05fW-CdrRCRDb.d.ts} +55 -6
  29. package/dist/ui-react.d.ts +11 -2
  30. package/dist/ui-react.js +141 -42
  31. package/dist/ui-vue.d.ts +1 -1
  32. package/dist/ui-vue.js +2 -2
  33. package/dist/ui.d.ts +4 -4
  34. package/dist/ui.js +3 -3
  35. package/dist/{webskillLitCatalog-DwTwSBFt-BG7kL-Es.js → webskillLitCatalog-DME6PBkV-CmYNLlIT.js} +135 -16
  36. package/package.json +1 -1
@@ -1,4 +1,4 @@
1
- //#region ../governance/dist/eventTypes-DbOpAECr.js
1
+ //#region ../governance/dist/eventTypes-FllCrX-Z.js
2
2
  /**
3
3
  * 审计事件类型常量(FR-13.4)。
4
4
  *
@@ -15,6 +15,7 @@ const AUDIT_EVENT_TYPES = {
15
15
  skillRepairApplied: "skill.repair_applied",
16
16
  skillQuarantined: "skill.quarantined",
17
17
  skillPolicyDenied: "skill.policy_denied",
18
+ skillUserCaused: "skill.user_caused",
18
19
  skillUninstalled: "skill.uninstalled",
19
20
  skillInstalled: "skill.installed",
20
21
  skillExported: "skill.exported",
@@ -36,7 +37,13 @@ const AUDIT_EVENT_TYPES = {
36
37
  candidateGenerated: "candidate.generated",
37
38
  candidateSubmitted: "candidate.submitted",
38
39
  candidateApproved: "candidate.approved",
39
- candidateRejected: "candidate.rejected"
40
+ candidateRejected: "candidate.rejected",
41
+ pagePerceived: "page.perceived",
42
+ pageAction: "page.action",
43
+ documentRead: "document.read",
44
+ documentSurfaceOpen: "document.surface.open",
45
+ /** 脚本按宿主声明的数据源取数(分册 16);被拒也记,否则反复试探看不见 */
46
+ dataFetched: "data.fetch"
40
47
  };
41
48
  /** 稳定展示序:筛选下拉与文档表格都从这里取,不各自维护一份顺序 */
42
49
  const AUDIT_EVENT_TYPE_LIST = Object.values(AUDIT_EVENT_TYPES);
@@ -1,6 +1,6 @@
1
- import { H as Page, L as FileSystemProvider, U as PageQuery, at as SkillDocument, f as LlmMessage, l as LlmClient, lt as SkillManagerPort, rt as SkillCatalogEntry, x as UiBridge } from "./types-B3n0cMZu-BDhheIhX.js";
2
- import { H as IntegrityVerdict, It as SkillIntegrityGuard, Lt as SkillOutcomeReporter, Vt as SkillStateGuard, bt as RuntimeRun, pn as WebSkillRuntime } from "./index-znZjobkr.js";
3
- import { _ as SkillVersion, a as AuditLog, c as CandidateFile, d as CandidateSource, f as CandidateStatus, g as SkillState, h as SKILL_VERSION_PAGE_SIZE, i as AuditEvent, l as CandidateRisk, m as CompositeApprovalPolicy, n as ApprovalDecision, o as AuditQueryFilter, p as CandidateStore, r as ApprovalPolicy, s as CANDIDATE_PAGE_SIZE, t as AlwaysHumanApprovalPolicy, u as CandidateSkill, v as SkillVersionStore, y as candidateToCatalogEntry } from "./skillVersionStore-Bl-ElD45-dMJ8Ybhb.js";
1
+ import { R as FileSystemProvider, S as UiBridge, U as Page, W as PageQuery, f as LlmMessage, it as SkillCatalogEntry, l as LlmClient, ot as SkillDocument, ut as SkillManagerPort } from "./types-C26b05fW-CdrRCRDb.js";
2
+ import { At as RuntimeRun, En as WebSkillRuntime, J as IntegrityVerdict, Jt as SkillOutcomeReporter, Qt as SkillStateGuard, qt as SkillIntegrityGuard } from "./index-D3mONFHD.js";
3
+ import { _ as SkillState, a as AuditLog, b as SkillVersionStore, c as CandidateFile, d as CandidateSkill, f as CandidateSource, g as SKILL_VERSION_PAGE_SIZE, h as CompositeApprovalPolicy, i as AuditEvent, l as CandidatePage, m as CandidateStore, n as ApprovalDecision, o as AuditQueryFilter, p as CandidateStatus, r as ApprovalPolicy, s as CANDIDATE_PAGE_SIZE, t as AlwaysHumanApprovalPolicy, u as CandidateRisk, v as SkillVersion, x as candidateToCatalogEntry, y as SkillVersionPage } from "./skillVersionStore-D-qHk9ZE-BcmFLykd.js";
4
4
  //#region ../governance/dist/index.d.ts
5
5
  //#region src/candidate/candidateNormalizer.d.ts
6
6
  /** 剥 markdown fence 与 <think> 块、截取首尾 {};非对象 → CANDIDATE_INVALID */
@@ -108,6 +108,8 @@ interface AuditChainVerification {
108
108
  }
109
109
  /** 带断链报告的分页结果(`tolerateBrokenChain` 打开时才可能带上后两个字段) */
110
110
  interface AuditPage extends Page<AuditEvent> {
111
+ /** 筛选后的匹配总数(不分页截断):页码分页需要它算总页数 */
112
+ total: number;
111
113
  chainBrokenAt?: number;
112
114
  chainReason?: string;
113
115
  /**
@@ -150,6 +152,13 @@ declare class FsAuditLog implements AuditLog {
150
152
  * 本页范围内的 hash 链必须自洽:逐条重算 hash 并核对与前一行的 `prevHash` 链接,
151
153
  * 任一处对不上以 `GOVERNANCE_FAILED` 报错。范围之外的断链不在本方法职责内——
152
154
  * 那是 `verifyChain()` 的事(全量 O(N) 校验不该压在每次翻页上)。
155
+ *
156
+ * 边界语义(0.10.0 复核后固化):
157
+ * - `cursor` 是「匹配序列的结束下标」而非稳定指针:翻页间隔内有新事件追加时,
158
+ * 页间可能漂移一条,属追加型数据的固有边界,调用方不要按「稳定快照」实现导出;
159
+ * - `tolerateBrokenChain` 打开且本页检测到断链时,`total` 收缩到断点前
160
+ * (断点及其之后的记录不再可翻出,页码不会指向空页);断点在更后面的页时
161
+ * 本页的 `total` 仍按全量匹配数返回。
153
162
  */
154
163
  query(filter?: AuditQueryFilter & PageQuery): Promise<AuditPage>;
155
164
  /** hash 链完整性校验:逐行重算 hash 并核对 prevHash 链接。**只读**,绝不改写历史 */
@@ -173,6 +182,7 @@ declare const AUDIT_EVENT_TYPES: {
173
182
  readonly skillRepairApplied: "skill.repair_applied";
174
183
  readonly skillQuarantined: "skill.quarantined";
175
184
  readonly skillPolicyDenied: "skill.policy_denied";
185
+ readonly skillUserCaused: "skill.user_caused";
176
186
  readonly skillUninstalled: "skill.uninstalled";
177
187
  readonly skillInstalled: "skill.installed";
178
188
  readonly skillExported: "skill.exported";
@@ -195,6 +205,12 @@ declare const AUDIT_EVENT_TYPES: {
195
205
  readonly candidateSubmitted: "candidate.submitted";
196
206
  readonly candidateApproved: "candidate.approved";
197
207
  readonly candidateRejected: "candidate.rejected";
208
+ readonly pagePerceived: "page.perceived";
209
+ readonly pageAction: "page.action";
210
+ readonly documentRead: "document.read";
211
+ readonly documentSurfaceOpen: "document.surface.open";
212
+ /** 脚本按宿主声明的数据源取数(分册 16);被拒也记,否则反复试探看不见 */
213
+ readonly dataFetched: "data.fetch";
198
214
  };
199
215
  type AuditEventType = (typeof AUDIT_EVENT_TYPES)[keyof typeof AUDIT_EVENT_TYPES];
200
216
  /** 稳定展示序:筛选下拉与文档表格都从这里取,不各自维护一份顺序 */
@@ -245,9 +261,19 @@ declare class RepairPlanner {
245
261
  /**
246
262
  * 用户策略主动拒绝的错误码(FR-12.4):这是配置生效的证据,不是技能有问题,不计入隔离阈值。
247
263
  *
248
- * 集中在这一份常量里而不散在条件判断里,是为了让「哪些码不计数」只有一个事实源。
264
+ * 集中在这一份常量里而不散在条件判断里,是为了让「哪些策略拒绝码不计数」只有一个事实源。
265
+ * (用户自身原因的豁免码见 `USER_CAUSED_CODES`,两类语义不同,不并在一起。)
249
266
  */
250
267
  declare const POLICY_DENIAL_CODES: ReadonlySet<string>;
268
+ /**
269
+ * 用户自身原因的错误码(0.10.0 UI-UX5 #49-2):交互等待超时(用户没处理)与
270
+ * 用户自行取消(ask_user / 交互卡取消)都不是技能的错,不计入隔离阈值。
271
+ *
272
+ * loop 里这两类结局走 RunTerminated 旁路、本来到不了上报口;这里再挡一道,
273
+ * 是因为宿主执行器也可能把「等用户时被取消/超时」包成 ok:false 的失败结果交回来——
274
+ * 「算不算技能的错」的判定口径必须在上报侧只有这一处。
275
+ */
276
+ declare const USER_CAUSED_CODES: ReadonlySet<string>;
251
277
  /** 自动隔离的原因判别式(FR-12.6);人工隔离仍写自由文本 */
252
278
  declare const QUARANTINE_REASONS: {
253
279
  readonly integrity: "integrity";
@@ -274,7 +300,7 @@ declare class SkillStatePolicy {
274
300
  detail?: string;
275
301
  }): Promise<void>;
276
302
  /**
277
- * 失败计数;达阈值(默认 3)→ quarantined + 审计。
303
+ * 失败计数;达阈值(默认 5)→ quarantined + 审计。
278
304
  *
279
305
  * 计数是**连续**而非累计(0.7.0 FR-12.5):一次成功执行经 `clearFailures` 归零,
280
306
  * `setState(name, 'active')` 同样清零。
@@ -320,6 +346,7 @@ declare class SkillStatePolicy {
320
346
  toSkillOutcomeReporter(input?: {
321
347
  actor?: string;
322
348
  policyDenialCodes?: ReadonlySet<string>;
349
+ userCausedCodes?: ReadonlySet<string>;
323
350
  }): SkillOutcomeReporter;
324
351
  /** disabled → SKILL_DISABLED;quarantined → SKILL_QUARANTINED */
325
352
  assertExecutable(skillName: string): Promise<void>;
@@ -493,4 +520,4 @@ declare function createMissHook(deps: {
493
520
  */
494
521
  declare function completeText(llm: LlmClient, messages: LlmMessage[]): Promise<string>;
495
522
  //#endregion
496
- export { AUDIT_EVENT_TYPES, AUDIT_EVENT_TYPE_LIST, AUDIT_PAGE_SIZE, AlwaysHumanApprovalPolicy, type ApprovalDecision, type ApprovalPolicy, type AuditChainVerification, type AuditEvent, type AuditEventType, type AuditLog, type AuditPage, type AuditQueryFilter, CANDIDATE_PAGE_SIZE, type CandidateFile, type CandidateRisk, type CandidateSink, type CandidateSinkOptions, type CandidateSkill, type CandidateSource, type CandidateStatus, CandidateStore, CompositeApprovalPolicy, DependencyGraph, DocumentSkillExtractor, type EvaluationReport, type EvaluationResult, EvaluationRunner, type EvaluationTask, FailureAnalyzer, type FailureDiagnosis, FsAuditLog, type GeneratedSkillSubmission, LlmCandidateGenerator, POLICY_DENIAL_CODES, QUARANTINE_REASONS, type RepairOption, RepairPlanner, SCORING_WEIGHTS, SKILL_VERSION_PAGE_SIZE, type ScoreInput, SimilarityDetector, SkillScorer, type SkillState, SkillStatePolicy, type SkillVersion, SkillVersionStore, type SourceDocument, candidateToCatalogEntry, completeText, createCandidateSink, createMissHook, jaccardSimilarity, normalizeCandidate, normalizeCandidateFiles, normalizeRisk, parseJsonObject, readDocument, sanitizeCandidateName, suggestFromFailedRun, validateCandidate };
523
+ export { AUDIT_EVENT_TYPES, AUDIT_EVENT_TYPE_LIST, AUDIT_PAGE_SIZE, AlwaysHumanApprovalPolicy, type ApprovalDecision, type ApprovalPolicy, type AuditChainVerification, type AuditEvent, type AuditEventType, type AuditLog, type AuditPage, type AuditQueryFilter, CANDIDATE_PAGE_SIZE, type CandidateFile, type CandidatePage, type CandidateRisk, type CandidateSink, type CandidateSinkOptions, type CandidateSkill, type CandidateSource, type CandidateStatus, CandidateStore, CompositeApprovalPolicy, DependencyGraph, DocumentSkillExtractor, type EvaluationReport, type EvaluationResult, EvaluationRunner, type EvaluationTask, FailureAnalyzer, type FailureDiagnosis, FsAuditLog, type GeneratedSkillSubmission, LlmCandidateGenerator, POLICY_DENIAL_CODES, QUARANTINE_REASONS, type RepairOption, RepairPlanner, SCORING_WEIGHTS, SKILL_VERSION_PAGE_SIZE, type ScoreInput, SimilarityDetector, SkillScorer, type SkillState, SkillStatePolicy, type SkillVersion, type SkillVersionPage, SkillVersionStore, type SourceDocument, USER_CAUSED_CODES, candidateToCatalogEntry, completeText, createCandidateSink, createMissHook, jaccardSimilarity, normalizeCandidate, normalizeCandidateFiles, normalizeRisk, parseJsonObject, readDocument, sanitizeCandidateName, suggestFromFailedRun, validateCandidate };
@@ -1,6 +1,6 @@
1
1
  import { M as messageOf, _ as assertSafePathSegment, h as WebSkillError, k as isValidSkillName, v as atomicWriteText } from "./dist-Bev6i6Ip.js";
2
2
  import { a as textParts, n as partsToText } from "./memoryArtifactStore-52Zn9npI-LbCQaqyx.js";
3
- import { n as AUDIT_EVENT_TYPE_LIST, t as AUDIT_EVENT_TYPES } from "./eventTypes-DbOpAECr-BjcjZVms.js";
3
+ import { n as AUDIT_EVENT_TYPE_LIST, t as AUDIT_EVENT_TYPES } from "./eventTypes-FllCrX-Z-DNDeHWoG.js";
4
4
 
5
5
  //#region ../governance/dist/index.js
6
6
  const invalid = (message, details) => {
@@ -105,6 +105,9 @@ function validateCandidate(candidate) {
105
105
  * 治理侧各列表共用的游标切片,形状与会话消息(C1)完全一致:
106
106
  * 无游标给**最新**一页,`nextCursor` 指向更早的历史,页内按时间升序。
107
107
  *
108
+ * 返回值附带筛选后匹配总数 `total`(0.10.0 UI-UX5 #40.12):页码分页的总页数依据,
109
+ * 与 `AuditPage.total` 同一语义(`all` 是已过滤集合,length 即匹配总数)。
110
+ *
108
111
  * 缺省页长由各 store 传入——缺省属于实现,不属于调用方。
109
112
  */
110
113
  function takeTailPage(all, options, defaultLimit, what) {
@@ -118,6 +121,7 @@ function takeTailPage(all, options, defaultLimit, what) {
118
121
  const start = Math.max(0, end - limit);
119
122
  return {
120
123
  items: all.slice(start, end),
124
+ total: all.length,
121
125
  ...start > 0 ? { nextCursor: String(start) } : {}
122
126
  };
123
127
  }
@@ -150,7 +154,10 @@ var CandidateStore = class {
150
154
  */
151
155
  async list(options = {}) {
152
156
  const dir = dirOf$1(this.#root);
153
- if (!await this.#fs.exists(dir)) return { items: [] };
157
+ if (!await this.#fs.exists(dir)) return {
158
+ items: [],
159
+ total: 0
160
+ };
154
161
  const out = [];
155
162
  for (const entry of await this.#fs.list(dir)) {
156
163
  if (entry.type !== "file" || !entry.path.endsWith(".json")) continue;
@@ -435,10 +442,20 @@ var FsAuditLog = class {
435
442
  * 本页范围内的 hash 链必须自洽:逐条重算 hash 并核对与前一行的 `prevHash` 链接,
436
443
  * 任一处对不上以 `GOVERNANCE_FAILED` 报错。范围之外的断链不在本方法职责内——
437
444
  * 那是 `verifyChain()` 的事(全量 O(N) 校验不该压在每次翻页上)。
445
+ *
446
+ * 边界语义(0.10.0 复核后固化):
447
+ * - `cursor` 是「匹配序列的结束下标」而非稳定指针:翻页间隔内有新事件追加时,
448
+ * 页间可能漂移一条,属追加型数据的固有边界,调用方不要按「稳定快照」实现导出;
449
+ * - `tolerateBrokenChain` 打开且本页检测到断链时,`total` 收缩到断点前
450
+ * (断点及其之后的记录不再可翻出,页码不会指向空页);断点在更后面的页时
451
+ * 本页的 `total` 仍按全量匹配数返回。
438
452
  */
439
453
  async query(filter = {}) {
440
454
  const path = fileOf$1(this.#root);
441
- if (!await this.#fs.exists(path)) return { items: [] };
455
+ if (!await this.#fs.exists(path)) return {
456
+ items: [],
457
+ total: 0
458
+ };
442
459
  const raw = await this.#fs.readText(path);
443
460
  /** 按文件行序保留(含解析失败的洞):链校验必须在文件行序上做,不能在筛选结果上做 */
444
461
  const records = [];
@@ -495,6 +512,7 @@ var FsAuditLog = class {
495
512
  }
496
513
  return {
497
514
  items,
515
+ total: broken !== void 0 ? start + items.length : matched.length,
498
516
  ...start > 0 ? { nextCursor: String(start) } : {},
499
517
  ...broken !== void 0 ? {
500
518
  chainBrokenAt: broken.at,
@@ -734,13 +752,23 @@ const fileOf = (root) => `${root}/.webskill/states.json`;
734
752
  /**
735
753
  * 用户策略主动拒绝的错误码(FR-12.4):这是配置生效的证据,不是技能有问题,不计入隔离阈值。
736
754
  *
737
- * 集中在这一份常量里而不散在条件判断里,是为了让「哪些码不计数」只有一个事实源。
755
+ * 集中在这一份常量里而不散在条件判断里,是为了让「哪些策略拒绝码不计数」只有一个事实源。
756
+ * (用户自身原因的豁免码见 `USER_CAUSED_CODES`,两类语义不同,不并在一起。)
738
757
  */
739
758
  const POLICY_DENIAL_CODES = /* @__PURE__ */ new Set([
740
759
  "NETWORK_BLOCKED",
741
760
  "TOOL_NOT_ALLOWED",
742
761
  "FS_PERMISSION_DENIED"
743
762
  ]);
763
+ /**
764
+ * 用户自身原因的错误码(0.10.0 UI-UX5 #49-2):交互等待超时(用户没处理)与
765
+ * 用户自行取消(ask_user / 交互卡取消)都不是技能的错,不计入隔离阈值。
766
+ *
767
+ * loop 里这两类结局走 RunTerminated 旁路、本来到不了上报口;这里再挡一道,
768
+ * 是因为宿主执行器也可能把「等用户时被取消/超时」包成 ok:false 的失败结果交回来——
769
+ * 「算不算技能的错」的判定口径必须在上报侧只有这一处。
770
+ */
771
+ const USER_CAUSED_CODES = /* @__PURE__ */ new Set(["RUN_INTERACTION_TIMEOUT", "RUN_CANCELLED"]);
744
772
  /** 自动隔离的原因判别式(FR-12.6);人工隔离仍写自由文本 */
745
773
  const QUARANTINE_REASONS = {
746
774
  integrity: "integrity",
@@ -763,7 +791,7 @@ var SkillStatePolicy = class {
763
791
  this.#root = deps.root.replace(/\/+$/, "");
764
792
  this.#fs = deps.fs;
765
793
  this.#audit = deps.audit;
766
- this.#failureThreshold = deps.failureThreshold ?? 3;
794
+ this.#failureThreshold = deps.failureThreshold ?? 5;
767
795
  }
768
796
  async #load() {
769
797
  const path = fileOf(this.#root);
@@ -819,7 +847,7 @@ var SkillStatePolicy = class {
819
847
  });
820
848
  }
821
849
  /**
822
- * 失败计数;达阈值(默认 3)→ quarantined + 审计。
850
+ * 失败计数;达阈值(默认 5)→ quarantined + 审计。
823
851
  *
824
852
  * 计数是**连续**而非累计(0.7.0 FR-12.5):一次成功执行经 `clearFailures` 归零,
825
853
  * `setState(name, 'active')` 同样清零。
@@ -921,9 +949,19 @@ var SkillStatePolicy = class {
921
949
  */
922
950
  toSkillOutcomeReporter(input = {}) {
923
951
  const denied = input.policyDenialCodes ?? POLICY_DENIAL_CODES;
952
+ const userCaused = input.userCausedCodes ?? USER_CAUSED_CODES;
924
953
  const actor = input.actor !== void 0 ? { actor: input.actor } : {};
925
954
  return {
926
955
  onSkillFailed: async (report) => {
956
+ if (userCaused.has(report.code)) {
957
+ await this.#audit?.append({
958
+ type: AUDIT_EVENT_TYPES.skillUserCaused,
959
+ target: report.skillName,
960
+ ...actor,
961
+ data: { code: report.code }
962
+ });
963
+ return;
964
+ }
927
965
  if (denied.has(report.code)) {
928
966
  await this.#audit?.append({
929
967
  type: AUDIT_EVENT_TYPES.skillPolicyDenied,
@@ -1231,4 +1269,4 @@ function createMissHook(deps) {
1231
1269
  }
1232
1270
 
1233
1271
  //#endregion
1234
- export { AUDIT_EVENT_TYPES, AUDIT_EVENT_TYPE_LIST, AUDIT_PAGE_SIZE, AlwaysHumanApprovalPolicy, CANDIDATE_PAGE_SIZE, CandidateStore, CompositeApprovalPolicy, DependencyGraph, DocumentSkillExtractor, EvaluationRunner, FailureAnalyzer, FsAuditLog, LlmCandidateGenerator, POLICY_DENIAL_CODES, QUARANTINE_REASONS, RepairPlanner, SCORING_WEIGHTS, SKILL_VERSION_PAGE_SIZE, SimilarityDetector, SkillScorer, SkillStatePolicy, SkillVersionStore, candidateToCatalogEntry, completeText, createCandidateSink, createMissHook, jaccardSimilarity, normalizeCandidate, normalizeCandidateFiles, normalizeRisk, parseJsonObject, readDocument, sanitizeCandidateName, suggestFromFailedRun, validateCandidate };
1272
+ export { AUDIT_EVENT_TYPES, AUDIT_EVENT_TYPE_LIST, AUDIT_PAGE_SIZE, AlwaysHumanApprovalPolicy, CANDIDATE_PAGE_SIZE, CandidateStore, CompositeApprovalPolicy, DependencyGraph, DocumentSkillExtractor, EvaluationRunner, FailureAnalyzer, FsAuditLog, LlmCandidateGenerator, POLICY_DENIAL_CODES, QUARANTINE_REASONS, RepairPlanner, SCORING_WEIGHTS, SKILL_VERSION_PAGE_SIZE, SimilarityDetector, SkillScorer, SkillStatePolicy, SkillVersionStore, USER_CAUSED_CODES, candidateToCatalogEntry, completeText, createCandidateSink, createMissHook, jaccardSimilarity, normalizeCandidate, normalizeCandidateFiles, normalizeRisk, parseJsonObject, readDocument, sanitizeCandidateName, suggestFromFailedRun, validateCandidate };