@topolo/cli 0.2.3 → 0.3.0

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@topolo/cli",
3
- "version": "0.2.3",
3
+ "version": "0.3.0",
4
4
  "description": "Command-line interface for Topolo developers, operators, and agents, with internal first-party scaffolding available under the topolo platform namespace.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -1,6 +1,6 @@
1
1
  # Topolo — agent guide (Codex / general-purpose agents)
2
2
 
3
- This file teaches an agent how to interact with the Topolo platform via the `topolo` CLI and, when available, the Topolo MCP server. It is intentionally short, shell-first, and stable across Codex, Cursor, and any other agent that reads `AGENTS.md`.
3
+ This file teaches an agent how to interact with the Topolo platform via the `topolo` CLI and, when available, the Topolo MCP server. It assumes no repository access or private product knowledge; public Topolo docs and credential-scoped runtime discovery are authoritative.
4
4
 
5
5
  ## What the platform is
6
6
 
@@ -11,6 +11,7 @@ Topolo is a multi-app SaaS platform. The CLI and MCP server both use `@topolo/sd
11
11
  - Use `topolo apps audit <application_id> --json` or the MCP `topolo_audit_applications` tool to inspect current requirement conformance and migration work.
12
12
  - Use `topolo services --json` or the MCP `topolo_search_applications` tool to discover callable app ids and effective URLs.
13
13
  - Use `topolo actions --service <app> --json` or MCP `topolo_search_actions` to discover callable operations granted to the current credential; invoke automatic reads with `topolo_read_action` and confirmation-gated operations with `topolo_call_action`.
14
+ - Use `topolo actions capabilities`, `actions examples`, `actions validate`, and `actions plan` (or their MCP equivalents) to obtain schemas, examples, verification, and rollback before execution.
14
15
  - The generic `api` command and MCP `topolo_api_call` tool can reach bundled SDK services and live Auth-catalog API/technical services when no action contract exists yet.
15
16
 
16
17
  Every call is scoped to the organization embedded in the credential. There is no `--org` flag anywhere — attempting to target another org will fail.
@@ -94,6 +95,11 @@ URL and the CLI will refuse `topolo api` calls until a staging override is set.
94
95
  ```bash
95
96
  topolo actions --service mail --json
96
97
  topolo actions get app_topolo_mail.messages.send --json
98
+ topolo actions examples app_topolo_mail.messages.send --json
99
+ topolo actions validate app_topolo_mail.messages.send \
100
+ --data '{"mailboxId":"primary","subject":"Hello","text":"..."}' --json
101
+ topolo actions plan app_topolo_mail.messages.send \
102
+ --data '{"mailboxId":"primary","subject":"Hello","text":"..."}' --json
97
103
  topolo actions call app_topolo_mail.messages.send \
98
104
  --data '{"mailboxId":"primary","subject":"Hello","text":"..."}' \
99
105
  --confirm --json
@@ -104,6 +110,10 @@ operations. It is filtered by the signed-in organization and the exact service
104
110
  permissions on the credential. Actions marked `authorizationMode: "runtime"`
105
111
  have input-dependent policy and are definitively authorized by the target app
106
112
  for the supplied organization, application, and resource at invocation time.
113
+ Never guess a missing action, field, resource id, endpoint, verification step,
114
+ or rollback. If catalog metadata and `https://docs.topolo.app` do not provide a
115
+ complete contract, report the missing publication contract instead of reading
116
+ source code or inferring a private API.
107
117
 
108
118
  ### Generic passthrough
109
119
 
@@ -151,5 +161,4 @@ Do not batch writes. Do not retry a failed write without re-confirming. The `--c
151
161
 
152
162
  - Documentation: `https://docs.topolo.app` (guides, authentication, API reference).
153
163
  - Developers console (register apps / OAuth clients): `https://developers.topolo.app`
154
- - CLI README: the `README.md` alongside this file.
155
- - Schemas: `packages/topolo-sdk/src/modules/` in the monorepo.
164
+ - CLI help: `topolo --help` and `topolo <command> --help`.
@@ -1,248 +1,213 @@
1
1
  ---
2
2
  name: topolo
