@axtrabase/cli 0.1.2 → 0.1.3

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 (43) hide show
  1. package/README.md +37 -4
  2. package/dist/api-types.d.ts +34 -0
  3. package/dist/api-types.d.ts.map +1 -1
  4. package/dist/commands/config.d.ts.map +1 -1
  5. package/dist/commands/config.js +38 -3
  6. package/dist/commands/config.js.map +1 -1
  7. package/dist/commands/context.d.ts +62 -0
  8. package/dist/commands/context.d.ts.map +1 -1
  9. package/dist/commands/context.js +82 -6
  10. package/dist/commands/context.js.map +1 -1
  11. package/dist/commands/keys.js +16 -0
  12. package/dist/commands/keys.js.map +1 -1
  13. package/dist/commands/login.js +14 -0
  14. package/dist/commands/login.js.map +1 -1
  15. package/dist/commands/status.js +22 -3
  16. package/dist/commands/status.js.map +1 -1
  17. package/dist/commands/tables.js +69 -12
  18. package/dist/commands/tables.js.map +1 -1
  19. package/dist/config/environments.d.ts +43 -0
  20. package/dist/config/environments.d.ts.map +1 -0
  21. package/dist/config/environments.js +43 -0
  22. package/dist/config/environments.js.map +1 -0
  23. package/dist/config/resolve.d.ts +25 -4
  24. package/dist/config/resolve.d.ts.map +1 -1
  25. package/dist/config/resolve.js +59 -11
  26. package/dist/config/resolve.js.map +1 -1
  27. package/dist/config/store.d.ts +4 -2
  28. package/dist/config/store.d.ts.map +1 -1
  29. package/dist/config/store.js +1 -0
  30. package/dist/config/store.js.map +1 -1
  31. package/dist/exit-codes.d.ts.map +1 -1
  32. package/dist/exit-codes.js +8 -0
  33. package/dist/exit-codes.js.map +1 -1
  34. package/dist/generators/typescript.d.ts.map +1 -1
  35. package/dist/generators/typescript.js +23 -6
  36. package/dist/generators/typescript.js.map +1 -1
  37. package/dist/prompt-masked.d.ts +3 -1
  38. package/dist/prompt-masked.d.ts.map +1 -1
  39. package/dist/prompt-masked.js +23 -2
  40. package/dist/prompt-masked.js.map +1 -1
  41. package/dist/version.d.ts +1 -1
  42. package/dist/version.js +1 -1
  43. package/package.json +11 -11
package/README.md CHANGED
@@ -25,6 +25,29 @@ source ~/.zshrc
25
25
  npm install -g @axtrabase/cli
26
26
  ```
27
27
 
28
+ ## Which environment am I talking to?
29
+
30
+ AxtraBase is currently live on **staging only** — production is not deployed
31
+ yet. A fresh install therefore talks to staging by default, and the API and
32
+ dashboard origins are always paired as a unit, so `login` reaches the same
33
+ environment your commands run against.
34
+
35
+ ```bash
36
+ axtrabase config get environment # staging
37
+ axtrabase status # shows the active API and dashboard origins
38
+ ```
39
+
40
+ To move a whole environment at once (rather than setting origins by hand):
41
+
42
+ ```bash
43
+ axtrabase config set environment staging
44
+ ```
45
+
46
+ Setting `apiUrl` on its own still works and pairs the dashboard to it
47
+ automatically. An `apiUrl`/`dashboardUrl` pair belonging to two different
48
+ environments is rejected rather than silently used — that combination cannot
49
+ produce a working login.
50
+
28
51
  ## Authenticate
29
52
 
30
53
  ```bash
@@ -151,10 +174,20 @@ failure and never mixes a printed error with exit code 0.
151
174
  | `AXTRABASE_API_KEY` | A project API key for data-plane commands (`events`). Never persisted or logged. |
152
175
 
153
176
  Precedence everywhere it applies: **explicit flag > environment variable >
154
- saved config > production default.**
177
+ saved config > the active environment's default.**
155
178
 
156
179
  ## Full documentation
157
180
 
