create-principles-disciple 1.132.2 → 1.132.4

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 (229) hide show
  1. package/codex-adapter/dist/codec/index.d.ts +6 -0
  2. package/codex-adapter/dist/codec/index.js +5 -0
  3. package/codex-adapter/dist/codec/input-decoder.d.ts +13 -0
  4. package/codex-adapter/dist/codec/input-decoder.js +103 -0
  5. package/codex-adapter/dist/codec/output-encoder.d.ts +32 -0
  6. package/codex-adapter/dist/codec/output-encoder.js +51 -0
  7. package/codex-adapter/dist/host-adapter.d.ts +30 -0
  8. package/codex-adapter/dist/host-adapter.js +28 -0
  9. package/codex-adapter/dist/index.d.ts +25 -0
  10. package/codex-adapter/dist/index.js +19 -0
  11. package/codex-adapter/dist/ingestion/admission.d.ts +54 -0
  12. package/codex-adapter/dist/ingestion/admission.js +137 -0
  13. package/codex-adapter/dist/ingestion/catch-up.d.ts +41 -0
  14. package/codex-adapter/dist/ingestion/catch-up.js +94 -0
  15. package/codex-adapter/dist/ingestion/codex-home.d.ts +19 -0
  16. package/codex-adapter/dist/ingestion/codex-home.js +43 -0
  17. package/codex-adapter/dist/ingestion/codex-version.d.ts +30 -0
  18. package/codex-adapter/dist/ingestion/codex-version.js +53 -0
  19. package/codex-adapter/dist/ingestion/ingestion-fields.d.ts +17 -0
  20. package/codex-adapter/dist/ingestion/ingestion-fields.js +28 -0
  21. package/codex-adapter/dist/ingestion/ingestion.d.ts +71 -0
  22. package/codex-adapter/dist/ingestion/ingestion.js +248 -0
  23. package/codex-adapter/dist/ingestion/transcript-decoder.d.ts +72 -0
  24. package/codex-adapter/dist/ingestion/transcript-decoder.js +485 -0
  25. package/codex-adapter/dist/ingestion/transcript-locate.d.ts +13 -0
  26. package/codex-adapter/dist/ingestion/transcript-locate.js +75 -0
  27. package/codex-adapter/dist/ingestion/transcript-path.d.ts +25 -0
  28. package/codex-adapter/dist/ingestion/transcript-path.js +87 -0
  29. package/codex-adapter/dist/pd-hook.d.ts +9 -0
  30. package/codex-adapter/dist/pd-hook.js +159 -0
  31. package/codex-adapter/dist/tool-semantics.d.ts +20 -0
  32. package/codex-adapter/dist/tool-semantics.js +27 -0
  33. package/codex-adapter/dist/worker/workspace-worker.d.ts +59 -0
  34. package/codex-adapter/dist/worker/workspace-worker.js +270 -0
  35. package/codex-adapter/package.json +52 -0
  36. package/console/dist/server/routes/update.js +187 -19
  37. package/console/dist/server/update/mutation-controller.d.ts +18 -0
  38. package/console/dist/server/update/mutation-controller.js +29 -0
  39. package/console/dist/server/utils/installed-layout.d.ts +1 -0
  40. package/console/dist/server/utils/installed-layout.js +2 -0
  41. package/console/package.json +1 -0
  42. package/core/dist/runtime-v2/__tests__/architecture-regression.test.js +15 -0
  43. package/core/dist/runtime-v2/__tests__/architecture-regression.test.js.map +1 -1
  44. package/core/dist/runtime-v2/adapter/__tests__/pd-stream-simple.test.d.ts +2 -0
  45. package/core/dist/runtime-v2/adapter/__tests__/pd-stream-simple.test.d.ts.map +1 -0
  46. package/core/dist/runtime-v2/adapter/__tests__/pd-stream-simple.test.js +71 -0
  47. package/core/dist/runtime-v2/adapter/__tests__/pd-stream-simple.test.js.map +1 -0
  48. package/core/dist/runtime-v2/adapter/__tests__/pi-ai-http-transport.test.d.ts +2 -0
  49. package/core/dist/runtime-v2/adapter/__tests__/pi-ai-http-transport.test.d.ts.map +1 -0
  50. package/core/dist/runtime-v2/adapter/__tests__/pi-ai-http-transport.test.js +219 -0
  51. package/core/dist/runtime-v2/adapter/__tests__/pi-ai-http-transport.test.js.map +1 -0
  52. package/core/dist/runtime-v2/adapter/artificer-l2-adapter.d.ts.map +1 -1
  53. package/core/dist/runtime-v2/adapter/artificer-l2-adapter.js +2 -3
  54. package/core/dist/runtime-v2/adapter/artificer-l2-adapter.js.map +1 -1
  55. package/core/dist/runtime-v2/adapter/l2-agent-loop-adapter.d.ts +12 -1
  56. package/core/dist/runtime-v2/adapter/l2-agent-loop-adapter.d.ts.map +1 -1
  57. package/core/dist/runtime-v2/adapter/l2-agent-loop-adapter.js +15 -2
  58. package/core/dist/runtime-v2/adapter/l2-agent-loop-adapter.js.map +1 -1
  59. package/core/dist/runtime-v2/adapter/pi-ai-http-transport.d.ts +50 -0
  60. package/core/dist/runtime-v2/adapter/pi-ai-http-transport.d.ts.map +1 -0
  61. package/core/dist/runtime-v2/adapter/pi-ai-http-transport.js +93 -0
  62. package/core/dist/runtime-v2/adapter/pi-ai-http-transport.js.map +1 -0
  63. package/core/dist/runtime-v2/adapter/pi-ai-runtime-adapter.d.ts.map +1 -1
  64. package/core/dist/runtime-v2/adapter/pi-ai-runtime-adapter.js +5 -0
  65. package/core/dist/runtime-v2/adapter/pi-ai-runtime-adapter.js.map +1 -1
  66. package/core/dist/runtime-v2/internalization/__tests__/owner-decision.test.js +152 -0
  67. package/core/dist/runtime-v2/internalization/__tests__/owner-decision.test.js.map +1 -1
  68. package/core/dist/runtime-v2/internalization/owner-review.d.ts +7 -1
  69. package/core/dist/runtime-v2/internalization/owner-review.d.ts.map +1 -1
  70. package/core/dist/runtime-v2/internalization/owner-review.js +22 -3
  71. package/core/dist/runtime-v2/internalization/owner-review.js.map +1 -1
  72. package/core/package.json +3 -2
  73. package/dist/installer.d.ts +32 -0
  74. package/dist/installer.d.ts.map +1 -1
  75. package/dist/installer.js +198 -2
  76. package/dist/installer.js.map +1 -1
  77. package/dist/installers/codex-host-installer.d.ts.map +1 -1
  78. package/dist/installers/codex-host-installer.js +5 -3
  79. package/dist/installers/codex-host-installer.js.map +1 -1
  80. package/dist/update/release-manager-authority.d.ts +69 -0
  81. package/dist/update/release-manager-authority.d.ts.map +1 -0
  82. package/dist/update/release-manager-authority.js +125 -0
  83. package/dist/update/release-manager-authority.js.map +1 -0
  84. package/dist/utils/workspace-divergence.d.ts +36 -0
  85. package/dist/utils/workspace-divergence.d.ts.map +1 -0
  86. package/dist/utils/workspace-divergence.js +87 -0
  87. package/dist/utils/workspace-divergence.js.map +1 -0
  88. package/install-layout/dist/index.d.ts +5 -0
  89. package/install-layout/dist/index.js +1 -0
  90. package/install-layout/package.json +1 -1
  91. package/package.json +4 -2
  92. package/plugin/dist/bundle.js +870 -734
  93. package/plugin/dist/governance-audit.js +381 -247
  94. package/plugin/dist/openclaw-sdk.d.ts +3 -0
  95. package/plugin/dist/rulehost-evidence.js +420 -286
  96. package/plugin/dist/service/subagent-workflow/types.d.ts +2 -2
  97. package/plugin/dist/utils/retry.d.ts +1 -1
  98. package/plugin/dist/utils/workspace-resolver.d.ts +35 -4
  99. package/plugin/openclaw.plugin.json +1 -1
  100. package/plugin/package.json +1 -1
  101. package/release-manager/dist/i18n.d.ts +6 -0
  102. package/release-manager/dist/i18n.d.ts.map +1 -0
  103. package/release-manager/dist/i18n.js +234 -0
  104. package/release-manager/dist/i18n.js.map +1 -0
  105. package/release-manager/dist/index.d.ts +7 -0
  106. package/release-manager/dist/index.d.ts.map +1 -0
  107. package/release-manager/dist/index.js +474 -0
  108. package/release-manager/dist/index.js.map +1 -0
  109. package/release-manager/dist/installer.d.ts +217 -0
  110. package/release-manager/dist/installer.d.ts.map +1 -0
  111. package/release-manager/dist/installer.js +2451 -0
  112. package/release-manager/dist/installer.js.map +1 -0
  113. package/release-manager/dist/installers/codex-host-installer.d.ts +29 -0
  114. package/release-manager/dist/installers/codex-host-installer.d.ts.map +1 -0
  115. package/release-manager/dist/installers/codex-host-installer.js +496 -0
  116. package/release-manager/dist/installers/codex-host-installer.js.map +1 -0
  117. package/release-manager/dist/installers/index.d.ts +40 -0
  118. package/release-manager/dist/installers/index.d.ts.map +1 -0
  119. package/release-manager/dist/installers/index.js +35 -0
  120. package/release-manager/dist/installers/index.js.map +1 -0
  121. package/release-manager/dist/installers/openclaw-host-installer.d.ts +18 -0
  122. package/release-manager/dist/installers/openclaw-host-installer.d.ts.map +1 -0
  123. package/release-manager/dist/installers/openclaw-host-installer.js +414 -0
  124. package/release-manager/dist/installers/openclaw-host-installer.js.map +1 -0
  125. package/release-manager/dist/mvp-config.d.ts +197 -0
  126. package/release-manager/dist/mvp-config.d.ts.map +1 -0
  127. package/release-manager/dist/mvp-config.js +509 -0
  128. package/release-manager/dist/mvp-config.js.map +1 -0
  129. package/release-manager/dist/prompts.d.ts +30 -0
  130. package/release-manager/dist/prompts.d.ts.map +1 -0
  131. package/release-manager/dist/prompts.js +231 -0
  132. package/release-manager/dist/prompts.js.map +1 -0
  133. package/release-manager/dist/skill-language.d.ts +32 -0
  134. package/release-manager/dist/skill-language.d.ts.map +1 -0
  135. package/release-manager/dist/skill-language.js +107 -0
  136. package/release-manager/dist/skill-language.js.map +1 -0
  137. package/release-manager/dist/uninstaller.d.ts +55 -0
  138. package/release-manager/dist/uninstaller.d.ts.map +1 -0
  139. package/release-manager/dist/uninstaller.js +409 -0
  140. package/release-manager/dist/uninstaller.js.map +1 -0
  141. package/release-manager/dist/update/atomic-file.d.ts +35 -0
  142. package/release-manager/dist/update/atomic-file.d.ts.map +1 -0
  143. package/release-manager/dist/update/atomic-file.js +120 -0
  144. package/release-manager/dist/update/atomic-file.js.map +1 -0
  145. package/release-manager/dist/update/bootstrap-protocol.d.ts +55 -0
  146. package/release-manager/dist/update/bootstrap-protocol.d.ts.map +1 -0
  147. package/release-manager/dist/update/bootstrap-protocol.js +132 -0
  148. package/release-manager/dist/update/bootstrap-protocol.js.map +1 -0
  149. package/release-manager/dist/update/channel-metadata.d.ts +28 -0
  150. package/release-manager/dist/update/channel-metadata.d.ts.map +1 -0
  151. package/release-manager/dist/update/channel-metadata.js +90 -0
  152. package/release-manager/dist/update/channel-metadata.js.map +1 -0
  153. package/release-manager/dist/update/channel-promotion.d.ts +39 -0
  154. package/release-manager/dist/update/channel-promotion.d.ts.map +1 -0
  155. package/release-manager/dist/update/channel-promotion.js +55 -0
  156. package/release-manager/dist/update/channel-promotion.js.map +1 -0
  157. package/release-manager/dist/update/data-compatibility.d.ts +35 -0
  158. package/release-manager/dist/update/data-compatibility.d.ts.map +1 -0
  159. package/release-manager/dist/update/data-compatibility.js +45 -0
  160. package/release-manager/dist/update/data-compatibility.js.map +1 -0
  161. package/release-manager/dist/update/install-layout.d.ts +59 -0
  162. package/release-manager/dist/update/install-layout.d.ts.map +1 -0
  163. package/release-manager/dist/update/install-layout.js +127 -0
  164. package/release-manager/dist/update/install-layout.js.map +1 -0
  165. package/release-manager/dist/update/legacy-migration.d.ts +56 -0
  166. package/release-manager/dist/update/legacy-migration.d.ts.map +1 -0
  167. package/release-manager/dist/update/legacy-migration.js +254 -0
  168. package/release-manager/dist/update/legacy-migration.js.map +1 -0
  169. package/release-manager/dist/update/product-identity.d.ts +50 -0
  170. package/release-manager/dist/update/product-identity.d.ts.map +1 -0
  171. package/release-manager/dist/update/product-identity.js +63 -0
  172. package/release-manager/dist/update/product-identity.js.map +1 -0
  173. package/release-manager/dist/update/release-asset-manifest.d.ts +31 -0
  174. package/release-manager/dist/update/release-asset-manifest.d.ts.map +1 -0
  175. package/release-manager/dist/update/release-asset-manifest.js +161 -0
  176. package/release-manager/dist/update/release-asset-manifest.js.map +1 -0
  177. package/release-manager/dist/update/release-identity.d.ts +33 -0
  178. package/release-manager/dist/update/release-identity.d.ts.map +1 -0
  179. package/release-manager/dist/update/release-identity.js +108 -0
  180. package/release-manager/dist/update/release-identity.js.map +1 -0
  181. package/release-manager/dist/update/release-manager-authority.d.ts +69 -0
  182. package/release-manager/dist/update/release-manager-authority.d.ts.map +1 -0
  183. package/release-manager/dist/update/release-manager-authority.js +125 -0
  184. package/release-manager/dist/update/release-manager-authority.js.map +1 -0
  185. package/release-manager/dist/update/release-manager.d.ts +96 -0
  186. package/release-manager/dist/update/release-manager.d.ts.map +1 -0
  187. package/release-manager/dist/update/release-manager.js +253 -0
  188. package/release-manager/dist/update/release-manager.js.map +1 -0
  189. package/release-manager/dist/update/release-metadata.d.ts +57 -0
  190. package/release-manager/dist/update/release-metadata.d.ts.map +1 -0
  191. package/release-manager/dist/update/release-metadata.js +200 -0
  192. package/release-manager/dist/update/release-metadata.js.map +1 -0
  193. package/release-manager/dist/update/release-policy.d.ts +51 -0
  194. package/release-manager/dist/update/release-policy.d.ts.map +1 -0
  195. package/release-manager/dist/update/release-policy.js +103 -0
  196. package/release-manager/dist/update/release-policy.js.map +1 -0
  197. package/release-manager/dist/update/rollback-policy.d.ts +56 -0
  198. package/release-manager/dist/update/rollback-policy.d.ts.map +1 -0
  199. package/release-manager/dist/update/rollback-policy.js +61 -0
  200. package/release-manager/dist/update/rollback-policy.js.map +1 -0
  201. package/release-manager/dist/update/transaction-journal.d.ts +131 -0
  202. package/release-manager/dist/update/transaction-journal.d.ts.map +1 -0
  203. package/release-manager/dist/update/transaction-journal.js +346 -0
  204. package/release-manager/dist/update/transaction-journal.js.map +1 -0
  205. package/release-manager/dist/update/trust-metadata.d.ts +55 -0
  206. package/release-manager/dist/update/trust-metadata.d.ts.map +1 -0
  207. package/release-manager/dist/update/trust-metadata.js +170 -0
  208. package/release-manager/dist/update/trust-metadata.js.map +1 -0
  209. package/release-manager/dist/update/update-history.d.ts +46 -0
  210. package/release-manager/dist/update/update-history.d.ts.map +1 -0
  211. package/release-manager/dist/update/update-history.js +123 -0
  212. package/release-manager/dist/update/update-history.js.map +1 -0
  213. package/release-manager/dist/utils/config-file-io.d.ts +26 -0
  214. package/release-manager/dist/utils/config-file-io.d.ts.map +1 -0
  215. package/release-manager/dist/utils/config-file-io.js +128 -0
  216. package/release-manager/dist/utils/config-file-io.js.map +1 -0
  217. package/release-manager/dist/utils/env.d.ts +60 -0
  218. package/release-manager/dist/utils/env.d.ts.map +1 -0
  219. package/release-manager/dist/utils/env.js +308 -0
  220. package/release-manager/dist/utils/env.js.map +1 -0
  221. package/release-manager/dist/utils/logger.d.ts +15 -0
  222. package/release-manager/dist/utils/logger.d.ts.map +1 -0
  223. package/release-manager/dist/utils/logger.js +30 -0
  224. package/release-manager/dist/utils/logger.js.map +1 -0
  225. package/release-manager/dist/utils/workspace-divergence.d.ts +36 -0
  226. package/release-manager/dist/utils/workspace-divergence.d.ts.map +1 -0
  227. package/release-manager/dist/utils/workspace-divergence.js +87 -0
  228. package/release-manager/dist/utils/workspace-divergence.js.map +1 -0
  229. package/release-manager/package.json +79 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-history.d.ts","sourceRoot":"","sources":["../../src/update/update-history.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH,MAAM,MAAM,WAAW,GACnB,QAAQ,GACR,WAAW,GACX,mBAAmB,GACnB,kBAAkB,GAClB,UAAU,GACV,SAAS,GACT,UAAU,CAAC;AAEf,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,UAAU,GAAG,MAAM,CAAC;AAE/D,MAAM,MAAM,cAAc,GAAG,WAAW,GAAG,SAAS,GAAG,QAAQ,GAAG,WAAW,CAAC;AAE9E,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,gBAAgB,CAAC;IACrC,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;IACjC,QAAQ,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1C,0EAA0E;IAC1E,QAAQ,CAAC,qBAAqB,EAAE,OAAO,CAAC;IACxC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,QAAQ,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CACvC;AAED,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAEvB,YAAY,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAIzC;CACF;AAgBD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE;IACvC,IAAI,EAAE,WAAW,CAAC;IAClB,0BAA0B,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1C,2BAA2B,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5C,GAAG,gBAAgB,CAMnB;AAiBD,0EAA0E;AAC1E,wBAAgB,kBAAkB,CAAC,eAAe,EAAE,MAAM,EAAE,KAAK,EAAE,kBAAkB,GAAG,IAAI,CAU3F;AAED,+DAA+D;AAC/D,wBAAgB,iBAAiB,CAAC,eAAe,EAAE,MAAM,GAAG,kBAAkB,EAAE,CA6C/E"}