3
- description: Read and write Topolo platform data (identity, application/service discovery, credential-scoped actions, and any SDK-registered Topolo API) from the shell via the `topolo` CLI. Use whenever the user references their Topolo organization, a Topolo app/service, or asks to mint/inspect Topolo credentials.
3
+ description: Operate the Topolo platform from any computer using only public Topolo documentation and credential-scoped CLI or MCP discovery. Use for Topolo identity, organizations, applications, resources, actions, OAuth, and API keys.
4
4
  ---
5
5
 
6
- # Topolo platform
6
+ # Topolo clean-room operator
7
7
 
8
- The `topolo` CLI is the agent-friendly entry point to the Topolo platform. Every command runs in the **active context** embedded in the current credential — the user's personal space or a specific organization. You cannot bypass the credential or forge a context; to act in a different organization (or personal), switch with `topolo context use` (see Contexts).
8
+ Use Topolo without repository access, private schemas, or prior product knowledge. The authenticated CLI/MCP catalog and `https://docs.topolo.app` are the only operational sources of truth.
9
9
 
10
- ## When this skill fires
10
+ Never inspect or request Topolo source code for ordinary platform work. Never invent an endpoint, action id, field, enum, resource id, permission, verification step, or rollback. If the live contract and public docs do not provide enough information, report the exact missing metadata as a platform contract defect.
11
11
 
12
- Use `topolo` whenever the user:
12
+ ## Install and connect
13
13
 
14
- - References records, messages, customers, or any other data stored in a Topolo app.
15
- - Asks about their Topolo identity ("who am I logged in as", "what org am I in", "what scopes do I have").
16
- - Wants to call an endpoint under a Topolo service from the shell.
17
- - Mentions a Topolo OAuth client (`doac_…`) or API key.
14
+ The CLI requires Node 20 or newer:
18
15
 
19
- If the user asks a platform question and `topolo` is not installed, install it: `npm install -g @topolo/cli`. Requires Node ≥ 20. To wire this skill and the MCP server into Claude Code / Codex in one step, run `topolo skills install` (copies the skill file, registers the `topolo` MCP; no API key needed — the MCP reads the same credential `topolo auth login` writes).
16
+ ```bash
17
+ command -v topolo || npm install -g @topolo/cli
18
+ topolo skills install
19
+ ```
20
+
21
+ `topolo skills install` installs this skill and registers the Topolo MCP server for Claude Code and Codex. Both use the same credential written by `topolo auth login`.
20
22
 
21
- ## Credentials — always check first
23
+ Production is the default. Use `--env staging` on every staging command, or set `TOPOLO_ENV=staging`. Never mix staging discovery with production execution.
22
24
 
23
- Before any data command, confirm a credential is configured:
25
+ ## Authentication gate
26
+
27
+ Start every session with:
24
28
 
25
29
  ```bash
26
30
  topolo auth status --json
31
+ topolo whoami --json
27
32
  ```
28
33
 
29
- Production is the default environment. Use `--env staging` anywhere in the
30
- command, or set `TOPOLO_ENV=staging`, when the user is testing internal staging
31
- or provisioning a staging-only first-party app:
34
+ If `source` is `none`, run `topolo auth login` and wait for browser approval. The built-in first-party OAuth client needs no client id. For a headless session, use `topolo auth login --api-key=<key>` or inject `TOPOLO_API_KEY` for one command. Never store credentials in a project or tracked file.
35
+
36
+ Authentication scopes and effective authorization are different:
37
+
38
+ - OAuth scopes describe what the token may ask the platform to do.
39
+ - `whoami`, the credential-scoped application catalog, action catalog, target policy, and resource binding determine what the current identity may actually do.
40
+ - An action with `authorizationMode: "runtime"` is discoverable, but the target application makes the final authorization decision from the concrete input and credential context.
41
+ - A 403 is authoritative. Do not retry it with guessed fields, another endpoint, or broader behavior.
42
+
43
+ The credential fixes the personal or organization context. There is no `--org` override:
32
44
 
33
45
  ```bash
34
- topolo auth status --env staging --json
35
- topolo auth login --env staging
46
+ topolo context ls --json
47
+ topolo context use <organization-name|personal> --json
48
+ topolo whoami --json
36
49
  ```
37
50
 
38
- Possible `source` values:
51
+ ## Mandatory clean-room workflow
39
52
 
