@shepai/cli 1.180.0 → 1.181.0-pr512.ba01d33
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/apis/json-schema/MessagingCommand.yaml +28 -0
- package/apis/json-schema/MessagingCommandType.yaml +17 -0
- package/apis/json-schema/MessagingConfig.yaml +40 -0
- package/apis/json-schema/MessagingFrameType.yaml +8 -0
- package/apis/json-schema/MessagingNotification.yaml +22 -0
- package/apis/json-schema/MessagingPlatform.yaml +7 -0
- package/apis/json-schema/MessagingPlatformConfig.yaml +38 -0
- package/apis/json-schema/Settings.yaml +3 -0
- package/dist/packages/core/src/application/ports/output/services/gateway-client.interface.d.ts +58 -0
- package/dist/packages/core/src/application/ports/output/services/gateway-client.interface.d.ts.map +1 -0
- package/dist/packages/core/src/application/ports/output/services/gateway-client.interface.js +10 -0
- package/dist/packages/core/src/application/ports/output/services/message-sender.interface.d.ts +18 -0
- package/dist/packages/core/src/application/ports/output/services/message-sender.interface.d.ts.map +1 -0
- package/dist/packages/core/src/application/ports/output/services/message-sender.interface.js +9 -0
- package/dist/packages/core/src/application/ports/output/services/messaging-service.interface.d.ts +34 -0
- package/dist/packages/core/src/application/ports/output/services/messaging-service.interface.d.ts.map +1 -0
- package/dist/packages/core/src/application/ports/output/services/messaging-service.interface.js +12 -0
- package/dist/packages/core/src/application/ports/output/services/telegram-client.interface.d.ts +19 -0
- package/dist/packages/core/src/application/ports/output/services/telegram-client.interface.d.ts.map +1 -0
- package/dist/packages/core/src/application/ports/output/services/telegram-client.interface.js +8 -0
- package/dist/packages/core/src/application/use-cases/messaging/begin-pairing.use-case.d.ts +46 -0
- package/dist/packages/core/src/application/use-cases/messaging/begin-pairing.use-case.d.ts.map +1 -0
- package/dist/packages/core/src/application/use-cases/messaging/begin-pairing.use-case.js +148 -0
- package/dist/packages/core/src/application/use-cases/messaging/confirm-pairing.use-case.d.ts +19 -0
- package/dist/packages/core/src/application/use-cases/messaging/confirm-pairing.use-case.d.ts.map +1 -0
- package/dist/packages/core/src/application/use-cases/messaging/confirm-pairing.use-case.js +63 -0
- package/dist/packages/core/src/application/use-cases/messaging/disconnect-messaging.use-case.d.ts +19 -0
- package/dist/packages/core/src/application/use-cases/messaging/disconnect-messaging.use-case.d.ts.map +1 -0
- package/dist/packages/core/src/application/use-cases/messaging/disconnect-messaging.use-case.js +65 -0
- package/dist/packages/core/src/domain/generated/output.d.ts +155 -0
- package/dist/packages/core/src/domain/generated/output.d.ts.map +1 -1
- package/dist/packages/core/src/domain/generated/output.js +26 -0
- package/dist/packages/core/src/infrastructure/di/container.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/di/container.js +117 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.d.ts +24 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.js +117 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/056-add-messaging-remote-control.d.ts +22 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/056-add-messaging-remote-control.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/056-add-messaging-remote-control.js +62 -0
- package/dist/packages/core/src/infrastructure/repositories/sqlite-settings.repository.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/repositories/sqlite-settings.repository.js +43 -3
- package/dist/packages/core/src/infrastructure/services/messaging/chat-relay.d.ts +45 -0
- package/dist/packages/core/src/infrastructure/services/messaging/chat-relay.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/services/messaging/chat-relay.js +100 -0
- package/dist/packages/core/src/infrastructure/services/messaging/command-executor.d.ts +53 -0
- package/dist/packages/core/src/infrastructure/services/messaging/command-executor.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/services/messaging/command-executor.js +200 -0
- package/dist/packages/core/src/infrastructure/services/messaging/content-sanitizer.d.ts +23 -0
- package/dist/packages/core/src/infrastructure/services/messaging/content-sanitizer.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/services/messaging/content-sanitizer.js +39 -0
- package/dist/packages/core/src/infrastructure/services/messaging/http-gateway.client.d.ts +19 -0
- package/dist/packages/core/src/infrastructure/services/messaging/http-gateway.client.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/services/messaging/http-gateway.client.js +124 -0
- package/dist/packages/core/src/infrastructure/services/messaging/http-telegram.client.d.ts +18 -0
- package/dist/packages/core/src/infrastructure/services/messaging/http-telegram.client.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/services/messaging/http-telegram.client.js +60 -0
- package/dist/packages/core/src/infrastructure/services/messaging/messaging-tunnel.adapter.d.ts +68 -0
- package/dist/packages/core/src/infrastructure/services/messaging/messaging-tunnel.adapter.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/services/messaging/messaging-tunnel.adapter.js +262 -0
- package/dist/packages/core/src/infrastructure/services/messaging/messaging.service.d.ts +78 -0
- package/dist/packages/core/src/infrastructure/services/messaging/messaging.service.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/services/messaging/messaging.service.js +279 -0
- package/dist/packages/core/src/infrastructure/services/messaging/notification-emitter.d.ts +33 -0
- package/dist/packages/core/src/infrastructure/services/messaging/notification-emitter.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/services/messaging/notification-emitter.js +79 -0
- package/dist/packages/core/src/infrastructure/services/messaging/stub-gateway.client.d.ts +12 -0
- package/dist/packages/core/src/infrastructure/services/messaging/stub-gateway.client.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/services/messaging/stub-gateway.client.js +26 -0
- package/dist/packages/core/src/infrastructure/services/messaging/telegram-message-sender.d.ts +26 -0
- package/dist/packages/core/src/infrastructure/services/messaging/telegram-message-sender.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/services/messaging/telegram-message-sender.js +49 -0
- package/dist/packages/core/src/infrastructure/services/messaging/telegram-webhook.parser.d.ts +28 -0
- package/dist/packages/core/src/infrastructure/services/messaging/telegram-webhook.parser.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/services/messaging/telegram-webhook.parser.js +45 -0
- package/dist/packages/core/src/infrastructure/services/messaging/tunnel-protocol.d.ts +102 -0
- package/dist/packages/core/src/infrastructure/services/messaging/tunnel-protocol.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/services/messaging/tunnel-protocol.js +16 -0
- package/dist/packages/core/src/infrastructure/services/messaging/whatsapp-webhook.parser.d.ts +39 -0
- package/dist/packages/core/src/infrastructure/services/messaging/whatsapp-webhook.parser.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/services/messaging/whatsapp-webhook.parser.js +56 -0
- package/dist/src/presentation/cli/commands/_serve.command.d.ts.map +1 -1
- package/dist/src/presentation/cli/commands/_serve.command.js +6 -0
- package/dist/src/presentation/cli/commands/app/del.command.d.ts +14 -0
- package/dist/src/presentation/cli/commands/app/del.command.d.ts.map +1 -0
- package/dist/src/presentation/cli/commands/app/del.command.js +58 -0
- package/dist/src/presentation/cli/commands/app/index.d.ts +20 -0
- package/dist/src/presentation/cli/commands/app/index.d.ts.map +1 -0
- package/dist/src/presentation/cli/commands/app/index.js +33 -0
- package/dist/src/presentation/cli/commands/app/ls.command.d.ts +11 -0
- package/dist/src/presentation/cli/commands/app/ls.command.d.ts.map +1 -0
- package/dist/src/presentation/cli/commands/app/ls.command.js +74 -0
- package/dist/src/presentation/cli/commands/app/new.command.d.ts +17 -0
- package/dist/src/presentation/cli/commands/app/new.command.d.ts.map +1 -0
- package/dist/src/presentation/cli/commands/app/new.command.js +58 -0
- package/dist/src/presentation/cli/commands/app/resolve-application.d.ts +10 -0
- package/dist/src/presentation/cli/commands/app/resolve-application.d.ts.map +1 -0
- package/dist/src/presentation/cli/commands/app/resolve-application.js +33 -0
- package/dist/src/presentation/cli/commands/app/show.command.d.ts +11 -0
- package/dist/src/presentation/cli/commands/app/show.command.d.ts.map +1 -0
- package/dist/src/presentation/cli/commands/app/show.command.js +95 -0
- package/dist/src/presentation/cli/commands/settings/index.d.ts.map +1 -1
- package/dist/src/presentation/cli/commands/settings/index.js +3 -1
- package/dist/src/presentation/cli/commands/settings/messaging.command.d.ts +17 -0
- package/dist/src/presentation/cli/commands/settings/messaging.command.d.ts.map +1 -0
- package/dist/src/presentation/cli/commands/settings/messaging.command.js +187 -0
- package/dist/src/presentation/cli/index.js +2 -0
- package/dist/src/presentation/web/app/actions/messaging.d.ts +29 -0
- package/dist/src/presentation/web/app/actions/messaging.d.ts.map +1 -0
- package/dist/src/presentation/web/app/actions/messaging.js +55 -0
- package/dist/src/presentation/web/components/features/settings/messaging-settings-section.d.ts +6 -0
- package/dist/src/presentation/web/components/features/settings/messaging-settings-section.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/settings/messaging-settings-section.js +206 -0
- package/dist/src/presentation/web/components/features/settings/messaging-settings-section.stories.d.ts +17 -0
- package/dist/src/presentation/web/components/features/settings/messaging-settings-section.stories.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/settings/messaging-settings-section.stories.js +55 -0
- package/dist/src/presentation/web/components/features/settings/settings-page-client.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/settings/settings-page-client.js +9 -2
- package/dist/src/presentation/web/dev-server.js +27 -0
- package/dist/translations/ar/cli.json +63 -0
- package/dist/translations/ar/web.json +2 -1
- package/dist/translations/de/cli.json +63 -0
- package/dist/translations/de/web.json +2 -1
- package/dist/translations/en/cli.json +63 -0
- package/dist/translations/en/web.json +13 -12
- package/dist/translations/es/cli.json +63 -0
- package/dist/translations/es/web.json +2 -1
- package/dist/translations/fr/cli.json +63 -0
- package/dist/translations/fr/web.json +2 -1
- package/dist/translations/he/cli.json +63 -0
- package/dist/translations/he/web.json +2 -1
- package/dist/translations/pt/cli.json +63 -0
- package/dist/translations/pt/web.json +2 -1
- package/dist/translations/ru/cli.json +63 -0
- package/dist/translations/ru/web.json +2 -1
- package/dist/translations/uk/cli.json +63 -0
- package/dist/translations/uk/web.json +2 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +3 -1
- package/web/.next/BUILD_ID +1 -1
- package/web/.next/build-manifest.json +2 -2
- package/web/.next/fallback-build-manifest.json +2 -2
- package/web/.next/prerender-manifest.json +3 -3
- package/web/.next/required-server-files.js +3 -3
- package/web/.next/required-server-files.json +3 -3
- package/web/.next/server/app/(dashboard)/@drawer/adopt/page/server-reference-manifest.json +32 -32
- package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/adopt/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/chat/page/server-reference-manifest.json +30 -30
- package/web/.next/server/app/(dashboard)/@drawer/chat/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/chat/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +33 -33
- package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/server-reference-manifest.json +41 -41
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +41 -41
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +31 -31
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +31 -31
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/chat/page/server-reference-manifest.json +30 -30
- package/web/.next/server/app/(dashboard)/chat/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/chat/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +33 -33
- package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/server-reference-manifest.json +41 -41
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +41 -41
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +30 -30
- package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +31 -31
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +31 -31
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/_global-error.html +2 -2
- package/web/.next/server/app/_global-error.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/web/.next/server/app/_not-found/page/server-reference-manifest.json +7 -7
- package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/api/attachments/preview/route.js.nft.json +1 -1
- package/web/.next/server/app/api/evidence/route.js.nft.json +1 -1
- package/web/.next/server/app/api/graph-data/route.js.nft.json +1 -1
- package/web/.next/server/app/api/interactive/chat/[featureId]/messages/route.js.nft.json +1 -1
- package/web/.next/server/app/application/[id]/page/server-reference-manifest.json +15 -15
- package/web/.next/server/app/application/[id]/page.js.nft.json +1 -1
- package/web/.next/server/app/application/[id]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/features/page/server-reference-manifest.json +7 -7
- package/web/.next/server/app/features/page.js.nft.json +1 -1
- package/web/.next/server/app/features/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/settings/page/server-reference-manifest.json +65 -20
- package/web/.next/server/app/settings/page.js +1 -1
- package/web/.next/server/app/settings/page.js.nft.json +1 -1
- package/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/skills/page/server-reference-manifest.json +15 -15
- package/web/.next/server/app/skills/page.js.nft.json +1 -1
- package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/tools/page/server-reference-manifest.json +13 -13
- package/web/.next/server/app/tools/page.js.nft.json +1 -1
- package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/version/page/server-reference-manifest.json +7 -7
- package/web/.next/server/app/version/page.js.nft.json +1 -1
- package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__a402b567._.js +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__b2a4bfcc._.js +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__b2a4bfcc._.js.map +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__cd67a84c._.js +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__cd67a84c._.js.map +1 -1
- package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js +1 -1
- package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js.map +1 -1
- package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_feature-drawer-client_tsx_e9755fc8._.js +2 -2
- package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_feature-drawer-client_tsx_e9755fc8._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{7f428_lucide-react_dist_esm_icons_5da25833._.js → 7f428_lucide-react_dist_esm_icons_469d51b7._.js} +2 -2
- package/web/.next/server/chunks/ssr/7f428_lucide-react_dist_esm_icons_469d51b7._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__013a0318._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__013a0318._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__17dadd08._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__17dadd08._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1925bef0._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1a9687c4._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1a9687c4._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__24756fa9._.js +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__24756fa9._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__42d066e1._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__42d066e1._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__4ee8be85._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__70986695._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__70986695._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__a5ea76a6._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__a5ea76a6._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__dd3e834e._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__dd3e834e._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__e265da61._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__f3ca7bea._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__f3ca7bea._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__bb391c45._.js → [root-of-the-server]__f4f07ee6._.js} +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__f4f07ee6._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_0277d3b5._.js +1 -1
- package/web/.next/server/chunks/ssr/_0277d3b5._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{_d44d091a._.js → _1a4c514f._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_d44d091a._.js.map → _1a4c514f._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/_33bab16e._.js +3 -0
- package/web/.next/server/chunks/ssr/{_b8e8b690._.js.map → _33bab16e._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/_45496654._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_56b9d60f._.js +1 -1
- package/web/.next/server/chunks/ssr/_56b9d60f._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{_8caadb9a._.js → _5d41b1f7._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_8caadb9a._.js.map → _5d41b1f7._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/_708a9069._.js +3 -0
- package/web/.next/server/chunks/ssr/_708a9069._.js.map +1 -0
- package/web/.next/server/chunks/ssr/{_63fc4647._.js → _81197d1b._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_63fc4647._.js.map → _81197d1b._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/{_295fffde._.js → _86bb5eb1._.js} +6 -2
- package/web/.next/server/chunks/ssr/_86bb5eb1._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_946a7fc6._.js +1 -1
- package/web/.next/server/chunks/ssr/_946a7fc6._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_bad61758._.js +3 -0
- package/web/.next/server/chunks/ssr/_bad61758._.js.map +1 -0
- package/web/.next/server/chunks/ssr/{_36489f2b._.js → _ce70bfa0._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_36489f2b._.js.map → _ce70bfa0._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/_d7d82308._.js +3 -0
- package/web/.next/server/chunks/ssr/_d7d82308._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_dd852eae._.js +3 -0
- package/web/.next/server/chunks/ssr/_dd852eae._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_eff1b518._.js +1 -1
- package/web/.next/server/chunks/ssr/_eff1b518._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_f227429a._.js +1 -1
- package/web/.next/server/chunks/ssr/_f227429a._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_f6b812ec._.js +9 -0
- package/web/.next/server/chunks/ssr/_f6b812ec._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_f86fc1bf._.js +1 -1
- package/web/.next/server/chunks/ssr/_f86fc1bf._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_f8c55130._.js +1 -1
- package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js +1 -1
- package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js.map +1 -1
- package/web/.next/server/chunks/ssr/f3a1f_components_common_control-center-drawer_repository-drawer-client_tsx_39a00c03._.js +1 -1
- package/web/.next/server/chunks/ssr/f3a1f_components_common_control-center-drawer_repository-drawer-client_tsx_39a00c03._.js.map +1 -1
- package/web/.next/server/chunks/ssr/node_modules__pnpm_64cc95e9._.js +3 -0
- package/web/.next/server/chunks/ssr/node_modules__pnpm_64cc95e9._.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_36f2bc45._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_36f2bc45._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_486908de._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_486908de._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_5c3596bc._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_5c3596bc._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_6159fef8._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_6159fef8._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_6326f81e._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_6326f81e._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_6b2fdcd8._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_6b2fdcd8._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_74703c9f._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_74703c9f._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_a8056dac._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_a8056dac._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_ad42cc73._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_ad42cc73._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_open-ide_ts_baaca5d5._.js +3 -3
- package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_open-ide_ts_baaca5d5._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_b00bfb08._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_b00bfb08._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_895e5bfa._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_895e5bfa._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_common_base-drawer_base-drawer_tsx_97dfbbc8._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_common_base-drawer_base-drawer_tsx_97dfbbc8._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_features_skills_8a174cac._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_features_skills_8a174cac._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_db9fa0c2._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_f1edcf5e._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_f1edcf5e._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_f9436804._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_f9436804._.js.map +1 -1
- package/web/.next/server/chunks/ssr/translations_23dd5e7e._.js +1 -1
- package/web/.next/server/chunks/ssr/translations_23dd5e7e._.js.map +1 -1
- package/web/.next/server/pages/500.html +2 -2
- package/web/.next/server/server-reference-manifest.js +1 -1
- package/web/.next/server/server-reference-manifest.json +109 -64
- package/web/.next/static/chunks/0239d68df2738a2a.js +1 -0
- package/web/.next/static/chunks/{e2f9e224d1fa1faa.js → 05d641009a42e94b.js} +1 -1
- package/web/.next/static/chunks/{26e2ca76ab6c38b4.js → 0d04391861f2a381.js} +1 -1
- package/web/.next/static/chunks/{f28aef9cf5107c4b.js → 151d16c2c65a4356.js} +1 -1
- package/web/.next/static/chunks/19008d82be3a09a5.js +5 -0
- package/web/.next/static/chunks/{893a2a76546c66a7.js → 193d8b761fec697e.js} +1 -1
- package/web/.next/static/chunks/2bad6607c1e0f153.js +7 -0
- package/web/.next/static/chunks/{7c3fe3c694874dea.js → 32940aa08b947f66.js} +1 -1
- package/web/.next/static/chunks/368809962c4cd597.js +1 -0
- package/web/.next/static/chunks/{dfdcccf73de56960.js → 475e5bd4e8bafc6f.js} +1 -1
- package/web/.next/static/chunks/{8746807722de67a8.js → 55e59f912fff1858.js} +1 -1
- package/web/.next/static/chunks/{490667b2a9bb58e2.js → 66d72ca561bb91ca.js} +1 -1
- package/web/.next/static/chunks/6da04daaac881f27.js +1 -0
- package/web/.next/static/chunks/{2fe20598e1b4793a.js → 75eb5f94364a44bf.js} +2 -2
- package/web/.next/static/chunks/{e8444bf5f6c35f8b.js → 7bbe49d9daedd94d.js} +5 -1
- package/web/.next/static/chunks/{7bc7028587490fff.js → 83ea5b5b0d0a8477.js} +1 -1
- package/web/.next/static/chunks/8fe70d4e73e1fe31.css +1 -0
- package/web/.next/static/chunks/{1bc12075020723ed.js → 9d70c74c84d24724.js} +1 -1
- package/web/.next/static/chunks/{7849c6797be7c6ca.js → a6d8276c88451abf.js} +2 -2
- package/web/.next/static/chunks/b3fa9a303332e7d6.js +3 -0
- package/web/.next/static/chunks/b9b3a6d83e07b213.js +1 -0
- package/web/.next/static/chunks/c92bc820f657f9d9.js +1 -0
- package/web/.next/static/chunks/dd5ab4e1762b5812.js +1 -0
- package/web/.next/static/chunks/{e7da54dde18e7fb2.js → e7b870347bdfe35d.js} +1 -1
- package/web/.next/static/chunks/ecafea5bc026ed41.js +1 -0
- package/web/.next/server/chunks/ssr/7f428_lucide-react_dist_esm_icons_5da25833._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__a6f2b763._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__a6f2b763._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__bb391c45._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_295fffde._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_44531b76._.js +0 -9
- package/web/.next/server/chunks/ssr/_44531b76._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_5bf2415e._.js +0 -7
- package/web/.next/server/chunks/ssr/_5bf2415e._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_869a3a15._.js +0 -3
- package/web/.next/server/chunks/ssr/_869a3a15._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_b227ff50._.js +0 -3
- package/web/.next/server/chunks/ssr/_b227ff50._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_b8e8b690._.js +0 -3
- package/web/.next/server/chunks/ssr/_e071ba48._.js +0 -3
- package/web/.next/server/chunks/ssr/_e071ba48._.js.map +0 -1
- package/web/.next/server/chunks/ssr/node_modules__pnpm_747b43ac._.js +0 -3
- package/web/.next/server/chunks/ssr/node_modules__pnpm_747b43ac._.js.map +0 -1
- package/web/.next/static/chunks/06b9d6dbf635c370.css +0 -1
- package/web/.next/static/chunks/1ae0cf5be30ef398.js +0 -1
- package/web/.next/static/chunks/1fa1574b87bd2eb1.js +0 -1
- package/web/.next/static/chunks/8492d8e0b5f9a4e8.js +0 -1
- package/web/.next/static/chunks/927442d2628f6e22.js +0 -1
- package/web/.next/static/chunks/a1098522326428d1.js +0 -1
- package/web/.next/static/chunks/b99506a6f7bc2fa8.js +0 -1
- package/web/.next/static/chunks/be89c20c257247ad.js +0 -7
- package/web/.next/static/chunks/c0bd3ffcf94d1845.js +0 -7
- package/web/.next/static/chunks/f6d47ff35d612852.js +0 -5
- /package/web/.next/static/{GQFJf3UCD4D5C4NCn8eXl → Rb8tiiSfY1LEpEkuZLtTr}/_buildManifest.js +0 -0
- /package/web/.next/static/{GQFJf3UCD4D5C4NCn8eXl → Rb8tiiSfY1LEpEkuZLtTr}/_clientMiddlewareManifest.json +0 -0
- /package/web/.next/static/{GQFJf3UCD4D5C4NCn8eXl → Rb8tiiSfY1LEpEkuZLtTr}/_ssgManifest.js +0 -0
package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.d.ts
CHANGED
|
@@ -87,6 +87,30 @@ export interface SettingsRow {
|
|
|
87
87
|
fab_position_swapped: number;
|
|
88
88
|
skill_injection_enabled: number;
|
|
89
89
|
skill_injection_skills: string | null;
|
|
90
|
+
messaging_enabled: number;
|
|
91
|
+
messaging_gateway_url: string | null;
|
|
92
|
+
messaging_device_id: string | null;
|
|
93
|
+
messaging_gateway_client_id: string | null;
|
|
94
|
+
messaging_debounce_ms: number | null;
|
|
95
|
+
messaging_chat_buffer_ms: number | null;
|
|
96
|
+
messaging_telegram_enabled: number;
|
|
97
|
+
messaging_telegram_paired: number;
|
|
98
|
+
messaging_telegram_chat_id: string | null;
|
|
99
|
+
messaging_telegram_route_id: string | null;
|
|
100
|
+
messaging_telegram_route_token: string | null;
|
|
101
|
+
messaging_telegram_public_url: string | null;
|
|
102
|
+
messaging_telegram_bot_token: string | null;
|
|
103
|
+
messaging_telegram_pending_code: string | null;
|
|
104
|
+
messaging_telegram_pending_expires_at: string | null;
|
|
105
|
+
messaging_whatsapp_enabled: number;
|
|
106
|
+
messaging_whatsapp_paired: number;
|
|
107
|
+
messaging_whatsapp_chat_id: string | null;
|
|
108
|
+
messaging_whatsapp_route_id: string | null;
|
|
109
|
+
messaging_whatsapp_route_token: string | null;
|
|
110
|
+
messaging_whatsapp_public_url: string | null;
|
|
111
|
+
messaging_whatsapp_bot_token: string | null;
|
|
112
|
+
messaging_whatsapp_pending_code: string | null;
|
|
113
|
+
messaging_whatsapp_pending_expires_at: string | null;
|
|
90
114
|
}
|
|
91
115
|
/**
|
|
92
116
|
* Maps Settings domain object to database row.
|
package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings.mapper.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EACV,QAAQ,
|
|
1
|
+
{"version":3,"file":"settings.mapper.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.ts"],"names":[],"mappings":"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"}
|
|
@@ -115,8 +115,58 @@ export function toDatabase(settings) {
|
|
|
115
115
|
skill_injection_skills: settings.workflow.skillInjection?.skills?.length
|
|
116
116
|
? JSON.stringify(settings.workflow.skillInjection.skills)
|
|
117
117
|
: null,
|
|
118
|
+
// Messaging remote control (migration 056)
|
|
119
|
+
...messagingToRow(settings.messaging),
|
|
118
120
|
};
|
|
119
121
|
}
|
|
122
|
+
/**
|
|
123
|
+
* Serialize MessagingConfig into the snake_case DB row columns.
|
|
124
|
+
* An undefined config writes zeros/nulls so the row is valid.
|
|
125
|
+
*/
|
|
126
|
+
function messagingToRow(messaging) {
|
|
127
|
+
const tg = messaging?.telegram;
|
|
128
|
+
const wa = messaging?.whatsapp;
|
|
129
|
+
return {
|
|
130
|
+
messaging_enabled: messaging?.enabled ? 1 : 0,
|
|
131
|
+
messaging_gateway_url: messaging?.gatewayUrl ?? null,
|
|
132
|
+
messaging_device_id: messaging?.deviceId ?? null,
|
|
133
|
+
messaging_gateway_client_id: messaging?.gatewayClientId ?? null,
|
|
134
|
+
messaging_debounce_ms: messaging?.debounceMs ?? null,
|
|
135
|
+
messaging_chat_buffer_ms: messaging?.chatBufferMs ?? null,
|
|
136
|
+
messaging_telegram_enabled: tg?.enabled ? 1 : 0,
|
|
137
|
+
messaging_telegram_paired: tg?.paired ? 1 : 0,
|
|
138
|
+
messaging_telegram_chat_id: tg?.chatId ?? null,
|
|
139
|
+
messaging_telegram_route_id: tg?.routeId ?? null,
|
|
140
|
+
messaging_telegram_route_token: tg?.routeToken ?? null,
|
|
141
|
+
messaging_telegram_public_url: tg?.publicUrl ?? null,
|
|
142
|
+
messaging_telegram_bot_token: tg?.botToken ?? null,
|
|
143
|
+
messaging_telegram_pending_code: tg?.pendingPairingCode ?? null,
|
|
144
|
+
messaging_telegram_pending_expires_at: serializeIsoLike(tg?.pendingPairingExpiresAt),
|
|
145
|
+
messaging_whatsapp_enabled: wa?.enabled ? 1 : 0,
|
|
146
|
+
messaging_whatsapp_paired: wa?.paired ? 1 : 0,
|
|
147
|
+
messaging_whatsapp_chat_id: wa?.chatId ?? null,
|
|
148
|
+
messaging_whatsapp_route_id: wa?.routeId ?? null,
|
|
149
|
+
messaging_whatsapp_route_token: wa?.routeToken ?? null,
|
|
150
|
+
messaging_whatsapp_public_url: wa?.publicUrl ?? null,
|
|
151
|
+
messaging_whatsapp_bot_token: wa?.botToken ?? null,
|
|
152
|
+
messaging_whatsapp_pending_code: wa?.pendingPairingCode ?? null,
|
|
153
|
+
messaging_whatsapp_pending_expires_at: serializeIsoLike(wa?.pendingPairingExpiresAt),
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* The generated TypeSpec type for `pendingPairingExpiresAt` is `any` because
|
|
158
|
+
* TypeSpec emitted a loose shape for this `utcDateTime` field. Callers pass
|
|
159
|
+
* either a Date or an ISO string; we normalize both to a string for storage.
|
|
160
|
+
*/
|
|
161
|
+
function serializeIsoLike(value) {
|
|
162
|
+
if (value == null)
|
|
163
|
+
return null;
|
|
164
|
+
if (value instanceof Date)
|
|
165
|
+
return value.toISOString();
|
|
166
|
+
if (typeof value === 'string')
|
|
167
|
+
return value;
|
|
168
|
+
return String(value);
|
|
169
|
+
}
|
|
120
170
|
/**
|
|
121
171
|
* Build the stageTimeouts spread from DB row columns.
|
|
122
172
|
* Returns `{ stageTimeouts: { ... } }` when at least one column is non-null,
|
|
@@ -275,7 +325,74 @@ export function fromDatabase(row) {
|
|
|
275
325
|
fabLayout: {
|
|
276
326
|
swapPosition: (row.fab_position_swapped ?? 0) !== 0,
|
|
277
327
|
},
|
|
328
|
+
// Messaging remote control (migration 056)
|
|
329
|
+
// Always present — even for rows written before the migration, defaults
|
|
330
|
+
// decode to { enabled: false, debounceMs: 5000, chatBufferMs: 3000 } so
|
|
331
|
+
// consumers always see a valid MessagingConfig shape.
|
|
332
|
+
messaging: messagingFromRow(row),
|
|
278
333
|
// Onboarding (INTEGER → boolean)
|
|
279
334
|
onboardingComplete: row.onboarding_complete === 1,
|
|
280
335
|
};
|
|
281
336
|
}
|
|
337
|
+
/**
|
|
338
|
+
* Deserialize MessagingConfig from the DB row. Returns a fully populated
|
|
339
|
+
* MessagingConfig with safe defaults for rows that predate migration 056 or
|
|
340
|
+
* were written by code that never set the messaging field (e.g. main branch).
|
|
341
|
+
*/
|
|
342
|
+
function messagingFromRow(row) {
|
|
343
|
+
const telegram = readPlatform(row.messaging_telegram_enabled, row.messaging_telegram_paired, row.messaging_telegram_chat_id, row.messaging_telegram_route_id, row.messaging_telegram_route_token, row.messaging_telegram_public_url, row.messaging_telegram_bot_token, row.messaging_telegram_pending_code, row.messaging_telegram_pending_expires_at);
|
|
344
|
+
const whatsapp = readPlatform(row.messaging_whatsapp_enabled, row.messaging_whatsapp_paired, row.messaging_whatsapp_chat_id, row.messaging_whatsapp_route_id, row.messaging_whatsapp_route_token, row.messaging_whatsapp_public_url, row.messaging_whatsapp_bot_token, row.messaging_whatsapp_pending_code, row.messaging_whatsapp_pending_expires_at);
|
|
345
|
+
const config = {
|
|
346
|
+
enabled: (row.messaging_enabled ?? 0) === 1,
|
|
347
|
+
debounceMs: row.messaging_debounce_ms ?? 5000,
|
|
348
|
+
chatBufferMs: row.messaging_chat_buffer_ms ?? 3000,
|
|
349
|
+
};
|
|
350
|
+
if (row.messaging_gateway_url !== null && row.messaging_gateway_url !== undefined) {
|
|
351
|
+
config.gatewayUrl = row.messaging_gateway_url;
|
|
352
|
+
}
|
|
353
|
+
if (row.messaging_device_id !== null && row.messaging_device_id !== undefined) {
|
|
354
|
+
config.deviceId = row.messaging_device_id;
|
|
355
|
+
}
|
|
356
|
+
if (row.messaging_gateway_client_id !== null && row.messaging_gateway_client_id !== undefined) {
|
|
357
|
+
config.gatewayClientId = row.messaging_gateway_client_id;
|
|
358
|
+
}
|
|
359
|
+
if (telegram)
|
|
360
|
+
config.telegram = telegram;
|
|
361
|
+
if (whatsapp)
|
|
362
|
+
config.whatsapp = whatsapp;
|
|
363
|
+
return config;
|
|
364
|
+
}
|
|
365
|
+
function readPlatform(enabled, paired, chatId, routeId, routeToken, publicUrl, botToken, pendingCode, pendingExpiresAt) {
|
|
366
|
+
// Omit the platform entirely when no data has been written. This matches
|
|
367
|
+
// the pre-persistence shape where callers used `config.telegram?.paired`.
|
|
368
|
+
const hasAny = (enabled ?? 0) === 1 ||
|
|
369
|
+
(paired ?? 0) === 1 ||
|
|
370
|
+
chatId !== null ||
|
|
371
|
+
routeId !== null ||
|
|
372
|
+
routeToken !== null ||
|
|
373
|
+
publicUrl !== null ||
|
|
374
|
+
botToken !== null ||
|
|
375
|
+
pendingCode !== null ||
|
|
376
|
+
pendingExpiresAt !== null;
|
|
377
|
+
if (!hasAny)
|
|
378
|
+
return undefined;
|
|
379
|
+
const platform = {
|
|
380
|
+
enabled: (enabled ?? 0) === 1,
|
|
381
|
+
paired: (paired ?? 0) === 1,
|
|
382
|
+
};
|
|
383
|
+
if (chatId !== null)
|
|
384
|
+
platform.chatId = chatId;
|
|
385
|
+
if (routeId !== null)
|
|
386
|
+
platform.routeId = routeId;
|
|
387
|
+
if (routeToken !== null)
|
|
388
|
+
platform.routeToken = routeToken;
|
|
389
|
+
if (publicUrl !== null)
|
|
390
|
+
platform.publicUrl = publicUrl;
|
|
391
|
+
if (botToken !== null)
|
|
392
|
+
platform.botToken = botToken;
|
|
393
|
+
if (pendingCode !== null)
|
|
394
|
+
platform.pendingPairingCode = pendingCode;
|
|
395
|
+
if (pendingExpiresAt !== null)
|
|
396
|
+
platform.pendingPairingExpiresAt = pendingExpiresAt;
|
|
397
|
+
return platform;
|
|
398
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Migration 056: Persist MessagingConfig on the settings table
|
|
3
|
+
*
|
|
4
|
+
* Feature 082 (messaging remote control) added `MessagingConfig` to the domain
|
|
5
|
+
* model but the persistence layer was never extended, so every pairing was
|
|
6
|
+
* silently dropped on write. This migration backfills the missing columns.
|
|
7
|
+
*
|
|
8
|
+
* Backward compatibility:
|
|
9
|
+
* - Every column is nullable (or has a safe default of 0) so existing rows
|
|
10
|
+
* from main keep working untouched.
|
|
11
|
+
* - Reading code treats nulls as "not configured", matching the pre-feature
|
|
12
|
+
* behaviour where `settings.messaging` was undefined.
|
|
13
|
+
* - The mapper round-trips values: a row written by an older build (all
|
|
14
|
+
* nulls) decodes to `{ enabled: false, debounceMs: 5000, chatBufferMs: 3000 }`,
|
|
15
|
+
* which is exactly the fallback the in-memory code already uses.
|
|
16
|
+
* - This migration is idempotent via PRAGMA table_info guard.
|
|
17
|
+
*/
|
|
18
|
+
import type { MigrationParams } from 'umzug';
|
|
19
|
+
import type Database from 'better-sqlite3';
|
|
20
|
+
export declare function up({ context: db }: MigrationParams<Database.Database>): Promise<void>;
|
|
21
|
+
export declare function down({ context: db }: MigrationParams<Database.Database>): Promise<void>;
|
|
22
|
+
//# sourceMappingURL=056-add-messaging-remote-control.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"056-add-messaging-remote-control.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/infrastructure/persistence/sqlite/migrations/056-add-messaging-remote-control.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,OAAO,CAAC;AAC7C,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAuC3C,wBAAsB,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,eAAe,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAS3F;AAED,wBAAsB,IAAI,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,eAAe,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAM7F"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Migration 056: Persist MessagingConfig on the settings table
|
|
3
|
+
*
|
|
4
|
+
* Feature 082 (messaging remote control) added `MessagingConfig` to the domain
|
|
5
|
+
* model but the persistence layer was never extended, so every pairing was
|
|
6
|
+
* silently dropped on write. This migration backfills the missing columns.
|
|
7
|
+
*
|
|
8
|
+
* Backward compatibility:
|
|
9
|
+
* - Every column is nullable (or has a safe default of 0) so existing rows
|
|
10
|
+
* from main keep working untouched.
|
|
11
|
+
* - Reading code treats nulls as "not configured", matching the pre-feature
|
|
12
|
+
* behaviour where `settings.messaging` was undefined.
|
|
13
|
+
* - The mapper round-trips values: a row written by an older build (all
|
|
14
|
+
* nulls) decodes to `{ enabled: false, debounceMs: 5000, chatBufferMs: 3000 }`,
|
|
15
|
+
* which is exactly the fallback the in-memory code already uses.
|
|
16
|
+
* - This migration is idempotent via PRAGMA table_info guard.
|
|
17
|
+
*/
|
|
18
|
+
const COLUMNS = [
|
|
19
|
+
// Top-level MessagingConfig fields
|
|
20
|
+
{ name: 'messaging_enabled', ddl: 'INTEGER NOT NULL DEFAULT 0' },
|
|
21
|
+
{ name: 'messaging_gateway_url', ddl: 'TEXT' },
|
|
22
|
+
{ name: 'messaging_device_id', ddl: 'TEXT' },
|
|
23
|
+
{ name: 'messaging_gateway_client_id', ddl: 'TEXT' },
|
|
24
|
+
{ name: 'messaging_debounce_ms', ddl: 'INTEGER' },
|
|
25
|
+
{ name: 'messaging_chat_buffer_ms', ddl: 'INTEGER' },
|
|
26
|
+
// Per-platform: Telegram
|
|
27
|
+
{ name: 'messaging_telegram_enabled', ddl: 'INTEGER NOT NULL DEFAULT 0' },
|
|
28
|
+
{ name: 'messaging_telegram_paired', ddl: 'INTEGER NOT NULL DEFAULT 0' },
|
|
29
|
+
{ name: 'messaging_telegram_chat_id', ddl: 'TEXT' },
|
|
30
|
+
{ name: 'messaging_telegram_route_id', ddl: 'TEXT' },
|
|
31
|
+
{ name: 'messaging_telegram_route_token', ddl: 'TEXT' },
|
|
32
|
+
{ name: 'messaging_telegram_public_url', ddl: 'TEXT' },
|
|
33
|
+
{ name: 'messaging_telegram_bot_token', ddl: 'TEXT' },
|
|
34
|
+
{ name: 'messaging_telegram_pending_code', ddl: 'TEXT' },
|
|
35
|
+
{ name: 'messaging_telegram_pending_expires_at', ddl: 'TEXT' },
|
|
36
|
+
// Per-platform: WhatsApp
|
|
37
|
+
{ name: 'messaging_whatsapp_enabled', ddl: 'INTEGER NOT NULL DEFAULT 0' },
|
|
38
|
+
{ name: 'messaging_whatsapp_paired', ddl: 'INTEGER NOT NULL DEFAULT 0' },
|
|
39
|
+
{ name: 'messaging_whatsapp_chat_id', ddl: 'TEXT' },
|
|
40
|
+
{ name: 'messaging_whatsapp_route_id', ddl: 'TEXT' },
|
|
41
|
+
{ name: 'messaging_whatsapp_route_token', ddl: 'TEXT' },
|
|
42
|
+
{ name: 'messaging_whatsapp_public_url', ddl: 'TEXT' },
|
|
43
|
+
{ name: 'messaging_whatsapp_bot_token', ddl: 'TEXT' },
|
|
44
|
+
{ name: 'messaging_whatsapp_pending_code', ddl: 'TEXT' },
|
|
45
|
+
{ name: 'messaging_whatsapp_pending_expires_at', ddl: 'TEXT' },
|
|
46
|
+
];
|
|
47
|
+
export async function up({ context: db }) {
|
|
48
|
+
const existing = db.pragma('table_info(settings)');
|
|
49
|
+
const present = new Set(existing.map((c) => c.name));
|
|
50
|
+
for (const col of COLUMNS) {
|
|
51
|
+
if (!present.has(col.name)) {
|
|
52
|
+
db.exec(`ALTER TABLE settings ADD COLUMN ${col.name} ${col.ddl}`);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
export async function down({ context: db }) {
|
|
57
|
+
// SQLite ALTER TABLE DROP COLUMN was only added in 3.35. We leave the
|
|
58
|
+
// columns in place on rollback — they are harmless nullable additions
|
|
59
|
+
// and removing them would require a full table rebuild. This matches
|
|
60
|
+
// the pattern used by earlier migrations in this repo.
|
|
61
|
+
void db;
|
|
62
|
+
}
|
package/dist/packages/core/src/infrastructure/repositories/sqlite-settings.repository.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sqlite-settings.repository.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/src/infrastructure/repositories/sqlite-settings.repository.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAE3C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,8EAA8E,CAAC;AACxH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kCAAkC,CAAC;AAOjE;;;GAGG;AACH,qBACa,wBAAyB,YAAW,mBAAmB;IACtD,OAAO,CAAC,QAAQ,CAAC,EAAE;gBAAF,EAAE,EAAE,QAAQ,CAAC,QAAQ;IAElD;;;;;;OAMG;IACG,UAAU,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"sqlite-settings.repository.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/src/infrastructure/repositories/sqlite-settings.repository.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAE3C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,8EAA8E,CAAC;AACxH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kCAAkC,CAAC;AAOjE;;;GAGG;AACH,qBACa,wBAAyB,YAAW,mBAAmB;IACtD,OAAO,CAAC,QAAQ,CAAC,EAAE;gBAAF,EAAE,EAAE,QAAQ,CAAC,QAAQ;IAElD;;;;;;OAMG;IACG,UAAU,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAmGnD;;;;OAIG;IACG,IAAI,IAAI,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAgBtC;;;;;OAKG;IACG,MAAM,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;CAmHhD"}
|
|
@@ -73,7 +73,15 @@ let SQLiteSettingsRepository = class SQLiteSettingsRepository {
|
|
|
73
73
|
interactive_agent_max_concurrent_sessions,
|
|
74
74
|
auto_archive_delay_minutes,
|
|
75
75
|
stage_timeout_fast_implement_ms,
|
|
76
|
-
fab_position_swapped
|
|
76
|
+
fab_position_swapped,
|
|
77
|
+
messaging_enabled, messaging_gateway_url, messaging_device_id,
|
|
78
|
+
messaging_gateway_client_id, messaging_debounce_ms, messaging_chat_buffer_ms,
|
|
79
|
+
messaging_telegram_enabled, messaging_telegram_paired, messaging_telegram_chat_id,
|
|
80
|
+
messaging_telegram_route_id, messaging_telegram_route_token, messaging_telegram_public_url,
|
|
81
|
+
messaging_telegram_bot_token, messaging_telegram_pending_code, messaging_telegram_pending_expires_at,
|
|
82
|
+
messaging_whatsapp_enabled, messaging_whatsapp_paired, messaging_whatsapp_chat_id,
|
|
83
|
+
messaging_whatsapp_route_id, messaging_whatsapp_route_token, messaging_whatsapp_public_url,
|
|
84
|
+
messaging_whatsapp_bot_token, messaging_whatsapp_pending_code, messaging_whatsapp_pending_expires_at
|
|
77
85
|
) VALUES (
|
|
78
86
|
@id, @created_at, @updated_at,
|
|
79
87
|
@model_analyze, @model_requirements, @model_plan, @model_implement, @model_default,
|
|
@@ -105,7 +113,15 @@ let SQLiteSettingsRepository = class SQLiteSettingsRepository {
|
|
|
105
113
|
@interactive_agent_max_concurrent_sessions,
|
|
106
114
|
@auto_archive_delay_minutes,
|
|
107
115
|
@stage_timeout_fast_implement_ms,
|
|
108
|
-
@fab_position_swapped
|
|
116
|
+
@fab_position_swapped,
|
|
117
|
+
@messaging_enabled, @messaging_gateway_url, @messaging_device_id,
|
|
118
|
+
@messaging_gateway_client_id, @messaging_debounce_ms, @messaging_chat_buffer_ms,
|
|
119
|
+
@messaging_telegram_enabled, @messaging_telegram_paired, @messaging_telegram_chat_id,
|
|
120
|
+
@messaging_telegram_route_id, @messaging_telegram_route_token, @messaging_telegram_public_url,
|
|
121
|
+
@messaging_telegram_bot_token, @messaging_telegram_pending_code, @messaging_telegram_pending_expires_at,
|
|
122
|
+
@messaging_whatsapp_enabled, @messaging_whatsapp_paired, @messaging_whatsapp_chat_id,
|
|
123
|
+
@messaging_whatsapp_route_id, @messaging_whatsapp_route_token, @messaging_whatsapp_public_url,
|
|
124
|
+
@messaging_whatsapp_bot_token, @messaging_whatsapp_pending_code, @messaging_whatsapp_pending_expires_at
|
|
109
125
|
)
|
|
110
126
|
`);
|
|
111
127
|
// Execute with named parameters (safe from SQL injection)
|
|
@@ -211,7 +227,31 @@ let SQLiteSettingsRepository = class SQLiteSettingsRepository {
|
|
|
211
227
|
interactive_agent_max_concurrent_sessions = @interactive_agent_max_concurrent_sessions,
|
|
212
228
|
auto_archive_delay_minutes = @auto_archive_delay_minutes,
|
|
213
229
|
stage_timeout_fast_implement_ms = @stage_timeout_fast_implement_ms,
|
|
214
|
-
fab_position_swapped = @fab_position_swapped
|
|
230
|
+
fab_position_swapped = @fab_position_swapped,
|
|
231
|
+
messaging_enabled = @messaging_enabled,
|
|
232
|
+
messaging_gateway_url = @messaging_gateway_url,
|
|
233
|
+
messaging_device_id = @messaging_device_id,
|
|
234
|
+
messaging_gateway_client_id = @messaging_gateway_client_id,
|
|
235
|
+
messaging_debounce_ms = @messaging_debounce_ms,
|
|
236
|
+
messaging_chat_buffer_ms = @messaging_chat_buffer_ms,
|
|
237
|
+
messaging_telegram_enabled = @messaging_telegram_enabled,
|
|
238
|
+
messaging_telegram_paired = @messaging_telegram_paired,
|
|
239
|
+
messaging_telegram_chat_id = @messaging_telegram_chat_id,
|
|
240
|
+
messaging_telegram_route_id = @messaging_telegram_route_id,
|
|
241
|
+
messaging_telegram_route_token = @messaging_telegram_route_token,
|
|
242
|
+
messaging_telegram_public_url = @messaging_telegram_public_url,
|
|
243
|
+
messaging_telegram_bot_token = @messaging_telegram_bot_token,
|
|
244
|
+
messaging_telegram_pending_code = @messaging_telegram_pending_code,
|
|
245
|
+
messaging_telegram_pending_expires_at = @messaging_telegram_pending_expires_at,
|
|
246
|
+
messaging_whatsapp_enabled = @messaging_whatsapp_enabled,
|
|
247
|
+
messaging_whatsapp_paired = @messaging_whatsapp_paired,
|
|
248
|
+
messaging_whatsapp_chat_id = @messaging_whatsapp_chat_id,
|
|
249
|
+
messaging_whatsapp_route_id = @messaging_whatsapp_route_id,
|
|
250
|
+
messaging_whatsapp_route_token = @messaging_whatsapp_route_token,
|
|
251
|
+
messaging_whatsapp_public_url = @messaging_whatsapp_public_url,
|
|
252
|
+
messaging_whatsapp_bot_token = @messaging_whatsapp_bot_token,
|
|
253
|
+
messaging_whatsapp_pending_code = @messaging_whatsapp_pending_code,
|
|
254
|
+
messaging_whatsapp_pending_expires_at = @messaging_whatsapp_pending_expires_at
|
|
215
255
|
WHERE id = @id
|
|
216
256
|
`);
|
|
217
257
|
// Execute with named parameters (safe from SQL injection)
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Messaging Chat Relay
|
|
3
|
+
*
|
|
4
|
+
* Bridges messaging app chat ↔ Shep interactive agent sessions.
|
|
5
|
+
* When a user enters "chat mode" via /chat <feature_id>, their messages
|
|
6
|
+
* are relayed to the agent and agent responses are batched and sent back
|
|
7
|
+
* through the tunnel.
|
|
8
|
+
*
|
|
9
|
+
* Output batching: agent streaming output is buffered and flushed every
|
|
10
|
+
* N milliseconds (default 3s) to avoid flooding messaging platforms.
|
|
11
|
+
* Only one active relay per user at a time.
|
|
12
|
+
*/
|
|
13
|
+
import type { IMessageSender } from '../../../application/ports/output/services/message-sender.interface.js';
|
|
14
|
+
/**
|
|
15
|
+
* Manages the bidirectional chat relay between messaging apps
|
|
16
|
+
* and Shep interactive agent sessions.
|
|
17
|
+
*/
|
|
18
|
+
export declare class MessagingChatRelay {
|
|
19
|
+
private readonly sender;
|
|
20
|
+
private readonly bufferIntervalMs;
|
|
21
|
+
private activeRelay;
|
|
22
|
+
private buffer;
|
|
23
|
+
private bufferTimer;
|
|
24
|
+
constructor(sender: IMessageSender, bufferIntervalMs?: number);
|
|
25
|
+
/** Start a chat relay for a specific feature */
|
|
26
|
+
startRelay(featureId: string, chatId: string, platform: string, worktreePath?: string, unsubscribe?: () => void): string;
|
|
27
|
+
/** Get the worktree path of the active relay, if any. */
|
|
28
|
+
getActiveWorktreePath(): string | null;
|
|
29
|
+
/** End the active chat relay */
|
|
30
|
+
endRelay(): string;
|
|
31
|
+
/** Check if there is an active relay */
|
|
32
|
+
hasActiveRelay(): boolean;
|
|
33
|
+
/** Get the active relay's feature ID */
|
|
34
|
+
getActiveFeatureId(): string | null;
|
|
35
|
+
/**
|
|
36
|
+
* Buffer an agent response chunk and schedule a flush.
|
|
37
|
+
* Called when the agent produces output during a chat relay.
|
|
38
|
+
*/
|
|
39
|
+
bufferAgentOutput(delta: string): void;
|
|
40
|
+
/** Flush any buffered output immediately (e.g., on stream completion) */
|
|
41
|
+
flushBuffer(): void;
|
|
42
|
+
/** Stop the relay and clean up all resources */
|
|
43
|
+
stop(): void;
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=chat-relay.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat-relay.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/infrastructure/services/messaging/chat-relay.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wEAAwE,CAAC;AAa7G;;;GAGG;AACH,qBAAa,kBAAkB;IAM3B,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IANnC,OAAO,CAAC,WAAW,CAA4B;IAC/C,OAAO,CAAC,MAAM,CAAM;IACpB,OAAO,CAAC,WAAW,CAA8C;gBAG9C,MAAM,EAAE,cAAc,EACtB,gBAAgB,GAAE,MAAmC;IAGxE,gDAAgD;IAChD,UAAU,CACR,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,YAAY,SAAK,EACjB,WAAW,CAAC,EAAE,MAAM,IAAI,GACvB,MAAM;IAWT,yDAAyD;IACzD,qBAAqB,IAAI,MAAM,GAAG,IAAI;IAItC,gCAAgC;IAChC,QAAQ,IAAI,MAAM;IAYlB,wCAAwC;IACxC,cAAc,IAAI,OAAO;IAIzB,wCAAwC;IACxC,kBAAkB,IAAI,MAAM,GAAG,IAAI;IAInC;;;OAGG;IACH,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAatC,yEAAyE;IACzE,WAAW,IAAI,IAAI;IAkBnB,gDAAgD;IAChD,IAAI,IAAI,IAAI;CAKb"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Messaging Chat Relay
|
|
3
|
+
*
|
|
4
|
+
* Bridges messaging app chat ↔ Shep interactive agent sessions.
|
|
5
|
+
* When a user enters "chat mode" via /chat <feature_id>, their messages
|
|
6
|
+
* are relayed to the agent and agent responses are batched and sent back
|
|
7
|
+
* through the tunnel.
|
|
8
|
+
*
|
|
9
|
+
* Output batching: agent streaming output is buffered and flushed every
|
|
10
|
+
* N milliseconds (default 3s) to avoid flooding messaging platforms.
|
|
11
|
+
* Only one active relay per user at a time.
|
|
12
|
+
*/
|
|
13
|
+
import { sanitizeForMessaging } from './content-sanitizer.js';
|
|
14
|
+
const DEFAULT_BUFFER_INTERVAL_MS = 3_000;
|
|
15
|
+
/**
|
|
16
|
+
* Manages the bidirectional chat relay between messaging apps
|
|
17
|
+
* and Shep interactive agent sessions.
|
|
18
|
+
*/
|
|
19
|
+
export class MessagingChatRelay {
|
|
20
|
+
sender;
|
|
21
|
+
bufferIntervalMs;
|
|
22
|
+
activeRelay = null;
|
|
23
|
+
buffer = '';
|
|
24
|
+
bufferTimer = null;
|
|
25
|
+
constructor(sender, bufferIntervalMs = DEFAULT_BUFFER_INTERVAL_MS) {
|
|
26
|
+
this.sender = sender;
|
|
27
|
+
this.bufferIntervalMs = bufferIntervalMs;
|
|
28
|
+
}
|
|
29
|
+
/** Start a chat relay for a specific feature */
|
|
30
|
+
startRelay(featureId, chatId, platform, worktreePath = '', unsubscribe) {
|
|
31
|
+
// Tear down any previous relay (including its subscription).
|
|
32
|
+
if (this.activeRelay) {
|
|
33
|
+
this.flushBuffer();
|
|
34
|
+
this.activeRelay.unsubscribe?.();
|
|
35
|
+
}
|
|
36
|
+
this.activeRelay = { featureId, chatId, platform, worktreePath, unsubscribe };
|
|
37
|
+
return `Chat relay started for feature #${featureId}. Send messages here to talk to the agent. /end to stop.`;
|
|
38
|
+
}
|
|
39
|
+
/** Get the worktree path of the active relay, if any. */
|
|
40
|
+
getActiveWorktreePath() {
|
|
41
|
+
return this.activeRelay?.worktreePath ?? null;
|
|
42
|
+
}
|
|
43
|
+
/** End the active chat relay */
|
|
44
|
+
endRelay() {
|
|
45
|
+
if (!this.activeRelay) {
|
|
46
|
+
return 'No active chat relay.';
|
|
47
|
+
}
|
|
48
|
+
this.flushBuffer();
|
|
49
|
+
const fid = this.activeRelay.featureId;
|
|
50
|
+
this.activeRelay.unsubscribe?.();
|
|
51
|
+
this.activeRelay = null;
|
|
52
|
+
return `Chat relay ended for feature #${fid}.`;
|
|
53
|
+
}
|
|
54
|
+
/** Check if there is an active relay */
|
|
55
|
+
hasActiveRelay() {
|
|
56
|
+
return this.activeRelay !== null;
|
|
57
|
+
}
|
|
58
|
+
/** Get the active relay's feature ID */
|
|
59
|
+
getActiveFeatureId() {
|
|
60
|
+
return this.activeRelay?.featureId ?? null;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Buffer an agent response chunk and schedule a flush.
|
|
64
|
+
* Called when the agent produces output during a chat relay.
|
|
65
|
+
*/
|
|
66
|
+
bufferAgentOutput(delta) {
|
|
67
|
+
if (!this.activeRelay)
|
|
68
|
+
return;
|
|
69
|
+
this.buffer += delta;
|
|
70
|
+
if (!this.bufferTimer) {
|
|
71
|
+
this.bufferTimer = setTimeout(() => {
|
|
72
|
+
this.flushBuffer();
|
|
73
|
+
}, this.bufferIntervalMs);
|
|
74
|
+
this.bufferTimer.unref();
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
/** Flush any buffered output immediately (e.g., on stream completion) */
|
|
78
|
+
flushBuffer() {
|
|
79
|
+
if (this.buffer && this.activeRelay) {
|
|
80
|
+
const notification = {
|
|
81
|
+
event: 'chat.response',
|
|
82
|
+
featureId: this.activeRelay.featureId,
|
|
83
|
+
title: '',
|
|
84
|
+
message: sanitizeForMessaging(this.buffer),
|
|
85
|
+
};
|
|
86
|
+
void this.sender.send(notification);
|
|
87
|
+
this.buffer = '';
|
|
88
|
+
}
|
|
89
|
+
if (this.bufferTimer) {
|
|
90
|
+
clearTimeout(this.bufferTimer);
|
|
91
|
+
this.bufferTimer = null;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
/** Stop the relay and clean up all resources */
|
|
95
|
+
stop() {
|
|
96
|
+
this.flushBuffer();
|
|
97
|
+
this.activeRelay?.unsubscribe?.();
|
|
98
|
+
this.activeRelay = null;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Messaging Command Executor
|
|
3
|
+
*
|
|
4
|
+
* Maps inbound MessagingCommand payloads from the Gateway tunnel
|
|
5
|
+
* to existing Shep use case invocations. This is the bridge between
|
|
6
|
+
* external messaging commands and the application layer.
|
|
7
|
+
*
|
|
8
|
+
* All commands are mapped to existing use cases — no new business logic
|
|
9
|
+
* is introduced here. The executor is a thin translation layer.
|
|
10
|
+
*
|
|
11
|
+
* Feature ID resolution: messaging commands use short IDs (first 8 chars
|
|
12
|
+
* of the UUID). The ShowFeatureUseCase and ResumeFeatureUseCase support
|
|
13
|
+
* prefix matching via findByIdPrefix. For approve/reject/stop, we resolve
|
|
14
|
+
* the feature first, then use its agentRunId.
|
|
15
|
+
*/
|
|
16
|
+
import type { MessagingCommand } from '../../../domain/generated/output.js';
|
|
17
|
+
import type { IFeatureRepository } from '../../../application/ports/output/repositories/feature-repository.interface.js';
|
|
18
|
+
import type { ListFeaturesUseCase } from '../../../application/use-cases/features/list-features.use-case.js';
|
|
19
|
+
import type { ShowFeatureUseCase } from '../../../application/use-cases/features/show-feature.use-case.js';
|
|
20
|
+
import type { CreateFeatureUseCase } from '../../../application/use-cases/features/create/create-feature.use-case.js';
|
|
21
|
+
import type { ApproveAgentRunUseCase } from '../../../application/use-cases/agents/approve-agent-run.use-case.js';
|
|
22
|
+
import type { RejectAgentRunUseCase } from '../../../application/use-cases/agents/reject-agent-run.use-case.js';
|
|
23
|
+
import type { StopAgentRunUseCase } from '../../../application/use-cases/agents/stop-agent-run.use-case.js';
|
|
24
|
+
import type { ResumeFeatureUseCase } from '../../../application/use-cases/features/resume-feature.use-case.js';
|
|
25
|
+
import type { ListRepositoriesUseCase } from '../../../application/use-cases/repositories/list-repositories.use-case.js';
|
|
26
|
+
/**
|
|
27
|
+
* Execute messaging commands by delegating to existing use cases.
|
|
28
|
+
*/
|
|
29
|
+
export declare class MessagingCommandExecutor {
|
|
30
|
+
private readonly featureRepo;
|
|
31
|
+
private readonly createFeature;
|
|
32
|
+
private readonly approveAgentRun;
|
|
33
|
+
private readonly rejectAgentRun;
|
|
34
|
+
private readonly stopAgentRun;
|
|
35
|
+
private readonly resumeFeature;
|
|
36
|
+
private readonly listFeatures;
|
|
37
|
+
private readonly showFeature;
|
|
38
|
+
private readonly listRepositories;
|
|
39
|
+
constructor(featureRepo: IFeatureRepository, createFeature: CreateFeatureUseCase, approveAgentRun: ApproveAgentRunUseCase, rejectAgentRun: RejectAgentRunUseCase, stopAgentRun: StopAgentRunUseCase, resumeFeature: ResumeFeatureUseCase, listFeatures: ListFeaturesUseCase, showFeature: ShowFeatureUseCase, listRepositories: ListRepositoriesUseCase);
|
|
40
|
+
/**
|
|
41
|
+
* Execute a messaging command and return a human-readable response.
|
|
42
|
+
*/
|
|
43
|
+
execute(cmd: MessagingCommand): Promise<string>;
|
|
44
|
+
private handleNew;
|
|
45
|
+
private handleApprove;
|
|
46
|
+
private handleReject;
|
|
47
|
+
private handleStop;
|
|
48
|
+
private handleResume;
|
|
49
|
+
private handleStatus;
|
|
50
|
+
/** Resolve a feature by exact ID or prefix match */
|
|
51
|
+
private resolveFeature;
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=command-executor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command-executor.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/infrastructure/services/messaging/command-executor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAW,MAAM,qCAAqC,CAAC;AACrF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gFAAgF,CAAC;AACzH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mEAAmE,CAAC;AAC7G,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kEAAkE,CAAC;AAC3G,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,2EAA2E,CAAC;AACtH,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,qEAAqE,CAAC;AAClH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,oEAAoE,CAAC;AAChH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kEAAkE,CAAC;AAC5G,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oEAAoE,CAAC;AAC/G,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,2EAA2E,CAAC;AAkBzH;;GAEG;AACH,qBAAa,wBAAwB;IAEjC,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,gBAAgB;gBARhB,WAAW,EAAE,kBAAkB,EAC/B,aAAa,EAAE,oBAAoB,EACnC,eAAe,EAAE,sBAAsB,EACvC,cAAc,EAAE,qBAAqB,EACrC,YAAY,EAAE,mBAAmB,EACjC,aAAa,EAAE,oBAAoB,EACnC,YAAY,EAAE,mBAAmB,EACjC,WAAW,EAAE,kBAAkB,EAC/B,gBAAgB,EAAE,uBAAuB;IAG5D;;OAEG;IACG,OAAO,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC;YAqBvC,SAAS;YA0BT,aAAa;YAwBb,YAAY;YA2BZ,UAAU;YAwBV,YAAY;YAaZ,YAAY;IAkB1B,oDAAoD;YACtC,cAAc;CAM7B"}
|