Skip to content

feat(mobile): list and invoke skills in the slash command composer - #6656

Merged
iscekic merged 8 commits into
mainfrom
kwf/app-slash-mention-skills-74da
Sep 26, 2026
Merged

iscekic merged 8 commits into
mainfrom
kwf/app-slash-mention-skills-74da

Conversation

@iscekic

@iscekic iscekic commented Sep 23, 2026

Copy link
Copy Markdown
Collaborator

Changelog for users

  • Typing / in the mobile chat composer now lists the session's skills next to the commands.
  • A skill row carries a Skill badge, so it reads as a skill rather than a plain command.
  • Selecting a skill row invokes that skill in the session, exactly like selecting a command.
  • Skill rows are never silently hidden when the catalog is full; the wrapper reports how many non-skill rows it dropped.

Changelog for maintainers

  • The cloud-agent wrapper catalog keeps every row the CLI reports; it no longer drops source: 'skill' rows before commands.available.
  • New boundSlashCommandCatalog enforces the shared 256-command and 512 KiB limits, dropping non-skill rows from the end first.
  • A skill row is never truncated: when skill rows alone exceed a bound, the catalog is returned over-limit with dropped: 0.
  • The default catalog generator no longer filters skills, but its snapshot is generated with project config disabled, so session skills come only from the live wrapper catalog.
  • Mobile invocation is unchanged: selecting a row submits /name; the row adds only the Skill badge and a skill-specific accessibility label.
  • agentChat.slashCommands.skillBadge and agentChat.slashCommands.useSkillCommand landed in all 86 locale catalogs, so no copy is pending translation.
  • A test-only fix routes session-state writes through writeSessionValueSync, satisfying the storage-key compliance gate.
  • Review hint: the full-catalog notice is a wrapper log line only; confirm the skill-only over-limit case and the log-only notice satisfy the 'say so' requirement.

E2E proof

The two device scenarios could not be captured on this host: the Android device resource did not start because no Android SDK is installed (e2e-mobile-app/resource.log):

cannot run here: Android SDK not found -- this host cannot start an Android device resource; no platform-tools under: /home/igor_kilocode_ai/Android/sdk,/home/igor_kilocode_ai/Android/Sdk /usr/local/lib/android/sdk,/opt/homebrew/share/android-commandlinetools /home/igor_kilocode_ai/Library/Android/sdk

The live / list capture (skill row with the Skill badge) and the post-invocation session capture are skipped, pending verification on a device host. The backend E2E run passed (checks.log):

E2E backend: rc=0
backend: testing cloud-agent-next
cloud-agent-next passed

The wrapper catalog payload is asserted by services/cloud-agent-next/wrapper/src/kilo-api.test.ts:

[
{ name: 'review', description: 'Review', source: 'command', hints: [] },
{ name: 'kilo-config', description: 'Guide for Kilo configuration', source: 'skill', hints: [] }
]

Owner request

Surface: the mobile app (apps/mobile) and the cloud-agent command catalog (services/cloud-agent-next).

A user cannot mention a skill with the / symbol. The composer must list skills, and picking one must invoke that skill.

Cause, already located: the cloud-agent path deletes skill rows from the catalog.

  • services/cloud-agent-next/wrapper/src/... listCommands() keeps every row except a skill row: if (trimmed && trimmed.source !== 'skill') commands.push(trimmed);.
  • services/cloud-agent-next/scripts/update-default-slash-commands.mjs:194 filters the same rows: .filter(cmd => cmd.source !== 'skill').
  • The remote path already keeps them, on purpose (packages/cloud-agent-sdk/src/remote-command-catalog.ts:6).

The wire shape already carries what a skill row needs: SlashCommandInfo.source is 'command' | 'mcp' | 'skill' (packages/cloud-agent-sdk/src/types.ts:196), and the composer already translates a runtime description from outside its catalogue (apps/mobile/src/components/agents/slash-command-suggestions.tsx).

