Skip to content

v0.9.12: Power BI integration, library articles, chat fork speedups - #8589

Merged
waleedlatif1 merged 19 commits into
mainfrom
staging
Oct 3, 2026
Merged

waleedlatif1 merged 19 commits into
mainfrom
staging

Conversation

@waleedlatif1

@waleedlatif1 waleedlatif1 commented Oct 2, 2026 •

Copy link
Copy Markdown
Collaborator

waleedlatif1 and others added 14 commits October 2, 2026 10:26
… clients (#8562)

* fix(mothership): leave desktop tool calls to the desktop app in other clients

* test(mothership): drop the mock-call routing test; the integration suite owns the regression
* feat(powerbi): add Power BI actions

* fix(powerbi): harden partial results and selector hydration

* fix(powerbi): compact retained failures and reuse rotated fixture tokens

* fix(powerbi): use standard workflow failure handling

* fix(powerbi): preserve nested query diagnostics

* fix(powerbi): generate docs entirely from source

* fix(powerbi): keep generated catalog descriptions complete

* fix(powerbi): validate resource grants in account selector

---------

Co-authored-by: Bill Leoutsakos <billleoutsakos@Bills-MacBook-Pro.local>
…aging (#8578)

- replace the non-null assertions in the Power BI tests with named guards
- drop export from Power BI types and constants used only in their own file
- inline the refresh-attempt output properties at their one use, so the docs generator (which only resolves exported consts) renders them without a dead export
…ity, Deployment, and Evaluation (#8576)

* feat(library): How to Use a Postgres MCP Server With AI Agents: Security, Deployment, and Evaluation

* Pi Babysit: address PR #8576 feedback

---------

Co-authored-by: Sim Pi Agent <pi@sim.ai>
…8577)

* docs(library): update ai-agent-examples-by-department-and-industry

* Pi Babysit: address PR #8577 feedback

---------

Co-authored-by: Sim Pi Agent <pi@sim.ai>
…release review (#8571)

* fix(audits): close guardrail detector gaps and correct guidance from release review

* fix(audits): detect partialize and .with by AST instead of regex

* fix(audits): exempt only the imported OpenTelemetry context from the .with rule; unwrap cast partialize

* fix(audits): drop the OTel exemption for rebound names, catch optional .with calls and defaulted partialize params

* fix(audits): treat logical and conditional partialize returns of the whole state as leaks

* improvement(audits): let tsc guard ES2023 methods, tighten ratchet hints, fix && partialize false positive

- check:utils drops the ES2023 call-site detector; every tsconfig keeps lib at ES2022 so tsc rejects toSorted/with by type, and the check now fails a tsconfig that raises lib past it (the #5340 cause)
- check:zustand-v5 treats only the right side of && as a returned value
- check:explicit-any counts group-level and bare lint biome-ignore suppressions, and no longer pairs a deleted file with an unrelated new one as a rename
- check:file-names drops its rule-matched rename hint, which pointed new violations at old baseline entries
- check:comment-hygiene skips the parse for files with no possible hit and scans untracked files
- inline the single-consumer source-kind helper and two leftover ref aliases
- CLAUDE.md naming states the check:file-names scope; /ship runs type-check

* chore(guidance): state the tsconfig lib invariant as at or below ES2022

* fix(audits): keep matching toSorted/toReversed/toSpliced in source for any receivers

* chore(guidance): scope the ES2023 tsc guarantee to typed receivers
* fix(knowledge): scope list counts to selected knowledge bases

* fix(knowledge): avoid count-query fan-out for unpaged lists
…ropdown (#8582)

* fix(integrations): list tools for integrations without an operation dropdown

The catalog generator only read operations from a block's own 'operation'
dropdown, so single-tool blocks and provider pickers (DuckDuckGo, SMTP,
Twilio SMS, Embeddings, ...) emitted zero operations, and Notion v2 lost its
dropdown because it spreads NotionBlock.subBlocks instead of the whole config.

Resolve operations through same-file subBlocks spreads, and fall back to the
block's tools.access ids named from the client-safe tool metadata.

* fix(docs): drop the any cast and only follow plain subBlocks spreads in the catalog generator
* fix(sdk): default both SDKs to the www.sim.ai host

The apex https://sim.ai answers every request with a 301 to
https://www.sim.ai, and fetch and requests replay a 301 POST as a GET with
no body, so a default-configured execute call never reaches the API. Both
SDKs now default to https://www.sim.ai. Patch-bump both to 0.2.1 so the
publish workflows release the new default on merge to main, and note in the
API reference that earlier versions still default to the apex.

* test(ts-sdk): cover the default www host

* test(ts-sdk): use a typed Response in the default-host test
* feat(search): browse Lucid folders and Notion pages

* fix(search): preserve discovery query boundaries
#8583)

* fix(core): treat EHOSTUNREACH as a retryable network failure

An unreachable host is a connection that never opened, so the request never
reached its destination and one more attempt is as safe as after
ECONNREFUSED or ENETUNREACH.

* fix(mothership): pass typed fork refusals through and stop overlapping retries

The worker refuses a fork it cannot make with 404 (the chat or message is
gone), 409 (the response has not finished) or 413 (the cut is above its
ceiling), but every non-2xx became a generic error and a 500. Those are now
classified and passed through by the fork route with a message the person can
act on.

The retry loop's own catch swallowed every first-attempt failure, so a 400, a
500, a malformed receipt and a timed-out attempt were all sent again. A
timed-out attempt may still be copying, so only a recognized socket failure or
a 502/503/504 gets one more attempt now.

The per-attempt timeout is sized from measured copy latency at the worker's
ceiling with headroom, so a legitimate fork finishes inside one attempt and a
timed-out one is abandoned (the worker rolls back a copy whose caller left).

* fix(mothership): show a fork refusal's own message

A 409 or 413 from the fork route tells the person what to do (wait for the
response to finish, or fork from an earlier message), so the toast shows that
message instead of a generic failure.

* fix(mothership): discard the worker copy of a fork that is not published

When anything after the worker copy failed, most often the final transaction
that publishes the chat, the worker kept a conversation Sim had no chat for.
The fork now asks the worker to clean that chat up, through the same cleanup
endpoint chat deletion uses. It is best effort and a no-op when the worker
never committed.

* fix(mothership): point every reference a fork copies at what the fork holds

- A file whose blob copy failed is never published, yet the fork's messages
  and the worker's history were rewritten to its id and key. References to it
  now stay on the source file, and its resource tab is dropped as before.
- In-app /workspace/<id>/files/<fileId> links were left on the source file;
  the fork stays in the same workspace, so only the file id moves.
- Tool-call arguments and display titles kept the source file's id or key.
- A Sources tab for a response past the cut was copied, pointing at a message
  the fork does not have.

* fix(cleanup): purge a chat's inline images and only its own attachments

- Chat images are stored under the chat's id but were never deleted with the
  chat. Their keys are rebuilt from the assistant messages that published
  them, the same way a fork finds them to copy.
- Message attachments were deleted as copilot storage whatever their key.
  Attachments in Chat are workspace-bucket files owned by their workspace_files
  row, which a fork can share with its source (a failed copy, a deleted file),
  and the copilot bucket falls back to the workspace bucket on GCS and can be
  configured to it on S3. Only copilot keys are deleted from messages now.

* fix(cleanup): delete an organization attachment once no chat references it

Organization Chat attachments (assistant/ keys) have no workspace_files row and
a fork carries the same key, so the purge now deletes one under its own
storage context only after confirming no remaining chat of that organization
still references it.

* fix(mothership): order fork publication against a purge of its source

A fork can share keys with its source (organization attachments, files whose
copy failed), and chat cleanup deletes a shared key once no remaining chat
references it, checking after it deletes the source row. The fork's publish
transaction now holds the source row with FOR KEY SHARE: a purge that already
removed it refuses the fork (404, worker copy discarded), and one that has not
waits for the commit and then sees the fork's references.

* chore(mothership): quote the final copy latency behind the fork attempt timeout
* feat(youcom): add You.com integration

* fix(youcom): unique subblock ids, nullable outputs, reject non-array contents

* fix(youcom): share field ids across operations so agent tool rows expose them

* fix(youcom): validate per-endpoint values in tools, live-verified fields

* fix(youcom): normalize country and language codes
…l, and author slugs (#8587)

* fix(landing): return 404 for unknown library, blog, integration, model, and author slugs

* fix(landing): pre-render reseller model pages so they keep resolving
…8588)

* fix(files): read offset 0 as the first line instead of rejecting it

* test(files): cover the agent CLI forwarding --offset 0
@waleedlatif1
waleedlatif1 requested a review from a team as a code owner October 2, 2026 22:10
@vercel

vercel Bot commented Oct 2, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
docs Ready Ready Preview Oct 3, 2026 4:16am UTC

Request Review

@greptile-apps

greptile-apps Bot commented Oct 2, 2026 •

Copy link
Copy Markdown
Contributor

RetriggerConfidence Score: 4/5

[Medium risk] Adds Power BI and You.com integrations, library articles, and chat fork optimizations.

The PR should not merge until failed file copies can no longer leave a fork dependent on files deleted with its source chat.

Findings

  1. P1 Failed copies leave broken links ▶
  2. P2 Array method audit gap ▶
  3. P2 You.com mappings lack tests ▶

Summary

This release adds Power BI and You.com integrations, Lucid and Notion browsing, and a library article, alongside chat-fork, knowledge-count, SDK, file-reading, landing-page, and audit changes.

  • Chat forks now copy and rewrite more history, handle worker refusals, and clean up unpublished copies.
  • Search gains bounded provider browsing and signed continuations.
  • Audit and documentation generation rules are updated.
Diagram
%%{init: {'theme': 'neutral'}}%%
flowchart LR
  A[Source chat and files] --> B[Prepare fork file copies]
  B --> C{Any copy failed?}
  C -->|No| D[Publish copied files and fork]
  C -->|Yes| E[Publish fork with source references]
  E --> F[Later purge of source chat]
  F --> G[Source file row and blob deleted]
  G --> H[Broken references in fork]
Loading

Reviews (1) · Last reviewed commit: "fix(files): read offset 0 as the first l..."

Comment thread apps/sim/lib/mothership/chat/application/fork.ts
Comment thread scripts/check-utils-enforcement.ts
Comment thread apps/sim/tools/youcom/search.ts

@cubic-dev-ai cubic-dev-ai Bot left a comment •

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

8 issues found across 167 files

Confidence score: 3/5

  • /api/knowledge/search still rejects browse-only requests because its body refinement checks only query.query. Treat query.browse as valid too.
  • fork.ts can delete the worker conversation after the fork row has committed if the transaction acknowledgement is lost. Check whether newId was committed before cleanup.
  • inlineChatImageReferences treats thinking and subagent text as published image sources, even though prepareStreamImages never materializes images from those lanes. Exclude those block types.
  • parseJsonSchema silently drops the structured-output contract when the input is already a malformed array. Reject arrays instead of treating them as no schema.
Prompt for AI agents (unresolved issues)

Check if these issues are valid — if so, understand the root cause of each and fix them. When an issue isn't valid or won't be fixed in this PR, reply in its thread with the reason and then resolve the thread. If appropriate, use sub-agents to investigate and fix each issue separately.


<file name="packages/deployment-config/src/integrations.json">

<violation number="1" location="packages/deployment-config/src/integrations.json:4382">
P2: This catalog description claims notification and channel-confirmation features that the Clay action does not provide. Replace it with a summary of the webhook-based table-population behavior.</violation>
</file>

<file name="apps/sim/blocks/blocks/youcom.ts">

<violation number="1" location="apps/sim/blocks/blocks/youcom.ts:508">
P2: Switching from background Research to exhaustive Finance Research can leave the hidden `background` value set, causing this branch to omit the extended timeout for a synchronous request. Apply the timeout to exhaustive effort regardless of the stale background flag; background Research returns its task ID immediately.</violation>
</file>

<file name="apps/sim/lib/api/contracts/mothership-assistant-tools.ts">

<violation number="1" location="apps/sim/lib/api/contracts/mothership-assistant-tools.ts:52">
P2: `browse` makes a native query valid here, but `/api/knowledge/search` still rejects browse-only requests because its body refinement checks only `query.query`. Update that refinement to treat `query.browse` as a valid native request.</violation>
</file>

<file name="apps/sim/lib/mothership/chat/inline-image-key.ts">

<violation number="1" location="apps/sim/lib/mothership/chat/inline-image-key.ts:36">
P2: `inlineChatImageReferences` treats thinking and subagent text as published image sources, but `prepareStreamImages` deliberately never materializes images from those lanes. Exclude `thinking` and `subagent` blocks so forks and cleanup do not process blobs that were never stored.</violation>
</file>

<file name="apps/sim/tools/youcom/utils.ts">

<violation number="1" location="apps/sim/tools/youcom/utils.ts:97">
P2: `parseJsonSchema` treats only `''` as unset, so whitespace left in the optional Output Schema field makes Research requests fail. Trim string values before the empty check and parsing.</violation>

<violation number="2" location="apps/sim/tools/youcom/utils.ts:129">
P2: An already-parsed array is silently treated as no schema, unlike the equivalent string form, so a malformed JSON input loses the requested structured-output contract. Reject arrays here instead of omitting `output_schema`.</violation>
</file>

<file name="apps/sim/lib/mothership/chat/application/fork.ts">

<violation number="1" location="apps/sim/lib/mothership/chat/application/fork.ts:227">
P2: If the transaction commits but its acknowledgement is lost, `published` stays false and this cleanup deletes the worker conversation for a fork whose chat row is already committed. Check whether `newId` was committed before discarding the worker copy.</violation>
</file>

<file name="apps/sim/lib/sim-search/live/providers.ts">

<violation number="1" location="apps/sim/lib/sim-search/live/providers.ts:67">
P2: This continuation recipe omits `kind`, but the cursor is bound to `native.kind`; paging a folder search started with `kind: lucidchart` or `lucidspark` is rejected if the next query omits it. Include `kind` among the unchanged fields.</violation>
</file>

Re-trigger cubic

Comment thread .cursor/rules/sim-settings-pages.mdc
Comment thread .claude/rules/sim-react-performance.md
Comment thread apps/sim/tools/youcom/research.ts
"operations": [
{
"name": "Clay Populate",
"description": "Populate Clay with data from a JSON file. Enables direct communication and notifications with timestamp tracking and channel confirmation."

@cubic-dev-ai cubic-dev-ai Bot Oct 2, 2026 •

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2: This catalog description claims notification and channel-confirmation features that the Clay action does not provide. Replace it with a summary of the webhook-based table-population behavior.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. When an issue isn't valid or won't be fixed in this PR, reply in its thread with the reason and then resolve the thread. At packages/deployment-config/src/integrations.json, line 4382:

<comment>This catalog description claims notification and channel-confirmation features that the Clay action does not provide. Replace it with a summary of the webhook-based table-population behavior.</comment>

<file context>
@@ -4366,8 +4376,13 @@
+      "operations": [
+        {
+          "name": "Clay Populate",
+          "description": "Populate Clay with data from a JSON file. Enables direct communication and notifications with timestamp tracking and channel confirmation."
+        }
+      ],
</file context>
Suggested change
"description": "Populate Clay with data from a JSON file. Enables direct communication and notifications with timestamp tracking and channel confirmation."
"description": "Populate a Clay table by sending JSON data to a Clay webhook."
Fix with cubic

Comment thread apps/sim/lib/cleanup/chat-cleanup.ts
Comment thread apps/sim/lib/sim-search/live/notion-mcp.ts
Comment thread apps/sim/lib/mothership/chat/application/fork.ts
Comment thread apps/sim/tools/powerbi/__fixtures__/provider-fixture.ts
Comment thread .agents/skills/babysit/SKILL.md
Comment thread packages/deployment-config/src/integrations.json
* feat(forks): compare last synced source deployments

* fix(workflows): simplify comparison headings and badges

* fix(forks): track admitted deployment outcomes accurately
waleedlatif1 and others added 2 commits October 2, 2026 16:26
…s checklist with the standalone description rule (#8591)

* fix(audits): apply browser-runtime rules to @sim/utils; align settings checklist with the standalone description rule

* test(audits): pin which check:utils rules helper sources are exempt from
* chore(pi): upgrade agent to 1.0.0

* chore(pi): narrow upgrade regression coverage

---------

Co-authored-by: Bill Leoutsakos <billleoutsakos@Bills-MacBook-Pro.local>
…8592)

* fix(youcom): use literal operation ids so docs and catalog pick up tools

* fix(docs): expand shared output spreads in generated tool docs
@waleedlatif1
waleedlatif1 merged commit 165e117 into main Oct 3, 2026
51 of 52 checks passed

This branch was successfully deployed

1 active deployment
Preview — 52878d12 Deployed Oct 3, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants