@xyteai/cli 0.1.0 → 0.2.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.
Files changed (91) hide show
  1. package/README.md +27 -5
  2. package/dist/cli/index.d.ts +2 -2
  3. package/dist/cli/index.d.ts.map +1 -1
  4. package/dist/cli/index.js +52 -44
  5. package/dist/cli/index.js.map +1 -1
  6. package/dist/client/create-client.js +14 -14
  7. package/dist/client/create-client.js.map +1 -1
  8. package/dist/config/readiness.d.ts +2 -2
  9. package/dist/config/readiness.d.ts.map +1 -1
  10. package/dist/config/readiness.js +1 -1
  11. package/dist/config/readiness.js.map +1 -1
  12. package/dist/index.d.ts +2 -1
  13. package/dist/index.d.ts.map +1 -1
  14. package/dist/index.js +5 -4
  15. package/dist/index.js.map +1 -1
  16. package/dist/mcp/server.d.ts +2 -2
  17. package/dist/mcp/server.d.ts.map +1 -1
  18. package/dist/mcp/server.js +3 -3
  19. package/dist/mcp/server.js.map +1 -1
  20. package/dist/namespaces/device.d.ts +1 -0
  21. package/dist/namespaces/device.d.ts.map +1 -1
  22. package/dist/namespaces/device.js +1 -0
  23. package/dist/namespaces/device.js.map +1 -1
  24. package/dist/namespaces/organization.d.ts +1 -0
  25. package/dist/namespaces/organization.d.ts.map +1 -1
  26. package/dist/namespaces/organization.js +1 -0
  27. package/dist/namespaces/organization.js.map +1 -1
  28. package/dist/secure/{keychain.d.ts → secret-store.d.ts} +16 -4
  29. package/dist/secure/secret-store.d.ts.map +1 -0
  30. package/dist/secure/secret-store.js +140 -0
  31. package/dist/secure/secret-store.js.map +1 -0
  32. package/dist/spec/public-endpoints.json +37 -0
  33. package/dist/tui/app.d.ts +2 -2
  34. package/dist/tui/app.d.ts.map +1 -1
  35. package/dist/tui/app.js +5 -5
  36. package/dist/tui/app.js.map +1 -1
  37. package/dist/tui/headless-renderer.d.ts +2 -2
  38. package/dist/tui/headless-renderer.d.ts.map +1 -1
  39. package/dist/tui/headless-renderer.js +4 -4
  40. package/dist/tui/headless-renderer.js.map +1 -1
  41. package/dist/tui/key-wizard.d.ts +1 -1
  42. package/dist/tui/key-wizard.d.ts.map +1 -1
  43. package/dist/tui/key-wizard.js +2 -2
  44. package/dist/tui/key-wizard.js.map +1 -1
  45. package/dist/tui/screens/config.js +6 -6
  46. package/dist/tui/screens/config.js.map +1 -1
  47. package/dist/tui/types.d.ts +2 -2
  48. package/dist/tui/types.d.ts.map +1 -1
  49. package/dist/types/client.d.ts +2 -2
  50. package/dist/types/client.d.ts.map +1 -1
  51. package/dist/workflows/fleet-insights.d.ts +7 -8
  52. package/dist/workflows/fleet-insights.d.ts.map +1 -1
  53. package/dist/workflows/fleet-insights.js +10 -492
  54. package/dist/workflows/fleet-insights.js.map +1 -1
  55. package/dist/workflows/report/font-asset.d.ts +8 -0
  56. package/dist/workflows/report/font-asset.d.ts.map +1 -0
  57. package/dist/workflows/report/font-asset.js +1462 -0
  58. package/dist/workflows/report/font-asset.js.map +1 -0
  59. package/dist/workflows/report/logo-asset.d.ts +7 -0
  60. package/dist/workflows/report/logo-asset.d.ts.map +1 -0
  61. package/dist/workflows/report/logo-asset.js +707 -0
  62. package/dist/workflows/report/logo-asset.js.map +1 -0
  63. package/dist/workflows/report/pdf-layout.d.ts +59 -0
  64. package/dist/workflows/report/pdf-layout.d.ts.map +1 -0
  65. package/dist/workflows/report/pdf-layout.js +388 -0
  66. package/dist/workflows/report/pdf-layout.js.map +1 -0
  67. package/dist/workflows/report/pdf-render.d.ts +3 -0
  68. package/dist/workflows/report/pdf-render.d.ts.map +1 -0
  69. package/dist/workflows/report/pdf-render.js +221 -0
  70. package/dist/workflows/report/pdf-render.js.map +1 -0
  71. package/dist/workflows/report/pdf-table.d.ts +33 -0
  72. package/dist/workflows/report/pdf-table.d.ts.map +1 -0
  73. package/dist/workflows/report/pdf-table.js +213 -0
  74. package/dist/workflows/report/pdf-table.js.map +1 -0
  75. package/dist/workflows/report/theme.d.ts +53 -0
  76. package/dist/workflows/report/theme.d.ts.map +1 -0
  77. package/dist/workflows/report/theme.js +95 -0
  78. package/dist/workflows/report/theme.js.map +1 -0
  79. package/dist/workflows/report/time-format.d.ts +5 -0
  80. package/dist/workflows/report/time-format.d.ts.map +1 -0
  81. package/dist/workflows/report/time-format.js +112 -0
  82. package/dist/workflows/report/time-format.js.map +1 -0
  83. package/docs/schemas/inspect-deep-dive.v1.schema.json +3 -0
  84. package/package.json +5 -1
  85. package/skills/xyte-cli/SKILL.md +7 -2
  86. package/skills/xyte-cli/agents/openai.yaml +1 -1
  87. package/skills/xyte-cli/references/endpoints.md +23 -0
  88. package/skills/xyte-cli/scripts/check_headless.sh +1 -1
  89. package/dist/secure/keychain.d.ts.map +0 -1
  90. package/dist/secure/keychain.js +0 -170
  91. package/dist/secure/keychain.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme.js","sourceRoot":"","sources":["../../../src/workflows/report/theme.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export declare function parseTimestamp(value: unknown): Date | undefined;
