Skip to content

Conversation

michelle0927
Copy link
Collaborator

@michelle0927 michelle0927 commented Aug 22, 2025

Resolves #18045

New Actions

  • Insert Table
  • Insert PageBreak
  • Insert Text
  • Get Tab Content

Updated Action

  • Replace Text

The ability to create tabs is being tracked in issue #17374.

Summary by CodeRabbit

  • New Features

    • Insert Text, Insert Table, and Insert Page Break actions for Google Docs.
    • Get Tab Content action to retrieve content from specific tabs.
    • Replace Text can target specific Tab IDs.
    • Google Docs app enhancements: tab selection for tab-aware actions and a create-document capability.
  • Chores

    • Multiple version bumps across Google Docs actions, sources, and package (now 0.5.0).

Copy link

vercel bot commented Aug 22, 2025

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

2 Skipped Deployments
Project Deployment Preview Comments Updated (UTC)
pipedream-docs Ignored Ignored Aug 22, 2025 5:18pm
pipedream-docs-redirect-do-not-edit Ignored Ignored Aug 22, 2025 5:18pm

Copy link
Contributor

coderabbitai bot commented Aug 22, 2025

Walkthrough

Introduces new Google Docs actions for getting tab content and inserting text, tables, and page breaks; adds tabId propDefinition and helper methods to the Google Docs app; updates replace-text to support tab-scoped replacements; and bumps versions across several actions, sources, and package metadata.

Changes

Cohort / File(s) Summary
New actions: Tab and insert operations
components/google_docs/actions/get-tab-content/get-tab-content.mjs, components/google_docs/actions/insert-text/insert-text.mjs, components/google_docs/actions/insert-table/insert-table.mjs, components/google_docs/actions/insert-page-break/insert-page-break.mjs
Adds actions to fetch tab content, insert text, insert tables, and insert page breaks. Each action accepts docId and optional tabId/tabIds where applicable, calls app methods or batchUpdate, exports a success summary, and returns updated document or filtered tabs.
Replace Text enhancement
components/google_docs/actions/replace-text/replace-text.mjs
Adds optional tabIds prop, includes tabsCriteria in payload when provided, exports a success summary, and bumps version to 0.0.8.
App enhancements
components/google_docs/google_docs.app.mjs
Adds tabId propDefinition with dynamic options (from getDocument), and adds insertTable, insertPageBreak, and createDocument methods to perform batchUpdate/create operations.
Version bumps (actions)
components/google_docs/actions/append-image/append-image.mjs, components/google_docs/actions/append-text/append-text.mjs, components/google_docs/actions/create-document/create-document.mjs, components/google_docs/actions/create-document-from-template/create-document-from-template.mjs, components/google_docs/actions/find-document/find-document.mjs, components/google_docs/actions/get-document/get-document.mjs, components/google_docs/actions/replace-image/replace-image.mjs
Updates only the version fields; no behavioral changes.
Version bumps (sources)
components/google_docs/sources/new-document-created/new-document-created.mjs, components/google_docs/sources/new-or-updated-document/new-or-updated-document.mjs
Updates only the version fields; no behavioral changes.
Package metadata
components/google_docs/package.json
Bumps package version from 0.4.4 to 0.5.0.

Sequence Diagram(s)

sequenceDiagram
  actor User
  participant Action as Insert Text Action
  participant App as Google Docs App
  participant Google as Google Docs API

  User->>Action: Provide docId, text, index, [tabId]
  Action->>App: _batchUpdate(docId, "insertText", { text, location:{ index, tabId } })
  App->>Google: documents.batchUpdate
  Google-->>App: update result
  Action->>App: getDocument(docId, !!tabId)
  App->>Google: documents.get(?includeTabsContent=true if tabId)
  Google-->>App: document
  App-->>Action: document
  Action-->>User: document (+$summary)
Loading
sequenceDiagram
  actor User
  participant Action as Replace Text Action
  participant App as Google Docs App
  participant Google as Google Docs API

  User->>Action: docId, replaceText, containsText, [tabIds]
  Action->>App: _batchUpdate(docId, "replaceAllText", { replaceText, containsText, tabsCriteria? })
  App->>Google: documents.batchUpdate
  Google-->>App: result
  Action-->>User: $summary
Loading
sequenceDiagram
  actor User
  participant Action as Insert Table / Page Break
  participant App as Google Docs App
  participant Google as Google Docs API

  User->>Action: docId, rows/cols or index, [tabId]
  Action->>App: insertTable/insertPageBreak(docId, request)
  App->>Google: documents.batchUpdate
  Google-->>App: result
  Action->>App: getDocument(docId, !!tabId)
  App->>Google: documents.get
  Google-->>App: document
  App-->>Action: document
  Action-->>User: document (+$summary)
Loading
sequenceDiagram
  actor User
  participant Action as Get Tab Content
  participant App as Google Docs App
  participant Google as Google Docs API

  User->>Action: docId, [tabIds]
  Action->>App: getDocument(docId, true)
  App->>Google: documents.get?includeTabsContent=true
  Google-->>App: document with tabs
  App-->>Action: document
  Action->>Action: filter tabs by tabIds
  Action-->>User: filtered tabs (+$summary)
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Assessment against linked issues

Objective Addressed Explanation
Create a Document Tab (#18045) No action or app method for creating tabs was added.
Retrieve Content from a Content Tab (#18045)
Add or replace content within a given Content Tab (#18045)
Insert Table / insertPageBreak / insertText / replaceAllText (#18045)

Assessment against linked issues: Out-of-scope changes

Code Change Explanation
Add createDocument(request) method (components/google_docs/google_docs.app.mjs) Creating whole documents is not listed in the linked issue objectives focused on tab operations and in-document edits.
Version bump: components/google_docs/sources/new-document-created/... and new-or-updated-document Source version increments do not relate to implementing the tab/table/text/page-break actions requested.
Package version bump to 0.5.0 (components/google_docs/package.json) Package metadata update is unrelated to the functional objectives in the linked issue.

Possibly related PRs

  • [Usability Audit] google_docs #15363 — Overlaps with Google Docs modules and actions (create-document-from-template, replace-text, google_docs.app.mjs, package.json), likely related changeset and context.

Suggested reviewers

  • lcaresia
  • GTFalcao
  • jcortes

Poem

I hop through Docs with careful taps,
Fetching tabs and filling gaps.
Tables sprout where carrots hide,
Page breaks bloom, a tidy stride.
Text replaced—snip-snip—just right, whiskers twitch in pure delight. 🥕🐇

Tip

🔌 Remote MCP (Model Context Protocol) integration is now available!

Pro plan users can now connect to remote MCP servers from the Integrations page. Connect with popular remote MCPs such as Notion and Linear to add more context to your reviews and chats.


📜 Recent review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

💡 Knowledge Base configuration:

  • MCP integration is disabled by default for public repositories
  • Jira integration is disabled by default for public repositories
  • Linear integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between e130a20 and 5e5f18c.

📒 Files selected for processing (1)
  • components/google_docs/actions/get-tab-content/get-tab-content.mjs (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • components/google_docs/actions/get-tab-content/get-tab-content.mjs
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (4)
  • GitHub Check: pnpm publish
  • GitHub Check: Publish TypeScript components
  • GitHub Check: Lint Code Base
  • GitHub Check: Verify TypeScript components
✨ Finishing Touches
  • 📝 Generate Docstrings
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch issue-18045

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.

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

CodeRabbit Commands (Invoked using PR/Issue comments)

Type @coderabbitai help to get the list of available commands.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Status, Documentation and Community

  • Visit our Status Page to check the current availability of CodeRabbit.
  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

@michelle0927 michelle0927 marked this pull request as ready for review August 22, 2025 17:06
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 2

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (2)
components/google_docs/actions/append-text/append-text.mjs (1)

31-37: Await the getDocument call to avoid returning a Promise in action output.

getDocument is async and should be awaited; otherwise the action returns a Promise instead of the document object and can break downstream steps expecting a JSON object.

Apply this diff:

   async run({ $ }) {
     await this.googleDocs.insertText(this.docId, {
       text: this.text,
     }, this.appendAtBeginning);
-    const doc = this.googleDocs.getDocument(this.docId);
+    const doc = await this.googleDocs.getDocument(this.docId);
     $.export("$summary", `Successfully appended text to document with ID: ${this.docId}`);
     return doc;
   },
components/google_docs/actions/replace-image/replace-image.mjs (1)

35-43: Await the getDocument call to return the resolved document.

Same pattern as other actions: getDocument should be awaited to avoid leaking a Promise from the action.

   await this.googleDocs.replaceImage(this.docId, image);
-  const doc = this.googleDocs.getDocument(this.docId);
+  const doc = await this.googleDocs.getDocument(this.docId);
   $.export("$summary", `Successfully replaced image in doc with ID: ${this.docId}`);
   return doc;
🧹 Nitpick comments (18)
components/google_docs/actions/replace-image/replace-image.mjs (1)

6-6: Minor grammar improvement in description.

-  description: "Replace image in a existing document. [See the documentation](https://developers.google.com/docs/api/reference/rest/v1/documents/request#ReplaceImageRequest)",
+  description: "Replace an image in an existing document. [See the documentation](https://developers.google.com/docs/api/reference/rest/v1/documents/request#ReplaceImageRequest)",
components/google_docs/actions/get-document/get-document.mjs (2)

30-37: Defensive option mapping for tabs without properties.

If any tab lacks tabProperties (edge cases, API changes), the current map would throw. Consider a safe fallback.

-        return tabs.map((tab) => ({
-          label: tab.tabProperties.title,
-          value: tab.tabProperties.tabId,
-        }));
+        return tabs
+          .filter((tab) => tab?.tabProperties?.tabId)
+          .map((tab) => ({
+            label: tab.tabProperties.title ?? tab.tabProperties.tabId,
+            value: tab.tabProperties.tabId,
+          }));

41-49: Guard against undefined response.tabs when filtering selected tabIds.

If the API returns no tabs array (or the call didn’t include tabs content), filtering will throw. You already enforce includeTabsContent when tabIds are passed; this small guard avoids runtime errors if the API response differs.

-    if (this.tabIds?.length) {
-      response.tabs = response.tabs.filter((tab) => this.tabIds.includes(tab.tabProperties.tabId));
-    }
+    if (this.tabIds?.length) {
+      const tabs = Array.isArray(response.tabs) ? response.tabs : [];
+      response.tabs = tabs.filter((tab) => this.tabIds.includes(tab?.tabProperties?.tabId));
+    }
components/google_docs/google_docs.app.mjs (1)

150-161: New API wrappers align with Docs API request names.

insertTable, insertPageBreak, and createDocument correctly delegate to _batchUpdate / documents.create. The thin wrappers match expected request shapes when callers pass properly structured bodies (with location, etc.). No issues spotted.

If you anticipate more wrappers, consider centralizing request-name constants to avoid typos and enable reuse (e.g., const REQ = { INSERT_TABLE: "insertTable", ... }).

components/google_docs/actions/replace-text/replace-text.mjs (2)

59-63: Avoid sending an empty tabsCriteria; gate on length

If the UI binds tabIds to an empty array, the current truthy check will still send tabsCriteria: { tabIds: [] }, which is semantically different from omitting the field (and could be rejected by the API). Check for length instead.

-      tabsCriteria: this.tabIds
-        ? {
-          tabIds: this.tabIds,
-        }
-        : undefined,
+      tabsCriteria: this.tabIds?.length
+        ? { tabIds: this.tabIds }
+        : undefined,

Docs: tabsCriteria is optional; omitting it applies to all tabs. (developers.google.com)


65-69: Return the resolved document and include tabs when targeting tabs

For consistency with other actions and to avoid returning a pending Promise, await getDocument. Also pass includeTabsContent when specific tabs were targeted, so the response mirrors the edit context.

-    const doc = this.googleDocs.getDocument(this.docId);
-    $.export("$summary", `Successfully replaced text in doc with ID: ${this.docId}`);
-    return doc;
+    const doc = await this.googleDocs.getDocument(this.docId, Boolean(this.tabIds?.length));
+    $.export("$summary", `Successfully replaced text in doc with ID: ${this.docId}`);
+    return doc;
components/google_docs/actions/insert-page-break/insert-page-break.mjs (3)

17-23: Clarify index is zero-based UTF-16 code units

Google Docs Location.index is zero-based (UTF-16 code units). Clarifying this in the UI label/description avoids confusion.

-    index: {
-      type: "integer",
-      label: "Index",
-      description: "The index to insert the page break at",
+    index: {
+      type: "integer",
+      label: "Index (0-based)",
+      description: "Zero-based index (UTF-16 code units) to insert the page break at",
       default: 1,
       optional: true,
     },

Reference for zero-based index and location semantics. (developers.google.com)


24-33: Make tabId explicitly optional to work on non-tabbed docs

Unless the app propDefinition already marks tabId as optional, add optional: true here to avoid forcing a selection on single-tab or no-tab docs.

     tabId: {
       propDefinition: [
         googleDocs,
         "tabId",
         (c) => ({
           documentId: c.docId,
         }),
       ],
+      optional: true,
     },

34-45: Await the returned document and include doc ID in summary

  • Await getDocument so the action returns a resolved resource.
  • Including the doc ID in the summary improves UX consistency with other actions.
-    await this.googleDocs.insertPageBreak(this.docId, pageBreak);
-    $.export("$summary", "Successfully inserted page break");
-    return this.googleDocs.getDocument(this.docId, !!this.tabId);
+    await this.googleDocs.insertPageBreak(this.docId, pageBreak);
+    $.export("$summary", `Successfully inserted page break in doc with ID: ${this.docId}`);
+    return await this.googleDocs.getDocument(this.docId, !!this.tabId);

Docs confirm Location supports tabId and zero-based index. (developers.google.com)

components/google_docs/actions/insert-text/insert-text.mjs (3)

23-29: Clarify index is zero-based UTF-16 code units

Same context as page break: Location.index is zero-based. Clarify in the UI.

-    index: {
-      type: "integer",
-      label: "Index",
-      description: "The index to insert the text at",
+    index: {
+      type: "integer",
+      label: "Index (0-based)",
+      description: "Zero-based index (UTF-16 code units) at which to insert the text",
       default: 1,
       optional: true,
     },

Reference for Location index semantics. (developers.google.com)


30-38: Make tabId explicitly optional to support single/no-tab docs

Aligns with other actions and avoids requiring a selection when unnecessary.

     tabId: {
       propDefinition: [
         googleDocs,
         "tabId",
         (c) => ({
           documentId: c.docId,
         }),
       ],
+      optional: true,
     },

40-52: Await getDocument and include the doc ID in the summary

Return a resolved document and make the summary more informative. This also mirrors the Replace Text action’s summary style.

-    await this.googleDocs._batchUpdate(this.docId, "insertText", text);
-    $.export("$summary", "Successfully inserted text");
-    return this.googleDocs.getDocument(this.docId, !!this.tabId);
+    await this.googleDocs._batchUpdate(this.docId, "insertText", text);
+    $.export("$summary", `Successfully inserted text in doc with ID: ${this.docId}`);
+    return await this.googleDocs.getDocument(this.docId, !!this.tabId);

Docs confirm InsertTextRequest.location supports tabId. (developers.google.com)

components/google_docs/actions/get-tab-content/get-tab-content.mjs (1)

17-29: Make tabIds optional and usable as a filter (not a requirement)

If the user doesn’t select any tabs, returning all tabs is a sensible default. Mark the prop optional to match that behavior.

     tabIds: {
       type: "string[]",
       label: "Tab IDs",
       description: "Return content for the specified tabs",
+      optional: true,
       async options() {
         const { tabs } = await this.googleDocs.getDocument(this.docId, true);
         if (!tabs?.length) return [];
         return tabs.map((tab) => ({
           label: tab.tabProperties.title,
           value: tab.tabProperties.tabId,
         }));
       },
     },
components/google_docs/actions/insert-table/insert-table.mjs (5)

4-9: Action metadata is clear and consistent.

Key, name, version, and description follow existing conventions. Minor nit: consider clarifying in the description that the index is 1-based to set expectations for users.

-  description: "Insert a table into a document. [See the documentation](https://developers.google.com/workspace/docs/api/reference/rest/v1/documents/request#inserttablerequest)",
+  description: "Insert a table into a document (index is 1-based). [See the documentation](https://developers.google.com/workspace/docs/api/reference/rest/v1/documents/request#inserttablerequest)",

17-26: Add client-side validation hints for rows/columns.

Preventing zero/negative values at the UI layer reduces avoidable API 400s and improves UX.

     rows: {
       type: "integer",
       label: "Rows",
       description: "The number of rows in the table",
+      min: 1,
     },
     columns: {
       type: "integer",
       label: "Columns",
       description: "The number of columns in the table",
+      min: 1,
     },

27-33: Clarify 1-based index and enforce a lower bound.

Docs treat indices as 1-based. Add min and mention 1-based to avoid confusion, off-by-one mistakes, and bad requests.

     index: {
       type: "integer",
       label: "Index",
-      description: "The index to insert the table at",
+      description: "The 1-based index to insert the table at",
       default: 1,
       optional: true,
+      min: 1,
     },

Optional: consider an “Append to end” boolean that switches to an end-of-segment insertion path if supported by your app wrapper.


45-52: Guard inputs and avoid sending undefined tabId.

Add minimal runtime validation and only include tabId when provided. This avoids relying on JSON serialization to strip undefined and produces clearer requests.

-    const table = {
-      rows: this.rows,
-      columns: this.columns,
-      location: {
-        index: this.index,
-        tabId: this.tabId,
-      },
-    };
+    if (!Number.isInteger(this.rows) || this.rows < 1) {
+      throw new Error("Rows must be a positive integer");
+    }
+    if (!Number.isInteger(this.columns) || this.columns < 1) {
+      throw new Error("Columns must be a positive integer");
+    }
+    if (!Number.isInteger(this.index) || this.index < 1) {
+      throw new Error("Index must be a positive integer (1-based)");
+    }
+    const location = { index: this.index };
+    if (this.tabId) location.tabId = this.tabId;
+    const table = {
+      rows: this.rows,
+      columns: this.columns,
+      location,
+    };

53-56: insert-table action: methods verified and optional enhancements suggested

  • Verified that insertTable(documentId, table) and getDocument(documentId, includeTabsContent = false) are defined in components/google_docs/google_docs.app.mjs as expected.
  • Consider enriching the export summary to surface table dimensions, insertion index, and tab context. For example:
-    $.export("$summary", "Successfully inserted table");
+    $.export(
+      "$summary",
+      `Inserted ${this.rows}×${this.columns} table at index ${this.index}` +
+      (this.tabId ? ` in tab ${this.tabId}` : "")
+    );
  • Optional architecture tweak: introduce a boolean returnUpdatedDocument option (default true) on the action. When set to false, return the raw batchUpdate response instead of fetching the full document—this can reduce latency for callers that don’t need the updated content.
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

💡 Knowledge Base configuration:

  • MCP integration is disabled by default for public repositories
  • Jira integration is disabled by default for public repositories
  • Linear integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between bd527ae and e130a20.

⛔ Files ignored due to path filters (1)
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (16)
  • components/google_docs/actions/append-image/append-image.mjs (1 hunks)
  • components/google_docs/actions/append-text/append-text.mjs (1 hunks)
  • components/google_docs/actions/create-document-from-template/create-document-from-template.mjs (1 hunks)
  • components/google_docs/actions/create-document/create-document.mjs (1 hunks)
  • components/google_docs/actions/find-document/find-document.mjs (1 hunks)
  • components/google_docs/actions/get-document/get-document.mjs (1 hunks)
  • components/google_docs/actions/get-tab-content/get-tab-content.mjs (1 hunks)
  • components/google_docs/actions/insert-page-break/insert-page-break.mjs (1 hunks)
  • components/google_docs/actions/insert-table/insert-table.mjs (1 hunks)
  • components/google_docs/actions/insert-text/insert-text.mjs (1 hunks)
  • components/google_docs/actions/replace-image/replace-image.mjs (1 hunks)
  • components/google_docs/actions/replace-text/replace-text.mjs (3 hunks)
  • components/google_docs/google_docs.app.mjs (2 hunks)
  • components/google_docs/package.json (1 hunks)
  • components/google_docs/sources/new-document-created/new-document-created.mjs (1 hunks)
  • components/google_docs/sources/new-or-updated-document/new-or-updated-document.mjs (1 hunks)
🧰 Additional context used
🧬 Code graph analysis (2)
components/google_docs/actions/insert-text/insert-text.mjs (1)
components/google_docs/actions/replace-text/replace-text.mjs (1)
  • text (53-64)
components/google_docs/google_docs.app.mjs (2)
components/google_docs/actions/get-tab-content/get-tab-content.mjs (1)
  • tabs (33-33)
components/google_docs/actions/insert-table/insert-table.mjs (1)
  • table (45-52)
🔇 Additional comments (14)
components/google_docs/package.json (1)

3-3: Semver bump looks appropriate for new actions and app API additions.

Moving from 0.4.4 → 0.5.0 matches the scope (new actions + app methods). No other changes spotted.

components/google_docs/sources/new-document-created/new-document-created.mjs (1)

8-8: Version bump acknowledged; no functional changes detected.

The source logic remains unchanged; version 0.0.4 → 0.0.5 aligns with the package release.

components/google_docs/actions/append-text/append-text.mjs (1)

7-7: Version bump only — OK.

No behavior change; version aligns with the package update.

components/google_docs/actions/replace-image/replace-image.mjs (1)

7-7: Version bump only — OK.

No behavior change detected.

components/google_docs/actions/get-document/get-document.mjs (1)

8-8: Version bump acknowledged.

Matches the coordinated release; no issues with the metadata.

components/google_docs/actions/create-document-from-template/create-document-from-template.mjs (1)

16-16: Version bump only — looks good.

No runtime or API surface changes beyond the version update.

components/google_docs/actions/append-image/append-image.mjs (1)

7-7: Version bump acknowledged.

No functional changes in this action. Safe to release.

components/google_docs/actions/find-document/find-document.mjs (1)

17-17: Version increment approved.

Behavior and public API remain unchanged.

components/google_docs/sources/new-or-updated-document/new-or-updated-document.mjs (1)

12-12: Source version bump is fine.

No logic changes; existing behavior is preserved.

components/google_docs/actions/create-document/create-document.mjs (1)

7-7: Version bump only — looks good

The version update to 0.1.7 aligns with the broader package/version cadence in this PR.

components/google_docs/actions/replace-text/replace-text.mjs (1)

38-50: New tabIds prop is consistent with Docs Tabs support

Adding a multi-select tabIds prop to target specific tabs for replacement is aligned with the ReplaceAllTextRequest tabsCriteria capability. This expands functionality without breaking the existing API surface.

Docs confirm ReplaceAllTextRequest supports tabsCriteria with a list of tabIds. (developers.google.com)

components/google_docs/actions/insert-table/insert-table.mjs (3)

1-1: Import path and app wiring look correct.

The relative import to the app module is accurate for this directory layout.


6-6: Confirmed documentation URL and feature support

No changes required here.


34-42: Verified: tabId propDefinition contract matches

Confirmed that in components/google_docs/google_docs.app.mjs (lines 37–49), the tabId entry under propDefinitions defines an options function with signature async ({ documentId }) => { … }, so the transform (c) => ({ documentId: c.docId }) correctly satisfies the expected { documentId } input.

@vunguyenhung vunguyenhung merged commit e45fc90 into master Aug 27, 2025
10 checks passed
@vunguyenhung vunguyenhung deleted the issue-18045 branch August 27, 2025 01:33
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.

[ACTION] Create/Update/Read Tabs and Insert Tables, Page Breaks, Replace/Insert Text
3 participants