@braidhq/server 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +134 -106
- package/dist/app.d.ts +7 -15
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +72 -45
- package/dist/app.js.map +1 -1
- package/dist/authMode.d.ts +39 -0
- package/dist/authMode.d.ts.map +1 -0
- package/dist/authMode.js +50 -0
- package/dist/authMode.js.map +1 -0
- package/dist/composeApp.d.ts +79 -0
- package/dist/composeApp.d.ts.map +1 -0
- package/dist/composeApp.js +136 -0
- package/dist/composeApp.js.map +1 -0
- package/dist/composeFsApp.d.ts +27 -0
- package/dist/composeFsApp.d.ts.map +1 -0
- package/dist/{composeFs.js → composeFsApp.js} +118 -125
- package/dist/composeFsApp.js.map +1 -0
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/infrastructure/_shared/env.d.ts +10 -0
- package/dist/infrastructure/_shared/env.d.ts.map +1 -0
- package/dist/infrastructure/{env.js → _shared/env.js} +5 -6
- package/dist/infrastructure/_shared/env.js.map +1 -0
- package/dist/infrastructure/_shared/frontmatter.d.ts +13 -0
- package/dist/infrastructure/_shared/frontmatter.d.ts.map +1 -0
- package/dist/infrastructure/{fs → _shared}/frontmatter.js +5 -5
- package/dist/infrastructure/_shared/frontmatter.js.map +1 -0
- package/dist/infrastructure/_shared/jsonFileStore.d.ts.map +1 -0
- package/dist/infrastructure/_shared/jsonFileStore.js.map +1 -0
- package/dist/infrastructure/{fs → _shared}/paths.d.ts +17 -10
- package/dist/infrastructure/_shared/paths.d.ts.map +1 -0
- package/dist/infrastructure/{fs → _shared}/paths.js +27 -20
- package/dist/infrastructure/_shared/paths.js.map +1 -0
- package/dist/infrastructure/auth/AccessPolicy.d.ts +33 -58
- package/dist/infrastructure/auth/AccessPolicy.d.ts.map +1 -1
- package/dist/infrastructure/auth/AccessPolicy.js +35 -42
- package/dist/infrastructure/auth/AccessPolicy.js.map +1 -1
- package/dist/infrastructure/auth/SessionStore.d.ts +22 -12
- package/dist/infrastructure/auth/SessionStore.d.ts.map +1 -1
- package/dist/infrastructure/auth/SessionStore.js +15 -18
- package/dist/infrastructure/auth/SessionStore.js.map +1 -1
- package/dist/infrastructure/batch/FsBatchPlanRepository.d.ts +79 -0
- package/dist/infrastructure/batch/FsBatchPlanRepository.d.ts.map +1 -0
- package/dist/infrastructure/{fs → batch}/FsBatchPlanRepository.js +1 -1
- package/dist/infrastructure/batch/FsBatchPlanRepository.js.map +1 -0
- package/dist/infrastructure/history/GitWorkspaceHistory.d.ts.map +1 -0
- package/dist/infrastructure/{git → history}/GitWorkspaceHistory.js +31 -24
- package/dist/infrastructure/history/GitWorkspaceHistory.js.map +1 -0
- package/dist/infrastructure/history/commitMessage.d.ts.map +1 -0
- package/dist/infrastructure/history/commitMessage.js +90 -0
- package/dist/infrastructure/history/commitMessage.js.map +1 -0
- package/dist/infrastructure/hitl/FsClarificationRepository.d.ts +13 -0
- package/dist/infrastructure/hitl/FsClarificationRepository.d.ts.map +1 -0
- package/dist/infrastructure/{fs/FsClarifyTicketRepository.js → hitl/FsClarificationRepository.js} +15 -15
- package/dist/infrastructure/hitl/FsClarificationRepository.js.map +1 -0
- package/dist/infrastructure/hitl/FsProposalRepository.d.ts.map +1 -0
- package/dist/infrastructure/{fs → hitl}/FsProposalRepository.js +7 -8
- package/dist/infrastructure/hitl/FsProposalRepository.js.map +1 -0
- package/dist/infrastructure/hitl/StatusedJsonStore.d.ts +30 -0
- package/dist/infrastructure/hitl/StatusedJsonStore.d.ts.map +1 -0
- package/dist/infrastructure/{fs/FsStatusedJsonRepository.js → hitl/StatusedJsonStore.js} +3 -3
- package/dist/infrastructure/hitl/StatusedJsonStore.js.map +1 -0
- package/dist/infrastructure/model/FsModelSerializer.d.ts +96 -0
- package/dist/infrastructure/model/FsModelSerializer.d.ts.map +1 -0
- package/dist/infrastructure/{fs/FsGraphSerializer.js → model/FsModelSerializer.js} +11 -11
- package/dist/infrastructure/model/FsModelSerializer.js.map +1 -0
- package/dist/infrastructure/oauth/GoogleOAuth.d.ts +20 -38
- package/dist/infrastructure/oauth/GoogleOAuth.d.ts.map +1 -1
- package/dist/infrastructure/oauth/GoogleOAuth.js +21 -22
- package/dist/infrastructure/oauth/GoogleOAuth.js.map +1 -1
- package/dist/infrastructure/reactor/FsReactorCycleRepository.d.ts +29 -0
- package/dist/infrastructure/reactor/FsReactorCycleRepository.d.ts.map +1 -0
- package/dist/infrastructure/reactor/FsReactorCycleRepository.js +94 -0
- package/dist/infrastructure/reactor/FsReactorCycleRepository.js.map +1 -0
- package/dist/infrastructure/secrets/SecretStore.d.ts +11 -14
- package/dist/infrastructure/secrets/SecretStore.d.ts.map +1 -1
- package/dist/infrastructure/secrets/SecretStore.js +4 -4
- package/dist/infrastructure/secrets/SecretStore.js.map +1 -1
- package/dist/infrastructure/{fs → skill}/FsRunRepository.d.ts +5 -3
- package/dist/infrastructure/skill/FsRunRepository.d.ts.map +1 -0
- package/dist/infrastructure/{fs → skill}/FsRunRepository.js +11 -9
- package/dist/infrastructure/skill/FsRunRepository.js.map +1 -0
- package/dist/infrastructure/{fs → skill}/FsSkillRegistry.d.ts +4 -13
- package/dist/infrastructure/skill/FsSkillRegistry.d.ts.map +1 -0
- package/dist/infrastructure/{fs → skill}/FsSkillRegistry.js +28 -20
- package/dist/infrastructure/skill/FsSkillRegistry.js.map +1 -0
- package/dist/infrastructure/skill/SubprocessSkillRunner.d.ts +52 -0
- package/dist/infrastructure/skill/SubprocessSkillRunner.d.ts.map +1 -0
- package/dist/infrastructure/{agent → skill}/SubprocessSkillRunner.js +107 -55
- package/dist/infrastructure/skill/SubprocessSkillRunner.js.map +1 -0
- package/dist/infrastructure/skill/asyncQueue.d.ts +20 -0
- package/dist/infrastructure/skill/asyncQueue.d.ts.map +1 -0
- package/dist/infrastructure/{agent → skill}/asyncQueue.js +2 -3
- package/dist/infrastructure/{agent → skill}/asyncQueue.js.map +1 -1
- package/dist/infrastructure/skill/lineBuffer.d.ts +15 -0
- package/dist/infrastructure/skill/lineBuffer.d.ts.map +1 -0
- package/dist/infrastructure/{agent/streamJsonParser.js → skill/lineBuffer.js} +5 -17
- package/dist/infrastructure/skill/lineBuffer.js.map +1 -0
- package/dist/infrastructure/skill/orphanReaper.d.ts +20 -0
- package/dist/infrastructure/skill/orphanReaper.d.ts.map +1 -0
- package/dist/infrastructure/{orphanReaper.js → skill/orphanReaper.js} +7 -5
- package/dist/infrastructure/skill/orphanReaper.js.map +1 -0
- package/dist/infrastructure/skill/subprocessEventStream.d.ts +16 -0
- package/dist/infrastructure/skill/subprocessEventStream.d.ts.map +1 -0
- package/dist/infrastructure/skill/subprocessEventStream.js +29 -0
- package/dist/infrastructure/skill/subprocessEventStream.js.map +1 -0
- package/dist/infrastructure/source/FsSourceUnitDigest.d.ts +19 -0
- package/dist/infrastructure/source/FsSourceUnitDigest.d.ts.map +1 -0
- package/dist/infrastructure/{fs → source}/FsSourceUnitDigest.js +9 -9
- package/dist/infrastructure/source/FsSourceUnitDigest.js.map +1 -0
- package/dist/infrastructure/source/FsSourceUnitObservationRepository.d.ts +31 -0
- package/dist/infrastructure/source/FsSourceUnitObservationRepository.d.ts.map +1 -0
- package/dist/infrastructure/{fs/FsSourceUnitStateRepository.js → source/FsSourceUnitObservationRepository.js} +18 -17
- package/dist/infrastructure/source/FsSourceUnitObservationRepository.js.map +1 -0
- package/dist/infrastructure/{fs → source}/intentScan.d.ts +4 -0
- package/dist/infrastructure/source/intentScan.d.ts.map +1 -0
- package/dist/infrastructure/{fs → source}/intentScan.js +18 -16
- package/dist/infrastructure/source/intentScan.js.map +1 -0
- package/dist/infrastructure/users/UserDirectoryFromRegistry.d.ts +2 -2
- package/dist/infrastructure/users/UserDirectoryFromRegistry.js +2 -2
- package/dist/infrastructure/users/UserRegistryFile.d.ts +4 -5
- package/dist/infrastructure/users/UserRegistryFile.d.ts.map +1 -1
- package/dist/infrastructure/users/UserRegistryFile.js +6 -8
- package/dist/infrastructure/users/UserRegistryFile.js.map +1 -1
- package/dist/infrastructure/users/ensureWorkspaceOwners.d.ts +9 -6
- package/dist/infrastructure/users/ensureWorkspaceOwners.d.ts.map +1 -1
- package/dist/infrastructure/users/ensureWorkspaceOwners.js +10 -7
- package/dist/infrastructure/users/ensureWorkspaceOwners.js.map +1 -1
- package/dist/infrastructure/workspace/FsWorkspaceRepository.d.ts.map +1 -0
- package/dist/infrastructure/{fs → workspace}/FsWorkspaceRepository.js +7 -6
- package/dist/infrastructure/workspace/FsWorkspaceRepository.js.map +1 -0
- package/dist/infrastructure/workspace/WorkspaceDiscovery.d.ts +18 -0
- package/dist/infrastructure/workspace/WorkspaceDiscovery.d.ts.map +1 -0
- package/dist/infrastructure/{fs → workspace}/WorkspaceDiscovery.js +15 -11
- package/dist/infrastructure/workspace/WorkspaceDiscovery.js.map +1 -0
- package/dist/infrastructure/{fs → workspace}/WorkspaceRegistryFile.d.ts +10 -9
- package/dist/infrastructure/workspace/WorkspaceRegistryFile.d.ts.map +1 -0
- package/dist/infrastructure/{fs → workspace}/WorkspaceRegistryFile.js +15 -17
- package/dist/infrastructure/workspace/WorkspaceRegistryFile.js.map +1 -0
- package/dist/infrastructure/workspace/productManifestWriter.d.ts +24 -0
- package/dist/infrastructure/workspace/productManifestWriter.d.ts.map +1 -0
- package/dist/infrastructure/{fs → workspace}/productManifestWriter.js +14 -26
- package/dist/infrastructure/workspace/productManifestWriter.js.map +1 -0
- package/dist/middleware/auth.d.ts +27 -17
- package/dist/middleware/auth.d.ts.map +1 -1
- package/dist/middleware/auth.js +59 -53
- package/dist/middleware/auth.js.map +1 -1
- package/dist/middleware/cors.d.ts.map +1 -1
- package/dist/middleware/cors.js +4 -1
- package/dist/middleware/cors.js.map +1 -1
- package/dist/middleware/error.d.ts.map +1 -1
- package/dist/middleware/error.js +15 -13
- package/dist/middleware/error.js.map +1 -1
- package/dist/middleware/workspaceAccess.d.ts +23 -19
- package/dist/middleware/workspaceAccess.d.ts.map +1 -1
- package/dist/middleware/workspaceAccess.js +31 -26
- package/dist/middleware/workspaceAccess.js.map +1 -1
- package/dist/policy/CapabilityCheck.d.ts +5 -5
- package/dist/policy/PermissionRegistry.d.ts +11 -9
- package/dist/policy/PermissionRegistry.d.ts.map +1 -1
- package/dist/policy/PermissionRegistry.js +10 -8
- package/dist/policy/PermissionRegistry.js.map +1 -1
- package/dist/policy/ViewerContext.d.ts +13 -11
- package/dist/policy/ViewerContext.d.ts.map +1 -1
- package/dist/policy/checks.d.ts +9 -9
- package/dist/policy/checks.d.ts.map +1 -1
- package/dist/policy/checks.js +14 -11
- package/dist/policy/checks.js.map +1 -1
- package/dist/policy/defaultRegistry.d.ts +3 -4
- package/dist/policy/defaultRegistry.d.ts.map +1 -1
- package/dist/policy/defaultRegistry.js +3 -4
- package/dist/policy/defaultRegistry.js.map +1 -1
- package/dist/policy/index.d.ts +2 -2
- package/dist/policy/index.d.ts.map +1 -1
- package/dist/policy/index.js +1 -1
- package/dist/policy/index.js.map +1 -1
- package/dist/policy/resolveViewer.d.ts +9 -9
- package/dist/policy/resolveViewer.js +9 -9
- package/dist/routes/_shared.d.ts +93 -153
- package/dist/routes/_shared.d.ts.map +1 -1
- package/dist/routes/_shared.js +9 -5
- package/dist/routes/_shared.js.map +1 -1
- package/dist/routes/admin.d.ts +1 -1
- package/dist/routes/admin.d.ts.map +1 -1
- package/dist/routes/admin.js +13 -12
- package/dist/routes/admin.js.map +1 -1
- package/dist/routes/auth.d.ts +12 -10
- package/dist/routes/auth.d.ts.map +1 -1
- package/dist/routes/auth.js +32 -34
- package/dist/routes/auth.js.map +1 -1
- package/dist/routes/clarifications.d.ts +8 -0
- package/dist/routes/clarifications.d.ts.map +1 -0
- package/dist/routes/clarifications.js +243 -0
- package/dist/routes/clarifications.js.map +1 -0
- package/dist/routes/edges.d.ts.map +1 -1
- package/dist/routes/edges.js +2 -6
- package/dist/routes/edges.js.map +1 -1
- package/dist/routes/history.d.ts.map +1 -1
- package/dist/routes/history.js +12 -10
- package/dist/routes/history.js.map +1 -1
- package/dist/routes/nodes.d.ts.map +1 -1
- package/dist/routes/nodes.js +4 -8
- package/dist/routes/nodes.js.map +1 -1
- package/dist/routes/oauth.d.ts +6 -7
- package/dist/routes/oauth.d.ts.map +1 -1
- package/dist/routes/oauth.js +6 -7
- package/dist/routes/oauth.js.map +1 -1
- package/dist/routes/proposals.d.ts +2 -2
- package/dist/routes/proposals.d.ts.map +1 -1
- package/dist/routes/proposals.js +30 -28
- package/dist/routes/proposals.js.map +1 -1
- package/dist/routes/reactorCycles.d.ts +7 -0
- package/dist/routes/reactorCycles.d.ts.map +1 -0
- package/dist/routes/reactorCycles.js +60 -0
- package/dist/routes/reactorCycles.js.map +1 -0
- package/dist/routes/runs.d.ts.map +1 -1
- package/dist/routes/runs.js +22 -19
- package/dist/routes/runs.js.map +1 -1
- package/dist/routes/skillInputOptions.d.ts +2 -2
- package/dist/routes/skillInputOptions.d.ts.map +1 -1
- package/dist/routes/skillInputOptions.js +43 -45
- package/dist/routes/skillInputOptions.js.map +1 -1
- package/dist/routes/skills.d.ts +19 -1
- package/dist/routes/skills.d.ts.map +1 -1
- package/dist/routes/skills.js +139 -7
- package/dist/routes/skills.js.map +1 -1
- package/dist/routes/sourceLoaders.d.ts.map +1 -1
- package/dist/routes/sourceLoaders.js +1 -0
- package/dist/routes/sourceLoaders.js.map +1 -1
- package/dist/routes/sourceUnitObservations.d.ts +20 -0
- package/dist/routes/sourceUnitObservations.d.ts.map +1 -0
- package/dist/routes/sourceUnitObservations.js +80 -0
- package/dist/routes/sourceUnitObservations.js.map +1 -0
- package/dist/routes/sourceWebhooks.d.ts +26 -0
- package/dist/routes/sourceWebhooks.d.ts.map +1 -0
- package/dist/routes/sourceWebhooks.js +301 -0
- package/dist/routes/sourceWebhooks.js.map +1 -0
- package/dist/routes/users.d.ts +0 -2
- package/dist/routes/users.d.ts.map +1 -1
- package/dist/routes/users.js +15 -33
- package/dist/routes/users.js.map +1 -1
- package/dist/routes/workspaceEvents.d.ts +5 -4
- package/dist/routes/workspaceEvents.d.ts.map +1 -1
- package/dist/routes/workspaceEvents.js +7 -6
- package/dist/routes/workspaceEvents.js.map +1 -1
- package/dist/routes/workspaceMembers.d.ts +1 -1
- package/dist/routes/workspaceMembers.d.ts.map +1 -1
- package/dist/routes/workspaceMembers.js +2 -2
- package/dist/routes/workspaceMembers.js.map +1 -1
- package/dist/routes/workspaces.d.ts +21 -10
- package/dist/routes/workspaces.d.ts.map +1 -1
- package/dist/routes/workspaces.js +97 -69
- package/dist/routes/workspaces.js.map +1 -1
- package/dist/server.js +6 -70
- package/dist/server.js.map +1 -1
- package/dist/startServer.d.ts +17 -0
- package/dist/startServer.d.ts.map +1 -0
- package/dist/startServer.js +81 -0
- package/dist/startServer.js.map +1 -0
- package/dist/startup.d.ts +28 -0
- package/dist/startup.d.ts.map +1 -0
- package/dist/startup.js +94 -0
- package/dist/startup.js.map +1 -0
- package/package.json +9 -9
- package/dist/composeFs.d.ts +0 -55
- package/dist/composeFs.d.ts.map +0 -1
- package/dist/composeFs.js.map +0 -1
- package/dist/composition.d.ts +0 -133
- package/dist/composition.d.ts.map +0 -1
- package/dist/composition.js +0 -113
- package/dist/composition.js.map +0 -1
- package/dist/infrastructure/agent/SubprocessSkillRunner.d.ts +0 -75
- package/dist/infrastructure/agent/SubprocessSkillRunner.d.ts.map +0 -1
- package/dist/infrastructure/agent/SubprocessSkillRunner.js.map +0 -1
- package/dist/infrastructure/agent/asyncQueue.d.ts +0 -22
- package/dist/infrastructure/agent/asyncQueue.d.ts.map +0 -1
- package/dist/infrastructure/agent/mcpConfig.d.ts +0 -38
- package/dist/infrastructure/agent/mcpConfig.d.ts.map +0 -1
- package/dist/infrastructure/agent/mcpConfig.js +0 -55
- package/dist/infrastructure/agent/mcpConfig.js.map +0 -1
- package/dist/infrastructure/agent/streamJsonParser.d.ts +0 -20
- package/dist/infrastructure/agent/streamJsonParser.d.ts.map +0 -1
- package/dist/infrastructure/agent/streamJsonParser.js.map +0 -1
- package/dist/infrastructure/agent/subprocessEventStream.d.ts +0 -26
- package/dist/infrastructure/agent/subprocessEventStream.d.ts.map +0 -1
- package/dist/infrastructure/agent/subprocessEventStream.js +0 -112
- package/dist/infrastructure/agent/subprocessEventStream.js.map +0 -1
- package/dist/infrastructure/auth/ensureApprovedEmails.d.ts +0 -16
- package/dist/infrastructure/auth/ensureApprovedEmails.d.ts.map +0 -1
- package/dist/infrastructure/auth/ensureApprovedEmails.js +0 -20
- package/dist/infrastructure/auth/ensureApprovedEmails.js.map +0 -1
- package/dist/infrastructure/env.d.ts +0 -11
- package/dist/infrastructure/env.d.ts.map +0 -1
- package/dist/infrastructure/env.js.map +0 -1
- package/dist/infrastructure/fs/FsBatchPlanRepository.d.ts +0 -300
- package/dist/infrastructure/fs/FsBatchPlanRepository.d.ts.map +0 -1
- package/dist/infrastructure/fs/FsBatchPlanRepository.js.map +0 -1
- package/dist/infrastructure/fs/FsClarifyTicketRepository.d.ts +0 -13
- package/dist/infrastructure/fs/FsClarifyTicketRepository.d.ts.map +0 -1
- package/dist/infrastructure/fs/FsClarifyTicketRepository.js.map +0 -1
- package/dist/infrastructure/fs/FsDecisionRepository.d.ts +0 -13
- package/dist/infrastructure/fs/FsDecisionRepository.d.ts.map +0 -1
- package/dist/infrastructure/fs/FsDecisionRepository.js +0 -56
- package/dist/infrastructure/fs/FsDecisionRepository.js.map +0 -1
- package/dist/infrastructure/fs/FsGraphSerializer.d.ts +0 -629
- package/dist/infrastructure/fs/FsGraphSerializer.d.ts.map +0 -1
- package/dist/infrastructure/fs/FsGraphSerializer.js.map +0 -1
- package/dist/infrastructure/fs/FsProposalRepository.d.ts.map +0 -1
- package/dist/infrastructure/fs/FsProposalRepository.js.map +0 -1
- package/dist/infrastructure/fs/FsRunRepository.d.ts.map +0 -1
- package/dist/infrastructure/fs/FsRunRepository.js.map +0 -1
- package/dist/infrastructure/fs/FsSkillRegistry.d.ts.map +0 -1
- package/dist/infrastructure/fs/FsSkillRegistry.js.map +0 -1
- package/dist/infrastructure/fs/FsSourceUnitDigest.d.ts +0 -19
- package/dist/infrastructure/fs/FsSourceUnitDigest.d.ts.map +0 -1
- package/dist/infrastructure/fs/FsSourceUnitDigest.js.map +0 -1
- package/dist/infrastructure/fs/FsSourceUnitStateRepository.d.ts +0 -30
- package/dist/infrastructure/fs/FsSourceUnitStateRepository.d.ts.map +0 -1
- package/dist/infrastructure/fs/FsSourceUnitStateRepository.js.map +0 -1
- package/dist/infrastructure/fs/FsStatusedJsonRepository.d.ts +0 -35
- package/dist/infrastructure/fs/FsStatusedJsonRepository.d.ts.map +0 -1
- package/dist/infrastructure/fs/FsStatusedJsonRepository.js.map +0 -1
- package/dist/infrastructure/fs/FsWorkspaceRepository.d.ts.map +0 -1
- package/dist/infrastructure/fs/FsWorkspaceRepository.js.map +0 -1
- package/dist/infrastructure/fs/WorkspaceDiscovery.d.ts +0 -15
- package/dist/infrastructure/fs/WorkspaceDiscovery.d.ts.map +0 -1
- package/dist/infrastructure/fs/WorkspaceDiscovery.js.map +0 -1
- package/dist/infrastructure/fs/WorkspaceRegistryFile.d.ts.map +0 -1
- package/dist/infrastructure/fs/WorkspaceRegistryFile.js.map +0 -1
- package/dist/infrastructure/fs/frontmatter.d.ts +0 -13
- package/dist/infrastructure/fs/frontmatter.d.ts.map +0 -1
- package/dist/infrastructure/fs/frontmatter.js.map +0 -1
- package/dist/infrastructure/fs/intentScan.d.ts.map +0 -1
- package/dist/infrastructure/fs/intentScan.js.map +0 -1
- package/dist/infrastructure/fs/jsonFileStore.d.ts.map +0 -1
- package/dist/infrastructure/fs/jsonFileStore.js.map +0 -1
- package/dist/infrastructure/fs/paths.d.ts.map +0 -1
- package/dist/infrastructure/fs/paths.js.map +0 -1
- package/dist/infrastructure/fs/productManifestWriter.d.ts +0 -22
- package/dist/infrastructure/fs/productManifestWriter.d.ts.map +0 -1
- package/dist/infrastructure/fs/productManifestWriter.js.map +0 -1
- package/dist/infrastructure/git/GitWorkspaceHistory.d.ts.map +0 -1
- package/dist/infrastructure/git/GitWorkspaceHistory.js.map +0 -1
- package/dist/infrastructure/git/commitMessage.d.ts.map +0 -1
- package/dist/infrastructure/git/commitMessage.js +0 -71
- package/dist/infrastructure/git/commitMessage.js.map +0 -1
- package/dist/infrastructure/orphanReaper.d.ts +0 -18
- package/dist/infrastructure/orphanReaper.d.ts.map +0 -1
- package/dist/infrastructure/orphanReaper.js.map +0 -1
- package/dist/infrastructure/users/ensureLocalUser.d.ts +0 -15
- package/dist/infrastructure/users/ensureLocalUser.d.ts.map +0 -1
- package/dist/infrastructure/users/ensureLocalUser.js +0 -38
- package/dist/infrastructure/users/ensureLocalUser.js.map +0 -1
- package/dist/middleware/requireAdmin.d.ts +0 -10
- package/dist/middleware/requireAdmin.d.ts.map +0 -1
- package/dist/middleware/requireAdmin.js +0 -24
- package/dist/middleware/requireAdmin.js.map +0 -1
- package/dist/middleware/userId.d.ts +0 -16
- package/dist/middleware/userId.d.ts.map +0 -1
- package/dist/middleware/userId.js +0 -27
- package/dist/middleware/userId.js.map +0 -1
- package/dist/policy/Capability.d.ts +0 -12
- package/dist/policy/Capability.d.ts.map +0 -1
- package/dist/policy/Capability.js +0 -31
- package/dist/policy/Capability.js.map +0 -1
- package/dist/routes/clarify.d.ts +0 -9
- package/dist/routes/clarify.d.ts.map +0 -1
- package/dist/routes/clarify.js +0 -274
- package/dist/routes/clarify.js.map +0 -1
- package/dist/routes/decisions.d.ts +0 -7
- package/dist/routes/decisions.d.ts.map +0 -1
- package/dist/routes/decisions.js +0 -68
- package/dist/routes/decisions.js.map +0 -1
- package/dist/routes/sourceUnitStates.d.ts +0 -7
- package/dist/routes/sourceUnitStates.d.ts.map +0 -1
- package/dist/routes/sourceUnitStates.js +0 -45
- package/dist/routes/sourceUnitStates.js.map +0 -1
- /package/dist/infrastructure/{fs → _shared}/jsonFileStore.d.ts +0 -0
- /package/dist/infrastructure/{fs → _shared}/jsonFileStore.js +0 -0
- /package/dist/infrastructure/{git → history}/GitWorkspaceHistory.d.ts +0 -0
- /package/dist/infrastructure/{git → history}/commitMessage.d.ts +0 -0
- /package/dist/infrastructure/{fs → hitl}/FsProposalRepository.d.ts +0 -0
- /package/dist/infrastructure/{fs → workspace}/FsWorkspaceRepository.d.ts +0 -0
|
@@ -1,48 +1,58 @@
|
|
|
1
1
|
import { rm } from 'node:fs/promises';
|
|
2
2
|
import { isAbsolute, join, resolve } from 'node:path';
|
|
3
|
-
import { NotFoundError, ValidationError } from '@braidhq/core';
|
|
4
|
-
import {
|
|
3
|
+
import { NotFoundError, ValidationError, Workspace } from '@braidhq/core';
|
|
4
|
+
import { McpServerConfig, McpServerId, OntologyId, ProductManifestCreate, SourceDescriptor as SourceDescriptorSchema, SourceId, StorageDescriptor, } from '@braidhq/schema';
|
|
5
5
|
import { zValidator } from '@hono/zod-validator';
|
|
6
6
|
import { Hono } from 'hono';
|
|
7
7
|
import { z } from 'zod';
|
|
8
|
-
import { isUnder, pathExists } from '../infrastructure/
|
|
9
|
-
import { fillManifestDefaults, updateProductManifest, writeProductManifest } from '../infrastructure/
|
|
10
|
-
import { getUserId } from '../middleware/
|
|
8
|
+
import { isUnder, pathExists } from '../infrastructure/_shared/paths.js';
|
|
9
|
+
import { fillManifestDefaults, updateProductManifest, writeProductManifest } from '../infrastructure/workspace/productManifestWriter.js';
|
|
10
|
+
import { getUserId } from '../middleware/auth.js';
|
|
11
11
|
import { requirePermission, requireServerCapability, workspaceAccessMiddleware } from '../middleware/workspaceAccess.js';
|
|
12
12
|
import { getWorkspaceId, workspaceIdMiddleware } from '../middleware/workspaceId.js';
|
|
13
|
-
// Folder name resolved under the server-managed `workspacesRoot
|
|
14
|
-
// `~/.braid/workspaces
|
|
15
|
-
//
|
|
13
|
+
// Folder name resolved under the server-managed `workspacesRoot`,
|
|
14
|
+
// default `~/.braid/workspaces/`.
|
|
15
|
+
// Slug-only so name == folder == workspace id.
|
|
16
|
+
// Rejects `/`, `..` and other path-traversal cases.
|
|
16
17
|
const WorkspaceFolderName = z.string().min(1).regex(/^[a-z0-9][a-z0-9-]*$/, 'Workspace name must be lowercase letters, digits, or dashes; must start with a letter or digit.');
|
|
17
18
|
const ScaffoldBodySchema = z.object({
|
|
18
19
|
name: WorkspaceFolderName,
|
|
19
|
-
manifest:
|
|
20
|
+
manifest: ProductManifestCreate,
|
|
20
21
|
});
|
|
21
22
|
const PatchWorkspaceBodySchema = z.object({
|
|
22
23
|
name: z.string().min(1).optional(),
|
|
23
24
|
description: z.string().optional(),
|
|
24
25
|
ontologyId: OntologyId.optional(),
|
|
25
26
|
storage: StorageDescriptor.optional(),
|
|
26
|
-
agents: AgentRoutingConfig.optional(),
|
|
27
27
|
mcpServers: z.array(McpServerConfig).optional(),
|
|
28
28
|
}).refine(body => Object.keys(body).length > 0, { message: 'PATCH body must contain at least one field' });
|
|
29
|
-
// Per-item PATCH bodies.
|
|
30
|
-
//
|
|
29
|
+
// Per-item PATCH bodies. An empty string for `description` clears the field,
|
|
30
|
+
// absent means leave as-is.
|
|
31
31
|
const PatchSourceBodySchema = z.object({
|
|
32
32
|
description: z.string().optional(),
|
|
33
33
|
}).refine(body => Object.keys(body).length > 0, { message: 'PATCH body must contain at least one field' });
|
|
34
34
|
const PatchMcpServerBodySchema = z.object({
|
|
35
35
|
description: z.string().optional(),
|
|
36
36
|
}).refine(body => Object.keys(body).length > 0, { message: 'PATCH body must contain at least one field' });
|
|
37
|
+
// Commit a PRODUCT.md edit as its own `config` history entry.
|
|
38
|
+
// No-op without a wired historyService, as in in-memory tests.
|
|
39
|
+
async function commitConfigChange(deps, workspaceId, userId, subject, sourceId) {
|
|
40
|
+
await deps.historyService?.commitWorkspaceChange(workspaceId, {
|
|
41
|
+
kind: 'config',
|
|
42
|
+
subject: subject.slice(0, 120),
|
|
43
|
+
userId,
|
|
44
|
+
...(sourceId ? { sourceId } : {}),
|
|
45
|
+
});
|
|
46
|
+
}
|
|
37
47
|
export function createWorkspacesRouter(deps) {
|
|
38
48
|
const router = new Hono();
|
|
39
|
-
// Server-scope gate
|
|
40
|
-
//
|
|
49
|
+
// Server-scope gate for creation, admin-only.
|
|
50
|
+
// Skips without userRegistry, so in-memory tests stay open.
|
|
41
51
|
const serverCreate = requireServerCapability('workspace.create', deps.userRegistry);
|
|
42
52
|
// Workspace-scope gate composed inline per :workspaceId route below.
|
|
43
|
-
// `workspaceIdMiddleware` resolves the path param onto the context
|
|
44
|
-
// before `workspaceAccessMiddleware` reads it
|
|
45
|
-
//
|
|
53
|
+
// `workspaceIdMiddleware` resolves the path param onto the context,
|
|
54
|
+
// before `workspaceAccessMiddleware` reads it.
|
|
55
|
+
// Skipping without the registries keeps in-memory tests open.
|
|
46
56
|
const wsAccess = (deps.workspaceRegistry && deps.userRegistry)
|
|
47
57
|
? workspaceAccessMiddleware({
|
|
48
58
|
registry: deps.workspaceRegistry,
|
|
@@ -54,10 +64,10 @@ export function createWorkspacesRouter(deps) {
|
|
|
54
64
|
const all = await deps.workspaceService.list();
|
|
55
65
|
if (!deps.workspaceRegistry)
|
|
56
66
|
return context.json({ items: all.map(workspace => workspace.toData()) });
|
|
57
|
-
// Server admins see every workspace for support
|
|
58
|
-
// users get filtered to direct membership.
|
|
59
|
-
// installs see everything
|
|
60
|
-
//
|
|
67
|
+
// Server admins see every workspace for support and oversight.
|
|
68
|
+
// Other users get filtered to direct membership.
|
|
69
|
+
// Single-tenant local installs see everything,
|
|
70
|
+
// local-user is an admin owner seeded by the migration.
|
|
61
71
|
const userId = getUserId(context);
|
|
62
72
|
const me = await deps.userRegistry?.get(userId);
|
|
63
73
|
if (me?.serverRole === 'admin')
|
|
@@ -75,17 +85,16 @@ export function createWorkspacesRouter(deps) {
|
|
|
75
85
|
const workspace = await deps.workspaceService.findById(workspaceId);
|
|
76
86
|
return context.json(workspace.toData());
|
|
77
87
|
});
|
|
78
|
-
// Create-only entrypoint. Existing
|
|
79
|
-
//
|
|
80
|
-
//
|
|
81
|
-
// different name or delete the existing one first".
|
|
82
|
-
// a 400 the UI can humanise.
|
|
88
|
+
// Create-only entrypoint. Existing workspaces are auto-discovered on boot,
|
|
89
|
+
// surfaced in the sidebar, so the wizard never doubles as "open".
|
|
90
|
+
// A conflict on submit is a 400 the UI can humanise,
|
|
91
|
+
// "pick a different name, or delete the existing one first".
|
|
83
92
|
//
|
|
84
|
-
// Writes PRODUCT.md with server-filled defaults,
|
|
85
|
-
// loader-backed source's `
|
|
86
|
-
//
|
|
87
|
-
// PRODUCT.md
|
|
88
|
-
// retry sees a clean slate
|
|
93
|
+
// Writes PRODUCT.md with server-filled defaults,
|
|
94
|
+
// runs every loader-backed source's `provision`, then registers.
|
|
95
|
+
// If provisioning fails, for example a bad git branch or scope,
|
|
96
|
+
// we delete the PRODUCT.md just written and drop the parse cache,
|
|
97
|
+
// so the retry sees a clean slate, not a stale half-created workspace.
|
|
89
98
|
router.post('/scaffold', serverCreate, zValidator('json', ScaffoldBodySchema), async (context) => {
|
|
90
99
|
const { name, manifest: draft } = context.req.valid('json');
|
|
91
100
|
const rootPath = join(deps.workspacesRoot, name);
|
|
@@ -94,16 +103,32 @@ export function createWorkspacesRouter(deps) {
|
|
|
94
103
|
throw new ValidationError(`A workspace named "${name}" already exists. Open it from the sidebar, or delete it first to recreate with the same name.`);
|
|
95
104
|
}
|
|
96
105
|
const manifest = fillManifestDefaults(draft);
|
|
106
|
+
// Each ontology declares which source roles it needs to function.
|
|
107
|
+
// DDD requires both `intent` and `code`,
|
|
108
|
+
// a generative ontology may need only `intent`.
|
|
109
|
+
// Reject scaffolds that omit a required role before any writes,
|
|
110
|
+
// so the wizard can show a precise "you also need a code source",
|
|
111
|
+
// rather than a post-scaffold validation error.
|
|
112
|
+
const ontology = deps.pluginRegistry.findOntology(manifest.ontologyId);
|
|
113
|
+
const requiredRoles = ontology?.requiredSourceRoles ?? [];
|
|
114
|
+
if (requiredRoles.length > 0) {
|
|
115
|
+
const presentRoles = new Set(manifest.sources.map(s => s.role));
|
|
116
|
+
const missing = requiredRoles.filter(r => !presentRoles.has(r));
|
|
117
|
+
if (missing.length > 0) {
|
|
118
|
+
throw new ValidationError(`Workspace requires source role${missing.length === 1 ? '' : 's'} ${missing.map(r => `"${r}"`).join(', ')} `
|
|
119
|
+
+ `for ontology "${manifest.ontologyId}". Add a source of each role before creating the workspace.`);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
97
122
|
await writeProductManifest(rootPath, manifest, manifest.description);
|
|
98
123
|
try {
|
|
99
124
|
const workspace = await deps.workspaceService.load(rootPath);
|
|
100
|
-
const
|
|
125
|
+
const provisionOutcomes = await deps.sourceLoaderRunner.provisionAll(workspace);
|
|
101
126
|
await deps.workspaceService.save(workspace);
|
|
102
127
|
await deps.bootstrap?.ensure(workspace);
|
|
103
128
|
await ensureCallerOwner(deps.workspaceRegistry, workspace.rootPath, getUserId(context));
|
|
104
129
|
return context.json({
|
|
105
130
|
workspace: workspace.toData(),
|
|
106
|
-
|
|
131
|
+
provision: provisionOutcomes.map(o => ({ sourceId: o.sourceId, ...o.report })),
|
|
107
132
|
}, 201);
|
|
108
133
|
}
|
|
109
134
|
catch (error) {
|
|
@@ -112,9 +137,9 @@ export function createWorkspacesRouter(deps) {
|
|
|
112
137
|
throw error;
|
|
113
138
|
}
|
|
114
139
|
});
|
|
115
|
-
// Add a source to an existing workspace. Rewrites PRODUCT.md
|
|
116
|
-
// `
|
|
117
|
-
//
|
|
140
|
+
// Add a source to an existing workspace. Rewrites PRODUCT.md,
|
|
141
|
+
// and runs `provision` if the source is loader-backed,
|
|
142
|
+
// so the local filesystem is populated before a skill runs on it.
|
|
118
143
|
router.post('/:workspaceId/sources', workspaceIdMiddleware, wsAccess, requirePermission('workspace.write'), zValidator('json', SourceDescriptorSchema), async (context) => {
|
|
119
144
|
const workspaceId = getWorkspaceId(context);
|
|
120
145
|
const source = context.req.valid('json');
|
|
@@ -123,20 +148,21 @@ export function createWorkspacesRouter(deps) {
|
|
|
123
148
|
throw new ValidationError(`Source "${source.name}" already exists in workspace "${workspaceId}"`);
|
|
124
149
|
const nextManifest = withSources(workspace.productManifest, [...workspace.sources, source]);
|
|
125
150
|
await updateProductManifest(workspace.rootPath, nextManifest);
|
|
151
|
+
await commitConfigChange(deps, workspaceId, getUserId(context), `added source ${source.name}`, source.id);
|
|
126
152
|
const updated = await reload(deps.workspaceService, workspace.rootPath);
|
|
127
|
-
let
|
|
153
|
+
let provision;
|
|
128
154
|
if (source.kind === 'filesystem' && source.loader) {
|
|
129
155
|
const report = await deps.sourceLoaderRunner.syncOne(updated, source.id);
|
|
130
|
-
|
|
156
|
+
provision = { sourceId: source.id, ...report };
|
|
131
157
|
}
|
|
132
|
-
return context.json({ workspace: updated.toData(), ...(
|
|
158
|
+
return context.json({ workspace: updated.toData(), ...(provision ? { provision } : {}) }, 201);
|
|
133
159
|
});
|
|
134
|
-
// Remove a source from the manifest
|
|
135
|
-
// resolved path is inside the
|
|
136
|
-
// `./intent`
|
|
137
|
-
//
|
|
138
|
-
//
|
|
139
|
-
// directory the user could plausibly own outside Braid
|
|
160
|
+
// Remove a source from the manifest,
|
|
161
|
+
// and rm its local files when the resolved path is inside the folder.
|
|
162
|
+
// A relative path like `./intent` is safe to wipe, the loader made it.
|
|
163
|
+
// An absolute path outside the workspace keeps its files,
|
|
164
|
+
// returning a note instead.
|
|
165
|
+
// We won't nuke a directory the user could plausibly own outside Braid.
|
|
140
166
|
router.delete('/:workspaceId/sources/:sourceId', workspaceIdMiddleware, wsAccess, requirePermission('workspace.write'), async (context) => {
|
|
141
167
|
const workspaceId = getWorkspaceId(context);
|
|
142
168
|
const sourceId = SourceId.parse(context.req.param('sourceId'));
|
|
@@ -145,7 +171,9 @@ export function createWorkspacesRouter(deps) {
|
|
|
145
171
|
if (!source)
|
|
146
172
|
throw new NotFoundError(`Source "${sourceId}" not found in workspace "${workspaceId}"`);
|
|
147
173
|
const nextManifest = withSources(workspace.productManifest, workspace.sources.filter(entry => entry.id !== sourceId));
|
|
174
|
+
deps.workspaceService.assertRequiredSourceRoles(new Workspace({ ...workspace.toData(), productManifest: nextManifest }));
|
|
148
175
|
await updateProductManifest(workspace.rootPath, nextManifest);
|
|
176
|
+
await commitConfigChange(deps, workspaceId, getUserId(context), `removed source ${source.name}`, sourceId);
|
|
149
177
|
let filesRemoved = false;
|
|
150
178
|
if (source.kind === 'filesystem') {
|
|
151
179
|
const resolved = isAbsolute(source.path) ? source.path : resolve(workspace.rootPath, source.path);
|
|
@@ -157,10 +185,10 @@ export function createWorkspacesRouter(deps) {
|
|
|
157
185
|
const updated = await reload(deps.workspaceService, workspace.rootPath);
|
|
158
186
|
return context.json({ workspace: updated.toData(), filesRemoved });
|
|
159
187
|
});
|
|
160
|
-
// Edit a source's editable metadata
|
|
161
|
-
// fields (id, kind, path, role) are immutable
|
|
162
|
-
// and on-disk layout stable
|
|
163
|
-
//
|
|
188
|
+
// Edit a source's editable metadata, description for now.
|
|
189
|
+
// Structural fields (id, kind, path, role) are immutable,
|
|
190
|
+
// to keep cross-references and on-disk layout stable.
|
|
191
|
+
// A rename or loader-change flow would need its own migration story.
|
|
164
192
|
router.patch('/:workspaceId/sources/:sourceId', workspaceIdMiddleware, wsAccess, requirePermission('workspace.write'), zValidator('json', PatchSourceBodySchema), async (context) => {
|
|
165
193
|
const workspaceId = getWorkspaceId(context);
|
|
166
194
|
const sourceId = SourceId.parse(context.req.param('sourceId'));
|
|
@@ -174,13 +202,15 @@ export function createWorkspacesRouter(deps) {
|
|
|
174
202
|
: { ...existing, ...(patch.description !== undefined ? { description: patch.description } : {}) };
|
|
175
203
|
const nextManifest = withSources(workspace.productManifest, workspace.sources.map(s => (s.id === sourceId ? patched : s)));
|
|
176
204
|
await updateProductManifest(workspace.rootPath, nextManifest);
|
|
205
|
+
await commitConfigChange(deps, workspaceId, getUserId(context), `updated source ${existing.name}`, sourceId);
|
|
177
206
|
const updated = await reload(deps.workspaceService, workspace.rootPath);
|
|
178
207
|
return context.json({ workspace: updated.toData() });
|
|
179
208
|
});
|
|
180
|
-
// Edit an MCP server's editable metadata.
|
|
181
|
-
// stay editable via the workspace
|
|
182
|
-
// mcpServers[] array
|
|
183
|
-
//
|
|
209
|
+
// Edit an MCP server's editable metadata.
|
|
210
|
+
// URL, transport, and headers stay editable via the workspace PATCH,
|
|
211
|
+
// which expects the whole mcpServers[] array.
|
|
212
|
+
// This endpoint is only for the per-server description field,
|
|
213
|
+
// so Studio doesn't need to send the whole list.
|
|
184
214
|
router.patch('/:workspaceId/mcpServers/:mcpServerId', workspaceIdMiddleware, wsAccess, requirePermission('workspace.write'), zValidator('json', PatchMcpServerBodySchema), async (context) => {
|
|
185
215
|
const workspaceId = getWorkspaceId(context);
|
|
186
216
|
const mcpServerId = McpServerId.parse(context.req.param('mcpServerId'));
|
|
@@ -197,11 +227,12 @@ export function createWorkspacesRouter(deps) {
|
|
|
197
227
|
mcpServers: workspace.productManifest.mcpServers.map(s => (s.id === mcpServerId ? patched : s)),
|
|
198
228
|
};
|
|
199
229
|
await updateProductManifest(workspace.rootPath, nextManifest);
|
|
230
|
+
await commitConfigChange(deps, workspaceId, getUserId(context), `updated mcp server ${mcpServerId}`);
|
|
200
231
|
const updated = await reload(deps.workspaceService, workspace.rootPath);
|
|
201
232
|
return context.json({ workspace: updated.toData() });
|
|
202
233
|
});
|
|
203
|
-
// Per-source sync. Looks up the source's loader and invokes `sync
|
|
204
|
-
// falls back to `
|
|
234
|
+
// Per-source sync. Looks up the source's loader and invokes `sync`,
|
|
235
|
+
// or falls back to `provision` if the destination doesn't exist yet.
|
|
205
236
|
router.post('/:workspaceId/sources/:sourceId/sync', workspaceIdMiddleware, wsAccess, requirePermission('workspace.write'), async (context) => {
|
|
206
237
|
const workspaceId = getWorkspaceId(context);
|
|
207
238
|
const sourceId = SourceId.parse(context.req.param('sourceId'));
|
|
@@ -209,9 +240,9 @@ export function createWorkspacesRouter(deps) {
|
|
|
209
240
|
const report = await deps.sourceLoaderRunner.syncOne(workspace, sourceId);
|
|
210
241
|
return context.json(report);
|
|
211
242
|
});
|
|
212
|
-
// Update workspace-level manifest fields.
|
|
213
|
-
// WorkspaceId
|
|
214
|
-
// the workspace list after a
|
|
243
|
+
// Update workspace-level manifest fields.
|
|
244
|
+
// Renaming changes the WorkspaceId, derived from `manifest.name`,
|
|
245
|
+
// so callers should re-fetch the workspace list after a rename.
|
|
215
246
|
router.patch('/:workspaceId', workspaceIdMiddleware, wsAccess, requirePermission('workspace.write'), zValidator('json', PatchWorkspaceBodySchema), async (context) => {
|
|
216
247
|
const workspaceId = getWorkspaceId(context);
|
|
217
248
|
const patch = context.req.valid('json');
|
|
@@ -222,18 +253,19 @@ export function createWorkspacesRouter(deps) {
|
|
|
222
253
|
...(patch.description !== undefined ? { description: patch.description } : {}),
|
|
223
254
|
...(patch.ontologyId !== undefined ? { ontologyId: patch.ontologyId } : {}),
|
|
224
255
|
...(patch.storage !== undefined ? { storage: patch.storage } : {}),
|
|
225
|
-
...(patch.agents !== undefined ? { agents: patch.agents } : {}),
|
|
226
256
|
...(patch.mcpServers !== undefined ? { mcpServers: patch.mcpServers } : {}),
|
|
227
257
|
};
|
|
228
258
|
await updateProductManifest(workspace.rootPath, nextManifest);
|
|
229
259
|
const renamed = patch.name !== undefined && patch.name !== workspace.productManifest.name;
|
|
260
|
+
await commitConfigChange(deps, workspaceId, getUserId(context), renamed ? `renamed to ${patch.name}` : 'updated workspace config');
|
|
230
261
|
const updated = await reload(deps.workspaceService, workspace.rootPath);
|
|
231
262
|
return context.json({
|
|
232
263
|
workspace: updated.toData(),
|
|
233
264
|
...(renamed ? { renamed: true, previousId: workspace.id, newId: updated.id } : {}),
|
|
234
265
|
});
|
|
235
266
|
});
|
|
236
|
-
// `purge=true` rm -rf's the folder
|
|
267
|
+
// `purge=true` rm -rf's the folder. Without it,
|
|
268
|
+
// discoverCanonicalWorkspaces re-registers on next boot.
|
|
237
269
|
router.delete('/:workspaceId', workspaceIdMiddleware, wsAccess, requirePermission('workspace.write'), async (context) => {
|
|
238
270
|
const workspaceId = getWorkspaceId(context);
|
|
239
271
|
const purge = context.req.query('purge') === 'true';
|
|
@@ -248,10 +280,8 @@ export function createWorkspacesRouter(deps) {
|
|
|
248
280
|
function withSources(manifest, sources) {
|
|
249
281
|
return { ...manifest, sources: [...sources] };
|
|
250
282
|
}
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
* honour the explicit "clear" signal in PATCH bodies (description='').
|
|
254
|
-
*/
|
|
283
|
+
// Returns a copy of `entry` without the named optional field.
|
|
284
|
+
// Honours the explicit "clear" signal in PATCH bodies (description='').
|
|
255
285
|
function stripField(entry, field) {
|
|
256
286
|
const next = { ...entry };
|
|
257
287
|
delete next[field];
|
|
@@ -263,11 +293,9 @@ async function reload(workspaceService, rootPath) {
|
|
|
263
293
|
await workspaceService.save(reloaded);
|
|
264
294
|
return reloaded;
|
|
265
295
|
}
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
* re-registered, or the migration already touched it) this is a no-op.
|
|
270
|
-
*/
|
|
296
|
+
// Idempotently stamp the caller as owner of a fresh workspace.
|
|
297
|
+
// If members[] already contains an owner, this is a no-op.
|
|
298
|
+
// That happens on a re-register, or when the migration already touched it.
|
|
271
299
|
async function ensureCallerOwner(registry, rootPath, userId) {
|
|
272
300
|
if (!registry)
|
|
273
301
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspaces.js","sourceRoot":"","sources":["../../src/routes/workspaces.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"workspaces.js","sourceRoot":"","sources":["../../src/routes/workspaces.ts"],"names":[],"mappings":"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"}
|
package/dist/server.js
CHANGED
|
@@ -1,76 +1,12 @@
|
|
|
1
|
-
import { existsSync } from 'node:fs';
|
|
2
|
-
import { dirname, resolve } from 'node:path';
|
|
3
1
|
import process from 'node:process';
|
|
4
|
-
import { fileURLToPath } from 'node:url';
|
|
5
2
|
import { createLogger } from '@braidhq/core';
|
|
6
|
-
import {
|
|
7
|
-
|
|
8
|
-
import { composeFsApp } from './composeFs.js';
|
|
9
|
-
import { reapOrphanRuns } from './infrastructure/orphanReaper.js';
|
|
10
|
-
// Load .env from the monorepo root (where pnpm-workspace.yaml lives) before
|
|
11
|
-
// anything reads process.env. Silent if the file is missing; production
|
|
12
|
-
// boots from real env, not dotfiles.
|
|
13
|
-
{
|
|
14
|
-
const here = dirname(fileURLToPath(import.meta.url));
|
|
15
|
-
// src/server.ts → packages/server/src → ../../../.env at repo root.
|
|
16
|
-
const candidates = [resolve(here, '../../../.env'), resolve(process.cwd(), '.env')];
|
|
17
|
-
for (const path of candidates) {
|
|
18
|
-
if (existsSync(path)) {
|
|
19
|
-
process.loadEnvFile(path);
|
|
20
|
-
break;
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
}
|
|
3
|
+
import { loadRootEnv, startServer } from './startServer.js';
|
|
4
|
+
loadRootEnv();
|
|
24
5
|
const log = createLogger('server');
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
apiUrl,
|
|
30
|
-
...(process.env.BRAID_HOME ? { braidHome: process.env.BRAID_HOME } : {}),
|
|
31
|
-
...(process.env.BRAID_AGENT_MODEL ? { agentModel: process.env.BRAID_AGENT_MODEL } : {}),
|
|
32
|
-
...(process.env.BRAID_AGENT_EFFORT ? { agentEffort: process.env.BRAID_AGENT_EFFORT } : {}),
|
|
33
|
-
});
|
|
34
|
-
const app = createApp(deps, { apiUrl });
|
|
35
|
-
const server = serve({ fetch: app.fetch, port }, ({ port: boundPort }) => {
|
|
36
|
-
log.info({ port: boundPort }, `listening on http://localhost:${boundPort}`);
|
|
37
|
-
});
|
|
38
|
-
// Close the model repository on shutdown so Kuzu flushes its WAL.
|
|
39
|
-
// Second signal force-quits in case close hangs.
|
|
40
|
-
let shuttingDown = false;
|
|
41
|
-
async function shutdown(signal) {
|
|
42
|
-
if (shuttingDown) {
|
|
43
|
-
log.warn({ signal }, 'received second shutdown signal, exiting now');
|
|
44
|
-
process.exit(1);
|
|
45
|
-
}
|
|
46
|
-
shuttingDown = true;
|
|
47
|
-
log.info({ signal }, 'shutting down');
|
|
48
|
-
server.close();
|
|
49
|
-
try {
|
|
50
|
-
await deps.modelRepository.close?.();
|
|
51
|
-
}
|
|
52
|
-
catch (err) {
|
|
53
|
-
log.error({ err }, 'modelRepository.close failed');
|
|
54
|
-
}
|
|
55
|
-
process.exit(0);
|
|
56
|
-
}
|
|
57
|
-
process.on('SIGINT', () => void shutdown('SIGINT'));
|
|
58
|
-
process.on('SIGTERM', () => void shutdown('SIGTERM'));
|
|
59
|
-
// Any run without a `completedAt` is from a previous server process that was
|
|
60
|
-
// killed mid-run. Tag those as aborted so they don't appear "active forever"
|
|
61
|
-
// in the Runs UI. Run after `serve()` so it doesn't delay accepting requests.
|
|
62
|
-
reapOrphanRuns({
|
|
63
|
-
workspaceRepository: deps.workspaceRepository,
|
|
64
|
-
runRepository: deps.runRepository,
|
|
65
|
-
clock: deps.clock,
|
|
66
|
-
}).then(({ reaped }) => {
|
|
67
|
-
if (reaped > 0)
|
|
68
|
-
log.info({ reaped }, `marked ${reaped} orphan run(s) as aborted`);
|
|
69
|
-
}).catch((error) => {
|
|
70
|
-
log.error({ err: error }, 'orphan reaper failed');
|
|
71
|
-
});
|
|
72
|
-
}
|
|
73
|
-
main().catch((error) => {
|
|
6
|
+
startServer({
|
|
7
|
+
port: Number(process.env.BRAID_SERVER_PORT ?? 4321),
|
|
8
|
+
onListen: url => log.info({ url }, `listening on ${url}`),
|
|
9
|
+
}).catch((error) => {
|
|
74
10
|
log.error({ err: error }, 'failed to start');
|
|
75
11
|
process.exit(1);
|
|
76
12
|
});
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,cAAc,CAAA;AAClC,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAC5C,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAE3D,WAAW,EAAE,CAAA;AAEb,MAAM,GAAG,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAA;AAElC,WAAW,CAAC;IACV,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,IAAI,CAAC;IACnD,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,EAAE,gBAAgB,GAAG,EAAE,CAAC;CAC1D,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACjB,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,iBAAiB,CAAC,CAAA;IAC5C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACjB,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Walk up from the working directory to the first `.env`, and load it,
|
|
3
|
+
* before anything reads process.env.
|
|
4
|
+
* A missing file is silent, production boots from real env, not dotfiles.
|
|
5
|
+
*/
|
|
6
|
+
export declare function loadRootEnv(): void;
|
|
7
|
+
export interface StartServerOptions {
|
|
8
|
+
readonly port: number;
|
|
9
|
+
readonly onListen?: (url: string) => void;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Boot the coding-preset app and start serving, shared by the standalone
|
|
13
|
+
* entry and the cli `serve` command so both wire identically.
|
|
14
|
+
* Resolves once the socket is listening, then keeps running under signal handlers.
|
|
15
|
+
*/
|
|
16
|
+
export declare function startServer(options: StartServerOptions): Promise<void>;
|
|
17
|
+
//# sourceMappingURL=startServer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"startServer.d.ts","sourceRoot":"","sources":["../src/startServer.ts"],"names":[],"mappings":"AAYA;;;;GAIG;AACH,wBAAgB,WAAW,IAAI,IAAI,CAalC;AAYD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IAErB,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;CAC1C;AAED;;;;GAIG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAgB5E"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { existsSync } from 'node:fs';
|
|
2
|
+
import { dirname, join } from 'node:path';
|
|
3
|
+
import process from 'node:process';
|
|
4
|
+
import { createLogger } from '@braidhq/core';
|
|
5
|
+
import { AgentEffort } from '@braidhq/schema';
|
|
6
|
+
import { serve } from '@hono/node-server';
|
|
7
|
+
import { createApp } from './app.js';
|
|
8
|
+
import { composeFsApp } from './composeFsApp.js';
|
|
9
|
+
import { startupAfterServe } from './startup.js';
|
|
10
|
+
/**
|
|
11
|
+
* Walk up from the working directory to the first `.env`, and load it,
|
|
12
|
+
* before anything reads process.env.
|
|
13
|
+
* A missing file is silent, production boots from real env, not dotfiles.
|
|
14
|
+
*/
|
|
15
|
+
export function loadRootEnv() {
|
|
16
|
+
let dir = process.cwd();
|
|
17
|
+
for (;;) {
|
|
18
|
+
const candidate = join(dir, '.env');
|
|
19
|
+
if (existsSync(candidate)) {
|
|
20
|
+
process.loadEnvFile(candidate);
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
const parent = dirname(dir);
|
|
24
|
+
if (parent === dir)
|
|
25
|
+
return;
|
|
26
|
+
dir = parent;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
// The server's own env vars, read in one place so both entries agree.
|
|
30
|
+
// Each key is an optional override, an unset var falls to the preset default.
|
|
31
|
+
function fsOptionsFromEnv() {
|
|
32
|
+
return {
|
|
33
|
+
...(process.env.BRAID_HOME ? { braidHome: process.env.BRAID_HOME } : {}),
|
|
34
|
+
...(process.env.BRAID_AGENT_MODEL ? { agentModel: process.env.BRAID_AGENT_MODEL } : {}),
|
|
35
|
+
...(process.env.BRAID_AGENT_EFFORT ? { agentEffort: AgentEffort.parse(process.env.BRAID_AGENT_EFFORT) } : {}),
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Boot the coding-preset app and start serving, shared by the standalone
|
|
40
|
+
* entry and the cli `serve` command so both wire identically.
|
|
41
|
+
* Resolves once the socket is listening, then keeps running under signal handlers.
|
|
42
|
+
*/
|
|
43
|
+
export async function startServer(options) {
|
|
44
|
+
const apiUrl = `http://localhost:${options.port}`;
|
|
45
|
+
const deps = await composeFsApp({ apiUrl, ...fsOptionsFromEnv() });
|
|
46
|
+
const app = createApp(deps, { apiUrl });
|
|
47
|
+
const log = createLogger('server');
|
|
48
|
+
const server = await new Promise((resolveBoot) => {
|
|
49
|
+
const handle = serve({ fetch: app.fetch, port: options.port }, ({ port }) => {
|
|
50
|
+
options.onListen?.(`http://localhost:${port}`);
|
|
51
|
+
resolveBoot(handle);
|
|
52
|
+
});
|
|
53
|
+
});
|
|
54
|
+
installShutdown(server, deps, log);
|
|
55
|
+
// Background recovery, after serve() so it never delays accepting requests.
|
|
56
|
+
void startupAfterServe(deps);
|
|
57
|
+
}
|
|
58
|
+
// Close the model repository on shutdown so the storage adapter flushes cleanly.
|
|
59
|
+
// Second signal force-quits in case close hangs.
|
|
60
|
+
function installShutdown(server, deps, log) {
|
|
61
|
+
let shuttingDown = false;
|
|
62
|
+
async function shutdown(signal) {
|
|
63
|
+
if (shuttingDown) {
|
|
64
|
+
log.warn({ signal }, 'received second shutdown signal, exiting now');
|
|
65
|
+
process.exit(1);
|
|
66
|
+
}
|
|
67
|
+
shuttingDown = true;
|
|
68
|
+
log.info({ signal }, 'shutting down');
|
|
69
|
+
server.close();
|
|
70
|
+
try {
|
|
71
|
+
await deps.modelRepository.close?.();
|
|
72
|
+
}
|
|
73
|
+
catch (err) {
|
|
74
|
+
log.error({ err }, 'modelRepository.close failed');
|
|
75
|
+
}
|
|
76
|
+
process.exit(0);
|
|
77
|
+
}
|
|
78
|
+
process.on('SIGINT', () => void shutdown('SIGINT'));
|
|
79
|
+
process.on('SIGTERM', () => void shutdown('SIGTERM'));
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=startServer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"startServer.js","sourceRoot":"","sources":["../src/startServer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { AppDependencies } from './composeApp.js';
|
|
2
|
+
/**
|
|
3
|
+
* The blocking startup pass, run once after composition,
|
|
4
|
+
* before the server accepts requests.
|
|
5
|
+
* Per workspace it provisions the git repo and store,
|
|
6
|
+
* recovers in-flight state left by a killed process,
|
|
7
|
+
* subscribes the reactor when the workspace opts in,
|
|
8
|
+
* and fires a catch-up sync for missed webhook deliveries.
|
|
9
|
+
*
|
|
10
|
+
* This is the single home for per-workspace boot steps.
|
|
11
|
+
* A new one is added here,
|
|
12
|
+
* not scattered across composition and the server entry.
|
|
13
|
+
* Recovery that need not finish before serving,
|
|
14
|
+
* such as reaping orphan runs, runs after `serve()` in `server.ts`,
|
|
15
|
+
* so it never delays accepting requests.
|
|
16
|
+
*
|
|
17
|
+
* Per-workspace failures are logged and tolerated,
|
|
18
|
+
* so one bad directory does not block the rest of the boot.
|
|
19
|
+
*/
|
|
20
|
+
export declare function startupBeforeServe(deps: AppDependencies): Promise<void>;
|
|
21
|
+
/**
|
|
22
|
+
* The background startup pass, run once after `serve()`,
|
|
23
|
+
* so it never delays accepting requests.
|
|
24
|
+
* Cosmetic recovery that need not finish before the first request lives here,
|
|
25
|
+
* not in the blocking `startupBeforeServe`.
|
|
26
|
+
*/
|
|
27
|
+
export declare function startupAfterServe(deps: AppDependencies): Promise<void>;
|
|
28
|
+
//# sourceMappingURL=startup.d.ts.map
|