@isomorph.ai/cli 0.7.3 → 0.7.5
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.
|
@@ -109,7 +109,7 @@ Rules live beside this file: \`core.md\` before the first edit; \`integrations.m
|
|
|
109
109
|
## Getting ready
|
|
110
110
|
|
|
111
111
|
- No \`.isomorph/\` yet: \`isomorph init --app-root .\` (empty folder → starter; an existing app → three choices to relay). Node 22+, no Docker.
|
|
112
|
-
- Sign-in (
|
|
112
|
+
- Sign-in, only when a command answers \`CONFIG_REQUIRED\` or \`AUTH_REQUIRED\` (most machines already are): \`isomorph connect <work-email>\`, then \`isomorph login\` — the browser opens and the person finishes there (their one step; say so).
|
|
113
113
|
|
|
114
114
|
## Intent → command
|
|
115
115
|
|
|
@@ -118,7 +118,7 @@ Rules live beside this file: \`core.md\` before the first edit; \`integrations.m
|
|
|
118
118
|
| "run it", "show me" | \`isomorph dev --app-root . --detach --json\`; give them \`result.origin\` (the first start takes a minute or two). Locally they are a fixture user. |
|
|
119
119
|
| "check it", "is it ready?" | \`isomorph check --app-root . --json\` (the output is the report). Failures in the app's code are yours: fix and re-check until clean, after every change and before every ship, unasked and never offered as a choice. |
|
|
120
120
|
| "does it work?" (and before reporting anything as working) | open the dev link in your own browser, press the control you built or changed, read what the app shows; a green \`isomorph check\` is not that proof (fixtures answer AI and company systems). A Send in development is real: reuse explicit authorization or ask once. No browser: say the button is untested. |
|
|
121
|
-
| "I need Slack / Gmail / the warehouse" | read \`integrations.md\` beside this skill first; then
|
|
121
|
+
| "I need Slack / Gmail / the warehouse" | read \`integrations.md\` beside this skill first; then: catalog, write the call (literals only), \`isomorph check\`, then submit the request; say READY or PENDING in one line. |
|
|
122
122
|
| "summarise", "draft", "AI" | read \`ai.md\` beside this skill first; then one call behind a control they press. |
|
|
123
123
|
| "ship it", "let my team try it" | show the person the three values in \`.isomorph/app.json\` (name, description, audience — "only you" when empty) and correct the file as they say; then \`isomorph deploy --app-root . --json\` (it runs the checks when needed and refuses once naming every blocker and its fix: relay that line; the app works meanwhile). Give them \`result.deployment.protectedUrl\`. \`--session-notes\`: what cost you time in Isomorph, or \`""\`. |
|
|
124
124
|
| "make it live" | only after they have tried the preview: \`isomorph promote --operation <ref> --app-root . --confirm-tested --json\`. Report the production link, or that operator approval is pending. |
|
|
@@ -87,6 +87,15 @@ export async function connect(startUrl, path = configPath(), fetchImpl = fetch)
|
|
|
87
87
|
.catch((error) => { throw new CliError("PLATFORM_UNREACHABLE", `Isomorph at ${url.host} could not be reached: ${transportFailure(error)}.`); });
|
|
88
88
|
const body = await response.json().catch(() => undefined);
|
|
89
89
|
if (!response.ok && isRecord(body) && typeof body.error_description === "string") {
|
|
90
|
+
// A person in two companies who is already connected to one of them is
|
|
91
|
+
// not asking a question: every builder on a connected machine ran
|
|
92
|
+
// `connect <email>` on the skill's say-so and got this refusal (bench,
|
|
93
|
+
// 9 of 21 builds). The saved connection stands; a start link switches.
|
|
94
|
+
if (body.error === "tenant_ambiguous" && Array.isArray(body.tenants)) {
|
|
95
|
+
const saved = await loadConfig(path).catch(() => undefined);
|
|
96
|
+
if (saved && body.tenants.some(tenant => isRecord(tenant) && tenant.tenantId === saved.tenantId))
|
|
97
|
+
return saved;
|
|
98
|
+
}
|
|
90
99
|
// The server's sentence already names the fix. Its links are printed without
|
|
91
100
|
// their scheme: the failure printer strips every full URL (output.ts), and
|
|
92
101
|
// `connect` accepts a link without one. `tenants` (with the full links) rides
|
|
@@ -67,7 +67,7 @@ Never guess a connection, channel, table, view, mailbox or column: a guess is re
|
|
|
67
67
|
|
|
68
68
|
## Request
|
|
69
69
|
|
|
70
|
-
\`isomorph integrations request <connection> --reason "<why>" --app-root . --json\` files the one request IT approves once for every environment
|
|
70
|
+
\`isomorph integrations request <connection> --reason "<why>" --app-root . --json\` files the one request IT approves once for every environment; run it once \`isomorph check\` has read the call (\`dev\`/\`deploy\` file it too). \`isomorph integrations status --app-root . --json\`: READY, use it; PENDING, say "IT has to approve this; the app works meanwhile". \`RESOURCE_NOT_APPROVED\`: IT adds the channel, view or mailbox in the console (Controls & integrations); then run the same request again.
|
|
71
71
|
|
|
72
72
|
## Consent
|
|
73
73
|
|