@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.
- package/LICENSE +176 -0
- package/README.md +245 -0
- package/dist/bin/xyte-cli.d.ts +3 -0
- package/dist/bin/xyte-cli.d.ts.map +1 -0
- package/dist/bin/xyte-cli.js +18 -0
- package/dist/bin/xyte-cli.js.map +1 -0
- package/dist/cli/index.d.ts +24 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +1185 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/client/catalog.d.ts +6 -0
- package/dist/client/catalog.d.ts.map +1 -0
- package/dist/client/catalog.js +32 -0
- package/dist/client/catalog.js.map +1 -0
- package/dist/client/create-client.d.ts +3 -0
- package/dist/client/create-client.d.ts.map +1 -0
- package/dist/client/create-client.js +235 -0
- package/dist/client/create-client.js.map +1 -0
- package/dist/config/connectivity.d.ts +19 -0
- package/dist/config/connectivity.d.ts.map +1 -0
- package/dist/config/connectivity.js +166 -0
- package/dist/config/connectivity.js.map +1 -0
- package/dist/config/readiness.d.ts +32 -0
- package/dist/config/readiness.d.ts.map +1 -0
- package/dist/config/readiness.js +96 -0
- package/dist/config/readiness.js.map +1 -0
- package/dist/config/retry-policy.d.ts +16 -0
- package/dist/config/retry-policy.d.ts.map +1 -0
- package/dist/config/retry-policy.js +24 -0
- package/dist/config/retry-policy.js.map +1 -0
- package/dist/contracts/call-envelope.d.ts +74 -0
- package/dist/contracts/call-envelope.d.ts.map +1 -0
- package/dist/contracts/call-envelope.js +72 -0
- package/dist/contracts/call-envelope.js.map +1 -0
- package/dist/contracts/problem.d.ts +11 -0
- package/dist/contracts/problem.d.ts.map +1 -0
- package/dist/contracts/problem.js +55 -0
- package/dist/contracts/problem.js.map +1 -0
- package/dist/contracts/versions.d.ts +6 -0
- package/dist/contracts/versions.d.ts.map +1 -0
- package/dist/contracts/versions.js +9 -0
- package/dist/contracts/versions.js.map +1 -0
- package/dist/http/errors.d.ts +24 -0
- package/dist/http/errors.d.ts.map +1 -0
- package/dist/http/errors.js +39 -0
- package/dist/http/errors.js.map +1 -0
- package/dist/http/transport.d.ts +35 -0
- package/dist/http/transport.d.ts.map +1 -0
- package/dist/http/transport.js +129 -0
- package/dist/http/transport.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +23 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/server.d.ts +12 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +404 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/namespaces/device.d.ts +38 -0
- package/dist/namespaces/device.d.ts.map +1 -0
- package/dist/namespaces/device.js +36 -0
- package/dist/namespaces/device.js.map +1 -0
- package/dist/namespaces/organization.d.ts +27 -0
- package/dist/namespaces/organization.d.ts.map +1 -0
- package/dist/namespaces/organization.js +30 -0
- package/dist/namespaces/organization.js.map +1 -0
- package/dist/namespaces/partner.d.ts +18 -0
- package/dist/namespaces/partner.d.ts.map +1 -0
- package/dist/namespaces/partner.js +21 -0
- package/dist/namespaces/partner.js.map +1 -0
- package/dist/observability/logger.d.ts +3 -0
- package/dist/observability/logger.d.ts.map +1 -0
- package/dist/observability/logger.js +21 -0
- package/dist/observability/logger.js.map +1 -0
- package/dist/observability/tracing.d.ts +3 -0
- package/dist/observability/tracing.d.ts.map +1 -0
- package/dist/observability/tracing.js +26 -0
- package/dist/observability/tracing.js.map +1 -0
- package/dist/secure/key-slots.d.ts +8 -0
- package/dist/secure/key-slots.d.ts.map +1 -0
- package/dist/secure/key-slots.js +47 -0
- package/dist/secure/key-slots.js.map +1 -0
- package/dist/secure/keychain.d.ts +20 -0
- package/dist/secure/keychain.d.ts.map +1 -0
- package/dist/secure/keychain.js +170 -0
- package/dist/secure/keychain.js.map +1 -0
- package/dist/secure/profile-store.d.ts +66 -0
- package/dist/secure/profile-store.d.ts.map +1 -0
- package/dist/secure/profile-store.js +309 -0
- package/dist/secure/profile-store.js.map +1 -0
- package/dist/spec/public-endpoints.json +1175 -0
- package/dist/tui/animation.d.ts +12 -0
- package/dist/tui/animation.d.ts.map +1 -0
- package/dist/tui/animation.js +41 -0
- package/dist/tui/animation.js.map +1 -0
- package/dist/tui/app.d.ts +27 -0
- package/dist/tui/app.d.ts.map +1 -0
- package/dist/tui/app.js +711 -0
- package/dist/tui/app.js.map +1 -0
- package/dist/tui/assets/logo.d.ts +5 -0
- package/dist/tui/assets/logo.d.ts.map +1 -0
- package/dist/tui/assets/logo.js +24 -0
- package/dist/tui/assets/logo.js.map +1 -0
- package/dist/tui/data-loaders.d.ts +33 -0
- package/dist/tui/data-loaders.d.ts.map +1 -0
- package/dist/tui/data-loaders.js +250 -0
- package/dist/tui/data-loaders.js.map +1 -0
- package/dist/tui/dispatch.d.ts +14 -0
- package/dist/tui/dispatch.d.ts.map +1 -0
- package/dist/tui/dispatch.js +44 -0
- package/dist/tui/dispatch.js.map +1 -0
- package/dist/tui/headless-renderer.d.ts +20 -0
- package/dist/tui/headless-renderer.d.ts.map +1 -0
- package/dist/tui/headless-renderer.js +598 -0
- package/dist/tui/headless-renderer.js.map +1 -0
- package/dist/tui/input-controller.d.ts +29 -0
- package/dist/tui/input-controller.d.ts.map +1 -0
- package/dist/tui/input-controller.js +76 -0
- package/dist/tui/input-controller.js.map +1 -0
- package/dist/tui/key-wizard.d.ts +29 -0
- package/dist/tui/key-wizard.d.ts.map +1 -0
- package/dist/tui/key-wizard.js +177 -0
- package/dist/tui/key-wizard.js.map +1 -0
- package/dist/tui/keymap.d.ts +9 -0
- package/dist/tui/keymap.d.ts.map +1 -0
- package/dist/tui/keymap.js +29 -0
- package/dist/tui/keymap.js.map +1 -0
- package/dist/tui/layout.d.ts +16 -0
- package/dist/tui/layout.d.ts.map +1 -0
- package/dist/tui/layout.js +99 -0
- package/dist/tui/layout.js.map +1 -0
- package/dist/tui/logger.d.ts +12 -0
- package/dist/tui/logger.d.ts.map +1 -0
- package/dist/tui/logger.js +83 -0
- package/dist/tui/logger.js.map +1 -0
- package/dist/tui/navigation.d.ts +26 -0
- package/dist/tui/navigation.d.ts.map +1 -0
- package/dist/tui/navigation.js +136 -0
- package/dist/tui/navigation.js.map +1 -0
- package/dist/tui/panes.d.ts +7 -0
- package/dist/tui/panes.d.ts.map +1 -0
- package/dist/tui/panes.js +34 -0
- package/dist/tui/panes.js.map +1 -0
- package/dist/tui/runtime.d.ts +34 -0
- package/dist/tui/runtime.d.ts.map +1 -0
- package/dist/tui/runtime.js +100 -0
- package/dist/tui/runtime.js.map +1 -0
- package/dist/tui/scene.d.ts +160 -0
- package/dist/tui/scene.d.ts.map +1 -0
- package/dist/tui/scene.js +424 -0
- package/dist/tui/scene.js.map +1 -0
- package/dist/tui/screens/config.d.ts +3 -0
- package/dist/tui/screens/config.d.ts.map +1 -0
- package/dist/tui/screens/config.js +406 -0
- package/dist/tui/screens/config.js.map +1 -0
- package/dist/tui/screens/dashboard.d.ts +3 -0
- package/dist/tui/screens/dashboard.d.ts.map +1 -0
- package/dist/tui/screens/dashboard.js +176 -0
- package/dist/tui/screens/dashboard.js.map +1 -0
- package/dist/tui/screens/devices.d.ts +3 -0
- package/dist/tui/screens/devices.d.ts.map +1 -0
- package/dist/tui/screens/devices.js +297 -0
- package/dist/tui/screens/devices.js.map +1 -0
- package/dist/tui/screens/incidents.d.ts +4 -0
- package/dist/tui/screens/incidents.d.ts.map +1 -0
- package/dist/tui/screens/incidents.js +304 -0
- package/dist/tui/screens/incidents.js.map +1 -0
- package/dist/tui/screens/setup.d.ts +3 -0
- package/dist/tui/screens/setup.d.ts.map +1 -0
- package/dist/tui/screens/setup.js +299 -0
- package/dist/tui/screens/setup.js.map +1 -0
- package/dist/tui/screens/spaces.d.ts +7 -0
- package/dist/tui/screens/spaces.d.ts.map +1 -0
- package/dist/tui/screens/spaces.js +422 -0
- package/dist/tui/screens/spaces.js.map +1 -0
- package/dist/tui/screens/tickets.d.ts +9 -0
- package/dist/tui/screens/tickets.d.ts.map +1 -0
- package/dist/tui/screens/tickets.js +418 -0
- package/dist/tui/screens/tickets.js.map +1 -0
- package/dist/tui/serialize.d.ts +31 -0
- package/dist/tui/serialize.d.ts.map +1 -0
- package/dist/tui/serialize.js +183 -0
- package/dist/tui/serialize.js.map +1 -0
- package/dist/tui/table-format.d.ts +11 -0
- package/dist/tui/table-format.d.ts.map +1 -0
- package/dist/tui/table-format.js +77 -0
- package/dist/tui/table-format.js.map +1 -0
- package/dist/tui/tabs.d.ts +4 -0
- package/dist/tui/tabs.d.ts.map +1 -0
- package/dist/tui/tabs.js +13 -0
- package/dist/tui/tabs.js.map +1 -0
- package/dist/tui/types.d.ts +37 -0
- package/dist/tui/types.d.ts.map +1 -0
- package/dist/tui/types.js +3 -0
- package/dist/tui/types.js.map +1 -0
- package/dist/types/client.d.ts +54 -0
- package/dist/types/client.d.ts.map +1 -0
- package/dist/types/client.js +3 -0
- package/dist/types/client.js.map +1 -0
- package/dist/types/endpoints.d.ts +29 -0
- package/dist/types/endpoints.d.ts.map +1 -0
- package/dist/types/endpoints.js +3 -0
- package/dist/types/endpoints.js.map +1 -0
- package/dist/types/profile.d.ts +29 -0
- package/dist/types/profile.d.ts.map +1 -0
- package/dist/types/profile.js +3 -0
- package/dist/types/profile.js.map +1 -0
- package/dist/utils/config-dir.d.ts +2 -0
- package/dist/utils/config-dir.d.ts.map +1 -0
- package/dist/utils/config-dir.js +23 -0
- package/dist/utils/config-dir.js.map +1 -0
- package/dist/utils/error-format.d.ts +4 -0
- package/dist/utils/error-format.d.ts.map +1 -0
- package/dist/utils/error-format.js +34 -0
- package/dist/utils/error-format.js.map +1 -0
- package/dist/utils/install-skills.d.ts +38 -0
- package/dist/utils/install-skills.d.ts.map +1 -0
- package/dist/utils/install-skills.js +117 -0
- package/dist/utils/install-skills.js.map +1 -0
- package/dist/utils/json-output.d.ts +6 -0
- package/dist/utils/json-output.d.ts.map +1 -0
- package/dist/utils/json-output.js +30 -0
- package/dist/utils/json-output.js.map +1 -0
- package/dist/utils/json.d.ts +4 -0
- package/dist/utils/json.d.ts.map +1 -0
- package/dist/utils/json.js +36 -0
- package/dist/utils/json.js.map +1 -0
- package/dist/utils/version.d.ts +2 -0
- package/dist/utils/version.d.ts.map +1 -0
- package/dist/utils/version.js +28 -0
- package/dist/utils/version.js.map +1 -0
- package/dist/workflows/fleet-insights.d.ts +122 -0
- package/dist/workflows/fleet-insights.d.ts.map +1 -0
- package/dist/workflows/fleet-insights.js +938 -0
- package/dist/workflows/fleet-insights.js.map +1 -0
- package/docs/schemas/call-envelope.v1.schema.json +140 -0
- package/docs/schemas/headless-frame.v1.schema.json +159 -0
- package/docs/schemas/inspect-deep-dive.v1.schema.json +251 -0
- package/docs/schemas/inspect-fleet.v1.schema.json +111 -0
- package/docs/schemas/report.v1.schema.json +39 -0
- package/package.json +75 -0
- package/skills/xyte-cli/SKILL.md +181 -0
- package/skills/xyte-cli/agents/openai.yaml +4 -0
- package/skills/xyte-cli/references/endpoints.md +106 -0
- package/skills/xyte-cli/references/headless-contract.md +96 -0
- package/skills/xyte-cli/references/tui-flows.md +126 -0
- package/skills/xyte-cli/scripts/check_headless.sh +83 -0
- package/skills/xyte-cli/scripts/endpoint_filters_report.sh +33 -0
- package/skills/xyte-cli/scripts/run_xyte_cli.sh +12 -0
- package/skills/xyte-cli/scripts/validate_agent_contracts.sh +72 -0
- 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`
|