40
- | source | meaning |
41
- | --- | --- |
42
- | `env:TOPOLO_STAGING_API_KEY` / `env:TOPOLO_PRODUCTION_API_KEY` | Environment-specific service-scoped API key in env |
43
- | `env:TOPOLO_STAGING_ACCESS_TOKEN` / `env:TOPOLO_PRODUCTION_ACCESS_TOKEN` | Environment-specific short-lived access token in env |
44
- | `env:TOPOLO_API_KEY` | Shared service-scoped API key in env |
45
- | `env:TOPOLO_ACCESS_TOKEN` | Shared short-lived access token in env (dev/testing) |
46
- | `config-file` | Token stored in the selected environment profile at `$XDG_CONFIG_HOME/topolo/config.json` |
47
- | `none` | Not signed in — call `topolo auth login` |
53
+ For every Topolo task, follow this sequence.
48
54
 
49
- If `source: none`, run `topolo auth login` (add `--env staging` for staging) and
50
- tell the user to approve the device in the browser tab that opens. The CLI uses
51
- its **built-in first-party client**, so **no `--client-id` is needed** — any
52
- Topolo user can sign in; what they can then do is decided by their permissions.
53
- The CLI blocks until they approve, then stores the token in that environment's
54
- active-context profile. (`--client-id=<doac_…>` is only for advanced/self-hosted
55
- setups that register their own OAuth client.)
55
+ ### 1. Discover the application and resource boundary
56
56
 
57
- For service-agent / headless installs, use an API key with
58
- `topolo auth login --api-key=<key>` or set `TOPOLO_API_KEY` only for the single
59
- command that needs it.
57
+ ```bash
58
+ topolo apps --json
59
+ topolo apps get <application> --json
60
+ topolo services --query <application> --json
61
+ topolo resources <application> --json
62
+ ```
60
63
 
61
- ## Output modes
64
+ Use the returned app id or slug. Read `apiKeyResources` to learn whether calls can be scoped to aliases such as a workspace, site, mailbox, brand, or venue. Use `topolo resources` to resolve the actual credential-scoped resource ids. With an API key it returns only the key's bound resources; with OAuth it uses the published Auth resource catalog. Never assume that an organization id is a valid app resource id.
62
65
 
63
- All commands support `--json` (machine) and `--no-json` (human). The CLI autodetects: pretty when stdout is a TTY, JSON when piped. **When you call `topolo` from an agent, always pass `--json`** — the JSON shape is stable; the pretty text is not.
66
+ MCP equivalents:
64
67
 
65
- ## Command reference
68
+ - `topolo_search_applications`
69
+ - `topolo_get_application`
70
+ - `topolo_get_resource_types`
71
+ - `topolo_list_resources`
66
72
 
67
- ### Identity
73
+ ### 2. Discover credential-scoped actions
68
74
 
69
75
  ```bash
70
- topolo whoami --json
76
+ topolo actions --service <app-id-or-slug> --query <task-keyword> --limit 25 --json
77
+ topolo actions capabilities --service <app-id-or-slug> --json
78
+ topolo actions get <exact-action-id> --json
79
+ topolo actions examples <exact-action-id> --json
71
80
  ```
72
81
 
73
- Returns `{ user: { email, name, role, permissions }, organization: { name, slug } | null, kind }`.
82
+ Inspect the published input/output JSON Schemas and agent contract. The agent contract may provide:
83
+
84
+ - public `docsUrl`
85
+ - resource kind and id/version paths
86
+ - effects
87
+ - actionable error codes and recovery
88
+ - verification steps
89
+ - rollback action id
90
+ - next actions
91
+ - runnable examples
74
92
 
75
- Use this once at the start of a session to confirm the active user + org — then reference that org context in subsequent explanations so the user doesn't have to re-orient.
93
+ MCP equivalents:
76
94
 
77
- ### Contexts (personal + multiple organizations)
95
+ - `topolo_search_actions`
96
+ - `topolo_discover_capabilities`
97
+ - `topolo_get_action`
98
+ - `topolo_get_action_examples`
78
99
 
79
- A user can act in their **personal** space or in any **organization** they belong to. Each context has its own credential; the CLI and MCP always operate in the **active** one.
100
+ If discovery returns no relevant action, search `https://docs.topolo.app`. Use `topolo api` only when public docs give the exact service, method, path, schema, authorization, and verification behavior. Absence of a catalog action is not permission to infer a private API.
80
101
 
