@xfey/tutti 0.1.0

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 (564) hide show
  1. package/README.md +50 -0
  2. package/dist/approvals/index.d.ts +3 -0
  3. package/dist/approvals/index.js +3 -0
  4. package/dist/approvals/manager.d.ts +47 -0
  5. package/dist/approvals/manager.js +180 -0
  6. package/dist/approvals/projections.d.ts +34 -0
  7. package/dist/approvals/projections.js +444 -0
  8. package/dist/artifacts/index.d.ts +4 -0
  9. package/dist/artifacts/index.js +4 -0
  10. package/dist/artifacts/manifest.d.ts +48 -0
  11. package/dist/artifacts/manifest.js +334 -0
  12. package/dist/artifacts/preview-runtime.d.ts +97 -0
  13. package/dist/artifacts/preview-runtime.js +585 -0
  14. package/dist/artifacts/static-preview.d.ts +17 -0
  15. package/dist/artifacts/static-preview.js +180 -0
  16. package/dist/chat-assistant/index.d.ts +66 -0
  17. package/dist/chat-assistant/index.js +268 -0
  18. package/dist/checks/index.d.ts +47 -0
  19. package/dist/checks/index.js +169 -0
  20. package/dist/collaboration-state/clarification-messages.d.ts +8 -0
  21. package/dist/collaboration-state/clarification-messages.js +180 -0
  22. package/dist/collaboration-state/clarification-records.d.ts +27 -0
  23. package/dist/collaboration-state/clarification-records.js +266 -0
  24. package/dist/collaboration-state/clarification-round-writes.d.ts +14 -0
  25. package/dist/collaboration-state/clarification-round-writes.js +58 -0
  26. package/dist/collaboration-state/clarification-rounds.d.ts +19 -0
  27. package/dist/collaboration-state/clarification-rounds.js +347 -0
  28. package/dist/collaboration-state/clarification-successors.d.ts +8 -0
  29. package/dist/collaboration-state/clarification-successors.js +318 -0
  30. package/dist/collaboration-state/execution-status.d.ts +3 -0
  31. package/dist/collaboration-state/execution-status.js +8 -0
  32. package/dist/collaboration-state/index.d.ts +17 -0
  33. package/dist/collaboration-state/index.js +16 -0
  34. package/dist/collaboration-state/messages.d.ts +25 -0
  35. package/dist/collaboration-state/messages.js +371 -0
  36. package/dist/collaboration-state/read-state.d.ts +7 -0
  37. package/dist/collaboration-state/read-state.js +136 -0
  38. package/dist/collaboration-state/recovery.d.ts +6 -0
  39. package/dist/collaboration-state/recovery.js +125 -0
  40. package/dist/collaboration-state/run-recording.d.ts +5 -0
  41. package/dist/collaboration-state/run-recording.js +216 -0
  42. package/dist/collaboration-state/run-results.d.ts +12 -0
  43. package/dist/collaboration-state/run-results.js +202 -0
  44. package/dist/collaboration-state/scratchpad-source-state.d.ts +46 -0
  45. package/dist/collaboration-state/scratchpad-source-state.js +207 -0
  46. package/dist/collaboration-state/scratchpad.d.ts +8 -0
  47. package/dist/collaboration-state/scratchpad.js +84 -0
  48. package/dist/collaboration-state/serialization.d.ts +16 -0
  49. package/dist/collaboration-state/serialization.js +71 -0
  50. package/dist/collaboration-state/storage-types.d.ts +136 -0
  51. package/dist/collaboration-state/storage-types.js +2 -0
  52. package/dist/collaboration-state/task-details.d.ts +5 -0
  53. package/dist/collaboration-state/task-details.js +25 -0
  54. package/dist/collaboration-state/types.d.ts +289 -0
  55. package/dist/collaboration-state/types.js +2 -0
  56. package/dist/collaboration-state/worklist.d.ts +11 -0
  57. package/dist/collaboration-state/worklist.js +286 -0
  58. package/dist/control-plane/clarification-commands.d.ts +34 -0
  59. package/dist/control-plane/clarification-commands.js +106 -0
  60. package/dist/control-plane/command-recovery.d.ts +3 -0
  61. package/dist/control-plane/command-recovery.js +79 -0
  62. package/dist/control-plane/context-sync.d.ts +47 -0
  63. package/dist/control-plane/context-sync.js +207 -0
  64. package/dist/control-plane/event-publishers.d.ts +24 -0
  65. package/dist/control-plane/event-publishers.js +192 -0
  66. package/dist/control-plane/execution-status.d.ts +13 -0
  67. package/dist/control-plane/execution-status.js +130 -0
  68. package/dist/control-plane/follow-up-context.d.ts +27 -0
  69. package/dist/control-plane/follow-up-context.js +93 -0
  70. package/dist/control-plane/follow-up-output.d.ts +53 -0
  71. package/dist/control-plane/follow-up-output.js +141 -0
  72. package/dist/control-plane/follow-up-run.d.ts +22 -0
  73. package/dist/control-plane/follow-up-run.js +90 -0
  74. package/dist/control-plane/follow-up-start.d.ts +26 -0
  75. package/dist/control-plane/follow-up-start.js +101 -0
  76. package/dist/control-plane/formatters.d.ts +12 -0
  77. package/dist/control-plane/formatters.js +47 -0
  78. package/dist/control-plane/index.d.ts +62 -0
  79. package/dist/control-plane/index.js +416 -0
  80. package/dist/control-plane/invalidations.d.ts +12 -0
  81. package/dist/control-plane/invalidations.js +67 -0
  82. package/dist/control-plane/procedure-logging.d.ts +11 -0
  83. package/dist/control-plane/procedure-logging.js +95 -0
  84. package/dist/control-plane/project-brief-refresh.d.ts +31 -0
  85. package/dist/control-plane/project-brief-refresh.js +105 -0
  86. package/dist/control-plane/project-context-bootstrap.d.ts +39 -0
  87. package/dist/control-plane/project-context-bootstrap.js +107 -0
  88. package/dist/control-plane/reference-summary-refresh.d.ts +22 -0
  89. package/dist/control-plane/reference-summary-refresh.js +344 -0
  90. package/dist/control-plane/run-lineage.d.ts +8 -0
  91. package/dist/control-plane/run-lineage.js +13 -0
  92. package/dist/control-plane/run-result-recording.d.ts +46 -0
  93. package/dist/control-plane/run-result-recording.js +81 -0
  94. package/dist/control-plane/run-scheduler.d.ts +35 -0
  95. package/dist/control-plane/run-scheduler.js +110 -0
  96. package/dist/control-plane/run-start.d.ts +30 -0
  97. package/dist/control-plane/run-start.js +167 -0
  98. package/dist/control-plane/scratchpad-auto-refresh.d.ts +32 -0
  99. package/dist/control-plane/scratchpad-auto-refresh.js +150 -0
  100. package/dist/control-plane/scratchpad-refresh-start.d.ts +60 -0
  101. package/dist/control-plane/scratchpad-refresh-start.js +240 -0
  102. package/dist/control-plane/scratchpad-refresh.d.ts +29 -0
  103. package/dist/control-plane/scratchpad-refresh.js +55 -0
  104. package/dist/control-plane/scratchpad-source-messages.d.ts +10 -0
  105. package/dist/control-plane/scratchpad-source-messages.js +131 -0
  106. package/dist/control-plane/startup-recovery.d.ts +19 -0
  107. package/dist/control-plane/startup-recovery.js +113 -0
  108. package/dist/control-plane/task-compile-continuation.d.ts +25 -0
  109. package/dist/control-plane/task-compile-continuation.js +127 -0
  110. package/dist/control-plane/task-compile-output.d.ts +29 -0
  111. package/dist/control-plane/task-compile-output.js +122 -0
  112. package/dist/control-plane/task-compile-start.d.ts +43 -0
  113. package/dist/control-plane/task-compile-start.js +280 -0
  114. package/dist/control-plane/task-proposal.d.ts +3 -0
  115. package/dist/control-plane/task-proposal.js +37 -0
  116. package/dist/control-plane/types.d.ts +155 -0
  117. package/dist/control-plane/types.js +2 -0
  118. package/dist/control-plane/workflows/index.d.ts +4 -0
  119. package/dist/control-plane/workflows/index.js +4 -0
  120. package/dist/control-plane/workflows/openai.d.ts +34 -0
  121. package/dist/control-plane/workflows/openai.js +411 -0
  122. package/dist/control-plane/workflows/structured-output-schemas.d.ts +9 -0
  123. package/dist/control-plane/workflows/structured-output-schemas.js +289 -0
  124. package/dist/control-plane/workflows/structured-output-validators.d.ts +15 -0
  125. package/dist/control-plane/workflows/structured-output-validators.js +295 -0
  126. package/dist/control-plane/workflows/structured-output.d.ts +3 -0
  127. package/dist/control-plane/workflows/structured-output.js +3 -0
  128. package/dist/control-plane/workflows/types.d.ts +274 -0
  129. package/dist/control-plane/workflows/types.js +2 -0
  130. package/dist/control-plane/worklist-terminal-feedback.d.ts +15 -0
  131. package/dist/control-plane/worklist-terminal-feedback.js +135 -0
  132. package/dist/index.d.ts +2 -0
  133. package/dist/index.js +32 -0
  134. package/dist/procedure-engine/index.d.ts +56 -0
  135. package/dist/procedure-engine/index.js +163 -0
  136. package/dist/project-brief/index.d.ts +4 -0
  137. package/dist/project-brief/index.js +3 -0
  138. package/dist/project-brief/repository.d.ts +5 -0
  139. package/dist/project-brief/repository.js +97 -0
  140. package/dist/project-brief/source.d.ts +8 -0
  141. package/dist/project-brief/source.js +75 -0
  142. package/dist/project-brief/types.d.ts +40 -0
  143. package/dist/project-brief/types.js +2 -0
  144. package/dist/project-docs/context.d.ts +34 -0
  145. package/dist/project-docs/context.js +86 -0
  146. package/dist/project-timeline/index.d.ts +20 -0
  147. package/dist/project-timeline/index.js +100 -0
  148. package/dist/prompt-templates/index.d.ts +13 -0
  149. package/dist/prompt-templates/index.js +86 -0
  150. package/dist/provider-usage/index.d.ts +37 -0
  151. package/dist/provider-usage/index.js +227 -0
  152. package/dist/providers/index.d.ts +2 -0
  153. package/dist/providers/index.js +2 -0
  154. package/dist/providers/openai/app-server/json-rpc.d.ts +71 -0
  155. package/dist/providers/openai/app-server/json-rpc.js +298 -0
  156. package/dist/providers/openai/app-server/permission-profile.d.ts +64 -0
  157. package/dist/providers/openai/app-server/permission-profile.js +67 -0
  158. package/dist/providers/openai/app-server/provider-config.d.ts +10 -0
  159. package/dist/providers/openai/app-server/provider-config.js +39 -0
  160. package/dist/providers/openai/app-server/read-only-procedure.d.ts +68 -0
  161. package/dist/providers/openai/app-server/read-only-procedure.js +293 -0
  162. package/dist/providers/openai/app-server/runtime-helpers.d.ts +20 -0
  163. package/dist/providers/openai/app-server/runtime-helpers.js +151 -0
  164. package/dist/providers/openai/app-server/skills.d.ts +82 -0
  165. package/dist/providers/openai/app-server/skills.js +222 -0
  166. package/dist/providers/openai/app-server/smoke-cli.d.ts +2 -0
  167. package/dist/providers/openai/app-server/smoke-cli.js +42 -0
  168. package/dist/providers/openai/app-server/smoke-helpers.d.ts +19 -0
  169. package/dist/providers/openai/app-server/smoke-helpers.js +125 -0
  170. package/dist/providers/openai/app-server/smoke-provider-input.d.ts +6 -0
  171. package/dist/providers/openai/app-server/smoke-provider-input.js +20 -0
  172. package/dist/providers/openai/app-server/smoke-types.d.ts +49 -0
  173. package/dist/providers/openai/app-server/smoke-types.js +20 -0
  174. package/dist/providers/openai/app-server/smoke.d.ts +9 -0
  175. package/dist/providers/openai/app-server/smoke.js +157 -0
  176. package/dist/providers/openai/app-server/workspace-write-run.d.ts +87 -0
  177. package/dist/providers/openai/app-server/workspace-write-run.js +379 -0
  178. package/dist/providers/openai/chat-assistant.d.ts +34 -0
  179. package/dist/providers/openai/chat-assistant.js +72 -0
  180. package/dist/providers/openai/codex-app-server.d.ts +126 -0
  181. package/dist/providers/openai/codex-app-server.js +147 -0
  182. package/dist/providers/openai/credential-store.d.ts +31 -0
  183. package/dist/providers/openai/credential-store.js +143 -0
  184. package/dist/providers/openai/credential-validation.d.ts +45 -0
  185. package/dist/providers/openai/credential-validation.js +190 -0
  186. package/dist/providers/openai/index.d.ts +13 -0
  187. package/dist/providers/openai/index.js +13 -0
  188. package/dist/providers/openai/machine-local-files.d.ts +19 -0
  189. package/dist/providers/openai/machine-local-files.js +55 -0
  190. package/dist/providers/openai/model-config.d.ts +4 -0
  191. package/dist/providers/openai/model-config.js +4 -0
  192. package/dist/providers/openai/provider-config-errors.d.ts +6 -0
  193. package/dist/providers/openai/provider-config-errors.js +13 -0
  194. package/dist/providers/openai/provider-config-shape.d.ts +3 -0
  195. package/dist/providers/openai/provider-config-shape.js +108 -0
  196. package/dist/providers/openai/provider-config-toml.d.ts +13 -0
  197. package/dist/providers/openai/provider-config-toml.js +113 -0
  198. package/dist/providers/openai/provider-config.d.ts +73 -0
  199. package/dist/providers/openai/provider-config.js +117 -0
  200. package/dist/providers/openai/provider-setup.d.ts +31 -0
  201. package/dist/providers/openai/provider-setup.js +88 -0
  202. package/dist/providers/openai/sdk-procedure-runner.d.ts +70 -0
  203. package/dist/providers/openai/sdk-procedure-runner.js +123 -0
  204. package/dist/providers/openai/token-usage.d.ts +11 -0
  205. package/dist/providers/openai/token-usage.js +90 -0
  206. package/dist/run-engine/index.d.ts +61 -0
  207. package/dist/run-engine/index.js +140 -0
  208. package/dist/run-pipeline/candidate-diff.d.ts +3 -0
  209. package/dist/run-pipeline/candidate-diff.js +10 -0
  210. package/dist/run-pipeline/openai.d.ts +41 -0
  211. package/dist/run-pipeline/openai.js +548 -0
  212. package/dist/run-pipeline/promotion-reconcile.d.ts +13 -0
  213. package/dist/run-pipeline/promotion-reconcile.js +138 -0
  214. package/dist/run-pipeline/result-projections.d.ts +39 -0
  215. package/dist/run-pipeline/result-projections.js +115 -0
  216. package/dist/run-pipeline/task-run-invocation.d.ts +6 -0
  217. package/dist/run-pipeline/task-run-invocation.js +130 -0
  218. package/dist/run-pipeline/task-run-output.d.ts +38 -0
  219. package/dist/run-pipeline/task-run-output.js +146 -0
  220. package/dist/server-shell/cli/args.d.ts +7 -0
  221. package/dist/server-shell/cli/args.js +30 -0
  222. package/dist/server-shell/cli/cli.d.ts +3 -0
  223. package/dist/server-shell/cli/cli.js +57 -0
  224. package/dist/server-shell/cli/errors.d.ts +9 -0
  225. package/dist/server-shell/cli/errors.js +53 -0
  226. package/dist/server-shell/cli/git-bootstrap.d.ts +24 -0
  227. package/dist/server-shell/cli/git-bootstrap.js +246 -0
  228. package/dist/server-shell/cli/host-lifecycle.d.ts +45 -0
  229. package/dist/server-shell/cli/host-lifecycle.js +298 -0
  230. package/dist/server-shell/cli/host-relay-status.d.ts +6 -0
  231. package/dist/server-shell/cli/host-relay-status.js +43 -0
  232. package/dist/server-shell/cli/host-runtime-endpoint.d.ts +22 -0
  233. package/dist/server-shell/cli/host-runtime-endpoint.js +120 -0
  234. package/dist/server-shell/cli/host-server-runtime.d.ts +30 -0
  235. package/dist/server-shell/cli/host-server-runtime.js +432 -0
  236. package/dist/server-shell/cli/index.d.ts +8 -0
  237. package/dist/server-shell/cli/index.js +8 -0
  238. package/dist/server-shell/cli/launch.d.ts +45 -0
  239. package/dist/server-shell/cli/launch.js +115 -0
  240. package/dist/server-shell/cli/machine-local.d.ts +69 -0
  241. package/dist/server-shell/cli/machine-local.js +223 -0
  242. package/dist/server-shell/cli/project-identity.d.ts +20 -0
  243. package/dist/server-shell/cli/project-identity.js +87 -0
  244. package/dist/server-shell/cli/relay-registration.d.ts +31 -0
  245. package/dist/server-shell/cli/relay-registration.js +61 -0
  246. package/dist/server-shell/command-idempotency/index.d.ts +44 -0
  247. package/dist/server-shell/command-idempotency/index.js +155 -0
  248. package/dist/server-shell/dev-runner/cli.d.ts +2 -0
  249. package/dist/server-shell/dev-runner/cli.js +10 -0
  250. package/dist/server-shell/dev-runner/config.d.ts +38 -0
  251. package/dist/server-shell/dev-runner/config.js +277 -0
  252. package/dist/server-shell/dev-runner/host-cli.d.ts +2 -0
  253. package/dist/server-shell/dev-runner/host-cli.js +22 -0
  254. package/dist/server-shell/dev-runner/index.d.ts +3 -0
  255. package/dist/server-shell/dev-runner/index.js +3 -0
  256. package/dist/server-shell/dev-runner/runner.d.ts +30 -0
  257. package/dist/server-shell/dev-runner/runner.js +236 -0
  258. package/dist/server-shell/http/create-server.d.ts +18 -0
  259. package/dist/server-shell/http/create-server.js +51 -0
  260. package/dist/server-shell/http/host-tunnel.d.ts +15 -0
  261. package/dist/server-shell/http/host-tunnel.js +154 -0
  262. package/dist/server-shell/http/logger.d.ts +7 -0
  263. package/dist/server-shell/http/logger.js +19 -0
  264. package/dist/server-shell/http/routes/agent-context-auth.d.ts +41 -0
  265. package/dist/server-shell/http/routes/agent-context-auth.js +73 -0
  266. package/dist/server-shell/http/routes/agent-context-errors.d.ts +6 -0
  267. package/dist/server-shell/http/routes/agent-context-errors.js +9 -0
  268. package/dist/server-shell/http/routes/agent-context-messages-routes.d.ts +4 -0
  269. package/dist/server-shell/http/routes/agent-context-messages-routes.js +74 -0
  270. package/dist/server-shell/http/routes/agent-context-project-doc-routes.d.ts +4 -0
  271. package/dist/server-shell/http/routes/agent-context-project-doc-routes.js +86 -0
  272. package/dist/server-shell/http/routes/agent-context-project-docs.d.ts +40 -0
  273. package/dist/server-shell/http/routes/agent-context-project-docs.js +98 -0
  274. package/dist/server-shell/http/routes/agent-context-query.d.ts +31 -0
  275. package/dist/server-shell/http/routes/agent-context-query.js +72 -0
  276. package/dist/server-shell/http/routes/agent-context-reference-routes.d.ts +4 -0
  277. package/dist/server-shell/http/routes/agent-context-reference-routes.js +82 -0
  278. package/dist/server-shell/http/routes/agent-context-references.d.ts +21 -0
  279. package/dist/server-shell/http/routes/agent-context-references.js +85 -0
  280. package/dist/server-shell/http/routes/agent-context-shared.d.ts +34 -0
  281. package/dist/server-shell/http/routes/agent-context-shared.js +44 -0
  282. package/dist/server-shell/http/routes/agent-context-skills-routes.d.ts +4 -0
  283. package/dist/server-shell/http/routes/agent-context-skills-routes.js +85 -0
  284. package/dist/server-shell/http/routes/agent-context-workspace-routes.d.ts +4 -0
  285. package/dist/server-shell/http/routes/agent-context-workspace-routes.js +130 -0
  286. package/dist/server-shell/http/routes/agent-context.d.ts +8 -0
  287. package/dist/server-shell/http/routes/agent-context.js +16 -0
  288. package/dist/server-shell/http/routes/health.d.ts +7 -0
  289. package/dist/server-shell/http/routes/health.js +41 -0
  290. package/dist/server-shell/http/routes/local-control.d.ts +40 -0
  291. package/dist/server-shell/http/routes/local-control.js +260 -0
  292. package/dist/server-shell/http/routes/project-api/approval-routes.d.ts +4 -0
  293. package/dist/server-shell/http/routes/project-api/approval-routes.js +64 -0
  294. package/dist/server-shell/http/routes/project-api/artifacts-routes.d.ts +8 -0
  295. package/dist/server-shell/http/routes/project-api/artifacts-routes.js +166 -0
  296. package/dist/server-shell/http/routes/project-api/clarification-routes.d.ts +4 -0
  297. package/dist/server-shell/http/routes/project-api/clarification-routes.js +150 -0
  298. package/dist/server-shell/http/routes/project-api/constants.d.ts +3 -0
  299. package/dist/server-shell/http/routes/project-api/constants.js +3 -0
  300. package/dist/server-shell/http/routes/project-api/errors.d.ts +26 -0
  301. package/dist/server-shell/http/routes/project-api/errors.js +41 -0
  302. package/dist/server-shell/http/routes/project-api/events-stream.d.ts +11 -0
  303. package/dist/server-shell/http/routes/project-api/events-stream.js +55 -0
  304. package/dist/server-shell/http/routes/project-api/execution-routes.d.ts +4 -0
  305. package/dist/server-shell/http/routes/project-api/execution-routes.js +92 -0
  306. package/dist/server-shell/http/routes/project-api/headers.d.ts +2 -0
  307. package/dist/server-shell/http/routes/project-api/headers.js +7 -0
  308. package/dist/server-shell/http/routes/project-api/invalidations.d.ts +10 -0
  309. package/dist/server-shell/http/routes/project-api/invalidations.js +57 -0
  310. package/dist/server-shell/http/routes/project-api/messages-routes.d.ts +8 -0
  311. package/dist/server-shell/http/routes/project-api/messages-routes.js +80 -0
  312. package/dist/server-shell/http/routes/project-api/openapi-approval-routes.d.ts +128 -0
  313. package/dist/server-shell/http/routes/project-api/openapi-approval-routes.js +32 -0
  314. package/dist/server-shell/http/routes/project-api/openapi-artifacts-routes.d.ts +51 -0
  315. package/dist/server-shell/http/routes/project-api/openapi-artifacts-routes.js +56 -0
  316. package/dist/server-shell/http/routes/project-api/openapi-collaboration-routes.d.ts +466 -0
  317. package/dist/server-shell/http/routes/project-api/openapi-collaboration-routes.js +165 -0
  318. package/dist/server-shell/http/routes/project-api/openapi-diagnostic-routes.d.ts +16 -0
  319. package/dist/server-shell/http/routes/project-api/openapi-diagnostic-routes.js +17 -0
  320. package/dist/server-shell/http/routes/project-api/openapi-execution-routes.d.ts +215 -0
  321. package/dist/server-shell/http/routes/project-api/openapi-execution-routes.js +75 -0
  322. package/dist/server-shell/http/routes/project-api/openapi-path-parameters.d.ts +9 -0
  323. package/dist/server-shell/http/routes/project-api/openapi-path-parameters.js +18 -0
  324. package/dist/server-shell/http/routes/project-api/openapi-skills-routes.d.ts +60 -0
  325. package/dist/server-shell/http/routes/project-api/openapi-skills-routes.js +51 -0
  326. package/dist/server-shell/http/routes/project-api/openapi-timeline-routes.d.ts +115 -0
  327. package/dist/server-shell/http/routes/project-api/openapi-timeline-routes.js +17 -0
  328. package/dist/server-shell/http/routes/project-api/openapi-viewer-routes.d.ts +323 -0
  329. package/dist/server-shell/http/routes/project-api/openapi-viewer-routes.js +120 -0
  330. package/dist/server-shell/http/routes/project-api/openapi-workspace-routes.d.ts +1317 -0
  331. package/dist/server-shell/http/routes/project-api/openapi-workspace-routes.js +95 -0
  332. package/dist/server-shell/http/routes/project-api/openapi.d.ts +2457 -0
  333. package/dist/server-shell/http/routes/project-api/openapi.js +30 -0
  334. package/dist/server-shell/http/routes/project-api/payload-validation.d.ts +6 -0
  335. package/dist/server-shell/http/routes/project-api/payload-validation.js +36 -0
  336. package/dist/server-shell/http/routes/project-api/project-docs-helpers.d.ts +9 -0
  337. package/dist/server-shell/http/routes/project-api/project-docs-helpers.js +17 -0
  338. package/dist/server-shell/http/routes/project-api/project-docs-routes.d.ts +8 -0
  339. package/dist/server-shell/http/routes/project-api/project-docs-routes.js +151 -0
  340. package/dist/server-shell/http/routes/project-api/project-timeline-projection.d.ts +8 -0
  341. package/dist/server-shell/http/routes/project-api/project-timeline-projection.js +658 -0
  342. package/dist/server-shell/http/routes/project-api/project-timeline-routes.d.ts +4 -0
  343. package/dist/server-shell/http/routes/project-api/project-timeline-routes.js +23 -0
  344. package/dist/server-shell/http/routes/project-api/read-state-routes.d.ts +8 -0
  345. package/dist/server-shell/http/routes/project-api/read-state-routes.js +82 -0
  346. package/dist/server-shell/http/routes/project-api/reference-files-routes.d.ts +8 -0
  347. package/dist/server-shell/http/routes/project-api/reference-files-routes.js +184 -0
  348. package/dist/server-shell/http/routes/project-api/reference-files.d.ts +17 -0
  349. package/dist/server-shell/http/routes/project-api/reference-files.js +212 -0
  350. package/dist/server-shell/http/routes/project-api/repo-projection.d.ts +3 -0
  351. package/dist/server-shell/http/routes/project-api/repo-projection.js +58 -0
  352. package/dist/server-shell/http/routes/project-api/schemas.d.ts +1351 -0
  353. package/dist/server-shell/http/routes/project-api/schemas.js +441 -0
  354. package/dist/server-shell/http/routes/project-api/session-requirements.d.ts +10 -0
  355. package/dist/server-shell/http/routes/project-api/session-requirements.js +60 -0
  356. package/dist/server-shell/http/routes/project-api/skills-helpers.d.ts +7 -0
  357. package/dist/server-shell/http/routes/project-api/skills-helpers.js +48 -0
  358. package/dist/server-shell/http/routes/project-api/skills-routes.d.ts +8 -0
  359. package/dist/server-shell/http/routes/project-api/skills-routes.js +185 -0
  360. package/dist/server-shell/http/routes/project-api/staged-uploads.d.ts +14 -0
  361. package/dist/server-shell/http/routes/project-api/staged-uploads.js +149 -0
  362. package/dist/server-shell/http/routes/project-api/system-routes.d.ts +8 -0
  363. package/dist/server-shell/http/routes/project-api/system-routes.js +141 -0
  364. package/dist/server-shell/http/routes/project-api/types.d.ts +137 -0
  365. package/dist/server-shell/http/routes/project-api/types.js +2 -0
  366. package/dist/server-shell/http/routes/project-api/viewer-projections.d.ts +17 -0
  367. package/dist/server-shell/http/routes/project-api/viewer-projections.js +102 -0
  368. package/dist/server-shell/http/routes/project-api/viewer-routes.d.ts +4 -0
  369. package/dist/server-shell/http/routes/project-api/viewer-routes.js +100 -0
  370. package/dist/server-shell/http/routes/project-api/workflow-routes.d.ts +4 -0
  371. package/dist/server-shell/http/routes/project-api/workflow-routes.js +85 -0
  372. package/dist/server-shell/http/routes/project-api/workspace-projections.d.ts +5 -0
  373. package/dist/server-shell/http/routes/project-api/workspace-projections.js +103 -0
  374. package/dist/server-shell/http/routes/project-api.d.ts +8 -0
  375. package/dist/server-shell/http/routes/project-api.js +34 -0
  376. package/dist/server-shell/http/sse-replay-buffer.d.ts +54 -0
  377. package/dist/server-shell/http/sse-replay-buffer.js +110 -0
  378. package/dist/server-shell/http/sse.d.ts +12 -0
  379. package/dist/server-shell/http/sse.js +22 -0
  380. package/dist/server-shell/http/static-web.d.ts +6 -0
  381. package/dist/server-shell/http/static-web.js +52 -0
  382. package/dist/server-shell/http/validation.d.ts +13 -0
  383. package/dist/server-shell/http/validation.js +136 -0
  384. package/dist/server-shell/http/workspace-events.d.ts +38 -0
  385. package/dist/server-shell/http/workspace-events.js +98 -0
  386. package/dist/server-shell/session/relay-session-context.d.ts +25 -0
  387. package/dist/server-shell/session/relay-session-context.js +49 -0
  388. package/dist/server-shell/smoke/e2e-client.d.ts +59 -0
  389. package/dist/server-shell/smoke/e2e-client.js +304 -0
  390. package/dist/server-shell/smoke/index.d.ts +2 -0
  391. package/dist/server-shell/smoke/index.js +2 -0
  392. package/dist/skills/constants.d.ts +8 -0
  393. package/dist/skills/constants.js +9 -0
  394. package/dist/skills/errors.d.ts +6 -0
  395. package/dist/skills/errors.js +9 -0
  396. package/dist/skills/index.d.ts +41 -0
  397. package/dist/skills/index.js +171 -0
  398. package/dist/skills/metadata.d.ts +8 -0
  399. package/dist/skills/metadata.js +80 -0
  400. package/dist/skills/zip-import.d.ts +18 -0
  401. package/dist/skills/zip-import.js +241 -0
  402. package/dist/store/command-recovery.d.ts +26 -0
  403. package/dist/store/command-recovery.js +71 -0
  404. package/dist/store/index.d.ts +6 -0
  405. package/dist/store/index.js +6 -0
  406. package/dist/store/lifecycle.d.ts +23 -0
  407. package/dist/store/lifecycle.js +53 -0
  408. package/dist/store/metadata.d.ts +18 -0
  409. package/dist/store/metadata.js +30 -0
  410. package/dist/store/migrations.d.ts +20 -0
  411. package/dist/store/migrations.js +76 -0
  412. package/dist/store/sqlite.d.ts +11 -0
  413. package/dist/store/sqlite.js +21 -0
  414. package/dist/workspace-ops/constants.d.ts +15 -0
  415. package/dist/workspace-ops/constants.js +20 -0
  416. package/dist/workspace-ops/errors.d.ts +8 -0
  417. package/dist/workspace-ops/errors.js +33 -0
  418. package/dist/workspace-ops/git.d.ts +13 -0
  419. package/dist/workspace-ops/git.js +53 -0
  420. package/dist/workspace-ops/index.d.ts +11 -0
  421. package/dist/workspace-ops/index.js +9 -0
  422. package/dist/workspace-ops/mainline.d.ts +2 -0
  423. package/dist/workspace-ops/mainline.js +16 -0
  424. package/dist/workspace-ops/project-doc-templates.d.ts +12 -0
  425. package/dist/workspace-ops/project-doc-templates.js +180 -0
  426. package/dist/workspace-ops/project-docs.d.ts +7 -0
  427. package/dist/workspace-ops/project-docs.js +156 -0
  428. package/dist/workspace-ops/reference-files.d.ts +3 -0
  429. package/dist/workspace-ops/reference-files.js +137 -0
  430. package/dist/workspace-ops/reference-metadata.d.ts +13 -0
  431. package/dist/workspace-ops/reference-metadata.js +86 -0
  432. package/dist/workspace-ops/reference-summaries.d.ts +17 -0
  433. package/dist/workspace-ops/reference-summaries.js +298 -0
  434. package/dist/workspace-ops/run-workspaces.d.ts +18 -0
  435. package/dist/workspace-ops/run-workspaces.js +271 -0
  436. package/dist/workspace-ops/types.d.ts +219 -0
  437. package/dist/workspace-ops/types.js +2 -0
  438. package/dist/workspace-ops/viewer-file.d.ts +4 -0
  439. package/dist/workspace-ops/viewer-file.js +207 -0
  440. package/dist/workspace-ops/viewer-git.d.ts +20 -0
  441. package/dist/workspace-ops/viewer-git.js +111 -0
  442. package/dist/workspace-ops/viewer-paths.d.ts +3 -0
  443. package/dist/workspace-ops/viewer-paths.js +13 -0
  444. package/dist/workspace-ops/viewer-tree.d.ts +9 -0
  445. package/dist/workspace-ops/viewer-tree.js +144 -0
  446. package/dist/workspace-ops/viewer.d.ts +5 -0
  447. package/dist/workspace-ops/viewer.js +5 -0
  448. package/migrations/0001_init.sql +674 -0
  449. package/migrations/0002_allow_sealed_round_successor_note.sql +14 -0
  450. package/migrations/0003_drop_scratchpad_source_message_refs.sql +1 -0
  451. package/migrations/0004_read_state.sql +109 -0
  452. package/migrations/0005_provider_usage.sql +15 -0
  453. package/migrations/0006_scratchpad_source_state.sql +29 -0
  454. package/migrations/0007_workspace_signal_read_state_scopes.sql +74 -0
  455. package/migrations/0008_provider_usage_anchors.sql +32 -0
  456. package/migrations/0009_project_timeline_events.sql +33 -0
  457. package/migrations/0010_project_brief.sql +13 -0
  458. package/migrations/0011_message_author_avatar.sql +5 -0
  459. package/migrations/README.md +44 -0
  460. package/node_modules/@tutti/relay-client/dist/host-control.d.ts +164 -0
  461. package/node_modules/@tutti/relay-client/dist/host-control.js +284 -0
  462. package/node_modules/@tutti/relay-client/dist/index.d.ts +3 -0
  463. package/node_modules/@tutti/relay-client/dist/index.js +3 -0
  464. package/node_modules/@tutti/relay-client/dist/tunnel-frames.d.ts +8 -0
  465. package/node_modules/@tutti/relay-client/dist/tunnel-frames.js +124 -0
  466. package/node_modules/@tutti/relay-client/dist/tunnel-types.d.ts +61 -0
  467. package/node_modules/@tutti/relay-client/dist/tunnel-types.js +2 -0
  468. package/node_modules/@tutti/relay-client/dist/tunnel.d.ts +4 -0
  469. package/node_modules/@tutti/relay-client/dist/tunnel.js +144 -0
  470. package/node_modules/@tutti/relay-client/package.json +18 -0
  471. package/node_modules/@tutti/shared/dist/domain/index.d.ts +59 -0
  472. package/node_modules/@tutti/shared/dist/domain/index.js +37 -0
  473. package/node_modules/@tutti/shared/dist/ids/index.d.ts +85 -0
  474. package/node_modules/@tutti/shared/dist/ids/index.js +88 -0
  475. package/node_modules/@tutti/shared/dist/index.d.ts +6 -0
  476. package/node_modules/@tutti/shared/dist/index.js +6 -0
  477. package/node_modules/@tutti/shared/dist/schemas/api/approvals.d.ts +307 -0
  478. package/node_modules/@tutti/shared/dist/schemas/api/approvals.js +110 -0
  479. package/node_modules/@tutti/shared/dist/schemas/api/artifacts.d.ts +173 -0
  480. package/node_modules/@tutti/shared/dist/schemas/api/artifacts.js +107 -0
  481. package/node_modules/@tutti/shared/dist/schemas/api/clarifications.d.ts +704 -0
  482. package/node_modules/@tutti/shared/dist/schemas/api/clarifications.js +224 -0
  483. package/node_modules/@tutti/shared/dist/schemas/api/index.d.ts +18 -0
  484. package/node_modules/@tutti/shared/dist/schemas/api/index.js +17 -0
  485. package/node_modules/@tutti/shared/dist/schemas/api/messages.d.ts +370 -0
  486. package/node_modules/@tutti/shared/dist/schemas/api/messages.js +134 -0
  487. package/node_modules/@tutti/shared/dist/schemas/api/openapi.d.ts +32 -0
  488. package/node_modules/@tutti/shared/dist/schemas/api/openapi.js +100 -0
  489. package/node_modules/@tutti/shared/dist/schemas/api/primitives.d.ts +109 -0
  490. package/node_modules/@tutti/shared/dist/schemas/api/primitives.js +174 -0
  491. package/node_modules/@tutti/shared/dist/schemas/api/project-timeline.d.ts +149 -0
  492. package/node_modules/@tutti/shared/dist/schemas/api/project-timeline.js +44 -0
  493. package/node_modules/@tutti/shared/dist/schemas/api/provider-config.d.ts +21 -0
  494. package/node_modules/@tutti/shared/dist/schemas/api/provider-config.js +33 -0
  495. package/node_modules/@tutti/shared/dist/schemas/api/provider-usage.d.ts +87 -0
  496. package/node_modules/@tutti/shared/dist/schemas/api/provider-usage.js +48 -0
  497. package/node_modules/@tutti/shared/dist/schemas/api/read-state.d.ts +89 -0
  498. package/node_modules/@tutti/shared/dist/schemas/api/read-state.js +39 -0
  499. package/node_modules/@tutti/shared/dist/schemas/api/runtime-events.d.ts +484 -0
  500. package/node_modules/@tutti/shared/dist/schemas/api/runtime-events.js +185 -0
  501. package/node_modules/@tutti/shared/dist/schemas/api/skills.d.ts +88 -0
  502. package/node_modules/@tutti/shared/dist/schemas/api/skills.js +71 -0
  503. package/node_modules/@tutti/shared/dist/schemas/api/types.d.ts +253 -0
  504. package/node_modules/@tutti/shared/dist/schemas/api/types.js +2 -0
  505. package/node_modules/@tutti/shared/dist/schemas/api/uploads.d.ts +103 -0
  506. package/node_modules/@tutti/shared/dist/schemas/api/uploads.js +78 -0
  507. package/node_modules/@tutti/shared/dist/schemas/api/viewer-reference.d.ts +484 -0
  508. package/node_modules/@tutti/shared/dist/schemas/api/viewer-reference.js +267 -0
  509. package/node_modules/@tutti/shared/dist/schemas/api/work-items.d.ts +264 -0
  510. package/node_modules/@tutti/shared/dist/schemas/api/work-items.js +196 -0
  511. package/node_modules/@tutti/shared/dist/schemas/api/workspace-commands.d.ts +179 -0
  512. package/node_modules/@tutti/shared/dist/schemas/api/workspace-commands.js +137 -0
  513. package/node_modules/@tutti/shared/dist/schemas/domain/index.d.ts +31 -0
  514. package/node_modules/@tutti/shared/dist/schemas/domain/index.js +49 -0
  515. package/node_modules/@tutti/shared/dist/schemas/internal/index.d.ts +46 -0
  516. package/node_modules/@tutti/shared/dist/schemas/internal/index.js +46 -0
  517. package/node_modules/@tutti/shared/dist/utils/command-idempotency/index.d.ts +40 -0
  518. package/node_modules/@tutti/shared/dist/utils/command-idempotency/index.js +100 -0
  519. package/node_modules/@tutti/shared/dist/utils/index.d.ts +5 -0
  520. package/node_modules/@tutti/shared/dist/utils/index.js +5 -0
  521. package/node_modules/@tutti/shared/dist/utils/logging/index.d.ts +34 -0
  522. package/node_modules/@tutti/shared/dist/utils/logging/index.js +130 -0
  523. package/node_modules/@tutti/shared/dist/utils/path-policy/index.d.ts +13 -0
  524. package/node_modules/@tutti/shared/dist/utils/path-policy/index.js +80 -0
  525. package/node_modules/@tutti/shared/dist/utils/redaction/index.d.ts +19 -0
  526. package/node_modules/@tutti/shared/dist/utils/redaction/index.js +158 -0
  527. package/node_modules/@tutti/shared/package.json +63 -0
  528. package/package.json +47 -0
  529. package/prompts/README.md +36 -0
  530. package/prompts/chat-assistant.md +43 -0
  531. package/prompts/codex/README.md +13 -0
  532. package/prompts/codex/no-write-smoke.md +35 -0
  533. package/prompts/procedures/README.md +38 -0
  534. package/prompts/procedures/context-sync.md +66 -0
  535. package/prompts/procedures/follow-up-check.md +83 -0
  536. package/prompts/procedures/project-brief-refresh.md +79 -0
  537. package/prompts/procedures/project-context-bootstrap.md +58 -0
  538. package/prompts/procedures/reference-file-summary.md +49 -0
  539. package/prompts/procedures/scratchpad-refresh.md +83 -0
  540. package/prompts/procedures/task-compile.md +116 -0
  541. package/prompts/prompt-flow-experiment-plan.md +203 -0
  542. package/prompts/prompt-flow-map.md +478 -0
  543. package/prompts/runs/README.md +17 -0
  544. package/prompts/runs/task-continuation.md +148 -0
  545. package/prompts/runs/task-retry.md +153 -0
  546. package/prompts/runs/task-run.md +135 -0
  547. package/prompts/skills/README.md +25 -0
  548. package/prompts/skills/read-main-chat/README.md +8 -0
  549. package/prompts/skills/read-main-chat/SKILL.md +18 -0
  550. package/prompts/skills/read-project-docs/README.md +13 -0
  551. package/prompts/skills/read-project-docs/SKILL.md +42 -0
  552. package/prompts/skills/read-references/README.md +9 -0
  553. package/prompts/skills/read-references/SKILL.md +26 -0
  554. package/prompts/skills/read-scratchpad/README.md +8 -0
  555. package/prompts/skills/read-scratchpad/SKILL.md +16 -0
  556. package/prompts/skills/read-user-skills/README.md +7 -0
  557. package/prompts/skills/read-user-skills/SKILL.md +22 -0
  558. package/prompts/skills/read-worklist/README.md +9 -0
  559. package/prompts/skills/read-worklist/SKILL.md +20 -0
  560. package/web/assets/Tutti-B7gEyTp1.png +0 -0
  561. package/web/assets/Tutti-square-BqFU7F0D.png +0 -0
  562. package/web/assets/index-CWkBgHap.js +29 -0
  563. package/web/assets/index-D8xJY8Gr.css +1 -0
  564. package/web/index.html +13 -0
