crewly 1.15.0 → 1.17.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +39 -5
- package/config/roles/developer/prompt.md +1 -1
- package/config/roles/orchestrator/prompt.md +20 -5
- package/config/runtime_scripts/runtime-config.json +7 -0
- package/config/skills/agent/core/calendar-create/SKILL.md +62 -0
- package/config/skills/agent/core/calendar-create/execute.sh +91 -0
- package/config/skills/agent/core/calendar-create/execute.test.sh +80 -0
- package/config/skills/agent/core/calendar-list/SKILL.md +58 -0
- package/config/skills/agent/core/calendar-list/execute.sh +88 -0
- package/config/skills/agent/core/calendar-list/execute.test.sh +71 -0
- package/config/skills/agent/core/count-json/SKILL.md +61 -0
- package/config/skills/agent/core/count-json/execute.sh +52 -0
- package/config/skills/agent/core/count-json/execute.test.sh +35 -0
- package/config/skills/agent/core/gmail-read/SKILL.md +61 -0
- package/config/skills/agent/core/gmail-read/execute.sh +62 -0
- package/config/skills/agent/core/gmail-read/execute.test.sh +68 -0
- package/config/skills/agent/core/gmail-search/SKILL.md +64 -0
- package/config/skills/agent/core/gmail-search/execute.sh +70 -0
- package/config/skills/agent/core/gmail-search/execute.test.sh +67 -0
- package/config/skills/agent/core/gmail-send/SKILL.md +69 -0
- package/config/skills/agent/core/gmail-send/execute.sh +114 -0
- package/config/skills/agent/core/gmail-send/execute.test.sh +83 -0
- package/config/skills/agent/core/record-prediction/SKILL.md +61 -0
- package/config/skills/agent/core/record-prediction/execute.sh +90 -0
- package/config/skills/agent/core/record-prediction/execute.test.sh +67 -0
- package/config/skills/agent/core/resolve-prediction/SKILL.md +61 -0
- package/config/skills/agent/core/resolve-prediction/execute.sh +87 -0
- package/config/skills/agent/core/resolve-prediction/execute.test.sh +74 -0
- package/config/skills/agent/core/set-focus/SKILL.md +64 -0
- package/config/skills/agent/core/set-focus/execute.sh +73 -0
- package/config/skills/agent/core/set-focus/execute.test.sh +67 -0
- package/config/skills/agent/core/suppress-noise/SKILL.md +59 -0
- package/config/skills/agent/core/suppress-noise/execute.sh +68 -0
- package/config/skills/agent/core/suppress-noise/execute.test.sh +58 -0
- package/config/skills/orchestrator/list-missions/SKILL.md +47 -0
- package/config/skills/orchestrator/list-missions/execute.sh +34 -0
- package/config/skills/orchestrator/list-missions/execute.test.sh +33 -0
- package/config/slack-master-app-manifest.json +64 -0
- package/dist/backend/backend/src/constants.d.ts +186 -0
- package/dist/backend/backend/src/constants.d.ts.map +1 -1
- package/dist/backend/backend/src/constants.js +196 -0
- package/dist/backend/backend/src/constants.js.map +1 -1
- package/dist/backend/backend/src/controllers/agent-self-improvement/agent-self-improvement.controller.d.ts +76 -0
- package/dist/backend/backend/src/controllers/agent-self-improvement/agent-self-improvement.controller.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/agent-self-improvement/agent-self-improvement.controller.js +262 -0
- package/dist/backend/backend/src/controllers/agent-self-improvement/agent-self-improvement.controller.js.map +1 -0
- package/dist/backend/backend/src/controllers/cloud/cloud.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/cloud/cloud.controller.js +3 -1
- package/dist/backend/backend/src/controllers/cloud/cloud.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/google/google.controller.d.ts +100 -0
- package/dist/backend/backend/src/controllers/google/google.controller.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/google/google.controller.js +293 -0
- package/dist/backend/backend/src/controllers/google/google.controller.js.map +1 -0
- package/dist/backend/backend/src/controllers/google/google.routes.d.ts +26 -0
- package/dist/backend/backend/src/controllers/google/google.routes.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/google/google.routes.js +38 -0
- package/dist/backend/backend/src/controllers/google/google.routes.js.map +1 -0
- package/dist/backend/backend/src/controllers/oauth/oauth.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/oauth/oauth.routes.js +31 -0
- package/dist/backend/backend/src/controllers/oauth/oauth.routes.js.map +1 -1
- package/dist/backend/backend/src/controllers/request-types.d.ts +6 -2
- package/dist/backend/backend/src/controllers/request-types.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/slack/slack.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/slack/slack.controller.js +209 -2
- package/dist/backend/backend/src/controllers/slack/slack.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/team/team.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/team/team.controller.js +4 -0
- package/dist/backend/backend/src/controllers/team/team.controller.js.map +1 -1
- package/dist/backend/backend/src/index.d.ts +1 -0
- package/dist/backend/backend/src/index.d.ts.map +1 -1
- package/dist/backend/backend/src/index.js +92 -8
- package/dist/backend/backend/src/index.js.map +1 -1
- package/dist/backend/backend/src/routes/api.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/routes/api.routes.js +10 -0
- package/dist/backend/backend/src/routes/api.routes.js.map +1 -1
- package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts +10 -0
- package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/agent-registration.service.js +32 -4
- package/dist/backend/backend/src/services/agent/agent-registration.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/opencode-runtime.service.d.ts +114 -0
- package/dist/backend/backend/src/services/agent/opencode-runtime.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/agent/opencode-runtime.service.js +185 -0
- package/dist/backend/backend/src/services/agent/opencode-runtime.service.js.map +1 -0
- package/dist/backend/backend/src/services/agent/runtime-agent.service.abstract.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/runtime-agent.service.abstract.js +22 -1
- package/dist/backend/backend/src/services/agent/runtime-agent.service.abstract.js.map +1 -1
- package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.d.ts +1 -1
- package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.js +15 -3
- package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/runtime-service.factory.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/runtime-service.factory.js +9 -0
- package/dist/backend/backend/src/services/agent/runtime-service.factory.js.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-builder.service.d.ts +23 -0
- package/dist/backend/backend/src/services/ai/prompt-builder.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-builder.service.js +45 -0
- package/dist/backend/backend/src/services/ai/prompt-builder.service.js.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/memory-reference.module.d.ts +43 -3
- package/dist/backend/backend/src/services/ai/prompt-modules/memory-reference.module.d.ts.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/memory-reference.module.js +85 -4
- package/dist/backend/backend/src/services/ai/prompt-modules/memory-reference.module.js.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/prompt-module.interface.d.ts +2 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/prompt-module.interface.d.ts.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/prompt-module.interface.js.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/skills-reference.module.d.ts.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/skills-reference.module.js +6 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/skills-reference.module.js.map +1 -1
- package/dist/backend/backend/src/services/ai/self-improvement/agent-memory-provider.d.ts +45 -0
- package/dist/backend/backend/src/services/ai/self-improvement/agent-memory-provider.d.ts.map +1 -0
- package/dist/backend/backend/src/services/ai/self-improvement/agent-memory-provider.js +59 -0
- package/dist/backend/backend/src/services/ai/self-improvement/agent-memory-provider.js.map +1 -0
- package/dist/backend/backend/src/services/ai/self-improvement/consolidation-scheduler.service.d.ts +137 -0
- package/dist/backend/backend/src/services/ai/self-improvement/consolidation-scheduler.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/ai/self-improvement/consolidation-scheduler.service.js +216 -0
- package/dist/backend/backend/src/services/ai/self-improvement/consolidation-scheduler.service.js.map +1 -0
- package/dist/backend/backend/src/services/ai/self-improvement/prediction-calibration.service.d.ts +4 -1
- package/dist/backend/backend/src/services/ai/self-improvement/prediction-calibration.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/ai/self-improvement/prediction-calibration.service.js +3 -1
- package/dist/backend/backend/src/services/ai/self-improvement/prediction-calibration.service.js.map +1 -1
- package/dist/backend/backend/src/services/cloud/cloud-initializer.d.ts +8 -0
- package/dist/backend/backend/src/services/cloud/cloud-initializer.d.ts.map +1 -1
- package/dist/backend/backend/src/services/cloud/cloud-initializer.js +25 -0
- package/dist/backend/backend/src/services/cloud/cloud-initializer.js.map +1 -1
- package/dist/backend/backend/src/services/cloud/cloud-sync.types.d.ts +1 -1
- package/dist/backend/backend/src/services/cloud/cloud-sync.types.d.ts.map +1 -1
- package/dist/backend/backend/src/services/cloud/cloud-sync.types.js +1 -0
- package/dist/backend/backend/src/services/cloud/cloud-sync.types.js.map +1 -1
- package/dist/backend/backend/src/services/google/calendar.service.d.ts +98 -0
- package/dist/backend/backend/src/services/google/calendar.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/google/calendar.service.js +125 -0
- package/dist/backend/backend/src/services/google/calendar.service.js.map +1 -0
- package/dist/backend/backend/src/services/google/gmail.service.d.ts +165 -0
- package/dist/backend/backend/src/services/google/gmail.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/google/gmail.service.js +296 -0
- package/dist/backend/backend/src/services/google/gmail.service.js.map +1 -0
- package/dist/backend/backend/src/services/google/google-api.client.d.ts +44 -0
- package/dist/backend/backend/src/services/google/google-api.client.d.ts.map +1 -0
- package/dist/backend/backend/src/services/google/google-api.client.js +104 -0
- package/dist/backend/backend/src/services/google/google-api.client.js.map +1 -0
- package/dist/backend/backend/src/services/google/google-workspace-token.service.d.ts +159 -0
- package/dist/backend/backend/src/services/google/google-workspace-token.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/google/google-workspace-token.service.js +274 -0
- package/dist/backend/backend/src/services/google/google-workspace-token.service.js.map +1 -0
- package/dist/backend/backend/src/services/mcp-tool-definitions.d.ts +1 -1
- package/dist/backend/backend/src/services/mcp-tool-definitions.js +1 -1
- package/dist/backend/backend/src/services/mcp-tool-definitions.js.map +1 -1
- package/dist/backend/backend/src/services/runtime-adapter.d.ts +10 -1
- package/dist/backend/backend/src/services/runtime-adapter.d.ts.map +1 -1
- package/dist/backend/backend/src/services/runtime-adapter.js +12 -1
- package/dist/backend/backend/src/services/runtime-adapter.js.map +1 -1
- package/dist/backend/backend/src/services/settings/settings.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/settings/settings.service.js +1 -0
- package/dist/backend/backend/src/services/settings/settings.service.js.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-agent-identity.service.d.ts +12 -1
- package/dist/backend/backend/src/services/slack/slack-agent-identity.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-agent-identity.service.js +30 -0
- package/dist/backend/backend/src/services/slack/slack-agent-identity.service.js.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-cloud-config.service.d.ts +186 -0
- package/dist/backend/backend/src/services/slack/slack-cloud-config.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/slack/slack-cloud-config.service.js +409 -0
- package/dist/backend/backend/src/services/slack/slack-cloud-config.service.js.map +1 -0
- package/dist/backend/backend/src/services/slack/slack-initializer.d.ts +95 -1
- package/dist/backend/backend/src/services/slack/slack-initializer.d.ts.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-initializer.js +284 -4
- package/dist/backend/backend/src/services/slack/slack-initializer.js.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-instance-registry.service.d.ts +178 -0
- package/dist/backend/backend/src/services/slack/slack-instance-registry.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/slack/slack-instance-registry.service.js +392 -0
- package/dist/backend/backend/src/services/slack/slack-instance-registry.service.js.map +1 -0
- package/dist/backend/backend/src/services/slack/slack.service.d.ts +76 -1
- package/dist/backend/backend/src/services/slack/slack.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/slack/slack.service.js +234 -47
- package/dist/backend/backend/src/services/slack/slack.service.js.map +1 -1
- package/dist/backend/backend/src/services/v3/fallback-trigger-cleanup.subscriber.d.ts +78 -0
- package/dist/backend/backend/src/services/v3/fallback-trigger-cleanup.subscriber.d.ts.map +1 -0
- package/dist/backend/backend/src/services/v3/fallback-trigger-cleanup.subscriber.js +129 -0
- package/dist/backend/backend/src/services/v3/fallback-trigger-cleanup.subscriber.js.map +1 -0
- package/dist/backend/backend/src/services/v3/kr-skill-measurer.service.d.ts +117 -0
- package/dist/backend/backend/src/services/v3/kr-skill-measurer.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/v3/kr-skill-measurer.service.js +214 -0
- package/dist/backend/backend/src/services/v3/kr-skill-measurer.service.js.map +1 -0
- package/dist/backend/backend/src/services/v3/mission-reminder.service.d.ts +6 -0
- package/dist/backend/backend/src/services/v3/mission-reminder.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/v3/mission-reminder.service.js +33 -0
- package/dist/backend/backend/src/services/v3/mission-reminder.service.js.map +1 -1
- package/dist/backend/backend/src/services/v3/okr-owner-guidance.service.d.ts +116 -0
- package/dist/backend/backend/src/services/v3/okr-owner-guidance.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/v3/okr-owner-guidance.service.js +254 -0
- package/dist/backend/backend/src/services/v3/okr-owner-guidance.service.js.map +1 -0
- package/dist/backend/backend/src/types/index.d.ts +11 -1
- package/dist/backend/backend/src/types/index.d.ts.map +1 -1
- package/dist/backend/backend/src/types/index.js.map +1 -1
- package/dist/backend/backend/src/types/settings.types.d.ts +1 -1
- package/dist/backend/backend/src/types/settings.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/settings.types.js +7 -0
- package/dist/backend/backend/src/types/settings.types.js.map +1 -1
- package/dist/backend/backend/src/types/slack.types.d.ts +141 -2
- package/dist/backend/backend/src/types/slack.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/slack.types.js.map +1 -1
- package/dist/backend/backend/src/types/team-template.types.d.ts +2 -2
- package/dist/backend/backend/src/types/team-template.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/team-template.types.js +1 -1
- package/dist/backend/backend/src/types/team-template.types.js.map +1 -1
- package/dist/backend/backend/src/types/v2/mission.types.d.ts +2 -0
- package/dist/backend/backend/src/types/v2/mission.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/v2/mission.types.js.map +1 -1
- package/dist/backend/backend/src/utils/terminal-string-ops.d.ts +2 -0
- package/dist/backend/backend/src/utils/terminal-string-ops.d.ts.map +1 -1
- package/dist/backend/backend/src/utils/terminal-string-ops.js +14 -0
- package/dist/backend/backend/src/utils/terminal-string-ops.js.map +1 -1
- package/dist/backend/build-info.json +2 -2
- package/dist/cli/backend/src/constants.d.ts +186 -0
- package/dist/cli/backend/src/constants.d.ts.map +1 -1
- package/dist/cli/backend/src/constants.js +196 -0
- package/dist/cli/backend/src/constants.js.map +1 -1
- package/dist/cli/backend/src/services/agent/agent-registration.service.d.ts +10 -0
- package/dist/cli/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/agent/agent-registration.service.js +32 -4
- package/dist/cli/backend/src/services/agent/agent-registration.service.js.map +1 -1
- package/dist/cli/backend/src/services/agent/opencode-runtime.service.d.ts +114 -0
- package/dist/cli/backend/src/services/agent/opencode-runtime.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/agent/opencode-runtime.service.js +185 -0
- package/dist/cli/backend/src/services/agent/opencode-runtime.service.js.map +1 -0
- package/dist/cli/backend/src/services/agent/runtime-agent.service.abstract.d.ts.map +1 -1
- package/dist/cli/backend/src/services/agent/runtime-agent.service.abstract.js +22 -1
- package/dist/cli/backend/src/services/agent/runtime-agent.service.abstract.js.map +1 -1
- package/dist/cli/backend/src/services/agent/runtime-exit-monitor.service.d.ts +1 -1
- package/dist/cli/backend/src/services/agent/runtime-exit-monitor.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/agent/runtime-exit-monitor.service.js +15 -3
- package/dist/cli/backend/src/services/agent/runtime-exit-monitor.service.js.map +1 -1
- package/dist/cli/backend/src/services/agent/runtime-service.factory.d.ts.map +1 -1
- package/dist/cli/backend/src/services/agent/runtime-service.factory.js +9 -0
- package/dist/cli/backend/src/services/agent/runtime-service.factory.js.map +1 -1
- package/dist/cli/backend/src/services/ai/prompt-builder.service.d.ts +23 -0
- package/dist/cli/backend/src/services/ai/prompt-builder.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/ai/prompt-builder.service.js +45 -0
- package/dist/cli/backend/src/services/ai/prompt-builder.service.js.map +1 -1
- package/dist/cli/backend/src/services/ai/prompt-modules/memory-reference.module.d.ts +43 -3
- package/dist/cli/backend/src/services/ai/prompt-modules/memory-reference.module.d.ts.map +1 -1
- package/dist/cli/backend/src/services/ai/prompt-modules/memory-reference.module.js +85 -4
- package/dist/cli/backend/src/services/ai/prompt-modules/memory-reference.module.js.map +1 -1
- package/dist/cli/backend/src/services/ai/prompt-modules/prompt-module.interface.d.ts +2 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/prompt-module.interface.d.ts.map +1 -1
- package/dist/cli/backend/src/services/ai/prompt-modules/prompt-module.interface.js.map +1 -1
- package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.d.ts.map +1 -1
- package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.js +6 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.js.map +1 -1
- package/dist/cli/backend/src/services/ai/self-improvement/agent-memory-provider.d.ts +45 -0
- package/dist/cli/backend/src/services/ai/self-improvement/agent-memory-provider.d.ts.map +1 -0
- package/dist/cli/backend/src/services/ai/self-improvement/agent-memory-provider.js +59 -0
- package/dist/cli/backend/src/services/ai/self-improvement/agent-memory-provider.js.map +1 -0
- package/dist/cli/backend/src/services/ai/self-improvement/attention.service.d.ts +74 -0
- package/dist/cli/backend/src/services/ai/self-improvement/attention.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/ai/self-improvement/attention.service.js +132 -0
- package/dist/cli/backend/src/services/ai/self-improvement/attention.service.js.map +1 -0
- package/dist/cli/backend/src/services/ai/self-improvement/memory-consolidation.service.d.ts +107 -0
- package/dist/cli/backend/src/services/ai/self-improvement/memory-consolidation.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/ai/self-improvement/memory-consolidation.service.js +183 -0
- package/dist/cli/backend/src/services/ai/self-improvement/memory-consolidation.service.js.map +1 -0
- package/dist/cli/backend/src/services/ai/self-improvement/prediction-calibration.service.d.ts +100 -0
- package/dist/cli/backend/src/services/ai/self-improvement/prediction-calibration.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/ai/self-improvement/prediction-calibration.service.js +130 -0
- package/dist/cli/backend/src/services/ai/self-improvement/prediction-calibration.service.js.map +1 -0
- package/dist/cli/backend/src/services/cloud/cloud-sync.types.d.ts +1 -1
- package/dist/cli/backend/src/services/cloud/cloud-sync.types.d.ts.map +1 -1
- package/dist/cli/backend/src/services/cloud/cloud-sync.types.js +1 -0
- package/dist/cli/backend/src/services/cloud/cloud-sync.types.js.map +1 -1
- package/dist/cli/backend/src/services/mcp-tool-definitions.d.ts +1 -1
- package/dist/cli/backend/src/services/mcp-tool-definitions.js +1 -1
- package/dist/cli/backend/src/services/mcp-tool-definitions.js.map +1 -1
- package/dist/cli/backend/src/services/settings/settings.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/settings/settings.service.js +1 -0
- package/dist/cli/backend/src/services/settings/settings.service.js.map +1 -1
- package/dist/cli/backend/src/services/slack/slack-agent-identity.service.d.ts +12 -1
- package/dist/cli/backend/src/services/slack/slack-agent-identity.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/slack/slack-agent-identity.service.js +30 -0
- package/dist/cli/backend/src/services/slack/slack-agent-identity.service.js.map +1 -1
- package/dist/cli/backend/src/services/slack/slack.service.d.ts +76 -1
- package/dist/cli/backend/src/services/slack/slack.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/slack/slack.service.js +234 -47
- package/dist/cli/backend/src/services/slack/slack.service.js.map +1 -1
- package/dist/cli/backend/src/types/index.d.ts +11 -1
- package/dist/cli/backend/src/types/index.d.ts.map +1 -1
- package/dist/cli/backend/src/types/index.js.map +1 -1
- package/dist/cli/backend/src/types/settings.types.d.ts +1 -1
- package/dist/cli/backend/src/types/settings.types.d.ts.map +1 -1
- package/dist/cli/backend/src/types/settings.types.js +7 -0
- package/dist/cli/backend/src/types/settings.types.js.map +1 -1
- package/dist/cli/backend/src/types/slack.types.d.ts +141 -2
- package/dist/cli/backend/src/types/slack.types.d.ts.map +1 -1
- package/dist/cli/backend/src/types/slack.types.js.map +1 -1
- package/dist/cli/backend/src/types/team-template.types.d.ts +2 -2
- package/dist/cli/backend/src/types/team-template.types.d.ts.map +1 -1
- package/dist/cli/backend/src/types/team-template.types.js +1 -1
- package/dist/cli/backend/src/types/team-template.types.js.map +1 -1
- package/dist/cli/backend/src/types/v2/mission.types.d.ts +2 -0
- package/dist/cli/backend/src/types/v2/mission.types.d.ts.map +1 -1
- package/dist/cli/backend/src/types/v2/mission.types.js.map +1 -1
- package/dist/cli/backend/src/utils/terminal-string-ops.d.ts +2 -0
- package/dist/cli/backend/src/utils/terminal-string-ops.d.ts.map +1 -1
- package/dist/cli/backend/src/utils/terminal-string-ops.js +14 -0
- package/dist/cli/backend/src/utils/terminal-string-ops.js.map +1 -1
- package/dist/cli/cli/src/commands/onboard.d.ts +2 -2
- package/dist/cli/cli/src/commands/onboard.d.ts.map +1 -1
- package/dist/cli/cli/src/commands/onboard.js +15 -7
- package/dist/cli/cli/src/commands/onboard.js.map +1 -1
- package/frontend/dist/assets/{index-203224f9.js → index-c87332bf.js} +278 -278
- package/frontend/dist/assets/index-f6b4230e.css +42 -0
- package/frontend/dist/index.html +2 -2
- package/package.json +1 -1
- package/frontend/dist/assets/index-dcaf6c88.css +0 -42
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Google API client — the one place Gmail and Calendar calls go through.
|
|
3
|
+
*
|
|
4
|
+
* Attaches the Cloud-minted access token, maps Google's HTTP failures to
|
|
5
|
+
* {@link GoogleWorkspaceError}, and drops the cached token on a 401 so the
|
|
6
|
+
* next call refreshes instead of failing the same way again.
|
|
7
|
+
*
|
|
8
|
+
* @module services/google/google-api.client
|
|
9
|
+
*/
|
|
10
|
+
import { GOOGLE_WORKSPACE_CONSTANTS } from '../../constants.js';
|
|
11
|
+
import { GoogleWorkspaceError } from './google-workspace-token.service.js';
|
|
12
|
+
/**
|
|
13
|
+
* Extract the human message from a Google error body, tolerating both the
|
|
14
|
+
* object and the plain-string shapes Google uses.
|
|
15
|
+
*
|
|
16
|
+
* @param text - Raw response body
|
|
17
|
+
* @returns Message or undefined
|
|
18
|
+
*/
|
|
19
|
+
function googleErrorMessage(text) {
|
|
20
|
+
try {
|
|
21
|
+
const parsed = JSON.parse(text);
|
|
22
|
+
if (typeof parsed.error === 'string')
|
|
23
|
+
return parsed.error;
|
|
24
|
+
return parsed.error?.message;
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
return text ? text.slice(0, 200) : undefined;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Build a URL with query parameters; `undefined`/empty values are skipped and
|
|
32
|
+
* array values are repeated (Gmail's `metadataHeaders=A&metadataHeaders=B`).
|
|
33
|
+
*
|
|
34
|
+
* @param base - Absolute URL without query
|
|
35
|
+
* @param params - Query parameters
|
|
36
|
+
* @returns The full URL string
|
|
37
|
+
*/
|
|
38
|
+
export function buildGoogleUrl(base, params = {}) {
|
|
39
|
+
const url = new URL(base);
|
|
40
|
+
for (const [key, value] of Object.entries(params)) {
|
|
41
|
+
if (value === undefined || value === '')
|
|
42
|
+
continue;
|
|
43
|
+
if (Array.isArray(value)) {
|
|
44
|
+
for (const v of value)
|
|
45
|
+
url.searchParams.append(key, v);
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
url.searchParams.set(key, String(value));
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return url.toString();
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Authenticated JSON call to a Google API.
|
|
55
|
+
*
|
|
56
|
+
* @param deps - Token provider + fetch
|
|
57
|
+
* @param url - Absolute URL (use {@link buildGoogleUrl})
|
|
58
|
+
* @param init - Method and optional JSON body
|
|
59
|
+
* @returns The parsed JSON response
|
|
60
|
+
* @throws GoogleWorkspaceError — token failures pass through; Google 401 →
|
|
61
|
+
* 401 google_error (cache dropped), 403/404/429 keep their status, other
|
|
62
|
+
* failures → 502 google_error, unreachable → 502 network
|
|
63
|
+
*/
|
|
64
|
+
export async function googleRequest(deps, url, init = {}) {
|
|
65
|
+
const token = await deps.tokens.getAccessToken();
|
|
66
|
+
const fetchImpl = deps.fetchImpl ?? fetch;
|
|
67
|
+
const CODES = GOOGLE_WORKSPACE_CONSTANTS.ERROR_CODES;
|
|
68
|
+
let res;
|
|
69
|
+
try {
|
|
70
|
+
res = await fetchImpl(url, {
|
|
71
|
+
method: init.method ?? 'GET',
|
|
72
|
+
headers: {
|
|
73
|
+
Authorization: `Bearer ${token}`,
|
|
74
|
+
Accept: 'application/json',
|
|
75
|
+
...(init.body !== undefined ? { 'Content-Type': 'application/json' } : {}),
|
|
76
|
+
},
|
|
77
|
+
body: init.body !== undefined ? JSON.stringify(init.body) : undefined,
|
|
78
|
+
signal: AbortSignal.timeout(GOOGLE_WORKSPACE_CONSTANTS.REQUEST_TIMEOUT_MS),
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
catch (err) {
|
|
82
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
83
|
+
throw new GoogleWorkspaceError(502, CODES.NETWORK, `Google unreachable: ${message}`);
|
|
84
|
+
}
|
|
85
|
+
const text = await res.text();
|
|
86
|
+
if (!res.ok) {
|
|
87
|
+
const message = googleErrorMessage(text) ?? `Google request failed (${res.status})`;
|
|
88
|
+
if (res.status === 401) {
|
|
89
|
+
deps.tokens.clearCache();
|
|
90
|
+
throw new GoogleWorkspaceError(401, CODES.GOOGLE_ERROR, `Google rejected the access token: ${message}`);
|
|
91
|
+
}
|
|
92
|
+
const passthrough = res.status === 403 || res.status === 404 || res.status === 429;
|
|
93
|
+
throw new GoogleWorkspaceError(passthrough ? res.status : 502, CODES.GOOGLE_ERROR, message);
|
|
94
|
+
}
|
|
95
|
+
if (!text)
|
|
96
|
+
return {};
|
|
97
|
+
try {
|
|
98
|
+
return JSON.parse(text);
|
|
99
|
+
}
|
|
100
|
+
catch {
|
|
101
|
+
throw new GoogleWorkspaceError(502, CODES.GOOGLE_ERROR, 'Google returned a non-JSON response.');
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=google-api.client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"google-api.client.js","sourceRoot":"","sources":["../../../../../../backend/src/services/google/google-api.client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Google Workspace Token Service
|
|
3
|
+
*
|
|
4
|
+
* Crewly Cloud holds the owner's Google OAuth grant; this service asks Cloud
|
|
5
|
+
* (`/api/cloud/google/workspace/token`) for a short-lived access token and
|
|
6
|
+
* caches it until shortly before expiry, so Gmail / Calendar calls made by
|
|
7
|
+
* this instance never carry the refresh token and mail content never passes
|
|
8
|
+
* through Cloud.
|
|
9
|
+
*
|
|
10
|
+
* Cloud auth reuses the Crewly Cloud session already held by
|
|
11
|
+
* `CloudClientService` (its access JWT as Bearer) — no separate login.
|
|
12
|
+
*
|
|
13
|
+
* @module services/google/google-workspace-token.service
|
|
14
|
+
*/
|
|
15
|
+
/** The slice of CloudClientService this service needs. */
|
|
16
|
+
export interface GoogleWorkspaceCloudClient {
|
|
17
|
+
isConnected(): boolean;
|
|
18
|
+
getToken(): string | null;
|
|
19
|
+
getCloudUrl(): string | null;
|
|
20
|
+
}
|
|
21
|
+
/** Constructor dependencies (all optional — defaults are the real singletons). */
|
|
22
|
+
export interface GoogleWorkspaceTokenServiceDeps {
|
|
23
|
+
cloud?: GoogleWorkspaceCloudClient;
|
|
24
|
+
fetchImpl?: typeof fetch;
|
|
25
|
+
now?: () => number;
|
|
26
|
+
}
|
|
27
|
+
/** Cloud's `/status` payload, plus whether this instance is signed in to Cloud at all. */
|
|
28
|
+
export interface GoogleWorkspaceStatus {
|
|
29
|
+
/** True when Cloud holds a live Workspace grant for the signed-in account */
|
|
30
|
+
connected: boolean;
|
|
31
|
+
/** True when this instance is signed in to Crewly Cloud */
|
|
32
|
+
cloudConnected: boolean;
|
|
33
|
+
email?: string;
|
|
34
|
+
scopes?: string[];
|
|
35
|
+
grantedAt?: string;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Error raised for every Cloud / Google failure. `status` is the HTTP status
|
|
39
|
+
* the OSS controller should answer with and `code` is one of
|
|
40
|
+
* {@link GOOGLE_WORKSPACE_CONSTANTS.ERROR_CODES} (or `http_<n>` for anything
|
|
41
|
+
* unmapped), so the controller and the skills can branch without parsing text.
|
|
42
|
+
*/
|
|
43
|
+
export declare class GoogleWorkspaceError extends Error {
|
|
44
|
+
readonly status: number;
|
|
45
|
+
readonly code: string;
|
|
46
|
+
constructor(status: number, code: string, message: string);
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Map a Cloud workspace-endpoint failure to the status/code this instance
|
|
50
|
+
* answers with. 404 (no grant) and 409 (grant revoked) both mean "not
|
|
51
|
+
* connected — go through the consent flow again"; 503 means Cloud itself has
|
|
52
|
+
* no Google client; 502 is Google refusing Cloud.
|
|
53
|
+
*
|
|
54
|
+
* @param httpStatus - Status Cloud answered with
|
|
55
|
+
* @param code - `code` (or `error`) field from Cloud's body, if any
|
|
56
|
+
* @param message - Human message from Cloud's body, if any
|
|
57
|
+
* @returns The error to throw
|
|
58
|
+
*/
|
|
59
|
+
export declare function mapCloudFailure(httpStatus: number, code: string | undefined, message: string | undefined): GoogleWorkspaceError;
|
|
60
|
+
/**
|
|
61
|
+
* Fetches, caches and refreshes the Google access token that Cloud mints
|
|
62
|
+
* from the owner's stored grant.
|
|
63
|
+
*
|
|
64
|
+
* @example
|
|
65
|
+
* ```ts
|
|
66
|
+
* const token = await GoogleWorkspaceTokenService.getInstance().getAccessToken();
|
|
67
|
+
* ```
|
|
68
|
+
*/
|
|
69
|
+
export declare class GoogleWorkspaceTokenService {
|
|
70
|
+
private static instance;
|
|
71
|
+
private readonly logger;
|
|
72
|
+
private readonly cloud;
|
|
73
|
+
private readonly fetchImpl;
|
|
74
|
+
private readonly nowFn;
|
|
75
|
+
/** Cached token + absolute expiry (ms since epoch), or null. */
|
|
76
|
+
private cached;
|
|
77
|
+
/** The one refresh currently on the wire, so concurrent callers share it. */
|
|
78
|
+
private inflight;
|
|
79
|
+
/**
|
|
80
|
+
* @param deps - Cloud client slice, fetch and clock overrides (tests)
|
|
81
|
+
*/
|
|
82
|
+
constructor(deps?: GoogleWorkspaceTokenServiceDeps);
|
|
83
|
+
/**
|
|
84
|
+
* Process-wide instance bound to the real CloudClientService.
|
|
85
|
+
*
|
|
86
|
+
* @returns The singleton
|
|
87
|
+
*/
|
|
88
|
+
static getInstance(): GoogleWorkspaceTokenService;
|
|
89
|
+
/**
|
|
90
|
+
* Drop the singleton (tests).
|
|
91
|
+
*/
|
|
92
|
+
static resetInstance(): void;
|
|
93
|
+
/**
|
|
94
|
+
* Whether this instance is signed in to Crewly Cloud (prerequisite for
|
|
95
|
+
* everything else here).
|
|
96
|
+
*
|
|
97
|
+
* @returns True when a Cloud URL and access JWT are available
|
|
98
|
+
*/
|
|
99
|
+
isCloudAvailable(): boolean;
|
|
100
|
+
/**
|
|
101
|
+
* A Google access token that is valid for at least the refresh margin.
|
|
102
|
+
* Served from cache when possible; otherwise one Cloud round-trip shared
|
|
103
|
+
* by every concurrent caller.
|
|
104
|
+
*
|
|
105
|
+
* @returns Bearer token for Gmail / Calendar
|
|
106
|
+
* @throws GoogleWorkspaceError — not_logged_in / not_connected / not_configured / google_error / network
|
|
107
|
+
*/
|
|
108
|
+
getAccessToken(): Promise<string>;
|
|
109
|
+
/**
|
|
110
|
+
* Forget the cached token so the next call refreshes (used after Google
|
|
111
|
+
* answers 401, or when the grant is revoked).
|
|
112
|
+
*/
|
|
113
|
+
clearCache(): void;
|
|
114
|
+
/**
|
|
115
|
+
* Whether Cloud holds a Workspace grant, and for which email.
|
|
116
|
+
* Never throws for the two "not there" cases (no Cloud session / no grant);
|
|
117
|
+
* those come back as `connected: false`.
|
|
118
|
+
*
|
|
119
|
+
* @returns Connection status
|
|
120
|
+
* @throws GoogleWorkspaceError for Cloud outages / misconfiguration
|
|
121
|
+
*/
|
|
122
|
+
status(): Promise<GoogleWorkspaceStatus>;
|
|
123
|
+
/**
|
|
124
|
+
* Ask Cloud to revoke the grant and forget it; also drops the local cache.
|
|
125
|
+
*
|
|
126
|
+
* @returns Whether Cloud had a grant to remove
|
|
127
|
+
* @throws GoogleWorkspaceError when not signed in to Cloud or Cloud fails
|
|
128
|
+
*/
|
|
129
|
+
disconnect(): Promise<{
|
|
130
|
+
removed: boolean;
|
|
131
|
+
}>;
|
|
132
|
+
/**
|
|
133
|
+
* The Cloud consent-start URL for the browser: carries the current Cloud
|
|
134
|
+
* access JWT (Cloud accepts `?token=` because a top-level navigation cannot
|
|
135
|
+
* set a Bearer header) and where to land afterwards.
|
|
136
|
+
*
|
|
137
|
+
* @param returnUrl - Absolute dashboard URL Cloud redirects back to
|
|
138
|
+
* @returns Absolute URL to open
|
|
139
|
+
* @throws GoogleWorkspaceError(401, not_logged_in) when not signed in to Cloud
|
|
140
|
+
*/
|
|
141
|
+
buildConnectUrl(returnUrl: string): string;
|
|
142
|
+
/**
|
|
143
|
+
* One Cloud `/token` round-trip; updates the cache.
|
|
144
|
+
*
|
|
145
|
+
* @returns The fresh access token
|
|
146
|
+
*/
|
|
147
|
+
private refresh;
|
|
148
|
+
/**
|
|
149
|
+
* Authenticated call to a Cloud workspace endpoint using the Cloud session
|
|
150
|
+
* JWT. Unwraps the auth service's `{ success, data }` envelope.
|
|
151
|
+
*
|
|
152
|
+
* @param method - HTTP verb
|
|
153
|
+
* @param suffix - Path under CLOUD_PATH
|
|
154
|
+
* @returns The `data` payload
|
|
155
|
+
* @throws GoogleWorkspaceError mapped via {@link mapCloudFailure}
|
|
156
|
+
*/
|
|
157
|
+
private cloudRequest;
|
|
158
|
+
}
|
|
159
|
+
//# sourceMappingURL=google-workspace-token.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"google-workspace-token.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/google/google-workspace-token.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAMH,0DAA0D;AAC1D,MAAM,WAAW,0BAA0B;IACzC,WAAW,IAAI,OAAO,CAAC;IACvB,QAAQ,IAAI,MAAM,GAAG,IAAI,CAAC;IAC1B,WAAW,IAAI,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED,kFAAkF;AAClF,MAAM,WAAW,+BAA+B;IAC9C,KAAK,CAAC,EAAE,0BAA0B,CAAC;IACnC,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACpB;AAED,0FAA0F;AAC1F,MAAM,WAAW,qBAAqB;IACpC,6EAA6E;IAC7E,SAAS,EAAE,OAAO,CAAC;IACnB,2DAA2D;IAC3D,cAAc,EAAE,OAAO,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAkBD;;;;;GAKG;AACH,qBAAa,oBAAqB,SAAQ,KAAK;aAE3B,MAAM,EAAE,MAAM;aACd,IAAI,EAAE,MAAM;gBADZ,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EAC5B,OAAO,EAAE,MAAM;CAKlB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,oBAAoB,CAe/H;AAED;;;;;;;;GAQG;AACH,qBAAa,2BAA2B;IACtC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAA4C;IAEnE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;IACzC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA6B;IACnD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAe;IACzC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAe;IAErC,gEAAgE;IAChE,OAAO,CAAC,MAAM,CAAgG;IAC9G,6EAA6E;IAC7E,OAAO,CAAC,QAAQ,CAAgC;IAEhD;;OAEG;gBACS,IAAI,GAAE,+BAAoC;IAOtD;;;;OAIG;IACH,MAAM,CAAC,WAAW,IAAI,2BAA2B;IAOjD;;OAEG;IACH,MAAM,CAAC,aAAa,IAAI,IAAI;IAI5B;;;;;OAKG;IACH,gBAAgB,IAAI,OAAO;IAI3B;;;;;;;OAOG;IACG,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC;IAavC;;;OAGG;IACH,UAAU,IAAI,IAAI;IAIlB;;;;;;;OAOG;IACG,MAAM,IAAI,OAAO,CAAC,qBAAqB,CAAC;IAuB9C;;;;;OAKG;IACG,UAAU,IAAI,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;IAMjD;;;;;;;;OAQG;IACH,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IAc1C;;;;OAIG;YACW,OAAO;IAsBrB;;;;;;;;OAQG;YACW,YAAY;CA8B3B"}
|
|
@@ -0,0 +1,274 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Google Workspace Token Service
|
|
3
|
+
*
|
|
4
|
+
* Crewly Cloud holds the owner's Google OAuth grant; this service asks Cloud
|
|
5
|
+
* (`/api/cloud/google/workspace/token`) for a short-lived access token and
|
|
6
|
+
* caches it until shortly before expiry, so Gmail / Calendar calls made by
|
|
7
|
+
* this instance never carry the refresh token and mail content never passes
|
|
8
|
+
* through Cloud.
|
|
9
|
+
*
|
|
10
|
+
* Cloud auth reuses the Crewly Cloud session already held by
|
|
11
|
+
* `CloudClientService` (its access JWT as Bearer) — no separate login.
|
|
12
|
+
*
|
|
13
|
+
* @module services/google/google-workspace-token.service
|
|
14
|
+
*/
|
|
15
|
+
import { CloudClientService } from '../cloud/cloud-client.service.js';
|
|
16
|
+
import { LoggerService } from '../core/logger.service.js';
|
|
17
|
+
import { GOOGLE_WORKSPACE_CONSTANTS } from '../../constants.js';
|
|
18
|
+
/**
|
|
19
|
+
* Error raised for every Cloud / Google failure. `status` is the HTTP status
|
|
20
|
+
* the OSS controller should answer with and `code` is one of
|
|
21
|
+
* {@link GOOGLE_WORKSPACE_CONSTANTS.ERROR_CODES} (or `http_<n>` for anything
|
|
22
|
+
* unmapped), so the controller and the skills can branch without parsing text.
|
|
23
|
+
*/
|
|
24
|
+
export class GoogleWorkspaceError extends Error {
|
|
25
|
+
status;
|
|
26
|
+
code;
|
|
27
|
+
constructor(status, code, message) {
|
|
28
|
+
super(message);
|
|
29
|
+
this.status = status;
|
|
30
|
+
this.code = code;
|
|
31
|
+
this.name = 'GoogleWorkspaceError';
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Map a Cloud workspace-endpoint failure to the status/code this instance
|
|
36
|
+
* answers with. 404 (no grant) and 409 (grant revoked) both mean "not
|
|
37
|
+
* connected — go through the consent flow again"; 503 means Cloud itself has
|
|
38
|
+
* no Google client; 502 is Google refusing Cloud.
|
|
39
|
+
*
|
|
40
|
+
* @param httpStatus - Status Cloud answered with
|
|
41
|
+
* @param code - `code` (or `error`) field from Cloud's body, if any
|
|
42
|
+
* @param message - Human message from Cloud's body, if any
|
|
43
|
+
* @returns The error to throw
|
|
44
|
+
*/
|
|
45
|
+
export function mapCloudFailure(httpStatus, code, message) {
|
|
46
|
+
const CODES = GOOGLE_WORKSPACE_CONSTANTS.ERROR_CODES;
|
|
47
|
+
if (httpStatus === 401 || httpStatus === 403) {
|
|
48
|
+
return new GoogleWorkspaceError(401, CODES.NOT_LOGGED_IN, 'Crewly Cloud session expired. Sign in to Crewly Cloud again.');
|
|
49
|
+
}
|
|
50
|
+
if (httpStatus === 404 || httpStatus === 409 || code === CODES.NOT_CONNECTED || code === 'grant_revoked') {
|
|
51
|
+
return new GoogleWorkspaceError(409, CODES.NOT_CONNECTED, 'Google Workspace is not connected for this Crewly Cloud account.');
|
|
52
|
+
}
|
|
53
|
+
if (httpStatus === 503 || code === CODES.NOT_CONFIGURED) {
|
|
54
|
+
return new GoogleWorkspaceError(503, CODES.NOT_CONFIGURED, 'Crewly Cloud is not configured for Google Workspace.');
|
|
55
|
+
}
|
|
56
|
+
if (httpStatus === 502 || code === CODES.GOOGLE_ERROR) {
|
|
57
|
+
return new GoogleWorkspaceError(502, CODES.GOOGLE_ERROR, message || 'Google rejected the token request.');
|
|
58
|
+
}
|
|
59
|
+
return new GoogleWorkspaceError(502, code ?? `http_${httpStatus}`, message || `Cloud request failed (${httpStatus})`);
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Fetches, caches and refreshes the Google access token that Cloud mints
|
|
63
|
+
* from the owner's stored grant.
|
|
64
|
+
*
|
|
65
|
+
* @example
|
|
66
|
+
* ```ts
|
|
67
|
+
* const token = await GoogleWorkspaceTokenService.getInstance().getAccessToken();
|
|
68
|
+
* ```
|
|
69
|
+
*/
|
|
70
|
+
export class GoogleWorkspaceTokenService {
|
|
71
|
+
static instance = null;
|
|
72
|
+
logger;
|
|
73
|
+
cloud;
|
|
74
|
+
fetchImpl;
|
|
75
|
+
nowFn;
|
|
76
|
+
/** Cached token + absolute expiry (ms since epoch), or null. */
|
|
77
|
+
cached = null;
|
|
78
|
+
/** The one refresh currently on the wire, so concurrent callers share it. */
|
|
79
|
+
inflight = null;
|
|
80
|
+
/**
|
|
81
|
+
* @param deps - Cloud client slice, fetch and clock overrides (tests)
|
|
82
|
+
*/
|
|
83
|
+
constructor(deps = {}) {
|
|
84
|
+
this.logger = LoggerService.getInstance().createComponentLogger('GoogleWorkspaceToken');
|
|
85
|
+
this.cloud = deps.cloud ?? CloudClientService.getInstance();
|
|
86
|
+
this.fetchImpl = deps.fetchImpl ?? fetch;
|
|
87
|
+
this.nowFn = deps.now ?? (() => Date.now());
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Process-wide instance bound to the real CloudClientService.
|
|
91
|
+
*
|
|
92
|
+
* @returns The singleton
|
|
93
|
+
*/
|
|
94
|
+
static getInstance() {
|
|
95
|
+
if (!GoogleWorkspaceTokenService.instance) {
|
|
96
|
+
GoogleWorkspaceTokenService.instance = new GoogleWorkspaceTokenService();
|
|
97
|
+
}
|
|
98
|
+
return GoogleWorkspaceTokenService.instance;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Drop the singleton (tests).
|
|
102
|
+
*/
|
|
103
|
+
static resetInstance() {
|
|
104
|
+
GoogleWorkspaceTokenService.instance = null;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Whether this instance is signed in to Crewly Cloud (prerequisite for
|
|
108
|
+
* everything else here).
|
|
109
|
+
*
|
|
110
|
+
* @returns True when a Cloud URL and access JWT are available
|
|
111
|
+
*/
|
|
112
|
+
isCloudAvailable() {
|
|
113
|
+
return this.cloud.isConnected() && !!this.cloud.getToken() && !!this.cloud.getCloudUrl();
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* A Google access token that is valid for at least the refresh margin.
|
|
117
|
+
* Served from cache when possible; otherwise one Cloud round-trip shared
|
|
118
|
+
* by every concurrent caller.
|
|
119
|
+
*
|
|
120
|
+
* @returns Bearer token for Gmail / Calendar
|
|
121
|
+
* @throws GoogleWorkspaceError — not_logged_in / not_connected / not_configured / google_error / network
|
|
122
|
+
*/
|
|
123
|
+
async getAccessToken() {
|
|
124
|
+
const margin = GOOGLE_WORKSPACE_CONSTANTS.TOKEN_REFRESH_MARGIN_MS;
|
|
125
|
+
if (this.cached && this.cached.expiresAtMs - margin > this.nowFn()) {
|
|
126
|
+
return this.cached.accessToken;
|
|
127
|
+
}
|
|
128
|
+
if (this.inflight)
|
|
129
|
+
return this.inflight;
|
|
130
|
+
this.inflight = this.refresh().finally(() => {
|
|
131
|
+
this.inflight = null;
|
|
132
|
+
});
|
|
133
|
+
return this.inflight;
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Forget the cached token so the next call refreshes (used after Google
|
|
137
|
+
* answers 401, or when the grant is revoked).
|
|
138
|
+
*/
|
|
139
|
+
clearCache() {
|
|
140
|
+
this.cached = null;
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Whether Cloud holds a Workspace grant, and for which email.
|
|
144
|
+
* Never throws for the two "not there" cases (no Cloud session / no grant);
|
|
145
|
+
* those come back as `connected: false`.
|
|
146
|
+
*
|
|
147
|
+
* @returns Connection status
|
|
148
|
+
* @throws GoogleWorkspaceError for Cloud outages / misconfiguration
|
|
149
|
+
*/
|
|
150
|
+
async status() {
|
|
151
|
+
if (!this.isCloudAvailable()) {
|
|
152
|
+
return { connected: false, cloudConnected: false };
|
|
153
|
+
}
|
|
154
|
+
try {
|
|
155
|
+
const data = await this.cloudRequest('GET', GOOGLE_WORKSPACE_CONSTANTS.CLOUD_ENDPOINTS.STATUS);
|
|
156
|
+
if (!data.connected)
|
|
157
|
+
this.clearCache();
|
|
158
|
+
return {
|
|
159
|
+
connected: !!data.connected,
|
|
160
|
+
cloudConnected: true,
|
|
161
|
+
...(data.email ? { email: data.email } : {}),
|
|
162
|
+
...(data.scopes ? { scopes: data.scopes } : {}),
|
|
163
|
+
...(data.grantedAt ? { grantedAt: data.grantedAt } : {}),
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
catch (err) {
|
|
167
|
+
if (err instanceof GoogleWorkspaceError && err.code === GOOGLE_WORKSPACE_CONSTANTS.ERROR_CODES.NOT_CONNECTED) {
|
|
168
|
+
this.clearCache();
|
|
169
|
+
return { connected: false, cloudConnected: true };
|
|
170
|
+
}
|
|
171
|
+
throw err;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Ask Cloud to revoke the grant and forget it; also drops the local cache.
|
|
176
|
+
*
|
|
177
|
+
* @returns Whether Cloud had a grant to remove
|
|
178
|
+
* @throws GoogleWorkspaceError when not signed in to Cloud or Cloud fails
|
|
179
|
+
*/
|
|
180
|
+
async disconnect() {
|
|
181
|
+
this.clearCache();
|
|
182
|
+
const data = await this.cloudRequest('DELETE', GOOGLE_WORKSPACE_CONSTANTS.CLOUD_ENDPOINTS.DISCONNECT);
|
|
183
|
+
return { removed: !!data.removed };
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* The Cloud consent-start URL for the browser: carries the current Cloud
|
|
187
|
+
* access JWT (Cloud accepts `?token=` because a top-level navigation cannot
|
|
188
|
+
* set a Bearer header) and where to land afterwards.
|
|
189
|
+
*
|
|
190
|
+
* @param returnUrl - Absolute dashboard URL Cloud redirects back to
|
|
191
|
+
* @returns Absolute URL to open
|
|
192
|
+
* @throws GoogleWorkspaceError(401, not_logged_in) when not signed in to Cloud
|
|
193
|
+
*/
|
|
194
|
+
buildConnectUrl(returnUrl) {
|
|
195
|
+
const token = this.cloud.getToken();
|
|
196
|
+
const base = this.cloud.getCloudUrl();
|
|
197
|
+
if (!this.isCloudAvailable() || !token || !base) {
|
|
198
|
+
throw new GoogleWorkspaceError(401, GOOGLE_WORKSPACE_CONSTANTS.ERROR_CODES.NOT_LOGGED_IN, 'Sign in to Crewly Cloud first.');
|
|
199
|
+
}
|
|
200
|
+
const url = new URL(`${base.replace(/\/$/, '')}${GOOGLE_WORKSPACE_CONSTANTS.CLOUD_PATH}${GOOGLE_WORKSPACE_CONSTANTS.CLOUD_ENDPOINTS.START}`);
|
|
201
|
+
url.searchParams.set('token', token);
|
|
202
|
+
url.searchParams.set('returnUrl', returnUrl);
|
|
203
|
+
return url.toString();
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* One Cloud `/token` round-trip; updates the cache.
|
|
207
|
+
*
|
|
208
|
+
* @returns The fresh access token
|
|
209
|
+
*/
|
|
210
|
+
async refresh() {
|
|
211
|
+
try {
|
|
212
|
+
const data = await this.cloudRequest('GET', GOOGLE_WORKSPACE_CONSTANTS.CLOUD_ENDPOINTS.TOKEN);
|
|
213
|
+
if (!data.accessToken) {
|
|
214
|
+
throw new GoogleWorkspaceError(502, GOOGLE_WORKSPACE_CONSTANTS.ERROR_CODES.GOOGLE_ERROR, 'Cloud returned no access token.');
|
|
215
|
+
}
|
|
216
|
+
const expiresAtMs = Date.parse(data.expiresAt);
|
|
217
|
+
this.cached = {
|
|
218
|
+
accessToken: data.accessToken,
|
|
219
|
+
// An unparseable expiry is treated as already stale so we refresh next time.
|
|
220
|
+
expiresAtMs: Number.isFinite(expiresAtMs) ? expiresAtMs : this.nowFn(),
|
|
221
|
+
...(data.email ? { email: data.email } : {}),
|
|
222
|
+
...(data.scopes ? { scopes: data.scopes } : {}),
|
|
223
|
+
};
|
|
224
|
+
this.logger.debug('Google access token refreshed', { expiresAt: data.expiresAt });
|
|
225
|
+
return data.accessToken;
|
|
226
|
+
}
|
|
227
|
+
catch (err) {
|
|
228
|
+
this.cached = null;
|
|
229
|
+
throw err;
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* Authenticated call to a Cloud workspace endpoint using the Cloud session
|
|
234
|
+
* JWT. Unwraps the auth service's `{ success, data }` envelope.
|
|
235
|
+
*
|
|
236
|
+
* @param method - HTTP verb
|
|
237
|
+
* @param suffix - Path under CLOUD_PATH
|
|
238
|
+
* @returns The `data` payload
|
|
239
|
+
* @throws GoogleWorkspaceError mapped via {@link mapCloudFailure}
|
|
240
|
+
*/
|
|
241
|
+
async cloudRequest(method, suffix) {
|
|
242
|
+
const token = this.cloud.getToken();
|
|
243
|
+
const base = this.cloud.getCloudUrl();
|
|
244
|
+
if (!this.isCloudAvailable() || !token || !base) {
|
|
245
|
+
throw new GoogleWorkspaceError(401, GOOGLE_WORKSPACE_CONSTANTS.ERROR_CODES.NOT_LOGGED_IN, 'Not signed in to Crewly Cloud.');
|
|
246
|
+
}
|
|
247
|
+
const url = `${base.replace(/\/$/, '')}${GOOGLE_WORKSPACE_CONSTANTS.CLOUD_PATH}${suffix}`;
|
|
248
|
+
let res;
|
|
249
|
+
try {
|
|
250
|
+
res = await this.fetchImpl(url, {
|
|
251
|
+
method,
|
|
252
|
+
headers: { Authorization: `Bearer ${token}` },
|
|
253
|
+
signal: AbortSignal.timeout(GOOGLE_WORKSPACE_CONSTANTS.REQUEST_TIMEOUT_MS),
|
|
254
|
+
});
|
|
255
|
+
}
|
|
256
|
+
catch (err) {
|
|
257
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
258
|
+
throw new GoogleWorkspaceError(502, GOOGLE_WORKSPACE_CONSTANTS.ERROR_CODES.NETWORK, `Crewly Cloud unreachable: ${message}`);
|
|
259
|
+
}
|
|
260
|
+
const text = await res.text();
|
|
261
|
+
let parsed = {};
|
|
262
|
+
try {
|
|
263
|
+
parsed = JSON.parse(text);
|
|
264
|
+
}
|
|
265
|
+
catch {
|
|
266
|
+
parsed = {};
|
|
267
|
+
}
|
|
268
|
+
if (!res.ok || parsed.success !== true) {
|
|
269
|
+
throw mapCloudFailure(res.status, parsed.code ?? parsed.error, parsed.error);
|
|
270
|
+
}
|
|
271
|
+
return (parsed.data ?? {});
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
//# sourceMappingURL=google-workspace-token.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"google-workspace-token.service.js","sourceRoot":"","sources":["../../../../../../backend/src/services/google/google-workspace-token.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -57,7 +57,7 @@ export declare const TOOL_DEFINITIONS: readonly [{
|
|
|
57
57
|
};
|
|
58
58
|
readonly runtimeType: {
|
|
59
59
|
readonly type: "string";
|
|
60
|
-
readonly enum: readonly ["claude-code", "gemini-cli", "codex-cli", "crewly-agent"];
|
|
60
|
+
readonly enum: readonly ["claude-code", "gemini-cli", "codex-cli", "opencode-cli", "crewly-agent"];
|
|
61
61
|
readonly description: "AI runtime to use (default: claude-code)";
|
|
62
62
|
};
|
|
63
63
|
};
|
|
@@ -58,7 +58,7 @@ export const TOOL_DEFINITIONS = [
|
|
|
58
58
|
},
|
|
59
59
|
runtimeType: {
|
|
60
60
|
type: 'string',
|
|
61
|
-
enum: ['claude-code', 'gemini-cli', 'codex-cli', 'crewly-agent'],
|
|
61
|
+
enum: ['claude-code', 'gemini-cli', 'codex-cli', 'opencode-cli', 'crewly-agent'],
|
|
62
62
|
description: 'AI runtime to use (default: claude-code)',
|
|
63
63
|
},
|
|
64
64
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-tool-definitions.js","sourceRoot":"","sources":["../../../../../backend/src/services/mcp-tool-definitions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH;;;GAGG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B;QACE,IAAI,EAAE,kBAAkB;QACxB,WAAW,EACT,+DAA+D;YAC/D,qEAAqE;QACvE,WAAW,EAAE;YACX,IAAI,EAAE,QAAiB;YACvB,UAAU,EAAE;gBACV,MAAM,EAAE;oBACN,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,2CAA2C;iBACzD;aACF;SACF;KACF;IACD;QACE,IAAI,EAAE,oBAAoB;QAC1B,WAAW,EACT,uDAAuD;YACvD,mDAAmD;QACrD,WAAW,EAAE;YACX,IAAI,EAAE,QAAiB;YACvB,UAAU,EAAE;gBACV,IAAI,EAAE;oBACJ,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,kCAAkC;iBAChD;gBACD,WAAW,EAAE;oBACX,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,2BAA2B;iBACzC;gBACD,OAAO,EAAE;oBACP,IAAI,EAAE,OAAO;oBACb,WAAW,EAAE,iCAAiC;oBAC9C,KAAK,EAAE;wBACL,IAAI,EAAE,QAAQ;wBACd,UAAU,EAAE;4BACV,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,aAAa,EAAE;4BACpD,IAAI,EAAE;gCACJ,IAAI,EAAE,QAAQ;gCACd,WAAW,EAAE,8DAA8D;6BAC5E;4BACD,WAAW,EAAE;gCACX,IAAI,EAAE,QAAQ;gCACd,IAAI,EAAE,CAAC,aAAa,EAAE,YAAY,EAAE,WAAW,EAAE,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"mcp-tool-definitions.js","sourceRoot":"","sources":["../../../../../backend/src/services/mcp-tool-definitions.ts"],"names":[],"mappings":"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"}
|
|
@@ -218,6 +218,15 @@ export declare class CodexAdapter extends BaseRuntimeAdapter {
|
|
|
218
218
|
readonly runtimeType: "codex-cli";
|
|
219
219
|
readonly displayName = "OpenAI Codex";
|
|
220
220
|
}
|
|
221
|
+
/**
|
|
222
|
+
* Adapter for the OpenCode CLI (opencode.ai, issue #306).
|
|
223
|
+
*
|
|
224
|
+
* Uses the base adapter behavior which delegates to OpenCodeRuntimeService.
|
|
225
|
+
*/
|
|
226
|
+
export declare class OpenCodeAdapter extends BaseRuntimeAdapter {
|
|
227
|
+
readonly runtimeType: "opencode-cli";
|
|
228
|
+
readonly displayName = "OpenCode";
|
|
229
|
+
}
|
|
221
230
|
/**
|
|
222
231
|
* Creates a RuntimeAdapter for the specified runtime type.
|
|
223
232
|
*
|
|
@@ -225,7 +234,7 @@ export declare class CodexAdapter extends BaseRuntimeAdapter {
|
|
|
225
234
|
* the appropriate adapter. Requires the session backend to be initialized
|
|
226
235
|
* first (via createSessionBackend()).
|
|
227
236
|
*
|
|
228
|
-
* @param runtimeType - The runtime type ('claude-code', 'gemini-cli', 'codex-cli')
|
|
237
|
+
* @param runtimeType - The runtime type ('claude-code', 'gemini-cli', 'codex-cli', 'opencode-cli')
|
|
229
238
|
* @param projectRoot - The project root directory (for runtime config resolution)
|
|
230
239
|
* @returns A RuntimeAdapter instance for the specified runtime
|
|
231
240
|
* @throws Error if session backend is not initialized or runtime type is unknown
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-adapter.d.ts","sourceRoot":"","sources":["../../../../../backend/src/services/runtime-adapter.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"runtime-adapter.d.ts","sourceRoot":"","sources":["../../../../../backend/src/services/runtime-adapter.ts"],"names":[],"mappings":"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"}
|