feat(integrations): add OCI Object Storage - #7413
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
Greptile SummaryAdds an OCI Object Storage integration backed by Oracle’s S3 Compatibility API, including customer-managed credentials and six workflow operations.
Confidence Score: 5/5The PR appears safe to merge based on the reviewed changes, with no concrete blocking or independently actionable non-blocking issue established. The integration keeps credential resolution server-controlled, validates and encrypts provider-specific secrets, confines requests to fixed OCI endpoints, bounds transfer paths, and aligns its block, tools, selectors, contracts, and generated metadata.
|
| Filename | Overview |
|---|---|
| apps/sim/lib/internal/oci-object-storage/client.ts | Adds the fixed-endpoint S3-compatible client, OCI response normalization, bounded bucket listings, retry configuration, and client cleanup. |
| apps/sim/lib/internal/oci-object-storage/operations.ts | Implements the six provider operations with file authorization, transfer limits, download preflight, streaming bounds, and normalized outputs. |
| apps/sim/lib/credentials/oci-object-storage-service-account.ts | Adds OCI credential normalization, live verification, encrypted-secret parsing, strict provider binding, and display identity handling. |
| apps/sim/lib/credentials/orchestration/index.ts | Extends credential rotation orchestration to rebuild and atomically replace OCI service-account secrets. |
| apps/sim/blocks/blocks/oci_object_storage.ts | Defines the OCI workflow block, six operations, selectors, parameter mapping, outputs, templates, and skills. |
| apps/sim/lib/selectors/server/providers/oci-object-storage.ts | Adds authorized bucket and object selectors backed by the provider-local OCI client. |
| apps/sim/app/workspace/[workspaceId]/integrations/components/connect-service-account-modal/connect-service-account-modal.tsx | Adds the OCI Customer Secret Key connection and reconnection form with required-field validation and secret-safe error handling. |
Sequence Diagram
sequenceDiagram
participant User as Workflow user
participant Exec as Tool execution boundary
participant Cred as Credential service
participant OCI as OCI S3-compatible endpoint
participant Files as Sim file storage
User->>Exec: Invoke OCI operation with credential reference
Exec->>Cred: Resolve authorized encrypted credential
Cred-->>Exec: Access key, secret, namespace, region
Exec->>OCI: Signed S3-compatible request
alt Upload from Sim file
Exec->>Files: Authorize and read bounded file
Files-->>Exec: File bytes and content type
Exec->>OCI: PutObject
else Download object
Exec->>OCI: HeadObject preflight
OCI-->>Exec: Size and metadata
Exec->>OCI: GetObject
OCI-->>Exec: Bounded object stream
Exec-->>User: Canonical file output and metadata
else List, inspect, or delete
OCI-->>Exec: Normalized operation result
end
Reviews (1): Last reviewed commit: "feat(integrations): add OCI Object Stora..." | Re-trigger Greptile
|
@BillLeoutsakosvl346 I have started the AI code review. It will take a few minutes to complete. |
There was a problem hiding this comment.
2 issues found across 64 files
Confidence score: 4/5
apps/sim/lib/internal/oci-object-storage/execute-tool.tslogs terminal provider or credential failures atwarn, which can hide actionable OCI operation failures at normal log thresholds; log these failures aterror.apps/sim/lib/internal/oci-object-storage/operations.test.tsdoes not track_attempts, so the upload test could pass despite unintended retries and fail to catch extra writes; record the attempt count and assert it is1.
Prompt for AI agents (unresolved issues)
Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.
<file name="apps/sim/lib/internal/oci-object-storage/operations.test.ts">
<violation number="1" location="apps/sim/lib/internal/oci-object-storage/operations.test.ts:33">
P2: The upload test cannot detect a regression from one write attempt to three retries because this mock ignores `_attempts`. Record the attempt count and assert `1` for the upload path.</violation>
</file>
<file name="apps/sim/lib/internal/oci-object-storage/execute-tool.ts">
<violation number="1" location="apps/sim/lib/internal/oci-object-storage/execute-tool.ts:95">
P2: Every provider or credential failure caught here stops the operation but is logged at `warn`, hiding actionable failures at normal log thresholds. Log terminal OCI operation failures at `error`.
(Based on your team's feedback about operational log severity.)</violation>
</file>
| } catch (error) { | ||
| request.signal?.throwIfAborted() | ||
| const normalized = normalizeOciObjectStorageError(error) | ||
| logger.warn('OCI Object Storage operation failed', { |
There was a problem hiding this comment.
P2: Every provider or credential failure caught here stops the operation but is logged at warn, hiding actionable failures at normal log thresholds. Log terminal OCI operation failures at error.
(Based on your team's feedback about operational log severity.)
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At apps/sim/lib/internal/oci-object-storage/execute-tool.ts, line 95:
<comment>Every provider or credential failure caught here stops the operation but is logged at `warn`, hiding actionable failures at normal log thresholds. Log terminal OCI operation failures at `error`.
(Based on your team's feedback about operational log severity.) </comment>
<file context>
@@ -0,0 +1,105 @@
+ } catch (error) {
+ request.signal?.throwIfAborted()
+ const normalized = normalizeOciObjectStorageError(error)
+ logger.warn('OCI Object Storage operation failed', {
+ requestId: request.requestId,
+ toolId: request.toolId,
</file context>
|
Addressed the Cubic review in
Validation after the changes:
Live OCI smoke testing remains unavailable because no disposable OCI tenant, bucket, or Customer Secret Key is available; the PR does not claim live verification. |
|
@cubic please re-review the latest commit. |
@BillLeoutsakosvl346 Incremental reviews are turned off for this repository. Comment |
|
@cubic review |
@BillLeoutsakosvl346 I have started the AI code review. It will take a few minutes to complete. |
…ject-storage-integration # Conflicts: # apps/sim/tools/generated/tool-metadata.ts
|
Final head is now |
|
@cubic review |
@BillLeoutsakosvl346 I have started the AI code review. It will take a few minutes to complete. |
Summary
Adds a customer-connected OCI Object Storage block backed by Oracle's S3 Compatibility API and the existing AWS S3 SDK dependency.
oci-object-storage-service-accountcredentials for Customer Secret Key access, storing encrypted access key, secret key, namespace, and region values.OCI setup and permissions
Customers need an OCI Customer Secret Key, Object Storage namespace, and supported commercial OC1 region. The minimum intended IAM permissions are:
BUCKET_INSPECTOBJECT_INSPECTOBJECT_READOBJECT_CREATE/OBJECT_OVERWRITEOBJECT_DELETEOracle references: S3 Compatibility API, Customer Secret Keys, and Object Storage IAM policies.
Validation
Passed after reconciling with the latest
origin/staging:git diff --checkreports only the docs generator's existing output style in the new generated MDX file: one JSX trailing space and its terminal blank line. The docs generator consistency check passes.Live smoke status
Not run: no disposable OCI tenant, bucket, and Customer Secret Key were available. This PR is being opened at the request of the author without claiming live OCI validation. A maintainer with a disposable OCI setup should run ListBuckets → ListObjects → PutObject → HeadObject → GetObject/byte-compare → DeleteObject → verify absence before treating the integration as production-verified.
Deferred from v1
Bucket administration, copy, multipart upload, pre-authenticated requests, versioning, and triggers are intentionally deferred. Zero-byte canonical file downloads remain subject to the shared
FileToolProcessorbehavior rather than adding a provider-specific bypass.