Requirements:

  • Typing / in the chat composer lists the available skills next to the commands.
  • A skill row is identifiable as a skill, not as a plain command.
  • Picking a skill row invokes that skill in the session.
  • The skill rows follow the existing 256-command and 512 KiB bounds of the catalog. Never truncate a skill row silently; if the catalog is full, say so.
  • Do not un-hide a skill that is unavailable for the session.

Proof: live screenshots of the / list showing a skill row, and of the session after that skill ran. Quote the catalog payload the wrapper sends.

Open findings (not fixed here)

  • not fully verified: some optional checks did not run
  • the '## E2E proof' section says the proof was not captured

@iscekic
iscekic marked this pull request as draft September 23, 2026 19:21
Comment thread services/cloud-agent-next/src/sandbox-session/session-message-queue.test.ts Outdated
Comment thread services/cloud-agent-next/wrapper/src/kilo-api.ts Outdated
@kilo-code-bot

kilo-code-bot Bot commented Sep 23, 2026 •

Copy link
Copy Markdown
Contributor

Code Review Summary

Status: No Issues Found | Recommendation: Merge

Executive Summary

Incremental review of the PR's only new commit (7738d15) found no issues: it renames the catalogFull and catalogOverLimit notices in 17 locale catalogs so each uses its own catalog's word for skill/command, and every changed value matches that catalog's Skill badge and command copy with no placeholder changes. The branch also merged main (33adf76), which is unrelated to this PR and was not reviewed here.

Files Reviewed (17 files)
  • apps/mobile/src/i18n/locales/ckb.json
  • apps/mobile/src/i18n/locales/fil.json
  • apps/mobile/src/i18n/locales/id.json
  • apps/mobile/src/i18n/locales/kk.json
  • apps/mobile/src/i18n/locales/kn.json
  • apps/mobile/src/i18n/locales/mg.json
  • apps/mobile/src/i18n/locales/mn.json
  • apps/mobile/src/i18n/locales/mr.json
  • apps/mobile/src/i18n/locales/my.json
  • apps/mobile/src/i18n/locales/ne.json
  • apps/mobile/src/i18n/locales/or.json
  • apps/mobile/src/i18n/locales/pa.json
  • apps/mobile/src/i18n/locales/ro.json
  • apps/mobile/src/i18n/locales/si.json
  • apps/mobile/src/i18n/locales/te.json
  • apps/mobile/src/i18n/locales/th.json
  • apps/mobile/src/i18n/locales/tr.json
Previous Review Summaries (6 snapshots, latest commit 585564a)

Current summary above is authoritative. Previous snapshots are kept for context only.

Previous review (commit 585564a)

Status: No Issues Found | Recommendation: Merge

Executive Summary

Incremental review of commit 585564a, which only adds the missing availableCommandsCatalogStatus atom to the session-detail queue test mock, found no issues; the added mock matches the SDK's nullable catalog-status atom and keeps the test manager shape consistent with session-detail-content.tsx.

Files Reviewed (1 file)
  • apps/mobile/src/components/agents/session-detail-queue.test.ts

Previous review (commit 474e26d)

Status: No Issues Found | Recommendation: Merge

Executive Summary

Incremental review of commit 474e26d, which carries the wrapper's catalog bound status through to the client, found no new issues; the status propagates across the wrapper, DO cache, SDK, and the mobile notice, with legacy-array and malformed-status fallbacks intact.

