isA App SDK
TypeScript SDK packages for the isA ecosystem across web, React Native, and device-facing clients.
Packages
| Package | Purpose |
|---|---|
@isa/core | Service clients, shared types, IsAClient, auth, resilience |
@isa/transport | HTTP, MQTT, WebSocket, and SSE transport helpers |
@isa/hooks | React hooks built on top of @isa/core |
@isa/theme | Design tokens and theme objects |
@isa/ui-web | React web components |
@isa/ui-native | React Native components |
@isa/service-agents | Embeddable vertical service-agent widgets and gateway clients |
Latest Updates (2026-05-17)
@isa/service-agentsadds an embeddable web widget for service-agent chat surfaces.- The gateway exposes agent discovery and channel-aware chat routes under
/api/v1/service-agents. - The widget bundle mounts from
window.IsAServiceAgentsand uses Shadow DOM isolation for host-page safety. - A2UI contracts now include richer controls and layouts:
Knob,ColorPicker,RangeSlider2D,DraggableCard,DropZone,ComparisonGrid,AnnotatedDiff, andFlowDiagram.
Install
The @isa scope is currently configured for GitHub Packages.
pnpm add @isa/coreIf you are installing from GitHub Packages, configure your npm registry for the @isa scope before install.
Quick Start
@isa/core
import { IsAClient } from '@isa/core'
const client = new IsAClient({
baseUrl: 'http://localhost:80',
resilience: { enabled: false },
})
const login = await client.auth.login('user@example.com', 'password123')
if (login.success) {
const products = await client.product.getProducts()
const devices = await client.device.listDevices({ limit: 10 })
console.log(products, devices)
}@isa/transport
import { HttpClient } from '@isa/transport'
const http = new HttpClient({
baseURL: 'http://localhost:80',
headers: {
Authorization: 'Bearer token',
},
})
const products = await http.get('/api/v1/product/products')
console.log(products)@isa/hooks
useAuth expects an AuthService instance.
import { AuthService } from '@isa/core'
import { useAuth } from '@isa/hooks'
const authService = new AuthService({ baseUrl: 'http://localhost:80' })
function AuthPanel() {
const { isAuthenticated, user, login, logout, isLoading, error } = useAuth({
authService,
})
return (
<div>
{isAuthenticated ? (
<>
<p>Signed in as {user?.email}</p>
<button onClick={logout}>Logout</button>
</>
) : (
<button onClick={() => login('user@example.com', 'password123')}>
Login
</button>
)}
{isLoading && <p>Loading...</p>}
{error && <p>{error}</p>}
</div>
)
}@isa/ui-web
import { ChatInput, MarkdownRenderer } from '@isa/ui-web'
function ChatExample() {
return (
<div>
<MarkdownRenderer content="**Hello from isA**" />
<ChatInput onSend={(value) => console.log(value)} />
</div>
)
}@isa/theme
@isa/theme exports tokens and theme objects rather than a framework-specific provider.
import { colors, spacing, typography, lightTheme } from '@isa/theme'
console.log(colors.primary[500], spacing[4], typography.fontSizes.base, lightTheme)@isa/service-agents
<script src="/service-agents-widget.js"></script>
<script>
window.IsAServiceAgents.mount({
endpoint: "http://localhost:3000",
defaultAgentId: "sleep-advisor",
title: "Ask our team"
})
</script>Gateway routes:
| Method | Route | Purpose |
|---|---|---|
GET | /healthz | Widget gateway health |
GET | /api/v1/service-agents | List available service agents |
POST | /api/v1/service-agents/:agentId/chat | Send a chat message |
POST | /api/v1/service-agents/:agentId/chat/:channel | Send a channel-specific chat message |
Local Development
git clone https://github.com/xenoISA/isA_App_SDK
cd isA_App_SDK
pnpm install
pnpm typecheck
pnpm lint
pnpm test
pnpm buildNotes
- Consumer apps should import
@isa/*packages directly and avoid local aliases to SDKdistfolders. - The root SDK
buildcommand validates publishable packages; example apps can be built separately when needed. - Release validation currently targets GitHub Packages, matching the package metadata in the SDK repo.