@@ -0,0 +1,33 @@
1
+ export class WorkspaceOpsError extends Error {
2
+ code;
3
+ statusCode;
4
+ details;
5
+ constructor(code, message, details) {
6
+ super(message);
7
+ this.name = "WorkspaceOpsError";
8
+ this.code = code;
9
+ this.statusCode = workspaceOpsStatusCode(code);
10
+ if (details !== undefined) {
11
+ this.details = details;
12
+ }
13
+ }
14
+ }
15
+ function workspaceOpsStatusCode(code) {
16
+ switch (code) {
17
+ case "bad_request":
18
+ return 400;
19
+ case "forbidden":
20
+ return 403;
21
+ case "not_found":
22
+ return 404;
23
+ case "conflict":
24
+ return 409;
25
+ case "validation_failed":
26
+ return 422;
27
+ case "repo_snapshot_unavailable":
28
+ return 409;
29
+ case "git_failed":
30
+ return 500;
31
+ }
32
+ }
33
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1,13 @@
1
+ export type GitCommandResult = {
2
+ status: number | null;
3
+ stdout: Buffer;
4
+ stderr: string;
5
+ error?: Error;
6
+ };
7
+ export declare function runGitRaw(args: readonly string[], workspaceRoot: string, maxBuffer?: number): GitCommandResult;
8
+ export declare function summarizeGitFailure(args: readonly string[], result: GitCommandResult): string;
9
+ export declare function runGitText(args: readonly string[], workspaceRoot: string): string;
10
+ export declare function runGit(args: readonly string[], workspaceRoot: string): void;
11
+ export declare function tryGitText(args: readonly string[], workspaceRoot: string): string | null;
12
+ export declare function stagedChangesExist(workspaceRoot: string): boolean;
13
+ //# sourceMappingURL=git.d.ts.map
@@ -0,0 +1,53 @@
1
+ import { spawnSync } from "node:child_process";
2
+ import { WorkspaceOpsError } from "./errors.js";
3
+ export function runGitRaw(args, workspaceRoot, maxBuffer = 10 * 1024 * 1024) {
4
+ const result = spawnSync("git", [...args], {
5
+ cwd: workspaceRoot,
6
+ encoding: "buffer",
7
+ maxBuffer,
8
+ shell: false,
9
+ });
10
+ return {
11
+ status: result.status,
12
+ stdout: Buffer.isBuffer(result.stdout) ? result.stdout : Buffer.from(result.stdout ?? ""),
13
+ stderr: Buffer.isBuffer(result.stderr)
14
+ ? result.stderr.toString("utf8")
15
+ : String(result.stderr ?? ""),
16
+ ...(result.error === undefined ? {} : { error: result.error }),
17
+ };
18
+ }
19
+ export function summarizeGitFailure(args, result) {
20
+ const stderr = result.stderr.trim();
21
+ if (stderr.length > 0) {
22
+ return stderr;
23
+ }
24
+ if (result.error !== undefined) {
25
+ return result.error.message;
26
+ }
27
+ return `git ${args.join(" ")} failed`;
28
+ }
29
+ export function runGitText(args, workspaceRoot) {
30
+ const result = runGitRaw(args, workspaceRoot);
31
+ if (result.status !== 0) {
32
+ throw new WorkspaceOpsError("git_failed", summarizeGitFailure(args, result));
33
+ }
34
+ return result.stdout.toString("utf8").trim();
35
+ }
36
+ export function runGit(args, workspaceRoot) {
37
+ const result = runGitRaw(args, workspaceRoot);
38
+ if (result.status !== 0) {
39
+ throw new WorkspaceOpsError("git_failed", summarizeGitFailure(args, result));
40
+ }
41
+ }
42
+ export function tryGitText(args, workspaceRoot) {
43
+ const result = runGitRaw(args, workspaceRoot);
44
+ if (result.status !== 0) {
45
+ return null;
46
+ }
47
+ return result.stdout.toString("utf8").trim();
48
+ }
49
+ export function stagedChangesExist(workspaceRoot) {
50
+ const result = runGitRaw(["diff", "--cached", "--quiet"], workspaceRoot);
51
+ return result.status !== 0;
52
+ }
53
+ //# sourceMappingURL=git.js.map
@@ -0,0 +1,11 @@
1
+ export { DEFAULT_VIEWER_MAX_BYTES, MAX_REFERENCE_UPLOAD_BYTES, MAX_VIEWER_MAX_BYTES, PROJECT_DOC_PATHS, REFERENCE_IMAGE_ASSET_CACHE_VERSION, REFERENCE_IMAGE_PREVIEW_MAX_EDGE_PX, REFERENCE_IMAGE_THUMBNAIL_MAX_EDGE_PX, REFERENCE_DIRECTORY_PATH, REFERENCE_FILES_DIRECTORY_PATH, REFERENCE_IMAGES_DIRECTORY_PATH, REFERENCE_INDEX_PATH, VIEWER_ASSET_READ_LIMIT_BYTES, VIEWER_HARD_READ_LIMIT_BYTES, WORKSPACE_OPS_MAINLINE_BRANCH, } from "./constants.js";
2
+ export { WorkspaceOpsError } from "./errors.js";
3
+ export { initializeProjectDocs, readProjectDocsInitializationStatus, syncProjectDocs, } from "./project-docs.js";
4
+ export { uploadReferenceFile } from "./reference-files.js";
5
+ export { referenceFileCategoryForPath, referenceMediaTypeForPath } from "./reference-metadata.js";
6
+ export { readReferenceSummaryIndex, readReferenceSummaryTargets, referenceSummaryProjectionForEntry, updateReferenceSummaries, } from "./reference-summaries.js";
7
+ export { applyRunResultToMergeWorkspace, cleanupMergeWorkspace, cleanupRunWorkspace, cleanupStaleRunWorkspaces, collectMergeDiff, collectRunDiff, createMergeCandidateCommit, createResultCommit, prepareMergeWorkspace, prepareRunWorkspace, promoteMergeCandidate, promoteRunResult, } from "./run-workspaces.js";
8
+ export { readViewerAsset, readViewerFile, readViewerSnapshot, readViewerTree } from "./viewer.js";
9
+ export type { WorkspaceOpsErrorCode } from "./errors.js";
10
+ export type { CleanupRunWorkspaceResult, CleanupStaleRunWorkspacesResult, InitializeProjectDocsOptions, InitializeProjectDocsResult, MergeWorkspaceHandle, PrepareMergeWorkspaceOptions, PrepareRunWorkspaceOptions, ProjectDocsInitializationContext, ProjectDocsInitializationDocument, ProjectDocsInitializationStatus, PromotionResult, ReadViewerAssetOptions, ReadViewerFileOptions, ReadViewerTreeOptions, ReferenceFileCategory, ReferenceSummaryProjection, ReferenceSummaryRecord, ReferenceSummaryStatus, ReferenceSummaryTarget, ResultCommit, RunDiffSummary, RunWorkspaceHandle, SyncProjectDocsResult, SyncProjectDocsUpdate, UpdateReferenceSummariesOptions, UpdateReferenceSummariesResult, UploadReferenceFileOptions, UploadReferenceFileResult, ViewerAssetResult, ViewerAssetVariant, ViewerEntryKind, ViewerFileContent, ViewerFileResult, ViewerRepoSnapshot, ViewerTreeEntry, ViewerTreeResult, WorkspaceViewerOptions, } from "./types.js";
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,9 @@
1
+ export { DEFAULT_VIEWER_MAX_BYTES, MAX_REFERENCE_UPLOAD_BYTES, MAX_VIEWER_MAX_BYTES, PROJECT_DOC_PATHS, REFERENCE_IMAGE_ASSET_CACHE_VERSION, REFERENCE_IMAGE_PREVIEW_MAX_EDGE_PX, REFERENCE_IMAGE_THUMBNAIL_MAX_EDGE_PX, REFERENCE_DIRECTORY_PATH, REFERENCE_FILES_DIRECTORY_PATH, REFERENCE_IMAGES_DIRECTORY_PATH, REFERENCE_INDEX_PATH, VIEWER_ASSET_READ_LIMIT_BYTES, VIEWER_HARD_READ_LIMIT_BYTES, WORKSPACE_OPS_MAINLINE_BRANCH, } from "./constants.js";
2
+ export { WorkspaceOpsError } from "./errors.js";
3
+ export { initializeProjectDocs, readProjectDocsInitializationStatus, syncProjectDocs, } from "./project-docs.js";
4
+ export { uploadReferenceFile } from "./reference-files.js";
5
+ export { referenceFileCategoryForPath, referenceMediaTypeForPath } from "./reference-metadata.js";
6
+ export { readReferenceSummaryIndex, readReferenceSummaryTargets, referenceSummaryProjectionForEntry, updateReferenceSummaries, } from "./reference-summaries.js";
7
+ export { applyRunResultToMergeWorkspace, cleanupMergeWorkspace, cleanupRunWorkspace, cleanupStaleRunWorkspaces, collectMergeDiff, collectRunDiff, createMergeCandidateCommit, createResultCommit, prepareMergeWorkspace, prepareRunWorkspace, promoteMergeCandidate, promoteRunResult, } from "./run-workspaces.js";
8
+ export { readViewerAsset, readViewerFile, readViewerSnapshot, readViewerTree } from "./viewer.js";
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,2 @@
1
+ export declare function requireMainlineWriteReady(workspaceRoot: string): void;
2
+ //# sourceMappingURL=mainline.d.ts.map
@@ -0,0 +1,16 @@
1
+ import { WORKSPACE_OPS_MAINLINE_BRANCH } from "./constants.js";
2
+ import { WorkspaceOpsError } from "./errors.js";
3
+ import { tryGitText } from "./git.js";
4
+ import { readViewerSnapshot } from "./viewer.js";
5
+ export function requireMainlineWriteReady(workspaceRoot) {
6
+ readViewerSnapshot({ workspaceRoot });
7
+ const currentBranch = tryGitText(["branch", "--show-current"], workspaceRoot);
8
+ if (currentBranch !== WORKSPACE_OPS_MAINLINE_BRANCH) {
9
+ throw new WorkspaceOpsError("conflict", "Mainline write requires the mainline branch to be checked out");
10
+ }
11
+ const status = tryGitText(["status", "--porcelain"], workspaceRoot);
12
+ if (status !== "") {
13
+ throw new WorkspaceOpsError("conflict", "Mainline write requires a clean mainline working tree");
14
+ }
15
+ }
16
+ //# sourceMappingURL=mainline.js.map
@@ -0,0 +1,12 @@
1
+ import type { PROJECT_DOC_PATHS } from "./constants.js";
2
+ import type { ProjectDocsInitializationContext } from "./types.js";
3
+ export type ProjectDocRepoFactHints = {
4
+ directories: string[];
5
+ root_files: string[];
6
+ package_managers: string[];
7
+ frameworks: string[];
8
+ entrypoints: string[];
9
+ };
10
+ export declare function repoFactHints(workspaceRoot: string): ProjectDocRepoFactHints;
11
+ export declare function projectDocTemplate(path: (typeof PROJECT_DOC_PATHS)[number], projectName: string, context: ProjectDocsInitializationContext | undefined, repoHints: ProjectDocRepoFactHints): string;
12
+ //# sourceMappingURL=project-doc-templates.d.ts.map
@@ -0,0 +1,180 @@
1
+ import { readViewerTree } from "./viewer.js";
2
+ function asBulletList(items, fallback) {
3
+ const normalized = items?.map((item) => item.trim()).filter((item) => item.length > 0) ?? [];
4
+ if (normalized.length === 0) {
5
+ return `- ${fallback}`;
6
+ }
7
+ return normalized.map((item) => `- ${item}`).join("\n");
8
+ }
9
+ function asParagraph(value, fallback) {
10
+ const normalized = value?.trim();
11
+ return normalized === undefined || normalized.length === 0 ? fallback : normalized;
12
+ }
13
+ export function repoFactHints(workspaceRoot) {
14
+ const tree = readViewerTree({ workspaceRoot, depth: 2 });
15
+ const paths = tree.items.map((entry) => entry.path);
16
+ const rootEntries = tree.items.filter((entry) => entry.depth === 1);
17
+ const rootFiles = rootEntries
18
+ .filter((entry) => entry.kind === "file")
19
+ .map((entry) => entry.path)
20
+ .slice(0, 12);
21
+ const directories = rootEntries
22
+ .filter((entry) => entry.kind === "directory")
23
+ .map((entry) => entry.path)
24
+ .slice(0, 12);
25
+ const pathSet = new Set(paths);
26
+ const packageManagers = [];
27
+ const frameworks = [];
28
+ const entrypoints = [];
29
+ if (pathSet.has("package.json")) {
30
+ packageManagers.push("npm-compatible JavaScript package metadata");
31
+ }
32
+ if (pathSet.has("package-lock.json")) {
33
+ packageManagers.push("npm lockfile");
34
+ }
35
+ if (pathSet.has("pnpm-lock.yaml")) {
36
+ packageManagers.push("pnpm lockfile");
37
+ }
38
+ if (pathSet.has("yarn.lock")) {
39
+ packageManagers.push("Yarn lockfile");
40
+ }
41
+ if (pathSet.has("pyproject.toml")) {
42
+ packageManagers.push("Python pyproject");
43
+ }
44
+ if (pathSet.has("requirements.txt")) {
45
+ packageManagers.push("Python requirements file");
46
+ }
47
+ if (pathSet.has("Dockerfile")) {
48
+ frameworks.push("Docker");
49
+ }
50
+ if (pathSet.has("docker-compose.yml") || pathSet.has("docker-compose.yaml")) {
51
+ frameworks.push("Docker Compose");
52
+ }
53
+ for (const candidate of [
54
+ "src/main.ts",
55
+ "src/main.tsx",
56
+ "src/index.ts",
57
+ "src/index.tsx",
58
+ "src/App.tsx",
59
+ "index.html",
60
+ "server.js",
61
+ "app.py",
62
+ "main.py",
63
+ ]) {
64
+ if (pathSet.has(candidate)) {
65
+ entrypoints.push(candidate);
66
+ }
67
+ }
68
+ return {
69
+ directories,
70
+ root_files: rootFiles,
71
+ package_managers: packageManagers,
72
+ frameworks,
73
+ entrypoints,
74
+ };
75
+ }
76
+ export function projectDocTemplate(path, projectName, context, repoHints) {
77
+ const scratchpad = context?.scratchpad;
78
+ switch (path) {
79
+ case "product.md":
80
+ return `# Product
81
+
82
+ ## Purpose
83
+
84
+ ${projectName} is a Tutti-managed project.
85
+
86
+ Current startup topic: ${asParagraph(scratchpad?.topic, "To be confirmed.")}
87
+
88
+ Background: ${asParagraph(scratchpad?.background_summary, "To be confirmed.")}
89
+
90
+ ## Target Users
91
+
92
+ - To be confirmed.
93
+
94
+ ## Key Features
95
+
96
+ ${asBulletList([...(scratchpad?.current_consensus ?? []), ...(scratchpad?.task_changes ?? [])], "To be confirmed.")}
97
+
98
+ ## Business Objectives
99
+
100
+ - Establish the initial project context baseline.
101
+ - Convert confirmed discussion into an executable Worklist.
102
+ `;
103
+ case "tech.md":
104
+ return `# Tech
105
+
106
+ ## Frameworks
107
+
108
+ ${asBulletList(repoHints.frameworks, "To be confirmed from the repository.")}
109
+
110
+ ## Libraries
111
+
112
+ - To be confirmed from the repository.
113
+
114
+ ## Development Tools
115
+
116
+ ${asBulletList(repoHints.package_managers, "To be confirmed from the repository.")}
117
+
118
+ ## Technical Constraints
119
+
120
+ - Keep this document synchronized when stable technical facts change.
121
+ - Do not infer unconfirmed technology choices from discussion alone.
122
+ `;
123
+ case "structure.md":
124
+ return `# Structure
125
+
126
+ ## File Organization
127
+
128
+ ${asBulletList([
129
+ ...repoHints.directories.map((directory) => `Top-level directory: \`${directory}/\``),
130
+ ...repoHints.root_files.map((file) => `Root file: \`${file}\``),
131
+ ], "Repository structure is pending context sync.")}
132
+ - Human-uploaded reference materials, when present, live under \`docs/reference/\`.
133
+
134
+ ## Naming Conventions
135
+
136
+ - To be confirmed.
137
+
138
+ ## Import Patterns
139
+
140
+ - To be confirmed.
141
+
142
+ ## Architectural Decisions
143
+
144
+ ${asBulletList(scratchpad?.current_consensus, "To be confirmed.")}
145
+ `;
146
+ case "architecture-principles.md":
147
+ return `# Architecture Principles
148
+
149
+ ## Scope
150
+
151
+ These principles apply to implementation work in this project.
152
+
153
+ ## Core Principles
154
+
155
+ - Current context before change.
156
+ - Atomic task delivery.
157
+ - Stable increments over large rewrites.
158
+ - Clear responsibility boundaries.
159
+ - Documentation stays in sync.
160
+
161
+ ## Boundary Rules
162
+
163
+ - Prefer extending existing structure before adding new top-level structure.
164
+ - Escalate when key architecture facts are missing.
165
+
166
+ ## Quality Gates
167
+
168
+ - Run relevant validation before marking implementation complete.
169
+
170
+ ## Human Escalation
171
+
172
+ - Ask for confirmation when requirements, safety, or architecture boundaries are unclear.
173
+
174
+ ## Documentation Duties
175
+
176
+ - Update project documents and directory README files when stable facts change.
177
+ `;
178
+ }
179
+ }
180
+ //# sourceMappingURL=project-doc-templates.js.map
@@ -0,0 +1,7 @@
1
+ import type { InitializeProjectDocsOptions, InitializeProjectDocsResult, ProjectDocsInitializationStatus, SyncProjectDocsResult, SyncProjectDocsUpdate, WorkspaceViewerOptions } from "./types.js";
2
+ export declare function readProjectDocsInitializationStatus(options: WorkspaceViewerOptions): ProjectDocsInitializationStatus;
3
+ export declare function initializeProjectDocs(options: InitializeProjectDocsOptions): InitializeProjectDocsResult;
4
+ export declare function syncProjectDocs(options: WorkspaceViewerOptions & {
5
+ updates: SyncProjectDocsUpdate[];
6
+ }): SyncProjectDocsResult;
7
+ //# sourceMappingURL=project-docs.d.ts.map
@@ -0,0 +1,156 @@
1
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
2
+ import { extname, join, posix } from "node:path";
3
+ import { PROJECT_DOC_PATHS } from "./constants.js";
4
+ import { WorkspaceOpsError } from "./errors.js";
5
+ import { runGit, runGitText, stagedChangesExist } from "./git.js";
6
+ import { requireMainlineWriteReady } from "./mainline.js";
7
+ import { projectDocTemplate, repoFactHints } from "./project-doc-templates.js";
8
+ import { entryKind, lsPath, readViewerSnapshot, requireNormalizedViewerPath, } from "./viewer.js";
9
+ const MAX_PROJECT_DOC_SYNC_BYTES = 512 * 1024;
10
+ function projectDocExists(workspaceRoot, path) {
11
+ return lsPath(workspaceRoot, path) !== null;
12
+ }
13
+ function requireProjectDocsSyncPath(options) {
14
+ const path = requireNormalizedViewerPath(options.path);
15
+ if (path === "") {
16
+ throw new WorkspaceOpsError("validation_failed", "Project docs sync path is required");
17
+ }
18
+ if (PROJECT_DOC_PATHS.includes(path)) {
19
+ if (!projectDocExists(options.workspaceRoot, path)) {
20
+ throw new WorkspaceOpsError("validation_failed", "Context sync must not create missing baseline context files");
21
+ }
22
+ return path;
23
+ }
24
+ const parentPath = posix.dirname(path);
25
+ const isReadmePath = path === "README.md" || path.endsWith("/README.md");
26
+ if (isReadmePath) {
27
+ if (parentPath !== ".") {
28
+ const parent = lsPath(options.workspaceRoot, parentPath);
29
+ if (parent === null || entryKind(parent) !== "directory") {
30
+ throw new WorkspaceOpsError("validation_failed", "Context sync README parent directory does not exist");
31
+ }
32
+ }
33
+ return path;
34
+ }
35
+ const isMarkdownPath = extname(path).toLowerCase() === ".md";
36
+ if (isMarkdownPath) {
37
+ const existing = lsPath(options.workspaceRoot, path);
38
+ if (existing === null || entryKind(existing) !== "file") {
39
+ throw new WorkspaceOpsError("validation_failed", "Context sync can only update existing Markdown documentation files");
40
+ }
41
+ return path;
42
+ }
43
+ throw new WorkspaceOpsError("forbidden", "Context sync may only update project docs, README.md files, or existing Markdown documentation files");
44
+ }
45
+ export function readProjectDocsInitializationStatus(options) {
46
+ readViewerSnapshot(options);
47
+ const existingPaths = [];
48
+ const missingPaths = [];
49
+ for (const path of PROJECT_DOC_PATHS) {
50
+ if (projectDocExists(options.workspaceRoot, path)) {
51
+ existingPaths.push(path);
52
+ }
53
+ else {
54
+ missingPaths.push(path);
55
+ }
56
+ }
57
+ return {
58
+ ready: missingPaths.length === 0,
59
+ missing_paths: missingPaths,
60
+ existing_paths: existingPaths,
61
+ };
62
+ }
63
+ export function initializeProjectDocs(options) {
64
+ requireMainlineWriteReady(options.workspaceRoot);
65
+ const createdPaths = [];
66
+ const repoHints = repoFactHints(options.workspaceRoot);
67
+ const providedDocuments = new Map();
68
+ for (const document of options.documents ?? []) {
69
+ let path;
70
+ try {
71
+ path = requireNormalizedViewerPath(document.path);
72
+ }
73
+ catch (error) {
74
+ if (error instanceof WorkspaceOpsError) {
75
+ continue;
76
+ }
77
+ throw error;
78
+ }
79
+ if (PROJECT_DOC_PATHS.includes(path) &&
80
+ document.content.trim().length > 0) {
81
+ providedDocuments.set(path, document.content);
82
+ }
83
+ }
84
+ for (const path of PROJECT_DOC_PATHS) {
85
+ if (projectDocExists(options.workspaceRoot, path)) {
86
+ continue;
87
+ }
88
+ const content = providedDocuments.get(path) ?? projectDocTemplate(path, options.projectName, options.context, repoHints);
89
+ writeFileSync(join(options.workspaceRoot, path), `${content.trimEnd()}\n`, "utf8");
90
+ createdPaths.push(path);
91
+ }
92
+ if (createdPaths.length === 0) {
93
+ return { created_paths: [] };
94
+ }
95
+ runGit(["add", "--", ...createdPaths], options.workspaceRoot);
96
+ if (stagedChangesExist(options.workspaceRoot)) {
97
+ runGit(["commit", "-m", "Initialize project docs"], options.workspaceRoot);
98
+ }
99
+ return {
100
+ created_paths: createdPaths,
101
+ commit_oid: runGitText(["rev-parse", "--verify", "HEAD"], options.workspaceRoot),
102
+ };
103
+ }
104
+ export function syncProjectDocs(options) {
105
+ requireMainlineWriteReady(options.workspaceRoot);
106
+ const normalizedUpdates = options.updates.map((update) => {
107
+ const normalizedPath = requireProjectDocsSyncPath({
108
+ workspaceRoot: options.workspaceRoot,
109
+ path: update.path,
110
+ });
111
+ const content = update.content.trimEnd();
112
+ if (content.length === 0) {
113
+ throw new WorkspaceOpsError("validation_failed", "Project docs sync content cannot be empty");
114
+ }
115
+ if (Buffer.byteLength(content, "utf8") > MAX_PROJECT_DOC_SYNC_BYTES) {
116
+ throw new WorkspaceOpsError("validation_failed", `Project docs sync content cannot exceed ${MAX_PROJECT_DOC_SYNC_BYTES} bytes`);
117
+ }
118
+ return {
119
+ path: normalizedPath,
120
+ content: `${content}\n`,
121
+ };
122
+ });
123
+ const seenPaths = new Set();
124
+ for (const update of normalizedUpdates) {
125
+ if (seenPaths.has(update.path)) {
126
+ throw new WorkspaceOpsError("validation_failed", "Context sync cannot update the same path more than once");
127
+ }
128
+ seenPaths.add(update.path);
129
+ }
130
+ const updatedPaths = [];
131
+ for (const update of normalizedUpdates) {
132
+ const filesystemPath = join(options.workspaceRoot, ...update.path.split("/"));
133
+ const existing = existsSync(filesystemPath) ? readFileSync(filesystemPath, "utf8") : "";
134
+ if (existing === update.content) {
135
+ continue;
136
+ }
137
+ const directory = posix.dirname(update.path);
138
+ if (directory !== ".") {
139
+ mkdirSync(join(options.workspaceRoot, ...directory.split("/")), { recursive: true });
140
+ }
141
+ writeFileSync(filesystemPath, update.content, "utf8");
142
+ updatedPaths.push(update.path);
143
+ }
144
+ if (updatedPaths.length === 0) {
145
+ return { updated_paths: [] };
146
+ }
147
+ runGit(["add", "--", ...updatedPaths], options.workspaceRoot);
148
+ if (stagedChangesExist(options.workspaceRoot)) {
149
+ runGit(["commit", "-m", "Sync project docs"], options.workspaceRoot);
150
+ }
151
+ return {
152
+ updated_paths: updatedPaths,
153
+ commit_oid: runGitText(["rev-parse", "--verify", "HEAD"], options.workspaceRoot),
154
+ };
155
+ }
156
+ //# sourceMappingURL=project-docs.js.map
@@ -0,0 +1,3 @@
1
+ import type { UploadReferenceFileOptions, UploadReferenceFileResult } from "./types.js";
2
+ export declare function uploadReferenceFile(options: UploadReferenceFileOptions): UploadReferenceFileResult;
3
+ //# sourceMappingURL=reference-files.d.ts.map
@@ -0,0 +1,137 @@
1
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
2
+ import { extname, join, posix } from "node:path";
3
+ import { classifyViewerPath } from "@tutti/shared/utils";
4
+ import { MAX_REFERENCE_UPLOAD_BYTES, REFERENCE_DIRECTORY_PATH, REFERENCE_INDEX_PATH, } from "./constants.js";
5
+ import { WorkspaceOpsError } from "./errors.js";
6
+ import { runGit, runGitText, stagedChangesExist } from "./git.js";
7
+ import { requireMainlineWriteReady } from "./mainline.js";
8
+ import { classifyReferenceUpload } from "./reference-metadata.js";
9
+ import { readViewerFile } from "./viewer.js";
10
+ function commandSuffix(commandId) {
11
+ return commandId.slice(-8).toLowerCase();
12
+ }
13
+ function sanitizeReferenceFileName(fileName, commandId) {
14
+ const raw = fileName.trim();
15
+ if (raw.length === 0) {
16
+ throw new WorkspaceOpsError("validation_failed", "Reference file name cannot be empty");
17
+ }
18
+ if (raw.includes("/") || raw.includes("\\")) {
19
+ throw new WorkspaceOpsError("validation_failed", "Reference file name must not include directories");
20
+ }
21
+ const rawClassification = classifyViewerPath(raw);
22
+ if (rawClassification.kind === "rejected") {
23
+ throw new WorkspaceOpsError("validation_failed", `Reference file name is rejected: ${rawClassification.reason_code}`, { reason_code: rawClassification.reason_code });
24
+ }
25
+ const extension = extname(raw)
26
+ .toLowerCase()
27
+ .replace(/[^.a-z0-9]/gu, "");
28
+ const rawStem = extension.length > 0 ? raw.slice(0, -extension.length) : raw;
29
+ const stem = rawStem
30
+ .replace(/[^A-Za-z0-9._-]+/gu, "-")
31
+ .replace(/-{2,}/gu, "-")
32
+ .replace(/^[.-]+/u, "")
33
+ .replace(/[.-]+$/u, "");
34
+ if (stem.length === 0) {
35
+ throw new WorkspaceOpsError("validation_failed", "Reference file name cannot be normalized");
36
+ }
37
+ const safeName = `${stem}-${commandSuffix(commandId)}${extension}`;
38
+ const path = `${REFERENCE_DIRECTORY_PATH}/${safeName}`;
39
+ const classification = classifyViewerPath(path);
40
+ if (classification.kind === "rejected") {
41
+ throw new WorkspaceOpsError("validation_failed", `Reference file path is rejected: ${classification.reason_code}`, { reason_code: classification.reason_code });
42
+ }
43
+ return safeName;
44
+ }
45
+ function appendReferenceIndexEntry(options) {
46
+ const indexPath = join(options.workspaceRoot, "docs", "reference", "README.md");
47
+ const existing = existsSync(indexPath) ? readFileSync(indexPath, "utf8") : "";
48
+ let content = existing.trim().length === 0
49
+ ? [
50
+ "# Reference Files",
51
+ "",
52
+ "Human-uploaded project reference files.",
53
+ "",
54
+ "## Files",
55
+ "",
56
+ "## Images",
57
+ "",
58
+ ].join("\n")
59
+ : existing.replace(/\s*$/u, "\n");
60
+ if (!content.includes("\n## Files\n")) {
61
+ content = `${content.trimEnd()}\n\n## Files\n\n`;
62
+ }
63
+ if (!content.includes("\n## Images\n")) {
64
+ content = `${content.trimEnd()}\n\n## Images\n\n`;
65
+ }
66
+ const relativePath = posix.relative(REFERENCE_DIRECTORY_PATH, options.repoPath);
67
+ const link = `./${relativePath}`;
68
+ const note = options.note?.trim();
69
+ const description = note === undefined || note.length === 0 ? "" : ` - ${note}`;
70
+ const line = `- [${options.fileName}](${link})${description}\n`;
71
+ if (content.includes(`](${link})`)) {
72
+ writeFileSync(indexPath, content, "utf8");
73
+ return;
74
+ }
75
+ const section = options.category === "image" ? "Images" : "Files";
76
+ const sectionStart = content.indexOf(`\n## ${section}\n`);
77
+ if (sectionStart === -1) {
78
+ writeFileSync(indexPath, `${content.trimEnd()}\n\n## ${section}\n\n${line}`, "utf8");
79
+ return;
80
+ }
81
+ const insertAfter = sectionStart + `\n## ${section}\n`.length;
82
+ const nextSection = content.indexOf("\n## ", insertAfter);
83
+ const insertAt = nextSection === -1 ? content.length : nextSection;
84
+ const before = content.slice(0, insertAt).replace(/\s*$/u, "\n\n");
85
+ const after = content.slice(insertAt).replace(/^\n*/u, "");
86
+ const nextContent = after.length === 0 ? `${before}${line}` : `${before}${line}\n${after}`;
87
+ writeFileSync(indexPath, nextContent, "utf8");
88
+ }
89
+ export function uploadReferenceFile(options) {
90
+ if (options.content.byteLength > MAX_REFERENCE_UPLOAD_BYTES) {
91
+ throw new WorkspaceOpsError("validation_failed", `Reference file content cannot exceed ${MAX_REFERENCE_UPLOAD_BYTES} bytes`);
92
+ }
93
+ requireMainlineWriteReady(options.workspaceRoot);
94
+ const safeName = sanitizeReferenceFileName(options.fileName, options.commandId);
95
+ const classification = classifyReferenceUpload({
96
+ fileName: options.fileName,
97
+ content: options.content,
98
+ ...(options.mediaType === undefined ? {} : { mediaType: options.mediaType }),
99
+ });
100
+ const referenceDirectory = join(options.workspaceRoot, ...classification.directoryPath.split("/"));
101
+ const repoPath = `${classification.directoryPath}/${safeName}`;
102
+ const filesystemPath = join(referenceDirectory, safeName);
103
+ mkdirSync(referenceDirectory, { recursive: true });
104
+ if (existsSync(filesystemPath)) {
105
+ const existing = readFileSync(filesystemPath);
106
+ if (!existing.equals(options.content)) {
107
+ throw new WorkspaceOpsError("conflict", "Reference file path already exists with different content");
108
+ }
109
+ }
110
+ else {
111
+ writeFileSync(filesystemPath, options.content);
112
+ }
113
+ appendReferenceIndexEntry({
114
+ workspaceRoot: options.workspaceRoot,
115
+ fileName: safeName,
116
+ repoPath,
117
+ category: classification.category,
118
+ ...(options.note === undefined ? {} : { note: options.note }),
119
+ });
120
+ runGit(["add", "--", REFERENCE_INDEX_PATH, repoPath], options.workspaceRoot);
121
+ if (stagedChangesExist(options.workspaceRoot)) {
122
+ runGit(["commit", "-m", `Add reference file: ${safeName}`], options.workspaceRoot);
123
+ }
124
+ const commitOid = runGitText(["rev-parse", "--verify", "HEAD"], options.workspaceRoot);
125
+ const file = readViewerFile({
126
+ workspaceRoot: options.workspaceRoot,
127
+ path: repoPath,
128
+ ...(options.now === undefined ? {} : { now: options.now }),
129
+ });
130
+ return {
131
+ file: file.file,
132
+ category: classification.category,
133
+ index_path: REFERENCE_INDEX_PATH,
134
+ commit_oid: commitOid,
135
+ };
136
+ }
137
+ //# sourceMappingURL=reference-files.js.map
@@ -0,0 +1,13 @@
1
+ import type { ReferenceFileCategory, ViewerAssetResult } from "./types.js";
2
+ export declare function detectReferenceImageMediaType(content: Buffer): ViewerAssetResult["media_type"] | undefined;
3
+ export declare function classifyReferenceUpload(options: {
4
+ fileName: string;
5
+ content: Buffer;
6
+ mediaType?: string;
7
+ }): {
8
+ category: ReferenceFileCategory;
9
+ directoryPath: string;
10
+ };
11
+ export declare function referenceFileCategoryForPath(path: string): ReferenceFileCategory | undefined;
12
+ export declare function referenceMediaTypeForPath(path: string): string | undefined;
13
+ //# sourceMappingURL=reference-metadata.d.ts.map