2
+ export declare function formatUtcForReport(value: unknown): string;
3
+ export declare function formatRelativeAgeFromHours(hours: number): string;
4
+ export declare function formatWindowLabel(windowHours: number): string;
5
+ //# sourceMappingURL=time-format.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"time-format.d.ts","sourceRoot":"","sources":["../../../src/workflows/report/time-format.ts"],"names":[],"mappings":"AAaA,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,GAAG,SAAS,CAkD/D;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAYzD;AAED,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAgBhE;AAED,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CA0B7D"}
@@ -0,0 +1,112 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseTimestamp = parseTimestamp;
4
+ exports.formatUtcForReport = formatUtcForReport;
5
+ exports.formatRelativeAgeFromHours = formatRelativeAgeFromHours;
6
+ exports.formatWindowLabel = formatWindowLabel;
7
+ function identifier(value) {
8
+ if (value === undefined || value === null) {
9
+ return 'n/a';
10
+ }
11
+ return String(value);
12
+ }
13
+ function formatTwoDigits(value) {
14
+ return String(value).padStart(2, '0');
15
+ }
16
+ const MONTHS_SHORT = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
17
+ function parseTimestamp(value) {
18
+ if (typeof value !== 'string' || !value.trim()) {
19
+ return undefined;
20
+ }
21
+ const trimmed = value.trim();
22
+ const normalized = trimmed.replace(/\s+/, 'T');
23
+ const parts = normalized.match(/^(\d{4}-\d{2}-\d{2})(?:T(\d{2}):(\d{2})(?::(\d{2})(?:\.(\d+))?)?)?(Z|[+-]\d{2}(?::?\d{2})?)?$/i);
24
+ if (parts) {
25
+ const date = parts[1];
26
+ const hour = parts[2] ?? '00';
27
+ const minute = parts[3] ?? '00';
28
+ const second = parts[4] ?? '00';
29
+ const fraction = parts[5] ? `.${parts[5].slice(0, 3).padEnd(3, '0')}` : '';
30
+ const zoneRaw = parts[6] ?? 'Z';
31
+ const zone = /^[+-]\d{4}$/.test(zoneRaw)
32
+ ? `${zoneRaw.slice(0, 3)}:${zoneRaw.slice(3)}`
33
+ : /^[+-]\d{2}$/.test(zoneRaw)
34
+ ? `${zoneRaw}:00`
35
+ : zoneRaw;
36
+ const iso = `${date}T${hour}:${minute}:${second}${fraction}${zone}`;
37
+ const parsedIso = new Date(iso);
38
+ if (!Number.isNaN(parsedIso.getTime())) {
39
+ return parsedIso;
40
+ }
41
+ }
42
+ if (/^\d{4}-\d{2}-\d{2}T/.test(trimmed) && !/(Z|[+-]\d{2}(?::?\d{2})?)$/i.test(trimmed)) {
43
+ const asUtc = new Date(`${trimmed}Z`);
44
+ if (!Number.isNaN(asUtc.getTime())) {
45
+ return asUtc;
46
+ }
47
+ }
48
+ if (/^\d{4}-\d{2}-\d{2}$/.test(trimmed)) {
49
+ const asDateUtc = new Date(`${trimmed}T00:00:00Z`);
50
+ if (!Number.isNaN(asDateUtc.getTime())) {
51
+ return asDateUtc;
52
+ }
53
+ }
54
+ const direct = new Date(trimmed);
55
+ if (!Number.isNaN(direct.getTime())) {
56
+ return direct;
57
+ }
58
+ return undefined;
59
+ }
60
+ function formatUtcForReport(value) {
61
+ const parsed = parseTimestamp(value);
62
+ if (!parsed) {
63
+ return identifier(value);
64
+ }
65
+ const month = MONTHS_SHORT[parsed.getUTCMonth()];
66
+ const day = formatTwoDigits(parsed.getUTCDate());
67
+ const year = parsed.getUTCFullYear();
68
+ const hh = formatTwoDigits(parsed.getUTCHours());
69
+ const mm = formatTwoDigits(parsed.getUTCMinutes());
70
+ return `${month} ${day}, ${year} ${hh}:${mm} UTC`;
71
+ }
72
+ function formatRelativeAgeFromHours(hours) {
73
+ if (!Number.isFinite(hours) || hours <= 0.5) {
74
+ return 'just now';
75
+ }
76
+ const wholeHours = Math.max(0, Math.round(hours));
77
+ if (wholeHours < 24) {
78
+ return `${wholeHours}h ago`;
79
+ }
80
+ const days = Math.floor(wholeHours / 24);
81
+ const remainderHours = wholeHours % 24;
82
+ if (remainderHours === 0) {
83
+ return `${days}d ago`;
84
+ }
85
+ return `${days}d ${remainderHours}h ago`;
86
+ }
87
+ function formatWindowLabel(windowHours) {
88
+ const normalized = Number.isFinite(windowHours) && windowHours > 0 ? Math.round(windowHours) : 24;
89
+ if (normalized === 1) {
90
+ return 'Last hour';
91
+ }
92
+ if (normalized <= 24) {
93
+ return `Last ${normalized} hours`;
94
+ }
95
+ const daysExact = normalized / 24;
96
+ if (Number.isInteger(daysExact)) {
97
+ const days = Math.max(1, daysExact);
98
+ if (days === 1) {
99
+ return 'Last day';
100
+ }
101
+ if (days % 7 === 0) {
102
+ const weeks = days / 7;
103
+ if (weeks === 1) {
104
+ return 'Last week';
105
+ }
106
+ return `Last ${weeks} weeks`;
107
+ }
108
+ return `Last ${days} days`;
109
+ }
110
+ return `Last ${normalized} hours`;
111
+ }
112
+ //# sourceMappingURL=time-format.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"time-format.js","sourceRoot":"","sources":["../../../src/workflows/report/time-format.ts"],"names":[],"mappings":"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"}
@@ -27,6 +27,9 @@
27
27
  "tenantId": {
28
28
  "type": "string"
29
29
  },
