psyclaw 0.25.2 → 0.26.1

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 (271) hide show
  1. package/README.md +111 -60
  2. package/{apps → dist/apps}/panel/index.html +50 -28
  3. package/dist/src/adapters/pi/extension.d.ts +19 -0
  4. package/dist/src/adapters/pi/extension.js +735 -0
  5. package/dist/src/adapters/pi/extension.js.map +1 -0
  6. package/dist/src/adapters/pi/model.d.ts +72 -0
  7. package/dist/src/adapters/pi/model.js +152 -0
  8. package/dist/src/adapters/pi/model.js.map +1 -0
  9. package/dist/src/adapters/pi/resources.d.ts +23 -0
  10. package/dist/src/adapters/pi/resources.js +54 -0
  11. package/dist/src/adapters/pi/resources.js.map +1 -0
  12. package/dist/src/adapters/pi/rpc.d.ts +58 -0
  13. package/dist/src/adapters/pi/rpc.js +253 -0
  14. package/dist/src/adapters/pi/rpc.js.map +1 -0
  15. package/dist/src/adapters/pi/session.d.ts +30 -0
  16. package/dist/src/adapters/pi/session.js +64 -0
  17. package/dist/src/adapters/pi/session.js.map +1 -0
  18. package/dist/src/agents/catalog.d.ts +30 -0
  19. package/dist/src/agents/catalog.js +118 -0
  20. package/dist/src/agents/catalog.js.map +1 -0
  21. package/dist/src/agents/discover.d.ts +28 -0
  22. package/dist/src/agents/discover.js +127 -0
  23. package/dist/src/agents/discover.js.map +1 -0
  24. package/dist/src/agents/import.d.ts +67 -0
  25. package/dist/src/agents/import.js +789 -0
  26. package/dist/src/agents/import.js.map +1 -0
  27. package/dist/src/analysis/hooks.d.ts +81 -0
  28. package/dist/src/analysis/hooks.js +139 -0
  29. package/dist/src/analysis/hooks.js.map +1 -0
  30. package/dist/src/analysis/pre-registration.d.ts +18 -0
  31. package/dist/src/analysis/pre-registration.js +86 -0
  32. package/dist/src/analysis/pre-registration.js.map +1 -0
  33. package/dist/src/branding.d.ts +44 -0
  34. package/dist/src/branding.js +128 -0
  35. package/dist/src/branding.js.map +1 -0
  36. package/dist/src/chat.d.ts +16 -0
  37. package/dist/src/chat.js +95 -0
  38. package/dist/src/chat.js.map +1 -0
  39. package/dist/src/cli.d.ts +2 -0
  40. package/dist/src/cli.js +316 -0
  41. package/dist/src/cli.js.map +1 -0
  42. package/dist/src/core/citations.d.ts +44 -0
  43. package/dist/src/core/citations.js +48 -0
  44. package/dist/src/core/citations.js.map +1 -0
  45. package/dist/src/core/contracts.d.ts +119 -0
  46. package/dist/src/core/contracts.js +2 -0
  47. package/dist/src/core/contracts.js.map +1 -0
  48. package/dist/src/core/docx.d.ts +11 -0
  49. package/dist/src/core/docx.js +46 -0
  50. package/dist/src/core/docx.js.map +1 -0
  51. package/dist/src/core/doi.d.ts +41 -0
  52. package/dist/src/core/doi.js +82 -0
  53. package/dist/src/core/doi.js.map +1 -0
  54. package/dist/src/core/evidence-policy.d.ts +24 -0
  55. package/dist/src/core/evidence-policy.js +308 -0
  56. package/dist/src/core/evidence-policy.js.map +1 -0
  57. package/dist/src/core/filekind.d.ts +15 -0
  58. package/dist/src/core/filekind.js +82 -0
  59. package/dist/src/core/filekind.js.map +1 -0
  60. package/dist/src/core/hash.d.ts +2 -0
  61. package/dist/src/core/hash.js +17 -0
  62. package/dist/src/core/hash.js.map +1 -0
  63. package/dist/src/core/pricing.d.ts +38 -0
  64. package/dist/src/core/pricing.js +110 -0
  65. package/dist/src/core/pricing.js.map +1 -0
  66. package/dist/src/core/redact.d.ts +12 -0
  67. package/dist/src/core/redact.js +48 -0
  68. package/dist/src/core/redact.js.map +1 -0
  69. package/dist/src/core/references.d.ts +55 -0
  70. package/dist/src/core/references.js +102 -0
  71. package/dist/src/core/references.js.map +1 -0
  72. package/dist/src/core/schemas.d.ts +162 -0
  73. package/dist/src/core/schemas.js +160 -0
  74. package/dist/src/core/schemas.js.map +1 -0
  75. package/dist/src/extension.d.ts +1 -0
  76. package/dist/src/extension.js +2 -0
  77. package/dist/src/extension.js.map +1 -0
  78. package/dist/src/index.d.ts +72 -0
  79. package/dist/src/index.js +73 -0
  80. package/dist/src/index.js.map +1 -0
  81. package/dist/src/install/installer.d.ts +147 -0
  82. package/dist/src/install/installer.js +721 -0
  83. package/dist/src/install/installer.js.map +1 -0
  84. package/dist/src/integrations/contracts.d.ts +35 -0
  85. package/dist/src/integrations/contracts.js +27 -0
  86. package/dist/src/integrations/contracts.js.map +1 -0
  87. package/dist/src/integrations/mcp.d.ts +155 -0
  88. package/dist/src/integrations/mcp.js +826 -0
  89. package/dist/src/integrations/mcp.js.map +1 -0
  90. package/dist/src/knowledge-map/contracts.d.ts +20 -0
  91. package/dist/src/knowledge-map/contracts.js +2 -0
  92. package/dist/src/knowledge-map/contracts.js.map +1 -0
  93. package/dist/src/knowledge-map/index.d.ts +4 -0
  94. package/dist/src/knowledge-map/index.js +39 -0
  95. package/dist/src/knowledge-map/index.js.map +1 -0
  96. package/dist/src/literature/contracts.d.ts +106 -0
  97. package/dist/src/literature/contracts.js +2 -0
  98. package/dist/src/literature/contracts.js.map +1 -0
  99. package/dist/src/literature/fulltext.d.ts +7 -0
  100. package/dist/src/literature/fulltext.js +24 -0
  101. package/dist/src/literature/fulltext.js.map +1 -0
  102. package/dist/src/literature/knowledge-map.d.ts +2 -0
  103. package/dist/src/literature/knowledge-map.js +20 -0
  104. package/dist/src/literature/knowledge-map.js.map +1 -0
  105. package/dist/src/literature/ledger.d.ts +3 -0
  106. package/dist/src/literature/ledger.js +17 -0
  107. package/dist/src/literature/ledger.js.map +1 -0
  108. package/dist/src/literature/metadata.d.ts +6 -0
  109. package/dist/src/literature/metadata.js +32 -0
  110. package/dist/src/literature/metadata.js.map +1 -0
  111. package/dist/src/memory/store.d.ts +22 -0
  112. package/dist/src/memory/store.js +73 -0
  113. package/dist/src/memory/store.js.map +1 -0
  114. package/dist/src/orchestration/contracts.d.ts +61 -0
  115. package/dist/src/orchestration/contracts.js +2 -0
  116. package/dist/src/orchestration/contracts.js.map +1 -0
  117. package/dist/src/orchestration/pi-executor.d.ts +28 -0
  118. package/dist/src/orchestration/pi-executor.js +169 -0
  119. package/dist/src/orchestration/pi-executor.js.map +1 -0
  120. package/dist/src/orchestration/runner.d.ts +196 -0
  121. package/dist/src/orchestration/runner.js +991 -0
  122. package/dist/src/orchestration/runner.js.map +1 -0
  123. package/dist/src/orchestration/scheduler.d.ts +8 -0
  124. package/dist/src/orchestration/scheduler.js +335 -0
  125. package/dist/src/orchestration/scheduler.js.map +1 -0
  126. package/dist/src/panel/events.d.ts +20 -0
  127. package/dist/src/panel/events.js +93 -0
  128. package/dist/src/panel/events.js.map +1 -0
  129. package/dist/src/panel/extension.d.ts +8 -0
  130. package/dist/src/panel/extension.js +115 -0
  131. package/dist/src/panel/extension.js.map +1 -0
  132. package/dist/src/panel/literature-map.d.ts +26 -0
  133. package/dist/src/panel/literature-map.js +34 -0
  134. package/dist/src/panel/literature-map.js.map +1 -0
  135. package/dist/src/panel/projection.d.ts +51 -0
  136. package/dist/src/panel/projection.js +288 -0
  137. package/dist/src/panel/projection.js.map +1 -0
  138. package/dist/src/panel/server.d.ts +46 -0
  139. package/dist/src/panel/server.js +1610 -0
  140. package/dist/src/panel/server.js.map +1 -0
  141. package/dist/src/panel/usage.d.ts +53 -0
  142. package/dist/src/panel/usage.js +150 -0
  143. package/dist/src/panel/usage.js.map +1 -0
  144. package/dist/src/project/bootstrap.d.ts +10 -0
  145. package/dist/src/project/bootstrap.js +83 -0
  146. package/dist/src/project/bootstrap.js.map +1 -0
  147. package/dist/src/project/hitl.d.ts +12 -0
  148. package/dist/src/project/hitl.js +43 -0
  149. package/dist/src/project/hitl.js.map +1 -0
  150. package/dist/src/project/jsonl.d.ts +16 -0
  151. package/dist/src/project/jsonl.js +93 -0
  152. package/dist/src/project/jsonl.js.map +1 -0
  153. package/dist/src/project/manuscript.d.ts +21 -0
  154. package/dist/src/project/manuscript.js +74 -0
  155. package/dist/src/project/manuscript.js.map +1 -0
  156. package/dist/src/project/paths.d.ts +38 -0
  157. package/dist/src/project/paths.js +166 -0
  158. package/dist/src/project/paths.js.map +1 -0
  159. package/dist/src/project/versions.d.ts +10 -0
  160. package/dist/src/project/versions.js +14 -0
  161. package/dist/src/project/versions.js.map +1 -0
  162. package/dist/src/psyclaw-theme.d.ts +88 -0
  163. package/dist/src/psyclaw-theme.js +89 -0
  164. package/dist/src/psyclaw-theme.js.map +1 -0
  165. package/dist/src/research/brief.d.ts +11 -0
  166. package/dist/src/research/brief.js +81 -0
  167. package/dist/src/research/brief.js.map +1 -0
  168. package/dist/src/research/ledger.d.ts +12 -0
  169. package/dist/src/research/ledger.js +43 -0
  170. package/dist/src/research/ledger.js.map +1 -0
  171. package/dist/src/run.d.ts +20 -0
  172. package/dist/src/run.js +34 -0
  173. package/dist/src/run.js.map +1 -0
  174. package/dist/src/setup.d.ts +54 -0
  175. package/dist/src/setup.js +221 -0
  176. package/dist/src/setup.js.map +1 -0
  177. package/dist/src/skills/contracts.d.ts +105 -0
  178. package/dist/src/skills/contracts.js +3 -0
  179. package/dist/src/skills/contracts.js.map +1 -0
  180. package/dist/src/skills/preflight.d.ts +10 -0
  181. package/dist/src/skills/preflight.js +39 -0
  182. package/dist/src/skills/preflight.js.map +1 -0
  183. package/dist/src/skills/registry.d.ts +28 -0
  184. package/dist/src/skills/registry.js +540 -0
  185. package/dist/src/skills/registry.js.map +1 -0
  186. package/dist/src/style/artifact.d.ts +6 -0
  187. package/dist/src/style/artifact.js +61 -0
  188. package/dist/src/style/artifact.js.map +1 -0
  189. package/dist/src/style/cli-ui.d.ts +41 -0
  190. package/dist/src/style/cli-ui.js +119 -0
  191. package/dist/src/style/cli-ui.js.map +1 -0
  192. package/dist/src/style/contracts.d.ts +34 -0
  193. package/dist/src/style/contracts.js +2 -0
  194. package/dist/src/style/contracts.js.map +1 -0
  195. package/dist/src/style/registry.d.ts +16 -0
  196. package/dist/src/style/registry.js +50 -0
  197. package/dist/src/style/registry.js.map +1 -0
  198. package/dist/src/trust/manifest.d.ts +42 -0
  199. package/dist/src/trust/manifest.js +53 -0
  200. package/dist/src/trust/manifest.js.map +1 -0
  201. package/dist/src/trust/sbom.d.ts +54 -0
  202. package/dist/src/trust/sbom.js +77 -0
  203. package/dist/src/trust/sbom.js.map +1 -0
  204. package/dist/src/tui/app.d.ts +3 -0
  205. package/dist/src/tui/app.js +103 -0
  206. package/dist/src/tui/app.js.map +1 -0
  207. package/dist/src/tui/model.d.ts +13 -0
  208. package/dist/src/tui/model.js +25 -0
  209. package/dist/src/tui/model.js.map +1 -0
  210. package/dist/src/updates/check.d.ts +43 -0
  211. package/dist/src/updates/check.js +68 -0
  212. package/dist/src/updates/check.js.map +1 -0
  213. package/dist/src/updates/manifest.d.ts +19 -0
  214. package/dist/src/updates/manifest.js +58 -0
  215. package/dist/src/updates/manifest.js.map +1 -0
  216. package/dist/src/updates/registry.d.ts +21 -0
  217. package/dist/src/updates/registry.js +82 -0
  218. package/dist/src/updates/registry.js.map +1 -0
  219. package/dist/src/updates/skills.d.ts +15 -0
  220. package/dist/src/updates/skills.js +39 -0
  221. package/dist/src/updates/skills.js.map +1 -0
  222. package/dist/src/updates/status.d.ts +7 -0
  223. package/dist/src/updates/status.js +37 -0
  224. package/dist/src/updates/status.js.map +1 -0
  225. package/dist/src/updates/update.d.ts +43 -0
  226. package/dist/src/updates/update.js +128 -0
  227. package/dist/src/updates/update.js.map +1 -0
  228. package/dist/src/wizard.d.ts +7 -0
  229. package/dist/src/wizard.js +90 -0
  230. package/dist/src/wizard.js.map +1 -0
  231. package/dist/src/workflows/analysis-delegation.d.ts +3 -0
  232. package/dist/src/workflows/analysis-delegation.js +96 -0
  233. package/dist/src/workflows/analysis-delegation.js.map +1 -0
  234. package/dist/src/workflows/expert-review-runner.d.ts +29 -0
  235. package/dist/src/workflows/expert-review-runner.js +35 -0
  236. package/dist/src/workflows/expert-review-runner.js.map +1 -0
  237. package/dist/src/workflows/expert-review.d.ts +140 -0
  238. package/dist/src/workflows/expert-review.js +111 -0
  239. package/dist/src/workflows/expert-review.js.map +1 -0
  240. package/dist/src/workflows/institutional-fulltext.d.ts +16 -0
  241. package/dist/src/workflows/institutional-fulltext.js +110 -0
  242. package/dist/src/workflows/institutional-fulltext.js.map +1 -0
  243. package/dist/src/workflows/literature-review.d.ts +3 -0
  244. package/dist/src/workflows/literature-review.js +76 -0
  245. package/dist/src/workflows/literature-review.js.map +1 -0
  246. package/dist/src/workflows/meta-analysis.d.ts +38 -0
  247. package/dist/src/workflows/meta-analysis.js +185 -0
  248. package/dist/src/workflows/meta-analysis.js.map +1 -0
  249. package/dist/src/workflows/publish.d.ts +51 -0
  250. package/dist/src/workflows/publish.js +153 -0
  251. package/dist/src/workflows/publish.js.map +1 -0
  252. package/dist/src/workflows/spec.d.ts +51 -0
  253. package/dist/src/workflows/spec.js +157 -0
  254. package/dist/src/workflows/spec.js.map +1 -0
  255. package/dist/src/workflows/style-contract.d.ts +24 -0
  256. package/dist/src/workflows/style-contract.js +23 -0
  257. package/dist/src/workflows/style-contract.js.map +1 -0
  258. package/dist/src/workflows/writing-review.d.ts +15 -0
  259. package/dist/src/workflows/writing-review.js +82 -0
  260. package/dist/src/workflows/writing-review.js.map +1 -0
  261. package/package.json +20 -8
  262. package/scripts/rebrand-pi.mjs +3 -3
  263. package/scripts/__pycache__/build_dist.cpython-314.pyc +0 -0
  264. package/scripts/__pycache__/build_whitepaper_docx.cpython-314.pyc +0 -0
  265. package/scripts/build_preprint_docx.py +0 -729
  266. package/scripts/build_preprint_figures.py +0 -238
  267. package/scripts/build_three_line_table_fixture.py +0 -56
  268. package/scripts/build_whitepaper_docx.py +0 -768
  269. package/scripts/check-branding.mjs +0 -159
  270. package/scripts/copy-panel.mjs +0 -11
  271. package/scripts/verify_docx.py +0 -41
