@braidhq/server 0.1.0 → 0.2.1
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/LICENSE +21 -0
- package/README.md +134 -106
- package/dist/app.d.ts +7 -15
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +74 -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 +80 -0
- package/dist/composeApp.d.ts.map +1 -0
- package/dist/composeApp.js +137 -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} +127 -126
- 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 +20 -20
- package/dist/infrastructure/auth/SessionStore.js.map +1 -1
- package/dist/infrastructure/batch/FsBatchPlanRepository.d.ts +14 -0
- package/dist/infrastructure/batch/FsBatchPlanRepository.d.ts.map +1 -0
- package/dist/infrastructure/{fs → batch}/FsBatchPlanRepository.js +9 -7
- 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/hitl/FsClarificationRepository.js +40 -0
- 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 +8 -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 +94 -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/source/unitScan.d.ts +11 -0
- package/dist/infrastructure/source/unitScan.d.ts.map +1 -0
- package/dist/infrastructure/{fs/intentScan.js → source/unitScan.js} +36 -27
- package/dist/infrastructure/source/unitScan.js.map +1 -0
- package/dist/infrastructure/users/UserDirectoryFromRegistry.d.ts +2 -2
- package/dist/infrastructure/users/UserDirectoryFromRegistry.d.ts.map +1 -1
- package/dist/infrastructure/users/UserDirectoryFromRegistry.js +3 -2
- package/dist/infrastructure/users/UserDirectoryFromRegistry.js.map +1 -1
- 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 +69 -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 +246 -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/ontologies.d.ts +7 -0
- package/dist/routes/ontologies.d.ts.map +1 -0
- package/dist/routes/ontologies.js +29 -0
- package/dist/routes/ontologies.js.map +1 -0
- package/dist/routes/ontology.d.ts.map +1 -1
- package/dist/routes/ontology.js +2 -1
- package/dist/routes/ontology.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 +35 -30
- 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 +53 -53
- 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 +141 -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 +95 -69
- package/dist/routes/workspaces.js.map +1 -1
- package/dist/server.js +6 -70
- package/dist/server.js.map +1 -1
- package/dist/serviceAccounts.d.ts +13 -0
- package/dist/serviceAccounts.d.ts.map +1 -0
- package/dist/serviceAccounts.js +26 -0
- package/dist/serviceAccounts.js.map +1 -0
- 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 +35 -40
- 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 +0 -39
- 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 +0 -9
- 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
|
@@ -4,8 +4,8 @@ import { join } from 'node:path';
|
|
|
4
4
|
import { fileURLToPath } from 'node:url';
|
|
5
5
|
import { NotFoundError, SkillManifest, validateSkillStructure } from '@braidhq/core';
|
|
6
6
|
import { AbsolutePath as AbsolutePathSchema, SkillFrontmatter as SkillFrontmatterSchema, SkillId as SkillIdSchema } from '@braidhq/schema';
|
|
7
|
-
import { parseMarkdownFrontmatter } from '
|
|
8
|
-
import { workspaceSkillExtensionsDir, workspaceSkillsDir } from '
|
|
7
|
+
import { parseMarkdownFrontmatter } from '../_shared/frontmatter.js';
|
|
8
|
+
import { workspaceSkillExtensionsDir, workspaceSkillsDir } from '../_shared/paths.js';
|
|
9
9
|
export class FsSkillRegistry {
|
|
10
10
|
options;
|
|
11
11
|
constructor(options) {
|
|
@@ -16,9 +16,9 @@ export class FsSkillRegistry {
|
|
|
16
16
|
const pluginSkills = await this.scanPluginSkills();
|
|
17
17
|
const workspaceSkills = await this.scanSkillsRoot(AbsolutePathSchema.parse(workspaceSkillsDir(workspace.rootPath)), 'workspace');
|
|
18
18
|
const extensions = await this.scanExtensionRoot(AbsolutePathSchema.parse(workspaceSkillExtensionsDir(workspace.rootPath)));
|
|
19
|
-
// Precedence
|
|
20
|
-
// Extensions don't override
|
|
21
|
-
//
|
|
19
|
+
// Precedence, later wins: builtin < plugin < workspace.
|
|
20
|
+
// Extensions don't override. They attach an EXTEND.md path,
|
|
21
|
+
// and the agent binding points claude at that file at run time.
|
|
22
22
|
const manifests = new Map();
|
|
23
23
|
for (const manifest of builtins)
|
|
24
24
|
manifests.set(manifest.id, manifest);
|
|
@@ -55,8 +55,12 @@ export class FsSkillRegistry {
|
|
|
55
55
|
const frontmatter = await this.readSkillFrontmatter(skillFile);
|
|
56
56
|
if (!frontmatter)
|
|
57
57
|
continue;
|
|
58
|
+
// The directory is the bare verb. Namespace it by origin,
|
|
59
|
+
// builtins under `braid`, workspace skills under `workspace`,
|
|
60
|
+
// so the id matches the plugin the agent binding stages it as.
|
|
61
|
+
const namespace = origin === 'builtin' ? 'braid' : 'workspace';
|
|
58
62
|
manifests.push(new SkillManifest({
|
|
59
|
-
id: SkillIdSchema.parse(entry.name),
|
|
63
|
+
id: SkillIdSchema.parse(`${namespace}:${entry.name}`),
|
|
60
64
|
origin,
|
|
61
65
|
path: skillFile,
|
|
62
66
|
frontmatter,
|
|
@@ -64,14 +68,13 @@ export class FsSkillRegistry {
|
|
|
64
68
|
}
|
|
65
69
|
return manifests;
|
|
66
70
|
}
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
*/
|
|
71
|
+
// Resolve every PluginSkillRef in the registry to a parsed SkillManifest.
|
|
72
|
+
// Each ref's `directory` is resolved to an absolute path via fileURLToPath,
|
|
73
|
+
// then its `SKILL.md` is read and parsed.
|
|
74
|
+
// A file missing at such a path,
|
|
75
|
+
// counts as an error, never a silent skip.
|
|
76
|
+
// A plugin shipping a broken ref,
|
|
77
|
+
// earns a loud startup failure, not a mysteriously absent skill.
|
|
75
78
|
async scanPluginSkills() {
|
|
76
79
|
const registry = this.options.pluginRegistry;
|
|
77
80
|
if (!registry)
|
|
@@ -103,7 +106,11 @@ export class FsSkillRegistry {
|
|
|
103
106
|
const extendPath = AbsolutePathSchema.parse(join(root, entry.name, 'EXTEND.md'));
|
|
104
107
|
try {
|
|
105
108
|
await stat(extendPath);
|
|
106
|
-
|
|
109
|
+
// The extension dir is `<namespace>-<verb>`, filesystem-safe.
|
|
110
|
+
// The first hyphen maps back to the id's `:` separator,
|
|
111
|
+
// so `ddd-extract` targets `ddd:extract` and `braid:generate-doc`
|
|
112
|
+
// targets `braid:generate-doc`.
|
|
113
|
+
const skillId = SkillIdSchema.parse(entry.name.replace('-', ':'));
|
|
107
114
|
results.push({ id: skillId, path: extendPath });
|
|
108
115
|
}
|
|
109
116
|
catch (error) {
|
|
@@ -125,11 +132,12 @@ export class FsSkillRegistry {
|
|
|
125
132
|
}
|
|
126
133
|
const { frontmatter: raw, body } = parseMarkdownFrontmatter(content);
|
|
127
134
|
const frontmatter = SkillFrontmatterSchema.parse(raw);
|
|
128
|
-
// Structural contract: SKILL.md must declare the required H2 sections
|
|
129
|
-
// per its `braid.category`.
|
|
130
|
-
//
|
|
131
|
-
//
|
|
132
|
-
//
|
|
135
|
+
// Structural contract: SKILL.md must declare the required H2 sections,
|
|
136
|
+
// per its `braid.category`.
|
|
137
|
+
// The validator is hard-fail.
|
|
138
|
+
// A broken skill never lands silently in the workspace list.
|
|
139
|
+
// Were `## Procedure` absent, the skill would burn an entire run,
|
|
140
|
+
// before the agent ever noticed the missing section.
|
|
133
141
|
const validation = validateSkillStructure({ body, frontmatter });
|
|
134
142
|
if (!validation.ok) {
|
|
135
143
|
const issues = validation.issues.map(issue => `- ${issue.message}`).join('\n');
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FsSkillRegistry.js","sourceRoot":"","sources":["../../../src/infrastructure/skill/FsSkillRegistry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import type { AgentBinding, RunRepository, SkillEventListener, SkillRegistry, SkillRunner, SkillRunOptions, SkillRunSubscription, Workspace, WorkspaceEventBus } from '@braidhq/core';
|
|
2
|
+
import type { AbsolutePath, AgentBindingDescriptor, SkillId, SkillRunId } from '@braidhq/schema';
|
|
3
|
+
import type { ChildProcess, SpawnOptions } from 'node:child_process';
|
|
4
|
+
export type SpawnFn = (command: string, args: readonly string[], options: SpawnOptions) => ChildProcess;
|
|
5
|
+
/**
|
|
6
|
+
* Additional directories to expose under the session's `.claude/skills/` tree.
|
|
7
|
+
* Typically non-skill reference content,
|
|
8
|
+
* e.g. a `shared/` dir that builtin SKILL.md files reference.
|
|
9
|
+
*/
|
|
10
|
+
export interface SkillReferenceDir {
|
|
11
|
+
readonly name: string;
|
|
12
|
+
readonly path: AbsolutePath;
|
|
13
|
+
}
|
|
14
|
+
export interface SubprocessSkillRunnerDeps {
|
|
15
|
+
readonly skillRegistry: SkillRegistry;
|
|
16
|
+
readonly buildAgentBinding: (descriptor: AgentBindingDescriptor) => AgentBinding;
|
|
17
|
+
readonly defaultAgent: AgentBindingDescriptor;
|
|
18
|
+
readonly apiUrl: string;
|
|
19
|
+
readonly runRepository: RunRepository;
|
|
20
|
+
readonly spawn?: SpawnFn;
|
|
21
|
+
readonly clock?: () => string;
|
|
22
|
+
readonly referenceDirs?: readonly SkillReferenceDir[];
|
|
23
|
+
readonly cleanupSession?: boolean;
|
|
24
|
+
readonly coreGateway?: {
|
|
25
|
+
readonly specUrl: string;
|
|
26
|
+
readonly uvxBin?: string;
|
|
27
|
+
};
|
|
28
|
+
readonly eventBus?: WorkspaceEventBus;
|
|
29
|
+
}
|
|
30
|
+
export declare class SubprocessSkillRunner implements SkillRunner {
|
|
31
|
+
private readonly deps;
|
|
32
|
+
private readonly running;
|
|
33
|
+
private readonly sessionDirs;
|
|
34
|
+
private readonly subscribers;
|
|
35
|
+
private readonly positions;
|
|
36
|
+
constructor(deps: SubprocessSkillRunnerDeps);
|
|
37
|
+
start(workspace: Workspace, skillId: SkillId, args: string, options?: SkillRunOptions): Promise<SkillRunId>;
|
|
38
|
+
subscribe(runId: SkillRunId, listener: SkillEventListener): SkillRunSubscription;
|
|
39
|
+
isActive(runId: SkillRunId): boolean;
|
|
40
|
+
cancel(runId: SkillRunId): Promise<void>;
|
|
41
|
+
forgetSession(sessionId: string): Promise<void>;
|
|
42
|
+
private drain;
|
|
43
|
+
private emit;
|
|
44
|
+
private resolveSessionDir;
|
|
45
|
+
private recoverSessionDir;
|
|
46
|
+
private buildSessionDir;
|
|
47
|
+
private skillBundleDir;
|
|
48
|
+
private skillBundleDirsFor;
|
|
49
|
+
private bindingFor;
|
|
50
|
+
private now;
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=SubprocessSkillRunner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SubprocessSkillRunner.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/skill/SubprocessSkillRunner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,aAAa,EACb,kBAAkB,EAElB,aAAa,EACb,WAAW,EACX,eAAe,EACf,oBAAoB,EACpB,SAAS,EACT,iBAAiB,EAClB,MAAM,eAAe,CAAA;AACtB,OAAO,KAAK,EAAE,YAAY,EAAE,sBAAsB,EAA8D,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5J,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AASpE,MAAM,MAAM,OAAO,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,OAAO,EAAE,YAAY,KAAK,YAAY,CAAA;AAEvG;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAA;CAC5B;AAED,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAA;IAIrC,QAAQ,CAAC,iBAAiB,EAAE,CAAC,UAAU,EAAE,sBAAsB,KAAK,YAAY,CAAA;IAEhF,QAAQ,CAAC,YAAY,EAAE,sBAAsB,CAAA;IAC7C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IAEvB,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAA;IACrC,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAA;IACxB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,MAAM,CAAA;IAE7B,QAAQ,CAAC,aAAa,CAAC,EAAE,SAAS,iBAAiB,EAAE,CAAA;IAErD,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAA;IAejC,QAAQ,CAAC,WAAW,CAAC,EAAE;QACrB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;QACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KACzB,CAAA;IAID,QAAQ,CAAC,QAAQ,CAAC,EAAE,iBAAiB,CAAA;CACtC;AAOD,qBAAa,qBAAsB,YAAW,WAAW;IAQ3C,OAAO,CAAC,QAAQ,CAAC,IAAI;IAPjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAmC;IAE3D,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA4B;IACxD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAiD;IAE7E,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAgC;gBAE7B,IAAI,EAAE,yBAAyB;IAEtD,KAAK,CACT,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,eAAe,GACxB,OAAO,CAAC,UAAU,CAAC;IAoGtB,SAAS,CAAC,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,kBAAkB,GAAG,oBAAoB;IAchF,QAAQ,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO;IAI9B,MAAM,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAQxC,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;YASvC,KAAK;YAqFL,IAAI;YAiBJ,iBAAiB;YAkBjB,iBAAiB;YAQjB,eAAe;IA6C7B,OAAO,CAAC,cAAc;YAOR,kBAAkB;IAQhC,OAAO,CAAC,UAAU;IAalB,OAAO,CAAC,GAAG;CAGZ"}
|
|
@@ -1,18 +1,17 @@
|
|
|
1
|
-
import { mkdir, rm, symlink } from 'node:fs/promises';
|
|
1
|
+
import { mkdir, rm, symlink, writeFile } from 'node:fs/promises';
|
|
2
2
|
import { dirname, join } from 'node:path';
|
|
3
3
|
import { newSkillRunId, NotFoundError } from '@braidhq/core';
|
|
4
|
-
import { AbsolutePath as AbsolutePathSchema, McpServerId, SkillEvent as SkillEventSchema, SkillRunId as SkillRunIdSchema } from '@braidhq/schema';
|
|
5
|
-
import { sessionDirPath } from '../
|
|
4
|
+
import { AbsolutePath as AbsolutePathSchema, McpServerId, SkillEvent as SkillEventSchema, SkillRunId as SkillRunIdSchema, splitSkillId } from '@braidhq/schema';
|
|
5
|
+
import { sessionDirPath } from '../_shared/paths.js';
|
|
6
6
|
import { createAsyncQueue } from './asyncQueue.js';
|
|
7
|
-
import { writeMcpConfigFile } from './mcpConfig.js';
|
|
8
7
|
import { attachOutputBuffers } from './subprocessEventStream.js';
|
|
9
8
|
export class SubprocessSkillRunner {
|
|
10
9
|
deps;
|
|
11
10
|
running = new Map();
|
|
12
|
-
|
|
11
|
+
// Maps sessionId to cwd for resuming. claude needs the same cwd per turn.
|
|
13
12
|
sessionDirs = new Map();
|
|
14
13
|
subscribers = new Map();
|
|
15
|
-
|
|
14
|
+
// How many events have been emitted (and persisted) per run so far.
|
|
16
15
|
positions = new Map();
|
|
17
16
|
constructor(deps) {
|
|
18
17
|
this.deps = deps;
|
|
@@ -21,6 +20,7 @@ export class SubprocessSkillRunner {
|
|
|
21
20
|
const manifest = await this.deps.skillRegistry.get(workspace, skillId);
|
|
22
21
|
const runId = newSkillRunId();
|
|
23
22
|
const sessionDir = await this.resolveSessionDir(workspace, runId, options?.resumeSessionId);
|
|
23
|
+
const skillBundleDirs = await this.skillBundleDirsFor(workspace, sessionDir);
|
|
24
24
|
const gatewayArgs = [
|
|
25
25
|
'openapi-mcp-gateway',
|
|
26
26
|
'--spec',
|
|
@@ -29,52 +29,54 @@ export class SubprocessSkillRunner {
|
|
|
29
29
|
'stdio',
|
|
30
30
|
'--name',
|
|
31
31
|
'braid-core',
|
|
32
|
-
// Forward the caller's Bearer token so the gateway authenticates
|
|
33
|
-
//
|
|
34
|
-
//
|
|
35
|
-
// server's auth middleware rejects every callback with 401.
|
|
32
|
+
// Forward the caller's Bearer token so the gateway authenticates its outgoing API calls.
|
|
33
|
+
// The gateway resolves `${BRAID_TOKEN}` against its process env at startup.
|
|
34
|
+
// Without this the server's auth middleware rejects every callback with 401.
|
|
36
35
|
// eslint-disable-next-line no-template-curly-in-string
|
|
37
36
|
...(options?.callerToken ? ['--auth-type', 'bearer', '--auth-token', '${BRAID_TOKEN}'] : []),
|
|
38
37
|
];
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
const
|
|
38
|
+
// Compose the MCP server list, the built-in gateway plus any the workspace
|
|
39
|
+
// declares. The binding writes whatever config its CLI needs from this.
|
|
40
|
+
const gatewayServers = this.deps.coreGateway
|
|
41
|
+
? [{
|
|
42
|
+
id: McpServerId.parse('braid-core'),
|
|
43
|
+
transport: 'stdio',
|
|
44
|
+
command: this.deps.coreGateway.uvxBin ?? 'uvx',
|
|
45
|
+
args: gatewayArgs,
|
|
46
|
+
}]
|
|
47
|
+
: [];
|
|
48
|
+
const binding = this.bindingFor(manifest.frontmatter.braid.agent);
|
|
49
|
+
const invocation = await binding.resolveSpawn({
|
|
50
50
|
skillId,
|
|
51
51
|
args,
|
|
52
52
|
workspace,
|
|
53
53
|
manifest,
|
|
54
54
|
apiUrl: this.deps.apiUrl,
|
|
55
|
-
|
|
55
|
+
mcpServers: [...gatewayServers, ...workspace.mcpServers],
|
|
56
|
+
sessionDir: AbsolutePathSchema.parse(sessionDir),
|
|
57
|
+
skillBundleDirs,
|
|
56
58
|
...(options?.resumeSessionId ? { resumeSessionId: options.resumeSessionId } : {}),
|
|
57
59
|
});
|
|
58
60
|
const spawnFn = this.deps.spawn ?? (await defaultSpawn());
|
|
59
|
-
// BRAID_SESSION_DIR resolves ambiguity in SKILL.md paths
|
|
60
|
-
// both `BRAID_WORKSPACE` and a cwd
|
|
61
|
-
// otherwise guess
|
|
61
|
+
// BRAID_SESSION_DIR resolves ambiguity in SKILL.md paths.
|
|
62
|
+
// claude sees both `BRAID_WORKSPACE` and a cwd inside it,
|
|
63
|
+
// and would otherwise guess which one `.claude/skills/...` is rooted in.
|
|
62
64
|
const child = spawnFn(invocation.bin, [...invocation.args], {
|
|
63
65
|
cwd: sessionDir,
|
|
64
66
|
env: {
|
|
65
67
|
...invocation.env,
|
|
66
68
|
BRAID_SESSION_DIR: sessionDir,
|
|
67
|
-
// BRAID_TOKEN is read by the braid-core MCP gateway
|
|
68
|
-
// shell-level callback (curl in a SKILL.md)
|
|
69
|
-
// can authenticate against the running server.
|
|
69
|
+
// BRAID_TOKEN is read by the braid-core MCP gateway,
|
|
70
|
+
// and by any shell-level callback (curl in a SKILL.md),
|
|
71
|
+
// so the subprocess can authenticate against the running server.
|
|
70
72
|
...(options?.callerToken ? { BRAID_TOKEN: options.callerToken } : {}),
|
|
71
73
|
...(options?.extraEnv ?? {}),
|
|
72
74
|
},
|
|
73
75
|
stdio: ['ignore', 'pipe', 'pipe'],
|
|
74
76
|
});
|
|
75
77
|
this.running.set(runId, { workspace, child });
|
|
76
|
-
// Persist the started record up front
|
|
77
|
-
// immediately,
|
|
78
|
+
// Persist the started record up front,
|
|
79
|
+
// so listing endpoints see the run immediately, before any output.
|
|
78
80
|
const startedAt = this.now();
|
|
79
81
|
const initialRecord = {
|
|
80
82
|
runId,
|
|
@@ -93,12 +95,13 @@ export class SubprocessSkillRunner {
|
|
|
93
95
|
skillId,
|
|
94
96
|
at: startedAt,
|
|
95
97
|
});
|
|
96
|
-
// Fire-and-forget the drain
|
|
97
|
-
// can return immediately.
|
|
98
|
+
// Fire-and-forget the drain,
|
|
99
|
+
// so the HTTP request that called start() can return immediately.
|
|
98
100
|
void this.drain({
|
|
99
101
|
workspace,
|
|
100
102
|
runId,
|
|
101
103
|
child,
|
|
104
|
+
parseLine: binding.parseLine,
|
|
102
105
|
skillId,
|
|
103
106
|
args,
|
|
104
107
|
sessionDir,
|
|
@@ -154,13 +157,18 @@ export class SubprocessSkillRunner {
|
|
|
154
157
|
at: input.startedAt,
|
|
155
158
|
}));
|
|
156
159
|
const queue = createAsyncQueue();
|
|
157
|
-
const buffers = attachOutputBuffers(input.child, queue.push, () => this.now());
|
|
158
|
-
input.child.on('close', (code) => {
|
|
160
|
+
const buffers = attachOutputBuffers(input.child, input.parseLine, queue.push, () => this.now());
|
|
161
|
+
input.child.on('close', (code, signal) => {
|
|
159
162
|
buffers.flush();
|
|
160
163
|
queue.push(SkillEventSchema.parse({
|
|
161
164
|
type: 'completed',
|
|
162
165
|
runId: input.runId,
|
|
163
|
-
|
|
166
|
+
// A signal-killed run must be reported as non-zero,
|
|
167
|
+
// e.g. cancel via SIGTERM, or OS-level SIGKILL.
|
|
168
|
+
// Downstream consumers then distinguish it from a clean exit.
|
|
169
|
+
// Without this, `code ?? 0` collapses every signal kill to 0,
|
|
170
|
+
// and cancellation looks identical to a clean run.
|
|
171
|
+
exitCode: code ?? (signal ? 128 : 0),
|
|
164
172
|
at: this.now(),
|
|
165
173
|
}));
|
|
166
174
|
queue.end();
|
|
@@ -193,17 +201,16 @@ export class SubprocessSkillRunner {
|
|
|
193
201
|
at: this.now(),
|
|
194
202
|
});
|
|
195
203
|
this.subscribers.delete(input.runId);
|
|
196
|
-
// Keep the session dir on disk if a session id was captured
|
|
197
|
-
// stores conversation state per-cwd, so the dir must survive between
|
|
198
|
-
//
|
|
204
|
+
// Keep the session dir on disk if a session id was captured.
|
|
205
|
+
// claude stores conversation state per-cwd, so the dir must survive between turns.
|
|
206
|
+
// GC happens via forgetSession(sessionId).
|
|
199
207
|
const keepForResume = capturedSessionId !== null;
|
|
200
208
|
if (this.deps.cleanupSession !== false && !keepForResume)
|
|
201
209
|
await rm(input.sessionDir, { recursive: true, force: true }).catch(() => { });
|
|
202
210
|
}
|
|
203
211
|
}
|
|
204
|
-
// Persist first, then broadcast.
|
|
205
|
-
//
|
|
206
|
-
// positionAtSubscribe.
|
|
212
|
+
// Persist first, then broadcast.
|
|
213
|
+
// This guarantees a just-subscribed listener receives every event strictly past its positionAtSubscribe.
|
|
207
214
|
async emit(workspace, runId, event) {
|
|
208
215
|
await this.deps.runRepository.appendEvent(workspace, runId, event);
|
|
209
216
|
const next = (this.positions.get(runId) ?? 0) + 1;
|
|
@@ -242,25 +249,70 @@ export class SubprocessSkillRunner {
|
|
|
242
249
|
}
|
|
243
250
|
async buildSessionDir(workspace, runId) {
|
|
244
251
|
const sessionDir = sessionDirPath(workspace.rootPath, runId);
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
const
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
const slashName = manifest.frontmatter.name;
|
|
251
|
-
if (linked.has(slashName))
|
|
252
|
-
continue;
|
|
253
|
-
linked.add(slashName);
|
|
254
|
-
await symlink(dirname(manifest.path), join(skillsDir, slashName), 'dir');
|
|
255
|
-
}
|
|
252
|
+
// Companion reference docs stay under `.claude/skills/<name>/`,
|
|
253
|
+
// so SKILL.md bodies keep reading `<cwd>/.claude/skills/shared/...`.
|
|
254
|
+
const docsDir = join(sessionDir, '.claude', 'skills');
|
|
255
|
+
await mkdir(docsDir, { recursive: true });
|
|
256
|
+
const linkedRefs = new Set();
|
|
256
257
|
for (const reference of this.deps.referenceDirs ?? []) {
|
|
257
|
-
if (
|
|
258
|
+
if (linkedRefs.has(reference.name))
|
|
258
259
|
continue;
|
|
259
|
-
|
|
260
|
-
await symlink(reference.path, join(
|
|
260
|
+
linkedRefs.add(reference.name);
|
|
261
|
+
await symlink(reference.path, join(docsDir, reference.name), 'dir');
|
|
262
|
+
}
|
|
263
|
+
// Invokable skills stage as one claude plugin per namespace, so a skill
|
|
264
|
+
// invokes as `/namespace:verb`. The colon lives only in the invocation
|
|
265
|
+
// token claude synthesises, never in a path, so the layout is portable.
|
|
266
|
+
const byNamespace = new Map();
|
|
267
|
+
for (const manifest of await this.deps.skillRegistry.list(workspace)) {
|
|
268
|
+
const { namespace } = splitSkillId(manifest.id);
|
|
269
|
+
const bucket = byNamespace.get(namespace) ?? [];
|
|
270
|
+
bucket.push(manifest);
|
|
271
|
+
byNamespace.set(namespace, bucket);
|
|
272
|
+
}
|
|
273
|
+
for (const [namespace, skills] of byNamespace) {
|
|
274
|
+
const pluginDir = this.skillBundleDir(sessionDir, namespace);
|
|
275
|
+
await mkdir(join(pluginDir, '.claude-plugin'), { recursive: true });
|
|
276
|
+
const manifest = { name: namespace, version: '0.0.0', description: `Braid ${namespace} skills` };
|
|
277
|
+
await writeFile(join(pluginDir, '.claude-plugin', 'plugin.json'), `${JSON.stringify(manifest, null, 2)}\n`, 'utf-8');
|
|
278
|
+
const skillsDir = join(pluginDir, 'skills');
|
|
279
|
+
await mkdir(skillsDir, { recursive: true });
|
|
280
|
+
const linked = new Set();
|
|
281
|
+
for (const skill of skills) {
|
|
282
|
+
const { verb } = splitSkillId(skill.id);
|
|
283
|
+
if (linked.has(verb))
|
|
284
|
+
continue;
|
|
285
|
+
linked.add(verb);
|
|
286
|
+
await symlink(dirname(skill.path), join(skillsDir, verb), 'dir');
|
|
287
|
+
}
|
|
261
288
|
}
|
|
262
289
|
return sessionDir;
|
|
263
290
|
}
|
|
291
|
+
skillBundleDir(sessionDir, namespace) {
|
|
292
|
+
return join(sessionDir, '.braid-plugins', namespace);
|
|
293
|
+
}
|
|
294
|
+
// The plugin bundle dir for every namespace present in the workspace.
|
|
295
|
+
// Deterministic from the session dir, so it works on a resumed session,
|
|
296
|
+
// whose bundles were staged on the first run, without restaging.
|
|
297
|
+
async skillBundleDirsFor(workspace, sessionDir) {
|
|
298
|
+
const manifests = await this.deps.skillRegistry.list(workspace);
|
|
299
|
+
const namespaces = [...new Set(manifests.map(manifest => splitSkillId(manifest.id).namespace))];
|
|
300
|
+
return namespaces.map(namespace => this.skillBundleDir(sessionDir, namespace));
|
|
301
|
+
}
|
|
302
|
+
// Merge a skill's agent override onto the server default, then build the binding.
|
|
303
|
+
// Unset override fields inherit the default.
|
|
304
|
+
bindingFor(override) {
|
|
305
|
+
const base = this.deps.defaultAgent;
|
|
306
|
+
const effort = override?.effort ?? base.effort;
|
|
307
|
+
return this.deps.buildAgentBinding({
|
|
308
|
+
id: base.id,
|
|
309
|
+
kind: override?.kind ?? base.kind,
|
|
310
|
+
model: override?.model ?? base.model,
|
|
311
|
+
...(effort ? { effort } : {}),
|
|
312
|
+
extraArgs: base.extraArgs,
|
|
313
|
+
env: base.env,
|
|
314
|
+
});
|
|
315
|
+
}
|
|
264
316
|
now() {
|
|
265
317
|
return (this.deps.clock ?? (() => new Date().toISOString()))();
|
|
266
318
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SubprocessSkillRunner.js","sourceRoot":"","sources":["../../../src/infrastructure/skill/SubprocessSkillRunner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Single-producer, single-consumer async queue backing an `AsyncIterable`.
|
|
3
|
+
* Bridges node `EventEmitter`-style callbacks,
|
|
4
|
+
* which fire whenever subprocess stdout, stderr, or close events arrive,
|
|
5
|
+
* into `for await of` consumers (Hono's SSE writer, vitest assertions),
|
|
6
|
+
* without buffering every event until the producer is done.
|
|
7
|
+
*
|
|
8
|
+
* `push(item)` enqueues an item and wakes a pending consumer.
|
|
9
|
+
* `end()` signals that no more items are coming,
|
|
10
|
+
* the iterator finishes once it has drained the queue.
|
|
11
|
+
* `iterate()` returns a single-use async generator,
|
|
12
|
+
* calling it more than once is undefined.
|
|
13
|
+
*/
|
|
14
|
+
export interface AsyncQueue<T> {
|
|
15
|
+
push: (item: T) => void;
|
|
16
|
+
end: () => void;
|
|
17
|
+
iterate: () => AsyncGenerator<T>;
|
|
18
|
+
}
|
|
19
|
+
export declare function createAsyncQueue<T>(): AsyncQueue<T>;
|
|
20
|
+
//# sourceMappingURL=asyncQueue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"asyncQueue.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/skill/asyncQueue.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,UAAU,CAAC,CAAC;IAC3B,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,CAAA;IACvB,GAAG,EAAE,MAAM,IAAI,CAAA;IACf,OAAO,EAAE,MAAM,cAAc,CAAC,CAAC,CAAC,CAAA;CACjC;AAED,wBAAgB,gBAAgB,CAAC,CAAC,KAAK,UAAU,CAAC,CAAC,CAAC,CA0CnD"}
|
|
@@ -26,9 +26,8 @@ export function createAsyncQueue() {
|
|
|
26
26
|
}
|
|
27
27
|
if (finished)
|
|
28
28
|
return;
|
|
29
|
-
//
|
|
30
|
-
// where `push` or `end`
|
|
31
|
-
// and the resolver assignment.
|
|
29
|
+
// Re-check inside the Promise constructor to avoid a race,
|
|
30
|
+
// where `push` or `end` fires between the queue-length check and the resolver assignment.
|
|
32
31
|
await new Promise((r) => {
|
|
33
32
|
if (buffer.length > 0 || finished) {
|
|
34
33
|
r();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"asyncQueue.js","sourceRoot":"","sources":["../../../src/infrastructure/
|
|
1
|
+
{"version":3,"file":"asyncQueue.js","sourceRoot":"","sources":["../../../src/infrastructure/skill/asyncQueue.ts"],"names":[],"mappings":"AAmBA,MAAM,UAAU,gBAAgB;IAC9B,MAAM,MAAM,GAAQ,EAAE,CAAA;IACtB,IAAI,QAAQ,GAAwB,IAAI,CAAA;IACxC,IAAI,QAAQ,GAAG,KAAK,CAAA;IAEpB,MAAM,IAAI,GAAG,GAAS,EAAE;QACtB,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,CAAC,GAAG,QAAQ,CAAA;YAClB,QAAQ,GAAG,IAAI,CAAA;YACf,CAAC,EAAE,CAAA;QACL,CAAC;IACH,CAAC,CAAA;IAED,OAAO;QACL,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE;YACb,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YACjB,IAAI,EAAE,CAAA;QACR,CAAC;QACD,GAAG,EAAE,GAAG,EAAE;YACR,QAAQ,GAAG,IAAI,CAAA;YACf,IAAI,EAAE,CAAA;QACR,CAAC;QACD,OAAO,EAAE,KAAK,SAAS,CAAC,CAAC,OAAO;YAC9B,OAAO,IAAI,EAAE,CAAC;gBACZ,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACtB,MAAM,MAAM,CAAC,KAAK,EAAG,CAAA;oBACrB,SAAQ;gBACV,CAAC;gBACD,IAAI,QAAQ;oBACV,OAAM;gBACR,2DAA2D;gBAC3D,0FAA0F;gBAC1F,MAAM,IAAI,OAAO,CAAO,CAAC,CAAC,EAAE,EAAE;oBAC5B,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,QAAQ,EAAE,CAAC;wBAClC,CAAC,EAAE,CAAA;wBACH,OAAM;oBACR,CAAC;oBACD,QAAQ,GAAG,CAAC,CAAA;gBACd,CAAC,CAAC,CAAA;YACJ,CAAC;QACH,CAAC;KACF,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export type LineHandler = (line: string) => void;
|
|
2
|
+
/**
|
|
3
|
+
* Splits a chunked text stream into newline-delimited lines,
|
|
4
|
+
* invoking the handler once per complete line.
|
|
5
|
+
* Partial lines are buffered until the next chunk completes them.
|
|
6
|
+
* Call `flush()` after the source closes to release any trailing line without a terminator.
|
|
7
|
+
*/
|
|
8
|
+
export declare class LineBuffer {
|
|
9
|
+
private readonly onLine;
|
|
10
|
+
private buffer;
|
|
11
|
+
constructor(onLine: LineHandler);
|
|
12
|
+
append(chunk: string): void;
|
|
13
|
+
flush(): void;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=lineBuffer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lineBuffer.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/skill/lineBuffer.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;AAEhD;;;;;GAKG;AACH,qBAAa,UAAU;IAGT,OAAO,CAAC,QAAQ,CAAC,MAAM;IAFnC,OAAO,CAAC,MAAM,CAAK;gBAEU,MAAM,EAAE,WAAW;IAEhD,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAY3B,KAAK,IAAI,IAAI;CAOd"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Splits a chunked text stream into newline-delimited lines,
|
|
3
|
-
* handler
|
|
4
|
-
* the next chunk completes them.
|
|
5
|
-
* release any trailing line without a terminator.
|
|
2
|
+
* Splits a chunked text stream into newline-delimited lines,
|
|
3
|
+
* invoking the handler once per complete line.
|
|
4
|
+
* Partial lines are buffered until the next chunk completes them.
|
|
5
|
+
* Call `flush()` after the source closes to release any trailing line without a terminator.
|
|
6
6
|
*/
|
|
7
7
|
export class LineBuffer {
|
|
8
8
|
onLine;
|
|
@@ -29,16 +29,4 @@ export class LineBuffer {
|
|
|
29
29
|
this.onLine(remainder);
|
|
30
30
|
}
|
|
31
31
|
}
|
|
32
|
-
|
|
33
|
-
const trimmed = line.trim();
|
|
34
|
-
if (trimmed.length === 0)
|
|
35
|
-
return undefined;
|
|
36
|
-
try {
|
|
37
|
-
const parsed = JSON.parse(trimmed);
|
|
38
|
-
return parsed;
|
|
39
|
-
}
|
|
40
|
-
catch {
|
|
41
|
-
return undefined;
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
//# sourceMappingURL=streamJsonParser.js.map
|
|
32
|
+
//# sourceMappingURL=lineBuffer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lineBuffer.js","sourceRoot":"","sources":["../../../src/infrastructure/skill/lineBuffer.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,MAAM,OAAO,UAAU;IAGQ;IAFrB,MAAM,GAAG,EAAE,CAAA;IAEnB,YAA6B,MAAmB;QAAnB,WAAM,GAAN,MAAM,CAAa;IAAG,CAAC;IAEpD,MAAM,CAAC,KAAa;QAClB,IAAI,CAAC,MAAM,IAAI,KAAK,CAAA;QACpB,IAAI,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;QAC5C,OAAO,YAAY,IAAI,CAAC,EAAE,CAAC;YACzB,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC,CAAA;YAC/C,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,GAAG,CAAC,CAAC,CAAA;YACjD,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;gBACjB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;YACnB,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;QAC1C,CAAC;IACH,CAAC;IAED,KAAK;QACH,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC;YAC1B,OAAM;QACR,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAA;QAC7B,IAAI,CAAC,MAAM,GAAG,EAAE,CAAA;QAChB,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;IACxB,CAAC;CACF"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { Clock, RunRepository, WorkspaceRepository } from '@braidhq/core';
|
|
2
|
+
/**
|
|
3
|
+
* Run records survive across server restarts,
|
|
4
|
+
* but the subprocess that was driving each run does not.
|
|
5
|
+
* On startup any run without a `completedAt` timestamp is an orphan,
|
|
6
|
+
* nobody is going to drain its events.
|
|
7
|
+
* We tag those with a synthetic `error` event,
|
|
8
|
+
* so the UI can show why the transcript is truncated.
|
|
9
|
+
* A `completed` event then makes the run leave the active list.
|
|
10
|
+
*
|
|
11
|
+
* Idempotent: runs that are already marked completed are skipped.
|
|
12
|
+
*/
|
|
13
|
+
export declare function reapOrphanRuns(deps: {
|
|
14
|
+
workspaceRepository: WorkspaceRepository;
|
|
15
|
+
runRepository: RunRepository;
|
|
16
|
+
clock: Clock;
|
|
17
|
+
}): Promise<{
|
|
18
|
+
reaped: number;
|
|
19
|
+
}>;
|
|
20
|
+
//# sourceMappingURL=orphanReaper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"orphanReaper.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/skill/orphanReaper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAA;AAG9E;;;;;;;;;;GAUG;AACH,wBAAsB,cAAc,CAAC,IAAI,EAAE;IACzC,mBAAmB,EAAE,mBAAmB,CAAA;IACxC,aAAa,EAAE,aAAa,CAAA;IAC5B,KAAK,EAAE,KAAK,CAAA;CACb,GAAG,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CA+B9B"}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Run records survive across server restarts,
|
|
3
|
-
* driving each run does not.
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
2
|
+
* Run records survive across server restarts,
|
|
3
|
+
* but the subprocess that was driving each run does not.
|
|
4
|
+
* On startup any run without a `completedAt` timestamp is an orphan,
|
|
5
|
+
* nobody is going to drain its events.
|
|
6
|
+
* We tag those with a synthetic `error` event,
|
|
7
|
+
* so the UI can show why the transcript is truncated.
|
|
8
|
+
* A `completed` event then makes the run leave the active list.
|
|
7
9
|
*
|
|
8
10
|
* Idempotent: runs that are already marked completed are skipped.
|
|
9
11
|
*/
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"orphanReaper.js","sourceRoot":"","sources":["../../../src/infrastructure/skill/orphanReaper.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAIpC;IACC,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,CAAA;IACxD,IAAI,MAAM,GAAG,CAAC,CAAA;IACd,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,SAAS,CAAC,CAAA;QAC/D,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,IAAI,MAAM,CAAC,WAAW,KAAK,SAAS;gBAClC,SAAQ;YACV,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAA;YAC3B,MAAM,KAAK,GAAe;gBACxB,IAAI,EAAE,OAAO;gBACb,OAAO,EAAE,+DAA+D;gBACxE,EAAE;aACH,CAAA;YACD,MAAM,SAAS,GAAe;gBAC5B,IAAI,EAAE,WAAW;gBACjB,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,QAAQ,EAAE,CAAC,CAAC;gBACZ,EAAE;aACH,CAAA;YACD,MAAM,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,SAAS,EAAE,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;YACpE,MAAM,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,SAAS,EAAE,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,CAAA;YACxE,MAAM,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,SAAS,EAAE;gBAC7C,GAAG,MAAM;gBACT,WAAW,EAAE,EAAE;gBACf,QAAQ,EAAE,CAAC,CAAC;aACb,CAAC,CAAA;YACF,MAAM,EAAE,CAAA;QACV,CAAC;IACH,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,CAAA;AACnB,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { SkillEvent } from '@braidhq/schema';
|
|
2
|
+
import type { ChildProcess } from 'node:child_process';
|
|
3
|
+
/**
|
|
4
|
+
* Maps one stdout line to zero or more SkillEvents.
|
|
5
|
+
* The agent binding owns this, since the line format is the agent's own.
|
|
6
|
+
*/
|
|
7
|
+
export type LineParser = (line: string, now: string) => SkillEvent[];
|
|
8
|
+
/**
|
|
9
|
+
* Wires a child's stdout and stderr to a single SkillEvent callback.
|
|
10
|
+
* `parseLine` comes from the agent binding, so this stays format-agnostic.
|
|
11
|
+
* Returns `flush` so callers can drain the final un-terminated line on `close`.
|
|
12
|
+
*/
|
|
13
|
+
export declare function attachOutputBuffers(child: ChildProcess, parseLine: LineParser, onEvent: (event: SkillEvent) => void, now: () => string): {
|
|
14
|
+
flush: () => void;
|
|
15
|
+
};
|
|
16
|
+
//# sourceMappingURL=subprocessEventStream.d.ts.map
|