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.
- package/dist/config/configResolve.js +5 -0
- package/dist/config/configResolve.js.map +1 -1
- package/dist/config/configResolve.spec.js +10 -0
- package/dist/config/configResolve.spec.js.map +1 -1
- package/dist/config/configSettingsParse.d.ts.map +1 -1
- package/dist/config/configSettingsParse.js +3 -0
- package/dist/config/configSettingsParse.js.map +1 -1
- package/dist/engine/agents/agent.d.ts +1 -1
- package/dist/engine/agents/agent.d.ts.map +1 -1
- package/dist/engine/agents/agent.js +28 -22
- package/dist/engine/agents/agent.js.map +1 -1
- package/dist/engine/agents/agentSystem.d.ts +12 -0
- package/dist/engine/agents/agentSystem.d.ts.map +1 -1
- package/dist/engine/agents/agentSystem.js +218 -2
- package/dist/engine/agents/agentSystem.js.map +1 -1
- package/dist/engine/agents/agentSystem.spec.d.ts +2 -0
- package/dist/engine/agents/agentSystem.spec.d.ts.map +1 -0
- package/dist/engine/agents/agentSystem.spec.js +382 -0
- package/dist/engine/agents/agentSystem.spec.js.map +1 -0
- package/dist/engine/agents/ops/agentAppFolderPathResolve.d.ts +7 -0
- package/dist/engine/agents/ops/agentAppFolderPathResolve.d.ts.map +1 -0
- package/dist/engine/agents/ops/agentAppFolderPathResolve.js +12 -0
- package/dist/engine/agents/ops/agentAppFolderPathResolve.js.map +1 -0
- package/dist/engine/agents/ops/agentAppFolderPathResolve.spec.d.ts +2 -0
- package/dist/engine/agents/ops/agentAppFolderPathResolve.spec.d.ts.map +1 -0
- package/dist/engine/agents/ops/agentAppFolderPathResolve.spec.js +18 -0
- package/dist/engine/agents/ops/agentAppFolderPathResolve.spec.js.map +1 -0
- package/dist/engine/agents/ops/agentBackgroundList.d.ts.map +1 -1
- package/dist/engine/agents/ops/agentBackgroundList.js +10 -6
- package/dist/engine/agents/ops/agentBackgroundList.js.map +1 -1
- package/dist/engine/agents/ops/agentDescriptorLabel.d.ts.map +1 -1
- package/dist/engine/agents/ops/agentDescriptorLabel.js +13 -0
- package/dist/engine/agents/ops/agentDescriptorLabel.js.map +1 -1
- package/dist/engine/agents/ops/agentDescriptorLabel.spec.js +16 -0
- package/dist/engine/agents/ops/agentDescriptorLabel.spec.js.map +1 -1
- package/dist/engine/agents/ops/agentDescriptorRead.d.ts.map +1 -1
- package/dist/engine/agents/ops/agentDescriptorRead.js +10 -0
- package/dist/engine/agents/ops/agentDescriptorRead.js.map +1 -1
- package/dist/engine/agents/ops/agentDescriptorTypes.d.ts +7 -0
- package/dist/engine/agents/ops/agentDescriptorTypes.d.ts.map +1 -1
- package/dist/engine/agents/ops/agentInbox.d.ts +5 -0
- package/dist/engine/agents/ops/agentInbox.d.ts.map +1 -1
- package/dist/engine/agents/ops/agentInbox.js +9 -0
- package/dist/engine/agents/ops/agentInbox.js.map +1 -1
- package/dist/engine/agents/ops/agentLoopRun.d.ts +2 -2
- package/dist/engine/agents/ops/agentLoopRun.d.ts.map +1 -1
- package/dist/engine/agents/ops/agentLoopRun.js +18 -17
- package/dist/engine/agents/ops/agentLoopRun.js.map +1 -1
- package/dist/engine/agents/ops/agentLoopRun.spec.js.map +1 -1
- package/dist/engine/agents/ops/agentPromptResolve.d.ts +11 -0
- package/dist/engine/agents/ops/agentPromptResolve.d.ts.map +1 -0
- package/dist/engine/agents/ops/agentPromptResolve.js +28 -0
- package/dist/engine/agents/ops/agentPromptResolve.js.map +1 -0
- package/dist/engine/agents/ops/agentPromptResolve.spec.d.ts +2 -0
- package/dist/engine/agents/ops/agentPromptResolve.spec.d.ts.map +1 -0
- package/dist/engine/agents/ops/agentPromptResolve.spec.js +58 -0
- package/dist/engine/agents/ops/agentPromptResolve.spec.js.map +1 -0
- package/dist/engine/agents/ops/agentStateRead.d.ts.map +1 -1
- package/dist/engine/agents/ops/agentStateRead.js +2 -1
- package/dist/engine/agents/ops/agentStateRead.js.map +1 -1
- package/dist/engine/agents/ops/agentStateRead.spec.js +22 -0
- package/dist/engine/agents/ops/agentStateRead.spec.js.map +1 -1
- package/dist/engine/agents/ops/agentTypes.d.ts +3 -1
- package/dist/engine/agents/ops/agentTypes.d.ts.map +1 -1
- package/dist/engine/apps/appDiscover.d.ts +7 -0
- package/dist/engine/apps/appDiscover.d.ts.map +1 -0
- package/dist/engine/apps/appDiscover.js +67 -0
- package/dist/engine/apps/appDiscover.js.map +1 -0
- package/dist/engine/apps/appDiscover.spec.d.ts +2 -0
- package/dist/engine/apps/appDiscover.spec.d.ts.map +1 -0
- package/dist/engine/apps/appDiscover.spec.js +77 -0
- package/dist/engine/apps/appDiscover.spec.js.map +1 -0
- package/dist/engine/apps/appExecute.d.ts +19 -0
- package/dist/engine/apps/appExecute.d.ts.map +1 -0
- package/dist/engine/apps/appExecute.js +75 -0
- package/dist/engine/apps/appExecute.js.map +1 -0
- package/dist/engine/apps/appExecute.spec.d.ts +2 -0
- package/dist/engine/apps/appExecute.spec.d.ts.map +1 -0
- package/dist/engine/apps/appExecute.spec.js +252 -0
- package/dist/engine/apps/appExecute.spec.js.map +1 -0
- package/dist/engine/apps/appInstall.d.ts +7 -0
- package/dist/engine/apps/appInstall.d.ts.map +1 -0
- package/dist/engine/apps/appInstall.js +52 -0
- package/dist/engine/apps/appInstall.js.map +1 -0
- package/dist/engine/apps/appInstall.spec.d.ts +2 -0
- package/dist/engine/apps/appInstall.spec.d.ts.map +1 -0
- package/dist/engine/apps/appInstall.spec.js +127 -0
- package/dist/engine/apps/appInstall.spec.js.map +1 -0
- package/dist/engine/apps/appInstallToolBuild.d.ts +8 -0
- package/dist/engine/apps/appInstallToolBuild.d.ts.map +1 -0
- package/dist/engine/apps/appInstallToolBuild.js +42 -0
- package/dist/engine/apps/appInstallToolBuild.js.map +1 -0
- package/dist/engine/apps/appInstallToolBuild.spec.d.ts +2 -0
- package/dist/engine/apps/appInstallToolBuild.spec.d.ts.map +1 -0
- package/dist/engine/apps/appInstallToolBuild.spec.js +90 -0
- package/dist/engine/apps/appInstallToolBuild.spec.js.map +1 -0
- package/dist/engine/apps/appManager.d.ts +19 -0
- package/dist/engine/apps/appManager.d.ts.map +1 -0
- package/dist/engine/apps/appManager.js +45 -0
- package/dist/engine/apps/appManager.js.map +1 -0
- package/dist/engine/apps/appManager.spec.d.ts +2 -0
- package/dist/engine/apps/appManager.spec.d.ts.map +1 -0
- package/dist/engine/apps/appManager.spec.js +53 -0
- package/dist/engine/apps/appManager.spec.js.map +1 -0
- package/dist/engine/apps/appManifestParse.d.ts +7 -0
- package/dist/engine/apps/appManifestParse.d.ts.map +1 -0
- package/dist/engine/apps/appManifestParse.js +41 -0
- package/dist/engine/apps/appManifestParse.js.map +1 -0
- package/dist/engine/apps/appManifestParse.spec.d.ts +2 -0
- package/dist/engine/apps/appManifestParse.spec.d.ts.map +1 -0
- package/dist/engine/apps/appManifestParse.spec.js +60 -0
- package/dist/engine/apps/appManifestParse.spec.js.map +1 -0
- package/dist/engine/apps/appManifestSerialize.d.ts +7 -0
- package/dist/engine/apps/appManifestSerialize.d.ts.map +1 -0
- package/dist/engine/apps/appManifestSerialize.js +14 -0
- package/dist/engine/apps/appManifestSerialize.js.map +1 -0
- package/dist/engine/apps/appManifestValidate.d.ts +7 -0
- package/dist/engine/apps/appManifestValidate.d.ts.map +1 -0
- package/dist/engine/apps/appManifestValidate.js +27 -0
- package/dist/engine/apps/appManifestValidate.js.map +1 -0
- package/dist/engine/apps/appManifestValidate.spec.d.ts +2 -0
- package/dist/engine/apps/appManifestValidate.spec.d.ts.map +1 -0
- package/dist/engine/apps/appManifestValidate.spec.js +30 -0
- package/dist/engine/apps/appManifestValidate.spec.js.map +1 -0
- package/dist/engine/apps/appPermissionBuild.d.ts +7 -0
- package/dist/engine/apps/appPermissionBuild.d.ts.map +1 -0
- package/dist/engine/apps/appPermissionBuild.js +28 -0
- package/dist/engine/apps/appPermissionBuild.js.map +1 -0
- package/dist/engine/apps/appPermissionBuild.spec.d.ts +2 -0
- package/dist/engine/apps/appPermissionBuild.spec.d.ts.map +1 -0
- package/dist/engine/apps/appPermissionBuild.spec.js +44 -0
- package/dist/engine/apps/appPermissionBuild.spec.js.map +1 -0
- package/dist/engine/apps/appPermissionStateGrant.d.ts +7 -0
- package/dist/engine/apps/appPermissionStateGrant.d.ts.map +1 -0
- package/dist/engine/apps/appPermissionStateGrant.js +14 -0
- package/dist/engine/apps/appPermissionStateGrant.js.map +1 -0
- package/dist/engine/apps/appPermissionStateGrant.spec.d.ts +2 -0
- package/dist/engine/apps/appPermissionStateGrant.spec.d.ts.map +1 -0
- package/dist/engine/apps/appPermissionStateGrant.spec.js +33 -0
- package/dist/engine/apps/appPermissionStateGrant.spec.js.map +1 -0
- package/dist/engine/apps/appPermissionStatePathBuild.d.ts +6 -0
- package/dist/engine/apps/appPermissionStatePathBuild.d.ts.map +1 -0
- package/dist/engine/apps/appPermissionStatePathBuild.js +9 -0
- package/dist/engine/apps/appPermissionStatePathBuild.js.map +1 -0
- package/dist/engine/apps/appPermissionStateRead.d.ts +6 -0
- package/dist/engine/apps/appPermissionStateRead.d.ts.map +1 -0
- package/dist/engine/apps/appPermissionStateRead.js +40 -0
- package/dist/engine/apps/appPermissionStateRead.js.map +1 -0
- package/dist/engine/apps/appPermissionStateWrite.d.ts +6 -0
- package/dist/engine/apps/appPermissionStateWrite.d.ts.map +1 -0
- package/dist/engine/apps/appPermissionStateWrite.js +32 -0
- package/dist/engine/apps/appPermissionStateWrite.js.map +1 -0
- package/dist/engine/apps/appPermissionsParse.d.ts +7 -0
- package/dist/engine/apps/appPermissionsParse.d.ts.map +1 -0
- package/dist/engine/apps/appPermissionsParse.js +62 -0
- package/dist/engine/apps/appPermissionsParse.js.map +1 -0
- package/dist/engine/apps/appPermissionsParse.spec.d.ts +2 -0
- package/dist/engine/apps/appPermissionsParse.spec.d.ts.map +1 -0
- package/dist/engine/apps/appPermissionsParse.spec.js +31 -0
- package/dist/engine/apps/appPermissionsParse.spec.js.map +1 -0
- package/dist/engine/apps/appPermissionsSerialize.d.ts +7 -0
- package/dist/engine/apps/appPermissionsSerialize.d.ts.map +1 -0
- package/dist/engine/apps/appPermissionsSerialize.js +20 -0
- package/dist/engine/apps/appPermissionsSerialize.js.map +1 -0
- package/dist/engine/apps/appPermissionsSerialize.spec.d.ts +2 -0
- package/dist/engine/apps/appPermissionsSerialize.spec.d.ts.map +1 -0
- package/dist/engine/apps/appPermissionsSerialize.spec.js +20 -0
- package/dist/engine/apps/appPermissionsSerialize.spec.js.map +1 -0
- package/dist/engine/apps/appPermissionsValidate.d.ts +7 -0
- package/dist/engine/apps/appPermissionsValidate.d.ts.map +1 -0
- package/dist/engine/apps/appPermissionsValidate.js +34 -0
- package/dist/engine/apps/appPermissionsValidate.js.map +1 -0
- package/dist/engine/apps/appPermissionsValidate.spec.d.ts +2 -0
- package/dist/engine/apps/appPermissionsValidate.spec.d.ts.map +1 -0
- package/dist/engine/apps/appPermissionsValidate.spec.js +29 -0
- package/dist/engine/apps/appPermissionsValidate.spec.js.map +1 -0
- package/dist/engine/apps/appReviewPromptBuild.d.ts +22 -0
- package/dist/engine/apps/appReviewPromptBuild.d.ts.map +1 -0
- package/dist/engine/apps/appReviewPromptBuild.js +66 -0
- package/dist/engine/apps/appReviewPromptBuild.js.map +1 -0
- package/dist/engine/apps/appReviewPromptBuild.spec.d.ts +2 -0
- package/dist/engine/apps/appReviewPromptBuild.spec.d.ts.map +1 -0
- package/dist/engine/apps/appReviewPromptBuild.spec.js +49 -0
- package/dist/engine/apps/appReviewPromptBuild.spec.js.map +1 -0
- package/dist/engine/apps/appReviewProvidersResolve.d.ts +8 -0
- package/dist/engine/apps/appReviewProvidersResolve.d.ts.map +1 -0
- package/dist/engine/apps/appReviewProvidersResolve.js +30 -0
- package/dist/engine/apps/appReviewProvidersResolve.js.map +1 -0
- package/dist/engine/apps/appReviewProvidersResolve.spec.d.ts +2 -0
- package/dist/engine/apps/appReviewProvidersResolve.spec.d.ts.map +1 -0
- package/dist/engine/apps/appReviewProvidersResolve.spec.js +29 -0
- package/dist/engine/apps/appReviewProvidersResolve.spec.js.map +1 -0
- package/dist/engine/apps/appRuleApply.d.ts +20 -0
- package/dist/engine/apps/appRuleApply.d.ts.map +1 -0
- package/dist/engine/apps/appRuleApply.js +54 -0
- package/dist/engine/apps/appRuleApply.js.map +1 -0
- package/dist/engine/apps/appRuleApply.spec.d.ts +2 -0
- package/dist/engine/apps/appRuleApply.spec.d.ts.map +1 -0
- package/dist/engine/apps/appRuleApply.spec.js +87 -0
- package/dist/engine/apps/appRuleApply.spec.js.map +1 -0
- package/dist/engine/apps/appRuleToolBuild.d.ts +8 -0
- package/dist/engine/apps/appRuleToolBuild.d.ts.map +1 -0
- package/dist/engine/apps/appRuleToolBuild.js +98 -0
- package/dist/engine/apps/appRuleToolBuild.js.map +1 -0
- package/dist/engine/apps/appRuleToolBuild.spec.d.ts +2 -0
- package/dist/engine/apps/appRuleToolBuild.spec.d.ts.map +1 -0
- package/dist/engine/apps/appRuleToolBuild.spec.js +137 -0
- package/dist/engine/apps/appRuleToolBuild.spec.js.map +1 -0
- package/dist/engine/apps/appToolBuild.d.ts +8 -0
- package/dist/engine/apps/appToolBuild.d.ts.map +1 -0
- package/dist/engine/apps/appToolBuild.js +52 -0
- package/dist/engine/apps/appToolBuild.js.map +1 -0
- package/dist/engine/apps/appToolBuild.spec.d.ts +2 -0
- package/dist/engine/apps/appToolBuild.spec.d.ts.map +1 -0
- package/dist/engine/apps/appToolBuild.spec.js +29 -0
- package/dist/engine/apps/appToolBuild.spec.js.map +1 -0
- package/dist/engine/apps/appToolExecutorBuild.d.ts +32 -0
- package/dist/engine/apps/appToolExecutorBuild.d.ts.map +1 -0
- package/dist/engine/apps/appToolExecutorBuild.js +69 -0
- package/dist/engine/apps/appToolExecutorBuild.js.map +1 -0
- package/dist/engine/apps/appToolExecutorBuild.spec.d.ts +2 -0
- package/dist/engine/apps/appToolExecutorBuild.spec.d.ts.map +1 -0
- package/dist/engine/apps/appToolExecutorBuild.spec.js +227 -0
- package/dist/engine/apps/appToolExecutorBuild.spec.js.map +1 -0
- package/dist/engine/apps/appToolNameFormat.d.ts +6 -0
- package/dist/engine/apps/appToolNameFormat.d.ts.map +1 -0
- package/dist/engine/apps/appToolNameFormat.js +8 -0
- package/dist/engine/apps/appToolNameFormat.js.map +1 -0
- package/dist/engine/apps/appToolReview.d.ts +27 -0
- package/dist/engine/apps/appToolReview.d.ts.map +1 -0
- package/dist/engine/apps/appToolReview.js +53 -0
- package/dist/engine/apps/appToolReview.js.map +1 -0
- package/dist/engine/apps/appToolReview.spec.d.ts +2 -0
- package/dist/engine/apps/appToolReview.spec.d.ts.map +1 -0
- package/dist/engine/apps/appToolReview.spec.js +144 -0
- package/dist/engine/apps/appToolReview.spec.js.map +1 -0
- package/dist/engine/apps/appTypes.d.ts +30 -0
- package/dist/engine/apps/appTypes.d.ts.map +1 -0
- package/dist/engine/apps/appTypes.js +2 -0
- package/dist/engine/apps/appTypes.js.map +1 -0
- package/dist/engine/engine.d.ts +2 -0
- package/dist/engine/engine.d.ts.map +1 -1
- package/dist/engine/engine.js +12 -1
- package/dist/engine/engine.js.map +1 -1
- package/dist/engine/engine.spec.js +45 -0
- package/dist/engine/engine.spec.js.map +1 -1
- package/dist/engine/messages/incomingMessages.js +3 -0
- package/dist/engine/messages/incomingMessages.js.map +1 -1
- package/dist/engine/modules/connectors/types.d.ts +6 -1
- package/dist/engine/modules/connectors/types.d.ts.map +1 -1
- package/dist/engine/modules/rlm/rlmExecute.d.ts +2 -2
- package/dist/engine/modules/rlm/rlmExecute.d.ts.map +1 -1
- package/dist/engine/modules/rlm/rlmExecute.js +6 -1
- package/dist/engine/modules/rlm/rlmExecute.js.map +1 -1
- package/dist/engine/modules/rlm/rlmExecute.spec.js +14 -0
- package/dist/engine/modules/rlm/rlmExecute.spec.js.map +1 -1
- package/dist/engine/modules/rlm/rlmTool.d.ts +2 -2
- package/dist/engine/modules/rlm/rlmTool.d.ts.map +1 -1
- package/dist/engine/modules/rlm/rlmTool.js +3 -2
- package/dist/engine/modules/rlm/rlmTool.js.map +1 -1
- package/dist/engine/modules/rlm/rlmTool.spec.js +38 -2
- package/dist/engine/modules/rlm/rlmTool.spec.js.map +1 -1
- package/dist/engine/modules/toolResolver.d.ts +1 -0
- package/dist/engine/modules/toolResolver.d.ts.map +1 -1
- package/dist/engine/modules/toolResolver.js.map +1 -1
- package/dist/engine/modules/tools/background.d.ts.map +1 -1
- package/dist/engine/modules/tools/background.js +3 -1
- package/dist/engine/modules/tools/background.js.map +1 -1
- package/dist/engine/modules/tools/channelSendTool.js +3 -0
- package/dist/engine/modules/tools/channelSendTool.js.map +1 -1
- package/dist/engine/modules/tools/permissions.d.ts.map +1 -1
- package/dist/engine/modules/tools/permissions.js +57 -9
- package/dist/engine/modules/tools/permissions.js.map +1 -1
- package/dist/engine/modules/tools/permissions.spec.js +84 -0
- package/dist/engine/modules/tools/permissions.spec.js.map +1 -1
- package/dist/engine/modules/tools/signalEventsCsvToolBuild.d.ts +8 -0
- package/dist/engine/modules/tools/signalEventsCsvToolBuild.d.ts.map +1 -0
- package/dist/engine/modules/tools/signalEventsCsvToolBuild.js +101 -0
- package/dist/engine/modules/tools/signalEventsCsvToolBuild.js.map +1 -0
- package/dist/engine/modules/tools/signalEventsCsvToolBuild.spec.d.ts +2 -0
- package/dist/engine/modules/tools/signalEventsCsvToolBuild.spec.d.ts.map +1 -0
- package/dist/engine/modules/tools/signalEventsCsvToolBuild.spec.js +100 -0
- package/dist/engine/modules/tools/signalEventsCsvToolBuild.spec.js.map +1 -0
- package/dist/engine/modules/tools/types.d.ts +2 -0
- package/dist/engine/modules/tools/types.d.ts.map +1 -1
- package/dist/engine/permissions/permissionAccessAllows.d.ts +1 -1
- package/dist/engine/permissions/permissionAccessAllows.d.ts.map +1 -1
- package/dist/engine/permissions/permissionAccessAllows.js +35 -1
- package/dist/engine/permissions/permissionAccessAllows.js.map +1 -1
- package/dist/engine/permissions/permissionAccessAllows.spec.js +52 -0
- package/dist/engine/permissions/permissionAccessAllows.spec.js.map +1 -1
- package/dist/engine/permissions/permissionAccessApply.d.ts.map +1 -1
- package/dist/engine/permissions/permissionAccessApply.js +11 -0
- package/dist/engine/permissions/permissionAccessApply.js.map +1 -1
- package/dist/engine/permissions/permissionAccessApply.spec.js +15 -0
- package/dist/engine/permissions/permissionAccessApply.spec.js.map +1 -1
- package/dist/engine/permissions/permissionAccessParse.d.ts +1 -1
- package/dist/engine/permissions/permissionAccessParse.d.ts.map +1 -1
- package/dist/engine/permissions/permissionAccessParse.js +5 -2
- package/dist/engine/permissions/permissionAccessParse.js.map +1 -1
- package/dist/engine/permissions/permissionAccessParse.spec.js +2 -1
- package/dist/engine/permissions/permissionAccessParse.spec.js.map +1 -1
- package/dist/engine/permissions/permissionBuildCron.d.ts.map +1 -1
- package/dist/engine/permissions/permissionBuildCron.js +1 -0
- package/dist/engine/permissions/permissionBuildCron.js.map +1 -1
- package/dist/engine/permissions/permissionBuildDefault.d.ts.map +1 -1
- package/dist/engine/permissions/permissionBuildDefault.js +1 -0
- package/dist/engine/permissions/permissionBuildDefault.js.map +1 -1
- package/dist/engine/permissions/permissionBuildDefault.spec.js +1 -0
- package/dist/engine/permissions/permissionBuildDefault.spec.js.map +1 -1
- package/dist/engine/permissions/permissionDescribeDecision.d.ts.map +1 -1
- package/dist/engine/permissions/permissionDescribeDecision.js +3 -0
- package/dist/engine/permissions/permissionDescribeDecision.js.map +1 -1
- package/dist/engine/permissions/permissionDescribeDecision.spec.js +3 -0
- package/dist/engine/permissions/permissionDescribeDecision.spec.js.map +1 -1
- package/dist/engine/permissions/permissionFormatTag.d.ts.map +1 -1
- package/dist/engine/permissions/permissionFormatTag.js +3 -0
- package/dist/engine/permissions/permissionFormatTag.js.map +1 -1
- package/dist/engine/permissions/permissionFormatTag.spec.js +3 -0
- package/dist/engine/permissions/permissionFormatTag.spec.js.map +1 -1
- package/dist/engine/permissions/permissionMergeDefault.d.ts.map +1 -1
- package/dist/engine/permissions/permissionMergeDefault.js +1 -0
- package/dist/engine/permissions/permissionMergeDefault.js.map +1 -1
- package/dist/engine/permissions/permissionMergeDefault.spec.js +9 -0
- package/dist/engine/permissions/permissionMergeDefault.spec.js.map +1 -1
- package/dist/engine/permissions/permissionTagsApply.d.ts +1 -1
- package/dist/engine/permissions/permissionTagsApply.js +1 -1
- package/dist/engine/permissions/permissionTagsApply.spec.js +9 -1
- package/dist/engine/permissions/permissionTagsApply.spec.js.map +1 -1
- package/dist/engine/permissions/permissionTagsNormalize.d.ts +1 -1
- package/dist/engine/permissions/permissionTagsNormalize.d.ts.map +1 -1
- package/dist/engine/permissions/permissionTagsNormalize.js +4 -1
- package/dist/engine/permissions/permissionTagsNormalize.js.map +1 -1
- package/dist/engine/permissions/permissionTagsNormalize.spec.js +2 -1
- package/dist/engine/permissions/permissionTagsNormalize.spec.js.map +1 -1
- package/dist/engine/permissions/permissionTagsValidate.d.ts +1 -1
- package/dist/engine/permissions/permissionTagsValidate.js +1 -1
- package/dist/engine/permissions/permissionTagsValidate.spec.js +14 -0
- package/dist/engine/permissions/permissionTagsValidate.spec.js.map +1 -1
- package/dist/engine/permissions/permissionWorkspaceGranted.d.ts +7 -0
- package/dist/engine/permissions/permissionWorkspaceGranted.d.ts.map +1 -0
- package/dist/engine/permissions/permissionWorkspaceGranted.js +12 -0
- package/dist/engine/permissions/permissionWorkspaceGranted.js.map +1 -0
- package/dist/engine/permissions/permissionWorkspaceGranted.spec.d.ts +2 -0
- package/dist/engine/permissions/permissionWorkspaceGranted.spec.d.ts.map +1 -0
- package/dist/engine/permissions/permissionWorkspaceGranted.spec.js +35 -0
- package/dist/engine/permissions/permissionWorkspaceGranted.spec.js.map +1 -0
- package/dist/engine/permissions/permissionWorkspacePathResolve.d.ts +7 -0
- package/dist/engine/permissions/permissionWorkspacePathResolve.d.ts.map +1 -0
- package/dist/engine/permissions/permissionWorkspacePathResolve.js +42 -0
- package/dist/engine/permissions/permissionWorkspacePathResolve.js.map +1 -0
- package/dist/engine/permissions/permissionWorkspacePathResolve.spec.d.ts +2 -0
- package/dist/engine/permissions/permissionWorkspacePathResolve.spec.d.ts.map +1 -0
- package/dist/engine/permissions/permissionWorkspacePathResolve.spec.js +36 -0
- package/dist/engine/permissions/permissionWorkspacePathResolve.spec.js.map +1 -0
- package/dist/engine/permissions.d.ts +1 -0
- package/dist/engine/permissions.d.ts.map +1 -1
- package/dist/engine/permissions.js +7 -0
- package/dist/engine/permissions.js.map +1 -1
- package/dist/engine/scheduling/gatePermissionsCheck.d.ts +1 -1
- package/dist/engine/scheduling/gatePermissionsCheck.js +5 -2
- package/dist/engine/scheduling/gatePermissionsCheck.js.map +1 -1
- package/dist/engine/scheduling/gatePermissionsCheck.spec.js +20 -1
- package/dist/engine/scheduling/gatePermissionsCheck.spec.js.map +1 -1
- package/dist/engine/signals/signals.d.ts +4 -0
- package/dist/engine/signals/signals.d.ts.map +1 -1
- package/dist/engine/signals/signals.js +24 -8
- package/dist/engine/signals/signals.js.map +1 -1
- package/dist/engine/signals/signals.spec.js +24 -0
- package/dist/engine/signals/signals.spec.js.map +1 -1
- package/dist/plugins/telegram/connector.d.ts.map +1 -1
- package/dist/plugins/telegram/connector.js +11 -1
- package/dist/plugins/telegram/connector.js.map +1 -1
- package/dist/plugins/telegram/connector.spec.js +40 -0
- package/dist/plugins/telegram/connector.spec.js.map +1 -1
- package/dist/plugins/upgrade/upgradeRestartRun.d.ts.map +1 -1
- package/dist/plugins/upgrade/upgradeRestartRun.js +96 -4
- package/dist/plugins/upgrade/upgradeRestartRun.js.map +1 -1
- package/dist/plugins/upgrade/upgradeRestartRun.spec.js +74 -11
- package/dist/plugins/upgrade/upgradeRestartRun.spec.js.map +1 -1
- package/dist/plugins/whatsapp/connector.d.ts.map +1 -1
- package/dist/plugins/whatsapp/connector.js +11 -1
- package/dist/plugins/whatsapp/connector.js.map +1 -1
- package/dist/prompts/ACTORS.md +24 -20
- package/dist/prompts/ARCHITECT.md +1 -1
- package/dist/prompts/PERMISSIONS.md +7 -2
- package/dist/prompts/REVIEWER.md +41 -0
- package/dist/prompts/SYSTEM.md +1 -1
- package/dist/sandbox/sandboxAppsAccessCheck.d.ts +12 -0
- package/dist/sandbox/sandboxAppsAccessCheck.d.ts.map +1 -0
- package/dist/sandbox/sandboxAppsAccessCheck.js +58 -0
- package/dist/sandbox/sandboxAppsAccessCheck.js.map +1 -0
- package/dist/sandbox/sandboxAppsDenyPathsBuild.d.ts +7 -0
- package/dist/sandbox/sandboxAppsDenyPathsBuild.d.ts.map +1 -0
- package/dist/sandbox/sandboxAppsDenyPathsBuild.js +44 -0
- package/dist/sandbox/sandboxAppsDenyPathsBuild.js.map +1 -0
- package/dist/sandbox/sandboxCanRead.d.ts.map +1 -1
- package/dist/sandbox/sandboxCanRead.js +5 -0
- package/dist/sandbox/sandboxCanRead.js.map +1 -1
- package/dist/sandbox/sandboxCanRead.spec.js +25 -0
- package/dist/sandbox/sandboxCanRead.spec.js.map +1 -1
- package/dist/sandbox/sandboxCanWrite.d.ts.map +1 -1
- package/dist/sandbox/sandboxCanWrite.js +5 -0
- package/dist/sandbox/sandboxCanWrite.js.map +1 -1
- package/dist/sandbox/sandboxCanWrite.spec.js +7 -0
- package/dist/sandbox/sandboxCanWrite.spec.js.map +1 -1
- package/dist/sandbox/sandboxFilesystemPolicyBuild.d.ts.map +1 -1
- package/dist/sandbox/sandboxFilesystemPolicyBuild.js +3 -1
- package/dist/sandbox/sandboxFilesystemPolicyBuild.js.map +1 -1
- package/dist/sandbox/sandboxFilesystemPolicyBuild.spec.js +37 -0
- package/dist/sandbox/sandboxFilesystemPolicyBuild.spec.js.map +1 -1
- package/dist/settings.d.ts +6 -1
- package/dist/settings.d.ts.map +1 -1
- package/dist/settings.js.map +1 -1
- package/dist/skills/skills/app-creator/SKILL.md +207 -0
- package/dist/skills/skills/app-creator/references/rules-patterns.md +36 -0
- package/dist/skills/skills/app-creator/references/workflows.md +32 -0
- package/dist/types.d.ts +2 -1
- package/dist/types.d.ts.map +1 -1
- 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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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"}
|