@axtrabase/cli 0.1.2 → 0.1.4

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 (50) hide show
  1. package/README.md +39 -4
  2. package/dist/api-types.d.ts +39 -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 +71 -20
  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/permissions.js +13 -3
  16. package/dist/commands/permissions.js.map +1 -1
  17. package/dist/commands/status.js +22 -3
  18. package/dist/commands/status.js.map +1 -1
  19. package/dist/commands/tables.js +69 -12
  20. package/dist/commands/tables.js.map +1 -1
  21. package/dist/config/environments.d.ts +43 -0
  22. package/dist/config/environments.d.ts.map +1 -0
  23. package/dist/config/environments.js +43 -0
  24. package/dist/config/environments.js.map +1 -0
  25. package/dist/config/resolve.d.ts +25 -4
  26. package/dist/config/resolve.d.ts.map +1 -1
  27. package/dist/config/resolve.js +59 -11
  28. package/dist/config/resolve.js.map +1 -1
  29. package/dist/config/store.d.ts +4 -2
  30. package/dist/config/store.d.ts.map +1 -1
  31. package/dist/config/store.js +1 -0
  32. package/dist/config/store.js.map +1 -1
  33. package/dist/exit-codes.d.ts.map +1 -1
  34. package/dist/exit-codes.js +8 -0
  35. package/dist/exit-codes.js.map +1 -1
  36. package/dist/generators/typescript.d.ts +15 -0
  37. package/dist/generators/typescript.d.ts.map +1 -1
  38. package/dist/generators/typescript.js +126 -11
  39. package/dist/generators/typescript.js.map +1 -1
  40. package/dist/prompt-masked.d.ts +3 -1
  41. package/dist/prompt-masked.d.ts.map +1 -1
  42. package/dist/prompt-masked.js +23 -2
  43. package/dist/prompt-masked.js.map +1 -1
  44. package/dist/report-error.d.ts +16 -1
  45. package/dist/report-error.d.ts.map +1 -1
  46. package/dist/report-error.js +45 -2
  47. package/dist/report-error.js.map +1 -1
  48. package/dist/version.d.ts +1 -1
  49. package/dist/version.js +1 -1
  50. 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
@@ -111,6 +134,8 @@ Every command supports `-h`/`--help`.
111
134
 
112
135
  ## `context` — the one command to start with
113
136
 