81
- CLI/MCP context is credential-bound and independent from the user's web
82
- switcher preference. `topolo context use` does not move the browser session;
83
- switching in the browser does not alter any issued CLI/MCP token or refresh
84
- chain. Multiple cached personal/org credentials can therefore coexist safely.
102
+ ### 3. Resolve identifiers through published reads
103
+
104
+ Prefer `topolo resources <application> --json` or `topolo_list_resources` to resolve required resource ids. If the target publishes a more specific read-only resource action, use it for app-local identifiers. Do not guess ids from names or copy ids from a different organization/context.
105
+
106
+ For an app-local resource boundary, pass resource context separately from action input:
85
107
 
86
108
  ```bash
87
- topolo context ls --json # personal + your orgs, and which is active
88
- topolo context use <organization-name|personal> --json # switch the active context
109
+ topolo actions call <read-action-id> \
110
+ --resource-type <published-resource-type> \
111
+ --resource-id <resolved-resource-id> \
112
+ --data '<schema-valid-json>' --json
89
113
  ```
90
114
 
91
- `topolo context use` activates a cached context or exchanges the current credential for a fresh token scoped to the target (membership is validated server-side). After switching, `topolo whoami` and every subsequent command run in that context. There is **no `--org` flag** — switch context instead. If a command returns a permission error, the user may need to switch to the org that owns the resource, or be granted access there.
115
+ Provide `--resource-type` and `--resource-id` together. MCP read actions use `topolo_read_action` with the same separate resource fields.
92
116
 
93
- ### Application and service discovery
117
+ ### 4. Validate locally
118
+
119
+ Before every call, validate exact input against the published JSON Schema:
94
120
 
95
121
  ```bash
96
- topolo apps --json
97
- topolo apps get <application_id> --json
98
- topolo apps requirements <application_id> --json
99
- topolo apps audit <application_id> --json
100
- topolo services --json
101
- topolo actions --service <application_id_or_slug> --json
122
+ topolo actions validate <action-id> --data '<json>' --json
102
123
  ```
103
124
 
104
- `topolo apps` returns every cataloged Topolo application, including browser-only
105
- Worker apps that do not expose a callable API. `topolo services` returns every
106
- SDK-app id with its default and effective URL. In staging, a
107
- service with `environmentSafe: false` still resolves to a production SDK URL and
108
- the CLI refuses `topolo api` calls for it until a staging URL override is set.
109
- `topolo apps requirements` returns the current versioned app-build contract and should be run
110
- before creating or expanding a Topolo app. `topolo apps audit` returns
111
- catalog-backed requirement scores and migration work. Run `topolo services`
112
- before `topolo api` when you are not using a cataloged action.
125
+ MCP: `topolo_validate_action`.
113
126
 
114
- ### Credential-scoped actions
127
+ For large inputs, write one schema-valid JSON object to a file and pass it without shell escaping:
115
128
 
116
129
  ```bash
117
- topolo actions --service mail --json
118
- topolo actions get app_topolo_mail.messages.send --json
119
- topolo actions call app_topolo_mail.messages.send \
120
- --data '{"mailboxId":"primary","subject":"Hello","text":"..."}' \
121
- --confirm --json
130
+ topolo actions validate <action-id> --data @payload.json --json
131
+ topolo actions plan <action-id> --data @payload.json --json
132
+ topolo actions call <action-id> --data @payload.json --confirm --json
122
133
  ```
123
134
 
124
- `topolo actions` returns the credential-scoped action catalog. Static actions
125
- are filtered by the current organization and permissions. An action with
126
- `authorizationMode: "runtime"` has input-dependent policy; it remains
127
- discoverable, and the target app authorizes the concrete organization,
128
- application, and resource on every call. Prefer catalog actions over `topolo
129
- api` when the target app has published a machine contract through Topolo
130
- Developers. Writes require `--confirm`.
135
+ Fix every returned path-level validation error. Never add undeclared fields to work around a failure.
131
136
 
132
- For an app-local workspace or other resource boundary, pass the resource
133
- separately from the action input. Resource selection is per invocation: it does
134
- not switch the personal/organization credential context or the browser session.
137
+ ### 5. Plan without execution
135
138
 
