daycare-cli 0.0.26 → 0.0.28

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 (420) hide show
  1. package/dist/config/configResolve.js +5 -0
  2. package/dist/config/configResolve.js.map +1 -1
  3. package/dist/config/configResolve.spec.js +10 -0
  4. package/dist/config/configResolve.spec.js.map +1 -1
  5. package/dist/config/configSettingsParse.d.ts.map +1 -1
  6. package/dist/config/configSettingsParse.js +3 -0
  7. package/dist/config/configSettingsParse.js.map +1 -1
  8. package/dist/engine/agents/agent.d.ts +1 -1
  9. package/dist/engine/agents/agent.d.ts.map +1 -1
  10. package/dist/engine/agents/agent.js +28 -22
  11. package/dist/engine/agents/agent.js.map +1 -1
  12. package/dist/engine/agents/agentSystem.d.ts +12 -0
  13. package/dist/engine/agents/agentSystem.d.ts.map +1 -1
  14. package/dist/engine/agents/agentSystem.js +218 -2
  15. package/dist/engine/agents/agentSystem.js.map +1 -1
  16. package/dist/engine/agents/agentSystem.spec.d.ts +2 -0
  17. package/dist/engine/agents/agentSystem.spec.d.ts.map +1 -0
  18. package/dist/engine/agents/agentSystem.spec.js +382 -0
  19. package/dist/engine/agents/agentSystem.spec.js.map +1 -0
  20. package/dist/engine/agents/ops/agentAppFolderPathResolve.d.ts +7 -0
  21. package/dist/engine/agents/ops/agentAppFolderPathResolve.d.ts.map +1 -0
  22. package/dist/engine/agents/ops/agentAppFolderPathResolve.js +12 -0
  23. package/dist/engine/agents/ops/agentAppFolderPathResolve.js.map +1 -0
  24. package/dist/engine/agents/ops/agentAppFolderPathResolve.spec.d.ts +2 -0
  25. package/dist/engine/agents/ops/agentAppFolderPathResolve.spec.d.ts.map +1 -0
  26. package/dist/engine/agents/ops/agentAppFolderPathResolve.spec.js +18 -0
  27. package/dist/engine/agents/ops/agentAppFolderPathResolve.spec.js.map +1 -0
  28. package/dist/engine/agents/ops/agentBackgroundList.d.ts.map +1 -1
  29. package/dist/engine/agents/ops/agentBackgroundList.js +10 -6
  30. package/dist/engine/agents/ops/agentBackgroundList.js.map +1 -1
  31. package/dist/engine/agents/ops/agentDescriptorLabel.d.ts.map +1 -1
  32. package/dist/engine/agents/ops/agentDescriptorLabel.js +13 -0
  33. package/dist/engine/agents/ops/agentDescriptorLabel.js.map +1 -1
  34. package/dist/engine/agents/ops/agentDescriptorLabel.spec.js +16 -0
  35. package/dist/engine/agents/ops/agentDescriptorLabel.spec.js.map +1 -1
  36. package/dist/engine/agents/ops/agentDescriptorRead.d.ts.map +1 -1
  37. package/dist/engine/agents/ops/agentDescriptorRead.js +10 -0
  38. package/dist/engine/agents/ops/agentDescriptorRead.js.map +1 -1
  39. package/dist/engine/agents/ops/agentDescriptorTypes.d.ts +7 -0
  40. package/dist/engine/agents/ops/agentDescriptorTypes.d.ts.map +1 -1
  41. package/dist/engine/agents/ops/agentInbox.d.ts +5 -0
  42. package/dist/engine/agents/ops/agentInbox.d.ts.map +1 -1
  43. package/dist/engine/agents/ops/agentInbox.js +9 -0
  44. package/dist/engine/agents/ops/agentInbox.js.map +1 -1
  45. package/dist/engine/agents/ops/agentLoopRun.d.ts +2 -2
  46. package/dist/engine/agents/ops/agentLoopRun.d.ts.map +1 -1
  47. package/dist/engine/agents/ops/agentLoopRun.js +18 -17
  48. package/dist/engine/agents/ops/agentLoopRun.js.map +1 -1
  49. package/dist/engine/agents/ops/agentLoopRun.spec.js.map +1 -1
  50. package/dist/engine/agents/ops/agentPromptResolve.d.ts +11 -0
  51. package/dist/engine/agents/ops/agentPromptResolve.d.ts.map +1 -0
  52. package/dist/engine/agents/ops/agentPromptResolve.js +28 -0
  53. package/dist/engine/agents/ops/agentPromptResolve.js.map +1 -0
  54. package/dist/engine/agents/ops/agentPromptResolve.spec.d.ts +2 -0
  55. package/dist/engine/agents/ops/agentPromptResolve.spec.d.ts.map +1 -0
  56. package/dist/engine/agents/ops/agentPromptResolve.spec.js +58 -0
  57. package/dist/engine/agents/ops/agentPromptResolve.spec.js.map +1 -0
  58. package/dist/engine/agents/ops/agentStateRead.d.ts.map +1 -1
  59. package/dist/engine/agents/ops/agentStateRead.js +2 -1
  60. package/dist/engine/agents/ops/agentStateRead.js.map +1 -1
  61. package/dist/engine/agents/ops/agentStateRead.spec.js +22 -0
  62. package/dist/engine/agents/ops/agentStateRead.spec.js.map +1 -1
  63. package/dist/engine/agents/ops/agentTypes.d.ts +3 -1
  64. package/dist/engine/agents/ops/agentTypes.d.ts.map +1 -1
  65. package/dist/engine/apps/appDiscover.d.ts +7 -0
  66. package/dist/engine/apps/appDiscover.d.ts.map +1 -0
  67. package/dist/engine/apps/appDiscover.js +67 -0
  68. package/dist/engine/apps/appDiscover.js.map +1 -0
  69. package/dist/engine/apps/appDiscover.spec.d.ts +2 -0
  70. package/dist/engine/apps/appDiscover.spec.d.ts.map +1 -0
  71. package/dist/engine/apps/appDiscover.spec.js +77 -0
  72. package/dist/engine/apps/appDiscover.spec.js.map +1 -0
  73. package/dist/engine/apps/appExecute.d.ts +19 -0
  74. package/dist/engine/apps/appExecute.d.ts.map +1 -0
  75. package/dist/engine/apps/appExecute.js +75 -0
  76. package/dist/engine/apps/appExecute.js.map +1 -0
  77. package/dist/engine/apps/appExecute.spec.d.ts +2 -0
  78. package/dist/engine/apps/appExecute.spec.d.ts.map +1 -0
  79. package/dist/engine/apps/appExecute.spec.js +252 -0
  80. package/dist/engine/apps/appExecute.spec.js.map +1 -0
  81. package/dist/engine/apps/appInstall.d.ts +7 -0
  82. package/dist/engine/apps/appInstall.d.ts.map +1 -0
  83. package/dist/engine/apps/appInstall.js +52 -0
  84. package/dist/engine/apps/appInstall.js.map +1 -0
  85. package/dist/engine/apps/appInstall.spec.d.ts +2 -0
  86. package/dist/engine/apps/appInstall.spec.d.ts.map +1 -0
  87. package/dist/engine/apps/appInstall.spec.js +127 -0
  88. package/dist/engine/apps/appInstall.spec.js.map +1 -0
  89. package/dist/engine/apps/appInstallToolBuild.d.ts +8 -0
  90. package/dist/engine/apps/appInstallToolBuild.d.ts.map +1 -0
  91. package/dist/engine/apps/appInstallToolBuild.js +42 -0
  92. package/dist/engine/apps/appInstallToolBuild.js.map +1 -0
  93. package/dist/engine/apps/appInstallToolBuild.spec.d.ts +2 -0
  94. package/dist/engine/apps/appInstallToolBuild.spec.d.ts.map +1 -0
  95. package/dist/engine/apps/appInstallToolBuild.spec.js +90 -0
  96. package/dist/engine/apps/appInstallToolBuild.spec.js.map +1 -0
  97. package/dist/engine/apps/appManager.d.ts +19 -0
  98. package/dist/engine/apps/appManager.d.ts.map +1 -0
  99. package/dist/engine/apps/appManager.js +45 -0
  100. package/dist/engine/apps/appManager.js.map +1 -0
  101. package/dist/engine/apps/appManager.spec.d.ts +2 -0
  102. package/dist/engine/apps/appManager.spec.d.ts.map +1 -0
  103. package/dist/engine/apps/appManager.spec.js +53 -0
  104. package/dist/engine/apps/appManager.spec.js.map +1 -0
  105. package/dist/engine/apps/appManifestParse.d.ts +7 -0
  106. package/dist/engine/apps/appManifestParse.d.ts.map +1 -0
  107. package/dist/engine/apps/appManifestParse.js +41 -0
  108. package/dist/engine/apps/appManifestParse.js.map +1 -0
  109. package/dist/engine/apps/appManifestParse.spec.d.ts +2 -0
  110. package/dist/engine/apps/appManifestParse.spec.d.ts.map +1 -0
  111. package/dist/engine/apps/appManifestParse.spec.js +60 -0
  112. package/dist/engine/apps/appManifestParse.spec.js.map +1 -0
  113. package/dist/engine/apps/appManifestSerialize.d.ts +7 -0
  114. package/dist/engine/apps/appManifestSerialize.d.ts.map +1 -0
  115. package/dist/engine/apps/appManifestSerialize.js +14 -0
  116. package/dist/engine/apps/appManifestSerialize.js.map +1 -0
  117. package/dist/engine/apps/appManifestValidate.d.ts +7 -0
  118. package/dist/engine/apps/appManifestValidate.d.ts.map +1 -0
  119. package/dist/engine/apps/appManifestValidate.js +27 -0
  120. package/dist/engine/apps/appManifestValidate.js.map +1 -0
  121. package/dist/engine/apps/appManifestValidate.spec.d.ts +2 -0
  122. package/dist/engine/apps/appManifestValidate.spec.d.ts.map +1 -0
  123. package/dist/engine/apps/appManifestValidate.spec.js +30 -0
  124. package/dist/engine/apps/appManifestValidate.spec.js.map +1 -0
  125. package/dist/engine/apps/appPermissionBuild.d.ts +7 -0
  126. package/dist/engine/apps/appPermissionBuild.d.ts.map +1 -0
  127. package/dist/engine/apps/appPermissionBuild.js +28 -0
  128. package/dist/engine/apps/appPermissionBuild.js.map +1 -0
  129. package/dist/engine/apps/appPermissionBuild.spec.d.ts +2 -0
  130. package/dist/engine/apps/appPermissionBuild.spec.d.ts.map +1 -0
  131. package/dist/engine/apps/appPermissionBuild.spec.js +44 -0
  132. package/dist/engine/apps/appPermissionBuild.spec.js.map +1 -0
  133. package/dist/engine/apps/appPermissionStateGrant.d.ts +7 -0
  134. package/dist/engine/apps/appPermissionStateGrant.d.ts.map +1 -0
  135. package/dist/engine/apps/appPermissionStateGrant.js +14 -0
  136. package/dist/engine/apps/appPermissionStateGrant.js.map +1 -0
  137. package/dist/engine/apps/appPermissionStateGrant.spec.d.ts +2 -0
  138. package/dist/engine/apps/appPermissionStateGrant.spec.d.ts.map +1 -0
  139. package/dist/engine/apps/appPermissionStateGrant.spec.js +33 -0
  140. package/dist/engine/apps/appPermissionStateGrant.spec.js.map +1 -0
  141. package/dist/engine/apps/appPermissionStatePathBuild.d.ts +6 -0
  142. package/dist/engine/apps/appPermissionStatePathBuild.d.ts.map +1 -0
  143. package/dist/engine/apps/appPermissionStatePathBuild.js +9 -0
  144. package/dist/engine/apps/appPermissionStatePathBuild.js.map +1 -0
  145. package/dist/engine/apps/appPermissionStateRead.d.ts +6 -0
  146. package/dist/engine/apps/appPermissionStateRead.d.ts.map +1 -0
  147. package/dist/engine/apps/appPermissionStateRead.js +40 -0
  148. package/dist/engine/apps/appPermissionStateRead.js.map +1 -0
  149. package/dist/engine/apps/appPermissionStateWrite.d.ts +6 -0
  150. package/dist/engine/apps/appPermissionStateWrite.d.ts.map +1 -0
  151. package/dist/engine/apps/appPermissionStateWrite.js +32 -0
  152. package/dist/engine/apps/appPermissionStateWrite.js.map +1 -0
  153. package/dist/engine/apps/appPermissionsParse.d.ts +7 -0
  154. package/dist/engine/apps/appPermissionsParse.d.ts.map +1 -0
  155. package/dist/engine/apps/appPermissionsParse.js +62 -0
  156. package/dist/engine/apps/appPermissionsParse.js.map +1 -0
  157. package/dist/engine/apps/appPermissionsParse.spec.d.ts +2 -0
  158. package/dist/engine/apps/appPermissionsParse.spec.d.ts.map +1 -0
  159. package/dist/engine/apps/appPermissionsParse.spec.js +31 -0
  160. package/dist/engine/apps/appPermissionsParse.spec.js.map +1 -0
  161. package/dist/engine/apps/appPermissionsSerialize.d.ts +7 -0
  162. package/dist/engine/apps/appPermissionsSerialize.d.ts.map +1 -0
  163. package/dist/engine/apps/appPermissionsSerialize.js +20 -0
  164. package/dist/engine/apps/appPermissionsSerialize.js.map +1 -0
  165. package/dist/engine/apps/appPermissionsSerialize.spec.d.ts +2 -0
  166. package/dist/engine/apps/appPermissionsSerialize.spec.d.ts.map +1 -0
  167. package/dist/engine/apps/appPermissionsSerialize.spec.js +20 -0
  168. package/dist/engine/apps/appPermissionsSerialize.spec.js.map +1 -0
  169. package/dist/engine/apps/appPermissionsValidate.d.ts +7 -0
  170. package/dist/engine/apps/appPermissionsValidate.d.ts.map +1 -0
  171. package/dist/engine/apps/appPermissionsValidate.js +34 -0
  172. package/dist/engine/apps/appPermissionsValidate.js.map +1 -0
  173. package/dist/engine/apps/appPermissionsValidate.spec.d.ts +2 -0
  174. package/dist/engine/apps/appPermissionsValidate.spec.d.ts.map +1 -0
  175. package/dist/engine/apps/appPermissionsValidate.spec.js +29 -0
  176. package/dist/engine/apps/appPermissionsValidate.spec.js.map +1 -0
  177. package/dist/engine/apps/appReviewPromptBuild.d.ts +22 -0
  178. package/dist/engine/apps/appReviewPromptBuild.d.ts.map +1 -0
  179. package/dist/engine/apps/appReviewPromptBuild.js +66 -0
  180. package/dist/engine/apps/appReviewPromptBuild.js.map +1 -0
  181. package/dist/engine/apps/appReviewPromptBuild.spec.d.ts +2 -0
  182. package/dist/engine/apps/appReviewPromptBuild.spec.d.ts.map +1 -0
  183. package/dist/engine/apps/appReviewPromptBuild.spec.js +49 -0
  184. package/dist/engine/apps/appReviewPromptBuild.spec.js.map +1 -0
  185. package/dist/engine/apps/appReviewProvidersResolve.d.ts +8 -0
  186. package/dist/engine/apps/appReviewProvidersResolve.d.ts.map +1 -0
  187. package/dist/engine/apps/appReviewProvidersResolve.js +30 -0
  188. package/dist/engine/apps/appReviewProvidersResolve.js.map +1 -0
  189. package/dist/engine/apps/appReviewProvidersResolve.spec.d.ts +2 -0
  190. package/dist/engine/apps/appReviewProvidersResolve.spec.d.ts.map +1 -0
  191. package/dist/engine/apps/appReviewProvidersResolve.spec.js +29 -0
  192. package/dist/engine/apps/appReviewProvidersResolve.spec.js.map +1 -0
  193. package/dist/engine/apps/appRuleApply.d.ts +20 -0
  194. package/dist/engine/apps/appRuleApply.d.ts.map +1 -0
  195. package/dist/engine/apps/appRuleApply.js +54 -0
  196. package/dist/engine/apps/appRuleApply.js.map +1 -0
  197. package/dist/engine/apps/appRuleApply.spec.d.ts +2 -0
  198. package/dist/engine/apps/appRuleApply.spec.d.ts.map +1 -0
  199. package/dist/engine/apps/appRuleApply.spec.js +87 -0
  200. package/dist/engine/apps/appRuleApply.spec.js.map +1 -0
  201. package/dist/engine/apps/appRuleToolBuild.d.ts +8 -0
  202. package/dist/engine/apps/appRuleToolBuild.d.ts.map +1 -0
  203. package/dist/engine/apps/appRuleToolBuild.js +98 -0
  204. package/dist/engine/apps/appRuleToolBuild.js.map +1 -0
  205. package/dist/engine/apps/appRuleToolBuild.spec.d.ts +2 -0
  206. package/dist/engine/apps/appRuleToolBuild.spec.d.ts.map +1 -0
  207. package/dist/engine/apps/appRuleToolBuild.spec.js +137 -0
  208. package/dist/engine/apps/appRuleToolBuild.spec.js.map +1 -0
  209. package/dist/engine/apps/appToolBuild.d.ts +8 -0
  210. package/dist/engine/apps/appToolBuild.d.ts.map +1 -0
  211. package/dist/engine/apps/appToolBuild.js +52 -0
  212. package/dist/engine/apps/appToolBuild.js.map +1 -0
  213. package/dist/engine/apps/appToolBuild.spec.d.ts +2 -0
  214. package/dist/engine/apps/appToolBuild.spec.d.ts.map +1 -0
  215. package/dist/engine/apps/appToolBuild.spec.js +29 -0
  216. package/dist/engine/apps/appToolBuild.spec.js.map +1 -0
  217. package/dist/engine/apps/appToolExecutorBuild.d.ts +32 -0
  218. package/dist/engine/apps/appToolExecutorBuild.d.ts.map +1 -0
  219. package/dist/engine/apps/appToolExecutorBuild.js +69 -0
  220. package/dist/engine/apps/appToolExecutorBuild.js.map +1 -0
  221. package/dist/engine/apps/appToolExecutorBuild.spec.d.ts +2 -0
  222. package/dist/engine/apps/appToolExecutorBuild.spec.d.ts.map +1 -0
  223. package/dist/engine/apps/appToolExecutorBuild.spec.js +227 -0
  224. package/dist/engine/apps/appToolExecutorBuild.spec.js.map +1 -0
  225. package/dist/engine/apps/appToolNameFormat.d.ts +6 -0
  226. package/dist/engine/apps/appToolNameFormat.d.ts.map +1 -0
  227. package/dist/engine/apps/appToolNameFormat.js +8 -0
  228. package/dist/engine/apps/appToolNameFormat.js.map +1 -0
  229. package/dist/engine/apps/appToolReview.d.ts +27 -0
  230. package/dist/engine/apps/appToolReview.d.ts.map +1 -0
  231. package/dist/engine/apps/appToolReview.js +53 -0
  232. package/dist/engine/apps/appToolReview.js.map +1 -0
  233. package/dist/engine/apps/appToolReview.spec.d.ts +2 -0
  234. package/dist/engine/apps/appToolReview.spec.d.ts.map +1 -0
  235. package/dist/engine/apps/appToolReview.spec.js +144 -0
  236. package/dist/engine/apps/appToolReview.spec.js.map +1 -0
  237. package/dist/engine/apps/appTypes.d.ts +30 -0
  238. package/dist/engine/apps/appTypes.d.ts.map +1 -0
  239. package/dist/engine/apps/appTypes.js +2 -0
  240. package/dist/engine/apps/appTypes.js.map +1 -0
  241. package/dist/engine/engine.d.ts +2 -0
  242. package/dist/engine/engine.d.ts.map +1 -1
  243. package/dist/engine/engine.js +12 -1
  244. package/dist/engine/engine.js.map +1 -1
  245. package/dist/engine/engine.spec.js +45 -0
  246. package/dist/engine/engine.spec.js.map +1 -1
  247. package/dist/engine/messages/incomingMessages.js +3 -0
  248. package/dist/engine/messages/incomingMessages.js.map +1 -1
  249. package/dist/engine/modules/connectors/types.d.ts +6 -1
  250. package/dist/engine/modules/connectors/types.d.ts.map +1 -1
  251. package/dist/engine/modules/rlm/rlmExecute.d.ts +2 -2
  252. package/dist/engine/modules/rlm/rlmExecute.d.ts.map +1 -1
  253. package/dist/engine/modules/rlm/rlmExecute.js +6 -1
  254. package/dist/engine/modules/rlm/rlmExecute.js.map +1 -1
  255. package/dist/engine/modules/rlm/rlmExecute.spec.js +14 -0
  256. package/dist/engine/modules/rlm/rlmExecute.spec.js.map +1 -1
  257. package/dist/engine/modules/rlm/rlmTool.d.ts +2 -2
  258. package/dist/engine/modules/rlm/rlmTool.d.ts.map +1 -1
  259. package/dist/engine/modules/rlm/rlmTool.js +3 -2
  260. package/dist/engine/modules/rlm/rlmTool.js.map +1 -1
  261. package/dist/engine/modules/rlm/rlmTool.spec.js +38 -2
  262. package/dist/engine/modules/rlm/rlmTool.spec.js.map +1 -1
  263. package/dist/engine/modules/toolResolver.d.ts +1 -0
  264. package/dist/engine/modules/toolResolver.d.ts.map +1 -1
  265. package/dist/engine/modules/toolResolver.js.map +1 -1
  266. package/dist/engine/modules/tools/background.d.ts.map +1 -1
  267. package/dist/engine/modules/tools/background.js +3 -1
  268. package/dist/engine/modules/tools/background.js.map +1 -1
  269. package/dist/engine/modules/tools/channelSendTool.js +3 -0
  270. package/dist/engine/modules/tools/channelSendTool.js.map +1 -1
  271. package/dist/engine/modules/tools/permissions.d.ts.map +1 -1
  272. package/dist/engine/modules/tools/permissions.js +57 -9
  273. package/dist/engine/modules/tools/permissions.js.map +1 -1
  274. package/dist/engine/modules/tools/permissions.spec.js +84 -0
  275. package/dist/engine/modules/tools/permissions.spec.js.map +1 -1
  276. package/dist/engine/modules/tools/signalEventsCsvToolBuild.d.ts +8 -0
  277. package/dist/engine/modules/tools/signalEventsCsvToolBuild.d.ts.map +1 -0
  278. package/dist/engine/modules/tools/signalEventsCsvToolBuild.js +101 -0
  279. package/dist/engine/modules/tools/signalEventsCsvToolBuild.js.map +1 -0
  280. package/dist/engine/modules/tools/signalEventsCsvToolBuild.spec.d.ts +2 -0
  281. package/dist/engine/modules/tools/signalEventsCsvToolBuild.spec.d.ts.map +1 -0
  282. package/dist/engine/modules/tools/signalEventsCsvToolBuild.spec.js +100 -0
  283. package/dist/engine/modules/tools/signalEventsCsvToolBuild.spec.js.map +1 -0
  284. package/dist/engine/modules/tools/types.d.ts +2 -0
  285. package/dist/engine/modules/tools/types.d.ts.map +1 -1
  286. package/dist/engine/permissions/permissionAccessAllows.d.ts +1 -1
  287. package/dist/engine/permissions/permissionAccessAllows.d.ts.map +1 -1
  288. package/dist/engine/permissions/permissionAccessAllows.js +35 -1
  289. package/dist/engine/permissions/permissionAccessAllows.js.map +1 -1
  290. package/dist/engine/permissions/permissionAccessAllows.spec.js +52 -0
  291. package/dist/engine/permissions/permissionAccessAllows.spec.js.map +1 -1
  292. package/dist/engine/permissions/permissionAccessApply.d.ts.map +1 -1
  293. package/dist/engine/permissions/permissionAccessApply.js +11 -0
  294. package/dist/engine/permissions/permissionAccessApply.js.map +1 -1
  295. package/dist/engine/permissions/permissionAccessApply.spec.js +15 -0
  296. package/dist/engine/permissions/permissionAccessApply.spec.js.map +1 -1
  297. package/dist/engine/permissions/permissionAccessParse.d.ts +1 -1
  298. package/dist/engine/permissions/permissionAccessParse.d.ts.map +1 -1
  299. package/dist/engine/permissions/permissionAccessParse.js +5 -2
  300. package/dist/engine/permissions/permissionAccessParse.js.map +1 -1
  301. package/dist/engine/permissions/permissionAccessParse.spec.js +2 -1
  302. package/dist/engine/permissions/permissionAccessParse.spec.js.map +1 -1
  303. package/dist/engine/permissions/permissionBuildCron.d.ts.map +1 -1
  304. package/dist/engine/permissions/permissionBuildCron.js +1 -0
  305. package/dist/engine/permissions/permissionBuildCron.js.map +1 -1
  306. package/dist/engine/permissions/permissionBuildDefault.d.ts.map +1 -1
  307. package/dist/engine/permissions/permissionBuildDefault.js +1 -0
  308. package/dist/engine/permissions/permissionBuildDefault.js.map +1 -1
  309. package/dist/engine/permissions/permissionBuildDefault.spec.js +1 -0
  310. package/dist/engine/permissions/permissionBuildDefault.spec.js.map +1 -1
  311. package/dist/engine/permissions/permissionDescribeDecision.d.ts.map +1 -1
  312. package/dist/engine/permissions/permissionDescribeDecision.js +3 -0
  313. package/dist/engine/permissions/permissionDescribeDecision.js.map +1 -1
  314. package/dist/engine/permissions/permissionDescribeDecision.spec.js +3 -0
  315. package/dist/engine/permissions/permissionDescribeDecision.spec.js.map +1 -1
  316. package/dist/engine/permissions/permissionFormatTag.d.ts.map +1 -1
  317. package/dist/engine/permissions/permissionFormatTag.js +3 -0
  318. package/dist/engine/permissions/permissionFormatTag.js.map +1 -1
  319. package/dist/engine/permissions/permissionFormatTag.spec.js +3 -0
  320. package/dist/engine/permissions/permissionFormatTag.spec.js.map +1 -1
  321. package/dist/engine/permissions/permissionMergeDefault.d.ts.map +1 -1
  322. package/dist/engine/permissions/permissionMergeDefault.js +1 -0
  323. package/dist/engine/permissions/permissionMergeDefault.js.map +1 -1
  324. package/dist/engine/permissions/permissionMergeDefault.spec.js +9 -0
  325. package/dist/engine/permissions/permissionMergeDefault.spec.js.map +1 -1
  326. package/dist/engine/permissions/permissionTagsApply.d.ts +1 -1
  327. package/dist/engine/permissions/permissionTagsApply.js +1 -1
  328. package/dist/engine/permissions/permissionTagsApply.spec.js +9 -1
  329. package/dist/engine/permissions/permissionTagsApply.spec.js.map +1 -1
  330. package/dist/engine/permissions/permissionTagsNormalize.d.ts +1 -1
  331. package/dist/engine/permissions/permissionTagsNormalize.d.ts.map +1 -1
  332. package/dist/engine/permissions/permissionTagsNormalize.js +4 -1
  333. package/dist/engine/permissions/permissionTagsNormalize.js.map +1 -1
  334. package/dist/engine/permissions/permissionTagsNormalize.spec.js +2 -1
  335. package/dist/engine/permissions/permissionTagsNormalize.spec.js.map +1 -1
  336. package/dist/engine/permissions/permissionTagsValidate.d.ts +1 -1
  337. package/dist/engine/permissions/permissionTagsValidate.js +1 -1
  338. package/dist/engine/permissions/permissionTagsValidate.spec.js +14 -0
  339. package/dist/engine/permissions/permissionTagsValidate.spec.js.map +1 -1
  340. package/dist/engine/permissions/permissionWorkspaceGranted.d.ts +7 -0
  341. package/dist/engine/permissions/permissionWorkspaceGranted.d.ts.map +1 -0
  342. package/dist/engine/permissions/permissionWorkspaceGranted.js +12 -0
  343. package/dist/engine/permissions/permissionWorkspaceGranted.js.map +1 -0
  344. package/dist/engine/permissions/permissionWorkspaceGranted.spec.d.ts +2 -0
  345. package/dist/engine/permissions/permissionWorkspaceGranted.spec.d.ts.map +1 -0
  346. package/dist/engine/permissions/permissionWorkspaceGranted.spec.js +35 -0
  347. package/dist/engine/permissions/permissionWorkspaceGranted.spec.js.map +1 -0
  348. package/dist/engine/permissions/permissionWorkspacePathResolve.d.ts +7 -0
  349. package/dist/engine/permissions/permissionWorkspacePathResolve.d.ts.map +1 -0
  350. package/dist/engine/permissions/permissionWorkspacePathResolve.js +42 -0
  351. package/dist/engine/permissions/permissionWorkspacePathResolve.js.map +1 -0
  352. package/dist/engine/permissions/permissionWorkspacePathResolve.spec.d.ts +2 -0
  353. package/dist/engine/permissions/permissionWorkspacePathResolve.spec.d.ts.map +1 -0
  354. package/dist/engine/permissions/permissionWorkspacePathResolve.spec.js +36 -0
  355. package/dist/engine/permissions/permissionWorkspacePathResolve.spec.js.map +1 -0
  356. package/dist/engine/permissions.d.ts +1 -0
  357. package/dist/engine/permissions.d.ts.map +1 -1
  358. package/dist/engine/permissions.js +7 -0
  359. package/dist/engine/permissions.js.map +1 -1
  360. package/dist/engine/scheduling/gatePermissionsCheck.d.ts +1 -1
  361. package/dist/engine/scheduling/gatePermissionsCheck.js +5 -2
  362. package/dist/engine/scheduling/gatePermissionsCheck.js.map +1 -1
  363. package/dist/engine/scheduling/gatePermissionsCheck.spec.js +20 -1
  364. package/dist/engine/scheduling/gatePermissionsCheck.spec.js.map +1 -1
  365. package/dist/engine/signals/signals.d.ts +4 -0
  366. package/dist/engine/signals/signals.d.ts.map +1 -1
  367. package/dist/engine/signals/signals.js +24 -8
  368. package/dist/engine/signals/signals.js.map +1 -1
  369. package/dist/engine/signals/signals.spec.js +24 -0
  370. package/dist/engine/signals/signals.spec.js.map +1 -1
  371. package/dist/plugins/telegram/connector.d.ts.map +1 -1
  372. package/dist/plugins/telegram/connector.js +11 -1
  373. package/dist/plugins/telegram/connector.js.map +1 -1
  374. package/dist/plugins/telegram/connector.spec.js +40 -0
  375. package/dist/plugins/telegram/connector.spec.js.map +1 -1
  376. package/dist/plugins/upgrade/upgradeRestartRun.d.ts.map +1 -1
  377. package/dist/plugins/upgrade/upgradeRestartRun.js +96 -4
  378. package/dist/plugins/upgrade/upgradeRestartRun.js.map +1 -1
  379. package/dist/plugins/upgrade/upgradeRestartRun.spec.js +74 -11
  380. package/dist/plugins/upgrade/upgradeRestartRun.spec.js.map +1 -1
  381. package/dist/plugins/whatsapp/connector.d.ts.map +1 -1
  382. package/dist/plugins/whatsapp/connector.js +11 -1
  383. package/dist/plugins/whatsapp/connector.js.map +1 -1
  384. package/dist/prompts/ACTORS.md +24 -20
  385. package/dist/prompts/ARCHITECT.md +1 -1
  386. package/dist/prompts/PERMISSIONS.md +7 -2
  387. package/dist/prompts/REVIEWER.md +41 -0
  388. package/dist/prompts/SYSTEM.md +1 -1
  389. package/dist/sandbox/sandboxAppsAccessCheck.d.ts +12 -0
  390. package/dist/sandbox/sandboxAppsAccessCheck.d.ts.map +1 -0
  391. package/dist/sandbox/sandboxAppsAccessCheck.js +58 -0
  392. package/dist/sandbox/sandboxAppsAccessCheck.js.map +1 -0
  393. package/dist/sandbox/sandboxAppsDenyPathsBuild.d.ts +7 -0
  394. package/dist/sandbox/sandboxAppsDenyPathsBuild.d.ts.map +1 -0
  395. package/dist/sandbox/sandboxAppsDenyPathsBuild.js +44 -0
  396. package/dist/sandbox/sandboxAppsDenyPathsBuild.js.map +1 -0
  397. package/dist/sandbox/sandboxCanRead.d.ts.map +1 -1
  398. package/dist/sandbox/sandboxCanRead.js +5 -0
  399. package/dist/sandbox/sandboxCanRead.js.map +1 -1
  400. package/dist/sandbox/sandboxCanRead.spec.js +25 -0
  401. package/dist/sandbox/sandboxCanRead.spec.js.map +1 -1
  402. package/dist/sandbox/sandboxCanWrite.d.ts.map +1 -1
  403. package/dist/sandbox/sandboxCanWrite.js +5 -0
  404. package/dist/sandbox/sandboxCanWrite.js.map +1 -1
  405. package/dist/sandbox/sandboxCanWrite.spec.js +7 -0
  406. package/dist/sandbox/sandboxCanWrite.spec.js.map +1 -1
  407. package/dist/sandbox/sandboxFilesystemPolicyBuild.d.ts.map +1 -1
  408. package/dist/sandbox/sandboxFilesystemPolicyBuild.js +3 -1
  409. package/dist/sandbox/sandboxFilesystemPolicyBuild.js.map +1 -1
  410. package/dist/sandbox/sandboxFilesystemPolicyBuild.spec.js +37 -0
  411. package/dist/sandbox/sandboxFilesystemPolicyBuild.spec.js.map +1 -1
  412. package/dist/settings.d.ts +6 -1
  413. package/dist/settings.d.ts.map +1 -1
  414. package/dist/settings.js.map +1 -1
  415. package/dist/skills/skills/app-creator/SKILL.md +207 -0
  416. package/dist/skills/skills/app-creator/references/rules-patterns.md +36 -0
  417. package/dist/skills/skills/app-creator/references/workflows.md +32 -0
  418. package/dist/types.d.ts +2 -1
  419. package/dist/types.d.ts.map +1 -1
  420. package/package.json +1 -1
