feat: Ever Async integration scaffold (integration-ever-async + -ui) - #9924
Draft
evereq wants to merge 1 commit into
Draft
feat: Ever Async integration scaffold (integration-ever-async + -ui)#9924evereq wants to merge 1 commit into
evereq wants to merge 1 commit into
Conversation
…sync + ui) Structural draft: adds the backend NestJS plugin (@gauzy/plugin-integration-ever-async) and the Angular UI plugin (@gauzy/plugin-integration-ever-async-ui) mirroring the integration-plane / integration-plane-ui topology and conventions. Purely additive — no existing files touched and the packages are NOT yet wired into workspace builds; the wiring checklist is in the PR description. Ever Async: https://github.com/ever-co/ever-async Contract: docs/integrations/gauzy.md in the ever-async repo. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Contributor
|
Important Review skippedDraft detected. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Organization UI Review profile: ASSERTIVE Plan: Pro Plus Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.


What this is
STRUCTURAL DRAFT scaffold for the Gauzy side of the Ever Async integration. It adds the new plugin pair
packages/plugins/integration-ever-async(NestJS backend) +packages/plugins/integration-ever-async-ui(Angular UI) and is purely additive: no existing file is modified and the packages are not yet wired into the workspace builds — the wiring checklist below lists every registration step, so reviewers can shape the API surface before any build wiring lands.What is Ever Async?
Ever Async is a new open-source, async-first team communication assistant by Ever Co. It listens in chat platforms (Slack/Discord), and resolves messages like "my last task" into live work context — task links, statuses, projects — pulled from connected tools. Its Gauzy connector (
crates/plugins/connector-gauzyin the ever-async repo) consumes the Gauzy REST API (Bearer token +Tenant-Idheader), maps the chat author to a Gauzy employee, and returns scored task context into the conversation — exactly like it does from Jira/GitHub.Integration contract
Both halves are specified in the ever-async repo:
docs/integrations/gauzy.md.The Gauzy-side plugin (this PR) owns: the Ever Async server URL, the API token the integration uses (write-only — accepted on setup/update, never returned; only a
hasApiTokenflag is exposed), and the chat-user → employee mappings consumed by the connector's[connectors.gauzy.user_map]config. Tenant/organization context comes fromRequestContext+ theorganizationIdquery param (Plane convention).What's scaffolded
Backend (
@gauzy/plugin-integration-ever-async) — mirrorsintegration-plane's topology exactly (plugin class w/@Plugindecorator, module, controller, service, typed DTOs, settings enum, Nxproject.json, tsconfigs, jest + eslint configs):POST /api/integration/ever-async/setup— store server URL + write-only token + mappings (INTEGRATION_ADD)GET /api/integration/ever-async/settings— settings without the token (INTEGRATION_VIEW)PUT /api/integration/ever-async/settings— partial update (INTEGRATION_EDIT)POST /api/integration/ever-async/verify— pings the Ever Async server's/healthz(stub for the connect wizard's test button)GET /api/integration/ever-async/status,DELETE /:integrationTenantId(soft-archive)ConfigureEverAsyncIntegrationDto { serverUrl, apiToken (write-only), userMappings: [{ chatUserId, employeeId }] },UpdateEverAsyncSettingsDto(PartialType),VerifyEverAsyncConnectionDtoIntegrationSettingrows:EVER_ASYNC_SERVER_URL,EVER_ASYNC_API_TOKEN,EVER_ASYNC_USER_MAPPINGS(JSON),IS_ENABLEDUI (
@gauzy/plugin-integration-ever-async-ui) — mirrorsintegration-plane-ui(PluginUiDefinition, lazy module withROUTESfactory, layout w/ router-outlet + i18n bootstrap, ng-packagr build config):IntegrationEverAsyncPluginregistering/pages/integrations/ever-asyncatintegrations-sectionsEverAsyncConnectComponent— connect wizard form (server URL + API token + Test connection button) with Nebular + reactive forms + a11y/error patterns copied fromPlaneAuthorizeComponentEverAsyncServiceHTTP client (kept local so the PR stays additive; see checklist)Where a symbol could not be verified against a buildable workspace, the file stays minimal and carries a single
// scaffold:comment saying what to wire.Wiring checklist (deliberately NOT done in this PR)
apps/api/src/plugins.ts—import { IntegrationEverAsyncPlugin } from '@gauzy/plugin-integration-ever-async'and add it to the plugins array (same asIntegrationPlanePlugin).apps/gauzy/src/plugin-ui.config.ts—import { IntegrationEverAsyncPlugin } from '@gauzy/plugin-integration-ever-async-ui'and add it to the plugin definitions (same as the Plane UI plugin).EVER_ASYNC = 'Ever_Async'toIntegrationEnuminpackages/contracts/src/lib/integration.model.ts, then replace the localEVER_ASYNC_INTEGRATION_NAMEconstant inever-async-setting.enum.ts(twoas IntegrationEnumcasts drop out).packages/plugins/*is already covered by the yarn workspaces glob (package.workspaces.json) — just runyarn installto link; optionally add"@gauzy/plugin-integration-ever-async": "^0.1.0"toapps/api/package.json(note:integration-planecurrently resolves via the workspace without an explicit entry there — follow maintainer preference).package.jsonbuild scripts: addplugin-integration-ever-asynctobuild:package:plugins:post{,:prod,:docker}andbuild:package:api{,:prod,:docker,:dev:docker}+build:package:all:dockerlists; addplugin-integration-ever-async-uitobuild:integration-ui-plugins{,:prod,:docker,:dev:docker}andbuild:package:gauzy*+build:package:all:docker; add the per-pluginbuild:package:plugin:integration-ever-async{,-ui}{,:prod,:docker}script entries (mirror theintegration-planeentries at lines ~241-243 / ~306-309).integration-planehas notsconfig.base.jsonpath entry; plugin packages resolve via yarn workspaces +dist.INTEGRATIONS.EVER_ASYNC_PAGE.*topackages/ui-core/i18n/assets/i18n/*.json(en.json minimum; Crowdin for the rest):TITLE,SETUP_INFO,SERVER_URL,SERVER_URL_PLACEHOLDER,API_TOKEN,API_TOKEN_PLACEHOLDER,API_TOKEN_HINT,URL_REQUIRED,URL_INVALID,TOKEN_REQUIRED,TEST_CONNECTION,CONNECTION_OK,CONNECTION_FAILED,CONNECTED.integrations/ever-async.svgicon (referenced byfindOrCreateBaseIntegration'simgSrc, same location asintegrations/plane.svg); optionally seed the baseIntegrationrecord instead of relying on runtime find-or-create.EverAsyncServicefrom this package topackages/ui-core/core/src/lib/services/ever-async/mirroringPlaneService, and export it from@gauzy/ui-core/core.TenantApiKeyService(Plane'sregenerate-keypattern) to replace hand-issued tokens.🤖 Generated with Claude Code
Summary by cubic
Scaffolded the Ever Async integration with new backend and UI plugins, including setup, settings, status, and connection verification. This is purely additive and not yet wired into builds.
New Features
@gauzy/plugin-integration-ever-async: plugin + module + controller + service; endpoints:/api/integration/ever-async/setup, GET/PUT/settings, POST/verify, GET/status, DELETE/:integrationTenantIdhasApiTokenflagIntegrationSetting(SERVER_URL,API_TOKEN,USER_MAPPINGS,IS_ENABLED)@gauzy/plugin-integration-ever-async-ui: plugin + routes + connect wizard with Test connection and saveMigration
EVER_ASYNC = 'Ever_Async'toIntegrationEnumINTEGRATIONS.EVER_ASYNC_PAGE.*integrations/ever-async.svgWritten for commit 4d504d8. Summary will update on new commits.