devchain-cli 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +53 -0
- package/README.md +74 -0
- package/dist/cli.js +782 -0
- package/dist/drizzle/0000_flippant_the_spike.sql +220 -0
- package/dist/drizzle/0001_shiny_snowbird.sql +7 -0
- package/dist/drizzle/0002_high_zemo.sql +19 -0
- package/dist/drizzle/0003_noisy_scarecrow.sql +21 -0
- package/dist/drizzle/0004_mcp_metadata.sql +5 -0
- package/dist/drizzle/0005_agent_profile_instructions.sql +3 -0
- package/dist/drizzle/0006_wakeful_marvex.sql +15 -0
- package/dist/drizzle/0007_agent_profile_options.sql +7 -0
- package/dist/drizzle/0008_event_logs.sql +31 -0
- package/dist/drizzle/0009_chat_tables.sql +42 -0
- package/dist/drizzle/0010_amazing_the_initiative.sql +11 -0
- package/dist/drizzle/0011_curved_payback.sql +16 -0
- package/dist/drizzle/0012_terminal_activity.sql +8 -0
- package/dist/drizzle/0013_chat_activities.sql +18 -0
- package/dist/drizzle/0014_chat_activities_start_msg_nullable.sql +5 -0
- package/dist/drizzle/0015_projects_is_template.sql +4 -0
- package/dist/drizzle/0016_agent_profiles_project_scoped.sql +4 -0
- package/dist/drizzle/meta/0000_snapshot.json +1388 -0
- package/dist/drizzle/meta/0001_snapshot.json +1434 -0
- package/dist/drizzle/meta/0002_snapshot.json +1434 -0
- package/dist/drizzle/meta/0003_snapshot.json +1583 -0
- package/dist/drizzle/meta/0004_snapshot.json +1605 -0
- package/dist/drizzle/meta/0005_snapshot.json +1612 -0
- package/dist/drizzle/meta/0006_snapshot.json +1742 -0
- package/dist/drizzle/meta/0007_snapshot.json +1742 -0
- package/dist/drizzle/meta/0008_snapshot.json +1897 -0
- package/dist/drizzle/meta/0009_snapshot.json +2202 -0
- package/dist/drizzle/meta/0010_snapshot.json +2283 -0
- package/dist/drizzle/meta/0011_snapshot.json +2407 -0
- package/dist/drizzle/meta/_journal.json +125 -0
- package/dist/lib/interactive-cli.js +279 -0
- package/dist/server/app.module.d.ts +4 -0
- package/dist/server/app.module.js +64 -0
- package/dist/server/app.module.js.map +1 -0
- package/dist/server/common/config/env.config.d.ts +23 -0
- package/dist/server/common/config/env.config.js +60 -0
- package/dist/server/common/config/env.config.js.map +1 -0
- package/dist/server/common/config/feature-flags.d.ts +5 -0
- package/dist/server/common/config/feature-flags.js +8 -0
- package/dist/server/common/config/feature-flags.js.map +1 -0
- package/dist/server/common/errors/error-types.d.ts +30 -0
- package/dist/server/common/errors/error-types.js +63 -0
- package/dist/server/common/errors/error-types.js.map +1 -0
- package/dist/server/common/filters/http-exception.filter.d.ts +4 -0
- package/dist/server/common/filters/http-exception.filter.js +72 -0
- package/dist/server/common/filters/http-exception.filter.js.map +1 -0
- package/dist/server/common/filters/ws-exception.filter.d.ts +5 -0
- package/dist/server/common/filters/ws-exception.filter.js +102 -0
- package/dist/server/common/filters/ws-exception.filter.js.map +1 -0
- package/dist/server/common/logging/logger.d.ts +3 -0
- package/dist/server/common/logging/logger.js +29 -0
- package/dist/server/common/logging/logger.js.map +1 -0
- package/dist/server/common/middleware/request-id.middleware.d.ts +12 -0
- package/dist/server/common/middleware/request-id.middleware.js +24 -0
- package/dist/server/common/middleware/request-id.middleware.js.map +1 -0
- package/dist/server/main.d.ts +1 -0
- package/dist/server/main.js +94 -0
- package/dist/server/main.js.map +1 -0
- package/dist/server/modules/agents/agents.module.d.ts +2 -0
- package/dist/server/modules/agents/agents.module.js +22 -0
- package/dist/server/modules/agents/agents.module.js.map +1 -0
- package/dist/server/modules/agents/controllers/agents.controller.d.ts +12 -0
- package/dist/server/modules/agents/controllers/agents.controller.js +115 -0
- package/dist/server/modules/agents/controllers/agents.controller.js.map +1 -0
- package/dist/server/modules/chat/chat.module.d.ts +2 -0
- package/dist/server/modules/chat/chat.module.js +28 -0
- package/dist/server/modules/chat/chat.module.js.map +1 -0
- package/dist/server/modules/chat/controllers/chat-settings.controller.d.ts +8 -0
- package/dist/server/modules/chat/controllers/chat-settings.controller.js +66 -0
- package/dist/server/modules/chat/controllers/chat-settings.controller.js.map +1 -0
- package/dist/server/modules/chat/controllers/chat.controller.d.ts +15 -0
- package/dist/server/modules/chat/controllers/chat.controller.js +152 -0
- package/dist/server/modules/chat/controllers/chat.controller.js.map +1 -0
- package/dist/server/modules/chat/dtos/chat-settings.dto.d.ts +31 -0
- package/dist/server/modules/chat/dtos/chat-settings.dto.js +17 -0
- package/dist/server/modules/chat/dtos/chat-settings.dto.js.map +1 -0
- package/dist/server/modules/chat/dtos/chat.dto.d.ts +309 -0
- package/dist/server/modules/chat/dtos/chat.dto.js +80 -0
- package/dist/server/modules/chat/dtos/chat.dto.js.map +1 -0
- package/dist/server/modules/chat/services/chat-settings.service.d.ts +12 -0
- package/dist/server/modules/chat/services/chat-settings.service.js +120 -0
- package/dist/server/modules/chat/services/chat-settings.service.js.map +1 -0
- package/dist/server/modules/chat/services/chat.service.d.ts +45 -0
- package/dist/server/modules/chat/services/chat.service.js +730 -0
- package/dist/server/modules/chat/services/chat.service.js.map +1 -0
- package/dist/server/modules/chat/services/invite-template.util.d.ts +17 -0
- package/dist/server/modules/chat/services/invite-template.util.js +70 -0
- package/dist/server/modules/chat/services/invite-template.util.js.map +1 -0
- package/dist/server/modules/core/controllers/health.controller.d.ts +7 -0
- package/dist/server/modules/core/controllers/health.controller.js +39 -0
- package/dist/server/modules/core/controllers/health.controller.js.map +1 -0
- package/dist/server/modules/core/controllers/preflight.controller.d.ts +10 -0
- package/dist/server/modules/core/controllers/preflight.controller.js +58 -0
- package/dist/server/modules/core/controllers/preflight.controller.js.map +1 -0
- package/dist/server/modules/core/core.module.d.ts +2 -0
- package/dist/server/modules/core/core.module.js +27 -0
- package/dist/server/modules/core/core.module.js.map +1 -0
- package/dist/server/modules/core/services/preflight.service.d.ts +44 -0
- package/dist/server/modules/core/services/preflight.service.js +400 -0
- package/dist/server/modules/core/services/preflight.service.js.map +1 -0
- package/dist/server/modules/documents/controllers/documents.controller.d.ts +12 -0
- package/dist/server/modules/documents/controllers/documents.controller.js +173 -0
- package/dist/server/modules/documents/controllers/documents.controller.js.map +1 -0
- package/dist/server/modules/documents/documents.module.d.ts +2 -0
- package/dist/server/modules/documents/documents.module.js +22 -0
- package/dist/server/modules/documents/documents.module.js.map +1 -0
- package/dist/server/modules/epics/controllers/epic-comments.controller.d.ts +10 -0
- package/dist/server/modules/epics/controllers/epic-comments.controller.js +94 -0
- package/dist/server/modules/epics/controllers/epic-comments.controller.js.map +1 -0
- package/dist/server/modules/epics/controllers/epics.controller.d.ts +16 -0
- package/dist/server/modules/epics/controllers/epics.controller.js +201 -0
- package/dist/server/modules/epics/controllers/epics.controller.js.map +1 -0
- package/dist/server/modules/epics/epics.module.d.ts +2 -0
- package/dist/server/modules/epics/epics.module.js +28 -0
- package/dist/server/modules/epics/epics.module.js.map +1 -0
- package/dist/server/modules/epics/services/epics.service.d.ts +34 -0
- package/dist/server/modules/epics/services/epics.service.js +251 -0
- package/dist/server/modules/epics/services/epics.service.js.map +1 -0
- package/dist/server/modules/events/catalog/epic.assigned.d.ts +36 -0
- package/dist/server/modules/events/catalog/epic.assigned.js +19 -0
- package/dist/server/modules/events/catalog/epic.assigned.js.map +1 -0
- package/dist/server/modules/events/catalog/index.d.ts +71 -0
- package/dist/server/modules/events/catalog/index.js +15 -0
- package/dist/server/modules/events/catalog/index.js.map +1 -0
- package/dist/server/modules/events/catalog/session.crashed.d.ts +15 -0
- package/dist/server/modules/events/catalog/session.crashed.js +12 -0
- package/dist/server/modules/events/catalog/session.crashed.js.map +1 -0
- package/dist/server/modules/events/catalog/session.started.d.ts +21 -0
- package/dist/server/modules/events/catalog/session.started.js +14 -0
- package/dist/server/modules/events/catalog/session.started.js.map +1 -0
- package/dist/server/modules/events/catalog/session.stopped.d.ts +12 -0
- package/dist/server/modules/events/catalog/session.stopped.js +11 -0
- package/dist/server/modules/events/catalog/session.stopped.js.map +1 -0
- package/dist/server/modules/events/controllers/event-log.controller.d.ts +7 -0
- package/dist/server/modules/events/controllers/event-log.controller.js +75 -0
- package/dist/server/modules/events/controllers/event-log.controller.js.map +1 -0
- package/dist/server/modules/events/dtos/event-log.dto.d.ts +33 -0
- package/dist/server/modules/events/dtos/event-log.dto.js +3 -0
- package/dist/server/modules/events/dtos/event-log.dto.js.map +1 -0
- package/dist/server/modules/events/events.module.d.ts +2 -0
- package/dist/server/modules/events/events.module.js +45 -0
- package/dist/server/modules/events/events.module.js.map +1 -0
- package/dist/server/modules/events/index.d.ts +6 -0
- package/dist/server/modules/events/index.js +23 -0
- package/dist/server/modules/events/index.js.map +1 -0
- package/dist/server/modules/events/services/event-log.service.d.ts +38 -0
- package/dist/server/modules/events/services/event-log.service.js +272 -0
- package/dist/server/modules/events/services/event-log.service.js.map +1 -0
- package/dist/server/modules/events/services/events-stream.service.d.ts +23 -0
- package/dist/server/modules/events/services/events-stream.service.js +45 -0
- package/dist/server/modules/events/services/events-stream.service.js.map +1 -0
- package/dist/server/modules/events/services/events.service.d.ts +14 -0
- package/dist/server/modules/events/services/events.service.js +65 -0
- package/dist/server/modules/events/services/events.service.js.map +1 -0
- package/dist/server/modules/events/subscribers/chat-message-broadcaster.subscriber.d.ts +20 -0
- package/dist/server/modules/events/subscribers/chat-message-broadcaster.subscriber.js +47 -0
- package/dist/server/modules/events/subscribers/chat-message-broadcaster.subscriber.js.map +1 -0
- package/dist/server/modules/events/subscribers/chat-message-delivery.subscriber.d.ts +24 -0
- package/dist/server/modules/events/subscribers/chat-message-delivery.subscriber.js +81 -0
- package/dist/server/modules/events/subscribers/chat-message-delivery.subscriber.js.map +1 -0
- package/dist/server/modules/events/subscribers/epic-assignment-notifier.subscriber.d.ts +25 -0
- package/dist/server/modules/events/subscribers/epic-assignment-notifier.subscriber.js +223 -0
- package/dist/server/modules/events/subscribers/epic-assignment-notifier.subscriber.js.map +1 -0
- package/dist/server/modules/events/subscribers/index.d.ts +2 -0
- package/dist/server/modules/events/subscribers/index.js +12 -0
- package/dist/server/modules/events/subscribers/index.js.map +1 -0
- package/dist/server/modules/fs/fs.controller.d.ts +18 -0
- package/dist/server/modules/fs/fs.controller.js +56 -0
- package/dist/server/modules/fs/fs.controller.js.map +1 -0
- package/dist/server/modules/fs/fs.module.d.ts +2 -0
- package/dist/server/modules/fs/fs.module.js +20 -0
- package/dist/server/modules/fs/fs.module.js.map +1 -0
- package/dist/server/modules/mcp/constants.d.ts +9 -0
- package/dist/server/modules/mcp/constants.js +38 -0
- package/dist/server/modules/mcp/constants.js.map +1 -0
- package/dist/server/modules/mcp/controllers/mcp-http.controller.d.ts +16 -0
- package/dist/server/modules/mcp/controllers/mcp-http.controller.js +790 -0
- package/dist/server/modules/mcp/controllers/mcp-http.controller.js.map +1 -0
- package/dist/server/modules/mcp/controllers/mcp-sdk.controller.d.ts +12 -0
- package/dist/server/modules/mcp/controllers/mcp-sdk.controller.js +676 -0
- package/dist/server/modules/mcp/controllers/mcp-sdk.controller.js.map +1 -0
- package/dist/server/modules/mcp/controllers/mcp-test.controller.d.ts +50 -0
- package/dist/server/modules/mcp/controllers/mcp-test.controller.js +115 -0
- package/dist/server/modules/mcp/controllers/mcp-test.controller.js.map +1 -0
- package/dist/server/modules/mcp/dtos/mcp.dto.d.ts +1094 -0
- package/dist/server/modules/mcp/dtos/mcp.dto.js +257 -0
- package/dist/server/modules/mcp/dtos/mcp.dto.js.map +1 -0
- package/dist/server/modules/mcp/gateways/mcp.gateway.d.ts +21 -0
- package/dist/server/modules/mcp/gateways/mcp.gateway.js +141 -0
- package/dist/server/modules/mcp/gateways/mcp.gateway.js.map +1 -0
- package/dist/server/modules/mcp/mcp.module.d.ts +2 -0
- package/dist/server/modules/mcp/mcp.module.js +83 -0
- package/dist/server/modules/mcp/mcp.module.js.map +1 -0
- package/dist/server/modules/mcp/services/instructions-resolver.d.ts +24 -0
- package/dist/server/modules/mcp/services/instructions-resolver.js +203 -0
- package/dist/server/modules/mcp/services/instructions-resolver.js.map +1 -0
- package/dist/server/modules/mcp/services/mcp-provider-registration.service.d.ts +52 -0
- package/dist/server/modules/mcp/services/mcp-provider-registration.service.js +327 -0
- package/dist/server/modules/mcp/services/mcp-provider-registration.service.js.map +1 -0
- package/dist/server/modules/mcp/services/mcp-server.service.d.ts +6 -0
- package/dist/server/modules/mcp/services/mcp-server.service.js +26 -0
- package/dist/server/modules/mcp/services/mcp-server.service.js.map +1 -0
- package/dist/server/modules/mcp/services/mcp.service.d.ts +69 -0
- package/dist/server/modules/mcp/services/mcp.service.js +2056 -0
- package/dist/server/modules/mcp/services/mcp.service.js.map +1 -0
- package/dist/server/modules/mcp/services/terminal-activity.service.d.ts +9 -0
- package/dist/server/modules/mcp/services/terminal-activity.service.js +51 -0
- package/dist/server/modules/mcp/services/terminal-activity.service.js.map +1 -0
- package/dist/server/modules/profiles/controllers/profiles.controller.d.ts +45 -0
- package/dist/server/modules/profiles/controllers/profiles.controller.js +188 -0
- package/dist/server/modules/profiles/controllers/profiles.controller.js.map +1 -0
- package/dist/server/modules/profiles/dto.d.ts +75 -0
- package/dist/server/modules/profiles/dto.js +24 -0
- package/dist/server/modules/profiles/dto.js.map +1 -0
- package/dist/server/modules/profiles/profiles.module.d.ts +2 -0
- package/dist/server/modules/profiles/profiles.module.js +22 -0
- package/dist/server/modules/profiles/profiles.module.js.map +1 -0
- package/dist/server/modules/projects/controllers/projects.controller.d.ts +131 -0
- package/dist/server/modules/projects/controllers/projects.controller.js +196 -0
- package/dist/server/modules/projects/controllers/projects.controller.js.map +1 -0
- package/dist/server/modules/projects/projects.module.d.ts +2 -0
- package/dist/server/modules/projects/projects.module.js +26 -0
- package/dist/server/modules/projects/projects.module.js.map +1 -0
- package/dist/server/modules/projects/services/projects.service.d.ts +138 -0
- package/dist/server/modules/projects/services/projects.service.js +564 -0
- package/dist/server/modules/projects/services/projects.service.js.map +1 -0
- package/dist/server/modules/prompts/controllers/prompts.controller.d.ts +11 -0
- package/dist/server/modules/prompts/controllers/prompts.controller.js +112 -0
- package/dist/server/modules/prompts/controllers/prompts.controller.js.map +1 -0
- package/dist/server/modules/prompts/prompts.module.d.ts +2 -0
- package/dist/server/modules/prompts/prompts.module.js +22 -0
- package/dist/server/modules/prompts/prompts.module.js.map +1 -0
- package/dist/server/modules/providers/adapters/claude.adapter.d.ts +9 -0
- package/dist/server/modules/providers/adapters/claude.adapter.js +46 -0
- package/dist/server/modules/providers/adapters/claude.adapter.js.map +1 -0
- package/dist/server/modules/providers/adapters/codex.adapter.d.ts +9 -0
- package/dist/server/modules/providers/adapters/codex.adapter.js +46 -0
- package/dist/server/modules/providers/adapters/codex.adapter.js.map +1 -0
- package/dist/server/modules/providers/adapters/index.d.ts +4 -0
- package/dist/server/modules/providers/adapters/index.js +21 -0
- package/dist/server/modules/providers/adapters/index.js.map +1 -0
- package/dist/server/modules/providers/adapters/provider-adapter.factory.d.ts +8 -0
- package/dist/server/modules/providers/adapters/provider-adapter.factory.js +42 -0
- package/dist/server/modules/providers/adapters/provider-adapter.factory.js.map +1 -0
- package/dist/server/modules/providers/adapters/provider-adapter.interface.d.ts +18 -0
- package/dist/server/modules/providers/adapters/provider-adapter.interface.js +3 -0
- package/dist/server/modules/providers/adapters/provider-adapter.interface.js.map +1 -0
- package/dist/server/modules/providers/controllers/providers.controller.d.ts +33 -0
- package/dist/server/modules/providers/controllers/providers.controller.js +399 -0
- package/dist/server/modules/providers/controllers/providers.controller.js.map +1 -0
- package/dist/server/modules/providers/providers.module.d.ts +2 -0
- package/dist/server/modules/providers/providers.module.js +27 -0
- package/dist/server/modules/providers/providers.module.js.map +1 -0
- package/dist/server/modules/records/controllers/records.controller.d.ts +13 -0
- package/dist/server/modules/records/controllers/records.controller.js +83 -0
- package/dist/server/modules/records/controllers/records.controller.js.map +1 -0
- package/dist/server/modules/records/records.module.d.ts +2 -0
- package/dist/server/modules/records/records.module.js +22 -0
- package/dist/server/modules/records/records.module.js.map +1 -0
- package/dist/server/modules/sessions/controllers/sessions.controller.d.ts +13 -0
- package/dist/server/modules/sessions/controllers/sessions.controller.js +93 -0
- package/dist/server/modules/sessions/controllers/sessions.controller.js.map +1 -0
- package/dist/server/modules/sessions/dtos/sessions.dto.d.ts +67 -0
- package/dist/server/modules/sessions/dtos/sessions.dto.js +18 -0
- package/dist/server/modules/sessions/dtos/sessions.dto.js.map +1 -0
- package/dist/server/modules/sessions/services/activity-tracker.service.d.ts +15 -0
- package/dist/server/modules/sessions/services/activity-tracker.service.js +103 -0
- package/dist/server/modules/sessions/services/activity-tracker.service.js.map +1 -0
- package/dist/server/modules/sessions/services/sessions.service.d.ts +49 -0
- package/dist/server/modules/sessions/services/sessions.service.js +511 -0
- package/dist/server/modules/sessions/services/sessions.service.js.map +1 -0
- package/dist/server/modules/sessions/sessions.module.d.ts +2 -0
- package/dist/server/modules/sessions/sessions.module.js +36 -0
- package/dist/server/modules/sessions/sessions.module.js.map +1 -0
- package/dist/server/modules/sessions/utils/profile-options.d.ts +4 -0
- package/dist/server/modules/sessions/utils/profile-options.js +70 -0
- package/dist/server/modules/sessions/utils/profile-options.js.map +1 -0
- package/dist/server/modules/sessions/utils/template-renderer.d.ts +27 -0
- package/dist/server/modules/sessions/utils/template-renderer.js +38 -0
- package/dist/server/modules/sessions/utils/template-renderer.js.map +1 -0
- package/dist/server/modules/settings/controllers/settings.controller.d.ts +10 -0
- package/dist/server/modules/settings/controllers/settings.controller.js +77 -0
- package/dist/server/modules/settings/controllers/settings.controller.js.map +1 -0
- package/dist/server/modules/settings/dtos/settings.dto.d.ts +104 -0
- package/dist/server/modules/settings/dtos/settings.dto.js +44 -0
- package/dist/server/modules/settings/dtos/settings.dto.js.map +1 -0
- package/dist/server/modules/settings/services/settings.service.d.ts +20 -0
- package/dist/server/modules/settings/services/settings.service.js +310 -0
- package/dist/server/modules/settings/services/settings.service.js.map +1 -0
- package/dist/server/modules/settings/settings.module.d.ts +2 -0
- package/dist/server/modules/settings/settings.module.js +26 -0
- package/dist/server/modules/settings/settings.module.js.map +1 -0
- package/dist/server/modules/statuses/controllers/statuses.controller.d.ts +17 -0
- package/dist/server/modules/statuses/controllers/statuses.controller.js +124 -0
- package/dist/server/modules/statuses/controllers/statuses.controller.js.map +1 -0
- package/dist/server/modules/statuses/statuses.module.d.ts +2 -0
- package/dist/server/modules/statuses/statuses.module.js +22 -0
- package/dist/server/modules/statuses/statuses.module.js.map +1 -0
- package/dist/server/modules/storage/db/db.config.d.ts +5 -0
- package/dist/server/modules/storage/db/db.config.js +19 -0
- package/dist/server/modules/storage/db/db.config.js.map +1 -0
- package/dist/server/modules/storage/db/db.module.d.ts +2 -0
- package/dist/server/modules/storage/db/db.module.js +22 -0
- package/dist/server/modules/storage/db/db.module.js.map +1 -0
- package/dist/server/modules/storage/db/db.provider.d.ts +3 -0
- package/dist/server/modules/storage/db/db.provider.js +61 -0
- package/dist/server/modules/storage/db/db.provider.js.map +1 -0
- package/dist/server/modules/storage/db/migrate.d.ts +1 -0
- package/dist/server/modules/storage/db/migrate.js +32 -0
- package/dist/server/modules/storage/db/migrate.js.map +1 -0
- package/dist/server/modules/storage/db/schema.d.ts +4058 -0
- package/dist/server/modules/storage/db/schema.js +393 -0
- package/dist/server/modules/storage/db/schema.js.map +1 -0
- package/dist/server/modules/storage/db/sqlite-raw.d.ts +3 -0
- package/dist/server/modules/storage/db/sqlite-raw.js +8 -0
- package/dist/server/modules/storage/db/sqlite-raw.js.map +1 -0
- package/dist/server/modules/storage/interfaces/storage.interface.d.ts +193 -0
- package/dist/server/modules/storage/interfaces/storage.interface.js +5 -0
- package/dist/server/modules/storage/interfaces/storage.interface.js.map +1 -0
- package/dist/server/modules/storage/local/local-storage.service.d.ts +105 -0
- package/dist/server/modules/storage/local/local-storage.service.js +2069 -0
- package/dist/server/modules/storage/local/local-storage.service.js.map +1 -0
- package/dist/server/modules/storage/models/domain.models.d.ts +152 -0
- package/dist/server/modules/storage/models/domain.models.js +3 -0
- package/dist/server/modules/storage/models/domain.models.js.map +1 -0
- package/dist/server/modules/storage/storage.module.d.ts +2 -0
- package/dist/server/modules/storage/storage.module.js +29 -0
- package/dist/server/modules/storage/storage.module.js.map +1 -0
- package/dist/server/modules/terminal/dtos/ws-envelope.dto.d.ts +103 -0
- package/dist/server/modules/terminal/dtos/ws-envelope.dto.js +50 -0
- package/dist/server/modules/terminal/dtos/ws-envelope.dto.js.map +1 -0
- package/dist/server/modules/terminal/gateways/terminal.gateway.d.ts +83 -0
- package/dist/server/modules/terminal/gateways/terminal.gateway.js +622 -0
- package/dist/server/modules/terminal/gateways/terminal.gateway.js.map +1 -0
- package/dist/server/modules/terminal/services/pty.service.d.ts +29 -0
- package/dist/server/modules/terminal/services/pty.service.js +236 -0
- package/dist/server/modules/terminal/services/pty.service.js.map +1 -0
- package/dist/server/modules/terminal/services/terminal-emulator.service.d.ts +40 -0
- package/dist/server/modules/terminal/services/terminal-emulator.service.js +356 -0
- package/dist/server/modules/terminal/services/terminal-emulator.service.js.map +1 -0
- package/dist/server/modules/terminal/services/terminal-seed.service.d.ts +29 -0
- package/dist/server/modules/terminal/services/terminal-seed.service.js +233 -0
- package/dist/server/modules/terminal/services/terminal-seed.service.js.map +1 -0
- package/dist/server/modules/terminal/services/terminal-send-coordinator.service.d.ts +5 -0
- package/dist/server/modules/terminal/services/terminal-send-coordinator.service.js +36 -0
- package/dist/server/modules/terminal/services/terminal-send-coordinator.service.js.map +1 -0
- package/dist/server/modules/terminal/services/terminal-stream.service.d.ts +17 -0
- package/dist/server/modules/terminal/services/terminal-stream.service.js +88 -0
- package/dist/server/modules/terminal/services/terminal-stream.service.js.map +1 -0
- package/dist/server/modules/terminal/services/tmux.service.d.ts +42 -0
- package/dist/server/modules/terminal/services/tmux.service.js +318 -0
- package/dist/server/modules/terminal/services/tmux.service.js.map +1 -0
- package/dist/server/modules/terminal/terminal.module.d.ts +2 -0
- package/dist/server/modules/terminal/terminal.module.js +47 -0
- package/dist/server/modules/terminal/terminal.module.js.map +1 -0
- package/dist/server/modules/terminal/utils/ansi-sanitizer.d.ts +8 -0
- package/dist/server/modules/terminal/utils/ansi-sanitizer.js +48 -0
- package/dist/server/modules/terminal/utils/ansi-sanitizer.js.map +1 -0
- package/dist/server/modules/terminal/utils/control-keys.d.ts +3 -0
- package/dist/server/modules/terminal/utils/control-keys.js +30 -0
- package/dist/server/modules/terminal/utils/control-keys.js.map +1 -0
- package/dist/server/modules/ui/ui.controller.d.ts +4 -0
- package/dist/server/modules/ui/ui.controller.js +55 -0
- package/dist/server/modules/ui/ui.controller.js.map +1 -0
- package/dist/server/modules/ui/ui.module.d.ts +2 -0
- package/dist/server/modules/ui/ui.module.js +22 -0
- package/dist/server/modules/ui/ui.module.js.map +1 -0
- package/dist/server/test-setup.d.ts +1 -0
- package/dist/server/test-setup.js +14 -0
- package/dist/server/test-setup.js.map +1 -0
- package/dist/server/tsconfig.tsbuildinfo +1 -0
- package/dist/server/ui/assets/index-DFChYYFN.css +32 -0
- package/dist/server/ui/assets/index-DpXRypHy.js +636 -0
- package/dist/server/ui/index.html +26 -0
- package/dist/templates/simple-codex.json +134 -0
- package/package.json +105 -0
- package/prebuilds/README.md +7 -0
|
@@ -0,0 +1,790 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.McpHttpController = void 0;
|
|
16
|
+
const common_1 = require("@nestjs/common");
|
|
17
|
+
const mcp_service_1 = require("../services/mcp.service");
|
|
18
|
+
const crypto_1 = require("crypto");
|
|
19
|
+
const constants_1 = require("../constants");
|
|
20
|
+
const JSONRPC_ERRORS = {
|
|
21
|
+
PARSE_ERROR: -32700,
|
|
22
|
+
INVALID_REQUEST: -32600,
|
|
23
|
+
METHOD_NOT_FOUND: -32601,
|
|
24
|
+
INVALID_PARAMS: -32602,
|
|
25
|
+
INTERNAL_ERROR: -32603,
|
|
26
|
+
};
|
|
27
|
+
function makeError(id, code, message, data) {
|
|
28
|
+
const error = { code, message };
|
|
29
|
+
if (data !== undefined)
|
|
30
|
+
error.data = data;
|
|
31
|
+
return { jsonrpc: '2.0', id, error };
|
|
32
|
+
}
|
|
33
|
+
function makeResult(id, result) {
|
|
34
|
+
return { jsonrpc: '2.0', id, result };
|
|
35
|
+
}
|
|
36
|
+
function isJsonRpcRequest(msg) {
|
|
37
|
+
if (!msg || typeof msg !== 'object') {
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
const record = msg;
|
|
41
|
+
return record.jsonrpc === '2.0' && typeof record.method === 'string';
|
|
42
|
+
}
|
|
43
|
+
function isNotification(msg) {
|
|
44
|
+
return !('id' in msg);
|
|
45
|
+
}
|
|
46
|
+
let McpHttpController = class McpHttpController {
|
|
47
|
+
constructor(mcp) {
|
|
48
|
+
this.mcp = mcp;
|
|
49
|
+
this.sessions = new Map();
|
|
50
|
+
}
|
|
51
|
+
async handle(payload, reply, _sessionId) {
|
|
52
|
+
if (Array.isArray(payload)) {
|
|
53
|
+
const responses = await Promise.all(payload.map((item) => this.handleOne(item, reply)));
|
|
54
|
+
const filtered = responses.filter((r) => r !== null);
|
|
55
|
+
if (filtered.length === 0) {
|
|
56
|
+
reply.status(204);
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
return filtered;
|
|
60
|
+
}
|
|
61
|
+
const result = await this.handleOne(payload, reply);
|
|
62
|
+
if (result === null) {
|
|
63
|
+
reply.status(204);
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
return result;
|
|
67
|
+
}
|
|
68
|
+
async handleOne(msg, reply) {
|
|
69
|
+
if (!isJsonRpcRequest(msg)) {
|
|
70
|
+
return makeError(null, JSONRPC_ERRORS.INVALID_REQUEST, 'Invalid Request');
|
|
71
|
+
}
|
|
72
|
+
const req = msg;
|
|
73
|
+
const id = req.id ?? null;
|
|
74
|
+
try {
|
|
75
|
+
if (isNotification(req)) {
|
|
76
|
+
if (req.method === 'notifications/initialized' || req.method === 'initialized') {
|
|
77
|
+
return null;
|
|
78
|
+
}
|
|
79
|
+
return null;
|
|
80
|
+
}
|
|
81
|
+
if (req.method === 'initialize') {
|
|
82
|
+
const newSessionId = (0, crypto_1.randomUUID)();
|
|
83
|
+
reply.header('Mcp-Session-Id', newSessionId);
|
|
84
|
+
const params = req.params;
|
|
85
|
+
return makeResult(id, {
|
|
86
|
+
protocolVersion: params?.protocolVersion ?? '2024-11-05',
|
|
87
|
+
capabilities: {
|
|
88
|
+
tools: {},
|
|
89
|
+
resources: {},
|
|
90
|
+
experimental: {
|
|
91
|
+
streamableHttp: true,
|
|
92
|
+
},
|
|
93
|
+
},
|
|
94
|
+
serverInfo: {
|
|
95
|
+
name: 'devchain-local-app',
|
|
96
|
+
version: '0.1.0',
|
|
97
|
+
},
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
if (req.method === 'tools/list' || req.method === 'tools.list') {
|
|
101
|
+
return makeResult(id, { tools: this.listTools() });
|
|
102
|
+
}
|
|
103
|
+
if (req.method === 'resources/list' || req.method === 'resources.list') {
|
|
104
|
+
return makeResult(id, { resources: [] });
|
|
105
|
+
}
|
|
106
|
+
if (req.method === 'resources/read' || req.method === 'resources.read') {
|
|
107
|
+
const p = (req.params || {});
|
|
108
|
+
const uri = p?.uri;
|
|
109
|
+
if (!uri || typeof uri !== 'string') {
|
|
110
|
+
return makeError(id, JSONRPC_ERRORS.INVALID_PARAMS, 'Missing uri');
|
|
111
|
+
}
|
|
112
|
+
const resp = await this.mcp.handleResourceRequest(uri);
|
|
113
|
+
if (resp.success)
|
|
114
|
+
return makeResult(id, resp.data ?? null);
|
|
115
|
+
return makeError(id, JSONRPC_ERRORS.INTERNAL_ERROR, resp.error?.message || 'Error', {
|
|
116
|
+
code: resp.error?.code,
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
if (req.method === 'tools/call' || req.method === 'tools.call') {
|
|
120
|
+
const p = (req.params || {});
|
|
121
|
+
const name = p?.name ?? p?.tool ?? p?.method;
|
|
122
|
+
const args = p?.arguments ?? p?.params ?? {};
|
|
123
|
+
if (!name || typeof name !== 'string') {
|
|
124
|
+
return makeError(id, JSONRPC_ERRORS.INVALID_PARAMS, 'Missing tool name');
|
|
125
|
+
}
|
|
126
|
+
const resp = await this.mcp.handleToolCall(name, args);
|
|
127
|
+
if (resp.success)
|
|
128
|
+
return makeResult(id, {
|
|
129
|
+
content: [{ type: 'text', text: JSON.stringify(resp.data ?? null, null, 2) }],
|
|
130
|
+
isError: false,
|
|
131
|
+
});
|
|
132
|
+
return makeError(id, JSONRPC_ERRORS.INTERNAL_ERROR, resp.error?.message || 'Error', {
|
|
133
|
+
code: resp.error?.code,
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
const resp = await this.mcp.handleToolCall(req.method, req.params ?? {});
|
|
137
|
+
if (resp.success)
|
|
138
|
+
return makeResult(id, resp.data ?? null);
|
|
139
|
+
return makeError(id, JSONRPC_ERRORS.INTERNAL_ERROR, resp.error?.message || 'Error', {
|
|
140
|
+
code: resp.error?.code,
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
catch (err) {
|
|
144
|
+
const message = err instanceof Error ? err.message : 'Internal error';
|
|
145
|
+
return makeError(id, JSONRPC_ERRORS.INTERNAL_ERROR, message);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
listTools() {
|
|
149
|
+
const tools = [
|
|
150
|
+
{
|
|
151
|
+
name: 'devchain_list_documents',
|
|
152
|
+
description: 'List all documents for the current project. Automatically scopes to the project at the provided path.',
|
|
153
|
+
inputSchema: {
|
|
154
|
+
type: 'object',
|
|
155
|
+
required: ['path'],
|
|
156
|
+
properties: {
|
|
157
|
+
path: {
|
|
158
|
+
type: 'string',
|
|
159
|
+
description: 'Absolute path to current working directory (e.g. /home/user/project)',
|
|
160
|
+
},
|
|
161
|
+
tags: {
|
|
162
|
+
type: 'array',
|
|
163
|
+
items: { type: 'string' },
|
|
164
|
+
description: 'Filter by tags (all must match)',
|
|
165
|
+
},
|
|
166
|
+
q: { type: 'string', description: 'Search query for title/content' },
|
|
167
|
+
limit: { type: 'number', description: 'Max results (default: 100)' },
|
|
168
|
+
offset: { type: 'number', description: 'Pagination offset (default: 0)' },
|
|
169
|
+
},
|
|
170
|
+
},
|
|
171
|
+
},
|
|
172
|
+
{
|
|
173
|
+
name: 'devchain_activity_start',
|
|
174
|
+
description: 'Start an activity for an agent; posts a system start message and begins a running timer (DM by default).',
|
|
175
|
+
inputSchema: {
|
|
176
|
+
type: 'object',
|
|
177
|
+
required: ['path', 'agentName', 'title'],
|
|
178
|
+
properties: {
|
|
179
|
+
path: { type: 'string', description: 'Absolute project path' },
|
|
180
|
+
agentName: { type: 'string', description: 'Agent name (case-insensitive)' },
|
|
181
|
+
title: { type: 'string', description: 'Activity title (<=256 chars)' },
|
|
182
|
+
threadId: { type: 'string', description: 'Target thread UUID (optional)' },
|
|
183
|
+
announce: { type: 'boolean', description: 'Whether to post the start system message' },
|
|
184
|
+
},
|
|
185
|
+
},
|
|
186
|
+
},
|
|
187
|
+
{
|
|
188
|
+
name: 'devchain_activity_finish',
|
|
189
|
+
description: 'Finish the latest running activity for an agent; optionally posts a finish system message.',
|
|
190
|
+
inputSchema: {
|
|
191
|
+
type: 'object',
|
|
192
|
+
required: ['path', 'agentName'],
|
|
193
|
+
properties: {
|
|
194
|
+
path: { type: 'string', description: 'Absolute project path' },
|
|
195
|
+
agentName: { type: 'string', description: 'Agent name (case-insensitive)' },
|
|
196
|
+
threadId: { type: 'string', description: 'Target thread UUID (optional)' },
|
|
197
|
+
message: { type: 'string', description: 'Optional finish message (<=1000 chars)' },
|
|
198
|
+
status: {
|
|
199
|
+
type: 'string',
|
|
200
|
+
enum: ['success', 'failed', 'canceled'],
|
|
201
|
+
description: 'Final status (default success)',
|
|
202
|
+
},
|
|
203
|
+
},
|
|
204
|
+
},
|
|
205
|
+
},
|
|
206
|
+
{
|
|
207
|
+
name: 'devchain_get_document',
|
|
208
|
+
description: 'Get a single document by ID or slug, with optional link resolution',
|
|
209
|
+
inputSchema: {
|
|
210
|
+
type: 'object',
|
|
211
|
+
properties: {
|
|
212
|
+
id: { type: 'string', description: 'Document UUID' },
|
|
213
|
+
slug: { type: 'string', description: 'Document slug (requires projectId)' },
|
|
214
|
+
projectId: { type: 'string', description: 'Project ID when using slug' },
|
|
215
|
+
includeLinks: {
|
|
216
|
+
type: 'string',
|
|
217
|
+
enum: ['none', 'meta', 'inline'],
|
|
218
|
+
description: 'Link resolution: none (no links), meta (link metadata), inline (full content)',
|
|
219
|
+
},
|
|
220
|
+
maxDepth: {
|
|
221
|
+
type: 'number',
|
|
222
|
+
description: 'Max depth for inline resolution (default: 1)',
|
|
223
|
+
},
|
|
224
|
+
maxBytes: {
|
|
225
|
+
type: 'number',
|
|
226
|
+
description: 'Max bytes for inline content (default: 64KB)',
|
|
227
|
+
},
|
|
228
|
+
},
|
|
229
|
+
},
|
|
230
|
+
},
|
|
231
|
+
{
|
|
232
|
+
name: 'devchain_create_document',
|
|
233
|
+
description: 'Create a new markdown document in the project at the provided path',
|
|
234
|
+
inputSchema: {
|
|
235
|
+
type: 'object',
|
|
236
|
+
required: ['path', 'title', 'contentMd'],
|
|
237
|
+
properties: {
|
|
238
|
+
path: {
|
|
239
|
+
type: 'string',
|
|
240
|
+
description: 'Absolute path to current working directory (e.g. /home/user/project)',
|
|
241
|
+
},
|
|
242
|
+
title: { type: 'string', description: 'Document title' },
|
|
243
|
+
contentMd: { type: 'string', description: 'Markdown content' },
|
|
244
|
+
tags: { type: 'array', items: { type: 'string' }, description: 'Document tags' },
|
|
245
|
+
},
|
|
246
|
+
},
|
|
247
|
+
},
|
|
248
|
+
{
|
|
249
|
+
name: 'devchain_update_document',
|
|
250
|
+
description: 'Update an existing document',
|
|
251
|
+
inputSchema: {
|
|
252
|
+
type: 'object',
|
|
253
|
+
required: ['id'],
|
|
254
|
+
properties: {
|
|
255
|
+
id: { type: 'string', description: 'Document UUID' },
|
|
256
|
+
title: { type: 'string', description: 'New title' },
|
|
257
|
+
slug: { type: 'string', description: 'New slug' },
|
|
258
|
+
contentMd: { type: 'string', description: 'New markdown content' },
|
|
259
|
+
tags: { type: 'array', items: { type: 'string' }, description: 'New tags' },
|
|
260
|
+
archived: { type: 'boolean', description: 'Archive status' },
|
|
261
|
+
version: { type: 'number', description: 'Version for optimistic locking' },
|
|
262
|
+
},
|
|
263
|
+
},
|
|
264
|
+
},
|
|
265
|
+
{
|
|
266
|
+
name: 'devchain_list_prompts',
|
|
267
|
+
description: 'List prompts for the project resolved from the provided path (projectId deprecated)',
|
|
268
|
+
inputSchema: {
|
|
269
|
+
type: 'object',
|
|
270
|
+
required: ['path'],
|
|
271
|
+
properties: {
|
|
272
|
+
path: {
|
|
273
|
+
type: 'string',
|
|
274
|
+
description: 'Absolute path to the project root (e.g. /home/user/project)',
|
|
275
|
+
},
|
|
276
|
+
projectId: { type: 'string', description: '[deprecated] Filter by project ID' },
|
|
277
|
+
tags: { type: 'array', items: { type: 'string' }, description: 'Filter by tags' },
|
|
278
|
+
q: { type: 'string', description: 'Search query' },
|
|
279
|
+
},
|
|
280
|
+
},
|
|
281
|
+
},
|
|
282
|
+
{
|
|
283
|
+
name: 'devchain_get_prompt',
|
|
284
|
+
description: 'Get a specific prompt by ID or by (name + path)',
|
|
285
|
+
inputSchema: {
|
|
286
|
+
type: 'object',
|
|
287
|
+
properties: {
|
|
288
|
+
id: { type: 'string', description: 'Prompt UUID' },
|
|
289
|
+
name: { type: 'string', description: 'Prompt name/title' },
|
|
290
|
+
version: { type: 'number', description: 'Specific version number' },
|
|
291
|
+
path: {
|
|
292
|
+
type: 'string',
|
|
293
|
+
description: 'Absolute project path required when querying by name (e.g. /home/user/project)',
|
|
294
|
+
},
|
|
295
|
+
projectId: {
|
|
296
|
+
type: 'string',
|
|
297
|
+
description: '[deprecated] Project ID for scoped prompts',
|
|
298
|
+
},
|
|
299
|
+
},
|
|
300
|
+
},
|
|
301
|
+
},
|
|
302
|
+
{
|
|
303
|
+
name: 'devchain_list_agents',
|
|
304
|
+
description: 'List agents for the project resolved from the provided path',
|
|
305
|
+
inputSchema: {
|
|
306
|
+
type: 'object',
|
|
307
|
+
required: ['path'],
|
|
308
|
+
properties: {
|
|
309
|
+
path: {
|
|
310
|
+
type: 'string',
|
|
311
|
+
description: 'Absolute path to the project root (e.g. /home/user/project)',
|
|
312
|
+
},
|
|
313
|
+
limit: { type: 'number', description: 'Max results (default: 100)' },
|
|
314
|
+
offset: { type: 'number', description: 'Pagination offset (default: 0)' },
|
|
315
|
+
q: {
|
|
316
|
+
type: 'string',
|
|
317
|
+
description: 'Optional case-insensitive substring filter on agent name',
|
|
318
|
+
},
|
|
319
|
+
},
|
|
320
|
+
},
|
|
321
|
+
},
|
|
322
|
+
{
|
|
323
|
+
name: 'devchain_get_agent_by_name',
|
|
324
|
+
description: 'Fetch a single agent by name for the project resolved from the provided path',
|
|
325
|
+
inputSchema: {
|
|
326
|
+
type: 'object',
|
|
327
|
+
required: ['path', 'name'],
|
|
328
|
+
properties: {
|
|
329
|
+
path: {
|
|
330
|
+
type: 'string',
|
|
331
|
+
description: 'Absolute path to the project root (e.g. /home/user/project)',
|
|
332
|
+
},
|
|
333
|
+
name: {
|
|
334
|
+
type: 'string',
|
|
335
|
+
description: 'Agent name to look up (case-insensitive match)',
|
|
336
|
+
},
|
|
337
|
+
},
|
|
338
|
+
},
|
|
339
|
+
},
|
|
340
|
+
{
|
|
341
|
+
name: 'devchain_list_statuses',
|
|
342
|
+
description: 'List project statuses resolved from the provided path',
|
|
343
|
+
inputSchema: {
|
|
344
|
+
type: 'object',
|
|
345
|
+
required: ['path'],
|
|
346
|
+
properties: {
|
|
347
|
+
path: {
|
|
348
|
+
type: 'string',
|
|
349
|
+
description: 'Absolute path to the project root (e.g. /home/user/project)',
|
|
350
|
+
},
|
|
351
|
+
},
|
|
352
|
+
},
|
|
353
|
+
},
|
|
354
|
+
{
|
|
355
|
+
name: 'devchain_list_epics',
|
|
356
|
+
description: 'List epics for the project resolved from the provided path with optional filters',
|
|
357
|
+
inputSchema: {
|
|
358
|
+
type: 'object',
|
|
359
|
+
required: ['path'],
|
|
360
|
+
properties: {
|
|
361
|
+
path: {
|
|
362
|
+
type: 'string',
|
|
363
|
+
description: 'Absolute path to the project root (e.g. /home/user/project)',
|
|
364
|
+
},
|
|
365
|
+
statusName: {
|
|
366
|
+
type: 'string',
|
|
367
|
+
description: 'Optional status name filter (case-insensitive)',
|
|
368
|
+
},
|
|
369
|
+
limit: { type: 'number', description: 'Max results (default: 100)' },
|
|
370
|
+
offset: { type: 'number', description: 'Pagination offset (default: 0)' },
|
|
371
|
+
q: {
|
|
372
|
+
type: 'string',
|
|
373
|
+
description: 'Optional search query applied to epic titles and descriptions',
|
|
374
|
+
},
|
|
375
|
+
},
|
|
376
|
+
},
|
|
377
|
+
},
|
|
378
|
+
{
|
|
379
|
+
name: 'devchain_list_assigned_epics_tasks',
|
|
380
|
+
description: 'List epics assigned to the specified agent within the project resolved from the provided path',
|
|
381
|
+
inputSchema: {
|
|
382
|
+
type: 'object',
|
|
383
|
+
required: ['path', 'agentName'],
|
|
384
|
+
properties: {
|
|
385
|
+
path: {
|
|
386
|
+
type: 'string',
|
|
387
|
+
description: 'Absolute path to the project root (e.g. /home/user/project)',
|
|
388
|
+
},
|
|
389
|
+
agentName: { type: 'string', description: 'Agent name to match (case-insensitive)' },
|
|
390
|
+
limit: { type: 'number', description: 'Max results (default: 100)' },
|
|
391
|
+
offset: { type: 'number', description: 'Pagination offset (default: 0)' },
|
|
392
|
+
},
|
|
393
|
+
},
|
|
394
|
+
},
|
|
395
|
+
{
|
|
396
|
+
name: 'devchain_create_epic',
|
|
397
|
+
description: 'Create a new epic within the project resolved from the provided path',
|
|
398
|
+
inputSchema: {
|
|
399
|
+
type: 'object',
|
|
400
|
+
required: ['path', 'title'],
|
|
401
|
+
properties: {
|
|
402
|
+
path: {
|
|
403
|
+
type: 'string',
|
|
404
|
+
description: 'Absolute path to the project root (e.g. /home/user/project)',
|
|
405
|
+
},
|
|
406
|
+
title: { type: 'string', description: 'Epic title' },
|
|
407
|
+
description: { type: 'string', description: 'Optional epic description' },
|
|
408
|
+
statusName: {
|
|
409
|
+
type: 'string',
|
|
410
|
+
description: 'Optional status name (case-insensitive)',
|
|
411
|
+
},
|
|
412
|
+
tags: {
|
|
413
|
+
type: 'array',
|
|
414
|
+
items: { type: 'string' },
|
|
415
|
+
description: 'Optional list of tags to assign to the epic',
|
|
416
|
+
},
|
|
417
|
+
agentName: {
|
|
418
|
+
type: 'string',
|
|
419
|
+
description: 'Optional agent name to assign (case-insensitive)',
|
|
420
|
+
},
|
|
421
|
+
parentId: {
|
|
422
|
+
type: 'string',
|
|
423
|
+
description: 'Optional parent epic UUID to nest this epic under',
|
|
424
|
+
},
|
|
425
|
+
},
|
|
426
|
+
},
|
|
427
|
+
},
|
|
428
|
+
{
|
|
429
|
+
name: 'devchain_get_epic_by_id',
|
|
430
|
+
description: 'Fetch a single epic, including comments and related hierarchy details',
|
|
431
|
+
inputSchema: {
|
|
432
|
+
type: 'object',
|
|
433
|
+
required: ['path', 'id'],
|
|
434
|
+
properties: {
|
|
435
|
+
path: {
|
|
436
|
+
type: 'string',
|
|
437
|
+
description: 'Absolute path to the project root (e.g. /home/user/project)',
|
|
438
|
+
},
|
|
439
|
+
id: { type: 'string', description: 'Epic UUID' },
|
|
440
|
+
},
|
|
441
|
+
},
|
|
442
|
+
},
|
|
443
|
+
{
|
|
444
|
+
name: 'devchain_add_epic_comment',
|
|
445
|
+
description: 'Add a comment to the specified epic within the project resolved from the provided path',
|
|
446
|
+
inputSchema: {
|
|
447
|
+
type: 'object',
|
|
448
|
+
required: ['path', 'epicId', 'authorName', 'content'],
|
|
449
|
+
properties: {
|
|
450
|
+
path: {
|
|
451
|
+
type: 'string',
|
|
452
|
+
description: 'Absolute path to the project root (e.g. /home/user/project)',
|
|
453
|
+
},
|
|
454
|
+
epicId: { type: 'string', description: 'Epic UUID' },
|
|
455
|
+
authorName: { type: 'string', description: 'Name of the comment author' },
|
|
456
|
+
content: { type: 'string', description: 'Comment body content' },
|
|
457
|
+
},
|
|
458
|
+
},
|
|
459
|
+
},
|
|
460
|
+
{
|
|
461
|
+
name: 'devchain_update_epic',
|
|
462
|
+
description: 'Update an epic with flexible field updates including status (by name), assignment (by agent name or clear), parent hierarchy, and tags. Uses optimistic locking via version.',
|
|
463
|
+
inputSchema: {
|
|
464
|
+
type: 'object',
|
|
465
|
+
required: ['path', 'id', 'version'],
|
|
466
|
+
properties: {
|
|
467
|
+
path: {
|
|
468
|
+
type: 'string',
|
|
469
|
+
description: 'Absolute path to the project root (e.g. /home/user/project)',
|
|
470
|
+
},
|
|
471
|
+
id: { type: 'string', description: 'Epic UUID' },
|
|
472
|
+
version: { type: 'number', description: 'Current version for optimistic locking' },
|
|
473
|
+
title: { type: 'string', description: 'New epic title' },
|
|
474
|
+
description: { type: 'string', description: 'New epic description' },
|
|
475
|
+
statusName: {
|
|
476
|
+
type: 'string',
|
|
477
|
+
description: 'Status name (case-insensitive exact match)',
|
|
478
|
+
},
|
|
479
|
+
assignment: {
|
|
480
|
+
type: 'object',
|
|
481
|
+
description: 'Assignment update: either { agentName: string } to assign or { clear: true } to unassign',
|
|
482
|
+
oneOf: [
|
|
483
|
+
{
|
|
484
|
+
type: 'object',
|
|
485
|
+
required: ['agentName'],
|
|
486
|
+
properties: {
|
|
487
|
+
agentName: {
|
|
488
|
+
type: 'string',
|
|
489
|
+
description: 'Agent name (case-insensitive exact match)',
|
|
490
|
+
},
|
|
491
|
+
},
|
|
492
|
+
},
|
|
493
|
+
{
|
|
494
|
+
type: 'object',
|
|
495
|
+
required: ['clear'],
|
|
496
|
+
properties: {
|
|
497
|
+
clear: {
|
|
498
|
+
type: 'boolean',
|
|
499
|
+
const: true,
|
|
500
|
+
description: 'Set to true to clear assignment',
|
|
501
|
+
},
|
|
502
|
+
},
|
|
503
|
+
},
|
|
504
|
+
],
|
|
505
|
+
},
|
|
506
|
+
parentId: {
|
|
507
|
+
type: 'string',
|
|
508
|
+
description: 'Parent epic UUID (mutually exclusive with clearParent)',
|
|
509
|
+
},
|
|
510
|
+
clearParent: {
|
|
511
|
+
type: 'boolean',
|
|
512
|
+
description: 'Set to true to remove parent (mutually exclusive with parentId)',
|
|
513
|
+
},
|
|
514
|
+
setTags: {
|
|
515
|
+
type: 'array',
|
|
516
|
+
items: { type: 'string' },
|
|
517
|
+
description: 'Replace all tags with this array',
|
|
518
|
+
},
|
|
519
|
+
addTags: { type: 'array', items: { type: 'string' }, description: 'Tags to add' },
|
|
520
|
+
removeTags: { type: 'array', items: { type: 'string' }, description: 'Tags to remove' },
|
|
521
|
+
},
|
|
522
|
+
},
|
|
523
|
+
},
|
|
524
|
+
{
|
|
525
|
+
name: 'devchain_create_record',
|
|
526
|
+
description: 'Create a new record (generic data storage for epics)',
|
|
527
|
+
inputSchema: {
|
|
528
|
+
type: 'object',
|
|
529
|
+
required: ['epicId', 'type', 'data'],
|
|
530
|
+
properties: {
|
|
531
|
+
epicId: { type: 'string', description: 'Epic UUID this record belongs to' },
|
|
532
|
+
type: { type: 'string', description: 'Record type identifier' },
|
|
533
|
+
data: { type: 'object', description: 'Arbitrary JSON data' },
|
|
534
|
+
tags: { type: 'array', items: { type: 'string' }, description: 'Record tags' },
|
|
535
|
+
},
|
|
536
|
+
},
|
|
537
|
+
},
|
|
538
|
+
{
|
|
539
|
+
name: 'devchain_update_record',
|
|
540
|
+
description: 'Update an existing record',
|
|
541
|
+
inputSchema: {
|
|
542
|
+
type: 'object',
|
|
543
|
+
required: ['id', 'version'],
|
|
544
|
+
properties: {
|
|
545
|
+
id: { type: 'string', description: 'Record UUID' },
|
|
546
|
+
data: { type: 'object', description: 'New data (merged)' },
|
|
547
|
+
type: { type: 'string', description: 'New type' },
|
|
548
|
+
tags: { type: 'array', items: { type: 'string' }, description: 'New tags' },
|
|
549
|
+
version: { type: 'number', description: 'Current version for optimistic locking' },
|
|
550
|
+
},
|
|
551
|
+
},
|
|
552
|
+
},
|
|
553
|
+
{
|
|
554
|
+
name: 'devchain_get_record',
|
|
555
|
+
description: 'Get a record by ID',
|
|
556
|
+
inputSchema: {
|
|
557
|
+
type: 'object',
|
|
558
|
+
required: ['id'],
|
|
559
|
+
properties: { id: { type: 'string', description: 'Record UUID' } },
|
|
560
|
+
},
|
|
561
|
+
},
|
|
562
|
+
{
|
|
563
|
+
name: 'devchain_list_records',
|
|
564
|
+
description: 'List records for an epic with optional filtering',
|
|
565
|
+
inputSchema: {
|
|
566
|
+
type: 'object',
|
|
567
|
+
required: ['epicId'],
|
|
568
|
+
properties: {
|
|
569
|
+
epicId: { type: 'string', description: 'Epic UUID' },
|
|
570
|
+
type: { type: 'string', description: 'Filter by record type' },
|
|
571
|
+
tags: { type: 'array', items: { type: 'string' }, description: 'Filter by tags' },
|
|
572
|
+
limit: { type: 'number', description: 'Max results' },
|
|
573
|
+
offset: { type: 'number', description: 'Pagination offset' },
|
|
574
|
+
},
|
|
575
|
+
},
|
|
576
|
+
},
|
|
577
|
+
{
|
|
578
|
+
name: 'devchain_add_tags',
|
|
579
|
+
description: 'Add tags to a record',
|
|
580
|
+
inputSchema: {
|
|
581
|
+
type: 'object',
|
|
582
|
+
required: ['id', 'tags'],
|
|
583
|
+
properties: {
|
|
584
|
+
id: { type: 'string', description: 'Record UUID' },
|
|
585
|
+
tags: {
|
|
586
|
+
type: 'array',
|
|
587
|
+
items: { type: 'string' },
|
|
588
|
+
minItems: 1,
|
|
589
|
+
description: 'Tags to add',
|
|
590
|
+
},
|
|
591
|
+
},
|
|
592
|
+
},
|
|
593
|
+
},
|
|
594
|
+
{
|
|
595
|
+
name: 'devchain_remove_tags',
|
|
596
|
+
description: 'Remove tags from a record',
|
|
597
|
+
inputSchema: {
|
|
598
|
+
type: 'object',
|
|
599
|
+
required: ['id', 'tags'],
|
|
600
|
+
properties: {
|
|
601
|
+
id: { type: 'string', description: 'Record UUID' },
|
|
602
|
+
tags: {
|
|
603
|
+
type: 'array',
|
|
604
|
+
items: { type: 'string' },
|
|
605
|
+
minItems: 1,
|
|
606
|
+
description: 'Tags to remove',
|
|
607
|
+
},
|
|
608
|
+
},
|
|
609
|
+
},
|
|
610
|
+
},
|
|
611
|
+
{
|
|
612
|
+
name: 'devchain_send_message',
|
|
613
|
+
description: 'Send a chat message. Provide threadId to reply in a thread, or recipientAgentNames to create a new agent-initiated group when a senderName is provided.',
|
|
614
|
+
inputSchema: {
|
|
615
|
+
type: 'object',
|
|
616
|
+
required: ['path', 'message'],
|
|
617
|
+
properties: {
|
|
618
|
+
path: {
|
|
619
|
+
type: 'string',
|
|
620
|
+
description: 'Absolute path to the project root (e.g. /home/user/project)',
|
|
621
|
+
},
|
|
622
|
+
threadId: {
|
|
623
|
+
type: 'string',
|
|
624
|
+
description: 'Existing thread UUID. When provided with senderName, recipients may be omitted to fan-out to thread members.',
|
|
625
|
+
},
|
|
626
|
+
recipientAgentNames: {
|
|
627
|
+
type: 'array',
|
|
628
|
+
items: { type: 'string' },
|
|
629
|
+
description: 'Agent names (case-insensitive) to receive the message. Required only when creating a new thread (no threadId).',
|
|
630
|
+
},
|
|
631
|
+
recipient: {
|
|
632
|
+
type: 'string',
|
|
633
|
+
enum: ['user', 'agents'],
|
|
634
|
+
description: 'Set to "user" to DM the user without a threadId when providing agentName.',
|
|
635
|
+
},
|
|
636
|
+
message: { type: 'string', description: 'Message content to deliver.' },
|
|
637
|
+
senderName: {
|
|
638
|
+
type: 'string',
|
|
639
|
+
description: "Agent's name authoring the message (case-insensitive). When provided, message is authored as that agent.",
|
|
640
|
+
},
|
|
641
|
+
agentName: {
|
|
642
|
+
type: 'string',
|
|
643
|
+
description: 'Alias for senderName used with { recipient: "user" } to identify the sending agent.',
|
|
644
|
+
},
|
|
645
|
+
},
|
|
646
|
+
},
|
|
647
|
+
},
|
|
648
|
+
{
|
|
649
|
+
name: 'devchain_chat_ack',
|
|
650
|
+
description: 'Mark a chat message as read for an agent and emit a message.read event.',
|
|
651
|
+
inputSchema: {
|
|
652
|
+
type: 'object',
|
|
653
|
+
required: ['thread_id', 'message_id', 'agent_name'],
|
|
654
|
+
properties: {
|
|
655
|
+
thread_id: { type: 'string', description: 'Chat thread UUID.' },
|
|
656
|
+
message_id: { type: 'string', description: 'Chat message UUID to acknowledge.' },
|
|
657
|
+
agent_name: { type: 'string', description: 'Agent name acknowledging the message.' },
|
|
658
|
+
},
|
|
659
|
+
},
|
|
660
|
+
},
|
|
661
|
+
{
|
|
662
|
+
name: 'devchain_chat_read_history',
|
|
663
|
+
description: 'Fetch recent messages for a chat thread so agents can catch up after an invite.',
|
|
664
|
+
inputSchema: {
|
|
665
|
+
type: 'object',
|
|
666
|
+
required: ['thread_id'],
|
|
667
|
+
properties: {
|
|
668
|
+
thread_id: { type: 'string', description: 'Chat thread UUID.' },
|
|
669
|
+
limit: { type: 'number', description: 'Max messages to return (default 50, max 200).' },
|
|
670
|
+
since: {
|
|
671
|
+
type: 'string',
|
|
672
|
+
description: 'ISO timestamp; only messages after this time are returned.',
|
|
673
|
+
},
|
|
674
|
+
exclude_system: {
|
|
675
|
+
type: 'boolean',
|
|
676
|
+
description: 'Exclude system messages. Defaults to true when omitted to show only user/agent authored messages.',
|
|
677
|
+
},
|
|
678
|
+
},
|
|
679
|
+
},
|
|
680
|
+
},
|
|
681
|
+
{
|
|
682
|
+
name: 'devchain_chat_list_members',
|
|
683
|
+
description: 'List members of a chat thread along with their online status.',
|
|
684
|
+
inputSchema: {
|
|
685
|
+
type: 'object',
|
|
686
|
+
required: ['thread_id'],
|
|
687
|
+
properties: { thread_id: { type: 'string', description: 'Chat thread UUID.' } },
|
|
688
|
+
},
|
|
689
|
+
},
|
|
690
|
+
];
|
|
691
|
+
return (0, constants_1.filterHiddenTools)(tools);
|
|
692
|
+
}
|
|
693
|
+
async handleSseStream(request, reply, sessionId, _lastEventId) {
|
|
694
|
+
reply.raw.writeHead(200, {
|
|
695
|
+
'Content-Type': 'text/event-stream',
|
|
696
|
+
'Cache-Control': 'no-cache',
|
|
697
|
+
Connection: 'keep-alive',
|
|
698
|
+
'X-Accel-Buffering': 'no',
|
|
699
|
+
});
|
|
700
|
+
if (sessionId) {
|
|
701
|
+
const existing = this.sessions.get(sessionId);
|
|
702
|
+
if (existing) {
|
|
703
|
+
clearInterval(existing.pingInterval);
|
|
704
|
+
this.sessions.delete(sessionId);
|
|
705
|
+
}
|
|
706
|
+
const pingInterval = setInterval(() => {
|
|
707
|
+
try {
|
|
708
|
+
reply.raw.write(': ping\n\n');
|
|
709
|
+
}
|
|
710
|
+
catch (error) {
|
|
711
|
+
clearInterval(pingInterval);
|
|
712
|
+
this.sessions.delete(sessionId);
|
|
713
|
+
}
|
|
714
|
+
}, 30000);
|
|
715
|
+
this.sessions.set(sessionId, { reply, pingInterval });
|
|
716
|
+
request.raw.on('close', () => {
|
|
717
|
+
clearInterval(pingInterval);
|
|
718
|
+
this.sessions.delete(sessionId);
|
|
719
|
+
});
|
|
720
|
+
this.sendSseMessage(reply, 'endpoint', { message: 'SSE connection established' });
|
|
721
|
+
}
|
|
722
|
+
return new Promise(() => {
|
|
723
|
+
});
|
|
724
|
+
}
|
|
725
|
+
sendSseMessage(reply, event, data, id) {
|
|
726
|
+
try {
|
|
727
|
+
if (id) {
|
|
728
|
+
reply.raw.write(`id: ${id}\n`);
|
|
729
|
+
}
|
|
730
|
+
reply.raw.write(`event: ${event}\n`);
|
|
731
|
+
reply.raw.write(`data: ${JSON.stringify(data)}\n\n`);
|
|
732
|
+
}
|
|
733
|
+
catch (error) {
|
|
734
|
+
}
|
|
735
|
+
}
|
|
736
|
+
sendToSession(sessionId, event, data, id) {
|
|
737
|
+
const session = this.sessions.get(sessionId);
|
|
738
|
+
if (session) {
|
|
739
|
+
this.sendSseMessage(session.reply, event, data, id);
|
|
740
|
+
return true;
|
|
741
|
+
}
|
|
742
|
+
return false;
|
|
743
|
+
}
|
|
744
|
+
async handleDelete(reply, sessionId) {
|
|
745
|
+
if (sessionId) {
|
|
746
|
+
const session = this.sessions.get(sessionId);
|
|
747
|
+
if (session) {
|
|
748
|
+
clearInterval(session.pingInterval);
|
|
749
|
+
this.sessions.delete(sessionId);
|
|
750
|
+
return { success: true };
|
|
751
|
+
}
|
|
752
|
+
}
|
|
753
|
+
return { success: false };
|
|
754
|
+
}
|
|
755
|
+
};
|
|
756
|
+
exports.McpHttpController = McpHttpController;
|
|
757
|
+
__decorate([
|
|
758
|
+
(0, common_1.Post)(),
|
|
759
|
+
(0, common_1.HttpCode)(200),
|
|
760
|
+
__param(0, (0, common_1.Body)()),
|
|
761
|
+
__param(1, (0, common_1.Res)({ passthrough: true })),
|
|
762
|
+
__param(2, (0, common_1.Headers)('mcp-session-id')),
|
|
763
|
+
__metadata("design:type", Function),
|
|
764
|
+
__metadata("design:paramtypes", [Object, Object, String]),
|
|
765
|
+
__metadata("design:returntype", Promise)
|
|
766
|
+
], McpHttpController.prototype, "handle", null);
|
|
767
|
+
__decorate([
|
|
768
|
+
(0, common_1.Get)(),
|
|
769
|
+
__param(0, (0, common_1.Req)()),
|
|
770
|
+
__param(1, (0, common_1.Res)()),
|
|
771
|
+
__param(2, (0, common_1.Headers)('mcp-session-id')),
|
|
772
|
+
__param(3, (0, common_1.Headers)('last-event-id')),
|
|
773
|
+
__metadata("design:type", Function),
|
|
774
|
+
__metadata("design:paramtypes", [Object, Object, String, String]),
|
|
775
|
+
__metadata("design:returntype", Promise)
|
|
776
|
+
], McpHttpController.prototype, "handleSseStream", null);
|
|
777
|
+
__decorate([
|
|
778
|
+
(0, common_1.Delete)(),
|
|
779
|
+
(0, common_1.HttpCode)(200),
|
|
780
|
+
__param(0, (0, common_1.Res)({ passthrough: true })),
|
|
781
|
+
__param(1, (0, common_1.Headers)('mcp-session-id')),
|
|
782
|
+
__metadata("design:type", Function),
|
|
783
|
+
__metadata("design:paramtypes", [Object, String]),
|
|
784
|
+
__metadata("design:returntype", Promise)
|
|
785
|
+
], McpHttpController.prototype, "handleDelete", null);
|
|
786
|
+
exports.McpHttpController = McpHttpController = __decorate([
|
|
787
|
+
(0, common_1.Controller)('mcp/rpc'),
|
|
788
|
+
__metadata("design:paramtypes", [mcp_service_1.McpService])
|
|
789
|
+
], McpHttpController);
|
|
790
|
+
//# sourceMappingURL=mcp-http.controller.js.map
|