@xyteai/cli 0.1.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 (251) hide show
  1. package/LICENSE +176 -0
  2. package/README.md +245 -0
  3. package/dist/bin/xyte-cli.d.ts +3 -0
  4. package/dist/bin/xyte-cli.d.ts.map +1 -0
  5. package/dist/bin/xyte-cli.js +18 -0
  6. package/dist/bin/xyte-cli.js.map +1 -0
  7. package/dist/cli/index.d.ts +24 -0
  8. package/dist/cli/index.d.ts.map +1 -0
  9. package/dist/cli/index.js +1185 -0
  10. package/dist/cli/index.js.map +1 -0
  11. package/dist/client/catalog.d.ts +6 -0
  12. package/dist/client/catalog.d.ts.map +1 -0
  13. package/dist/client/catalog.js +32 -0
  14. package/dist/client/catalog.js.map +1 -0
  15. package/dist/client/create-client.d.ts +3 -0
  16. package/dist/client/create-client.d.ts.map +1 -0
  17. package/dist/client/create-client.js +235 -0
  18. package/dist/client/create-client.js.map +1 -0
  19. package/dist/config/connectivity.d.ts +19 -0
  20. package/dist/config/connectivity.d.ts.map +1 -0
  21. package/dist/config/connectivity.js +166 -0
  22. package/dist/config/connectivity.js.map +1 -0
  23. package/dist/config/readiness.d.ts +32 -0
  24. package/dist/config/readiness.d.ts.map +1 -0
  25. package/dist/config/readiness.js +96 -0
  26. package/dist/config/readiness.js.map +1 -0
  27. package/dist/config/retry-policy.d.ts +16 -0
  28. package/dist/config/retry-policy.d.ts.map +1 -0
  29. package/dist/config/retry-policy.js +24 -0
  30. package/dist/config/retry-policy.js.map +1 -0
  31. package/dist/contracts/call-envelope.d.ts +74 -0
  32. package/dist/contracts/call-envelope.d.ts.map +1 -0
  33. package/dist/contracts/call-envelope.js +72 -0
  34. package/dist/contracts/call-envelope.js.map +1 -0
  35. package/dist/contracts/problem.d.ts +11 -0
  36. package/dist/contracts/problem.d.ts.map +1 -0
  37. package/dist/contracts/problem.js +55 -0
  38. package/dist/contracts/problem.js.map +1 -0
  39. package/dist/contracts/versions.d.ts +6 -0
  40. package/dist/contracts/versions.d.ts.map +1 -0
  41. package/dist/contracts/versions.js +9 -0
  42. package/dist/contracts/versions.js.map +1 -0
  43. package/dist/http/errors.d.ts +24 -0
  44. package/dist/http/errors.d.ts.map +1 -0
  45. package/dist/http/errors.js +39 -0
  46. package/dist/http/errors.js.map +1 -0
  47. package/dist/http/transport.d.ts +35 -0
  48. package/dist/http/transport.d.ts.map +1 -0
  49. package/dist/http/transport.js +129 -0
  50. package/dist/http/transport.js.map +1 -0
  51. package/dist/index.d.ts +10 -0
  52. package/dist/index.d.ts.map +1 -0
  53. package/dist/index.js +23 -0
  54. package/dist/index.js.map +1 -0
  55. package/dist/mcp/server.d.ts +12 -0
  56. package/dist/mcp/server.d.ts.map +1 -0
  57. package/dist/mcp/server.js +404 -0
  58. package/dist/mcp/server.js.map +1 -0
  59. package/dist/namespaces/device.d.ts +38 -0
  60. package/dist/namespaces/device.d.ts.map +1 -0
  61. package/dist/namespaces/device.js +36 -0
  62. package/dist/namespaces/device.js.map +1 -0
  63. package/dist/namespaces/organization.d.ts +27 -0
  64. package/dist/namespaces/organization.d.ts.map +1 -0
  65. package/dist/namespaces/organization.js +30 -0
  66. package/dist/namespaces/organization.js.map +1 -0
  67. package/dist/namespaces/partner.d.ts +18 -0
  68. package/dist/namespaces/partner.d.ts.map +1 -0
  69. package/dist/namespaces/partner.js +21 -0
  70. package/dist/namespaces/partner.js.map +1 -0
  71. package/dist/observability/logger.d.ts +3 -0
  72. package/dist/observability/logger.d.ts.map +1 -0
  73. package/dist/observability/logger.js +21 -0
  74. package/dist/observability/logger.js.map +1 -0
  75. package/dist/observability/tracing.d.ts +3 -0
  76. package/dist/observability/tracing.d.ts.map +1 -0
  77. package/dist/observability/tracing.js +26 -0
  78. package/dist/observability/tracing.js.map +1 -0
  79. package/dist/secure/key-slots.d.ts +8 -0
  80. package/dist/secure/key-slots.d.ts.map +1 -0
  81. package/dist/secure/key-slots.js +47 -0
  82. package/dist/secure/key-slots.js.map +1 -0
  83. package/dist/secure/keychain.d.ts +20 -0
  84. package/dist/secure/keychain.d.ts.map +1 -0
  85. package/dist/secure/keychain.js +170 -0
  86. package/dist/secure/keychain.js.map +1 -0
  87. package/dist/secure/profile-store.d.ts +66 -0
  88. package/dist/secure/profile-store.d.ts.map +1 -0
  89. package/dist/secure/profile-store.js +309 -0
  90. package/dist/secure/profile-store.js.map +1 -0
  91. package/dist/spec/public-endpoints.json +1175 -0
  92. package/dist/tui/animation.d.ts +12 -0
  93. package/dist/tui/animation.d.ts.map +1 -0
  94. package/dist/tui/animation.js +41 -0
  95. package/dist/tui/animation.js.map +1 -0
  96. package/dist/tui/app.d.ts +27 -0
  97. package/dist/tui/app.d.ts.map +1 -0
  98. package/dist/tui/app.js +711 -0
  99. package/dist/tui/app.js.map +1 -0
  100. package/dist/tui/assets/logo.d.ts +5 -0
  101. package/dist/tui/assets/logo.d.ts.map +1 -0
  102. package/dist/tui/assets/logo.js +24 -0
  103. package/dist/tui/assets/logo.js.map +1 -0
  104. package/dist/tui/data-loaders.d.ts +33 -0
  105. package/dist/tui/data-loaders.d.ts.map +1 -0
  106. package/dist/tui/data-loaders.js +250 -0
  107. package/dist/tui/data-loaders.js.map +1 -0
  108. package/dist/tui/dispatch.d.ts +14 -0
  109. package/dist/tui/dispatch.d.ts.map +1 -0
  110. package/dist/tui/dispatch.js +44 -0
  111. package/dist/tui/dispatch.js.map +1 -0
  112. package/dist/tui/headless-renderer.d.ts +20 -0
  113. package/dist/tui/headless-renderer.d.ts.map +1 -0
  114. package/dist/tui/headless-renderer.js +598 -0
  115. package/dist/tui/headless-renderer.js.map +1 -0
  116. package/dist/tui/input-controller.d.ts +29 -0
  117. package/dist/tui/input-controller.d.ts.map +1 -0
  118. package/dist/tui/input-controller.js +76 -0
  119. package/dist/tui/input-controller.js.map +1 -0
  120. package/dist/tui/key-wizard.d.ts +29 -0
  121. package/dist/tui/key-wizard.d.ts.map +1 -0
  122. package/dist/tui/key-wizard.js +177 -0
  123. package/dist/tui/key-wizard.js.map +1 -0
  124. package/dist/tui/keymap.d.ts +9 -0
  125. package/dist/tui/keymap.d.ts.map +1 -0
  126. package/dist/tui/keymap.js +29 -0
  127. package/dist/tui/keymap.js.map +1 -0
  128. package/dist/tui/layout.d.ts +16 -0
  129. package/dist/tui/layout.d.ts.map +1 -0
  130. package/dist/tui/layout.js +99 -0
  131. package/dist/tui/layout.js.map +1 -0
  132. package/dist/tui/logger.d.ts +12 -0
  133. package/dist/tui/logger.d.ts.map +1 -0
  134. package/dist/tui/logger.js +83 -0
  135. package/dist/tui/logger.js.map +1 -0
  136. package/dist/tui/navigation.d.ts +26 -0
  137. package/dist/tui/navigation.d.ts.map +1 -0
  138. package/dist/tui/navigation.js +136 -0
  139. package/dist/tui/navigation.js.map +1 -0
  140. package/dist/tui/panes.d.ts +7 -0
  141. package/dist/tui/panes.d.ts.map +1 -0
  142. package/dist/tui/panes.js +34 -0
  143. package/dist/tui/panes.js.map +1 -0
  144. package/dist/tui/runtime.d.ts +34 -0
  145. package/dist/tui/runtime.d.ts.map +1 -0
  146. package/dist/tui/runtime.js +100 -0
  147. package/dist/tui/runtime.js.map +1 -0
  148. package/dist/tui/scene.d.ts +160 -0
  149. package/dist/tui/scene.d.ts.map +1 -0
  150. package/dist/tui/scene.js +424 -0
  151. package/dist/tui/scene.js.map +1 -0
  152. package/dist/tui/screens/config.d.ts +3 -0
  153. package/dist/tui/screens/config.d.ts.map +1 -0
  154. package/dist/tui/screens/config.js +406 -0
  155. package/dist/tui/screens/config.js.map +1 -0
  156. package/dist/tui/screens/dashboard.d.ts +3 -0
  157. package/dist/tui/screens/dashboard.d.ts.map +1 -0
  158. package/dist/tui/screens/dashboard.js +176 -0
  159. package/dist/tui/screens/dashboard.js.map +1 -0
  160. package/dist/tui/screens/devices.d.ts +3 -0
  161. package/dist/tui/screens/devices.d.ts.map +1 -0
  162. package/dist/tui/screens/devices.js +297 -0
  163. package/dist/tui/screens/devices.js.map +1 -0
  164. package/dist/tui/screens/incidents.d.ts +4 -0
  165. package/dist/tui/screens/incidents.d.ts.map +1 -0
  166. package/dist/tui/screens/incidents.js +304 -0
  167. package/dist/tui/screens/incidents.js.map +1 -0
  168. package/dist/tui/screens/setup.d.ts +3 -0
  169. package/dist/tui/screens/setup.d.ts.map +1 -0
  170. package/dist/tui/screens/setup.js +299 -0
  171. package/dist/tui/screens/setup.js.map +1 -0
  172. package/dist/tui/screens/spaces.d.ts +7 -0
  173. package/dist/tui/screens/spaces.d.ts.map +1 -0
  174. package/dist/tui/screens/spaces.js +422 -0
  175. package/dist/tui/screens/spaces.js.map +1 -0
  176. package/dist/tui/screens/tickets.d.ts +9 -0
  177. package/dist/tui/screens/tickets.d.ts.map +1 -0
  178. package/dist/tui/screens/tickets.js +418 -0
  179. package/dist/tui/screens/tickets.js.map +1 -0
  180. package/dist/tui/serialize.d.ts +31 -0
  181. package/dist/tui/serialize.d.ts.map +1 -0
  182. package/dist/tui/serialize.js +183 -0
  183. package/dist/tui/serialize.js.map +1 -0
  184. package/dist/tui/table-format.d.ts +11 -0
  185. package/dist/tui/table-format.d.ts.map +1 -0
  186. package/dist/tui/table-format.js +77 -0
  187. package/dist/tui/table-format.js.map +1 -0
  188. package/dist/tui/tabs.d.ts +4 -0
  189. package/dist/tui/tabs.d.ts.map +1 -0
  190. package/dist/tui/tabs.js +13 -0
  191. package/dist/tui/tabs.js.map +1 -0
  192. package/dist/tui/types.d.ts +37 -0
  193. package/dist/tui/types.d.ts.map +1 -0
  194. package/dist/tui/types.js +3 -0
  195. package/dist/tui/types.js.map +1 -0
  196. package/dist/types/client.d.ts +54 -0
  197. package/dist/types/client.d.ts.map +1 -0
  198. package/dist/types/client.js +3 -0
  199. package/dist/types/client.js.map +1 -0
  200. package/dist/types/endpoints.d.ts +29 -0
  201. package/dist/types/endpoints.d.ts.map +1 -0
  202. package/dist/types/endpoints.js +3 -0
  203. package/dist/types/endpoints.js.map +1 -0
  204. package/dist/types/profile.d.ts +29 -0
  205. package/dist/types/profile.d.ts.map +1 -0
  206. package/dist/types/profile.js +3 -0
  207. package/dist/types/profile.js.map +1 -0
  208. package/dist/utils/config-dir.d.ts +2 -0
  209. package/dist/utils/config-dir.d.ts.map +1 -0
  210. package/dist/utils/config-dir.js +23 -0
  211. package/dist/utils/config-dir.js.map +1 -0
  212. package/dist/utils/error-format.d.ts +4 -0
  213. package/dist/utils/error-format.d.ts.map +1 -0
  214. package/dist/utils/error-format.js +34 -0
  215. package/dist/utils/error-format.js.map +1 -0
  216. package/dist/utils/install-skills.d.ts +38 -0
  217. package/dist/utils/install-skills.d.ts.map +1 -0
  218. package/dist/utils/install-skills.js +117 -0
  219. package/dist/utils/install-skills.js.map +1 -0
  220. package/dist/utils/json-output.d.ts +6 -0
  221. package/dist/utils/json-output.d.ts.map +1 -0
  222. package/dist/utils/json-output.js +30 -0
  223. package/dist/utils/json-output.js.map +1 -0
  224. package/dist/utils/json.d.ts +4 -0
  225. package/dist/utils/json.d.ts.map +1 -0
  226. package/dist/utils/json.js +36 -0
  227. package/dist/utils/json.js.map +1 -0
  228. package/dist/utils/version.d.ts +2 -0
  229. package/dist/utils/version.d.ts.map +1 -0
  230. package/dist/utils/version.js +28 -0
  231. package/dist/utils/version.js.map +1 -0
  232. package/dist/workflows/fleet-insights.d.ts +122 -0
  233. package/dist/workflows/fleet-insights.d.ts.map +1 -0
  234. package/dist/workflows/fleet-insights.js +938 -0
  235. package/dist/workflows/fleet-insights.js.map +1 -0
  236. package/docs/schemas/call-envelope.v1.schema.json +140 -0
  237. package/docs/schemas/headless-frame.v1.schema.json +159 -0
  238. package/docs/schemas/inspect-deep-dive.v1.schema.json +251 -0
  239. package/docs/schemas/inspect-fleet.v1.schema.json +111 -0
  240. package/docs/schemas/report.v1.schema.json +39 -0
  241. package/package.json +75 -0
  242. package/skills/xyte-cli/SKILL.md +181 -0
  243. package/skills/xyte-cli/agents/openai.yaml +4 -0
  244. package/skills/xyte-cli/references/endpoints.md +106 -0
  245. package/skills/xyte-cli/references/headless-contract.md +96 -0
  246. package/skills/xyte-cli/references/tui-flows.md +126 -0
  247. package/skills/xyte-cli/scripts/check_headless.sh +83 -0
  248. package/skills/xyte-cli/scripts/endpoint_filters_report.sh +33 -0
  249. package/skills/xyte-cli/scripts/run_xyte_cli.sh +12 -0
  250. package/skills/xyte-cli/scripts/validate_agent_contracts.sh +72 -0
  251. package/skills/xyte-cli/scripts/validate_with_schema.js +30 -0
@@ -0,0 +1,111 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://xyte.dev/schemas/inspect-fleet.v1.schema.json",
4
+ "title": "Xyte Fleet Inspect V1",
5
+ "type": "object",
6
+ "additionalProperties": false,
7
+ "required": [
8
+ "schemaVersion",
9
+ "generatedAtUtc",
10
+ "tenantId",
11
+ "totals",
12
+ "status",
13
+ "highlights"
14
+ ],
15
+ "properties": {
16
+ "schemaVersion": {
17
+ "const": "xyte.inspect.fleet.v1"
18
+ },
19
+ "generatedAtUtc": {
20
+ "type": "string"
21
+ },
22
+ "tenantId": {
23
+ "type": "string"
24
+ },
25
+ "totals": {
26
+ "type": "object",
27
+ "required": [
28
+ "devices",
29
+ "spaces",
30
+ "incidents",
31
+ "tickets"
32
+ ],
33
+ "properties": {
34
+ "devices": {
35
+ "type": "integer"
36
+ },
37
+ "spaces": {
38
+ "type": "integer"
39
+ },
40
+ "incidents": {
41
+ "type": "integer"
42
+ },
43
+ "tickets": {
44
+ "type": "integer"
45
+ }
46
+ }
47
+ },
48
+ "status": {
49
+ "type": "object",
50
+ "required": [
51
+ "devices",
52
+ "incidents",
53
+ "tickets",
54
+ "spaces"
55
+ ],
56
+ "properties": {
57
+ "devices": {
58
+ "type": "object",
59
+ "additionalProperties": {
60
+ "type": "integer"
61
+ }
62
+ },
63
+ "incidents": {
64
+ "type": "object",
65
+ "additionalProperties": {
66
+ "type": "integer"
67
+ }
68
+ },
69
+ "tickets": {
70
+ "type": "object",
71
+ "additionalProperties": {
72
+ "type": "integer"
73
+ }
74
+ },
75
+ "spaces": {
76
+ "type": "object",
77
+ "additionalProperties": {
78
+ "type": "integer"
79
+ }
80
+ }
81
+ }
82
+ },
83
+ "highlights": {
84
+ "type": "object",
85
+ "required": [
86
+ "offlineDevices",
87
+ "offlinePct",
88
+ "activeIncidents",
89
+ "activeIncidentPct",
90
+ "openTickets"
91
+ ],
92
+ "properties": {
93
+ "offlineDevices": {
94
+ "type": "integer"
95
+ },
96
+ "offlinePct": {
97
+ "type": "number"
98
+ },
99
+ "activeIncidents": {
100
+ "type": "integer"
101
+ },
102
+ "activeIncidentPct": {
103
+ "type": "number"
104
+ },
105
+ "openTickets": {
106
+ "type": "integer"
107
+ }
108
+ }
109
+ }
110
+ }
111
+ }
@@ -0,0 +1,39 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://xyte.dev/schemas/report.v1.schema.json",
4
+ "title": "Xyte Report V1",
5
+ "type": "object",
6
+ "additionalProperties": false,
7
+ "required": [
8
+ "schemaVersion",
9
+ "generatedAtUtc",
10
+ "tenantId",
11
+ "format",
12
+ "outputPath",
13
+ "includeSensitive"
14
+ ],
15
+ "properties": {
16
+ "schemaVersion": {
17
+ "const": "xyte.report.v1"
18
+ },
19
+ "generatedAtUtc": {
20
+ "type": "string"
21
+ },
22
+ "tenantId": {
23
+ "type": "string"
24
+ },
25
+ "format": {
26
+ "type": "string",
27
+ "enum": [
28
+ "markdown",
29
+ "pdf"
30
+ ]
31
+ },
32
+ "outputPath": {
33
+ "type": "string"
34
+ },
35
+ "includeSensitive": {
36
+ "type": "boolean"
37
+ }
38
+ }
39
+ }
package/package.json ADDED
@@ -0,0 +1,75 @@
1
+ {
2
+ "name": "@xyteai/cli",
3
+ "version": "0.1.0",
4
+ "description": "Xyte CLI, TUI, skills, and MCP bridge for zero-friction AI operations",
5
+ "license": "Apache-2.0",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "git+https://github.com/xyte-io/xyte-cli.git"
9
+ },
10
+ "bugs": {
11
+ "url": "https://github.com/xyte-io/xyte-cli/issues"
12
+ },
13
+ "homepage": "https://github.com/xyte-io/xyte-cli#readme",
14
+ "keywords": [
15
+ "xyte",
16
+ "cli",
17
+ "tui",
18
+ "mcp",
19
+ "agent",
20
+ "operations"
21
+ ],
22
+ "type": "commonjs",
23
+ "engines": {
24
+ "node": ">=18"
25
+ },
26
+ "publishConfig": {
27
+ "access": "public",
28
+ "provenance": true
29
+ },
30
+ "bin": {
31
+ "xyte-cli": "dist/bin/xyte-cli.js"
32
+ },
33
+ "main": "dist/index.js",
34
+ "types": "dist/index.d.ts",
35
+ "files": [
36
+ "dist",
37
+ "skills",
38
+ "docs/schemas"
39
+ ],
40
+ "scripts": {
41
+ "clean": "rm -rf dist coverage",
42
+ "build": "npm run clean && tsc -p tsconfig.build.json",
43
+ "prepare": "npm run build",
44
+ "prepublishOnly": "npm run typecheck && npm test && npm run build",
45
+ "install:global": "npm run build && npm link",
46
+ "uninstall:global": "npm unlink -g @xyteai/cli || true",
47
+ "reinstall:global": "npm run uninstall:global && npm run install:global",
48
+ "typecheck": "tsc -p tsconfig.json --noEmit",
49
+ "test": "vitest run",
50
+ "test:watch": "vitest",
51
+ "tui": "tsx src/bin/xyte-cli.ts tui",
52
+ "release:publish": "bash scripts/publish.sh all",
53
+ "release:publish:cli": "bash scripts/publish.sh cli",
54
+ "release:publish:pages": "bash scripts/publish.sh pages"
55
+ },
56
+ "dependencies": {
57
+ "@modelcontextprotocol/sdk": "^1.26.0",
58
+ "@opentelemetry/api": "^1.9.0",
59
+ "@opentelemetry/sdk-node": "^0.211.0",
60
+ "@types/pdfkit": "^0.17.4",
61
+ "ajv": "^8.17.1",
62
+ "blessed": "^0.1.81",
63
+ "commander": "^14.0.3",
64
+ "pdfkit": "^0.17.2",
65
+ "pino": "^10.3.0",
66
+ "zod": "^4.3.6"
67
+ },
68
+ "devDependencies": {
69
+ "@types/blessed": "^0.1.25",
70
+ "@types/node": "^22.13.4",
71
+ "tsx": "^4.19.3",
72
+ "typescript": "^5.7.3",
73
+ "vitest": "^2.1.8"
74
+ }
75
+ }
@@ -0,0 +1,181 @@
1
+ ---
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."
4
+ ---
5
+
6
+ # XYTE Skill Router (One-Stop, Agent-Native)
7
+
8
+ Last updated: 2026-02-15
9
+
10
+ This skill is the entrypoint for deterministic Xyte operations via `xyte-cli`.
11
+
12
+ ## Invocation Rules
13
+
14
+ - Use `xyte-cli` commands directly.
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.
17
+ - Command option correctness:
18
+ - `xyte-cli tenant list` has no `--format`.
19
+ - `xyte-cli setup status` supports `--format json|text`.
20
+
21
+ ## Purpose and Trigger Conditions
22
+
23
+ Use when the request involves any of:
24
+ - setup/readiness for Xyte access
25
+ - tenant/key-slot management
26
+ - endpoint discovery or endpoint invocation
27
+ - fleet inspection/deep-dive/reporting
28
+ - headless TUI JSON frame consumption
29
+ - MCP tool bridge for external agents
30
+
31
+ ## Non-Goals
32
+
33
+ - Do not use this skill for arbitrary product strategy or generic markdown authoring.
34
+ - Do not perform writes by default.
35
+ - Do not use headless text output; headless is JSON-only.
36
+
37
+ ## Mandatory Safety Rules
38
+
39
+ - Default to read-only.
40
+ - Require explicit user intent before writes.
41
+ - Non-read endpoint calls must include `--allow-write`.
42
+ - Destructive endpoint calls must include `--confirm <endpoint-key>`.
43
+ - In automation, always pass `--tenant <tenant-id>`.
44
+
45
+ ## Deterministic Execution Order
46
+
47
+ 1. Setup/readiness:
48
+ - `xyte-cli doctor install --format json`
49
+ - `xyte-cli setup status --tenant <tenant-id> --format json`
50
+ - `xyte-cli config doctor --tenant <tenant-id> --format json`
51
+
52
+ 2. Auth/tenant (if missing/incomplete):
53
+ - `xyte-cli setup run --non-interactive --tenant <tenant-id> --key <value>`
54
+ - `xyte-cli tenant use <tenant-id>`
55
+ - `xyte-cli auth key list --tenant <tenant-id> --format json`
56
+
57
+ 3. Endpoint operations:
58
+ - `xyte-cli list-endpoints --tenant <tenant-id>`
59
+ - `xyte-cli describe-endpoint <endpoint-key>`
60
+ - `xyte-cli call <endpoint-key> --tenant <tenant-id> ...`
61
+
62
+ 4. Insights/reports:
63
+ - `xyte-cli inspect fleet --tenant <tenant-id> --format json`
64
+ - `xyte-cli inspect deep-dive --tenant <tenant-id> --window <hours> --format json`
65
+ - `xyte-cli report generate --tenant <tenant-id> --input <deep-dive.json> --out <report.pdf>`
66
+
67
+ 5. Headless and MCP:
68
+ - `xyte-cli tui --headless --screen <screen> --format json --once --tenant <tenant-id>`
69
+ - `xyte-cli mcp serve`
70
+
71
+ ## Workflow Selector
72
+
73
+ | Intent | Primary command |
74
+ | --- | --- |
75
+ | First-time onboarding (interactive) | `xyte-cli` |
76
+ | Setup non-interactive | `xyte-cli setup run --non-interactive --tenant <tenant-id> --key <value>` |
77
+ | Readiness snapshot | `xyte-cli setup status --tenant <tenant-id> --format json` |
78
+ | Connectivity diagnostics | `xyte-cli config doctor --tenant <tenant-id> --format json` |
79
+ | Read endpoint call + envelope | `xyte-cli call <endpoint-key> --tenant <tenant-id> --output-mode envelope --strict-json` |
80
+ | Guarded write endpoint call | `xyte-cli call <endpoint-key> --tenant <tenant-id> --allow-write ...` |
81
+ | Guarded delete endpoint call | `xyte-cli call <endpoint-key> --tenant <tenant-id> --allow-write --confirm <endpoint-key> ...` |
82
+ | Fleet summary | `xyte-cli inspect fleet --tenant <tenant-id> --format json` |
83
+ | Deep-dive analytics | `xyte-cli inspect deep-dive --tenant <tenant-id> --window <hours> --format json` |
84
+ | PDF report generation | `xyte-cli report generate --tenant <tenant-id> --input <deep-dive.json> --out <path>.pdf` |
85
+ | Headless snapshot (JSON NDJSON) | `xyte-cli tui --headless --screen <screen> --format json --once --tenant <tenant-id>` |
86
+ | Continuous headless monitoring | `xyte-cli tui --headless --screen <screen> --format json --follow --interval-ms <ms> --tenant <tenant-id>` |
87
+ | MCP tool bridge | `xyte-cli mcp serve` |
88
+
89
+ ## Minimal Command Recipes
90
+
91
+ Read call:
92
+ ```bash
93
+ xyte-cli call organization.devices.getDevices --tenant <tenant-id> --output-mode envelope --strict-json
94
+ ```
95
+
96
+ Write call (guarded):
97
+ ```bash
98
+ xyte-cli call organization.commands.sendCommand \
99
+ --tenant <tenant-id> \
100
+ --allow-write \
101
+ --path-json '{"device_id":"<device-id>"}' \
102
+ --body-json '{"name":"reboot"}'
103
+ ```
104
+
105
+ Delete call (guarded):
106
+ ```bash
107
+ xyte-cli call organization.commands.cancelCommand \
108
+ --tenant <tenant-id> \
109
+ --allow-write \
110
+ --confirm organization.commands.cancelCommand \
111
+ --path-json '{"device_id":"<device-id>","command_id":"<command-id>"}'
112
+ ```
113
+
114
+ Headless:
115
+ ```bash
116
+ xyte-cli tui --headless --screen dashboard --format json --once --tenant <tenant-id>
117
+ ```
118
+
119
+ Inspect + report:
120
+ ```bash
121
+ xyte-cli inspect deep-dive --tenant <tenant-id> --window 24 --format json > /tmp/deep-dive.json
122
+ xyte-cli report generate --tenant <tenant-id> --input /tmp/deep-dive.json --out /tmp/xyte-findings.pdf
123
+ ```
124
+
125
+ ## Contract IDs and Schemas
126
+
127
+ Schema/version IDs:
128
+ - call envelope: `xyte.call.envelope.v1`
129
+ - headless frame: `xyte.headless.frame.v1`
130
+ - inspect fleet: `xyte.inspect.fleet.v1`
131
+ - inspect deep dive: `xyte.inspect.deep-dive.v1`
132
+ - report metadata: `xyte.report.v1`
133
+
134
+ Canonical schemas:
135
+ - `docs/schemas/call-envelope.v1.schema.json`
136
+ - `docs/schemas/headless-frame.v1.schema.json`
137
+ - `docs/schemas/inspect-fleet.v1.schema.json`
138
+ - `docs/schemas/inspect-deep-dive.v1.schema.json`
139
+ - `docs/schemas/report.v1.schema.json`
140
+
141
+ ## MCP Tool Surface (Current)
142
+
143
+ Current tool names:
144
+ - `xyte_setup_status`
145
+ - `xyte_config_doctor`
146
+ - `xyte_list_endpoints`
147
+ - `xyte_describe_endpoint`
148
+ - `xyte_call`
149
+ - `xyte_inspect_fleet`
150
+ - `xyte_report_generate`
151
+
152
+ Guard semantics in MCP mirror CLI:
153
+ - write endpoints require `allow_write: true`
154
+ - destructive endpoints require matching `confirm`
155
+
156
+ ## Troubleshooting Entrypoints
157
+
158
+ - First-run/setup issues:
159
+ - `xyte-cli`
160
+ - `xyte-cli setup run --non-interactive --tenant <tenant-id> --key <value>`
161
+ - Readiness/connectivity:
162
+ - `xyte-cli setup status --tenant <tenant-id> --format json`
163
+ - `xyte-cli config doctor --tenant <tenant-id> --format json`
164
+ - TUI crash diagnostics:
165
+ ```bash
166
+ XYTE_TUI_DEBUG=1 XYTE_TUI_DEBUG_LOG=/tmp/xyte-tui-debug.log xyte-cli tui --tenant <tenant-id>
167
+ ```
168
+ - Headless errors:
169
+ - ensure `--headless --format json` (no text format in headless)
170
+ - parse NDJSON and use the last runtime frame (`meta.startup != true`)
171
+
172
+ ## References (Load As Needed)
173
+
174
+ - `references/endpoints.md`
175
+ - `references/tui-flows.md`
176
+ - `references/headless-contract.md`
177
+
178
+ ## Notes for Agents
179
+
180
+ - Keep this file short in-context; use references for deep procedures.
181
+ - Keep tenant explicit in automation (`--tenant <tenant-id>`).
@@ -0,0 +1,4 @@
1
+ interface:
2
+ display_name: "Xyte Ops Agent"
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)."
@@ -0,0 +1,106 @@
1
+ # Endpoint Usage Reference (CLI + Headless Agents)
2
+
3
+ Use this file for deterministic endpoint operations with `xyte-cli call`.
4
+
5
+ ## Discovery Sequence
6
+
7
+ 1. List available endpoint keys:
8
+ ```bash
9
+ xyte-cli list-endpoints
10
+ ```
11
+
12
+ 2. Inspect one endpoint contract before calling:
13
+ ```bash
14
+ xyte-cli describe-endpoint <endpoint-key>
15
+ ```
16
+
17
+ 3. Call with explicit tenant and structured params:
18
+ ```bash
19
+ xyte-cli call <endpoint-key> \
20
+ --tenant <tenant-id> \
21
+ --output-mode envelope \
22
+ --path-json '{"id":"..."}' \
23
+ --query-json '{"page":1}' \
24
+ --body-json '{"field":"value"}'
25
+ ```
26
+
27
+ ## Guard Requirements by Method
28
+
29
+ | Method | Guard Requirement |
30
+ | --- | --- |
31
+ | `GET`, `HEAD`, `OPTIONS` | No write guard required |
32
+ | `POST`, `PUT`, `PATCH` | Must include `--allow-write` |
33
+ | `DELETE` | Must include `--allow-write` and `--confirm <endpoint-key>` |
34
+
35
+ ## Filters and Pagination Matrix (from spec)
36
+
37
+ Derived from the bundled public endpoint spec.
38
+
39
+ | Endpoint Key | Query Fields | Pagination Fields | Notes |
40
+ | --- | --- | --- | --- |
41
+ | `organization.spaces.getSpaces` | `page`, `per_page`, `id`, `parent_id`, `name`, `path_includes`, `space_type`, `created_before`, `created_after` | `page`, `per_page` | Main listing endpoint with server-side filtering |
42
+ | `organization.devices.getHistories` | `status`, `from`, `to`, `device_id`, `space_id`, `name` | none | Filtered history lookup; can be time-windowed |
43
+
44
+ All other current endpoint specs in this repo have no declared query params.
45
+
46
+ ## Concrete Filter/Pagination Examples
47
+
48
+ ### `organization.spaces.getSpaces`
49
+
50
+ ```bash
51
+ xyte-cli call organization.spaces.getSpaces \
52
+ --tenant <tenant-id> \
53
+ --query-json '{
54
+ "page": 1,
55
+ "per_page": 25,
56
+ "parent_id": "<space-id>",
57
+ "name": "room",
58
+ "space_type": "room"
59
+ }'
60
+ ```
61
+
62
+ ### `organization.devices.getHistories`
63
+
64
+ ```bash
65
+ xyte-cli call organization.devices.getHistories \
66
+ --tenant <tenant-id> \
67
+ --query-json '{
68
+ "status": "online",
69
+ "from": "2026-02-01T00:00:00Z",
70
+ "to": "2026-02-06T23:59:59Z",
71
+ "space_id": "<space-id>"
72
+ }'
73
+ ```
74
+
75
+ ## Common Endpoint Keys
76
+
77
+ Organization:
78
+ - `organization.devices.getDevices`
79
+ - `organization.devices.getDevice`
80
+ - `organization.incidents.getIncidents`
81
+ - `organization.tickets.getTickets`
82
+ - `organization.commands.sendCommand`
83
+
84
+ Partner:
85
+ - `partner.devices.getDevices`
86
+ - `partner.devices.getDeviceInfo`
87
+ - `partner.tickets.getTickets`
88
+
89
+ Device:
90
+ - `device.device-info.getDeviceInfo`
91
+ - `device.telemetries.sendTelemetry`
92
+ - `device.device-info.setCloudSettings`
93
+
94
+ ## Multi-tenant Determinism
95
+
96
+ - Always pass `--tenant <tenant-id>` for automation.
97
+ - Prefer `--output-mode envelope` for machine loops to capture request/guard/retry metadata.
98
+ - Use `xyte-cli tenant use <tenant-id>` only for interactive/default context.
99
+ - Keep auth explicit with named slots:
100
+ - `xyte-cli auth key list --tenant <tenant-id> --format json`
101
+ - `xyte-cli auth key use --tenant <tenant-id> --provider <provider> --slot <id|name>`
102
+
103
+ ## Notes
104
+
105
+ - Keep endpoint exploration and invocation on `xyte-cli` commands.
106
+ - Do not rely on repo-local script paths for agent operation.
@@ -0,0 +1,96 @@
1
+ # Headless JSON Contract
2
+
3
+ This contract is for agent parsers consuming:
4
+
5
+ ```bash
6
+ xyte-cli tui --headless --screen <screen> --format json --once --tenant <tenant-id>
7
+ ```
8
+
9
+ ## Frame Model
10
+
11
+ Each line is one JSON frame.
12
+
13
+ Required top-level fields:
14
+ - `schemaVersion` (`"xyte.headless.frame.v1"`)
15
+ - `timestamp` (ISO string)
16
+ - `sessionId` (stable per run)
17
+ - `sequence` (monotonic per run)
18
+ - `mode` (`"headless"`)
19
+ - `screen` (screen id)
20
+ - `title` (string)
21
+ - `status` (string)
22
+ - `tenantId` (string or omitted)
23
+ - `motionEnabled` (boolean)
24
+ - `motionPhase` (number)
25
+ - `logo` (string)
26
+ - `panels` (array)
27
+ - `meta` (object)
28
+
29
+ ## Startup vs Runtime Frames
30
+
31
+ Startup frames:
32
+ - `meta.startup == true`
33
+ - typically no operational panels
34
+
35
+ Runtime frame selection rule:
36
+ - parse the **last** frame where `meta.startup` is missing or `false`
37
+
38
+ ## Required `meta` Keys (Runtime)
39
+
40
+ - `inputState`: `idle | modal | busy`
41
+ - `queueDepth`: number
42
+ - `droppedEvents`: number
43
+ - `transitionState`: `idle | switching`
44
+ - `refreshState`: `idle | loading | retrying | error`
45
+ - `navigationMode`: `pane-focus`
46
+ - `activePane`: string
47
+ - `availablePanes`: string[]
48
+ - `tabId`: screen id
49
+ - `tabOrder`: screen id[]
50
+ - `tabNavBoundary`: `left | right | null`
51
+ - `renderSafety`: `ok | truncated`
52
+ - `tableFormat`: `compact-v1`
53
+ - `contract.frameVersion`: `xyte.headless.frame.v1`
54
+ - `contract.tableFormat`: `compact-v1`
55
+ - `contract.navigationMode`: `pane-focus`
56
+
57
+ Common optional keys:
58
+ - `readiness`
59
+ - `connection`
60
+ - `retry`
61
+ - `blocking`
62
+ - `redirectedFrom`
63
+
64
+ ## Setup Gate Rule
65
+
66
+ If operational screen is blocked by readiness:
67
+ - emitted `screen` is `setup`
68
+ - `meta.redirectedFrom` contains requested screen
69
+
70
+ Agent behavior:
71
+ 1. detect redirect
72
+ 2. run setup/config remediation via CLI
73
+ 3. retry original requested screen
74
+
75
+ ## Panel Parsing
76
+
77
+ Panel fields:
78
+ - `id`
79
+ - `title`
80
+ - `kind`: `stats | table | text`
81
+ - optional `status`
82
+
83
+ By kind:
84
+ - `stats`: parse `stats[]` items `{label, value}`
85
+ - `table`: parse `table.columns[]` and `table.rows[][]`
86
+ - `text`: parse `text.lines[]`
87
+
88
+ ## Render Safety Guidance
89
+
90
+ - `meta.renderSafety == "truncated"` means payload preview was safely truncated.
91
+ - Do not assume full raw object data is present in text panels.
92
+ - Use direct CLI endpoint calls when complete raw payload is required.
93
+
94
+ ## JSON Schema
95
+
96
+ - Schema file: `docs/schemas/headless-frame.v1.schema.json`