nexscope-cli 0.1.0__py3-none-any.whl
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.
- nexscope_cli/__init__.py +4 -0
- nexscope_cli/api-contract.json +37 -0
- nexscope_cli/capabilities/__init__.py +3 -0
- nexscope_cli/capabilities/catalog.py +73 -0
- nexscope_cli/capabilities/mock.py +53 -0
- nexscope_cli/capabilities/plan.py +142 -0
- nexscope_cli/catalog.json +69 -0
- nexscope_cli/compat/__init__.py +4 -0
- nexscope_cli/compat/legacy.py +143 -0
- nexscope_cli/core/__init__.py +3 -0
- nexscope_cli/core/auth.py +81 -0
- nexscope_cli/core/datasets.py +305 -0
- nexscope_cli/core/errors.py +11 -0
- nexscope_cli/core/evidence.py +134 -0
- nexscope_cli/core/execution.py +171 -0
- nexscope_cli/core/remote.py +22 -0
- nexscope_cli/core/transport.py +61 -0
- nexscope_cli/dependencies.lock +282 -0
- nexscope_cli/dependency-lock.json +371 -0
- nexscope_cli/doctor.py +136 -0
- nexscope_cli/main.py +313 -0
- nexscope_cli/reports/__init__.py +3 -0
- nexscope_cli/reports/compare.py +135 -0
- nexscope_cli/reports/formats.py +99 -0
- nexscope_cli/resources/__init__.py +3 -0
- nexscope_cli/resources/fields.json +33 -0
- nexscope_cli/resources/mock-products.json +9 -0
- nexscope_cli/resources/products-sample.csv +5 -0
- nexscope_cli/resources/products-sample.json +6 -0
- nexscope_cli/resources/products-template.csv +1 -0
- nexscope_cli/resources/products.schema.json +182 -0
- nexscope_cli/resources/report.html +15 -0
- nexscope_cli/runner.py +43 -0
- nexscope_cli/skills/amazon-product-detail/SKILL.md +170 -0
- nexscope_cli/skills/amazon-product-detail/references/api.md +239 -0
- nexscope_cli/skills/amazon-product-detail/requirements.txt +1 -0
- nexscope_cli/skills/amazon-product-detail/scripts/amazon_product_detail.py +26 -0
- nexscope_cli/skills/amazon-search/SKILL.md +197 -0
- nexscope_cli/skills/amazon-search/references/api.md +189 -0
- nexscope_cli/skills/amazon-search/requirements.txt +1 -0
- nexscope_cli/skills/amazon-search/scripts/amazon_search.py +26 -0
- nexscope_cli/workflows/__init__.py +3 -0
- nexscope_cli/workflows/compare.py +213 -0
- nexscope_cli-0.1.0.dist-info/METADATA +257 -0
- nexscope_cli-0.1.0.dist-info/RECORD +74 -0
- nexscope_cli-0.1.0.dist-info/WHEEL +5 -0
- nexscope_cli-0.1.0.dist-info/entry_points.txt +2 -0
- nexscope_cli-0.1.0.dist-info/licenses/ASSET-NOTICES.md +9 -0
- nexscope_cli-0.1.0.dist-info/licenses/LICENSE +202 -0
- nexscope_cli-0.1.0.dist-info/licenses/NOTICE +20 -0
- nexscope_cli-0.1.0.dist-info/licenses/THIRD-PARTY-NOTICES.md +27 -0
- nexscope_cli-0.1.0.dist-info/licenses/third-party-notices/backports-tarfile/LICENSE +17 -0
- nexscope_cli-0.1.0.dist-info/licenses/third-party-notices/certifi/LICENSE +20 -0
- nexscope_cli-0.1.0.dist-info/licenses/third-party-notices/cffi/LICENSE +23 -0
- nexscope_cli-0.1.0.dist-info/licenses/third-party-notices/charset-normalizer/LICENSE +21 -0
- nexscope_cli-0.1.0.dist-info/licenses/third-party-notices/cryptography/LICENSE +3 -0
- nexscope_cli-0.1.0.dist-info/licenses/third-party-notices/cryptography/LICENSE.APACHE +202 -0
- nexscope_cli-0.1.0.dist-info/licenses/third-party-notices/cryptography/LICENSE.BSD +27 -0
- nexscope_cli-0.1.0.dist-info/licenses/third-party-notices/idna/LICENSE.md +31 -0
- nexscope_cli-0.1.0.dist-info/licenses/third-party-notices/importlib-metadata/LICENSE +73 -0
- nexscope_cli-0.1.0.dist-info/licenses/third-party-notices/jaraco-classes/LICENSE +17 -0
- nexscope_cli-0.1.0.dist-info/licenses/third-party-notices/jaraco-context/LICENSE +18 -0
- nexscope_cli-0.1.0.dist-info/licenses/third-party-notices/jaraco-functools/LICENSE +18 -0
- nexscope_cli-0.1.0.dist-info/licenses/third-party-notices/jeepney/LICENSE +21 -0
- nexscope_cli-0.1.0.dist-info/licenses/third-party-notices/keyring/LICENSE +18 -0
- nexscope_cli-0.1.0.dist-info/licenses/third-party-notices/more-itertools/LICENSE +19 -0
- nexscope_cli-0.1.0.dist-info/licenses/third-party-notices/pycparser/LICENSE +27 -0
- nexscope_cli-0.1.0.dist-info/licenses/third-party-notices/pywin32-ctypes/LICENSE.txt +28 -0
- nexscope_cli-0.1.0.dist-info/licenses/third-party-notices/requests/LICENSE +175 -0
- nexscope_cli-0.1.0.dist-info/licenses/third-party-notices/requests/NOTICE +2 -0
- nexscope_cli-0.1.0.dist-info/licenses/third-party-notices/secretstorage/LICENSE +25 -0
- nexscope_cli-0.1.0.dist-info/licenses/third-party-notices/urllib3/LICENSE.txt +21 -0
- nexscope_cli-0.1.0.dist-info/licenses/third-party-notices/zipp/LICENSE +18 -0
- nexscope_cli-0.1.0.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,371 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"distributionProfile": "data-only",
|
|
5
|
+
"directRequirements": [
|
|
6
|
+
"keyring>=25,<26",
|
|
7
|
+
"requests>=2.32,<3"
|
|
8
|
+
],
|
|
9
|
+
"lockSha256": "8b09ca0b06cf603ebca2b58348dbb6fc49449cf667cb636cfb9a12564dec7f82",
|
|
10
|
+
"requirementsSha256": "5628394f6e1d62da120fcf66f80ada4e12109f45b680e5d61e9d1f69496c93fb",
|
|
11
|
+
"packages": [
|
|
12
|
+
{
|
|
13
|
+
"requirement": "backports-tarfile==1.2.0 ; python_full_version < '3.12'",
|
|
14
|
+
"sha256": [
|
|
15
|
+
"77e284d754527b01fb1e6fa8a1afe577858ebe4e9dad8919e34c862cb399bc34",
|
|
16
|
+
"d75e02c268746e1b8144c278978b6e98e85de6ad16f8e4b0844a154557eca991"
|
|
17
|
+
]
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"requirement": "certifi==2026.7.22",
|
|
21
|
+
"sha256": [
|
|
22
|
+
"62f22742b58a1a33014a2b6b706588a8d7e2a88ae7bd1a6ebe8c992928483775",
|
|
23
|
+
"741e2c3b351ddf169a738da9f2c048608ff7f2c5cc02f1ebc6b118bb090d5d55"
|
|
24
|
+
]
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"requirement": "cffi==2.1.1 ; platform_python_implementation != 'PyPy' and sys_platform == 'linux'",
|
|
28
|
+
"sha256": [
|
|
29
|
+
"154852545011f779917b11c78db2358d095da62a9a172b78ad0a583ee5adc0d0",
|
|
30
|
+
"208f941bb9d18e768138677f0a6d2ce01f590df56043dda1df1535ac57c88517",
|
|
31
|
+
"210019b6c7cf07f081b4c54635c8cf744377001350e29cc0f81c4377b4797735",
|
|
32
|
+
"246fa40ce8645a614ff682e0b70f37134e460eaf93a775e0cbe3cca585a67a80",
|
|
33
|
+
"25792eac27877609e7bb06d42ff88278a6624fff2ba9bbb523c09616b117e80f",
|
|
34
|
+
"28907ab9bfb6aa13184cfc17c6b8e1023c5ab6fd7076d8c20a35e59fe04f8f29",
|
|
35
|
+
"31348097ff5bbe827ccc41795d4dd099d9f0625e7def00ee653c137a490c2a6c",
|
|
36
|
+
"3143d81e29e1e20a9ce10901ec369012947876596f75a222235965f2b7ae832e",
|
|
37
|
+
"3311ed60d36f83378794e1009ac6258bafbf81f7888b4caa7b35a521e3f95813",
|
|
38
|
+
"34e261f78cb6ceaaa36f42f2613f4380d94d9c759a9c73c769ee6e0247364632",
|
|
39
|
+
"363e05fa78e15116c3c32c210ee36884fd6b9afa6d440e47112c3bd511d64cb6",
|
|
40
|
+
"42a494cee34437f05546455144f2b5d9ac09b1face62bcfce597d2e521066688",
|
|
41
|
+
"456a61fa52d579ebf9df2e9552ead5129855dbaff6c1e5a9b1bc408809bdc062",
|
|
42
|
+
"471cee653ae88de62096552e6d24ccb4a5adb8c8c9f10b5054d0122c15bf2779",
|
|
43
|
+
"49cbc70e6542d4ccccb936558d1064a8012541e78f821f955cff24e357776c94",
|
|
44
|
+
"4a7c934f7360e8cd64fe9efadcbd10c7c6364f531e432b9a4bf5ccbc9e0e8b50",
|
|
45
|
+
"507a24c282e0f42f8ed737cf048572cbf580468da5555764a8331735e9c736b6",
|
|
46
|
+
"51b31d1c98274844cfd7838ce00bfc27c7423a4dc00fc0772fc3331c2cc90676",
|
|
47
|
+
"58acb8ab8e295e6c5ea12f888cbb13cf21511ef2a3303a23f4325c29d17fe5c1",
|
|
48
|
+
"5c58fe613dc5e5336357eff555824a314d8e43282600435c8d1cb6a7a2fedd13",
|
|
49
|
+
"5e7cecbaadb83884793e05828cee59b210b24583b9c7425d0ba6a754fe22eb4e",
|
|
50
|
+
"64faea20f4e2613363a1a9b9c7dd73058f3ecd00133a511e72ad7c511658f527",
|
|
51
|
+
"68e62fe11f30d5ca8289242866f0a5291402d8529ca2178ab8afc5c9694ae890",
|
|
52
|
+
"6a8dddef476fab96d066d578fc88526767b836ab5ab21754e1d5bf3879c31c7c",
|
|
53
|
+
"6e192623c49c94421616a5778fba35cf0d5a8d000650c1967ef4448ee5cdd990",
|
|
54
|
+
"7225e4514edb64eb6740324353e0da0711954fd8d7da4576755b1c6e09b697cd",
|
|
55
|
+
"770de9db11e84213beec501cfcaa013b019820ca881e03344dea5844f7876d94",
|
|
56
|
+
"7da0c5eff80f0197f3b3d1232ec5a682a9325f4ae9016a78f5f5ca35f9ced1f5",
|
|
57
|
+
"7dbb61fe3a7699468030f71bbe5f8a0e326a151daa91beb11a6fc1f980c55e1c",
|
|
58
|
+
"811bd1e21d32de12efca32393a0ab3f5133b54fce9bd44b8bd77ab07da14bf6a",
|
|
59
|
+
"937c0052c05a31ca1daf18de3158eed4dbfcb9cc107adbea227728d647be701e",
|
|
60
|
+
"a2d7755bef5a12ed488f4ef1f1b69ee9191d7396083b755a5d2295f6edb4768b",
|
|
61
|
+
"a4f00aa42f75d6e4595e8866e748cc1705adc0cddfeb2ca86d0d03993d63ba03",
|
|
62
|
+
"a6e721d4b0e45d5b65e87534470e67b18dcd092c83f68fba09f152b9cbc061af",
|
|
63
|
+
"a730a083190634c65cca36ba5f489531576ebd79bcd5c8e172130f6453127231",
|
|
64
|
+
"a931079504ecc49efed7744c476a5c343a92fabf66dec2db95edb1b2fdc770e2",
|
|
65
|
+
"aa9511c62d14da7aacc9b4bf51f3f697a621e83b2d6919008243c3aad168eea3",
|
|
66
|
+
"aeae0e330c9f6acd681f647d46cefd30c29f93e3392882e792e82080c9691399",
|
|
67
|
+
"b0431303acaea1089ad4b3e9ce4e6518193def1118d4073ca848635ee4ea2e96",
|
|
68
|
+
"b5bdfd1c873d4e093aabc0ca84c4ca6dbc4f752afb5c86f146d9742580c9da2e",
|
|
69
|
+
"c1453022f490d2459a11819d83ad1d586e9ff65a12ac3e705ffebd46d3685dcf",
|
|
70
|
+
"cc572dace3f60ef98d7b12ff411d20f5362feb31a0439eab0085bbfd349982d7",
|
|
71
|
+
"da0e573f9f97159390c89d9f1a9e41908b66d408cc5b58d08cf3847d844c531b",
|
|
72
|
+
"dd31f52ea1086513bb9df30f8fcee9b8918323ae067a3d5b78bc826a000712be",
|
|
73
|
+
"dddad92b554513a31f272570678ba307fb9f618f05e3d4a5eacafff9eae03e1d",
|
|
74
|
+
"df423d40ee8654634421812bc3b196da3f9bd7d32929da813f8394c4348a5358",
|
|
75
|
+
"df913725b79db7bcf03448f36b7bf8815363417d5b58deecf9305e3e30f0f21a",
|
|
76
|
+
"e0bcb7e0f677f543555d2adff3bf19c05f66cdb4796e5ff602442ab2fe3c4ef7",
|
|
77
|
+
"e2d65b31f36619cda3999b78b2aa9632e76b78448e7a56fc4240824200e7c4fc",
|
|
78
|
+
"f16c709686a78c727bbbf059f92b0bf41c6fc60deec706d2dc19f529175a6125",
|
|
79
|
+
"f24fb43132a4c6b4cb4eb029492919b2db645be6808d738f244fd146c03c32cb",
|
|
80
|
+
"f5cfbc5fe74540d335175b656c725d74d90e3730c626d92575eea35029d9afaa",
|
|
81
|
+
"fcd22650c908d7b7da162bbfaab594a1227a15d1643a98c68b122ac642fa2264"
|
|
82
|
+
]
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
"requirement": "charset-normalizer==3.5.1",
|
|
86
|
+
"sha256": [
|
|
87
|
+
"01e93745f7f219b703b60ba7afead36cfc4242782be5af484673fc500df12da5",
|
|
88
|
+
"04368edf83514385ffc3e1cfd4546e595f4f1272dd23ba437a93a9cc3741d47b",
|
|
89
|
+
"0722590aabf9dc6a6c0343d523c05458fa2b5047dbe6302fd526bb570600753f",
|
|
90
|
+
"09a7bba9f739468c8e78c36a75c33768e53cb1959fc638f510454c14683f00d5",
|
|
91
|
+
"0b2b1b3fa5670c127b246df1d0c059defd41f689a868a3b9d79df9b1cac42d22",
|
|
92
|
+
"0c6dfb5ca6723eeed15aa8e564a014d69fcb8812f94eef11fe3631e0508199f5",
|
|
93
|
+
"0d929fc574b4d6fd9e7c0f5c2ede8716a41911923aa7fa5fce38e0818aa4a1ac",
|
|
94
|
+
"15f024313246a4ed976c60f440bb8d257815513a681d212ff74fd46f7d715a90",
|
|
95
|
+
"195ce897c6153c0700078142cf8efe3e6454ca4cf4357499e4078dfd83396626",
|
|
96
|
+
"19a3dd5aa73cef1c99687c4fc57db016a9c17104ae1185da88ba566a5d3bebe4",
|
|
97
|
+
"1d1c7a53a6c2103925cdd6d7229f8c567379f211c869793df679f2e9f738c369",
|
|
98
|
+
"1f5883d77fd409a261abb5dc8ccbe335720d798b1de4abb3b1d47ccbbc76b53b",
|
|
99
|
+
"21b82d8082f6f5e7f456ef0bd16323d08de1266efbfeb476e64b2a91d1471a4e",
|
|
100
|
+
"252d099029bcbea642f2a06c4ed5046bdf8b5a8150b64afa5e027e88b106e5ee",
|
|
101
|
+
"256dd4d85d9e4dc595e2bc983c980e73f62ddeb3165c58b4c3dfe78c5c8548c1",
|
|
102
|
+
"26422d45fd13551cf564c58932f7d72b4f58b93b0fcf18c35ba6be12b46bb102",
|
|
103
|
+
"2679de311c7946dde5d3b6f44941844133ff5c7cb86099c0061ab1e8901c20a8",
|
|
104
|
+
"2bced4061f000f7187254a02ad3433ae17eaf991747ceea2f478422590a5bba9",
|
|
105
|
+
"2f06b7eae9dbe77fe1d644ca244dad508de8d302870a43f3c559b521270938a0",
|
|
106
|
+
"2f293479cce755c75f1697e87c409b7ae4c555c7dfecb6e988ad13abba943031",
|
|
107
|
+
"329fc3ccb63ad22d867d84c2adea759a64079a37ba4a343433b02c7a2816871e",
|
|
108
|
+
"343fb4f2821043bd87095f7b08a1a181febc8e36ac64212143bbfd0a0e1bc235",
|
|
109
|
+
"3588e376b3ea2eea84976f67273d679f229e24c66dce7b82ae45aef04ff6e072",
|
|
110
|
+
"35aea775dc2bd5f54cd84a1cd2696cc3207c479cb9cf0bd346f0d343e4300ddb",
|
|
111
|
+
"35fe081843b35aad20ffeccec3eeffbe637b15d14f3fb22cc1b59cd8ec17e93c",
|
|
112
|
+
"36047af20e17097c3bb9476c2b7655f2f7aa51322c0ba58c07695bedf755a950",
|
|
113
|
+
"3617ac3cfd8b9888f145ad89dd6e692285834b0201c6074a5eeaad3fd4d668c2",
|
|
114
|
+
"394fea06235c8543390050ed5f529187074b029fb027213f6c46ac11ab5d950e",
|
|
115
|
+
"3d27167433c0d5f18dc850f07d0b3816221984fecdc405d6c157a6f0b8f8e9e6",
|
|
116
|
+
"41876ee62a3dddf48ff1121ad8f0798032aa03f2fd35f21f34a4cab14f18d8d2",
|
|
117
|
+
"4582c27e8c889d64811987b5967fbd3ae0c823fe1fd933b543d55ac20bb475fa",
|
|
118
|
+
"485a0d363cafefcd2538a73c7c838daa2035f09b2c9f9b5e3133f80c6aeb84c2",
|
|
119
|
+
"496846868fea80e479324862fa877f02411f2fd0f83b79ccee2607aa68b2a032",
|
|
120
|
+
"4abdc5f9ad448c1ecbfae2974b820535d6bc6e7eef63babbab3d81cf46968c71",
|
|
121
|
+
"4b599739b93b2cbeded49645ae3c8d1405c29ddfbceac1545c87a3f9580a9e96",
|
|
122
|
+
"4bea7f8ebe90bbd7f0e4a2de42ca6924ba23e3e76418c408ff82f1d46fabd687",
|
|
123
|
+
"4c4fb141a727957c93edfe5c32a26ceb6b5f6461d67146e2d39f51e16170bea8",
|
|
124
|
+
"4c9548dc78002099910abaebc0a72ac58b7d30931869e0351c09b507dff4ece3",
|
|
125
|
+
"4d26f14f041e83dd8edfd61f4cd4fa7285d31798b5bf1f28e70c367ba6c41d61",
|
|
126
|
+
"4f298bdadb8f0b9e5672877f647d1be9373ef5320c9e2f049795e26cad28b6a9",
|
|
127
|
+
"52ec005752a56ae79547a05c0139ca2501a0c866390b6115008456b9f0e7cde1",
|
|
128
|
+
"58d3e12c88e0950bca850ae1f7c256055c097639c2edb9eb123af9807d8b15e4",
|
|
129
|
+
"58d4aa13a59c969dbfdf9e6a9560e242cbfd9e8a8f50c2747714df1a423adf65",
|
|
130
|
+
"59171c6e45bf07d0d5cab3b0bf81d945035530f6873398b3b531c31184d46663",
|
|
131
|
+
"5b6d1386bf0096d26d3a863dc0a487a5b4eb9aa93cf5ba69683d29dde6b9d60f",
|
|
132
|
+
"5c0ea61a470e070686aa30892fed79e297d2c8d0ab46b8bcdf027d38c51da591",
|
|
133
|
+
"5c84bec0ab5ae0c64bfe73a7d2adcb5ce73b467523fc27fd6a28ab2aa6cbe35a",
|
|
134
|
+
"5d8531a6569d025f68e2321e7638fb7978f23db58e5f69f56913837aae03816e",
|
|
135
|
+
"5fc45d653ea8c9a20479167e11d4a0f8cb2fa3470737ab6f9c827532313187b7",
|
|
136
|
+
"6117b84ea48435e5356dc737f5121485c30920ba43375fa7b434fd753df0eac3",
|
|
137
|
+
"6199d5606e2bbf2b096cf64d03f8b6790c91081d5ac866b8e7bb6422738cc60c",
|
|
138
|
+
"62b55f6722735a6c472f88361cde6640608773d9443cebdbb51abf436a1fcdd3",
|
|
139
|
+
"687c9ca3035544b113bea2055e180af96fb63c0c476e22a9180f51925186e7b7",
|
|
140
|
+
"6b7430cf5728e68f6c462254009a6ef4086e1bea43cf2f57aa9c55fb4f50ff96",
|
|
141
|
+
"6ba32c4d2abf1d2fe7cf27d280f4cca5664233b0f885549c7761719eb977f486",
|
|
142
|
+
"6c9cdde8becb25a7fde49924511aa2644d6f8081cc8df8e9452724303348d8e3",
|
|
143
|
+
"6df0ec430f9a831772c23ca5a224cba36517a58a84bb32c32bb59a9fa67c47f6",
|
|
144
|
+
"6e2912d4babbc65196ac13c2f53468dc57fb8b9c25ef913e8c59ddf7c6dc0e1b",
|
|
145
|
+
"6e5e4d73d588ca5ed09df1b7dcd1b203d1df3c542e3f50d126c947d432b10731",
|
|
146
|
+
"70055ff39b97c99e7ae40ea3e393fb62aa2e44dbd9b29f8d14f42fb0025c3959",
|
|
147
|
+
"706bfd38730a5ac7a365793269a00f4e988178cec121391f4248d84ad8c972e9",
|
|
148
|
+
"7235dc28fc6dd9d832ac7c7bce95367dedb85929f17368a0c2bee1e080b9acbf",
|
|
149
|
+
"774d157f112367ff4abd29019f38f023c24e00e56edc7829c20e358a5a913ad8",
|
|
150
|
+
"77efcff2b23071c349402ac1066667a3d011f62398d81408c9b88ad991747c9e",
|
|
151
|
+
"7ac76cf9afd34929d76eb7fcb63be476a4853d8a96f0dcf2d0db68a0cbdf9885",
|
|
152
|
+
"7c0c10730342b0c9b35dd1d619beb8214e520bd96a1f870f452680b238aab3e0",
|
|
153
|
+
"823f82903d189af463d7df250ef1f7f696f3cee08cc8d91deb565e8d425f6506",
|
|
154
|
+
"838648accb3a7fd9803fd45c87bce8509648eb0c11bc34e216141300977244f2",
|
|
155
|
+
"854066be00447fa8de2ccbbe893e2ffc4b123ef16d897af794c1e18bd4a714b0",
|
|
156
|
+
"85d5855daafc240cc045c026d7a15fd198a09b0fc8ff6f5ecbb5297b509cb11e",
|
|
157
|
+
"87e4f41d375c0b9be2fb5251aee4b8a689169e134535aed81bf085c3b647451e",
|
|
158
|
+
"88ca277405c2d3b71c4e1c2ee0e7966e807bcba86a69d11e19ba199d18ae4491",
|
|
159
|
+
"88e85ab89cb822c1e635f51d6d32e488f94e002e70e2f492bdb8b945543f345a",
|
|
160
|
+
"8ac8c94b6539074e0f40899301273ac8402b9b3e01c7b7ba269ff30340aaaf20",
|
|
161
|
+
"8fe532b3c966d1fb794e0698e4589d0444017ae77fc0b31edea13c0e35bcc449",
|
|
162
|
+
"9085f87b0e38a2b92b8923059b4e8789fe40d9279712d15dcc670048d77079af",
|
|
163
|
+
"90b7481fb62fbe172c558bc6fd1c4c98d82004a54a7551f20e11ac9bf0b8708c",
|
|
164
|
+
"92caef967d287a407085d61176fce4012b1dd62daed4eb6d5ceb26d3d2538712",
|
|
165
|
+
"9362dd90aa7dab48c0054a21187791ccf05473f7dba5d92b8033ae62164675e7",
|
|
166
|
+
"94d78ecec2605a8d0398b0f365d5f12a63248438516f5dac536a5eff7337df4a",
|
|
167
|
+
"96fef3e886d6a9874b14f27fc193fbdc69d5d8035783d86aa4e1cea594e695f9",
|
|
168
|
+
"977cdbd483a9cff38179bea4fd754289a6f2195c7abd414aba85410b3e66cc5e",
|
|
169
|
+
"978eab16f55b4ab2c2a745be9a0a840bf8f09a7f227d9c76eb30214d078865a5",
|
|
170
|
+
"9ac4444d8d4fd4c4bd08bf451ed3167aa9e7ec6cdb41b648794f1d1103652e36",
|
|
171
|
+
"9b5db6052055d34d41230fb78d7c439c23dc536a9896f6cb039e8dd92cfc1263",
|
|
172
|
+
"9d9a0dc7cbe9bec24c3f767c9122c41fe5a1bc43f47cd099d00d393e09769de4",
|
|
173
|
+
"9dbdd9205662134957cf0c324f639bdc5031c0ca056e2369e238db75187c0f11",
|
|
174
|
+
"9eea3ab2597a5e65fe65296e2d6a84570845a6b55532d90333d740d48bbc850a",
|
|
175
|
+
"a2028475ba855475b8b4d3cfeb4994269c967aea8b9892dfba907f4263a863a3",
|
|
176
|
+
"a3a370082ce34d0612f421e15fe011c53bb1feff21a26d06ad4fb244dab5a375",
|
|
177
|
+
"a5cbd90ecf0fc62e64726917ad083b73001f0563657a87ec3c0b504e277dc90d",
|
|
178
|
+
"a6dac12ff6b846103483683f60c5f8fee205121adc58ffd87e90a90a3af69e99",
|
|
179
|
+
"aa1099b956fb795e686d073568f6dc002a0bb89765ea6d5b055dd7d9bf1b116c",
|
|
180
|
+
"aa2bb0b37202dca27175591f761108b5d34096ade1191ffe4808bdf6b1571488",
|
|
181
|
+
"aae2ee51122d3ae968a3837d97dc24a0aeebb0dea23694422cd172bd30017cd6",
|
|
182
|
+
"ab743e9bc90c1f73552ec33e10e3331315acd2c397b36065b591b0181de533cc",
|
|
183
|
+
"ac00177c4831ffa650f8609e4bdddd5fe09c03b1c0c47acece7e6ea20421598b",
|
|
184
|
+
"ac13b004224fb341e1e25a1ed5e19d32f57cdb2a403e01f003b46f051a550f6f",
|
|
185
|
+
"acaf604462bf330b0d07e7a07c1d6e4adac79e5fb13e9c5140590542cafacc00",
|
|
186
|
+
"ae31a1a1db2ee6cc2942fccaf695c934bc7f3db9f2133a3fef1f367cf1a4ab10",
|
|
187
|
+
"ae4a097991662cd4fff0ddc74e0fe7874f82e00042fa0ea00855645ed0c79598",
|
|
188
|
+
"aea996a6aba25260827c9ea511d1addfde2da9eb686ac961838509086188b7e6",
|
|
189
|
+
"b39b69b347e5e47a3b5b8cfc005c68c1ba347474e3960236c4944a8ecd174962",
|
|
190
|
+
"b54e7e13267d49ffbfe68e25b3cbd774dab38fa37238f71265e91b36146eb21c",
|
|
191
|
+
"b9af956078716df40d985fb0dfeb2c2120c5ca92ba4ff4b388acfd01cdc14d08",
|
|
192
|
+
"ba501e667c17d8411f98e67a022d9604ef179aff0e459b7e292c796837c13573",
|
|
193
|
+
"baf3775a2635e5a11fbd5e4e64ee69c7e86875d224a5c72aca4c141064589a90",
|
|
194
|
+
"bb57753e36e4855b8ca375069482250a6246372331a3e4f3407eaebb007443f5",
|
|
195
|
+
"bd6c173f04743d483881bffa1478d5a4624475b8cd1d2194956a75548e191c18",
|
|
196
|
+
"c010f5581d9c612804cc59fcf7b524b707fbcb72828551237ab545bb5c7034af",
|
|
197
|
+
"c428c6c31eb5f4277d7f8eccaf767fbd548ddd5ce3c8b4f4cbbfab3d96b5904c",
|
|
198
|
+
"c658c50ac0c98cd755a2dd50b7977d3bca7df401dcc47fbdfa87db53ef7d4e8b",
|
|
199
|
+
"c71fb0d56c920c269cd3e2e3fe7c610e3f1fdb21a6ce60efa6430ff63676cea6",
|
|
200
|
+
"c7b742bf31c88566b4bb6335a7f393bb322e580b6bb98df7bd0c25e6e3519ce8",
|
|
201
|
+
"cc0329df4caaceb950d2f580b5ac716a377f7059624a0bafaeaf8a218c6ed774",
|
|
202
|
+
"cc5d36d96478aa9c60654bd932525bf32964c62a7281eafdf16d85003a8d6004",
|
|
203
|
+
"ced3fdd71aaa83ce593746c2edb42b7a59cb4c19c8b5c407781c72e493aae55a",
|
|
204
|
+
"cee5dd7c6fb5dd52a0fe2a740f9bc6e3593f5f8b1788bde49de02086f30182b2",
|
|
205
|
+
"cfa1c0cc3a8f9f53f1243a5a99ac36fd003880199383b37672e86ddda9cb07e2",
|
|
206
|
+
"d59b75732e9b6f27388e10c14b0259cc5f2e48c78627d185e6a177b58ad3cffe",
|
|
207
|
+
"d63600d620ad0064c3a748b950ac5ea38a80190e5498532efefa4b7b3f1da1f3",
|
|
208
|
+
"dd732602a7009217f658d5863d12d79d373a4de0eebc111094bcdd3bb8e0a6cc",
|
|
209
|
+
"e199fb99720074809a7720f1c0b4d919eea8b87e88713e0f8f602f7bef543d9d",
|
|
210
|
+
"e4b018dc5a0eee4676e38fe84a47a427816c590b93b55d9025274ec4d6ffc2dc",
|
|
211
|
+
"e6621fb2a4988d6e53eedc455e5903e2679f3967b8acb3d639f1b63c14a2e893",
|
|
212
|
+
"e71c909f353863b2b89c83de2ebed71ea6d0df8a6ef65a128193c5e650766bef",
|
|
213
|
+
"e90251c0c7bdd54a100a0dce3c07b7e637278c93af29dbf78ebb89a58c4bac7d",
|
|
214
|
+
"eda059b6bc8bc0812d626fd91a7ce01bf583df0a61296eff390fd94141a34e30",
|
|
215
|
+
"f03ac127268b43ef4fe9e6ab6794a6794b49485a0cc0c1db79876d2f33f75bc7",
|
|
216
|
+
"f298e218441525d3794428b4c8b8fb8662c6d3ea79925d4807ee6b9a96a3bca5",
|
|
217
|
+
"f6f7deae3feb4edfa2efaf7c574fe88cbf055038a6abdb40188e4fff66d5699f",
|
|
218
|
+
"f9b1e28d0e8dbfa858abdba91d6b547beaf2df1a59bec6da6faae7b96a4991a9",
|
|
219
|
+
"f9f8405c2c758532c74fed975dbee57be1f31a6e865c031870c79a6ed3212ada",
|
|
220
|
+
"fa48b1b63d639f9483e0633e092f5851e2348c352f1f9bb6c8182f87884ef876",
|
|
221
|
+
"fb78f6e7fcd8ad785d28cd577168bc1aaee827b25bb8755638f694794ea98f0a",
|
|
222
|
+
"fbc597639158fd7c14d55e808718848319540f51b0e6746e3eefa59723a4a348",
|
|
223
|
+
"fce8cbd4997efeb450bd298b54f755dcdff18d496f7a5ddbb4867c6d7c88fdc3",
|
|
224
|
+
"fd0350afdc3aabd5576f60ea109228bd5538139713c7b094c5cd27c73a98bc6f",
|
|
225
|
+
"fd0a274c0e5f9a21565cd9d3dd749b61f96b7aa1e20a93aa1ba4029518f2e5c0",
|
|
226
|
+
"fdb8a068947befafba9952162645dc2fecaeb400e64584829ed5e9b2fbe21a7f"
|
|
227
|
+
]
|
|
228
|
+
},
|
|
229
|
+
{
|
|
230
|
+
"requirement": "cryptography==50.0.1 ; sys_platform == 'linux'",
|
|
231
|
+
"sha256": [
|
|
232
|
+
"01f41478cf33fc605a6a089cd56d28b45c6c0b45a1928b61797f2621a04bac71",
|
|
233
|
+
"05ba322c4da95b262a212c345af888ef2c37c88c0509756ea00a0e6d68850f23",
|
|
234
|
+
"16c5ecd954b3330ebfb6605eca4fd952da8bef376551d5cc264534e3770a9ee6",
|
|
235
|
+
"2a93d05e34d5f67fba6f891fe85d929999baa7195e853923ea6d7576c9e68c5e",
|
|
236
|
+
"2b34d76a652ea2b6faf777c35df230c5637842cd904e04f16230c3f9f03e4361",
|
|
237
|
+
"2ebbfb0f1fed745e91796e3e1080a1440423fdae8ece1b995a1d80883a409054",
|
|
238
|
+
"330fbb252391c596f1ae42c5754449dc924e6ad012dca8efe0d703f9f2d12ec6",
|
|
239
|
+
"359e62deae718bce96170e223fdcb6357e4fbd3bb7a3a75f4430763532560e49",
|
|
240
|
+
"407fe2b6db00939c05c0e945e9914238f2f0a430974839429dafc82b1ee6bee5",
|
|
241
|
+
"42be3bb70596b3abe4ac097b75be223e8b3ab614a0e5de068e3dcc54d71d6149",
|
|
242
|
+
"4c4188f7c0cf655be5c06342b817ed0f9595b69ffa2b12026e5353eed29dea88",
|
|
243
|
+
"51593d180cf6d179bde5c5d065bed81386b1f381656ae7d042b7ffc87a9895ad",
|
|
244
|
+
"51afcfceb15597cf2635068e4ac9a56b2abde622edde17f37d85fd7b5306497a",
|
|
245
|
+
"53e279950892dc102c6b4e52af03ae5ea92fac572a1ddab78ca73a997f62b69f",
|
|
246
|
+
"5dd9bda1c12b4162f6ff568eeb5e0ff956c28d14406e875cfe8a63a2d414ff20",
|
|
247
|
+
"5fe002589592ed749ce77fe0695fcbd3500dd61d7d6db5858a7544c612fa8e45",
|
|
248
|
+
"5fe939deeb161024a6be98229c953b6591fef1f41214497a78fe793a244c017f",
|
|
249
|
+
"76de83fbd91ac49c0feaaa983d0748fd7a53176afac5fb3bf7478d244f0eb527",
|
|
250
|
+
"79bf008d1f9af6071c797ad133e39915dfee7614f18f18f4db9072eb715064a3",
|
|
251
|
+
"804728ce710890870f3aaa344b2e161172d258d768ac139d02cfd9092d0d94e6",
|
|
252
|
+
"8921d58f426793c5f1b47f0b59575780de9a095214958d0eb37d909593db8367",
|
|
253
|
+
"8df2de9102026855887e4587084f6eabd80ed0f345b8ad8a7ac27ab9bf4723e0",
|
|
254
|
+
"9dde0a357190eb3b1da1bb9ab750e9c85cba82ca5977aa0836cbb94e92611239",
|
|
255
|
+
"9ebcdd5519be9b652a46f507817a74591774fc3d6923ac364e4dfa64e36b291b",
|
|
256
|
+
"a0b1a59e3a089064a0ec309e9428c8e3ae4e161419d20ac33600767e83fc658a",
|
|
257
|
+
"a255449073358275b64b67d3f595f268bbef70e72b6edb65e0c70c735bf739c9",
|
|
258
|
+
"a8f40ea47330e71b594a7e246898f93177c259490c63183dbaf9e571d71ed9a5",
|
|
259
|
+
"ac02b07824d4d1001bd4367599f839c19cb171924c796e52c23508ac14c2c0cc",
|
|
260
|
+
"be224a65493ec5b74a158ff22a5522ce4a5ca1e543c647a3a4730d4a09e5f959",
|
|
261
|
+
"cbf74a81765ee67413503ca6e26dcc4f6f5a519822436cc0a1b97aab6c1b8a17",
|
|
262
|
+
"d63ae8f6481fec907ac0f588eee8a90aefde112c633131fe540e5711ddbb5a4e",
|
|
263
|
+
"e22dfed744bd4002e909464cb23d2f0b05c6f3113a79ef2e9864a53db737c733",
|
|
264
|
+
"e2ca8fd1b6b4b82a1c4cb02841d0837e3c12336c2e24b520ab8ab3b969733d8f",
|
|
265
|
+
"e74591e283fe6eb956416c929eb58262a719fe0311fd9054c62c3350ed8760d8",
|
|
266
|
+
"fb4b9672d389c738b175c4166e78310f8a70358886aacd9173ee03a85ffdc671",
|
|
267
|
+
"fc3ed7ebd2a8c96f5b166de0ab9b624996bef3b07bbeb19364dfb78222c22c80",
|
|
268
|
+
"fd3718b960d0b5dd213cdf03f3bcb7000e69dda0de8b956061947ff6bcff5558",
|
|
269
|
+
"ff838d62ec1bfce4f9ba7fa16f4a7b554cd8d0c299e6be37502161a660c84eef"
|
|
270
|
+
]
|
|
271
|
+
},
|
|
272
|
+
{
|
|
273
|
+
"requirement": "idna==3.20",
|
|
274
|
+
"sha256": [
|
|
275
|
+
"a7db850025b95ded1eae8a46181a1a6c56c92c96f0e2b005d9ff8dc0210cab44",
|
|
276
|
+
"ab7ae7122974553370f0bdb919e1a960b2cd1bc1ef0276416d896db81c14582c"
|
|
277
|
+
]
|
|
278
|
+
},
|
|
279
|
+
{
|
|
280
|
+
"requirement": "importlib-metadata==9.0.1 ; python_full_version < '3.12'",
|
|
281
|
+
"sha256": [
|
|
282
|
+
"ab830580bc0ef3db61ce8fae716389e5462b67e033018bab6d8f80ef17172f99",
|
|
283
|
+
"bba5600596a7e21f3eef53281cf28d6a5195634d2f2b78ff9501a3272c6eaab0"
|
|
284
|
+
]
|
|
285
|
+
},
|
|
286
|
+
{
|
|
287
|
+
"requirement": "jaraco-classes==3.4.0",
|
|
288
|
+
"sha256": [
|
|
289
|
+
"47a024b51d0239c0dd8c8540c6c7f484be3b8fcf0b2d85c13825780d3b3f3acd",
|
|
290
|
+
"f662826b6bed8cace05e7ff873ce0f9283b5c924470fe664fff1c2f00f581790"
|
|
291
|
+
]
|
|
292
|
+
},
|
|
293
|
+
{
|
|
294
|
+
"requirement": "jaraco-context==6.1.2",
|
|
295
|
+
"sha256": [
|
|
296
|
+
"bf8150b79a2d5d91ae48629d8b427a8f7ba0e1097dd6202a9059f29a36379535",
|
|
297
|
+
"f1a6c9d391e661cc5b8d39861ff077a7dc24dc23833ccee564b234b81c82dfe3"
|
|
298
|
+
]
|
|
299
|
+
},
|
|
300
|
+
{
|
|
301
|
+
"requirement": "jaraco-functools==4.6.0",
|
|
302
|
+
"sha256": [
|
|
303
|
+
"880c577ec9720b3a052d5bc611fb9f2269b3d87902ef42440df443b88e443280",
|
|
304
|
+
"99e3dc0060c5cbe8fcd1cdb36258e2a65ca40f1566b2033b12abb1bb44dd3c30"
|
|
305
|
+
]
|
|
306
|
+
},
|
|
307
|
+
{
|
|
308
|
+
"requirement": "jeepney==0.9.0 ; sys_platform == 'linux'",
|
|
309
|
+
"sha256": [
|
|
310
|
+
"97e5714520c16fc0a45695e5365a2e11b81ea79bba796e26f9f1d178cb182683",
|
|
311
|
+
"cf0e9e845622b81e4a28df94c40345400256ec608d0e55bb8a3feaa9163f5732"
|
|
312
|
+
]
|
|
313
|
+
},
|
|
314
|
+
{
|
|
315
|
+
"requirement": "keyring==25.7.0",
|
|
316
|
+
"sha256": [
|
|
317
|
+
"be4a0b195f149690c166e850609a477c532ddbfbaed96a404d4e43f8d5e2689f",
|
|
318
|
+
"fe01bd85eb3f8fb3dd0405defdeac9a5b4f6f0439edbb3149577f244a2e8245b"
|
|
319
|
+
]
|
|
320
|
+
},
|
|
321
|
+
{
|
|
322
|
+
"requirement": "more-itertools==11.1.0",
|
|
323
|
+
"sha256": [
|
|
324
|
+
"48e8f4d9e7e5878571ecf6f2b4e57634f93cd474cc8cfbd2376f2d11b396e30d",
|
|
325
|
+
"4b65538ae22f6fed0ce4874efd317463a7489796a0939fa66824dd542125a192"
|
|
326
|
+
]
|
|
327
|
+
},
|
|
328
|
+
{
|
|
329
|
+
"requirement": "pycparser==3.0 ; implementation_name != 'PyPy' and platform_python_implementation != 'PyPy' and sys_platform == 'linux'",
|
|
330
|
+
"sha256": [
|
|
331
|
+
"600f49d217304a5902ac3c37e1281c9fe94e4d0489de643a9504c5cdfdfc6b29",
|
|
332
|
+
"b727414169a36b7d524c1c3e31839a521725078d7b2ff038656844266160a992"
|
|
333
|
+
]
|
|
334
|
+
},
|
|
335
|
+
{
|
|
336
|
+
"requirement": "pywin32-ctypes==0.2.3 ; sys_platform == 'win32'",
|
|
337
|
+
"sha256": [
|
|
338
|
+
"8a1513379d709975552d202d942d9837758905c8d01eb82b8bcc30918929e7b8",
|
|
339
|
+
"d162dc04946d704503b2edc4d55f3dba5c1d539ead017afa00142c38b9885755"
|
|
340
|
+
]
|
|
341
|
+
},
|
|
342
|
+
{
|
|
343
|
+
"requirement": "requests==2.34.2",
|
|
344
|
+
"sha256": [
|
|
345
|
+
"2a0d60c172f83ac6ab31e4554906c0f3b3588d37b5cb939b1c061f4907e278e0",
|
|
346
|
+
"f288924cae4e29463698d6d60bc6a4da69c89185ad1e0bcc4104f584e960b9ed"
|
|
347
|
+
]
|
|
348
|
+
},
|
|
349
|
+
{
|
|
350
|
+
"requirement": "secretstorage==3.5.0 ; sys_platform == 'linux'",
|
|
351
|
+
"sha256": [
|
|
352
|
+
"0ce65888c0725fcb2c5bc0fdb8e5438eece02c523557ea40ce0703c266248137",
|
|
353
|
+
"f04b8e4689cbce351744d5537bf6b1329c6fc68f91fa666f60a380edddcd11be"
|
|
354
|
+
]
|
|
355
|
+
},
|
|
356
|
+
{
|
|
357
|
+
"requirement": "urllib3==2.8.0",
|
|
358
|
+
"sha256": [
|
|
359
|
+
"0cf3cae568d36aa9576b28dfb35f11328f1cb974ca7647d9475ebb86c75ac6e3",
|
|
360
|
+
"63bf2ead4c879426ebf22ef2a781eeb4aa3b4ae798a0435506f8687fd5bb9b63"
|
|
361
|
+
]
|
|
362
|
+
},
|
|
363
|
+
{
|
|
364
|
+
"requirement": "zipp==4.1.0 ; python_full_version < '3.12'",
|
|
365
|
+
"sha256": [
|
|
366
|
+
"25ad4e16390cd314347dd8f1de67a2ac538ae658ed4ab9db16029c07c188e97f",
|
|
367
|
+
"4cb57381f544315db7688e976e922a2b18cdb513d21cc194eb42232ba2a3e602"
|
|
368
|
+
]
|
|
369
|
+
}
|
|
370
|
+
]
|
|
371
|
+
}
|
nexscope_cli/doctor.py
ADDED
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
# Copyright 2026 Nexscope
|
|
2
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
"""Local diagnostics. Never connect, initialize a keyring or read stored credentials."""
|
|
4
|
+
import hashlib
|
|
5
|
+
from importlib import metadata
|
|
6
|
+
import json
|
|
7
|
+
import os
|
|
8
|
+
from pathlib import Path
|
|
9
|
+
import re
|
|
10
|
+
import shutil
|
|
11
|
+
import sys
|
|
12
|
+
import tempfile
|
|
13
|
+
|
|
14
|
+
from . import __version__
|
|
15
|
+
from .core.auth import DEFAULT_ORIGIN, origin
|
|
16
|
+
from .core.errors import Failure
|
|
17
|
+
|
|
18
|
+
PROFILES = ('offline', 'independent', 'plugin')
|
|
19
|
+
DEPENDENCIES = {'keyring': (25, 26), 'requests': (2, 3), 'jmespath': (1, 2),
|
|
20
|
+
'qrcode': (8, 9), 'oss2': (2, 3)}
|
|
21
|
+
MINIMUMS = {'keyring': (25,), 'requests': (2, 32), 'jmespath': (1,),
|
|
22
|
+
'qrcode': (8,), 'oss2': (2, 19)}
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def dependency_names():
|
|
26
|
+
profile = json.loads(Path(__file__).with_name('catalog.json').read_text(encoding='utf-8')).get('distributionProfile', 'full')
|
|
27
|
+
if profile not in ('data-only', 'full'):
|
|
28
|
+
raise ValueError('Unknown distribution profile.')
|
|
29
|
+
return ('keyring', 'requests') if profile == 'data-only' else tuple(DEPENDENCIES)
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
def resources(root):
|
|
33
|
+
"""Check installed bytes, including the resources needed for free reports."""
|
|
34
|
+
catalog = json.loads((root / 'catalog.json').read_text(encoding='utf-8'))
|
|
35
|
+
count = 0
|
|
36
|
+
for name, entry in catalog['skills'].items():
|
|
37
|
+
for relative, digest in entry['files'].items():
|
|
38
|
+
file = (root / 'skills' / name / relative).resolve()
|
|
39
|
+
if not file.is_relative_to((root / 'skills').resolve()):
|
|
40
|
+
raise ValueError('Invalid resource path')
|
|
41
|
+
if hashlib.sha256(file.read_bytes()).hexdigest() != digest:
|
|
42
|
+
raise ValueError('Resource digest mismatch')
|
|
43
|
+
count += 1
|
|
44
|
+
for name in ('fields.json', 'products.schema.json', 'products-template.csv',
|
|
45
|
+
'products-sample.csv', 'products-sample.json', 'report.html', 'mock-products.json'):
|
|
46
|
+
data = (root / 'resources' / name).read_bytes()
|
|
47
|
+
if not data:
|
|
48
|
+
raise ValueError('Empty report resource')
|
|
49
|
+
if name.endswith('.json'):
|
|
50
|
+
json.loads(data)
|
|
51
|
+
return count
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
def diagnose(profile='offline', output_dir=None, api_base=None):
|
|
55
|
+
if profile not in PROFILES:
|
|
56
|
+
raise ValueError('Unknown diagnostic profile.')
|
|
57
|
+
checks = []
|
|
58
|
+
|
|
59
|
+
def check(name, status, detail, action=None):
|
|
60
|
+
checks.append({'name': name, 'status': status, 'detail': detail, 'action': action})
|
|
61
|
+
|
|
62
|
+
check('python', 'PASS' if sys.version_info >= (3, 11) else 'FAIL', '.'.join(map(str, sys.version_info[:3])),
|
|
63
|
+
'Use Python 3.11 or newer.' if sys.version_info < (3, 11) else None)
|
|
64
|
+
try:
|
|
65
|
+
installed = metadata.version('nexscope-cli')
|
|
66
|
+
check('package-version', 'PASS' if installed == __version__ else 'FAIL',
|
|
67
|
+
'Installed metadata matches loaded code.' if installed == __version__ else 'Installed metadata differs from loaded code.',
|
|
68
|
+
None if installed == __version__ else 'Reinstall the paired wheel in this Python environment.')
|
|
69
|
+
except metadata.PackageNotFoundError:
|
|
70
|
+
check('package-version', 'WARN', 'No installed distribution metadata.', 'Install the paired wheel before installation acceptance.')
|
|
71
|
+
try:
|
|
72
|
+
count = resources(Path(__file__).parent)
|
|
73
|
+
check('resources', 'PASS', {'hashedSkillFiles': count, 'reportResources': 7})
|
|
74
|
+
except Exception:
|
|
75
|
+
check('resources', 'FAIL', 'Required resources are missing, invalid or have a digest mismatch.', 'Reinstall the verified wheel; do not disable integrity checks.')
|
|
76
|
+
if profile == 'plugin':
|
|
77
|
+
for name in dependency_names():
|
|
78
|
+
_, upper = DEPENDENCIES[name]
|
|
79
|
+
try:
|
|
80
|
+
raw = metadata.version(name)
|
|
81
|
+
# No dependency import: importing keyring can initialize user configuration.
|
|
82
|
+
match = re.fullmatch(r'\d+(?:\.\d+)*', raw)
|
|
83
|
+
version = tuple(map(int, raw.split('.'))) if match else ()
|
|
84
|
+
valid = bool(version) and MINIMUMS[name] <= version < (upper,)
|
|
85
|
+
check('dependency:' + name, 'PASS' if valid else 'FAIL', 'Compatible version installed.' if valid else 'Version outside the supported stable range.',
|
|
86
|
+
None if valid else 'Install the hash-pinned dependency profile paired with this wheel.')
|
|
87
|
+
except metadata.PackageNotFoundError:
|
|
88
|
+
check('dependency:' + name, 'FAIL', 'Dependency is not installed.', 'Install the hash-pinned dependency profile paired with this wheel.')
|
|
89
|
+
check('uv', 'PASS' if shutil.which('uv') else 'WARN',
|
|
90
|
+
'Installer found on PATH.' if shutil.which('uv') else 'Optional installer not found on PATH.',
|
|
91
|
+
'Use the documented installer before plugin setup; no installer is run by doctor.')
|
|
92
|
+
check('credential-store', 'NOT_CHECKED', 'No keyring initialization, access or credential validation.',
|
|
93
|
+
'Validate the OS credential store separately in an authorized connection test.')
|
|
94
|
+
try:
|
|
95
|
+
origin(api_base if api_base is not None else DEFAULT_ORIGIN)
|
|
96
|
+
check('api-origin', 'PASS', 'Origin syntax accepted; reachability not tested.')
|
|
97
|
+
except Failure:
|
|
98
|
+
check('api-origin', 'FAIL', 'Invalid API origin.', 'Use an HTTPS origin without credentials, path, query or fragment.')
|
|
99
|
+
elif profile == 'independent':
|
|
100
|
+
key = os.environ.get('NEXSCOPE_API_KEY', '').strip()
|
|
101
|
+
base = os.environ.get('NEXSCOPE_PROXY_BASE', '').strip()
|
|
102
|
+
valid_key = bool(key) and not any(c.isspace() or ord(c) < 32 for c in key)
|
|
103
|
+
check('environment-key', 'PASS' if valid_key else 'FAIL',
|
|
104
|
+
'Key is configured; server validity not tested.' if valid_key else 'Key is missing or malformed.',
|
|
105
|
+
None if valid_key else 'Configure NEXSCOPE_API_KEY privately; never paste it into diagnostic output.')
|
|
106
|
+
try:
|
|
107
|
+
if api_base is not None:
|
|
108
|
+
raise Failure('Independent mode uses its environment origin.')
|
|
109
|
+
origin(base)
|
|
110
|
+
check('environment-origin', 'PASS', 'Origin syntax accepted; value omitted.')
|
|
111
|
+
except Failure:
|
|
112
|
+
check('environment-origin', 'FAIL', 'Environment origin missing/invalid or --api-base supplied.',
|
|
113
|
+
'Configure NEXSCOPE_PROXY_BASE as an HTTPS origin; omit --api-base.')
|
|
114
|
+
if output_dir is not None:
|
|
115
|
+
try:
|
|
116
|
+
folder = Path(output_dir)
|
|
117
|
+
if not folder.is_dir():
|
|
118
|
+
raise OSError('Directory must already exist.')
|
|
119
|
+
with tempfile.TemporaryDirectory(prefix='.nexscope-doctor-', dir=folder) as probe:
|
|
120
|
+
target = Path(probe) / 'probe'
|
|
121
|
+
target.write_bytes(b'nexscope-doctor')
|
|
122
|
+
if target.read_bytes() != b'nexscope-doctor':
|
|
123
|
+
raise OSError('Readback mismatch.')
|
|
124
|
+
check('output-directory', 'PASS', 'Created, read and removed only a temporary probe directory.')
|
|
125
|
+
except Exception:
|
|
126
|
+
check('output-directory', 'FAIL', 'Output directory probe failed; path and exception details omitted.',
|
|
127
|
+
'Choose an existing writable directory; check disk space and path length.')
|
|
128
|
+
else:
|
|
129
|
+
check('output-directory', 'NOT_CHECKED', 'No files written.', 'Optionally pass --check-output with an existing directory.')
|
|
130
|
+
failed = any(c['status'] == 'FAIL' for c in checks)
|
|
131
|
+
warnings = any(c['status'] == 'WARN' for c in checks)
|
|
132
|
+
return {'schemaVersion': 1, 'status': 'FAILED' if failed else 'WARNING' if warnings else 'READY_LOCAL',
|
|
133
|
+
'version': __version__, 'profile': profile, 'os': sys.platform, 'checks': checks,
|
|
134
|
+
'network': 'NOT_RUN', 'storedCredentials': 'NOT_READ', 'telemetry': 'NONE',
|
|
135
|
+
'environmentValues': 'syntax checked without output' if profile == 'independent' else 'NOT_READ',
|
|
136
|
+
'scope': 'Local prerequisites only; not authenticated, live-service or assistant-host acceptance.'}
|