Conversation
…tion, and reliable natural-language routing
* feature/chat questionaire * bug fixes and corrections * fix: harden clarifying-questions flow per PR #377 review - Error instead of parking 3h when no UI can answer (CLI mode / no clients), via new InterfaceAdapter.can_prompt_user() - Drop duplicate submits from stale tabs (atomic first-submission-wins in storage) and broadcast resolution to all clients - QuestionStepper: structured per-question drafts (comma values no longer corrupt on back-nav), selected-choice highlight, Dismiss button, Esc in free-text clears instead of declining - Resume text falls back to storage after restart (no more raw "q1" ids) - Dedupe question serializers into ChatMessageQuestion to_dict/from_dict - Extract WAIT_FOR_REPLY_PARK_DELAY_SECONDS (imported inside action bodies - executor exec()s function source only) --------- Co-authored-by: ahmad-ajmal <ahmadajmal1514@gmail.com>
Collaborator
|
@AlanAAG You can remove Outlook for verification. |
Collaborator
|
Scope for V1.4.2. Need a complete port to a newer version. Too complex for rebase and migration. |
ahmad-ajmal
added a commit
that referenced
this pull request
Aug 24, 2026
* feat(integrations): multi-account support with aliases and per-account listeners Rebuilt the integration layer as a host-agnostic package (supersedes PR #370; design: docs/plans/multi-account-v2-plan.md). The 10 major integrations now hold a primary account plus any number of additional accounts with nicknames (shared across the Google family). - AccountSet document store: atomic writes, deterministic account resolution, one-time migration of existing credential files - 10 providers / 397 operations; @action wrappers are generated, with the account param injected centrally so no action can bypass it - OAuth account choosers fixed (Google/Outlook select_account) - Manage-accounts modal with staged edits and add-account OAuth - Gmail/Outlook/Slack listeners run per account, triggers account-tagged - Router extracts account qualifiers ("my job email") and sees live account lists just-in-time 516 tests passing, tsc clean. closes #368 * integrations: multi-account for all 23 platforms via auth-layer bridge Legacy platforms get thin v2 providers (identity + login + bound client + listener); their existing actions stay and become account-aware centrally (contextvar hint + run_client routing + schema injection into 676 actions). whatsapp_web moves from a singleton Node bridge to per-identity bridges with QR sessions and a max_accounts cap; telegram_user logs in via two-phase phone->code(+2FA) token connect. Also fixes: fcntl broke the v2 system on Windows (msvcrt locking); list/info/metrics read legacy cred files so v2 connects showed disconnected; notion token connects could silently overwrite the first account. Adds manage_integration_account agent action and Living UI account param. 609 tests green. * Integrations Fix + media recieve * fix(integrations): resolve tester-reported failures across Jira, disconnect, Lark, WhatsApp, and notifications * fix(integrations): gmail forwards carry the original body, whatsapp replies route to the receiving account, discord multi-server sends land once in the right channel * feat(whatsapp): desktop-parity session durability — per-account session actor with supervised reconnect/heartbeat, bridge.js generation rewrite (no synthetic ready, PID-exact kills), LinkFlow QR with idempotent completion, legacy single-account path removed * fix(whatsapp): adopt the live bridge at link instead of restart-from-disk (torn LocalAuth), park never-connected sessions as needs-relink, resolve account="primary" * feat(whatsapp): migrate bridge from whatsapp-web.js/Chromium to Baileys — protocol-native WebSocket, plain-file sessions, ~50MB/account, legacy system fully removed (existing accounts re-link once via QR) * install whatsapp bridge * update multiaccount integration setting UI * use SVGL for integration logo * fix: env install for transformers --------- Co-authored-by: CraftBot <craftbot@craftbot.dev>
ahmad-ajmal
added a commit
that referenced
this pull request
Aug 28, 2026
* Changed AI enhance reasoning to stick to the chosen language unless stated so. * If the input is empty, stop enhancing and reset to false state. * Updated chat.tsx as i committed the wrong version. * Fix issue #416 * Added loading spinner to + button for visual communication. * Disabled send and dictate button, added 'no entry' thing when hovering on dictate. * splash page loading animation * Added 30s timeout - needs testing? * make chat input disabled * Remove outdated sections in living UI setting page * introduce graph into the memory system * fix coloring issue on nodes * remove pending visualization * Update graph UI and update relevent memories preview logic * entity in memory graph are stored and retrieved as embedding * Advertisement Widget Advertisement widget for CraftBot dashboard * Update memory setting page and added configurable memory processing condition * improve welcome widget * minor update to the token usage widget * Code clean up and refactor * refactor memory system and consolidate magic numbers into a file * fix entities and connection pipeline * bug:invoking skill and command cause new chat session to stuck * Added new guide tour with driver js * update guide text * Added more providers and provider refactor * fix: merge reset-agent chat options and refresh the session list * feat: agent questions with suggested responses (pinned question box) * bug:fix run shell mangle issue on windows * Fix message disappearing issue * fix event stream summarization failed and chat session UI scrolling issue * bug:fix reset agent require refresh to take effect * fix: unify Living UI dev/live lifecycle to stop live pb_data wipes (#427) * fix: unify Living UI dev/live lifecycle to stop live pb_data wipes * feat: scheduled + pre-promote backups of Living UI live data * change delete orphan living UI project to log only * set living UI launch by default and optimize launch time * fix: naming fix + backup on reset agent * fix: restore UI + restore from leftover backups --------- Co-authored-by: CraftBot <craftbot@craftbot.dev> * fix and improve reset agent feature from merge * bug:schedule task list action parameter bug * update intsaller check in run script * fix multiple file indexing issue * Feature/multiaccount integrations (#419) * feat(integrations): multi-account support with aliases and per-account listeners Rebuilt the integration layer as a host-agnostic package (supersedes PR #370; design: docs/plans/multi-account-v2-plan.md). The 10 major integrations now hold a primary account plus any number of additional accounts with nicknames (shared across the Google family). - AccountSet document store: atomic writes, deterministic account resolution, one-time migration of existing credential files - 10 providers / 397 operations; @action wrappers are generated, with the account param injected centrally so no action can bypass it - OAuth account choosers fixed (Google/Outlook select_account) - Manage-accounts modal with staged edits and add-account OAuth - Gmail/Outlook/Slack listeners run per account, triggers account-tagged - Router extracts account qualifiers ("my job email") and sees live account lists just-in-time 516 tests passing, tsc clean. closes #368 * integrations: multi-account for all 23 platforms via auth-layer bridge Legacy platforms get thin v2 providers (identity + login + bound client + listener); their existing actions stay and become account-aware centrally (contextvar hint + run_client routing + schema injection into 676 actions). whatsapp_web moves from a singleton Node bridge to per-identity bridges with QR sessions and a max_accounts cap; telegram_user logs in via two-phase phone->code(+2FA) token connect. Also fixes: fcntl broke the v2 system on Windows (msvcrt locking); list/info/metrics read legacy cred files so v2 connects showed disconnected; notion token connects could silently overwrite the first account. Adds manage_integration_account agent action and Living UI account param. 609 tests green. * Integrations Fix + media recieve * fix(integrations): resolve tester-reported failures across Jira, disconnect, Lark, WhatsApp, and notifications * fix(integrations): gmail forwards carry the original body, whatsapp replies route to the receiving account, discord multi-server sends land once in the right channel * feat(whatsapp): desktop-parity session durability — per-account session actor with supervised reconnect/heartbeat, bridge.js generation rewrite (no synthetic ready, PID-exact kills), LinkFlow QR with idempotent completion, legacy single-account path removed * fix(whatsapp): adopt the live bridge at link instead of restart-from-disk (torn LocalAuth), park never-connected sessions as needs-relink, resolve account="primary" * feat(whatsapp): migrate bridge from whatsapp-web.js/Chromium to Baileys — protocol-native WebSocket, plain-file sessions, ~50MB/account, legacy system fully removed (existing accounts re-link once via QR) * install whatsapp bridge * update multiaccount integration setting UI * use SVGL for integration logo * fix: env install for transformers --------- Co-authored-by: CraftBot <craftbot@craftbot.dev> * fix: import external apps * Document + version fix * memory entity connection processed by deterministic pipeline for now * Add guided tour for memory panel * Update multiple options UI * fix: update node install * fix: normalise python * fix: windows dll issue * feat: scoped walk-verify - the verifier decides what to re-test * feat: make Living UI marketplace branch configurable * refactor: Cleanup legacy integrations code * hard onboarding step upgrad * Overwrite ENTITIES.md with clean data * Fix local LLM provider dropdown, server url input, and test connection issue * Fix question UI and updated AGENT.md to fit the latest update * Give agent more context of living UI, memory and integration * fix provider issue with openai and gemini * fix: version name + event stream summarization * fix: tunnel fix for pocketbase * fix: marketplace name normalization * fix: delete dead file * fix: cleanup dead file references --------- Co-authored-by: RooberSmoth <96537304+RooberSmoth@users.noreply.github.com> Co-authored-by: CraftBot <craftbot@craftbot.dev> Co-authored-by: イツミネ <tham_yikfoong@outlook.com> Co-authored-by: Aima <aimaajmal91203@gmail.com> Co-authored-by: false200 <214800619+false200@users.noreply.github.com> Co-authored-by: CraftOS <thamyikfoong@craftos.net>
Merged
ahmad-ajmal
added a commit
that referenced
this pull request
Aug 28, 2026
* V1.4.2 (#432) * Changed AI enhance reasoning to stick to the chosen language unless stated so. * If the input is empty, stop enhancing and reset to false state. * Updated chat.tsx as i committed the wrong version. * Fix issue #416 * Added loading spinner to + button for visual communication. * Disabled send and dictate button, added 'no entry' thing when hovering on dictate. * splash page loading animation * Added 30s timeout - needs testing? * make chat input disabled * Remove outdated sections in living UI setting page * introduce graph into the memory system * fix coloring issue on nodes * remove pending visualization * Update graph UI and update relevent memories preview logic * entity in memory graph are stored and retrieved as embedding * Advertisement Widget Advertisement widget for CraftBot dashboard * Update memory setting page and added configurable memory processing condition * improve welcome widget * minor update to the token usage widget * Code clean up and refactor * refactor memory system and consolidate magic numbers into a file * fix entities and connection pipeline * bug:invoking skill and command cause new chat session to stuck * Added new guide tour with driver js * update guide text * Added more providers and provider refactor * fix: merge reset-agent chat options and refresh the session list * feat: agent questions with suggested responses (pinned question box) * bug:fix run shell mangle issue on windows * Fix message disappearing issue * fix event stream summarization failed and chat session UI scrolling issue * bug:fix reset agent require refresh to take effect * fix: unify Living UI dev/live lifecycle to stop live pb_data wipes (#427) * fix: unify Living UI dev/live lifecycle to stop live pb_data wipes * feat: scheduled + pre-promote backups of Living UI live data * change delete orphan living UI project to log only * set living UI launch by default and optimize launch time * fix: naming fix + backup on reset agent * fix: restore UI + restore from leftover backups --------- Co-authored-by: CraftBot <craftbot@craftbot.dev> * fix and improve reset agent feature from merge * bug:schedule task list action parameter bug * update intsaller check in run script * fix multiple file indexing issue * Feature/multiaccount integrations (#419) * feat(integrations): multi-account support with aliases and per-account listeners Rebuilt the integration layer as a host-agnostic package (supersedes PR #370; design: docs/plans/multi-account-v2-plan.md). The 10 major integrations now hold a primary account plus any number of additional accounts with nicknames (shared across the Google family). - AccountSet document store: atomic writes, deterministic account resolution, one-time migration of existing credential files - 10 providers / 397 operations; @action wrappers are generated, with the account param injected centrally so no action can bypass it - OAuth account choosers fixed (Google/Outlook select_account) - Manage-accounts modal with staged edits and add-account OAuth - Gmail/Outlook/Slack listeners run per account, triggers account-tagged - Router extracts account qualifiers ("my job email") and sees live account lists just-in-time 516 tests passing, tsc clean. closes #368 * integrations: multi-account for all 23 platforms via auth-layer bridge Legacy platforms get thin v2 providers (identity + login + bound client + listener); their existing actions stay and become account-aware centrally (contextvar hint + run_client routing + schema injection into 676 actions). whatsapp_web moves from a singleton Node bridge to per-identity bridges with QR sessions and a max_accounts cap; telegram_user logs in via two-phase phone->code(+2FA) token connect. Also fixes: fcntl broke the v2 system on Windows (msvcrt locking); list/info/metrics read legacy cred files so v2 connects showed disconnected; notion token connects could silently overwrite the first account. Adds manage_integration_account agent action and Living UI account param. 609 tests green. * Integrations Fix + media recieve * fix(integrations): resolve tester-reported failures across Jira, disconnect, Lark, WhatsApp, and notifications * fix(integrations): gmail forwards carry the original body, whatsapp replies route to the receiving account, discord multi-server sends land once in the right channel * feat(whatsapp): desktop-parity session durability — per-account session actor with supervised reconnect/heartbeat, bridge.js generation rewrite (no synthetic ready, PID-exact kills), LinkFlow QR with idempotent completion, legacy single-account path removed * fix(whatsapp): adopt the live bridge at link instead of restart-from-disk (torn LocalAuth), park never-connected sessions as needs-relink, resolve account="primary" * feat(whatsapp): migrate bridge from whatsapp-web.js/Chromium to Baileys — protocol-native WebSocket, plain-file sessions, ~50MB/account, legacy system fully removed (existing accounts re-link once via QR) * install whatsapp bridge * update multiaccount integration setting UI * use SVGL for integration logo * fix: env install for transformers --------- Co-authored-by: CraftBot <craftbot@craftbot.dev> * fix: import external apps * Document + version fix * memory entity connection processed by deterministic pipeline for now * Add guided tour for memory panel * Update multiple options UI * fix: update node install * fix: normalise python * fix: windows dll issue * feat: scoped walk-verify - the verifier decides what to re-test * feat: make Living UI marketplace branch configurable * refactor: Cleanup legacy integrations code * hard onboarding step upgrad * Overwrite ENTITIES.md with clean data * Fix local LLM provider dropdown, server url input, and test connection issue * Fix question UI and updated AGENT.md to fit the latest update * Give agent more context of living UI, memory and integration * fix provider issue with openai and gemini * fix: version name + event stream summarization * fix: tunnel fix for pocketbase * fix: marketplace name normalization * fix: delete dead file * fix: cleanup dead file references --------- Co-authored-by: RooberSmoth <96537304+RooberSmoth@users.noreply.github.com> Co-authored-by: CraftBot <craftbot@craftbot.dev> Co-authored-by: イツミネ <tham_yikfoong@outlook.com> Co-authored-by: Aima <aimaajmal91203@gmail.com> Co-authored-by: false200 <214800619+false200@users.noreply.github.com> Co-authored-by: CraftOS <thamyikfoong@craftos.net> * fix: lint + formatting * fix: formatter --------- Co-authored-by: RooberSmoth <96537304+RooberSmoth@users.noreply.github.com> Co-authored-by: CraftBot <craftbot@craftbot.dev> Co-authored-by: イツミネ <tham_yikfoong@outlook.com> Co-authored-by: Aima <aimaajmal91203@gmail.com> Co-authored-by: false200 <214800619+false200@users.noreply.github.com> Co-authored-by: CraftOS <thamyikfoong@craftos.net>
Merged
zfoong
added a commit
that referenced
this pull request
Aug 29, 2026
* Changed AI enhance reasoning to stick to the chosen language unless stated so. * If the input is empty, stop enhancing and reset to false state. * Updated chat.tsx as i committed the wrong version. * Fix issue #416 * Added loading spinner to + button for visual communication. * Disabled send and dictate button, added 'no entry' thing when hovering on dictate. * splash page loading animation * Added 30s timeout - needs testing? * make chat input disabled * Remove outdated sections in living UI setting page * introduce graph into the memory system * fix coloring issue on nodes * remove pending visualization * Update graph UI and update relevent memories preview logic * entity in memory graph are stored and retrieved as embedding * Advertisement Widget Advertisement widget for CraftBot dashboard * Update memory setting page and added configurable memory processing condition * improve welcome widget * minor update to the token usage widget * Code clean up and refactor * refactor memory system and consolidate magic numbers into a file * fix entities and connection pipeline * bug:invoking skill and command cause new chat session to stuck * Added new guide tour with driver js * update guide text * Added more providers and provider refactor * fix: merge reset-agent chat options and refresh the session list * feat: agent questions with suggested responses (pinned question box) * bug:fix run shell mangle issue on windows * Fix message disappearing issue * fix event stream summarization failed and chat session UI scrolling issue * bug:fix reset agent require refresh to take effect * fix: unify Living UI dev/live lifecycle to stop live pb_data wipes (#427) * fix: unify Living UI dev/live lifecycle to stop live pb_data wipes * feat: scheduled + pre-promote backups of Living UI live data * change delete orphan living UI project to log only * set living UI launch by default and optimize launch time * fix: naming fix + backup on reset agent * fix: restore UI + restore from leftover backups --------- Co-authored-by: CraftBot <craftbot@craftbot.dev> * fix and improve reset agent feature from merge * bug:schedule task list action parameter bug * update intsaller check in run script * fix multiple file indexing issue * Feature/multiaccount integrations (#419) * feat(integrations): multi-account support with aliases and per-account listeners Rebuilt the integration layer as a host-agnostic package (supersedes PR #370; design: docs/plans/multi-account-v2-plan.md). The 10 major integrations now hold a primary account plus any number of additional accounts with nicknames (shared across the Google family). - AccountSet document store: atomic writes, deterministic account resolution, one-time migration of existing credential files - 10 providers / 397 operations; @action wrappers are generated, with the account param injected centrally so no action can bypass it - OAuth account choosers fixed (Google/Outlook select_account) - Manage-accounts modal with staged edits and add-account OAuth - Gmail/Outlook/Slack listeners run per account, triggers account-tagged - Router extracts account qualifiers ("my job email") and sees live account lists just-in-time 516 tests passing, tsc clean. closes #368 * integrations: multi-account for all 23 platforms via auth-layer bridge Legacy platforms get thin v2 providers (identity + login + bound client + listener); their existing actions stay and become account-aware centrally (contextvar hint + run_client routing + schema injection into 676 actions). whatsapp_web moves from a singleton Node bridge to per-identity bridges with QR sessions and a max_accounts cap; telegram_user logs in via two-phase phone->code(+2FA) token connect. Also fixes: fcntl broke the v2 system on Windows (msvcrt locking); list/info/metrics read legacy cred files so v2 connects showed disconnected; notion token connects could silently overwrite the first account. Adds manage_integration_account agent action and Living UI account param. 609 tests green. * Integrations Fix + media recieve * fix(integrations): resolve tester-reported failures across Jira, disconnect, Lark, WhatsApp, and notifications * fix(integrations): gmail forwards carry the original body, whatsapp replies route to the receiving account, discord multi-server sends land once in the right channel * feat(whatsapp): desktop-parity session durability — per-account session actor with supervised reconnect/heartbeat, bridge.js generation rewrite (no synthetic ready, PID-exact kills), LinkFlow QR with idempotent completion, legacy single-account path removed * fix(whatsapp): adopt the live bridge at link instead of restart-from-disk (torn LocalAuth), park never-connected sessions as needs-relink, resolve account="primary" * feat(whatsapp): migrate bridge from whatsapp-web.js/Chromium to Baileys — protocol-native WebSocket, plain-file sessions, ~50MB/account, legacy system fully removed (existing accounts re-link once via QR) * install whatsapp bridge * update multiaccount integration setting UI * use SVGL for integration logo * fix: env install for transformers --------- Co-authored-by: CraftBot <craftbot@craftbot.dev> * fix: import external apps * Document + version fix * memory entity connection processed by deterministic pipeline for now * Add guided tour for memory panel * Update multiple options UI * fix: update node install * fix: normalise python * fix: windows dll issue * feat: scoped walk-verify - the verifier decides what to re-test * feat: make Living UI marketplace branch configurable * refactor: Cleanup legacy integrations code * hard onboarding step upgrad * Overwrite ENTITIES.md with clean data * Fix local LLM provider dropdown, server url input, and test connection issue * Fix question UI and updated AGENT.md to fit the latest update * Give agent more context of living UI, memory and integration * fix provider issue with openai and gemini * fix: version name + event stream summarization * fix: tunnel fix for pocketbase * fix: marketplace name normalization * fix: delete dead file * fix: cleanup dead file references --------- Co-authored-by: RooberSmoth <96537304+RooberSmoth@users.noreply.github.com> Co-authored-by: CraftBot <craftbot@craftbot.dev> Co-authored-by: イツミネ <tham_yikfoong@outlook.com> Co-authored-by: Aima <aimaajmal91203@gmail.com> Co-authored-by: false200 <214800619+false200@users.noreply.github.com> Co-authored-by: CraftOS <thamyikfoong@craftos.net>
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.
Summary
Google Drive, Google Docs, YouTube, Outlook, LinkedIn, Notion, HubSpot,
and Slack. Each can hold more than one connected account, with a
user-assignable nickname (alias) and a designated primary account.
craftos_integrations/accounts.py) handles listing,resolving (by exact identity, alias, or unique substring), aliasing,
and promoting/demoting primary — built once, reused by all 10
integrations rather than reimplemented per-service.
the same account instead of prompting a chooser (missing
select_account/prompt=loginparams). Fixed per-provider.account — set a nickname once on Gmail and it applies to Calendar,
Drive, Docs, and YouTube automatically. Existing per-service aliases
migrate transparently.
accountparameter, defaulting to the primary account when omitted.Includes closing a gap found during testing: LinkedIn's 10 social/write
actions (
create_linkedin_post, likes, comments, DMs, follow) used adifferent dispatch path that never accepted
account— now fixed andverified (intercepted the real HTTP call to confirm the correct
account's token is used).
locally; nothing is written until "Save changes" is clicked, or
discarded on modal close. "Add account" is the one exception — it's a
real external OAuth grant and applies immediately.
agent_core/core/prompts/action.py,AGENT.md, all 10 integrations'INTEGRATION.md) to explicitly directthe agent to extract account qualifiers from natural language ("my
school calendar") rather than silently defaulting to primary.
(
_integration_essentials.py): bare words like "calendar"/"docs"/"drive"/"youtube" never matched anything (only the full "google X"
form did), so the per-integration guidance never reached the model
for the most natural phrasing.
Test plan
tests/test_accounts_generic.py(integration-agnosticlayer, tested against a synthetic credential shape) and
tests/test_google_multi_account.py(Google-specific behavior,legacy alias migration)
unrelated failures untouched)
write actions (Gmail draft, Google Doc) correctly scoped to the
targeted account by alias, with real Google 404/403 responses
confirming true cross-account isolation
and confirming the correct account's bearer token was used
correctly triggers Calendar-specific guidance (didn't before);
confirmed "lark calendar" still resolves correctly alongside it
real accounts (only simulated/seeded credentials tested for these)
account qualifiers from natural language per the strengthened
prompts — the code/prompt delivery side is verified, but actual
model compliance can only be confirmed by using it
closes issue #368