136
139
  ```bash
137
- topolo actions call app_topolo_inventory.dashboard.get \
138
- --resource-type workspace \
139
- --resource-id <workspace_id> \
140
- --data '{}' --json
140
+ topolo actions plan <action-id> --data '<json>' --json
141
141
  ```
142
142
 
143
- Use a published workspace-list action to discover IDs when the app has multiple
144
- workspaces. For a single default workspace, use the active organization ID from
145
- `topolo whoami --json` when that app defines its workspace as the organization
146
- boundary. Always provide `--resource-type` and `--resource-id` together.
143
+ MCP: `topolo_plan_action`.
147
144
 
148
- ### Generic API passthrough
145
+ The plan must be valid and must expose the resolved request, confirmation requirement, verification steps, and rollback when one is published. If `executable` is false, do not call the action.
149
146
 
150
- For any endpoint that doesn't yet have a typed subcommand:
147
+ ### 6. Confirm mutations
151
148
 
152
- ```bash
153
- topolo api <service> <method> <path> [--data '<json>'] [--query key=value] [--confirm]
154
- ```
149
+ For a mutation, show the user:
155
150
 
156
- - `<service>`: any id from `topolo services --json`.
157
- - `<method>`: `GET` | `POST` | `PUT` | `PATCH` | `DELETE`.
158
- - `<path>`: starts with `/api/…` — don't include the host.
159
- - **Mutating calls require `--confirm`**. If you omit it, the CLI refuses and exits non-zero. This is intentional: confirm before sending writes.
151
+ - exact action id
152
+ - target method and path from the plan
153
+ - exact input and resource context
154
+ - published effects
155
+ - verification steps
156
+ - rollback action, or that no rollback is published
160
157
 
161
- Examples:
158
+ Obtain explicit approval unless the user already gave unambiguous authorization for this exact production work. The CLI’s `--confirm` is a transport guardrail, not user approval.
162
159
 
163
- ```bash
164
- # Read current user via auth service
165
- topolo api auth GET /api/me --json
160
+ Automatic read-only actions use no confirmation. Confirmed actions use:
166
161
 
167
- # Send mail through a published action (requires confirm)
168
- topolo actions call app_topolo_mail.messages.send \
169
- --data '{"mailboxId":"primary","subject":"Hello","text":"..."}' \
170
- --confirm --json
162
+ ```bash
163
+ topolo actions call <action-id> --data '<json>' --confirm --json
171
164
  ```
172
165
 
173
- ## Error handling
166
+ MCP uses `topolo_read_action` for automatic reads and `topolo_call_action` with `confirm: true` for approved mutations.
174
167
 
175
- Exit codes:
168
+ ### 7. Verify and recover
176
169
 
177
- | Code | Meaning | Action |
178
- | --- | --- | --- |
179
- | 0 | Success | — |
180
- | 1 | Generic error | Surface message to user |
181
- | 2 | Auth error (expired, invalid token) | Run `topolo auth login` and retry |
182
- | 3 | Permission denied | User's role/scopes lack the capability — point them to the Developers console |
170
+ Run every published verification step immediately after execution. Prefer a credential-scoped read action and compare returned ids, versions, status, or URLs to the mutation result.
183
171
 
184
- In `--json` mode, errors come on stderr as `{"error":{"message","code","hint","exitCode"}}`. Parse `code` first when branching.
172
+ If verification fails:
185
173
 
186
- Stored OAuth access tokens refresh automatically when the config contains both a refresh token and the OAuth client id used at login. If `whoami` still returns `auth_error`, have the user re-run `topolo auth login`.
174
+ 1. Preserve the action result and request id.
175
+ 2. Read the published error recovery guidance.
176
+ 3. Plan the published rollback action before calling it.
177
+ 4. Obtain confirmation for the rollback unless prior authorization explicitly covered recovery.
178
+ 5. Execute and verify the rollback.
187
179
 
188
- ## Safety rules
180
+ Never improvise a rollback.
189
181
 
190
- 1. **Never run a mutating `topolo actions call …` or `topolo api … POST|PUT|PATCH|DELETE …` without surfacing the exact body to the user first** and confirming. The `--confirm` flag is a guardrail, not your approval.
191
- 2. **Never write credentials to tracked files.** If a user pastes an API key inline, use it via env var for that invocation (`TOPOLO_API_KEY=… topolo whoami`) rather than committing it.
192
- 3. **Cross-org isolation is built-in** — there is no `--org` flag anywhere, and the backend rederives the org from the credential (it ignores org hints in a request body). To act in a different organization, use `topolo context use <org>` to switch the active context — never try to fake one via the passthrough.
193
- 4. Audit headers (`X-Topolo-Client`, `X-Topolo-Request-Id`, optional `X-Topolo-Agent`) are set by the CLI automatically. If `TOPOLO_AGENT_NAME` is already exported in the user's shell, leave it alone — it's the audit trail.
182
+ ## Generic public API escape hatch
194
183
 
195
- ## Common flows
184
+ Only when public docs provide a complete contract:
196
185
 
197
- **"Show me the available Mail actions"**
198
186
  ```bash