30
+ "tenantName": {
31
+ "type": "string"
32
+ },
30
33
  "windowHours": {
31
34
  "type": "integer"
32
35
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xyteai/cli",
3
- "version": "0.1.0",
3
+ "version": "0.2.0",
4
4
  "description": "Xyte CLI, TUI, skills, and MCP bridge for zero-friction AI operations",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
@@ -48,6 +48,10 @@
48
48
  "typecheck": "tsc -p tsconfig.json --noEmit",
49
49
  "test": "vitest run",
50
50
  "test:watch": "vitest",
51
+ "smoke:external-live": "node scripts/smoke_external_user_live.mjs",
52
+ "report:endpoint-parity": "node scripts/report_external_endpoint_parity.mjs",
53
+ "check:endpoint-parity": "node scripts/report_external_endpoint_parity.mjs --strict",
54
+ "test:commit": "npm run typecheck && npm test && npm run check:endpoint-parity && npm run smoke:external-live",
51
55
  "tui": "tsx src/bin/xyte-cli.ts tui",
52
56
  "release:publish": "bash scripts/publish.sh all",
53
57
  "release:publish:cli": "bash scripts/publish.sh cli",
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: xyte-cli
3
- description: "Use for @xyte/cli operations: first-run setup, tenant/key auth, guarded endpoint calls, inspect/report generation, JSON-only headless TUI snapshots, and MCP tool serving with schema-validated outputs."
3
+ description: "Use for @xyteai/cli operations: first-run setup, tenant/key auth, guarded endpoint calls, inspect/report generation, JSON-only headless TUI snapshots, and MCP tool serving with schema-validated outputs."
4
4
  ---
5
5
 
6
6
  # XYTE Skill Router (One-Stop, Agent-Native)
@@ -13,10 +13,14 @@ This skill is the entrypoint for deterministic Xyte operations via `xyte-cli`.
13
13
 
14
14
  - Use `xyte-cli` commands directly.
15
15
  - Do not use source/dev entrypoints (`npx`, `tsx`, `src/*`, `dist/*`, `bin/*`).
16
- - If `xyte-cli` is unavailable, ask the user to install `@xyte/cli` globally instead of improvising an entrypoint.
16
+ - If `xyte-cli` is unavailable, ask the user to install `@xyteai/cli` globally instead of improvising an entrypoint.
17
17
  - Command option correctness:
18
18
  - `xyte-cli tenant list` has no `--format`.
19
19
  - `xyte-cli setup status` supports `--format json|text`.
20
+ - For fresh users in a new environment, verify readiness with:
21
+ - `xyte-cli doctor install --format json`
22
+ - `xyte-cli install --skills --scope both --agents all --force` (or the agent-specific install target)
23
+ - `xyte-cli setup run --non-interactive --tenant <tenant-id> --key <value>`
20
24
 
21
25
  ## Purpose and Trigger Conditions
22
26
 
@@ -46,6 +50,7 @@ Use when the request involves any of:
46
50
 
47
51
  1. Setup/readiness:
48
52
  - `xyte-cli doctor install --format json`
53
+ - `xyte-cli install --skills --scope both --agents all --force --no-setup`
49
54
  - `xyte-cli setup status --tenant <tenant-id> --format json`
50
55
  - `xyte-cli config doctor --tenant <tenant-id> --format json`
51
56
 
@@ -1,4 +1,4 @@
1
1
  interface:
2
2
  display_name: "Xyte Ops Agent"
3
3
  short_description: "Deterministic Xyte CLI ops: first-run setup, guarded calls, inspect/report, headless JSON, MCP."
4
- default_prompt: "Use $xyte-cli as the operational router for @xyte/cli. Invoke commands directly with `xyte-cli` (do not use source/dev entrypoints like npx/tsx/src/dist/bin paths). Default path: run `xyte-cli` for first-run onboarding (API key + tenant label) and dashboard access. For automation, always pass `--tenant`, use JSON outputs, enforce `--allow-write` for non-read calls and `--confirm <endpoint-key>` for destructive calls, use `xyte-cli tui --headless --format json` for machine frames, and generate reports with `xyte-cli report generate` (PDF default, redacted unless include-sensitive is explicitly requested)."
4
+ default_prompt: "Use $xyte-cli as the operational router for @xyteai/cli. Invoke commands directly with `xyte-cli` (do not use source/dev entrypoints like npx/tsx/src/dist/bin paths). For fresh installs use `xyte-cli install --skills`, then `xyte-cli setup run --non-interactive --tenant <tenant-id> --key <value>`; automation must pass `--tenant`, prefer JSON outputs, enforce `--allow-write` for non-read calls and `--confirm <endpoint-key>` for destructive calls, use `xyte-cli tui --headless --format json` for machine frames, and generate reports with `xyte-cli report generate` (PDF default, redacted unless include-sensitive is explicitly requested)."
@@ -72,11 +72,33 @@ xyte-cli call organization.devices.getHistories \
72
72
  }'
