@playcraft/common 0.1.33 → 0.1.35-prod

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 (341) hide show
  1. package/README.md +1 -1
  2. package/dist/agent/session-title.d.ts +1 -1
  3. package/dist/agent/session-title.js +1 -1
  4. package/dist/agent-messages/db-message-converter.d.ts +0 -10
  5. package/dist/agent-messages/db-message-converter.d.ts.map +1 -1
  6. package/dist/agent-messages/db-message-converter.js +0 -13
  7. package/dist/agent-messages/db-message-converter.js.map +1 -1
  8. package/dist/agent-tools/index.d.ts +0 -5
  9. package/dist/agent-tools/index.d.ts.map +1 -1
  10. package/dist/agent-tools/index.js +0 -5
  11. package/dist/agent-tools/index.js.map +1 -1
  12. package/dist/agent-tools/types.d.ts +16 -9
  13. package/dist/agent-tools/types.d.ts.map +1 -1
  14. package/dist/agent-tools/types.js.map +1 -1
  15. package/dist/database/postgres-adapter.js +1 -1
  16. package/dist/database/postgres-adapter.js.map +1 -1
  17. package/dist/database/schema.d.ts +1 -1
  18. package/dist/database/schema.js +1 -1
  19. package/dist/prefab/image-background.d.ts +10 -0
  20. package/dist/prefab/image-background.d.ts.map +1 -0
  21. package/dist/prefab/image-background.js +19 -0
  22. package/dist/prefab/image-background.js.map +1 -0
  23. package/dist/prefab/image-generation-constraints.d.ts +72 -0
  24. package/dist/prefab/image-generation-constraints.d.ts.map +1 -0
  25. package/dist/prefab/image-generation-constraints.js +112 -0
  26. package/dist/prefab/image-generation-constraints.js.map +1 -0
  27. package/dist/prefab/index.d.ts +2 -0
  28. package/dist/prefab/index.d.ts.map +1 -1
  29. package/dist/prefab/index.js +2 -0
  30. package/dist/prefab/index.js.map +1 -1
  31. package/dist/recommend/types.d.ts +1 -1
  32. package/dist/recommend/types.js +1 -1
  33. package/dist/storage/cos.d.ts +0 -11
  34. package/dist/storage/cos.d.ts.map +1 -1
  35. package/dist/storage/cos.js +0 -29
  36. package/dist/storage/cos.js.map +1 -1
  37. package/package.json +1 -29
  38. package/dist/agent-tools/operation-protocol.d.ts +0 -10
  39. package/dist/agent-tools/operation-protocol.d.ts.map +0 -1
  40. package/dist/agent-tools/operation-protocol.js +0 -13
  41. package/dist/agent-tools/operation-protocol.js.map +0 -1
  42. package/dist/agent-tools/replica-recording.d.ts +0 -283
  43. package/dist/agent-tools/replica-recording.d.ts.map +0 -1
  44. package/dist/agent-tools/replica-recording.js +0 -109
  45. package/dist/agent-tools/replica-recording.js.map +0 -1
  46. package/dist/agent-tools/replica-validation.d.ts +0 -972
  47. package/dist/agent-tools/replica-validation.d.ts.map +0 -1
  48. package/dist/agent-tools/replica-validation.js +0 -254
  49. package/dist/agent-tools/replica-validation.js.map +0 -1
  50. package/dist/agent-tools/video-model-proxy.d.ts +0 -113
  51. package/dist/agent-tools/video-model-proxy.d.ts.map +0 -1
  52. package/dist/agent-tools/video-model-proxy.js +0 -49
  53. package/dist/agent-tools/video-model-proxy.js.map +0 -1
  54. package/dist/agent-tools/video-replication.d.ts +0 -421
  55. package/dist/agent-tools/video-replication.d.ts.map +0 -1
  56. package/dist/agent-tools/video-replication.js +0 -95
  57. package/dist/agent-tools/video-replication.js.map +0 -1
  58. package/dist/cloud-workspace/runtime/agent-background-processes.d.ts +0 -68
  59. package/dist/cloud-workspace/runtime/agent-background-processes.d.ts.map +0 -1
  60. package/dist/cloud-workspace/runtime/agent-background-processes.js +0 -60
  61. package/dist/cloud-workspace/runtime/agent-background-processes.js.map +0 -1
  62. package/dist/cloud-workspace/runtime/agent-chat-flush.d.ts +0 -55
  63. package/dist/cloud-workspace/runtime/agent-chat-flush.d.ts.map +0 -1
  64. package/dist/cloud-workspace/runtime/agent-chat-flush.js +0 -51
  65. package/dist/cloud-workspace/runtime/agent-chat-flush.js.map +0 -1
  66. package/dist/cloud-workspace/runtime/agent-command.d.ts +0 -152
  67. package/dist/cloud-workspace/runtime/agent-command.d.ts.map +0 -1
  68. package/dist/cloud-workspace/runtime/agent-command.js +0 -90
  69. package/dist/cloud-workspace/runtime/agent-command.js.map +0 -1
  70. package/dist/cloud-workspace/runtime/agent-competitor-report.d.ts +0 -143
  71. package/dist/cloud-workspace/runtime/agent-competitor-report.d.ts.map +0 -1
  72. package/dist/cloud-workspace/runtime/agent-competitor-report.js +0 -115
  73. package/dist/cloud-workspace/runtime/agent-competitor-report.js.map +0 -1
  74. package/dist/cloud-workspace/runtime/agent-connection.d.ts +0 -76
  75. package/dist/cloud-workspace/runtime/agent-connection.d.ts.map +0 -1
  76. package/dist/cloud-workspace/runtime/agent-connection.js +0 -59
  77. package/dist/cloud-workspace/runtime/agent-connection.js.map +0 -1
  78. package/dist/cloud-workspace/runtime/agent-issue-artifacts.d.ts +0 -90
  79. package/dist/cloud-workspace/runtime/agent-issue-artifacts.d.ts.map +0 -1
  80. package/dist/cloud-workspace/runtime/agent-issue-artifacts.js +0 -60
  81. package/dist/cloud-workspace/runtime/agent-issue-artifacts.js.map +0 -1
  82. package/dist/cloud-workspace/runtime/agent-lifecycle.d.ts +0 -87
  83. package/dist/cloud-workspace/runtime/agent-lifecycle.d.ts.map +0 -1
  84. package/dist/cloud-workspace/runtime/agent-lifecycle.js +0 -75
  85. package/dist/cloud-workspace/runtime/agent-lifecycle.js.map +0 -1
  86. package/dist/cloud-workspace/runtime/agent-mutation.d.ts +0 -197
  87. package/dist/cloud-workspace/runtime/agent-mutation.d.ts.map +0 -1
  88. package/dist/cloud-workspace/runtime/agent-mutation.js +0 -114
  89. package/dist/cloud-workspace/runtime/agent-mutation.js.map +0 -1
  90. package/dist/cloud-workspace/runtime/agent-opencode-gateway.d.ts +0 -210
  91. package/dist/cloud-workspace/runtime/agent-opencode-gateway.d.ts.map +0 -1
  92. package/dist/cloud-workspace/runtime/agent-opencode-gateway.js +0 -180
  93. package/dist/cloud-workspace/runtime/agent-opencode-gateway.js.map +0 -1
  94. package/dist/cloud-workspace/runtime/agent-opencode.d.ts +0 -406
  95. package/dist/cloud-workspace/runtime/agent-opencode.d.ts.map +0 -1
  96. package/dist/cloud-workspace/runtime/agent-opencode.js +0 -237
  97. package/dist/cloud-workspace/runtime/agent-opencode.js.map +0 -1
  98. package/dist/cloud-workspace/runtime/agent-promotion.d.ts +0 -21
  99. package/dist/cloud-workspace/runtime/agent-promotion.d.ts.map +0 -1
  100. package/dist/cloud-workspace/runtime/agent-promotion.js +0 -23
  101. package/dist/cloud-workspace/runtime/agent-promotion.js.map +0 -1
  102. package/dist/cloud-workspace/runtime/agent-read.d.ts +0 -343
  103. package/dist/cloud-workspace/runtime/agent-read.d.ts.map +0 -1
  104. package/dist/cloud-workspace/runtime/agent-read.js +0 -159
  105. package/dist/cloud-workspace/runtime/agent-read.js.map +0 -1
  106. package/dist/cloud-workspace/runtime/agent-source-project.d.ts +0 -126
  107. package/dist/cloud-workspace/runtime/agent-source-project.d.ts.map +0 -1
  108. package/dist/cloud-workspace/runtime/agent-source-project.js +0 -95
  109. package/dist/cloud-workspace/runtime/agent-source-project.js.map +0 -1
  110. package/dist/cloud-workspace/runtime/agent-tool-claim.d.ts +0 -18
  111. package/dist/cloud-workspace/runtime/agent-tool-claim.d.ts.map +0 -1
  112. package/dist/cloud-workspace/runtime/agent-tool-claim.js +0 -16
  113. package/dist/cloud-workspace/runtime/agent-tool-claim.js.map +0 -1
  114. package/dist/cloud-workspace/runtime/agent-variant-chat.d.ts +0 -9
  115. package/dist/cloud-workspace/runtime/agent-variant-chat.d.ts.map +0 -1
  116. package/dist/cloud-workspace/runtime/agent-variant-chat.js +0 -23
  117. package/dist/cloud-workspace/runtime/agent-variant-chat.js.map +0 -1
  118. package/dist/cloud-workspace/runtime/agent-variant-git.d.ts +0 -75
  119. package/dist/cloud-workspace/runtime/agent-variant-git.d.ts.map +0 -1
  120. package/dist/cloud-workspace/runtime/agent-variant-git.js +0 -62
  121. package/dist/cloud-workspace/runtime/agent-variant-git.js.map +0 -1
  122. package/dist/cloud-workspace/runtime/artifacts.d.ts +0 -239
  123. package/dist/cloud-workspace/runtime/artifacts.d.ts.map +0 -1
  124. package/dist/cloud-workspace/runtime/artifacts.js +0 -105
  125. package/dist/cloud-workspace/runtime/artifacts.js.map +0 -1
  126. package/dist/cloud-workspace/runtime/attachment-base64.d.ts +0 -3
  127. package/dist/cloud-workspace/runtime/attachment-base64.d.ts.map +0 -1
  128. package/dist/cloud-workspace/runtime/attachment-base64.js +0 -8
  129. package/dist/cloud-workspace/runtime/attachment-base64.js.map +0 -1
  130. package/dist/cloud-workspace/runtime/attachments.d.ts +0 -33
  131. package/dist/cloud-workspace/runtime/attachments.d.ts.map +0 -1
  132. package/dist/cloud-workspace/runtime/attachments.js +0 -35
  133. package/dist/cloud-workspace/runtime/attachments.js.map +0 -1
  134. package/dist/cloud-workspace/runtime/batch-generation.d.ts +0 -230
  135. package/dist/cloud-workspace/runtime/batch-generation.d.ts.map +0 -1
  136. package/dist/cloud-workspace/runtime/batch-generation.js +0 -245
  137. package/dist/cloud-workspace/runtime/batch-generation.js.map +0 -1
  138. package/dist/cloud-workspace/runtime/batch-production.d.ts +0 -487
  139. package/dist/cloud-workspace/runtime/batch-production.d.ts.map +0 -1
  140. package/dist/cloud-workspace/runtime/batch-production.js +0 -73
  141. package/dist/cloud-workspace/runtime/batch-production.js.map +0 -1
  142. package/dist/cloud-workspace/runtime/capabilities.d.ts +0 -40
  143. package/dist/cloud-workspace/runtime/capabilities.d.ts.map +0 -1
  144. package/dist/cloud-workspace/runtime/capabilities.js +0 -53
  145. package/dist/cloud-workspace/runtime/capabilities.js.map +0 -1
  146. package/dist/cloud-workspace/runtime/chat-realtime-admission.d.ts +0 -53
  147. package/dist/cloud-workspace/runtime/chat-realtime-admission.d.ts.map +0 -1
  148. package/dist/cloud-workspace/runtime/chat-realtime-admission.js +0 -95
  149. package/dist/cloud-workspace/runtime/chat-realtime-admission.js.map +0 -1
  150. package/dist/cloud-workspace/runtime/chat-realtime.d.ts +0 -197
  151. package/dist/cloud-workspace/runtime/chat-realtime.d.ts.map +0 -1
  152. package/dist/cloud-workspace/runtime/chat-realtime.js +0 -299
  153. package/dist/cloud-workspace/runtime/chat-realtime.js.map +0 -1
  154. package/dist/cloud-workspace/runtime/checkpoints.d.ts +0 -35
  155. package/dist/cloud-workspace/runtime/checkpoints.d.ts.map +0 -1
  156. package/dist/cloud-workspace/runtime/checkpoints.js +0 -35
  157. package/dist/cloud-workspace/runtime/checkpoints.js.map +0 -1
  158. package/dist/cloud-workspace/runtime/composer-context.d.ts +0 -70
  159. package/dist/cloud-workspace/runtime/composer-context.d.ts.map +0 -1
  160. package/dist/cloud-workspace/runtime/composer-context.js +0 -46
  161. package/dist/cloud-workspace/runtime/composer-context.js.map +0 -1
  162. package/dist/cloud-workspace/runtime/config.d.ts +0 -47
  163. package/dist/cloud-workspace/runtime/config.d.ts.map +0 -1
  164. package/dist/cloud-workspace/runtime/config.js +0 -125
  165. package/dist/cloud-workspace/runtime/config.js.map +0 -1
  166. package/dist/cloud-workspace/runtime/connectivity.d.ts +0 -205
  167. package/dist/cloud-workspace/runtime/connectivity.d.ts.map +0 -1
  168. package/dist/cloud-workspace/runtime/connectivity.js +0 -46
  169. package/dist/cloud-workspace/runtime/connectivity.js.map +0 -1
  170. package/dist/cloud-workspace/runtime/directory-attachments.d.ts +0 -28
  171. package/dist/cloud-workspace/runtime/directory-attachments.d.ts.map +0 -1
  172. package/dist/cloud-workspace/runtime/directory-attachments.js +0 -30
  173. package/dist/cloud-workspace/runtime/directory-attachments.js.map +0 -1
  174. package/dist/cloud-workspace/runtime/errors.d.ts +0 -26
  175. package/dist/cloud-workspace/runtime/errors.d.ts.map +0 -1
  176. package/dist/cloud-workspace/runtime/errors.js +0 -40
  177. package/dist/cloud-workspace/runtime/errors.js.map +0 -1
  178. package/dist/cloud-workspace/runtime/events.d.ts +0 -107
  179. package/dist/cloud-workspace/runtime/events.d.ts.map +0 -1
  180. package/dist/cloud-workspace/runtime/events.js +0 -70
  181. package/dist/cloud-workspace/runtime/events.js.map +0 -1
  182. package/dist/cloud-workspace/runtime/execution-grant.d.ts +0 -36
  183. package/dist/cloud-workspace/runtime/execution-grant.d.ts.map +0 -1
  184. package/dist/cloud-workspace/runtime/execution-grant.js +0 -102
  185. package/dist/cloud-workspace/runtime/execution-grant.js.map +0 -1
  186. package/dist/cloud-workspace/runtime/files-search.d.ts +0 -17
  187. package/dist/cloud-workspace/runtime/files-search.d.ts.map +0 -1
  188. package/dist/cloud-workspace/runtime/files-search.js +0 -14
  189. package/dist/cloud-workspace/runtime/files-search.js.map +0 -1
  190. package/dist/cloud-workspace/runtime/files.d.ts +0 -74
  191. package/dist/cloud-workspace/runtime/files.d.ts.map +0 -1
  192. package/dist/cloud-workspace/runtime/files.js +0 -93
  193. package/dist/cloud-workspace/runtime/files.js.map +0 -1
  194. package/dist/cloud-workspace/runtime/generations.d.ts +0 -18
  195. package/dist/cloud-workspace/runtime/generations.d.ts.map +0 -1
  196. package/dist/cloud-workspace/runtime/generations.js +0 -39
  197. package/dist/cloud-workspace/runtime/generations.js.map +0 -1
  198. package/dist/cloud-workspace/runtime/git-auth-mode.d.ts +0 -35
  199. package/dist/cloud-workspace/runtime/git-auth-mode.d.ts.map +0 -1
  200. package/dist/cloud-workspace/runtime/git-auth-mode.js +0 -73
  201. package/dist/cloud-workspace/runtime/git-auth-mode.js.map +0 -1
  202. package/dist/cloud-workspace/runtime/git.d.ts +0 -147
  203. package/dist/cloud-workspace/runtime/git.d.ts.map +0 -1
  204. package/dist/cloud-workspace/runtime/git.js +0 -128
  205. package/dist/cloud-workspace/runtime/git.js.map +0 -1
  206. package/dist/cloud-workspace/runtime/handshake.d.ts +0 -47
  207. package/dist/cloud-workspace/runtime/handshake.d.ts.map +0 -1
  208. package/dist/cloud-workspace/runtime/handshake.js +0 -31
  209. package/dist/cloud-workspace/runtime/handshake.js.map +0 -1
  210. package/dist/cloud-workspace/runtime/index.d.ts +0 -55
  211. package/dist/cloud-workspace/runtime/index.d.ts.map +0 -1
  212. package/dist/cloud-workspace/runtime/index.js +0 -55
  213. package/dist/cloud-workspace/runtime/index.js.map +0 -1
  214. package/dist/cloud-workspace/runtime/library-attachments.d.ts +0 -120
  215. package/dist/cloud-workspace/runtime/library-attachments.d.ts.map +0 -1
  216. package/dist/cloud-workspace/runtime/library-attachments.js +0 -75
  217. package/dist/cloud-workspace/runtime/library-attachments.js.map +0 -1
  218. package/dist/cloud-workspace/runtime/mcp.d.ts +0 -82
  219. package/dist/cloud-workspace/runtime/mcp.d.ts.map +0 -1
  220. package/dist/cloud-workspace/runtime/mcp.js +0 -48
  221. package/dist/cloud-workspace/runtime/mcp.js.map +0 -1
  222. package/dist/cloud-workspace/runtime/native-history.d.ts +0 -66
  223. package/dist/cloud-workspace/runtime/native-history.d.ts.map +0 -1
  224. package/dist/cloud-workspace/runtime/native-history.js +0 -132
  225. package/dist/cloud-workspace/runtime/native-history.js.map +0 -1
  226. package/dist/cloud-workspace/runtime/operations.d.ts +0 -260
  227. package/dist/cloud-workspace/runtime/operations.d.ts.map +0 -1
  228. package/dist/cloud-workspace/runtime/operations.js +0 -215
  229. package/dist/cloud-workspace/runtime/operations.js.map +0 -1
  230. package/dist/cloud-workspace/runtime/parameters.d.ts +0 -38
  231. package/dist/cloud-workspace/runtime/parameters.d.ts.map +0 -1
  232. package/dist/cloud-workspace/runtime/parameters.js +0 -75
  233. package/dist/cloud-workspace/runtime/parameters.js.map +0 -1
  234. package/dist/cloud-workspace/runtime/permissions.d.ts +0 -24
  235. package/dist/cloud-workspace/runtime/permissions.d.ts.map +0 -1
  236. package/dist/cloud-workspace/runtime/permissions.js +0 -19
  237. package/dist/cloud-workspace/runtime/permissions.js.map +0 -1
  238. package/dist/cloud-workspace/runtime/platform-endpoints.d.ts +0 -25
  239. package/dist/cloud-workspace/runtime/platform-endpoints.d.ts.map +0 -1
  240. package/dist/cloud-workspace/runtime/platform-endpoints.js +0 -37
  241. package/dist/cloud-workspace/runtime/platform-endpoints.js.map +0 -1
  242. package/dist/cloud-workspace/runtime/previews.d.ts +0 -59
  243. package/dist/cloud-workspace/runtime/previews.d.ts.map +0 -1
  244. package/dist/cloud-workspace/runtime/previews.js +0 -63
  245. package/dist/cloud-workspace/runtime/previews.js.map +0 -1
  246. package/dist/cloud-workspace/runtime/project-native-skills.d.ts +0 -40
  247. package/dist/cloud-workspace/runtime/project-native-skills.d.ts.map +0 -1
  248. package/dist/cloud-workspace/runtime/project-native-skills.js +0 -45
  249. package/dist/cloud-workspace/runtime/project-native-skills.js.map +0 -1
  250. package/dist/cloud-workspace/runtime/protocol.d.ts +0 -23
  251. package/dist/cloud-workspace/runtime/protocol.d.ts.map +0 -1
  252. package/dist/cloud-workspace/runtime/protocol.js +0 -30
  253. package/dist/cloud-workspace/runtime/protocol.js.map +0 -1
  254. package/dist/cloud-workspace/runtime/resource-grant.d.ts +0 -62
  255. package/dist/cloud-workspace/runtime/resource-grant.d.ts.map +0 -1
  256. package/dist/cloud-workspace/runtime/resource-grant.js +0 -87
  257. package/dist/cloud-workspace/runtime/resource-grant.js.map +0 -1
  258. package/dist/cloud-workspace/runtime/skills.d.ts +0 -39
  259. package/dist/cloud-workspace/runtime/skills.d.ts.map +0 -1
  260. package/dist/cloud-workspace/runtime/skills.js +0 -33
  261. package/dist/cloud-workspace/runtime/skills.js.map +0 -1
  262. package/dist/cloud-workspace/runtime/terminal-session.d.ts +0 -78
  263. package/dist/cloud-workspace/runtime/terminal-session.d.ts.map +0 -1
  264. package/dist/cloud-workspace/runtime/terminal-session.js +0 -178
  265. package/dist/cloud-workspace/runtime/terminal-session.js.map +0 -1
  266. package/dist/cloud-workspace/runtime/terminals.d.ts +0 -90
  267. package/dist/cloud-workspace/runtime/terminals.d.ts.map +0 -1
  268. package/dist/cloud-workspace/runtime/terminals.js +0 -111
  269. package/dist/cloud-workspace/runtime/terminals.js.map +0 -1
  270. package/dist/cloud-workspace/runtime/turn-control.d.ts +0 -27
  271. package/dist/cloud-workspace/runtime/turn-control.d.ts.map +0 -1
  272. package/dist/cloud-workspace/runtime/turn-control.js +0 -18
  273. package/dist/cloud-workspace/runtime/turn-control.js.map +0 -1
  274. package/dist/cloud-workspace/runtime/variant-workspace.d.ts +0 -221
  275. package/dist/cloud-workspace/runtime/variant-workspace.d.ts.map +0 -1
  276. package/dist/cloud-workspace/runtime/variant-workspace.js +0 -75
  277. package/dist/cloud-workspace/runtime/variant-workspace.js.map +0 -1
  278. package/dist/cloud-workspace/runtime/workspace-binding.d.ts +0 -208
  279. package/dist/cloud-workspace/runtime/workspace-binding.d.ts.map +0 -1
  280. package/dist/cloud-workspace/runtime/workspace-binding.js +0 -176
  281. package/dist/cloud-workspace/runtime/workspace-binding.js.map +0 -1
  282. package/dist/cloud-workspace/runtime/workspace-directories.d.ts +0 -44
  283. package/dist/cloud-workspace/runtime/workspace-directories.d.ts.map +0 -1
  284. package/dist/cloud-workspace/runtime/workspace-directories.js +0 -34
  285. package/dist/cloud-workspace/runtime/workspace-directories.js.map +0 -1
  286. package/dist/database/operators.d.ts +0 -2
  287. package/dist/database/operators.d.ts.map +0 -1
  288. package/dist/database/operators.js +0 -2
  289. package/dist/database/operators.js.map +0 -1
  290. package/dist/model-proxy/index.d.ts +0 -26
  291. package/dist/model-proxy/index.d.ts.map +0 -1
  292. package/dist/model-proxy/index.js +0 -81
  293. package/dist/model-proxy/index.js.map +0 -1
  294. package/dist/project-skills/bundle-archive.d.ts +0 -21
  295. package/dist/project-skills/bundle-archive.d.ts.map +0 -1
  296. package/dist/project-skills/bundle-archive.js +0 -165
  297. package/dist/project-skills/bundle-archive.js.map +0 -1
  298. package/dist/project-skills/bundle-path.d.ts +0 -3
  299. package/dist/project-skills/bundle-path.d.ts.map +0 -1
  300. package/dist/project-skills/bundle-path.js +0 -17
  301. package/dist/project-skills/bundle-path.js.map +0 -1
  302. package/dist/project-skills/evidence.d.ts +0 -15
  303. package/dist/project-skills/evidence.d.ts.map +0 -1
  304. package/dist/project-skills/evidence.js +0 -33
  305. package/dist/project-skills/evidence.js.map +0 -1
  306. package/dist/project-skills/index.d.ts +0 -7
  307. package/dist/project-skills/index.d.ts.map +0 -1
  308. package/dist/project-skills/index.js +0 -7
  309. package/dist/project-skills/index.js.map +0 -1
  310. package/dist/project-skills/inventory.d.ts +0 -23
  311. package/dist/project-skills/inventory.d.ts.map +0 -1
  312. package/dist/project-skills/inventory.js +0 -150
  313. package/dist/project-skills/inventory.js.map +0 -1
  314. package/dist/project-skills/local-snapshot.d.ts +0 -12
  315. package/dist/project-skills/local-snapshot.d.ts.map +0 -1
  316. package/dist/project-skills/local-snapshot.js +0 -66
  317. package/dist/project-skills/local-snapshot.js.map +0 -1
  318. package/dist/project-skills/protocol.d.ts +0 -31
  319. package/dist/project-skills/protocol.d.ts.map +0 -1
  320. package/dist/project-skills/protocol.js +0 -197
  321. package/dist/project-skills/protocol.js.map +0 -1
  322. package/dist/project-skills/runtime-plugin.d.ts +0 -66
  323. package/dist/project-skills/runtime-plugin.d.ts.map +0 -1
  324. package/dist/project-skills/runtime-plugin.js +0 -102
  325. package/dist/project-skills/runtime-plugin.js.map +0 -1
  326. package/dist/project-skills/types.d.ts +0 -63
  327. package/dist/project-skills/types.d.ts.map +0 -1
  328. package/dist/project-skills/types.js +0 -13
  329. package/dist/project-skills/types.js.map +0 -1
  330. package/dist/remix/auto-name.d.ts +0 -24
  331. package/dist/remix/auto-name.d.ts.map +0 -1
  332. package/dist/remix/auto-name.js +0 -40
  333. package/dist/remix/auto-name.js.map +0 -1
  334. package/dist/remix/index.d.ts +0 -2
  335. package/dist/remix/index.d.ts.map +0 -1
  336. package/dist/remix/index.js +0 -2
  337. package/dist/remix/index.js.map +0 -1
  338. package/dist/skill-evaluation.d.ts +0 -152
  339. package/dist/skill-evaluation.d.ts.map +0 -1
  340. package/dist/skill-evaluation.js +0 -14
  341. package/dist/skill-evaluation.js.map +0 -1
@@ -1,17 +0,0 @@
1
- export function normalizeBundlePath(value) {
2
- if (!value || value.includes('\u0000') || value.includes('\\\\'))
3
- return null;
4
- const trimmed = value.trim();
5
- if (!trimmed || trimmed.startsWith('/') || trimmed.endsWith('/'))
6
- return null;
7
- const parts = trimmed.split('/');
8
- if (parts.some((part) => !part || part === '.' || part === '..'))
9
- return null;
10
- return parts.join('/');
11
- }
12
- export function isBundlePathWithin(prefix, path) {
13
- const normalizedPrefix = normalizeBundlePath(prefix);
14
- const normalizedPath = normalizeBundlePath(path);
15
- return Boolean(normalizedPrefix && normalizedPath && (normalizedPath === normalizedPrefix || normalizedPath.startsWith(`${normalizedPrefix}/`)));
16
- }
17
- //# sourceMappingURL=bundle-path.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"bundle-path.js","sourceRoot":"","sources":["../../src/project-skills/bundle-path.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,mBAAmB,CAAC,KAAa;IAC/C,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,IAAI,CAAC;IAC9E,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAC9E,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACjC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAC9E,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzB,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,MAAc,EAAE,IAAY;IAC7D,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;IACrD,MAAM,cAAc,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;IACjD,OAAO,OAAO,CAAC,gBAAgB,IAAI,cAAc,IAAI,CAAC,cAAc,KAAK,gBAAgB,IAAI,cAAc,CAAC,UAAU,CAAC,GAAG,gBAAgB,GAAG,CAAC,CAAC,CAAC,CAAC;AACnJ,CAAC"}
@@ -1,15 +0,0 @@
1
- export type ManagedSkillEvidence = {
2
- runtimeId: string;
3
- lockId: string;
4
- skillVersionId: string;
5
- artifactHash: string;
6
- skillRef: string;
7
- nativeSessionId: string;
8
- nativeCallId: string;
9
- bodyHash: string;
10
- occurredAt: Date;
11
- dedupeKey: string;
12
- };
13
- /** Shared by live native events and complete history reconciliation, never text search. */
14
- export declare function readManagedSkillEvidence(input: unknown): ManagedSkillEvidence | null;
15
- //# sourceMappingURL=evidence.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"evidence.d.ts","sourceRoot":"","sources":["../../src/project-skills/evidence.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,oBAAoB,GAAG;IACjC,SAAS,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAChF,QAAQ,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAClF,UAAU,EAAE,IAAI,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;CACrC,CAAC;AAKF,2FAA2F;AAC3F,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,OAAO,GAAG,oBAAoB,GAAG,IAAI,CAmBpF"}
@@ -1,33 +0,0 @@
1
- import { createHash } from 'node:crypto';
2
- import { projectSkillsDigest } from './protocol.js';
3
- function record(value) {
4
- return value !== null && typeof value === 'object' && !Array.isArray(value) ? value : null;
5
- }
6
- /** Shared by live native events and complete history reconciliation, never text search. */
7
- export function readManagedSkillEvidence(input) {
8
- const event = record(input);
9
- const properties = record(event?.properties);
10
- const part = record(event?.part) ?? record(properties?.part) ?? event;
11
- const state = record(part?.state);
12
- if (part?.type !== 'tool' || part.tool !== 'skill' || state?.status !== 'completed')
13
- return null;
14
- const metadata = record(record(state.metadata)?.playcraftSkill);
15
- if (metadata?.schemaVersion !== 1)
16
- return null;
17
- const keys = ['runtimeId', 'lockId', 'skillVersionId', 'artifactHash', 'skillRef', 'nativeSessionId', 'bodyHash'];
18
- if (keys.some((key) => typeof metadata[key] !== 'string' || !metadata[key].trim()))
19
- return null;
20
- if (typeof part.callID !== 'string' || !part.callID || part.sessionID !== metadata.nativeSessionId)
21
- return null;
22
- if (typeof state.output !== 'string' || createHash('sha256').update(state.output).digest('hex') !== metadata.bodyHash)
23
- return null;
24
- const ended = record(state.time)?.end;
25
- if (typeof ended !== 'number' || !Number.isFinite(ended) || ended <= 0)
26
- return null;
27
- const details = Object.fromEntries(keys.map((key) => [key, metadata[key]]));
28
- return {
29
- ...details, nativeCallId: part.callID, occurredAt: new Date(ended),
30
- dedupeKey: projectSkillsDigest([details.runtimeId, details.nativeSessionId, part.callID, 'loaded', details.skillVersionId]),
31
- };
32
- }
33
- //# sourceMappingURL=evidence.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"evidence.js","sourceRoot":"","sources":["../../src/project-skills/evidence.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAOpD,SAAS,MAAM,CAAC,KAAc;IAC5B,OAAO,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAgC,CAAC,CAAC,CAAC,IAAI,CAAC;AACxH,CAAC;AAED,2FAA2F;AAC3F,MAAM,UAAU,wBAAwB,CAAC,KAAc;IACrD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC5B,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IAC7C,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,KAAK,CAAC;IACtE,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAClC,IAAI,IAAI,EAAE,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,KAAK,EAAE,MAAM,KAAK,WAAW;QAAE,OAAO,IAAI,CAAC;IACjG,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,cAAc,CAAC,CAAC;IAChE,IAAI,QAAQ,EAAE,aAAa,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAC/C,MAAM,IAAI,GAAG,CAAC,WAAW,EAAE,QAAQ,EAAE,gBAAgB,EAAE,cAAc,EAAE,UAAU,EAAE,iBAAiB,EAAE,UAAU,CAAU,CAAC;IAC3H,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,QAAQ,CAAC,GAAG,CAAC,KAAK,QAAQ,IAAI,CAAE,QAAQ,CAAC,GAAG,CAAY,CAAC,IAAI,EAAE,CAAC;QAAE,OAAO,IAAI,CAAC;IAC5G,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,SAAS,KAAK,QAAQ,CAAC,eAAe;QAAE,OAAO,IAAI,CAAC;IAChH,IAAI,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,IAAI,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,QAAQ,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IACnI,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC;IACtC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACpF,MAAM,OAAO,GAAG,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAA4E,CAAC;IACvJ,OAAO;QACL,GAAG,OAAO,EAAE,YAAY,EAAE,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC;QAClE,SAAS,EAAE,mBAAmB,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,eAAe,EAAE,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;KAC5H,CAAC;AACJ,CAAC"}
@@ -1,7 +0,0 @@
1
- export * from './types.js';
2
- export * from './protocol.js';
3
- export * from './inventory.js';
4
- export * from './evidence.js';
5
- export * from './bundle-archive.js';
6
- export * from './local-snapshot.js';
7
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/project-skills/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC"}
@@ -1,7 +0,0 @@
1
- export * from './types.js';
2
- export * from './protocol.js';
3
- export * from './inventory.js';
4
- export * from './evidence.js';
5
- export * from './bundle-archive.js';
6
- export * from './local-snapshot.js';
7
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/project-skills/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC"}
@@ -1,23 +0,0 @@
1
- import { type ProjectSkillDeclaration, type ProjectSkillEntry, type ProjectSkillFile, type ProjectSkillIssue } from './types.js';
2
- export declare const PROJECT_SKILL_SOURCE_ROOTS: readonly [".agents/skills", ".claude/skills", ".opencode/skills", ".opencode/skill"];
3
- export type ProjectSkillSource = {
4
- entryKey: string;
5
- root: string;
6
- files: ProjectSkillFile[];
7
- sourceTreeHash: string;
8
- };
9
- export type ProjectSkillInventory = {
10
- declaration: ProjectSkillDeclaration | null;
11
- discovered: {
12
- root: string;
13
- entryKey: string;
14
- }[];
15
- sources: ProjectSkillSource[];
16
- issues: ProjectSkillIssue[];
17
- };
18
- /** Metadata is never read through repository-supplied links. */
19
- export declare function readProjectSkillsLockFile(projectRoot: string): Promise<string | null>;
20
- export declare function readProjectSkillSource(projectRoot: string, entry: ProjectSkillEntry): Promise<ProjectSkillSource>;
21
- /** Static inventory only: no source scripts, model calls, or repository mutations. */
22
- export declare function inspectProjectSkills(projectRoot: string): Promise<ProjectSkillInventory>;
23
- //# sourceMappingURL=inventory.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"inventory.d.ts","sourceRoot":"","sources":["../../src/project-skills/inventory.ts"],"names":[],"mappings":"AAIA,OAAO,EAEL,KAAK,uBAAuB,EAAE,KAAK,iBAAiB,EAAE,KAAK,gBAAgB,EAAE,KAAK,iBAAiB,EACpG,MAAM,YAAY,CAAC;AAEpB,eAAO,MAAM,0BAA0B,sFAAuF,CAAC;AAC/H,MAAM,MAAM,kBAAkB,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,CAAC;AACvH,MAAM,MAAM,qBAAqB,GAAG;IAClC,WAAW,EAAE,uBAAuB,GAAG,IAAI,CAAC;IAC5C,UAAU,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACjD,OAAO,EAAE,kBAAkB,EAAE,CAAC;IAC9B,MAAM,EAAE,iBAAiB,EAAE,CAAC;CAC7B,CAAC;AAKF,gEAAgE;AAChE,wBAAsB,yBAAyB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAW3F;AAmBD,wBAAsB,sBAAsB,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAgCvH;AAED,sFAAsF;AACtF,wBAAsB,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC,CA4C9F"}
@@ -1,150 +0,0 @@
1
- import { lstat, readdir, readFile, realpath } from 'node:fs/promises';
2
- import { join, resolve, sep } from 'node:path';
3
- import { createHash } from 'node:crypto';
4
- import { parseProjectSkillDeclaration, sourceTreeDigest } from './protocol.js';
5
- import { PROJECT_SKILLS_DECLARATION_PATH, PROJECT_SKILLS_LOCK_PATH, ProjectSkillsError, } from './types.js';
6
- export const PROJECT_SKILL_SOURCE_ROOTS = ['.agents/skills', '.claude/skills', '.opencode/skills', '.opencode/skill'];
7
- const MAX_FILES = 512;
8
- const MAX_FILE_BYTES = 16 * 1024 * 1024;
9
- const MAX_BUNDLE_BYTES = 64 * 1024 * 1024;
10
- /** Metadata is never read through repository-supplied links. */
11
- export async function readProjectSkillsLockFile(projectRoot) {
12
- const root = await realpath(resolve(projectRoot));
13
- try {
14
- const file = await safePath(root, PROJECT_SKILLS_LOCK_PATH);
15
- const stat = await lstat(file);
16
- if (!stat.isFile() || stat.size > 1024 * 1024)
17
- throw new ProjectSkillsError('source_limit', PROJECT_SKILLS_LOCK_PATH);
18
- return await readFile(file, 'utf8');
19
- }
20
- catch (error) {
21
- if (error.code === 'ENOENT')
22
- return null;
23
- throw error;
24
- }
25
- }
26
- async function exists(path) {
27
- try {
28
- await lstat(path);
29
- return true;
30
- }
31
- catch (error) {
32
- if (error.code === 'ENOENT')
33
- return false;
34
- throw error;
35
- }
36
- }
37
- /** Reject links at every segment, including roots. Snapshot bytes before registering. */
38
- async function safePath(root, relative) {
39
- let current = root;
40
- for (const part of relative.split('/')) {
41
- current = join(current, part);
42
- if ((await lstat(current)).isSymbolicLink())
43
- throw new ProjectSkillsError('source_symlink', relative);
44
- }
45
- const target = await realpath(current);
46
- if (!target.startsWith(root + sep))
47
- throw new ProjectSkillsError('source_escape', relative);
48
- return target;
49
- }
50
- export async function readProjectSkillSource(projectRoot, entry) {
51
- if (entry.source.kind !== 'repository')
52
- throw new ProjectSkillsError('not_repository_source', entry.entryKey);
53
- // Reuse the portable validation before ever interpreting an uploaded path.
54
- parseProjectSkillDeclaration({ schemaVersion: 1, entries: [entry] });
55
- const root = await realpath(resolve(projectRoot));
56
- const files = [];
57
- let bytes = 0;
58
- const walk = async (projectPath, bundlePath) => {
59
- const absolute = await safePath(root, projectPath);
60
- const info = await lstat(absolute);
61
- if (info.isDirectory()) {
62
- for (const name of (await readdir(absolute)).sort()) {
63
- if (name === '.git' || name === 'node_modules')
64
- throw new ProjectSkillsError('unsupported_source', `${projectPath}/${name}`);
65
- await walk(`${projectPath}/${name}`, bundlePath ? `${bundlePath}/${name}` : name);
66
- }
67
- return;
68
- }
69
- if (!info.isFile())
70
- throw new ProjectSkillsError('unsupported_source', projectPath);
71
- if (info.size > MAX_FILE_BYTES || files.length >= MAX_FILES)
72
- throw new ProjectSkillsError('source_limit', projectPath);
73
- const content = await readFile(absolute);
74
- bytes += content.byteLength;
75
- if (content.byteLength > MAX_FILE_BYTES || bytes > MAX_BUNDLE_BYTES)
76
- throw new ProjectSkillsError('source_limit', projectPath);
77
- files.push({ path: bundlePath, content });
78
- };
79
- await walk(entry.source.root, '');
80
- if (!files.some((file) => file.path === 'SKILL.md'))
81
- throw new ProjectSkillsError('missing_skill_body', entry.source.root);
82
- // External project resources retain their original relative path beneath a reserved prefix.
83
- if (entry.projectFiles?.length && files.some((file) => file.path === 'project' || file.path.startsWith('project/'))) {
84
- throw new ProjectSkillsError('project_resource_collision', entry.entryKey);
85
- }
86
- for (const relative of entry.projectFiles ?? [])
87
- await walk(relative, `project/${relative}`);
88
- return { entryKey: entry.entryKey, root: entry.source.root, files, sourceTreeHash: sourceTreeDigest(files) };
89
- }
90
- /** Static inventory only: no source scripts, model calls, or repository mutations. */
91
- export async function inspectProjectSkills(projectRoot) {
92
- const root = await realpath(resolve(projectRoot));
93
- const result = { declaration: null, discovered: [], sources: [], issues: [] };
94
- const issue = (error, path) => result.issues.push({
95
- code: error instanceof ProjectSkillsError ? error.code : 'source_read_failed',
96
- detail: error instanceof Error ? error.message : String(error), path,
97
- });
98
- try {
99
- if (await exists(join(root, PROJECT_SKILLS_DECLARATION_PATH))) {
100
- const file = await safePath(root, PROJECT_SKILLS_DECLARATION_PATH);
101
- if ((await lstat(file)).size > 1024 * 1024)
102
- throw new ProjectSkillsError('source_limit', PROJECT_SKILLS_DECLARATION_PATH);
103
- result.declaration = parseProjectSkillDeclaration(await readFile(file, 'utf8'));
104
- }
105
- }
106
- catch (error) {
107
- issue(error, PROJECT_SKILLS_DECLARATION_PATH);
108
- }
109
- for (const sourceRoot of PROJECT_SKILL_SOURCE_ROOTS) {
110
- try {
111
- if (!await exists(join(root, sourceRoot)))
112
- continue;
113
- const directory = await safePath(root, sourceRoot);
114
- for (const name of (await readdir(directory)).sort()) {
115
- const source = `${sourceRoot}/${name}`;
116
- const safe = await safePath(root, source);
117
- if (!(await lstat(safe)).isDirectory())
118
- continue;
119
- if (!await exists(join(safe, 'SKILL.md'))) {
120
- result.issues.push({ code: 'unrecognized_entry', path: source, detail: 'A skill directory must contain SKILL.md at its root' });
121
- continue;
122
- }
123
- result.discovered.push({ root: source, entryKey: `repo-${createHash('sha256').update(source).digest('hex').slice(0, 24)}` });
124
- }
125
- }
126
- catch (error) {
127
- issue(error, sourceRoot);
128
- }
129
- }
130
- const declaredRoots = new Set(result.declaration?.entries.flatMap((entry) => entry.source.kind === 'repository' ? [entry.source.root] : []) ?? []);
131
- const entries = [
132
- ...(result.declaration?.entries ?? []),
133
- ...result.discovered.filter((item) => !declaredRoots.has(item.root)).map((item) => ({
134
- entryKey: item.entryKey, source: { kind: 'repository', root: item.root },
135
- enabled: result.declaration === null, surface: 'sandbox-agent',
136
- })),
137
- ];
138
- for (const entry of entries) {
139
- if (entry.source.kind !== 'repository')
140
- continue;
141
- try {
142
- result.sources.push(await readProjectSkillSource(root, entry));
143
- }
144
- catch (error) {
145
- issue(error, entry.source.root);
146
- }
147
- }
148
- return result;
149
- }
150
- //# sourceMappingURL=inventory.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"inventory.js","sourceRoot":"","sources":["../../src/project-skills/inventory.ts"],"names":[],"mappings":"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"}
@@ -1,12 +0,0 @@
1
- import type { ProjectSkillInventory } from './inventory.js';
2
- import { type ProjectSkillsLockV3, type ProjectSkillDeclaration } from './types.js';
3
- /** Offline identity is a provenance label, never an access grant on the server. */
4
- export declare function buildLocalProjectSkillsSnapshot(inventory: ProjectSkillInventory, previous?: unknown): {
5
- declaration: ProjectSkillDeclaration;
6
- lock: ProjectSkillsLockV3;
7
- artifacts: {
8
- artifactHash: string;
9
- archive: Buffer;
10
- }[];
11
- };
12
- //# sourceMappingURL=local-snapshot.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"local-snapshot.d.ts","sourceRoot":"","sources":["../../src/project-skills/local-snapshot.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAsB,KAAK,mBAAmB,EAAE,KAAK,uBAAuB,EAA8B,MAAM,YAAY,CAAC;AAEpI,mFAAmF;AACnF,wBAAgB,+BAA+B,CAAC,SAAS,EAAE,qBAAqB,EAAE,QAAQ,CAAC,EAAE,OAAO;;;;sBAW3D,MAAM;iBAAW,MAAM;;EAmC/D"}
@@ -1,66 +0,0 @@
1
- import { createHash, randomUUID } from 'node:crypto';
2
- import { createCanonicalBundleArchive } from './bundle-archive.js';
3
- import { declarationDigest, dependencyDigest, parseProjectSkillsLock, validateProjectSkillsSnapshot } from './protocol.js';
4
- import { ProjectSkillsError } from './types.js';
5
- /** Offline identity is a provenance label, never an access grant on the server. */
6
- export function buildLocalProjectSkillsSnapshot(inventory, previous) {
7
- if (inventory.issues.length)
8
- throw new ProjectSkillsError('inventory_invalid', JSON.stringify(inventory.issues));
9
- const old = previous === undefined ? null : parseProjectSkillsLock(previous);
10
- if (old && !inventory.declaration)
11
- throw new ProjectSkillsError('missing_declaration', 'A managed lock requires its declaration');
12
- const declaration = structuredClone(inventory.declaration ?? { schemaVersion: 1, entries: [] });
13
- const roots = new Set(declaration.entries.flatMap((entry) => entry.source.kind === 'repository' ? [entry.source.root] : []));
14
- for (const found of inventory.discovered)
15
- if (!roots.has(found.root))
16
- declaration.entries.push({
17
- entryKey: found.entryKey, source: { kind: 'repository', root: found.root }, enabled: !inventory.declaration && !old, surface: 'sandbox-agent',
18
- });
19
- const oldByKey = new Map(old?.entries.map((entry) => [entry.entryKey, entry]) ?? []);
20
- const localNamespace = `local-${randomUUID()}`;
21
- const artifacts = [];
22
- const required = new Map();
23
- const entries = declaration.entries.map((entry) => {
24
- const previous = oldByKey.get(entry.entryKey);
25
- if (entry.source.kind === 'registry') {
26
- if (!previous || previous.revision.kind !== 'release' || previous.revision.skillRef !== entry.source.skillRef || previous.revision.version !== entry.source.version) {
27
- throw new ProjectSkillsError('missing_release', `An authorized exact release must be downloaded first: ${entry.entryKey}`);
28
- }
29
- return structuredClone(previous);
30
- }
31
- const source = inventory.sources.find((source) => source.entryKey === entry.entryKey);
32
- if (!source)
33
- throw new ProjectSkillsError('missing_source', entry.entryKey);
34
- const archive = createCanonicalBundleArchive(source.files.map((file) => ({ path: file.path, data: Buffer.from(file.content) })));
35
- const artifactHash = createHash('sha256').update(archive).digest('hex');
36
- artifacts.push({ artifactHash, archive });
37
- entry.source.skillRef ??= previous?.revision.skillRef ?? `${localNamespace}/${entry.entryKey}`;
38
- const manifestFile = source.files.find((file) => file.path === 'manifest.json');
39
- if (manifestFile) {
40
- const manifest = JSON.parse(Buffer.from(manifestFile.content).toString('utf8'));
41
- if (manifest.imports?.some((item) => item.edgeKind !== 'optional'))
42
- throw new ProjectSkillsError('dependency_unresolved', entry.entryKey);
43
- required.set(entry.entryKey, (manifest.relationships ?? []).filter((edge) => edge.relationType === 'requires')
44
- .map((edge) => edge.toSkillRef ?? edge.targetSkillRef));
45
- }
46
- return { entryKey: entry.entryKey, revision: { kind: 'source', skillRef: entry.source.skillRef, sourceRevision: `src-v1-sha256:${source.sourceTreeHash}`, artifactHash },
47
- sourceTreeHash: source.sourceTreeHash, dependencies: [], dependencyLockHash: '' };
48
- });
49
- const refToKey = new Map(entries.map((entry) => [entry.revision.skillRef, entry.entryKey]));
50
- if (refToKey.size !== entries.length)
51
- throw new ProjectSkillsError('duplicate_identity', 'Duplicate skill reference');
52
- for (const entry of entries)
53
- if (entry.revision.kind === 'source')
54
- entry.dependencies = (required.get(entry.entryKey) ?? []).map((ref) => {
55
- const key = refToKey.get(ref);
56
- if (!key)
57
- throw new ProjectSkillsError('dependency_unresolved', ref);
58
- return key;
59
- });
60
- for (const entry of entries)
61
- entry.dependencyLockHash = dependencyDigest(entries, entry.dependencies);
62
- const lock = { lockVersion: 3, declarationHash: declarationDigest(declaration), entries };
63
- validateProjectSkillsSnapshot(declaration, lock);
64
- return { declaration, lock, artifacts };
65
- }
66
- //# sourceMappingURL=local-snapshot.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"local-snapshot.js","sourceRoot":"","sources":["../../src/project-skills/local-snapshot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,4BAA4B,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,6BAA6B,EAAE,MAAM,eAAe,CAAC;AAE3H,OAAO,EAAE,kBAAkB,EAAsF,MAAM,YAAY,CAAC;AAEpI,mFAAmF;AACnF,MAAM,UAAU,+BAA+B,CAAC,SAAgC,EAAE,QAAkB;IAClG,IAAI,SAAS,CAAC,MAAM,CAAC,MAAM;QAAE,MAAM,IAAI,kBAAkB,CAAC,mBAAmB,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;IACjH,MAAM,GAAG,GAAG,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,sBAAsB,CAAC,QAAQ,CAAC,CAAC;IAC7E,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW;QAAE,MAAM,IAAI,kBAAkB,CAAC,qBAAqB,EAAE,yCAAyC,CAAC,CAAC;IAClI,MAAM,WAAW,GAA4B,eAAe,CAAC,SAAS,CAAC,WAAW,IAAI,EAAE,aAAa,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;IACzH,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC7H,KAAK,MAAM,KAAK,IAAI,SAAS,CAAC,UAAU;QAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;YAAE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC;gBAC7F,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC,SAAS,CAAC,WAAW,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,eAAe;aAC9I,CAAC,CAAC;IACH,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACrF,MAAM,cAAc,GAAG,SAAS,UAAU,EAAE,EAAE,CAAC;IAC/C,MAAM,SAAS,GAAqD,EAAE,CAAC;IACvE,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAoB,CAAC;IAC7C,MAAM,OAAO,GAA4B,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QACzE,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC9C,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YACrC,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,KAAK,SAAS,IAAI,QAAQ,CAAC,QAAQ,CAAC,QAAQ,KAAK,KAAK,CAAC,MAAM,CAAC,QAAQ,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,KAAK,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBACpK,MAAM,IAAI,kBAAkB,CAAC,iBAAiB,EAAE,yDAAyD,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC7H,CAAC;YACD,OAAO,eAAe,CAAC,QAAQ,CAAC,CAAC;QACnC,CAAC;QACD,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,KAAK,KAAK,CAAC,QAAQ,CAAC,CAAC;QACtF,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,kBAAkB,CAAC,gBAAgB,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC5E,MAAM,OAAO,GAAG,4BAA4B,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACjI,MAAM,YAAY,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACxE,SAAS,CAAC,IAAI,CAAC,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC,CAAC;QAC1C,KAAK,CAAC,MAAM,CAAC,QAAQ,KAAK,QAAQ,EAAE,QAAQ,CAAC,QAAQ,IAAI,GAAG,cAAc,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;QAC/F,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,eAAe,CAAC,CAAC;QAChF,IAAI,YAAY,EAAE,CAAC;YACjB,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;YAChF,IAAI,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,IAA2B,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,KAAK,UAAU,CAAC;gBAAE,MAAM,IAAI,kBAAkB,CAAC,uBAAuB,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;YACjK,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,IAA+B,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,KAAK,UAAU,CAAC;iBACtI,GAAG,CAAC,CAAC,IAAsD,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;QAC9G,CAAC;QACD,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,cAAc,EAAE,iBAAiB,MAAM,CAAC,cAAc,EAAE,EAAE,YAAY,EAAE;YACtK,cAAc,EAAE,MAAM,CAAC,cAAc,EAAE,YAAY,EAAE,EAAE,EAAE,kBAAkB,EAAE,EAAE,EAAE,CAAC;IACtF,CAAC,CAAC,CAAC;IACH,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC5F,IAAI,QAAQ,CAAC,IAAI,KAAK,OAAO,CAAC,MAAM;QAAE,MAAM,IAAI,kBAAkB,CAAC,oBAAoB,EAAE,2BAA2B,CAAC,CAAC;IACtH,KAAK,MAAM,KAAK,IAAI,OAAO;QAAE,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,KAAK,QAAQ;YAAE,KAAK,CAAC,YAAY,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;gBACvI,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBAAC,IAAI,CAAC,GAAG;oBAAE,MAAM,IAAI,kBAAkB,CAAC,uBAAuB,EAAE,GAAG,CAAC,CAAC;gBAAC,OAAO,GAAG,CAAC;YAClH,CAAC,CAAC,CAAC;IACH,KAAK,MAAM,KAAK,IAAI,OAAO;QAAE,KAAK,CAAC,kBAAkB,GAAG,gBAAgB,CAAC,OAAO,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;IACtG,MAAM,IAAI,GAAwB,EAAE,WAAW,EAAE,CAAC,EAAE,eAAe,EAAE,iBAAiB,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,CAAC;IAC/G,6BAA6B,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;IACjD,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;AAC1C,CAAC"}
@@ -1,31 +0,0 @@
1
- import { type ProjectSkillDeclaration, type ProjectSkillFile, type ProjectSkillLockEntry, type ProjectSkillsLockV3, type ProjectSkillSurface } from './types.js';
2
- export declare function isProjectRelativePath(value: string): boolean;
3
- /** Locale-independent serialization, also used for server-side revalidation. */
4
- export declare function canonicalProjectSkillsJson(value: unknown): string;
5
- export declare function projectSkillsDigest(value: unknown): string;
6
- export declare function parseProjectSkillDeclaration(value: unknown): ProjectSkillDeclaration;
7
- export declare function parseProjectSkillsLock(value: unknown): ProjectSkillsLockV3;
8
- export declare function declarationDigest(declaration: ProjectSkillDeclaration): string;
9
- /** Hash raw bytes and relative filenames, not a Git commit or normalized artifact. */
10
- export declare function sourceTreeDigest(files: readonly ProjectSkillFile[]): string;
11
- export declare function sourceRevision(files: readonly ProjectSkillFile[]): string;
12
- export declare function dependencyDigest(entries: readonly ProjectSkillLockEntry[], keys: readonly string[]): string;
13
- /** Validates disabled entries too; an incomplete snapshot must never be adopted. */
14
- export declare function validateProjectSkillsSnapshot(declarationInput: unknown, lockInput: unknown): {
15
- declaration: ProjectSkillDeclaration;
16
- lock: ProjectSkillsLockV3;
17
- };
18
- export declare function effectiveProjectSkills(declarationInput: unknown, lockInput: unknown, surface: ProjectSkillSurface, deniedRefs?: ReadonlySet<string>): ProjectSkillLockEntry[];
19
- /** Configuration change retains every exact revision, including disabled entries. */
20
- export declare function setProjectSkillEnabled(declarationInput: unknown, lockInput: unknown, entryKey: string, enabled: boolean): {
21
- declaration: {
22
- entries: import("./types.js").ProjectSkillEntry[];
23
- schemaVersion: 1;
24
- };
25
- lock: {
26
- declarationHash: string;
27
- lockVersion: 3;
28
- entries: ProjectSkillLockEntry[];
29
- };
30
- };
31
- //# sourceMappingURL=protocol.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../../src/project-skills/protocol.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,uBAAuB,EAAE,KAAK,gBAAgB,EACnD,KAAK,qBAAqB,EAAE,KAAK,mBAAmB,EAAE,KAAK,mBAAmB,EAC/E,MAAM,YAAY,CAAC;AAOpB,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAI5D;AA6BD,gFAAgF;AAChF,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAYjE;AACD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAE1D;AAWD,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,OAAO,GAAG,uBAAuB,CAOpF;AACD,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,mBAAmB,CAK1E;AACD,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,uBAAuB,GAAG,MAAM,CAE9E;AAED,sFAAsF;AACtF,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,SAAS,gBAAgB,EAAE,GAAG,MAAM,CAa3E;AACD,wBAAgB,cAAc,CAAC,KAAK,EAAE,SAAS,gBAAgB,EAAE,GAAG,MAAM,CAEzE;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,SAAS,qBAAqB,EAAE,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAQ3G;AAED,oFAAoF;AACpF,wBAAgB,6BAA6B,CAAC,gBAAgB,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,GAAG;IAC5F,WAAW,EAAE,uBAAuB,CAAC;IAAC,IAAI,EAAE,mBAAmB,CAAC;CACjE,CAmCA;AAED,wBAAgB,sBAAsB,CACpC,gBAAgB,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,mBAAmB,EAC3E,UAAU,GAAE,WAAW,CAAC,MAAM,CAAa,GAC1C,qBAAqB,EAAE,CAmBzB;AAED,qFAAqF;AACrF,wBAAgB,sBAAsB,CAAC,gBAAgB,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO;;;;;;;;;;EAKvH"}
@@ -1,197 +0,0 @@
1
- import { createHash } from 'node:crypto';
2
- import { z } from 'zod';
3
- import { PROJECT_SKILL_SURFACES, ProjectSkillsError, } from './types.js';
4
- const hash = z.string().regex(/^[a-f0-9]{64}$/);
5
- const ref = z.string().regex(/^[a-z0-9][a-z0-9_-]*\/[a-z0-9][a-z0-9_-]*$/).max(257);
6
- const version = z.string().regex(/^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)$/).max(32);
7
- const key = z.string().regex(/^[a-zA-Z0-9][a-zA-Z0-9._-]*$/).max(160);
8
- export function isProjectRelativePath(value) {
9
- return value.length > 0 && value.length <= 1024 && value.trim() === value &&
10
- !/[\\\x00-\x1f\x7f:*?<>|]/.test(value) &&
11
- value.split('/').every((part) => part !== '' && part !== '.' && part !== '..' && part !== '.git');
12
- }
13
- const path = z.string().refine(isProjectRelativePath, 'Expected a safe project-relative path');
14
- const declarationSchema = z.strictObject({
15
- schemaVersion: z.literal(1),
16
- entries: z.array(z.strictObject({
17
- entryKey: key,
18
- source: z.discriminatedUnion('kind', [
19
- z.strictObject({ kind: z.literal('registry'), skillRef: ref, version }),
20
- z.strictObject({ kind: z.literal('repository'), root: path, skillRef: ref.optional() }),
21
- ]),
22
- enabled: z.boolean(),
23
- surface: z.enum(PROJECT_SKILL_SURFACES),
24
- projectFiles: z.array(path).max(512).optional(),
25
- })).max(512),
26
- });
27
- const lockSchema = z.strictObject({
28
- lockVersion: z.literal(3), declarationHash: hash,
29
- entries: z.array(z.strictObject({
30
- entryKey: key,
31
- revision: z.discriminatedUnion('kind', [
32
- z.strictObject({ kind: z.literal('release'), skillRef: ref, version, artifactHash: hash }),
33
- z.strictObject({ kind: z.literal('source'), skillRef: ref,
34
- sourceRevision: z.string().regex(/^src-v1-sha256:[a-f0-9]{64}$/), artifactHash: hash }),
35
- ]),
36
- sourceTreeHash: hash.optional(), dependencyLockHash: hash,
37
- dependencies: z.array(key).max(512),
38
- })).max(512),
39
- });
40
- /** Locale-independent serialization, also used for server-side revalidation. */
41
- export function canonicalProjectSkillsJson(value) {
42
- if (Array.isArray(value))
43
- return `[${value.map(canonicalProjectSkillsJson).join(',')}]`;
44
- if (value !== null && typeof value === 'object') {
45
- return `{${Object.entries(value).filter(([, item]) => item !== undefined)
46
- .sort(([a], [b]) => a < b ? -1 : a > b ? 1 : 0)
47
- .map(([name, item]) => `${JSON.stringify(name)}:${canonicalProjectSkillsJson(item)}`).join(',')}}`;
48
- }
49
- const result = JSON.stringify(value);
50
- if (result === undefined || (typeof value === 'number' && !Number.isFinite(value))) {
51
- throw new ProjectSkillsError('invalid_json', 'Non-JSON configuration value');
52
- }
53
- return result;
54
- }
55
- export function projectSkillsDigest(value) {
56
- return createHash('sha256').update(canonicalProjectSkillsJson(value)).digest('hex');
57
- }
58
- function parseJson(value) {
59
- if (typeof value !== 'string')
60
- return value;
61
- try {
62
- return JSON.parse(value);
63
- }
64
- catch {
65
- throw new ProjectSkillsError('invalid_json', 'Malformed project skills JSON');
66
- }
67
- }
68
- function uniqueKeys(entries) {
69
- if (new Set(entries.map((entry) => entry.entryKey)).size !== entries.length) {
70
- throw new ProjectSkillsError('duplicate_entry', 'Duplicate project skill entry key');
71
- }
72
- }
73
- export function parseProjectSkillDeclaration(value) {
74
- const result = declarationSchema.safeParse(parseJson(value));
75
- if (!result.success)
76
- throw new ProjectSkillsError('invalid_declaration', result.error.message);
77
- uniqueKeys(result.data.entries);
78
- const roots = result.data.entries.flatMap((entry) => entry.source.kind === 'repository' ? [entry.source.root] : []);
79
- if (new Set(roots).size !== roots.length)
80
- throw new ProjectSkillsError('duplicate_source', 'Repository source declared twice');
81
- return result.data;
82
- }
83
- export function parseProjectSkillsLock(value) {
84
- const result = lockSchema.safeParse(parseJson(value));
85
- if (!result.success)
86
- throw new ProjectSkillsError('invalid_lock', result.error.message);
87
- uniqueKeys(result.data.entries);
88
- return result.data;
89
- }
90
- export function declarationDigest(declaration) {
91
- return projectSkillsDigest(parseProjectSkillDeclaration(declaration));
92
- }
93
- /** Hash raw bytes and relative filenames, not a Git commit or normalized artifact. */
94
- export function sourceTreeDigest(files) {
95
- const sorted = [...files].sort((a, b) => a.path < b.path ? -1 : a.path > b.path ? 1 : 0);
96
- const seen = new Set();
97
- const digest = createHash('sha256').update('playcraft-source-tree-v1\0');
98
- for (const file of sorted) {
99
- if (!isProjectRelativePath(file.path) || seen.has(file.path)) {
100
- throw new ProjectSkillsError('invalid_source_path', `Invalid or duplicate source path: ${file.path}`);
101
- }
102
- seen.add(file.path);
103
- const name = Buffer.from(file.path);
104
- digest.update(`${name.length}:`).update(name).update(`${file.content.byteLength}:`).update(file.content);
105
- }
106
- return digest.digest('hex');
107
- }
108
- export function sourceRevision(files) {
109
- return `src-v1-sha256:${sourceTreeDigest(files)}`;
110
- }
111
- export function dependencyDigest(entries, keys) {
112
- const byKey = new Map(entries.map((entry) => [entry.entryKey, entry]));
113
- if (new Set(keys).size !== keys.length)
114
- throw new ProjectSkillsError('duplicate_dependency', 'Duplicate dependency');
115
- return projectSkillsDigest([...keys].sort().map((entryKey) => {
116
- const entry = byKey.get(entryKey);
117
- if (!entry)
118
- throw new ProjectSkillsError('missing_dependency', `Missing dependency ${entryKey}`);
119
- return { entryKey, revision: entry.revision, dependencies: [...entry.dependencies].sort() };
120
- }));
121
- }
122
- /** Validates disabled entries too; an incomplete snapshot must never be adopted. */
123
- export function validateProjectSkillsSnapshot(declarationInput, lockInput) {
124
- const declaration = parseProjectSkillDeclaration(declarationInput);
125
- const lock = parseProjectSkillsLock(lockInput);
126
- if (lock.declarationHash !== declarationDigest(declaration)) {
127
- throw new ProjectSkillsError('stale_lock', 'Declaration and lock belong to different revisions');
128
- }
129
- const byKey = new Map(lock.entries.map((entry) => [entry.entryKey, entry]));
130
- if (byKey.size !== declaration.entries.length)
131
- throw new ProjectSkillsError('incomplete_lock', 'Lock must contain every declaration entry');
132
- for (const item of declaration.entries) {
133
- const locked = byKey.get(item.entryKey);
134
- if (!locked)
135
- throw new ProjectSkillsError('incomplete_lock', `Missing ${item.entryKey}`);
136
- if (item.source.kind === 'registry' && (locked.revision.kind !== 'release' ||
137
- locked.revision.skillRef !== item.source.skillRef || locked.revision.version !== item.source.version)) {
138
- throw new ProjectSkillsError('revision_mismatch', `Registry revision differs: ${item.entryKey}`);
139
- }
140
- if (item.source.kind === 'repository' && (locked.revision.kind !== 'source' || !locked.sourceTreeHash ||
141
- locked.revision.sourceRevision !== `src-v1-sha256:${locked.sourceTreeHash}` ||
142
- (item.source.skillRef && item.source.skillRef !== locked.revision.skillRef))) {
143
- throw new ProjectSkillsError('revision_mismatch', `Repository revision differs: ${item.entryKey}`);
144
- }
145
- if (dependencyDigest(lock.entries, locked.dependencies) !== locked.dependencyLockHash) {
146
- throw new ProjectSkillsError('dependency_mismatch', `Dependencies changed: ${item.entryKey}`);
147
- }
148
- }
149
- const visited = new Set();
150
- const visiting = new Set();
151
- const visit = (entryKey) => {
152
- if (visiting.has(entryKey))
153
- throw new ProjectSkillsError('dependency_cycle', `Dependency cycle at ${entryKey}`);
154
- if (visited.has(entryKey))
155
- return;
156
- visiting.add(entryKey);
157
- for (const child of byKey.get(entryKey).dependencies)
158
- visit(child);
159
- visiting.delete(entryKey);
160
- visited.add(entryKey);
161
- };
162
- for (const entry of lock.entries)
163
- visit(entry.entryKey);
164
- return { declaration, lock };
165
- }
166
- export function effectiveProjectSkills(declarationInput, lockInput, surface, deniedRefs = new Set()) {
167
- const { declaration, lock } = validateProjectSkillsSnapshot(declarationInput, lockInput);
168
- const declarations = new Map(declaration.entries.map((entry) => [entry.entryKey, entry]));
169
- const byKey = new Map(lock.entries.map((entry) => [entry.entryKey, entry]));
170
- const selected = new Set();
171
- const visit = (entryKey) => {
172
- if (selected.has(entryKey))
173
- return;
174
- const item = declarations.get(entryKey);
175
- const locked = byKey.get(entryKey);
176
- if (!item.enabled || item.surface !== surface || deniedRefs.has(locked.revision.skillRef)) {
177
- throw new ProjectSkillsError('dependency_disabled', `Required skill is unavailable: ${entryKey}`);
178
- }
179
- for (const child of locked.dependencies)
180
- visit(child);
181
- selected.add(entryKey);
182
- };
183
- for (const item of declaration.entries) {
184
- if (item.enabled && item.surface === surface && !deniedRefs.has(byKey.get(item.entryKey).revision.skillRef))
185
- visit(item.entryKey);
186
- }
187
- return [...selected].map((entryKey) => byKey.get(entryKey));
188
- }
189
- /** Configuration change retains every exact revision, including disabled entries. */
190
- export function setProjectSkillEnabled(declarationInput, lockInput, entryKey, enabled) {
191
- const { declaration, lock } = validateProjectSkillsSnapshot(declarationInput, lockInput);
192
- if (!declaration.entries.some((item) => item.entryKey === entryKey))
193
- throw new ProjectSkillsError('unknown_entry', entryKey);
194
- const next = { ...declaration, entries: declaration.entries.map((item) => item.entryKey === entryKey ? { ...item, enabled } : item) };
195
- return { declaration: next, lock: { ...lock, declarationHash: declarationDigest(next) } };
196
- }
197
- //# sourceMappingURL=protocol.js.map