Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
16 commits
Select commit Hold shift + click to select a range
c9ffb95
ci(kilo-app): add mobile test job and gate release on validation
iscekic Jul 23, 2026
695837e
feat(cloud-agent-sdk): extract packages/cloud-agent-sdk and migrate w…
iscekic Jul 23, 2026
1c6fdbd
refactor(cloud-agent-sdk): own SendMessagePayload in the package and …
iscekic Jul 23, 2026
3037555
refactor(mobile): resolve cloud-agent-sdk from the package and drop t…
iscekic Jul 23, 2026
266117d
feat(trpc): expose client-safe MobileRouter and migrate mobile consumers
iscekic Jul 23, 2026
1ab5a3a
ci: make mobile change selection dependency-aware
iscekic Jul 23, 2026
eb4ab9f
ci: select comparison SHA by GitHub event to avoid empty matrix on main
iscekic Jul 23, 2026
60db7f1
test(mobile): add mounted provider/TanStack test harness
iscekic Jul 23, 2026
80cc5dc
perf(mobile): import used JetBrains weights only and drop the unused …
iscekic Jul 23, 2026
7119bd1
chore(mobile): apply repo formatting to metro.config.js
iscekic Jul 23, 2026
5db889a
test(mobile): make waitFor yield to macrotasks so query settle is det…
iscekic Jul 23, 2026
f41adc5
Merge remote-tracking branch 'origin/main' into feature/mobile-audit-…
iscekic Jul 27, 2026
23deaf4
docs(mobile): record iOS 26.5 scheme-prompt wording blocker in workfl…
iscekic Jul 27, 2026
12228a2
docs(mobile): record role-agent payload-size kill in workflow learnings
iscekic Jul 27, 2026
a8ac9e1
docs(mobile): record fake-llm deterministic cloud-turn recipe in work…
iscekic Jul 27, 2026
4c2d019
Merge remote-tracking branch 'origin/main' into feature/mobile-audit-…
iscekic Jul 27, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 39 additions & 0 deletions .github/workflows/kilo-app-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,12 @@ on:
- 'apps/mobile/**'
- 'packages/trpc/**'
- 'apps/web/src/routers/**'
- 'packages/app-shared/**'
- 'packages/kilo-chat/**'
- 'packages/kilo-chat-hooks/**'
- 'packages/event-service/**'
- 'packages/notifications/**'
- 'packages/cloud-agent-sdk/**'
- 'pnpm-lock.yaml'
- '.github/workflows/kilo-app-ci.yml'
pull_request:
Expand All @@ -15,8 +21,15 @@ on:
- 'apps/mobile/**'
- 'packages/trpc/**'
- 'apps/web/src/routers/**'
- 'packages/app-shared/**'
- 'packages/kilo-chat/**'
- 'packages/kilo-chat-hooks/**'
- 'packages/event-service/**'
- 'packages/notifications/**'
- 'packages/cloud-agent-sdk/**'
- 'pnpm-lock.yaml'
- '.github/workflows/kilo-app-ci.yml'
workflow_call:

concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
Expand Down Expand Up @@ -128,3 +141,29 @@ jobs:

- name: Check unused exports
run: pnpm --filter kilo-app run check:unused

test:
runs-on: ${{ vars.RUNNER_DEFAULT_LABEL || 'ubuntu-latest' }}
timeout-minutes: 15
steps:
- uses: useblacksmith/checkout@41cdeedae8edb2e684ba22896a5fd2a3cb85db6b # v1
with:
lfs: true

- name: Setup pnpm
uses: pnpm/action-setup@fc06bc1257f339d1d5d8b3a19a8cae5388b55320 # v4.4.0

- name: Setup Node
uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0
with:
node-version-file: '.nvmrc'
cache: 'pnpm'

- name: Install dependencies
run: pnpm install --frozen-lockfile

- name: Build trpc types
run: pnpm --filter @kilocode/trpc run build

- name: Test
run: pnpm --filter kilo-app run test
9 changes: 6 additions & 3 deletions .github/workflows/kilo-app-release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -37,8 +37,8 @@ jobs:

echo "Last release tag: $LAST_TAG"