@@ -0,0 +1,27 @@
1
+ const APP_NAME_PATTERN = /^[a-z0-9]+(?:[-_][a-z0-9]+)*$/;
2
+ /**
3
+ * Validates and normalizes an app manifest.
4
+ * Expects: manifest fields are parsed from APP.md and not nullish.
5
+ */
6
+ export function appManifestValidate(manifest) {
7
+ const name = manifest.name.trim();
8
+ const title = manifest.title.trim();
9
+ const description = manifest.description.trim();
10
+ const systemPrompt = manifest.systemPrompt.trim();
11
+ if (!name || !title || !description || !systemPrompt) {
12
+ throw new Error("App manifest requires name, title, description, and systemPrompt.");
13
+ }
14
+ if (!APP_NAME_PATTERN.test(name)) {
15
+ throw new Error("App name must be username-style lowercase with optional dash or underscore separators.");
16
+ }
17
+ return {
18
+ name,
19
+ title,
20
+ description,
21
+ ...(manifest.model && manifest.model.trim().length > 0
22
+ ? { model: manifest.model.trim() }
23
+ : {}),
24
+ systemPrompt
25
+ };
26
+ }
27
+ //# sourceMappingURL=appManifestValidate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"appManifestValidate.js","sourceRoot":"","sources":["../../../sources/engine/apps/appManifestValidate.ts"],"names":[],"mappings":"AAEA,MAAM,gBAAgB,GAAG,+BAA+B,CAAC;AAEzD;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,QAAqB;IACvD,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IAClC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;IACpC,MAAM,WAAW,GAAG,QAAQ,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;IAChD,MAAM,YAAY,GAAG,QAAQ,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;IAClD,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,WAAW,IAAI,CAAC,YAAY,EAAE,CAAC;QACrD,MAAM,IAAI,KAAK,CAAC,mEAAmE,CAAC,CAAC;IACvF,CAAC;IACD,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CAAC,wFAAwF,CAAC,CAAC;IAC5G,CAAC;IAED,OAAO;QACL,IAAI;QACJ,KAAK;QACL,WAAW;QACX,GAAG,CAAC,QAAQ,CAAC,KAAK,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;YACpD,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE;YAClC,CAAC,CAAC,EAAE,CAAC;QACP,YAAY;KACb,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=appManifestValidate.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"appManifestValidate.spec.d.ts","sourceRoot":"","sources":["../../../sources/engine/apps/appManifestValidate.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,30 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { appManifestValidate } from "./appManifestValidate.js";
3
+ function baseManifest() {
4
+ return {
5
+ name: "github-reviewer",
6
+ title: "GitHub Reviewer",
7
+ description: "Reviews pull requests",
8
+ systemPrompt: "You are a focused PR review assistant."
9
+ };
10
+ }
11
+ describe("appManifestValidate", () => {
12
+ it("accepts valid manifests", () => {
13
+ const validated = appManifestValidate(baseManifest());
14
+ expect(validated.name).toBe("github-reviewer");
15
+ expect(validated.title).toBe("GitHub Reviewer");
16
+ expect(validated.description).toBe("Reviews pull requests");
17
+ expect(validated.systemPrompt).toBe("You are a focused PR review assistant.");
18
+ });
19
+ it("rejects missing required fields", () => {
20
+ const manifest = baseManifest();
21
+ manifest.systemPrompt = " ";
22
+ expect(() => appManifestValidate(manifest)).toThrow("App manifest requires name, title, description, and systemPrompt.");
23
+ });
24
+ it("rejects non username-style names", () => {
25
+ const manifest = baseManifest();
26
+ manifest.name = "GitHub Reviewer";
27
+ expect(() => appManifestValidate(manifest)).toThrow("App name must be username-style lowercase with optional dash or underscore separators.");
28
+ });
29
+ });
30
+ //# sourceMappingURL=appManifestValidate.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"appManifestValidate.spec.js","sourceRoot":"","sources":["../../../sources/engine/apps/appManifestValidate.spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAG9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAE/D,SAAS,YAAY;IACnB,OAAO;QACL,IAAI,EAAE,iBAAiB;QACvB,KAAK,EAAE,iBAAiB;QACxB,WAAW,EAAE,uBAAuB;QACpC,YAAY,EAAE,wCAAwC;KACvD,CAAC;AACJ,CAAC;AAED,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACnC,EAAE,CAAC,yBAAyB,EAAE,GAAG,EAAE;QACjC,MAAM,SAAS,GAAG,mBAAmB,CAAC,YAAY,EAAE,CAAC,CAAC;QAEtD,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC/C,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAChD,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QAC5D,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;IAChF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QACzC,MAAM,QAAQ,GAAG,YAAY,EAAE,CAAC;QAChC,QAAQ,CAAC,YAAY,GAAG,KAAK,CAAC;QAE9B,MAAM,CAAC,GAAG,EAAE,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CACjD,mEAAmE,CACpE,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC1C,MAAM,QAAQ,GAAG,YAAY,EAAE,CAAC;QAChC,QAAQ,CAAC,IAAI,GAAG,iBAAiB,CAAC;QAElC,MAAM,CAAC,GAAG,EAAE,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CACjD,wFAAwF,CACzF,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { SessionPermissions } from "@/types";
2
+ /**
3
+ * Builds locked-down session permissions for an app agent.
4
+ * Expects: workspaceDir is absolute; appId is a validated app id.
5
+ */
6
+ export declare function appPermissionBuild(workspaceDir: string, appId: string): Promise<SessionPermissions>;
7
+ //# sourceMappingURL=appPermissionBuild.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"appPermissionBuild.d.ts","sourceRoot":"","sources":["../../../sources/engine/apps/appPermissionBuild.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAKlD;;;GAGG;AACH,wBAAsB,kBAAkB,CACtC,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,kBAAkB,CAAC,CAoB7B"}
@@ -0,0 +1,28 @@
1
+ import { promises as fs } from "node:fs";
2
+ import path from "node:path";
3
+ import { permissionAccessApply } from "../permissions/permissionAccessApply.js";
4
+ import { permissionAccessParse } from "../permissions/permissionAccessParse.js";
5
+ import { appPermissionStateRead } from "./appPermissionStateRead.js";
6
+ /**
7
+ * Builds locked-down session permissions for an app agent.
8
+ * Expects: workspaceDir is absolute; appId is a validated app id.
9
+ */
10
+ export async function appPermissionBuild(workspaceDir, appId) {
11
+ const resolvedWorkspace = path.resolve(workspaceDir);
12
+ const appDataDir = path.join(resolvedWorkspace, "apps", appId, "data");
13
+ await fs.mkdir(appDataDir, { recursive: true });
14
+ const permissions = {
15
+ workspaceDir: resolvedWorkspace,
16
+ workingDir: appDataDir,
17
+ writeDirs: [appDataDir],
18
+ readDirs: [resolvedWorkspace],
19
+ network: false,
20
+ events: false
21
+ };
22
+ const sharedPermissions = await appPermissionStateRead(resolvedWorkspace, appId);
23
+ for (const permission of sharedPermissions) {
24
+ permissionAccessApply(permissions, permissionAccessParse(permission));
25
+ }
26
+ return permissions;
27
+ }
28
+ //# sourceMappingURL=appPermissionBuild.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"appPermissionBuild.js","sourceRoot":"","sources":["../../../sources/engine/apps/appPermissionBuild.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,IAAI,MAAM,WAAW,CAAC;AAG7B,OAAO,EAAE,qBAAqB,EAAE,MAAM,yCAAyC,CAAC;AAChF,OAAO,EAAE,qBAAqB,EAAE,MAAM,yCAAyC,CAAC;AAChF,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAErE;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,YAAoB,EACpB,KAAa;IAEb,MAAM,iBAAiB,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IACrD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IACvE,MAAM,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEhD,MAAM,WAAW,GAAuB;QACtC,YAAY,EAAE,iBAAiB;QAC/B,UAAU,EAAE,UAAU;QACtB,SAAS,EAAE,CAAC,UAAU,CAAC;QACvB,QAAQ,EAAE,CAAC,iBAAiB,CAAC;QAC7B,OAAO,EAAE,KAAK;QACd,MAAM,EAAE,KAAK;KACd,CAAC;IAEF,MAAM,iBAAiB,GAAG,MAAM,sBAAsB,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAC;IACjF,KAAK,MAAM,UAAU,IAAI,iBAAiB,EAAE,CAAC;QAC3C,qBAAqB,CAAC,WAAW,EAAE,qBAAqB,CAAC,UAAU,CAAC,CAAC,CAAC;IACxE,CAAC;IAED,OAAO,WAAW,CAAC;AACrB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=appPermissionBuild.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"appPermissionBuild.spec.d.ts","sourceRoot":"","sources":["../../../sources/engine/apps/appPermissionBuild.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,44 @@
1
+ import { afterEach, beforeEach, describe, expect, it } from "vitest";
2
+ import { promises as fs } from "node:fs";
3
+ import os from "node:os";
4
+ import path from "node:path";
5
+ import { appPermissionBuild } from "./appPermissionBuild.js";
6
+ import { appPermissionStateWrite } from "./appPermissionStateWrite.js";
7
+ describe("appPermissionBuild", () => {
8
+ let workspaceDir;
9
+ beforeEach(async () => {
10
+ workspaceDir = await fs.mkdtemp(path.join(os.tmpdir(), "daycare-app-permissions-"));
11
+ });
12
+ afterEach(async () => {
13
+ await fs.rm(workspaceDir, { recursive: true, force: true });
14
+ });
15
+ it("builds app-scoped permissions and creates data dir", async () => {
16
+ const permissions = await appPermissionBuild(workspaceDir, "github-reviewer");
17
+ const expectedDataDir = path.join(workspaceDir, "apps", "github-reviewer", "data");
18
+ expect(permissions).toEqual({
19
+ workspaceDir: path.resolve(workspaceDir),
20
+ workingDir: expectedDataDir,
21
+ writeDirs: [expectedDataDir],
22
+ readDirs: [path.resolve(workspaceDir)],
23
+ network: false,
24
+ events: false
25
+ });
26
+ const stat = await fs.stat(expectedDataDir);
27
+ expect(stat.isDirectory()).toBe(true);
28
+ });
29
+ it("merges shared app permissions persisted in app state", async () => {
30
+ await appPermissionStateWrite(workspaceDir, "github-reviewer", [
31
+ "@workspace",
32
+ "@network",
33
+ "@read:/tmp/daycare-app-read",
34
+ "@write:/tmp/daycare-app-write"
35
+ ]);
36
+ const permissions = await appPermissionBuild(workspaceDir, "github-reviewer");
37
+ expect(permissions.network).toBe(true);
38
+ expect(permissions.readDirs).toContain("/tmp/daycare-app-read");
39
+ expect(permissions.readDirs).toContain("/tmp/daycare-app-write");
40
+ expect(permissions.writeDirs).toContain(path.resolve(workspaceDir));
41
+ expect(permissions.writeDirs).toContain("/tmp/daycare-app-write");
42
+ });
43
+ });
44
+ //# sourceMappingURL=appPermissionBuild.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"appPermissionBuild.spec.js","sourceRoot":"","sources":["../../../sources/engine/apps/appPermissionBuild.spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AACrE,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAEvE,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAClC,IAAI,YAAoB,CAAC;IAEzB,UAAU,CAAC,KAAK,IAAI,EAAE;QACpB,YAAY,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,0BAA0B,CAAC,CAAC,CAAC;IACtF,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,KAAK,IAAI,EAAE;QACnB,MAAM,EAAE,CAAC,EAAE,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;QAClE,MAAM,WAAW,GAAG,MAAM,kBAAkB,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC;QAC9E,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,CAAC,CAAC;QAEnF,MAAM,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC;YAC1B,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;YACxC,UAAU,EAAE,eAAe;YAC3B,SAAS,EAAE,CAAC,eAAe,CAAC;YAC5B,QAAQ,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;YACtC,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,KAAK;SACd,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAC5C,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;QACpE,MAAM,uBAAuB,CAAC,YAAY,EAAE,iBAAiB,EAAE;YAC7D,YAAY;YACZ,UAAU;YACV,6BAA6B;YAC7B,+BAA+B;SAChC,CAAC,CAAC;QAEH,MAAM,WAAW,GAAG,MAAM,kBAAkB,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC;QAC9E,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvC,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,uBAAuB,CAAC,CAAC;QAChE,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,wBAAwB,CAAC,CAAC;QACjE,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC;QACpE,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,wBAAwB,CAAC,CAAC;IACpE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { PermissionAccess } from "@/types";
2
+ /**
3
+ * Grants one shared permission tag for an app and persists it in app state.
4
+ * Expects: workspaceDir/appId point to an installed app workspace.
5
+ */
6
+ export declare function appPermissionStateGrant(workspaceDir: string, appId: string, access: PermissionAccess): Promise<string[]>;
7
+ //# sourceMappingURL=appPermissionStateGrant.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"appPermissionStateGrant.d.ts","sourceRoot":"","sources":["../../../sources/engine/apps/appPermissionStateGrant.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAKhD;;;GAGG;AACH,wBAAsB,uBAAuB,CAC3C,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,gBAAgB,GACvB,OAAO,CAAC,MAAM,EAAE,CAAC,CAKnB"}
@@ -0,0 +1,14 @@
1
+ import { permissionFormatTag } from "../permissions/permissionFormatTag.js";
2
+ import { appPermissionStateRead } from "./appPermissionStateRead.js";
3
+ import { appPermissionStateWrite } from "./appPermissionStateWrite.js";
4
+ /**
5
+ * Grants one shared permission tag for an app and persists it in app state.
6
+ * Expects: workspaceDir/appId point to an installed app workspace.
7
+ */
8
+ export async function appPermissionStateGrant(workspaceDir, appId, access) {
9
+ const current = await appPermissionStateRead(workspaceDir, appId);
10
+ const next = Array.from(new Set([...current, permissionFormatTag(access)]));
11
+ await appPermissionStateWrite(workspaceDir, appId, next);
12
+ return next;
13
+ }
14
+ //# sourceMappingURL=appPermissionStateGrant.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"appPermissionStateGrant.js","sourceRoot":"","sources":["../../../sources/engine/apps/appPermissionStateGrant.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,uCAAuC,CAAC;AAC5E,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAEvE;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,YAAoB,EACpB,KAAa,EACb,MAAwB;IAExB,MAAM,OAAO,GAAG,MAAM,sBAAsB,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;IAClE,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5E,MAAM,uBAAuB,CAAC,YAAY,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IACzD,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=appPermissionStateGrant.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"appPermissionStateGrant.spec.d.ts","sourceRoot":"","sources":["../../../sources/engine/apps/appPermissionStateGrant.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,33 @@
1
+ import { promises as fs } from "node:fs";
2
+ import os from "node:os";
3
+ import path from "node:path";
4
+ import { afterEach, beforeEach, describe, expect, it } from "vitest";
5
+ import { appPermissionStateGrant } from "./appPermissionStateGrant.js";
6
+ import { appPermissionStatePathBuild } from "./appPermissionStatePathBuild.js";
7
+ import { appPermissionStateRead } from "./appPermissionStateRead.js";
8
+ describe("appPermissionStateGrant", () => {
9
+ let workspaceDir;
10
+ beforeEach(async () => {
11
+ workspaceDir = await fs.mkdtemp(path.join(os.tmpdir(), "daycare-app-state-"));
12
+ });
13
+ afterEach(async () => {
14
+ await fs.rm(workspaceDir, { recursive: true, force: true });
15
+ });
16
+ it("persists shared app permissions in app workspace state.json", async () => {
17
+ await appPermissionStateGrant(workspaceDir, "github-reviewer", { kind: "workspace" });
18
+ await appPermissionStateGrant(workspaceDir, "github-reviewer", { kind: "network" });
19
+ await appPermissionStateGrant(workspaceDir, "github-reviewer", {
20
+ kind: "read",
21
+ path: "/tmp/daycare-app-read"
22
+ });
23
+ await appPermissionStateGrant(workspaceDir, "github-reviewer", {
24
+ kind: "network"
25
+ });
26
+ const statePath = appPermissionStatePathBuild(workspaceDir, "github-reviewer");
27
+ const stat = await fs.stat(statePath);
28
+ expect(stat.isFile()).toBe(true);
29
+ const tags = await appPermissionStateRead(workspaceDir, "github-reviewer");
30
+ expect(tags).toEqual(["@workspace", "@network", "@read:/tmp/daycare-app-read"]);
31
+ });
32
+ });
33
+ //# sourceMappingURL=appPermissionStateGrant.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"appPermissionStateGrant.spec.js","sourceRoot":"","sources":["../../../sources/engine/apps/appPermissionStateGrant.spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAErE,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAC/E,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAErE,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;IACvC,IAAI,YAAoB,CAAC;IAEzB,UAAU,CAAC,KAAK,IAAI,EAAE;QACpB,YAAY,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,oBAAoB,CAAC,CAAC,CAAC;IAChF,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,KAAK,IAAI,EAAE;QACnB,MAAM,EAAE,CAAC,EAAE,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6DAA6D,EAAE,KAAK,IAAI,EAAE;QAC3E,MAAM,uBAAuB,CAAC,YAAY,EAAE,iBAAiB,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;QACtF,MAAM,uBAAuB,CAAC,YAAY,EAAE,iBAAiB,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;QACpF,MAAM,uBAAuB,CAAC,YAAY,EAAE,iBAAiB,EAAE;YAC7D,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,uBAAuB;SAC9B,CAAC,CAAC;QACH,MAAM,uBAAuB,CAAC,YAAY,EAAE,iBAAiB,EAAE;YAC7D,IAAI,EAAE,SAAS;SAChB,CAAC,CAAC;QAEH,MAAM,SAAS,GAAG,2BAA2B,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC;QAC/E,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACtC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEjC,MAAM,IAAI,GAAG,MAAM,sBAAsB,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC;QAC3E,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,YAAY,EAAE,UAAU,EAAE,6BAA6B,CAAC,CAAC,CAAC;IAClF,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Builds the app permission state file path under the app workspace.
3
+ * Expects: workspaceDir is absolute; appId is a validated app id.
4
+ */
5
+ export declare function appPermissionStatePathBuild(workspaceDir: string, appId: string): string;
6
+ //# sourceMappingURL=appPermissionStatePathBuild.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"appPermissionStatePathBuild.d.ts","sourceRoot":"","sources":["../../../sources/engine/apps/appPermissionStatePathBuild.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,wBAAgB,2BAA2B,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAEvF"}
@@ -0,0 +1,9 @@
1
+ import path from "node:path";
2
+ /**
3
+ * Builds the app permission state file path under the app workspace.
4
+ * Expects: workspaceDir is absolute; appId is a validated app id.
5
+ */
6
+ export function appPermissionStatePathBuild(workspaceDir, appId) {
7
+ return path.join(path.resolve(workspaceDir), "apps", appId, "state.json");
8
+ }
9
+ //# sourceMappingURL=appPermissionStatePathBuild.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"appPermissionStatePathBuild.js","sourceRoot":"","sources":["../../../sources/engine/apps/appPermissionStatePathBuild.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B;;;GAGG;AACH,MAAM,UAAU,2BAA2B,CAAC,YAAoB,EAAE,KAAa;IAC7E,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC;AAC5E,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Reads shared app permission tags from app workspace state.
3
+ * Expects: workspaceDir is absolute; appId is a validated app id.
4
+ */
5
+ export declare function appPermissionStateRead(workspaceDir: string, appId: string): Promise<string[]>;
6
+ //# sourceMappingURL=appPermissionStateRead.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"appPermissionStateRead.d.ts","sourceRoot":"","sources":["../../../sources/engine/apps/appPermissionStateRead.ts"],"names":[],"mappings":"AAeA;;;GAGG;AACH,wBAAsB,sBAAsB,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAsBnG"}
@@ -0,0 +1,40 @@
1
+ import { promises as fs } from "node:fs";
2
+ import { z } from "zod";
3
+ import { permissionAccessParse } from "../permissions/permissionAccessParse.js";
4
+ import { permissionFormatTag } from "../permissions/permissionFormatTag.js";
5
+ import { appPermissionStatePathBuild } from "./appPermissionStatePathBuild.js";
6
+ const appPermissionStateSchema = z
7
+ .object({
8
+ permissions: z.array(z.string().min(1)).optional(),
9
+ updatedAt: z.number().int().optional()
10
+ })
11
+ .strip();
12
+ /**
13
+ * Reads shared app permission tags from app workspace state.
14
+ * Expects: workspaceDir is absolute; appId is a validated app id.
15
+ */
16
+ export async function appPermissionStateRead(workspaceDir, appId) {
17
+ const filePath = appPermissionStatePathBuild(workspaceDir, appId);
18
+ let raw = "";
19
+ try {
20
+ raw = await fs.readFile(filePath, "utf8");
21
+ }
22
+ catch (error) {
23
+ if (error.code === "ENOENT") {
24
+ return [];
25
+ }
26
+ throw error;
27
+ }
28
+ const parsed = appPermissionStateSchema.parse(JSON.parse(raw));
29
+ const next = new Set();
30
+ for (const permission of parsed.permissions ?? []) {
31
+ try {
32
+ next.add(permissionFormatTag(permissionAccessParse(permission)));
33
+ }
34
+ catch {
35
+ // Skip invalid persisted tags to keep startup resilient.
36
+ }
37
+ }
38
+ return [...next];
39
+ }
40
+ //# sourceMappingURL=appPermissionStateRead.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"appPermissionStateRead.js","sourceRoot":"","sources":["../../../sources/engine/apps/appPermissionStateRead.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AAEzC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,qBAAqB,EAAE,MAAM,yCAAyC,CAAC;AAChF,OAAO,EAAE,mBAAmB,EAAE,MAAM,uCAAuC,CAAC;AAC5E,OAAO,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAE/E,MAAM,wBAAwB,GAAG,CAAC;KAC/B,MAAM,CAAC;IACN,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IAClD,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;CACvC,CAAC;KACD,KAAK,EAAE,CAAC;AAEX;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,YAAoB,EAAE,KAAa;IAC9E,MAAM,QAAQ,GAAG,2BAA2B,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;IAClE,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,IAAI,CAAC;QACH,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC5C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACvD,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;IAED,MAAM,MAAM,GAAG,wBAAwB,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAY,CAAC,CAAC;IAC1E,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,KAAK,MAAM,UAAU,IAAI,MAAM,CAAC,WAAW,IAAI,EAAE,EAAE,CAAC;QAClD,IAAI,CAAC;YACH,IAAI,CAAC,GAAG,CAAC,mBAAmB,CAAC,qBAAqB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QACnE,CAAC;QAAC,MAAM,CAAC;YACP,yDAAyD;QAC3D,CAAC;IACH,CAAC;IACD,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;AACnB,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Persists shared app permission tags to app workspace state.
3
+ * Expects: permission tags are parseable by permissionAccessParse.
4
+ */
5
+ export declare function appPermissionStateWrite(workspaceDir: string, appId: string, permissions: string[]): Promise<void>;
6
+ //# sourceMappingURL=appPermissionStateWrite.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"appPermissionStateWrite.d.ts","sourceRoot":"","sources":["../../../sources/engine/apps/appPermissionStateWrite.ts"],"names":[],"mappings":"AAQA;;;GAGG;AACH,wBAAsB,uBAAuB,CAC3C,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EAAE,GACpB,OAAO,CAAC,IAAI,CAAC,CAaf"}
@@ -0,0 +1,32 @@
1
+ import { promises as fs } from "node:fs";
2
+ import path from "node:path";
3
+ import { permissionAccessParse } from "../permissions/permissionAccessParse.js";
4
+ import { permissionFormatTag } from "../permissions/permissionFormatTag.js";
5
+ import { atomicWrite } from "../../util/atomicWrite.js";
6
+ import { appPermissionStatePathBuild } from "./appPermissionStatePathBuild.js";
7
+ /**
8
+ * Persists shared app permission tags to app workspace state.
9
+ * Expects: permission tags are parseable by permissionAccessParse.
10
+ */
11
+ export async function appPermissionStateWrite(workspaceDir, appId, permissions) {
12
+ const filePath = appPermissionStatePathBuild(workspaceDir, appId);
13
+ const normalized = permissionTagsNormalize(permissions);
14
+ await fs.mkdir(path.dirname(filePath), { recursive: true });
15
+ const payload = `${JSON.stringify({
16
+ permissions: normalized,
17
+ updatedAt: Date.now()
18
+ }, null, 2)}\n`;
19
+ await atomicWrite(filePath, payload);
20
+ }
21
+ function permissionTagsNormalize(permissions) {
22
+ const next = new Set();
23
+ for (const permission of permissions) {
24
+ const trimmed = permission.trim();
25
+ if (!trimmed) {
26
+ continue;
27
+ }
28
+ next.add(permissionFormatTag(permissionAccessParse(trimmed)));
29
+ }
30
+ return [...next];
31
+ }
32
+ //# sourceMappingURL=appPermissionStateWrite.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"appPermissionStateWrite.js","sourceRoot":"","sources":["../../../sources/engine/apps/appPermissionStateWrite.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,qBAAqB,EAAE,MAAM,yCAAyC,CAAC;AAChF,OAAO,EAAE,mBAAmB,EAAE,MAAM,uCAAuC,CAAC;AAC5E,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAE/E;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,YAAoB,EACpB,KAAa,EACb,WAAqB;IAErB,MAAM,QAAQ,GAAG,2BAA2B,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;IAClE,MAAM,UAAU,GAAG,uBAAuB,CAAC,WAAW,CAAC,CAAC;IACxD,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5D,MAAM,OAAO,GAAG,GAAG,IAAI,CAAC,SAAS,CAC/B;QACE,WAAW,EAAE,UAAU;QACvB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;KACtB,EACD,IAAI,EACJ,CAAC,CACF,IAAI,CAAC;IACN,MAAM,WAAW,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;AACvC,CAAC;AAED,SAAS,uBAAuB,CAAC,WAAqB;IACpD,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;QACrC,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC;QAClC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,SAAS;QACX,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,mBAAmB,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAChE,CAAC;IACD,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;AACnB,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { AppPermissions } from "./appTypes.js";
2
+ /**
3
+ * Parses PERMISSIONS.md content into an AppPermissions shape.
4
+ * Expects: markdown contains `## Source Intent` and `## Rules` sections.
5
+ */
6
+ export declare function appPermissionsParse(content: string): AppPermissions;
7
+ //# sourceMappingURL=appPermissionsParse.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"appPermissionsParse.d.ts","sourceRoot":"","sources":["../../../sources/engine/apps/appPermissionsParse.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAW,MAAM,eAAe,CAAC;AAE7D;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,cAAc,CAgBnE"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Parses PERMISSIONS.md content into an AppPermissions shape.
3
+ * Expects: markdown contains `## Source Intent` and `## Rules` sections.
4
+ */
5
+ export function appPermissionsParse(content) {
6
+ const sourceIntent = markdownSectionRead(content, "Source Intent", 2);
7
+ if (!sourceIntent) {
8
+ throw new Error("PERMISSIONS.md must include a non-empty `## Source Intent` section.");
9
+ }
10
+ const rulesBody = markdownSectionRead(content, "Rules", 2);
11
+ const allowBody = markdownSectionRead(rulesBody, "Allow", 3);
12
+ const denyBody = markdownSectionRead(rulesBody, "Deny", 3);
13
+ return {
14
+ sourceIntent,
15
+ rules: {
16
+ allow: markdownRulesParse(allowBody),
17
+ deny: markdownRulesParse(denyBody)
18
+ }
19
+ };
20
+ }
21
+ function markdownSectionRead(markdown, heading, level) {
22
+ const lines = markdown.split("\n");
23
+ const escapedHeading = heading.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
24
+ const headingPattern = new RegExp(`^${"#".repeat(level)}\\s+${escapedHeading}\\s*$`, "i");
25
+ const stopPattern = level === 2
26
+ ? /^##\s+/
27
+ : /^##\s+|^###\s+/;
28
+ let collecting = false;
29
+ const sectionLines = [];
30
+ for (const line of lines) {
31
+ if (!collecting) {
32
+ if (headingPattern.test(line.trim())) {
33
+ collecting = true;
34
+ }
35
+ continue;
36
+ }
37
+ if (stopPattern.test(line.trim())) {
38
+ break;
39
+ }
40
+ sectionLines.push(line);
41
+ }
42
+ return sectionLines.join("\n").trim();
43
+ }
44
+ function markdownRulesParse(body) {
45
+ if (!body) {
46
+ return [];
47
+ }
48
+ const rules = [];
49
+ for (const line of body.split("\n")) {
50
+ const trimmed = line.trim();
51
+ if (!trimmed.startsWith("- ")) {
52
+ continue;
53
+ }
54
+ const text = trimmed.slice(2).trim();
55
+ if (!text) {
56
+ continue;
57
+ }
58
+ rules.push({ text });
59
+ }
60
+ return rules;
61
+ }
62
+ //# sourceMappingURL=appPermissionsParse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"appPermissionsParse.js","sourceRoot":"","sources":["../../../sources/engine/apps/appPermissionsParse.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,OAAe;IACjD,MAAM,YAAY,GAAG,mBAAmB,CAAC,OAAO,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC;IACtE,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,qEAAqE,CAAC,CAAC;IACzF,CAAC;IAED,MAAM,SAAS,GAAG,mBAAmB,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;IAC3D,MAAM,SAAS,GAAG,mBAAmB,CAAC,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;IAC7D,MAAM,QAAQ,GAAG,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;IAC3D,OAAO;QACL,YAAY;QACZ,KAAK,EAAE;YACL,KAAK,EAAE,kBAAkB,CAAC,SAAS,CAAC;YACpC,IAAI,EAAE,kBAAkB,CAAC,QAAQ,CAAC;SACnC;KACF,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB,CAC1B,QAAgB,EAChB,OAAe,EACf,KAAY;IAEZ,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACnC,MAAM,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;IACtE,MAAM,cAAc,GAAG,IAAI,MAAM,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,cAAc,OAAO,EAAE,GAAG,CAAC,CAAC;IAC1F,MAAM,WAAW,GAAG,KAAK,KAAK,CAAC;QAC7B,CAAC,CAAC,QAAQ;QACV,CAAC,CAAC,gBAAgB,CAAC;IACrB,IAAI,UAAU,GAAG,KAAK,CAAC;IACvB,MAAM,YAAY,GAAa,EAAE,CAAC;IAClC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,IAAI,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;gBACrC,UAAU,GAAG,IAAI,CAAC;YACpB,CAAC;YACD,SAAS;QACX,CAAC;QACD,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;YAClC,MAAM;QACR,CAAC;QACD,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IACD,OAAO,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;AACxC,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAY;IACtC,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,MAAM,KAAK,GAAc,EAAE,CAAC;IAC5B,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACpC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9B,SAAS;QACX,CAAC;QACD,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACrC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,SAAS;QACX,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;IACvB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=appPermissionsParse.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"appPermissionsParse.spec.d.ts","sourceRoot":"","sources":["../../../sources/engine/apps/appPermissionsParse.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,31 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { appPermissionsParse } from "./appPermissionsParse.js";
3
+ describe("appPermissionsParse", () => {
4
+ it("parses source intent and allow/deny rules", () => {
5
+ const permissions = appPermissionsParse([
6
+ "## Source Intent",
7
+ "",
8
+ "Review pull requests safely.",
9
+ "",
10
+ "## Rules",
11
+ "",
12
+ "### Allow",
13
+ "- Read files",
14
+ "",
15
+ "### Deny",
16
+ "- Delete files"
17
+ ].join("\n"));
18
+ expect(permissions).toEqual({
19
+ sourceIntent: "Review pull requests safely.",
20
+ rules: {
21
+ allow: [{ text: "Read files" }],
22
+ deny: [{ text: "Delete files" }]
23
+ }
24
+ });
25
+ });
26
+ it("throws when source intent is missing", () => {
27
+ expect(() => appPermissionsParse("## Rules\n\n### Allow\n- Read files\n\n### Deny\n- Delete files"))
28
+ .toThrow("PERMISSIONS.md must include a non-empty `## Source Intent` section.");
29
+ });
30
+ });
31
+ //# sourceMappingURL=appPermissionsParse.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"appPermissionsParse.spec.js","sourceRoot":"","sources":["../../../sources/engine/apps/appPermissionsParse.spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAE9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAE/D,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACnC,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACnD,MAAM,WAAW,GAAG,mBAAmB,CACrC;YACE,kBAAkB;YAClB,EAAE;YACF,8BAA8B;YAC9B,EAAE;YACF,UAAU;YACV,EAAE;YACF,WAAW;YACX,cAAc;YACd,EAAE;YACF,UAAU;YACV,gBAAgB;SACjB,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;QAEF,MAAM,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC;YAC1B,YAAY,EAAE,8BAA8B;YAC5C,KAAK,EAAE;gBACL,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;gBAC/B,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC;aACjC;SACF,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC9C,MAAM,CAAC,GAAG,EAAE,CAAC,mBAAmB,CAAC,iEAAiE,CAAC,CAAC;aACjG,OAAO,CAAC,qEAAqE,CAAC,CAAC;IACpF,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { AppPermissions } from "./appTypes.js";
2
+ /**
3
+ * Serializes app permissions back to PERMISSIONS.md markdown format.
4
+ * Expects: permissions have already been validated and normalized.
5
+ */
6
+ export declare function appPermissionsSerialize(permissions: AppPermissions): string;
7
+ //# sourceMappingURL=appPermissionsSerialize.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"appPermissionsSerialize.d.ts","sourceRoot":"","sources":["../../../sources/engine/apps/appPermissionsSerialize.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAEpD;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,WAAW,EAAE,cAAc,GAAG,MAAM,CAc3E"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Serializes app permissions back to PERMISSIONS.md markdown format.
3
+ * Expects: permissions have already been validated and normalized.
4
+ */
5
+ export function appPermissionsSerialize(permissions) {
6
+ return [
7
+ "## Source Intent",
8
+ "",
9
+ permissions.sourceIntent.trim(),
10
+ "",
11
+ "## Rules",
12
+ "",
13
+ "### Allow",
14
+ ...permissions.rules.allow.map((rule) => `- ${rule.text}`),
15
+ "",
16
+ "### Deny",
17
+ ...permissions.rules.deny.map((rule) => `- ${rule.text}`)
18
+ ].join("\n").trimEnd();
19
+ }
20
+ //# sourceMappingURL=appPermissionsSerialize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"appPermissionsSerialize.js","sourceRoot":"","sources":["../../../sources/engine/apps/appPermissionsSerialize.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,UAAU,uBAAuB,CAAC,WAA2B;IACjE,OAAO;QACL,kBAAkB;QAClB,EAAE;QACF,WAAW,CAAC,YAAY,CAAC,IAAI,EAAE;QAC/B,EAAE;QACF,UAAU;QACV,EAAE;QACF,WAAW;QACX,GAAG,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC;QAC1D,EAAE;QACF,UAAU;QACV,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC;KAC1D,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;AACzB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=appPermissionsSerialize.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"appPermissionsSerialize.spec.d.ts","sourceRoot":"","sources":["../../../sources/engine/apps/appPermissionsSerialize.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,20 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { appPermissionsSerialize } from "./appPermissionsSerialize.js";
3
+ describe("appPermissionsSerialize", () => {
4
+ it("serializes source intent and rules into markdown", () => {
5
+ const output = appPermissionsSerialize({
6
+ sourceIntent: "Review pull requests safely.",
7
+ rules: {
8
+ allow: [{ text: "Read files" }],
9
+ deny: [{ text: "Delete files" }]
10
+ }
11
+ });
12
+ expect(output).toContain("## Source Intent");
13
+ expect(output).toContain("Review pull requests safely.");
14
+ expect(output).toContain("### Allow");
15
+ expect(output).toContain("- Read files");
16
+ expect(output).toContain("### Deny");
17
+ expect(output).toContain("- Delete files");
18
+ });
19
+ });
20
+ //# sourceMappingURL=appPermissionsSerialize.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"appPermissionsSerialize.spec.js","sourceRoot":"","sources":["../../../sources/engine/apps/appPermissionsSerialize.spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAE9C,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAEvE,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;IACvC,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC1D,MAAM,MAAM,GAAG,uBAAuB,CAAC;YACrC,YAAY,EAAE,8BAA8B;YAC5C,KAAK,EAAE;gBACL,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;gBAC/B,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC;aACjC;SACF,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;QAC7C,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,8BAA8B,CAAC,CAAC;QACzD,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;QACtC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;QACzC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QACrC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { AppPermissions } from "./appTypes.js";
2
+ /**
3
+ * Validates and normalizes app permissions metadata.
4
+ * Expects: permissions were parsed from PERMISSIONS.md.
5
+ */
6
+ export declare function appPermissionsValidate(permissions: AppPermissions): AppPermissions;
7
+ //# sourceMappingURL=appPermissionsValidate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"appPermissionsValidate.d.ts","sourceRoot":"","sources":["../../../sources/engine/apps/appPermissionsValidate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAc,MAAM,eAAe,CAAC;AAEhE;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,cAAc,GAAG,cAAc,CAWlF"}