@@ -0,0 +1,123 @@
1
+ /**
2
+ * Update history semantics (SPEC §12).
3
+ *
4
+ * History events use explicit kinds: update, reinstall, channel_promotion,
5
+ * legacy_migration, rollback, refusal, and recovery. Direction is DERIVED
6
+ * from canonical release identity and metadata sequence — never from
7
+ * package.json values found in a checkout. Every failed or refused event
8
+ * states what happened, whether the previous release remains active, and
9
+ * the safest next action.
10
+ */
11
+ import { appendFileSync, closeSync, existsSync, mkdirSync, openSync, readFileSync } from 'node:fs';
12
+ import { dirname } from 'node:path';
13
+ export class UpdateHistoryError extends Error {
14
+ field;
15
+ constructor(field, message) {
16
+ super(message);
17
+ this.name = 'UpdateHistoryError';
18
+ this.field = field;
19
+ }
20
+ }
21
+ const HISTORY_KINDS = new Set([
22
+ 'update', 'reinstall', 'channel_promotion', 'legacy_migration', 'rollback', 'refusal', 'recovery',
23
+ ]);
24
+ const HISTORY_DIRECTIONS = new Set(['forward', 'backward', 'none']);
25
+ const HISTORY_OUTCOMES = new Set(['succeeded', 'refused', 'failed', 'recovered']);
26
+ const isHistoryKind = (value) => HISTORY_KINDS.has(value);
27
+ const isHistoryDirection = (value) => HISTORY_DIRECTIONS.has(value);
28
+ const isHistoryOutcome = (value) => HISTORY_OUTCOMES.has(value);
29
+ /**
30
+ * Direction is derived from canonical publication sequences: forward when the
31
+ * event's release is newer than the previous one, backward when older,
32
+ * none for reinstall/refusal/unknown.
33
+ */
34
+ export function classifyDirection(input) {
35
+ if (input.kind === 'reinstall' || input.kind === 'refusal')
36
+ return 'none';
37
+ if (input.releasePublicationSequence === null || input.previousPublicationSequence === null)
38
+ return 'none';
39
+ if (input.releasePublicationSequence > input.previousPublicationSequence)
40
+ return 'forward';
41
+ if (input.releasePublicationSequence < input.previousPublicationSequence)
42
+ return 'backward';
43
+ return 'none';
44
+ }
45
+ function validateEvent(event) {
46
+ if (!HISTORY_KINDS.has(event.kind)) {
47
+ throw new UpdateHistoryError('kind', `Unknown history kind: ${JSON.stringify(event.kind)}`);
48
+ }
49
+ if (!/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d+)?Z$/.test(event.at)) {
50
+ throw new UpdateHistoryError('at', `History event timestamps must be RFC3339 UTC: ${JSON.stringify(event.at)}`);
51
+ }
52
+ if (event.outcome !== 'succeeded' && event.outcome !== 'refused' && event.outcome !== 'failed' && event.outcome !== 'recovered') {
53
+ throw new UpdateHistoryError('outcome', `Unknown history outcome: ${JSON.stringify(event.outcome)}`);
54
+ }
55
+ if (event.outcome !== 'succeeded' && event.nextAction === null) {
56
+ throw new UpdateHistoryError('nextAction', `A ${event.outcome} history event must carry a next action (rc-9).`);
57
+ }
58
+ }
59
+ /** Appends one durable history event to `<pdHome>/logs/history.jsonl`. */
60
+ export function appendHistoryEvent(historyFilePath, event) {
61
+ validateEvent(event);
62
+ mkdirSync(dirname(historyFilePath), { recursive: true });
63
+ let descriptor;
64
+ try {
65
+ descriptor = openSync(historyFilePath, 'a');
66
+ appendFileSync(descriptor, `${JSON.stringify(event)}\n`);
67
+ }
68
+ finally {
69
+ if (descriptor !== undefined)
70
+ closeSync(descriptor);
71
+ }
72
+ }
73
+ /** Strict reader for tests and the Console history surface. */
74
+ export function readHistoryEvents(historyFilePath) {
75
+ if (!existsSync(historyFilePath))
76
+ return [];
77
+ const raw = readFileSync(historyFilePath, 'utf8');
78
+ const events = [];
79
+ for (const line of raw.split('\n')) {
80
+ if (line.trim().length === 0)
81
+ continue;
82
+ const parsed = JSON.parse(line);
83
+ if (typeof parsed !== 'object' || parsed === null || Array.isArray(parsed)) {
84
+ throw new UpdateHistoryError('line', 'history lines must be objects');
85
+ }
86
+ const read = (field) => Reflect.get(parsed, field);
87
+ const fail = (field, value) => {
88
+ throw new UpdateHistoryError('line', `history field "${field}" has invalid type: ${JSON.stringify(value)}`);
89
+ };
90
+ const requireString = (field) => {
91
+ const value = read(field);
92
+ return typeof value === 'string' ? value : fail(field, value);
93
+ };
94
+ const stringOrNull = (field) => {
95
+ const value = read(field);
96
+ if (value === null || value === undefined)
97
+ return null;
98
+ return typeof value === 'string' ? value : fail(field, value);
99
+ };
100
+ // Enum fields are narrowed through their closed vocabularies before
101
+ // construction; validateEvent below re-checks cross-field contracts.
102
+ const kindValue = requireString('kind');
103
+ const directionValue = requireString('direction');
104
+ const outcomeValue = requireString('outcome');
105
+ const event = {
106
+ at: requireString('at'),
107
+ kind: isHistoryKind(kindValue) ? kindValue : fail('kind', kindValue),
108
+ direction: isHistoryDirection(directionValue) ? directionValue : fail('direction', directionValue),
109
+ outcome: isHistoryOutcome(outcomeValue) ? outcomeValue : fail('outcome', outcomeValue),
110
+ productVersion: stringOrNull('productVersion'),
111
+ releaseId: stringOrNull('releaseId'),
112
+ previousReleaseId: stringOrNull('previousReleaseId'),
113
+ previousRemainsActive: read('previousRemainsActive') === true,
114
+ reason: stringOrNull('reason'),
115
+ nextAction: stringOrNull('nextAction'),
116
+ transactionId: stringOrNull('transactionId'),
117
+ };
118
+ validateEvent(event);
119
+ events.push(event);
120
+ }
121
+ return events;
122
+ }
123
+ //# sourceMappingURL=update-history.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-history.js","sourceRoot":"","sources":["../../src/update/update-history.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import * as fs from 'node:fs';
2
+ export interface ConfigFileOps {
3
+ mkdtempSync: typeof fs.mkdtempSync;
4
+ openSync: typeof fs.openSync;
5
+ writeFileSync: typeof fs.writeFileSync;
6
+ writeSync: typeof fs.writeSync;
7
+ fsyncSync: typeof fs.fsyncSync;
8
+ closeSync: typeof fs.closeSync;
9
+ renameSync: typeof fs.renameSync;
10
+ unlinkSync: typeof fs.unlinkSync;
11
+ rmdirSync: typeof fs.rmdirSync;
12
+ readFileSync: typeof fs.readFileSync;
13
+ existsSync: typeof fs.existsSync;
14
+ }
15
+ /** Extract a POSIX errno code (EPERM/EACCES/ENOENT/...) from a thrown fs error. */
16
+ export declare function errnoCode(value: unknown): string | undefined;
17
+ /** Same-directory, flushed temp write followed by atomic replacement. */
18
+ export declare function atomicReplaceTextFile(filePath: string, content: string, ops?: ConfigFileOps): void;
19
+ export interface ConfigFileLockOptions {
20
+ ops?: ConfigFileOps;
21
+ maxAttempts?: number;
22
+ sleep?: (milliseconds: number) => void;
23
+ }
24
+ /** Cross-process O_EXCL lock following the project's Runtime V2 lock convention. */
25
+ export declare function withConfigFileLock<T>(filePath: string, action: () => T, options?: ConfigFileLockOptions): T;
26
+ //# sourceMappingURL=config-file-io.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-file-io.d.ts","sourceRoot":"","sources":["../../src/utils/config-file-io.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAG9B,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,OAAO,EAAE,CAAC,WAAW,CAAC;IACnC,QAAQ,EAAE,OAAO,EAAE,CAAC,QAAQ,CAAC;IAC7B,aAAa,EAAE,OAAO,EAAE,CAAC,aAAa,CAAC;IACvC,SAAS,EAAE,OAAO,EAAE,CAAC,SAAS,CAAC;IAC/B,SAAS,EAAE,OAAO,EAAE,CAAC,SAAS,CAAC;IAC/B,SAAS,EAAE,OAAO,EAAE,CAAC,SAAS,CAAC;IAC/B,UAAU,EAAE,OAAO,EAAE,CAAC,UAAU,CAAC;IACjC,UAAU,EAAE,OAAO,EAAE,CAAC,UAAU,CAAC;IACjC,SAAS,EAAE,OAAO,EAAE,CAAC,SAAS,CAAC;IAC/B,YAAY,EAAE,OAAO,EAAE,CAAC,YAAY,CAAC;IACrC,UAAU,EAAE,OAAO,EAAE,CAAC,UAAU,CAAC;CAClC;AAID,mFAAmF;AACnF,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAI5D;AAED,yEAAyE;AACzE,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,GAAE,aAAwB,GAAG,IAAI,CAkC5G;AAgBD,MAAM,WAAW,qBAAqB;IACpC,GAAG,CAAC,EAAE,aAAa,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,IAAI,CAAC;CACxC;AAED,oFAAoF;AACpF,wBAAgB,kBAAkB,CAAC,CAAC,EAClC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,CAAC,EACf,OAAO,GAAE,qBAA0B,GAClC,CAAC,CAyCH"}
@@ -0,0 +1,128 @@
1
+ import * as fs from 'node:fs';
2
+ import * as path from 'node:path';
3
+ const FILE_OPS = fs;
4
+ /** Extract a POSIX errno code (EPERM/EACCES/ENOENT/...) from a thrown fs error. */
5
+ export function errnoCode(value) {
6
+ if (typeof value !== 'object' || value === null || !Object.hasOwn(value, 'code'))
7
+ return undefined;
8
+ const { code } = value;
9
+ return typeof code === 'string' ? code : undefined;
10
+ }
11
+ /** Same-directory, flushed temp write followed by atomic replacement. */
12
+ export function atomicReplaceTextFile(filePath, content, ops = FILE_OPS) {
13
+ const tempDir = ops.mkdtempSync(path.join(path.dirname(filePath), '.pd-config-write-'));
14
+ const tempPath = path.join(tempDir, 'config.yaml');
15
+ let fd;
16
+ let replaced = false;
17
+ let operationError;
18
+ try {
19
+ fd = ops.openSync(tempPath, fs.constants.O_WRONLY | fs.constants.O_CREAT | fs.constants.O_EXCL, 0o600);
20
+ ops.writeFileSync(fd, content, 'utf8');
21
+ ops.fsyncSync(fd);
22
+ ops.closeSync(fd);
23
+ fd = undefined;
24
+ ops.renameSync(tempPath, filePath);
25
+ replaced = true;
26
+ }
27
+ catch (error) {
28
+ operationError = error;
29
+ }
30
+ let cleanupError;
31
+ if (fd !== undefined) {
32
+ try {
33
+ ops.closeSync(fd);
34
+ }
35
+ catch (error) {
36
+ cleanupError = error;
37
+ }
38
+ }
39
+ if (!replaced && ops.existsSync(tempPath)) {
40
+ try {
41
+ ops.unlinkSync(tempPath);
42
+ }
43
+ catch (error) {
44
+ cleanupError ??= error;
45
+ }
46
+ }
47
+ if (ops.existsSync(tempDir)) {
48
+ try {
49
+ ops.rmdirSync(tempDir);
50
+ }
51
+ catch (error) {
52
+ cleanupError ??= error;
53
+ }
54
+ }
55
+ if (operationError !== undefined && cleanupError !== undefined) {
56
+ throw new AggregateError([operationError, cleanupError], 'Atomic config replacement and cleanup both failed');
57
+ }
58
+ if (operationError !== undefined)
59
+ throw operationError instanceof Error ? operationError : new Error(String(operationError));
60
+ if (cleanupError !== undefined)
61
+ throw cleanupError instanceof Error ? cleanupError : new Error(String(cleanupError));
62
+ }
63
+ function sleepSync(milliseconds) {
64
+ if (milliseconds <= 0)
65
+ return;
66
+ Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, milliseconds);
67
+ }
68
+ function readLockPid(lockPath, ops) {
69
+ try {
70
+ const value = Number.parseInt(ops.readFileSync(lockPath, 'utf8').trim(), 10);
71
+ return Number.isNaN(value) ? null : value;
72
+ }
73
+ catch {
74
+ return null;
75
+ }
76
+ }
77
+ /** Cross-process O_EXCL lock following the project's Runtime V2 lock convention. */
78
+ export function withConfigFileLock(filePath, action, options = {}) {
79
+ const ops = options.ops ?? FILE_OPS;
80
+ const lockPath = `${filePath}.lock`;
81
+ const maxAttempts = options.maxAttempts ?? 50;
82
+ const wait = options.sleep ?? sleepSync;
83
+ let acquired = false;
84
+ for (let attempt = 0; attempt < maxAttempts && !acquired; attempt += 1) {
85
+ let lockFd;
86
+ try {
87
+ lockFd = ops.openSync(lockPath, fs.constants.O_WRONLY | fs.constants.O_CREAT | fs.constants.O_EXCL, 0o600);
88
+ ops.writeSync(lockFd, String(process.pid));
89
+ ops.fsyncSync(lockFd);
90
+ ops.closeSync(lockFd);
91
+ lockFd = undefined;
92
+ acquired = true;
93
+ }
94
+ catch (error) {
95
+ if (lockFd !== undefined) {
96
+ try {
97
+ ops.closeSync(lockFd);
98
+ }
99
+ catch { /* preserve the acquisition error */ }
100
+ try {
101
+ ops.unlinkSync(lockPath);
102
+ }
103
+ catch { /* preserve the acquisition error */ }
104
+ }
105
+ if (errnoCode(error) !== 'EEXIST')
106
+ throw error;
107
+ // Ownership rule: EEXIST never authorizes deletion. PID/age metadata may
108
+ // be stale or malformed, but only the creator may remove this lock.
109
+ if (attempt < maxAttempts - 1) {
110
+ wait(Math.min(10 * 2 ** attempt, 500));
111
+ }
112
+ }
113
+ }
114
+ if (!acquired) {
115
+ const holderPid = readLockPid(lockPath, ops);
116
+ const holder = holderPid === null ? 'unknown' : `PID ${holderPid}`;
117
+ throw new Error(`Failed to acquire config lock ${lockPath}; holder ${holder}; ` +
118
+ 'nextAction=remove the lock manually only after verifying no installer is active');
119
+ }
120
+ try {
121
+ return action();
122
+ }
123
+ finally {
124
+ if (readLockPid(lockPath, ops) === process.pid)
125
+ ops.unlinkSync(lockPath);
126
+ }
127
+ }
128
+ //# sourceMappingURL=config-file-io.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-file-io.js","sourceRoot":"","sources":["../../src/utils/config-file-io.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,60 @@
1
+ export interface EnvCheckResult {
2
+ hasOpenClaw: boolean;
3
+ openclawVersion?: string;
4
+ hasNode: boolean;
5
+ nodeVersion?: string;
6
+ isNodeSupported: boolean;
7
+ hasPython: boolean;
8
+ pythonVersion?: string;
9
+ hasGit: boolean;
10
+ }
11
+ export interface WorkspaceInfo {
12
+ detectedPath: string;
13
+ exists: boolean;
14
+ hasPrinciples: boolean;
15
+ isFirstInstall: boolean;
16
+ coreFiles: string[];
17
+ }
18
+ /**
19
+ * 检测运行环境
20
+ */
21
+ export declare function checkEnvironment(): EnvCheckResult;
22
+ /**
23
+ * 检测 OpenClaw 工作区
24
+ */
25
+ export declare function detectWorkspace(): WorkspaceInfo;
26
+ /**
27
+ * 获取 OpenClaw 配置目录
28
+ */
29
+ export declare function getOpenClawConfigDir(): string;
30
+ /**
31
+ * 获取插件扩展目录
32
+ */
33
+ export declare function getPluginExtDir(): string;
34
+ export interface OpenClawGatewayStatus {
35
+ isRunning: boolean;
36
+ port?: number;
37
+ pid?: number;
38
+ }
39
+ /**
40
+ * 从 netstat -ano -p tcp 输出解析监听指定端口的 PID。
41
+ * 行形如:TCP 0.0.0.0:135 0.0.0.0:0 LISTENING 1234(IPv6 本地地址为 [::]:port)。
42
+ * rc-1/rc-5: 按 unknown 语义逐字段校验,键/列缺失即跳过,不信任列位置。
43
+ */
44
+ export declare function parseNetstatPid(output: string, port: number): number | undefined;
45
+ export declare function checkOpenClawGateway(): Promise<OpenClawGatewayStatus>;
46
+ export interface GatewayControlResult {
47
+ ok: boolean;
48
+ error?: string;
49
+ }
50
+ /**
51
+ * Stop the OpenClaw gateway service. Call before mutating the plugin ext dir
52
+ * to release file locks held on native modules (EPERM on backup rename).
53
+ */
54
+ export declare function stopOpenClawGateway(): Promise<GatewayControlResult>;
55
+ /**
56
+ * Start the OpenClaw gateway service (inverse of stopOpenClawGateway). Called
57
+ * after install completes (success or failure) to leave the gateway running.
58
+ */
59
+ export declare function restartOpenClawGateway(): Promise<GatewayControlResult>;
60
+ //# sourceMappingURL=env.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../src/utils/env.ts"],"names":[],"mappings":"AAiBA,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,OAAO,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,OAAO,CAAC;IACzB,SAAS,EAAE,OAAO,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,OAAO,CAAC;IAChB,aAAa,EAAE,OAAO,CAAC;IACvB,cAAc,EAAE,OAAO,CAAC;IACxB,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAoBD;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,cAAc,CA+DjD;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,aAAa,CA4D/C;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAED,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AA+BD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAgBhF;AAED,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,qBAAqB,CAAC,CAmC3E;AAED,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,OAAO,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAiCD;;;GAGG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,oBAAoB,CAAC,CAEzE;AAED;;;GAGG;AACH,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,oBAAoB,CAAC,CAE5E"}