@amigo-ai/sdk 1.0.0-alpha.3 → 1.0.0-rc.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +107 -52
  3. package/assets/readme/amigo-banner.png +0 -0
  4. package/assets/readme/classic-ts-architecture.png +0 -0
  5. package/assets/readme/classic-ts-architecture.svg +102 -0
  6. package/dist/index.cjs +1255 -0
  7. package/dist/index.cjs.map +7 -0
  8. package/dist/index.mjs +1228 -0
  9. package/dist/index.mjs.map +7 -0
  10. package/dist/types/{src/core → core}/auth.d.ts +1 -1
  11. package/dist/types/core/branded-types.d.ts +73 -0
  12. package/dist/types/{src/core → core}/errors.d.ts +17 -13
  13. package/dist/types/{src/core → core}/openapi-client.d.ts +3 -2
  14. package/dist/types/core/rate-limit.d.ts +23 -0
  15. package/dist/types/core/retry.d.ts +17 -0
  16. package/dist/types/{src/generated → generated}/api-types.d.ts +5425 -3072
  17. package/dist/types/index.d.ts +46 -0
  18. package/dist/types/resources/agent.d.ts +62 -0
  19. package/dist/types/resources/context-graph.d.ts +65 -0
  20. package/dist/types/resources/conversation.d.ts +200 -0
  21. package/dist/types/resources/organization.d.ts +27 -0
  22. package/dist/types/resources/services.d.ts +53 -0
  23. package/dist/types/resources/user.d.ts +53 -0
  24. package/dist/types/webhooks/index.d.ts +3 -0
  25. package/dist/types/webhooks/parse.d.ts +38 -0
  26. package/dist/types/webhooks/types.d.ts +30 -0
  27. package/package.json +50 -9
  28. package/dist/index.js +0 -601
  29. package/dist/index.js.map +0 -7
  30. package/dist/types/src/index.d.ts +0 -23
  31. package/dist/types/src/resources/conversation.d.ts +0 -92
  32. package/dist/types/src/resources/organization.d.ts +0 -73
  33. package/dist/types/src/resources/services.d.ts +0 -18
  34. /package/dist/types/{src/core → core}/utils.d.ts +0 -0
package/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2025 Amigo
3
+ Copyright (c) 2025 Amigo Inc.
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
package/README.md CHANGED
@@ -1,26 +1,72 @@
1
- # Amigo TypeScript SDK
1
+ <p align="center">
2
+ <img src="./assets/readme/amigo-banner.png" alt="Amigo banner" width="100%" />
3
+ </p>
2
4
 
