@gyoungwe/research-suite 0.1.3 → 0.1.6

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 (146) hide show
  1. package/build-manifest.json +2 -2
  2. package/node_modules/@gyoungwe/pi-core/README.md +5 -3
  3. package/node_modules/@gyoungwe/pi-core/build-manifest.json +2 -2
  4. package/node_modules/@gyoungwe/pi-core/dist/index.mjs +435 -151
  5. package/node_modules/@gyoungwe/pi-core/package.json +1 -1
  6. package/node_modules/@gyoungwe/pi-knowledge/build-manifest.json +68 -3
  7. package/node_modules/@gyoungwe/pi-knowledge/dist/core/capability-discovery.d.ts +7 -0
  8. package/node_modules/@gyoungwe/pi-knowledge/dist/core/capability-discovery.d.ts.map +1 -0
  9. package/node_modules/@gyoungwe/pi-knowledge/dist/core/claim-conflicts.d.ts +30 -0
  10. package/node_modules/@gyoungwe/pi-knowledge/dist/core/claim-conflicts.d.ts.map +1 -0
  11. package/node_modules/@gyoungwe/pi-knowledge/dist/core/config.d.ts +55 -0
  12. package/node_modules/@gyoungwe/pi-knowledge/dist/core/config.d.ts.map +1 -0
  13. package/node_modules/@gyoungwe/pi-knowledge/dist/core/daily-discovery-prompt.d.ts +11 -0
  14. package/node_modules/@gyoungwe/pi-knowledge/dist/core/daily-discovery-prompt.d.ts.map +1 -0
  15. package/node_modules/@gyoungwe/pi-knowledge/dist/core/daily-discovery.d.ts +26 -0
  16. package/node_modules/@gyoungwe/pi-knowledge/dist/core/daily-discovery.d.ts.map +1 -0
  17. package/node_modules/@gyoungwe/pi-knowledge/dist/core/deliverable-review.d.ts +127 -0
  18. package/node_modules/@gyoungwe/pi-knowledge/dist/core/deliverable-review.d.ts.map +1 -0
  19. package/node_modules/@gyoungwe/pi-knowledge/dist/core/evolution.d.ts +39 -0
  20. package/node_modules/@gyoungwe/pi-knowledge/dist/core/evolution.d.ts.map +1 -0
  21. package/node_modules/@gyoungwe/pi-knowledge/dist/core/experience-store.d.ts +290 -0
  22. package/node_modules/@gyoungwe/pi-knowledge/dist/core/experience-store.d.ts.map +1 -0
  23. package/node_modules/@gyoungwe/pi-knowledge/dist/core/extension-helpers.d.ts +38 -0
  24. package/node_modules/@gyoungwe/pi-knowledge/dist/core/extension-helpers.d.ts.map +1 -0
  25. package/node_modules/@gyoungwe/pi-knowledge/dist/core/files.d.ts +39 -0
  26. package/node_modules/@gyoungwe/pi-knowledge/dist/core/files.d.ts.map +1 -0
  27. package/node_modules/@gyoungwe/pi-knowledge/dist/core/flow-cards.d.ts +77 -0
  28. package/node_modules/@gyoungwe/pi-knowledge/dist/core/flow-cards.d.ts.map +1 -0
  29. package/node_modules/@gyoungwe/pi-knowledge/dist/core/graph-cache.d.ts +14 -0
  30. package/node_modules/@gyoungwe/pi-knowledge/dist/core/graph-cache.d.ts.map +1 -0
  31. package/node_modules/@gyoungwe/pi-knowledge/dist/core/graph-retrieval.d.ts +44 -0
  32. package/node_modules/@gyoungwe/pi-knowledge/dist/core/graph-retrieval.d.ts.map +1 -0
  33. package/node_modules/@gyoungwe/pi-knowledge/dist/core/host.d.ts +9 -0
  34. package/node_modules/@gyoungwe/pi-knowledge/dist/core/host.d.ts.map +1 -0
  35. package/node_modules/@gyoungwe/pi-knowledge/dist/core/index.d.ts +46 -0
  36. package/node_modules/@gyoungwe/pi-knowledge/dist/core/index.d.ts.map +1 -0
  37. package/node_modules/@gyoungwe/pi-knowledge/dist/core/ingest-frontmatter.d.ts +125 -0
  38. package/node_modules/@gyoungwe/pi-knowledge/dist/core/ingest-frontmatter.d.ts.map +1 -0
  39. package/node_modules/@gyoungwe/pi-knowledge/dist/core/ingest-identity.d.ts +93 -0
  40. package/node_modules/@gyoungwe/pi-knowledge/dist/core/ingest-identity.d.ts.map +1 -0
  41. package/node_modules/@gyoungwe/pi-knowledge/dist/core/ingest-policy.d.ts +63 -0
  42. package/node_modules/@gyoungwe/pi-knowledge/dist/core/ingest-policy.d.ts.map +1 -0
  43. package/node_modules/@gyoungwe/pi-knowledge/dist/core/layout.d.ts +47 -0
  44. package/node_modules/@gyoungwe/pi-knowledge/dist/core/layout.d.ts.map +1 -0
  45. package/node_modules/@gyoungwe/pi-knowledge/dist/core/maintenance.d.ts +16 -0
  46. package/node_modules/@gyoungwe/pi-knowledge/dist/core/maintenance.d.ts.map +1 -0
  47. package/node_modules/@gyoungwe/pi-knowledge/dist/core/memory-note.d.ts +14 -0
  48. package/node_modules/@gyoungwe/pi-knowledge/dist/core/memory-note.d.ts.map +1 -0
  49. package/node_modules/@gyoungwe/pi-knowledge/dist/core/metacognitive-policy.d.ts +116 -0
  50. package/node_modules/@gyoungwe/pi-knowledge/dist/core/metacognitive-policy.d.ts.map +1 -0
  51. package/node_modules/@gyoungwe/pi-knowledge/dist/core/note-title.d.ts +8 -0
  52. package/node_modules/@gyoungwe/pi-knowledge/dist/core/note-title.d.ts.map +1 -0
  53. package/node_modules/@gyoungwe/pi-knowledge/dist/core/orchestration-policy.d.ts +84 -0
  54. package/node_modules/@gyoungwe/pi-knowledge/dist/core/orchestration-policy.d.ts.map +1 -0
  55. package/node_modules/@gyoungwe/pi-knowledge/dist/core/project-identity.d.ts +70 -0
  56. package/node_modules/@gyoungwe/pi-knowledge/dist/core/project-identity.d.ts.map +1 -0
  57. package/node_modules/@gyoungwe/pi-knowledge/dist/core/publication-policy.d.ts +39 -0
  58. package/node_modules/@gyoungwe/pi-knowledge/dist/core/publication-policy.d.ts.map +1 -0
  59. package/node_modules/@gyoungwe/pi-knowledge/dist/core/publication.d.ts +24 -0
  60. package/node_modules/@gyoungwe/pi-knowledge/dist/core/publication.d.ts.map +1 -0
  61. package/node_modules/@gyoungwe/pi-knowledge/dist/core/recent-by-category.d.ts +15 -0
  62. package/node_modules/@gyoungwe/pi-knowledge/dist/core/recent-by-category.d.ts.map +1 -0
  63. package/node_modules/@gyoungwe/pi-knowledge/dist/core/related-notes.d.ts +4 -0
  64. package/node_modules/@gyoungwe/pi-knowledge/dist/core/related-notes.d.ts.map +1 -0
  65. package/node_modules/@gyoungwe/pi-knowledge/dist/core/reuse.d.ts +124 -0
  66. package/node_modules/@gyoungwe/pi-knowledge/dist/core/reuse.d.ts.map +1 -0
  67. package/node_modules/@gyoungwe/pi-knowledge/dist/core/review-policy.d.ts +12 -0
  68. package/node_modules/@gyoungwe/pi-knowledge/dist/core/review-policy.d.ts.map +1 -0
  69. package/node_modules/@gyoungwe/pi-knowledge/dist/core/runtime-host.d.ts +98 -0
  70. package/node_modules/@gyoungwe/pi-knowledge/dist/core/runtime-host.d.ts.map +1 -0
  71. package/node_modules/@gyoungwe/pi-knowledge/dist/core/search-policy.d.ts +14 -0
  72. package/node_modules/@gyoungwe/pi-knowledge/dist/core/search-policy.d.ts.map +1 -0
  73. package/node_modules/@gyoungwe/pi-knowledge/dist/core/semantic-model.d.ts +85 -0
  74. package/node_modules/@gyoungwe/pi-knowledge/dist/core/semantic-model.d.ts.map +1 -0
  75. package/node_modules/@gyoungwe/pi-knowledge/dist/core/semantic-provider.d.ts +41 -0
  76. package/node_modules/@gyoungwe/pi-knowledge/dist/core/semantic-provider.d.ts.map +1 -0
  77. package/node_modules/@gyoungwe/pi-knowledge/dist/core/semantic-settings.d.ts +30 -0
  78. package/node_modules/@gyoungwe/pi-knowledge/dist/core/semantic-settings.d.ts.map +1 -0
  79. package/node_modules/@gyoungwe/pi-knowledge/dist/core/service.d.ts +171 -0
  80. package/node_modules/@gyoungwe/pi-knowledge/dist/core/service.d.ts.map +1 -0
  81. package/node_modules/@gyoungwe/pi-knowledge/dist/core/source-links.d.ts +13 -0
  82. package/node_modules/@gyoungwe/pi-knowledge/dist/core/source-links.d.ts.map +1 -0
  83. package/node_modules/@gyoungwe/pi-knowledge/dist/core/specialist-delivery.d.ts +8 -0
  84. package/node_modules/@gyoungwe/pi-knowledge/dist/core/specialist-delivery.d.ts.map +1 -0
  85. package/node_modules/@gyoungwe/pi-knowledge/dist/core/specialist-host.d.ts +61 -0
  86. package/node_modules/@gyoungwe/pi-knowledge/dist/core/specialist-host.d.ts.map +1 -0
  87. package/node_modules/@gyoungwe/pi-knowledge/dist/core/specialists.d.ts +55 -0
  88. package/node_modules/@gyoungwe/pi-knowledge/dist/core/specialists.d.ts.map +1 -0
  89. package/node_modules/@gyoungwe/pi-knowledge/dist/core/task-feedback.d.ts +57 -0
  90. package/node_modules/@gyoungwe/pi-knowledge/dist/core/task-feedback.d.ts.map +1 -0
  91. package/node_modules/@gyoungwe/pi-knowledge/dist/core/tool-budget.d.ts +24 -0
  92. package/node_modules/@gyoungwe/pi-knowledge/dist/core/tool-budget.d.ts.map +1 -0
  93. package/node_modules/@gyoungwe/pi-knowledge/dist/core/topic-candidate.d.ts +22 -0
  94. package/node_modules/@gyoungwe/pi-knowledge/dist/core/topic-candidate.d.ts.map +1 -0
  95. package/node_modules/@gyoungwe/pi-knowledge/dist/core/topic-memory.d.ts +79 -0
  96. package/node_modules/@gyoungwe/pi-knowledge/dist/core/topic-memory.d.ts.map +1 -0
  97. package/node_modules/@gyoungwe/pi-knowledge/dist/core/topic-probe.d.ts +2 -0
  98. package/node_modules/@gyoungwe/pi-knowledge/dist/core/topic-probe.d.ts.map +1 -0
  99. package/node_modules/@gyoungwe/pi-knowledge/dist/core/ui-service.d.ts +360 -0
  100. package/node_modules/@gyoungwe/pi-knowledge/dist/core/ui-service.d.ts.map +1 -0
  101. package/node_modules/@gyoungwe/pi-knowledge/dist/core/ui-state.d.ts +28 -0
  102. package/node_modules/@gyoungwe/pi-knowledge/dist/core/ui-state.d.ts.map +1 -0
  103. package/node_modules/@gyoungwe/pi-knowledge/dist/core/wiki-model-review.d.ts +167 -0
  104. package/node_modules/@gyoungwe/pi-knowledge/dist/core/wiki-model-review.d.ts.map +1 -0
  105. package/node_modules/@gyoungwe/pi-knowledge/dist/core/wiki-policy.d.ts +34 -0
  106. package/node_modules/@gyoungwe/pi-knowledge/dist/core/wiki-policy.d.ts.map +1 -0
  107. package/node_modules/@gyoungwe/pi-knowledge/dist/core/wiki-review.d.ts +74 -0
  108. package/node_modules/@gyoungwe/pi-knowledge/dist/core/wiki-review.d.ts.map +1 -0
  109. package/node_modules/@gyoungwe/pi-knowledge/dist/core/worker.d.ts +2 -0
  110. package/node_modules/@gyoungwe/pi-knowledge/dist/core/worker.d.ts.map +1 -0
  111. package/node_modules/@gyoungwe/pi-knowledge/dist/extension/internal-knowledge-extension.d.ts +42 -0
  112. package/node_modules/@gyoungwe/pi-knowledge/dist/extension/internal-knowledge-extension.d.ts.map +1 -0
  113. package/node_modules/@gyoungwe/pi-knowledge/dist/extension/knowledge-extension.d.ts +5 -0
  114. package/node_modules/@gyoungwe/pi-knowledge/dist/extension/knowledge-extension.d.ts.map +1 -0
  115. package/node_modules/@gyoungwe/pi-knowledge/dist/extension/knowledge-worker.d.ts +6 -0
  116. package/node_modules/@gyoungwe/pi-knowledge/dist/extension/knowledge-worker.d.ts.map +1 -0
  117. package/node_modules/@gyoungwe/pi-knowledge/dist/host.d.ts +7 -0
  118. package/node_modules/@gyoungwe/pi-knowledge/dist/host.d.ts.map +1 -0
  119. package/node_modules/@gyoungwe/pi-knowledge/dist/host.mjs +11638 -0
  120. package/node_modules/@gyoungwe/pi-knowledge/dist/index.d.ts +6 -0
  121. package/node_modules/@gyoungwe/pi-knowledge/dist/index.d.ts.map +1 -0
  122. package/node_modules/@gyoungwe/pi-knowledge/dist/index.mjs +4728 -10301
  123. package/node_modules/@gyoungwe/pi-knowledge/dist/maintenance/plan.d.ts +41 -0
  124. package/node_modules/@gyoungwe/pi-knowledge/dist/maintenance/plan.d.ts.map +1 -0
  125. package/node_modules/@gyoungwe/pi-knowledge/dist/maintenance/prompts.d.ts +10 -0
  126. package/node_modules/@gyoungwe/pi-knowledge/dist/maintenance/prompts.d.ts.map +1 -0
  127. package/node_modules/@gyoungwe/pi-knowledge/dist/maintenance/run.d.ts +31 -0
  128. package/node_modules/@gyoungwe/pi-knowledge/dist/maintenance/run.d.ts.map +1 -0
  129. package/node_modules/@gyoungwe/pi-knowledge/lib/knowledge/runtime/.knowledge-worker-manifest.json +9 -0
  130. package/node_modules/@gyoungwe/pi-knowledge/lib/knowledge/runtime/worker.mjs +142 -12
  131. package/node_modules/@gyoungwe/pi-knowledge/package.json +21 -3
  132. package/node_modules/@gyoungwe/pi-knowledge/plugin.manifest.json +23 -1
  133. package/node_modules/@gyoungwe/pi-research/build-manifest.json +2 -2
  134. package/node_modules/@gyoungwe/pi-research/dist/index.mjs +3141 -613
  135. package/node_modules/@gyoungwe/pi-research/package.json +1 -1
  136. package/node_modules/@gyoungwe/plugin-api/dist/index.d.ts +101 -0
  137. package/node_modules/@gyoungwe/plugin-api/dist/index.d.ts.map +1 -1
  138. package/node_modules/@gyoungwe/plugin-api/dist/index.js +124 -0
  139. package/node_modules/@gyoungwe/plugin-api/dist/index.js.map +1 -1
  140. package/node_modules/@gyoungwe/plugin-api/dist/knowledge.d.ts +486 -0
  141. package/node_modules/@gyoungwe/plugin-api/dist/knowledge.d.ts.map +1 -0
  142. package/node_modules/@gyoungwe/plugin-api/dist/knowledge.js +251 -0
  143. package/node_modules/@gyoungwe/plugin-api/dist/knowledge.js.map +1 -0
  144. package/node_modules/@gyoungwe/plugin-api/package.json +6 -1
  145. package/package.json +58 -44
  146. package/plugin.manifest.json +39 -3
@@ -0,0 +1,125 @@
1
+ /**
2
+ * 知识入库标准的 frontmatter 规范(schema `drone-note/1`):解析受限 YAML、校验与规范化、确定性序列化。
3
+ * 只覆盖 Obsidian frontmatter 常见写法(映射、列表、行内列表、引号字符串、注释),不执行任何 YAML 标签或锚点。
4
+ * 纯函数,不读写文件。
5
+ */
6
+ import { type KnowledgeIdentity } from "./ingest-identity.js";
7
+ export declare const NOTE_SCHEMA = "drone-note/1";
8
+ /** 知识类(K)笔记类型。 */
9
+ export declare const KNOWLEDGE_TYPES: readonly ["paper", "method", "software", "dataset", "concept", "entity", "idea", "claim", "evidence", "decision", "question", "wiki"];
10
+ /** 运行结果类(R)笔记类型:运行中心笔记、产物指针、展示层讲解。 */
11
+ export declare const RUN_RESULT_TYPES: readonly ["run", "artifact", "explainer"];
12
+ export declare const NOTE_TYPES: readonly ["paper", "method", "software", "dataset", "concept", "entity", "idea", "claim", "evidence", "decision", "question", "wiki", "run", "artifact", "explainer"];
13
+ export type KnowledgeType = (typeof KNOWLEDGE_TYPES)[number];
14
+ export type RunResultType = (typeof RUN_RESULT_TYPES)[number];
15
+ export type NoteType = (typeof NOTE_TYPES)[number];
16
+ /** 分类:知识 / 运行结果 / 临时内容。临时内容不写入 Vault,因此不是合法的 frontmatter `class`。 */
17
+ export type IngestClass = "knowledge" | "run-result" | "ephemeral";
18
+ export type NoteClass = Exclude<IngestClass, "ephemeral">;
19
+ export declare const NOTE_STATUSES: readonly ["candidate", "verified", "stale", "superseded", "archived"];
20
+ export type NoteStatus = (typeof NOTE_STATUSES)[number];
21
+ export declare const NOTE_CONFIDENCE: readonly ["high", "medium", "low"];
22
+ export type NoteConfidence = (typeof NOTE_CONFIDENCE)[number];
23
+ export interface NoteSource {
24
+ doi?: string;
25
+ pmid?: string;
26
+ pmcid?: string;
27
+ arxiv?: string;
28
+ isbn?: string;
29
+ zotero_key?: string;
30
+ url?: string;
31
+ /** Vault 相对路径(`Library/Papers/x.md`)。 */
32
+ vault?: string;
33
+ /** 运行目录内的相对路径(`results/...`)。 */
34
+ file?: string;
35
+ sha256?: string;
36
+ /** 页码、章节、行号等定位。 */
37
+ locator?: string;
38
+ }
39
+ export interface CreatedFrom {
40
+ session?: string;
41
+ run?: string;
42
+ task?: string;
43
+ tool?: string;
44
+ turn?: number;
45
+ }
46
+ export interface NoteFrontmatter {
47
+ schema: typeof NOTE_SCHEMA;
48
+ id?: string;
49
+ type: NoteType;
50
+ class: NoteClass;
51
+ /** `shared` 或规范项目 slug。 */
52
+ project: string;
53
+ status: NoteStatus;
54
+ confidence?: NoteConfidence;
55
+ tags: string[];
56
+ aliases: string[];
57
+ identity: KnowledgeIdentity;
58
+ sources: NoteSource[];
59
+ created_from?: CreatedFrom;
60
+ derived_from: string[];
61
+ content_sha256?: string;
62
+ created?: string;
63
+ updated?: string;
64
+ }
65
+ export declare const FRONTMATTER_KEY_ORDER: readonly ["schema", "id", "type", "class", "project", "status", "confidence", "tags", "aliases", "identity", "sources", "created_from", "derived_from", "content_sha256", "created", "updated"];
66
+ export declare const PROJECT_SLUG: RegExp;
67
+ export declare function isKnowledgeType(value: unknown): value is KnowledgeType;
68
+ export declare function isNoteType(value: unknown): value is NoteType;
69
+ /** 类型对应的默认分类。 */
70
+ export declare function classForType(type: NoteType): NoteClass;
71
+ export interface FrontmatterSplit {
72
+ /** 没有 frontmatter 时为 null。 */
73
+ raw: string | null;
74
+ body: string;
75
+ }
76
+ /** 拆出开头的 frontmatter 块。第一行必须是 `---`,以 `---` 或 `...` 结束。 */
77
+ export declare function splitFrontmatter(text: string): FrontmatterSplit;
78
+ export interface ParsedFrontmatter {
79
+ data: Record<string, unknown> | null;
80
+ body: string;
81
+ errors: string[];
82
+ }
83
+ /** 解析一篇笔记的 frontmatter。语法错误不抛异常,而是放进 `errors`,`data` 为 null。 */
84
+ export declare function parseFrontmatter(text: string): ParsedFrontmatter;
85
+ export interface FrontmatterValidation {
86
+ /** 有错误时为 null。 */
87
+ value: NoteFrontmatter | null;
88
+ errors: string[];
89
+ warnings: string[];
90
+ }
91
+ /** Obsidian 标签:去掉 `#`,空白换成 `-`,只允许字母数字、`_`、`-`、`/`,不能是纯数字;统一小写。 */
92
+ export declare function normalizeTag(input: unknown): string | null;
93
+ /**
94
+ * 校验并规范化 frontmatter(通常是 {@link parseFrontmatter} 的 `data`)。
95
+ * - 缺少 `class` 时按 `type` 推导;`class` 与 `type` 矛盾报错。
96
+ * - 旧状态值(draft/generated…)映射到新状态并给出 warning。
97
+ * - `identity` 与 `sources` 中的标识全部规范化;`identity` 缺失时从 `sources` 推导。
98
+ */
99
+ export declare function validateFrontmatter(input: unknown, options?: {
100
+ body?: string;
101
+ }): FrontmatterValidation;
102
+ export interface BuildFrontmatterInput {
103
+ type: NoteType;
104
+ project: string;
105
+ id?: string;
106
+ status?: NoteStatus;
107
+ confidence?: NoteConfidence;
108
+ tags?: readonly string[];
109
+ aliases?: readonly string[];
110
+ identity?: KnowledgeIdentity;
111
+ sources?: readonly unknown[];
112
+ createdFrom?: CreatedFrom;
113
+ derivedFrom?: readonly string[];
114
+ /** 提供正文时自动计算 `content_sha256`。 */
115
+ body?: string;
116
+ created?: string;
117
+ updated?: string;
118
+ }
119
+ /** 由宿主写入方使用:构建一个已规范化的 frontmatter;不合法时抛出包含所有错误的异常。 */
120
+ export declare function buildFrontmatter(input: BuildFrontmatterInput): NoteFrontmatter;
121
+ /** 确定性序列化(固定键顺序、字符串一律 JSON 双引号),返回带 `---` 分隔线的块,末尾有换行。 */
122
+ export declare function serializeFrontmatter(frontmatter: NoteFrontmatter): string;
123
+ /** frontmatter + 正文,组成一篇笔记的完整文本。 */
124
+ export declare function renderNote(frontmatter: NoteFrontmatter, body: string): string;
125
+ //# sourceMappingURL=ingest-frontmatter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ingest-frontmatter.d.ts","sourceRoot":"","sources":["../../src/core/ingest-frontmatter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,93 @@
1
+ /** 去重用的外部标识。字段名与 frontmatter `identity` 一致(snake_case)。 */
2
+ export interface KnowledgeIdentity {
3
+ doi?: string;
4
+ pmid?: string;
5
+ pmcid?: string;
6
+ arxiv?: string;
7
+ isbn?: string;
8
+ zotero_key?: string;
9
+ url?: string;
10
+ }
11
+ export declare const IDENTITY_FIELDS: readonly ["doi", "pmid", "pmcid", "arxiv", "isbn", "zotero_key", "url"];
12
+ export type IdentityField = (typeof IDENTITY_FIELDS)[number];
13
+ /**
14
+ * DOI → 小写裸 DOI(`10.xxxx/...`)。接受 `doi:` 前缀、doi.org / dx.doi.org 链接与 URL 编码;
15
+ * 去掉句末标点。无法识别时返回 null。
16
+ */
17
+ export declare function normalizeDoi(input: unknown): string | null;
18
+ /** PMID → 纯数字字符串。接受 `PMID: 123`、`pmid:123`、PubMed 链接。 */
19
+ export declare function normalizePmid(input: unknown): string | null;
20
+ /** PMCID → `PMC` + 数字(大写)。 */
21
+ export declare function normalizePmcid(input: unknown): string | null;
22
+ /**
23
+ * arXiv → 不带版本号的标识:新式 `2401.01234`,旧式 `hep-th/9901001`。
24
+ * 接受 `arXiv:` 前缀与 arxiv.org/abs|pdf 链接。
25
+ */
26
+ export declare function normalizeArxiv(input: unknown): string | null;
27
+ /** ISBN → 校验通过的 ISBN-13(ISBN-10 自动转换)。 */
28
+ export declare function normalizeIsbn(input: unknown): string | null;
29
+ /** Zotero item key:8 位字母数字(与 `research_deposit_knowledge` 的校验一致)。 */
30
+ export declare function normalizeZoteroKey(input: unknown): string | null;
31
+ /**
32
+ * URL → 去重用的规范形式:只接受 http(s),统一为 https,主机小写并去掉 `www.`,去掉默认端口、
33
+ * 片段、跟踪参数,查询参数排序,路径去掉末尾 `/`。DOI 链接请先用 {@link normalizeDoi}。
34
+ */
35
+ export declare function normalizeUrl(input: unknown): string | null;
36
+ /** 把任意一个来源字符串识别成最具体的标识(DOI > PMID > PMCID > arXiv > ISBN > URL)。 */
37
+ export declare function identifyReference(input: unknown): {
38
+ field: IdentityField;
39
+ value: string;
40
+ } | null;
41
+ export interface ExtractedIdentifiers {
42
+ doi: string[];
43
+ pmid: string[];
44
+ pmcid: string[];
45
+ arxiv: string[];
46
+ url: string[];
47
+ }
48
+ /** 从一段正文中抽取所有可识别的标识(每类最多 64 个,按出现顺序去重)。 */
49
+ export declare function extractIdentifiers(text: unknown): ExtractedIdentifiers;
50
+ /** 规范化一个 identity 对象:未知字段丢弃,无效值丢弃。 */
51
+ export declare function normalizeIdentity(input: unknown): KnowledgeIdentity;
52
+ /** 从来源字符串列表推导 identity:每类取第一个。 */
53
+ export declare function identityFromReferences(references: readonly unknown[]): KnowledgeIdentity;
54
+ /** 标题去重键:NFKC、小写、只保留字母数字(含中文),空白折叠。 */
55
+ export declare function normalizeTitleKey(title: unknown): string;
56
+ /**
57
+ * 去重键,按可信度从高到低排列:`doi:` > `pmid:` > `pmcid:` > `arxiv:` > `isbn:` > `zotero:` > `url:` >
58
+ * `title:<type>:`。第一个是主键;任一键相同即视为同一对象。
59
+ */
60
+ export declare function identityKeys(identity: KnowledgeIdentity, options?: {
61
+ type?: string | null;
62
+ title?: string | null;
63
+ }): string[];
64
+ /** 两个对象是否同一(任一去重键相同)。 */
65
+ export declare function sameIdentity(a: {
66
+ identity?: KnowledgeIdentity;
67
+ type?: string | null;
68
+ title?: string | null;
69
+ }, b: {
70
+ identity?: KnowledgeIdentity;
71
+ type?: string | null;
72
+ title?: string | null;
73
+ }): boolean;
74
+ /** 去掉开头 frontmatter 块(`---` … `---`/`...`),返回正文。 */
75
+ export declare function stripFrontmatter(text: string): string;
76
+ /**
77
+ * 正文内容哈希(`content_sha256`):去掉 frontmatter、换行统一为 LF、去掉行尾空白与首尾空行后取 sha256。
78
+ * 只改 frontmatter 或换行风格不会改变哈希。
79
+ */
80
+ export declare function contentHash(text: string): string;
81
+ export interface ClaimHashInput {
82
+ subject?: unknown;
83
+ predicate?: unknown;
84
+ value?: unknown;
85
+ organism?: unknown;
86
+ tissue?: unknown;
87
+ stage?: unknown;
88
+ method?: unknown;
89
+ sourceHash?: unknown;
90
+ }
91
+ /** 结论去重键:主语、谓词、取值、条件(物种/组织/阶段/方法)与来源哈希规范化后取 sha256。 */
92
+ export declare function claimHash(claim: ClaimHashInput): string;
93
+ //# sourceMappingURL=ingest-identity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ingest-identity.d.ts","sourceRoot":"","sources":["../../src/core/ingest-identity.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,63 @@
1
+ import { type IngestClass, type KnowledgeType, type NoteType } from "./ingest-frontmatter.js";
2
+ /** 运行结果的用途(与 inquiry `ArtifactPurpose` 对齐,另加日志、来源、摘要、卡片和展示层)。 */
3
+ export type IngestPurpose = "deliverable" | "intermediate" | "log" | "source" | "summary" | "cards" | "presentation" | "navigation";
4
+ export type IngestRule = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9;
5
+ export declare const INGEST_RULES: Readonly<Record<IngestRule, string>>;
6
+ export interface IngestOrigin {
7
+ /** 产生内容的工具,如 `research_deposit_knowledge`、`research_summarize_run`。 */
8
+ tool?: string;
9
+ /** 工具参数里的类型(deposit 的 `type`)。 */
10
+ type?: string;
11
+ /** inquiry 账本记录(规则 8)。 */
12
+ inquiry?: {
13
+ kind: "finding" | "decision";
14
+ /** finding.reviewStatus 或 decision.status。 */
15
+ status: string;
16
+ };
17
+ }
18
+ export interface IngestInput {
19
+ /** 相对路径(工作区或 Vault),`/` 或 `\` 分隔均可。inquiry 记录可以为空。 */
20
+ path?: string;
21
+ /** 路径所在位置;`vault` 时启用规范目录判定(规则 2)。缺省按路径推断。 */
22
+ location?: "vault" | "workspace";
23
+ origin?: IngestOrigin;
24
+ /** Markdown 正文(可含 frontmatter)。用于规则 2 与规则 7。 */
25
+ text?: string;
26
+ /** 已解析的 frontmatter(优先于从 `text` 解析)。 */
27
+ frontmatter?: Record<string, unknown> | null;
28
+ /** 文件是否命中某个任务里程碑的验收(决定数据/图表是 deliverable 还是 intermediate)。 */
29
+ acceptance?: boolean;
30
+ /** 调用方已确认文件位于某个运行目录内。缺省按路径中的 `results/`、`runs/`、`run-*` 推断。 */
31
+ inRunDir?: boolean;
32
+ }
33
+ export interface IngestDecision {
34
+ class: IngestClass;
35
+ /** 推断出的笔记类型;运行产物文件和临时内容为 null。 */
36
+ type: NoteType | null;
37
+ purpose: IngestPurpose | null;
38
+ rule: IngestRule;
39
+ ruleId: string;
40
+ /** 是知识候选(需要经过质量门 / 审核队列),而不是已确认的知识。 */
41
+ candidate: boolean;
42
+ /** 运行结果容器里含有可抽取的知识原子(如逐篇证据卡)。 */
43
+ extractAtoms: boolean;
44
+ reasons: string[];
45
+ }
46
+ export declare const CANDIDATE_MIN_CHARS = 300;
47
+ /**
48
+ * 按九条有序规则分类。
49
+ *
50
+ * 1. 临时路径(tmp/、.cache/、scratch/、*.tmp …)→ ephemeral
51
+ * 2. 显式声明:frontmatter `class`/`type`,或 Vault 规范目录 → 按声明
52
+ * 3. 工具来源(deposit / Wiki 提议 → knowledge;summarize / archive_source / research_loop / 讲解 → run-result)
53
+ * 4. 运行记录文件名(search-log、*receipts*、metadata.json、manifest、failures、SUMMARY.md …)→ run-result
54
+ * 5. 卡片容器(evidence-cards.md、*-cards.md、claims.md)→ run-result,并标记可抽取知识原子
55
+ * 6. 数据 / 图表后缀 → run-result(命中验收为 deliverable,否则 intermediate)
56
+ * 7. 带来源、≥300 字、含方法或结论标题的 Markdown → knowledge 候选
57
+ * 8. inquiry 中已复核的 finding / 已确认的 decision → knowledge(claim / decision)
58
+ * 9. 兜底:在运行目录内 → run-result(intermediate),否则 ephemeral
59
+ */
60
+ export declare function classifyIngest(input: IngestInput): IngestDecision;
61
+ /** 便于文档与 UI 展示:所有知识类型。 */
62
+ export declare const INGEST_KNOWLEDGE_TYPES: readonly KnowledgeType[];
63
+ //# sourceMappingURL=ingest-policy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ingest-policy.d.ts","sourceRoot":"","sources":["../../src/core/ingest-policy.ts"],"names":[],"mappings":"AAMA,OAAO,EAEN,KAAK,WAAW,EAIhB,KAAK,aAAa,EAClB,KAAK,QAAQ,EAEb,MAAM,yBAAyB,CAAC;AAEjC,iEAAiE;AACjE,MAAM,MAAM,aAAa,GACtB,aAAa,GACb,cAAc,GACd,KAAK,GACL,QAAQ,GACR,SAAS,GACT,OAAO,GACP,cAAc,GACd,YAAY,CAAC;AAEhB,MAAM,MAAM,UAAU,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAE3D,eAAO,MAAM,YAAY,EAAE,QAAQ,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAU7D,CAAC;AAEF,MAAM,WAAW,YAAY;IAC5B,uEAAuE;IACvE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,kCAAkC;IAClC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,0BAA0B;IAC1B,OAAO,CAAC,EAAE;QACT,IAAI,EAAE,SAAS,GAAG,UAAU,CAAC;QAC7B,8CAA8C;QAC9C,MAAM,EAAE,MAAM,CAAC;KACf,CAAC;CACF;AAED,MAAM,WAAW,WAAW;IAC3B,sDAAsD;IACtD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,8CAA8C;IAC9C,QAAQ,CAAC,EAAE,OAAO,GAAG,WAAW,CAAC;IACjC,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,gDAAgD;IAChD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,wCAAwC;IACxC,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC7C,8DAA8D;IAC9D,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,+DAA+D;IAC/D,QAAQ,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC9B,KAAK,EAAE,WAAW,CAAC;IACnB,kCAAkC;IAClC,IAAI,EAAE,QAAQ,GAAG,IAAI,CAAC;IACtB,OAAO,EAAE,aAAa,GAAG,IAAI,CAAC;IAC9B,IAAI,EAAE,UAAU,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,uCAAuC;IACvC,SAAS,EAAE,OAAO,CAAC;IACnB,iCAAiC;IACjC,YAAY,EAAE,OAAO,CAAC;IACtB,OAAO,EAAE,MAAM,EAAE,CAAC;CAClB;AAwID,eAAO,MAAM,mBAAmB,MAAM,CAAC;AAiFvC;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,WAAW,GAAG,cAAc,CA2FjE;AAED,0BAA0B;AAC1B,eAAO,MAAM,sBAAsB,EAAE,SAAS,aAAa,EAAoB,CAAC"}
@@ -0,0 +1,47 @@
1
+ type ContainedFile = (root: string, path: string) => Promise<string>;
2
+ type CreateOnly = (path: string, content: string) => Promise<boolean>;
3
+ type UpdateNavigation = (root: string, path: string, heading: string, body: string) => Promise<NavigationUpdateResult>;
4
+ export interface NavigationUpdateResult {
5
+ path: string;
6
+ changed: boolean;
7
+ }
8
+ /** Raised when a conditional Vault write observes a newer local version. */
9
+ export declare class VaultFileConflictError extends Error {
10
+ readonly code: "conflict";
11
+ constructor(path: string);
12
+ }
13
+ export interface ReplaceVaultFileOptions {
14
+ /** SHA-256 of the version the caller showed to the user. */
15
+ expectedHash?: string;
16
+ /** Test seam used to deterministically model an editor write before commit. */
17
+ beforeCommit?: () => void | Promise<void>;
18
+ }
19
+ /**
20
+ * Filesystem seams for embedding layout initialization in a host runtime.
21
+ * The defaults enforce Vault containment and create-only semantics. Hosts can
22
+ * inject the same contracts when they already own a filesystem abstraction.
23
+ */
24
+ export interface KnowledgeLayoutDependencies {
25
+ containedFile?: ContainedFile;
26
+ createOnly?: CreateOnly;
27
+ updateNavigation?: UpdateNavigation;
28
+ }
29
+ /** Resolve a Vault-relative destination without following it outside Vault. */
30
+ export declare function containedVaultFile(root: string, path: string): Promise<string>;
31
+ /** Atomically create a regular file, preserving an existing human-edited file. */
32
+ export declare function createVaultFileOnly(path: string, content: string): Promise<boolean>;
33
+ /**
34
+ * Atomically replace an existing regular Vault file with an optional content CAS.
35
+ *
36
+ * The second hash check runs immediately before rename. It closes the stale-preview
37
+ * window for callers that show a version before asking for confirmation; if another
38
+ * writer changes the file during that window, the write is rejected and the caller
39
+ * can report a conflict without replacing the newer edit.
40
+ */
41
+ export declare function replaceVaultFile(path: string, content: string, options?: ReplaceVaultFileOptions): Promise<void>;
42
+ /** Update only the managed navigation block, preserving human-authored text. */
43
+ export declare function updateVaultNavigation(vault: string, path: string, heading: string, body: string, containedFile?: ContainedFile): Promise<NavigationUpdateResult>;
44
+ export declare function initializeSharedNavigation(vault: string, dependencies?: KnowledgeLayoutDependencies): Promise<void>;
45
+ export declare function initializeProjectContext(vault: string, project: string, dependencies?: KnowledgeLayoutDependencies): Promise<void>;
46
+ export {};
47
+ //# sourceMappingURL=layout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../../src/core/layout.ts"],"names":[],"mappings":"AAqBA,KAAK,aAAa,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;AACrE,KAAK,UAAU,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;AACtE,KAAK,gBAAgB,GAAG,CACvB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,KACR,OAAO,CAAC,sBAAsB,CAAC,CAAC;AAErC,MAAM,WAAW,sBAAsB;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;CACjB;AAED,4EAA4E;AAC5E,qBAAa,sBAAuB,SAAQ,KAAK;IAChD,QAAQ,CAAC,IAAI,EAAG,UAAU,CAAU;gBAExB,IAAI,EAAE,MAAM;CAIxB;AAED,MAAM,WAAW,uBAAuB;IACvC,4DAA4D;IAC5D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,+EAA+E;IAC/E,YAAY,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1C;AAED;;;;GAIG;AACH,MAAM,WAAW,2BAA2B;IAC3C,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;CACpC;AAmBD,+EAA+E;AAC/E,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAMpF;AAED,kFAAkF;AAClF,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAgBzF;AAED;;;;;;;GAOG;AACH,wBAAsB,gBAAgB,CACrC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,uBAA4B,GACnC,OAAO,CAAC,IAAI,CAAC,CAmBf;AAQD,gFAAgF;AAChF,wBAAsB,qBAAqB,CAC1C,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACZ,aAAa,GAAE,aAAkC,GAC/C,OAAO,CAAC,sBAAsB,CAAC,CA0CjC;AAeD,wBAAsB,0BAA0B,CAC/C,KAAK,EAAE,MAAM,EACb,YAAY,GAAE,2BAAgC,GAC5C,OAAO,CAAC,IAAI,CAAC,CAkBf;AAED,wBAAsB,wBAAwB,CAC7C,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,YAAY,GAAE,2BAAgC,GAC5C,OAAO,CAAC,IAAI,CAAC,CAOf"}
@@ -0,0 +1,16 @@
1
+ export declare function updateNavigation(vault: any, path: any, heading: any, body: any): Promise<{
2
+ path: any;
3
+ changed: boolean;
4
+ }>;
5
+ export declare function runNavigationMaintenance(service: any, project: any, limit?: number): Promise<{
6
+ navigation: ({
7
+ path: any;
8
+ changed: boolean;
9
+ } | {
10
+ path: any;
11
+ error: any;
12
+ })[];
13
+ semanticWikiRewritten: boolean;
14
+ remaining: any;
15
+ }>;
16
+ //# sourceMappingURL=maintenance.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"maintenance.d.ts","sourceRoot":"","sources":["../../src/core/maintenance.ts"],"names":[],"mappings":"AAUA,wBAAsB,gBAAgB,CAAC,KAAK,KAAA,EAAE,IAAI,KAAA,EAAE,OAAO,KAAA,EAAE,IAAI,KAAA;;;GAwChE;AACD,wBAAsB,wBAAwB,CAAC,OAAO,KAAA,EAAE,OAAO,KAAA,EAAE,KAAK,SAAI;;;;;;;;;;GAkCzE"}
@@ -0,0 +1,14 @@
1
+ /** 观察记忆 → 知识库笔记(单向沉淀)。纯函数,便于测试。 */
2
+ export interface MemoryNoteInput {
3
+ id: number;
4
+ kind: string;
5
+ title: string;
6
+ body: string;
7
+ sessionId?: string;
8
+ createdAt: number;
9
+ files?: string[];
10
+ }
11
+ export declare function memoryNoteSlug(memory: Pick<MemoryNoteInput, "id" | "title">): string;
12
+ /** 笔记正文:frontmatter(type: memory + 来源)、摘要、涉及文件、相关笔记的 [[链接]](知识网络据此连边)。 */
13
+ export declare function memoryNoteMarkdown(memory: MemoryNoteInput, related?: string[]): string;
14
+ //# sourceMappingURL=memory-note.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-note.d.ts","sourceRoot":"","sources":["../../src/core/memory-note.ts"],"names":[],"mappings":"AAAA,mCAAmC;AACnC,MAAM,WAAW,eAAe;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAID,wBAAgB,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,eAAe,EAAE,IAAI,GAAG,OAAO,CAAC,GAAG,MAAM,CAQpF;AAED,0EAA0E;AAC1E,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,eAAe,EAAE,OAAO,GAAE,MAAM,EAAO,GAAG,MAAM,CA6B1F"}
@@ -0,0 +1,116 @@
1
+ /**
2
+ * Deterministic publication checks for host-observed research claims.
3
+ *
4
+ * The host supplies this snapshot; the policy never executes a workflow or
5
+ * infers scientific truth. It only compares the final draft with bounded,
6
+ * current receipts and returns actionable, redacted diffs. A finding that
7
+ * passes these structural checks is citable evidence of what was observed,
8
+ * never a claim that the underlying science is true.
9
+ */
10
+ export type MetacognitiveLabel = "exploratory" | "validation" | "validated" | "overturned" | "unstable";
11
+ export type MetacognitiveUseRole = "evidence" | "exploratory" | "validation" | "conclusion";
12
+ export interface MetacognitiveArtifactNumber {
13
+ value: number | string;
14
+ tolerance?: number;
15
+ }
16
+ export interface MetacognitiveArtifact {
17
+ path: string;
18
+ /** Inquiry lineage status; pending review is never publishable. */
19
+ status?: "valid" | "superseded" | "cleanup-candidate" | "archived" | "pending-review";
20
+ /** Hash recorded when the artifact was cited. */
21
+ sha256?: string;
22
+ /** Hash observed immediately before publication. */
23
+ currentSha256?: string;
24
+ /** Human confirmation metadata retained with a previously revoked artifact. */
25
+ reviews?: readonly {
26
+ decisionId: string;
27
+ confirmedBy: "user";
28
+ confirmedAt: string;
29
+ }[];
30
+ /** Reproducibility is advisory; a missing receipt never bypasses fail-closed checks. */
31
+ reproducibility?: "reproducible" | "partial" | "not-reproducible";
32
+ /** Optional bounded text/number index supplied by the host. */
33
+ text?: string;
34
+ numbers?: readonly MetacognitiveArtifactNumber[];
35
+ /** Optional current-turn read receipt reference for source citations. */
36
+ receiptId?: string;
37
+ }
38
+ export interface MetacognitiveNumberClaim {
39
+ id?: string;
40
+ value: number | string;
41
+ /** Exact representation expected in the final answer (supports rounding). */
42
+ rendered?: string;
43
+ artifactPath: string;
44
+ rounding?: {
45
+ digits?: number;
46
+ tolerance?: number;
47
+ };
48
+ }
49
+ export interface MetacognitiveExecutedWorkflow {
50
+ workflows?: readonly string[];
51
+ modules?: readonly string[];
52
+ params?: Readonly<Record<string, unknown>>;
53
+ }
54
+ export interface MetacognitiveMethodClaim {
55
+ id?: string;
56
+ /** A bounded method sentence from the final answer. */
57
+ description: string;
58
+ workflow?: string;
59
+ modules?: readonly string[];
60
+ params?: Readonly<Record<string, unknown>>;
61
+ }
62
+ export interface MetacognitiveFinding {
63
+ id: string;
64
+ text: string;
65
+ label: MetacognitiveLabel;
66
+ citationPaths?: readonly string[];
67
+ }
68
+ export interface MetacognitiveFindingUse {
69
+ findingId: string;
70
+ role: MetacognitiveUseRole;
71
+ }
72
+ export interface MetacognitiveDiagnostic {
73
+ id: string;
74
+ reported: unknown;
75
+ observed: unknown;
76
+ }
77
+ export interface MetacognitiveSnapshot {
78
+ /** A host may turn this off for operational/setup turns. */
79
+ enabled?: boolean;
80
+ artifacts?: readonly MetacognitiveArtifact[];
81
+ numbers?: readonly MetacognitiveNumberClaim[];
82
+ executed?: MetacognitiveExecutedWorkflow;
83
+ methods?: readonly MetacognitiveMethodClaim[];
84
+ findings?: readonly MetacognitiveFinding[];
85
+ uses?: readonly MetacognitiveFindingUse[];
86
+ diagnostics?: readonly MetacognitiveDiagnostic[];
87
+ }
88
+ export type MetacognitiveFailureCode = "report-number-unbound" | "artifact-checksum-stale" | "method-mismatch" | "finding-label-conflict" | "diagnostic-drift" | "artifact-pending-review" | "metacognition-invalid";
89
+ export interface MetacognitiveFailure {
90
+ code: MetacognitiveFailureCode;
91
+ subject: string;
92
+ detail: string;
93
+ path?: string;
94
+ }
95
+ export interface MetacognitiveEvidenceFinding {
96
+ id: string;
97
+ text: string;
98
+ label: MetacognitiveLabel;
99
+ citationPaths: string[];
100
+ }
101
+ export interface MetacognitiveEvaluation {
102
+ ok: boolean;
103
+ failures: MetacognitiveFailure[];
104
+ warnings: MetacognitiveWarning[];
105
+ /** Finding records are copied into the publication proof for citation. */
106
+ findings: MetacognitiveEvidenceFinding[];
107
+ }
108
+ export interface MetacognitiveWarning {
109
+ code: "artifact-not-reproducible";
110
+ subject: string;
111
+ detail: string;
112
+ path?: string;
113
+ }
114
+ /** Compare a final answer with host-observed reports, workflows and findings. */
115
+ export declare function evaluateMetacognitivePublication(answer: string, snapshot: unknown): MetacognitiveEvaluation;
116
+ //# sourceMappingURL=metacognitive-policy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metacognitive-policy.d.ts","sourceRoot":"","sources":["../../src/core/metacognitive-policy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /** A title that is really a file name ("PMC7022188.1.pdf", "lora-2106-09685") says nothing about the content. */
2
+ export declare function looksLikeFileName(title: string): boolean;
3
+ /**
4
+ * Node/display title for a Vault note: an explicit `topic` written at ingestion wins,
5
+ * then frontmatter `title`, then the first H1, then the file name.
6
+ */
7
+ export declare function noteDisplayTitle(text: string, path: string): string;
8
+ //# sourceMappingURL=note-title.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"note-title.d.ts","sourceRoot":"","sources":["../../src/core/note-title.ts"],"names":[],"mappings":"AAKA,iHAAiH;AACjH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAMxD;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAanE"}
@@ -0,0 +1,84 @@
1
+ /** Deterministic, auditable scheduling decisions for knowledge specialists. */
2
+ export declare const SPECIALIST_DECISIONS: readonly ["run", "skip", "wait", "ask-user"];
3
+ export type SpecialistDecision = (typeof SPECIALIST_DECISIONS)[number];
4
+ export interface SpecialistRequestSignatureOptions {
5
+ role?: string;
6
+ task?: string;
7
+ sourcePaths?: unknown[];
8
+ sourceHashes?: unknown[];
9
+ summary?: string;
10
+ targetPath?: string | null;
11
+ }
12
+ export declare function specialistRequestSignature({ role, task, sourcePaths, sourceHashes, summary, targetPath, }?: SpecialistRequestSignatureOptions): string;
13
+ export interface SpecialistRunOptions extends SpecialistRequestSignatureOptions {
14
+ automatic?: boolean;
15
+ mode?: string;
16
+ trusted?: boolean;
17
+ policy?: string;
18
+ hasEvidence?: boolean;
19
+ taskNeedsSpecialist?: boolean;
20
+ observedNeed?: boolean;
21
+ duplicate?: boolean;
22
+ turnRuns?: number;
23
+ maxRunsPerTurn?: number;
24
+ sessionRuns?: number;
25
+ maxRunsPerSession?: number;
26
+ active?: number;
27
+ concurrency?: number;
28
+ queueLength?: number;
29
+ queueLimit?: number;
30
+ }
31
+ export interface SpecialistRunDecision {
32
+ role?: string;
33
+ signature: string;
34
+ decision: SpecialistDecision;
35
+ reasonCode: string;
36
+ }
37
+ export declare function decideSpecialistRun({ role, task, sourcePaths, targetPath, sourceHashes, summary, automatic, mode, trusted, policy, hasEvidence, taskNeedsSpecialist, observedNeed, duplicate, turnRuns, maxRunsPerTurn, sessionRuns, maxRunsPerSession, active, concurrency, queueLength, queueLimit, }?: SpecialistRunOptions): SpecialistRunDecision;
38
+ export interface SpecialistBudgetOptions {
39
+ maxRunsPerTurn?: number;
40
+ maxRunsPerSession?: number;
41
+ maxToolOperations?: number;
42
+ maxTokensPerTurn?: number;
43
+ maxTokensPerSession?: number;
44
+ maxCostPerTurn?: number;
45
+ maxCostPerSession?: number;
46
+ }
47
+ export interface SpecialistUsage {
48
+ totalTokens?: number;
49
+ cost?: number;
50
+ }
51
+ export interface SpecialistBudgetSnapshot {
52
+ turn: number;
53
+ turnRuns: number;
54
+ sessionRuns: number;
55
+ toolOperations: number;
56
+ reservations: number;
57
+ maxRunsPerTurn: number;
58
+ maxRunsPerSession: number;
59
+ maxToolOperations: number;
60
+ turnTokens: number;
61
+ sessionTokens: number;
62
+ turnCost: number;
63
+ sessionCost: number;
64
+ maxTokensPerTurn: number;
65
+ maxTokensPerSession: number;
66
+ maxCostPerTurn: number;
67
+ maxCostPerSession: number;
68
+ }
69
+ export interface SpecialistBudget {
70
+ begin(): void;
71
+ reserve(signature: string, reservationTurn?: number, options?: {
72
+ dedupe?: boolean;
73
+ }): boolean;
74
+ commit(signature: string, reservationTurn?: number): boolean;
75
+ release(signature: string, reservationTurn?: number): boolean;
76
+ addToolOperation(): boolean;
77
+ configure(next?: SpecialistBudgetOptions): void;
78
+ updateUsage(usage?: SpecialistUsage, usageTurn?: number): boolean;
79
+ recordUsage(usage?: SpecialistUsage, usageTurn?: number): boolean;
80
+ checkUsage(): true;
81
+ readonly snapshot: SpecialistBudgetSnapshot;
82
+ }
83
+ export declare function createSpecialistBudget({ maxRunsPerTurn, maxRunsPerSession, maxToolOperations, maxTokensPerTurn, maxTokensPerSession, maxCostPerTurn, maxCostPerSession, }?: SpecialistBudgetOptions): SpecialistBudget;
84
+ //# sourceMappingURL=orchestration-policy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orchestration-policy.d.ts","sourceRoot":"","sources":["../../src/core/orchestration-policy.ts"],"names":[],"mappings":"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"}