158
- The complete command reference, agent integration guide, and error model
159
- live in [`docs/cli.md`](https://github.com/erdhem/axtrabase/blob/main/docs/cli.md)
160
- and [`docs/agents.md`](https://github.com/erdhem/axtrabase/blob/main/docs/agents.md).
181
+ The complete command reference, agent integration guide, and error model are
182
+ public — no source-repository access required:
183
+
184
+ - [CLI reference](https://docs-stg.axtraxia.com/docs/cli/overview)
185
+ - [Installation](https://docs-stg.axtraxia.com/docs/cli/installation) ·
186
+ [Login](https://docs-stg.axtraxia.com/docs/cli/login) ·
187
+ [Exit codes](https://docs-stg.axtraxia.com/docs/cli/exit-codes) ·
188
+ [Environment variables](https://docs-stg.axtraxia.com/docs/cli/environment-variables)
189
+ - [Agent integration guide](https://docs-stg.axtraxia.com/docs/agents/overview), including
190
+ [`context --agent`](https://docs-stg.axtraxia.com/docs/agents/context-agent), the
191
+ [security/trust boundary](https://docs-stg.axtraxia.com/docs/agents/security-trust-boundary)
192
+ and [handing an agent a data key](https://docs-stg.axtraxia.com/docs/agents/data-plane-handoff)
193
+ - [SDK reference](https://docs-stg.axtraxia.com/docs/sdk/overview)
@@ -57,6 +57,27 @@ export interface TableCatalogEntry {
57
57
  };
58
58
  pendingDataverseSync: boolean;
59
59
  }
60
+ /** One selectable value on a choice column. */
61
+ export interface ChoiceOption {
62
+ value: number;
63
+ label?: string;
64
+ languageCode?: number;
65
+ }
66
+ /**
67
+ * One relationship involving a table. `kind` names the direction, so all
68
+ * three (many-to-one, one-to-many, many-to-many) share one shape.
69
+ */
70
+ export interface TableRelationship {
71
+ kind: "many-to-one" | "one-to-many" | "many-to-many";
72
+ name: string;
73
+ referencingTable?: string;
74
+ referencingColumn?: string;
75
+ referencedTable?: string;
76
+ referencedColumn?: string;
77
+ relatedTable?: string;
78
+ intersectEntity?: string;
79
+ navigationName?: string;
80
+ }
60
81
  export interface TableColumn {
61
82
  logicalName: string;
62
83
  schemaName: string | null;
@@ -67,6 +88,13 @@ export interface TableColumn {
67
88
  isPrimaryName: boolean;
68
89
  isRequired: boolean;
69
90
  lookupTargets: string[] | null;
91
+ /** null = not resolved; [] = this choice genuinely has no options. Never conflate them. */
92
+ options?: ChoiceOption[] | null;
93
+ isMultiSelect?: boolean;
94
+ /** "stored" | "calculated" | "rollup" | "unknown"; null when Dataverse did not report it. */
95
+ source?: string | null;
96
+ /** False for calculated/rollup and other derived columns; null when unknown. */
97
+ isWritable?: boolean | null;
70
98
  }
71
99
  export interface TablePermissionRow {
72
100
  apiKeyId: string;
@@ -85,7 +113,13 @@ export interface TableMetadataResponse {
85
113
  primaryIdAttribute: string;
86
114
  primaryNameAttribute: string | null;
87
115
  isCustomEntity: boolean;
116
+ /** Normalised Dataverse ownership model; null when not reported. */
117
+ ownershipType?: string | null;
118
+ /** Dataverse's exact OwnershipType string, preserving UserOwned vs TeamOwned. */
119
+ rawOwnershipType?: string | null;
88
120
  columns: TableColumn[];
121
+ /** null = not fetched; [] = this table has no relationships. */
122
+ relationships?: TableRelationship[] | null;
89
123
  permissions: TablePermissionRow[];
90
124
  }
91
125
  export type MetadataResolution = "resolved" | "partial" | "unresolved";
@@ -1 +1 @@
1
- {"version":3,"file":"api-types.d.ts","sourceRoot":"","sources":["../src/api-types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"api-types.d.ts","sourceRoot":"","sources":["../src/api-types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgCzC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAkF5D"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAqDzC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAyG5D"}
@@ -1,9 +1,16 @@
1
1
  import { ConfigStore } from "../config/store.js";
2
2
  import { CliError } from "../http/errors.js";
3
+ import { ENVIRONMENT_NAMES, isEnvironmentName } from "../config/environments.js";
4
+ import { resolveApiUrl, resolveDashboardUrl, resolveEnvironmentName } from "../config/resolve.js";
3
5
  import { printJson, printLine } from "../output/print.js";
4
6
  import { runWithErrorHandling } from "../report-error.js";
5
7
  /** kebab-case (what a user types) <-> the CliConfig field it maps to. Deliberately a closed list — config set never accepts an arbitrary key (build brief §25: "do not allow arbitrary secret storage through generic config"). */
6
8
  const KEY_ALIASES = {
9
+ // Selects a whole environment (api + dashboard + docs together) — the
10
+ // preferred way to move between staging and production, rather than
11
+ // setting origins individually and risking a mismatched pair.
12
+ environment: "environment",
13
+ env: "environment",
7
14
  "api-url": "apiUrl",
8
15
  "dashboard-url": "dashboardUrl",
9
16
  organisation: "organisationId",
@@ -17,6 +24,19 @@ function resolveKey(input) {
17
24
  }
18
25
  return key;
19
26
  }
27
+ /** The value a key resolves to today when nothing is written to config. Undefined for keys with no meaningful default (org/project selection). */
28
+ function effectiveValueFor(field) {
29
+ switch (field) {
30
+ case "environment":
31
+ return resolveEnvironmentName();
32
+ case "apiUrl":
33
+ return resolveApiUrl();
34
+ case "dashboardUrl":
35
+ return resolveDashboardUrl();
36
+ default:
37
+ return undefined;
38
+ }
39
+ }
20
40
  export function registerConfigCommand(program) {
21
41
  const config = program.command("config").description("Inspect or change local CLI configuration");
22
42
  config
@@ -51,17 +71,27 @@ export function registerConfigCommand(program) {
51
71
  });
52
72
  config
53
73
  .command("get <key>")
54
- .description("Show one config value (api-url, dashboard-url, organisation, project)")
74
+ .description("Show one config value (environment, api-url, dashboard-url, organisation, project)")
55
75
  .action(async function (key, _opts, command) {
56
76
  const options = command.optsWithGlobals();
57
77
  await runWithErrorHandling(async () => {
58
78
  const field = resolveKey(key);
59
79
  const value = new ConfigStore().read()[field];
80
+ // "(not set)" is a misleading answer for the keys that always have an
81
+ // effective value: the CLI is on SOME environment with SOME pair of
82
+ // origins whether or not they were written to config. Reporting the
83
+ // effective value (marked as a default) is what makes "which
84
+ // environment am I on" answerable — Sprint #11 P0-2/P1-14.
85
+ const effective = value ?? effectiveValueFor(field);
60
86
  if (options.json) {
61
- printJson({ [key]: value ?? null });
87
+ printJson({ [key]: effective ?? null, explicit: value !== undefined });
62
88
  return;
63
89
  }
64
- printLine(value ?? "(not set)");
90
+ if (effective === undefined) {
91
+ printLine("(not set)");
92
+ return;
93
+ }
94
+ printLine(value !== undefined ? effective : `${effective} (default)`);
65
95
  }, options);
66
96
  });
67
97
  config
@@ -71,6 +101,11 @@ export function registerConfigCommand(program) {
71
101
  const options = command.optsWithGlobals();
72
102
  await runWithErrorHandling(async () => {
73
103
  const field = resolveKey(key);
104
+ // A bad environment name must fail here, not later as a confusing
105
+ // origin-resolution error (Sprint #11 P0-2).
106
+ if (field === "environment" && !isEnvironmentName(value.trim().toLowerCase())) {
107
+ throw new CliError("AXTRA_CLI_VALIDATION_ERROR", `Unknown AxtraBase environment "${value}". Valid environments: ${ENVIRONMENT_NAMES.join(", ")}.`, { status: 0 });
108
+ }
74
109
  new ConfigStore().update({ [field]: value });
75
110
  if (options.json) {
76
111
  printJson({ [key]: value });
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,40 @@ import type { Command } from "commander";
6
6
  * rather than assuming a model infers them from field names alone.
7
7
  */
8
8
  export declare const AGENT_RULES: string[];
9
+ /**
10
+ * How an agent actually reads records once a human has handed it a project
11
+ * API key (Sprint #11 P1-12 / Gate 8).
12
+ *
13
+ * The clean-room test could discover the whole schema but could not sample a
14
+ * single record, and the tempting fix — letting the CLI's control-plane
15
+ * token read records — would have collapsed the two credentials into one.
16
+ * That boundary is deliberate and stays: this block instead makes the
17
+ * intended handoff explicit enough to follow without guessing.
18
+ *
19
+ * Purely descriptive, like EVENTS_AGENT_INFO — no server round-trip.
20
+ */
21
+ export declare const DATA_PLANE_AGENT_INFO: {
22
+ readonly credential: {
23
+ readonly envVar: "AXTRABASE_API_KEY";
24
+ readonly kind: "project API key — data plane only (records and events)";
25
+ readonly notTheSameAs: "the CLI token (axcli_...), which is control plane only and can never read records";
26
+ readonly howToObtain: "Ask the human operator. They run `axtrabase keys create --name <name>`, grant it read access to the tables you need in the dashboard, and hand you the raw key.";
27
+ readonly howToRevoke: "The human runs `axtrabase keys revoke <id>` when you are done with it.";
28
+ readonly handling: "Never print, log, echo, write to a file, or commit this key.";
29
+ };
30
+ readonly reading: {
31
+ readonly sdk: "npm install @axtrabase/sdk";
32
+ readonly example: string;
33
+ readonly rest: "GET {apiBaseUrl}/<entitySetName>?limit=3 with header: Authorization: Bearer $AXTRABASE_API_KEY";
34
+ readonly note: "Use the table's entitySetName (the plural URL name), not its logical name.";
35
+ };
36
+ readonly ifDenied: {
37
+ readonly code: "AXTRA_TABLE_PERMISSION_DENIED";
38
+ readonly meaning: "The key is valid but has not been granted this action on this table. This is the platform working as designed — do not route around it.";
39
+ readonly fix: "Ask the human to grant the key read access to that table in the dashboard, then retry.";
40
+ };
41
+ readonly sampling: "When exploring an unfamiliar schema, read the smallest sample that answers your question (limit 3-5). Never bulk-export a customer table to inspect it.";
42
+ };
9
43
  /**
10
44
  * The Change Feed (Events) capability's agent-context payload (Events
11
45
  * Sprint Item #10 §14) — additive and purely descriptive. Deliberately not
@@ -28,5 +62,33 @@ export declare const EVENTS_AGENT_INFO: {
28
62
  eventTypes: readonly ["record.created", "record.updated", "record.deleted"];
29
63
  notes: string[];
30
64
  };
65
+ /**
66
+ * Why a table's access is what it is, as a machine-readable state.
67
+ *
68
+ * `access: null` alone is ambiguous — it could mean no credential was
69
+ * supplied, none exists to supply, or the server could not evaluate one —
70
+ * and the human output additionally bucketed an explicit denial ("----")
71
+ * together with "not evaluated" under one "No access" heading. An agent
72
+ * could not tell "you gave me no credential" from "you are denied", which
73
+ * are opposite problems with opposite fixes (Sprint #11 P1-11).
74
+ */
75
+ export type TableAccessState =
76
+ /** No API key was passed, and the project has none to pass. Create one explicitly. */
77
+ "no-api-key-exists"
78
+ /** The project has API keys, but none was supplied to this command. Re-run with --api-key. */
79
+ | "no-api-key-supplied"
80
+ /** A key was supplied but the server returned no verdict. Unexpected — see api-types.ts. */
81
+ | "unresolved"
82
+ /** Evaluated, and this credential may do nothing with this table. */
83
+ | "denied"
84
+ /** Evaluated, and at least one of read/create/update/delete is permitted. */
85
+ | "granted";
86
+ export interface TableAccessInput {
87
+ access: string | null;
88
+ apiKeyGiven: boolean;
89
+ /** Whether the project has any API keys at all; omitted means unknown. */
90
+ keysExist?: boolean;
91
+ }
92
+ export declare function classifyTableAccess({ access, apiKeyGiven, keysExist }: TableAccessInput): TableAccessState;
31
93
  export declare function registerContextCommand(program: Command): void;
32
94
  //# sourceMappingURL=context.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/commands/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkBzC;;;;;GAKG;AACH,eAAO,MAAM,WAAW,UAUvB,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;CAoB7B,CAAC;AAEF,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAW7D"}
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/commands/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkBzC;;;;;GAKG;AACH,eAAO,MAAM,WAAW,UAYvB,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;CA4BxB,CAAC;AAEX;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;CAoB7B,CAAC;AAEF;;;;;;;;;GASG;AACH,MAAM,MAAM,gBAAgB;AAC1B,sFAAsF;AACpF,mBAAmB;AACrB,8FAA8F;GAC5F,qBAAqB;AACvB,4FAA4F;GAC1F,YAAY;AACd,qEAAqE;GACnE,QAAQ;AACV,6EAA6E;GAC3E,SAAS,CAAC;AAEd,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,WAAW,EAAE,OAAO,CAAC;IACrB,0EAA0E;IAC1E,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,wBAAgB,mBAAmB,CAAC,EAClC,MAAM,EACN,WAAW,EACX,SAAS,EACV,EAAE,gBAAgB,GAAG,gBAAgB,CAOrC;AAWD,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAW7D"}
@@ -17,10 +17,48 @@ export const AGENT_RULES = [
17
17
  "Keep API keys server-side (Next.js Server Components/Route Handlers/Actions, or your own backend) — never in browser/client code.",
18
18
  "The access field on each table (R/C/U/D shorthand) is what this credential can actually do — never assume broader access than shown, and re-run this command after permissions change.",
19
19
  "metadataCapabilities tells you what's actually known: 'unresolved' means AxtraBase does not have that information yet — never fabricate a relationship or a choice field's option values.",
20
- "If no API key is listed, one is required for data access. Create it explicitly: axtrabase keys create --name <name>. Never assumed or auto-created.",
20
+ "Two separate credentials, never interchangeable. The CLI token (axcli_...) is CONTROL PLANE only: projects, schema, permissions, metadata. It can never read or write records. A project API key (AXTRABASE_API_KEY) is DATA PLANE only: records and events. Never attempt to read records with the CLI token, and never ask for Dataverse or Microsoft credentials — AxtraBase does not expose them and does not need them.",
21
+ "If you have no API key, ask the human operator for one rather than creating it yourself. Creating a key is a deliberate human action (axtrabase keys create --name <name>), and a new key starts with NO table access until the human grants it in the dashboard. Say which tables you need to read and why; the human can then hand you a disposable key and revoke it afterwards with axtrabase keys revoke <id>.",
22
+ "Once given a key, set AXTRABASE_API_KEY and read through the SDK or REST API only — see the dataPlane field in this payload for the exact shape. Treat the key as a secret: never print it, never write it to a file, never commit it.",
21
23
  "Use request IDs for debugging: axtrabase requests get <request-id> --json.",
22
24
  'Events (the public Change Feed) are also available: axtrabase events list/get/tail, GET /api/v1/events(/:eventId|/stream), or axtra.events.* in the SDK — see this payload\'s events field. changedFields may be null, meaning the exact changed-field set is unknown, never "nothing changed." The stream is at-least-once, so deduplicate on event.id. Retention is finite — do not assume a full historical log exists.'
23
25
  ];
26
+ /**
27
+ * How an agent actually reads records once a human has handed it a project
28
+ * API key (Sprint #11 P1-12 / Gate 8).
29
+ *
30
+ * The clean-room test could discover the whole schema but could not sample a
31
+ * single record, and the tempting fix — letting the CLI's control-plane
32
+ * token read records — would have collapsed the two credentials into one.
33
+ * That boundary is deliberate and stays: this block instead makes the
34
+ * intended handoff explicit enough to follow without guessing.
35
+ *
36
+ * Purely descriptive, like EVENTS_AGENT_INFO — no server round-trip.
37
+ */
38
+ export const DATA_PLANE_AGENT_INFO = {
39
+ credential: {
40
+ envVar: "AXTRABASE_API_KEY",
41
+ kind: "project API key — data plane only (records and events)",
42
+ notTheSameAs: "the CLI token (axcli_...), which is control plane only and can never read records",
43
+ howToObtain: "Ask the human operator. They run `axtrabase keys create --name <name>`, grant it read access to the tables you need in the dashboard, and hand you the raw key.",
44
+ howToRevoke: "The human runs `axtrabase keys revoke <id>` when you are done with it.",
45
+ handling: "Never print, log, echo, write to a file, or commit this key."
46
+ },
47
+ reading: {
48
+ sdk: "npm install @axtrabase/sdk",
49
+ example: 'import { AxtraBase } from "@axtrabase/sdk";\n' +
50
+ "const axtra = new AxtraBase({ apiKey: process.env.AXTRABASE_API_KEY });\n" +
51
+ 'const { data } = await axtra.table("<entitySetName>").list({ limit: 3 });',
52
+ rest: "GET {apiBaseUrl}/<entitySetName>?limit=3 with header: Authorization: Bearer $AXTRABASE_API_KEY",
53
+ note: "Use the table's entitySetName (the plural URL name), not its logical name."
54
+ },
55
+ ifDenied: {
56
+ code: "AXTRA_TABLE_PERMISSION_DENIED",
57
+ meaning: "The key is valid but has not been granted this action on this table. This is the platform working as designed — do not route around it.",
58
+ fix: "Ask the human to grant the key read access to that table in the dashboard, then retry."
59
+ },
60
+ sampling: "When exploring an unfamiliar schema, read the smallest sample that answers your question (limit 3-5). Never bulk-export a customer table to inspect it."
61
+ };
24
62
  /**
25
63
  * The Change Feed (Events) capability's agent-context payload (Events
26
64
  * Sprint Item #10 §14) — additive and purely descriptive. Deliberately not
@@ -49,6 +87,23 @@ export const EVENTS_AGENT_INFO = {
49
87
  "axtrabase events tail starts from now by default; pass --after <cursor-or-event-id> to catch up from a previous list()/tail() position first, then it stays live."
50
88
  ]
51
89
  };
90
+ export function classifyTableAccess({ access, apiKeyGiven, keysExist }) {
91
+ if (access === null || access === undefined) {
92
+ if (apiKeyGiven)
93
+ return "unresolved";
94
+ return keysExist === false ? "no-api-key-exists" : "no-api-key-supplied";
95
+ }
96
+ // "----" is an explicit, evaluated denial, not an absence of information.
97
+ return /[RCUD]/.test(access) ? "granted" : "denied";
98
+ }
99
+ /** One-line explanation of a state, for human output. */
100
+ const ACCESS_STATE_LABELS = {
101
+ "no-api-key-exists": "No API key exists — create one with: axtrabase keys create --name <name>",
102
+ "no-api-key-supplied": "Not evaluated — re-run with --api-key <id> to resolve access",
103
+ unresolved: "Could not be resolved by the server",
104
+ denied: "Denied for this API key",
105
+ granted: "Granted"
106
+ };
52
107
  export function registerContextCommand(program) {
53
108
  program
54
109
  .command("context")
@@ -79,11 +134,22 @@ async function runContext(options) {
79
134
  project: data.project,
80
135
  organisation: data.organisation,
81
136
  connection: data.connection,
82
- tables: data.tables,
137
+ // Each table carries an explicit accessState so `access: null` is never
138
+ // the only thing an agent has to reason from (Sprint #11 P1-11).
139
+ tables: data.tables.map((table) => ({
140
+ ...table,
141
+ accessState: classifyTableAccess({
142
+ access: table.access,
143
+ apiKeyGiven: Boolean(options.apiKey),
144
+ keysExist: data.apiKeys.length > 0
145
+ })
146
+ })),
147
+ accessStates: ACCESS_STATE_LABELS,
83
148
  tableCounts: data.tableCounts,
84
149
  tablesUnavailableReason: data.tablesUnavailableReason,
85
150
  apiKeys: data.apiKeys.map((key) => ({ id: key.id, name: key.name, prefix: key.prefix })),
86
151
  metadataCapabilities: data.metadataCapabilities,
152
+ dataPlane: DATA_PLANE_AGENT_INFO,
87
153
  events: EVENTS_AGENT_INFO
88
154
  });
89
155
  return;
@@ -111,9 +177,13 @@ function printHumanContext(data, apiUrl, apiKeyGiven) {
111
177
  else if (data.tables.length > 0) {
112
178
  printLine();
113
179
  if (apiKeyGiven) {
180
+ const stateOf = (t) => classifyTableAccess({ access: t.access, apiKeyGiven: true, keysExist: true });
114
181
  const writable = data.tables.filter((t) => t.access && /[CUD]/.test(t.access));
115
182
  const readOnly = data.tables.filter((t) => t.access === "R---");
116
- const noAccess = data.tables.filter((t) => !t.access || t.access === "----");
183
+ // Denied and not-evaluated are listed separately: one is a permissions
184
+ // problem, the other is a missing credential.
185
+ const denied = data.tables.filter((t) => stateOf(t) === "denied");
186
+ const unresolved = data.tables.filter((t) => stateOf(t) === "unresolved");
117
187
  if (writable.length > 0) {
118
188
  printLine("Writable tables:");
119
189
  for (const t of writable)
@@ -125,10 +195,16 @@ function printHumanContext(data, apiUrl, apiKeyGiven) {
125
195
  for (const t of readOnly)
126
196
  printLine(`- ${t.displayName} ${t.access}`);
127
197
  }
128
- if (noAccess.length > 0) {
198
+ if (denied.length > 0) {
199
+ printLine();
200
+ printLine("Access denied for this API key:");
201
+ for (const t of denied)
202
+ printLine(`- ${t.displayName}`);
203
+ }
204
+ if (unresolved.length > 0) {
129
205
  printLine();
130
- printLine("No access:");
131
- for (const t of noAccess)
206
+ printLine("Access could not be resolved:");
207
+ for (const t of unresolved)
132
208
  printLine(`- ${t.displayName}`);
133
209
  }
134
210
  }
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/commands/context.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAE9D,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,yBAAyB,EAAE,MAAM,iCAAiC,CAAC;AAC5E,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAW1D;;;;;GAKG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,2aAA2a;IAC3a,wKAAwK;IACxK,gGAAgG;IAChG,mIAAmI;IACnI,wLAAwL;IACxL,2LAA2L;IAC3L,qJAAqJ;IACrJ,4EAA4E;IAC5E,4ZAA4Z;CAC7Z,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,QAAQ,EAAE;QACR,IAAI,EAAE,kGAAkG;QACxG,GAAG,EAAE,iCAAiC;QACtC,IAAI,EAAE,qGAAqG;KAC5G;IACD,IAAI,EAAE;QACJ,IAAI,EAAE,oBAAoB;QAC1B,GAAG,EAAE,6BAA6B;QAClC,MAAM,EAAE,2BAA2B;KACpC;IACD,GAAG,EAAE,wEAAwE;IAC7E,UAAU,EAAE,WAAW;IACvB,KAAK,EAAE;QACL,yMAAyM;QACzM,+KAA+K;QAC/K,4HAA4H;QAC5H,iIAAiI;QACjI,mKAAmK;KACpK;CACF,CAAC;AAEF,MAAM,UAAU,sBAAsB,CAAC,OAAgB;IACrD,OAAO;SACJ,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,sEAAsE,CAAC;SACnF,MAAM,CAAC,qBAAqB,EAAE,0CAA0C,CAAC;SACzE,MAAM,CAAC,gBAAgB,EAAE,+CAA+C,CAAC;SACzE,MAAM,CAAC,SAAS,EAAE,+CAA+C,CAAC;SAClE,MAAM,CAAC,KAAK;QACX,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,EAAkB,CAAC;QACvD,MAAM,oBAAoB,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;AACP,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,OAAuB;IAC/C,MAAM,MAAM,GAAG,yBAAyB,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACrE,MAAM,SAAS,GAAG,MAAM,sBAAsB,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IACxE,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,GAAG,CAC/B,oBAAoB,SAAS,UAAU,EACvC;QACE,QAAQ,EAAE,OAAO,CAAC,MAAM;KACzB,CACF,CAAC;IACF,MAAM,MAAM,GAAG,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAE7C,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QAClB,SAAS,CAAC;YACR,SAAS,EAAE;gBACT,KAAK,EAAE,WAAW;gBAClB,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO;gBACrB,UAAU,EAAE,GAAG,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE;gBACjD,SAAS,EAAE,EAAE,gBAAgB,EAAE,4CAA4C,EAAE;aAC9E;YACD,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,uBAAuB,EAAE,IAAI,CAAC,uBAAuB;YACrD,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;YACxF,oBAAoB,EAAE,IAAI,CAAC,oBAAoB;YAC/C,MAAM,EAAE,iBAAiB;SAC1B,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IAED,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,SAAS,CAAC,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;QAC9D,OAAO;IACT,CAAC;IAED,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;AAClD,CAAC;AAED,SAAS,iBAAiB,CACxB,IAA4B,EAC5B,MAAc,EACd,WAA+B;IAE/B,SAAS,CAAC,YAAY,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IAC3C,SAAS,CAAC,iBAAiB,IAAI,CAAC,YAAY,EAAE,IAAI,IAAI,GAAG,EAAE,CAAC,CAAC;IAC7D,SAAS,CAAC,eAAe,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC;IACvF,IAAI,IAAI,CAAC,UAAU,EAAE,cAAc;QAAE,SAAS,CAAC,gBAAgB,IAAI,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC,CAAC;IACjG,SAAS,EAAE,CAAC;IACZ,SAAS,CAAC,qBAAqB,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC,CAAC;IAC7D,SAAS,CAAC,kBAAkB,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC;IACvD,SAAS,CAAC,mBAAmB,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC;IAEzD,IAAI,IAAI,CAAC,uBAAuB,EAAE,CAAC;QACjC,SAAS,EAAE,CAAC;QACZ,SAAS,CAAC,SAAS,IAAI,CAAC,uBAAuB,EAAE,CAAC,CAAC;IACrD,CAAC;SAAM,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClC,SAAS,EAAE,CAAC;QACZ,IAAI,WAAW,EAAE,CAAC;YAChB,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;YAC/E,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC;YAChE,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC;YAC7E,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACxB,SAAS,CAAC,kBAAkB,CAAC,CAAC;gBAC9B,KAAK,MAAM,CAAC,IAAI,QAAQ;oBAAE,SAAS,CAAC,KAAK,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;YACxE,CAAC;YACD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACxB,SAAS,EAAE,CAAC;gBACZ,SAAS,CAAC,mBAAmB,CAAC,CAAC;gBAC/B,KAAK,MAAM,CAAC,IAAI,QAAQ;oBAAE,SAAS,CAAC,KAAK,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;YACxE,CAAC;YACD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACxB,SAAS,EAAE,CAAC;gBACZ,SAAS,CAAC,YAAY,CAAC,CAAC;gBACxB,KAAK,MAAM,CAAC,IAAI,QAAQ;oBAAE,SAAS,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;YAC5D,CAAC;QACH,CAAC;aAAM,CAAC;YACN,SAAS,CAAC,iBAAiB,CAAC,CAAC;YAC7B,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM;gBAAE,SAAS,CAAC,KAAK,CAAC,CAAC,WAAW,KAAK,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC;YAChF,SAAS,EAAE,CAAC;YACZ,SAAS,CAAC,2DAA2D,CAAC,CAAC;QACzE,CAAC;IACH,CAAC;IAED,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9B,SAAS,EAAE,CAAC;QACZ,SAAS,CAAC,kFAAkF,CAAC,CAAC;QAC9F,SAAS,CAAC,kDAAkD,CAAC,CAAC;IAChE,CAAC;IAED,SAAS,EAAE,CAAC;IACZ,SAAS,CAAC,MAAM,CAAC,CAAC;IAClB,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC5B,SAAS,EAAE,CAAC;IACZ,SAAS,CAAC,WAAW,CAAC,CAAC;IACvB,SAAS,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC,CAAC;IACjD,SAAS,EAAE,CAAC;IACZ,SAAS,CAAC,oBAAoB,CAAC,CAAC;IAChC,SAAS,CAAC,8BAA8B,CAAC,CAAC;IAC1C,SAAS,CAAC,qCAAqC,CAAC,CAAC;AACnD,CAAC"}
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/commands/context.ts"],"names":[],"mappings":"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"}
@@ -79,6 +79,22 @@ async function runCreate(options) {
79
79
  ["Prefix", data.prefix],
80
80
  ["ID", data.id]
81
81
  ]);
82
+ // A new key can do nothing until table access is granted, and the point at
83
+ // which someone holds a raw key is exactly when they need to know what it
84
+ // is for and how to take it back. Saying so here is what makes the
85
+ // human-to-agent handoff followable without guessing (Sprint #11 P1-12).
86
+ printLine();
87
+ printLine("This key is DATA PLANE only — records and events. It cannot read or");
88
+ printLine("change projects, schema, or permissions, and it is not your CLI token.");
89
+ printLine();
90
+ printLine("It currently has NO table access. Grant it read access to the tables you");
91
+ printLine("want readable, in the dashboard, before handing it to anyone.");
92
+ printLine();
93
+ printLine("To hand it to a coding agent or CI job:");
94
+ printLine(` export AXTRABASE_API_KEY=${data.prefix}...`);
95
+ printLine();
96
+ printLine("When they are done with it:");
97
+ printLine(` axtrabase keys revoke ${data.id}`);
82
98
  }
83
99
  async function runRevoke(id, options) {
84
100
  const client = requireControlPlaneClient({ apiUrl: options.apiUrl });
@@ -1 +1 @@
1
- {"version":3,"file":"keys.js","sourceRoot":"","sources":["../../src/commands/keys.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"keys.js","sourceRoot":"","sources":["../../src/commands/keys.ts"],"names":[],"mappings":"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"}
@@ -22,6 +22,20 @@ async function runLogin(options) {
22
22
  const apiUrl = resolveApiUrl(options.apiUrl);
23
23
  const dashboardUrl = resolveDashboardUrl(options.dashboardUrl);
24
24
  const tokenPageUrl = `${dashboardUrl}/account/cli-tokens`;
25
+ // `login` is interactive by definition: it ends in a pasted secret. In an
26
+ // agent or CI environment there is no terminal to paste at, so fail here
27
+ // rather than opening a browser nobody can see and then blocking on a
28
+ // prompt nobody can answer (Sprint #11 P1-10). promptMasked enforces the
29
+ // same contract if stdin closes mid-flight; this is the early, explicit
30
+ // path that also avoids the pointless browser launch.
31
+ if (!process.stdin.isTTY) {
32
+ throw new CliError("AXTRA_CLI_NON_INTERACTIVE", "axtrabase login is interactive — it ends by pasting a CLI token — and there is no terminal attached.\n\n" +
33
+ "For an agent or CI environment, supply the token directly instead of logging in:\n" +
34
+ " export AXTRABASE_CLI_TOKEN=axcli_...\n\n" +
35
+ `Generate one at ${tokenPageUrl}\n` +
36
+ "The token is read fresh on every command and is never written to disk. " +
37
+ "Revoke it with `axtrabase logout --revoke` when the session is done.", { status: 0 });
38
+ }
25
39
  if (options.open === false) {
26
40
  printLine(`Visit this URL to generate a CLI token:`);
27
41
  printLine(tokenPageUrl);
@@ -1 +1 @@
1
- {"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { resolveActiveProjectId } from "../active-project.js";
2
- import { resolveApiUrl } from "../config/resolve.js";
2
+ import { resolveApiUrl, resolveDashboardUrl, resolveEnvironment } from "../config/resolve.js";
3
3
  import { requireControlPlaneClient } from "../http/authenticated-client.js";
4
4
  import { printJson, printKeyValueBlock } from "../output/print.js";
5
5
  import { runWithErrorHandling } from "../report-error.js";
@@ -24,8 +24,25 @@ async function runStatus(options) {
24
24
  const client = requireControlPlaneClient({ apiUrl: options.apiUrl });
25
25
  const projectId = await resolveActiveProjectId(client, options.project);
26
26
  const { data } = await client.get(`/api/v1/projects/${projectId}/context`);
27
+ // Sprint #11 P0-2: which environment a command is actually talking to must
28
+ // be obvious, and the API/dashboard pair must be visible together — the
29
+ // clean-room tester had a staging API and a production dashboard with
30
+ // nothing on screen to reveal it.
31
+ const environment = resolveEnvironment();
32
+ const apiUrl = resolveApiUrl(options.apiUrl);
33
+ const dashboardUrl = resolveDashboardUrl();
27
34
  if (options.json) {
28
- printJson({ authenticated: true, ...data });
35
+ printJson({
36
+ authenticated: true,
37
+ environment: {
38
+ name: environment.name,
39
+ deployed: environment.deployed,
40
+ apiUrl,
41
+ dashboardUrl,
42
+ docsUrl: environment.docsUrl
43
+ },
44
+ ...data
45
+ });
29
46
  return;
30
47
  }
31
48
  const connectionConnected = data.connection?.status === "CONNECTED";
@@ -40,7 +57,9 @@ async function runStatus(options) {
40
57
  ["Tables available", String(data.tableCounts.available)],
41
58
  ["Tables enabled", String(data.tableCounts.enabled)],
42
59
  ["API keys", `${data.apiKeys.length} active`],
43
- ["API", resolveApiUrl(options.apiUrl)]
60
+ ["Environment", environment.deployed ? environment.name : `${environment.name} (not deployed)`],
61
+ ["API", apiUrl],
62
+ ["Dashboard", dashboardUrl]
44
63
  ]);
45
64
  }
46
65
  //# sourceMappingURL=status.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAE9D,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,yBAAyB,EAAE,MAAM,iCAAiC,CAAC;AAC5E,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAS1D;;;;;;GAMG;AACH,MAAM,UAAU,qBAAqB,CAAC,OAAgB;IACpD,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,kFAAkF,CAAC;SAC/F,MAAM,CAAC,qBAAqB,EAAE,0CAA0C,CAAC;SACzE,MAAM,CAAC,KAAK;QACX,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,EAAiB,CAAC;QACtD,MAAM,oBAAoB,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;AACP,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,OAAsB;IAC7C,MAAM,MAAM,GAAG,yBAAyB,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACrE,MAAM,SAAS,GAAG,MAAM,sBAAsB,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IACxE,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,GAAG,CAC/B,oBAAoB,SAAS,UAAU,CACxC,CAAC;IAEF,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,SAAS,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;QAC5C,OAAO;IACT,CAAC;IAED,MAAM,mBAAmB,GAAG,IAAI,CAAC,UAAU,EAAE,MAAM,KAAK,WAAW,CAAC;IACpE,kBAAkB,CAAC;QACjB,CAAC,gBAAgB,EAAE,GAAG,CAAC;QACvB,CAAC,cAAc,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,IAAI,GAAG,CAAC;QAChD,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;QAC9B;YACE,sBAAsB;YACtB,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,iBAAiB;SAC3F;QACD,CAAC,kBAAkB,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;QACxD,CAAC,gBAAgB,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QACpD,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,SAAS,CAAC;QAC7C,CAAC,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;KACvC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"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"}