73
73
  ```
74
74
 
75
+ ## Concrete Write/Delete Examples
76
+
77
+ ### `device.device-info.spaceMove` (write, guarded)
78
+
79
+ ```bash
80
+ xyte-cli call device.device-info.spaceMove \
81
+ --tenant <tenant-id> \
82
+ --allow-write \
83
+ --path-json '{"device_id":"<device-id>","space_id":"<space-id>"}'
84
+ ```
85
+
86
+ ### `organization.incidents.closeIncident` (destructive, guarded)
87
+
88
+ ```bash
89
+ xyte-cli call organization.incidents.closeIncident \
90
+ --tenant <tenant-id> \
91
+ --allow-write \
92
+ --confirm organization.incidents.closeIncident \
93
+ --path-json '{"incident_id":"<incident-id>"}'
94
+ ```
95
+
75
96
  ## Common Endpoint Keys
76
97
 
77
98
  Organization:
78
99
  - `organization.devices.getDevices`
79
100
  - `organization.devices.getDevice`
101
+ - `organization.incidents.closeIncident`
80
102
  - `organization.incidents.getIncidents`
81
103
  - `organization.tickets.getTickets`
82
104
  - `organization.commands.sendCommand`
@@ -88,6 +110,7 @@ Partner:
88
110
 
89
111
  Device:
90
112
  - `device.device-info.getDeviceInfo`
113
+ - `device.device-info.spaceMove`
91
114
  - `device.telemetries.sendTelemetry`
92
115
  - `device.device-info.setCloudSettings`
93
116
 
@@ -43,7 +43,7 @@ for screen in "${SCREENS[@]}"; do
43
43
  if [[ -n "$TENANT_ID" ]]; then
44
44
  output="$("${cmd[@]}")"
45
45
  else
46
- output="$(XYTE_CLI_CONFIG_DIR="$TMP_CFG" XYTE_CLI_KEYCHAIN_BACKEND=memory "${cmd[@]}")"
46
+ output="$(XYTE_CLI_CONFIG_DIR="$TMP_CFG" "${cmd[@]}")"
47
47
  fi
48
48
 
49
49
  runtime_frame="$(printf '%s\n' "$output" | jq -c 'select((.meta.startup // false) | not)' | tail -n1)"
@@ -1 +0,0 @@
1
- {"version":3,"file":"keychain.d.ts","sourceRoot":"","sources":["../../src/secure/keychain.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAMvD,MAAM,WAAW,aAAa;IAC5B,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACpF,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IACnF,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACvE,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxG,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IACvG,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5F;AAgJD,qBAAa,cAAe,YAAW,aAAa;IAClD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA6B;IAE9C,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIvG,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAItG,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI1F,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAInF,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAIlF,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;CAG7E;AAED,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,aAAa,CAAC,CAgBlE"}
@@ -1,170 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.MemoryKeychain = void 0;
4
- exports.createKeychainStore = createKeychainStore;
5
- const node_child_process_1 = require("node:child_process");
6
- const node_util_1 = require("node:util");
7
- const key_slots_1 = require("./key-slots");
8
- const execFileAsync = (0, node_util_1.promisify)(node_child_process_1.execFile);
9
- const SERVICE_NAME = '@xyte/cli';
10
- function accountName(tenantId, provider, slotId) {
11
- return `${tenantId}:${provider}:${slotId}`;
12
- }
13
- async function commandExists(command) {
14
- try {
15
- await execFileAsync('bash', ['-lc', `command -v ${command}`]);
16
- return true;
17
- }
18
- catch {
19
- return false;
20
- }
21
- }
22
- class DarwinSecurityKeychain {
23
- async setSlotSecret(tenantId, provider, slotId, value) {
24
- const account = accountName(tenantId, provider, slotId);
25
- await execFileAsync('security', [
26
- 'add-generic-password',
27
- '-a',
28
- account,
29
- '-s',
30
- SERVICE_NAME,
31
- '-w',
32
- value,
33
- '-U'
34
- ]);
35
- }
36
- async getSlotSecret(tenantId, provider, slotId) {
37
- const account = accountName(tenantId, provider, slotId);
38
- return this.readAccount(account);
39
- }
40
- async clearSlotSecret(tenantId, provider, slotId) {
41
- await this.deleteAccount(accountName(tenantId, provider, slotId));
42
- }
43
- async setSecret(tenantId, provider, value) {
44
- await this.setSlotSecret(tenantId, provider, key_slots_1.DEFAULT_SLOT_ID, value);
45
- }
46
- async getSecret(tenantId, provider) {
47
- return this.getSlotSecret(tenantId, provider, key_slots_1.DEFAULT_SLOT_ID);
48
- }
49
- async clearSecret(tenantId, provider) {
50
- await this.clearSlotSecret(tenantId, provider, key_slots_1.DEFAULT_SLOT_ID);
51
- }
52
- async readAccount(account) {
53
- try {
54
- const { stdout } = await execFileAsync('security', [
55
- 'find-generic-password',
56
- '-a',
57
- account,
58
- '-s',
59
- SERVICE_NAME,
60
- '-w'
61
- ]);
62
- const value = stdout.trim();
63
- return value || undefined;
64
- }
65
- catch {
66
- return undefined;
67
- }
68
- }
69
- async deleteAccount(account) {
70
- try {
71
- await execFileAsync('security', ['delete-generic-password', '-a', account, '-s', SERVICE_NAME]);
72
- }
73
- catch {
74
- // no-op if secret does not exist
75
- }
76
- }
77
- }
78
- class LinuxSecretToolKeychain {
79
- async setSlotSecret(tenantId, provider, slotId, value) {
80
- const account = accountName(tenantId, provider, slotId);
81
- await new Promise((resolve, reject) => {
82
- const child = (0, node_child_process_1.spawn)('secret-tool', ['store', '--label', SERVICE_NAME, 'service', SERVICE_NAME, 'account', account], {
83
- stdio: ['pipe', 'ignore', 'pipe']
84
- });
85
- let stderr = '';
86
- child.stderr.on('data', (chunk) => {
87
- stderr += chunk.toString();
88
- });
89
- child.on('error', reject);
90
- child.on('close', (code) => {
91
- if (code === 0) {
92
- resolve();
93
- return;
94
- }
95
- reject(new Error(stderr || `secret-tool exited with code ${code ?? -1}`));
96
- });
97
- child.stdin.write(value);
98
- child.stdin.end();
99
- });
100
- }
101
- async getSlotSecret(tenantId, provider, slotId) {
102
- const account = accountName(tenantId, provider, slotId);
103
- return this.lookupAccount(account);
104
- }
105
- async clearSlotSecret(tenantId, provider, slotId) {
106
- await this.clearAccount(accountName(tenantId, provider, slotId));
107
- }
108
- async setSecret(tenantId, provider, value) {
109
- await this.setSlotSecret(tenantId, provider, key_slots_1.DEFAULT_SLOT_ID, value);
110
- }
111
- async getSecret(tenantId, provider) {
112
- return this.getSlotSecret(tenantId, provider, key_slots_1.DEFAULT_SLOT_ID);
113
- }
114
- async clearSecret(tenantId, provider) {
115
- await this.clearSlotSecret(tenantId, provider, key_slots_1.DEFAULT_SLOT_ID);
116
- }
117
- async lookupAccount(account) {
118
- try {
119
- const { stdout } = await execFileAsync('secret-tool', ['lookup', 'service', SERVICE_NAME, 'account', account]);
120
- const value = stdout.trim();
121
- return value || undefined;
122
- }
123
- catch {
124
- return undefined;
125
- }
126
- }
127
- async clearAccount(account) {
128
- try {
129
- await execFileAsync('secret-tool', ['clear', 'service', SERVICE_NAME, 'account', account]);
130
- }
131
- catch {
132
- // no-op
133
- }
134
- }
135
- }
136
- class MemoryKeychain {
137
- values = new Map();
138
- async setSlotSecret(tenantId, provider, slotId, value) {
139
- this.values.set(accountName(tenantId, provider, slotId), value);
140
- }
141
- async getSlotSecret(tenantId, provider, slotId) {
142
- return this.values.get(accountName(tenantId, provider, slotId));
143
- }
144
- async clearSlotSecret(tenantId, provider, slotId) {
145
- this.values.delete(accountName(tenantId, provider, slotId));
146
- }
147
- async setSecret(tenantId, provider, value) {
148
- await this.setSlotSecret(tenantId, provider, key_slots_1.DEFAULT_SLOT_ID, value);
149
- }
150
- async getSecret(tenantId, provider) {
151
- return this.getSlotSecret(tenantId, provider, key_slots_1.DEFAULT_SLOT_ID);
152
- }
153
- async clearSecret(tenantId, provider) {
154
- await this.clearSlotSecret(tenantId, provider, key_slots_1.DEFAULT_SLOT_ID);
155
- }
156
- }
157
- exports.MemoryKeychain = MemoryKeychain;
158
- async function createKeychainStore() {
159
- if (process.env.XYTE_CLI_KEYCHAIN_BACKEND === 'memory') {
160
- return new MemoryKeychain();
161
- }
162
- if (process.platform === 'darwin') {
163
- return new DarwinSecurityKeychain();
164
- }
165
- if (process.platform === 'linux' && (await commandExists('secret-tool'))) {
166
- return new LinuxSecretToolKeychain();
167
- }
168
- throw new Error('No supported OS keychain backend found. Use macOS keychain, libsecret (secret-tool), or set XYTE_CLI_KEYCHAIN_BACKEND=memory for tests.');
169
- }
170
- //# sourceMappingURL=keychain.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"keychain.js","sourceRoot":"","sources":["../../src/secure/keychain.ts"],"names":[],"mappings":";;;AA4LA,kDAgBC;AA5MD,2DAAqD;AACrD,yCAAsC;AAGtC,2CAA8C;AAE9C,MAAM,aAAa,GAAG,IAAA,qBAAS,EAAC,6BAAQ,CAAC,CAAC;AAC1C,MAAM,YAAY,GAAG,WAAW,CAAC;AAWjC,SAAS,WAAW,CAAC,QAAgB,EAAE,QAAwB,EAAE,MAAc;IAC7E,OAAO,GAAG,QAAQ,IAAI,QAAQ,IAAI,MAAM,EAAE,CAAC;AAC7C,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,OAAe;IAC1C,IAAI,CAAC;QACH,MAAM,aAAa,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,cAAc,OAAO,EAAE,CAAC,CAAC,CAAC;QAC9D,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAM,sBAAsB;IAC1B,KAAK,CAAC,aAAa,CAAC,QAAgB,EAAE,QAAwB,EAAE,MAAc,EAAE,KAAa;QAC3F,MAAM,OAAO,GAAG,WAAW,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;QACxD,MAAM,aAAa,CAAC,UAAU,EAAE;YAC9B,sBAAsB;YACtB,IAAI;YACJ,OAAO;YACP,IAAI;YACJ,YAAY;YACZ,IAAI;YACJ,KAAK;YACL,IAAI;SACL,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,QAAgB,EAAE,QAAwB,EAAE,MAAc;QAC5E,MAAM,OAAO,GAAG,WAAW,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;QACxD,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IACnC,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,QAAgB,EAAE,QAAwB,EAAE,MAAc;QAC9E,MAAM,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;IACpE,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,QAAgB,EAAE,QAAwB,EAAE,KAAa;QACvE,MAAM,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,QAAQ,EAAE,2BAAe,EAAE,KAAK,CAAC,CAAC;IACvE,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,QAAgB,EAAE,QAAwB;QACxD,OAAO,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,QAAQ,EAAE,2BAAe,CAAC,CAAC;IACjE,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,QAAgB,EAAE,QAAwB;QAC1D,MAAM,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,QAAQ,EAAE,2BAAe,CAAC,CAAC;IAClE,CAAC;IAEO,KAAK,CAAC,WAAW,CAAC,OAAe;QACvC,IAAI,CAAC;YACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,aAAa,CAAC,UAAU,EAAE;gBACjD,uBAAuB;gBACvB,IAAI;gBACJ,OAAO;gBACP,IAAI;gBACJ,YAAY;gBACZ,IAAI;aACL,CAAC,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;YAC5B,OAAO,KAAK,IAAI,SAAS,CAAC;QAC5B,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,aAAa,CAAC,OAAe;QACzC,IAAI,CAAC;YACH,MAAM,aAAa,CAAC,UAAU,EAAE,CAAC,yBAAyB,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC;QAClG,CAAC;QAAC,MAAM,CAAC;YACP,iCAAiC;QACnC,CAAC;IACH,CAAC;CACF;AAED,MAAM,uBAAuB;IAC3B,KAAK,CAAC,aAAa,CAAC,QAAgB,EAAE,QAAwB,EAAE,MAAc,EAAE,KAAa;QAC3F,MAAM,OAAO,GAAG,WAAW,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;QACxD,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC1C,MAAM,KAAK,GAAG,IAAA,0BAAK,EAAC,aAAa,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE;gBAClH,KAAK,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC;aAClC,CAAC,CAAC;YAEH,IAAI,MAAM,GAAG,EAAE,CAAC;YAChB,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;gBAChC,MAAM,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YAC7B,CAAC,CAAC,CAAC;YAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAC1B,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;gBACzB,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;oBACf,OAAO,EAAE,CAAC;oBACV,OAAO;gBACT,CAAC;gBACD,MAAM,CAAC,IAAI,KAAK,CAAC,MAAM,IAAI,gCAAgC,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC5E,CAAC,CAAC,CAAC;YAEH,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACzB,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QACpB,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,QAAgB,EAAE,QAAwB,EAAE,MAAc;QAC5E,MAAM,OAAO,GAAG,WAAW,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;QACxD,OAAO,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IACrC,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,QAAgB,EAAE,QAAwB,EAAE,MAAc;QAC9E,MAAM,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;IACnE,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,QAAgB,EAAE,QAAwB,EAAE,KAAa;QACvE,MAAM,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,QAAQ,EAAE,2BAAe,EAAE,KAAK,CAAC,CAAC;IACvE,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,QAAgB,EAAE,QAAwB;QACxD,OAAO,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,QAAQ,EAAE,2BAAe,CAAC,CAAC;IACjE,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,QAAgB,EAAE,QAAwB;QAC1D,MAAM,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,QAAQ,EAAE,2BAAe,CAAC,CAAC;IAClE,CAAC;IAEO,KAAK,CAAC,aAAa,CAAC,OAAe;QACzC,IAAI,CAAC;YACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,aAAa,CAAC,aAAa,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;YAC/G,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;YAC5B,OAAO,KAAK,IAAI,SAAS,CAAC;QAC5B,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,YAAY,CAAC,OAAe;QACxC,IAAI,CAAC;YACH,MAAM,aAAa,CAAC,aAAa,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;QAC7F,CAAC;QAAC,MAAM,CAAC;YACP,QAAQ;QACV,CAAC;IACH,CAAC;CACF;AAED,MAAa,cAAc;IACR,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IAEpD,KAAK,CAAC,aAAa,CAAC,QAAgB,EAAE,QAAwB,EAAE,MAAc,EAAE,KAAa;QAC3F,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,KAAK,CAAC,CAAC;IAClE,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,QAAgB,EAAE,QAAwB,EAAE,MAAc;QAC5E,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;IAClE,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,QAAgB,EAAE,QAAwB,EAAE,MAAc;QAC9E,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;IAC9D,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,QAAgB,EAAE,QAAwB,EAAE,KAAa;QACvE,MAAM,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,QAAQ,EAAE,2BAAe,EAAE,KAAK,CAAC,CAAC;IACvE,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,QAAgB,EAAE,QAAwB;QACxD,OAAO,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,QAAQ,EAAE,2BAAe,CAAC,CAAC;IACjE,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,QAAgB,EAAE,QAAwB;QAC1D,MAAM,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,QAAQ,EAAE,2BAAe,CAAC,CAAC;IAClE,CAAC;CACF;AA1BD,wCA0BC;AAEM,KAAK,UAAU,mBAAmB;IACvC,IAAI,OAAO,CAAC,GAAG,CAAC,yBAAyB,KAAK,QAAQ,EAAE,CAAC;QACvD,OAAO,IAAI,cAAc,EAAE,CAAC;IAC9B,CAAC;IAED,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAClC,OAAO,IAAI,sBAAsB,EAAE,CAAC;IACtC,CAAC;IAED,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,IAAI,CAAC,MAAM,aAAa,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC;QACzE,OAAO,IAAI,uBAAuB,EAAE,CAAC;IACvC,CAAC;IAED,MAAM,IAAI,KAAK,CACb,yIAAyI,CAC1I,CAAC;AACJ,CAAC"}