137
+ It runs against the **active project**, so select one first — `axtrabase projects list`, then `axtrabase projects use <project>` (or pass `--project <project>` to any command). Until then it stops with `AXTRA_CLI_NO_ACTIVE_PROJECT`.
138
+
114
139
  ```bash
115
140
  axtrabase context
116
141
  axtrabase context --json # the full payload, machine-readable
@@ -151,10 +176,20 @@ failure and never mixes a printed error with exit code 0.
151
176
  | `AXTRABASE_API_KEY` | A project API key for data-plane commands (`events`). Never persisted or logged. |
152
177
 
153
178
  Precedence everywhere it applies: **explicit flag > environment variable >
154
- saved config > production default.**
179
+ saved config > the active environment's default.**
155
180
 
156
181
  ## Full documentation
157
182
 
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).
183
+ The complete command reference, agent integration guide, and error model are
184
+ public — no source-repository access required:
185
+
186
+ - [CLI reference](https://docs-stg.axtraxia.com/docs/cli/overview)
187
+ - [Installation](https://docs-stg.axtraxia.com/docs/cli/installation) ·
188
+ [Login](https://docs-stg.axtraxia.com/docs/cli/login) ·
189
+ [Exit codes](https://docs-stg.axtraxia.com/docs/cli/exit-codes) ·
190
+ [Environment variables](https://docs-stg.axtraxia.com/docs/cli/environment-variables)
191
+ - [Agent integration guide](https://docs-stg.axtraxia.com/docs/agents/overview), including
192
+ [`context --agent`](https://docs-stg.axtraxia.com/docs/agents/context-agent), the
193
+ [security/trust boundary](https://docs-stg.axtraxia.com/docs/agents/security-trust-boundary)
194
+ and [handing an agent a data key](https://docs-stg.axtraxia.com/docs/agents/data-plane-handoff)
195
+ - [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";
@@ -106,6 +140,11 @@ export interface TablePermissionRowFlat {
106
140
  table: string;
107
141
  isEnabled: boolean;
108
142
  apiKeyId: string;
143
+ apiKeyName?: string;
144
+ /** ISO timestamp when the owning key was revoked, or null if it is live. */
145
+ keyRevokedAt?: string | null;
146
+ /** False when the owning key is revoked — the grant row exists but confers nothing. */
147
+ isEffective?: boolean;
109
148
  canRead: boolean;
110
149
  canCreate: boolean;
111
150
  canUpdate: boolean;
@@ -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,CA8H5D"}
@@ -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,51 +24,90 @@ 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
23
43
  .command("list")
24
- .description("Show every configured value")
44
+ .description("Show every setting in effect, marking defaults")
25
45
  .action(async function () {
26
46
  const options = this.optsWithGlobals();
27
47
  await runWithErrorHandling(async () => {
28
48
  const values = new ConfigStore().read();
49
+ // "No config set." was true of the file and useless to the reader:
50
+ // the CLI is always on SOME environment talking to SOME origins, and
51
+ // a clean-room tester could not confirm which without making an
52
+ // authenticated call. Show what is in effect, marking defaults, so
53
+ // this answers "where am I pointed?" before any login.
54
+ const effective = {
55
+ environment: {
56
+ value: effectiveValueFor("environment"),
57
+ explicit: values.environment !== undefined
58
+ },
59
+ apiUrl: {
60
+ value: values.apiUrl ?? effectiveValueFor("apiUrl"),
61
+ explicit: values.apiUrl !== undefined
62
+ },
63
+ dashboardUrl: {
64
+ value: values.dashboardUrl ?? effectiveValueFor("dashboardUrl"),
65
+ explicit: values.dashboardUrl !== undefined
66
+ }
67
+ };
29
68
  if (options.json) {
30
- printJson(values);
31
- return;
32
- }
33
- const lines = [];
34
- if (values.apiUrl)
35
- lines.push(`api-url: ${values.apiUrl}`);
36
- if (values.dashboardUrl)
37
- lines.push(`dashboard-url: ${values.dashboardUrl}`);
38
- if (values.organisationId) {
39
- lines.push(`organisation: ${values.organisationSlug ?? values.organisationId} (${values.organisationId})`);
40
- }
41
- if (values.projectId) {
42
- lines.push(`project: ${values.projectSlug ?? values.projectId} (${values.projectId})`);
43
- }
44
- if (lines.length === 0) {
45
- printLine("No config set.");
69
+ printJson({ ...values, effective });
46
70
  return;
47
71
  }
72
+ const mark = (explicit) => (explicit ? "" : " (default)");
73
+ const lines = [
74
+ `environment: ${values.environment ?? effective.environment.value}${mark(effective.environment.explicit)}`,
75
+ `api-url: ${effective.apiUrl.value}${mark(effective.apiUrl.explicit)}`,
76
+ `dashboard-url: ${effective.dashboardUrl.value}${mark(effective.dashboardUrl.explicit)}`
77
+ ];
78
+ lines.push(values.organisationId
79
+ ? `organisation: ${values.organisationSlug ?? values.organisationId} (${values.organisationId})`
80
+ : "organisation: (none selected — axtrabase orgs use <org>)");
81
+ lines.push(values.projectId
82
+ ? `project: ${values.projectSlug ?? values.projectId} (${values.projectId})`
83
+ : "project: (none selected — axtrabase projects use <project>)");
48
84
  for (const line of lines)
49
85
  printLine(line);
50
86
  }, options);
51
87
  });
52
88
  config
53
89
  .command("get <key>")
54
- .description("Show one config value (api-url, dashboard-url, organisation, project)")
90
+ .description("Show one config value (environment, api-url, dashboard-url, organisation, project)")
55
91
  .action(async function (key, _opts, command) {
56
92
  const options = command.optsWithGlobals();
57
93
  await runWithErrorHandling(async () => {
58
94
  const field = resolveKey(key);
59
95
  const value = new ConfigStore().read()[field];
96
+ // "(not set)" is a misleading answer for the keys that always have an
97
+ // effective value: the CLI is on SOME environment with SOME pair of
98
+ // origins whether or not they were written to config. Reporting the
99
+ // effective value (marked as a default) is what makes "which
100
+ // environment am I on" answerable — Sprint #11 P0-2/P1-14.
101
+ const effective = value ?? effectiveValueFor(field);
60
102
  if (options.json) {
61
- printJson({ [key]: value ?? null });
103
+ printJson({ [key]: effective ?? null, explicit: value !== undefined });
104
+ return;
105
+ }
106
+ if (effective === undefined) {
107
+ printLine("(not set)");
62
108
  return;
63
109
  }
64
- printLine(value ?? "(not set)");
110
+ printLine(value !== undefined ? effective : `${effective} (default)`);
65
111
  }, options);
66
112
  });
67
113
  config
@@ -71,6 +117,11 @@ export function registerConfigCommand(program) {
71
117
  const options = command.optsWithGlobals();
72
118
  await runWithErrorHandling(async () => {
73
119
  const field = resolveKey(key);
120
+ // A bad environment name must fail here, not later as a confusing
121
+ // origin-resolution error (Sprint #11 P0-2).
122
+ if (field === "environment" && !isEnvironmentName(value.trim().toLowerCase())) {
123
+ throw new CliError("AXTRA_CLI_VALIDATION_ERROR", `Unknown AxtraBase environment "${value}". Valid environments: ${ENVIRONMENT_NAMES.join(", ")}.`, { status: 0 });
124
+ }
74
125
  new ConfigStore().update({ [field]: value });
75
126
  if (options.json) {
76
127
  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}/<logicalName>?limit=3 with header: Authorization: Bearer $AXTRABASE_API_KEY";
34
+ readonly note: "Use the table's logicalName (e.g. adp_expenseitem). That is what GET /api/v1/tables returns as each table's `name`, and what table permissions are granted against. Entity-set names also resolve, but logicalName is the identifier to build on.";
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("<logicalName>").list({ limit: 3 });',
52
+ rest: "GET {apiBaseUrl}/<logicalName>?limit=3 with header: Authorization: Bearer $AXTRABASE_API_KEY",
53
+ note: "Use the table's logicalName (e.g. adp_expenseitem). That is what GET /api/v1/tables returns as each table's `name`, and what table permissions are granted against. Entity-set names also resolve, but logicalName is the identifier to build on."
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":"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"}
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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"}