Files Reviewed (109 files)
  • apps/mobile/src/components/agents/chat-composer-slash-commands.test.ts
  • apps/mobile/src/components/agents/chat-composer-slash-commands.ts
  • apps/mobile/src/components/agents/chat-composer.tsx
  • apps/mobile/src/components/agents/session-detail-content.tsx
  • apps/mobile/src/i18n/locales/*.json (86 catalogs)
  • packages/cloud-agent-sdk/src/index.ts
  • packages/cloud-agent-sdk/src/normalizer.test.ts
  • packages/cloud-agent-sdk/src/normalizer.ts
  • packages/cloud-agent-sdk/src/schemas.ts
  • packages/cloud-agent-sdk/src/session-manager.ts
  • packages/cloud-agent-sdk/src/types.ts
  • services/cloud-agent-next/src/persistence/CloudAgentSession.ts
  • services/cloud-agent-next/src/session/ingest-handlers/commands-available.test.ts
  • services/cloud-agent-next/src/session/ingest-handlers/commands-available.ts
  • services/cloud-agent-next/src/shared/ingest-frame.ts
  • services/cloud-agent-next/src/shared/protocol.ts
  • services/cloud-agent-next/src/shared/slash-commands.test.ts
  • services/cloud-agent-next/src/shared/slash-commands.ts
  • services/cloud-agent-next/src/websocket/ingest.ts
  • services/cloud-agent-next/src/websocket/stream.test.ts
  • services/cloud-agent-next/src/websocket/stream.ts
  • services/cloud-agent-next/wrapper/src/connection.ts
  • services/cloud-agent-next/wrapper/src/kilo-api.test.ts
  • services/cloud-agent-next/wrapper/src/kilo-api.ts

Previous review (commit c9ae65d)

Status: No Issues Found | Recommendation: Merge

Incremental review of the follow-up commit found only documentation and test-name updates; no new issues were introduced.

Files Reviewed (3 files)
  • packages/cloud-agent-sdk/src/remote-command-catalog.ts
  • apps/mobile/src/components/agents/chat-composer-slash-commands.test.ts
  • apps/mobile/src/i18n/catalog-parity.test.ts

Previous review (commit c9fa9d2)

Status: 2 Issues Found | Recommendation: Address before merge

Overview

Severity Count
CRITICAL 0
WARNING 0
SUGGESTION 2
Issue Details (click to expand)

SUGGESTION

File Line Issue
packages/cloud-agent-sdk/src/remote-command-catalog.ts 9 Comment says the wrapper catalog is bounded by the same 256-command / 512 KiB limits, but it deliberately returns an over-limit catalog when skill rows alone exceed a bound
apps/mobile/src/components/agents/chat-composer-slash-commands.test.ts 87 New test name promises to verify skill listing/invocation but only exercises a verbatim passthrough; it passes on the base branch
Files Reviewed (13 files + 86 locale catalogs)
  • apps/mobile/src/components/agents/chat-composer-slash-commands.test.ts - 1 suggestion
  • apps/mobile/src/components/agents/slash-command-suggestions.tsx - no issues
  • apps/mobile/src/components/agents/slash-command-suggestions.mounted.test.tsx - no issues
  • apps/mobile/src/i18n/catalog-parity.test.ts - no issues
  • apps/mobile/src/i18n/locales/*.json (86 catalogs) - no issues (both keys present exactly once with the {{command}} placeholder in useSkillCommand)
  • packages/cloud-agent-sdk/src/remote-command-catalog.ts - 1 suggestion
  • services/cloud-agent-next/scripts/update-default-slash-commands.mjs - no issues
  • services/cloud-agent-next/src/shared/default-slash-commands.generated.ts - no issues
  • services/cloud-agent-next/src/shared/slash-commands.ts - no issues
  • services/cloud-agent-next/src/shared/slash-commands.test.ts - no issues
  • services/cloud-agent-next/src/session/ingest-handlers/commands-available.test.ts - no issues
  • services/cloud-agent-next/wrapper/src/kilo-api.ts - no issues (the earlier full-catalog notice now covers the skill-only over-limit case via overLimit)
  • services/cloud-agent-next/wrapper/src/kilo-api.test.ts - no issues

Fix these issues in Kilo Cloud

Previous review (commit a2016c7)

Status: No Issues Found | Recommendation: Merge

Files Reviewed (5 files)
  • services/cloud-agent-next/src/sandbox-session/session-message-queue.test.ts
  • services/cloud-agent-next/src/shared/slash-commands.ts
  • services/cloud-agent-next/src/shared/slash-commands.test.ts
  • services/cloud-agent-next/wrapper/src/kilo-api.ts
  • services/cloud-agent-next/wrapper/src/kilo-api.test.ts

Previous review (commit b35c11d)

Status: 2 Issues Found | Recommendation: Address before merge

Executive Summary

A duplicate writeSessionValueSync import in session-message-queue.test.ts breaks compilation of the cloud-agent-next suite, and the wrapper's full-catalog notice is skipped when skill rows alone exceed the catalog bounds.

Overview

Severity Count
CRITICAL 1
WARNING 1
SUGGESTION 0
Issue Details (click to expand)

CRITICAL

File Line Issue
services/cloud-agent-next/src/sandbox-session/session-message-queue.test.ts 121 Duplicate writeSessionValueSync import (duplicate binding; SyntaxError / Duplicate identifier)

WARNING

File Line Issue
services/cloud-agent-next/wrapper/src/kilo-api.ts 529 Skill-only over-limit catalog returned with no notice (dropped is 0, so the log is skipped)
Files Reviewed (100 files)
  • apps/mobile/src/components/agents/chat-composer-slash-commands.test.ts - no issues
  • apps/mobile/src/components/agents/slash-command-suggestions.mounted.test.tsx - no issues
  • apps/mobile/src/components/agents/slash-command-suggestions.tsx - no issues
  • apps/mobile/src/i18n/catalog-parity.test.ts - no issues
  • apps/mobile/src/i18n/locales/*.json (87 catalogs) - no issues (all add useSkillCommand with the {{command}} placeholder and skillBadge)
  • packages/cloud-agent-sdk/src/remote-command-catalog.ts - no issues (comment only)
  • services/cloud-agent-next/scripts/update-default-slash-commands.mjs - no issues
  • services/cloud-agent-next/src/sandbox-session/session-message-queue.test.ts - 1 issue
  • services/cloud-agent-next/src/session/ingest-handlers/commands-available.test.ts - no issues
  • services/cloud-agent-next/src/shared/default-slash-commands.generated.ts - no issues (comment only)
  • services/cloud-agent-next/src/shared/slash-commands.test.ts - no issues
  • services/cloud-agent-next/src/shared/slash-commands.ts - no issues
  • services/cloud-agent-next/wrapper/src/kilo-api.test.ts - no issues
  • services/cloud-agent-next/wrapper/src/kilo-api.ts - 1 issue

Fix these issues in Kilo Cloud


Reviewed by deepseek-v4.1-flash · Input: 0 · Output: 0 · Cached: 0

Review guidance: REVIEW.md from base branch main

@iscekic
iscekic force-pushed the kwf/app-slash-mention-skills-74da branch from 0ab8bee to a2016c7 Compare September 23, 2026 20:12
@iscekic
iscekic marked this pull request as ready for review September 23, 2026 20:26
@iscekic

iscekic commented Sep 23, 2026

Copy link
Copy Markdown
Collaborator Author

kilo-review — independent audit of the published diff.

Status: 2 Issues

File Line Issue
apps/mobile/src/i18n/locales/af.json 2575 This feature slice hand-edits all 86 non-en locale catalogs, which only the translation slice may write.
services/cloud-agent-next/wrapper/src/kilo-api.ts 530 The owner's 'if the catalog is full, say so' is satisfied only by a wrapper log line the mobile user never sees.

@iscekic
iscekic marked this pull request as draft September 23, 2026 20:56
@iscekic

iscekic commented Sep 23, 2026

Copy link
Copy Markdown
Collaborator Author

bot: Accepted. Pushed 3726219 (kwf kwf-fix-review-d567).

What changed:

  • apps/mobile/src/i18n/locales/af.json:2575 — accepted. Non-English copy comes only from the translation slice; the skill-row labels now carry its wording in 26 catalogs (and Sinhala skillBadge), and the catalog-parity test records that ownership instead of claiming the feature slice landed the copy.
  • services/cloud-agent-next/wrapper/src/kilo-api.ts:530 — rejected (no_change). A skill row is never truncated, so no skill is ever hidden from the composer; the wrapper keeps every reported row and logs how many non-skill rows the shared bound dropped.
  • The cloud-agent wrapper catalog keeps every row the CLI reports; it no longer drops source: 'skill' rows before commands.available.
  • boundSlashCommandCatalog enforces the shared 256-command and 512 KiB limits, dropping non-skill rows from the end first and never truncating a skill row.
  • When skill rows alone exceed a bound, the catalog is returned over-limit with every skill row, and the wrapper logs the full catalog instead of hiding skills.
  • The default catalog generator no longer filters skills; its snapshot is generated with project config disabled, so session skills come only from the live wrapper catalog.
  • Mobile invocation is unchanged: selecting a row submits /name; a skill row adds only the Skill badge and a skill-specific accessibility label.
  • A test-only change routes session-state writes through writeSessionValueSync to satisfy the storage-key compliance gate.

@iscekic
iscekic force-pushed the kwf/app-slash-mention-skills-74da branch from 3726219 to c9fa9d2 Compare September 23, 2026 23:12
@iscekic
iscekic marked this pull request as ready for review September 23, 2026 23:43
Comment thread packages/cloud-agent-sdk/src/remote-command-catalog.ts Outdated
Comment thread apps/mobile/src/components/agents/chat-composer-slash-commands.test.ts Outdated
@iscekic
iscekic marked this pull request as draft September 24, 2026 00:02
@iscekic
iscekic marked this pull request as ready for review September 24, 2026 00:20
@iscekic iscekic added the human-ready The PR is ready for human review. label Sep 25, 2026
Comment thread services/cloud-agent-next/wrapper/src/kilo-api.ts
…unded

The wrapper bounds the catalog to the shared 256-command and 512 KiB
limits and drops non-skill rows when it must. It wrote that only to the
wrapper log, so a reader whose menu was missing commands was never told.

The wrapper now returns the bound status beside the catalog and sends it
in the commands.available payload. The DO caches it with the catalog and
hydrates connecting clients with it. The SDK surfaces it as
availableCommandsCatalogStatus, and the mobile composer renders an
accessible notice beside the open slash menu: one copy for dropped rows,
and a separate copy for a catalog the skill rows alone push over a
bound (that catalog is complete, so the dropped-rows copy would lie).

Both notices land in all 86 locale catalogs.
…e test

session-detail-content reads availableCommandsCatalogStatus, so the
test's mock atom map needs it next to availableCommands; without it the
mounted render reads .value of undefined.
@iscekic
iscekic marked this pull request as draft September 25, 2026 19:12
@iscekic
iscekic marked this pull request as ready for review September 25, 2026 19:12
…catalog does

The catalog-bound notices from 474e26d were written outside the translation pass. In 16 catalogs they named a skill or a command with a different word than the Skill badge and the command copy on the same slash menu. Use each catalog's own term.
@iscekic

iscekic commented Sep 25, 2026

Copy link
Copy Markdown
Collaborator Author

Audit findings:

  • apps/mobile/src/i18n/locales/af.json (feature slice hand-edits the non-en catalogs): the skill-row keys (skillBadge, useSkillCommand) are already fixed. Their wording at the current head is identical in all 86 catalogs to the translation-slice commit 3726219. The later catalogFull and catalogOverLimit notices (474e26d) were written outside the translation pass. In 17 catalogs they used a different word for "skill" or "command" than the Skill badge and the command copy on the same slash menu. Fixed in 7738d15: each notice now uses the term of its own catalog. No key was added or removed.
  • services/cloud-agent-next/wrapper/src/kilo-api.ts (catalog-full notice only in a wrapper log line): already fixed in 474e26d. The wrapper sends the bound status in commands.available, the SDK exposes it as availableCommandsCatalogStatus, and the mobile composer shows an accessible notice next to the open / menu.

@iscekic
iscekic merged commit 1f6445d into main Sep 26, 2026
31 checks passed
@iscekic
iscekic deleted the kwf/app-slash-mention-skills-74da branch September 26, 2026 01:00
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

human-ready The PR is ready for human review.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants