@enterpriseai/cli 3.19.0 → 3.19.2

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 (364) hide show
  1. package/package.json +3 -3
  2. package/resources/deploy/eai-app-template/producer-pin.json +5 -5
  3. package/resources/deploy/eai-app-template/tests/source-unknown-deployment-evidence.test.mjs +2141 -1
  4. package/resources/gofer/.gofer-version +4 -357
  5. package/resources/gofer/agents-skills/eai/SKILL.md +365 -0
  6. package/resources/gofer/agents-skills/eai-update/SKILL.md +56 -0
  7. package/resources/gofer/agents-skills/gofer-documentation/SKILL.md +93 -0
  8. package/resources/gofer/bash-scripts/create-new-feature.sh +3 -1
  9. package/resources/gofer/bash-scripts/sync-implementation-status.sh +4 -3
  10. package/resources/gofer/bash-scripts/update-agent-context.sh +7 -8
  11. package/resources/gofer/bash-scripts/validate-artifact.sh +10 -6
  12. package/resources/gofer/bash-scripts/verify-object-type-routing-workspace.sh +184 -0
  13. package/resources/gofer/claude-commands/eai-update.md +46 -0
  14. package/resources/gofer/claude-commands/eai.md +355 -0
  15. package/resources/gofer/claude-skills/eai/SKILL.md +365 -0
  16. package/resources/gofer/claude-skills/eai-update/SKILL.md +56 -0
  17. package/resources/gofer/claude-skills/gofer-documentation/SKILL.md +93 -0
  18. package/resources/gofer/commands/0_gofer_start.md +440 -99
  19. package/resources/gofer/commands/0a_problem_validation.md +187 -27
  20. package/resources/gofer/commands/10_gofer_cloud.md +183 -23
  21. package/resources/gofer/commands/1_gofer_research.md +239 -30
  22. package/resources/gofer/commands/2_gofer_specify.md +239 -35
  23. package/resources/gofer/commands/3_gofer_plan.md +259 -43
  24. package/resources/gofer/commands/4_gofer_tasks.md +401 -81
  25. package/resources/gofer/commands/5_gofer_implement.md +375 -84
  26. package/resources/gofer/commands/6_gofer_validate.md +284 -53
  27. package/resources/gofer/commands/7_gofer_save.md +187 -26
  28. package/resources/gofer/commands/7a_stakeholder_comms.md +183 -23
  29. package/resources/gofer/commands/8_gofer_branding.md +183 -23
  30. package/resources/gofer/commands/9_gofer_tests.md +212 -23
  31. package/resources/gofer/commands/gofer_bootstrap_workspace.md +121 -8
  32. package/resources/gofer/commands/gofer_check_workspace.md +123 -8
  33. package/resources/gofer/commands/gofer_constitution.md +183 -23
  34. package/resources/gofer/commands/gofer_diagnose.md +183 -23
  35. package/resources/gofer/commands/gofer_eai_first_run.md +254 -25
  36. package/resources/gofer/commands/gofer_hydrate.md +183 -23
  37. package/resources/gofer/commands/gofer_personality.md +117 -6
  38. package/resources/gofer/commands/gofer_plan.md +117 -6
  39. package/resources/gofer/commands/gofer_side.md +117 -6
  40. package/resources/gofer/commands/gofer_spec_summary.md +183 -23
  41. package/resources/gofer/commands/gofer_tdd.md +183 -23
  42. package/resources/gofer/commands/gofer_vocabulary.md +185 -25
  43. package/resources/gofer/commands/gofer_zoom_out.md +183 -23
  44. package/resources/gofer/config/typesafe-learning-review.json +16 -0
  45. package/resources/gofer/config/typesafe-semantic-review.json +9 -0
  46. package/resources/gofer/copilot-instructions/gofer-cost.instructions.md +15 -6
  47. package/resources/gofer/copilot-instructions/typescript.instructions.md +1 -1
  48. package/resources/gofer/copilot-prompts/eai-update.prompt.md +58 -0
  49. package/resources/gofer/copilot-prompts/eai.prompt.md +367 -0
  50. package/resources/gofer/gemini/commands/gofer/eai-update.md +22 -0
  51. package/resources/gofer/gemini/commands/gofer/eai-update.toml +2 -0
  52. package/resources/gofer/gemini/commands/gofer/eai.md +357 -0
  53. package/resources/gofer/gemini/commands/gofer/eai.toml +2 -0
  54. package/resources/gofer/gemini/commands/gofer/manifest.json +3 -27
  55. package/resources/gofer/gemini/extension.json +4 -4
  56. package/resources/gofer/github-agents/eai.agent.md +83 -0
  57. package/resources/gofer/github-agents/gofer-business.agent.md +73 -4
  58. package/resources/gofer/github-agents/gofer-implement.agent.md +71 -2
  59. package/resources/gofer/github-agents/gofer-plan.agent.md +72 -2
  60. package/resources/gofer/github-agents/gofer-research.agent.md +72 -2
  61. package/resources/gofer/github-agents/gofer-validate.agent.md +72 -2
  62. package/resources/gofer/github-skills/eai/SKILL.md +365 -0
  63. package/resources/gofer/github-skills/eai-update/SKILL.md +56 -0
  64. package/resources/gofer/github-skills/gofer-documentation/SKILL.md +93 -0
  65. package/resources/gofer/grok-skills/eai/SKILL.md +267 -14
  66. package/resources/gofer/grok-skills/eai-update/SKILL.md +56 -0
  67. package/resources/gofer/hook-scripts/user-prompt-submit.mjs +58 -13
  68. package/resources/gofer/instruction-templates/base/agents-base.md +8 -4
  69. package/resources/gofer/instruction-templates/gofer/gofer-claude.md +7 -5
  70. package/resources/gofer/instruction-templates/gofer/gofer-copilot.md +10 -8
  71. package/resources/gofer/memory/constitution.md +9 -7
  72. package/resources/gofer/memory/gofer-model-policy.yaml +23 -1
  73. package/resources/gofer/memory/lessons.md +0 -31
  74. package/resources/gofer/node-scripts/canonical-descriptions.mjs +1 -1
  75. package/resources/gofer/node-scripts/check-version-alignment.mjs +4 -7
  76. package/resources/gofer/node-scripts/delivery-lineage-corpus.mjs +156 -0
  77. package/resources/gofer/node-scripts/generate-commands.mjs +1073 -265
  78. package/resources/gofer/node-scripts/gofer-acceptance-check.mjs +143 -0
  79. package/resources/gofer/node-scripts/gofer-agent-catalog.mjs +271 -0
  80. package/resources/gofer/node-scripts/gofer-benchmark-executor.mjs +123 -0
  81. package/resources/gofer/node-scripts/gofer-benchmark-sign.mjs +62 -0
  82. package/resources/gofer/node-scripts/gofer-benchmark-signer.mjs +89 -0
  83. package/resources/gofer/node-scripts/gofer-benchmark.mjs +76 -0
  84. package/resources/gofer/node-scripts/gofer-blocker-control.mjs +274 -0
  85. package/resources/gofer/node-scripts/gofer-claude-adapter.mjs +154 -0
  86. package/resources/gofer/node-scripts/gofer-closed-loop-audit.mjs +19 -2
  87. package/resources/gofer/node-scripts/gofer-delivery-check.mjs +121 -0
  88. package/resources/gofer/node-scripts/gofer-encrypted-key.mjs +58 -0
  89. package/resources/gofer/node-scripts/gofer-execution-metrics.mjs +477 -0
  90. package/resources/gofer/node-scripts/gofer-execution-recovery.mjs +334 -0
  91. package/resources/gofer/node-scripts/gofer-grok-adapter.mjs +184 -0
  92. package/resources/gofer/node-scripts/gofer-heldout-corpus.mjs +73 -0
  93. package/resources/gofer/node-scripts/gofer-heldout-snapshot.mjs +286 -0
  94. package/resources/gofer/node-scripts/gofer-heldout-verifier.mjs +211 -0
  95. package/resources/gofer/node-scripts/gofer-host-capability.mjs +335 -0
  96. package/resources/gofer/node-scripts/gofer-independent-reviewer.mjs +130 -0
  97. package/resources/gofer/node-scripts/gofer-live-routing.mjs +109 -0
  98. package/resources/gofer/node-scripts/gofer-local-capability-issuer.mjs +71 -0
  99. package/resources/gofer/node-scripts/gofer-local-isolation.mjs +175 -0
  100. package/resources/gofer/node-scripts/gofer-local-settings-cleanup.mjs +388 -0
  101. package/resources/gofer/node-scripts/gofer-loop-audit.mjs +54 -3
  102. package/resources/gofer/node-scripts/gofer-native-adapter.mjs +567 -0
  103. package/resources/gofer/node-scripts/gofer-native-benchmark-dispatch.mjs +145 -0
  104. package/resources/gofer/node-scripts/gofer-native-runtime.mjs +169 -0
  105. package/resources/gofer/node-scripts/gofer-pre-edit-check.mjs +204 -0
  106. package/resources/gofer/node-scripts/gofer-priority-check.mjs +214 -0
  107. package/resources/gofer/node-scripts/gofer-response-check.mjs +56 -0
  108. package/resources/gofer/node-scripts/gofer-reviewed-learning.mjs +1232 -0
  109. package/resources/gofer/node-scripts/gofer-run-verified-task.mjs +330 -0
  110. package/resources/gofer/node-scripts/gofer-runtime-ledger.mjs +289 -0
  111. package/resources/gofer/node-scripts/gofer-semantic-drift.mjs +584 -0
  112. package/resources/gofer/node-scripts/gofer-surface-update.mjs +1178 -0
  113. package/resources/gofer/node-scripts/gofer-trust-bootstrap.mjs +77 -0
  114. package/resources/gofer/node-scripts/gofer-trusted-benchmark.mjs +102 -0
  115. package/resources/gofer/node-scripts/gofer-trusted-evaluator.mjs +274 -0
  116. package/resources/gofer/node-scripts/gofer-tty-prompt.mjs +34 -0
  117. package/resources/gofer/node-scripts/gofer-typesafe-credentials.mjs +435 -0
  118. package/resources/gofer/node-scripts/gofer-ui-preview.mjs +1212 -0
  119. package/resources/gofer/node-scripts/gofer-verified-execution.mjs +484 -0
  120. package/resources/gofer/node-scripts/gofer-verifier-key-ceremony.mjs +101 -0
  121. package/resources/gofer/node-scripts/gofer-worktree-layout.mjs +32 -0
  122. package/resources/gofer/node-scripts/object-type-routing-phase-bundle.mjs +360 -0
  123. package/resources/gofer/node-scripts/package-agent-plugin.mjs +574 -82
  124. package/resources/gofer/node-scripts/parse-stage-command.mjs +1 -1
  125. package/resources/gofer/node-scripts/render-delivery-lineage.mjs +178 -0
  126. package/resources/gofer/node-scripts/sync-extension-resources.mjs +78 -2
  127. package/resources/gofer/node-scripts/validate-object-type-identifiers.mjs +767 -0
  128. package/resources/gofer/node-scripts/validate-object-type-routing-workspace.mjs +1325 -0
  129. package/resources/gofer/node-scripts/validate-v4-resource-contract.d.mts +44 -0
  130. package/resources/gofer/node-scripts/validate-v4-resource-contract.mjs +957 -0
  131. package/resources/gofer/node-scripts/workspace-bootstrap-lib.mjs +685 -116
  132. package/resources/gofer/references/agent-catalog.json +126 -0
  133. package/resources/gofer/references/blocker-mediation.md +156 -0
  134. package/resources/gofer/references/business-updates-and-goal-checks.md +109 -0
  135. package/resources/gofer/references/delivery-lineage.md +48 -0
  136. package/resources/gofer/references/mvp-capability-validation.md +102 -0
  137. package/resources/gofer/references/platform/README.md +1 -1
  138. package/resources/gofer/references/platform/eai-app-template.md +15 -13
  139. package/resources/gofer/references/platform/eai-auth-access.md +104 -0
  140. package/resources/gofer/references/platform/eai-config-driven-ui.md +5 -5
  141. package/resources/gofer/references/platform/eai-error-catalog.yaml +77 -19
  142. package/resources/gofer/references/platform/eai-repo-contract.md +61 -23
  143. package/resources/gofer/references/platform/eai-service-patterns.md +102 -105
  144. package/resources/gofer/references/platform/eai.md +44 -8
  145. package/resources/gofer/references/platform/vertical-template.md +10 -9
  146. package/resources/gofer/references/priority-outcome-protection.md +152 -0
  147. package/resources/gofer/references/verified-agent-execution.md +179 -0
  148. package/resources/gofer/schemas/gofer-learning-trace-v1.json +70 -0
  149. package/resources/gofer/specify-commands/0_gofer_start.md +440 -99
  150. package/resources/gofer/specify-commands/0a_problem_validation.md +187 -27
  151. package/resources/gofer/specify-commands/10_gofer_cloud.md +183 -23
  152. package/resources/gofer/specify-commands/1_gofer_research.md +239 -30
  153. package/resources/gofer/specify-commands/2_gofer_specify.md +239 -35
  154. package/resources/gofer/specify-commands/3_gofer_plan.md +259 -43
  155. package/resources/gofer/specify-commands/4_gofer_tasks.md +401 -81
  156. package/resources/gofer/specify-commands/5_gofer_implement.md +375 -84
  157. package/resources/gofer/specify-commands/6_gofer_validate.md +284 -53
  158. package/resources/gofer/specify-commands/7_gofer_save.md +187 -26
  159. package/resources/gofer/specify-commands/7a_stakeholder_comms.md +183 -23
  160. package/resources/gofer/specify-commands/8_gofer_branding.md +183 -23
  161. package/resources/gofer/specify-commands/9_gofer_tests.md +212 -23
  162. package/resources/gofer/specify-commands/gofer_bootstrap_workspace.md +121 -8
  163. package/resources/gofer/specify-commands/gofer_check_workspace.md +123 -8
  164. package/resources/gofer/specify-commands/gofer_constitution.md +183 -23
  165. package/resources/gofer/specify-commands/gofer_diagnose.md +183 -23
  166. package/resources/gofer/specify-commands/gofer_eai_first_run.md +254 -25
  167. package/resources/gofer/specify-commands/gofer_hydrate.md +183 -23
  168. package/resources/gofer/specify-commands/gofer_personality.md +117 -6
  169. package/resources/gofer/specify-commands/gofer_plan.md +117 -6
  170. package/resources/gofer/specify-commands/gofer_side.md +117 -6
  171. package/resources/gofer/specify-commands/gofer_spec_summary.md +183 -23
  172. package/resources/gofer/specify-commands/gofer_tdd.md +183 -23
  173. package/resources/gofer/specify-commands/gofer_vocabulary.md +185 -25
  174. package/resources/gofer/specify-commands/gofer_zoom_out.md +183 -23
  175. package/resources/gofer/specify-config/object-type-routing.json +24 -0
  176. package/resources/gofer/specify-config/typesafe-learning-review.json +16 -0
  177. package/resources/gofer/specify-config/typesafe-semantic-review.json +9 -0
  178. package/resources/gofer/system-skills/eai/SKILL.md +365 -0
  179. package/resources/gofer/system-skills/eai-update/SKILL.md +56 -0
  180. package/resources/gofer/system-skills/gofer-documentation/SKILL.md +93 -0
  181. package/resources/gofer/templates/build-map-template.md +64 -0
  182. package/resources/gofer/templates/business-scenarios-template.json +14 -0
  183. package/resources/gofer/templates/ciso-security-summary-template.md +3 -3
  184. package/resources/gofer/templates/context-bundle-template.md +4 -3
  185. package/resources/gofer/templates/contract-pack-template.md +8 -8
  186. package/resources/gofer/templates/cto-architecture-summary-template.md +3 -3
  187. package/resources/gofer/templates/delivery-lineage-template.json +8 -0
  188. package/resources/gofer/templates/eai-preflight-template.md +109 -68
  189. package/resources/gofer/templates/goal-ledger-template.json +1 -1
  190. package/resources/gofer/templates/gofer-model-policy.yaml +28 -6
  191. package/resources/gofer/templates/loop-contract-template.json +3 -1
  192. package/resources/gofer/templates/plan-template.md +8 -7
  193. package/resources/gofer/templates/priority-plan-template.json +29 -0
  194. package/resources/gofer/templates/proposal-review-template.md +6 -3
  195. package/resources/gofer/templates/release-capability-ledger-template.md +24 -0
  196. package/resources/gofer/templates/research-template.md +7 -6
  197. package/resources/gofer/templates/spec-summary-template.md +1 -1
  198. package/resources/gofer/templates/spec-template.md +45 -6
  199. package/resources/gofer/templates/tasks-template.md +12 -3
  200. package/resources/gofer/templates/ui-preview-brief-template.md +55 -5
  201. package/resources/gofer/templates/ui-review-log-template.md +21 -3
  202. package/resources/gofer/templates/ui-show-and-tell-template.md +46 -0
  203. package/resources/gofer/templates/visuals/capability-heatmap-template.md +2 -2
  204. package/resources/gofer/templates/working-backwards-prfaq-template.md +9 -8
  205. package/resources/linked-sources.json +4 -4
  206. package/resources/gofer/agents-skills/0_gofer_start/SKILL.md +0 -1287
  207. package/resources/gofer/agents-skills/0a_problem_validation/SKILL.md +0 -429
  208. package/resources/gofer/agents-skills/10_gofer_cloud/SKILL.md +0 -635
  209. package/resources/gofer/agents-skills/1_gofer_research/SKILL.md +0 -1159
  210. package/resources/gofer/agents-skills/2_gofer_specify/SKILL.md +0 -860
  211. package/resources/gofer/agents-skills/3_gofer_plan/SKILL.md +0 -899
  212. package/resources/gofer/agents-skills/4_gofer_tasks/SKILL.md +0 -760
  213. package/resources/gofer/agents-skills/5_gofer_implement/SKILL.md +0 -944
  214. package/resources/gofer/agents-skills/6_gofer_validate/SKILL.md +0 -2302
  215. package/resources/gofer/agents-skills/7_gofer_save/SKILL.md +0 -423
  216. package/resources/gofer/agents-skills/7a_stakeholder_comms/SKILL.md +0 -508
  217. package/resources/gofer/agents-skills/8_gofer_branding/SKILL.md +0 -315
  218. package/resources/gofer/agents-skills/9_gofer_tests/SKILL.md +0 -558
  219. package/resources/gofer/agents-skills/gofer_bootstrap_workspace/SKILL.md +0 -148
  220. package/resources/gofer/agents-skills/gofer_check_workspace/SKILL.md +0 -119
  221. package/resources/gofer/agents-skills/gofer_constitution/SKILL.md +0 -612
  222. package/resources/gofer/agents-skills/gofer_diagnose/SKILL.md +0 -114
  223. package/resources/gofer/agents-skills/gofer_eai_first_run/SKILL.md +0 -397
  224. package/resources/gofer/agents-skills/gofer_hydrate/SKILL.md +0 -561
  225. package/resources/gofer/agents-skills/gofer_personality/SKILL.md +0 -44
  226. package/resources/gofer/agents-skills/gofer_plan/SKILL.md +0 -40
  227. package/resources/gofer/agents-skills/gofer_side/SKILL.md +0 -45
  228. package/resources/gofer/agents-skills/gofer_spec_summary/SKILL.md +0 -112
  229. package/resources/gofer/agents-skills/gofer_tdd/SKILL.md +0 -112
  230. package/resources/gofer/agents-skills/gofer_vocabulary/SKILL.md +0 -112
  231. package/resources/gofer/agents-skills/gofer_zoom_out/SKILL.md +0 -112
  232. package/resources/gofer/claude-commands/0_gofer_start.md +0 -1282
  233. package/resources/gofer/claude-commands/0a_problem_validation.md +0 -424
  234. package/resources/gofer/claude-commands/10_gofer_cloud.md +0 -630
  235. package/resources/gofer/claude-commands/1_gofer_research.md +0 -1154
  236. package/resources/gofer/claude-commands/2_gofer_specify.md +0 -855
  237. package/resources/gofer/claude-commands/3_gofer_plan.md +0 -894
  238. package/resources/gofer/claude-commands/4_gofer_tasks.md +0 -755
  239. package/resources/gofer/claude-commands/5_gofer_implement.md +0 -939
  240. package/resources/gofer/claude-commands/6_gofer_validate.md +0 -2297
  241. package/resources/gofer/claude-commands/7_gofer_save.md +0 -418
  242. package/resources/gofer/claude-commands/7a_stakeholder_comms.md +0 -503
  243. package/resources/gofer/claude-commands/8_gofer_branding.md +0 -310
  244. package/resources/gofer/claude-commands/9_gofer_tests.md +0 -553
  245. package/resources/gofer/claude-commands/gofer_bootstrap_workspace.md +0 -143
  246. package/resources/gofer/claude-commands/gofer_check_workspace.md +0 -114
  247. package/resources/gofer/claude-commands/gofer_constitution.md +0 -607
  248. package/resources/gofer/claude-commands/gofer_diagnose.md +0 -109
  249. package/resources/gofer/claude-commands/gofer_eai_first_run.md +0 -392
  250. package/resources/gofer/claude-commands/gofer_hydrate.md +0 -556
  251. package/resources/gofer/claude-commands/gofer_personality.md +0 -39
  252. package/resources/gofer/claude-commands/gofer_plan.md +0 -35
  253. package/resources/gofer/claude-commands/gofer_side.md +0 -40
  254. package/resources/gofer/claude-commands/gofer_spec_summary.md +0 -107
  255. package/resources/gofer/claude-commands/gofer_tdd.md +0 -107
  256. package/resources/gofer/claude-commands/gofer_vocabulary.md +0 -107
  257. package/resources/gofer/claude-commands/gofer_zoom_out.md +0 -107
  258. package/resources/gofer/claude-skills/eai-gofer/SKILL.md +0 -56
  259. package/resources/gofer/copilot-prompts/0_gofer_start.prompt.md +0 -1308
  260. package/resources/gofer/copilot-prompts/0a_problem_validation.prompt.md +0 -429
  261. package/resources/gofer/copilot-prompts/10_gofer_cloud.prompt.md +0 -644
  262. package/resources/gofer/copilot-prompts/1_gofer_research.prompt.md +0 -1177
  263. package/resources/gofer/copilot-prompts/2_gofer_specify.prompt.md +0 -878
  264. package/resources/gofer/copilot-prompts/3_gofer_plan.prompt.md +0 -917
  265. package/resources/gofer/copilot-prompts/4_gofer_tasks.prompt.md +0 -778
  266. package/resources/gofer/copilot-prompts/5_gofer_implement.prompt.md +0 -962
  267. package/resources/gofer/copilot-prompts/6_gofer_validate.prompt.md +0 -2310
  268. package/resources/gofer/copilot-prompts/7_gofer_save.prompt.md +0 -433
  269. package/resources/gofer/copilot-prompts/7a_stakeholder_comms.prompt.md +0 -516
  270. package/resources/gofer/copilot-prompts/8_gofer_branding.prompt.md +0 -323
  271. package/resources/gofer/copilot-prompts/9_gofer_tests.prompt.md +0 -566
  272. package/resources/gofer/copilot-prompts/gofer_bootstrap_workspace.prompt.md +0 -161
  273. package/resources/gofer/copilot-prompts/gofer_check_workspace.prompt.md +0 -132
  274. package/resources/gofer/copilot-prompts/gofer_constitution.prompt.md +0 -621
  275. package/resources/gofer/copilot-prompts/gofer_diagnose.prompt.md +0 -127
  276. package/resources/gofer/copilot-prompts/gofer_eai_first_run.prompt.md +0 -410
  277. package/resources/gofer/copilot-prompts/gofer_hydrate.prompt.md +0 -571
  278. package/resources/gofer/copilot-prompts/gofer_personality.prompt.md +0 -57
  279. package/resources/gofer/copilot-prompts/gofer_plan.prompt.md +0 -53
  280. package/resources/gofer/copilot-prompts/gofer_side.prompt.md +0 -58
  281. package/resources/gofer/copilot-prompts/gofer_spec_summary.prompt.md +0 -125
  282. package/resources/gofer/copilot-prompts/gofer_tdd.prompt.md +0 -125
  283. package/resources/gofer/copilot-prompts/gofer_vocabulary.prompt.md +0 -125
  284. package/resources/gofer/copilot-prompts/gofer_zoom_out.prompt.md +0 -125
  285. package/resources/gofer/gemini/commands/gofer/0_gofer_start.md +0 -1282
  286. package/resources/gofer/gemini/commands/gofer/0_gofer_start.toml +0 -2
  287. package/resources/gofer/gemini/commands/gofer/0a_problem_validation.md +0 -424
  288. package/resources/gofer/gemini/commands/gofer/0a_problem_validation.toml +0 -2
  289. package/resources/gofer/gemini/commands/gofer/10_gofer_cloud.md +0 -630
  290. package/resources/gofer/gemini/commands/gofer/10_gofer_cloud.toml +0 -2
  291. package/resources/gofer/gemini/commands/gofer/1_gofer_research.md +0 -1154
  292. package/resources/gofer/gemini/commands/gofer/1_gofer_research.toml +0 -2
  293. package/resources/gofer/gemini/commands/gofer/2_gofer_specify.md +0 -855
  294. package/resources/gofer/gemini/commands/gofer/2_gofer_specify.toml +0 -2
  295. package/resources/gofer/gemini/commands/gofer/3_gofer_plan.md +0 -894
  296. package/resources/gofer/gemini/commands/gofer/3_gofer_plan.toml +0 -2
  297. package/resources/gofer/gemini/commands/gofer/4_gofer_tasks.md +0 -755
  298. package/resources/gofer/gemini/commands/gofer/4_gofer_tasks.toml +0 -2
  299. package/resources/gofer/gemini/commands/gofer/5_gofer_implement.md +0 -939
  300. package/resources/gofer/gemini/commands/gofer/5_gofer_implement.toml +0 -2
  301. package/resources/gofer/gemini/commands/gofer/6_gofer_validate.md +0 -2297
  302. package/resources/gofer/gemini/commands/gofer/6_gofer_validate.toml +0 -2
  303. package/resources/gofer/gemini/commands/gofer/7_gofer_save.md +0 -418
  304. package/resources/gofer/gemini/commands/gofer/7_gofer_save.toml +0 -2
  305. package/resources/gofer/gemini/commands/gofer/7a_stakeholder_comms.md +0 -503
  306. package/resources/gofer/gemini/commands/gofer/7a_stakeholder_comms.toml +0 -2
  307. package/resources/gofer/gemini/commands/gofer/8_gofer_branding.md +0 -310
  308. package/resources/gofer/gemini/commands/gofer/8_gofer_branding.toml +0 -2
  309. package/resources/gofer/gemini/commands/gofer/9_gofer_tests.md +0 -553
  310. package/resources/gofer/gemini/commands/gofer/9_gofer_tests.toml +0 -2
  311. package/resources/gofer/gemini/commands/gofer/gofer_bootstrap_workspace.md +0 -143
  312. package/resources/gofer/gemini/commands/gofer/gofer_bootstrap_workspace.toml +0 -2
  313. package/resources/gofer/gemini/commands/gofer/gofer_check_workspace.md +0 -114
  314. package/resources/gofer/gemini/commands/gofer/gofer_check_workspace.toml +0 -2
  315. package/resources/gofer/gemini/commands/gofer/gofer_constitution.md +0 -607
  316. package/resources/gofer/gemini/commands/gofer/gofer_constitution.toml +0 -2
  317. package/resources/gofer/gemini/commands/gofer/gofer_diagnose.md +0 -109
  318. package/resources/gofer/gemini/commands/gofer/gofer_diagnose.toml +0 -2
  319. package/resources/gofer/gemini/commands/gofer/gofer_eai_first_run.md +0 -392
  320. package/resources/gofer/gemini/commands/gofer/gofer_eai_first_run.toml +0 -2
  321. package/resources/gofer/gemini/commands/gofer/gofer_hydrate.md +0 -556
  322. package/resources/gofer/gemini/commands/gofer/gofer_hydrate.toml +0 -2
  323. package/resources/gofer/gemini/commands/gofer/gofer_personality.md +0 -39
  324. package/resources/gofer/gemini/commands/gofer/gofer_personality.toml +0 -2
  325. package/resources/gofer/gemini/commands/gofer/gofer_plan.md +0 -35
  326. package/resources/gofer/gemini/commands/gofer/gofer_plan.toml +0 -2
  327. package/resources/gofer/gemini/commands/gofer/gofer_side.md +0 -40
  328. package/resources/gofer/gemini/commands/gofer/gofer_side.toml +0 -2
  329. package/resources/gofer/gemini/commands/gofer/gofer_spec_summary.md +0 -107
  330. package/resources/gofer/gemini/commands/gofer/gofer_spec_summary.toml +0 -2
  331. package/resources/gofer/gemini/commands/gofer/gofer_tdd.md +0 -107
  332. package/resources/gofer/gemini/commands/gofer/gofer_tdd.toml +0 -2
  333. package/resources/gofer/gemini/commands/gofer/gofer_vocabulary.md +0 -107
  334. package/resources/gofer/gemini/commands/gofer/gofer_vocabulary.toml +0 -2
  335. package/resources/gofer/gemini/commands/gofer/gofer_zoom_out.md +0 -107
  336. package/resources/gofer/gemini/commands/gofer/gofer_zoom_out.toml +0 -2
  337. package/resources/gofer/github-skills/eai-gofer/SKILL.md +0 -56
  338. package/resources/gofer/system-skills/0_gofer_start/SKILL.md +0 -1287
  339. package/resources/gofer/system-skills/0a_problem_validation/SKILL.md +0 -429
  340. package/resources/gofer/system-skills/10_gofer_cloud/SKILL.md +0 -635
  341. package/resources/gofer/system-skills/1_gofer_research/SKILL.md +0 -1159
  342. package/resources/gofer/system-skills/2_gofer_specify/SKILL.md +0 -860
  343. package/resources/gofer/system-skills/3_gofer_plan/SKILL.md +0 -899
  344. package/resources/gofer/system-skills/4_gofer_tasks/SKILL.md +0 -760
  345. package/resources/gofer/system-skills/5_gofer_implement/SKILL.md +0 -944
  346. package/resources/gofer/system-skills/6_gofer_validate/SKILL.md +0 -2302
  347. package/resources/gofer/system-skills/7_gofer_save/SKILL.md +0 -423
  348. package/resources/gofer/system-skills/7a_stakeholder_comms/SKILL.md +0 -508
  349. package/resources/gofer/system-skills/8_gofer_branding/SKILL.md +0 -315
  350. package/resources/gofer/system-skills/9_gofer_tests/SKILL.md +0 -558
  351. package/resources/gofer/system-skills/gofer_bootstrap_workspace/SKILL.md +0 -148
  352. package/resources/gofer/system-skills/gofer_check_workspace/SKILL.md +0 -119
  353. package/resources/gofer/system-skills/gofer_constitution/SKILL.md +0 -612
  354. package/resources/gofer/system-skills/gofer_diagnose/SKILL.md +0 -114
  355. package/resources/gofer/system-skills/gofer_eai_first_run/SKILL.md +0 -397
  356. package/resources/gofer/system-skills/gofer_hydrate/SKILL.md +0 -561
  357. package/resources/gofer/system-skills/gofer_personality/SKILL.md +0 -44
  358. package/resources/gofer/system-skills/gofer_plan/SKILL.md +0 -40
  359. package/resources/gofer/system-skills/gofer_side/SKILL.md +0 -45
  360. package/resources/gofer/system-skills/gofer_spec_summary/SKILL.md +0 -112
  361. package/resources/gofer/system-skills/gofer_tdd/SKILL.md +0 -112
  362. package/resources/gofer/system-skills/gofer_vocabulary/SKILL.md +0 -112
  363. package/resources/gofer/system-skills/gofer_zoom_out/SKILL.md +0 -112
  364. package/resources/gofer/templates/ui-approval-template.md +0 -32
@@ -0,0 +1,360 @@
1
+ #!/usr/bin/env node
2
+
3
+ import { createHash } from 'node:crypto';
4
+ import { execFileSync, spawnSync } from 'node:child_process';
5
+ import { constants as fsConstants } from 'node:fs';
6
+ import {
7
+ chmod,
8
+ mkdir,
9
+ mkdtemp,
10
+ open,
11
+ readFile,
12
+ readlink,
13
+ realpath,
14
+ rename,
15
+ rm,
16
+ symlink,
17
+ writeFile,
18
+ } from 'node:fs/promises';
19
+ import { tmpdir } from 'node:os';
20
+ import path from 'node:path';
21
+
22
+ const SCHEMA_VERSION = 'eai.object-type-routing.phase-bundle/v1';
23
+ const PHASES = new Set(['P0', 'A0', 'P1', 'A1']);
24
+ const CALLER_GIT_CONTEXT_KEYS = [
25
+ 'GIT_ALTERNATE_OBJECT_DIRECTORIES',
26
+ 'GIT_COMMON_DIR',
27
+ 'GIT_DIR',
28
+ 'GIT_INDEX_FILE',
29
+ 'GIT_OBJECT_DIRECTORY',
30
+ 'GIT_PREFIX',
31
+ 'GIT_WORK_TREE',
32
+ ];
33
+
34
+ function usage() {
35
+ return `Usage:
36
+ object-type-routing-phase-bundle.mjs create --repository <path> --phase <P0|A0|P1|A1> --baseline <sha> --output <file> [--exclude <path>] [--json]
37
+ object-type-routing-phase-bundle.mjs verify --bundle <file> [--reconstruct] [--json]
38
+ object-type-routing-phase-bundle.mjs verify-set --manifest <file> [--reconstruct] [--json]`;
39
+ }
40
+
41
+ function parseArgs(argv) {
42
+ const command = argv[0];
43
+ const args = { command, excludes: [], json: false, reconstruct: false };
44
+ for (let index = 1; index < argv.length; index += 1) {
45
+ const token = argv[index];
46
+ if (token === '--json') args.json = true;
47
+ else if (token === '--reconstruct') args.reconstruct = true;
48
+ else if (token === '--exclude') args.excludes.push(argv[++index] ?? '');
49
+ else if (token.startsWith('--')) args[token.slice(2)] = argv[++index] ?? '';
50
+ else throw new Error(`Unexpected argument: ${token}`);
51
+ }
52
+ return args;
53
+ }
54
+
55
+ function canonicalize(value) {
56
+ if (Array.isArray(value)) return value.map(canonicalize);
57
+ if (value && typeof value === 'object') {
58
+ return Object.fromEntries(
59
+ Object.keys(value)
60
+ .sort()
61
+ .map((key) => [key, canonicalize(value[key])])
62
+ );
63
+ }
64
+ return value;
65
+ }
66
+
67
+ function canonicalBytes(value) {
68
+ return Buffer.from(JSON.stringify(canonicalize(value)), 'utf8');
69
+ }
70
+
71
+ function sha256(value) {
72
+ return `sha256:${createHash('sha256').update(value).digest('hex')}`;
73
+ }
74
+
75
+ function without(object, key) {
76
+ return Object.fromEntries(Object.entries(object).filter(([name]) => name !== key));
77
+ }
78
+
79
+ function isolatedGitEnvironment() {
80
+ const environment = { ...process.env };
81
+ for (const key of CALLER_GIT_CONTEXT_KEYS) delete environment[key];
82
+ return environment;
83
+ }
84
+
85
+ function git(repository, args, options = {}) {
86
+ return execFileSync('git', ['-C', repository, ...args], {
87
+ encoding: options.encoding === 'buffer' ? null : (options.encoding ?? 'utf8'),
88
+ env: isolatedGitEnvironment(),
89
+ maxBuffer: 128 * 1024 * 1024,
90
+ });
91
+ }
92
+
93
+ function normalizeRepositoryPath(value) {
94
+ return value.split(path.sep).join('/');
95
+ }
96
+
97
+ function validateEntryPath(value) {
98
+ if (!value || path.isAbsolute(value) || value.split('/').includes('..')) {
99
+ throw new Error(`Unsafe bundle entry path: ${value}`);
100
+ }
101
+ }
102
+
103
+ function parseBaselineTree(repository, baselineSha) {
104
+ const output = git(repository, ['ls-tree', '-r', '-z', '--full-tree', baselineSha]);
105
+ const entries = new Map();
106
+ for (const row of output.split('\0')) {
107
+ if (!row) continue;
108
+ const match = /^(\d+)\s+(\w+)\s+([a-f0-9]+)\t([\s\S]+)$/.exec(row);
109
+ if (!match) throw new Error(`Could not parse git tree row: ${row}`);
110
+ const [, mode, kind, oid, file] = match;
111
+ if (kind === 'blob') entries.set(file, { mode, oid });
112
+ }
113
+ return entries;
114
+ }
115
+
116
+ function listWorktreePaths(repository) {
117
+ const output = git(repository, ['ls-files', '-z', '--cached', '--others', '--exclude-standard']);
118
+ return output.split('\0').filter(Boolean);
119
+ }
120
+
121
+ async function currentEntry(repository, relativePath) {
122
+ const absolutePath = path.join(repository, ...relativePath.split('/'));
123
+ try {
124
+ const handle = await open(
125
+ absolutePath,
126
+ fsConstants.O_RDONLY | fsConstants.O_NOFOLLOW
127
+ );
128
+ try {
129
+ const openedStat = await handle.stat();
130
+ if (!openedStat.isFile()) {
131
+ throw new Error(`Bundle entry changed type while being read: ${relativePath}`);
132
+ }
133
+ return {
134
+ kind: 'file',
135
+ mode: (openedStat.mode & 0o111) !== 0 ? '100755' : '100644',
136
+ content: await handle.readFile(),
137
+ };
138
+ } finally {
139
+ await handle.close();
140
+ }
141
+ } catch (error) {
142
+ if (error?.code === 'ENOENT') return null;
143
+ if (error?.code === 'ELOOP') {
144
+ return {
145
+ kind: 'symlink',
146
+ mode: '120000',
147
+ content: Buffer.from(await readlink(absolutePath), 'utf8'),
148
+ };
149
+ }
150
+ throw error;
151
+ }
152
+ }
153
+
154
+ function isExcluded(relativePath, excludes) {
155
+ return excludes.some((candidate) => {
156
+ const normalized = normalizeRepositoryPath(candidate).replace(/^\.\//, '').replace(/\/$/, '');
157
+ return normalized && (relativePath === normalized || relativePath.startsWith(`${normalized}/`));
158
+ });
159
+ }
160
+
161
+ async function buildEntries(repository, baselineSha, excludes) {
162
+ const baseline = parseBaselineTree(repository, baselineSha);
163
+ const candidates = new Set([...baseline.keys(), ...listWorktreePaths(repository)]);
164
+ const entries = [];
165
+
166
+ for (const relativePath of [...candidates].sort()) {
167
+ validateEntryPath(relativePath);
168
+ if (isExcluded(relativePath, excludes)) continue;
169
+ const previous = baseline.get(relativePath);
170
+ const current = await currentEntry(repository, relativePath);
171
+
172
+ if (!current) {
173
+ if (!previous) continue;
174
+ const entry = {
175
+ path: relativePath,
176
+ kind: 'deletion',
177
+ mode: previous.mode,
178
+ deleted: true,
179
+ contentBase64: null,
180
+ contentDigest: null,
181
+ };
182
+ entries.push({ ...entry, entryDigest: sha256(canonicalBytes(entry)) });
183
+ continue;
184
+ }
185
+
186
+ let changed = !previous || previous.mode !== current.mode;
187
+ if (previous && !changed) {
188
+ const previousContent = git(repository, ['show', `${baselineSha}:${relativePath}`], { encoding: 'buffer' });
189
+ changed = !Buffer.from(previousContent).equals(current.content);
190
+ }
191
+ if (!changed) continue;
192
+
193
+ const entry = {
194
+ path: relativePath,
195
+ kind: current.kind,
196
+ mode: current.mode,
197
+ deleted: false,
198
+ contentBase64: current.content.toString('base64'),
199
+ contentDigest: sha256(current.content),
200
+ };
201
+ entries.push({ ...entry, entryDigest: sha256(canonicalBytes(entry)) });
202
+ }
203
+ return entries;
204
+ }
205
+
206
+ async function atomicWriteJson(outputPath, value) {
207
+ await mkdir(path.dirname(outputPath), { recursive: true });
208
+ const temporaryPath = `${outputPath}.tmp-${process.pid}`;
209
+ await writeFile(temporaryPath, `${JSON.stringify(value, null, 2)}\n`, 'utf8');
210
+ await rename(temporaryPath, outputPath);
211
+ }
212
+
213
+ async function createBundle(args) {
214
+ if (!args.repository || !args.phase || !args.baseline || !args.output) {
215
+ throw new Error(`Missing create argument.\n${usage()}`);
216
+ }
217
+ if (!PHASES.has(args.phase)) throw new Error(`Unsupported phase: ${args.phase}`);
218
+ const repository = await realpath(path.resolve(args.repository));
219
+ const baselineSha = git(repository, ['rev-parse', '--verify', `${args.baseline}^{commit}`]).trim();
220
+ const entries = await buildEntries(repository, baselineSha, args.excludes);
221
+ const body = {
222
+ schemaVersion: SCHEMA_VERSION,
223
+ repository: normalizeRepositoryPath(args.repository),
224
+ phase: args.phase,
225
+ baselineSha,
226
+ semantics: 'cumulative_from_baseline',
227
+ entries,
228
+ };
229
+ const bundle = { ...body, rootDigest: sha256(canonicalBytes(body)) };
230
+ await atomicWriteJson(path.resolve(args.output), bundle);
231
+ return { valid: true, bundle: path.resolve(args.output), phase: args.phase, entryCount: entries.length, rootDigest: bundle.rootDigest };
232
+ }
233
+
234
+ function validateBundle(bundle) {
235
+ const errors = [];
236
+ if (bundle?.schemaVersion !== SCHEMA_VERSION) errors.push(`schemaVersion must be ${SCHEMA_VERSION}`);
237
+ if (!PHASES.has(bundle?.phase)) errors.push('phase must be P0, A0, P1, or A1');
238
+ if (bundle?.semantics !== 'cumulative_from_baseline') errors.push('semantics must be cumulative_from_baseline');
239
+ if (!/^[a-f0-9]{40,64}$/.test(bundle?.baselineSha ?? '')) errors.push('baselineSha must be an immutable Git object ID');
240
+ if (!Array.isArray(bundle?.entries)) errors.push('entries must be an array');
241
+ else {
242
+ const sortedPaths = bundle.entries.map((entry) => entry.path);
243
+ if (JSON.stringify(sortedPaths) !== JSON.stringify([...sortedPaths].sort())) errors.push('entries must be path-sorted');
244
+ if (new Set(sortedPaths).size !== sortedPaths.length) errors.push('entries must have unique paths');
245
+ for (const entry of bundle.entries) {
246
+ try { validateEntryPath(entry.path); } catch (error) { errors.push(error.message); }
247
+ const expectedEntryDigest = sha256(canonicalBytes(without(entry, 'entryDigest')));
248
+ if (entry.entryDigest !== expectedEntryDigest) errors.push(`entry digest mismatch: ${entry.path}`);
249
+ if (entry.deleted) {
250
+ if (entry.kind !== 'deletion' || entry.contentBase64 !== null || entry.contentDigest !== null) {
251
+ errors.push(`invalid deletion entry: ${entry.path}`);
252
+ }
253
+ } else {
254
+ const content = Buffer.from(entry.contentBase64 ?? '', 'base64');
255
+ if (entry.contentDigest !== sha256(content)) errors.push(`content digest mismatch: ${entry.path}`);
256
+ }
257
+ }
258
+ }
259
+ const expectedRootDigest = sha256(canonicalBytes(without(bundle ?? {}, 'rootDigest')));
260
+ if (bundle?.rootDigest !== expectedRootDigest) errors.push('root digest mismatch');
261
+ return errors;
262
+ }
263
+
264
+ async function reconstructBundle(bundle) {
265
+ const repository = path.resolve(bundle.repository);
266
+ const root = await mkdtemp(path.join(tmpdir(), 'object-type-routing-phase-'));
267
+ try {
268
+ const archive = spawnSync('git', ['-C', repository, 'archive', bundle.baselineSha], {
269
+ env: isolatedGitEnvironment(),
270
+ maxBuffer: 128 * 1024 * 1024,
271
+ });
272
+ if (archive.status !== 0) throw new Error(archive.stderr?.toString() || 'git archive failed');
273
+ const extracted = spawnSync('tar', ['-x', '-C', root], { input: archive.stdout, maxBuffer: 128 * 1024 * 1024 });
274
+ if (extracted.status !== 0) throw new Error(extracted.stderr?.toString() || 'tar extraction failed');
275
+
276
+ for (const entry of bundle.entries) {
277
+ validateEntryPath(entry.path);
278
+ const target = path.join(root, ...entry.path.split('/'));
279
+ if (entry.deleted) {
280
+ await rm(target, { recursive: true, force: true });
281
+ continue;
282
+ }
283
+ await mkdir(path.dirname(target), { recursive: true });
284
+ await rm(target, { recursive: true, force: true });
285
+ const content = Buffer.from(entry.contentBase64, 'base64');
286
+ if (entry.kind === 'symlink') await symlink(content.toString('utf8'), target);
287
+ else {
288
+ await writeFile(target, content);
289
+ await chmod(target, entry.mode === '100755' ? 0o755 : 0o644);
290
+ }
291
+ }
292
+
293
+ for (const entry of bundle.entries) {
294
+ const current = await currentEntry(root, entry.path);
295
+ if (entry.deleted && current !== null) throw new Error(`reconstruction retained deleted path: ${entry.path}`);
296
+ if (!entry.deleted) {
297
+ if (!current) throw new Error(`reconstruction omitted path: ${entry.path}`);
298
+ if (current.mode !== entry.mode || current.kind !== entry.kind) throw new Error(`reconstruction metadata mismatch: ${entry.path}`);
299
+ if (sha256(current.content) !== entry.contentDigest) throw new Error(`reconstruction content mismatch: ${entry.path}`);
300
+ }
301
+ }
302
+ return true;
303
+ } finally {
304
+ await rm(root, { recursive: true, force: true });
305
+ }
306
+ }
307
+
308
+ async function verifyBundleFile(bundlePath, reconstruct) {
309
+ const bundle = JSON.parse(await readFile(path.resolve(bundlePath), 'utf8'));
310
+ const errors = validateBundle(bundle);
311
+ let reconstructed = false;
312
+ if (errors.length === 0 && reconstruct) {
313
+ try {
314
+ reconstructed = await reconstructBundle(bundle);
315
+ } catch (error) {
316
+ errors.push(error instanceof Error ? error.message : String(error));
317
+ }
318
+ }
319
+ return { valid: errors.length === 0, bundle: path.resolve(bundlePath), phase: bundle.phase, rootDigest: bundle.rootDigest, reconstructed, errors };
320
+ }
321
+
322
+ async function verifySet(args) {
323
+ if (!args.manifest) throw new Error(`--manifest is required.\n${usage()}`);
324
+ const manifestPath = path.resolve(args.manifest);
325
+ const manifest = JSON.parse(await readFile(manifestPath, 'utf8'));
326
+ const members = Array.isArray(manifest.bundles)
327
+ ? manifest.bundles
328
+ : Object.values(manifest.bundles ?? {});
329
+ const results = [];
330
+ for (const member of members) {
331
+ const memberPath = typeof member === 'string' ? member : member.path;
332
+ const absolutePath = path.resolve(path.dirname(manifestPath), memberPath);
333
+ const result = await verifyBundleFile(absolutePath, args.reconstruct);
334
+ if (typeof member === 'object' && member.rootDigest && member.rootDigest !== result.rootDigest) {
335
+ result.valid = false;
336
+ result.errors.push('manifest rootDigest mismatch');
337
+ }
338
+ results.push(result);
339
+ }
340
+ return { valid: results.length > 0 && results.every((result) => result.valid), manifest: manifestPath, results };
341
+ }
342
+
343
+ async function main() {
344
+ const args = parseArgs(process.argv.slice(2));
345
+ let result;
346
+ if (args.command === 'create') result = await createBundle(args);
347
+ else if (args.command === 'verify') {
348
+ if (!args.bundle) throw new Error(`--bundle is required.\n${usage()}`);
349
+ result = await verifyBundleFile(args.bundle, args.reconstruct);
350
+ } else if (args.command === 'verify-set') result = await verifySet(args);
351
+ else throw new Error(usage());
352
+
353
+ process.stdout.write(`${JSON.stringify(result, null, args.json ? 2 : 0)}\n`);
354
+ if (!result.valid) process.exitCode = 1;
355
+ }
356
+
357
+ main().catch((error) => {
358
+ process.stdout.write(`${JSON.stringify({ valid: false, errors: [error instanceof Error ? error.message : String(error)] }, null, 2)}\n`);
359
+ process.exitCode = 1;
360
+ });