@khoavu882/doflow 2.0.0-beta.3 → 2.0.0-beta.5

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 (236) hide show
  1. package/bin/doflow.js +2 -2
  2. package/core/.antigravity-plugin/plugin.json +0 -1
  3. package/core/.claude-plugin/plugin.json +1 -1
  4. package/core/.codex-plugin/plugin.json +1 -1
  5. package/core/.plugin/plugin.json +1 -1
  6. package/core/harnesses/claude/hooks/mcp-tool-guard.sh +7 -17
  7. package/core/harnesses/claude/hooks/pre-bash-guard.sh +7 -17
  8. package/core/harnesses/claude/hooks/pre-implement-gate.sh +7 -18
  9. package/core/harnesses/claude/hooks/session-start.sh +5 -3
  10. package/core/harnesses/claude/hooks/stop-check.sh +5 -3
  11. package/core/harnesses/claude/hooks/subagent-audit.sh +5 -5
  12. package/core/harnesses/claude/hooks/user-prompt-submit.sh +5 -3
  13. package/core/harnesses/codex/hooks/mcp-tool-guard.sh +7 -15
  14. package/core/harnesses/codex/hooks/pre-bash-guard.sh +7 -15
  15. package/core/harnesses/codex/hooks/pre-implement-gate.sh +7 -16
  16. package/core/harnesses/codex/hooks/session-start.sh +5 -3
  17. package/core/harnesses/codex/hooks/stop-check.sh +6 -5
  18. package/core/harnesses/codex/hooks/subagent-audit.sh +17 -6
  19. package/core/harnesses/codex/hooks/user-prompt-submit.sh +5 -4
  20. package/core/harnesses/gemini/hooks/mcp-tool-guard.sh +7 -18
  21. package/core/harnesses/gemini/hooks/pre-bash-guard.sh +7 -18
  22. package/core/harnesses/gemini/hooks/pre-implement-gate.sh +7 -19
  23. package/core/harnesses/gemini/hooks/session-start.sh +5 -3
  24. package/core/harnesses/kiro/hooks/mcp-tool-guard.sh +20 -5
  25. package/core/harnesses/kiro/hooks/pre-bash-guard.sh +20 -5
  26. package/core/harnesses/kiro/hooks/pre-implement-gate.sh +20 -5
  27. package/core/harnesses/kiro/hooks/session-start.sh +11 -5
  28. package/core/harnesses/kiro/hooks/stop-check.sh +21 -30
  29. package/core/harnesses/pi/extensions/doflow-guard.js +159 -0
  30. package/core/harnesses/shared/hooks/ENVELOPE_MIGRATION.md +27 -11
  31. package/core/harnesses/shared/hooks/adapters/antigravity.js +14 -57
  32. package/core/harnesses/shared/hooks/bridge/bridge.sh +184 -0
  33. package/core/harnesses/shared/hooks/bridge/envelope.jq +60 -0
  34. package/core/harnesses/shared/hooks/bridge/respond.sh +62 -0
  35. package/core/harnesses/shared/hooks/policies/capture-failure.sh +4 -2
  36. package/core/harnesses/shared/hooks/policies/contract.sh +75 -0
  37. package/core/harnesses/shared/hooks/policies/deny-json.sh +39 -4
  38. package/core/harnesses/shared/hooks/policies/lib.sh +4 -2
  39. package/core/harnesses/shared/hooks/policies/mcp-tool-guard.sh +46 -34
  40. package/core/harnesses/shared/hooks/policies/pre-bash-guard.sh +75 -25
  41. package/core/harnesses/shared/hooks/policies/pre-implementation-gate.sh +67 -73
  42. package/core/harnesses/shared/hooks/policies/session-context.sh +37 -7
  43. package/core/harnesses/shared/hooks/policies/stop-check.sh +42 -15
  44. package/core/harnesses/shared/hooks/policies/subagent-audit.sh +35 -5
  45. package/core/harnesses/shared/hooks/policies/user-prompt-submit.sh +40 -7
  46. package/core/harnesses/shared/hooks/stream-hook-runner.js +69 -181
  47. package/core/registry/assets.json +19 -0
  48. package/core/registry/contracts.json +2 -2
  49. package/core/registry/harnesses.json +196 -10
  50. package/core/registry/lifecycle.json +2626 -7
  51. package/core/registry/storage.json +110 -83
  52. package/core/registry/verification.json +1 -1
  53. package/core/shared/scripts/doflow/bash/render-puml.sh +2 -2
  54. package/core/shared/scripts/doflow/bin/doflow-run +10 -6
  55. package/core/shared/skills/do-design/SKILL.md +6 -6
  56. package/core/shared/skills/do-execute-plan/SKILL.md +11 -10
  57. package/core/shared/skills/do-execute-plan/references/readiness_gate.md +2 -0
  58. package/core/shared/skills/do-execute-plan/references/scaffold.md +2 -2
  59. package/core/shared/skills/do-implement/SKILL.md +3 -2
  60. package/core/shared/skills/do-plan/SKILL.md +7 -8
  61. package/package.json +4 -2
  62. package/src/adapters/antigravity/{index.ts → index.js} +141 -105
  63. package/src/adapters/claude/{index.ts → index.js} +63 -49
  64. package/src/adapters/claude/{mcp.ts → mcp.js} +16 -16
  65. package/src/adapters/codex/{agents.ts → agents.js} +24 -24
  66. package/src/adapters/codex/{config.ts → config.js} +49 -49
  67. package/src/adapters/codex/{hooks.ts → hooks.js} +62 -27
  68. package/src/adapters/codex/{index.ts → index.js} +148 -105
  69. package/src/adapters/codex/{mcp.ts → mcp.js} +38 -38
  70. package/src/adapters/codex/{native-projection.ts → native-projection.js} +5 -5
  71. package/src/adapters/copilot/{index.ts → index.js} +42 -42
  72. package/src/adapters/{copy-tree.ts → copy-tree.js} +74 -74
  73. package/src/adapters/gemini/{hooks.ts → hooks.js} +78 -37
  74. package/src/adapters/gemini/{index.ts → index.js} +96 -57
  75. package/src/adapters/{hook-commands.ts → hook-commands.js} +8 -8
  76. package/src/adapters/{index.ts → index.js} +13 -13
  77. package/src/adapters/kiro/{index.ts → index.js} +49 -35
  78. package/src/adapters/{mcp-entries.ts → mcp-entries.js} +55 -55
  79. package/src/adapters/opencode/{index.ts → index.js} +52 -52
  80. package/src/adapters/pi/hooks.js +119 -0
  81. package/src/adapters/pi/{index.ts → index.js} +64 -39
  82. package/src/adapters/pi/{json-members.ts → json-members.js} +23 -23
  83. package/src/adapters/pi/{mcp.ts → mcp.js} +70 -70
  84. package/src/adapters/{resolve-source.ts → resolve-source.js} +1 -1
  85. package/src/cli/commands/{install.ts → install.js} +25 -25
  86. package/src/cli/commands/{list-backups.ts → list-backups.js} +4 -4
  87. package/src/cli/commands/{reconcile.ts → reconcile.js} +19 -19
  88. package/src/cli/commands/{remove.ts → remove.js} +10 -10
  89. package/src/cli/commands/{rollback.ts → rollback.js} +17 -17
  90. package/src/cli/commands/{self-update.ts → self-update.js} +3 -3
  91. package/src/cli/commands/{status.ts → status.js} +24 -24
  92. package/src/cli/commands/{tools.ts → tools.js} +16 -16
  93. package/src/cli/commands/{update.ts → update.js} +20 -20
  94. package/src/cli/{index.ts → index.js} +43 -31
  95. package/src/cli/{runtime-commands.ts → runtime-commands.js} +97 -58
  96. package/src/cli/{shared.ts → shared.js} +40 -40
  97. package/src/helper/{bash-helper.ts → bash-helper.js} +7 -7
  98. package/src/helper/{git.ts → git.js} +2 -2
  99. package/src/helper/{guardrails.ts → guardrails.js} +10 -10
  100. package/src/helper/{harness-paths.ts → harness-paths.js} +24 -24
  101. package/src/helper/{marker-merge.ts → marker-merge.js} +4 -4
  102. package/src/helper/{prompt.ts → prompt.js} +5 -5
  103. package/src/helper/{repo-root.ts → repo-root.js} +2 -2
  104. package/src/helper/{settings-merge.ts → settings-merge.js} +27 -27
  105. package/src/helper/{settings-scope.ts → settings-scope.js} +3 -3
  106. package/src/helper/{toml.ts → toml.js} +48 -48
  107. package/src/install/{backup-set.ts → backup-set.js} +16 -16
  108. package/src/install/{backup.ts → backup.js} +65 -65
  109. package/src/install/{context.ts → context.js} +15 -15
  110. package/src/install/{manifest.ts → manifest.js} +27 -27
  111. package/src/install/{mcp.ts → mcp.js} +30 -30
  112. package/src/install/{paths.ts → paths.js} +15 -15
  113. package/src/install/{targets.ts → targets.js} +10 -10
  114. package/src/install/{tool-lifecycle.ts → tool-lifecycle.js} +20 -20
  115. package/src/lifecycle/{bash-availability.ts → bash-availability.js} +1 -1
  116. package/src/lifecycle/coverage.js +57 -0
  117. package/src/lifecycle/hook-step.js +61 -0
  118. package/src/lifecycle/{index.ts → index.js} +160 -146
  119. package/src/lifecycle/{mcp-index.ts → mcp-index.js} +1 -1
  120. package/src/lifecycle/{policies.ts → policies.js} +11 -11
  121. package/src/lifecycle/{view.ts → view.js} +28 -28
  122. package/src/registry/{index.ts → index.js} +195 -66
  123. package/src/release/build-package.js +91 -0
  124. package/src/release/changelog-section.js +70 -0
  125. package/src/release/{sync-plugin-versions.ts → sync-plugin-versions.js} +4 -4
  126. package/src/runtime/advice/{cli.ts → cli.js} +31 -31
  127. package/src/runtime/advice/{client.ts → client.js} +44 -44
  128. package/src/runtime/advice/{config.ts → config.js} +16 -16
  129. package/src/runtime/advice/{doctor.ts → doctor.js} +32 -32
  130. package/src/runtime/advice/{endpoint-guard.ts → endpoint-guard.js} +20 -20
  131. package/src/runtime/advice/{kinds.ts → kinds.js} +16 -16
  132. package/src/runtime/advice/providers/{ollama-systemone.ts → ollama-systemone.js} +21 -21
  133. package/src/runtime/advice/{record.ts → record.js} +19 -19
  134. package/src/runtime/advice/{registry.ts → registry.js} +16 -16
  135. package/src/runtime/advice/{strength.ts → strength.js} +7 -7
  136. package/src/runtime/{brief-tools.ts → brief-tools.js} +50 -50
  137. package/src/runtime/{c4-project.ts → c4-project.js} +27 -27
  138. package/src/runtime/candidate.js +505 -0
  139. package/src/runtime/{capability-router.ts → capability-router.js} +39 -39
  140. package/src/runtime/{checkouts.ts → checkouts.js} +21 -21
  141. package/src/runtime/{claims.ts → claims.js} +44 -35
  142. package/src/runtime/{cli-result.ts → cli-result.js} +15 -8
  143. package/src/runtime/{cli.ts → cli.js} +59 -292
  144. package/src/runtime/{command-detect.ts → command-detect.js} +47 -47
  145. package/src/runtime/context/budget.js +203 -0
  146. package/src/runtime/context/compose.js +1367 -0
  147. package/src/runtime/context/delivery-store.js +102 -0
  148. package/src/runtime/context/mandatory.js +594 -0
  149. package/src/runtime/context/pointer.js +142 -0
  150. package/src/runtime/context-pack.js +1277 -0
  151. package/src/runtime/{decision-register.ts → decision-register.js} +67 -67
  152. package/src/runtime/evidence-fields.js +39 -0
  153. package/src/runtime/{evidence-ledger.ts → evidence-ledger.js} +32 -25
  154. package/src/runtime/failure/{capture.ts → capture.js} +29 -29
  155. package/src/runtime/failure/{classifier.ts → classifier.js} +4 -4
  156. package/src/runtime/failure/{cli.ts → cli.js} +30 -30
  157. package/src/runtime/failure/{home.ts → home.js} +6 -6
  158. package/src/runtime/failure/{store.ts → store.js} +32 -32
  159. package/src/runtime/{feature-resolve.ts → feature-resolve.js} +6 -6
  160. package/src/runtime/{freshness.ts → freshness.js} +59 -22
  161. package/src/runtime/{health.ts → health.js} +72 -72
  162. package/src/runtime/{history-compactor.ts → history-compactor.js} +25 -25
  163. package/src/runtime/{implementation-gate.ts → implementation-gate.js} +30 -30
  164. package/src/runtime/inventory/{coverage.ts → coverage.js} +10 -10
  165. package/src/runtime/inventory/{identity.ts → identity.js} +2 -2
  166. package/src/runtime/inventory/{index.ts → index.js} +36 -36
  167. package/src/runtime/inventory/{precedence.ts → precedence.js} +2 -2
  168. package/src/runtime/inventory/{read-scopes.ts → read-scopes.js} +9 -9
  169. package/src/runtime/inventory/{siblings.ts → siblings.js} +15 -15
  170. package/src/runtime/knowledge/{chunker.ts → chunker.js} +12 -12
  171. package/src/runtime/knowledge/{hybrid.ts → hybrid.js} +17 -17
  172. package/src/runtime/knowledge/{index-store.ts → index-store.js} +23 -23
  173. package/src/runtime/knowledge/{retrieval.ts → retrieval.js} +27 -27
  174. package/src/runtime/{leak-scan.ts → leak-scan.js} +12 -12
  175. package/src/runtime/lifecycle/{cli.ts → cli.js} +32 -32
  176. package/src/runtime/lifecycle/{event-store.ts → event-store.js} +48 -48
  177. package/src/runtime/lifecycle/{fold.ts → fold.js} +41 -41
  178. package/src/runtime/lifecycle/{followup.ts → followup.js} +54 -54
  179. package/src/runtime/lifecycle/{goal.ts → goal.js} +50 -50
  180. package/src/runtime/lifecycle/{intent-writer.ts → intent-writer.js} +5 -5
  181. package/src/runtime/lifecycle/{overview.ts → overview.js} +47 -47
  182. package/src/runtime/lifecycle/{release.ts → release.js} +29 -29
  183. package/src/runtime/lifecycle/{report-store.ts → report-store.js} +25 -25
  184. package/src/runtime/lifecycle/{retention.ts → retention.js} +37 -37
  185. package/src/runtime/lifecycle/{root.ts → root.js} +9 -9
  186. package/src/runtime/lifecycle/{status.ts → status.js} +64 -64
  187. package/src/runtime/lifecycle/{store-upkeep.ts → store-upkeep.js} +46 -46
  188. package/src/runtime/{locator-resolve.ts → locator-resolve.js} +7 -7
  189. package/src/runtime/{mask.ts → mask.js} +22 -22
  190. package/src/runtime/{mcp-consultations.ts → mcp-consultations.js} +54 -54
  191. package/src/runtime/{mcp-reach.ts → mcp-reach.js} +24 -24
  192. package/src/runtime/{model-router.ts → model-router.js} +20 -20
  193. package/src/runtime/{outcome.ts → outcome.js} +27 -27
  194. package/src/runtime/{reach.ts → reach.js} +21 -21
  195. package/src/runtime/{readiness-record.ts → readiness-record.js} +12 -12
  196. package/src/runtime/{readiness.ts → readiness.js} +113 -43
  197. package/src/runtime/{recovery.ts → recovery.js} +15 -15
  198. package/src/runtime/{research-request.ts → research-request.js} +34 -34
  199. package/src/runtime/{retrieval-plan.ts → retrieval-plan.js} +453 -104
  200. package/src/runtime/retrieval-record.js +223 -0
  201. package/src/runtime/scaffold/{artifacts.ts → artifacts.js} +22 -19
  202. package/src/runtime/scaffold/{fingerprint.ts → fingerprint.js} +3 -3
  203. package/src/runtime/scaffold/{generate.ts → generate.js} +109 -109
  204. package/src/runtime/scaffold/{languages.ts → languages.js} +34 -34
  205. package/src/runtime/source-version.js +289 -0
  206. package/src/runtime/storage/{cli.ts → cli.js} +9 -9
  207. package/src/runtime/storage/{engine.ts → engine.js} +37 -37
  208. package/src/runtime/storage/{registry.ts → registry.js} +19 -19
  209. package/src/runtime/storage/{roots.ts → roots.js} +8 -8
  210. package/src/runtime/storage/{rules.ts → rules.js} +26 -26
  211. package/src/runtime/storage/{upkeep.ts → upkeep.js} +35 -35
  212. package/src/runtime/storage/{work-status.ts → work-status.js} +39 -39
  213. package/src/runtime/{task-attempts.ts → task-attempts.js} +62 -62
  214. package/src/runtime/{task-classifier.ts → task-classifier.js} +34 -34
  215. package/src/runtime/{task-scope.ts → task-scope.js} +40 -15
  216. package/src/runtime/{task-state.ts → task-state.js} +86 -21
  217. package/src/runtime/trace/{indicators.ts → indicators.js} +22 -22
  218. package/src/runtime/trace/{ledger.ts → ledger.js} +42 -42
  219. package/src/runtime/trace/{render.ts → render.js} +7 -7
  220. package/src/runtime/trace/{views.ts → views.js} +40 -40
  221. package/src/runtime/verification/{contract-runner.ts → contract-runner.js} +23 -23
  222. package/src/runtime/verification/{engine.ts → engine.js} +143 -143
  223. package/src/runtime/verification/{registry.ts → registry.js} +6 -6
  224. package/src/runtime/verification/{scope-bound.ts → scope-bound.js} +50 -50
  225. package/src/runtime/verification/{test-selection.ts → test-selection.js} +28 -28
  226. package/src/runtime/{workflow-engine.ts → workflow-engine.js} +50 -50
  227. package/src/runtime/{workflow-orchestrator.ts → workflow-orchestrator.js} +91 -91
  228. package/src/runtime/{worktree.ts → worktree.js} +31 -31
  229. package/src/state/{index.ts → index.js} +26 -26
  230. package/src/state/{lockfile.ts → lockfile.js} +20 -20
  231. package/src/state/{run-lock.ts → run-lock.js} +44 -44
  232. package/core/.antigravity-plugin/hooks.json +0 -39
  233. package/core/harnesses/shared/hooks/adapters/arg-fields.js +0 -19
  234. package/core/harnesses/shared/hooks/adapters/gemini.js +0 -114
  235. package/core/harnesses/shared/hooks/hooks.json +0 -47
  236. package/src/runtime/context-pack.ts +0 -492
@@ -15,7 +15,7 @@
15
15
  //
16
16
  // Only SELECTED servers are imported, so the cost is proportional to what is installed: a
17
17
  // one-server install pays for one doc, and an install with none produces no file at all.
18
- function renderMcpIndex(selectedServers: any[] | null | undefined): string | null {
18
+ function renderMcpIndex(selectedServers ) {
19
19
  if (!selectedServers || selectedServers.length === 0) return null;
20
20
  const lines = ['# MCP short flags — this install'];
21
21
  for (const server of selectedServers) {
@@ -5,30 +5,30 @@
5
5
  // Registry lifecycle policies are logical intent. This projection reports what a
6
6
  // harness may render and any human prerequisite; native event serialization stays
7
7
  // in the owning harness adapter.
8
- const { harnessFor } = require('../registry/index.ts');
8
+ const { harnessFor } = require('../registry/index.js');
9
9
 
10
10
  const POLICY_STATUSES = new Set(['supported', 'different', 'unavailable', 'prerequisite']);
11
11
 
12
- function unique(values: any[]): any[] { return [...new Set(values.filter(Boolean))]; }
12
+ function unique(values ) { return [...new Set(values.filter(Boolean))]; }
13
13
 
14
- function policyFor(registry: any, id: string): any {
15
- const policy = registry?.lifecycle?.find((item: any) => item.id === id);
14
+ function policyFor(registry , id ) {
15
+ const policy = registry?.lifecycle?.find((item ) => item.id === id);
16
16
  if (!policy) throw new Error(`Unknown lifecycle policy '${id}'`);
17
17
  return policy;
18
18
  }
19
19
 
20
- function renderPolicy(policy: any, harness: any): any {
20
+ function renderPolicy(policy , harness ) {
21
21
  const mapping = policy?.mappings?.[harness.id];
22
22
  if (!mapping) throw new Error(`Lifecycle policy '${policy.id}' has no mapping for '${harness.id}'`);
23
- const requiredCapabilities = (policy.requires || []).map((capability: string): [string, any] => {
23
+ const requiredCapabilities = (policy.requires || []).map((capability ) => {
24
24
  const declaration = harness.capabilities?.[capability];
25
25
  if (!declaration) throw new Error(`Lifecycle policy '${policy.id}' requires unknown '${harness.id}' capability '${capability}'`);
26
26
  return [capability, declaration];
27
27
  });
28
- const unavailableCapability = requiredCapabilities.find(([, declaration]: [string, any]) => declaration.status === 'unavailable');
28
+ const unavailableCapability = requiredCapabilities.find(([, declaration] ) => declaration.status === 'unavailable');
29
29
  const prerequisites = unique([
30
30
  ...(mapping.prerequisites || []),
31
- ...requiredCapabilities.flatMap(([, declaration]: [string, any]) => declaration.prerequisites || []),
31
+ ...requiredCapabilities.flatMap(([, declaration] ) => declaration.prerequisites || []),
32
32
  ]);
33
33
  const capabilityStatus = unavailableCapability ? 'unavailable' : mapping.status;
34
34
  const unavailable = capabilityStatus === 'unavailable';
@@ -60,14 +60,14 @@ function renderPolicy(policy: any, harness: any): any {
60
60
  }
61
61
 
62
62
  /** Render policy status data for one harness without calling an adapter or writing state. */
63
- function renderPolicies(registry: any, { harness: harnessId, policyIds }: { harness?: string, policyIds?: string[] | null } = {}): any {
63
+ function renderPolicies(registry , { harness: harnessId, policyIds } = {}) {
64
64
  if (!harnessId) throw new Error('A harness id is required to render lifecycle policies');
65
65
  const harness = harnessFor(registry, harnessId);
66
66
  const policies = policyIds === undefined || policyIds === null
67
67
  ? registry.lifecycle
68
- : policyIds.map((id: string) => policyFor(registry, id));
68
+ : policyIds.map((id ) => policyFor(registry, id));
69
69
  if (!Array.isArray(policies)) throw new Error('Lifecycle policies must be an array');
70
- return Object.freeze(policies.map((policy: any) => renderPolicy(policy, harness)));
70
+ return Object.freeze(policies.map((policy ) => renderPolicy(policy, harness)));
71
71
  }
72
72
 
73
73
  module.exports = { POLICY_STATUSES, policyFor, renderPolicy, renderPolicies };
@@ -8,21 +8,21 @@
8
8
  const fs = require('node:fs');
9
9
  const os = require('node:os');
10
10
  const path = require('node:path');
11
- const { parseToml } = require('../helper/toml.ts');
12
- const { createAdapterRegistry } = require('../adapters/index.ts');
13
- const { declaredHarnessPaths } = require('../helper/harness-paths.ts');
14
- const claudeAdapter = require('../adapters/claude/index.ts');
15
- const codexAdapter = require('../adapters/codex/index.ts');
16
- const { createGeminiAdapter } = require('../adapters/gemini/index.ts');
17
- const { createOpenCodeAdapter } = require('../adapters/opencode/index.ts');
18
- const { createPiAdapter } = require('../adapters/pi/index.ts');
19
- const { createCopilotAdapter } = require('../adapters/copilot/index.ts');
20
- const { createKiroAdapter } = require('../adapters/kiro/index.ts');
21
- const { createAntigravityAdapter } = require('../adapters/antigravity/index.ts');
22
- const { planLifecycle } = require('./index.ts');
23
- const { stateRoot, readLedger, defaultLedger } = require('../state/index.ts');
24
- const { selectAssets } = require('../registry/index.ts');
25
- const { defaultLock, readLock, writeLock, diffLocks, removeLock, pinnedSelections } = require('../state/lockfile.ts');
11
+ const { parseToml } = require('../helper/toml.js');
12
+ const { createAdapterRegistry } = require('../adapters/index.js');
13
+ const { declaredHarnessPaths } = require('../helper/harness-paths.js');
14
+ const claudeAdapter = require('../adapters/claude/index.js');
15
+ const codexAdapter = require('../adapters/codex/index.js');
16
+ const { createGeminiAdapter } = require('../adapters/gemini/index.js');
17
+ const { createOpenCodeAdapter } = require('../adapters/opencode/index.js');
18
+ const { createPiAdapter } = require('../adapters/pi/index.js');
19
+ const { createCopilotAdapter } = require('../adapters/copilot/index.js');
20
+ const { createKiroAdapter } = require('../adapters/kiro/index.js');
21
+ const { createAntigravityAdapter } = require('../adapters/antigravity/index.js');
22
+ const { planLifecycle } = require('./index.js');
23
+ const { stateRoot, readLedger, defaultLedger } = require('../state/index.js');
24
+ const { selectAssets } = require('../registry/index.js');
25
+ const { defaultLock, readLock, writeLock, diffLocks, removeLock, pinnedSelections } = require('../state/lockfile.js');
26
26
  // Tolerant because the projected runtime under `.doflow/runtime/` ships bin/, src/ and
27
27
  // core/registry/ but no package.json — see the `runtime.*` assets in core/registry/assets.json.
28
28
  // A hard require here would make every Node-backed verb fail in an install, which is the exact
@@ -32,9 +32,9 @@ function loadPkg() {
32
32
  }
33
33
  const pkg = loadPkg();
34
34
 
35
- function codexScope(scope: any) { return scope.global ? 'global' : 'project'; }
35
+ function codexScope(scope ) { return scope.global ? 'global' : 'project'; }
36
36
 
37
- function codexConfigResources(repoRoot: any, fsImpl: any) {
37
+ function codexConfigResources(repoRoot , fsImpl ) {
38
38
  const configSrc = path.join(repoRoot, 'core', 'harnesses', 'codex', 'config', 'config.toml');
39
39
  const parsed = parseToml(fsImpl.readFileSync(configSrc, 'utf8'));
40
40
  return [...parsed.entries.entries()].map(([identity, entry]) => ({
@@ -48,7 +48,7 @@ function codexConfigResources(repoRoot: any, fsImpl: any) {
48
48
  * mutation path until every native adapter has CLI-level parity.
49
49
  * `registry` is loaded once per command (by the caller) and threaded through here rather than
50
50
  * reloaded — the same registry also resolves every harness's MCP selection for that command. */
51
- function registryLifecycleView({ registry, scope, targets, mcpSelections = {}, mcpAdoptable = {}, retainedMcpIds = [], operation, repoRoot, force = false, adopt = false, permissions = false, statusline = false, fsImpl = fs }: any) {
51
+ function registryLifecycleView({ registry, scope, targets, mcpSelections = {}, mcpAdoptable = {}, retainedMcpIds = [], operation, repoRoot, force = false, adopt = false, permissions = false, statusline = false, fsImpl = fs } ) {
52
52
  const lifecycleScope = codexScope(scope);
53
53
  const scopeRoot = scope.global ? os.homedir() : path.resolve(scope.projectRoot);
54
54
  const neutralStateRoot = stateRoot({ scope: lifecycleScope, projectRoot: scopeRoot, homeDir: scopeRoot });
@@ -79,11 +79,11 @@ function registryLifecycleView({ registry, scope, targets, mcpSelections = {}, m
79
79
  return { registry, stateRoot: neutralStateRoot, ledger, plan, adapters };
80
80
  }
81
81
 
82
- function printRegistryLifecycle(view: any, prefix = '[PLAN]') {
82
+ function printRegistryLifecycle(view , prefix = '[PLAN]') {
83
83
  console.log(`${prefix} Registry lifecycle: ${view.plan.changes.length} native change(s), ${view.plan.conflicts.length} conflict(s), ${view.plan.prerequisites.length} prerequisite(s)`);
84
84
  for (const target of view.plan.targets) {
85
85
  console.log(`${prefix} ${target.harness}: ${target.changes.length} change(s)${target.conflicts.length ? `; conflicts: ${target.conflicts.join('; ')}` : ''}`);
86
- const hookChange = target.changes.find((change: any) => change.nativeComponent === 'hooks');
86
+ const hookChange = target.changes.find((change ) => change.nativeComponent === 'hooks');
87
87
  if (hookChange?.nativePlan?.trust?.required) {
88
88
  console.log(`${prefix} ${target.harness} hooks trust: ${hookChange.nativePlan.trust.status} (review required in ${target.harness})`);
89
89
  }
@@ -94,7 +94,7 @@ function printRegistryLifecycle(view: any, prefix = '[PLAN]') {
94
94
 
95
95
  /** Prints the plan's notices after a real run. Independent of whether anything changed: a no-op
96
96
  * reinstall of a harness that has a gap must still say so. */
97
- function printPlanNotices(view: any) {
97
+ function printPlanNotices(view ) {
98
98
  for (const { harness, notice } of view.plan.notices) console.log(`[INFO] ${harness}: ${notice}`);
99
99
  }
100
100
 
@@ -103,7 +103,7 @@ function printPlanNotices(view: any) {
103
103
  * src/targets.js — so a future non-lifecycle target doesn't silently gain lifecycle behavior. */
104
104
  const LIFECYCLE_HARNESSES = ['claude', 'codex', 'gemini', 'opencode', 'pi', 'copilot', 'kiro', 'antigravity'];
105
105
 
106
- function assertSafeRegistryPlan(view: any) {
106
+ function assertSafeRegistryPlan(view ) {
107
107
  if (view.plan.safe) return;
108
108
  for (const conflict of view.plan.conflicts) console.error(`[ERROR] ${conflict.harness} lifecycle refused: ${conflict.reason}`);
109
109
  for (const prerequisite of view.plan.prerequisites) console.error(`[ERROR] ${prerequisite.harness} lifecycle prerequisite: ${prerequisite.prerequisite}`);
@@ -119,9 +119,9 @@ function assertSafeRegistryPlan(view: any) {
119
119
  * selections carry over for pinned harnesses and are replaced by the rows this run resolved, `[]`
120
120
  * included. Assets are recomputed from the registry for every pinned harness. `null` when no harness
121
121
  * stays pinned. */
122
- function lockDocument({ registry, scope, scopeRoot, previous = null, ledger, plannedTargets = [], mcpSelections = {}, sourceVersion = pkg.version, now = new Date() }: any) {
123
- const held = new Set((ledger?.resources ?? []).map((resource: any) => resource?.harness));
124
- const pinned = [...new Set([...(previous?.targets ?? []).map((entry: any) => entry.harness), ...plannedTargets])]
122
+ function lockDocument({ registry, scope, scopeRoot, previous = null, ledger, plannedTargets = [], mcpSelections = {}, sourceVersion = pkg.version, now = new Date() } ) {
123
+ const held = new Set((ledger?.resources ?? []).map((resource ) => resource?.harness));
124
+ const pinned = [...new Set([...(previous?.targets ?? []).map((entry ) => entry.harness), ...plannedTargets])]
125
125
  .filter((harness) => held.has(harness)).sort();
126
126
  if (!pinned.length) return null;
127
127
  const assets = [];
@@ -145,13 +145,13 @@ function lockDocument({ registry, scope, scopeRoot, previous = null, ledger, pla
145
145
  /** Describe the reviewable delta between the pinned lock and the next one: "created" for a first
146
146
  * pin, "unchanged" when nothing pinned differs, "cleared" when nothing remains pinned, else a count
147
147
  * of the changed rows. */
148
- function lockDelta(previous: any, next: any) {
148
+ function lockDelta(previous , next ) {
149
149
  if (!next) return previous ? { changed: true, summary: 'cleared' } : { changed: false, summary: 'unchanged' };
150
150
  if (!previous) return { changed: true, summary: 'created' };
151
151
  const diff = diffLocks(previous, next);
152
152
  if (diff.clean) return { changed: false, summary: 'unchanged' };
153
153
  const count = ['targets', 'assets']
154
- .flatMap((section) => Object.values<any>(diff[section]).map((list: any) => list.length))
154
+ .flatMap((section) => Object.values (diff[section]).map((list ) => list.length))
155
155
  .reduce((sum, n) => sum + n, 0)
156
156
  + diff.mcpSelections.changed.length + (diff.meta.sourceVersion ? 1 : 0);
157
157
  return { changed: true, summary: `${count} change(s)` };
@@ -160,7 +160,7 @@ function lockDelta(previous: any, next: any) {
160
160
  /** Persist the lock for a completed command and return its delta against what was pinned before.
161
161
  * An unchanged lock is left byte for byte, so routine re-runs neither rewrite the file nor
162
162
  * manufacture noise; a `null` lock removes the file. */
163
- function recordLock(scopeArgs: any, next: any, { fsImpl = fs }: any = {}) {
163
+ function recordLock(scopeArgs , next , { fsImpl = fs } = {}) {
164
164
  const delta = lockDelta(readLock(scopeArgs, { fsImpl }), next);
165
165
  if (delta.changed) {
166
166
  if (next) writeLock(scopeArgs, next, { fsImpl });