199
- topolo whoami --json # confirm org
200
- topolo actions --service mail --json
187
+ topolo api <service> <GET|POST|PUT|PATCH|DELETE> <path> \
188
+ [--query key=value] [--data '<json>'] [--confirm] --json
201
189
  ```
202
190
 
203
- **"Send a message through Mail"**
204
- ```bash
205
- topolo actions call app_topolo_mail.messages.send \
206
- --data '{"mailboxId":"primary","subject":"Hello","text":"..."}' \
207
- --confirm --json
208
- ```
191
+ Discover `<service>` with `topolo services --json`. Mutating methods require explicit approval and `--confirm`. Prefer catalog actions because they carry schemas, effects, verification, and recovery metadata.
209
192
 
210
- **"What scopes does my CLI token have?"**
211
- ```bash
212
- topolo whoami --json | jq '.user.permissions'
213
- ```
193
+ ## Errors and recovery
214
194
 
215
- **"What app id should I use?"**
216
- ```bash
217
- topolo apps --json
218
- topolo apps requirements <application_id> --json
219
- topolo apps audit <application_id> --json
220
- topolo services --json
221
- topolo actions --service mail --json
222
- ```
195
+ In JSON mode, branch on `error.code`, not message text:
223
196
 
224
- **"Sign me in fresh"**
225
- ```bash
226
- topolo auth logout
227
- topolo auth login # no --client-id needed; approve in the browser
228
- ```
197
+ - exit 2 / authentication error: run `topolo auth login`, then repeat identity and discovery.
198
+ - exit 3 / permission denied: surface the missing permission or target denial; do not retry or widen access.
199
+ - `invalid_action_input`: correct only the reported schema paths.
200
+ - `confirmation_required`: plan, obtain approval, then retry once with confirmation.
201
+ - unknown action/service: repeat bounded discovery; never substitute a guessed identifier.
202
+ - missing docs/schema/examples/verification/recovery: stop the affected operation and report the missing publication contract.
229
203
 
230
- **"Sign me in to staging"**
231
- ```bash
232
- topolo auth logout --env staging
233
- topolo auth login --env staging
234
- topolo whoami --env staging --json
235
- ```
204
+ Use `TOPOLO_DEBUG=1` only when diagnostics are needed. Preserve `X-Topolo-Request-Id` from failures for support. Do not expose tokens or API keys in output.
236
205
 
237
- **"Switch to my <Acme> organization" / "work in my personal space"**
238
- ```bash
239
- topolo context ls --json
240
- topolo context use acme --json # or: topolo context use personal
241
- ```
206
+ ## Public references
242
207
 
243
- ## Where to learn more
208
+ - Documentation: `https://docs.topolo.app`
209
+ - Staging documentation: `https://docs.stg.topolo.us`
210
+ - Developers console: `https://developers.topolo.app`
211
+ - CLI help: `topolo --help` and `topolo <command> --help`
244
212
 
245
- - **Topolo documentation:** https://docs.topolo.app — guides (authentication, quick start), API reference, and per-app docs. (Staging: https://docs.stg.topolo.us)
246
- - Register apps / OAuth clients: the Developers console at https://developers.topolo.app
247
- - CLI source (for an undocumented flag): `packages/topolo-cli/src/commands/` in the topolo-platform monorepo.
248
- - SDK package: `packages/topolo-sdk/src/` — authoritative client, dynamic action catalog, and shared response contracts.
213
+ These public surfaces and credential-scoped runtime responses are authoritative. Repository access is neither required nor an accepted fallback.