3
- [![Tests](https://github.com/amigo-ai/amigo-typescript-sdk/actions/workflows/test.yml/badge.svg)](https://github.com/amigo-ai/amigo-typescript-sdk/actions/workflows/test.yml)
4
- [![codecov](https://codecov.io/gh/amigo-ai/amigo-typescript-sdk/graph/badge.svg?token=PQU5JBU941)](https://codecov.io/gh/amigo-ai/amigo-typescript-sdk)
5
- [![npm version](https://img.shields.io/npm/v/%40amigo-ai%2Fsdk?logo=npm)](https://www.npmjs.com/package/@amigo-ai/sdk)
6
- [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
5
+ <h1 align="center">@amigo-ai/sdk</h1>
7
6
 
8
- The official TypeScript SDK for the Amigo API, providing a simple and intuitive interface to interact with Amigo's AI services.
7
+ <p align="center">Official TypeScript SDK for the classic Amigo API.</p>
9
8
 
10
- ## Installation
9
+ <p align="center">
10
+ <a href="https://docs.amigo.ai">Product Docs</a>
11
+ ·
12
+ <a href="https://docs.amigo.ai/developer-guide">Developer Guide</a>
13
+ ·
14
+ <a href="https://amigo-ai.github.io/amigo-typescript-sdk/">API Reference</a>
15
+ ·
16
+ <a href="https://github.com/amigo-ai/amigo-typescript-sdk/tree/main/examples">Examples</a>
17
+ ·
18
+ <a href="https://github.com/amigo-ai/amigo-typescript-sdk/blob/main/CHANGELOG.md">Changelog</a>
19
+ </p>
20
+
21
+ <p align="center">
22
+ <a href="https://www.npmjs.com/package/@amigo-ai/sdk"><img src="https://img.shields.io/npm/v/%40amigo-ai%2Fsdk?logo=npm" alt="npm version" /></a>
23
+ <a href="https://github.com/amigo-ai/amigo-typescript-sdk/actions/workflows/test.yml"><img src="https://github.com/amigo-ai/amigo-typescript-sdk/actions/workflows/test.yml/badge.svg" alt="CI" /></a>
24
+ <a href="https://codecov.io/gh/amigo-ai/amigo-typescript-sdk"><img src="https://codecov.io/gh/amigo-ai/amigo-typescript-sdk/graph/badge.svg?token=PQU5JBU941" alt="codecov" /></a>
25
+ <a href="https://opensource.org/licenses/MIT"><img src="https://img.shields.io/badge/License-MIT-blue.svg" alt="MIT License" /></a>
26
+ </p>
27
+
28
+ Typed from the committed classic OpenAPI snapshot, shipped as ESM and CommonJS, and used by current org-scoped Amigo integrations.
29
+
30
+ ## Classic API Context
31
+
32
+ The classic SDK is the typed client boundary between your application and the org-scoped Amigo API. It remains the right fit for current integrations that depend on the classic resource model while platform-native coverage expands.
33
+
34
+ ![Classic TypeScript SDK architecture](./assets/readme/classic-ts-architecture.png)
35
+
36
+ ## Product Status
37
+
38
+ `@amigo-ai/sdk` remains the supported TypeScript client for the classic Amigo API.
39
+
40
+ The Platform API is the long-term home for new workspace-scoped capabilities, but classic customers are not being asked to make an abrupt rewrite. As equivalent platform surfaces become available, Amigo will publish a migration path and upgrade guidance before recommending a move.
11
41
 
12
- Install the SDK using npm:
42
+ ## Choose The Right SDK
43
+
44
+ | If you need | Use |
45
+ | -------------------------------------------------------------- | ------------------------------------------------------------------------------------- |
46
+ | The current org-scoped Amigo API used by existing integrations | `@amigo-ai/sdk` |
47
+ | New workspace-scoped Platform API integrations | [`@amigo-ai/platform-sdk`](https://github.com/amigo-ai/amigo-platform-typescript-sdk) |
48
+
49
+ ## Documentation
50
+
51
+ | Need | Best entry point |
52
+ | --------------------------------------- | ------------------------------------------------------------------------------------------- |
53
+ | Product overview and deployment context | [docs.amigo.ai](https://docs.amigo.ai/) |
54
+ | Integration guidance and developer docs | [Developer Guide](https://docs.amigo.ai/developer-guide) |
55
+ | Generated API reference | [amigo-ai.github.io/amigo-typescript-sdk](https://amigo-ai.github.io/amigo-typescript-sdk/) |
56
+ | Runnable examples | [examples/](https://github.com/amigo-ai/amigo-typescript-sdk/tree/main/examples) |
57
+ | Release history | [CHANGELOG.md](https://github.com/amigo-ai/amigo-typescript-sdk/blob/main/CHANGELOG.md) |
58
+
59
+ ## Installation
13
60
 
14
61
  ```bash
15
- npm install @amigo/amigo-typescript-sdk
62
+ npm install @amigo-ai/sdk
16
63
  ```
17
64
 
18
65
  ## Quick Start
19
66
 
20
67
  ```typescript
21
- import { AmigoClient } from '@amigo/amigo-typescript-sdk'
68
+ import { AmigoClient } from '@amigo-ai/sdk'
22
69
 
23
- // Initialize the client
24
70
  const client = new AmigoClient({
25
71
  apiKey: 'your-api-key',
26
72
  apiKeyId: 'your-api-key-id',
@@ -28,56 +74,74 @@ const client = new AmigoClient({
28
74
  orgId: 'your-organization-id',
29
75
  })
30
76
 
31
- // Get organization details
32
- async function example() {
33
- try {
34
- const organization = await client.organizations.getOrganization('your-org-id')
35
- console.log('Organization:', organization)
36
- } catch (error) {
37
- console.error('Error:', error)
38
- }
39
- }
77
+ const conversations = await client.conversations.getConversations({
78
+ limit: 10,
79
+ sort_by: ['-created_at'],
80
+ })
40
81
 
41
- example()
82
+ console.log(conversations.conversations.map(conversation => conversation.id))
42
83
  ```
43
84
 
44
85
  ## Configuration
45
86
 
46
- The SDK requires the following configuration parameters:
87
+ | Option | Type | Required | Description |
88
+ | ---------- | -------------- | -------- | ------------------------------------------------------------- |
89
+ | `apiKey` | `string` | Yes | API key from the Amigo dashboard |
90
+ | `apiKeyId` | `string` | Yes | API key ID paired with `apiKey` |
91
+ | `userId` | `string` | Yes | User ID on whose behalf the request is made |
92
+ | `orgId` | `string` | Yes | Organization ID for the classic API |
93
+ | `baseUrl` | `string` | No | Override the API base URL. Defaults to `https://api.amigo.ai` |
94
+ | `retry` | `RetryOptions` | No | Retry policy overrides for transient HTTP failures |
47
95
 
48
- | Parameter | Type | Required | Description |
49
- | ---------- | ------ | -------- | -------------------------------------------------------------- |
50
- | `apiKey` | string | ✅ | API key from Amigo dashboard |
51
- | `apiKeyId` | string | ✅ | API key ID from Amigo dashboard |
52
- | `userId` | string | ✅ | User ID on whose behalf the request is made |
53
- | `orgId` | string | ✅ | Your organization ID |
54
- | `baseUrl` | string | ❌ | Base URL of the Amigo API (defaults to `https://api.amigo.ai`) |
96
+ ### Runtime Requirements
55
97
 
56
- ### Getting Your API Credentials
98
+ The SDK supports Node `18+` and is tested on active Node releases in CI. It relies on web-standard primitives such as `fetch`, `AbortController`, `URL`, and `TextEncoder`.
57
99
 
58
- 1. **API Key & API Key ID**: Generate these from your Amigo admin dashboard or programmatically using the API
59
- 2. **Organization ID**: Found in your Amigo dashboard URL or organization settings
60
- 3. **User ID**: The ID of the user you want to impersonate for API calls
100
+ ## Generated Types
61
101
 
62
- For detailed instructions on generating API keys, see the [Authentication Guide](https://docs.amigo.ai/developer-guide).
102
+ The package re-exports the generated OpenAPI types so application code can type directly against the API contract:
63
103
 
64
- ### API compatibility
104
+ ```typescript
105
+ import type { components, operations, paths } from '@amigo-ai/sdk'
65
106
 
66
- This SDK autogenerates its types from the latest Amigo OpenAPI schema. As a result, only the latest published SDK version is guaranteed to match the current API. If you pin to an older version, it may not include the newest endpoints or fields.
107
+ type Conversation = components['schemas']['ConversationInstance']
108
+ type GetConversationsQuery = operations['get-conversations']['parameters']['query']
109
+ ```
67
110
 
68
- ## Error Handling
111
+ Public builds are generated from the committed [`specs/openapi-baseline.json`](./specs/openapi-baseline.json) snapshot in this repo so type output stays deterministic across machines and CI runs. When you need to refresh that snapshot, run:
112
+
113
+ ```bash
114
+ npm run openapi:sync
115
+ ```
116
+
117
+ ## Retries
69
118
 
70
- The SDK provides typed error handling:
119
+ The HTTP client retries transient failures with sensible defaults:
120
+
121
+ - Max attempts: `3`
122
+ - Backoff base: `250ms` with full jitter
123
+ - Max delay per attempt: `30s`
124
+ - Statuses: `408`, `429`, `500`, `502`, `503`, `504`
125
+ - Methods: `GET`, plus `POST` on `429` when `Retry-After` is present
126
+
127
+ ## Error Handling
71
128
 
72
129
  ```typescript
73
- import { AmigoClient, errors } from '@amigo/amigo-typescript-sdk'
130
+ import { AmigoClient, AuthenticationError, NetworkError } from '@amigo-ai/sdk'
74
131
 
75
132
  try {
76
- const result = await client.organizations.getOrganization('org-id')
133
+ const client = new AmigoClient({
134
+ apiKey: 'your-api-key',
135
+ apiKeyId: 'your-api-key-id',
136
+ userId: 'user-id',
137
+ orgId: 'your-organization-id',
138
+ })
139
+
140
+ await client.organizations.getOrganization()
77
141
  } catch (error) {
78
- if (error instanceof errors.AuthenticationError) {
142
+ if (error instanceof AuthenticationError) {
79
143
  console.error('Authentication failed:', error.message)
80
- } else if (error instanceof errors.NetworkError) {
144
+ } else if (error instanceof NetworkError) {
81
145
  console.error('Network error:', error.message)
82
146
  } else {
83
147
  console.error('Unexpected error:', error)
@@ -85,15 +149,6 @@ try {
85
149
  }
86
150
  ```
87
151
 
88
- ## Documentation
89
-
90
- - **Developer Guide**: [https://docs.amigo.ai/developer-guide](https://docs.amigo.ai/developer-guide)
91
- - **API Reference**: [https://docs.amigo.ai/api-reference](https://docs.amigo.ai/api-reference)
92
-
93
- ## License
94
-
95
- This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
96
-
97
152
  ## Support
98
153
 
99
- For questions, issues, or feature requests, please visit our [GitHub repository](https://github.com/amigo-ai/amigo-typescript-sdk) or contact support through the Amigo dashboard.
154
+ Use the [issue tracker](https://github.com/amigo-ai/amigo-typescript-sdk/issues) for bugs and feature requests. For responsible disclosure, see [SECURITY.md](https://github.com/amigo-ai/amigo-typescript-sdk/blob/main/SECURITY.md).
Binary file
@@ -0,0 +1,102 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="1200" height="520" viewBox="0 0 1200 520">
2
+ <defs>
3
+ <linearGradient id="bg" x1="0" y1="0" x2="0.6" y2="1">
4
+ <stop offset="0%" stop-color="#083241"/>
5
+ <stop offset="100%" stop-color="#051A24"/>
6
+ </linearGradient>
7
+ <linearGradient id="strokeGrad" x1="0" y1="0" x2="1" y2="1">
8
+ <stop offset="0%" stop-color="white" stop-opacity="0.1"/>
9
+ <stop offset="100%" stop-color="#999" stop-opacity="0.04"/>
10
+ </linearGradient>
11
+ <linearGradient id="strokeGradSubtle" x1="0" y1="0" x2="1" y2="1">
12
+ <stop offset="0%" stop-color="white" stop-opacity="0.08"/>
13
+ <stop offset="100%" stop-color="#999" stop-opacity="0.03"/>
14
+ </linearGradient>
15
+ <marker id="arrow" viewBox="0 0 10 7" refX="9" refY="3.5" markerWidth="8" markerHeight="6" orient="auto-start-reverse">
16
+ <path d="M 0 0.5 L 9 3.5 L 0 6.5" fill="none" stroke="white" stroke-width="1" opacity="0.2"/>
17
+ </marker>
18
+ </defs>
19
+
20
+ <rect width="1200" height="520" fill="url(#bg)"/>
21
+
22
+ <rect x="32" y="32" width="720" height="240" rx="10" fill="white" fill-opacity="0.03" stroke="url(#strokeGrad)" stroke-width="0.75"/>
23
+ <text x="60" y="60" font-family="'Diatype Mono', 'SF Mono', monospace" font-size="13" font-weight="500" fill="white" fill-opacity="0.55" letter-spacing="2">CLASSIC API</text>
24
+
25
+ <rect x="52" y="78" width="154" height="60" rx="8" fill="white" fill-opacity="0.1" stroke="url(#strokeGradSubtle)" stroke-width="0.75"/>
26
+ <text x="129" y="103" text-anchor="middle" font-family="'Flecha S', Georgia, serif" font-size="16" fill="white" fill-opacity="0.95">Conversations</text>
27
+ <text x="129" y="121" text-anchor="middle" font-family="Inter, sans-serif" font-size="12" fill="white" fill-opacity="0.7">create + interact</text>
28
+
29
+ <rect x="222" y="78" width="154" height="60" rx="8" fill="white" fill-opacity="0.08" stroke="url(#strokeGradSubtle)" stroke-width="0.75"/>
30
+ <text x="299" y="103" text-anchor="middle" font-family="'Flecha S', Georgia, serif" font-size="16" fill="white" fill-opacity="0.95">Services</text>
31
+ <text x="299" y="121" text-anchor="middle" font-family="Inter, sans-serif" font-size="12" fill="white" fill-opacity="0.7">release-routed entrypoints</text>
32
+
33
+ <rect x="392" y="78" width="154" height="60" rx="8" fill="white" fill-opacity="0.08" stroke="url(#strokeGradSubtle)" stroke-width="0.75"/>
34
+ <text x="469" y="103" text-anchor="middle" font-family="'Flecha S', Georgia, serif" font-size="16" fill="white" fill-opacity="0.95">Organizations</text>
35
+ <text x="469" y="121" text-anchor="middle" font-family="Inter, sans-serif" font-size="12" fill="white" fill-opacity="0.7">org settings + branding</text>
36
+
37
+ <rect x="562" y="78" width="170" height="60" rx="8" fill="white" fill-opacity="0.08" stroke="url(#strokeGradSubtle)" stroke-width="0.75"/>
38
+ <text x="647" y="103" text-anchor="middle" font-family="'Flecha S', Georgia, serif" font-size="16" fill="white" fill-opacity="0.95">Users</text>
39
+ <text x="647" y="121" text-anchor="middle" font-family="Inter, sans-serif" font-size="12" fill="white" fill-opacity="0.7">identity + preferences</text>
40
+
41
+ <rect x="52" y="152" width="154" height="60" rx="8" fill="white" fill-opacity="0.08" stroke="url(#strokeGradSubtle)" stroke-width="0.75"/>
42
+ <text x="129" y="177" text-anchor="middle" font-family="'Flecha S', Georgia, serif" font-size="16" fill="white" fill-opacity="0.95">Agents</text>
43
+ <text x="129" y="195" text-anchor="middle" font-family="Inter, sans-serif" font-size="12" fill="white" fill-opacity="0.7">assistant behavior</text>
44
+
45
+ <rect x="222" y="152" width="154" height="60" rx="8" fill="white" fill-opacity="0.08" stroke="url(#strokeGradSubtle)" stroke-width="0.75"/>
46
+ <text x="299" y="177" text-anchor="middle" font-family="'Flecha S', Georgia, serif" font-size="16" fill="white" fill-opacity="0.95">Context Graphs</text>
47
+ <text x="299" y="195" text-anchor="middle" font-family="Inter, sans-serif" font-size="12" fill="white" fill-opacity="0.7">memory + retrieval</text>
48
+
49
+ <rect x="392" y="152" width="154" height="60" rx="8" fill="white" fill-opacity="0.08" stroke="url(#strokeGradSubtle)" stroke-width="0.75"/>
50
+ <text x="469" y="177" text-anchor="middle" font-family="'Flecha S', Georgia, serif" font-size="16" fill="white" fill-opacity="0.95">Webhooks</text>
51
+ <text x="469" y="195" text-anchor="middle" font-family="Inter, sans-serif" font-size="12" fill="white" fill-opacity="0.7">signed outbound delivery</text>
52
+
53
+ <rect x="562" y="152" width="170" height="60" rx="8" fill="white" fill-opacity="0.08" stroke="url(#strokeGradSubtle)" stroke-width="0.75"/>
54
+ <text x="647" y="177" text-anchor="middle" font-family="'Flecha S', Georgia, serif" font-size="16" fill="white" fill-opacity="0.95">Streaming</text>
55
+ <text x="647" y="195" text-anchor="middle" font-family="Inter, sans-serif" font-size="12" fill="white" fill-opacity="0.7">NDJSON + WebSocket events</text>
56
+
57
+ <text x="392" y="248" text-anchor="middle" font-family="Inter, sans-serif" font-size="12" font-weight="500" fill="white" fill-opacity="0.5">requests + events</text>
58
+ <line x1="392" y1="254" x2="392" y2="290" stroke="white" stroke-width="1" stroke-opacity="0.15" marker-end="url(#arrow)"/>
59
+
60
+ <rect x="776" y="32" width="392" height="240" rx="10" fill="white" fill-opacity="0.03" stroke="url(#strokeGrad)" stroke-width="0.75"/>
61
+ <text x="804" y="60" font-family="'Diatype Mono', 'SF Mono', monospace" font-size="13" font-weight="500" fill="white" fill-opacity="0.55" letter-spacing="2">PLATFORM SYSTEMS</text>
62
+
63
+ <rect x="796" y="78" width="166" height="60" rx="8" fill="white" fill-opacity="0.1" stroke="url(#strokeGradSubtle)" stroke-width="0.75"/>
64
+ <text x="879" y="103" text-anchor="middle" font-family="'Flecha S', Georgia, serif" font-size="16" fill="white" fill-opacity="0.95">Agent Engine</text>
65
+ <text x="879" y="121" text-anchor="middle" font-family="Inter, sans-serif" font-size="12" fill="white" fill-opacity="0.7">runtime orchestration</text>
66
+
67
+ <rect x="982" y="78" width="166" height="60" rx="8" fill="white" fill-opacity="0.08" stroke="url(#strokeGradSubtle)" stroke-width="0.75"/>
68
+ <text x="1065" y="103" text-anchor="middle" font-family="'Flecha S', Georgia, serif" font-size="16" fill="white" fill-opacity="0.95">Connector Runner</text>
69
+ <text x="1065" y="121" text-anchor="middle" font-family="Inter, sans-serif" font-size="12" fill="white" fill-opacity="0.7">EHR, FHIR, CRM sync</text>
70
+
71
+ <rect x="796" y="152" width="166" height="60" rx="8" fill="white" fill-opacity="0.08" stroke="url(#strokeGradSubtle)" stroke-width="0.75"/>
72
+ <text x="879" y="177" text-anchor="middle" font-family="'Flecha S', Georgia, serif" font-size="16" fill="white" fill-opacity="0.95">Metric Store</text>
73
+ <text x="879" y="195" text-anchor="middle" font-family="Inter, sans-serif" font-size="12" fill="white" fill-opacity="0.7">analytics + evaluation</text>
74
+
75
+ <rect x="982" y="152" width="166" height="60" rx="8" fill="white" fill-opacity="0.08" stroke="url(#strokeGradSubtle)" stroke-width="0.75"/>
76
+ <text x="1065" y="177" text-anchor="middle" font-family="'Flecha S', Georgia, serif" font-size="16" fill="white" fill-opacity="0.95">Operators</text>
77
+ <text x="1065" y="195" text-anchor="middle" font-family="Inter, sans-serif" font-size="12" fill="white" fill-opacity="0.7">monitoring + escalation</text>
78
+
79
+ <text x="972" y="248" text-anchor="middle" font-family="Inter, sans-serif" font-size="12" font-weight="500" fill="white" fill-opacity="0.5">backing services</text>
80
+ <line x1="972" y1="254" x2="972" y2="290" stroke="white" stroke-width="1" stroke-opacity="0.15" marker-end="url(#arrow)"/>
81
+
82
+ <rect x="32" y="300" width="1136" height="170" rx="10" fill="white" fill-opacity="0.05" stroke="url(#strokeGrad)" stroke-width="0.75"/>
83
+ <text x="60" y="328" font-family="'Diatype Mono', 'SF Mono', monospace" font-size="13" font-weight="500" fill="white" fill-opacity="0.55" letter-spacing="2">WORLD MODEL</text>
84
+
85
+ <rect x="52" y="346" width="256" height="60" rx="8" fill="white" fill-opacity="0.1" stroke="url(#strokeGradSubtle)" stroke-width="0.75"/>
86
+ <text x="180" y="371" text-anchor="middle" font-family="'Flecha S', Georgia, serif" font-size="16" fill="white" fill-opacity="0.95">Event Store</text>
87
+ <text x="180" y="389" text-anchor="middle" font-family="Inter, sans-serif" font-size="12" fill="white" fill-opacity="0.7">confidence-scored facts</text>
88
+
89
+ <rect x="328" y="346" width="256" height="60" rx="8" fill="white" fill-opacity="0.08" stroke="url(#strokeGradSubtle)" stroke-width="0.75"/>
90
+ <text x="456" y="371" text-anchor="middle" font-family="'Flecha S', Georgia, serif" font-size="16" fill="white" fill-opacity="0.95">Entity Projections</text>
91
+ <text x="456" y="389" text-anchor="middle" font-family="Inter, sans-serif" font-size="12" fill="white" fill-opacity="0.7">current org + user state</text>
92
+
93
+ <rect x="604" y="346" width="256" height="60" rx="8" fill="white" fill-opacity="0.08" stroke="url(#strokeGradSubtle)" stroke-width="0.75"/>
94
+ <text x="732" y="371" text-anchor="middle" font-family="'Flecha S', Georgia, serif" font-size="16" fill="white" fill-opacity="0.95">Intelligence Projections</text>
95
+ <text x="732" y="389" text-anchor="middle" font-family="Inter, sans-serif" font-size="12" fill="white" fill-opacity="0.7">memory, tasks, summaries</text>
96
+
97
+ <rect x="880" y="346" width="268" height="60" rx="8" fill="white" fill-opacity="0.08" stroke="url(#strokeGradSubtle)" stroke-width="0.75"/>
98
+ <text x="1014" y="371" text-anchor="middle" font-family="'Flecha S', Georgia, serif" font-size="16" fill="white" fill-opacity="0.95">Vector Search</text>
99
+ <text x="1014" y="389" text-anchor="middle" font-family="Inter, sans-serif" font-size="12" fill="white" fill-opacity="0.7">semantic retrieval</text>
100
+
101
+ <text x="600" y="492" text-anchor="middle" font-family="Inter, sans-serif" font-size="12" font-weight="500" fill="white" fill-opacity="0.55">Classic SDK traffic lands on the same platform systems and world model foundation that future migration paths build on.</text>
102
+ </svg>