@@ -1,159 +0,0 @@
1
- #!/usr/bin/env node
2
-
3
- import { readdir, readFile } from "node:fs/promises";
4
- import { extname, join, relative, resolve, sep } from "node:path";
5
- import process from "node:process";
6
-
7
- const root = resolve(import.meta.dirname, "..");
8
- const legacyName = `psy${"pi"}`;
9
- const scanRoots = [
10
- "apps",
11
- "docs",
12
- "evals",
13
- "scripts",
14
- "skills",
15
- "src",
16
- "tests",
17
- ];
18
- const rootFiles = [
19
- "AGENTS.md",
20
- "CHANGELOG.md",
21
- "CLAUDE.md",
22
- "LICENSE",
23
- "PRODUCT.md",
24
- "README.md",
25
- "package.json",
26
- "package.json.psyclaw",
27
- "pnpm-lock.yaml",
28
- "tsconfig.json",
29
- "vitest.config.ts",
30
- ];
31
- const skippedDirectories = new Set([
32
- ".git",
33
- ".obsidian",
34
- "coverage",
35
- "dist",
36
- "node_modules",
37
- "raw",
38
- ]);
39
- const skippedExtensions = new Set([
40
- ".docx",
41
- ".gif",
42
- ".ico",
43
- ".jpeg",
44
- ".jpg",
45
- ".pdf",
46
- ".png",
47
- ".webp",
48
- ".zip",
49
- ]);
50
- const manifest = JSON.parse(await readFile(join(root, "package.json"), "utf8"));
51
- const governance = JSON.parse(await readFile(join(root, "package.json.psyclaw"), "utf8"));
52
-
53
- function displayPath(path) {
54
- return relative(root, path).split(sep).join("/");
55
- }
56
-
57
- function isAllowedProvenance(path, line) {
58
- if (displayPath(path) !== "package.json.psyclaw") return false;
59
- const provenance = new RegExp(
60
- `^\\s*"ref"\\s*:\\s*"${legacyName}@[0-9a-f]{40}"\\s*$`,
61
- "i",
62
- );
63
- return provenance.test(line);
64
- }
65
-
66
- async function collectFiles(path) {
67
- const entries = await readdir(path, { withFileTypes: true });
68
- const files = [];
69
- for (const entry of entries) {
70
- if (entry.isSymbolicLink()) continue;
71
- const child = join(path, entry.name);
72
- if (entry.isDirectory()) {
73
- if (!skippedDirectories.has(entry.name)) {
74
- files.push(...await collectFiles(child));
75
- }
76
- continue;
77
- }
78
- if (entry.isFile() && !skippedExtensions.has(extname(entry.name).toLowerCase())) {
79
- files.push(child);
80
- }
81
- }
82
- return files;
83
- }
84
-
85
- const candidates = rootFiles.map((path) => join(root, path));
86
- for (const path of scanRoots) {
87
- candidates.push(...await collectFiles(join(root, path)));
88
- }
89
-
90
- const forbidden = [];
91
- const allowed = [];
92
- const contractFailures = [];
93
- for (const path of candidates) {
94
- const content = await readFile(path, "utf8");
95
- for (const [index, line] of content.split(/\r?\n/u).entries()) {
96
- if (!line.toLowerCase().includes(legacyName)) continue;
97
- const match = `${displayPath(path)}:${index + 1}`;
98
- if (isAllowedProvenance(path, line)) {
99
- allowed.push(match);
100
- } else {
101
- forbidden.push(match);
102
- }
103
- }
104
- }
105
-
106
- if (manifest.name !== "psyclaw") contractFailures.push("package.json name must be psyclaw");
107
- if (manifest.bin?.psyclaw !== "dist/src/cli.js") {
108
- contractFailures.push("package.json must expose the psyclaw CLI bin");
109
- }
110
- if (manifest.scripts?.postinstall !== undefined) {
111
- contractFailures.push("package.json must not mutate dependencies during postinstall");
112
- }
113
- if (manifest.publishConfig?.registry !== "https://registry.npmjs.org/") {
114
- contractFailures.push("package.json publishConfig must use the official npm registry");
115
- }
116
- if (manifest.publishConfig?.access !== "public") {
117
- contractFailures.push("package.json publishConfig must declare public access");
118
- }
119
- const expectedExtensions = ["./dist/src/extension.js", "./dist/src/panel/extension.js"];
120
- if (JSON.stringify(manifest.pi?.extensions) !== JSON.stringify(expectedExtensions)) {
121
- contractFailures.push("package.json Pi extensions must point to packaged dist files");
122
- }
123
- if (governance.id !== "psyclaw") contractFailures.push("package governance id must be psyclaw");
124
- if (governance.schemaVersion !== "psyclaw/package-governance/v1") {
125
- contractFailures.push("package governance schema must use the psyclaw namespace");
126
- }
127
- if (governance.apiVersion !== manifest.version.replace(/\.0$/u, "")) {
128
- contractFailures.push("package governance apiVersion must match the package major/minor version");
129
- }
130
-
131
- const versionSurfaces = [
132
- ["README.md", `v${manifest.version}`],
133
- ["PRODUCT.md", `Version ${manifest.version}`],
134
- ["CHANGELOG.md", `## v${manifest.version}`],
135
- ["docs/使用白皮书.md", `| 版本 | ${manifest.version}`],
136
- ["apps/website/index.html", `PsyClaw v${manifest.version}`],
137
- ];
138
- for (const [path, marker] of versionSurfaces) {
139
- const content = await readFile(join(root, path), "utf8");
140
- if (!content.includes(marker)) contractFailures.push(`${path} is missing ${marker}`);
141
- }
142
-
143
- if (allowed.length !== 1) {
144
- contractFailures.push(`expected one pinned predecessor provenance ref, found ${allowed.length}`);
145
- }
146
- if (forbidden.length > 0) {
147
- contractFailures.push("legacy product identifier found in release sources");
148
- contractFailures.push(...forbidden.map((match) => `legacy identifier at ${match}`));
149
- }
150
-
151
- if (contractFailures.length > 0) {
152
- process.stderr.write("branding check failed:\n");
153
- for (const failure of contractFailures) process.stderr.write(` - ${failure}\n`);
154
- process.exitCode = 1;
155
- } else {
156
- process.stdout.write(
157
- `branding check passed: PsyClaw ${manifest.version}; retained provenance: ${allowed[0]}\n`,
158
- );
159
- }
@@ -1,11 +0,0 @@
1
- import { cpSync, mkdirSync } from "node:fs";
2
- import { dirname, join } from "node:path";
3
- import { fileURLToPath } from "node:url";
4
-
5
- const root = join(dirname(fileURLToPath(import.meta.url)), "..");
6
- const source = join(root, "apps", "panel", "index.html");
7
- const target = join(root, "dist", "apps", "panel", "index.html");
8
-
9
- mkdirSync(dirname(target), { recursive: true });
10
- cpSync(source, target);
11
- console.log(`copied panel asset -> ${target}`);
@@ -1,41 +0,0 @@
1
- #!/usr/bin/env python3
2
- """Structure + visual regression verifier for a DOCX artifact."""
3
- from __future__ import annotations
4
-
5
- import argparse
6
- import json
7
- import tempfile
8
- from pathlib import Path
9
-
10
- from psyclaw.output.docx_contract import inspect_docx
11
- from psyclaw.output.docx_visual import compare_visual_manifests, render_docx
12
-
13
-
14
- def main() -> int:
15
- parser = argparse.ArgumentParser()
16
- parser.add_argument("docx")
17
- parser.add_argument("--baseline", help="existing visual_manifest.json")
18
- parser.add_argument("--output-dir", help="keep render intermediates here")
19
- args = parser.parse_args()
20
-
21
- contract = inspect_docx(args.docx)
22
- if not contract["ok"]:
23
- print(json.dumps(contract, ensure_ascii=False, indent=2))
24
- return 1
25
- if args.output_dir:
26
- rendered = render_docx(args.docx, args.output_dir)
27
- else:
28
- with tempfile.TemporaryDirectory(prefix="psyclaw_docx_verify_") as td:
29
- rendered = render_docx(args.docx, td)
30
- if args.baseline and rendered.get("ok"):
31
- rendered["comparison"] = compare_visual_manifests(
32
- rendered, json.loads(Path(args.baseline).read_text(encoding="utf-8")))
33
- if args.baseline and args.output_dir and rendered.get("ok"):
34
- rendered["comparison"] = compare_visual_manifests(
35
- rendered, json.loads(Path(args.baseline).read_text(encoding="utf-8")))
36
- print(json.dumps({"contract": contract, "render": rendered}, ensure_ascii=False, indent=2))
37
- return 0 if rendered.get("ok") and rendered.get("comparison", {"ok": True})["ok"] else 1
38
-
39
-
40
- if __name__ == "__main__":
41
- raise SystemExit(main())