# Check for changes in kilo-app or trpc since that tag
CHANGES=$(git diff --name-only "$LAST_TAG"..HEAD -- apps/mobile/ packages/trpc/ pnpm-lock.yaml)
# Check for changes in kilo-app or its direct workspace:* inputs since that tag
CHANGES=$(git diff --name-only "$LAST_TAG"..HEAD -- apps/mobile/ packages/trpc/ packages/app-shared/ packages/kilo-chat/ packages/kilo-chat-hooks/ packages/event-service/ packages/notifications/ packages/cloud-agent-sdk/ pnpm-lock.yaml)

if [ -z "$CHANGES" ]; then
echo "No changes since $LAST_TAG — skipping build"
Expand All @@ -49,8 +49,11 @@ jobs:
echo "should_build=true" >> "$GITHUB_OUTPUT"
fi

validate:
uses: ./.github/workflows/kilo-app-ci.yml

build-and-submit:
needs: check-changes
needs: [check-changes, validate]
if: needs.check-changes.outputs.should_build == 'true' && github.ref == 'refs/heads/main'
runs-on: ${{ vars.RUNNER_DEFAULT_LABEL || 'ubuntu-latest' }}
timeout-minutes: 60
Expand Down
11 changes: 11 additions & 0 deletions .oxlintrc.json
Original file line number Diff line number Diff line change
Expand Up @@ -210,6 +210,17 @@
"@typescript-eslint/no-unsafe-call": "off",
"@typescript-eslint/no-unsafe-member-access": "off"
}
},
{
"files": ["packages/cloud-agent-sdk/src/**/*.ts"],
"rules": {
"@typescript-eslint/no-base-to-string": "off",
"@typescript-eslint/no-empty-object-type": "off",
"@typescript-eslint/no-redundant-type-constituents": "off",
"@typescript-eslint/no-unsafe-assignment": "off",
"@typescript-eslint/no-unsafe-return": "off",
"@typescript-eslint/unbound-method": "off"
}
}
]
}
18 changes: 18 additions & 0 deletions apps/mobile/.kilo/WORKFLOW_LEARNINGS.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,24 @@ Then wait event-driven with an `until grep -q EXITCODE= "$LOG"` loop that also b

## Orchestrator

### iOS 26.5 scheme-confirmation prompt wording breaks login.sh on a fresh install

- Symptom: on a freshly installed dev client, `apps/mobile/e2e/login.sh` fails its settle assertion with the simulator stuck on the home screen under a SpringBoard dialog `Open in "Kilo"?` (Cancel/Open).
- Cause: iOS 26.5 reworded the custom-scheme confirmation from `Open this page in "Kilo"?` to `Open in "Kilo"?`. The matchers in `e2e/flows/open-app.yaml` and `e2e/flows/settle-app.yaml` only know the old text, so the bounded optional-prompt tap never fires. The dialog appears exactly once per install (first external open of the `exp+kilo-app` scheme); iOS does not re-prompt afterwards.
- Fix: tap `Open` once yourself (a two-line temp Maestro flow with `appId: host.springboard` and `tapOn: { text: 'Open', optional: true }`, or any equivalent), then re-run `login.sh` — it is idempotent and completes. Do not reinstall afterwards: a reinstall re-arms the one-time prompt. If the flows are ever updated, add `Open in "Kilo"\?` as an alternative in the same regexes rather than replacing the old text, so older iOS versions keep working.

### Role-agent kilo run dies silently when the session payload exceeds the pruning limit

- Symptom: a dispatched `kilo run` role agent (observed: mobile-e2e-verifier) exits mid-task with no error and no final report; its transcript just stops, often right after a large tool output.
- Cause: the agent's session payload grows past the pruning limit (`opencode.log` shows `payload still large after pruning ... size=3042931` at the kill time) and the harness terminates the run. E2E agents inflate the payload fast: full `maestro hierarchy` dumps (~80 KB), full `pnpm dev:capture mobile` panes with the QR art, repeated echo of the same long command output, screenshots read into context.
- Fix: steer the redispatch with an explicit output-discipline constraint: every shell command ends in a hard cap (`| tail -c 1500` / `| tail -5`), hierarchies and captures go to files and only greps/counts are printed, screenshots are not re-read into context, docs are inlined in the handoff instead of re-read, and the final report has a line cap. A round-3 dispatch with these rules survives long enough to finish; rounds 1-2 without them died at ~4-10 minutes.

### Deterministic cloud-agent turns via fake-llm (real-provider turns stall E2E)

- Symptom: the E2E verifier starts an app-driven cloud-agent session and the turn never completes: "Considering next steps" for 9+ minutes, or `terminal-failed`, while real-provider routing burns credits and time. Round after round cannot score the turn-based acceptance criteria.
- Cause: `KILO_OPENROUTER_BASE` in `services/cloud-agent-next/.dev.vars` points at nextjs (`http://localhost:<nextjs-port>/api`), i.e. real model providers — non-deterministic and slow in dev. Three environment traps compound it: (1) `e2e/login.sh` signs out first, so a verifier that "re-runs login" mid-task strands the app on the login screen (never let it); (2) a hermetic `platform_integrations` row with a made-up repo (e.g. `kilo-stub/...`) passes the composer repo picker but fails dispatch with `GitHub token or active app installation required` — the cached repo must belong to a real, locally mintable installation (e.g. `iscekic/getel`, installation `144771093`); (3) fake-llm stock only knows model `fake-deterministic`, so worker-side `models/validate` and the sandbox CLI's catalog lookup both reject the app's `kilo-auto/*` selection (`model_missing`, classified `managed_model_configuration`).
- Fix: route the turn to fake-llm and re-apply this harness patch set (deliberately not committed — harness-local): set `KILO_OPENROUTER_BASE=http://localhost:<8811+portOffset>/api` in `services/cloud-agent-next/.dev.vars` and `pnpm dev:restart cloud-agent-next`; in `services/cloud-agent-next/test/e2e/fake-llm-server.ts` accept `kilo-auto/*` + `kilo/*` in `handleModelValidation` AND add catalog entries for `kilo-auto/frontier|balanced|efficient` (clone `FAKE_MODEL`, non-zero pricing e.g. `0.000003`/`0.000015` so cost computes non-zero); `pnpm dev:restart fake-llm`. Prompt `__fake__:echo:<text>` in the composer — the assistant replies `<text>` with usage, the session auto-titles `<text>`, and the title-model call is handled by design. A cloud turn then completes in ~30s with cost pill + model label visible. Revert the patch, restore `.dev.vars`, and delete the fixture rows when done.

### Waiting on the EXITCODE marker false-triggers mid-run

**Symptom.** An `until grep -q EXITCODE= "$LOG"` wait loop (Planner section, first entry) reports the role agent finished while it is still running: the string `EXITCODE=` already appears in the log because the agent read `WORKFLOW_LEARNINGS.md` or a handoff that documents the pattern, and the TUI echoes it into the capture.
Expand Down
36 changes: 19 additions & 17 deletions apps/mobile/metro.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,37 +4,39 @@ const { getSentryExpoConfig } = require('@sentry/react-native/metro');
const { withNativewind } = require('nativewind/metro');

const monorepoRoot = path.resolve(__dirname, '../..');
const webSrc = path.resolve(monorepoRoot, 'apps', 'web', 'src');
const cloudAgentSdkPath = path.resolve(webSrc, 'lib', 'cloud-agent-sdk');

/** @type {import('expo/metro-config').MetroConfig} */
const config = getSentryExpoConfig(__dirname);

// Allow Metro to resolve workspace files and pnpm's real package paths
config.watchFolders = [...new Set([...(config.watchFolders || []), monorepoRoot])];

// Let SDK dependencies (jotai, zod, etc.) resolve from the monorepo root node_modules
// Let workspace package dependencies (jotai, zod, etc.) resolve from the monorepo root node_modules
config.resolver.nodeModulesPaths = [
...(config.resolver.nodeModulesPaths || []),
path.resolve(monorepoRoot, 'node_modules'),
];

// Allow kilo-app code to `import { ... } from 'cloud-agent-sdk'`
config.resolver.extraNodeModules = {
...config.resolver.extraNodeModules,
'cloud-agent-sdk': cloudAgentSdkPath,
};

// Remap `@/` imports to the web app's src/ when originating from cloud-agent-sdk
// Drop the unused Material Symbols font chain from the bundle.
//
// `expo-router`'s <Tabs> statically pulls `expo-symbols` (via withLayoutContext ->
// native-tabs -> materialIconConverter.android). `expo-symbols` require()s all 7
// Android Material Symbols weights (~6.7MB) at module scope, through both the
// `@expo-google-fonts/material-symbols` barrel (SymbolView) and the per-weight
// subpaths (android/weights/*). This app renders lucide icons and never renders
// <NativeTabs>/<SymbolView>, so those fonts are loaded-but-unused: the `.ttf`
// values are only consumed lazily inside SymbolView (via useFonts), which is
// never mounted. Resolving these specifiers to an empty module removes the font
// bytes while leaving the never-rendered code paths harmlessly referencing
// `undefined`. iOS uses native SF Symbols and never reaches this chain.
const MATERIAL_SYMBOLS_PKG = '@expo-google-fonts/material-symbols';
const upstreamResolveRequest = config.resolver.resolveRequest;
config.resolver.resolveRequest = (context, moduleName, platform) => {
if (
moduleName.startsWith('@/') &&
context.originModulePath.includes('src/lib/cloud-agent-sdk/')
) {
const remapped = path.resolve(webSrc, moduleName.slice(2));
return context.resolveRequest(context, remapped, platform);
if (moduleName === MATERIAL_SYMBOLS_PKG || moduleName.startsWith(`${MATERIAL_SYMBOLS_PKG}/`)) {
return { type: 'empty' };
}
return context.resolveRequest(context, moduleName, platform);
const resolve = upstreamResolveRequest || context.resolveRequest;
return resolve(context, moduleName, platform);
};

module.exports = withNativewind(config, {
Expand Down
3 changes: 3 additions & 0 deletions apps/mobile/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
"@expo-google-fonts/jetbrains-mono": "0.4.1",
"@expo/react-native-action-sheet": "4.1.1",
"@kilocode/app-shared": "workspace:*",
"@kilocode/cloud-agent-sdk": "workspace:*",
"@kilocode/event-service": "workspace:*",
"@kilocode/kilo-chat": "workspace:*",
"@kilocode/kilo-chat-hooks": "workspace:*",
Expand Down Expand Up @@ -100,9 +101,11 @@
"devDependencies": {
"@sentry/cli": "catalog:",
"@types/react": "19.2.14",
"@types/react-test-renderer": "^19.1.0",
"@typescript/native-preview": "catalog:",
"eslint-plugin-sonarjs": "4.0.3",
"knip": "6.0.6",
"react-test-renderer": "^19.2.7",
"typescript": "catalog:",
"vitest": "catalog:"
},
Expand Down
2 changes: 1 addition & 1 deletion apps/mobile/src/app/(app)/agent-chat/[session-id].tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { type KiloSessionId } from 'cloud-agent-sdk';
import { type KiloSessionId } from '@kilocode/cloud-agent-sdk';
import { type Href, useLocalSearchParams, useRouter } from 'expo-router';
import { useQuery } from '@tanstack/react-query';
import { View } from 'react-native';
Expand Down
10 changes: 6 additions & 4 deletions apps/mobile/src/app/_layout.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,12 @@ import '@/lib/cloud-agent-runtime';

import { installE2EWebSocketLatency } from '@/lib/e2e-ws-latency';

import {
JetBrainsMono_500Medium,
JetBrainsMono_600SemiBold,
} from '@expo-google-fonts/jetbrains-mono';
// Deep imports of only the two weights this app renders. The package barrel
// (`@expo-google-fonts/jetbrains-mono`) require()s all 16 weights at module
// scope and Metro does not tree-shake, so importing it ships ~1.63MB of unused
// font bytes. The per-weight subpaths pull only the two used `.ttf` files.
import { JetBrainsMono_500Medium } from '@expo-google-fonts/jetbrains-mono/500Medium';
import { JetBrainsMono_600SemiBold } from '@expo-google-fonts/jetbrains-mono/600SemiBold';
import { ThemeProvider } from '@react-navigation/native';
import * as Sentry from '@sentry/react-native';
import { isRunningInExpoGo } from 'expo';
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { describe, expect, it } from 'vitest';

import { type SlashCommandInfo } from 'cloud-agent-sdk';
import { type RemoteCommandState } from 'cloud-agent-sdk/remote-command-catalog';
import { type SlashCommandInfo } from '@kilocode/cloud-agent-sdk';
import { type RemoteCommandState } from '@kilocode/cloud-agent-sdk/remote-command-catalog';

import {
createMobileSlashCommandList,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { describe, expect, it } from 'vitest';

import { type SlashCommandInfo } from 'cloud-agent-sdk';
import { type SlashCommandInfo } from '@kilocode/cloud-agent-sdk';

import {
LOCAL_NEW_SLASH_COMMAND,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { describe, expect, it } from 'vitest';

import { type SlashCommandInfo } from 'cloud-agent-sdk';
import { type RemoteCommandState } from 'cloud-agent-sdk/remote-command-catalog';
import { type SlashCommandInfo } from '@kilocode/cloud-agent-sdk';
import { type RemoteCommandState } from '@kilocode/cloud-agent-sdk/remote-command-catalog';

import {
createMobileSlashCommandList,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { type ActiveSessionType, type SlashCommandInfo } from 'cloud-agent-sdk';
import { type RemoteCommandState } from 'cloud-agent-sdk/remote-command-catalog';
import { type ActiveSessionType, type SlashCommandInfo } from '@kilocode/cloud-agent-sdk';
import { type RemoteCommandState } from '@kilocode/cloud-agent-sdk/remote-command-catalog';

/**
* Local reserved /new command — surfaced only for remote sessions, never
Expand Down
4 changes: 2 additions & 2 deletions apps/mobile/src/components/agents/chat-composer.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@
*/
import * as Haptics from 'expo-haptics';
import { useActionSheet } from '@expo/react-native-action-sheet';
import { type SlashCommandInfo } from 'cloud-agent-sdk';
import { type RemoteCommandState } from 'cloud-agent-sdk/remote-command-catalog';
import { type SlashCommandInfo } from '@kilocode/cloud-agent-sdk';
import { type RemoteCommandState } from '@kilocode/cloud-agent-sdk/remote-command-catalog';
import { useCallback, useMemo, useRef, useState } from 'react';
import {
Keyboard,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
/* eslint-disable max-lines -- test file with many fixtures */
import { type KiloSessionId, type Part, type StoredMessage, type ToolPart } from 'cloud-agent-sdk';
import {
type KiloSessionId,
type Part,
type StoredMessage,
type ToolPart,
} from '@kilocode/cloud-agent-sdk';
import { describe, expect, it } from 'vitest';

import {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,9 @@
import { type KiloSessionId, type Part, type StoredMessage, type ToolPart } from 'cloud-agent-sdk';
import {
type KiloSessionId,
type Part,
type StoredMessage,
type ToolPart,
} from '@kilocode/cloud-agent-sdk';

import { computeStatus } from './compute-status';
import { isToolPart } from './part-types';
Expand Down
7 changes: 6 additions & 1 deletion apps/mobile/src/components/agents/child-session-section.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,12 @@ import { type ReactNode } from 'react';
import { Pressable, View } from 'react-native';
import { Bot, ChevronRight, Loader2 } from 'lucide-react-native';
import Animated, { LinearTransition } from 'react-native-reanimated';
import { type KiloSessionId, type Part, type StoredMessage, type ToolPart } from 'cloud-agent-sdk';
import {
type KiloSessionId,
type Part,
type StoredMessage,
type ToolPart,
} from '@kilocode/cloud-agent-sdk';

import { SpinningIcon } from '@/components/ui/spinning-icon';
import { Text } from '@/components/ui/text';
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { type ChildSessionHydrationState } from 'cloud-agent-sdk';
import { type ChildSessionHydrationState } from '@kilocode/cloud-agent-sdk';

type ChildSessionSheetState = 'loading' | 'empty' | 'error' | 'content';

Expand Down
2 changes: 1 addition & 1 deletion apps/mobile/src/components/agents/child-session-sheet.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { type ReactNode } from 'react';
import { Modal, View } from 'react-native';
import { useSafeAreaInsets } from 'react-native-safe-area-context';
import { type ChildSessionHydrationState, type StoredMessage } from 'cloud-agent-sdk';
import { type ChildSessionHydrationState, type StoredMessage } from '@kilocode/cloud-agent-sdk';

import { EmptyState } from '@/components/empty-state';
import { QueryError } from '@/components/query-error';
Expand Down
2 changes: 1 addition & 1 deletion apps/mobile/src/components/agents/compute-status.test.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { type ReasoningPart, type TextPart, type ToolPart } from 'cloud-agent-sdk';
import { type ReasoningPart, type TextPart, type ToolPart } from '@kilocode/cloud-agent-sdk';
import { describe, expect, it } from 'vitest';

import { computeStatus, SNAPSHOT_PROGRESS_STATUS } from './compute-status';
Expand Down
2 changes: 1 addition & 1 deletion apps/mobile/src/components/agents/compute-status.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { type Part } from 'cloud-agent-sdk';
import { type Part } from '@kilocode/cloud-agent-sdk';

import { isSnapshotProgressPart } from './part-types';

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { type KiloSessionId } from 'cloud-agent-sdk';
import { type KiloSessionId } from '@kilocode/cloud-agent-sdk';
import { describe, expect, it, vi } from 'vitest';

import { createAndNavigateAgentSession } from '@/components/agents/create-and-navigate-agent-session';
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { type KiloSessionId } from 'cloud-agent-sdk';
import { type KiloSessionId } from '@kilocode/cloud-agent-sdk';

import { createRemoteSessionWithFeedback } from '@/components/agents/create-remote-session-with-feedback';
import { replaceWithAgentSession } from '@/components/agents/session-detail-routes';
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { type KiloSessionId } from 'cloud-agent-sdk';
import { type KiloSessionId } from '@kilocode/cloud-agent-sdk';
import { describe, expect, it, vi } from 'vitest';

import {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { type KiloSessionId } from 'cloud-agent-sdk';
import { type KiloSessionId } from '@kilocode/cloud-agent-sdk';

export const CREATE_REMOTE_SESSION_FALLBACK_MESSAGE = 'Failed to create remote session';

Expand Down
2 changes: 1 addition & 1 deletion apps/mobile/src/components/agents/file-part-renderer.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { View } from 'react-native';
import { File as FileIcon } from 'lucide-react-native';
import { type FilePart } from 'cloud-agent-sdk';
import { type FilePart } from '@kilocode/cloud-agent-sdk';

import { Image } from '@/components/ui/image';
import { Text } from '@/components/ui/text';
Expand Down
2 changes: 1 addition & 1 deletion apps/mobile/src/components/agents/message-bubble.test.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { type MessageDeliveryState, type StoredMessage } from 'cloud-agent-sdk';
import { type MessageDeliveryState, type StoredMessage } from '@kilocode/cloud-agent-sdk';
import { describe, expect, it, vi } from 'vitest';

vi.mock('react-native', () => ({
Expand Down
2 changes: 1 addition & 1 deletion apps/mobile/src/components/agents/message-bubble.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { type MessageDeliveryState, type StoredMessage } from 'cloud-agent-sdk';
import { type MessageDeliveryState, type StoredMessage } from '@kilocode/cloud-agent-sdk';
import { Clock } from 'lucide-react-native';
import { type AccessibilityActionEvent, Pressable, View } from 'react-native';
import Animated, { FadeIn, FadeOut } from 'react-native-reanimated';
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { type StoredMessage } from 'cloud-agent-sdk';
import { type StoredMessage } from '@kilocode/cloud-agent-sdk';

import { type SessionModelOption } from '@/lib/hooks/use-session-model-options';

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import {
type StepFinishPart,
type StoredMessage,
type UserMessage,
} from 'cloud-agent-sdk';
} from '@kilocode/cloud-agent-sdk';

import { type SessionModelOption } from '@/lib/hooks/use-session-model-options';

Expand Down
Loading
Loading