tiny-superfast-agentic-MLM-6.5m-v1: 6.44M-param NumPy command parser, sample executor, benchmarks
Browse files- LICENSE +202 -0
- NOTICE +8 -0
- README.md +322 -0
- eval/BENCHMARK.md +138 -0
- eval/bench_device.py +126 -0
- eval/bench_results/laptop_i7-1360P.json +258 -0
- eval/bench_results/laptop_i7-1360P_threads.json +26 -0
- eval/bench_results/rpi5_16gb.json +278 -0
- eval/bench_results/rpi5_16gb_threads.json +26 -0
- eval/bench_run_all.sh +12 -0
- eval/build_curated.py +24 -0
- eval/curated_prompts.jsonl +371 -0
- eval/make_report.py +62 -0
- eval/model_eval_summary.json +747 -0
- eval/smoke_test.py +94 -0
- eval/wifi_holdout.jsonl +461 -0
- executor/commands.py +346 -0
- executor/executor.py +304 -0
- executor/tables.py +333 -0
- model/catalog.json +5539 -0
- model/catalog.py +23 -0
- model/config.json +11 -0
- model/grammar.py +100 -0
- model/model.npz +3 -0
- model/normalize.py +19 -0
- model/runtime.py +75 -0
- model/snap.py +54 -0
- model/tokenizer.py +87 -0
- pytorch/model.pt +3 -0
- pytorch/model.py +99 -0
- quickstart.py +29 -0
- requirements.txt +4 -0
- run.bat +16 -0
- run.sh +14 -0
- tools/install_model.py +49 -0
- ui/app.py +46 -0
- ui/cli.py +19 -0
- ui/prompts.json +2306 -0
- ui/static/index.html +56 -0
LICENSE
ADDED
|
@@ -0,0 +1,202 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
|
| 2 |
+
Apache License
|
| 3 |
+
Version 2.0, January 2004
|
| 4 |
+
http://www.apache.org/licenses/
|
| 5 |
+
|
| 6 |
+
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
| 7 |
+
|
| 8 |
+
1. Definitions.
|
| 9 |
+
|
| 10 |
+
"License" shall mean the terms and conditions for use, reproduction,
|
| 11 |
+
and distribution as defined by Sections 1 through 9 of this document.
|
| 12 |
+
|
| 13 |
+
"Licensor" shall mean the copyright owner or entity authorized by
|
| 14 |
+
the copyright owner that is granting the License.
|
| 15 |
+
|
| 16 |
+
"Legal Entity" shall mean the union of the acting entity and all
|
| 17 |
+
other entities that control, are controlled by, or are under common
|
| 18 |
+
control with that entity. For the purposes of this definition,
|
| 19 |
+
"control" means (i) the power, direct or indirect, to cause the
|
| 20 |
+
direction or management of such entity, whether by contract or
|
| 21 |
+
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
| 22 |
+
outstanding shares, or (iii) beneficial ownership of such entity.
|
| 23 |
+
|
| 24 |
+
"You" (or "Your") shall mean an individual or Legal Entity
|
| 25 |
+
exercising permissions granted by this License.
|
| 26 |
+
|
| 27 |
+
"Source" form shall mean the preferred form for making modifications,
|
| 28 |
+
including but not limited to software source code, documentation
|
| 29 |
+
source, and configuration files.
|
| 30 |
+
|
| 31 |
+
"Object" form shall mean any form resulting from mechanical
|
| 32 |
+
transformation or translation of a Source form, including but
|
| 33 |
+
not limited to compiled object code, generated documentation,
|
| 34 |
+
and conversions to other media types.
|
| 35 |
+
|
| 36 |
+
"Work" shall mean the work of authorship, whether in Source or
|
| 37 |
+
Object form, made available under the License, as indicated by a
|
| 38 |
+
copyright notice that is included in or attached to the work
|
| 39 |
+
(an example is provided in the Appendix below).
|
| 40 |
+
|
| 41 |
+
"Derivative Works" shall mean any work, whether in Source or Object
|
| 42 |
+
form, that is based on (or derived from) the Work and for which the
|
| 43 |
+
editorial revisions, annotations, elaborations, or other modifications
|
| 44 |
+
represent, as a whole, an original work of authorship. For the purposes
|
| 45 |
+
of this License, Derivative Works shall not include works that remain
|
| 46 |
+
separable from, or merely link (or bind by name) to the interfaces of,
|
| 47 |
+
the Work and Derivative Works thereof.
|
| 48 |
+
|
| 49 |
+
"Contribution" shall mean any work of authorship, including
|
| 50 |
+
the original version of the Work and any modifications or additions
|
| 51 |
+
to that Work or Derivative Works thereof, that is intentionally
|
| 52 |
+
submitted to Licensor for inclusion in the Work by the copyright owner
|
| 53 |
+
or by an individual or Legal Entity authorized to submit on behalf of
|
| 54 |
+
the copyright owner. For the purposes of this definition, "submitted"
|
| 55 |
+
means any form of electronic, verbal, or written communication sent
|
| 56 |
+
to the Licensor or its representatives, including but not limited to
|
| 57 |
+
communication on electronic mailing lists, source code control systems,
|
| 58 |
+
and issue tracking systems that are managed by, or on behalf of, the
|
| 59 |
+
Licensor for the purpose of discussing and improving the Work, but
|
| 60 |
+
excluding communication that is conspicuously marked or otherwise
|
| 61 |
+
designated in writing by the copyright owner as "Not a Contribution."
|
| 62 |
+
|
| 63 |
+
"Contributor" shall mean Licensor and any individual or Legal Entity
|
| 64 |
+
on behalf of whom a Contribution has been received by Licensor and
|
| 65 |
+
subsequently incorporated within the Work.
|
| 66 |
+
|
| 67 |
+
2. Grant of Copyright License. Subject to the terms and conditions of
|
| 68 |
+
this License, each Contributor hereby grants to You a perpetual,
|
| 69 |
+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
| 70 |
+
copyright license to reproduce, prepare Derivative Works of,
|
| 71 |
+
publicly display, publicly perform, sublicense, and distribute the
|
| 72 |
+
Work and such Derivative Works in Source or Object form.
|
| 73 |
+
|
| 74 |
+
3. Grant of Patent License. Subject to the terms and conditions of
|
| 75 |
+
this License, each Contributor hereby grants to You a perpetual,
|
| 76 |
+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
| 77 |
+
(except as stated in this section) patent license to make, have made,
|
| 78 |
+
use, offer to sell, sell, import, and otherwise transfer the Work,
|
| 79 |
+
where such license applies only to those patent claims licensable
|
| 80 |
+
by such Contributor that are necessarily infringed by their
|
| 81 |
+
Contribution(s) alone or by combination of their Contribution(s)
|
| 82 |
+
with the Work to which such Contribution(s) was submitted. If You
|
| 83 |
+
institute patent litigation against any entity (including a
|
| 84 |
+
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
| 85 |
+
or a Contribution incorporated within the Work constitutes direct
|
| 86 |
+
or contributory patent infringement, then any patent licenses
|
| 87 |
+
granted to You under this License for that Work shall terminate
|
| 88 |
+
as of the date such litigation is filed.
|
| 89 |
+
|
| 90 |
+
4. Redistribution. You may reproduce and distribute copies of the
|
| 91 |
+
Work or Derivative Works thereof in any medium, with or without
|
| 92 |
+
modifications, and in Source or Object form, provided that You
|
| 93 |
+
meet the following conditions:
|
| 94 |
+
|
| 95 |
+
(a) You must give any other recipients of the Work or
|
| 96 |
+
Derivative Works a copy of this License; and
|
| 97 |
+
|
| 98 |
+
(b) You must cause any modified files to carry prominent notices
|
| 99 |
+
stating that You changed the files; and
|
| 100 |
+
|
| 101 |
+
(c) You must retain, in the Source form of any Derivative Works
|
| 102 |
+
that You distribute, all copyright, patent, trademark, and
|
| 103 |
+
attribution notices from the Source form of the Work,
|
| 104 |
+
excluding those notices that do not pertain to any part of
|
| 105 |
+
the Derivative Works; and
|
| 106 |
+
|
| 107 |
+
(d) If the Work includes a "NOTICE" text file as part of its
|
| 108 |
+
distribution, then any Derivative Works that You distribute must
|
| 109 |
+
include a readable copy of the attribution notices contained
|
| 110 |
+
within such NOTICE file, excluding those notices that do not
|
| 111 |
+
pertain to any part of the Derivative Works, in at least one
|
| 112 |
+
of the following places: within a NOTICE text file distributed
|
| 113 |
+
as part of the Derivative Works; within the Source form or
|
| 114 |
+
documentation, if provided along with the Derivative Works; or,
|
| 115 |
+
within a display generated by the Derivative Works, if and
|
| 116 |
+
wherever such third-party notices normally appear. The contents
|
| 117 |
+
of the NOTICE file are for informational purposes only and
|
| 118 |
+
do not modify the License. You may add Your own attribution
|
| 119 |
+
notices within Derivative Works that You distribute, alongside
|
| 120 |
+
or as an addendum to the NOTICE text from the Work, provided
|
| 121 |
+
that such additional attribution notices cannot be construed
|
| 122 |
+
as modifying the License.
|
| 123 |
+
|
| 124 |
+
You may add Your own copyright statement to Your modifications and
|
| 125 |
+
may provide additional or different license terms and conditions
|
| 126 |
+
for use, reproduction, or distribution of Your modifications, or
|
| 127 |
+
for any such Derivative Works as a whole, provided Your use,
|
| 128 |
+
reproduction, and distribution of the Work otherwise complies with
|
| 129 |
+
the conditions stated in this License.
|
| 130 |
+
|
| 131 |
+
5. Submission of Contributions. Unless You explicitly state otherwise,
|
| 132 |
+
any Contribution intentionally submitted for inclusion in the Work
|
| 133 |
+
by You to the Licensor shall be under the terms and conditions of
|
| 134 |
+
this License, without any additional terms or conditions.
|
| 135 |
+
Notwithstanding the above, nothing herein shall supersede or modify
|
| 136 |
+
the terms of any separate license agreement you may have executed
|
| 137 |
+
with Licensor regarding such Contributions.
|
| 138 |
+
|
| 139 |
+
6. Trademarks. This License does not grant permission to use the trade
|
| 140 |
+
names, trademarks, service marks, or product names of the Licensor,
|
| 141 |
+
except as required for reasonable and customary use in describing the
|
| 142 |
+
origin of the Work and reproducing the content of the NOTICE file.
|
| 143 |
+
|
| 144 |
+
7. Disclaimer of Warranty. Unless required by applicable law or
|
| 145 |
+
agreed to in writing, Licensor provides the Work (and each
|
| 146 |
+
Contributor provides its Contributions) on an "AS IS" BASIS,
|
| 147 |
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
| 148 |
+
implied, including, without limitation, any warranties or conditions
|
| 149 |
+
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
| 150 |
+
PARTICULAR PURPOSE. You are solely responsible for determining the
|
| 151 |
+
appropriateness of using or redistributing the Work and assume any
|
| 152 |
+
risks associated with Your exercise of permissions under this License.
|
| 153 |
+
|
| 154 |
+
8. Limitation of Liability. In no event and under no legal theory,
|
| 155 |
+
whether in tort (including negligence), contract, or otherwise,
|
| 156 |
+
unless required by applicable law (such as deliberate and grossly
|
| 157 |
+
negligent acts) or agreed to in writing, shall any Contributor be
|
| 158 |
+
liable to You for damages, including any direct, indirect, special,
|
| 159 |
+
incidental, or consequential damages of any character arising as a
|
| 160 |
+
result of this License or out of the use or inability to use the
|
| 161 |
+
Work (including but not limited to damages for loss of goodwill,
|
| 162 |
+
work stoppage, computer failure or malfunction, or any and all
|
| 163 |
+
other commercial damages or losses), even if such Contributor
|
| 164 |
+
has been advised of the possibility of such damages.
|
| 165 |
+
|
| 166 |
+
9. Accepting Warranty or Additional Liability. While redistributing
|
| 167 |
+
the Work or Derivative Works thereof, You may choose to offer,
|
| 168 |
+
and charge a fee for, acceptance of support, warranty, indemnity,
|
| 169 |
+
or other liability obligations and/or rights consistent with this
|
| 170 |
+
License. However, in accepting such obligations, You may act only
|
| 171 |
+
on Your own behalf and on Your sole responsibility, not on behalf
|
| 172 |
+
of any other Contributor, and only if You agree to indemnify,
|
| 173 |
+
defend, and hold each Contributor harmless for any liability
|
| 174 |
+
incurred by, or claims asserted against, such Contributor by reason
|
| 175 |
+
of your accepting any such warranty or additional liability.
|
| 176 |
+
|
| 177 |
+
END OF TERMS AND CONDITIONS
|
| 178 |
+
|
| 179 |
+
APPENDIX: How to apply the Apache License to your work.
|
| 180 |
+
|
| 181 |
+
To apply the Apache License to your work, attach the following
|
| 182 |
+
boilerplate notice, with the fields enclosed by brackets "[]"
|
| 183 |
+
replaced with your own identifying information. (Don't include
|
| 184 |
+
the brackets!) The text should be enclosed in the appropriate
|
| 185 |
+
comment syntax for the file format. We also recommend that a
|
| 186 |
+
file or class name and description of purpose be included on the
|
| 187 |
+
same "printed page" as the copyright notice for easier
|
| 188 |
+
identification within third-party archives.
|
| 189 |
+
|
| 190 |
+
Copyright [yyyy] [name of copyright owner]
|
| 191 |
+
|
| 192 |
+
Licensed under the Apache License, Version 2.0 (the "License");
|
| 193 |
+
you may not use this file except in compliance with the License.
|
| 194 |
+
You may obtain a copy of the License at
|
| 195 |
+
|
| 196 |
+
http://www.apache.org/licenses/LICENSE-2.0
|
| 197 |
+
|
| 198 |
+
Unless required by applicable law or agreed to in writing, software
|
| 199 |
+
distributed under the License is distributed on an "AS IS" BASIS,
|
| 200 |
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
| 201 |
+
See the License for the specific language governing permissions and
|
| 202 |
+
limitations under the License.
|
NOTICE
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
tiny-superfast-agentic-MLM-6.5m-v1
|
| 2 |
+
Copyright (c) 2026 sraivante
|
| 3 |
+
|
| 4 |
+
Licensed under the Apache License, Version 2.0 (see LICENSE).
|
| 5 |
+
|
| 6 |
+
The model was trained from random initialisation (no pretrained base model) on a synthetic command dataset that is
|
| 7 |
+
not distributed with this repository.
|
| 8 |
+
The included executor is a sample for testing only and is not a fully developed product.
|
README.md
ADDED
|
@@ -0,0 +1,322 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
---
|
| 2 |
+
license: apache-2.0
|
| 3 |
+
language:
|
| 4 |
+
- en
|
| 5 |
+
- hi
|
| 6 |
+
pipeline_tag: text2text-generation
|
| 7 |
+
tags:
|
| 8 |
+
- function-calling
|
| 9 |
+
- tool-use
|
| 10 |
+
- agent
|
| 11 |
+
- intent-classification
|
| 12 |
+
- slot-filling
|
| 13 |
+
- seq2seq
|
| 14 |
+
- hinglish
|
| 15 |
+
- code-mixed
|
| 16 |
+
- voice-assistant
|
| 17 |
+
- raspberry-pi
|
| 18 |
+
- edge
|
| 19 |
+
- on-device
|
| 20 |
+
- cpu
|
| 21 |
+
- numpy
|
| 22 |
+
---
|
| 23 |
+
|
| 24 |
+
# tiny-superfast-agentic-MLM-6.5m-v1: a 6.4M-parameter voice-command parser for laptops and Raspberry Pi
|
| 25 |
+
|
| 26 |
+
**tiny-superfast-agentic-MLM-6.5m-v1** turns one short spoken or typed command into a structured command that a
|
| 27 |
+
program can execute. It understands English and Hinglish (Roman-script Hindi-English), with some Devanagari Hindi, and covers **371 actions**
|
| 28 |
+
(audio, display, Wi-Fi, apps, files, timers, power, network, services, Raspberry Pi GPIO/I2C and more), and runs on
|
| 29 |
+
a plain CPU with **NumPy only**: no GPU, no PyTorch and no internet needed at inference.
|
| 30 |
+
|
| 31 |
+
```text
|
| 32 |
+
ENGLISH "set the volume to 40" -> set_volume {"value": 40}
|
| 33 |
+
HINGLISH "volume 40 kar do" -> set_volume {"value": 40}
|
| 34 |
+
ENGLISH "connect to wifi Redmi Note 12 password hello@123" -> connect_wifi {"ssid": "Redmi Note 12", "password": "hello@123"}
|
| 35 |
+
HINGLISH "pwd Tiger@2025 daalo aur Hostel Wing C se jud jao" -> connect_wifi {"ssid": "Hostel Wing C", "password": "Tiger@2025"}
|
| 36 |
+
HINGLISH "10 min baad shutdown kar dena" -> shutdown {"amount": 10, "unit": "min"}
|
| 37 |
+
HINGLISH "board pin 11 pe led jalao" -> gpio_on {"pin": 11, "numbering": "board"}
|
| 38 |
+
HINDI "5 मिनट का टाइमर लगाओ" -> set_timer {"amount": 5, "unit": "min"}
|
| 39 |
+
```
|
| 40 |
+
|
| 41 |
+
| | |
|
| 42 |
+
|---|---|
|
| 43 |
+
| Parameters | **6,441,472** (≈6.4M; "6.5m" in the name is rounded up) |
|
| 44 |
+
| Model file | `model/model.npz`, 23.9 MB, float32. `pytorch/model.pt` is included for fine-tuning |
|
| 45 |
+
| Runs on | CPU only, fully offline: Windows, Linux, Raspberry Pi 5. Inference needs only `numpy` |
|
| 46 |
+
| Accuracy | **97.53% exact** on 6,611 held-out-template commands (`test_strict`); **99.10%** on validation; 100% on 461 unseen Wi-Fi phrasings |
|
| 47 |
+
| Speed | median **18 ms** per command on a laptop i7-1360P, **30 ms** on a Raspberry Pi 5 (10 min sustained load) |
|
| 48 |
+
| Load time | 0.13 s (laptop), 0.20 s (Raspberry Pi 5) |
|
| 49 |
+
| Bigger sibling | [tiny-agentic-home-robotic-for-edge-device-v10](https://huggingface.co/sraivante/tiny-agentic-home-robotic-for-edge-device-v10) (23.9M params, MiniLM-based) |
|
| 50 |
+
|
| 51 |
+
> **About the name.** "MLM" here means *micro language model*. It is **not** a masked language model like BERT:
|
| 52 |
+
> the architecture is a small Transformer encoder-decoder (seq2seq) that writes the command one token at a time.
|
| 53 |
+
|
| 54 |
+
> **Executor notice.** The model only *parses* commands; it never runs anything. The executor in this repository is a
|
| 55 |
+
> **sample for testing, not a finished product**. It gates every action by risk (safe / caution / critical) and asks
|
| 56 |
+
> for confirmation before anything risky. Use it on a test machine and read the command before you run it.
|
| 57 |
+
|
| 58 |
+
## Best use: a personal voice companion for small commands
|
| 59 |
+
|
| 60 |
+
The model is built to be the "understanding" step of a small, private, always-available assistant: you **speak** a
|
| 61 |
+
short command, and your computer or Raspberry Pi **does it**. It replaces a large LLM for common, well-defined device
|
| 62 |
+
commands, so the answer is instant (tens of milliseconds), private (nothing leaves the device) and free.
|
| 63 |
+
|
| 64 |
+
Attach any speech recognizer (ASR) in front of it and an executor behind it:
|
| 65 |
+
|
| 66 |
+
```mermaid
|
| 67 |
+
flowchart LR
|
| 68 |
+
U(["User speaks<br/>'volume 40 kar do'"]) --> A["ASR<br/>speech → text<br/>(Whisper, Vosk, ...)"]
|
| 69 |
+
A -->|"text"| M["<b>tiny-superfast-agentic-MLM-6.5m-v1</b><br/>text → structured command<br/>6.4M params · ~20–70 ms on CPU"]
|
| 70 |
+
M -->|"set_volume {value: 40}<br/>+ confidence"| E["Executor<br/>validate → risk gate → OS command"]
|
| 71 |
+
E --> O(["Output action<br/>volume set to 40%"])
|
| 72 |
+
E -. "clarify / unknown /<br/>low confidence" .-> U
|
| 73 |
+
```
|
| 74 |
+
|
| 75 |
+
If your viewer does not render Mermaid:
|
| 76 |
+
|
| 77 |
+
```text
|
| 78 |
+
user voice ==> [ ASR ] --text--> [ tiny-superfast-agentic-MLM-6.5m-v1 ] --command JSON--> [ executor ] ==> output action
|
| 79 |
+
|
|
| 80 |
+
ask the user again <---- clarify / unknown / low confidence
|
| 81 |
+
```
|
| 82 |
+
|
| 83 |
+
| Stage | What it does | Example |
|
| 84 |
+
|---|---|---|
|
| 85 |
+
| **1. ASR** (you bring it) | Turns speech into text. Any engine works: Whisper / faster-whisper, Vosk, a phone keyboard, or a chat box. | audio → `volume 40 kar do` |
|
| 86 |
+
| **2. This model** | Turns text into one action from the 371-action catalog, plus its typed arguments and a confidence score. | → `{"action": "set_volume", "value": 40}`, confidence 0.997 |
|
| 87 |
+
| **3. Executor** (sample included) | Checks the arguments, applies the risk gate, renders a whitelisted OS command for Windows or Raspberry Pi, and runs it or asks first. | → Pi: `wpctl set-volume @DEFAULT_AUDIO_SINK@ 40%` |
|
| 88 |
+
| **4. Output action** | The device acts, and the result can be read back to the user (TTS). | volume is now 40% |
|
| 89 |
+
|
| 90 |
+
A good agent pattern: execute only when confidence is high and the risk gate allows it, ask the user when the result
|
| 91 |
+
is `clarify`, and hand `unknown` or low-confidence text to a bigger model or back to the user.
|
| 92 |
+
|
| 93 |
+
### Minimal voice loop (example)
|
| 94 |
+
|
| 95 |
+
```python
|
| 96 |
+
# pip install numpy faster-whisper (ASR is your choice; this is one option)
|
| 97 |
+
import os; os.environ.setdefault("OPENBLAS_NUM_THREADS", "4") # "2" on a Raspberry Pi 5, see Speed
|
| 98 |
+
import sys; sys.path[:0] = ["model", "executor"]
|
| 99 |
+
from runtime import CommandModel
|
| 100 |
+
import executor as EX
|
| 101 |
+
from faster_whisper import WhisperModel
|
| 102 |
+
|
| 103 |
+
asr = WhisperModel("small", device="cpu", compute_type="int8")
|
| 104 |
+
parser = CommandModel("model")
|
| 105 |
+
|
| 106 |
+
def handle(wav_path):
|
| 107 |
+
text = " ".join(s.text for s in asr.transcribe(wav_path)[0]).strip() # 1. speech -> text
|
| 108 |
+
out = parser.predict(text); meta = out.pop("_meta") # 2. text -> command
|
| 109 |
+
plan = EX.plan(out, None, text) # 3. command -> gated OS command
|
| 110 |
+
if plan.action == "clarify" or meta["confidence"] < 0.8:
|
| 111 |
+
return f"Sorry, can you say that again? ({plan.note or text})"
|
| 112 |
+
ok, why = EX.gate(plan, allow_caution=False) # safe actions only in this demo
|
| 113 |
+
return EX.run(plan, out, dry_run=not ok) # 4. act (dry run if gated)
|
| 114 |
+
```
|
| 115 |
+
|
| 116 |
+
The ASR part of this snippet is an illustration. The model was trained on typed/synthetic text, not on real ASR
|
| 117 |
+
transcripts, so test it with your own ASR output (see Limitations).
|
| 118 |
+
|
| 119 |
+
## What it understands
|
| 120 |
+
|
| 121 |
+
Every example is shown in ENGLISH, then the same command in HINGLISH. The outputs, confidences and executor plans are
|
| 122 |
+
real outputs of this model and the included sample executor.
|
| 123 |
+
|
| 124 |
+
| Use case | Language | Command | Model output | Confidence | Risk | Raspberry Pi command |
|
| 125 |
+
|---|---|---|---|---|---|---|
|
| 126 |
+
| Audio | ENGLISH | `set the volume to 40` | `set_volume {"value": 40}` | 0.996 | safe | `wpctl set-volume … 40%` |
|
| 127 |
+
| Audio | HINGLISH | `volume 40 kar do` | `set_volume {"value": 40}` | 0.997 | safe | `wpctl set-volume … 40%` |
|
| 128 |
+
| Wi-Fi | ENGLISH | `connect to wifi Redmi Note 12 password hello@123` | `connect_wifi {"ssid": "Redmi Note 12", "password": "hello@123"}` | 1.000 | caution | `nmcli dev wifi connect 'Redmi Note 12' password hello@123` |
|
| 129 |
+
| Wi-Fi | HINGLISH | `Redmi Note 12 wifi se connect karo password hello@123` | same | 1.000 | caution | same |
|
| 130 |
+
| Wi-Fi, password first | ENGLISH | `password Tiger@2025 then join Hostel Wing C` | `connect_wifi {"ssid": "Hostel Wing C", "password": "Tiger@2025"}` | 1.000 | caution | `nmcli dev wifi connect 'Hostel Wing C' …` |
|
| 131 |
+
| Wi-Fi, password first | HINGLISH | `pwd Tiger@2025 daalo aur Hostel Wing C se jud jao` | same | 1.000 | caution | same |
|
| 132 |
+
| Apps | ENGLISH | `open chrome` | `open_app {"app": "chrome"}` | 0.990 | caution | `chromium-browser &` |
|
| 133 |
+
| Apps | HINGLISH | `chrome kholo` | `open_app {"app": "chrome"}` | 0.986 | caution | `chromium-browser &` |
|
| 134 |
+
| Timers | ENGLISH | `set a timer for 5 minutes` | `set_timer {"amount": 5, "unit": "min"}` | 0.998 | safe | built-in timer |
|
| 135 |
+
| Timers | HINGLISH | `5 minute ka timer lagao` | `set_timer {"amount": 5, "unit": "min"}` | 0.998 | safe | built-in timer |
|
| 136 |
+
| Power | ENGLISH | `shut down in 10 minutes` | `shutdown {"amount": 10, "unit": "min"}` | 0.998 | critical | `sudo shutdown -h +10` |
|
| 137 |
+
| Power | HINGLISH | `10 min baad shutdown kar dena` | `shutdown {"amount": 10, "unit": "min"}` | 0.998 | critical | `sudo shutdown -h +10` |
|
| 138 |
+
| Negation | ENGLISH | `don't shut down the laptop` | `cancel_shutdown {}` | 0.995 | caution | `shutdown -c` |
|
| 139 |
+
| Negation | HINGLISH | `shutdown mat karo` | `cancel_shutdown {}` | 0.995 | caution | `shutdown -c` |
|
| 140 |
+
| Pi GPIO | ENGLISH | `turn on board pin 11` | `gpio_on {"pin": 11, "numbering": "board"}` | 0.999 | critical | `sudo pinctrl set 17 op dh` |
|
| 141 |
+
| Pi GPIO | HINGLISH | `board pin 11 pe led jalao` | `gpio_on {"pin": 11, "numbering": "board"}` | 0.998 | critical | `sudo pinctrl set 17 op dh` |
|
| 142 |
+
| Pi GPIO, ambiguous pin | HINGLISH | `pin no 11 high karo` | `gpio_on {"pin": 11}` | 0.993 | → clarify | executor asks: *board pin 11 (= GPIO 17) or GPIO 11 (= board pin 23)?* |
|
| 143 |
+
| Diagnostics | ENGLISH | `what is the cpu temperature` | `get_temperature {}` | 0.995 | safe | `vcgencmd measure_temp` |
|
| 144 |
+
| Diagnostics | HINGLISH | `cpu ka temperature batao` | `get_temperature {}` | 0.996 | safe | `vcgencmd measure_temp` |
|
| 145 |
+
| Files | HINGLISH | `reports naam ka folder banao` | `create_folder {"path": "reports"}` | 0.999 | caution | `mkdir -p -- reports` |
|
| 146 |
+
| Out of scope | ENGLISH | `tell me a joke` | `unknown {}` | 0.993 | safe | nothing |
|
| 147 |
+
| Out of scope (miss) | HINGLISH | `kya haal hai bhai` | `recent_files {}` | **0.604** | safe | (low confidence: ask or hand off) |
|
| 148 |
+
|
| 149 |
+
The last row is a real miss: small talk went to a harmless action, but with low confidence. This is why the agent
|
| 150 |
+
should check the confidence before acting.
|
| 151 |
+
|
| 152 |
+
## Test results
|
| 153 |
+
|
| 154 |
+
### Accuracy
|
| 155 |
+
|
| 156 |
+
Held-out evaluation after training (raw model output, before the runtime "snap" repair). "Exact" means the action
|
| 157 |
+
and every argument match; "Action" means only the action matches.
|
| 158 |
+
|
| 159 |
+
| Set | n | Exact | Action | What it tests |
|
| 160 |
+
|---|---|---|---|---|
|
| 161 |
+
| validation | 10,413 | 99.10% | 99.29% | same templates as training, unseen rows |
|
| 162 |
+
| test | 10,618 | 98.37% | 98.52% | held-out templates |
|
| 163 |
+
| **test_strict** | **6,611** | **97.53%** | **97.70%** | held-out templates with no paraphrase sibling in training (the honest generalisation number) |
|
| 164 |
+
| curated | 371 | 99.46% | 99.73% | one held-out prompt per action |
|
| 165 |
+
| B_typo | 3,000 | 99.17% | 99.50% | typos |
|
| 166 |
+
| wifi_holdout | 461 | 100.00% | 100.00% | unseen Wi-Fi connect phrasings |
|
| 167 |
+
| gap11_holdout | 696 | 99.28% | 100.00% | unseen templates: password-first Wi-Fi, CPU clock vs usage, board↔BCM pins, fan vs mouse speed |
|
| 168 |
+
| A_challenge | 1,152 | 97.40% | 98.44% | external challenge set |
|
| 169 |
+
| B_golden_final | 384 | 97.40% | 97.40% | external golden set, including out-of-scope prompts |
|
| 170 |
+
| B_golden_dev | 383 | 95.04% | 95.82% | external golden set |
|
| 171 |
+
| A_practical-dev | 1,321 | 95.31% | 96.44% | external practical set |
|
| 172 |
+
| A_practical-holdout | 428 | 92.06% | 94.16% | external practical set; some misses are label-convention differences |
|
| 173 |
+
|
| 174 |
+
The same model was also run on the laptop and on the Raspberry Pi 5 (2,340 prompts, with the runtime snap). **Both
|
| 175 |
+
devices produce identical predictions: 97.82% exact, 98.46% action.**
|
| 176 |
+
|
| 177 |
+
### Speed and temperature
|
| 178 |
+
|
| 179 |
+
10 minutes of continuous single-stream inference on each device. Full per-pass and per-minute tables are in
|
| 180 |
+
[`eval/BENCHMARK.md`](eval/BENCHMARK.md).
|
| 181 |
+
|
| 182 |
+
| | Laptop (Intel i7-1360P) | Raspberry Pi 5 (16 GB) |
|
| 183 |
+
|---|---|---|
|
| 184 |
+
| Latency p50 / p95 / p99 | 18.4 / 168.6 / 239.6 ms | 30.2 / 243.9 / 281.6 ms |
|
| 185 |
+
| Throughput, cool → after 10 min | 29.6 → 18.5 commands/s | 13.9 → 13.9 commands/s |
|
| 186 |
+
| Temperature idle → peak | 52.6 → 91.9 °C | 38.5 → 59.8 °C |
|
| 187 |
+
| Throttling | slows down ~39% once hot | none (2400 MHz throughout, `get_throttled=0x0`) |
|
| 188 |
+
| Best BLAS threads | 4 | 2 |
|
| 189 |
+
|
| 190 |
+
- Latency grows with the length of the command the model writes: short commands take ~10–35 ms, Wi-Fi commands with
|
| 191 |
+
an SSID and a password take ~100–250 ms.
|
| 192 |
+
- **Set the BLAS thread count.** The matrices are small, so NumPy's default (one thread per core) is up to 4x slower.
|
| 193 |
+
Use `OPENBLAS_NUM_THREADS=4` on x86 laptops and `OPENBLAS_NUM_THREADS=2` on the Raspberry Pi 5 (`quickstart.py`
|
| 194 |
+
does this for you).
|
| 195 |
+
|
| 196 |
+
### Test devices
|
| 197 |
+
|
| 198 |
+
| | Laptop | Raspberry Pi 5 |
|
| 199 |
+
|---|---|---|
|
| 200 |
+
| CPU | Intel Core i7-1360P (4P + 8E cores) | Broadcom BCM2712, 4× Cortex-A76 @ 2.4 GHz |
|
| 201 |
+
| RAM | 32 GB | 16 GB |
|
| 202 |
+
| OS | Windows 11 | Raspberry Pi OS (Debian 13), kernel 6.12 |
|
| 203 |
+
| Python / NumPy | 3.13 / 2.5.3 | 3.13 / 2.2.4 |
|
| 204 |
+
| Cooling | built-in fan, AC power | active cooler (PWM fan) |
|
| 205 |
+
|
| 206 |
+
## Download and test
|
| 207 |
+
|
| 208 |
+
### 1. Get the files
|
| 209 |
+
|
| 210 |
+
```bash
|
| 211 |
+
pip install -U huggingface_hub
|
| 212 |
+
hf download sraivante/tiny-superfast-agentic-MLM-6.5m-v1 --local-dir tiny-agentic-6.5m
|
| 213 |
+
cd tiny-agentic-6.5m
|
| 214 |
+
```
|
| 215 |
+
|
| 216 |
+
### 2. Parse commands (nothing is executed)
|
| 217 |
+
|
| 218 |
+
```bash
|
| 219 |
+
pip install numpy
|
| 220 |
+
python quickstart.py "volume 40 kar do" "connect to wifi Redmi Note 12 password hello@123"
|
| 221 |
+
python quickstart.py # interactive
|
| 222 |
+
```
|
| 223 |
+
|
| 224 |
+
Each line prints the command, the confidence, the latency, the risk level and the OS command the sample executor
|
| 225 |
+
*would* run on this machine.
|
| 226 |
+
|
| 227 |
+
### 3. Test UI and checks (Python 3.9+)
|
| 228 |
+
|
| 229 |
+
| | Windows | Raspberry Pi / Linux |
|
| 230 |
+
|---|---|---|
|
| 231 |
+
| Test UI in the browser (http://localhost:8000) | `run.bat` | `./run.sh` |
|
| 232 |
+
| Terminal agent | `run.bat cli` | `./run.sh cli` |
|
| 233 |
+
| Smoke test (model + executor, nothing executed) | `run.bat test` / `run.bat test --full` | `./run.sh test` / `./run.sh test --full` |
|
| 234 |
+
| HTML report of all 371 actions | `run.bat report` | `./run.sh report` |
|
| 235 |
+
|
| 236 |
+
The first run creates `.venv` and installs `numpy`, `fastapi` and `uvicorn`. `report` really runs the *safe,
|
| 237 |
+
read-only* actions on your machine (for example reading the volume or the IP address) and dry-runs everything else.
|
| 238 |
+
|
| 239 |
+
In the UI, *Run all* is always a dry run. **Execute** on a row runs that one command: safe actions run directly,
|
| 240 |
+
caution actions need the "allow caution" box, and critical actions ask you to type the action name. The UI listens on
|
| 241 |
+
127.0.0.1 only and has no login, so do not expose it to a network.
|
| 242 |
+
|
| 243 |
+
### 4. Reproduce the speed test
|
| 244 |
+
|
| 245 |
+
```bash
|
| 246 |
+
cd eval
|
| 247 |
+
sh bench_run_all.sh python ../model <dir with eval .jsonl sets> <out_dir> default 1 2 4
|
| 248 |
+
```
|
| 249 |
+
|
| 250 |
+
## How the model works
|
| 251 |
+
|
| 252 |
+
- **Input:** one command, up to 128 characters, normalised and encoded character by character (200-symbol
|
| 253 |
+
vocabulary), so typos, code-mixing and odd spellings are handled without a word tokenizer.
|
| 254 |
+
- **Network:** Transformer encoder-decoder, d_model 256, 8 heads, FFN 768, 5 encoder + 3 decoder layers (pre-LN).
|
| 255 |
+
- **Output:** a short canonical command such as `connect_wifi ssid="…" password="…"`, written token by token
|
| 256 |
+
(1,052-token output vocabulary).
|
| 257 |
+
- **Grammar-constrained decoding:** at every step only tokens that keep the output valid are allowed. The action must
|
| 258 |
+
come from the 371-action catalog, the slots must belong to that action, and text slots (SSIDs, passwords, file names,
|
| 259 |
+
apps) must be copied from the input. The model cannot invent an action or a password that you did not say.
|
| 260 |
+
- **Snap:** a small post-decode repair extends copied SSIDs and passwords to whole tokens and recovers the original
|
| 261 |
+
letter case from the input.
|
| 262 |
+
- **Training:** from random initialisation (no pretrained base), 1,230,162 synthetic English/Hinglish rows, 18 epochs
|
| 263 |
+
on one NVIDIA A100 (bf16, batch 1024, lr 3e-3), about 36 minutes.
|
| 264 |
+
- **Catalog metadata:** each action carries `risk` (safe/caution/critical), `needs_sudo` and `platforms`, so the
|
| 265 |
+
executor can decide what to run, confirm or refuse.
|
| 266 |
+
|
| 267 |
+
## Safety
|
| 268 |
+
|
| 269 |
+
- The model does not refuse anything. The **executor is the policy**: whitelisted command templates, per-shell
|
| 270 |
+
quoting, a risk gate and clarification questions.
|
| 271 |
+
- **Credential guard:** if a parsed Wi-Fi password or network name looks like a slip (a filler word such as "hai" or
|
| 272 |
+
"pehle", the password equal to the SSID, the password inside the SSID), the executor asks again instead of
|
| 273 |
+
connecting.
|
| 274 |
+
- **Bare pin numbers:** "pin no 11" can mean physical pin 11 or GPIO 11. For any action that drives a pin, the
|
| 275 |
+
executor asks which one unless the user said gpio, bcm, board, physical or header. Power and ground header pins are
|
| 276 |
+
always refused.
|
| 277 |
+
- Critical actions (shutdown, GPIO writes, `run_command`, ...) need the action name typed as confirmation.
|
| 278 |
+
|
| 279 |
+
## Limitations
|
| 280 |
+
|
| 281 |
+
- Training data is synthetic, with no real ASR transcripts. Test with your own speech recognizer, and expect lower
|
| 282 |
+
accuracy on noisy transcripts.
|
| 283 |
+
- English and Roman-script Hinglish dominate the training data. Devanagari Hindi is only 0.26% of it (3,232 rows).
|
| 284 |
+
Spot checks work (`क्रोम खोलो` → `open_app chrome`, `वाईफाई बंद करो` → `wifi_off`, `5 मिनट का टाइमर लगाओ` → `set_timer`),
|
| 285 |
+
but there is no Devanagari test set, so its accuracy is not measured.
|
| 286 |
+
- One command per utterance. It is a parser, not a multi-step planner.
|
| 287 |
+
- Small talk and out-of-scope requests usually come back as `unknown`, but not always (see `kya haal hai bhai`
|
| 288 |
+
above). Use the confidence score.
|
| 289 |
+
- Known confusions: `scan_lan` vs `discover_devices` (a labelling ambiguity), and bare GPIO pin numbers (handled by
|
| 290 |
+
the executor, see Safety).
|
| 291 |
+
- The sample executor is not a finished product. Some Windows actions have no command-line equivalent and only open
|
| 292 |
+
the right Settings page. Many Raspberry Pi actions need tools such as `pinctrl`, `nmcli` or `i2c-tools`.
|
| 293 |
+
|
| 294 |
+
## Files
|
| 295 |
+
|
| 296 |
+
| Path | What it is |
|
| 297 |
+
|---|---|
|
| 298 |
+
| `model/model.npz`, `model/config.json` | The model weights (NumPy) and architecture |
|
| 299 |
+
| `model/runtime.py`, `tokenizer.py`, `grammar.py`, `normalize.py`, `snap.py`, `catalog.py` | NumPy inference code |
|
| 300 |
+
| `model/catalog.json` | The 371 actions with slots, risk, sudo and platform metadata |
|
| 301 |
+
| `pytorch/model.pt`, `pytorch/model.py` | PyTorch checkpoint (`{"state", "cfg"}`) and model definition, for fine-tuning |
|
| 302 |
+
| `quickstart.py` | Command-line demo (parse + show plan, nothing executed) |
|
| 303 |
+
| `executor/` | Sample executor: Windows and Raspberry Pi command templates, risk gate, credential and pin guards |
|
| 304 |
+
| `ui/`, `run.sh`, `run.bat` | Local test UI and terminal agent |
|
| 305 |
+
| `eval/` | Smoke test, curated and Wi-Fi evaluation prompts, HTML report generator, benchmark script and results |
|
| 306 |
+
| `tools/install_model.py` | Swap in a re-trained `model.npz` (backs up the current one) |
|
| 307 |
+
|
| 308 |
+
Load the PyTorch checkpoint:
|
| 309 |
+
|
| 310 |
+
```python
|
| 311 |
+
import torch; from pytorch.model import Seq2Seq
|
| 312 |
+
ck = torch.load("pytorch/model.pt", map_location="cpu"); c = ck["cfg"]
|
| 313 |
+
m = Seq2Seq(c["n_in"], c["n_out"], d=c["d"], h=c["h"], f=c["f"], n_enc=c["n_enc"], n_dec=c["n_dec"],
|
| 314 |
+
max_in=c["max_in"], max_out=c["max_out"])
|
| 315 |
+
m.load_state_dict(ck["state"]) # 6,441,472 parameters
|
| 316 |
+
```
|
| 317 |
+
|
| 318 |
+
## License and credits
|
| 319 |
+
|
| 320 |
+
Code and model weights: Apache-2.0, Copyright (c) 2026 sraivante. Trained from scratch; no pretrained weights are
|
| 321 |
+
used. The training dataset is synthetic and is not published. Provided as-is, without warranty. You are responsible
|
| 322 |
+
for anything you let an executor do.
|
eval/BENCHMARK.md
ADDED
|
@@ -0,0 +1,138 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
## On-device performance: speed, temperature and accuracy
|
| 2 |
+
|
| 3 |
+
Model: Union command parser, 6.44M params (d=256, 5 encoder + 3 decoder layers, 8 heads), character-level
|
| 4 |
+
encoder-decoder with grammar-constrained decoding over 371 actions. Weights: `model.npz` (23.9 MB, float32).
|
| 5 |
+
Inference: pure NumPy on CPU, one prompt at a time, greedy decoding. Measured 2026-09-27.
|
| 6 |
+
|
| 7 |
+
### Summary
|
| 8 |
+
|
| 9 |
+
| | Laptop (Intel i7-1360P) | Raspberry Pi 5 (16 GB) |
|
| 10 |
+
|---|---|---|
|
| 11 |
+
| Accuracy, exact (2,340 prompts) | **97.82%** | **97.82%** |
|
| 12 |
+
| Accuracy, action only | 98.46% | 98.46% |
|
| 13 |
+
| Model load time | 0.13 s | 0.20 s |
|
| 14 |
+
| Latency p50 / p95 / p99 (10 min sustained) | 18.4 / 168.6 / 239.6 ms | 30.2 / 243.9 / 281.6 ms |
|
| 15 |
+
| Mean latency (10 min sustained) | 45.8 ms | 72.0 ms |
|
| 16 |
+
| Throughput, first pass (cool) | 29.6 prompts/s | 13.9 prompts/s |
|
| 17 |
+
| Throughput, last 5 minutes (hot) | 18.5 prompts/s | 13.9 prompts/s |
|
| 18 |
+
| Temperature idle → peak | 52.6 → 91.9 °C | 38.5 → 59.8 °C |
|
| 19 |
+
| Thermal throttling | slowed down by ~39% once hot (see below) | none (`get_throttled=0x0`, 2400 MHz throughout) |
|
| 20 |
+
| Best BLAS thread setting | 4 threads | 2 threads |
|
| 21 |
+
|
| 22 |
+
- **Accuracy is identical on both devices.** The same predictions come out on x86-64 and on ARM64.
|
| 23 |
+
- **The Pi 5 holds its speed.** Its latency did not change across 10 minutes of continuous load. With the active
|
| 24 |
+
cooler, the SoC stayed below 60 °C and the fan never went above state 2.
|
| 25 |
+
- **The laptop is about 2.1x faster than the Pi when cool, but only about 1.3x faster once hot.** After it reached
|
| 26 |
+
88–92 °C, its throughput fell from ~30 to ~18 prompts/s.
|
| 27 |
+
|
| 28 |
+
### Accuracy per evaluation set
|
| 29 |
+
|
| 30 |
+
The numbers come from the runtime, so they include the post-decode "snap" repair. They are the same on both devices.
|
| 31 |
+
|
| 32 |
+
| Set | n | Exact | Action | What it tests |
|
| 33 |
+
|---|---|---|---|---|
|
| 34 |
+
| curated | 371 | 99.46% | 99.73% | one held-out prompt per action (all 371 actions) |
|
| 35 |
+
| wifi_holdout | 461 | 100.00% | 100.00% | unseen Wi-Fi connect phrasings (SSID/password extraction) |
|
| 36 |
+
| gap11_holdout | 696 | 99.28% | 100.00% | unseen templates: password-first Wi-Fi, CPU clock vs usage, board↔BCM pins, fan vs mouse speed |
|
| 37 |
+
| B_golden_final | 384 | 97.40% | 97.40% | external golden set, including out-of-scope prompts (`unknown`) |
|
| 38 |
+
| A_practical-holdout | 428 | 92.06% | 94.16% | external practical set; some misses are label-convention differences |
|
| 39 |
+
| **All** | **2,340** | **97.82%** | **98.46%** | |
|
| 40 |
+
|
| 41 |
+
"Exact" means the action and every slot value match. "Action" means only the action label matches.
|
| 42 |
+
|
| 43 |
+
### Speed vs temperature under sustained load
|
| 44 |
+
|
| 45 |
+
Each device ran the same 2,340 prompts in a fixed shuffled order (seed 0), repeated for 10 minutes. Every pass is the
|
| 46 |
+
same workload, so any change between passes comes from the device, not from the prompts.
|
| 47 |
+
|
| 48 |
+
**Laptop, Intel Core i7-1360P** (Windows 11, on AC power, Balanced power plan, 4 BLAS threads)
|
| 49 |
+
|
| 50 |
+
| Pass | Temp (°C) min–max | Avg clock (MHz) | Mean (ms) | p50 (ms) | p95 (ms) | Prompts/s |
|
| 51 |
+
|---|---|---|---|---|---|---|
|
| 52 |
+
| 1 | 51.9 – 90.9 | 3067 | 33.8 | 14.6 | 111.0 | 29.6 |
|
| 53 |
+
| 2 | 83.9 – 91.9 | 2838 | 37.5 | 15.6 | 121.4 | 26.7 |
|
| 54 |
+
| 3 | 81.9 – 91.9 | 2872 | 42.4 | 17.0 | 150.4 | 23.6 |
|
| 55 |
+
| 4 | 81.9 – 89.9 | 2853 | 55.8 | 22.5 | 202.0 | 17.9 |
|
| 56 |
+
| 5 | 81.9 – 86.9 | 2959 | 55.2 | 22.7 | 196.2 | 18.1 |
|
| 57 |
+
| 6 (partial, 1,411) | 79.9 – 82.9 | 2954 | 52.5 | 21.3 | 184.8 | 19.0 |
|
| 58 |
+
|
| 59 |
+
**Raspberry Pi 5, 16 GB** (Raspberry Pi OS, kernel 6.12, `ondemand` governor, active cooler (PWM fan), 2 BLAS threads)
|
| 60 |
+
|
| 61 |
+
| Pass | Temp (°C) min–max | Clock (MHz) | Mean (ms) | p50 (ms) | p95 (ms) | Prompts/s | Throttled |
|
| 62 |
+
|---|---|---|---|---|---|---|---|
|
| 63 |
+
| 1 | 41.1 – 57.6 | 2400 | 72.2 | 30.4 | 244.5 | 13.86 | 0x0 |
|
| 64 |
+
| 2 | 57.1 – 59.8 | 2400 | 72.0 | 30.2 | 243.9 | 13.90 | 0x0 |
|
| 65 |
+
| 3 | 56.5 – 59.3 | 2400 | 71.9 | 29.9 | 243.8 | 13.91 | 0x0 |
|
| 66 |
+
| 4 (partial, 1,314) | 56.5 – 58.7 | 2400 | 71.9 | 30.5 | 242.5 | 13.90 | 0x0 |
|
| 67 |
+
|
| 68 |
+
<details>
|
| 69 |
+
<summary>Per-minute view</summary>
|
| 70 |
+
|
| 71 |
+
| Minute | Laptop °C | Laptop MHz | Laptop mean ms | Laptop prompts/s | Pi °C | Pi MHz | Pi mean ms | Pi prompts/s | Pi fan state |
|
| 72 |
+
|---|---|---|---|---|---|---|---|---|---|
|
| 73 |
+
| 1 | 88.9 | 3145 | 33.2 | 30.1 | 54.9 | 2400 | 72.2 | 13.9 | 1 |
|
| 74 |
+
| 2 | 91.9 | 3094 | 34.4 | 29.1 | 57.6 | 2400 | 74.5 | 13.4 | 1 |
|
| 75 |
+
| 3 | 91.9 | 2745 | 39.2 | 25.5 | 57.6 | 2400 | 68.9 | 14.5 | 1 |
|
| 76 |
+
| 4 | 91.9 | 2819 | 39.9 | 25.0 | 58.7 | 2400 | 73.5 | 13.6 | 1 |
|
| 77 |
+
| 5 | 88.9 | 2703 | 61.8 | 16.2 | 59.8 | 2400 | 72.4 | 13.8 | 1 |
|
| 78 |
+
| 6 | 89.9 | 2966 | 56.3 | 17.7 | 59.8 | 2400 | 70.5 | 14.2 | 1→2 |
|
| 79 |
+
| 7 | 84.9 | 2936 | 52.0 | 19.3 | 58.2 | 2400 | 71.5 | 14.0 | 2 |
|
| 80 |
+
| 8 | 86.9 | 2815 | 59.7 | 16.8 | 58.2 | 2400 | 72.5 | 13.8 | 2 |
|
| 81 |
+
| 9 | 84.9 | 2982 | 49.5 | 20.3 | 58.2 | 2400 | 71.7 | 14.0 | 2 |
|
| 82 |
+
| 10 | 81.9 | 2969 | 53.5 | 18.7 | 58.7 | 2400 | 72.5 | 13.8 | 2 |
|
| 83 |
+
|
| 84 |
+
</details>
|
| 85 |
+
|
| 86 |
+
About the laptop slowdown: from pass 1 to pass 5, throughput fell by 39% and mean latency rose by 63%, but the
|
| 87 |
+
Windows all-core frequency counter fell by only 3–10%. So the clock drop alone does not explain the slowdown. The
|
| 88 |
+
likely causes are the package power limit and the scheduler moving work between P-cores and E-cores. This counter
|
| 89 |
+
cannot tell those apart.
|
| 90 |
+
|
| 91 |
+
### Latency depends on output length
|
| 92 |
+
|
| 93 |
+
The model decodes one token at a time, so latency grows with the length of the command it writes. Short commands
|
| 94 |
+
(`volume_up`, `set_volume value=50`) finish in about 10–20 ms on the laptop and 20–35 ms on the Pi 5. Commands with long text slots (`connect_wifi ssid=…
|
| 95 |
+
password=…`, web searches, file paths) make up the p95/p99 tail: about 110–200 ms on the laptop and about 245 ms on
|
| 96 |
+
the Pi 5.
|
| 97 |
+
|
| 98 |
+
### BLAS threads matter more than core count
|
| 99 |
+
|
| 100 |
+
We ran 300 mixed prompts per setting, with `OPENBLAS_NUM_THREADS` and `OMP_NUM_THREADS` set before NumPy loads.
|
| 101 |
+
|
| 102 |
+
| Threads | Laptop mean / p95 (ms) | Pi 5 mean / p95 (ms) |
|
| 103 |
+
|---|---|---|
|
| 104 |
+
| NumPy default (all cores) | 130.1 / 519.9 | 82.0 / 286.1 |
|
| 105 |
+
| 1 | 32.6 / 113.0 | 82.3 / 295.2 |
|
| 106 |
+
| 2 | 31.6 / 108.2 | **66.2 / 232.6** |
|
| 107 |
+
| 4 | **30.7 / 99.6** | 81.2 / 280.5 |
|
| 108 |
+
|
| 109 |
+
The matrices in this model are small. With OpenBLAS's default setting of one thread per core (16 on the laptop),
|
| 110 |
+
thread synchronisation costs more than the arithmetic, which makes the laptop about 4x slower. **Set
|
| 111 |
+
`OPENBLAS_NUM_THREADS=4` on x86 laptops and `OPENBLAS_NUM_THREADS=2` on the Raspberry Pi 5.**
|
| 112 |
+
|
| 113 |
+
### Test setup
|
| 114 |
+
|
| 115 |
+
| | Laptop | Raspberry Pi 5 |
|
| 116 |
+
|---|---|---|
|
| 117 |
+
| CPU | Intel Core i7-1360P (4P + 8E cores, 16 threads) | Broadcom BCM2712, 4× Cortex-A76 @ 2.4 GHz |
|
| 118 |
+
| RAM | 32 GB | 16 GB |
|
| 119 |
+
| OS | Windows 11 (build 26200) | Raspberry Pi OS (Debian 13), kernel 6.12.47 |
|
| 120 |
+
| Python / NumPy | 3.13.14 / 2.5.3 (OpenBLAS 0.3.34) | 3.13.5 / 2.2.4 |
|
| 121 |
+
| Cooling / power | built-in fan, AC power, Balanced plan | active cooler (PWM fan), `ondemand` governor |
|
| 122 |
+
| Temperature source | ACPI thermal zone (`\_TZ.TZ01`), **not** the CPU core sensor | SoC sensor (`vcgencmd measure_temp`) |
|
| 123 |
+
| Clock source | `% Processor Performance` × base frequency (all-core average) | `vcgencmd measure_clock arm` |
|
| 124 |
+
|
| 125 |
+
Method: a 30 s idle reading, 20 warm-up prompts, then 10 minutes of continuous single-stream inference. Temperature,
|
| 126 |
+
clock, throttle flags and fan state were sampled every 10 s. Accuracy was measured on the first full pass. Both devices ran
|
| 127 |
+
at the same time, and nothing else heavy ran on either one (the laptop also ran the SSH session that drove the Pi).
|
| 128 |
+
|
| 129 |
+
### Reproduce
|
| 130 |
+
|
| 131 |
+
```bash
|
| 132 |
+
# from the agent folder; <data> holds curated / wifi_holdout / gap11_holdout / B_golden_final / A_practical-holdout .jsonl
|
| 133 |
+
cd eval
|
| 134 |
+
sh bench_run_all.sh python ../model <data> <out_dir> default 1 2 4 # thread probe, picks the fastest, 2 min cooldown, 10 min run
|
| 135 |
+
```
|
| 136 |
+
|
| 137 |
+
Raw results are in `eval/bench_results/` (`*_threads.json` = thread probe, the other files = full run with per-pass
|
| 138 |
+
and per-minute data).
|
eval/bench_device.py
ADDED
|
@@ -0,0 +1,126 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""Device benchmark: latency vs temperature under sustained load, plus accuracy, for the numpy runtime.
|
| 2 |
+
python bench_device.py --model ../model --data <dir with *.jsonl eval sets> --out result.json [--threads-probe]
|
| 3 |
+
Phases: idle temperature (30 s) -> warm-up -> every prompt of every eval set once (sustained load; stats per 60 s
|
| 4 |
+
window: temperature, CPU clock, latency p50/p95, prompts/s) -> optional 1-thread vs default-thread probe.
|
| 5 |
+
Accuracy = runtime output (with snap) == target, i.e. what `run.sh test --full` measures, not the raw Colab number.
|
| 6 |
+
Temperature: Raspberry Pi = SoC sensor (vcgencmd); Windows = ACPI thermal zone (not the CPU core sensor).
|
| 7 |
+
"""
|
| 8 |
+
import argparse, json, os, platform, statistics, subprocess, sys, threading, time
|
| 9 |
+
|
| 10 |
+
SETS = ["curated", "wifi_holdout", "gap11_holdout", "B_golden_final", "A_practical-holdout"]
|
| 11 |
+
|
| 12 |
+
def is_pi(): return os.path.exists("/usr/bin/vcgencmd")
|
| 13 |
+
PS = os.path.join(os.environ.get("SystemRoot", r"C:\Windows"), "System32", "WindowsPowerShell", "v1.0", "powershell.exe")
|
| 14 |
+
|
| 15 |
+
def sample():
|
| 16 |
+
"""-> dict(temp_c, clock_mhz, throttled) for this device; missing values are None."""
|
| 17 |
+
if is_pi():
|
| 18 |
+
def v(*a): return subprocess.run(["vcgencmd", *a], capture_output=True, text=True).stdout.strip()
|
| 19 |
+
t = float(v("measure_temp").split("=")[1].rstrip("'C")); f = int(v("measure_clock", "arm").split("=")[1]) / 1e6
|
| 20 |
+
fan = open("/sys/class/thermal/cooling_device0/cur_state").read().strip() if os.path.exists("/sys/class/thermal/cooling_device0/cur_state") else None
|
| 21 |
+
return {"temp_c": t, "clock_mhz": round(f), "throttled": v("get_throttled").split("=")[1], "fan_state": fan}
|
| 22 |
+
if os.name == "nt":
|
| 23 |
+
ps = ("$c=Get-Counter '\\Thermal Zone Information(*)\\Temperature','\\Processor Information(_Total)\\% Processor Performance','\\Processor Information(_Total)\\Processor Frequency';"
|
| 24 |
+
"$c.CounterSamples | ForEach-Object { $_.Path + '=' + $_.CookedValue }")
|
| 25 |
+
out = subprocess.run([PS, "-NoProfile", "-Command", ps], capture_output=True, text=True).stdout
|
| 26 |
+
temps, perf, freq = [], None, None
|
| 27 |
+
for line in out.splitlines():
|
| 28 |
+
k, _, val = line.rpartition("=")
|
| 29 |
+
if not val: continue
|
| 30 |
+
if "temperature" in k.lower(): temps.append(float(val) - 273.15)
|
| 31 |
+
elif "% processor performance" in k.lower(): perf = float(val)
|
| 32 |
+
elif "processor frequency" in k.lower(): freq = float(val)
|
| 33 |
+
clock = round(freq * perf / 100) if freq and perf else None
|
| 34 |
+
return {"temp_c": round(max(temps), 1) if temps else None, "clock_mhz": clock, "throttled": None, "fan_state": None}
|
| 35 |
+
return {"temp_c": None, "clock_mhz": None, "throttled": None, "fan_state": None}
|
| 36 |
+
|
| 37 |
+
class Sampler(threading.Thread):
|
| 38 |
+
def __init__(self, every=10):
|
| 39 |
+
super().__init__(daemon=True); self.every, self.rows, self.stop = every, [], False
|
| 40 |
+
def run(self):
|
| 41 |
+
while not self.stop:
|
| 42 |
+
s = sample(); s["t"] = time.time(); self.rows.append(s); time.sleep(self.every)
|
| 43 |
+
|
| 44 |
+
def pct(xs, p):
|
| 45 |
+
xs = sorted(xs); return xs[min(len(xs) - 1, int(round(p / 100 * (len(xs) - 1))))]
|
| 46 |
+
|
| 47 |
+
def device_info():
|
| 48 |
+
info = {"platform": platform.platform(), "python": platform.python_version(), "machine": platform.machine()}
|
| 49 |
+
import numpy; info["numpy"] = numpy.__version__
|
| 50 |
+
if is_pi():
|
| 51 |
+
info["model"] = open("/proc/device-tree/model").read().strip("\x00 \n"); info["cores"] = os.cpu_count()
|
| 52 |
+
info["governor"] = open("/sys/devices/system/cpu/cpu0/cpufreq/scaling_governor").read().strip()
|
| 53 |
+
elif os.name == "nt":
|
| 54 |
+
out = subprocess.run([PS, "-NoProfile", "-Command", "(Get-CimInstance Win32_Processor).Name"], capture_output=True, text=True).stdout.strip()
|
| 55 |
+
info["model"] = out; info["cores"] = os.cpu_count()
|
| 56 |
+
return info
|
| 57 |
+
|
| 58 |
+
def load_sets(data):
|
| 59 |
+
rows = []
|
| 60 |
+
for s in SETS:
|
| 61 |
+
p = os.path.join(data, s + ".jsonl")
|
| 62 |
+
if os.path.exists(p): rows += [(s, json.loads(l)) for l in open(p, encoding="utf-8")]
|
| 63 |
+
return rows
|
| 64 |
+
|
| 65 |
+
def main():
|
| 66 |
+
ap = argparse.ArgumentParser(); ap.add_argument("--model", required=True); ap.add_argument("--data", required=True); ap.add_argument("--out", required=True)
|
| 67 |
+
ap.add_argument("--idle", type=int, default=30); ap.add_argument("--window", type=int, default=60)
|
| 68 |
+
ap.add_argument("--probe-only", action="store_true"); ap.add_argument("--probe-n", type=int, default=200)
|
| 69 |
+
ap.add_argument("--minutes", type=float, default=10, help="sustained-load duration (one full pass of all sets at minimum)")
|
| 70 |
+
a = ap.parse_args()
|
| 71 |
+
sys.path.insert(0, os.path.abspath(a.model)); from runtime import CommandModel
|
| 72 |
+
t0 = time.time(); m = CommandModel(os.path.abspath(a.model)); load_s = time.time() - t0
|
| 73 |
+
rows = load_sets(a.data)
|
| 74 |
+
import random; random.Random(0).shuffle(rows) # same mixed order everywhere, so every window/pass has the same workload
|
| 75 |
+
if a.probe_only: # one process per thread setting: env vars must be set before numpy loads
|
| 76 |
+
lat = []
|
| 77 |
+
for _, r in rows[:20]: m.predict_raw(r["text"])
|
| 78 |
+
for _, r in rows[:a.probe_n]:
|
| 79 |
+
t = time.perf_counter(); m.predict_raw(r["text"]); lat.append((time.perf_counter() - t) * 1000)
|
| 80 |
+
json.dump({"n": len(lat), "p50_ms": round(pct(lat, 50), 1), "p95_ms": round(pct(lat, 95), 1), "mean_ms": round(statistics.mean(lat), 1)}, open(a.out, "w")); return
|
| 81 |
+
res = {"device": device_info(), "model_load_s": round(load_s, 2), "params": int(sum(v.size for v in m.W.values()))}
|
| 82 |
+
print(res["device"], "load", res["model_load_s"], "s", flush=True)
|
| 83 |
+
idle = [sample() for _ in range(max(1, a.idle // 5)) if not time.sleep(5)]
|
| 84 |
+
res["idle"] = {"temp_c": round(statistics.mean(s["temp_c"] for s in idle), 1) if idle[0]["temp_c"] is not None else None, "clock_mhz": idle[-1]["clock_mhz"]}
|
| 85 |
+
print("idle", res["idle"], flush=True)
|
| 86 |
+
for _, r in rows[:20]: m.predict_raw(r["text"]) # warm-up
|
| 87 |
+
smp = Sampler(10); smp.start(); t_start = time.time(); recs = []; i = 0
|
| 88 |
+
while i < len(rows) or time.time() - t_start < a.minutes * 60: # at least one full pass, then loop until --minutes
|
| 89 |
+
s, r = rows[i % len(rows)]
|
| 90 |
+
t = time.perf_counter(); pred = m.predict_raw(r["text"])[0]; ms = (time.perf_counter() - t) * 1000
|
| 91 |
+
recs.append({"set": s, "ok": pred == r["target"], "act_ok": pred.split()[0] == r["action"], "ms": ms, "t": time.time(), "first": i < len(rows), "pass": i // len(rows) + 1})
|
| 92 |
+
if i % 500 == 0: print(f" {i} {ms:.0f} ms {smp.rows[-1]['temp_c'] if smp.rows else ''} C {time.time()-t_start:.0f}s", flush=True)
|
| 93 |
+
i += 1
|
| 94 |
+
smp.stop = True; wall = time.time() - t_start
|
| 95 |
+
windows = []
|
| 96 |
+
for w in range(int(wall // a.window) + 1):
|
| 97 |
+
lo, hi = t_start + w * a.window, t_start + (w + 1) * a.window
|
| 98 |
+
rs = [x for x in recs if lo <= x["t"] < hi]; ss = [x for x in smp.rows if lo <= x["t"] < hi]
|
| 99 |
+
if len(rs) < 5: continue
|
| 100 |
+
temps = [x["temp_c"] for x in ss if x["temp_c"] is not None]; clk = [x["clock_mhz"] for x in ss if x["clock_mhz"]]
|
| 101 |
+
windows.append({"minute": w + 1, "n": len(rs), "temp_c": round(max(temps), 1) if temps else None, "clock_mhz": round(statistics.mean(clk)) if clk else None,
|
| 102 |
+
"mean_ms": round(statistics.mean(x["ms"] for x in rs), 1), "p50_ms": round(pct([x["ms"] for x in rs], 50), 1), "p95_ms": round(pct([x["ms"] for x in rs], 95), 1),
|
| 103 |
+
"prompts_per_s": round(len(rs) / min(a.window, hi - max(lo, recs[0]["t"])), 2),
|
| 104 |
+
"throttled": sorted({x["throttled"] for x in ss if x["throttled"]}), "fan_state": sorted({x["fan_state"] for x in ss if x["fan_state"]})})
|
| 105 |
+
lat = [x["ms"] for x in recs]
|
| 106 |
+
res["load"] = {"prompts": len(recs), "wall_s": round(wall, 1), "p50_ms": round(pct(lat, 50), 1), "p95_ms": round(pct(lat, 95), 1), "p99_ms": round(pct(lat, 99), 1),
|
| 107 |
+
"mean_ms": round(statistics.mean(lat), 1), "max_temp_c": max((w["temp_c"] for w in windows if w["temp_c"] is not None), default=None),
|
| 108 |
+
"throttled_any": sorted({f for x in smp.rows if x["throttled"] for f in [x["throttled"]]})}
|
| 109 |
+
res["windows"] = windows
|
| 110 |
+
passes = [] # identical workload per pass: the clean comparison of speed as the device heats up
|
| 111 |
+
for pn in sorted({x["pass"] for x in recs}):
|
| 112 |
+
rs = [x for x in recs if x["pass"] == pn]; lo, hi = rs[0]["t"], rs[-1]["t"]
|
| 113 |
+
ss = [x for x in smp.rows if lo - 10 <= x["t"] <= hi]; temps = [x["temp_c"] for x in ss if x["temp_c"] is not None]
|
| 114 |
+
clk = [x["clock_mhz"] for x in ss if x["clock_mhz"]]; ms = [x["ms"] for x in rs]
|
| 115 |
+
passes.append({"pass": pn, "n": len(rs), "complete": len(rs) == len(rows), "temp_min_c": min(temps) if temps else None, "temp_max_c": max(temps) if temps else None,
|
| 116 |
+
"clock_mhz": round(statistics.mean(clk)) if clk else None, "mean_ms": round(statistics.mean(ms), 1), "p50_ms": round(pct(ms, 50), 1),
|
| 117 |
+
"p95_ms": round(pct(ms, 95), 1), "prompts_per_s": round(len(rs) / max(hi - lo, 1e-9), 2)})
|
| 118 |
+
res["passes"] = passes
|
| 119 |
+
first =[x for x in recs if x["first"]]
|
| 120 |
+
res["accuracy"] = {s: {"n": sum(1 for x in first if x["set"] == s), "exact": round(100 * sum(x["ok"] for x in first if x["set"] == s) / max(1, sum(1 for x in first if x["set"] == s)), 2),
|
| 121 |
+
"action": round(100 * sum(x["act_ok"] for x in first if x["set"] == s) / max(1, sum(1 for x in first if x["set"] == s)), 2)} for s in SETS}
|
| 122 |
+
res["accuracy_all"] = {"n": len(first), "exact": round(100 * sum(x["ok"] for x in first) / len(first), 2), "action": round(100 * sum(x["act_ok"] for x in first) / len(first), 2)}
|
| 123 |
+
res["threads"] = {k: os.environ.get(k) for k in ("OPENBLAS_NUM_THREADS", "OMP_NUM_THREADS")}
|
| 124 |
+
json.dump(res, open(a.out, "w"), indent=1); print(json.dumps(res["load"]), flush=True)
|
| 125 |
+
|
| 126 |
+
if __name__ == "__main__": main()
|
eval/bench_results/laptop_i7-1360P.json
ADDED
|
@@ -0,0 +1,258 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"device": {
|
| 3 |
+
"platform": "Windows-11-10.0.26200-SP0",
|
| 4 |
+
"python": "3.13.14",
|
| 5 |
+
"machine": "AMD64",
|
| 6 |
+
"numpy": "2.5.3",
|
| 7 |
+
"model": "13th Gen Intel(R) Core(TM) i7-1360P",
|
| 8 |
+
"cores": 16
|
| 9 |
+
},
|
| 10 |
+
"model_load_s": 0.13,
|
| 11 |
+
"params": 6441472,
|
| 12 |
+
"idle": {
|
| 13 |
+
"temp_c": 52.6,
|
| 14 |
+
"clock_mhz": 976
|
| 15 |
+
},
|
| 16 |
+
"load": {
|
| 17 |
+
"prompts": 13111,
|
| 18 |
+
"wall_s": 600.0,
|
| 19 |
+
"p50_ms": 18.4,
|
| 20 |
+
"p95_ms": 168.6,
|
| 21 |
+
"p99_ms": 239.6,
|
| 22 |
+
"mean_ms": 45.8,
|
| 23 |
+
"max_temp_c": 91.9,
|
| 24 |
+
"throttled_any": []
|
| 25 |
+
},
|
| 26 |
+
"windows": [
|
| 27 |
+
{
|
| 28 |
+
"minute": 1,
|
| 29 |
+
"n": 1806,
|
| 30 |
+
"temp_c": 88.9,
|
| 31 |
+
"clock_mhz": 3145,
|
| 32 |
+
"mean_ms": 33.2,
|
| 33 |
+
"p50_ms": 14.6,
|
| 34 |
+
"p95_ms": 105.2,
|
| 35 |
+
"prompts_per_s": 30.11,
|
| 36 |
+
"throttled": [],
|
| 37 |
+
"fan_state": []
|
| 38 |
+
},
|
| 39 |
+
{
|
| 40 |
+
"minute": 2,
|
| 41 |
+
"n": 1745,
|
| 42 |
+
"temp_c": 91.9,
|
| 43 |
+
"clock_mhz": 3094,
|
| 44 |
+
"mean_ms": 34.4,
|
| 45 |
+
"p50_ms": 14.9,
|
| 46 |
+
"p95_ms": 113.7,
|
| 47 |
+
"prompts_per_s": 29.08,
|
| 48 |
+
"throttled": [],
|
| 49 |
+
"fan_state": []
|
| 50 |
+
},
|
| 51 |
+
{
|
| 52 |
+
"minute": 3,
|
| 53 |
+
"n": 1528,
|
| 54 |
+
"temp_c": 91.9,
|
| 55 |
+
"clock_mhz": 2745,
|
| 56 |
+
"mean_ms": 39.2,
|
| 57 |
+
"p50_ms": 15.8,
|
| 58 |
+
"p95_ms": 128.2,
|
| 59 |
+
"prompts_per_s": 25.47,
|
| 60 |
+
"throttled": [],
|
| 61 |
+
"fan_state": []
|
| 62 |
+
},
|
| 63 |
+
{
|
| 64 |
+
"minute": 4,
|
| 65 |
+
"n": 1501,
|
| 66 |
+
"temp_c": 91.9,
|
| 67 |
+
"clock_mhz": 2819,
|
| 68 |
+
"mean_ms": 39.9,
|
| 69 |
+
"p50_ms": 16.4,
|
| 70 |
+
"p95_ms": 133.5,
|
| 71 |
+
"prompts_per_s": 25.02,
|
| 72 |
+
"throttled": [],
|
| 73 |
+
"fan_state": []
|
| 74 |
+
},
|
| 75 |
+
{
|
| 76 |
+
"minute": 5,
|
| 77 |
+
"n": 971,
|
| 78 |
+
"temp_c": 88.9,
|
| 79 |
+
"clock_mhz": 2703,
|
| 80 |
+
"mean_ms": 61.8,
|
| 81 |
+
"p50_ms": 25.0,
|
| 82 |
+
"p95_ms": 235.3,
|
| 83 |
+
"prompts_per_s": 16.18,
|
| 84 |
+
"throttled": [],
|
| 85 |
+
"fan_state": []
|
| 86 |
+
},
|
| 87 |
+
{
|
| 88 |
+
"minute": 6,
|
| 89 |
+
"n": 1063,
|
| 90 |
+
"temp_c": 89.9,
|
| 91 |
+
"clock_mhz": 2966,
|
| 92 |
+
"mean_ms": 56.3,
|
| 93 |
+
"p50_ms": 22.9,
|
| 94 |
+
"p95_ms": 198.6,
|
| 95 |
+
"prompts_per_s": 17.72,
|
| 96 |
+
"throttled": [],
|
| 97 |
+
"fan_state": []
|
| 98 |
+
},
|
| 99 |
+
{
|
| 100 |
+
"minute": 7,
|
| 101 |
+
"n": 1155,
|
| 102 |
+
"temp_c": 84.9,
|
| 103 |
+
"clock_mhz": 2936,
|
| 104 |
+
"mean_ms": 52.0,
|
| 105 |
+
"p50_ms": 20.4,
|
| 106 |
+
"p95_ms": 193.2,
|
| 107 |
+
"prompts_per_s": 19.25,
|
| 108 |
+
"throttled": [],
|
| 109 |
+
"fan_state": []
|
| 110 |
+
},
|
| 111 |
+
{
|
| 112 |
+
"minute": 8,
|
| 113 |
+
"n": 1005,
|
| 114 |
+
"temp_c": 86.9,
|
| 115 |
+
"clock_mhz": 2815,
|
| 116 |
+
"mean_ms": 59.7,
|
| 117 |
+
"p50_ms": 24.3,
|
| 118 |
+
"p95_ms": 207.0,
|
| 119 |
+
"prompts_per_s": 16.75,
|
| 120 |
+
"throttled": [],
|
| 121 |
+
"fan_state": []
|
| 122 |
+
},
|
| 123 |
+
{
|
| 124 |
+
"minute": 9,
|
| 125 |
+
"n": 1215,
|
| 126 |
+
"temp_c": 84.9,
|
| 127 |
+
"clock_mhz": 2982,
|
| 128 |
+
"mean_ms": 49.5,
|
| 129 |
+
"p50_ms": 20.2,
|
| 130 |
+
"p95_ms": 175.5,
|
| 131 |
+
"prompts_per_s": 20.25,
|
| 132 |
+
"throttled": [],
|
| 133 |
+
"fan_state": []
|
| 134 |
+
},
|
| 135 |
+
{
|
| 136 |
+
"minute": 10,
|
| 137 |
+
"n": 1121,
|
| 138 |
+
"temp_c": 81.9,
|
| 139 |
+
"clock_mhz": 2969,
|
| 140 |
+
"mean_ms": 53.5,
|
| 141 |
+
"p50_ms": 21.9,
|
| 142 |
+
"p95_ms": 184.4,
|
| 143 |
+
"prompts_per_s": 18.68,
|
| 144 |
+
"throttled": [],
|
| 145 |
+
"fan_state": []
|
| 146 |
+
}
|
| 147 |
+
],
|
| 148 |
+
"passes": [
|
| 149 |
+
{
|
| 150 |
+
"pass": 1,
|
| 151 |
+
"n": 2340,
|
| 152 |
+
"complete": true,
|
| 153 |
+
"temp_min_c": 51.9,
|
| 154 |
+
"temp_max_c": 90.9,
|
| 155 |
+
"clock_mhz": 3067,
|
| 156 |
+
"mean_ms": 33.8,
|
| 157 |
+
"p50_ms": 14.6,
|
| 158 |
+
"p95_ms": 111.0,
|
| 159 |
+
"prompts_per_s": 29.59
|
| 160 |
+
},
|
| 161 |
+
{
|
| 162 |
+
"pass": 2,
|
| 163 |
+
"n": 2340,
|
| 164 |
+
"complete": true,
|
| 165 |
+
"temp_min_c": 83.9,
|
| 166 |
+
"temp_max_c": 91.9,
|
| 167 |
+
"clock_mhz": 2838,
|
| 168 |
+
"mean_ms": 37.5,
|
| 169 |
+
"p50_ms": 15.6,
|
| 170 |
+
"p95_ms": 121.4,
|
| 171 |
+
"prompts_per_s": 26.67
|
| 172 |
+
},
|
| 173 |
+
{
|
| 174 |
+
"pass": 3,
|
| 175 |
+
"n": 2340,
|
| 176 |
+
"complete": true,
|
| 177 |
+
"temp_min_c": 81.9,
|
| 178 |
+
"temp_max_c": 91.9,
|
| 179 |
+
"clock_mhz": 2872,
|
| 180 |
+
"mean_ms": 42.4,
|
| 181 |
+
"p50_ms": 17.0,
|
| 182 |
+
"p95_ms": 150.4,
|
| 183 |
+
"prompts_per_s": 23.56
|
| 184 |
+
},
|
| 185 |
+
{
|
| 186 |
+
"pass": 4,
|
| 187 |
+
"n": 2340,
|
| 188 |
+
"complete": true,
|
| 189 |
+
"temp_min_c": 81.9,
|
| 190 |
+
"temp_max_c": 89.9,
|
| 191 |
+
"clock_mhz": 2853,
|
| 192 |
+
"mean_ms": 55.8,
|
| 193 |
+
"p50_ms": 22.5,
|
| 194 |
+
"p95_ms": 202.0,
|
| 195 |
+
"prompts_per_s": 17.93
|
| 196 |
+
},
|
| 197 |
+
{
|
| 198 |
+
"pass": 5,
|
| 199 |
+
"n": 2340,
|
| 200 |
+
"complete": true,
|
| 201 |
+
"temp_min_c": 81.9,
|
| 202 |
+
"temp_max_c": 86.9,
|
| 203 |
+
"clock_mhz": 2959,
|
| 204 |
+
"mean_ms": 55.2,
|
| 205 |
+
"p50_ms": 22.7,
|
| 206 |
+
"p95_ms": 196.2,
|
| 207 |
+
"prompts_per_s": 18.11
|
| 208 |
+
},
|
| 209 |
+
{
|
| 210 |
+
"pass": 6,
|
| 211 |
+
"n": 1411,
|
| 212 |
+
"complete": false,
|
| 213 |
+
"temp_min_c": 79.9,
|
| 214 |
+
"temp_max_c": 82.9,
|
| 215 |
+
"clock_mhz": 2954,
|
| 216 |
+
"mean_ms": 52.5,
|
| 217 |
+
"p50_ms": 21.3,
|
| 218 |
+
"p95_ms": 184.8,
|
| 219 |
+
"prompts_per_s": 19.04
|
| 220 |
+
}
|
| 221 |
+
],
|
| 222 |
+
"accuracy": {
|
| 223 |
+
"curated": {
|
| 224 |
+
"n": 371,
|
| 225 |
+
"exact": 99.46,
|
| 226 |
+
"action": 99.73
|
| 227 |
+
},
|
| 228 |
+
"wifi_holdout": {
|
| 229 |
+
"n": 461,
|
| 230 |
+
"exact": 100.0,
|
| 231 |
+
"action": 100.0
|
| 232 |
+
},
|
| 233 |
+
"gap11_holdout": {
|
| 234 |
+
"n": 696,
|
| 235 |
+
"exact": 99.28,
|
| 236 |
+
"action": 100.0
|
| 237 |
+
},
|
| 238 |
+
"B_golden_final": {
|
| 239 |
+
"n": 384,
|
| 240 |
+
"exact": 97.4,
|
| 241 |
+
"action": 97.4
|
| 242 |
+
},
|
| 243 |
+
"A_practical-holdout": {
|
| 244 |
+
"n": 428,
|
| 245 |
+
"exact": 92.06,
|
| 246 |
+
"action": 94.16
|
| 247 |
+
}
|
| 248 |
+
},
|
| 249 |
+
"accuracy_all": {
|
| 250 |
+
"n": 2340,
|
| 251 |
+
"exact": 97.82,
|
| 252 |
+
"action": 98.46
|
| 253 |
+
},
|
| 254 |
+
"threads": {
|
| 255 |
+
"OPENBLAS_NUM_THREADS": "4",
|
| 256 |
+
"OMP_NUM_THREADS": "4"
|
| 257 |
+
}
|
| 258 |
+
}
|
eval/bench_results/laptop_i7-1360P_threads.json
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"default": {
|
| 3 |
+
"n": 300,
|
| 4 |
+
"p50_ms": 49.2,
|
| 5 |
+
"p95_ms": 519.9,
|
| 6 |
+
"mean_ms": 130.1
|
| 7 |
+
},
|
| 8 |
+
"1": {
|
| 9 |
+
"n": 300,
|
| 10 |
+
"p50_ms": 13.2,
|
| 11 |
+
"p95_ms": 113.0,
|
| 12 |
+
"mean_ms": 32.6
|
| 13 |
+
},
|
| 14 |
+
"2": {
|
| 15 |
+
"n": 300,
|
| 16 |
+
"p50_ms": 13.6,
|
| 17 |
+
"p95_ms": 108.2,
|
| 18 |
+
"mean_ms": 31.6
|
| 19 |
+
},
|
| 20 |
+
"4": {
|
| 21 |
+
"n": 300,
|
| 22 |
+
"p50_ms": 13.5,
|
| 23 |
+
"p95_ms": 99.6,
|
| 24 |
+
"mean_ms": 30.7
|
| 25 |
+
}
|
| 26 |
+
}
|
eval/bench_results/rpi5_16gb.json
ADDED
|
@@ -0,0 +1,278 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"device": {
|
| 3 |
+
"platform": "Linux-6.12.47+rpt-rpi-2712-aarch64-with-glibc2.41",
|
| 4 |
+
"python": "3.13.5",
|
| 5 |
+
"machine": "aarch64",
|
| 6 |
+
"numpy": "2.2.4",
|
| 7 |
+
"model": "Raspberry Pi 5 Model B Rev 1.1",
|
| 8 |
+
"cores": 4,
|
| 9 |
+
"governor": "ondemand"
|
| 10 |
+
},
|
| 11 |
+
"model_load_s": 0.2,
|
| 12 |
+
"params": 6441472,
|
| 13 |
+
"idle": {
|
| 14 |
+
"temp_c": 38.5,
|
| 15 |
+
"clock_mhz": 1500
|
| 16 |
+
},
|
| 17 |
+
"load": {
|
| 18 |
+
"prompts": 8334,
|
| 19 |
+
"wall_s": 600.1,
|
| 20 |
+
"p50_ms": 30.2,
|
| 21 |
+
"p95_ms": 243.9,
|
| 22 |
+
"p99_ms": 281.6,
|
| 23 |
+
"mean_ms": 72.0,
|
| 24 |
+
"max_temp_c": 59.8,
|
| 25 |
+
"throttled_any": [
|
| 26 |
+
"0x0"
|
| 27 |
+
]
|
| 28 |
+
},
|
| 29 |
+
"windows": [
|
| 30 |
+
{
|
| 31 |
+
"minute": 1,
|
| 32 |
+
"n": 831,
|
| 33 |
+
"temp_c": 54.9,
|
| 34 |
+
"clock_mhz": 2400,
|
| 35 |
+
"mean_ms": 72.2,
|
| 36 |
+
"p50_ms": 30.7,
|
| 37 |
+
"p95_ms": 248.4,
|
| 38 |
+
"prompts_per_s": 13.86,
|
| 39 |
+
"throttled": [
|
| 40 |
+
"0x0"
|
| 41 |
+
],
|
| 42 |
+
"fan_state": [
|
| 43 |
+
"1"
|
| 44 |
+
]
|
| 45 |
+
},
|
| 46 |
+
{
|
| 47 |
+
"minute": 2,
|
| 48 |
+
"n": 806,
|
| 49 |
+
"temp_c": 57.6,
|
| 50 |
+
"clock_mhz": 2400,
|
| 51 |
+
"mean_ms": 74.5,
|
| 52 |
+
"p50_ms": 31.2,
|
| 53 |
+
"p95_ms": 242.3,
|
| 54 |
+
"prompts_per_s": 13.43,
|
| 55 |
+
"throttled": [
|
| 56 |
+
"0x0"
|
| 57 |
+
],
|
| 58 |
+
"fan_state": [
|
| 59 |
+
"1"
|
| 60 |
+
]
|
| 61 |
+
},
|
| 62 |
+
{
|
| 63 |
+
"minute": 3,
|
| 64 |
+
"n": 870,
|
| 65 |
+
"temp_c": 57.6,
|
| 66 |
+
"clock_mhz": 2400,
|
| 67 |
+
"mean_ms": 68.9,
|
| 68 |
+
"p50_ms": 28.3,
|
| 69 |
+
"p95_ms": 241.9,
|
| 70 |
+
"prompts_per_s": 14.5,
|
| 71 |
+
"throttled": [
|
| 72 |
+
"0x0"
|
| 73 |
+
],
|
| 74 |
+
"fan_state": [
|
| 75 |
+
"1"
|
| 76 |
+
]
|
| 77 |
+
},
|
| 78 |
+
{
|
| 79 |
+
"minute": 4,
|
| 80 |
+
"n": 817,
|
| 81 |
+
"temp_c": 58.7,
|
| 82 |
+
"clock_mhz": 2400,
|
| 83 |
+
"mean_ms": 73.5,
|
| 84 |
+
"p50_ms": 31.7,
|
| 85 |
+
"p95_ms": 247.8,
|
| 86 |
+
"prompts_per_s": 13.62,
|
| 87 |
+
"throttled": [
|
| 88 |
+
"0x0"
|
| 89 |
+
],
|
| 90 |
+
"fan_state": [
|
| 91 |
+
"1"
|
| 92 |
+
]
|
| 93 |
+
},
|
| 94 |
+
{
|
| 95 |
+
"minute": 5,
|
| 96 |
+
"n": 826,
|
| 97 |
+
"temp_c": 59.8,
|
| 98 |
+
"clock_mhz": 2400,
|
| 99 |
+
"mean_ms": 72.4,
|
| 100 |
+
"p50_ms": 29.9,
|
| 101 |
+
"p95_ms": 240.8,
|
| 102 |
+
"prompts_per_s": 13.77,
|
| 103 |
+
"throttled": [
|
| 104 |
+
"0x0"
|
| 105 |
+
],
|
| 106 |
+
"fan_state": [
|
| 107 |
+
"1"
|
| 108 |
+
]
|
| 109 |
+
},
|
| 110 |
+
{
|
| 111 |
+
"minute": 6,
|
| 112 |
+
"n": 853,
|
| 113 |
+
"temp_c": 59.8,
|
| 114 |
+
"clock_mhz": 2400,
|
| 115 |
+
"mean_ms": 70.5,
|
| 116 |
+
"p50_ms": 28.9,
|
| 117 |
+
"p95_ms": 243.1,
|
| 118 |
+
"prompts_per_s": 14.22,
|
| 119 |
+
"throttled": [
|
| 120 |
+
"0x0"
|
| 121 |
+
],
|
| 122 |
+
"fan_state": [
|
| 123 |
+
"1",
|
| 124 |
+
"2"
|
| 125 |
+
]
|
| 126 |
+
},
|
| 127 |
+
{
|
| 128 |
+
"minute": 7,
|
| 129 |
+
"n": 839,
|
| 130 |
+
"temp_c": 58.2,
|
| 131 |
+
"clock_mhz": 2400,
|
| 132 |
+
"mean_ms": 71.5,
|
| 133 |
+
"p50_ms": 30.8,
|
| 134 |
+
"p95_ms": 244.4,
|
| 135 |
+
"prompts_per_s": 13.98,
|
| 136 |
+
"throttled": [
|
| 137 |
+
"0x0"
|
| 138 |
+
],
|
| 139 |
+
"fan_state": [
|
| 140 |
+
"2"
|
| 141 |
+
]
|
| 142 |
+
},
|
| 143 |
+
{
|
| 144 |
+
"minute": 8,
|
| 145 |
+
"n": 827,
|
| 146 |
+
"temp_c": 58.2,
|
| 147 |
+
"clock_mhz": 2400,
|
| 148 |
+
"mean_ms": 72.5,
|
| 149 |
+
"p50_ms": 29.5,
|
| 150 |
+
"p95_ms": 243.5,
|
| 151 |
+
"prompts_per_s": 13.78,
|
| 152 |
+
"throttled": [
|
| 153 |
+
"0x0"
|
| 154 |
+
],
|
| 155 |
+
"fan_state": [
|
| 156 |
+
"2"
|
| 157 |
+
]
|
| 158 |
+
},
|
| 159 |
+
{
|
| 160 |
+
"minute": 9,
|
| 161 |
+
"n": 837,
|
| 162 |
+
"temp_c": 58.2,
|
| 163 |
+
"clock_mhz": 2400,
|
| 164 |
+
"mean_ms": 71.7,
|
| 165 |
+
"p50_ms": 29.6,
|
| 166 |
+
"p95_ms": 245.4,
|
| 167 |
+
"prompts_per_s": 13.95,
|
| 168 |
+
"throttled": [
|
| 169 |
+
"0x0"
|
| 170 |
+
],
|
| 171 |
+
"fan_state": [
|
| 172 |
+
"2"
|
| 173 |
+
]
|
| 174 |
+
},
|
| 175 |
+
{
|
| 176 |
+
"minute": 10,
|
| 177 |
+
"n": 827,
|
| 178 |
+
"temp_c": 58.7,
|
| 179 |
+
"clock_mhz": 2400,
|
| 180 |
+
"mean_ms": 72.5,
|
| 181 |
+
"p50_ms": 31.4,
|
| 182 |
+
"p95_ms": 241.1,
|
| 183 |
+
"prompts_per_s": 13.78,
|
| 184 |
+
"throttled": [
|
| 185 |
+
"0x0"
|
| 186 |
+
],
|
| 187 |
+
"fan_state": [
|
| 188 |
+
"2"
|
| 189 |
+
]
|
| 190 |
+
}
|
| 191 |
+
],
|
| 192 |
+
"passes": [
|
| 193 |
+
{
|
| 194 |
+
"pass": 1,
|
| 195 |
+
"n": 2340,
|
| 196 |
+
"complete": true,
|
| 197 |
+
"temp_min_c": 41.1,
|
| 198 |
+
"temp_max_c": 57.6,
|
| 199 |
+
"clock_mhz": 2400,
|
| 200 |
+
"mean_ms": 72.2,
|
| 201 |
+
"p50_ms": 30.4,
|
| 202 |
+
"p95_ms": 244.5,
|
| 203 |
+
"prompts_per_s": 13.86
|
| 204 |
+
},
|
| 205 |
+
{
|
| 206 |
+
"pass": 2,
|
| 207 |
+
"n": 2340,
|
| 208 |
+
"complete": true,
|
| 209 |
+
"temp_min_c": 57.1,
|
| 210 |
+
"temp_max_c": 59.8,
|
| 211 |
+
"clock_mhz": 2400,
|
| 212 |
+
"mean_ms": 72.0,
|
| 213 |
+
"p50_ms": 30.2,
|
| 214 |
+
"p95_ms": 243.9,
|
| 215 |
+
"prompts_per_s": 13.9
|
| 216 |
+
},
|
| 217 |
+
{
|
| 218 |
+
"pass": 3,
|
| 219 |
+
"n": 2340,
|
| 220 |
+
"complete": true,
|
| 221 |
+
"temp_min_c": 56.5,
|
| 222 |
+
"temp_max_c": 59.3,
|
| 223 |
+
"clock_mhz": 2400,
|
| 224 |
+
"mean_ms": 71.9,
|
| 225 |
+
"p50_ms": 29.9,
|
| 226 |
+
"p95_ms": 243.8,
|
| 227 |
+
"prompts_per_s": 13.91
|
| 228 |
+
},
|
| 229 |
+
{
|
| 230 |
+
"pass": 4,
|
| 231 |
+
"n": 1314,
|
| 232 |
+
"complete": false,
|
| 233 |
+
"temp_min_c": 56.5,
|
| 234 |
+
"temp_max_c": 58.7,
|
| 235 |
+
"clock_mhz": 2400,
|
| 236 |
+
"mean_ms": 71.9,
|
| 237 |
+
"p50_ms": 30.5,
|
| 238 |
+
"p95_ms": 242.5,
|
| 239 |
+
"prompts_per_s": 13.9
|
| 240 |
+
}
|
| 241 |
+
],
|
| 242 |
+
"accuracy": {
|
| 243 |
+
"curated": {
|
| 244 |
+
"n": 371,
|
| 245 |
+
"exact": 99.46,
|
| 246 |
+
"action": 99.73
|
| 247 |
+
},
|
| 248 |
+
"wifi_holdout": {
|
| 249 |
+
"n": 461,
|
| 250 |
+
"exact": 100.0,
|
| 251 |
+
"action": 100.0
|
| 252 |
+
},
|
| 253 |
+
"gap11_holdout": {
|
| 254 |
+
"n": 696,
|
| 255 |
+
"exact": 99.28,
|
| 256 |
+
"action": 100.0
|
| 257 |
+
},
|
| 258 |
+
"B_golden_final": {
|
| 259 |
+
"n": 384,
|
| 260 |
+
"exact": 97.4,
|
| 261 |
+
"action": 97.4
|
| 262 |
+
},
|
| 263 |
+
"A_practical-holdout": {
|
| 264 |
+
"n": 428,
|
| 265 |
+
"exact": 92.06,
|
| 266 |
+
"action": 94.16
|
| 267 |
+
}
|
| 268 |
+
},
|
| 269 |
+
"accuracy_all": {
|
| 270 |
+
"n": 2340,
|
| 271 |
+
"exact": 97.82,
|
| 272 |
+
"action": 98.46
|
| 273 |
+
},
|
| 274 |
+
"threads": {
|
| 275 |
+
"OPENBLAS_NUM_THREADS": "2",
|
| 276 |
+
"OMP_NUM_THREADS": "2"
|
| 277 |
+
}
|
| 278 |
+
}
|
eval/bench_results/rpi5_16gb_threads.json
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"default": {
|
| 3 |
+
"n": 300,
|
| 4 |
+
"p50_ms": 32.7,
|
| 5 |
+
"p95_ms": 286.1,
|
| 6 |
+
"mean_ms": 82.0
|
| 7 |
+
},
|
| 8 |
+
"1": {
|
| 9 |
+
"n": 300,
|
| 10 |
+
"p50_ms": 32.0,
|
| 11 |
+
"p95_ms": 295.2,
|
| 12 |
+
"mean_ms": 82.3
|
| 13 |
+
},
|
| 14 |
+
"2": {
|
| 15 |
+
"n": 300,
|
| 16 |
+
"p50_ms": 27.3,
|
| 17 |
+
"p95_ms": 232.6,
|
| 18 |
+
"mean_ms": 66.2
|
| 19 |
+
},
|
| 20 |
+
"4": {
|
| 21 |
+
"n": 300,
|
| 22 |
+
"p50_ms": 32.6,
|
| 23 |
+
"p95_ms": 280.5,
|
| 24 |
+
"mean_ms": 81.2
|
| 25 |
+
}
|
| 26 |
+
}
|
eval/bench_run_all.sh
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# usage: run_all.sh <python> <model> <data> <outdir> <thread options...>
|
| 2 |
+
PY=$1; M=$2; D=$3; O=$4; shift 4; best=""; bestms=999999
|
| 3 |
+
for t in "$@"; do
|
| 4 |
+
if [ "$t" = default ]; then env -u OPENBLAS_NUM_THREADS -u OMP_NUM_THREADS $PY bench_device.py --model $M --data $D --out $O/probe_$t.json --probe-only --probe-n 300
|
| 5 |
+
else OPENBLAS_NUM_THREADS=$t OMP_NUM_THREADS=$t $PY bench_device.py --model $M --data $D --out $O/probe_$t.json --probe-only --probe-n 300; fi
|
| 6 |
+
ms=$($PY -c "import json;print(json.load(open('$O/probe_$t.json'))['mean_ms'])"); echo "probe $t mean $ms"
|
| 7 |
+
if $PY -c "import sys;sys.exit(0 if $ms < $bestms else 1)"; then best=$t; bestms=$ms; fi
|
| 8 |
+
done
|
| 9 |
+
echo "best threads: $best"; sleep 120
|
| 10 |
+
if [ "$best" = default ]; then $PY bench_device.py --model $M --data $D --out $O/main.json --minutes 10
|
| 11 |
+
else OPENBLAS_NUM_THREADS=$best OMP_NUM_THREADS=$best $PY bench_device.py --model $M --data $D --out $O/main.json --minutes 10; fi
|
| 12 |
+
echo ALLDONE
|
eval/build_curated.py
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""Build the 'unique activity' test set: one held-out-template row per action, sampled from the model test split.
|
| 2 |
+
Prefers clean (no typo) variants and alternates Hinglish / English so the report reads naturally."""
|
| 3 |
+
import json, random, sys, os, collections
|
| 4 |
+
HERE = os.path.dirname(os.path.abspath(__file__)); ROOT = os.path.dirname(HERE)
|
| 5 |
+
sys.path.insert(0, os.path.join(ROOT, "model"))
|
| 6 |
+
from catalog import ACTIONS # noqa
|
| 7 |
+
random.seed(2026)
|
| 8 |
+
src = sys.argv[1] if len(sys.argv) > 1 else os.path.join(ROOT, "..", "union_model", "data", "test.jsonl")
|
| 9 |
+
rows = [json.loads(l) for l in open(src)]
|
| 10 |
+
by = collections.defaultdict(list)
|
| 11 |
+
for r in rows: by[r["action"]].append(r)
|
| 12 |
+
out = []
|
| 13 |
+
for a in ACTIONS:
|
| 14 |
+
cand = by.get(a, [])
|
| 15 |
+
if not cand: continue
|
| 16 |
+
clean = [r for r in cand if "typo" not in r.get("variant", "") and len(r["text"]) < 90] or cand
|
| 17 |
+
hi = [r for r in clean if any(w in r["text"].lower().split() for w in ("karo", "kar", "do", "batao", "dikhao", "kholo", "ka", "ki", "ke", "pe", "se", "hai", "kya"))]
|
| 18 |
+
en = [r for r in clean if r not in hi]
|
| 19 |
+
pick = random.choice(hi if (len(out) % 2 == 0 and hi) else (en or hi or clean))
|
| 20 |
+
dev = "pi" if ACTIONS[a]["platforms"] == ["pi"] else "windows" if ACTIONS[a]["platforms"] == ["windows"] else "both"
|
| 21 |
+
out.append({"text": pick["text"], "action": a, "target": pick["target"], "target_raw": pick.get("target_raw", pick["target"]), "device": dev, "risk": ACTIONS[a]["risk"], "group": pick["group"]})
|
| 22 |
+
with open(os.path.join(HERE, "curated_prompts.jsonl"), "w", encoding="utf-8") as f:
|
| 23 |
+
for r in out: f.write(json.dumps(r, ensure_ascii=False) + "\n")
|
| 24 |
+
print("curated prompts:", len(out), "actions covered", len({r['action'] for r in out}), "of", len(ACTIONS))
|
eval/curated_prompts.jsonl
ADDED
|
@@ -0,0 +1,371 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{"text": "online class hai toh /dev/sda1 fstab me daalo zara", "action": "add_persistent_mount", "target": "add_persistent_mount device=\"/dev/sda1\"", "target_raw": "add_persistent_mount device=\"/dev/sda1\"", "device": "both", "risk": "caution", "group": "G7:para:g3:add_persistent_mount:hi:1:2"}
|
| 2 |
+
{"text": "pi 5 pe aeroplane modw off kar do", "action": "airplane_mode_off", "target": "airplane_mode_off", "target_raw": "airplane_mode_off", "device": "both", "risk": "safe", "group": "G8:dev:B:airplane_mode_off:hi:1"}
|
| 3 |
+
{"text": "turn on airplane mode abhi ke abhi", "action": "airplane_mode_on", "target": "airplane_mode_on", "target_raw": "airplane_mode_on", "device": "both", "risk": "caution", "group": "G5:pol:airplane_mode_on:0:0"}
|
| 4 |
+
{"text": "mummy bula rahi hai, virus dhundo", "action": "antivirus_scan", "target": "antivirus_scan", "target_raw": "antivirus_scan", "device": "both", "risk": "caution", "group": "B:antivirus_scan:hi:5"}
|
| 5 |
+
{"text": "on win 11 tmux sessoin dev se jdo", "action": "attach_session", "target": "attach_session name=\"dev\"", "target_raw": "attach_session name=\"dev\"", "device": "both", "risk": "safe", "group": "G8:dev:G7:con:attach_session:0"}
|
| 6 |
+
{"text": "please back up mmcblk0 to an image ji", "action": "backup_disk_image", "target": "backup_disk_image device=\"mmcblk0\"", "target_raw": "backup_disk_image device=\"mmcblk0\"", "device": "both", "risk": "critical", "group": "G3:backup_disk_image:en:3"}
|
| 7 |
+
{"text": "rpi 5 pe battery saver mode band kar do turant", "action": "battery_saver_off", "target": "battery_saver_off", "target_raw": "battery_saver_off", "device": "both", "risk": "safe", "group": "G8:dev:B:battery_saver_off:hi:3"}
|
| 8 |
+
{"text": "i am done for today, start power saver thanks", "action": "battery_saver_on", "target": "battery_saver_on", "target_raw": "battery_saver_on", "device": "both", "risk": "safe", "group": "B:battery_saver_on:en:0"}
|
| 9 |
+
{"text": "pin 12 ka board number batana", "action": "bcm_to_board", "target": "bcm_to_board pin=12", "target_raw": "bcm_to_board pin=12", "device": "pi", "risk": "safe", "group": "G7:para:g6:bcm_to_board:hi:1:1"}
|
| 10 |
+
{"text": "could you connect to my mi band", "action": "bluetooth_connect", "target": "bluetooth_connect device=\"mi band\"", "target_raw": "bluetooth_connect device=\"mi band\"", "device": "both", "risk": "safe", "group": "G7:para:g:bluetooth_connect:en:0:0"}
|
| 11 |
+
{"text": "presentation hai switch the bt off", "action": "bluetooth_off", "target": "bluetooth_off", "target_raw": "bluetooth_off", "device": "both", "risk": "caution", "group": "B:bluetooth_off:en:3"}
|
| 12 |
+
{"text": "bluetooth chalu kro plz", "action": "bluetooth_on", "target": "bluetooth_on", "target_raw": "bluetooth_on", "device": "both", "risk": "caution", "group": "B:bluetooth_on:hi:5"}
|
| 13 |
+
{"text": "22 number pin bcm me kya hai", "action": "board_to_bcm", "target": "board_to_bcm pin=22 numbering=board", "target_raw": "board_to_bcm pin=22 numbering=board", "device": "pi", "risk": "safe", "group": "G6:board_to_bcm:hi:9"}
|
| 14 |
+
{"text": "is page ko bookmark kar do right now", "action": "bookmark_page", "target": "bookmark_page", "target_raw": "bookmark_page", "device": "both", "risk": "safe", "group": "G5:para:g:bookmark_page:hi:0:1"}
|
| 15 |
+
{"text": "raspberry pi 5 ki screen light kam kar de turant", "action": "brightness_down", "target": "brightness_down", "target_raw": "brightness_down", "device": "both", "risk": "safe", "group": "G8:dev:B:brightness_down:hi:0"}
|
| 16 |
+
{"text": "screen brightness +doos bhai", "action": "brightness_up", "target": "brightness_up step=10", "target_raw": "brightness_up step=10", "device": "both", "risk": "safe", "group": "B:brightness_up:en:14"}
|
| 17 |
+
{"text": "pi i need to back page abhi ke abhi", "action": "browser_back", "target": "browser_back", "target_raw": "browser_back", "device": "both", "risk": "safe", "group": "G7:para:g:browser_back:en:3:0"}
|
| 18 |
+
{"text": "forward kar dijiyega", "action": "browser_forward", "target": "browser_forward", "target_raw": "browser_forward", "device": "both", "risk": "safe", "group": "G7:para:g:browser_forward:hi:2:2"}
|
| 19 |
+
{"text": "/opt/app me project build kar dena jaldi pls", "action": "build_project", "target": "build_project path=\"/opt/app\"", "target_raw": "build_project path=\"/opt/app\"", "device": "both", "risk": "caution", "group": "G7:para:g3:build_project:hi:0:0"}
|
| 20 |
+
{"text": "windows 11 ki 2 ki power 10 equals what", "action": "calculate", "target": "calculate expression=\"2 ki power 10\"", "target_raw": "calculate expression=\"2 ki power 10\"", "device": "both", "risk": "safe", "group": "G8:dev:G5:new:calculate:4"}
|
| 21 |
+
{"text": "bhaiya camera se photo lo", "action": "camera_photo", "target": "camera_photo", "target_raw": "camera_photo", "device": "both", "risk": "safe", "group": "B:camera_photo:en:5"}
|
| 22 |
+
{"text": "कैमरा से 10 मिनट वीडियो रिकॉर्ड करो", "action": "camera_video", "target": "camera_video amount=10 unit=min", "target_raw": "camera_video amount=10 unit=min", "device": "pi", "risk": "safe", "group": "G:camera_video:hi:1"}
|
| 23 |
+
{"text": "alarm cancel karo quickly", "action": "cancel_alarm", "target": "cancel_alarm", "target_raw": "cancel_alarm", "device": "both", "risk": "safe", "group": "G5:para:g:cancel_alarm:hi:0:2"}
|
| 24 |
+
{"text": "bhai please abort the scheduled shutdown please", "action": "cancel_shutdown", "target": "cancel_shutdown", "target_raw": "cancel_shutdown", "device": "both", "risk": "caution", "group": "A:cancel_shutdown/test/0"}
|
| 25 |
+
{"text": "switch off the timer, battery bachani hai", "action": "cancel_timer", "target": "cancel_timer", "target_raw": "cancel_timer", "device": "both", "risk": "safe", "group": "G5:para:g:cancel_timer:en:1:2"}
|
| 26 |
+
{"text": "mummy bula rahi hai, accelerator status bataiyega zara", "action": "check_ai_accelerator", "target": "check_ai_accelerator", "target_raw": "check_ai_accelerator", "device": "pi", "risk": "safe", "group": "G7:para:g2:check_ai_accelerator:hi:2:0"}
|
| 27 |
+
{"text": "padhai karni hai so nvme0n1 ka filesystem check karna plz on the rpi 5", "action": "check_filesystem", "target": "check_filesystem device=\"nvme0n1\"", "target_raw": "check_filesystem device=\"nvme0n1\"", "device": "both", "risk": "critical", "group": "G8:dev:G5:para:g3:check_filesystem:hi:0:1"}
|
| 28 |
+
{"text": "look at port 5900 on 8.8.8.8", "action": "check_port", "target": "check_port host=\"8.8.8.8\" port=5900", "target_raw": "check_port host=\"8.8.8.8\" port=5900", "device": "both", "risk": "safe", "group": "G5:para:g2:check_port:en:0:1"}
|
| 29 |
+
{"text": "ek kaam karo is my system up to date", "action": "check_updates", "target": "check_updates", "target_raw": "check_updates", "device": "both", "risk": "safe", "group": "B:check_updates:en:4"}
|
| 30 |
+
{"text": "led bujhao", "action": "clarify", "target": "clarify action=gpio_off", "target_raw": "clarify action=gpio_off", "device": "both", "risk": "safe", "group": "G6:clarify:gpio_off:1"}
|
| 31 |
+
{"text": "yaar saari notifications hatao on the rpi 5", "action": "clear_notifications", "target": "clear_notifications", "target_raw": "clear_notifications", "device": "both", "risk": "safe", "group": "G8:dev:G5:para:g:clear_notifications:hi:0:0"}
|
| 32 |
+
{"text": "pi5 me temproary data mitao", "action": "clear_temp_files", "target": "clear_temp_files", "target_raw": "clear_temp_files", "device": "both", "risk": "critical", "group": "G8:dev:B:clear_temp_files:hi:1"}
|
| 33 |
+
{"text": "presentation hai toh copy kiya hua sab dikhao", "action": "clipboard_history", "target": "clipboard_history", "target_raw": "clipboard_history", "device": "both", "risk": "safe", "group": "G5:para:g:clipboard_history:hi:1:2"}
|
| 34 |
+
{"text": "i need to rpi-clone to mmcblk0", "action": "clone_disk", "target": "clone_disk device=\"mmcblk0\"", "target_raw": "clone_disk device=\"mmcblk0\"", "device": "both", "risk": "critical", "group": "G7:para:g3:clone_disk:en:2:2"}
|
| 35 |
+
{"text": "close spreadsheet window because main so raha hoon windows 11 pe", "action": "close_app", "target": "close_app app=excel", "target_raw": "close_app app=excel", "device": "both", "risk": "caution", "group": "G8:dev:B:close_app:en:6"}
|
| 36 |
+
{"text": "mere windows 11 laptop pe hi is tab ko band karo abhi", "action": "close_tab", "target": "close_tab", "target_raw": "close_tab", "device": "both", "risk": "safe", "group": "G8:dev:B:close_tab:hi:2"}
|
| 37 |
+
{"text": "can you pls close this windows 11 pe", "action": "close_window", "target": "close_window", "target_raw": "close_window", "device": "both", "risk": "caution", "group": "G8:dev:B:close_window:en:1"}
|
| 38 |
+
{"text": "create an archive of fimwoot dosti", "action": "compress_file", "target": "compress_file path=\"fimwoot dosti\"", "target_raw": "compress_file path=\"fimwoot dosti\"", "device": "both", "risk": "safe", "group": "G:compress_file:en:2"}
|
| 39 |
+
{"text": "computer office-guest ka password Summer2025 hai connect kar do jaldi se", "action": "connect_wifi", "target": "connect_wifi ssid=\"office-guest\" password=\"summer2025\"", "target_raw": "connect_wifi ssid=\"office-guest\" password=\"Summer2025\"", "device": "both", "risk": "caution", "group": "G4:connect_wifi:5"}
|
| 40 |
+
{"text": "note.wav ko 16khz wav me convert kar dena plz", "action": "convert_media", "target": "convert_media file=\"note.wav\" format=\"16khz wav\"", "target_raw": "convert_media file=\"note.wav\" format=\"16khz wav\"", "device": "both", "risk": "caution", "group": "G5:para:g3:convert_media:hi:0:0"}
|
| 41 |
+
{"text": "raspberry pi 5 pe copy kao", "action": "copy", "target": "copy", "target_raw": "copy", "device": "both", "risk": "safe", "group": "G8:dev:G5:syn:copy:1"}
|
| 42 |
+
{"text": "could you please duplicate the file \"demo/old17.txt\" as \"demo/new11.txt\" please", "action": "copy_file", "target": "copy_file src=\"demo/old17.txt\" dst=\"demo/new11.txt\"", "target_raw": "copy_file src=\"demo/old17.txt\" dst=\"demo/new11.txt\"", "device": "both", "risk": "caution", "group": "A:copy_file/test/0"}
|
| 43 |
+
{"text": "jaldi se github.com pe ssh key bhejo please", "action": "copy_ssh_key", "target": "copy_ssh_key host=\"github.com\"", "target_raw": "copy_ssh_key host=\"github.com\"", "device": "both", "risk": "caution", "group": "G7:para:g3:copy_ssh_key:hi:0:0"}
|
| 44 |
+
{"text": "hey assistant aaj shaam 6 baje ke liye sprint review schedule karo, aankh dukh rahi hai", "action": "create_calendar_event", "target": "create_calendar_event title=\"sprint review\" time=\"aaj shaam 6 baje\"", "target_raw": "create_calendar_event title=\"sprint review\" time=\"aaj shaam 6 baje\"", "device": "both", "risk": "safe", "group": "G5:new:create_calendar_event:6"}
|
| 45 |
+
{"text": "bhai \"work/report1.txt\" naam ki nayi file banaana please on the rpi 5", "action": "create_file", "target": "create_file path=\"work/report1.txt\"", "target_raw": "create_file path=\"work/report1.txt\"", "device": "both", "risk": "caution", "group": "G8:dev:A:create_file/contrastive/0"}
|
| 46 |
+
{"text": "bachche so rahe hain, \"tax 2025/old\" directory bana quickly", "action": "create_folder", "target": "create_folder path=\"tax 2025/old\"", "target_raw": "create_folder path=\"tax 2025/old\"", "device": "both", "risk": "caution", "group": "G5:fileop:create_folder:7"}
|
| 47 |
+
{"text": "could you mqtt-bridge ko boot pe chalane ki service banao bhai", "action": "create_service", "target": "create_service name=\"mqtt-bridge\"", "target_raw": "create_service name=\"mqtt-bridge\"", "device": "both", "risk": "critical", "group": "G7:para:g3:create_service:hi:1:1"}
|
| 48 |
+
{"text": "~/script.sh ko /mnt/usb se link karo abhi", "action": "create_symlink", "target": "create_symlink path=\"~/script.sh\" link=\"/mnt/usb\"", "target_raw": "create_symlink path=\"~/script.sh\" link=\"/mnt/usb\"", "device": "both", "risk": "caution", "group": "G3:create_symlink:hi:55"}
|
| 49 |
+
{"text": "./deploy.sh me virtual environment setup karo plz", "action": "create_virtualenv", "target": "create_virtualenv path=\"./deploy.sh\"", "target_raw": "create_virtualenv path=\"./deploy.sh\"", "device": "both", "risk": "caution", "group": "G3:create_virtualenv:hi:94"}
|
| 50 |
+
{"text": "isko cut karo.", "action": "cut", "target": "cut", "target_raw": "cut", "device": "both", "risk": "safe", "group": "B:cut:hi:1"}
|
| 51 |
+
{"text": "swich off dark mod bhai windows 11 pe", "action": "dark_mode_off", "target": "dark_mode_off", "target_raw": "dark_mode_off", "device": "both", "risk": "safe", "group": "G8:dev:B:dark_mode_off:en:0"}
|
| 52 |
+
{"text": "black theme laga do, bahut der ho gayi on windows 11", "action": "dark_mode_on", "target": "dark_mode_on", "target_raw": "dark_mode_on", "device": "both", "risk": "safe", "group": "G8:dev:B:dark_mode_on:hi:2"}
|
| 53 |
+
{"text": "is windows 11 pc pe trash baccho_3.pptx", "action": "delete_file", "target": "delete_file path=\"baccho_3.pptx\"", "target_raw": "delete_file path=\"baccho_3.pptx\"", "device": "both", "risk": "critical", "group": "G8:dev:B:delete_file:en:3"}
|
| 54 |
+
{"text": "please jaldi disable unattended upgrades", "action": "disable_auto_updates", "target": "disable_auto_updates", "target_raw": "disable_auto_updates", "device": "both", "risk": "caution", "group": "G5:para:g3:disable_auto_updates:en:1:0"}
|
| 55 |
+
{"text": "on win 11 local dvices discover kar dijiye", "action": "discover_devices", "target": "discover_devices", "target_raw": "discover_devices", "device": "both", "risk": "safe", "group": "G8:dev:G7:para:g2:discover_devices:hi:1:0"}
|
| 56 |
+
{"text": "switch display to sirf laptop screen", "action": "display_mode", "target": "display_mode mode=pc_only", "target_raw": "display_mode mode=pc_only", "device": "both", "risk": "safe", "group": "B:display_mode:en:3"}
|
| 57 |
+
{"text": "do not disturb off karo, main chai peene ja raha hoon", "action": "dnd_off", "target": "dnd_off", "target_raw": "dnd_off", "device": "both", "risk": "safe", "group": "G5:pol:dnd_off:0:2"}
|
| 58 |
+
{"text": "dnd on krao", "action": "dnd_on", "target": "dnd_on", "target_raw": "dnd_on", "device": "both", "risk": "safe", "group": "G5:pol:dnd_on:1:2"}
|
| 59 |
+
{"text": "mere liye example.com domain ka dns check karo for me", "action": "dns_lookup", "target": "dns_lookup host=\"example.com\"", "target_raw": "dns_lookup host=\"example.com\"", "device": "both", "risk": "safe", "group": "A:dns_lookup/test/1"}
|
| 60 |
+
{"text": "can you bring up docker compose services, ghar ja raha hoon", "action": "docker_compose_up", "target": "docker_compose_up", "target_raw": "docker_compose_up", "device": "both", "risk": "caution", "group": "G7:para:g3:docker_compose_up:en:2:0"}
|
| 61 |
+
{"text": "could you please list running containers abhi ke abhi", "action": "docker_list", "target": "docker_list", "target_raw": "docker_list", "device": "both", "risk": "safe", "group": "G7:para:g3:docker_list:en:0:1"}
|
| 62 |
+
{"text": "hey pi docker clean kar!", "action": "docker_prune", "target": "docker_prune", "target_raw": "docker_prune", "device": "both", "risk": "critical", "group": "G5:para:g3:docker_prune:hi:0:2"}
|
| 63 |
+
{"text": "docker se node-red run kar dena", "action": "docker_run", "target": "docker_run image=\"node-red\"", "target_raw": "docker_run image=\"node-red\"", "device": "both", "risk": "caution", "group": "G5:para:g3:docker_run:hi:1:2"}
|
| 64 |
+
{"text": "web container bandh karo, main so raha hoon", "action": "docker_stop", "target": "docker_stop container=\"web\"", "target_raw": "docker_stop container=\"web\"", "device": "both", "risk": "caution", "group": "G5:para:g3:docker_stop:hi:0:0"}
|
| 65 |
+
{"text": "hey laptop wgivve me https://example.com/file.tar.gz windows 11 pe", "action": "download_file", "target": "download_file url=\"https://example.com/file.tar.gz\"", "target_raw": "download_file url=\"https://example.com/file.tar.gz\"", "device": "both", "risk": "caution", "group": "G8:dev:G7:para:g3:download_file:en:1:1"}
|
| 66 |
+
{"text": "hi i need to free the cached memory", "action": "drop_caches", "target": "drop_caches", "target_raw": "drop_caches", "device": "both", "risk": "critical", "group": "G7:para:g3:drop_caches:en:2:1"}
|
| 67 |
+
{"text": "meeting shuru hone wali hai, config.txt edit karo", "action": "edit_system_config", "target": "edit_system_config", "target_raw": "edit_system_config", "device": "both", "risk": "critical", "group": "G2:edit_system_config:hi:66"}
|
| 68 |
+
{"text": "can you emoji wala keyboard khol", "action": "emoji_panel", "target": "emoji_panel", "target_raw": "emoji_panel", "device": "both", "risk": "safe", "group": "G5:para:g:emoji_panel:hi:1:2"}
|
| 69 |
+
{"text": "kachra dabba khali kr do yaar", "action": "empty_recycle_bin", "target": "empty_recycle_bin", "target_raw": "empty_recycle_bin", "device": "both", "risk": "critical", "group": "B:empty_recycle_bin:hi:0"}
|
| 70 |
+
{"text": "ji could you install security patches automatically", "action": "enable_auto_updates", "target": "enable_auto_updates", "target_raw": "enable_auto_updates", "device": "both", "risk": "caution", "group": "G7:para:g3:enable_auto_updates:en:2:0"}
|
| 71 |
+
{"text": "switch on zram swap jaldi se", "action": "enable_zram", "target": "enable_zram", "target_raw": "enable_zram", "device": "both", "risk": "caution", "group": "G7:para:g3:enable_zram:en:2:2"}
|
| 72 |
+
{"text": "poora sd card use karna.", "action": "expand_filesystem", "target": "expand_filesystem", "target_raw": "expand_filesystem", "device": "pi", "risk": "critical", "group": "G5:para:g3:expand_filesystem:hi:2:0"}
|
| 73 |
+
{"text": "pi5 me invoice.zip khop ke files nikalo now", "action": "extract_archive", "target": "extract_archive path=\"invoice.zip\"", "target_raw": "extract_archive path=\"invoice.zip\"", "device": "both", "risk": "safe", "group": "G8:dev:G:extract_archive:hi:1"}
|
| 74 |
+
{"text": "BHAI PLEASE RESTORE FACTORY SETTINGS ON THIS COMPUTER NA", "action": "factory_reset", "target": "factory_reset", "target_raw": "factory_reset", "device": "both", "risk": "critical", "group": "A:factory_reset/test/0"}
|
| 75 |
+
{"text": "pi 5 pe i want to whee is ollama installed", "action": "find_command", "target": "find_command name=\"ollama\"", "target_raw": "find_command name=\"ollama\"", "device": "both", "risk": "safe", "group": "G8:dev:G7:para:g2:find_command:en:0:0"}
|
| 76 |
+
{"text": "i need to look for redis cache on the page", "action": "find_in_page", "target": "find_in_page query=\"redis cache\"", "target_raw": "find_in_page query=\"redis cache\"", "device": "both", "risk": "safe", "group": "G7:para:g:find_in_page:en:2:1"}
|
| 77 |
+
{"text": "rpi5 pe please allow prt 11434 in feerewall turant", "action": "firewall_allow", "target": "firewall_allow port=11434", "target_raw": "firewall_allow port=11434", "device": "both", "risk": "caution", "group": "G8:dev:G7:para:g3:firewall_allow:en:0:0"}
|
| 78 |
+
{"text": "i want to ufw deny 80", "action": "firewall_deny", "target": "firewall_deny port=80", "target_raw": "firewall_deny port=80", "device": "both", "risk": "critical", "group": "G7:para:g3:firewall_deny:en:2:1"}
|
| 79 |
+
{"text": "the firewall band karo, battery bachani hai", "action": "firewall_off", "target": "firewall_off", "target_raw": "firewall_off", "device": "both", "risk": "critical", "group": "G5:pol:firewall_off:1:3"}
|
| 80 |
+
{"text": "on win 11 enable the firewall.", "action": "firewall_on", "target": "firewall_on", "target_raw": "firewall_on", "device": "both", "risk": "caution", "group": "G8:dev:B:firewall_on:en:2"}
|
| 81 |
+
{"text": "system ke firewall ki details bata dena abhi", "action": "firewall_status", "target": "firewall_status", "target_raw": "firewall_status", "device": "both", "risk": "safe", "group": "A:show_firewall/test/1"}
|
| 82 |
+
{"text": "i want to add me to the gpio group now", "action": "fix_gpio_permissions", "target": "fix_gpio_permissions", "target_raw": "fix_gpio_permissions", "device": "pi", "risk": "caution", "group": "G7:para:g6:fix_gpio_permissions:en:1:2"}
|
| 83 |
+
{"text": "call aane wala hai toh launch rpi-update", "action": "flash_firmware", "target": "flash_firmware", "target_raw": "flash_firmware", "device": "both", "risk": "critical", "group": "G7:para:g3:flash_firmware:en:1:1"}
|
| 84 |
+
{"text": "kindly please flush my computer's dns cache please", "action": "flush_dns", "target": "flush_dns", "target_raw": "flush_dns", "device": "both", "risk": "caution", "group": "A:flush_dns/test/0"}
|
| 85 |
+
{"text": "bhai forget the network OnePlus Nord mere windows 11 pe", "action": "forget_wifi", "target": "forget_wifi ssid=\"oneplus nord\"", "target_raw": "forget_wifi ssid=\"OnePlus Nord\"", "device": "both", "risk": "caution", "group": "G8:dev:G4:forget_wifi:4"}
|
| 86 |
+
{"text": "HEY COMPUTER PLEASE FORMAT MY STORAGE DEVICE ABHI", "action": "format_drive", "target": "format_drive", "target_raw": "format_drive", "device": "both", "risk": "critical", "group": "A:format_drive/test/0"}
|
| 87 |
+
{"text": "rpi5 pe toggle full screen", "action": "fullscreen", "target": "fullscreen", "target_raw": "fullscreen", "device": "both", "risk": "safe", "group": "G8:dev:G:fullscreen:en:1"}
|
| 88 |
+
{"text": "bachche so rahe hain so print bandwidth usage", "action": "get_bandwidth_usage", "target": "get_bandwidth_usage", "target_raw": "get_bandwidth_usage", "device": "both", "risk": "safe", "group": "G7:para:g2:get_bandwidth_usage:en:0:1"}
|
| 89 |
+
{"text": "bhai laptop ki battery abhi kitni hai abhi", "action": "get_battery", "target": "get_battery", "target_raw": "get_battery", "device": "both", "risk": "safe", "group": "A:show_battery/test/1"}
|
| 90 |
+
{"text": "which firmware settings are active, i'll be back", "action": "get_boot_config", "target": "get_boot_config", "target_raw": "get_boot_config", "device": "pi", "risk": "safe", "group": "G2:get_boot_config:en:12"}
|
| 91 |
+
{"text": "raspberry pi 5 ki fetch previous bolt logs", "action": "get_boot_logs", "target": "get_boot_logs", "target_raw": "get_boot_logs", "device": "both", "risk": "safe", "group": "G8:dev:G7:para:g2:get_boot_logs:en:0:1"}
|
| 92 |
+
{"text": "systemd-analyze plz", "action": "get_boot_time", "target": "get_boot_time", "target_raw": "get_boot_time", "device": "both", "risk": "safe", "group": "G5:syn:get_boot_time:3"}
|
| 93 |
+
{"text": "bhai check my display brightness level kar sakte ho", "action": "get_brightness", "target": "get_brightness", "target_raw": "get_brightness", "device": "both", "risk": "safe", "group": "A:show_brightness/test/0"}
|
| 94 |
+
{"text": "please tell me the current pi cpu frequency please", "action": "get_cpu_clock", "target": "get_cpu_clock", "target_raw": "get_cpu_clock", "device": "pi", "risk": "safe", "group": "A:show_clock/test/0"}
|
| 95 |
+
{"text": "movie dekhni hai toh show is the cpu governor", "action": "get_cpu_governor", "target": "get_cpu_governor", "target_raw": "get_cpu_governor", "device": "pi", "risk": "safe", "group": "G2:get_cpu_governor:en:27"}
|
| 96 |
+
{"text": "tell me cpu pressure plz", "action": "get_cpu_pressure", "target": "get_cpu_pressure", "target_raw": "get_cpu_pressure", "device": "both", "risk": "safe", "group": "G5:para:g2:get_cpu_pressure:en:0:1"}
|
| 97 |
+
{"text": "on my laptop cpu pe kitna load hai kijiye pi 5 pe", "action": "get_cpu_usage", "target": "get_cpu_usage", "target_raw": "get_cpu_usage", "device": "both", "risk": "safe", "group": "G8:dev:A:show_cpu/practical/1"}
|
| 98 |
+
{"text": "mere liye tell me the active login username", "action": "get_current_user", "target": "get_current_user", "target_raw": "get_current_user", "device": "both", "risk": "safe", "group": "A:show_user/test/0"}
|
| 99 |
+
{"text": "can you abhi system ki date kya hai na", "action": "get_date", "target": "get_date", "target_raw": "get_date", "device": "both", "risk": "safe", "group": "A:show_time/test/1"}
|
| 100 |
+
{"text": "default gateway, bahut der ho gayi", "action": "get_default_gateway", "target": "get_default_gateway", "target_raw": "get_default_gateway", "device": "both", "risk": "safe", "group": "G2:get_default_gateway:en:95"}
|
| 101 |
+
{"text": "jaldi se generate a diagnostics report", "action": "get_diagnostics", "target": "get_diagnostics", "target_raw": "get_diagnostics", "device": "both", "risk": "safe", "group": "G7:con:get_diagnostics:5"}
|
| 102 |
+
{"text": "disk health check karke dikhaiyega jaldi", "action": "get_disk_health", "target": "get_disk_health", "target_raw": "get_disk_health", "device": "both", "risk": "safe", "group": "G7:para:g2:get_disk_health:hi:0:0"}
|
| 103 |
+
{"text": "sun disk activity dikhao", "action": "get_disk_io", "target": "get_disk_io", "target_raw": "get_disk_io", "device": "both", "risk": "safe", "group": "G2:get_disk_io:hi:6"}
|
| 104 |
+
{"text": "TELL ME AVAILABLE DISK STORAGE NA", "action": "get_disk_space", "target": "get_disk_space", "target_raw": "get_disk_space", "device": "both", "risk": "safe", "group": "A:show_disk/test/0"}
|
| 105 |
+
{"text": "ethernet speed dikha do", "action": "get_ethernet_status", "target": "get_ethernet_status", "target_raw": "get_ethernet_status", "device": "both", "risk": "safe", "group": "G5:para:g2:get_ethernet_status:hi:0:2"}
|
| 106 |
+
{"text": "coooler ki speed", "action": "get_fan_speed", "target": "get_fan_speed", "target_raw": "get_fan_speed", "device": "pi", "risk": "safe", "group": "G5:syn:get_fan_speed:3"}
|
| 107 |
+
{"text": "hey assistant videocore log dikhao", "action": "get_firmware_log", "target": "get_firmware_log", "target_raw": "get_firmware_log", "device": "pi", "risk": "safe", "group": "G3:get_firmware_log:hi:32"}
|
| 108 |
+
{"text": "kindly tell me the installed pi firmware version please", "action": "get_firmware_version", "target": "get_firmware_version", "target_raw": "get_firmware_version", "device": "pi", "risk": "safe", "group": "A:show_firmware/test/0"}
|
| 109 |
+
{"text": "folders are using the most space, neend aa rahi hai", "action": "get_folder_sizes", "target": "get_folder_sizes", "target_raw": "get_folder_sizes", "device": "both", "risk": "safe", "group": "G5:para:g2:get_folder_sizes:en:0:2"}
|
| 110 |
+
{"text": "gpu memory dikhao, main abhi aata hoon", "action": "get_gpu_memory", "target": "get_gpu_memory", "target_raw": "get_gpu_memory", "device": "pi", "risk": "safe", "group": "G7:para:g2:get_gpu_memory:hi:0:1"}
|
| 111 |
+
{"text": "bhaiya graphics card ka load show kar quickly", "action": "get_gpu_usage", "target": "get_gpu_usage", "target_raw": "get_gpu_usage", "device": "both", "risk": "safe", "group": "G7:para:g:get_gpu_usage:hi:1:0"}
|
| 112 |
+
{"text": "tell me the name of this host abhi", "action": "get_hostname", "target": "get_hostname", "target_raw": "get_hostname", "device": "both", "risk": "safe", "group": "A:show_hostname/test/0"}
|
| 113 |
+
{"text": "kaam khatam ho gaya, interrpts batao pi 5 pe", "action": "get_interrupts", "target": "get_interrupts", "target_raw": "get_interrupts", "device": "both", "risk": "safe", "group": "G8:dev:G3:get_interrupts:hi:14"}
|
| 114 |
+
{"text": "CAN YOU TELL ME THIS COMPUTER'S NETWORK ADDRESS FOR ME", "action": "get_ip", "target": "get_ip", "target_raw": "get_ip", "device": "both", "risk": "safe", "group": "A:show_ip/test/0"}
|
| 115 |
+
{"text": "pi kernel ke messages dikhaiye", "action": "get_kernel_log", "target": "get_kernel_log", "target_raw": "get_kernel_log", "device": "both", "risk": "safe", "group": "G5:para:g2:get_kernel_log:hi:2:0"}
|
| 116 |
+
{"text": "kernel version dikhana now", "action": "get_kernel_version", "target": "get_kernel_version", "target_raw": "get_kernel_version", "device": "both", "risk": "safe", "group": "G7:para:g2:get_kernel_version:hi:0:2"}
|
| 117 |
+
{"text": "hey load average kya hai bolo", "action": "get_load_average", "target": "get_load_average", "target_raw": "get_load_average", "device": "both", "risk": "safe", "group": "G7:para:g2:get_load_average:hi:0:2"}
|
| 118 |
+
{"text": "kindly mac address dikha", "action": "get_mac_address", "target": "get_mac_address", "target_raw": "get_mac_address", "device": "both", "risk": "safe", "group": "G7:para:g:get_mac_address:hi:0:2"}
|
| 119 |
+
{"text": "rpi5 pe call aane wala hai so memory pressure batao fast", "action": "get_memory_pressure", "target": "get_memory_pressure", "target_raw": "get_memory_pressure", "device": "both", "risk": "safe", "group": "G8:dev:G7:para:g2:get_memory_pressure:hi:0:2"}
|
| 120 |
+
{"text": "what is percore usage on windows 11", "action": "get_per_core_usage", "target": "get_per_core_usage", "target_raw": "get_per_core_usage", "device": "both", "risk": "safe", "group": "G8:dev:G5:para:g2:get_per_core_usage:en:0:2"}
|
| 121 |
+
{"text": "show power draw, battery bachani hai", "action": "get_power_draw", "target": "get_power_draw", "target_raw": "get_power_draw", "device": "pi", "risk": "safe", "group": "G2:get_power_draw:en:42"}
|
| 122 |
+
{"text": "external ip dikhao, bahut der ho gayi", "action": "get_public_ip", "target": "get_public_ip", "target_raw": "get_public_ip", "device": "both", "risk": "safe", "group": "G5:para:g:get_public_ip:hi:1:2"}
|
| 123 |
+
{"text": "wifi bluetooth block hai kya zara abhi", "action": "get_radio_status", "target": "get_radio_status", "target_raw": "get_radio_status", "device": "both", "risk": "safe", "group": "G7:para:g2:get_radio_status:hi:0:1"}
|
| 124 |
+
{"text": "can you tell me available system memory zara", "action": "get_ram_usage", "target": "get_ram_usage", "target_raw": "get_ram_usage", "device": "both", "risk": "safe", "group": "A:show_memory/test/0"}
|
| 125 |
+
{"text": "mummy bula rahi hai so reboot history dikhao", "action": "get_reboot_history", "target": "get_reboot_history", "target_raw": "get_reboot_history", "device": "both", "risk": "safe", "group": "G5:para:g2:get_reboot_history:hi:0:2"}
|
| 126 |
+
{"text": "i need to which sd card is this", "action": "get_sdcard_info", "target": "get_sdcard_info", "target_raw": "get_sdcard_info", "device": "pi", "risk": "safe", "group": "G7:para:g2:get_sdcard_info:en:1:1"}
|
| 127 |
+
{"text": "could you please vnc service ke logs batqo mere windows 11 pe", "action": "get_service_logs", "target": "get_service_logs service=vnc", "target_raw": "get_service_logs service=vnc", "device": "both", "risk": "safe", "group": "G8:dev:G2:get_service_logs:hi:92"}
|
| 128 |
+
{"text": "hey slab usage dikhaiye jaldi", "action": "get_slab_usage", "target": "get_slab_usage", "target_raw": "get_slab_usage", "device": "both", "risk": "safe", "group": "G5:para:g3:get_slab_usage:hi:0:0"}
|
| 129 |
+
{"text": "main bahar ja raha hoon so swap status dikhao zara", "action": "get_swap_usage", "target": "get_swap_usage", "target_raw": "get_swap_usage", "device": "both", "risk": "safe", "group": "G7:para:g2:get_swap_usage:hi:2:2"}
|
| 130 |
+
{"text": "which windows version is this now", "action": "get_system_info", "target": "get_system_info", "target_raw": "get_system_info", "device": "both", "risk": "safe", "group": "B:get_system_info:en:3"}
|
| 131 |
+
{"text": "pi garam ho raha hai kya fast", "action": "get_temperature", "target": "get_temperature", "target_raw": "get_temperature", "device": "both", "risk": "safe", "group": "B:get_temperature:hi:3"}
|
| 132 |
+
{"text": "tell me the raspberry pi throttling flags abhi", "action": "get_throttle_status", "target": "get_throttle_status", "target_raw": "get_throttle_status", "device": "both", "risk": "safe", "group": "A:show_throttling/test/0"}
|
| 133 |
+
{"text": "please retrieve systme date and time abhi mere windows 11 pe", "action": "get_time", "target": "get_time", "target_raw": "get_time", "device": "both", "risk": "safe", "group": "G8:dev:A:show_time/language/1"}
|
| 134 |
+
{"text": "i need to ntp sync status", "action": "get_time_sync", "target": "get_time_sync", "target_raw": "get_time_sync", "device": "both", "risk": "safe", "group": "G7:para:g2:get_time_sync:en:1:2"}
|
| 135 |
+
{"text": "can you uptime kitna hai", "action": "get_uptime", "target": "get_uptime", "target_raw": "get_uptime", "device": "both", "risk": "safe", "group": "B:get_uptime:hi:4"}
|
| 136 |
+
{"text": "zara tell me the raspberry pi core voltage abhi", "action": "get_voltage", "target": "get_voltage", "target_raw": "get_voltage", "device": "pi", "risk": "safe", "group": "A:show_voltage/test/0"}
|
| 137 |
+
{"text": "zara crurent volume percentage bataiye pi 5 pe", "action": "get_volume", "target": "get_volume", "target_raw": "get_volume", "device": "both", "risk": "safe", "group": "G8:dev:A:show_volume/practical/3"}
|
| 138 |
+
{"text": "kindly could you show the wifi signal strength, khana khane ja raha hoon", "action": "get_wifi_signal", "target": "get_wifi_signal", "target_raw": "get_wifi_signal", "device": "both", "risk": "safe", "group": "G7:para:g2:get_wifi_signal:en:0:1"}
|
| 139 |
+
{"text": "kaam khatam ho gaya toh can you display the functions available on gpio 26 abhi ke abhi", "action": "gpio_alt_functions", "target": "gpio_alt_functions pin=26", "target_raw": "gpio_alt_functions pin=26", "device": "pi", "risk": "safe", "group": "G7:para:g6:gpio_alt_functions:en:2:1"}
|
| 140 |
+
{"text": "plz flas physical 28 dus ties please", "action": "gpio_blink", "target": "gpio_blink pin=28 numbering=board count=10", "target_raw": "gpio_blink pin=28 numbering=board count=10", "device": "pi", "risk": "caution", "group": "G6:gpio_blink:en:4"}
|
| 141 |
+
{"text": "list reerved pins, call pe hoon", "action": "gpio_conflicts", "target": "gpio_conflicts", "target_raw": "gpio_conflicts", "device": "pi", "risk": "safe", "group": "G6:gpio_conflicts:en:3"}
|
| 142 |
+
{"text": "buttom on gpio26 is not deteced thanks", "action": "gpio_debug", "target": "gpio_debug pin=26", "target_raw": "gpio_debug pin=26", "device": "pi", "risk": "safe", "group": "G6:gpio_debug:en:10"}
|
| 143 |
+
{"text": "gpio kaam nahi kar raha please pls", "action": "gpio_debug_all", "target": "gpio_debug_all", "target_raw": "gpio_debug_all", "device": "pi", "risk": "safe", "group": "G7:para:g6:gpio_debug_all:hi:0:0"}
|
| 144 |
+
{"text": "on win 11 pinctrl get gpio 22 plz", "action": "gpio_info", "target": "gpio_info pin=22", "target_raw": "gpio_info pin=22", "device": "pi", "risk": "safe", "group": "G8:dev:G6:gpio_info:en:3"}
|
| 145 |
+
{"text": "set low gpio pin 14 windows 11 pe", "action": "gpio_off", "target": "gpio_off pin=14", "target_raw": "gpio_off pin=14", "device": "both", "risk": "critical", "group": "G8:dev:B:gpio_off:en:0"}
|
| 146 |
+
{"text": "on windows 11 set pin no 11 high", "action": "gpio_on", "target": "gpio_on pin=11 numbering=board", "target_raw": "gpio_on pin=11 numbering=board", "device": "both", "risk": "critical", "group": "G8:dev:G6:gpio_on:en:0"}
|
| 147 |
+
{"text": "gpio22 kis kaam ka hai zara", "action": "gpio_pin_role", "target": "gpio_pin_role pin=22", "target_raw": "gpio_pin_role pin=22", "device": "pi", "risk": "safe", "group": "G7:para:g6:gpio_pin_role:hi:0:2"}
|
| 148 |
+
{"text": "40-pin header pin 27 ko a minute on rakho please", "action": "gpio_pulse", "target": "gpio_pulse pin=27 amount=1 unit=min numbering=board", "target_raw": "gpio_pulse pin=27 amount=1 unit=min numbering=board", "device": "pi", "risk": "caution", "group": "G7:para:g6:gpio_pulse:hi:4:0"}
|
| 149 |
+
{"text": "pi 5 pe laptop can you run 25000 hz pwm on bcm 23 with 90 percent duty", "action": "gpio_pwm", "target": "gpio_pwm pin=23 duty=90 freq=25000", "target_raw": "gpio_pwm pin=23 duty=90 freq=25000", "device": "pi", "risk": "caution", "group": "G8:dev:G7:para:g6:gpio_pwm:en:6:0"}
|
| 150 |
+
{"text": "hey computer please read the value of gpio pin 24 for me", "action": "gpio_read", "target": "gpio_read pin=24", "target_raw": "gpio_read pin=24", "device": "both", "risk": "caution", "group": "A:gpio_read/test/0"}
|
| 151 |
+
{"text": "pin no 7 ko wapas input bana do", "action": "gpio_reset", "target": "gpio_reset pin=7 numbering=board", "target_raw": "gpio_reset pin=7 numbering=board", "device": "pi", "risk": "caution", "group": "G6:gpio_reset:hi:8"}
|
| 152 |
+
{"text": "can you please set every pin back to default right now", "action": "gpio_reset_all", "target": "gpio_reset_all", "target_raw": "gpio_reset_all", "device": "pi", "risk": "caution", "group": "G6:gpio_reset_all:en:2"}
|
| 153 |
+
{"text": "rpi 5 pe padhai karni hai so move the servo on physical 22 to 45 degrees", "action": "gpio_servo", "target": "gpio_servo pin=22 angle=45 numbering=board", "target_raw": "gpio_servo pin=22 angle=45 numbering=board", "device": "pi", "risk": "caution", "group": "G8:dev:G6:gpio_servo:en:0"}
|
| 154 |
+
{"text": "hey laptop i need to switch gpio22 to alt2", "action": "gpio_set_alt", "target": "gpio_set_alt pin=22 alt=a2", "target_raw": "gpio_set_alt pin=22 alt=a2", "device": "pi", "risk": "critical", "group": "G7:para:g6:gpio_set_alt:en:1:2"}
|
| 155 |
+
{"text": "gpio pin 19 input pin kar do", "action": "gpio_set_mode", "target": "gpio_set_mode pin=19 mode=input", "target_raw": "gpio_set_mode pin=19 mode=input", "device": "pi", "risk": "caution", "group": "G6:gpio_set_mode:hi:8"}
|
| 156 |
+
{"text": "on my raspberry pi 5 hello enable pull up on gpio 10", "action": "gpio_set_pull", "target": "gpio_set_pull pin=10 pull=up", "target_raw": "gpio_set_pull pin=10 pull=up", "device": "pi", "risk": "caution", "group": "G8:dev:G6:gpio_set_pull:en:1"}
|
| 157 |
+
{"text": "gpio monitorring rok do", "action": "gpio_stop_watch", "target": "gpio_stop_watch", "target_raw": "gpio_stop_watch", "device": "pi", "risk": "safe", "group": "G6:gpio_stop_watch:hi:6"}
|
| 158 |
+
{"text": "movie dekhni hai, flip gpio pin 16", "action": "gpio_toggle", "target": "gpio_toggle pin=16", "target_raw": "gpio_toggle pin=16", "device": "pi", "risk": "caution", "group": "G:gpio_toggle:en:2"}
|
| 159 |
+
{"text": "can you monitor the red led on gpio 25, call pe hoon", "action": "gpio_watch", "target": "gpio_watch pin=25", "target_raw": "gpio_watch pin=25", "device": "pi", "risk": "safe", "group": "G7:para:g6:gpio_watch:en:5:0"}
|
| 160 |
+
{"text": "jara i want to disable ssh password login", "action": "harden_ssh", "target": "harden_ssh", "target_raw": "harden_ssh", "device": "both", "risk": "critical", "group": "G7:para:g3:harden_ssh:en:1:0"}
|
| 161 |
+
{"text": "invoice.png hash karo", "action": "hash_file", "target": "hash_file path=\"invoice.png\"", "target_raw": "hash_file path=\"invoice.png\"", "device": "both", "risk": "safe", "group": "G5:fileop:hash_file:7"}
|
| 162 |
+
{"text": "please how can you help me pls", "action": "help", "target": "help", "target_raw": "help", "device": "both", "risk": "safe", "group": "G:help:en:4"}
|
| 163 |
+
{"text": "kindly ab laptop hibernation mein bhej do zara", "action": "hibernate", "target": "hibernate", "target_raw": "hibernate", "device": "both", "risk": "critical", "group": "A:hibernate/test/1"}
|
| 164 |
+
{"text": "could you please high contrast mode hata dijiye quickly", "action": "high_contrast_off", "target": "high_contrast_off", "target_raw": "high_contrast_off", "device": "both", "risk": "safe", "group": "G7:para:g:high_contrast_off:hi:1:1"}
|
| 165 |
+
{"text": "computer could you enable high contrast mode, aankh dukh rahi hai", "action": "high_contrast_on", "target": "high_contrast_on", "target_raw": "high_contrast_on", "device": "both", "risk": "safe", "group": "G7:para:g:high_contrast_on:en:1:1"}
|
| 166 |
+
{"text": "stop sharing internet thank you", "action": "hotspot_off", "target": "hotspot_off", "target_raw": "hotspot_off", "device": "both", "risk": "safe", "group": "B:hotspot_off:en:3"}
|
| 167 |
+
{"text": "i am done for today, hotspot on karo naam Lalit_Home password Hello$wifi na", "action": "hotspot_on", "target": "hotspot_on ssid=\"lalit_home\" password=\"hello$wifi\"", "target_raw": "hotspot_on ssid=\"Lalit_Home\" password=\"Hello$wifi\"", "device": "both", "risk": "safe", "group": "G4:hotspot_on:0"}
|
| 168 |
+
{"text": "can you i2cdump 0x48 fast", "action": "i2c_dump", "target": "i2c_dump address=\"0x48\"", "target_raw": "i2c_dump address=\"0x48\"", "device": "pi", "risk": "safe", "group": "G7:para:g6:i2c_dump:en:1:2"}
|
| 169 |
+
{"text": "i2c 0x1e se register 0x3b padho please quickly", "action": "i2c_read", "target": "i2c_read address=\"0x1e\" register=\"0x3b\"", "target_raw": "i2c_read address=\"0x1e\" register=\"0x3b\"", "device": "pi", "risk": "safe", "group": "G7:para:g6:i2c_read:hi:0:1"}
|
| 170 |
+
{"text": "please jaldi can you scan i2c bus", "action": "i2c_scan", "target": "i2c_scan", "target_raw": "i2c_scan", "device": "pi", "risk": "safe", "group": "G7:para:g:i2c_scan:en:0:1"}
|
| 171 |
+
{"text": "i2cset 0x68 0xf7 0x01 abhi ke abhi", "action": "i2c_write", "target": "i2c_write address=\"0x68\" register=\"0xf7\" value=1", "target_raw": "i2c_write address=\"0x68\" register=\"0xf7\" value=1", "device": "pi", "risk": "critical", "group": "G6:i2c_write:en:1"}
|
| 172 |
+
{"text": "private wkndow open karo quickly pi 5 pe", "action": "incognito_window", "target": "incognito_window", "target_raw": "incognito_window", "device": "both", "risk": "safe", "group": "G8:dev:G:incognito_window:hi:1"}
|
| 173 |
+
{"text": "can you mujhe build-essential chahiye install kar dijiye", "action": "install_package", "target": "install_package name=\"build-essential\"", "target_raw": "install_package name=\"build-essential\"", "device": "both", "risk": "caution", "group": "G7:para:g3:install_package:hi:5:1"}
|
| 174 |
+
{"text": "torch module laga do, bahut der ho gayi", "action": "install_python_package", "target": "install_python_package name=\"torch\"", "target_raw": "install_python_package name=\"torch\"", "device": "both", "risk": "caution", "group": "G7:con:install_python_package:0"}
|
| 175 |
+
{"text": "raat ho gayi hai toh os update install kr", "action": "install_updates", "target": "install_updates", "target_raw": "install_updates", "device": "both", "risk": "critical", "group": "B:install_updates:hi:7"}
|
| 176 |
+
{"text": "can you disable i2c right now", "action": "interface_disable", "target": "interface_disable interface=i2c", "target_raw": "interface_disable interface=i2c", "device": "pi", "risk": "critical", "group": "G7:para:g:interface_disable:en:1:0"}
|
| 177 |
+
{"text": "please raspberry mein i2c chalu kar dena kar sakte ho", "action": "interface_enable", "target": "interface_enable interface=i2c", "target_raw": "interface_enable interface=i2c", "device": "pi", "risk": "critical", "group": "A:enable_i2c/test/1"}
|
| 178 |
+
{"text": "mere liye please end the running process id 4261 for me", "action": "kill_process", "target": "kill_process pid=4261", "target_raw": "kill_process pid=4261", "device": "both", "risk": "critical", "group": "A:kill_process/test/0"}
|
| 179 |
+
{"text": "ok google ds18b20 sensor display karo", "action": "list_1wire_sensors", "target": "list_1wire_sensors", "target_raw": "list_1wire_sensors", "device": "pi", "risk": "safe", "group": "G7:para:g2:list_1wire_sensors:hi:1:0"}
|
| 180 |
+
{"text": "arp table display karo, khana khane ja raha hoon", "action": "list_arp", "target": "list_arp", "target_raw": "list_arp", "device": "both", "risk": "safe", "group": "G7:para:g2:list_arp:hi:0:0"}
|
| 181 |
+
{"text": "jara mic aur speaker devices show kar", "action": "list_audio_devices", "target": "list_audio_devices", "target_raw": "list_audio_devices", "device": "both", "risk": "safe", "group": "G7:para:g2:list_audio_devices:hi:2:2"}
|
| 182 |
+
{"text": "kitne ip ban hain turant", "action": "list_banned_ips", "target": "list_banned_ips", "target_raw": "list_banned_ips", "device": "both", "risk": "safe", "group": "G7:con:list_banned_ips:5"}
|
| 183 |
+
{"text": "jaldi se bluetooth devices dikhao", "action": "list_bluetooth_devices", "target": "list_bluetooth_devices", "target_raw": "list_bluetooth_devices", "device": "both", "risk": "safe", "group": "G7:para:g:list_bluetooth_devices:hi:0:1"}
|
| 184 |
+
{"text": "mere liye please show connected pi cameras zara", "action": "list_cameras", "target": "list_cameras", "target_raw": "list_cameras", "device": "pi", "risk": "safe", "group": "A:list_cameras/test/0"}
|
| 185 |
+
{"text": "please network ki active connections bata dena na", "action": "list_connections", "target": "list_connections", "target_raw": "list_connections", "device": "both", "risk": "safe", "group": "A:show_connections/test/1"}
|
| 186 |
+
{"text": "zara please show attached drives and partitions na", "action": "list_partitions", "target": "list_partitions", "target_raw": "list_partitions", "device": "both", "risk": "safe", "group": "A:list_disks/test/0"}
|
| 187 |
+
{"text": "kaunse monitor lage hain zara, battery bachani hai", "action": "list_displays", "target": "list_displays", "target_raw": "list_displays", "device": "both", "risk": "safe", "group": "G7:para:g2:list_displays:hi:1:2"}
|
| 188 |
+
{"text": "i need to which services have failed pls", "action": "list_failed_services", "target": "list_failed_services", "target_raw": "list_failed_services", "device": "both", "risk": "safe", "group": "G7:para:g2:list_failed_services:en:1:1"}
|
| 189 |
+
{"text": "please photos list karo", "action": "list_files", "target": "list_files path=\"photos\"", "target_raw": "list_files path=\"photos\"", "device": "both", "risk": "safe", "group": "G5:fileop:list_files:8"}
|
| 190 |
+
{"text": "windows 11 ki bhai unused pins show kar!", "action": "list_free_gpio", "target": "list_free_gpio", "target_raw": "list_free_gpio", "device": "pi", "risk": "safe", "group": "G8:dev:G7:para:g6:list_free_gpio:hi:3:0"}
|
| 191 |
+
{"text": "windows 11 ki gpio status dikhao asap", "action": "list_gpio", "target": "list_gpio", "target_raw": "list_gpio", "device": "pi", "risk": "safe", "group": "G8:dev:G2:list_gpio:hi:41"}
|
| 192 |
+
{"text": "on windows 11, suno what is the header chip number", "action": "list_gpio_chips", "target": "list_gpio_chips", "target_raw": "list_gpio_chips", "device": "pi", "risk": "safe", "group": "G8:dev:G6:list_gpio_chips:en:4"}
|
| 193 |
+
{"text": "raspberry pi 5 pe pi list instaled apps for me", "action": "list_installed_apps", "target": "list_installed_apps", "target_raw": "list_installed_apps", "device": "both", "risk": "safe", "group": "G8:dev:G:list_installed_apps:en:0"}
|
| 194 |
+
{"text": "kaunse drivers loaded hain ji on the rpi 5", "action": "list_kernel_modules", "target": "list_kernel_modules", "target_raw": "list_kernel_modules", "device": "both", "risk": "safe", "group": "G8:dev:G2:list_kernel_modules:hi:22"}
|
| 195 |
+
{"text": "could you ollama list, baccha ro raha hai", "action": "list_llm_models", "target": "list_llm_models", "target_raw": "list_llm_models", "device": "both", "risk": "safe", "group": "G7:para:g3:list_llm_models:en:2:2"}
|
| 196 |
+
{"text": "mere pi 5 me kurrent sessions show kar jaldi for me", "action": "list_logged_in_users", "target": "list_logged_in_users", "target_raw": "list_logged_in_users", "device": "both", "risk": "safe", "group": "G8:dev:G7:para:g2:list_logged_in_users:hi:2:1"}
|
| 197 |
+
{"text": "on windows 11 main bahar ja raha hoon toh open filex dikhao usb drive", "action": "list_open_files", "target": "list_open_files device=\"usb drive\"", "target_raw": "list_open_files device=\"usb drive\"", "device": "both", "risk": "safe", "group": "G8:dev:G5:syn:list_open_files:5"}
|
| 198 |
+
{"text": "computer please what's listening on ports", "action": "list_open_ports", "target": "list_open_ports", "target_raw": "list_open_ports", "device": "both", "risk": "safe", "group": "G7:para:g2:list_open_ports:en:2:0"}
|
| 199 |
+
{"text": "rpi5 pe can you what pcakages are installed", "action": "list_packages", "target": "list_packages", "target_raw": "list_packages", "device": "both", "risk": "safe", "group": "G8:dev:G7:para:g3:list_packages:en:1:0"}
|
| 200 |
+
{"text": "bachche so rahe hain, can you list block devices turant", "action": "list_partitions", "target": "list_partitions", "target_raw": "list_partitions", "device": "both", "risk": "safe", "group": "G7:para:g2:list_partitions:en:3:0"}
|
| 201 |
+
{"text": "bhai pi ke saare pcie devices bata dena", "action": "list_pci", "target": "list_pci", "target_raw": "list_pci", "device": "pi", "risk": "safe", "group": "A:list_pci/test/1"}
|
| 202 |
+
{"text": "on my raspberry pi 5 bahut der ho gayi, which printers are available", "action": "list_printers", "target": "list_printers", "target_raw": "list_printers", "device": "both", "risk": "safe", "group": "G8:dev:G5:new:list_printers:1"}
|
| 203 |
+
{"text": "kindly system ki running process list bata dena for me", "action": "list_processes", "target": "list_processes", "target_raw": "list_processes", "device": "both", "risk": "safe", "group": "A:show_processes/test/1"}
|
| 204 |
+
{"text": "uart ports dikhao, bahut der ho gayi", "action": "list_serial_ports", "target": "list_serial_ports", "target_raw": "list_serial_ports", "device": "pi", "risk": "safe", "group": "G2:list_serial_ports:hi:70"}
|
| 205 |
+
{"text": "saari system services ki list bata dena zara", "action": "list_services", "target": "list_services", "target_raw": "list_services", "device": "both", "risk": "safe", "group": "A:list_services/test/1"}
|
| 206 |
+
{"text": "tmux ls.", "action": "list_sessions", "target": "list_sessions", "target_raw": "list_sessions", "device": "both", "risk": "safe", "group": "G3:list_sessions:en:41"}
|
| 207 |
+
{"text": "movie dekhni hai so spi enable hai kya, main so raha hoon", "action": "list_spi_devices", "target": "list_spi_devices", "target_raw": "list_spi_devices", "device": "pi", "risk": "safe", "group": "G2:list_spi_devices:hi:44"}
|
| 208 |
+
{"text": "HEY COMPUTER PLEASE SHOW CONNECTED USB DEVICES NA", "action": "list_usb", "target": "list_usb", "target_raw": "list_usb", "device": "pi", "risk": "safe", "group": "A:list_usb/test/0"}
|
| 209 |
+
{"text": "net chal raha he kya nahi karna, sirf list wifi networks", "action": "list_wifi", "target": "list_wifi", "target_raw": "list_wifi", "device": "both", "risk": "safe", "group": "B:contrast:list_wifi"}
|
| 210 |
+
{"text": "disable-bt overlay load kar dijiye", "action": "load_overlay", "target": "load_overlay overlay=\"disable-bt\"", "target_raw": "load_overlay overlay=\"disable-bt\"", "device": "pi", "risk": "caution", "group": "G7:para:g3:load_overlay:hi:0:0"}
|
| 211 |
+
{"text": "CAN YOU AB SCREEN KO LOCK KAR DENA PLEASE", "action": "lock_screen", "target": "lock_screen", "target_raw": "lock_screen", "device": "both", "risk": "caution", "group": "A:lock_screen/test/1"}
|
| 212 |
+
{"text": "the mgnifier close thank you", "action": "magnifier_off", "target": "magnifier_off", "target_raw": "magnifier_off", "device": "both", "risk": "safe", "group": "G5:pol:magnifier_off:1:1"}
|
| 213 |
+
{"text": "on windows 11, not exit zoom lens, screen magnifier chalu karo pls", "action": "magnifier_on", "target": "magnifier_on", "target_raw": "magnifier_on", "device": "both", "risk": "safe", "group": "G8:dev:B:contrast:magnifier_on"}
|
| 214 |
+
{"text": "can you create a user pi2", "action": "manage_users", "target": "manage_users user=\"pi2\"", "target_raw": "manage_users user=\"pi2\"", "device": "both", "risk": "critical", "group": "G3:manage_users:en:27"}
|
| 215 |
+
{"text": "pi5 me yaar ye window maximize kar dena but teams ki window band mat karo", "action": "maximize_window", "target": "maximize_window", "target_raw": "maximize_window", "device": "both", "risk": "safe", "group": "G8:dev:B:contrast:maximize_window"}
|
| 216 |
+
{"text": "guest aaye hain, next song", "action": "media_next", "target": "media_next", "target_raw": "media_next", "device": "both", "risk": "safe", "group": "B:media_next:en:0"}
|
| 217 |
+
{"text": "KINDLY ABHI MUSIC PAUSE KAR DENA KAR SAKTE HO", "action": "media_pause", "target": "media_pause", "target_raw": "media_pause", "device": "both", "risk": "safe", "group": "A:media_play_pause/test/1"}
|
| 218 |
+
{"text": "could you please gaana bajao", "action": "media_play", "target": "media_play", "target_raw": "media_play", "device": "both", "risk": "safe", "group": "B:media_play:hi:9"}
|
| 219 |
+
{"text": "please toggle media playback kar sakte ho", "action": "media_play_pause", "target": "media_play_pause", "target_raw": "media_play_pause", "device": "both", "risk": "safe", "group": "A:media_play_pause/test/0"}
|
| 220 |
+
{"text": "zara please return to the previous media track abhi", "action": "media_prev", "target": "media_prev", "target_raw": "media_prev", "device": "both", "risk": "safe", "group": "A:media_previous/test/0"}
|
| 221 |
+
{"text": "microphone band kijiye abhi ke abhi", "action": "mic_mute", "target": "mic_mute", "target_raw": "mic_mute", "device": "both", "risk": "safe", "group": "G5:para:g:mic_mute:hi:1:1"}
|
| 222 |
+
{"text": "microphone chalu karna kaam ho gaya", "action": "mic_unmute", "target": "mic_unmute", "target_raw": "mic_unmute", "device": "both", "risk": "safe", "group": "G5:para:g:mic_unmute:hi:1:1"}
|
| 223 |
+
{"text": "this window minimize kar dijiye", "action": "minimize_window", "target": "minimize_window", "target_raw": "minimize_window", "device": "both", "risk": "safe", "group": "B:minimize_window:hi:0"}
|
| 224 |
+
{"text": "live health dikhate raho zara, kal milte hain", "action": "monitor_health", "target": "monitor_health", "target_raw": "monitor_health", "device": "both", "risk": "safe", "group": "G7:para:g3:monitor_health:hi:2:2"}
|
| 225 |
+
{"text": "udew events watch kar mere windows 11 pe", "action": "monitor_hotplug", "target": "monitor_hotplug", "target_raw": "monitor_hotplug", "device": "both", "risk": "safe", "group": "G8:dev:G7:para:g3:monitor_hotplug:hi:1:1"}
|
| 226 |
+
{"text": "ssd lagao", "action": "mount_drive", "target": "mount_drive device=\"ssd\"", "target_raw": "mount_drive device=\"ssd\"", "device": "both", "risk": "caution", "group": "G5:pol:mount_drive:0:3"}
|
| 227 |
+
{"text": "zara \"demo/old19.txt\" se \"demo/new9.txt\" tak file move kar dena zara", "action": "move_file", "target": "move_file src=\"demo/old19.txt\" dst=\"demo/new9.txt\"", "target_raw": "move_file src=\"demo/old19.txt\" dst=\"demo/new9.txt\"", "device": "both", "risk": "caution", "group": "A:move_file/test/1"}
|
| 228 |
+
{"text": "suno switch off sound", "action": "mute", "target": "mute", "target_raw": "mute", "device": "both", "risk": "safe", "group": "B:mute:en:12"}
|
| 229 |
+
{"text": "computer narrator band karo", "action": "narrator_off", "target": "narrator_off", "target_raw": "narrator_off", "device": "both", "risk": "safe", "group": "G5:pol:narrator_off:0:3"}
|
| 230 |
+
{"text": "hi narrator on kro", "action": "narrator_on", "target": "narrator_on", "target_raw": "narrator_on", "device": "both", "risk": "safe", "group": "G5:pol:narrator_on:0:2"}
|
| 231 |
+
{"text": "jaldi se am i connected to internet ji", "action": "network_status", "target": "network_status", "target_raw": "network_status", "device": "both", "risk": "safe", "group": "B:network_status:en:7"}
|
| 232 |
+
{"text": "mere liye another tab", "action": "new_tab", "target": "new_tab", "target_raw": "new_tab", "device": "both", "risk": "safe", "group": "B:new_tab:en:2"}
|
| 233 |
+
{"text": "sun naya virtual desktop open kar", "action": "new_virtual_desktop", "target": "new_virtual_desktop", "target_raw": "new_virtual_desktop", "device": "both", "risk": "safe", "group": "G7:para:g:new_virtual_desktop:hi:0:2"}
|
| 234 |
+
{"text": "laptop agla tab kholna bahut der ho gayi", "action": "next_tab", "target": "next_tab", "target_raw": "next_tab", "device": "both", "risk": "safe", "group": "G5:para:g:next_tab:hi:0:2"}
|
| 235 |
+
{"text": "disable night mode kyunki neend aa rahi hai", "action": "night_light_off", "target": "night_light_off", "target_raw": "night_light_off", "device": "both", "risk": "safe", "group": "B:night_light_off:en:2"}
|
| 236 |
+
{"text": "eye protection on kro", "action": "night_light_on", "target": "night_light_on", "target_raw": "night_light_on", "device": "both", "risk": "safe", "group": "G5:pol:night_light_on:2:2"}
|
| 237 |
+
{"text": "mujhe kaam karna hai osk chahiye", "action": "onscreen_keyboard", "target": "onscreen_keyboard", "target_raw": "onscreen_keyboard", "device": "both", "risk": "safe", "group": "B:onscreen_keyboard:hi:2"}
|
| 238 |
+
{"text": "please please launch windows disk management", "action": "open_app", "target": "open_app app=disk_management", "target_raw": "open_app app=disk_management", "device": "both", "risk": "caution", "group": "A:open_disk_manager/test/0"}
|
| 239 |
+
{"text": "sun raspi-config open kar turant", "action": "open_config_tool", "target": "open_config_tool", "target_raw": "open_config_tool", "device": "pi", "risk": "caution", "group": "G7:para:g3:open_config_tool:hi:0:2"}
|
| 240 |
+
{"text": "ok google youngick_.mp4 wali file dikhana bhai", "action": "open_file", "target": "open_file path=\"youngick_.mp4\"", "target_raw": "open_file path=\"youngick_.mp4\"", "device": "both", "risk": "safe", "group": "G7:para:g:open_file:hi:1:2"}
|
| 241 |
+
{"text": "ji take me to dsktop folder windows 11 pe", "action": "open_folder", "target": "open_folder folder=desktop", "target_raw": "open_folder folder=desktop", "device": "both", "risk": "safe", "group": "G8:dev:B:open_folder:en:4"}
|
| 242 |
+
{"text": "bring up the notification panel", "action": "open_notification_center", "target": "open_notification_center", "target_raw": "open_notification_center", "device": "both", "risk": "safe", "group": "G5:para:g:open_notification_center:en:0:0"}
|
| 243 |
+
{"text": "windows 11 ki rekycle bin folder open kar do yaa", "action": "open_recycle_bin", "target": "open_recycle_bin", "target_raw": "open_recycle_bin", "device": "both", "risk": "safe", "group": "G8:dev:B:open_recycle_bin:hi:0"}
|
| 244 |
+
{"text": "could you open a serial terminal on /dev/ttyAMA0 na", "action": "open_serial_terminal", "target": "open_serial_terminal serial_port=\"/dev/ttyama0\"", "target_raw": "open_serial_terminal serial_port=\"/dev/ttyAMA0\"", "device": "pi", "risk": "caution", "group": "G7:para:g3:open_serial_terminal:en:0:2"}
|
| 245 |
+
{"text": "can you mere system ki settings khol do zara", "action": "open_settings", "target": "open_settings", "target_raw": "open_settings", "device": "both", "risk": "safe", "group": "A:open_settings/test/1"}
|
| 246 |
+
{"text": "ji tweeter chalao", "action": "open_site", "target": "open_site site=twitter", "target_raw": "open_site site=twitter", "device": "both", "risk": "safe", "group": "B:open_site:hi:10"}
|
| 247 |
+
{"text": "visit player.dev windows 11 pe", "action": "open_url", "target": "open_url url=\"player.dev\"", "target_raw": "open_url url=\"player.dev\"", "device": "both", "risk": "safe", "group": "G8:dev:B:open_url:en:2"}
|
| 248 |
+
{"text": "traffic sniff kijiye ji", "action": "packet_capture", "target": "packet_capture", "target_raw": "packet_capture", "device": "both", "risk": "caution", "group": "G5:para:g3:packet_capture:hi:2:0"}
|
| 249 |
+
{"text": "pi 5 pe can you format sda1", "action": "partition_disk", "target": "partition_disk device=\"sda1\"", "target_raw": "partition_disk device=\"sda1\"", "device": "both", "risk": "critical", "group": "G8:dev:G7:para:g3:partition_disk:en:3:1"}
|
| 250 |
+
{"text": "cgrl v fast redo kr nahi", "action": "paste", "target": "paste", "target_raw": "paste", "device": "both", "risk": "safe", "group": "B:contrast:paste"}
|
| 251 |
+
{"text": "zara raspberrypi.local ki network reachability check karo kar sakte ho", "action": "ping", "target": "ping host=\"raspberrypi.local\"", "target_raw": "ping host=\"raspberrypi.local\"", "device": "both", "risk": "safe", "group": "A:ping_host/test/1"}
|
| 252 |
+
{"text": "could you please ssh tunnel port 80 to github.com", "action": "port_forward", "target": "port_forward port=80 host=\"github.com\"", "target_raw": "port_forward port=80 host=\"github.com\"", "device": "both", "risk": "caution", "group": "G7:para:g3:port_forward:en:1:0"}
|
| 253 |
+
{"text": "windows 11 pe poower plan perormance pe rakho", "action": "power_mode", "target": "power_mode mode=performance", "target_raw": "power_mode mode=performance", "device": "both", "risk": "caution", "group": "G8:dev:G5:para:g:power_mode:hi:2:0"}
|
| 254 |
+
{"text": "pi5 me bhaiya esc press kijiye ji", "action": "press_key", "target": "press_key key=escape", "target_raw": "press_key key=escape", "device": "both", "risk": "caution", "group": "G8:dev:G5:para:g:press_key:hi:0:0"}
|
| 255 |
+
{"text": "hi pichla tab dikha do", "action": "prev_tab", "target": "prev_tab", "target_raw": "prev_tab", "device": "both", "risk": "safe", "group": "G5:para:g:prev_tab:hi:0:1"}
|
| 256 |
+
{"text": "photo.jpg print karo, i'll be back", "action": "print_file", "target": "print_file path=\"photo.jpg\"", "target_raw": "print_file path=\"photo.jpg\"", "device": "both", "risk": "caution", "group": "G5:new:print_file:4"}
|
| 257 |
+
{"text": "online class hai toh is page print kro", "action": "print_page", "target": "print_page", "target_raw": "print_page", "device": "both", "risk": "safe", "group": "G5:para:g:print_page:hi:0:2"}
|
| 258 |
+
{"text": "llama3.2 pull kar dijiyega", "action": "pull_llm_model", "target": "pull_llm_model model=\"llama3.2\"", "target_raw": "pull_llm_model model=\"llama3.2\"", "device": "both", "risk": "caution", "group": "G7:para:g3:pull_llm_model:hi:1:0"}
|
| 259 |
+
{"text": "is windows 11 pc pe bhai get the text contents \"work/report18.txt\"", "action": "read_file", "target": "read_file path=\"work/report18.txt\"", "target_raw": "read_file path=\"work/report18.txt\"", "device": "both", "risk": "caution", "group": "G8:dev:A:read_file/enriched/3"}
|
| 260 |
+
{"text": "recent files dikhana quickly", "action": "recent_files", "target": "recent_files", "target_raw": "recent_files", "device": "both", "risk": "safe", "group": "G5:para:g:recent_files:hi:0:2"}
|
| 261 |
+
{"text": "mic se 5 minton record karke display karo zara", "action": "record_audio", "target": "record_audio amount=5 unit=min", "target_raw": "record_audio amount=5 unit=min", "device": "both", "risk": "safe", "group": "G7:para:g2:record_audio:hi:1:0"}
|
| 262 |
+
{"text": "jara redo", "action": "redo", "target": "redo", "target_raw": "redo", "device": "both", "risk": "safe", "group": "B:redo:en:0"}
|
| 263 |
+
{"text": "windows 11 pe bahut der ho gayi refresh kr fast", "action": "refresh", "target": "refresh", "target_raw": "refresh", "device": "both", "risk": "safe", "group": "G8:dev:B:refresh:hi:6"}
|
| 264 |
+
{"text": "ssh tester@192.168.1.50 bhai", "action": "remote_shell", "target": "remote_shell host=\"192.168.1.50\" user=\"tester\"", "target_raw": "remote_shell host=\"192.168.1.50\" user=\"tester\"", "device": "both", "risk": "caution", "group": "G3:remote_shell:en:28"}
|
| 265 |
+
{"text": "rpi 5 pe could you rename file \"work/old10.txt\" to \"work/new9.txt\" zara", "action": "rename_file", "target": "rename_file src=\"work/old10.txt\" dst=\"work/new9.txt\"", "target_raw": "rename_file src=\"work/old10.txt\" dst=\"work/new9.txt\"", "device": "both", "risk": "caution", "group": "G8:dev:A:rename_file/train/0"}
|
| 266 |
+
{"text": "is windows 11 pc pe hey reopen the last tab", "action": "reopen_tab", "target": "reopen_tab", "target_raw": "reopen_tab", "device": "both", "risk": "safe", "group": "G8:dev:B:reopen_tab:en:0"}
|
| 267 |
+
{"text": "bachche so rahe hain, package state repair karo bhai", "action": "repair_packages", "target": "repair_packages", "target_raw": "repair_packages", "device": "both", "risk": "caution", "group": "G7:para:g3:repair_packages:hi:1:1"}
|
| 268 |
+
{"text": "ok laptop can you launch previous command again, i'll be back", "action": "repeat_last", "target": "repeat_last", "target_raw": "repeat_last", "device": "both", "risk": "safe", "group": "G7:para:g:repeat_last:en:1:0"}
|
| 269 |
+
{"text": "raspberry pi 5 pe mere liye midnight baje restart karna bhhai plz", "action": "restart", "target": "restart at=00:00", "target_raw": "restart at=00:00", "device": "both", "risk": "critical", "group": "G8:dev:G7:para:g:restart@:hi:0:1"}
|
| 270 |
+
{"text": "could you rotate the screen to horizontal turant", "action": "rotate_screen", "target": "rotate_screen orientation=landscape", "target_raw": "rotate_screen orientation=landscape", "device": "both", "risk": "safe", "group": "G7:para:g:rotate_screen:en:0:0"}
|
| 271 |
+
{"text": "is windows 11 pc pe yaar start free -h detached", "action": "run_background", "target": "run_background command=\"free -h\"", "target_raw": "run_background command=\"free -h\"", "device": "both", "risk": "critical", "group": "G8:dev:G3:run_background:en:31"}
|
| 272 |
+
{"text": "run a cpu benchmark", "action": "run_benchmark", "target": "run_benchmark target=cpu", "target_raw": "run_benchmark target=cpu", "device": "both", "risk": "caution", "group": "G2:run_benchmark:en:52"}
|
| 273 |
+
{"text": "kindly ./llama-cli -m model.gguf start karo", "action": "run_command", "target": "run_command command=\"./llama-cli -m model.gguf\"", "target_raw": "run_command command=\"./llama-cli -m model.gguf\"", "device": "both", "risk": "critical", "group": "G5:para:g3:run_command:hi:0:0"}
|
| 274 |
+
{"text": "boss ollama launch deepseek-r1:1.5b", "action": "run_llm", "target": "run_llm model=\"deepseek-r1:1.5b\"", "target_raw": "run_llm model=\"deepseek-r1:1.5b\"", "device": "both", "risk": "caution", "group": "G7:para:g3:run_llm:en:1:2"}
|
| 275 |
+
{"text": "hey pi gemma3:1b ki tok/s bata do", "action": "run_llm_benchmark", "target": "run_llm_benchmark model=\"gemma3:1b\"", "target_raw": "run_llm_benchmark model=\"gemma3:1b\"", "device": "both", "risk": "safe", "group": "G5:para:g3:run_llm_benchmark:hi:1:2"}
|
| 276 |
+
{"text": "could you benchmark network to nas.local", "action": "run_network_benchmark", "target": "run_network_benchmark host=\"nas.local\"", "target_raw": "run_network_benchmark host=\"nas.local\"", "device": "both", "risk": "caution", "group": "G7:para:g3:run_network_benchmark:en:1:2"}
|
| 277 |
+
{"text": "zara arbitrary srcipt execute karna abhi pi 5 pe", "action": "run_script", "target": "run_script", "target_raw": "run_script", "device": "both", "risk": "critical", "group": "G8:dev:A:run_script/practical/0"}
|
| 278 |
+
{"text": "hey run a stress test for ten minute", "action": "run_stress_test", "target": "run_stress_test amount=10 unit=min", "target_raw": "run_stress_test amount=10 unit=min", "device": "both", "risk": "caution", "group": "G2:run_stress_test:en:76"}
|
| 279 |
+
{"text": "on windows 11 isko save karo main so raha hoon fqst", "action": "save_file", "target": "save_file", "target_raw": "save_file", "device": "both", "risk": "safe", "group": "G8:dev:B:save_file:hi:2"}
|
| 280 |
+
{"text": "hey assistant saare connected devices dhundo for me", "action": "discover_devices", "target": "discover_devices", "target_raw": "discover_devices", "device": "both", "risk": "safe", "group": "G7:con:scan_lan:3"}
|
| 281 |
+
{"text": "192.168.0.10 ke ports scan kar right now", "action": "scan_ports", "target": "scan_ports host=\"192.168.0.10\"", "target_raw": "scan_ports host=\"192.168.0.10\"", "device": "both", "risk": "caution", "group": "G7:para:g3:scan_ports:hi:0:1"}
|
| 282 |
+
{"text": "on win 11 boss i need to add a cron job to launch ./deploy.sh daily jaldi", "action": "schedule_task", "target": "schedule_task command=\"./deploy.sh\" schedule=\"daily\"", "target_raw": "schedule_task command=\"./deploy.sh\" schedule=\"daily\"", "device": "both", "risk": "critical", "group": "G8:dev:G7:para:g3:schedule_task:en:2:0"}
|
| 283 |
+
{"text": "on my raspberry pi 5 display ko band karo", "action": "screen_off", "target": "screen_off", "target_raw": "screen_off", "device": "both", "risk": "safe", "group": "G8:dev:B:screen_off:hi:3"}
|
| 284 |
+
{"text": "i want to start recording the screen please", "action": "screen_record_start", "target": "screen_record_start", "target_raw": "screen_record_start", "device": "both", "risk": "safe", "group": "G7:para:g:screen_record_start:en:2:0"}
|
| 285 |
+
{"text": "guest aaye hain so recording band kar dena pls", "action": "screen_record_stop", "target": "screen_record_stop", "target_raw": "screen_record_stop", "device": "both", "risk": "safe", "group": "G7:para:g:screen_record_stop:hi:0:2"}
|
| 286 |
+
{"text": "zave a screen shot jali disk full nahi", "action": "screenshot", "target": "screenshot", "target_raw": "screenshot", "device": "both", "risk": "safe", "group": "B:contrast:screenshot"}
|
| 287 |
+
{"text": "raat ho gayi hai, thoda neeche kar dijiye bhai yaar", "action": "scroll_down", "target": "scroll_down", "target_raw": "scroll_down", "device": "both", "risk": "safe", "group": "G7:para:g:scroll_down:hi:2:2"}
|
| 288 |
+
{"text": "please jaldi scroll up", "action": "scroll_up", "target": "scroll_up", "target_raw": "scroll_up", "device": "both", "risk": "safe", "group": "G:scroll_up:en:0"}
|
| 289 |
+
{"text": "mere windows 11 laptop pe search files for gulab jamun recipe", "action": "search_files", "target": "search_files query=\"gulab jamun recipe\"", "target_raw": "search_files query=\"gulab jamun recipe\"", "device": "both", "risk": "safe", "group": "G8:dev:G5:syn:search_files:1"}
|
| 290 |
+
{"text": "find the text ipl score inside files", "action": "search_in_files", "target": "search_in_files query=\"ipl score\"", "target_raw": "search_in_files query=\"ipl score\"", "device": "both", "risk": "safe", "group": "G5:syn:search_in_files:1"}
|
| 291 |
+
{"text": "stress-ng package search karo", "action": "search_package", "target": "search_package name=\"stress-ng\"", "target_raw": "search_package name=\"stress-ng\"", "device": "both", "risk": "safe", "group": "G3:search_package:hi:62"}
|
| 292 |
+
{"text": "raspberry pi 5 ki computer select all text", "action": "select_all", "target": "select_all", "target_raw": "select_all", "device": "both", "risk": "safe", "group": "G8:dev:B:select_all:en:4"}
|
| 293 |
+
{"text": "priya.s@outlook.com ko email karo ki aaj wfh hai on windows 11", "action": "send_email", "target": "send_email to=\"priya.s@outlook.com\" text=\"aaj wfh hai\"", "target_raw": "send_email to=\"priya.s@outlook.com\" text=\"aaj wfh hai\"", "device": "both", "risk": "caution", "group": "G8:dev:G5:new:send_email:6"}
|
| 294 |
+
{"text": "ji send a msg to priya on teams saying pls call", "action": "send_message", "target": "send_message app=teams contact=\"priya\" text=\"pls call\"", "target_raw": "send_message app=teams contact=\"priya\" text=\"pls call\"", "device": "both", "risk": "caution", "group": "G5:new:send_message:0"}
|
| 295 |
+
{"text": "zara please disable the pi ssh server kar sakte ho", "action": "service_disable", "target": "service_disable service=ssh", "target_raw": "service_disable service=ssh", "device": "both", "risk": "critical", "group": "A:disable_ssh/test/0"}
|
| 296 |
+
{"text": "mere liye please enable the pi ssh server zara", "action": "service_enable", "target": "service_enable service=ssh", "target_raw": "service_enable service=ssh", "device": "both", "risk": "critical", "group": "A:enable_ssh/test/0"}
|
| 297 |
+
{"text": "please \"Spooler\" service ko phir start kar dena thanks", "action": "service_restart", "target": "service_restart service=spooler", "target_raw": "service_restart service=spooler", "device": "both", "risk": "critical", "group": "A:service_restart/test/1"}
|
| 298 |
+
{"text": "please start the system service \"cron\" zara", "action": "service_start", "target": "service_start service=cron", "target_raw": "service_start service=cron", "device": "both", "risk": "critical", "group": "A:service_start/test/0"}
|
| 299 |
+
{"text": "\"Spooler\" service ki current state bata dena thanks", "action": "service_status", "target": "service_status service=spooler", "target_raw": "service_status service=spooler", "device": "both", "risk": "safe", "group": "A:service_status/test/1"}
|
| 300 |
+
{"text": "PLEASE STOP THE SYSTEM SERVICE \"W32TIME\" ZARA", "action": "service_stop", "target": "service_stop service=w32time", "target_raw": "service_stop service=w32time", "device": "both", "risk": "critical", "group": "A:service_stop/test/0"}
|
| 301 |
+
{"text": "i am done for today so subah saade chhhe baje ke liye alarm laga do bhai", "action": "set_alarm", "target": "set_alarm time=06:30", "target_raw": "set_alarm time=06:30", "device": "both", "risk": "safe", "group": "G5:para:g:set_alarm:hi:0:0"}
|
| 302 |
+
{"text": "आवाज़ ब्लूटूथ से कीजिए.", "action": "set_audio_output", "target": "set_audio_output output=bluetooth", "target_raw": "set_audio_output output=bluetooth", "device": "both", "risk": "safe", "group": "G5:para:g:set_audio_output:hi:0:1"}
|
| 303 |
+
{"text": "set boot order to sd card abhi ke abhi", "action": "set_boot_order", "target": "set_boot_order order=\"sd card\"", "target_raw": "set_boot_order order=\"sd card\"", "device": "pi", "risk": "critical", "group": "G3:set_boot_order:en:84"}
|
| 304 |
+
{"text": "on windows 11, laptop change boot target to graphical", "action": "set_boot_target", "target": "set_boot_target target=graphical", "target_raw": "set_boot_target target=graphical", "device": "both", "risk": "caution", "group": "G8:dev:G7:para:g2:set_boot_target:en:1:0"}
|
| 305 |
+
{"text": "could you brightness please 38 kar dena", "action": "set_brightness", "target": "set_brightness value=38", "target_raw": "set_brightness value=38", "device": "both", "risk": "caution", "group": "A:set_brightness/test/1"}
|
| 306 |
+
{"text": "taskmake 4521 to 3", "action": "set_cpu_affinity", "target": "set_cpu_affinity pid=4521 cores=\"3\"", "target_raw": "set_cpu_affinity pid=4521 cores=\"3\"", "device": "both", "risk": "caution", "group": "G5:para:g3:set_cpu_affinity:en:2:0"}
|
| 307 |
+
{"text": "jaldi se cpu governor conservative pe rakho", "action": "set_cpu_governor", "target": "set_cpu_governor governor=conservative", "target_raw": "set_cpu_governor governor=conservative", "device": "pi", "risk": "caution", "group": "G5:para:g2:set_cpu_governor:hi:0:0"}
|
| 308 |
+
{"text": "pi 5 pe default preenter epson l3150 ralho ji", "action": "set_default_printer", "target": "set_default_printer name=\"epson l3150\"", "target_raw": "set_default_printer name=\"epson l3150\"", "device": "both", "risk": "safe", "group": "G8:dev:G5:new:set_default_printer:4"}
|
| 309 |
+
{"text": "nvme0n1 ka label backup rakho pls", "action": "set_disk_label", "target": "set_disk_label device=\"nvme0n1\" label=\"backup\"", "target_raw": "set_disk_label device=\"nvme0n1\" label=\"backup\"", "device": "both", "risk": "caution", "group": "G3:set_disk_label:hi:31"}
|
| 310 |
+
{"text": "on win 11 hey laptop display scale 200", "action": "set_display_scale", "target": "set_display_scale value=200", "target_raw": "set_display_scale value=200", "device": "both", "risk": "safe", "group": "G8:dev:G5:new:set_display_scale:3"}
|
| 311 |
+
{"text": "kyboard us set kar do jldi mere windows 11 pe", "action": "set_keyboard_layout", "target": "set_keyboard_layout layout=\"us\"", "target_raw": "set_keyboard_layout layout=\"us\"", "device": "both", "risk": "caution", "group": "G8:dev:G7:para:g3:set_keyboard_layout:hi:1:0"}
|
| 312 |
+
{"text": "set the locale to hi_in.utf-8 fast", "action": "set_locale", "target": "set_locale locale=\"hi_in.utf-8\"", "target_raw": "set_locale locale=\"hi_in.utf-8\"", "device": "both", "risk": "caution", "group": "G3:set_locale:en:1"}
|
| 313 |
+
{"text": "guest aaye hain, cursor slow karo yaar", "action": "set_mouse_speed", "target": "set_mouse_speed value=\"slow\"", "target_raw": "set_mouse_speed value=\"slow\"", "device": "both", "risk": "safe", "group": "G5:new:set_mouse_speed:4"}
|
| 314 |
+
{"text": "i want to change owner of /opt/app to rahul now", "action": "set_owner", "target": "set_owner path=\"/opt/app\" user=\"rahul\"", "target_raw": "set_owner path=\"/opt/app\" user=\"rahul\"", "device": "both", "risk": "critical", "group": "G7:para:g3:set_owner:en:0:0"}
|
| 315 |
+
{"text": "~/venv ki permission theek karo", "action": "set_permissions", "target": "set_permissions path=\"~/venv\"", "target_raw": "set_permissions path=\"~/venv\"", "device": "both", "risk": "critical", "group": "G3:set_permissions:hi:100"}
|
| 316 |
+
{"text": "set the piority of pid 9012 to 5 on the rpi 5", "action": "set_process_priority", "target": "set_process_priority pid=9012 priority=\"5\"", "target_raw": "set_process_priority pid=9012 priority=\"5\"", "device": "both", "risk": "caution", "group": "G8:dev:G3:set_process_priority:en:36"}
|
| 317 |
+
{"text": "refresh rate 144 hz karo for me", "action": "set_refresh_rate", "target": "set_refresh_rate value=144", "target_raw": "set_refresh_rate value=144", "device": "both", "risk": "caution", "group": "G5:new:set_refresh_rate:3"}
|
| 318 |
+
{"text": "configure a reminder in 10 minat to call mom", "action": "set_reminder", "target": "set_reminder amount=10 text=\"call mom\" unit=min", "target_raw": "set_reminder amount=10 text=\"call mom\" unit=min", "device": "both", "risk": "safe", "group": "G5:para:g:set_reminder:en:1:1"}
|
| 319 |
+
{"text": "ji 2560x1440 resolution laga do", "action": "set_resolution", "target": "set_resolution resolution=\"2560x1440\"", "target_raw": "set_resolution resolution=\"2560x1440\"", "device": "both", "risk": "caution", "group": "G5:new:set_resolution:6"}
|
| 320 |
+
{"text": "could you can you resize swap to 2048", "action": "set_swap_size", "target": "set_swap_size size=2048", "target_raw": "set_swap_size size=2048", "device": "both", "risk": "critical", "group": "G7:para:g3:set_swap_size:en:1:1"}
|
| 321 |
+
{"text": "hey pi vm swappiness 100 set karna hai", "action": "set_swappiness", "target": "set_swappiness value=100", "target_raw": "set_swappiness value=100", "device": "both", "risk": "caution", "group": "G7:para:g3:set_swappiness:hi:1:1"}
|
| 322 |
+
{"text": "on win 11 timer for dhai ghante", "action": "set_timer", "target": "set_timer amount=150 unit=min", "target_raw": "set_timer amount=150 unit=min", "device": "both", "risk": "safe", "group": "G8:dev:B:set_timer:en:3"}
|
| 323 |
+
{"text": "hey pi time zone utc karo bhai on my raspberry pi 5", "action": "set_timezone", "target": "set_timezone tz=\"utc\"", "target_raw": "set_timezone tz=\"utc\"", "device": "both", "risk": "caution", "group": "G8:dev:G7:para:g2:set_timezone:hi:1:1"}
|
| 324 |
+
{"text": "can you set the awaz to sixty-five", "action": "set_volume", "target": "set_volume value=65", "target_raw": "set_volume value=65", "device": "both", "risk": "safe", "group": "B:set_volume:en:13"}
|
| 325 |
+
{"text": "please backgrround mountain.jpg kar do, battery bachani hai", "action": "set_wallpaper", "target": "set_wallpaper path=\"mountain.jpg\"", "target_raw": "set_wallpaper path=\"mountain.jpg\"", "device": "both", "risk": "safe", "group": "G5:new:set_wallpaper:6"}
|
| 326 |
+
{"text": "kindly recent commands", "action": "show_command_history", "target": "show_command_history", "target_raw": "show_command_history", "device": "both", "risk": "safe", "group": "G2:show_command_history:en:59"}
|
| 327 |
+
{"text": "don't inc bas sab hatao desktop dikhao mere windows 11 pe", "action": "show_desktop", "target": "show_desktop", "target_raw": "show_desktop", "device": "both", "risk": "safe", "group": "G8:dev:B:contrast:show_desktop"}
|
| 328 |
+
{"text": "fetch pinout", "action": "show_pinout", "target": "show_pinout", "target_raw": "show_pinout", "device": "pi", "risk": "safe", "group": "G7:para:g:show_pinout:en:0:0"}
|
| 329 |
+
{"text": "pi Lalit_Home ka wifi password batao", "action": "show_wifi_password", "target": "show_wifi_password ssid=\"lalit_home\"", "target_raw": "show_wifi_password ssid=\"Lalit_Home\"", "device": "both", "risk": "caution", "group": "G4:show_wifi_password:6"}
|
| 330 |
+
{"text": "on my raspberry pi 5 schedule shutdown in 299 second!", "action": "shutdown", "target": "shutdown amount=299 unit=sec", "target_raw": "shutdown amount=299 unit=sec", "device": "both", "risk": "critical", "group": "G8:dev:B:shutdown:en:15"}
|
| 331 |
+
{"text": "sign out kr do fast", "action": "sign_out", "target": "sign_out", "target_raw": "sign_out", "device": "both", "risk": "critical", "group": "B:sign_out:hi:7"}
|
| 332 |
+
{"text": "kindly please suspend my laptop now", "action": "sleep", "target": "sleep", "target_raw": "sleep", "device": "both", "risk": "critical", "group": "A:sleep/test/0"}
|
| 333 |
+
{"text": "window ko left side kar do jaldi on windows 11", "action": "snap_left", "target": "snap_left", "target_raw": "snap_left", "device": "both", "risk": "safe", "group": "G8:dev:B:snap_left:hi:1"}
|
| 334 |
+
{"text": "on win 11 boss snap window to the right jaldi se", "action": "snap_right", "target": "snap_right", "target_raw": "snap_right", "device": "both", "risk": "safe", "group": "G8:dev:B:snap_right:en:0"}
|
| 335 |
+
{"text": "run a speed test jaldi se", "action": "speed_test", "target": "speed_test", "target_raw": "speed_test", "device": "both", "risk": "safe", "group": "G5:syn:speed_test:0"}
|
| 336 |
+
{"text": "suno can you create a new tmux session train", "action": "start_session", "target": "start_session name=\"train\"", "target_raw": "start_session name=\"train\"", "device": "both", "risk": "safe", "group": "G7:para:g3:start_session:en:1:0"}
|
| 337 |
+
{"text": "windows 11 ki i'm going out toh ollama band karo, meeting hai", "action": "stop_llm", "target": "stop_llm", "target_raw": "stop_llm", "device": "both", "risk": "caution", "group": "G8:dev:G3:stop_llm:hi:44"}
|
| 338 |
+
{"text": "zara could you start the stopwatch", "action": "stopwatch_start", "target": "stopwatch_start", "target_raw": "stopwatch_start", "device": "both", "risk": "safe", "group": "G7:para:g:stopwatch_start:en:0:2"}
|
| 339 |
+
{"text": "stopwatch band kar dijiyega", "action": "stopwatch_stop", "target": "stopwatch_stop", "target_raw": "stopwatch_stop", "device": "both", "risk": "safe", "group": "G7:para:g:stopwatch_stop:hi:0:1"}
|
| 340 |
+
{"text": "hindi keyboard lagao.", "action": "switch_input_language", "target": "switch_input_language", "target_raw": "switch_input_language", "device": "both", "risk": "safe", "group": "G:switch_input_language:hi:1"}
|
| 341 |
+
{"text": "raspberry pi 5 pe ek kaam karo account switch krdo kyunki kaam ho gaya", "action": "switch_user", "target": "switch_user", "target_raw": "switch_user", "device": "both", "risk": "caution", "group": "G8:dev:B:switch_user:hi:5"}
|
| 342 |
+
{"text": "next window fast", "action": "switch_window", "target": "switch_window", "target_raw": "switch_window", "device": "both", "risk": "safe", "group": "B:switch_window:en:3"}
|
| 343 |
+
{"text": "on win 11 hey pi time sync kar", "action": "sync_time", "target": "sync_time", "target_raw": "sync_time", "device": "both", "risk": "safe", "group": "G8:dev:G5:para:g2:sync_time:hi:0:0"}
|
| 344 |
+
{"text": "kaun kaun se app khule hain diikhao on the rpi 5", "action": "task_view", "target": "task_view", "target_raw": "task_view", "device": "both", "risk": "safe", "group": "G8:dev:B:task_view:hi:4"}
|
| 345 |
+
{"text": "bhaiya turn off touchpad jaldi se", "action": "touchpad_off", "target": "touchpad_off", "target_raw": "touchpad_off", "device": "both", "risk": "caution", "group": "G5:new:touchpad_off:0"}
|
| 346 |
+
{"text": "touchpaad enable kardo for me", "action": "touchpad_on", "target": "touchpad_on", "target_raw": "touchpad_on", "device": "both", "risk": "safe", "group": "G5:new:touchpad_on:5"}
|
| 347 |
+
{"text": "on windows 11, github.com tak packetx ka raasta dikhao", "action": "traceroute", "target": "traceroute host=\"github.com\"", "target_raw": "traceroute host=\"github.com\"", "device": "both", "risk": "safe", "group": "G8:dev:G2:traceroute:hi:61"}
|
| 348 |
+
{"text": "i need to convert test.wav to text", "action": "transcribe_audio", "target": "transcribe_audio file=\"test.wav\"", "target_raw": "transcribe_audio file=\"test.wav\"", "device": "both", "risk": "safe", "group": "G7:para:g3:transcribe_audio:en:2:1"}
|
| 349 |
+
{"text": "please copy backup.tar.gz to pi5.local abhi ke abhi", "action": "transfer_files", "target": "transfer_files file=\"backup.tar.gz\" host=\"pi5.local\"", "target_raw": "transfer_files file=\"backup.tar.gz\" host=\"pi5.local\"", "device": "both", "risk": "caution", "group": "G7:para:g3:transfer_files:en:0:0"}
|
| 350 |
+
{"text": "on my raspberry pi 5 type the text lecture tax crypto film", "action": "type_text", "target": "type_text text=\"lecture tax crypto film\"", "target_raw": "type_text text=\"lecture tax crypto film\"", "device": "both", "risk": "safe", "group": "G8:dev:B:type_text:en:3"}
|
| 351 |
+
{"text": "172.16.0.9 ko unban kar dijiyega please abhi", "action": "unban_ip", "target": "unban_ip ip=\"172.16.0.9\"", "target_raw": "unban_ip ip=\"172.16.0.9\"", "device": "both", "risk": "caution", "group": "G7:para:g3:unban_ip:hi:0:2"}
|
| 352 |
+
{"text": "i have a meeting toh undo for me", "action": "undo", "target": "undo", "target_raw": "undo", "device": "both", "risk": "safe", "group": "B:undo:en:0"}
|
| 353 |
+
{"text": "on win 11 ek kaam karo word ko hata do pease", "action": "uninstall_app", "target": "uninstall_app app=word", "target_raw": "uninstall_app app=word", "device": "both", "risk": "critical", "group": "G8:dev:G7:para:g:uninstall_app:hi:1:0"}
|
| 354 |
+
{"text": "zara uninstall redis", "action": "uninstall_package", "target": "uninstall_package name=\"redis\"", "target_raw": "uninstall_package name=\"redis\"", "device": "both", "risk": "critical", "group": "G3:uninstall_package:en:63"}
|
| 355 |
+
{"text": "hey computer tell me something funny kar sakte ho", "action": "unknown", "target": "unknown", "target_raw": "unknown", "device": "both", "risk": "safe", "group": "A:unknown/test/5"}
|
| 356 |
+
{"text": "ssd nikalo right now", "action": "unmount_drive", "target": "unmount_drive device=\"ssd\"", "target_raw": "unmount_drive device=\"ssd\"", "device": "both", "risk": "caution", "group": "G5:para:g2:unmount_drive:hi:1:0"}
|
| 357 |
+
{"text": "can you meri awaaz unmute kar dena thanks", "action": "unmute", "target": "unmute", "target_raw": "unmute", "device": "both", "risk": "safe", "group": "A:unmute/test/1"}
|
| 358 |
+
{"text": "repository list refresy kro", "action": "update_packages", "target": "update_packages", "target_raw": "update_packages", "device": "both", "risk": "safe", "group": "G5:syn:update_packages:3"}
|
| 359 |
+
{"text": "raspberry pi 5 pe mere computer pe speaker ka level neeche karo abhi", "action": "volume_down", "target": "volume_down", "target_raw": "volume_down", "device": "both", "risk": "safe", "group": "G8:dev:A:volume_down/practical/3"}
|
| 360 |
+
{"text": "increase the speaker volume by 35 right now", "action": "volume_up", "target": "volume_up step=35", "target_raw": "volume_up step=35", "device": "both", "risk": "safe", "group": "B:volume_up:en:14"}
|
| 361 |
+
{"text": "bhai vpn chalu karo", "action": "vpn_connect", "target": "vpn_connect", "target_raw": "vpn_connect", "device": "both", "risk": "safe", "group": "G5:pol:vpn_connect:0:4"}
|
| 362 |
+
{"text": "stop vpn connction thanks", "action": "vpn_disconnect", "target": "vpn_disconnect", "target_raw": "vpn_disconnect", "device": "both", "risk": "caution", "group": "G5:pol:vpn_disconnect:2:3"}
|
| 363 |
+
{"text": "ek kaam karo python3 main.py ko har 2 second chalao jaldi", "action": "watch_command", "target": "watch_command command=\"python3 main.py\" interval=2", "target_raw": "watch_command command=\"python3 main.py\" interval=2", "device": "both", "risk": "caution", "group": "G7:para:g3:watch_command:hi:0:0"}
|
| 364 |
+
{"text": "localhost:9000 kholo cred hungry_raj/Gpt#123 se login kar de", "action": "web_login", "target": "web_login site=\"localhost:9000\" username=\"hungry_raj\" password=\"gpt#123\"", "target_raw": "web_login site=\"localhost:9000\" username=\"hungry_raj\" password=\"Gpt#123\"", "device": "both", "risk": "caution", "group": "G2:web_login:local:1"}
|
| 365 |
+
{"text": "google karo raasta brairxaur", "action": "web_search", "target": "web_search query=\"raasta brairxaur\"", "target_raw": "web_search query=\"raasta brairxaur\"", "device": "both", "risk": "safe", "group": "B:web_search:hi:7"}
|
| 366 |
+
{"text": "turn off the wireless", "action": "wifi_off", "target": "wifi_off", "target_raw": "wifi_off", "device": "both", "risk": "critical", "group": "B:wifi_off:en:0"}
|
| 367 |
+
{"text": "hey computer ab wireless ko chalu kar dena na", "action": "wifi_on", "target": "wifi_on", "target_raw": "wifi_on", "device": "both", "risk": "caution", "group": "A:wifi_on/test/1"}
|
| 368 |
+
{"text": "not instagram website le aao, youtube me how to agla gaana dhundo", "action": "youtube_search", "target": "youtube_search query=\"how to agla gaana\"", "target_raw": "youtube_search query=\"how to agla gaana\"", "device": "both", "risk": "safe", "group": "B:contrast:youtube_search"}
|
| 369 |
+
{"text": "guest aaye hain, the paeg bada karo", "action": "zoom_in", "target": "zoom_in", "target_raw": "zoom_in", "device": "both", "risk": "safe", "group": "G5:pol:zoom_in:1:1"}
|
| 370 |
+
{"text": "kindly zoom out more", "action": "zoom_out", "target": "zoom_out", "target_raw": "zoom_out", "device": "both", "risk": "safe", "group": "B:zoom_out:en:5"}
|
| 371 |
+
{"text": "actual size, call pe hoon", "action": "zoom_reset", "target": "zoom_reset", "target_raw": "zoom_reset", "device": "both", "risk": "safe", "group": "B:zoom_reset:en:3"}
|
eval/make_report.py
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""Generate testresult.html: every unique activity prompt -> expected intent, model output, executor command (Windows + Pi),
|
| 2 |
+
device, model status, executor status (real execution for safe read-only actions on this machine, dry-run otherwise).
|
| 3 |
+
python eval/make_report.py <run_dir_with_eval/> (uses model/ numpy runtime for the curated rows)"""
|
| 4 |
+
import json, os, sys, html, time, collections, platform as _pf
|
| 5 |
+
HERE = os.path.dirname(os.path.abspath(__file__)); ROOT = os.path.dirname(HERE)
|
| 6 |
+
sys.path.insert(0, os.path.join(ROOT, "model")); sys.path.insert(0, os.path.join(ROOT, "executor"))
|
| 7 |
+
from runtime import CommandModel # noqa
|
| 8 |
+
from catalog import ACTIONS # noqa
|
| 9 |
+
import executor as EX # noqa
|
| 10 |
+
run_dir = sys.argv[1] if len(sys.argv) > 1 else None
|
| 11 |
+
_sp = os.path.join(run_dir, "eval", "summary.json") if run_dir else os.path.join(HERE, "model_eval_summary.json")
|
| 12 |
+
summary = json.load(open(_sp)) if os.path.exists(_sp) else {}
|
| 13 |
+
curated = [json.loads(l) for l in open(os.path.join(HERE, "curated_prompts.jsonl"), encoding="utf-8")]
|
| 14 |
+
model = CommandModel(os.path.join(ROOT, "model"))
|
| 15 |
+
esc = lambda s: html.escape(str(s if s is not None else ""))
|
| 16 |
+
EXEC_HERE = {"sh", "py"} # kinds that can really run on this Linux box
|
| 17 |
+
rows = []; t_all = time.time(); exec_counts = collections.Counter(); model_ok = 0
|
| 18 |
+
for r in curated:
|
| 19 |
+
out = model.predict(r["text"]); cmd = {k: v for k, v in out.items() if k != "_meta"}; canon = out["_meta"]["canonical"]
|
| 20 |
+
ok = canon == r["target"]; model_ok += ok
|
| 21 |
+
plans = {pl: EX.plan(cmd, pl, r["text"]) for pl in ("pi", "win")}
|
| 22 |
+
ppi = plans["pi"]; st, outp = "", ""
|
| 23 |
+
if not ppi.supported: st, outp = "n/a on Pi/Linux", ppi.note
|
| 24 |
+
elif ppi.kind not in EXEC_HERE: st, outp = "dry-run", f"{ppi.kind} step (needs desktop/keyboard); command rendered only"
|
| 25 |
+
elif ppi.risk != "safe": st, outp = f"dry-run ({ppi.risk}, gated)", "rendered only; UI asks for confirmation before running"
|
| 26 |
+
elif not ok: st, outp = "skipped (model mismatch)", "not executed because the parse differed from the expected intent"
|
| 27 |
+
else:
|
| 28 |
+
res = EX.run(ppi, cmd, dry_run=False); outp = res["output"][:300]
|
| 29 |
+
st = "executed: tool not on this machine" if ("command not found" in outp or ("No such file" in outp and "/sys/" in outp)) else f"executed: {res['status']}"
|
| 30 |
+
exec_counts[st.split(":")[0].split(" (")[0]] += 1
|
| 31 |
+
rows.append({"text": r["text"], "action": r["action"], "device": r["device"], "risk": r["risk"], "expected": r["target"], "pred": canon, "json": cmd, "ok": ok, "conf": out["_meta"]["confidence"],
|
| 32 |
+
"cmd_win": plans["win"].command if plans["win"].supported else "— " + plans["win"].note, "cmd_pi": ppi.command if ppi.supported else "— " + ppi.note, "kind_pi": ppi.kind, "exec_status": st, "exec_out": outp})
|
| 33 |
+
acc = model_ok / len(rows)
|
| 34 |
+
def cell_json(j): return "<br>".join(f"<span class=k>{esc(k)}</span>={esc('••••' if k == 'password' else v)}" for k, v in j.items() if k != "action")
|
| 35 |
+
summ_rows = "".join(f"<tr><td>{esc(n)}</td><td>{s['n']}</td><td class='{ 'g' if s['exact']>=0.99 else 'y' if s['exact']>=0.95 else 'r'}'><b>{s['exact']*100:.2f}%</b></td><td>{s['action']*100:.2f}%</td><td class=small>{esc(', '.join(f'{a}→{b} ({n})' for (a,b),n in s['top_confusions'][:5]))}</td></tr>" for n, s in summary.items())
|
| 36 |
+
by_risk = collections.Counter(r["risk"] for r in rows); by_dev = collections.Counter(r["device"] for r in rows)
|
| 37 |
+
table = "".join(f"""<tr class="{'ok' if r['ok'] else 'fail'}"><td>{i+1}</td><td>{esc(r['text'])}</td><td><b>{esc(r['action'])}</b><div class=small>{esc(ACTIONS[r['action']]['desc'])}</div></td>
|
| 38 |
+
<td><code>{esc(r['pred'])}</code><div class=small>{cell_json(r['json'])}</div><div class=small>conf {r['conf']*100:.1f}%</div></td>
|
| 39 |
+
<td class="{'g' if r['ok'] else 'r'}"><b>{'PASS' if r['ok'] else 'FAIL'}</b>{'' if r['ok'] else '<div class=small>expected: <code>'+esc(r['expected'])+'</code></div>'}</td>
|
| 40 |
+
<td><span class="pill {esc(r['risk'])}">{esc(r['risk'])}</span><div class=small>{esc(r['device'])}</div></td>
|
| 41 |
+
<td><div class=small><b>Windows</b></div><pre>{esc(r['cmd_win'][:400])}</pre><div class=small><b>Raspberry Pi</b> [{esc(r['kind_pi'])}]</div><pre>{esc(r['cmd_pi'][:400])}</pre></td>
|
| 42 |
+
<td><b>{esc(r['exec_status'])}</b><pre>{esc(r['exec_out'][:300])}</pre></td></tr>""" for i, r in enumerate(rows))
|
| 43 |
+
doc = f"""<!doctype html><html lang=en><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><title>Union Command Agent — test results</title>
|
| 44 |
+
<style>:root{{--bg:#0f1115;--panel:#171a21;--panel2:#1e222b;--border:#2a2f3a;--text:#e6e8ee;--muted:#9aa3b2;--acc:#c51a4a;--ok:#6cc04a;--warn:#f2c94c;--bad:#ff6b6b}}
|
| 45 |
+
body{{margin:0;background:var(--bg);color:var(--text);font:13.5px/1.45 system-ui,Segoe UI,Roboto,sans-serif}}header{{background:var(--panel);border-bottom:1px solid var(--border);padding:14px 20px}}h1{{margin:0 0 4px;font-size:18px}}main{{padding:16px 20px 60px;max-width:1700px;margin:0 auto}}
|
| 46 |
+
.grid{{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:10px;margin:12px 0}}.stat{{background:var(--panel);border:1px solid var(--border);border-radius:8px;padding:10px 12px}}.stat b{{font-size:22px;display:block}}.stat span{{color:var(--muted);font-size:12px}}
|
| 47 |
+
table{{width:100%;border-collapse:collapse;background:var(--panel);border:1px solid var(--border);border-radius:8px;overflow:hidden;margin:10px 0 22px}}th{{text-align:left;padding:8px 10px;font-size:11px;letter-spacing:.04em;text-transform:uppercase;color:var(--muted);background:var(--panel2);border-bottom:1px solid var(--border)}}
|
| 48 |
+
td{{padding:8px 10px;border-bottom:1px solid var(--border);vertical-align:top}}tr.fail td{{background:#1f1517}}pre{{margin:2px 0;white-space:pre-wrap;word-break:break-all;background:#0b0d12;padding:5px 7px;border-radius:5px;font-size:11.5px;max-height:120px;overflow:auto}}code{{font-family:ui-monospace,Consolas,monospace;font-size:12px}}
|
| 49 |
+
.small{{color:var(--muted);font-size:11.5px}}.k{{color:var(--muted)}}.g{{color:var(--ok)}}.y{{color:var(--warn)}}.r{{color:var(--bad)}}.pill{{display:inline-block;font-size:11px;padding:1px 7px;border-radius:10px;border:1px solid var(--border)}}.safe{{color:var(--ok)}}.caution{{color:var(--warn)}}.critical{{color:var(--bad)}}
|
| 50 |
+
h2{{font-size:15px;margin:22px 0 6px}}p.note{{color:var(--muted);max-width:1100px}}input{{width:100%;padding:8px 10px;background:#0b0d12;color:var(--text);border:1px solid var(--border);border-radius:6px;font:inherit;margin:6px 0}}</style></head><body>
|
| 51 |
+
<header><h1>Union Command Agent — test results</h1><div class=small>generated {time.strftime('%Y-%m-%d %H:%M')} on {esc(_pf.node())} ({esc(_pf.system())}) · model: char-level transformer seq2seq, {sum(v.size for v in model.W.values())/1e6:.2f}M params, grammar-constrained decoding · {len(ACTIONS)} actions</div></header><main>
|
| 52 |
+
<div class=grid><div class=stat><b class="{'g' if acc>=0.99 else 'y'}">{acc*100:.2f}%</b><span>unique-activity prompts exact match ({model_ok}/{len(rows)}) — one held-out-template prompt per action</span></div>
|
| 53 |
+
{''.join(f"<div class=stat><b class='{'g' if s['exact']>=0.99 else 'y' if s['exact']>=0.95 else 'r'}'>{s['exact']*100:.2f}%</b><span>{esc(n)} exact (n={s['n']})</span></div>" for n, s in summary.items() if n in ('val','test_strict','curated_strict','B_golden_final'))}
|
| 54 |
+
<div class=stat><b>{len(rows)}</b><span>activities: safe {by_risk['safe']} · caution {by_risk['caution']} · critical {by_risk['critical']}</span></div><div class=stat><b>{by_dev['both']}/{by_dev['pi']}/{by_dev['windows']}</b><span>both / Pi-only / Windows-only</span></div></div>
|
| 55 |
+
<h2>Model accuracy per set</h2><p class=note><b>exact</b> = full canonical target (action + every slot value) matches. <b>action</b> = action label only. <i>val</i> shares templates with training. <i>test</i> / <i>curated</i> are held-out <b>templates</b>; since v6 the dataset also contains machine paraphrases of templates, so a held-out paraphrase can have a sibling paraphrase in train — <i>test_strict</i> / <i>curated_strict</i> keep only base-template rows (no sibling anywhere in train) and are the honest generalisation numbers. A_* / B_* are the two source projects' own evaluation sets relabelled to the union schema (their label conventions differ from the union in places, so they under-count).</p>
|
| 56 |
+
<table><thead><tr><th>set</th><th>n</th><th>exact</th><th>action</th><th>top confusions</th></tr></thead><tbody>{summ_rows}</tbody></table>
|
| 57 |
+
<h2>Executor status on this machine</h2><p class=note>Safe, read-only actions whose Pi/Linux command is runnable here were <b>actually executed</b> and their output captured. Caution/critical actions are rendered but gated (the UI asks for confirmation; critical ones require typing the action name). Key/desktop steps need a display. {esc(', '.join(f'{k}: {v}' for k, v in exec_counts.most_common()))}.</p>
|
| 58 |
+
<h2>Every unique activity ({len(rows)})</h2><input id=q placeholder="filter… (e.g. gpio, wifi, FAIL, critical)" oninput="f()">
|
| 59 |
+
<table id=t><thead><tr><th>#</th><th style="width:15%">prompt</th><th style="width:11%">intent (expected)</th><th style="width:15%">model output</th><th>model</th><th>risk / device</th><th style="width:30%">executor command</th><th style="width:14%">executor status</th></tr></thead><tbody>{table}</tbody></table>
|
| 60 |
+
<script>function f(){{const q=document.getElementById('q').value.toLowerCase();document.querySelectorAll('#t tbody tr').forEach(r=>r.style.display=r.textContent.toLowerCase().includes(q)?'':'none')}}</script></main></body></html>"""
|
| 61 |
+
open(os.path.join(HERE, "testresult.html"), "w", encoding="utf-8").write(doc)
|
| 62 |
+
print(f"curated exact {acc*100:.2f}% ({model_ok}/{len(rows)}); executor: {dict(exec_counts)}; report in {time.time()-t_all:.0f}s -> eval/testresult.html")
|
eval/model_eval_summary.json
ADDED
|
@@ -0,0 +1,747 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"val": {
|
| 3 |
+
"n": 10413,
|
| 4 |
+
"exact": 0.991,
|
| 5 |
+
"action": 0.9929,
|
| 6 |
+
"top_confusions": [
|
| 7 |
+
[
|
| 8 |
+
[
|
| 9 |
+
"get_hostname",
|
| 10 |
+
"unknown"
|
| 11 |
+
],
|
| 12 |
+
9
|
| 13 |
+
],
|
| 14 |
+
[
|
| 15 |
+
[
|
| 16 |
+
"rename_file",
|
| 17 |
+
"hash_file"
|
| 18 |
+
],
|
| 19 |
+
6
|
| 20 |
+
],
|
| 21 |
+
[
|
| 22 |
+
[
|
| 23 |
+
"unknown",
|
| 24 |
+
"help"
|
| 25 |
+
],
|
| 26 |
+
5
|
| 27 |
+
],
|
| 28 |
+
[
|
| 29 |
+
[
|
| 30 |
+
"unknown",
|
| 31 |
+
"type_text"
|
| 32 |
+
],
|
| 33 |
+
4
|
| 34 |
+
],
|
| 35 |
+
[
|
| 36 |
+
[
|
| 37 |
+
"unknown",
|
| 38 |
+
"connect_wifi"
|
| 39 |
+
],
|
| 40 |
+
3
|
| 41 |
+
],
|
| 42 |
+
[
|
| 43 |
+
[
|
| 44 |
+
"unknown",
|
| 45 |
+
"hibernate"
|
| 46 |
+
],
|
| 47 |
+
2
|
| 48 |
+
],
|
| 49 |
+
[
|
| 50 |
+
[
|
| 51 |
+
"set_alarm",
|
| 52 |
+
"set_alarm"
|
| 53 |
+
],
|
| 54 |
+
2
|
| 55 |
+
],
|
| 56 |
+
[
|
| 57 |
+
[
|
| 58 |
+
"get_cpu_clock",
|
| 59 |
+
"get_time"
|
| 60 |
+
],
|
| 61 |
+
2
|
| 62 |
+
],
|
| 63 |
+
[
|
| 64 |
+
[
|
| 65 |
+
"shutdown",
|
| 66 |
+
"shutdown"
|
| 67 |
+
],
|
| 68 |
+
2
|
| 69 |
+
],
|
| 70 |
+
[
|
| 71 |
+
[
|
| 72 |
+
"youtube_search",
|
| 73 |
+
"youtube_search"
|
| 74 |
+
],
|
| 75 |
+
2
|
| 76 |
+
],
|
| 77 |
+
[
|
| 78 |
+
[
|
| 79 |
+
"search_files",
|
| 80 |
+
"search_files"
|
| 81 |
+
],
|
| 82 |
+
2
|
| 83 |
+
],
|
| 84 |
+
[
|
| 85 |
+
[
|
| 86 |
+
"type_text",
|
| 87 |
+
"type_text"
|
| 88 |
+
],
|
| 89 |
+
2
|
| 90 |
+
]
|
| 91 |
+
],
|
| 92 |
+
"secs": 21
|
| 93 |
+
},
|
| 94 |
+
"test": {
|
| 95 |
+
"n": 10618,
|
| 96 |
+
"exact": 0.9837,
|
| 97 |
+
"action": 0.9852,
|
| 98 |
+
"top_confusions": [
|
| 99 |
+
[
|
| 100 |
+
[
|
| 101 |
+
"unknown",
|
| 102 |
+
"clarify"
|
| 103 |
+
],
|
| 104 |
+
19
|
| 105 |
+
],
|
| 106 |
+
[
|
| 107 |
+
[
|
| 108 |
+
"unknown",
|
| 109 |
+
"get_reboot_history"
|
| 110 |
+
],
|
| 111 |
+
18
|
| 112 |
+
],
|
| 113 |
+
[
|
| 114 |
+
[
|
| 115 |
+
"format_drive",
|
| 116 |
+
"get_sdcard_info"
|
| 117 |
+
],
|
| 118 |
+
15
|
| 119 |
+
],
|
| 120 |
+
[
|
| 121 |
+
[
|
| 122 |
+
"unknown",
|
| 123 |
+
"web_search"
|
| 124 |
+
],
|
| 125 |
+
10
|
| 126 |
+
],
|
| 127 |
+
[
|
| 128 |
+
[
|
| 129 |
+
"unknown",
|
| 130 |
+
"cancel_shutdown"
|
| 131 |
+
],
|
| 132 |
+
10
|
| 133 |
+
],
|
| 134 |
+
[
|
| 135 |
+
[
|
| 136 |
+
"discover_devices",
|
| 137 |
+
"scan_lan"
|
| 138 |
+
],
|
| 139 |
+
9
|
| 140 |
+
],
|
| 141 |
+
[
|
| 142 |
+
[
|
| 143 |
+
"board_to_bcm",
|
| 144 |
+
"bcm_to_board"
|
| 145 |
+
],
|
| 146 |
+
8
|
| 147 |
+
],
|
| 148 |
+
[
|
| 149 |
+
[
|
| 150 |
+
"unknown",
|
| 151 |
+
"shutdown"
|
| 152 |
+
],
|
| 153 |
+
7
|
| 154 |
+
],
|
| 155 |
+
[
|
| 156 |
+
[
|
| 157 |
+
"search_in_files",
|
| 158 |
+
"search_files"
|
| 159 |
+
],
|
| 160 |
+
7
|
| 161 |
+
],
|
| 162 |
+
[
|
| 163 |
+
[
|
| 164 |
+
"close_app",
|
| 165 |
+
"uninstall_app"
|
| 166 |
+
],
|
| 167 |
+
6
|
| 168 |
+
],
|
| 169 |
+
[
|
| 170 |
+
[
|
| 171 |
+
"service_start",
|
| 172 |
+
"service_enable"
|
| 173 |
+
],
|
| 174 |
+
5
|
| 175 |
+
],
|
| 176 |
+
[
|
| 177 |
+
[
|
| 178 |
+
"unknown",
|
| 179 |
+
"undo"
|
| 180 |
+
],
|
| 181 |
+
4
|
| 182 |
+
]
|
| 183 |
+
],
|
| 184 |
+
"secs": 19
|
| 185 |
+
},
|
| 186 |
+
"test_strict": {
|
| 187 |
+
"n": 6611,
|
| 188 |
+
"exact": 0.9753,
|
| 189 |
+
"action": 0.977,
|
| 190 |
+
"top_confusions": [],
|
| 191 |
+
"secs": 0
|
| 192 |
+
},
|
| 193 |
+
"curated": {
|
| 194 |
+
"n": 371,
|
| 195 |
+
"exact": 0.9946,
|
| 196 |
+
"action": 0.9973,
|
| 197 |
+
"top_confusions": [
|
| 198 |
+
[
|
| 199 |
+
[
|
| 200 |
+
"gpio_on",
|
| 201 |
+
"gpio_on"
|
| 202 |
+
],
|
| 203 |
+
1
|
| 204 |
+
],
|
| 205 |
+
[
|
| 206 |
+
[
|
| 207 |
+
"discover_devices",
|
| 208 |
+
"scan_lan"
|
| 209 |
+
],
|
| 210 |
+
1
|
| 211 |
+
]
|
| 212 |
+
],
|
| 213 |
+
"secs": 1
|
| 214 |
+
},
|
| 215 |
+
"curated_strict": {
|
| 216 |
+
"n": 253,
|
| 217 |
+
"exact": 0.9921,
|
| 218 |
+
"action": 0.996,
|
| 219 |
+
"top_confusions": [],
|
| 220 |
+
"secs": 0
|
| 221 |
+
},
|
| 222 |
+
"A_challenge": {
|
| 223 |
+
"n": 1152,
|
| 224 |
+
"exact": 0.974,
|
| 225 |
+
"action": 0.9844,
|
| 226 |
+
"top_confusions": [
|
| 227 |
+
[
|
| 228 |
+
[
|
| 229 |
+
"open_app",
|
| 230 |
+
"open_app"
|
| 231 |
+
],
|
| 232 |
+
6
|
| 233 |
+
],
|
| 234 |
+
[
|
| 235 |
+
[
|
| 236 |
+
"read_file",
|
| 237 |
+
"read_file"
|
| 238 |
+
],
|
| 239 |
+
6
|
| 240 |
+
],
|
| 241 |
+
[
|
| 242 |
+
[
|
| 243 |
+
"unknown",
|
| 244 |
+
"set_volume"
|
| 245 |
+
],
|
| 246 |
+
6
|
| 247 |
+
],
|
| 248 |
+
[
|
| 249 |
+
[
|
| 250 |
+
"unknown",
|
| 251 |
+
"format_drive"
|
| 252 |
+
],
|
| 253 |
+
6
|
| 254 |
+
],
|
| 255 |
+
[
|
| 256 |
+
[
|
| 257 |
+
"unknown",
|
| 258 |
+
"cancel_shutdown"
|
| 259 |
+
],
|
| 260 |
+
4
|
| 261 |
+
],
|
| 262 |
+
[
|
| 263 |
+
[
|
| 264 |
+
"media_play",
|
| 265 |
+
"media_play_pause"
|
| 266 |
+
],
|
| 267 |
+
1
|
| 268 |
+
],
|
| 269 |
+
[
|
| 270 |
+
[
|
| 271 |
+
"unknown",
|
| 272 |
+
"bookmark_page"
|
| 273 |
+
],
|
| 274 |
+
1
|
| 275 |
+
]
|
| 276 |
+
],
|
| 277 |
+
"secs": 1
|
| 278 |
+
},
|
| 279 |
+
"A_practical-dev": {
|
| 280 |
+
"n": 1321,
|
| 281 |
+
"exact": 0.9531,
|
| 282 |
+
"action": 0.9644,
|
| 283 |
+
"top_confusions": [
|
| 284 |
+
[
|
| 285 |
+
[
|
| 286 |
+
"read_file",
|
| 287 |
+
"read_file"
|
| 288 |
+
],
|
| 289 |
+
8
|
| 290 |
+
],
|
| 291 |
+
[
|
| 292 |
+
[
|
| 293 |
+
"unknown",
|
| 294 |
+
"format_drive"
|
| 295 |
+
],
|
| 296 |
+
8
|
| 297 |
+
],
|
| 298 |
+
[
|
| 299 |
+
[
|
| 300 |
+
"open_app",
|
| 301 |
+
"open_app"
|
| 302 |
+
],
|
| 303 |
+
6
|
| 304 |
+
],
|
| 305 |
+
[
|
| 306 |
+
[
|
| 307 |
+
"unknown",
|
| 308 |
+
"set_volume"
|
| 309 |
+
],
|
| 310 |
+
6
|
| 311 |
+
],
|
| 312 |
+
[
|
| 313 |
+
[
|
| 314 |
+
"set_brightness",
|
| 315 |
+
"clarify"
|
| 316 |
+
],
|
| 317 |
+
5
|
| 318 |
+
],
|
| 319 |
+
[
|
| 320 |
+
[
|
| 321 |
+
"unknown",
|
| 322 |
+
"cancel_shutdown"
|
| 323 |
+
],
|
| 324 |
+
4
|
| 325 |
+
],
|
| 326 |
+
[
|
| 327 |
+
[
|
| 328 |
+
"set_volume",
|
| 329 |
+
"clarify"
|
| 330 |
+
],
|
| 331 |
+
4
|
| 332 |
+
],
|
| 333 |
+
[
|
| 334 |
+
[
|
| 335 |
+
"unknown",
|
| 336 |
+
"factory_reset"
|
| 337 |
+
],
|
| 338 |
+
3
|
| 339 |
+
],
|
| 340 |
+
[
|
| 341 |
+
[
|
| 342 |
+
"clarify",
|
| 343 |
+
"set_brightness"
|
| 344 |
+
],
|
| 345 |
+
3
|
| 346 |
+
],
|
| 347 |
+
[
|
| 348 |
+
[
|
| 349 |
+
"clarify",
|
| 350 |
+
"set_volume"
|
| 351 |
+
],
|
| 352 |
+
2
|
| 353 |
+
],
|
| 354 |
+
[
|
| 355 |
+
[
|
| 356 |
+
"media_play",
|
| 357 |
+
"media_play_pause"
|
| 358 |
+
],
|
| 359 |
+
1
|
| 360 |
+
],
|
| 361 |
+
[
|
| 362 |
+
[
|
| 363 |
+
"unknown",
|
| 364 |
+
"bookmark_page"
|
| 365 |
+
],
|
| 366 |
+
1
|
| 367 |
+
]
|
| 368 |
+
],
|
| 369 |
+
"secs": 1
|
| 370 |
+
},
|
| 371 |
+
"A_practical-holdout": {
|
| 372 |
+
"n": 428,
|
| 373 |
+
"exact": 0.9206,
|
| 374 |
+
"action": 0.9416,
|
| 375 |
+
"top_confusions": [
|
| 376 |
+
[
|
| 377 |
+
[
|
| 378 |
+
"clarify",
|
| 379 |
+
"set_volume"
|
| 380 |
+
],
|
| 381 |
+
4
|
| 382 |
+
],
|
| 383 |
+
[
|
| 384 |
+
[
|
| 385 |
+
"ping",
|
| 386 |
+
"ping"
|
| 387 |
+
],
|
| 388 |
+
3
|
| 389 |
+
],
|
| 390 |
+
[
|
| 391 |
+
[
|
| 392 |
+
"open_app",
|
| 393 |
+
"open_app"
|
| 394 |
+
],
|
| 395 |
+
2
|
| 396 |
+
],
|
| 397 |
+
[
|
| 398 |
+
[
|
| 399 |
+
"list_files",
|
| 400 |
+
"search_in_files"
|
| 401 |
+
],
|
| 402 |
+
2
|
| 403 |
+
],
|
| 404 |
+
[
|
| 405 |
+
[
|
| 406 |
+
"list_partitions",
|
| 407 |
+
"unknown"
|
| 408 |
+
],
|
| 409 |
+
2
|
| 410 |
+
],
|
| 411 |
+
[
|
| 412 |
+
[
|
| 413 |
+
"read_file",
|
| 414 |
+
"read_file"
|
| 415 |
+
],
|
| 416 |
+
2
|
| 417 |
+
],
|
| 418 |
+
[
|
| 419 |
+
[
|
| 420 |
+
"open_app",
|
| 421 |
+
"open_file"
|
| 422 |
+
],
|
| 423 |
+
1
|
| 424 |
+
],
|
| 425 |
+
[
|
| 426 |
+
[
|
| 427 |
+
"get_system_info",
|
| 428 |
+
"list_services"
|
| 429 |
+
],
|
| 430 |
+
1
|
| 431 |
+
],
|
| 432 |
+
[
|
| 433 |
+
[
|
| 434 |
+
"service_stop",
|
| 435 |
+
"service_start"
|
| 436 |
+
],
|
| 437 |
+
1
|
| 438 |
+
],
|
| 439 |
+
[
|
| 440 |
+
[
|
| 441 |
+
"run_script",
|
| 442 |
+
"format_drive"
|
| 443 |
+
],
|
| 444 |
+
1
|
| 445 |
+
],
|
| 446 |
+
[
|
| 447 |
+
[
|
| 448 |
+
"run_script",
|
| 449 |
+
"factory_reset"
|
| 450 |
+
],
|
| 451 |
+
1
|
| 452 |
+
],
|
| 453 |
+
[
|
| 454 |
+
[
|
| 455 |
+
"set_volume",
|
| 456 |
+
"set_volume"
|
| 457 |
+
],
|
| 458 |
+
1
|
| 459 |
+
]
|
| 460 |
+
],
|
| 461 |
+
"secs": 1
|
| 462 |
+
},
|
| 463 |
+
"B_golden_dev": {
|
| 464 |
+
"n": 383,
|
| 465 |
+
"exact": 0.9504,
|
| 466 |
+
"action": 0.9582,
|
| 467 |
+
"top_confusions": [
|
| 468 |
+
[
|
| 469 |
+
[
|
| 470 |
+
"youtube_search",
|
| 471 |
+
"youtube_search"
|
| 472 |
+
],
|
| 473 |
+
1
|
| 474 |
+
],
|
| 475 |
+
[
|
| 476 |
+
[
|
| 477 |
+
"unknown",
|
| 478 |
+
"volume_up"
|
| 479 |
+
],
|
| 480 |
+
1
|
| 481 |
+
],
|
| 482 |
+
[
|
| 483 |
+
[
|
| 484 |
+
"open_site",
|
| 485 |
+
"web_search"
|
| 486 |
+
],
|
| 487 |
+
1
|
| 488 |
+
],
|
| 489 |
+
[
|
| 490 |
+
[
|
| 491 |
+
"restart",
|
| 492 |
+
"cancel_shutdown"
|
| 493 |
+
],
|
| 494 |
+
1
|
| 495 |
+
],
|
| 496 |
+
[
|
| 497 |
+
[
|
| 498 |
+
"unknown",
|
| 499 |
+
"get_temperature"
|
| 500 |
+
],
|
| 501 |
+
1
|
| 502 |
+
],
|
| 503 |
+
[
|
| 504 |
+
[
|
| 505 |
+
"unknown",
|
| 506 |
+
"get_kernel_log"
|
| 507 |
+
],
|
| 508 |
+
1
|
| 509 |
+
],
|
| 510 |
+
[
|
| 511 |
+
[
|
| 512 |
+
"open_app",
|
| 513 |
+
"open_site"
|
| 514 |
+
],
|
| 515 |
+
1
|
| 516 |
+
],
|
| 517 |
+
[
|
| 518 |
+
[
|
| 519 |
+
"unknown",
|
| 520 |
+
"open_file"
|
| 521 |
+
],
|
| 522 |
+
1
|
| 523 |
+
],
|
| 524 |
+
[
|
| 525 |
+
[
|
| 526 |
+
"open_app",
|
| 527 |
+
"open_app"
|
| 528 |
+
],
|
| 529 |
+
1
|
| 530 |
+
],
|
| 531 |
+
[
|
| 532 |
+
[
|
| 533 |
+
"unknown",
|
| 534 |
+
"set_display_scale"
|
| 535 |
+
],
|
| 536 |
+
1
|
| 537 |
+
],
|
| 538 |
+
[
|
| 539 |
+
[
|
| 540 |
+
"unknown",
|
| 541 |
+
"recent_files"
|
| 542 |
+
],
|
| 543 |
+
1
|
| 544 |
+
],
|
| 545 |
+
[
|
| 546 |
+
[
|
| 547 |
+
"unknown",
|
| 548 |
+
"lock_screen"
|
| 549 |
+
],
|
| 550 |
+
1
|
| 551 |
+
]
|
| 552 |
+
],
|
| 553 |
+
"secs": 0
|
| 554 |
+
},
|
| 555 |
+
"B_golden_final": {
|
| 556 |
+
"n": 384,
|
| 557 |
+
"exact": 0.974,
|
| 558 |
+
"action": 0.974,
|
| 559 |
+
"top_confusions": [
|
| 560 |
+
[
|
| 561 |
+
[
|
| 562 |
+
"unknown",
|
| 563 |
+
"get_date"
|
| 564 |
+
],
|
| 565 |
+
2
|
| 566 |
+
],
|
| 567 |
+
[
|
| 568 |
+
[
|
| 569 |
+
"ping",
|
| 570 |
+
"clarify"
|
| 571 |
+
],
|
| 572 |
+
1
|
| 573 |
+
],
|
| 574 |
+
[
|
| 575 |
+
[
|
| 576 |
+
"unknown",
|
| 577 |
+
"network_status"
|
| 578 |
+
],
|
| 579 |
+
1
|
| 580 |
+
],
|
| 581 |
+
[
|
| 582 |
+
[
|
| 583 |
+
"unknown",
|
| 584 |
+
"shutdown"
|
| 585 |
+
],
|
| 586 |
+
1
|
| 587 |
+
],
|
| 588 |
+
[
|
| 589 |
+
[
|
| 590 |
+
"unknown",
|
| 591 |
+
"get_time"
|
| 592 |
+
],
|
| 593 |
+
1
|
| 594 |
+
],
|
| 595 |
+
[
|
| 596 |
+
[
|
| 597 |
+
"unknown",
|
| 598 |
+
"clipboard_history"
|
| 599 |
+
],
|
| 600 |
+
1
|
| 601 |
+
],
|
| 602 |
+
[
|
| 603 |
+
[
|
| 604 |
+
"bluetooth_on",
|
| 605 |
+
"bluetooth_connect"
|
| 606 |
+
],
|
| 607 |
+
1
|
| 608 |
+
],
|
| 609 |
+
[
|
| 610 |
+
[
|
| 611 |
+
"set_brightness",
|
| 612 |
+
"brightness_up"
|
| 613 |
+
],
|
| 614 |
+
1
|
| 615 |
+
],
|
| 616 |
+
[
|
| 617 |
+
[
|
| 618 |
+
"unknown",
|
| 619 |
+
"help"
|
| 620 |
+
],
|
| 621 |
+
1
|
| 622 |
+
]
|
| 623 |
+
],
|
| 624 |
+
"secs": 0
|
| 625 |
+
},
|
| 626 |
+
"B_typo": {
|
| 627 |
+
"n": 3000,
|
| 628 |
+
"exact": 0.9917,
|
| 629 |
+
"action": 0.995,
|
| 630 |
+
"top_confusions": [
|
| 631 |
+
[
|
| 632 |
+
[
|
| 633 |
+
"youtube_search",
|
| 634 |
+
"youtube_search"
|
| 635 |
+
],
|
| 636 |
+
3
|
| 637 |
+
],
|
| 638 |
+
[
|
| 639 |
+
[
|
| 640 |
+
"close_app",
|
| 641 |
+
"close_app"
|
| 642 |
+
],
|
| 643 |
+
2
|
| 644 |
+
],
|
| 645 |
+
[
|
| 646 |
+
[
|
| 647 |
+
"gpio_on",
|
| 648 |
+
"gpio_on"
|
| 649 |
+
],
|
| 650 |
+
2
|
| 651 |
+
],
|
| 652 |
+
[
|
| 653 |
+
[
|
| 654 |
+
"battery_saver_off",
|
| 655 |
+
"battery_saver_on"
|
| 656 |
+
],
|
| 657 |
+
1
|
| 658 |
+
],
|
| 659 |
+
[
|
| 660 |
+
[
|
| 661 |
+
"media_pause",
|
| 662 |
+
"paste"
|
| 663 |
+
],
|
| 664 |
+
1
|
| 665 |
+
],
|
| 666 |
+
[
|
| 667 |
+
[
|
| 668 |
+
"service_start",
|
| 669 |
+
"service_enable"
|
| 670 |
+
],
|
| 671 |
+
1
|
| 672 |
+
],
|
| 673 |
+
[
|
| 674 |
+
[
|
| 675 |
+
"open_site",
|
| 676 |
+
"unknown"
|
| 677 |
+
],
|
| 678 |
+
1
|
| 679 |
+
],
|
| 680 |
+
[
|
| 681 |
+
[
|
| 682 |
+
"set_brightness",
|
| 683 |
+
"brightness_down"
|
| 684 |
+
],
|
| 685 |
+
1
|
| 686 |
+
],
|
| 687 |
+
[
|
| 688 |
+
[
|
| 689 |
+
"open_app",
|
| 690 |
+
"unknown"
|
| 691 |
+
],
|
| 692 |
+
1
|
| 693 |
+
],
|
| 694 |
+
[
|
| 695 |
+
[
|
| 696 |
+
"open_folder",
|
| 697 |
+
"open_file"
|
| 698 |
+
],
|
| 699 |
+
1
|
| 700 |
+
],
|
| 701 |
+
[
|
| 702 |
+
[
|
| 703 |
+
"open_settings",
|
| 704 |
+
"open_settings"
|
| 705 |
+
],
|
| 706 |
+
1
|
| 707 |
+
],
|
| 708 |
+
[
|
| 709 |
+
[
|
| 710 |
+
"wifi_off",
|
| 711 |
+
"cut"
|
| 712 |
+
],
|
| 713 |
+
1
|
| 714 |
+
]
|
| 715 |
+
],
|
| 716 |
+
"secs": 4
|
| 717 |
+
},
|
| 718 |
+
"wifi_holdout": {
|
| 719 |
+
"n": 461,
|
| 720 |
+
"exact": 1.0,
|
| 721 |
+
"action": 1.0,
|
| 722 |
+
"top_confusions": [],
|
| 723 |
+
"secs": 1
|
| 724 |
+
},
|
| 725 |
+
"gap10_holdout": {
|
| 726 |
+
"n": 1401,
|
| 727 |
+
"exact": 1.0,
|
| 728 |
+
"action": 1.0,
|
| 729 |
+
"top_confusions": [],
|
| 730 |
+
"secs": 2
|
| 731 |
+
},
|
| 732 |
+
"gap11_holdout": {
|
| 733 |
+
"n": 696,
|
| 734 |
+
"exact": 0.9928,
|
| 735 |
+
"action": 1.0,
|
| 736 |
+
"top_confusions": [
|
| 737 |
+
[
|
| 738 |
+
[
|
| 739 |
+
"connect_wifi",
|
| 740 |
+
"connect_wifi"
|
| 741 |
+
],
|
| 742 |
+
5
|
| 743 |
+
]
|
| 744 |
+
],
|
| 745 |
+
"secs": 1
|
| 746 |
+
}
|
| 747 |
+
}
|
eval/smoke_test.py
ADDED
|
@@ -0,0 +1,94 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""Smoke test: model + executor, no UI, nothing is executed (plans only).
|
| 2 |
+
python eval/smoke_test.py # fixed checks (~5 s)
|
| 3 |
+
python eval/smoke_test.py --full # + all 371 curated activity prompts and the wifi held-out set (~1-2 min)
|
| 4 |
+
Exit code 0 = every MUST check passed. KNOWN checks are phrasings the CPU model (run5) gets wrong; they are
|
| 5 |
+
expected to pass after the Colab model is installed and are reported, not failed on.
|
| 6 |
+
"""
|
| 7 |
+
import json, os, sys, time
|
| 8 |
+
HERE = os.path.dirname(os.path.abspath(__file__)); ROOT = os.path.dirname(HERE)
|
| 9 |
+
sys.path[:0] = [os.path.join(ROOT, "model"), os.path.join(ROOT, "executor")]
|
| 10 |
+
from runtime import CommandModel # noqa
|
| 11 |
+
import executor as EX # noqa
|
| 12 |
+
|
| 13 |
+
# (prompt, expected canonical target, level) level: MUST | KNOWN
|
| 14 |
+
MODEL_CASES = [
|
| 15 |
+
("awaaz ko pachaas pe rakh do", 'set_volume value=50', "MUST"),
|
| 16 |
+
("volume badhao", 'volume_up', "MUST"),
|
| 17 |
+
("brightness 70 kar do", 'set_brightness value=70', "MUST"),
|
| 18 |
+
("board pin 11 pe led jalao", 'gpio_on pin=11 numbering=board', "MUST"),
|
| 19 |
+
("gpio 17 ko off karo", 'gpio_off pin=17', "MUST"),
|
| 20 |
+
("wifi Airtel_5G se connect karo password Wifi@2024", 'connect_wifi ssid="airtel_5g" password="wifi@2024"', "MUST"),
|
| 21 |
+
("connect to wifi JioFiber-Home with password jio#12345", 'connect_wifi ssid="jiofiber-home" password="jio#12345"', "MUST"),
|
| 22 |
+
("connect wifi Guest_Network pwd guest@123", 'connect_wifi ssid="guest_network" password="guest@123"', "MUST"),
|
| 23 |
+
("konse wifi networks available hai", 'list_wifi', "MUST"),
|
| 24 |
+
("wifi band karo", 'wifi_off', "MUST"),
|
| 25 |
+
("chrome kholo", 'open_app app=chrome', "MUST"),
|
| 26 |
+
# run5 gets these wrong (see HANDOVER.md); the executor guard turns most of them into a clarification instead of a bad command
|
| 27 |
+
("mere ghar ka wifi TP-Link_A1B2 hai, password hai Pass@word99, connect kar do", 'connect_wifi ssid="tp-link_a1b2" password="pass@word99"', "KNOWN"),
|
| 28 |
+
("ssid: Office WiFi 5G password: Off!ce2024 se jud jao", 'connect_wifi ssid="office wifi 5g" password="off!ce2024"', "KNOWN"),
|
| 29 |
+
("wifi se connect karo naam MyNet pass abc12345", 'connect_wifi ssid="mynet" password="abc12345"', "KNOWN"),
|
| 30 |
+
("wifi Airtel_5G bhool jao", 'forget_wifi ssid="airtel_5g"', "KNOWN"),
|
| 31 |
+
]
|
| 32 |
+
|
| 33 |
+
# executor-only checks: (parsed command, platform, predicate on plan, description)
|
| 34 |
+
def _has(s): return lambda p: s in (p.command or "")
|
| 35 |
+
EXEC_CASES = [
|
| 36 |
+
({"action": "set_volume", "value": 50}, "pi", lambda p: p.supported and p.risk == "safe" and "50%" in p.command, "volume -> wpctl 50%"),
|
| 37 |
+
({"action": "gpio_on", "pin": 11, "numbering": "board"}, "pi", _has("pinctrl set 17 op dh"), "board 11 -> BCM 17"),
|
| 38 |
+
({"action": "gpio_on", "pin": 2, "numbering": "board"}, "pi", lambda p: not p.supported, "board pin 2 (5V) refused"),
|
| 39 |
+
({"action": "gpio_on", "pin": 40}, "pi", lambda p: not p.supported, "BCM 40 refused"),
|
| 40 |
+
({"action": "connect_wifi", "ssid": "Office WiFi", "password": "a'b&c"}, "pi", _has("'Office WiFi' password 'a'\"'\"'b&c'"), "Pi: ssid/password shell-quoted"),
|
| 41 |
+
({"action": "connect_wifi", "ssid": "Airtel_5G"}, "pi", lambda p: "password" not in p.command, "Pi: no empty 'password' arg"),
|
| 42 |
+
({"action": "connect_wifi", "ssid": "Airtel_5G", "password": "Wifi@2024"}, "win", lambda p: "netsh wlan add profile" in p.command and "keyMaterial" in p.command, "Windows: profile with key, then connect"),
|
| 43 |
+
({"action": "connect_wifi", "ssid": "TP-Link", "password": "hai"}, "pi", lambda p: p.action == "clarify", "filler password -> clarify"),
|
| 44 |
+
({"action": "connect_wifi", "ssid": "Office WiFi", "password": "Office WiFi"}, "pi", lambda p: p.action == "clarify", "password == ssid -> clarify"),
|
| 45 |
+
({"action": "connect_wifi", "ssid": "MyNet pass abc12345"}, "pi", lambda p: p.action == "clarify", "password inside ssid -> clarify"),
|
| 46 |
+
({"action": "connect_wifi", "ssid": "baad mein", "password": "rudra@11"}, "pi", lambda p: p.action == "clarify", "'baad mein' copied as ssid -> clarify"),
|
| 47 |
+
({"action": "connect_wifi", "ssid": "Redmi Note 13", "password": "pehle:"}, "pi", lambda p: p.action == "clarify", "'pehle:' copied as password -> clarify"),
|
| 48 |
+
({"action": "shutdown"}, "pi", lambda p: p.risk == "critical" and not EX.gate(p)[0] and EX.gate(p, confirm_text="shutdown")[0], "critical needs typed confirmation"),
|
| 49 |
+
({"action": "connect_wifi", "ssid": "a", "password": "bbbbbbbb"}, "pi", lambda p: not EX.gate(p)[0] and EX.gate(p, allow_caution=True)[0], "caution needs allow flag"),
|
| 50 |
+
({"action": "run_command", "command": "ls -la"}, "pi", lambda p: p.risk == "critical", "run_command is critical"),
|
| 51 |
+
({"action": "set_volume", "value": 40}, "win", lambda p: "= None;" not in p.command and "$None" not in p.command and "[Audio]::Volume=40/100" in p.command, "Windows audio helper uses C# null, not Python None"),
|
| 52 |
+
# optional 5th field = the user's sentence: a pin-driving action from a bare 'pin N' must ask board vs BCM
|
| 53 |
+
({"action": "gpio_on", "pin": 11}, "pi", lambda p: p.action == "clarify" and "board pin 11" in p.note and "gpio 11" in p.note, "bare 'pin no 11' write -> clarify", "on windows 11 set pin no 11 high"),
|
| 54 |
+
({"action": "gpio_toggle", "pin": 17}, "pi", lambda p: p.action == "clarify", "bare 'pin 17' toggle (caution) -> clarify", "pin 17 toggle karo"),
|
| 55 |
+
({"action": "gpio_on", "pin": 17}, "pi", _has("pinctrl set 17 op dh"), "'gpio 17' write runs", "gpio 17 on karo"),
|
| 56 |
+
({"action": "gpio_on", "pin": 11, "numbering": "board"}, "pi", _has("pinctrl set 17 op dh"), "'board pin 11' write runs", "board pin 11 pe led jalao"),
|
| 57 |
+
({"action": "gpio_off", "pin": 21, "numbering": "board"}, "pi", lambda p: p.action == "gpio_off", "'40-pin header pin 21' write runs", "40-pin header pin 21 pe heater off karo"),
|
| 58 |
+
({"action": "gpio_info", "pin": 11}, "pi", lambda p: p.action == "gpio_info", "bare pin on a safe read -> no clarify", "pin 11 input hai ya output"),
|
| 59 |
+
]
|
| 60 |
+
|
| 61 |
+
def main(full):
|
| 62 |
+
t0 = time.time(); m = CommandModel(os.path.join(ROOT, "model"))
|
| 63 |
+
print(f"model: {sum(v.size for v in m.W.values())/1e6:.2f}M params, loaded in {time.time()-t0:.1f}s\n")
|
| 64 |
+
must_fail = 0; known_pass = 0; known = 0
|
| 65 |
+
print("== model parse ==")
|
| 66 |
+
for text, exp, level in MODEL_CASES:
|
| 67 |
+
out = m.predict(text); got = out["_meta"]["canonical"]; ok = got == exp
|
| 68 |
+
if level == "KNOWN":
|
| 69 |
+
known += 1; known_pass += ok; tag = "KNOWN-OK " if ok else "KNOWN-BAD"
|
| 70 |
+
else:
|
| 71 |
+
must_fail += not ok; tag = "PASS " if ok else "FAIL "
|
| 72 |
+
cmd = {k: v for k, v in out.items() if k != "_meta"}; pl = EX.plan(cmd, "pi", text)
|
| 73 |
+
extra = "" if ok else f" expected: {exp}"
|
| 74 |
+
print(f"{tag} {text}\n -> {got} [executor: {pl.action}{' - ' + pl.note if pl.action == 'clarify' else ''}]{extra}")
|
| 75 |
+
print("\n== executor ==")
|
| 76 |
+
for cmd, plat, pred, desc, *text in EXEC_CASES:
|
| 77 |
+
p = EX.plan(cmd, plat, text[0] if text else None)
|
| 78 |
+
try: ok = bool(pred(p))
|
| 79 |
+
except Exception as e: ok = False; desc += f" ({e})"
|
| 80 |
+
must_fail += not ok
|
| 81 |
+
print(f"{'PASS' if ok else 'FAIL'} [{plat}] {desc}" + ("" if ok else f"\n got: {p.action} {p.supported} {p.risk} {(p.command or p.note)[:160]}"))
|
| 82 |
+
if full:
|
| 83 |
+
for name, path in (("curated (one prompt per action)", os.path.join(HERE, "curated_prompts.jsonl")), ("wifi_holdout", os.path.join(HERE, "wifi_holdout.jsonl"))):
|
| 84 |
+
if not os.path.exists(path): continue
|
| 85 |
+
rows = [json.loads(l) for l in open(path, encoding="utf-8")]; t1 = time.time()
|
| 86 |
+
bad = [(r, m.predict(r["text"])["_meta"]["canonical"]) for r in rows]
|
| 87 |
+
bad = [(r, g) for r, g in bad if g != r["target"]]
|
| 88 |
+
acc = 1 - len(bad) / len(rows)
|
| 89 |
+
print(f"\n== {name}: exact {acc*100:.2f}% ({len(rows)-len(bad)}/{len(rows)}) in {time.time()-t1:.0f}s ==")
|
| 90 |
+
for r, g in bad[:10]: print(f" MISS {r['text']}\n got {g}\n exp {r['target']}")
|
| 91 |
+
print(f"\nsummary: MUST failures = {must_fail}; KNOWN phrasings fixed = {known_pass}/{known}")
|
| 92 |
+
sys.exit(1 if must_fail else 0)
|
| 93 |
+
|
| 94 |
+
if __name__ == "__main__": main("--full" in sys.argv)
|
eval/wifi_holdout.jsonl
ADDED
|
@@ -0,0 +1,461 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{"text": "bhai mere ghar ka wifi NETGEAR42 hai, password hai Password@1, connect kar do yaar", "target": "connect_wifi ssid=\"netgear42\" password=\"password@1\"", "action": "connect_wifi"}
|
| 2 |
+
{"text": "mere ghar ka wifi Sharma Ji Home hai, password hai jio#12345, connect kar do abhi", "target": "connect_wifi ssid=\"sharma ji home\" password=\"jio#12345\"", "action": "connect_wifi"}
|
| 3 |
+
{"text": "mere ghar ka wifi Home 2.4G hai, password hai ghar_ka_net1, connect kar do abhi", "target": "connect_wifi ssid=\"home 2.4g\" password=\"ghar_ka_net1\"", "action": "connect_wifi"}
|
| 4 |
+
{"text": "mere ghar ka wifi Tenda_8C21F0 hai, password hai Password@1, connect kar do jaldi", "target": "connect_wifi ssid=\"tenda_8c21f0\" password=\"password@1\"", "action": "connect_wifi"}
|
| 5 |
+
{"text": "hey assistant mere ghar ka wifi Hostel Block B hai, password hai zxcv9087, connect kar do jaldi", "target": "connect_wifi ssid=\"hostel block b\" password=\"zxcv9087\"", "action": "connect_wifi"}
|
| 6 |
+
{"text": "please mere ghar ka wifi Hostel Block B hai, password hai jio#12345, connect kar do", "target": "connect_wifi ssid=\"hostel block b\" password=\"jio#12345\"", "action": "connect_wifi"}
|
| 7 |
+
{"text": "zara mere ghar ka wifi Office WiFi 5G hai, password hai Wifi@2024, connect kar do", "target": "connect_wifi ssid=\"office wifi 5g\" password=\"wifi@2024\"", "action": "connect_wifi"}
|
| 8 |
+
{"text": "ok mere ghar ka wifi Room 204 hai, password hai zxcv9087, connect kar do", "target": "connect_wifi ssid=\"room 204\" password=\"zxcv9087\"", "action": "connect_wifi"}
|
| 9 |
+
{"text": "please mere ghar ka wifi Studio Wifi hai, password hai Welcome123, connect kar do please", "target": "connect_wifi ssid=\"studio wifi\" password=\"welcome123\"", "action": "connect_wifi"}
|
| 10 |
+
{"text": "mere ghar ka wifi Library-Guest hai, password hai Str0ng-P@ss, connect kar do yaar", "target": "connect_wifi ssid=\"library-guest\" password=\"str0ng-p@ss\"", "action": "connect_wifi"}
|
| 11 |
+
{"text": "ok mere ghar ka wifi Studio Wifi hai, password hai Guest@123, connect kar do yaar", "target": "connect_wifi ssid=\"studio wifi\" password=\"guest@123\"", "action": "connect_wifi"}
|
| 12 |
+
{"text": "please mere ghar ka wifi BSNL-FTTH-2291 hai, password hai Off!ce2024, connect kar do", "target": "connect_wifi ssid=\"bsnl-ftth-2291\" password=\"off!ce2024\"", "action": "connect_wifi"}
|
| 13 |
+
{"text": "mere ghar ka wifi Kumar_House_2 hai, password hai Str0ng-P@ss, connect kar do jaldi", "target": "connect_wifi ssid=\"kumar_house_2\" password=\"str0ng-p@ss\"", "action": "connect_wifi"}
|
| 14 |
+
{"text": "mere ghar ka wifi Hathway_3F9C hai, password hai Library2026, connect kar do", "target": "connect_wifi ssid=\"hathway_3f9c\" password=\"library2026\"", "action": "connect_wifi"}
|
| 15 |
+
{"text": "mere ghar ka wifi MyNet hai, password hai Str0ng-P@ss, connect kar do", "target": "connect_wifi ssid=\"mynet\" password=\"str0ng-p@ss\"", "action": "connect_wifi"}
|
| 16 |
+
{"text": "please mere ghar ka wifi Office WiFi 5G hai, password hai N3tg3ar!, connect kar do please", "target": "connect_wifi ssid=\"office wifi 5g\" password=\"n3tg3ar!\"", "action": "connect_wifi"}
|
| 17 |
+
{"text": "mere ghar ka wifi BSNL-FTTH-2291 hai, password hai Pass@word99, connect kar do", "target": "connect_wifi ssid=\"bsnl-ftth-2291\" password=\"pass@word99\"", "action": "connect_wifi"}
|
| 18 |
+
{"text": "zara mere ghar ka wifi Tenda_8C21F0 hai, password hai Pass@word99, connect kar do", "target": "connect_wifi ssid=\"tenda_8c21f0\" password=\"pass@word99\"", "action": "connect_wifi"}
|
| 19 |
+
{"text": "zara mere ghar ka wifi D-Link_DIR615 hai, password hai Library2026, connect kar do please", "target": "connect_wifi ssid=\"d-link_dir615\" password=\"library2026\"", "action": "connect_wifi"}
|
| 20 |
+
{"text": "ok mere ghar ka wifi Vi_Home hai, password hai abc12345, connect kar do please", "target": "connect_wifi ssid=\"vi_home\" password=\"abc12345\"", "action": "connect_wifi"}
|
| 21 |
+
{"text": "mere ghar ka wifi Excitel-Pro 5G hai, password hai abc12345, connect kar do", "target": "connect_wifi ssid=\"excitel-pro 5g\" password=\"abc12345\"", "action": "connect_wifi"}
|
| 22 |
+
{"text": "mere ghar ka wifi HomeNet hai, password hai Cafe#Free77, connect kar do", "target": "connect_wifi ssid=\"homenet\" password=\"cafe#free77\"", "action": "connect_wifi"}
|
| 23 |
+
{"text": "mere ghar ka wifi Galaxy M31 hai, password hai Mehta&Sons9, connect kar do yaar", "target": "connect_wifi ssid=\"galaxy m31\" password=\"mehta&sons9\"", "action": "connect_wifi"}
|
| 24 |
+
{"text": "mere ghar ka wifi Library-Guest hai, password hai N3tg3ar!, connect kar do", "target": "connect_wifi ssid=\"library-guest\" password=\"n3tg3ar!\"", "action": "connect_wifi"}
|
| 25 |
+
{"text": "ok mere ghar ka wifi Hathway_3F9C hai, password hai zxcv9087, connect kar do please", "target": "connect_wifi ssid=\"hathway_3f9c\" password=\"zxcv9087\"", "action": "connect_wifi"}
|
| 26 |
+
{"text": "zara mere ghar ka wifi Hostel Block B hai, password hai Password@1, connect kar do", "target": "connect_wifi ssid=\"hostel block b\" password=\"password@1\"", "action": "connect_wifi"}
|
| 27 |
+
{"text": "zara mere ghar ka wifi Library-Guest hai, password hai Kumar@1987, connect kar do", "target": "connect_wifi ssid=\"library-guest\" password=\"kumar@1987\"", "action": "connect_wifi"}
|
| 28 |
+
{"text": "mere ghar ka wifi Hathway_3F9C hai, password hai Kumar@1987, connect kar do abhi", "target": "connect_wifi ssid=\"hathway_3f9c\" password=\"kumar@1987\"", "action": "connect_wifi"}
|
| 29 |
+
{"text": "ok mere ghar ka wifi NETGEAR42 hai, password hai Guest@123, connect kar do please", "target": "connect_wifi ssid=\"netgear42\" password=\"guest@123\"", "action": "connect_wifi"}
|
| 30 |
+
{"text": "mere ghar ka wifi D-Link_DIR615 hai, password hai Cafe#Free77, connect kar do jaldi", "target": "connect_wifi ssid=\"d-link_dir615\" password=\"cafe#free77\"", "action": "connect_wifi"}
|
| 31 |
+
{"text": "bhai mere ghar ka wifi iPhone of Ravi hai, password hai Password@1, connect kar do", "target": "connect_wifi ssid=\"iphone of ravi\" password=\"password@1\"", "action": "connect_wifi"}
|
| 32 |
+
{"text": "please mere ghar ka wifi Vi_Home hai, password hai sharma#123, connect kar do please", "target": "connect_wifi ssid=\"vi_home\" password=\"sharma#123\"", "action": "connect_wifi"}
|
| 33 |
+
{"text": "bhai mere ghar ka wifi NETGEAR42 hai, password hai Hostel$2025, connect kar do", "target": "connect_wifi ssid=\"netgear42\" password=\"hostel$2025\"", "action": "connect_wifi"}
|
| 34 |
+
{"text": "jaldi mere ghar ka wifi Redmi Note 12 hai, password hai lalit.home7, connect kar do", "target": "connect_wifi ssid=\"redmi note 12\" password=\"lalit.home7\"", "action": "connect_wifi"}
|
| 35 |
+
{"text": "mere ghar ka wifi Home 2.4G hai, password hai Off!ce2024, connect kar do jaldi", "target": "connect_wifi ssid=\"home 2.4g\" password=\"off!ce2024\"", "action": "connect_wifi"}
|
| 36 |
+
{"text": "ok mere ghar ka wifi Room 204 hai, password hai Mehta&Sons9, connect kar do thanks", "target": "connect_wifi ssid=\"room 204\" password=\"mehta&sons9\"", "action": "connect_wifi"}
|
| 37 |
+
{"text": "please mere ghar ka wifi Cafe Coffee Day hai, password hai zxcv9087, connect kar do", "target": "connect_wifi ssid=\"cafe coffee day\" password=\"zxcv9087\"", "action": "connect_wifi"}
|
| 38 |
+
{"text": "please mere ghar ka wifi Vi_Home hai, password hai lalit.home7, connect kar do", "target": "connect_wifi ssid=\"vi_home\" password=\"lalit.home7\"", "action": "connect_wifi"}
|
| 39 |
+
{"text": "zara mere ghar ka wifi Room 204 hai, password hai qwerty!09, connect kar do abhi", "target": "connect_wifi ssid=\"room 204\" password=\"qwerty!09\"", "action": "connect_wifi"}
|
| 40 |
+
{"text": "bhai mere ghar ka wifi Hathway_3F9C hai, password hai Mehta&Sons9, connect kar do", "target": "connect_wifi ssid=\"hathway_3f9c\" password=\"mehta&sons9\"", "action": "connect_wifi"}
|
| 41 |
+
{"text": "mere ghar ka wifi Classroom WiFi hai, password hai Welcome123, connect kar do yaar", "target": "connect_wifi ssid=\"classroom wifi\" password=\"welcome123\"", "action": "connect_wifi"}
|
| 42 |
+
{"text": "mere ghar ka wifi Airtel_5G hai, password hai Off!ce2024, connect kar do yaar", "target": "connect_wifi ssid=\"airtel_5g\" password=\"off!ce2024\"", "action": "connect_wifi"}
|
| 43 |
+
{"text": "mere ghar ka wifi Hostel Block B hai, password hai sharma#123, connect kar do", "target": "connect_wifi ssid=\"hostel block b\" password=\"sharma#123\"", "action": "connect_wifi"}
|
| 44 |
+
{"text": "hey assistant mere ghar ka wifi JioFiber-Home hai, password hai Off!ce2024, connect kar do please", "target": "connect_wifi ssid=\"jiofiber-home\" password=\"off!ce2024\"", "action": "connect_wifi"}
|
| 45 |
+
{"text": "jaldi mere ghar ka wifi iPhone of Ravi hai, password hai qwerty!09, connect kar do", "target": "connect_wifi ssid=\"iphone of ravi\" password=\"qwerty!09\"", "action": "connect_wifi"}
|
| 46 |
+
{"text": "jaldi mere ghar ka wifi iPhone of Ravi hai, password hai Kumar@1987, connect kar do", "target": "connect_wifi ssid=\"iphone of ravi\" password=\"kumar@1987\"", "action": "connect_wifi"}
|
| 47 |
+
{"text": "jaldi mere ghar ka wifi PiLab hai, password hai Mehta&Sons9, connect kar do", "target": "connect_wifi ssid=\"pilab\" password=\"mehta&sons9\"", "action": "connect_wifi"}
|
| 48 |
+
{"text": "zara mere ghar ka wifi TP-Link_A1B2 hai, password hai Cafe#Free77, connect kar do yaar", "target": "connect_wifi ssid=\"tp-link_a1b2\" password=\"cafe#free77\"", "action": "connect_wifi"}
|
| 49 |
+
{"text": "mere ghar ka wifi Mehta_Family hai, password hai sharma#123, connect kar do jaldi", "target": "connect_wifi ssid=\"mehta_family\" password=\"sharma#123\"", "action": "connect_wifi"}
|
| 50 |
+
{"text": "zara mere ghar ka wifi NETGEAR42 hai, password hai Wifi@2024, connect kar do jaldi", "target": "connect_wifi ssid=\"netgear42\" password=\"wifi@2024\"", "action": "connect_wifi"}
|
| 51 |
+
{"text": "jaldi mere ghar ka wifi D-Link_DIR615 hai, password hai jio#12345, connect kar do thanks", "target": "connect_wifi ssid=\"d-link_dir615\" password=\"jio#12345\"", "action": "connect_wifi"}
|
| 52 |
+
{"text": "mere ghar ka wifi Cafe Coffee Day hai, password hai sharma#123, connect kar do yaar", "target": "connect_wifi ssid=\"cafe coffee day\" password=\"sharma#123\"", "action": "connect_wifi"}
|
| 53 |
+
{"text": "mere ghar ka wifi Home 2.4G hai, password hai Wifi@2024, connect kar do", "target": "connect_wifi ssid=\"home 2.4g\" password=\"wifi@2024\"", "action": "connect_wifi"}
|
| 54 |
+
{"text": "mere ghar ka wifi Hostel Block B hai, password hai raVi_9988, connect kar do please", "target": "connect_wifi ssid=\"hostel block b\" password=\"ravi_9988\"", "action": "connect_wifi"}
|
| 55 |
+
{"text": "hey assistant mere ghar ka wifi Hostel Block B hai, password hai Library2026, connect kar do na", "target": "connect_wifi ssid=\"hostel block b\" password=\"library2026\"", "action": "connect_wifi"}
|
| 56 |
+
{"text": "mere ghar ka wifi Tenda_8C21F0 hai, password hai qwerty!09, connect kar do", "target": "connect_wifi ssid=\"tenda_8c21f0\" password=\"qwerty!09\"", "action": "connect_wifi"}
|
| 57 |
+
{"text": "jaldi mere ghar ka wifi Tenda_8C21F0 hai, password hai Library2026, connect kar do na", "target": "connect_wifi ssid=\"tenda_8c21f0\" password=\"library2026\"", "action": "connect_wifi"}
|
| 58 |
+
{"text": "mere ghar ka wifi TP-Link_A1B2 hai, password hai lalit.home7, connect kar do jaldi", "target": "connect_wifi ssid=\"tp-link_a1b2\" password=\"lalit.home7\"", "action": "connect_wifi"}
|
| 59 |
+
{"text": "zara mere ghar ka wifi Tenda_8C21F0 hai, password hai Welcome123, connect kar do na", "target": "connect_wifi ssid=\"tenda_8c21f0\" password=\"welcome123\"", "action": "connect_wifi"}
|
| 60 |
+
{"text": "mere ghar ka wifi Tenda_8C21F0 hai, password hai lalit.home7, connect kar do na", "target": "connect_wifi ssid=\"tenda_8c21f0\" password=\"lalit.home7\"", "action": "connect_wifi"}
|
| 61 |
+
{"text": "jaldi ssid: Office WiFi 5G password: jio#12345 se jud jao please", "target": "connect_wifi ssid=\"office wifi 5g\" password=\"jio#12345\"", "action": "connect_wifi"}
|
| 62 |
+
{"text": "ssid: Classroom WiFi password: pi-lab-2026 se jud jao thanks", "target": "connect_wifi ssid=\"classroom wifi\" password=\"pi-lab-2026\"", "action": "connect_wifi"}
|
| 63 |
+
{"text": "bhai ssid: Library-Guest password: lalit.home7 se jud jao thanks", "target": "connect_wifi ssid=\"library-guest\" password=\"lalit.home7\"", "action": "connect_wifi"}
|
| 64 |
+
{"text": "ok ssid: Hathway_3F9C password: sharma#123 se jud jao please", "target": "connect_wifi ssid=\"hathway_3f9c\" password=\"sharma#123\"", "action": "connect_wifi"}
|
| 65 |
+
{"text": "bhai ssid: Sharma Ji Home password: pi-lab-2026 se jud jao", "target": "connect_wifi ssid=\"sharma ji home\" password=\"pi-lab-2026\"", "action": "connect_wifi"}
|
| 66 |
+
{"text": "ssid: Tenda_8C21F0 password: abc12345 se jud jao na", "target": "connect_wifi ssid=\"tenda_8c21f0\" password=\"abc12345\"", "action": "connect_wifi"}
|
| 67 |
+
{"text": "ssid: OnePlus Nord password: pi-lab-2026 se jud jao", "target": "connect_wifi ssid=\"oneplus nord\" password=\"pi-lab-2026\"", "action": "connect_wifi"}
|
| 68 |
+
{"text": "bhai ssid: Office WiFi 5G password: zxcv9087 se jud jao", "target": "connect_wifi ssid=\"office wifi 5g\" password=\"zxcv9087\"", "action": "connect_wifi"}
|
| 69 |
+
{"text": "ssid: BSNL-FTTH-2291 password: Off!ce2024 se jud jao", "target": "connect_wifi ssid=\"bsnl-ftth-2291\" password=\"off!ce2024\"", "action": "connect_wifi"}
|
| 70 |
+
{"text": "ssid: Studio Wifi password: lalit.home7 se jud jao na", "target": "connect_wifi ssid=\"studio wifi\" password=\"lalit.home7\"", "action": "connect_wifi"}
|
| 71 |
+
{"text": "please ssid: JioFiber-Home password: qwerty!09 se jud jao yaar", "target": "connect_wifi ssid=\"jiofiber-home\" password=\"qwerty!09\"", "action": "connect_wifi"}
|
| 72 |
+
{"text": "zara ssid: Library-Guest password: HomeSweet#88 se jud jao", "target": "connect_wifi ssid=\"library-guest\" password=\"homesweet#88\"", "action": "connect_wifi"}
|
| 73 |
+
{"text": "ssid: MyNet password: Off!ce2024 se jud jao please", "target": "connect_wifi ssid=\"mynet\" password=\"off!ce2024\"", "action": "connect_wifi"}
|
| 74 |
+
{"text": "ssid: ACT_Fibernet_7 password: ghar_ka_net1 se jud jao na", "target": "connect_wifi ssid=\"act_fibernet_7\" password=\"ghar_ka_net1\"", "action": "connect_wifi"}
|
| 75 |
+
{"text": "zara ssid: Airtel_5G password: Guest@123 se jud jao thanks", "target": "connect_wifi ssid=\"airtel_5g\" password=\"guest@123\"", "action": "connect_wifi"}
|
| 76 |
+
{"text": "ssid: BSNL-FTTH-2291 password: Str0ng-P@ss se jud jao", "target": "connect_wifi ssid=\"bsnl-ftth-2291\" password=\"str0ng-p@ss\"", "action": "connect_wifi"}
|
| 77 |
+
{"text": "ssid: Redmi Note 12 password: abc12345 se jud jao", "target": "connect_wifi ssid=\"redmi note 12\" password=\"abc12345\"", "action": "connect_wifi"}
|
| 78 |
+
{"text": "bhai ssid: TP-Link_A1B2 password: Hostel$2025 se jud jao na", "target": "connect_wifi ssid=\"tp-link_a1b2\" password=\"hostel$2025\"", "action": "connect_wifi"}
|
| 79 |
+
{"text": "please ssid: Mehta_Family password: qwerty!09 se jud jao jaldi", "target": "connect_wifi ssid=\"mehta_family\" password=\"qwerty!09\"", "action": "connect_wifi"}
|
| 80 |
+
{"text": "ssid: Library-Guest password: abc12345 se jud jao", "target": "connect_wifi ssid=\"library-guest\" password=\"abc12345\"", "action": "connect_wifi"}
|
| 81 |
+
{"text": "ssid: Studio Wifi password: qwerty!09 se jud jao", "target": "connect_wifi ssid=\"studio wifi\" password=\"qwerty!09\"", "action": "connect_wifi"}
|
| 82 |
+
{"text": "ssid: Office WiFi 5G password: Cafe#Free77 se jud jao", "target": "connect_wifi ssid=\"office wifi 5g\" password=\"cafe#free77\"", "action": "connect_wifi"}
|
| 83 |
+
{"text": "please ssid: Classroom WiFi password: raVi_9988 se jud jao", "target": "connect_wifi ssid=\"classroom wifi\" password=\"ravi_9988\"", "action": "connect_wifi"}
|
| 84 |
+
{"text": "ssid: Hathway_3F9C password: 9876543210 se jud jao please", "target": "connect_wifi ssid=\"hathway_3f9c\" password=\"9876543210\"", "action": "connect_wifi"}
|
| 85 |
+
{"text": "ssid: PiLab password: N3tg3ar! se jud jao please", "target": "connect_wifi ssid=\"pilab\" password=\"n3tg3ar!\"", "action": "connect_wifi"}
|
| 86 |
+
{"text": "jaldi ssid: Home 2.4G password: Kumar@1987 se jud jao abhi", "target": "connect_wifi ssid=\"home 2.4g\" password=\"kumar@1987\"", "action": "connect_wifi"}
|
| 87 |
+
{"text": "ok ssid: Mehta_Family password: Library2026 se jud jao abhi", "target": "connect_wifi ssid=\"mehta_family\" password=\"library2026\"", "action": "connect_wifi"}
|
| 88 |
+
{"text": "bhai ssid: Mehta_Family password: abc12345 se jud jao", "target": "connect_wifi ssid=\"mehta_family\" password=\"abc12345\"", "action": "connect_wifi"}
|
| 89 |
+
{"text": "bhai ssid: BSNL-FTTH-2291 password: HomeSweet#88 se jud jao", "target": "connect_wifi ssid=\"bsnl-ftth-2291\" password=\"homesweet#88\"", "action": "connect_wifi"}
|
| 90 |
+
{"text": "ssid: Redmi Note 12 password: HomeSweet#88 se jud jao thanks", "target": "connect_wifi ssid=\"redmi note 12\" password=\"homesweet#88\"", "action": "connect_wifi"}
|
| 91 |
+
{"text": "hey assistant ssid: Sharma Ji Home password: Library2026 se jud jao na", "target": "connect_wifi ssid=\"sharma ji home\" password=\"library2026\"", "action": "connect_wifi"}
|
| 92 |
+
{"text": "please ssid: Cafe Coffee Day password: N3tg3ar! se jud jao", "target": "connect_wifi ssid=\"cafe coffee day\" password=\"n3tg3ar!\"", "action": "connect_wifi"}
|
| 93 |
+
{"text": "ssid: Studio Wifi password: Cafe#Free77 se jud jao yaar", "target": "connect_wifi ssid=\"studio wifi\" password=\"cafe#free77\"", "action": "connect_wifi"}
|
| 94 |
+
{"text": "ssid: PiLab password: Pass@word99 se jud jao na", "target": "connect_wifi ssid=\"pilab\" password=\"pass@word99\"", "action": "connect_wifi"}
|
| 95 |
+
{"text": "ssid: Office WiFi 5G password: qwerty!09 se jud jao jaldi", "target": "connect_wifi ssid=\"office wifi 5g\" password=\"qwerty!09\"", "action": "connect_wifi"}
|
| 96 |
+
{"text": "please ssid: TP-Link_A1B2 password: Password@1 se jud jao please", "target": "connect_wifi ssid=\"tp-link_a1b2\" password=\"password@1\"", "action": "connect_wifi"}
|
| 97 |
+
{"text": "ssid: Home 2.4G password: sharma#123 se jud jao please", "target": "connect_wifi ssid=\"home 2.4g\" password=\"sharma#123\"", "action": "connect_wifi"}
|
| 98 |
+
{"text": "ssid: NETGEAR42 password: Str0ng-P@ss se jud jao", "target": "connect_wifi ssid=\"netgear42\" password=\"str0ng-p@ss\"", "action": "connect_wifi"}
|
| 99 |
+
{"text": "jaldi ssid: Room 204 password: N3tg3ar! se jud jao abhi", "target": "connect_wifi ssid=\"room 204\" password=\"n3tg3ar!\"", "action": "connect_wifi"}
|
| 100 |
+
{"text": "ssid: D-Link_DIR615 password: lalit.home7 se jud jao", "target": "connect_wifi ssid=\"d-link_dir615\" password=\"lalit.home7\"", "action": "connect_wifi"}
|
| 101 |
+
{"text": "ssid: Mehta_Family password: Off!ce2024 se jud jao thanks", "target": "connect_wifi ssid=\"mehta_family\" password=\"off!ce2024\"", "action": "connect_wifi"}
|
| 102 |
+
{"text": "hey assistant ssid: Mehta_Family password: lalit.home7 se jud jao jaldi", "target": "connect_wifi ssid=\"mehta_family\" password=\"lalit.home7\"", "action": "connect_wifi"}
|
| 103 |
+
{"text": "bhai ssid: Tenda_8C21F0 password: N3tg3ar! se jud jao thanks", "target": "connect_wifi ssid=\"tenda_8c21f0\" password=\"n3tg3ar!\"", "action": "connect_wifi"}
|
| 104 |
+
{"text": "jaldi ssid: Tenda_8C21F0 password: Kumar@1987 se jud jao na", "target": "connect_wifi ssid=\"tenda_8c21f0\" password=\"kumar@1987\"", "action": "connect_wifi"}
|
| 105 |
+
{"text": "zara ssid: Mehta_Family password: Wifi@2024 se jud jao thanks", "target": "connect_wifi ssid=\"mehta_family\" password=\"wifi@2024\"", "action": "connect_wifi"}
|
| 106 |
+
{"text": "please ssid: Room 204 password: ghar_ka_net1 se jud jao", "target": "connect_wifi ssid=\"room 204\" password=\"ghar_ka_net1\"", "action": "connect_wifi"}
|
| 107 |
+
{"text": "ok ssid: Excitel-Pro 5G password: pi-lab-2026 se jud jao", "target": "connect_wifi ssid=\"excitel-pro 5g\" password=\"pi-lab-2026\"", "action": "connect_wifi"}
|
| 108 |
+
{"text": "ssid: TP-Link_A1B2 password: zxcv9087 se jud jao", "target": "connect_wifi ssid=\"tp-link_a1b2\" password=\"zxcv9087\"", "action": "connect_wifi"}
|
| 109 |
+
{"text": "hey assistant ssid: Airtel_5G password: Cafe#Free77 se jud jao please", "target": "connect_wifi ssid=\"airtel_5g\" password=\"cafe#free77\"", "action": "connect_wifi"}
|
| 110 |
+
{"text": "jaldi ssid: Sharma Ji Home password: Wifi@2024 se jud jao na", "target": "connect_wifi ssid=\"sharma ji home\" password=\"wifi@2024\"", "action": "connect_wifi"}
|
| 111 |
+
{"text": "zara ssid: Home 2.4G password: Pass@word99 se jud jao jaldi", "target": "connect_wifi ssid=\"home 2.4g\" password=\"pass@word99\"", "action": "connect_wifi"}
|
| 112 |
+
{"text": "ssid: Hostel Block B password: zxcv9087 se jud jao jaldi", "target": "connect_wifi ssid=\"hostel block b\" password=\"zxcv9087\"", "action": "connect_wifi"}
|
| 113 |
+
{"text": "please ssid: MyNet password: Str0ng-P@ss se jud jao na", "target": "connect_wifi ssid=\"mynet\" password=\"str0ng-p@ss\"", "action": "connect_wifi"}
|
| 114 |
+
{"text": "zara ssid: JioFiber-Home password: Pass@word99 se jud jao", "target": "connect_wifi ssid=\"jiofiber-home\" password=\"pass@word99\"", "action": "connect_wifi"}
|
| 115 |
+
{"text": "hey assistant ssid: ACT_Fibernet_7 password: 9876543210 se jud jao", "target": "connect_wifi ssid=\"act_fibernet_7\" password=\"9876543210\"", "action": "connect_wifi"}
|
| 116 |
+
{"text": "please ssid: JioFiber-Home password: zxcv9087 se jud jao", "target": "connect_wifi ssid=\"jiofiber-home\" password=\"zxcv9087\"", "action": "connect_wifi"}
|
| 117 |
+
{"text": "ssid: Studio Wifi password: Password@1 se jud jao yaar", "target": "connect_wifi ssid=\"studio wifi\" password=\"password@1\"", "action": "connect_wifi"}
|
| 118 |
+
{"text": "ok ssid: TP-Link_A1B2 password: lalit.home7 se jud jao yaar", "target": "connect_wifi ssid=\"tp-link_a1b2\" password=\"lalit.home7\"", "action": "connect_wifi"}
|
| 119 |
+
{"text": "ssid: Airtel_5G password: HomeSweet#88 se jud jao abhi", "target": "connect_wifi ssid=\"airtel_5g\" password=\"homesweet#88\"", "action": "connect_wifi"}
|
| 120 |
+
{"text": "ok ssid: Room 204 password: abc12345 se jud jao please", "target": "connect_wifi ssid=\"room 204\" password=\"abc12345\"", "action": "connect_wifi"}
|
| 121 |
+
{"text": "password Welcome123 hai aur wifi Office WiFi 5G hai, connect kar do please", "target": "connect_wifi ssid=\"office wifi 5g\" password=\"welcome123\"", "action": "connect_wifi"}
|
| 122 |
+
{"text": "password zxcv9087 hai aur wifi Galaxy M31 hai, connect kar do jaldi", "target": "connect_wifi ssid=\"galaxy m31\" password=\"zxcv9087\"", "action": "connect_wifi"}
|
| 123 |
+
{"text": "zara password Wifi@2024 hai aur wifi OnePlus Nord hai, connect kar do please", "target": "connect_wifi ssid=\"oneplus nord\" password=\"wifi@2024\"", "action": "connect_wifi"}
|
| 124 |
+
{"text": "bhai password Off!ce2024 hai aur wifi MyNet hai, connect kar do yaar", "target": "connect_wifi ssid=\"mynet\" password=\"off!ce2024\"", "action": "connect_wifi"}
|
| 125 |
+
{"text": "bhai password Password@1 hai aur wifi Classroom WiFi hai, connect kar do", "target": "connect_wifi ssid=\"classroom wifi\" password=\"password@1\"", "action": "connect_wifi"}
|
| 126 |
+
{"text": "ok password abc12345 hai aur wifi Classroom WiFi hai, connect kar do jaldi", "target": "connect_wifi ssid=\"classroom wifi\" password=\"abc12345\"", "action": "connect_wifi"}
|
| 127 |
+
{"text": "jaldi password qwerty!09 hai aur wifi Guest_Network hai, connect kar do thanks", "target": "connect_wifi ssid=\"guest_network\" password=\"qwerty!09\"", "action": "connect_wifi"}
|
| 128 |
+
{"text": "please password zxcv9087 hai aur wifi Classroom WiFi hai, connect kar do", "target": "connect_wifi ssid=\"classroom wifi\" password=\"zxcv9087\"", "action": "connect_wifi"}
|
| 129 |
+
{"text": "zara password Wifi@2024 hai aur wifi BSNL-FTTH-2291 hai, connect kar do", "target": "connect_wifi ssid=\"bsnl-ftth-2291\" password=\"wifi@2024\"", "action": "connect_wifi"}
|
| 130 |
+
{"text": "bhai password Wifi@2024 hai aur wifi Tenda_8C21F0 hai, connect kar do jaldi", "target": "connect_wifi ssid=\"tenda_8c21f0\" password=\"wifi@2024\"", "action": "connect_wifi"}
|
| 131 |
+
{"text": "please password zxcv9087 hai aur wifi Sharma Ji Home hai, connect kar do thanks", "target": "connect_wifi ssid=\"sharma ji home\" password=\"zxcv9087\"", "action": "connect_wifi"}
|
| 132 |
+
{"text": "hey assistant password ghar_ka_net1 hai aur wifi Cafe Coffee Day hai, connect kar do na", "target": "connect_wifi ssid=\"cafe coffee day\" password=\"ghar_ka_net1\"", "action": "connect_wifi"}
|
| 133 |
+
{"text": "zara password HomeSweet#88 hai aur wifi Cafe Coffee Day hai, connect kar do", "target": "connect_wifi ssid=\"cafe coffee day\" password=\"homesweet#88\"", "action": "connect_wifi"}
|
| 134 |
+
{"text": "bhai password 9876543210 hai aur wifi OnePlus Nord hai, connect kar do abhi", "target": "connect_wifi ssid=\"oneplus nord\" password=\"9876543210\"", "action": "connect_wifi"}
|
| 135 |
+
{"text": "password Kumar@1987 hai aur wifi Studio Wifi hai, connect kar do please", "target": "connect_wifi ssid=\"studio wifi\" password=\"kumar@1987\"", "action": "connect_wifi"}
|
| 136 |
+
{"text": "hey assistant password Library2026 hai aur wifi Home 2.4G hai, connect kar do", "target": "connect_wifi ssid=\"home 2.4g\" password=\"library2026\"", "action": "connect_wifi"}
|
| 137 |
+
{"text": "bhai password ghar_ka_net1 hai aur wifi Vi_Home hai, connect kar do", "target": "connect_wifi ssid=\"vi_home\" password=\"ghar_ka_net1\"", "action": "connect_wifi"}
|
| 138 |
+
{"text": "please password Off!ce2024 hai aur wifi Library-Guest hai, connect kar do", "target": "connect_wifi ssid=\"library-guest\" password=\"off!ce2024\"", "action": "connect_wifi"}
|
| 139 |
+
{"text": "password HomeSweet#88 hai aur wifi Galaxy M31 hai, connect kar do", "target": "connect_wifi ssid=\"galaxy m31\" password=\"homesweet#88\"", "action": "connect_wifi"}
|
| 140 |
+
{"text": "password ghar_ka_net1 hai aur wifi HomeNet hai, connect kar do jaldi", "target": "connect_wifi ssid=\"homenet\" password=\"ghar_ka_net1\"", "action": "connect_wifi"}
|
| 141 |
+
{"text": "zara password pi-lab-2026 hai aur wifi BSNL-FTTH-2291 hai, connect kar do na", "target": "connect_wifi ssid=\"bsnl-ftth-2291\" password=\"pi-lab-2026\"", "action": "connect_wifi"}
|
| 142 |
+
{"text": "ok password N3tg3ar! hai aur wifi JioFiber-Home hai, connect kar do thanks", "target": "connect_wifi ssid=\"jiofiber-home\" password=\"n3tg3ar!\"", "action": "connect_wifi"}
|
| 143 |
+
{"text": "zara password Pass@word99 hai aur wifi OnePlus Nord hai, connect kar do na", "target": "connect_wifi ssid=\"oneplus nord\" password=\"pass@word99\"", "action": "connect_wifi"}
|
| 144 |
+
{"text": "zara password zxcv9087 hai aur wifi Hostel Block B hai, connect kar do", "target": "connect_wifi ssid=\"hostel block b\" password=\"zxcv9087\"", "action": "connect_wifi"}
|
| 145 |
+
{"text": "bhai password lalit.home7 hai aur wifi Classroom WiFi hai, connect kar do", "target": "connect_wifi ssid=\"classroom wifi\" password=\"lalit.home7\"", "action": "connect_wifi"}
|
| 146 |
+
{"text": "ok password HomeSweet#88 hai aur wifi iPhone of Ravi hai, connect kar do yaar", "target": "connect_wifi ssid=\"iphone of ravi\" password=\"homesweet#88\"", "action": "connect_wifi"}
|
| 147 |
+
{"text": "hey assistant password Library2026 hai aur wifi HomeNet hai, connect kar do jaldi", "target": "connect_wifi ssid=\"homenet\" password=\"library2026\"", "action": "connect_wifi"}
|
| 148 |
+
{"text": "password Mehta&Sons9 hai aur wifi iPhone of Ravi hai, connect kar do", "target": "connect_wifi ssid=\"iphone of ravi\" password=\"mehta&sons9\"", "action": "connect_wifi"}
|
| 149 |
+
{"text": "please password Off!ce2024 hai aur wifi Studio Wifi hai, connect kar do thanks", "target": "connect_wifi ssid=\"studio wifi\" password=\"off!ce2024\"", "action": "connect_wifi"}
|
| 150 |
+
{"text": "please password Guest@123 hai aur wifi BSNL-FTTH-2291 hai, connect kar do na", "target": "connect_wifi ssid=\"bsnl-ftth-2291\" password=\"guest@123\"", "action": "connect_wifi"}
|
| 151 |
+
{"text": "please password N3tg3ar! hai aur wifi Redmi Note 12 hai, connect kar do", "target": "connect_wifi ssid=\"redmi note 12\" password=\"n3tg3ar!\"", "action": "connect_wifi"}
|
| 152 |
+
{"text": "bhai password pi-lab-2026 hai aur wifi TP-Link_A1B2 hai, connect kar do yaar", "target": "connect_wifi ssid=\"tp-link_a1b2\" password=\"pi-lab-2026\"", "action": "connect_wifi"}
|
| 153 |
+
{"text": "zara password Cafe#Free77 hai aur wifi Studio Wifi hai, connect kar do jaldi", "target": "connect_wifi ssid=\"studio wifi\" password=\"cafe#free77\"", "action": "connect_wifi"}
|
| 154 |
+
{"text": "please password Library2026 hai aur wifi MyNet hai, connect kar do", "target": "connect_wifi ssid=\"mynet\" password=\"library2026\"", "action": "connect_wifi"}
|
| 155 |
+
{"text": "bhai password N3tg3ar! hai aur wifi BSNL-FTTH-2291 hai, connect kar do yaar", "target": "connect_wifi ssid=\"bsnl-ftth-2291\" password=\"n3tg3ar!\"", "action": "connect_wifi"}
|
| 156 |
+
{"text": "bhai password jio#12345 hai aur wifi Sharma Ji Home hai, connect kar do abhi", "target": "connect_wifi ssid=\"sharma ji home\" password=\"jio#12345\"", "action": "connect_wifi"}
|
| 157 |
+
{"text": "hey assistant password Off!ce2024 hai aur wifi Kumar_House_2 hai, connect kar do thanks", "target": "connect_wifi ssid=\"kumar_house_2\" password=\"off!ce2024\"", "action": "connect_wifi"}
|
| 158 |
+
{"text": "password Off!ce2024 hai aur wifi Guest_Network hai, connect kar do", "target": "connect_wifi ssid=\"guest_network\" password=\"off!ce2024\"", "action": "connect_wifi"}
|
| 159 |
+
{"text": "jaldi password 9876543210 hai aur wifi Tenda_8C21F0 hai, connect kar do thanks", "target": "connect_wifi ssid=\"tenda_8c21f0\" password=\"9876543210\"", "action": "connect_wifi"}
|
| 160 |
+
{"text": "jaldi password Off!ce2024 hai aur wifi Guest_Network hai, connect kar do", "target": "connect_wifi ssid=\"guest_network\" password=\"off!ce2024\"", "action": "connect_wifi"}
|
| 161 |
+
{"text": "zara password Kumar@1987 hai aur wifi D-Link_DIR615 hai, connect kar do abhi", "target": "connect_wifi ssid=\"d-link_dir615\" password=\"kumar@1987\"", "action": "connect_wifi"}
|
| 162 |
+
{"text": "ok password Str0ng-P@ss hai aur wifi Redmi Note 12 hai, connect kar do thanks", "target": "connect_wifi ssid=\"redmi note 12\" password=\"str0ng-p@ss\"", "action": "connect_wifi"}
|
| 163 |
+
{"text": "bhai password Hostel$2025 hai aur wifi NETGEAR42 hai, connect kar do na", "target": "connect_wifi ssid=\"netgear42\" password=\"hostel$2025\"", "action": "connect_wifi"}
|
| 164 |
+
{"text": "bhai password Library2026 hai aur wifi MyNet hai, connect kar do", "target": "connect_wifi ssid=\"mynet\" password=\"library2026\"", "action": "connect_wifi"}
|
| 165 |
+
{"text": "hey assistant password lalit.home7 hai aur wifi Classroom WiFi hai, connect kar do please", "target": "connect_wifi ssid=\"classroom wifi\" password=\"lalit.home7\"", "action": "connect_wifi"}
|
| 166 |
+
{"text": "password Wifi@2024 hai aur wifi JioFiber-Home hai, connect kar do na", "target": "connect_wifi ssid=\"jiofiber-home\" password=\"wifi@2024\"", "action": "connect_wifi"}
|
| 167 |
+
{"text": "ok password jio#12345 hai aur wifi JioFiber-Home hai, connect kar do yaar", "target": "connect_wifi ssid=\"jiofiber-home\" password=\"jio#12345\"", "action": "connect_wifi"}
|
| 168 |
+
{"text": "jaldi password Library2026 hai aur wifi Cafe Coffee Day hai, connect kar do jaldi", "target": "connect_wifi ssid=\"cafe coffee day\" password=\"library2026\"", "action": "connect_wifi"}
|
| 169 |
+
{"text": "bhai password pi-lab-2026 hai aur wifi Kumar_House_2 hai, connect kar do thanks", "target": "connect_wifi ssid=\"kumar_house_2\" password=\"pi-lab-2026\"", "action": "connect_wifi"}
|
| 170 |
+
{"text": "zara password Guest@123 hai aur wifi Mehta_Family hai, connect kar do thanks", "target": "connect_wifi ssid=\"mehta_family\" password=\"guest@123\"", "action": "connect_wifi"}
|
| 171 |
+
{"text": "zara password N3tg3ar! hai aur wifi Guest_Network hai, connect kar do thanks", "target": "connect_wifi ssid=\"guest_network\" password=\"n3tg3ar!\"", "action": "connect_wifi"}
|
| 172 |
+
{"text": "password abc12345 hai aur wifi Vi_Home hai, connect kar do please", "target": "connect_wifi ssid=\"vi_home\" password=\"abc12345\"", "action": "connect_wifi"}
|
| 173 |
+
{"text": "password pi-lab-2026 hai aur wifi Excitel-Pro 5G hai, connect kar do", "target": "connect_wifi ssid=\"excitel-pro 5g\" password=\"pi-lab-2026\"", "action": "connect_wifi"}
|
| 174 |
+
{"text": "bhai password 9876543210 hai aur wifi iPhone of Ravi hai, connect kar do yaar", "target": "connect_wifi ssid=\"iphone of ravi\" password=\"9876543210\"", "action": "connect_wifi"}
|
| 175 |
+
{"text": "password sharma#123 hai aur wifi HomeNet hai, connect kar do yaar", "target": "connect_wifi ssid=\"homenet\" password=\"sharma#123\"", "action": "connect_wifi"}
|
| 176 |
+
{"text": "hey assistant password Welcome123 hai aur wifi JioFiber-Home hai, connect kar do abhi", "target": "connect_wifi ssid=\"jiofiber-home\" password=\"welcome123\"", "action": "connect_wifi"}
|
| 177 |
+
{"text": "please password sharma#123 hai aur wifi Cafe Coffee Day hai, connect kar do", "target": "connect_wifi ssid=\"cafe coffee day\" password=\"sharma#123\"", "action": "connect_wifi"}
|
| 178 |
+
{"text": "password Welcome123 hai aur wifi Galaxy M31 hai, connect kar do", "target": "connect_wifi ssid=\"galaxy m31\" password=\"welcome123\"", "action": "connect_wifi"}
|
| 179 |
+
{"text": "password Off!ce2024 hai aur wifi Classroom WiFi hai, connect kar do please", "target": "connect_wifi ssid=\"classroom wifi\" password=\"off!ce2024\"", "action": "connect_wifi"}
|
| 180 |
+
{"text": "password Kumar@1987 hai aur wifi Hathway_3F9C hai, connect kar do na", "target": "connect_wifi ssid=\"hathway_3f9c\" password=\"kumar@1987\"", "action": "connect_wifi"}
|
| 181 |
+
{"text": "jaldi office ka wifi Galaxy M31 hai uska pass Pass@word99 hai jod do", "target": "connect_wifi ssid=\"galaxy m31\" password=\"pass@word99\"", "action": "connect_wifi"}
|
| 182 |
+
{"text": "hey assistant office ka wifi JioFiber-Home hai uska pass Library2026 hai jod do please", "target": "connect_wifi ssid=\"jiofiber-home\" password=\"library2026\"", "action": "connect_wifi"}
|
| 183 |
+
{"text": "zara office ka wifi TP-Link_A1B2 hai uska pass Password@1 hai jod do", "target": "connect_wifi ssid=\"tp-link_a1b2\" password=\"password@1\"", "action": "connect_wifi"}
|
| 184 |
+
{"text": "jaldi office ka wifi Sharma Ji Home hai uska pass Hostel$2025 hai jod do na", "target": "connect_wifi ssid=\"sharma ji home\" password=\"hostel$2025\"", "action": "connect_wifi"}
|
| 185 |
+
{"text": "hey assistant office ka wifi Mehta_Family hai uska pass Library2026 hai jod do", "target": "connect_wifi ssid=\"mehta_family\" password=\"library2026\"", "action": "connect_wifi"}
|
| 186 |
+
{"text": "jaldi office ka wifi PiLab hai uska pass Hostel$2025 hai jod do", "target": "connect_wifi ssid=\"pilab\" password=\"hostel$2025\"", "action": "connect_wifi"}
|
| 187 |
+
{"text": "bhai office ka wifi Studio Wifi hai uska pass jio#12345 hai jod do jaldi", "target": "connect_wifi ssid=\"studio wifi\" password=\"jio#12345\"", "action": "connect_wifi"}
|
| 188 |
+
{"text": "office ka wifi Tenda_8C21F0 hai uska pass Guest@123 hai jod do thanks", "target": "connect_wifi ssid=\"tenda_8c21f0\" password=\"guest@123\"", "action": "connect_wifi"}
|
| 189 |
+
{"text": "office ka wifi OnePlus Nord hai uska pass Pass@word99 hai jod do jaldi", "target": "connect_wifi ssid=\"oneplus nord\" password=\"pass@word99\"", "action": "connect_wifi"}
|
| 190 |
+
{"text": "zara office ka wifi Vi_Home hai uska pass raVi_9988 hai jod do na", "target": "connect_wifi ssid=\"vi_home\" password=\"ravi_9988\"", "action": "connect_wifi"}
|
| 191 |
+
{"text": "please office ka wifi Excitel-Pro 5G hai uska pass pi-lab-2026 hai jod do jaldi", "target": "connect_wifi ssid=\"excitel-pro 5g\" password=\"pi-lab-2026\"", "action": "connect_wifi"}
|
| 192 |
+
{"text": "zara office ka wifi Guest_Network hai uska pass zxcv9087 hai jod do na", "target": "connect_wifi ssid=\"guest_network\" password=\"zxcv9087\"", "action": "connect_wifi"}
|
| 193 |
+
{"text": "ok office ka wifi Kumar_House_2 hai uska pass N3tg3ar! hai jod do jaldi", "target": "connect_wifi ssid=\"kumar_house_2\" password=\"n3tg3ar!\"", "action": "connect_wifi"}
|
| 194 |
+
{"text": "office ka wifi Library-Guest hai uska pass Pass@word99 hai jod do abhi", "target": "connect_wifi ssid=\"library-guest\" password=\"pass@word99\"", "action": "connect_wifi"}
|
| 195 |
+
{"text": "hey assistant office ka wifi Mehta_Family hai uska pass Cafe#Free77 hai jod do", "target": "connect_wifi ssid=\"mehta_family\" password=\"cafe#free77\"", "action": "connect_wifi"}
|
| 196 |
+
{"text": "office ka wifi Kumar_House_2 hai uska pass Cafe#Free77 hai jod do yaar", "target": "connect_wifi ssid=\"kumar_house_2\" password=\"cafe#free77\"", "action": "connect_wifi"}
|
| 197 |
+
{"text": "bhai office ka wifi OnePlus Nord hai uska pass Welcome123 hai jod do", "target": "connect_wifi ssid=\"oneplus nord\" password=\"welcome123\"", "action": "connect_wifi"}
|
| 198 |
+
{"text": "office ka wifi ACT_Fibernet_7 hai uska pass 9876543210 hai jod do na", "target": "connect_wifi ssid=\"act_fibernet_7\" password=\"9876543210\"", "action": "connect_wifi"}
|
| 199 |
+
{"text": "office ka wifi Hathway_3F9C hai uska pass pi-lab-2026 hai jod do jaldi", "target": "connect_wifi ssid=\"hathway_3f9c\" password=\"pi-lab-2026\"", "action": "connect_wifi"}
|
| 200 |
+
{"text": "office ka wifi MyNet hai uska pass Library2026 hai jod do thanks", "target": "connect_wifi ssid=\"mynet\" password=\"library2026\"", "action": "connect_wifi"}
|
| 201 |
+
{"text": "office ka wifi Classroom WiFi hai uska pass Kumar@1987 hai jod do thanks", "target": "connect_wifi ssid=\"classroom wifi\" password=\"kumar@1987\"", "action": "connect_wifi"}
|
| 202 |
+
{"text": "zara office ka wifi Office WiFi 5G hai uska pass abc12345 hai jod do", "target": "connect_wifi ssid=\"office wifi 5g\" password=\"abc12345\"", "action": "connect_wifi"}
|
| 203 |
+
{"text": "office ka wifi HomeNet hai uska pass Guest@123 hai jod do", "target": "connect_wifi ssid=\"homenet\" password=\"guest@123\"", "action": "connect_wifi"}
|
| 204 |
+
{"text": "bhai office ka wifi Guest_Network hai uska pass N3tg3ar! hai jod do yaar", "target": "connect_wifi ssid=\"guest_network\" password=\"n3tg3ar!\"", "action": "connect_wifi"}
|
| 205 |
+
{"text": "office ka wifi Library-Guest hai uska pass raVi_9988 hai jod do please", "target": "connect_wifi ssid=\"library-guest\" password=\"ravi_9988\"", "action": "connect_wifi"}
|
| 206 |
+
{"text": "office ka wifi Studio Wifi hai uska pass N3tg3ar! hai jod do thanks", "target": "connect_wifi ssid=\"studio wifi\" password=\"n3tg3ar!\"", "action": "connect_wifi"}
|
| 207 |
+
{"text": "hey assistant office ka wifi Vi_Home hai uska pass 9876543210 hai jod do", "target": "connect_wifi ssid=\"vi_home\" password=\"9876543210\"", "action": "connect_wifi"}
|
| 208 |
+
{"text": "hey assistant office ka wifi Redmi Note 12 hai uska pass N3tg3ar! hai jod do thanks", "target": "connect_wifi ssid=\"redmi note 12\" password=\"n3tg3ar!\"", "action": "connect_wifi"}
|
| 209 |
+
{"text": "office ka wifi ACT_Fibernet_7 hai uska pass Guest@123 hai jod do abhi", "target": "connect_wifi ssid=\"act_fibernet_7\" password=\"guest@123\"", "action": "connect_wifi"}
|
| 210 |
+
{"text": "office ka wifi HomeNet hai uska pass raVi_9988 hai jod do", "target": "connect_wifi ssid=\"homenet\" password=\"ravi_9988\"", "action": "connect_wifi"}
|
| 211 |
+
{"text": "zara office ka wifi Hostel Block B hai uska pass Hostel$2025 hai jod do yaar", "target": "connect_wifi ssid=\"hostel block b\" password=\"hostel$2025\"", "action": "connect_wifi"}
|
| 212 |
+
{"text": "ok office ka wifi JioFiber-Home hai uska pass ghar_ka_net1 hai jod do thanks", "target": "connect_wifi ssid=\"jiofiber-home\" password=\"ghar_ka_net1\"", "action": "connect_wifi"}
|
| 213 |
+
{"text": "please office ka wifi ACT_Fibernet_7 hai uska pass Password@1 hai jod do yaar", "target": "connect_wifi ssid=\"act_fibernet_7\" password=\"password@1\"", "action": "connect_wifi"}
|
| 214 |
+
{"text": "please office ka wifi Sharma Ji Home hai uska pass zxcv9087 hai jod do yaar", "target": "connect_wifi ssid=\"sharma ji home\" password=\"zxcv9087\"", "action": "connect_wifi"}
|
| 215 |
+
{"text": "zara office ka wifi JioFiber-Home hai uska pass lalit.home7 hai jod do thanks", "target": "connect_wifi ssid=\"jiofiber-home\" password=\"lalit.home7\"", "action": "connect_wifi"}
|
| 216 |
+
{"text": "office ka wifi Vi_Home hai uska pass Guest@123 hai jod do jaldi", "target": "connect_wifi ssid=\"vi_home\" password=\"guest@123\"", "action": "connect_wifi"}
|
| 217 |
+
{"text": "please office ka wifi iPhone of Ravi hai uska pass N3tg3ar! hai jod do", "target": "connect_wifi ssid=\"iphone of ravi\" password=\"n3tg3ar!\"", "action": "connect_wifi"}
|
| 218 |
+
{"text": "bhai office ka wifi Room 204 hai uska pass N3tg3ar! hai jod do", "target": "connect_wifi ssid=\"room 204\" password=\"n3tg3ar!\"", "action": "connect_wifi"}
|
| 219 |
+
{"text": "hey assistant office ka wifi Galaxy M31 hai uska pass 9876543210 hai jod do", "target": "connect_wifi ssid=\"galaxy m31\" password=\"9876543210\"", "action": "connect_wifi"}
|
| 220 |
+
{"text": "jaldi office ka wifi Studio Wifi hai uska pass HomeSweet#88 hai jod do yaar", "target": "connect_wifi ssid=\"studio wifi\" password=\"homesweet#88\"", "action": "connect_wifi"}
|
| 221 |
+
{"text": "office ka wifi Home 2.4G hai uska pass Str0ng-P@ss hai jod do na", "target": "connect_wifi ssid=\"home 2.4g\" password=\"str0ng-p@ss\"", "action": "connect_wifi"}
|
| 222 |
+
{"text": "office ka wifi ACT_Fibernet_7 hai uska pass ghar_ka_net1 hai jod do please", "target": "connect_wifi ssid=\"act_fibernet_7\" password=\"ghar_ka_net1\"", "action": "connect_wifi"}
|
| 223 |
+
{"text": "office ka wifi TP-Link_A1B2 hai uska pass Mehta&Sons9 hai jod do", "target": "connect_wifi ssid=\"tp-link_a1b2\" password=\"mehta&sons9\"", "action": "connect_wifi"}
|
| 224 |
+
{"text": "office ka wifi BSNL-FTTH-2291 hai uska pass Password@1 hai jod do please", "target": "connect_wifi ssid=\"bsnl-ftth-2291\" password=\"password@1\"", "action": "connect_wifi"}
|
| 225 |
+
{"text": "zara office ka wifi Airtel_5G hai uska pass Str0ng-P@ss hai jod do jaldi", "target": "connect_wifi ssid=\"airtel_5g\" password=\"str0ng-p@ss\"", "action": "connect_wifi"}
|
| 226 |
+
{"text": "jaldi office ka wifi Excitel-Pro 5G hai uska pass Pass@word99 hai jod do abhi", "target": "connect_wifi ssid=\"excitel-pro 5g\" password=\"pass@word99\"", "action": "connect_wifi"}
|
| 227 |
+
{"text": "jaldi office ka wifi TP-Link_A1B2 hai uska pass HomeSweet#88 hai jod do thanks", "target": "connect_wifi ssid=\"tp-link_a1b2\" password=\"homesweet#88\"", "action": "connect_wifi"}
|
| 228 |
+
{"text": "bhai office ka wifi Guest_Network hai uska pass Pass@word99 hai jod do jaldi", "target": "connect_wifi ssid=\"guest_network\" password=\"pass@word99\"", "action": "connect_wifi"}
|
| 229 |
+
{"text": "office ka wifi ACT_Fibernet_7 hai uska pass Hostel$2025 hai jod do", "target": "connect_wifi ssid=\"act_fibernet_7\" password=\"hostel$2025\"", "action": "connect_wifi"}
|
| 230 |
+
{"text": "office ka wifi Library-Guest hai uska pass zxcv9087 hai jod do na", "target": "connect_wifi ssid=\"library-guest\" password=\"zxcv9087\"", "action": "connect_wifi"}
|
| 231 |
+
{"text": "hey assistant office ka wifi Kumar_House_2 hai uska pass raVi_9988 hai jod do", "target": "connect_wifi ssid=\"kumar_house_2\" password=\"ravi_9988\"", "action": "connect_wifi"}
|
| 232 |
+
{"text": "ok office ka wifi OnePlus Nord hai uska pass 9876543210 hai jod do please", "target": "connect_wifi ssid=\"oneplus nord\" password=\"9876543210\"", "action": "connect_wifi"}
|
| 233 |
+
{"text": "office ka wifi Office WiFi 5G hai uska pass sharma#123 hai jod do jaldi", "target": "connect_wifi ssid=\"office wifi 5g\" password=\"sharma#123\"", "action": "connect_wifi"}
|
| 234 |
+
{"text": "ok office ka wifi OnePlus Nord hai uska pass N3tg3ar! hai jod do thanks", "target": "connect_wifi ssid=\"oneplus nord\" password=\"n3tg3ar!\"", "action": "connect_wifi"}
|
| 235 |
+
{"text": "bhai office ka wifi BSNL-FTTH-2291 hai uska pass N3tg3ar! hai jod do jaldi", "target": "connect_wifi ssid=\"bsnl-ftth-2291\" password=\"n3tg3ar!\"", "action": "connect_wifi"}
|
| 236 |
+
{"text": "office ka wifi MyNet hai uska pass Hostel$2025 hai jod do yaar", "target": "connect_wifi ssid=\"mynet\" password=\"hostel$2025\"", "action": "connect_wifi"}
|
| 237 |
+
{"text": "hey assistant office ka wifi Cafe Coffee Day hai uska pass raVi_9988 hai jod do yaar", "target": "connect_wifi ssid=\"cafe coffee day\" password=\"ravi_9988\"", "action": "connect_wifi"}
|
| 238 |
+
{"text": "bhai office ka wifi TP-Link_A1B2 hai uska pass HomeSweet#88 hai jod do yaar", "target": "connect_wifi ssid=\"tp-link_a1b2\" password=\"homesweet#88\"", "action": "connect_wifi"}
|
| 239 |
+
{"text": "jaldi office ka wifi iPhone of Ravi hai uska pass Str0ng-P@ss hai jod do jaldi", "target": "connect_wifi ssid=\"iphone of ravi\" password=\"str0ng-p@ss\"", "action": "connect_wifi"}
|
| 240 |
+
{"text": "office ka wifi BSNL-FTTH-2291 hai uska pass Hostel$2025 hai jod do jaldi", "target": "connect_wifi ssid=\"bsnl-ftth-2291\" password=\"hostel$2025\"", "action": "connect_wifi"}
|
| 241 |
+
{"text": "laptop ko wifi Sharma Ji Home pe lagao pass Hostel$2025 please", "target": "connect_wifi ssid=\"sharma ji home\" password=\"hostel$2025\"", "action": "connect_wifi"}
|
| 242 |
+
{"text": "please laptop ko wifi Classroom WiFi pe lagao pass Mehta&Sons9 thanks", "target": "connect_wifi ssid=\"classroom wifi\" password=\"mehta&sons9\"", "action": "connect_wifi"}
|
| 243 |
+
{"text": "bhai laptop ko wifi Library-Guest pe lagao pass qwerty!09 jaldi", "target": "connect_wifi ssid=\"library-guest\" password=\"qwerty!09\"", "action": "connect_wifi"}
|
| 244 |
+
{"text": "jaldi laptop ko wifi Kumar_House_2 pe lagao pass lalit.home7 please", "target": "connect_wifi ssid=\"kumar_house_2\" password=\"lalit.home7\"", "action": "connect_wifi"}
|
| 245 |
+
{"text": "jaldi laptop ko wifi Studio Wifi pe lagao pass Wifi@2024 thanks", "target": "connect_wifi ssid=\"studio wifi\" password=\"wifi@2024\"", "action": "connect_wifi"}
|
| 246 |
+
{"text": "laptop ko wifi Guest_Network pe lagao pass sharma#123 abhi", "target": "connect_wifi ssid=\"guest_network\" password=\"sharma#123\"", "action": "connect_wifi"}
|
| 247 |
+
{"text": "jaldi laptop ko wifi Vi_Home pe lagao pass zxcv9087", "target": "connect_wifi ssid=\"vi_home\" password=\"zxcv9087\"", "action": "connect_wifi"}
|
| 248 |
+
{"text": "bhai laptop ko wifi ACT_Fibernet_7 pe lagao pass N3tg3ar! yaar", "target": "connect_wifi ssid=\"act_fibernet_7\" password=\"n3tg3ar!\"", "action": "connect_wifi"}
|
| 249 |
+
{"text": "laptop ko wifi Redmi Note 12 pe lagao pass Welcome123 thanks", "target": "connect_wifi ssid=\"redmi note 12\" password=\"welcome123\"", "action": "connect_wifi"}
|
| 250 |
+
{"text": "jaldi laptop ko wifi Guest_Network pe lagao pass Password@1 na", "target": "connect_wifi ssid=\"guest_network\" password=\"password@1\"", "action": "connect_wifi"}
|
| 251 |
+
{"text": "laptop ko wifi JioFiber-Home pe lagao pass Welcome123 na", "target": "connect_wifi ssid=\"jiofiber-home\" password=\"welcome123\"", "action": "connect_wifi"}
|
| 252 |
+
{"text": "hey assistant laptop ko wifi TP-Link_A1B2 pe lagao pass Off!ce2024 thanks", "target": "connect_wifi ssid=\"tp-link_a1b2\" password=\"off!ce2024\"", "action": "connect_wifi"}
|
| 253 |
+
{"text": "laptop ko wifi Excitel-Pro 5G pe lagao pass Cafe#Free77", "target": "connect_wifi ssid=\"excitel-pro 5g\" password=\"cafe#free77\"", "action": "connect_wifi"}
|
| 254 |
+
{"text": "jaldi laptop ko wifi Redmi Note 12 pe lagao pass Wifi@2024 abhi", "target": "connect_wifi ssid=\"redmi note 12\" password=\"wifi@2024\"", "action": "connect_wifi"}
|
| 255 |
+
{"text": "hey assistant laptop ko wifi Redmi Note 12 pe lagao pass zxcv9087", "target": "connect_wifi ssid=\"redmi note 12\" password=\"zxcv9087\"", "action": "connect_wifi"}
|
| 256 |
+
{"text": "please laptop ko wifi Airtel_5G pe lagao pass Guest@123 jaldi", "target": "connect_wifi ssid=\"airtel_5g\" password=\"guest@123\"", "action": "connect_wifi"}
|
| 257 |
+
{"text": "hey assistant laptop ko wifi Studio Wifi pe lagao pass jio#12345", "target": "connect_wifi ssid=\"studio wifi\" password=\"jio#12345\"", "action": "connect_wifi"}
|
| 258 |
+
{"text": "laptop ko wifi Hostel Block B pe lagao pass lalit.home7 abhi", "target": "connect_wifi ssid=\"hostel block b\" password=\"lalit.home7\"", "action": "connect_wifi"}
|
| 259 |
+
{"text": "bhai laptop ko wifi MyNet pe lagao pass raVi_9988 thanks", "target": "connect_wifi ssid=\"mynet\" password=\"ravi_9988\"", "action": "connect_wifi"}
|
| 260 |
+
{"text": "bhai laptop ko wifi Room 204 pe lagao pass jio#12345 yaar", "target": "connect_wifi ssid=\"room 204\" password=\"jio#12345\"", "action": "connect_wifi"}
|
| 261 |
+
{"text": "hey assistant laptop ko wifi Vi_Home pe lagao pass Pass@word99 yaar", "target": "connect_wifi ssid=\"vi_home\" password=\"pass@word99\"", "action": "connect_wifi"}
|
| 262 |
+
{"text": "laptop ko wifi Studio Wifi pe lagao pass Str0ng-P@ss thanks", "target": "connect_wifi ssid=\"studio wifi\" password=\"str0ng-p@ss\"", "action": "connect_wifi"}
|
| 263 |
+
{"text": "zara laptop ko wifi Kumar_House_2 pe lagao pass raVi_9988 please", "target": "connect_wifi ssid=\"kumar_house_2\" password=\"ravi_9988\"", "action": "connect_wifi"}
|
| 264 |
+
{"text": "please laptop ko wifi HomeNet pe lagao pass zxcv9087", "target": "connect_wifi ssid=\"homenet\" password=\"zxcv9087\"", "action": "connect_wifi"}
|
| 265 |
+
{"text": "laptop ko wifi D-Link_DIR615 pe lagao pass Off!ce2024 thanks", "target": "connect_wifi ssid=\"d-link_dir615\" password=\"off!ce2024\"", "action": "connect_wifi"}
|
| 266 |
+
{"text": "laptop ko wifi OnePlus Nord pe lagao pass Mehta&Sons9 please", "target": "connect_wifi ssid=\"oneplus nord\" password=\"mehta&sons9\"", "action": "connect_wifi"}
|
| 267 |
+
{"text": "zara laptop ko wifi BSNL-FTTH-2291 pe lagao pass Guest@123 na", "target": "connect_wifi ssid=\"bsnl-ftth-2291\" password=\"guest@123\"", "action": "connect_wifi"}
|
| 268 |
+
{"text": "laptop ko wifi Home 2.4G pe lagao pass abc12345", "target": "connect_wifi ssid=\"home 2.4g\" password=\"abc12345\"", "action": "connect_wifi"}
|
| 269 |
+
{"text": "laptop ko wifi Studio Wifi pe lagao pass Off!ce2024 thanks", "target": "connect_wifi ssid=\"studio wifi\" password=\"off!ce2024\"", "action": "connect_wifi"}
|
| 270 |
+
{"text": "laptop ko wifi D-Link_DIR615 pe lagao pass pi-lab-2026 jaldi", "target": "connect_wifi ssid=\"d-link_dir615\" password=\"pi-lab-2026\"", "action": "connect_wifi"}
|
| 271 |
+
{"text": "please laptop ko wifi D-Link_DIR615 pe lagao pass qwerty!09 thanks", "target": "connect_wifi ssid=\"d-link_dir615\" password=\"qwerty!09\"", "action": "connect_wifi"}
|
| 272 |
+
{"text": "bhai laptop ko wifi Vi_Home pe lagao pass Mehta&Sons9 yaar", "target": "connect_wifi ssid=\"vi_home\" password=\"mehta&sons9\"", "action": "connect_wifi"}
|
| 273 |
+
{"text": "zara laptop ko wifi HomeNet pe lagao pass 9876543210", "target": "connect_wifi ssid=\"homenet\" password=\"9876543210\"", "action": "connect_wifi"}
|
| 274 |
+
{"text": "hey assistant laptop ko wifi Mehta_Family pe lagao pass jio#12345 na", "target": "connect_wifi ssid=\"mehta_family\" password=\"jio#12345\"", "action": "connect_wifi"}
|
| 275 |
+
{"text": "laptop ko wifi TP-Link_A1B2 pe lagao pass Library2026", "target": "connect_wifi ssid=\"tp-link_a1b2\" password=\"library2026\"", "action": "connect_wifi"}
|
| 276 |
+
{"text": "laptop ko wifi BSNL-FTTH-2291 pe lagao pass 9876543210 na", "target": "connect_wifi ssid=\"bsnl-ftth-2291\" password=\"9876543210\"", "action": "connect_wifi"}
|
| 277 |
+
{"text": "zara laptop ko wifi Hostel Block B pe lagao pass Welcome123 jaldi", "target": "connect_wifi ssid=\"hostel block b\" password=\"welcome123\"", "action": "connect_wifi"}
|
| 278 |
+
{"text": "please laptop ko wifi Redmi Note 12 pe lagao pass Library2026", "target": "connect_wifi ssid=\"redmi note 12\" password=\"library2026\"", "action": "connect_wifi"}
|
| 279 |
+
{"text": "laptop ko wifi Room 204 pe lagao pass Wifi@2024", "target": "connect_wifi ssid=\"room 204\" password=\"wifi@2024\"", "action": "connect_wifi"}
|
| 280 |
+
{"text": "laptop ko wifi iPhone of Ravi pe lagao pass Guest@123 jaldi", "target": "connect_wifi ssid=\"iphone of ravi\" password=\"guest@123\"", "action": "connect_wifi"}
|
| 281 |
+
{"text": "laptop ko wifi TP-Link_A1B2 pe lagao pass Wifi@2024 yaar", "target": "connect_wifi ssid=\"tp-link_a1b2\" password=\"wifi@2024\"", "action": "connect_wifi"}
|
| 282 |
+
{"text": "zara laptop ko wifi BSNL-FTTH-2291 pe lagao pass Pass@word99 na", "target": "connect_wifi ssid=\"bsnl-ftth-2291\" password=\"pass@word99\"", "action": "connect_wifi"}
|
| 283 |
+
{"text": "zara laptop ko wifi PiLab pe lagao pass Str0ng-P@ss thanks", "target": "connect_wifi ssid=\"pilab\" password=\"str0ng-p@ss\"", "action": "connect_wifi"}
|
| 284 |
+
{"text": "bhai laptop ko wifi TP-Link_A1B2 pe lagao pass jio#12345 thanks", "target": "connect_wifi ssid=\"tp-link_a1b2\" password=\"jio#12345\"", "action": "connect_wifi"}
|
| 285 |
+
{"text": "please laptop ko wifi Kumar_House_2 pe lagao pass 9876543210", "target": "connect_wifi ssid=\"kumar_house_2\" password=\"9876543210\"", "action": "connect_wifi"}
|
| 286 |
+
{"text": "zara laptop ko wifi Airtel_5G pe lagao pass zxcv9087 jaldi", "target": "connect_wifi ssid=\"airtel_5g\" password=\"zxcv9087\"", "action": "connect_wifi"}
|
| 287 |
+
{"text": "hey assistant laptop ko wifi Vi_Home pe lagao pass Pass@word99 na", "target": "connect_wifi ssid=\"vi_home\" password=\"pass@word99\"", "action": "connect_wifi"}
|
| 288 |
+
{"text": "please laptop ko wifi D-Link_DIR615 pe lagao pass Password@1", "target": "connect_wifi ssid=\"d-link_dir615\" password=\"password@1\"", "action": "connect_wifi"}
|
| 289 |
+
{"text": "bhai laptop ko wifi NETGEAR42 pe lagao pass jio#12345 abhi", "target": "connect_wifi ssid=\"netgear42\" password=\"jio#12345\"", "action": "connect_wifi"}
|
| 290 |
+
{"text": "bhai laptop ko wifi HomeNet pe lagao pass Str0ng-P@ss abhi", "target": "connect_wifi ssid=\"homenet\" password=\"str0ng-p@ss\"", "action": "connect_wifi"}
|
| 291 |
+
{"text": "zara laptop ko wifi Home 2.4G pe lagao pass Mehta&Sons9", "target": "connect_wifi ssid=\"home 2.4g\" password=\"mehta&sons9\"", "action": "connect_wifi"}
|
| 292 |
+
{"text": "jaldi laptop ko wifi Home 2.4G pe lagao pass pi-lab-2026 jaldi", "target": "connect_wifi ssid=\"home 2.4g\" password=\"pi-lab-2026\"", "action": "connect_wifi"}
|
| 293 |
+
{"text": "laptop ko wifi BSNL-FTTH-2291 pe lagao pass Str0ng-P@ss abhi", "target": "connect_wifi ssid=\"bsnl-ftth-2291\" password=\"str0ng-p@ss\"", "action": "connect_wifi"}
|
| 294 |
+
{"text": "hey assistant laptop ko wifi OnePlus Nord pe lagao pass Welcome123 na", "target": "connect_wifi ssid=\"oneplus nord\" password=\"welcome123\"", "action": "connect_wifi"}
|
| 295 |
+
{"text": "jaldi laptop ko wifi Tenda_8C21F0 pe lagao pass Wifi@2024 yaar", "target": "connect_wifi ssid=\"tenda_8c21f0\" password=\"wifi@2024\"", "action": "connect_wifi"}
|
| 296 |
+
{"text": "bhai laptop ko wifi Excitel-Pro 5G pe lagao pass pi-lab-2026 na", "target": "connect_wifi ssid=\"excitel-pro 5g\" password=\"pi-lab-2026\"", "action": "connect_wifi"}
|
| 297 |
+
{"text": "zara laptop ko wifi Home 2.4G pe lagao pass Cafe#Free77 yaar", "target": "connect_wifi ssid=\"home 2.4g\" password=\"cafe#free77\"", "action": "connect_wifi"}
|
| 298 |
+
{"text": "ok laptop ko wifi Home 2.4G pe lagao pass lalit.home7 yaar", "target": "connect_wifi ssid=\"home 2.4g\" password=\"lalit.home7\"", "action": "connect_wifi"}
|
| 299 |
+
{"text": "zara laptop ko wifi JioFiber-Home pe lagao pass 9876543210 na", "target": "connect_wifi ssid=\"jiofiber-home\" password=\"9876543210\"", "action": "connect_wifi"}
|
| 300 |
+
{"text": "bhai laptop ko wifi BSNL-FTTH-2291 pe lagao pass Kumar@1987", "target": "connect_wifi ssid=\"bsnl-ftth-2291\" password=\"kumar@1987\"", "action": "connect_wifi"}
|
| 301 |
+
{"text": "connect to the OnePlus Nord wifi", "target": "connect_wifi ssid=\"oneplus nord\"", "action": "connect_wifi"}
|
| 302 |
+
{"text": "ok connect to the Home 2.4G wifi yaar", "target": "connect_wifi ssid=\"home 2.4g\"", "action": "connect_wifi"}
|
| 303 |
+
{"text": "hey assistant connect to the Redmi Note 12 wifi jaldi", "target": "connect_wifi ssid=\"redmi note 12\"", "action": "connect_wifi"}
|
| 304 |
+
{"text": "connect to the JioFiber-Home wifi abhi", "target": "connect_wifi ssid=\"jiofiber-home\"", "action": "connect_wifi"}
|
| 305 |
+
{"text": "hey assistant connect to the OnePlus Nord wifi please", "target": "connect_wifi ssid=\"oneplus nord\"", "action": "connect_wifi"}
|
| 306 |
+
{"text": "jaldi connect to the Excitel-Pro 5G wifi yaar", "target": "connect_wifi ssid=\"excitel-pro 5g\"", "action": "connect_wifi"}
|
| 307 |
+
{"text": "bhai connect to the Redmi Note 12 wifi please", "target": "connect_wifi ssid=\"redmi note 12\"", "action": "connect_wifi"}
|
| 308 |
+
{"text": "connect to the Hathway_3F9C wifi thanks", "target": "connect_wifi ssid=\"hathway_3f9c\"", "action": "connect_wifi"}
|
| 309 |
+
{"text": "hey assistant connect to the Redmi Note 12 wifi", "target": "connect_wifi ssid=\"redmi note 12\"", "action": "connect_wifi"}
|
| 310 |
+
{"text": "ok connect to the Cafe Coffee Day wifi", "target": "connect_wifi ssid=\"cafe coffee day\"", "action": "connect_wifi"}
|
| 311 |
+
{"text": "connect to the Cafe Coffee Day wifi abhi", "target": "connect_wifi ssid=\"cafe coffee day\"", "action": "connect_wifi"}
|
| 312 |
+
{"text": "please connect to the Cafe Coffee Day wifi", "target": "connect_wifi ssid=\"cafe coffee day\"", "action": "connect_wifi"}
|
| 313 |
+
{"text": "connect to the TP-Link_A1B2 wifi please", "target": "connect_wifi ssid=\"tp-link_a1b2\"", "action": "connect_wifi"}
|
| 314 |
+
{"text": "please connect to the Galaxy M31 wifi", "target": "connect_wifi ssid=\"galaxy m31\"", "action": "connect_wifi"}
|
| 315 |
+
{"text": "hey assistant connect to the Vi_Home wifi yaar", "target": "connect_wifi ssid=\"vi_home\"", "action": "connect_wifi"}
|
| 316 |
+
{"text": "bhai connect to the Room 204 wifi abhi", "target": "connect_wifi ssid=\"room 204\"", "action": "connect_wifi"}
|
| 317 |
+
{"text": "zara connect to the Room 204 wifi please", "target": "connect_wifi ssid=\"room 204\"", "action": "connect_wifi"}
|
| 318 |
+
{"text": "zara connect to the Redmi Note 12 wifi please", "target": "connect_wifi ssid=\"redmi note 12\"", "action": "connect_wifi"}
|
| 319 |
+
{"text": "connect to the Kumar_House_2 wifi thanks", "target": "connect_wifi ssid=\"kumar_house_2\"", "action": "connect_wifi"}
|
| 320 |
+
{"text": "ok connect to the Hathway_3F9C wifi jaldi", "target": "connect_wifi ssid=\"hathway_3f9c\"", "action": "connect_wifi"}
|
| 321 |
+
{"text": "connect to the TP-Link_A1B2 wifi na", "target": "connect_wifi ssid=\"tp-link_a1b2\"", "action": "connect_wifi"}
|
| 322 |
+
{"text": "connect to the Galaxy M31 wifi thanks", "target": "connect_wifi ssid=\"galaxy m31\"", "action": "connect_wifi"}
|
| 323 |
+
{"text": "connect to the MyNet wifi", "target": "connect_wifi ssid=\"mynet\"", "action": "connect_wifi"}
|
| 324 |
+
{"text": "ok connect to the iPhone of Ravi wifi", "target": "connect_wifi ssid=\"iphone of ravi\"", "action": "connect_wifi"}
|
| 325 |
+
{"text": "bhai connect to the HomeNet wifi", "target": "connect_wifi ssid=\"homenet\"", "action": "connect_wifi"}
|
| 326 |
+
{"text": "ok connect to the Sharma Ji Home wifi jaldi", "target": "connect_wifi ssid=\"sharma ji home\"", "action": "connect_wifi"}
|
| 327 |
+
{"text": "connect to the Tenda_8C21F0 wifi abhi", "target": "connect_wifi ssid=\"tenda_8c21f0\"", "action": "connect_wifi"}
|
| 328 |
+
{"text": "zara connect to the Galaxy M31 wifi", "target": "connect_wifi ssid=\"galaxy m31\"", "action": "connect_wifi"}
|
| 329 |
+
{"text": "connect to the ACT_Fibernet_7 wifi jaldi", "target": "connect_wifi ssid=\"act_fibernet_7\"", "action": "connect_wifi"}
|
| 330 |
+
{"text": "connect to the Kumar_House_2 wifi abhi", "target": "connect_wifi ssid=\"kumar_house_2\"", "action": "connect_wifi"}
|
| 331 |
+
{"text": "ok connect to the D-Link_DIR615 wifi", "target": "connect_wifi ssid=\"d-link_dir615\"", "action": "connect_wifi"}
|
| 332 |
+
{"text": "please connect to the iPhone of Ravi wifi", "target": "connect_wifi ssid=\"iphone of ravi\"", "action": "connect_wifi"}
|
| 333 |
+
{"text": "bhai connect to the iPhone of Ravi wifi abhi", "target": "connect_wifi ssid=\"iphone of ravi\"", "action": "connect_wifi"}
|
| 334 |
+
{"text": "hey assistant connect to the Vi_Home wifi please", "target": "connect_wifi ssid=\"vi_home\"", "action": "connect_wifi"}
|
| 335 |
+
{"text": "zara connect to the OnePlus Nord wifi", "target": "connect_wifi ssid=\"oneplus nord\"", "action": "connect_wifi"}
|
| 336 |
+
{"text": "jaldi connect to the Mehta_Family wifi", "target": "connect_wifi ssid=\"mehta_family\"", "action": "connect_wifi"}
|
| 337 |
+
{"text": "hey assistant connect to the Tenda_8C21F0 wifi", "target": "connect_wifi ssid=\"tenda_8c21f0\"", "action": "connect_wifi"}
|
| 338 |
+
{"text": "hey assistant connect to the Room 204 wifi please", "target": "connect_wifi ssid=\"room 204\"", "action": "connect_wifi"}
|
| 339 |
+
{"text": "bhai connect to the Galaxy M31 wifi", "target": "connect_wifi ssid=\"galaxy m31\"", "action": "connect_wifi"}
|
| 340 |
+
{"text": "wifi Classroom WiFi bhool jao", "target": "forget_wifi ssid=\"classroom wifi\"", "action": "forget_wifi"}
|
| 341 |
+
{"text": "wifi NETGEAR42 bhool jao na", "target": "forget_wifi ssid=\"netgear42\"", "action": "forget_wifi"}
|
| 342 |
+
{"text": "jaldi wifi TP-Link_A1B2 bhool jao please", "target": "forget_wifi ssid=\"tp-link_a1b2\"", "action": "forget_wifi"}
|
| 343 |
+
{"text": "hey assistant wifi Studio Wifi bhool jao please", "target": "forget_wifi ssid=\"studio wifi\"", "action": "forget_wifi"}
|
| 344 |
+
{"text": "hey assistant wifi Office WiFi 5G bhool jao na", "target": "forget_wifi ssid=\"office wifi 5g\"", "action": "forget_wifi"}
|
| 345 |
+
{"text": "zara wifi Vi_Home bhool jao", "target": "forget_wifi ssid=\"vi_home\"", "action": "forget_wifi"}
|
| 346 |
+
{"text": "bhai wifi TP-Link_A1B2 bhool jao", "target": "forget_wifi ssid=\"tp-link_a1b2\"", "action": "forget_wifi"}
|
| 347 |
+
{"text": "hey assistant wifi Home 2.4G bhool jao thanks", "target": "forget_wifi ssid=\"home 2.4g\"", "action": "forget_wifi"}
|
| 348 |
+
{"text": "bhai wifi Hathway_3F9C bhool jao please", "target": "forget_wifi ssid=\"hathway_3f9c\"", "action": "forget_wifi"}
|
| 349 |
+
{"text": "wifi Vi_Home bhool jao thanks", "target": "forget_wifi ssid=\"vi_home\"", "action": "forget_wifi"}
|
| 350 |
+
{"text": "please wifi Excitel-Pro 5G bhool jao", "target": "forget_wifi ssid=\"excitel-pro 5g\"", "action": "forget_wifi"}
|
| 351 |
+
{"text": "ok wifi Room 204 bhool jao yaar", "target": "forget_wifi ssid=\"room 204\"", "action": "forget_wifi"}
|
| 352 |
+
{"text": "wifi Studio Wifi bhool jao abhi", "target": "forget_wifi ssid=\"studio wifi\"", "action": "forget_wifi"}
|
| 353 |
+
{"text": "jaldi wifi Hostel Block B bhool jao", "target": "forget_wifi ssid=\"hostel block b\"", "action": "forget_wifi"}
|
| 354 |
+
{"text": "hey assistant wifi Tenda_8C21F0 bhool jao jaldi", "target": "forget_wifi ssid=\"tenda_8c21f0\"", "action": "forget_wifi"}
|
| 355 |
+
{"text": "wifi Library-Guest bhool jao abhi", "target": "forget_wifi ssid=\"library-guest\"", "action": "forget_wifi"}
|
| 356 |
+
{"text": "wifi Airtel_5G bhool jao", "target": "forget_wifi ssid=\"airtel_5g\"", "action": "forget_wifi"}
|
| 357 |
+
{"text": "hey assistant wifi Office WiFi 5G bhool jao", "target": "forget_wifi ssid=\"office wifi 5g\"", "action": "forget_wifi"}
|
| 358 |
+
{"text": "ok wifi Kumar_House_2 bhool jao", "target": "forget_wifi ssid=\"kumar_house_2\"", "action": "forget_wifi"}
|
| 359 |
+
{"text": "jaldi wifi Redmi Note 12 bhool jao na", "target": "forget_wifi ssid=\"redmi note 12\"", "action": "forget_wifi"}
|
| 360 |
+
{"text": "ok wifi Redmi Note 12 bhool jao please", "target": "forget_wifi ssid=\"redmi note 12\"", "action": "forget_wifi"}
|
| 361 |
+
{"text": "wifi Studio Wifi bhool jao thanks", "target": "forget_wifi ssid=\"studio wifi\"", "action": "forget_wifi"}
|
| 362 |
+
{"text": "zara wifi D-Link_DIR615 bhool jao jaldi", "target": "forget_wifi ssid=\"d-link_dir615\"", "action": "forget_wifi"}
|
| 363 |
+
{"text": "hey assistant wifi Airtel_5G bhool jao jaldi", "target": "forget_wifi ssid=\"airtel_5g\"", "action": "forget_wifi"}
|
| 364 |
+
{"text": "ok wifi TP-Link_A1B2 bhool jao please", "target": "forget_wifi ssid=\"tp-link_a1b2\"", "action": "forget_wifi"}
|
| 365 |
+
{"text": "wifi JioFiber-Home bhool jao", "target": "forget_wifi ssid=\"jiofiber-home\"", "action": "forget_wifi"}
|
| 366 |
+
{"text": "hey assistant wifi Office WiFi 5G bhool jao yaar", "target": "forget_wifi ssid=\"office wifi 5g\"", "action": "forget_wifi"}
|
| 367 |
+
{"text": "wifi PiLab bhool jao", "target": "forget_wifi ssid=\"pilab\"", "action": "forget_wifi"}
|
| 368 |
+
{"text": "please wifi Home 2.4G bhool jao yaar", "target": "forget_wifi ssid=\"home 2.4g\"", "action": "forget_wifi"}
|
| 369 |
+
{"text": "ok wifi OnePlus Nord bhool jao", "target": "forget_wifi ssid=\"oneplus nord\"", "action": "forget_wifi"}
|
| 370 |
+
{"text": "hey assistant wifi NETGEAR42 bhool jao yaar", "target": "forget_wifi ssid=\"netgear42\"", "action": "forget_wifi"}
|
| 371 |
+
{"text": "hey assistant wifi JioFiber-Home bhool jao yaar", "target": "forget_wifi ssid=\"jiofiber-home\"", "action": "forget_wifi"}
|
| 372 |
+
{"text": "zara wifi PiLab bhool jao", "target": "forget_wifi ssid=\"pilab\"", "action": "forget_wifi"}
|
| 373 |
+
{"text": "bhai wifi Studio Wifi bhool jao", "target": "forget_wifi ssid=\"studio wifi\"", "action": "forget_wifi"}
|
| 374 |
+
{"text": "wifi BSNL-FTTH-2291 bhool jao please", "target": "forget_wifi ssid=\"bsnl-ftth-2291\"", "action": "forget_wifi"}
|
| 375 |
+
{"text": "please wifi Office WiFi 5G bhool jao jaldi", "target": "forget_wifi ssid=\"office wifi 5g\"", "action": "forget_wifi"}
|
| 376 |
+
{"text": "bhai wifi iPhone of Ravi bhool jao yaar", "target": "forget_wifi ssid=\"iphone of ravi\"", "action": "forget_wifi"}
|
| 377 |
+
{"text": "bhai wifi iPhone of Ravi bhool jao jaldi", "target": "forget_wifi ssid=\"iphone of ravi\"", "action": "forget_wifi"}
|
| 378 |
+
{"text": "wifi Sharma Ji Home bhool jao jaldi", "target": "forget_wifi ssid=\"sharma ji home\"", "action": "forget_wifi"}
|
| 379 |
+
{"text": "wifi Mehta_Family bhool jao please", "target": "forget_wifi ssid=\"mehta_family\"", "action": "forget_wifi"}
|
| 380 |
+
{"text": "bhai wifi Hostel Block B bhool jao", "target": "forget_wifi ssid=\"hostel block b\"", "action": "forget_wifi"}
|
| 381 |
+
{"text": "wifi Sharma Ji Home bhool jao please", "target": "forget_wifi ssid=\"sharma ji home\"", "action": "forget_wifi"}
|
| 382 |
+
{"text": "please wifi ACT_Fibernet_7 bhool jao", "target": "forget_wifi ssid=\"act_fibernet_7\"", "action": "forget_wifi"}
|
| 383 |
+
{"text": "ok D-Link_DIR615 ka profile delete kar do", "target": "forget_wifi ssid=\"d-link_dir615\"", "action": "forget_wifi"}
|
| 384 |
+
{"text": "jaldi Sharma Ji Home ka profile delete kar do abhi", "target": "forget_wifi ssid=\"sharma ji home\"", "action": "forget_wifi"}
|
| 385 |
+
{"text": "please BSNL-FTTH-2291 ka profile delete kar do", "target": "forget_wifi ssid=\"bsnl-ftth-2291\"", "action": "forget_wifi"}
|
| 386 |
+
{"text": "bhai Mehta_Family ka profile delete kar do", "target": "forget_wifi ssid=\"mehta_family\"", "action": "forget_wifi"}
|
| 387 |
+
{"text": "zara Airtel_5G ka profile delete kar do abhi", "target": "forget_wifi ssid=\"airtel_5g\"", "action": "forget_wifi"}
|
| 388 |
+
{"text": "TP-Link_A1B2 ka profile delete kar do abhi", "target": "forget_wifi ssid=\"tp-link_a1b2\"", "action": "forget_wifi"}
|
| 389 |
+
{"text": "HomeNet ka profile delete kar do na", "target": "forget_wifi ssid=\"homenet\"", "action": "forget_wifi"}
|
| 390 |
+
{"text": "hey assistant Airtel_5G ka profile delete kar do abhi", "target": "forget_wifi ssid=\"airtel_5g\"", "action": "forget_wifi"}
|
| 391 |
+
{"text": "ok Sharma Ji Home ka profile delete kar do thanks", "target": "forget_wifi ssid=\"sharma ji home\"", "action": "forget_wifi"}
|
| 392 |
+
{"text": "zara PiLab ka profile delete kar do please", "target": "forget_wifi ssid=\"pilab\"", "action": "forget_wifi"}
|
| 393 |
+
{"text": "Room 204 ka profile delete kar do abhi", "target": "forget_wifi ssid=\"room 204\"", "action": "forget_wifi"}
|
| 394 |
+
{"text": "Classroom WiFi ka profile delete kar do please", "target": "forget_wifi ssid=\"classroom wifi\"", "action": "forget_wifi"}
|
| 395 |
+
{"text": "Vi_Home ka profile delete kar do thanks", "target": "forget_wifi ssid=\"vi_home\"", "action": "forget_wifi"}
|
| 396 |
+
{"text": "Sharma Ji Home ka profile delete kar do na", "target": "forget_wifi ssid=\"sharma ji home\"", "action": "forget_wifi"}
|
| 397 |
+
{"text": "D-Link_DIR615 ka profile delete kar do yaar", "target": "forget_wifi ssid=\"d-link_dir615\"", "action": "forget_wifi"}
|
| 398 |
+
{"text": "Mehta_Family ka profile delete kar do thanks", "target": "forget_wifi ssid=\"mehta_family\"", "action": "forget_wifi"}
|
| 399 |
+
{"text": "PiLab ka profile delete kar do", "target": "forget_wifi ssid=\"pilab\"", "action": "forget_wifi"}
|
| 400 |
+
{"text": "ok Airtel_5G ka profile delete kar do thanks", "target": "forget_wifi ssid=\"airtel_5g\"", "action": "forget_wifi"}
|
| 401 |
+
{"text": "hey assistant Mehta_Family ka profile delete kar do na", "target": "forget_wifi ssid=\"mehta_family\"", "action": "forget_wifi"}
|
| 402 |
+
{"text": "zara D-Link_DIR615 ka profile delete kar do", "target": "forget_wifi ssid=\"d-link_dir615\"", "action": "forget_wifi"}
|
| 403 |
+
{"text": "BSNL-FTTH-2291 ka profile delete kar do jaldi", "target": "forget_wifi ssid=\"bsnl-ftth-2291\"", "action": "forget_wifi"}
|
| 404 |
+
{"text": "hey assistant Tenda_8C21F0 ka profile delete kar do jaldi", "target": "forget_wifi ssid=\"tenda_8c21f0\"", "action": "forget_wifi"}
|
| 405 |
+
{"text": "NETGEAR42 ka profile delete kar do thanks", "target": "forget_wifi ssid=\"netgear42\"", "action": "forget_wifi"}
|
| 406 |
+
{"text": "Studio Wifi ka profile delete kar do", "target": "forget_wifi ssid=\"studio wifi\"", "action": "forget_wifi"}
|
| 407 |
+
{"text": "zara ACT_Fibernet_7 ka profile delete kar do abhi", "target": "forget_wifi ssid=\"act_fibernet_7\"", "action": "forget_wifi"}
|
| 408 |
+
{"text": "hey assistant Sharma Ji Home ka profile delete kar do please", "target": "forget_wifi ssid=\"sharma ji home\"", "action": "forget_wifi"}
|
| 409 |
+
{"text": "zara Guest_Network ka profile delete kar do", "target": "forget_wifi ssid=\"guest_network\"", "action": "forget_wifi"}
|
| 410 |
+
{"text": "ok Galaxy M31 ka profile delete kar do abhi", "target": "forget_wifi ssid=\"galaxy m31\"", "action": "forget_wifi"}
|
| 411 |
+
{"text": "iPhone of Ravi ka profile delete kar do", "target": "forget_wifi ssid=\"iphone of ravi\"", "action": "forget_wifi"}
|
| 412 |
+
{"text": "Mehta_Family ka profile delete kar do jaldi", "target": "forget_wifi ssid=\"mehta_family\"", "action": "forget_wifi"}
|
| 413 |
+
{"text": "Hathway_3F9C ka profile delete kar do abhi", "target": "forget_wifi ssid=\"hathway_3f9c\"", "action": "forget_wifi"}
|
| 414 |
+
{"text": "Home 2.4G ka profile delete kar do", "target": "forget_wifi ssid=\"home 2.4g\"", "action": "forget_wifi"}
|
| 415 |
+
{"text": "hey assistant MyNet ka profile delete kar do jaldi", "target": "forget_wifi ssid=\"mynet\"", "action": "forget_wifi"}
|
| 416 |
+
{"text": "please Office WiFi 5G ka profile delete kar do please", "target": "forget_wifi ssid=\"office wifi 5g\"", "action": "forget_wifi"}
|
| 417 |
+
{"text": "bhai Redmi Note 12 ka profile delete kar do thanks", "target": "forget_wifi ssid=\"redmi note 12\"", "action": "forget_wifi"}
|
| 418 |
+
{"text": "please Library-Guest ka profile delete kar do", "target": "forget_wifi ssid=\"library-guest\"", "action": "forget_wifi"}
|
| 419 |
+
{"text": "please D-Link_DIR615 ka profile delete kar do abhi", "target": "forget_wifi ssid=\"d-link_dir615\"", "action": "forget_wifi"}
|
| 420 |
+
{"text": "hey assistant TP-Link_A1B2 ka profile delete kar do na", "target": "forget_wifi ssid=\"tp-link_a1b2\"", "action": "forget_wifi"}
|
| 421 |
+
{"text": "hey assistant HomeNet ka profile delete kar do na", "target": "forget_wifi ssid=\"homenet\"", "action": "forget_wifi"}
|
| 422 |
+
{"text": "HomeNet ka profile delete kar do", "target": "forget_wifi ssid=\"homenet\"", "action": "forget_wifi"}
|
| 423 |
+
{"text": "please Mehta_Family ka profile delete kar do jaldi", "target": "forget_wifi ssid=\"mehta_family\"", "action": "forget_wifi"}
|
| 424 |
+
{"text": "jaldi Hostel Block B ka profile delete kar do yaar", "target": "forget_wifi ssid=\"hostel block b\"", "action": "forget_wifi"}
|
| 425 |
+
{"text": "please Vi_Home ka profile delete kar do abhi", "target": "forget_wifi ssid=\"vi_home\"", "action": "forget_wifi"}
|
| 426 |
+
{"text": "hey assistant Room 204 ka profile delete kar do na", "target": "forget_wifi ssid=\"room 204\"", "action": "forget_wifi"}
|
| 427 |
+
{"text": "ok ACT_Fibernet_7 ka password kya hai abhi", "target": "show_wifi_password ssid=\"act_fibernet_7\"", "action": "show_wifi_password"}
|
| 428 |
+
{"text": "zara Hathway_3F9C ka password kya hai", "target": "show_wifi_password ssid=\"hathway_3f9c\"", "action": "show_wifi_password"}
|
| 429 |
+
{"text": "jaldi Guest_Network ka password kya hai na", "target": "show_wifi_password ssid=\"guest_network\"", "action": "show_wifi_password"}
|
| 430 |
+
{"text": "ok NETGEAR42 ka password kya hai abhi", "target": "show_wifi_password ssid=\"netgear42\"", "action": "show_wifi_password"}
|
| 431 |
+
{"text": "ok Mehta_Family ka password kya hai jaldi", "target": "show_wifi_password ssid=\"mehta_family\"", "action": "show_wifi_password"}
|
| 432 |
+
{"text": "bhai Redmi Note 12 ka password kya hai abhi", "target": "show_wifi_password ssid=\"redmi note 12\"", "action": "show_wifi_password"}
|
| 433 |
+
{"text": "Cafe Coffee Day ka password kya hai abhi", "target": "show_wifi_password ssid=\"cafe coffee day\"", "action": "show_wifi_password"}
|
| 434 |
+
{"text": "jaldi Redmi Note 12 ka password kya hai jaldi", "target": "show_wifi_password ssid=\"redmi note 12\"", "action": "show_wifi_password"}
|
| 435 |
+
{"text": "Cafe Coffee Day ka password kya hai", "target": "show_wifi_password ssid=\"cafe coffee day\"", "action": "show_wifi_password"}
|
| 436 |
+
{"text": "ok Airtel_5G ka password kya hai na", "target": "show_wifi_password ssid=\"airtel_5g\"", "action": "show_wifi_password"}
|
| 437 |
+
{"text": "ok JioFiber-Home ka password kya hai jaldi", "target": "show_wifi_password ssid=\"jiofiber-home\"", "action": "show_wifi_password"}
|
| 438 |
+
{"text": "Library-Guest ka password kya hai", "target": "show_wifi_password ssid=\"library-guest\"", "action": "show_wifi_password"}
|
| 439 |
+
{"text": "MyNet ka password kya hai thanks", "target": "show_wifi_password ssid=\"mynet\"", "action": "show_wifi_password"}
|
| 440 |
+
{"text": "Home 2.4G ka password kya hai abhi", "target": "show_wifi_password ssid=\"home 2.4g\"", "action": "show_wifi_password"}
|
| 441 |
+
{"text": "ok Studio Wifi ka password kya hai", "target": "show_wifi_password ssid=\"studio wifi\"", "action": "show_wifi_password"}
|
| 442 |
+
{"text": "jaldi Kumar_House_2 ka password kya hai thanks", "target": "show_wifi_password ssid=\"kumar_house_2\"", "action": "show_wifi_password"}
|
| 443 |
+
{"text": "hey assistant Kumar_House_2 ka password kya hai", "target": "show_wifi_password ssid=\"kumar_house_2\"", "action": "show_wifi_password"}
|
| 444 |
+
{"text": "ok Redmi Note 12 ka password kya hai abhi", "target": "show_wifi_password ssid=\"redmi note 12\"", "action": "show_wifi_password"}
|
| 445 |
+
{"text": "zara Room 204 ka password kya hai jaldi", "target": "show_wifi_password ssid=\"room 204\"", "action": "show_wifi_password"}
|
| 446 |
+
{"text": "bhai Office WiFi 5G ka password kya hai jaldi", "target": "show_wifi_password ssid=\"office wifi 5g\"", "action": "show_wifi_password"}
|
| 447 |
+
{"text": "OnePlus Nord ka password kya hai", "target": "show_wifi_password ssid=\"oneplus nord\"", "action": "show_wifi_password"}
|
| 448 |
+
{"text": "Airtel_5G ka password kya hai thanks", "target": "show_wifi_password ssid=\"airtel_5g\"", "action": "show_wifi_password"}
|
| 449 |
+
{"text": "hey assistant MyNet ka password kya hai thanks", "target": "show_wifi_password ssid=\"mynet\"", "action": "show_wifi_password"}
|
| 450 |
+
{"text": "jaldi OnePlus Nord ka password kya hai", "target": "show_wifi_password ssid=\"oneplus nord\"", "action": "show_wifi_password"}
|
| 451 |
+
{"text": "bhai Home 2.4G ka password kya hai", "target": "show_wifi_password ssid=\"home 2.4g\"", "action": "show_wifi_password"}
|
| 452 |
+
{"text": "please Cafe Coffee Day ka password kya hai", "target": "show_wifi_password ssid=\"cafe coffee day\"", "action": "show_wifi_password"}
|
| 453 |
+
{"text": "jaldi D-Link_DIR615 ka password kya hai abhi", "target": "show_wifi_password ssid=\"d-link_dir615\"", "action": "show_wifi_password"}
|
| 454 |
+
{"text": "Studio Wifi ka password kya hai abhi", "target": "show_wifi_password ssid=\"studio wifi\"", "action": "show_wifi_password"}
|
| 455 |
+
{"text": "Guest_Network ka password kya hai", "target": "show_wifi_password ssid=\"guest_network\"", "action": "show_wifi_password"}
|
| 456 |
+
{"text": "D-Link_DIR615 ka password kya hai", "target": "show_wifi_password ssid=\"d-link_dir615\"", "action": "show_wifi_password"}
|
| 457 |
+
{"text": "Redmi Note 12 ka password kya hai abhi", "target": "show_wifi_password ssid=\"redmi note 12\"", "action": "show_wifi_password"}
|
| 458 |
+
{"text": "bhai Classroom WiFi ka password kya hai abhi", "target": "show_wifi_password ssid=\"classroom wifi\"", "action": "show_wifi_password"}
|
| 459 |
+
{"text": "please BSNL-FTTH-2291 ka password kya hai thanks", "target": "show_wifi_password ssid=\"bsnl-ftth-2291\"", "action": "show_wifi_password"}
|
| 460 |
+
{"text": "Home 2.4G ka password kya hai", "target": "show_wifi_password ssid=\"home 2.4g\"", "action": "show_wifi_password"}
|
| 461 |
+
{"text": "zara NETGEAR42 ka password kya hai abhi", "target": "show_wifi_password ssid=\"netgear42\"", "action": "show_wifi_password"}
|
executor/commands.py
ADDED
|
@@ -0,0 +1,346 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""Command templates for every union action. CMD[action] = {"win": "<kind>:<template>", "pi": "<kind>:<template>"}
|
| 2 |
+
kind: ps (PowerShell) | cmd (cmd.exe) | sh (bash) | key (key combo) | open (URL/file via default handler) | py (executor builtin)
|
| 3 |
+
None = not available on that platform.
|
| 4 |
+
Placeholders are slot names ({pin}, {path}, {query} ...) plus derived ones the executor fills in:
|
| 5 |
+
{seconds} {minutes} (from amount+unit) {step} (default 10) {sudo} ('sudo ' when needed_sudo) {home}
|
| 6 |
+
{app_win} {app_pi} {site_url} {folder_win} {folder_pi} {page_uri} {svc_unit} {svc_win} {mode_cmd} {gpio} (bcm number after board->bcm)
|
| 7 |
+
Values are shell-quoted by the executor before substitution; templates must not add their own quotes around {…}.
|
| 8 |
+
"""
|
| 9 |
+
from tables import WIN_AUDIO as _A, WIN_KEYS as _K, WIN_BT as _B, WIN_SCREENSHOT as _S
|
| 10 |
+
def _esc(x): return x.replace('{', '{{').replace('}', '}}') # embedded PowerShell/C# braces must survive str.format
|
| 11 |
+
WIN_AUDIO, WIN_KEYS, WIN_BT, WIN_SCREENSHOT = _esc(_A), _esc(_K), _esc(_B), _esc(_S)
|
| 12 |
+
|
| 13 |
+
def K(win, pi): return {"win": win, "pi": pi}
|
| 14 |
+
PS_BRIGHT = "$m=Get-CimInstance -Namespace root/WMI -ClassName WmiMonitorBrightnessMethods; if(-not $m){{throw 'No controllable backlight'}}; "
|
| 15 |
+
PI_BRIGHT = "B=$(ls /sys/class/backlight | head -1); M=$(cat /sys/class/backlight/$B/max_brightness); "
|
| 16 |
+
CMD = {}
|
| 17 |
+
# ------------------------------------------------------------------ audio
|
| 18 |
+
CMD["set_volume"] = K("ps:" + WIN_AUDIO + "[Audio]::Mute=$false; [Audio]::Volume={value}/100", "sh:wpctl set-volume -l 1.0 @DEFAULT_AUDIO_SINK@ {value}% || amixer -q sset Master {value}%")
|
| 19 |
+
CMD["volume_up"] = K("ps:" + WIN_AUDIO + "$v=[Audio]::Volume+{step}/100; [Audio]::Volume=[Math]::Min(1,$v); [int]([Audio]::Volume*100)", "sh:wpctl set-volume -l 1.0 @DEFAULT_AUDIO_SINK@ {step}%+")
|
| 20 |
+
CMD["volume_down"] = K("ps:" + WIN_AUDIO + "$v=[Audio]::Volume-{step}/100; [Audio]::Volume=[Math]::Max(0,$v); [int]([Audio]::Volume*100)", "sh:wpctl set-volume @DEFAULT_AUDIO_SINK@ {step}%-")
|
| 21 |
+
CMD["mute"] = K("ps:" + WIN_AUDIO + "[Audio]::Mute=$true", "sh:wpctl set-mute @DEFAULT_AUDIO_SINK@ 1")
|
| 22 |
+
CMD["unmute"] = K("ps:" + WIN_AUDIO + "[Audio]::Mute=$false", "sh:wpctl set-mute @DEFAULT_AUDIO_SINK@ 0")
|
| 23 |
+
CMD["get_volume"] = K("ps:" + WIN_AUDIO + "[int]([Audio]::Volume*100)", "sh:wpctl get-volume @DEFAULT_AUDIO_SINK@")
|
| 24 |
+
CMD["mic_mute"] = K("ps:" + WIN_AUDIO.replace("GetDefaultAudioEndpoint(0, 1", "GetDefaultAudioEndpoint(1, 1") + "[Audio]::Mute=$true", "sh:wpctl set-mute @DEFAULT_AUDIO_SOURCE@ 1")
|
| 25 |
+
CMD["mic_unmute"] = K("ps:" + WIN_AUDIO.replace("GetDefaultAudioEndpoint(0, 1", "GetDefaultAudioEndpoint(1, 1") + "[Audio]::Mute=$false", "sh:wpctl set-mute @DEFAULT_AUDIO_SOURCE@ 0")
|
| 26 |
+
CMD["set_audio_output"] = K("ps:Get-PnpDevice -Class AudioEndpoint | Where-Object FriendlyName -match {output} | Select-Object -First 1 FriendlyName; Write-Output 'select this device in Settings > Sound (no CLI default-switch API)'", "sh:wpctl status | grep -iA3 sinks; ID=$(wpctl status | grep -i {output} | grep -o '[0-9]*\\.' | head -1 | tr -d .); [ -n \"$ID\" ] && wpctl set-default $ID")
|
| 27 |
+
CMD["list_audio_devices"] = K("ps:Get-PnpDevice -Class AudioEndpoint,MEDIA | Where-Object Status -eq OK | Select-Object FriendlyName,Class", "sh:aplay -l; arecord -l; wpctl status")
|
| 28 |
+
CMD["record_audio"] = K("ps:Write-Output 'use: ffmpeg -f dshow -i audio=<mic> -t {seconds} rec.wav'; ffmpeg -f dshow -i audio=default -t {seconds} $env:USERPROFILE\\rec.wav", "sh:arecord -f S16_LE -r 16000 -c1 -d {seconds} ~/rec_$(date +%s).wav && echo saved")
|
| 29 |
+
# ------------------------------------------------------------------ display
|
| 30 |
+
CMD["set_brightness"] = K("ps:" + PS_BRIGHT + "$m | Invoke-CimMethod -MethodName WmiSetBrightness -Arguments @{{Timeout=1;Brightness=[byte]{value}}}", "sh:brightnessctl set {value}% 2>/dev/null || (" + PI_BRIGHT + "echo $(( {value} * M / 100 )) | sudo tee /sys/class/backlight/$B/brightness)")
|
| 31 |
+
CMD["brightness_up"] = K("ps:$c=(Get-CimInstance -Namespace root/WMI -ClassName WmiMonitorBrightness).CurrentBrightness; $n=[Math]::Min(100,$c+{step}); " + PS_BRIGHT + "$m | Invoke-CimMethod -MethodName WmiSetBrightness -Arguments @{{Timeout=1;Brightness=[byte]$n}}; $n", "sh:brightnessctl set +{step}%")
|
| 32 |
+
CMD["brightness_down"] = K("ps:$c=(Get-CimInstance -Namespace root/WMI -ClassName WmiMonitorBrightness).CurrentBrightness; $n=[Math]::Max(0,$c-{step}); " + PS_BRIGHT + "$m | Invoke-CimMethod -MethodName WmiSetBrightness -Arguments @{{Timeout=1;Brightness=[byte]$n}}; $n", "sh:brightnessctl set {step}%-")
|
| 33 |
+
CMD["get_brightness"] = K("ps:(Get-CimInstance -Namespace root/WMI -ClassName WmiMonitorBrightness).CurrentBrightness", "sh:brightnessctl get 2>/dev/null || cat /sys/class/backlight/*/brightness")
|
| 34 |
+
CMD["night_light_on"] = K("cmd:start ms-settings:nightlight", "sh:command -v wlsunset >/dev/null && (wlsunset -t 4000 -T 4001 &) || echo 'install wlsunset / redshift'")
|
| 35 |
+
CMD["night_light_off"] = K("cmd:start ms-settings:nightlight", "sh:pkill wlsunset; pkill redshift; echo 'night light off'")
|
| 36 |
+
CMD["dark_mode_on"] = K("ps:Set-ItemProperty HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize AppsUseLightTheme 0; Set-ItemProperty HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize SystemUsesLightTheme 0", "sh:gsettings set org.gnome.desktop.interface color-scheme prefer-dark 2>/dev/null || echo 'set dark theme in Appearance settings'")
|
| 37 |
+
CMD["dark_mode_off"] = K("ps:Set-ItemProperty HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize AppsUseLightTheme 1; Set-ItemProperty HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize SystemUsesLightTheme 1", "sh:gsettings set org.gnome.desktop.interface color-scheme prefer-light 2>/dev/null || echo 'set light theme in Appearance settings'")
|
| 38 |
+
CMD["screen_off"] = K("ps:(Add-Type '[DllImport(\"user32.dll\")]public static extern int SendMessage(int hWnd,int hMsg,int wParam,int lParam);' -Name a -Pas)::SendMessage(-1,0x0112,0xF170,2)", "sh:wlr-randr --output HDMI-A-1 --off 2>/dev/null || xset dpms force off")
|
| 39 |
+
CMD["display_mode"] = K("cmd:{mode_cmd}", None)
|
| 40 |
+
CMD["list_displays"] = K("ps:Get-CimInstance Win32_VideoController | Select-Object Name,CurrentHorizontalResolution,CurrentVerticalResolution,CurrentRefreshRate", "sh:kmsprint 2>/dev/null || wlr-randr 2>/dev/null || xrandr")
|
| 41 |
+
CMD["set_resolution"] = K("ps:Write-Output 'Windows has no built-in CLI for resolution; opening Display settings'; start ms-settings:display", "sh:wlr-randr --output $(wlr-randr | head -1 | cut -d' ' -f1) --mode {resolution} 2>/dev/null || xrandr -s {resolution}")
|
| 42 |
+
CMD["set_display_scale"] = K("ps:start ms-settings:display; Write-Output 'set scale to {value}% in Display settings'", "sh:wlr-randr --output $(wlr-randr | head -1 | cut -d' ' -f1) --scale $(echo 'scale=2; {value}/100' | bc)")
|
| 43 |
+
CMD["set_refresh_rate"] = K("ps:start ms-settings:display-advanced; Write-Output 'choose {value} Hz'", "sh:M=$(wlr-randr | grep -m1 current | awk '{{print $1}}'); wlr-randr --output $(wlr-randr | head -1 | cut -d' ' -f1) --mode ${{M}}@{value}")
|
| 44 |
+
CMD["rotate_screen"] = K("ps:start ms-settings:display; Write-Output 'orientation {orientation}'", "sh:wlr-randr --output $(wlr-randr | head -1 | cut -d' ' -f1) --transform {orientation_wl}")
|
| 45 |
+
CMD["high_contrast_on"] = K("key:shift+alt+printscreen", "sh:gsettings set org.gnome.desktop.a11y.interface high-contrast true 2>/dev/null || echo 'enable High Contrast in Accessibility'")
|
| 46 |
+
CMD["high_contrast_off"] = K("key:shift+alt+printscreen", "sh:gsettings set org.gnome.desktop.a11y.interface high-contrast false 2>/dev/null || echo 'disable High Contrast in Accessibility'")
|
| 47 |
+
CMD["set_wallpaper"] = K("ps:Add-Type -TypeDefinition 'using System.Runtime.InteropServices; public class W {{ [DllImport(\"user32.dll\")] public static extern int SystemParametersInfo(int a,int b,string c,int d); }}'; [W]::SystemParametersInfo(20,0,(Resolve-Path {path}),3)", "sh:pcmanfm --set-wallpaper {path} 2>/dev/null || gsettings set org.gnome.desktop.background picture-uri file://$(realpath {path})")
|
| 48 |
+
CMD["screenshot"] = K("ps:" + WIN_SCREENSHOT, "sh:grim ~/Pictures/shot_$(date +%s).png 2>/dev/null || scrot ~/Pictures/shot_$(date +%s).png; echo saved")
|
| 49 |
+
CMD["screen_record_start"] = K("key:win+alt+r", "sh:(wf-recorder -f ~/Videos/rec_$(date +%s).mp4 >/dev/null 2>&1 &) && echo recording")
|
| 50 |
+
CMD["screen_record_stop"] = K("key:win+alt+r", "sh:pkill -INT wf-recorder && echo stopped")
|
| 51 |
+
CMD["fullscreen"] = K("key:f11", "key:F11")
|
| 52 |
+
CMD["magnifier_on"] = K("key:win+plus", "sh:echo 'no magnifier on Pi OS; use zoom'")
|
| 53 |
+
CMD["magnifier_off"] = K("key:win+escape", "sh:echo 'no magnifier on Pi OS'")
|
| 54 |
+
CMD["narrator_on"] = K("key:win+ctrl+enter", "sh:orca & 2>/dev/null || echo 'install orca'")
|
| 55 |
+
CMD["narrator_off"] = K("key:win+ctrl+enter", "sh:pkill orca")
|
| 56 |
+
CMD["onscreen_keyboard"] = K("cmd:start osk", "sh:onboard & 2>/dev/null || matchbox-keyboard &")
|
| 57 |
+
# ------------------------------------------------------------------ power / session
|
| 58 |
+
CMD["shutdown"] = K("cmd:shutdown /s /t {seconds}", "sh:{sudo}shutdown -h +{minutes}")
|
| 59 |
+
CMD["restart"] = K("cmd:shutdown /r /t {seconds}", "sh:{sudo}shutdown -r +{minutes}")
|
| 60 |
+
CMD["cancel_shutdown"] = K("cmd:shutdown /a", "sh:{sudo}shutdown -c")
|
| 61 |
+
CMD["sleep"] = K("cmd:rundll32.exe powrprof.dll,SetSuspendState 0,1,0", "sh:{sudo}systemctl suspend")
|
| 62 |
+
CMD["hibernate"] = K("cmd:shutdown /h", "sh:{sudo}systemctl hibernate")
|
| 63 |
+
CMD["lock_screen"] = K("cmd:rundll32.exe user32.dll,LockWorkStation", "sh:loginctl lock-session 2>/dev/null || xdg-screensaver lock")
|
| 64 |
+
CMD["sign_out"] = K("cmd:shutdown /l", "sh:loginctl terminate-user $USER")
|
| 65 |
+
CMD["switch_user"] = K("cmd:tsdiscon", "sh:dm-tool switch-to-greeter 2>/dev/null || echo 'no display manager switch'")
|
| 66 |
+
CMD["battery_saver_on"] = K("cmd:powercfg /setactive a1841308-3541-4fab-bc81-f71556f20b4a", "sh:echo powersave | {sudo}tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor")
|
| 67 |
+
CMD["battery_saver_off"] = K("cmd:powercfg /setactive 381b4222-f694-41f0-9685-ff5bb260df2e", "sh:echo ondemand | {sudo}tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor")
|
| 68 |
+
CMD["get_battery"] = K("ps:Get-CimInstance Win32_Battery | Select-Object EstimatedChargeRemaining,BatteryStatus", "sh:cat /sys/class/power_supply/BAT*/capacity 2>/dev/null || echo 'no battery (mains powered)'")
|
| 69 |
+
CMD["power_mode"] = K("cmd:powercfg /setactive {power_guid}", "sh:echo {governor_for_mode} | {sudo}tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor")
|
| 70 |
+
CMD["set_cpu_governor"] = K(None, "sh:echo {governor} | {sudo}tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor")
|
| 71 |
+
CMD["get_cpu_governor"] = K("cmd:powercfg /getactivescheme", "sh:cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor")
|
| 72 |
+
# ------------------------------------------------------------------ network
|
| 73 |
+
CMD["wifi_on"] = K("cmd:netsh interface set interface Wi-Fi enabled", "sh:{sudo}nmcli radio wifi on")
|
| 74 |
+
CMD["wifi_off"] = K("cmd:netsh interface set interface Wi-Fi disabled", "sh:{sudo}nmcli radio wifi off")
|
| 75 |
+
CMD["bluetooth_on"] = K("ps:" + WIN_BT.replace("STATE", "On"), "sh:{sudo}rfkill unblock bluetooth; bluetoothctl power on")
|
| 76 |
+
CMD["bluetooth_off"] = K("ps:" + WIN_BT.replace("STATE", "Off"), "sh:bluetoothctl power off")
|
| 77 |
+
CMD["bluetooth_connect"] = K("cmd:start ms-settings:bluetooth", "sh:MAC=$(bluetoothctl devices | grep -i {device} | awk '{{print $2}}' | head -1); [ -n \"$MAC\" ] && bluetoothctl connect $MAC || echo 'device not paired'")
|
| 78 |
+
CMD["list_bluetooth_devices"] = K("ps:Get-PnpDevice -Class Bluetooth | Where-Object Status -eq OK | Select-Object FriendlyName", "sh:bluetoothctl devices; timeout 5 bluetoothctl scan on 2>/dev/null")
|
| 79 |
+
CMD["airplane_mode_on"] = K("cmd:start ms-settings:network-airplanemode", "sh:{sudo}rfkill block all")
|
| 80 |
+
CMD["airplane_mode_off"] = K("cmd:start ms-settings:network-airplanemode", "sh:{sudo}rfkill unblock all")
|
| 81 |
+
CMD["hotspot_on"] = K("cmd:start ms-settings:network-mobilehotspot", "sh:{sudo}nmcli dev wifi hotspot ssid {ssid}{pw_arg}")
|
| 82 |
+
CMD["hotspot_off"] = K("cmd:start ms-settings:network-mobilehotspot", "sh:{sudo}nmcli con down Hotspot")
|
| 83 |
+
CMD["connect_wifi"] = K('ps:$s={ssid}; $p={password}; $e=[Security.SecurityElement]::Escape($s); $known=(netsh wlan show profiles) -match (\':\\s*\'+[regex]::Escape($s)+\'\\s*$\'); if ($p -or -not $known) {{ if ($p) {{ $sec=\'<authEncryption><authentication>WPA2PSK</authentication><encryption>AES</encryption><useOneX>false</useOneX></authEncryption><sharedKey><keyType>passPhrase</keyType><protected>false</protected><keyMaterial>\'+[Security.SecurityElement]::Escape($p)+\'</keyMaterial></sharedKey>\' }} else {{ $sec=\'<authEncryption><authentication>open</authentication><encryption>none</encryption><useOneX>false</useOneX></authEncryption>\' }}; $x=\'<?xml version="1.0"?><WLANProfile xmlns="http://www.microsoft.com/networking/WLAN/profile/v1"><name>\'+$e+\'</name><SSIDConfig><SSID><name>\'+$e+\'</name></SSID></SSIDConfig><connectionType>ESS</connectionType><connectionMode>auto</connectionMode><MSM><security>\'+$sec+\'</security></MSM></WLANProfile>\'; $f=Join-Path $env:TEMP (\'wifi_\'+[guid]::NewGuid()+\'.xml\'); [IO.File]::WriteAllText($f,$x); netsh wlan add profile filename="$f" user=current; Remove-Item $f }}; netsh wlan connect name="$s" ssid="$s"', 'sh:{sudo}nmcli dev wifi connect {ssid}{pw_arg} || {sudo}nmcli con up id {ssid}')
|
| 84 |
+
CMD["disconnect_wifi"] = K("cmd:netsh wlan disconnect", "sh:{sudo}nmcli dev disconnect wlan0")
|
| 85 |
+
CMD["forget_wifi"] = K("cmd:netsh wlan delete profile name={ssid}", "sh:{sudo}nmcli con delete {ssid}")
|
| 86 |
+
CMD["show_wifi_password"] = K("cmd:netsh wlan show profile name={ssid} key=clear", "sh:{sudo}nmcli -s -g 802-11-wireless-security.psk con show {ssid}")
|
| 87 |
+
CMD["list_wifi"] = K("cmd:netsh wlan show networks mode=bssid", "sh:nmcli dev wifi rescan; nmcli dev wifi list")
|
| 88 |
+
CMD["get_wifi_signal"] = K("cmd:netsh wlan show interfaces", "sh:iw dev wlan0 link")
|
| 89 |
+
CMD["network_status"] = K("cmd:netsh interface show interface & ping -n 1 8.8.8.8", "sh:nmcli dev status; nmcli networking connectivity")
|
| 90 |
+
CMD["get_ip"] = K("cmd:ipconfig", "sh:hostname -I; ip -br a")
|
| 91 |
+
CMD["get_public_ip"] = K("ps:(Invoke-RestMethod https://api.ipify.org)", "sh:curl -s https://api.ipify.org; echo")
|
| 92 |
+
CMD["get_mac_address"] = K("cmd:getmac /v", "sh:ip -br link")
|
| 93 |
+
CMD["get_default_gateway"] = K("cmd:route print 0.0.0.0", "sh:ip r")
|
| 94 |
+
CMD["list_arp"] = K("cmd:arp -a", "sh:ip neigh")
|
| 95 |
+
CMD["list_connections"] = K("cmd:netstat -an", "sh:ss -tun")
|
| 96 |
+
CMD["list_open_ports"] = K("cmd:netstat -ano | findstr LISTENING", "sh:{sudo}ss -tulnp")
|
| 97 |
+
CMD["ping"] = K("cmd:ping -n 3 {host}", "sh:ping -c 3 -W 1 -- {host}")
|
| 98 |
+
CMD["traceroute"] = K("cmd:tracert -d {host}", "sh:mtr -r -c 10 {host} 2>/dev/null || traceroute {host}")
|
| 99 |
+
CMD["dns_lookup"] = K("cmd:nslookup {host}", "sh:dig +short {host} || nslookup {host}")
|
| 100 |
+
CMD["flush_dns"] = K("cmd:ipconfig /flushdns", "sh:{sudo}resolvectl flush-caches 2>/dev/null || {sudo}systemd-resolve --flush-caches")
|
| 101 |
+
CMD["speed_test"] = K("ps:Write-Output 'requires speedtest-cli'; speedtest-cli --simple", "sh:speedtest-cli --simple")
|
| 102 |
+
CMD["check_port"] = K("ps:Test-NetConnection {host} -Port {port}", "sh:nc -zv -w 3 {host} {port}")
|
| 103 |
+
CMD["scan_lan"] = K("cmd:arp -a", "sh:nmap -sn $(ip -o -f inet addr show | awk '/wlan0|eth0/ {{print $4; exit}}')")
|
| 104 |
+
CMD["scan_ports"] = K("ps:1..1024 | ForEach-Object {{ if((Test-NetConnection {host} -Port $_ -InformationLevel Quiet)){{$_}} }}", "sh:nmap -p 1-1024 {host}")
|
| 105 |
+
CMD["discover_devices"] = K("cmd:arp -a", "sh:avahi-browse -art | grep -E 'hostname|address' | sort -u")
|
| 106 |
+
CMD["get_ethernet_status"] = K("cmd:netsh interface show interface", "sh:ethtool eth0 | grep -E 'Speed|Duplex|Link'")
|
| 107 |
+
CMD["get_bandwidth_usage"] = K("ps:Get-NetAdapterStatistics | Select-Object Name,ReceivedBytes,SentBytes", "sh:vnstat 2>/dev/null || {sudo}iftop -t -s 5 -i wlan0")
|
| 108 |
+
CMD["get_radio_status"] = K("cmd:netsh interface show interface", "sh:rfkill list")
|
| 109 |
+
CMD["run_network_benchmark"] = K("ps:iperf3 -c {host} -t 10", "sh:iperf3 -c {host} -t 10")
|
| 110 |
+
CMD["packet_capture"] = K("ps:pktmon start --capture; Start-Sleep 10; pktmon stop", "sh:{sudo}timeout 15 tcpdump -i {iface} -c 100")
|
| 111 |
+
CMD["vpn_connect"] = K("cmd:rasdial", "sh:{sudo}nmcli con up $(nmcli -t -f NAME,TYPE con show | grep vpn | cut -d: -f1 | head -1)")
|
| 112 |
+
CMD["vpn_disconnect"] = K("cmd:rasdial /disconnect", "sh:{sudo}nmcli con down $(nmcli -t -f NAME,TYPE con show --active | grep vpn | cut -d: -f1 | head -1)")
|
| 113 |
+
CMD["firewall_on"] = K("cmd:netsh advfirewall set allprofiles state on", "sh:{sudo}ufw --force enable")
|
| 114 |
+
CMD["firewall_off"] = K("cmd:netsh advfirewall set allprofiles state off", "sh:{sudo}ufw disable")
|
| 115 |
+
CMD["firewall_status"] = K("cmd:netsh advfirewall show allprofiles state", "sh:{sudo}ufw status verbose")
|
| 116 |
+
CMD["firewall_allow"] = K("cmd:netsh advfirewall firewall add rule name=allow_{port} dir=in action=allow protocol=TCP localport={port}", "sh:{sudo}ufw allow {port}")
|
| 117 |
+
CMD["firewall_deny"] = K("cmd:netsh advfirewall firewall add rule name=deny_{port} dir=in action=block protocol=TCP localport={port}", "sh:{sudo}ufw deny {port}")
|
| 118 |
+
CMD["list_banned_ips"] = K(None, "sh:{sudo}fail2ban-client status sshd")
|
| 119 |
+
CMD["unban_ip"] = K(None, "sh:{sudo}fail2ban-client set sshd unbanip {ip}")
|
| 120 |
+
CMD["remote_shell"] = K("cmd:start ssh {user}@{host}", "sh:x-terminal-emulator -e ssh {user}@{host} &")
|
| 121 |
+
CMD["copy_ssh_key"] = K("ps:type $env:USERPROFILE\\.ssh\\id_ed25519.pub | ssh {host} 'cat >> .ssh/authorized_keys'", "sh:ssh-copy-id {host}")
|
| 122 |
+
CMD["port_forward"] = K("cmd:start ssh -L {port}:localhost:{port} {host}", "sh:(ssh -N -L {port}:localhost:{port} {host} &) && echo 'tunnel up'")
|
| 123 |
+
CMD["transfer_files"] = K("cmd:scp -r {file} {host}:~/", "sh:rsync -avz --progress {file} {host}:~/ 2>/dev/null || scp -r {file} {host}:~/")
|
| 124 |
+
CMD["download_file"] = K("ps:Invoke-WebRequest {url} -OutFile (Split-Path -Leaf {url})", "sh:cd ~/Downloads 2>/dev/null; wget -c {url}")
|
| 125 |
+
# ------------------------------------------------------------------ apps / windows / browser / keys
|
| 126 |
+
CMD["open_app"] = K("cmd:{app_win}", "sh:{app_pi}")
|
| 127 |
+
CMD["close_app"] = K("cmd:taskkill /im {proc_win}", "sh:pkill -f {proc_pi}")
|
| 128 |
+
CMD["switch_to_app"] = K("ps:(New-Object -ComObject WScript.Shell).AppActivate({app})", "sh:wmctrl -a {app} 2>/dev/null || xdotool search --name {app} windowactivate")
|
| 129 |
+
CMD["uninstall_app"] = K("cmd:winget uninstall {app}", "sh:{sudo}apt remove -y {app}")
|
| 130 |
+
CMD["list_installed_apps"] = K("cmd:winget list", "sh:dpkg-query -W -f='${{Package}}\\n' | head -200")
|
| 131 |
+
CMD["minimize_window"] = K("key:win+down", "key:super+h")
|
| 132 |
+
CMD["maximize_window"] = K("key:win+up", "key:super+Up")
|
| 133 |
+
CMD["close_window"] = K("key:alt+f4", "key:alt+F4")
|
| 134 |
+
CMD["show_desktop"] = K("key:win+d", "key:super+d")
|
| 135 |
+
CMD["switch_window"] = K("key:alt+tab", "key:alt+Tab")
|
| 136 |
+
CMD["snap_left"] = K("key:win+left", "key:super+Left")
|
| 137 |
+
CMD["snap_right"] = K("key:win+right", "key:super+Right")
|
| 138 |
+
CMD["task_view"] = K("key:win+tab", "key:super+Tab")
|
| 139 |
+
CMD["new_virtual_desktop"] = K("key:win+ctrl+d", "sh:echo 'no virtual desktops on Pi OS Wayfire'")
|
| 140 |
+
CMD["open_site"] = K("open:{site_url}", "open:{site_url}")
|
| 141 |
+
CMD["open_url"] = K("open:{url_full}", "open:{url_full}")
|
| 142 |
+
CMD["web_search"] = K("open:https://www.google.com/search?q={query_url}", "open:https://www.google.com/search?q={query_url}")
|
| 143 |
+
CMD["youtube_search"] = K("open:https://www.youtube.com/results?search_query={query_url}", "open:https://www.youtube.com/results?search_query={query_url}")
|
| 144 |
+
CMD["web_login"] = K("py:web_login", "py:web_login")
|
| 145 |
+
CMD["new_tab"] = K("key:ctrl+t", "key:ctrl+t"); CMD["close_tab"] = K("key:ctrl+w", "key:ctrl+w"); CMD["reopen_tab"] = K("key:ctrl+shift+t", "key:ctrl+shift+t")
|
| 146 |
+
CMD["next_tab"] = K("key:ctrl+tab", "key:ctrl+Tab"); CMD["prev_tab"] = K("key:ctrl+shift+tab", "key:ctrl+shift+Tab")
|
| 147 |
+
CMD["refresh"] = K("key:f5", "key:F5"); CMD["browser_back"] = K("key:alt+left", "key:alt+Left"); CMD["browser_forward"] = K("key:alt+right", "key:alt+Right")
|
| 148 |
+
CMD["zoom_in"] = K("key:ctrl+plus", "key:ctrl+plus"); CMD["zoom_out"] = K("key:ctrl+minus", "key:ctrl+minus"); CMD["zoom_reset"] = K("key:ctrl+0", "key:ctrl+0")
|
| 149 |
+
CMD["incognito_window"] = K("cmd:start msedge --inprivate", "sh:chromium-browser --incognito &")
|
| 150 |
+
CMD["bookmark_page"] = K("key:ctrl+d", "key:ctrl+d"); CMD["find_in_page"] = K("py:find_in_page", "py:find_in_page")
|
| 151 |
+
CMD["print_page"] = K("key:ctrl+p", "key:ctrl+p"); CMD["scroll_down"] = K("key:pagedown", "key:Page_Down"); CMD["scroll_up"] = K("key:pageup", "key:Page_Up")
|
| 152 |
+
CMD["media_play"] = K("key:media_play_pause", "sh:playerctl play 2>/dev/null || xdotool key XF86AudioPlay")
|
| 153 |
+
CMD["media_pause"] = K("key:media_play_pause", "sh:playerctl pause 2>/dev/null || xdotool key XF86AudioPause")
|
| 154 |
+
CMD["media_play_pause"] = K("key:media_play_pause", "sh:playerctl play-pause 2>/dev/null || xdotool key XF86AudioPlay")
|
| 155 |
+
CMD["media_next"] = K("key:media_next", "sh:playerctl next 2>/dev/null || xdotool key XF86AudioNext")
|
| 156 |
+
CMD["media_prev"] = K("key:media_prev", "sh:playerctl previous 2>/dev/null || xdotool key XF86AudioPrev")
|
| 157 |
+
CMD["copy"] = K("key:ctrl+c", "key:ctrl+c"); CMD["paste"] = K("key:ctrl+v", "key:ctrl+v"); CMD["cut"] = K("key:ctrl+x", "key:ctrl+x")
|
| 158 |
+
CMD["undo"] = K("key:ctrl+z", "key:ctrl+z"); CMD["redo"] = K("key:ctrl+y", "key:ctrl+y"); CMD["select_all"] = K("key:ctrl+a", "key:ctrl+a"); CMD["save_file"] = K("key:ctrl+s", "key:ctrl+s")
|
| 159 |
+
CMD["type_text"] = K("ps:Add-Type -AssemblyName System.Windows.Forms; [System.Windows.Forms.SendKeys]::SendWait({text_sendkeys})", "sh:xdotool type --delay 20 {text} 2>/dev/null || wtype {text}")
|
| 160 |
+
CMD["press_key"] = K("key:{key}", "key:{key_x}")
|
| 161 |
+
CMD["emoji_panel"] = K("key:win+period", "sh:echo 'no emoji panel on Pi OS'")
|
| 162 |
+
CMD["switch_input_language"] = K("key:win+space", "sh:setxkbmap -query")
|
| 163 |
+
CMD["clipboard_history"] = K("key:win+v", "sh:echo 'install clipman / copyq for clipboard history'")
|
| 164 |
+
CMD["repeat_last"] = K("py:repeat_last", "py:repeat_last")
|
| 165 |
+
CMD["help"] = K("py:help", "py:help")
|
| 166 |
+
CMD["unknown"] = K("py:noop", "py:noop")
|
| 167 |
+
CMD["clarify"] = K("py:clarify", "py:clarify")
|
| 168 |
+
# ------------------------------------------------------------------ files
|
| 169 |
+
CMD["open_folder"] = K("cmd:explorer {folder_win}", "sh:xdg-open {folder_pi} &")
|
| 170 |
+
CMD["open_file"] = K("cmd:start \"\" {path}", "sh:xdg-open {path} &")
|
| 171 |
+
CMD["create_folder"] = K("ps:New-Item -ItemType Directory -Force -Path {path} | Out-Null; 'created'", "sh:mkdir -p -- {path} && echo created")
|
| 172 |
+
CMD["create_file"] = K("ps:New-Item -ItemType File -Force -Path {path} | Out-Null; 'created'", "sh:mkdir -p \"$(dirname {path})\" && touch -- {path} && echo created")
|
| 173 |
+
CMD["delete_file"] = K("ps:Remove-Item -LiteralPath {path} -Confirm:$false", "sh:rm -f -- {path} && echo deleted")
|
| 174 |
+
CMD["read_file"] = K("ps:Get-Content -LiteralPath {path} -TotalCount 200", "sh:head -n 200 -- {path}")
|
| 175 |
+
CMD["hash_file"] = K("ps:(Get-FileHash -LiteralPath {path} -Algorithm SHA256).Hash", "sh:sha256sum -- {path}")
|
| 176 |
+
CMD["list_files"] = K("ps:Get-ChildItem -LiteralPath {path} | Select-Object Mode,Length,Name", "sh:ls -la -- {path}")
|
| 177 |
+
CMD["copy_file"] = K("ps:Copy-Item -LiteralPath {src} -Destination {dst}; 'copied'", "sh:cp -r -- {src} {dst} && echo copied")
|
| 178 |
+
CMD["move_file"] = K("ps:Move-Item -LiteralPath {src} -Destination {dst}; 'moved'", "sh:mv -- {src} {dst} && echo moved")
|
| 179 |
+
CMD["rename_file"] = K("ps:Rename-Item -LiteralPath {src} -NewName {dst}; 'renamed'", "sh:mv -- {src} {dst} && echo renamed")
|
| 180 |
+
CMD["search_files"] = K("ps:Get-ChildItem $env:USERPROFILE -Recurse -Filter *{query}* -ErrorAction SilentlyContinue | Select-Object -First 50 FullName", "sh:find ~ -iname '*'{query}'*' 2>/dev/null | head -50")
|
| 181 |
+
CMD["search_in_files"] = K("ps:Get-ChildItem $env:USERPROFILE -Recurse -File -ErrorAction SilentlyContinue | Select-String -Pattern {query} -List | Select-Object -First 50 Path", "sh:grep -rIl -- {query} ~ 2>/dev/null | head -50")
|
| 182 |
+
CMD["recent_files"] = K("cmd:explorer shell:recent", "sh:ls -lt ~ ~/Documents ~/Downloads 2>/dev/null | head -30")
|
| 183 |
+
CMD["compress_file"] = K("ps:Compress-Archive -LiteralPath {path} -DestinationPath ({path}+'.zip') -Force; 'zipped'", "sh:zip -r -- {path}.zip {path} && echo zipped")
|
| 184 |
+
CMD["extract_archive"] = K("ps:Expand-Archive -LiteralPath {path} -DestinationPath . -Force; 'extracted'", "sh:case {path} in *.zip) unzip -o -- {path};; *.tar.gz|*.tgz) tar -xzvf {path};; *) 7z x -- {path};; esac")
|
| 185 |
+
CMD["open_recycle_bin"] = K("cmd:explorer shell:RecycleBinFolder", "sh:xdg-open trash:/// &")
|
| 186 |
+
CMD["empty_recycle_bin"] = K("ps:Clear-RecycleBin -Force", "sh:rm -rf ~/.local/share/Trash/files/* ~/.local/share/Trash/info/* && echo emptied")
|
| 187 |
+
CMD["clear_temp_files"] = K("ps:Remove-Item $env:TEMP\\* -Recurse -Force -ErrorAction SilentlyContinue; 'temp cleared'", "sh:{sudo}apt clean; rm -rf ~/.cache/thumbnails/*; echo cleared")
|
| 188 |
+
CMD["get_folder_sizes"] = K("ps:Get-ChildItem $env:USERPROFILE -Directory | ForEach-Object {{ [pscustomobject]@{{Folder=$_.Name; MB=[int]((Get-ChildItem $_.FullName -Recurse -File -ErrorAction SilentlyContinue | Measure-Object Length -Sum).Sum/1MB)}} }} | Sort-Object MB -Descending", "sh:du -h --max-depth=1 ~ 2>/dev/null | sort -h | tail -20")
|
| 189 |
+
CMD["create_symlink"] = K("cmd:mklink /D {link} {path}", "sh:ln -s -- {path} {link} && echo linked")
|
| 190 |
+
CMD["set_permissions"] = K("cmd:icacls {path} /grant %USERNAME%:F", "sh:chmod +x -- {path} && ls -l -- {path}")
|
| 191 |
+
CMD["set_owner"] = K("cmd:icacls {path} /setowner {user}", "sh:{sudo}chown -R {user}:{user} -- {path}")
|
| 192 |
+
CMD["print_file"] = K("ps:Start-Process -FilePath {path} -Verb Print", "sh:lp -- {path}")
|
| 193 |
+
CMD["list_printers"] = K("ps:Get-Printer | Select-Object Name,DriverName,PortName", "sh:lpstat -p -d")
|
| 194 |
+
CMD["set_default_printer"] = K("ps:(Get-CimInstance Win32_Printer | Where-Object Name -match {name}) | Invoke-CimMethod -MethodName SetDefaultPrinter", "sh:lpadmin -d {name}")
|
| 195 |
+
# ------------------------------------------------------------------ system info
|
| 196 |
+
CMD["get_system_info"] = K("cmd:systeminfo | findstr /B /C:\"OS Name\" /C:\"OS Version\" /C:\"System Model\" /C:\"Processor\" /C:\"Total Physical\"", "sh:cat /proc/device-tree/model; echo; uname -a; grep PRETTY /etc/os-release; lscpu | grep -E 'Model name|CPU\\(s\\)'; free -h | head -2")
|
| 197 |
+
CMD["get_kernel_version"] = K("cmd:ver", "sh:uname -r; uname -m")
|
| 198 |
+
CMD["get_hostname"] = K("cmd:hostname", "sh:hostname")
|
| 199 |
+
CMD["get_current_user"] = K("cmd:whoami", "sh:whoami; id")
|
| 200 |
+
CMD["list_logged_in_users"] = K("cmd:query user", "sh:w")
|
| 201 |
+
CMD["get_time"] = K("cmd:echo %time%", "sh:date +%T")
|
| 202 |
+
CMD["get_date"] = K("cmd:echo %date%", "sh:date '+%A %d %B %Y'")
|
| 203 |
+
CMD["get_uptime"] = K("ps:(Get-Date) - (Get-CimInstance Win32_OperatingSystem).LastBootUpTime", "sh:uptime -p")
|
| 204 |
+
CMD["get_load_average"] = K("ps:Get-CimInstance Win32_Processor | Select-Object LoadPercentage", "sh:cat /proc/loadavg")
|
| 205 |
+
CMD["get_cpu_usage"] = K("ps:Get-CimInstance Win32_Processor | Select-Object Name,LoadPercentage", "sh:top -bn1 | head -5")
|
| 206 |
+
CMD["get_per_core_usage"] = K("ps:Get-Counter '\\Processor(*)\\% Processor Time' | Select-Object -Expand CounterSamples | Select-Object InstanceName,CookedValue", "sh:mpstat -P ALL 1 1 2>/dev/null || cat /proc/stat | head -6")
|
| 207 |
+
CMD["get_ram_usage"] = K("ps:Get-CimInstance Win32_OperatingSystem | Select-Object FreePhysicalMemory,TotalVisibleMemorySize", "sh:free -h")
|
| 208 |
+
CMD["get_swap_usage"] = K("ps:Get-CimInstance Win32_PageFileUsage | Select-Object Name,AllocatedBaseSize,CurrentUsage", "sh:swapon --show; free -h | grep -i swap")
|
| 209 |
+
CMD["get_gpu_memory"] = K("ps:Get-CimInstance Win32_VideoController | Select-Object Name,AdapterRAM", "sh:vcgencmd get_mem arm; vcgencmd get_mem gpu")
|
| 210 |
+
CMD["get_gpu_usage"] = K("cmd:nvidia-smi 2>nul || echo use Task Manager > Performance > GPU", "sh:cat /sys/kernel/debug/dri/*/gpu_usage 2>/dev/null || vcgencmd measure_clock v3d")
|
| 211 |
+
CMD["get_disk_space"] = K("ps:Get-PSDrive -PSProvider FileSystem | Select-Object Name,@{{n='UsedGB';e={{[int]($_.Used/1GB)}}}},@{{n='FreeGB';e={{[int]($_.Free/1GB)}}}}", "sh:df -h / /boot/firmware 2>/dev/null || df -h")
|
| 212 |
+
CMD["list_disks"] = K("ps:Get-Disk | Select-Object Number,FriendlyName,Size,HealthStatus", "sh:lsblk -o NAME,SIZE,TYPE,FSTYPE,MOUNTPOINT,MODEL")
|
| 213 |
+
CMD["list_partitions"] = K("ps:Get-Partition | Select-Object DiskNumber,PartitionNumber,DriveLetter,Size,Type", "sh:lsblk -f")
|
| 214 |
+
CMD["get_disk_health"] = K("ps:Get-PhysicalDisk | Select-Object FriendlyName,HealthStatus,OperationalStatus,Size", "sh:{sudo}smartctl -H /dev/mmcblk0 2>/dev/null; {sudo}smartctl -a /dev/nvme0 2>/dev/null | head -40 || echo 'install smartmontools'")
|
| 215 |
+
CMD["get_disk_io"] = K("ps:Get-Counter '\\PhysicalDisk(_Total)\\Disk Bytes/sec'", "sh:{sudo}iotop -b -o -n 3 2>/dev/null || cat /proc/diskstats")
|
| 216 |
+
CMD["disk_read_speed"] = K("ps:winsat disk -ran -read -drive c", "sh:{sudo}hdparm -tT /dev/mmcblk0 2>/dev/null || {sudo}hdparm -tT /dev/nvme0n1")
|
| 217 |
+
CMD["disk_write_speed"] = K("ps:winsat disk -seq -write -drive c", "sh:dd if=/dev/zero of=~/test.img bs=1M count=256 conv=fsync oflag=direct 2>&1 | tail -1; rm -f ~/test.img")
|
| 218 |
+
CMD["get_sdcard_info"] = K(None, "sh:echo -n 'cid='; cat /sys/block/mmcblk0/device/cid; echo -n 'name='; cat /sys/block/mmcblk0/device/name; echo -n 'oemid='; cat /sys/block/mmcblk0/device/oemid")
|
| 219 |
+
CMD["list_processes"] = K("cmd:tasklist /FO TABLE", "sh:ps -eo pid,user,%cpu,%mem,comm --sort=-%cpu | head -30")
|
| 220 |
+
CMD["kill_process"] = K("cmd:taskkill /PID {pid} /F", "sh:kill -15 {pid} && echo 'sent SIGTERM'")
|
| 221 |
+
CMD["set_process_priority"] = K("ps:(Get-Process -Id {pid}).PriorityClass='BelowNormal'", "sh:{sudo}renice -n {priority_num} -p {pid}")
|
| 222 |
+
CMD["set_cpu_affinity"] = K("ps:(Get-Process -Id {pid}).ProcessorAffinity={cores}", "sh:taskset -pc {cores} {pid}")
|
| 223 |
+
CMD["list_open_files"] = K("ps:Get-Process | Where-Object {{$_.Modules.FileName -like '*{device}*'}} | Select-Object Id,ProcessName", "sh:{sudo}lsof {device} 2>/dev/null || {sudo}fuser -v {device}")
|
| 224 |
+
CMD["show_command_history"] = K("cmd:doskey /history", "sh:tail -40 ~/.bash_history")
|
| 225 |
+
CMD["find_command"] = K("cmd:where {name}", "sh:command -v {name} && {name} --version 2>/dev/null | head -1 || echo 'not installed'")
|
| 226 |
+
CMD["list_services"] = K("cmd:sc query type=service state=all", "sh:systemctl list-units --type=service --state=running")
|
| 227 |
+
CMD["list_failed_services"] = K("cmd:sc query type=service state=inactive", "sh:systemctl --failed")
|
| 228 |
+
CMD["service_status"] = K("cmd:sc query {svc_win}", "sh:systemctl status {svc_unit} --no-pager | head -12")
|
| 229 |
+
CMD["service_start"] = K("cmd:net start {svc_win}", "sh:{sudo}systemctl start {svc_unit} && systemctl is-active {svc_unit}")
|
| 230 |
+
CMD["service_stop"] = K("cmd:net stop {svc_win}", "sh:{sudo}systemctl stop {svc_unit} && systemctl is-active {svc_unit}")
|
| 231 |
+
CMD["service_restart"] = K("cmd:net stop {svc_win} & net start {svc_win}", "sh:{sudo}systemctl restart {svc_unit} && systemctl is-active {svc_unit}")
|
| 232 |
+
CMD["service_enable"] = K("cmd:sc config {svc_win} start=auto", "sh:{sudo}systemctl enable --now {svc_unit}")
|
| 233 |
+
CMD["service_disable"] = K("cmd:sc config {svc_win} start=disabled", "sh:{sudo}systemctl disable --now {svc_unit}")
|
| 234 |
+
CMD["get_service_logs"] = K("ps:Get-EventLog -LogName System -Newest 30 | Where-Object Source -match {service}", "sh:journalctl -u {svc_unit} -n 40 --no-pager")
|
| 235 |
+
CMD["get_kernel_log"] = K("ps:Get-EventLog -LogName System -Newest 40", "sh:{sudo}dmesg | tail -40")
|
| 236 |
+
CMD["get_boot_logs"] = K("ps:Get-WinEvent -FilterHashtable @{{LogName='System'}} -MaxEvents 50", "sh:journalctl -b -1 -p err --no-pager | tail -40")
|
| 237 |
+
CMD["get_boot_time"] = K("ps:(Get-CimInstance Win32_OperatingSystem).LastBootUpTime", "sh:systemd-analyze; systemd-analyze blame | head -10")
|
| 238 |
+
CMD["get_reboot_history"] = K("ps:Get-WinEvent -FilterHashtable @{{LogName='System';Id=1074,6008}} -MaxEvents 15 | Select-Object TimeCreated,Id", "sh:last -x | head -15")
|
| 239 |
+
CMD["get_diagnostics"] = K("cmd:msinfo32 /report %USERPROFILE%\\diag.txt & echo saved %USERPROFILE%\\diag.txt", "sh:raspinfo > ~/raspinfo.txt && echo 'saved ~/raspinfo.txt'")
|
| 240 |
+
CMD["get_boot_config"] = K("cmd:bcdedit /enum", "sh:vcgencmd get_config int; grep -v '^#' /boot/firmware/config.txt | grep .")
|
| 241 |
+
CMD["get_time_sync"] = K("cmd:w32tm /query /status", "sh:timedatectl")
|
| 242 |
+
CMD["sync_time"] = K("cmd:w32tm /resync", "sh:{sudo}timedatectl set-ntp true && timedatectl timesync-status")
|
| 243 |
+
CMD["set_timezone"] = K("cmd:tzutil /s {tz_win}", "sh:{sudo}timedatectl set-timezone {tz}")
|
| 244 |
+
CMD["set_locale"] = K("ps:Set-WinSystemLocale {locale}", "sh:{sudo}raspi-config nonint do_change_locale {locale}")
|
| 245 |
+
CMD["set_keyboard_layout"] = K("ps:Set-WinUserLanguageList {layout} -Force", "sh:{sudo}raspi-config nonint do_configure_keyboard {layout}")
|
| 246 |
+
CMD["get_cpu_pressure"] = K(None, "sh:cat /proc/pressure/cpu"); CMD["get_memory_pressure"] = K(None, "sh:cat /proc/pressure/memory")
|
| 247 |
+
CMD["get_slab_usage"] = K(None, "sh:{sudo}slabtop -o | head -20"); CMD["drop_caches"] = K(None, "sh:sync; echo 3 | {sudo}tee /proc/sys/vm/drop_caches")
|
| 248 |
+
CMD["get_interrupts"] = K(None, "sh:head -30 /proc/interrupts"); CMD["list_kernel_modules"] = K("cmd:driverquery", "sh:lsmod | head -40")
|
| 249 |
+
CMD["monitor_hotplug"] = K(None, "sh:timeout 20 udevadm monitor --udev"); CMD["monitor_health"] = K(None, "sh:for i in 1 2 3 4 5; do vcgencmd measure_temp; vcgencmd measure_clock arm; vcgencmd get_throttled; sleep 1; done")
|
| 250 |
+
CMD["check_updates"] = K("cmd:winget upgrade", "sh:{sudo}apt update >/dev/null 2>&1; apt list --upgradable 2>/dev/null")
|
| 251 |
+
CMD["install_updates"] = K("cmd:winget upgrade --all", "sh:{sudo}apt update && {sudo}apt full-upgrade -y")
|
| 252 |
+
CMD["update_packages"] = K("cmd:winget source update", "sh:{sudo}apt update")
|
| 253 |
+
CMD["install_package"] = K("cmd:winget install --accept-package-agreements --accept-source-agreements {name}", "sh:{sudo}apt install -y {name}")
|
| 254 |
+
CMD["uninstall_package"] = K("cmd:winget uninstall {name}", "sh:{sudo}apt remove -y {name}")
|
| 255 |
+
CMD["search_package"] = K("cmd:winget search {name}", "sh:apt search {name} 2>/dev/null | head -20")
|
| 256 |
+
CMD["list_packages"] = K("cmd:winget list", "sh:dpkg -l | wc -l; dpkg -l | tail -30")
|
| 257 |
+
CMD["repair_packages"] = K("cmd:sfc /scannow", "sh:{sudo}dpkg --configure -a; {sudo}apt install -f -y")
|
| 258 |
+
CMD["install_python_package"] = K("cmd:pip install {name}", "sh:pip install {name} 2>/dev/null || pip install --break-system-packages {name}")
|
| 259 |
+
CMD["create_virtualenv"] = K("cmd:python -m venv {path}", "sh:python3 -m venv --system-site-packages {path} && echo created")
|
| 260 |
+
CMD["enable_auto_updates"] = K("ps:Set-ItemProperty HKLM:\\SOFTWARE\\Policies\\Microsoft\\Windows\\WindowsUpdate\\AU NoAutoUpdate 0", "sh:{sudo}apt install -y unattended-upgrades && {sudo}dpkg-reconfigure -plow unattended-upgrades")
|
| 261 |
+
CMD["disable_auto_updates"] = K("ps:Set-ItemProperty HKLM:\\SOFTWARE\\Policies\\Microsoft\\Windows\\WindowsUpdate\\AU NoAutoUpdate 1", "sh:{sudo}systemctl disable --now unattended-upgrades")
|
| 262 |
+
CMD["antivirus_scan"] = K("ps:Start-MpScan -ScanType QuickScan", "sh:clamscan -r ~ 2>/dev/null || echo 'install clamav'")
|
| 263 |
+
CMD["open_settings"] = K("cmd:start {page_uri}", "sh:x-terminal-emulator -e sudo raspi-config &")
|
| 264 |
+
CMD["open_config_tool"] = K("cmd:start ms-settings:", "sh:x-terminal-emulator -e sudo raspi-config &")
|
| 265 |
+
CMD["open_notification_center"] = K("key:win+n", "sh:echo 'no notification center on Pi OS'"); CMD["clear_notifications"] = K("cmd:start ms-settings:notifications", "sh:echo 'no notification center on Pi OS'")
|
| 266 |
+
CMD["dnd_on"] = K("cmd:start ms-settings:quiethours", "sh:echo 'no DND on Pi OS'"); CMD["dnd_off"] = K("cmd:start ms-settings:quiethours", "sh:echo 'no DND on Pi OS'")
|
| 267 |
+
CMD["set_mouse_speed"] = K("cmd:start ms-settings:mousetouchpad", "sh:echo 'set pointer speed in Mouse and Touchpad settings'")
|
| 268 |
+
CMD["touchpad_on"] = K("cmd:start ms-settings:devices-touchpad", "sh:xinput enable $(xinput list | grep -i touchpad | grep -o 'id=[0-9]*' | cut -d= -f2)")
|
| 269 |
+
CMD["touchpad_off"] = K("cmd:start ms-settings:devices-touchpad", "sh:xinput disable $(xinput list | grep -i touchpad | grep -o 'id=[0-9]*' | cut -d= -f2)")
|
| 270 |
+
CMD["set_timer"] = K("py:timer", "py:timer"); CMD["cancel_timer"] = K("py:cancel_timer", "py:cancel_timer")
|
| 271 |
+
CMD["set_alarm"] = K("py:alarm", "py:alarm"); CMD["cancel_alarm"] = K("py:cancel_alarm", "py:cancel_alarm")
|
| 272 |
+
CMD["set_reminder"] = K("py:reminder", "py:reminder"); CMD["stopwatch_start"] = K("py:stopwatch_start", "py:stopwatch_start"); CMD["stopwatch_stop"] = K("py:stopwatch_stop", "py:stopwatch_stop")
|
| 273 |
+
CMD["calculate"] = K("py:calculate", "py:calculate")
|
| 274 |
+
CMD["create_calendar_event"] = K("cmd:start outlookcal:", "sh:echo 'event: {title} at {time}' >> ~/calendar.txt && echo added")
|
| 275 |
+
CMD["send_message"] = K("py:send_message", "py:send_message"); CMD["send_email"] = K("open:mailto:{to}?subject={subject_url}&body={text_url}", "open:mailto:{to}?subject={subject_url}&body={text_url}")
|
| 276 |
+
CMD["camera_photo"] = K("cmd:start microsoft.windows.camera:", "sh:rpicam-still -o ~/photo_$(date +%s).jpg && echo saved")
|
| 277 |
+
CMD["camera_video"] = K("cmd:start microsoft.windows.camera:", "sh:rpicam-vid -t {seconds}000 -o ~/video_$(date +%s).h264 && echo saved")
|
| 278 |
+
CMD["list_cameras"] = K("ps:Get-PnpDevice -Class Camera,Image | Select-Object FriendlyName,Status", "sh:rpicam-hello --list-cameras 2>/dev/null; v4l2-ctl --list-devices 2>/dev/null")
|
| 279 |
+
CMD["list_usb"] = K("ps:Get-PnpDevice -PresentOnly | Where-Object InstanceId -like 'USB*' | Select-Object FriendlyName", "sh:lsusb")
|
| 280 |
+
CMD["list_pci"] = K("ps:Get-PnpDevice -PresentOnly | Where-Object InstanceId -like 'PCI*' | Select-Object FriendlyName", "sh:lspci")
|
| 281 |
+
CMD["list_serial_ports"] = K("ps:[System.IO.Ports.SerialPort]::GetPortNames()", "sh:ls -l /dev/tty{{AMA,USB,ACM,S}}* 2>/dev/null")
|
| 282 |
+
CMD["open_serial_terminal"] = K("cmd:start putty -serial {serial_port} -sercfg {baud}", "sh:x-terminal-emulator -e screen {serial_port} {baud} &")
|
| 283 |
+
CMD["list_spi_devices"] = K(None, "sh:ls -l /dev/spidev* 2>/dev/null || echo 'SPI not enabled'"); CMD["list_1wire_sensors"] = K(None, "sh:ls /sys/bus/w1/devices/ 2>/dev/null; cat /sys/bus/w1/devices/28-*/temperature 2>/dev/null")
|
| 284 |
+
CMD["load_overlay"] = K(None, "sh:{sudo}dtoverlay {overlay} && dtoverlay -l")
|
| 285 |
+
CMD["get_temperature"] = K("ps:Get-CimInstance -Namespace root/WMI -ClassName MSAcpi_ThermalZoneTemperature | Select-Object @{{n='C';e={{($_.CurrentTemperature-2732)/10}}}}", "sh:vcgencmd measure_temp")
|
| 286 |
+
CMD["get_throttle_status"] = K(None, "sh:vcgencmd get_throttled"); CMD["get_cpu_clock"] = K("ps:(Get-CimInstance Win32_Processor).CurrentClockSpeed", "sh:vcgencmd measure_clock arm")
|
| 287 |
+
CMD["get_voltage"] = K(None, "sh:vcgencmd measure_volts core"); CMD["get_power_draw"] = K("ps:powercfg /batteryreport", "sh:vcgencmd pmic_read_adc")
|
| 288 |
+
CMD["get_fan_speed"] = K(None, "sh:cat /sys/devices/platform/cooling_fan/hwmon/*/fan1_input 2>/dev/null || echo 'no fan'")
|
| 289 |
+
CMD["get_firmware_version"] = K("ps:(Get-CimInstance Win32_BIOS).SMBIOSBIOSVersion", "sh:vcgencmd version; rpi-eeprom-update 2>/dev/null | head -3")
|
| 290 |
+
CMD["get_firmware_log"] = K(None, "sh:{sudo}vclog --msg | tail -30"); CMD["flash_firmware"] = K("cmd:start ms-settings:windowsupdate", "sh:{sudo}rpi-eeprom-update -a")
|
| 291 |
+
CMD["check_ai_accelerator"] = K("ps:Get-PnpDevice | Where-Object FriendlyName -match 'NPU|Neural'", "sh:hailortcli fw-control identify 2>/dev/null || (lspci | grep -i hailo) || echo 'no AI HAT detected'")
|
| 292 |
+
CMD["run_stress_test"] = K("ps:Write-Output 'running CPU load for {seconds}s'; $j=1..4|%{{Start-Job {{ $e=(Get-Date).AddSeconds({seconds}); while((Get-Date) -lt $e){{}} }}}}; $j|Wait-Job|Out-Null; 'done'", "sh:stress-ng --cpu 4 --timeout {seconds}s --metrics-brief 2>/dev/null || echo 'install stress-ng'")
|
| 293 |
+
CMD["run_benchmark"] = K("cmd:winsat cpu -encryption", "sh:sysbench {target} run 2>/dev/null || echo 'install sysbench'")
|
| 294 |
+
CMD["set_boot_target"] = K(None, "sh:{sudo}systemctl set-default {boot_target}.target")
|
| 295 |
+
CMD["set_boot_order"] = K("cmd:bcdedit /enum firmware", "sh:{sudo}rpi-eeprom-config | grep BOOT_ORDER; echo 'edit with: sudo rpi-eeprom-config --edit (BOOT_ORDER=0xf416 = nvme,usb,sd)'")
|
| 296 |
+
CMD["edit_system_config"] = K("cmd:notepad {file}", "sh:x-terminal-emulator -e sudo nano {file} &")
|
| 297 |
+
CMD["expand_filesystem"] = K(None, "sh:{sudo}raspi-config nonint do_expand_rootfs && echo 'reboot to apply'")
|
| 298 |
+
CMD["set_swap_size"] = K("ps:start ms-settings:about; Write-Output 'Advanced system settings > Performance > Virtual memory'", "sh:{sudo}sed -i 's/^CONF_SWAPSIZE=.*/CONF_SWAPSIZE={size}/' /etc/dphys-swapfile && {sudo}dphys-swapfile swapoff && {sudo}dphys-swapfile setup && {sudo}dphys-swapfile swapon && free -h")
|
| 299 |
+
CMD["set_swappiness"] = K(None, "sh:{sudo}sysctl vm.swappiness={value}"); CMD["enable_zram"] = K(None, "sh:{sudo}apt install -y zram-tools && {sudo}systemctl restart zramswap && zramctl")
|
| 300 |
+
CMD["partition_disk"] = K("cmd:diskmgmt.msc", "sh:{sudo}fdisk -l {device}; echo 'interactive partitioning: sudo fdisk {device}'")
|
| 301 |
+
CMD["check_filesystem"] = K("cmd:chkdsk {device}", "sh:{sudo}umount {device} 2>/dev/null; {sudo}fsck -f -y {device}")
|
| 302 |
+
CMD["backup_disk_image"] = K("cmd:wbadmin start backup -backupTarget:D: -include:C:", "sh:{sudo}dd if={device} bs=4M status=progress | gzip > ~/backup_$(date +%s).img.gz")
|
| 303 |
+
CMD["clone_disk"] = K(None, "sh:{sudo}rpi-clone {device}")
|
| 304 |
+
CMD["set_disk_label"] = K("cmd:label {device} {label}", "sh:{sudo}e2label {device} {label}")
|
| 305 |
+
CMD["add_persistent_mount"] = K(None, "sh:U=$(sudo blkid -s UUID -o value {device}); echo \"UUID=$U /mnt/usb auto defaults,nofail 0 2\" | {sudo}tee -a /etc/fstab && {sudo}mount -a")
|
| 306 |
+
CMD["mount_drive"] = K("cmd:mountvol", "sh:{sudo}mkdir -p /mnt/usb && {sudo}mount {device} /mnt/usb && df -h /mnt/usb")
|
| 307 |
+
CMD["unmount_drive"] = K("ps:(New-Object -comObject Shell.Application).Namespace(17).ParseName({device}).InvokeVerb('Eject')", "sh:{sudo}umount {device} && echo unmounted")
|
| 308 |
+
CMD["format_drive"] = K("cmd:diskmgmt.msc", "sh:lsblk; echo 'formatting needs an explicit device: sudo mkfs.ext4 /dev/sdX'")
|
| 309 |
+
CMD["factory_reset"] = K("cmd:systemreset", "sh:echo 'no factory reset on Pi OS: re-flash the SD card with Raspberry Pi Imager'")
|
| 310 |
+
CMD["manage_users"] = K("cmd:net user {user} /add", "sh:{sudo}adduser --gecos '' {user}")
|
| 311 |
+
CMD["harden_ssh"] = K(None, "sh:{sudo}sed -i 's/^#\\?PasswordAuthentication.*/PasswordAuthentication no/;s/^#\\?PermitRootLogin.*/PermitRootLogin no/' /etc/ssh/sshd_config && {sudo}sshd -t && {sudo}systemctl restart ssh && echo hardened")
|
| 312 |
+
CMD["fix_gpio_permissions"] = K(None, "sh:{sudo}usermod -aG gpio,i2c,spi,dialout $USER && echo 're-login to apply'")
|
| 313 |
+
CMD["run_command"] = K("cmd:{command}", "sh:{command}"); CMD["run_script"] = K("cmd:start powershell", "sh:x-terminal-emulator &")
|
| 314 |
+
CMD["run_background"] = K("cmd:start /b {command}", "sh:nohup {command} > ~/bg.log 2>&1 & echo started")
|
| 315 |
+
CMD["schedule_task"] = K("cmd:schtasks /create /sc daily /tn union_task /tr {command}", "sh:(crontab -l 2>/dev/null; echo \"{cron_expr} {command}\") | crontab - && crontab -l")
|
| 316 |
+
CMD["create_service"] = K("cmd:sc create {name} binPath= C:\\Scripts\\{name}.bat start= auto", "sh:printf '[Unit]\\nDescription={name}\\nAfter=network.target\\n[Service]\\nExecStart=/home/%s/{name}.sh\\nRestart=on-failure\\n[Install]\\nWantedBy=multi-user.target\\n' $USER | {sudo}tee /etc/systemd/system/{name}.service && {sudo}systemctl daemon-reload")
|
| 317 |
+
CMD["start_session"] = K("cmd:start wt", "sh:tmux new -d -s {name} && tmux ls"); CMD["attach_session"] = K(None, "sh:x-terminal-emulator -e tmux a -t {name} &"); CMD["list_sessions"] = K("cmd:query session", "sh:tmux ls")
|
| 318 |
+
CMD["watch_command"] = K("ps:while($true){{ cls; {command}; Start-Sleep {interval} }}", "sh:timeout 30 watch -n {interval} {command}")
|
| 319 |
+
CMD["docker_run"] = K("cmd:docker run -d {image}", "sh:docker run -d {image}"); CMD["docker_list"] = K("cmd:docker ps -a", "sh:docker ps -a"); CMD["docker_stop"] = K("cmd:docker stop {container}", "sh:docker stop {container}")
|
| 320 |
+
CMD["docker_compose_up"] = K("cmd:docker compose up -d", "sh:docker compose up -d"); CMD["docker_prune"] = K("cmd:docker system prune -af", "sh:docker system prune -af")
|
| 321 |
+
CMD["run_llm"] = K("cmd:ollama run {model}", "sh:ollama run {model} 'Namaste' 2>&1 | head -20"); CMD["list_llm_models"] = K("cmd:ollama list", "sh:ollama list"); CMD["pull_llm_model"] = K("cmd:ollama pull {model}", "sh:ollama pull {model}")
|
| 322 |
+
CMD["stop_llm"] = K("cmd:taskkill /im ollama.exe /f", "sh:ollama stop $(ollama ps | awk 'NR==2{{print $1}}') 2>/dev/null; pkill -f 'ollama runner'"); CMD["run_llm_benchmark"] = K(None, "sh:~/llama.cpp/build/bin/llama-bench -m {model} -t 4")
|
| 323 |
+
CMD["transcribe_audio"] = K("cmd:whisper {file} --language hi", "sh:~/whisper.cpp/build/bin/whisper-cli -m ~/whisper.cpp/models/ggml-base.bin -f {file} -l hi -nt")
|
| 324 |
+
CMD["convert_media"] = K("cmd:ffmpeg -i {file} out.{format_ext}", "sh:ffmpeg -y -i {file} -ar 16000 -ac 1 ~/converted.{format_ext}")
|
| 325 |
+
CMD["build_project"] = K("cmd:cd {path} && cmake -B build && cmake --build build", "sh:cd {path} && cmake -B build && cmake --build build -j4")
|
| 326 |
+
# ------------------------------------------------------------------ GPIO (Pi only) - pinctrl on Bookworm
|
| 327 |
+
CMD["gpio_on"] = K(None, "sh:pinctrl set {gpio} op dh && pinctrl get {gpio}"); CMD["gpio_off"] = K(None, "sh:pinctrl set {gpio} op dl && pinctrl get {gpio}")
|
| 328 |
+
CMD["gpio_toggle"] = K(None, "sh:L=$(pinctrl get {gpio} | grep -o ' hi\\| lo' | tr -d ' '); [ \"$L\" = hi ] && pinctrl set {gpio} op dl || pinctrl set {gpio} op dh; pinctrl get {gpio}")
|
| 329 |
+
CMD["gpio_read"] = K(None, "sh:pinctrl get {gpio}"); CMD["gpio_info"] = K(None, "sh:pinctrl get {gpio}; pinctrl funcs {gpio}")
|
| 330 |
+
CMD["gpio_set_mode"] = K(None, "sh:pinctrl set {gpio} {mode_pc} && pinctrl get {gpio}"); CMD["gpio_set_pull"] = K(None, "sh:pinctrl set {gpio} ip {pull_pc} && pinctrl get {gpio}")
|
| 331 |
+
CMD["gpio_set_alt"] = K(None, "sh:pinctrl set {gpio} {alt} && pinctrl get {gpio}"); CMD["gpio_alt_functions"] = K(None, "sh:pinctrl funcs {gpio}")
|
| 332 |
+
CMD["gpio_reset"] = K(None, "sh:pinctrl set {gpio} ip pn && pinctrl get {gpio}"); CMD["gpio_reset_all"] = K(None, "sh:for p in $(seq 2 27); do pinctrl set $p ip pn; done; pinctrl get 2-27")
|
| 333 |
+
CMD["list_gpio"] = K(None, "sh:pinctrl get 2-27"); CMD["list_free_gpio"] = K(None, "sh:pinctrl get 2-27 | grep -E 'ip|no' | grep -v -E 'a[0-9]'")
|
| 334 |
+
CMD["list_gpio_chips"] = K(None, "sh:gpiodetect 2>/dev/null || ls /dev/gpiochip*"); CMD["show_pinout"] = K(None, "sh:pinout 2>/dev/null || cat /usr/share/doc/python3-gpiozero/pinout.txt 2>/dev/null || echo 'sudo apt install python3-gpiozero'")
|
| 335 |
+
CMD["gpio_pin_role"] = K(None, "py:gpio_pin_role"); CMD["bcm_to_board"] = K(None, "py:bcm_to_board"); CMD["board_to_bcm"] = K(None, "py:board_to_bcm")
|
| 336 |
+
CMD["gpio_pwm"] = K(None, "sh:python3 -c \"from gpiozero import PWMOutputDevice; import time; p=PWMOutputDevice({gpio}, frequency={freq}); p.value={duty}/100; print('pwm {duty}% on gpio {gpio}'); time.sleep(5)\"")
|
| 337 |
+
CMD["gpio_servo"] = K(None, "sh:python3 -c \"from gpiozero import AngularServo; import time; s=AngularServo({gpio}, min_angle=0, max_angle=180); s.angle={angle}; print('servo -> {angle}'); time.sleep(1.5)\"")
|
| 338 |
+
CMD["gpio_blink"] = K(None, "sh:python3 -c \"from gpiozero import LED; import time; l=LED({gpio}); [ (l.on(), time.sleep({interval}/1000), l.off(), time.sleep({interval}/1000)) for _ in range({count}) ]; print('blinked {count}x')\"")
|
| 339 |
+
CMD["gpio_pulse"] = K(None, "sh:pinctrl set {gpio} op dh && sleep {seconds} && pinctrl set {gpio} op dl && echo 'pulse done'")
|
| 340 |
+
CMD["gpio_watch"] = K(None, "sh:timeout 20 gpiomon -e {edge_g} $(gpiodetect | awk 'NR==1{{print $1}}') {gpio} 2>/dev/null || (for i in $(seq 1 20); do pinctrl get {gpio}; sleep 1; done)")
|
| 341 |
+
CMD["gpio_stop_watch"] = K(None, "sh:pkill gpiomon; echo stopped"); CMD["gpio_conflicts"] = K(None, "sh:dtoverlay -l; echo; pinctrl get 2-27 | grep -E 'a[0-9]'")
|
| 342 |
+
CMD["gpio_debug"] = K(None, "sh:echo '== state'; pinctrl get {gpio}; echo '== functions'; pinctrl funcs {gpio}; echo '== overlays'; dtoverlay -l; echo '== chips'; gpiodetect 2>/dev/null; echo '== groups'; groups; echo '== who uses it'; {sudo}lsof /dev/gpiochip* 2>/dev/null | head")
|
| 343 |
+
CMD["gpio_debug_all"] = K(None, "sh:echo '== all pins'; pinctrl get 2-27; echo '== overlays'; dtoverlay -l; echo '== chips'; gpiodetect 2>/dev/null; echo '== groups'; groups; echo '== throttle'; vcgencmd get_throttled")
|
| 344 |
+
CMD["i2c_scan"] = K(None, "sh:i2cdetect -y 1"); CMD["i2c_read"] = K(None, "sh:i2cget -y 1 {address} {register}"); CMD["i2c_write"] = K(None, "sh:i2cset -y 1 {address} {register} {value}"); CMD["i2c_dump"] = K(None, "sh:i2cdump -y 1 {address}")
|
| 345 |
+
CMD["interface_enable"] = K(None, "sh:{sudo}raspi-config nonint do_{iface_rc} 0 && echo 'enabled (reboot may be needed)'"); CMD["interface_disable"] = K(None, "sh:{sudo}raspi-config nonint do_{iface_rc} 1 && echo disabled")
|
| 346 |
+
CMD["open_task_manager"] = K("cmd:taskmgr", None)
|
executor/executor.py
ADDED
|
@@ -0,0 +1,304 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""Union executor: model JSON -> gated, whitelisted OS command.
|
| 2 |
+
plan(cmd, platform) -> Plan (kind, command, note, risk, needs_sudo, supported)
|
| 3 |
+
gate(plan, allow_caution, confirm_text) -> (ok, reason)
|
| 4 |
+
run(plan, dry_run=True) -> {"status": ok|error|timeout|dry_run|skipped, "output": ..., "command": ...}
|
| 5 |
+
The model only produces text; nothing runs unless the catalog knows the action and the gate passes.
|
| 6 |
+
"""
|
| 7 |
+
import json, os, re, shlex, subprocess, sys, time, threading, urllib.parse, webbrowser
|
| 8 |
+
HERE = os.path.dirname(os.path.abspath(__file__)); sys.path.insert(0, HERE)
|
| 9 |
+
from commands import CMD # noqa
|
| 10 |
+
import tables as T # noqa
|
| 11 |
+
CATALOG = json.load(open(os.path.join(HERE, "..", "model", "catalog.json")))["actions"]
|
| 12 |
+
|
| 13 |
+
# ---------------------------------------------------------------- static tables
|
| 14 |
+
BCM_TO_BOARD = {2: 3, 3: 5, 4: 7, 14: 8, 15: 10, 17: 11, 18: 12, 27: 13, 22: 15, 23: 16, 24: 18, 10: 19, 9: 21, 25: 22, 11: 23, 8: 24, 7: 26, 0: 27, 1: 28, 5: 29, 6: 31, 12: 32, 13: 33, 19: 35, 16: 36, 26: 37, 20: 38, 21: 40}
|
| 15 |
+
BOARD_TO_BCM = {v: k for k, v in BCM_TO_BOARD.items()}
|
| 16 |
+
BOARD_POWER = {1: "3.3V", 17: "3.3V", 2: "5V", 4: "5V", 6: "GND", 9: "GND", 14: "GND", 20: "GND", 25: "GND", 30: "GND", 34: "GND", 39: "GND"}
|
| 17 |
+
BCM_ROLE = {2: "I2C1 SDA", 3: "I2C1 SCL", 14: "UART TXD", 15: "UART RXD", 18: "PCM CLK / PWM0", 19: "PCM FS / PWM1 / SPI1 MISO", 12: "PWM0", 13: "PWM1", 10: "SPI0 MOSI", 9: "SPI0 MISO", 11: "SPI0 SCLK", 8: "SPI0 CE0", 7: "SPI0 CE1", 0: "ID_SD (EEPROM)", 1: "ID_SC (EEPROM)", 4: "GPCLK0 / 1-Wire default", 20: "PCM DIN / SPI1 MOSI", 21: "PCM DOUT / SPI1 SCLK", 16: "SPI1 CE2", 17: "SPI1 CE1"}
|
| 18 |
+
ROLE_TO_PIN = {"sda": "GPIO2 (board 3)", "scl": "GPIO3 (board 5)", "txd": "GPIO14 (board 8)", "rxd": "GPIO15 (board 10)", "ground": "board 6,9,14,20,25,30,34,39", "gnd": "board 6,9,14,20,25,30,34,39", "3.3v": "board 1,17", "3v3": "board 1,17", "5v": "board 2,4", "pwm": "GPIO12/13/18/19", "mosi": "GPIO10 (board 19)", "miso": "GPIO9 (board 21)", "sclk": "GPIO11 (board 23)", "ce0": "GPIO8 (board 24)", "i2c": "GPIO2 SDA / GPIO3 SCL (board 3/5)", "spi": "GPIO10/9/11/8/7 (board 19/21/23/24/26)", "uart": "GPIO14 TXD / GPIO15 RXD (board 8/10)", "pcm": "GPIO18/19/20/21 (board 12/35/38/40)"}
|
| 19 |
+
POWER_GUID = {"performance": "8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c", "balanced": "381b4222-f694-41f0-9685-ff5bb260df2e", "power_saver": "a1841308-3541-4fab-bc81-f71556f20b4a"}
|
| 20 |
+
GOV_FOR_MODE = {"performance": "performance", "balanced": "ondemand", "power_saver": "powersave"}
|
| 21 |
+
TZ_WIN = {"asia/kolkata": "India Standard Time", "utc": "UTC", "asia/dubai": "Arabian Standard Time", "america/new_york": "Eastern Standard Time", "europe/london": "GMT Standard Time", "asia/tokyo": "Tokyo Standard Time", "asia/singapore": "Singapore Standard Time", "australia/sydney": "AUS Eastern Standard Time"}
|
| 22 |
+
VK = dict(T.VK, **{"escape": 0x1B, "esc": 0x1B, "enter": 0x0D, "return": 0x0D, "space": 0x20, "backspace": 0x08, "delete": 0x2E, "del": 0x2E, "home": 0x24, "end": 0x23, "pageup": 0x21, "pagedown": 0x22, "page_down": 0x22, "page_up": 0x21, "period": 0xBE, "n": 0x4E, "r": 0x52, "p": 0x50, "h": 0x48, "printscreen": 0x2C, "f11": 0x7A, "f1": 0x70, "f2": 0x71, "f3": 0x72, "f6": 0x75, "f10": 0x79, "f12": 0x7B})
|
| 23 |
+
XKEY = {"escape": "Escape", "esc": "Escape", "enter": "Return", "return": "Return", "space": "space", "backspace": "BackSpace", "delete": "Delete", "del": "Delete", "home": "Home", "end": "End", "pageup": "Page_Up", "pagedown": "Page_Down", "page_down": "Page_Down", "page_up": "Page_Up", "tab": "Tab", "up": "Up", "down": "Down", "left": "Left", "right": "Right", "f5": "F5", "f11": "F11", "f4": "F4", "period": "period", "plus": "plus", "minus": "minus"}
|
| 24 |
+
CRON = [("every 5 minutes", "*/5 * * * *"), ("every hour", "0 * * * *"), ("har ghante", "0 * * * *"), ("daily", "0 6 * * *"), ("roz subah", "0 6 * * *"), ("at 3 am", "0 3 * * *"), ("on reboot", "@reboot"), ("every monday", "0 9 * * 1"), ("at midnight", "0 0 * * *")]
|
| 25 |
+
|
| 26 |
+
def platform_name():
|
| 27 |
+
return "win" if os.name == "nt" else "pi"
|
| 28 |
+
|
| 29 |
+
def is_root():
|
| 30 |
+
return hasattr(os, "geteuid") and os.geteuid() == 0
|
| 31 |
+
|
| 32 |
+
class Plan:
|
| 33 |
+
def __init__(self, action, kind, command, note="", supported=True, risk="safe", needs_sudo=False, platform="pi", meta=None):
|
| 34 |
+
self.action, self.kind, self.command, self.note = action, kind, command, note
|
| 35 |
+
self.supported, self.risk, self.needs_sudo, self.platform = supported, risk, needs_sudo, platform
|
| 36 |
+
self.meta = meta or {}
|
| 37 |
+
def to_dict(self):
|
| 38 |
+
return {"action": self.action, "kind": self.kind, "command": self.command, "note": self.note, "supported": self.supported,
|
| 39 |
+
"risk": self.risk, "needs_sudo": self.needs_sudo, "platform": self.platform, **self.meta}
|
| 40 |
+
|
| 41 |
+
# ---------------------------------------------------------------- quoting
|
| 42 |
+
def q_sh(v): return shlex.quote(str(v))
|
| 43 |
+
def q_ps(v): return "'" + str(v).replace("'", "''") + "'"
|
| 44 |
+
def q_cmd(v):
|
| 45 |
+
s = str(v).replace('"', "")
|
| 46 |
+
return f'"{s}"' if re.search(r"[\s&|<>^]", s) else s
|
| 47 |
+
QUOTE = {"sh": q_sh, "ps": q_ps, "cmd": q_cmd}
|
| 48 |
+
|
| 49 |
+
def derived(cmd, plat, action):
|
| 50 |
+
"""Fill the derived placeholders. Raw slot values are quoted per shell by render()."""
|
| 51 |
+
d = {}
|
| 52 |
+
a, u = cmd.get("amount"), cmd.get("unit")
|
| 53 |
+
secs = (a or 0) * {"sec": 1, "min": 60, "hour": 3600}.get(u, 60) if a is not None else 0
|
| 54 |
+
d["seconds"] = secs; d["minutes"] = max(0, round(secs / 60)) if secs else 0
|
| 55 |
+
d["step"] = cmd.get("step", 10)
|
| 56 |
+
spec = CATALOG[action]
|
| 57 |
+
d["sudo"] = "sudo " if (spec.get("needs_sudo") and plat == "pi" and not is_root()) else ""
|
| 58 |
+
d["home"] = os.path.expanduser("~")
|
| 59 |
+
if "app" in cmd:
|
| 60 |
+
ap = T.APPS.get(cmd["app"], {}); d["app_win"] = ap.get("win") or ""; d["app_pi"] = ap.get("pi") or ""
|
| 61 |
+
d["proc_win"] = T.WIN_PROC.get(cmd["app"]) or cmd["app"]; d["proc_pi"] = T.PI_PROC.get(cmd["app"]) or cmd["app"]
|
| 62 |
+
if "site" in cmd and action != "web_login": d["site_url"] = T.SITES.get(cmd["site"], "https://" + cmd["site"])
|
| 63 |
+
if "url" in cmd: d["url_full"] = cmd["url"] if cmd["url"].startswith(("http://", "https://")) else "https://" + cmd["url"]
|
| 64 |
+
for k in ("query", "subject", "text"):
|
| 65 |
+
if k in cmd: d[k + "_url"] = urllib.parse.quote(str(cmd[k]))
|
| 66 |
+
if "folder" in cmd:
|
| 67 |
+
f = T.FOLDERS.get(cmd["folder"], {}); d["folder_win"] = f.get("win", "%USERPROFILE%"); d["folder_pi"] = f.get("pi", "~")
|
| 68 |
+
d["page_uri"] = T.SETTINGS_PAGES.get(cmd.get("page", ""), "ms-settings:")
|
| 69 |
+
if "service" in cmd: d["svc_unit"] = T.SERVICE_UNITS.get(cmd["service"], cmd["service"]); d["svc_win"] = T.WIN_SERVICES.get(cmd["service"], cmd["service"])
|
| 70 |
+
if "mode" in cmd:
|
| 71 |
+
d["mode_cmd"] = T.DISPLAY_MODES.get(cmd["mode"], "DisplaySwitch.exe /extend"); d["power_guid"] = POWER_GUID.get(cmd["mode"], POWER_GUID["balanced"])
|
| 72 |
+
d["governor_for_mode"] = GOV_FOR_MODE.get(cmd["mode"], "ondemand"); d["mode_pc"] = {"input": "ip", "output": "op"}.get(cmd["mode"], "ip")
|
| 73 |
+
if "pull" in cmd: d["pull_pc"] = {"up": "pu", "down": "pd", "none": "pn"}.get(cmd["pull"], "pn")
|
| 74 |
+
if "edge" in cmd: d["edge_g"] = {"rising": "rising", "falling": "falling", "both": "both"}.get(cmd["edge"], "both")
|
| 75 |
+
else: d["edge_g"] = "both"
|
| 76 |
+
if "pin" in cmd:
|
| 77 |
+
pin = int(cmd["pin"])
|
| 78 |
+
if cmd.get("numbering") == "board": pin = BOARD_TO_BCM.get(pin, -1)
|
| 79 |
+
d["gpio"] = pin
|
| 80 |
+
if "interface" in cmd: d["iface_rc"] = {"i2c": "i2c", "spi": "spi", "serial": "serial_hw", "onewire": "onewire", "camera": "legacy"}.get(cmd["interface"], cmd["interface"])
|
| 81 |
+
if "orientation" in cmd: d["orientation_wl"] = {"landscape": "normal", "portrait": "90", "landscape_flipped": "180"}.get(cmd["orientation"], "normal")
|
| 82 |
+
if "key" in cmd: d["key_x"] = XKEY.get(cmd["key"], cmd["key"])
|
| 83 |
+
if "text" in cmd: d["text_sendkeys"] = q_ps(re.sub(r"([+^%~(){}\[\]])", r"{\1}", str(cmd["text"])))
|
| 84 |
+
if "tz" in cmd: d["tz_win"] = TZ_WIN.get(str(cmd["tz"]).lower(), "UTC")
|
| 85 |
+
if "target" in cmd: d["boot_target"] = "graphical" if cmd["target"] in ("desktop", "graphical") else "multi-user"
|
| 86 |
+
if "priority" in cmd: p = str(cmd["priority"]); d["priority_num"] = {"low": 10, "high": -5}.get(p, p if p.lstrip("-").isdigit() else 5)
|
| 87 |
+
if "schedule" in cmd:
|
| 88 |
+
s = str(cmd["schedule"]).lower(); d["cron_expr"] = next((c for k, c in CRON if k in s), "0 * * * *")
|
| 89 |
+
if "format" in cmd: f = str(cmd["format"]).lower(); d["format_ext"] = "wav" if "wav" in f else "txt" if f == "text" else f.split()[-1]
|
| 90 |
+
if "freq" not in cmd: d["freq"] = 1000
|
| 91 |
+
if "interval" not in cmd: d["interval"] = 500 if action == "gpio_blink" else 2
|
| 92 |
+
if "count" not in cmd: d["count"] = 5
|
| 93 |
+
if "user" not in cmd: d["user"] = "pi"
|
| 94 |
+
if "baud" not in cmd: d["baud"] = 115200
|
| 95 |
+
if "password" not in cmd: d["password"] = ""
|
| 96 |
+
d["pw_arg"] = (" password " + q_sh(cmd["password"])) if cmd.get("password") else ""
|
| 97 |
+
if action == "hotspot_on" and "ssid" not in cmd: d["ssid"] = "PiHotspot"
|
| 98 |
+
return d
|
| 99 |
+
|
| 100 |
+
def render(action, cmd, plat):
|
| 101 |
+
spec = CATALOG.get(action)
|
| 102 |
+
if not spec: return Plan(action, "py", "", "unknown action", supported=False)
|
| 103 |
+
tmpl = CMD.get(action, {}).get(plat)
|
| 104 |
+
risk, sudo = spec["risk"], spec.get("needs_sudo", False)
|
| 105 |
+
plat_name = "windows" if plat == "win" else "pi"
|
| 106 |
+
if plat_name not in spec["platforms"] or not tmpl:
|
| 107 |
+
return Plan(action, "none", "", f"'{action}' is not available on {'Windows' if plat == 'win' else 'Raspberry Pi'}", supported=False, risk=risk, needs_sudo=sudo, platform=plat)
|
| 108 |
+
kind, _, body = tmpl.partition(":")
|
| 109 |
+
quote = QUOTE.get(kind, lambda v: str(v))
|
| 110 |
+
vals = {}
|
| 111 |
+
RAW = {"run_command", "run_script", "run_background", "watch_command", "schedule_task", "create_service"}
|
| 112 |
+
for k, v in cmd.items():
|
| 113 |
+
if k == "action": continue
|
| 114 |
+
raw = isinstance(v, int) or kind in ("open", "key", "py") or (k == "command" and action in RAW)
|
| 115 |
+
vals[k] = v if raw else quote(v)
|
| 116 |
+
d = derived(cmd, plat, action)
|
| 117 |
+
for k, v in d.items():
|
| 118 |
+
if k not in vals: vals[k] = quote(v) if k == "password" else v
|
| 119 |
+
if "pin" in cmd and kind != "py":
|
| 120 |
+
g = d.get("gpio", -1)
|
| 121 |
+
if cmd.get("numbering") == "board" and int(cmd["pin"]) in BOARD_POWER:
|
| 122 |
+
return Plan(action, kind, "", f"physical pin {cmd['pin']} is a {BOARD_POWER[int(cmd['pin'])]} pin, not a GPIO - refused", supported=False, risk=risk, needs_sudo=sudo, platform=plat)
|
| 123 |
+
if not (isinstance(g, int) and 0 <= g <= 27):
|
| 124 |
+
return Plan(action, kind, "", f"pin {cmd['pin']} ({cmd.get('numbering', 'bcm')}) is not a usable GPIO (BCM 0-27) - refused", supported=False, risk=risk, needs_sudo=sudo, platform=plat)
|
| 125 |
+
try:
|
| 126 |
+
command = body.format(**vals)
|
| 127 |
+
except KeyError as e:
|
| 128 |
+
return Plan(action, kind, body, f"missing value for {e}", supported=False, risk=risk, needs_sudo=sudo, platform=plat)
|
| 129 |
+
note = spec.get("desc", "")
|
| 130 |
+
if kind == "sh" and d.get("sudo") and "sudo" not in command and sudo: command = "sudo " + command
|
| 131 |
+
return Plan(action, kind, command, note, True, risk, sudo, plat, {"gpio": d.get("gpio")})
|
| 132 |
+
|
| 133 |
+
def plan(cmd, plat=None, text=None):
|
| 134 |
+
"""text = the user's original sentence; when given, GPIO writes that name a bare 'pin N' ask board vs BCM."""
|
| 135 |
+
plat = plat or platform_name()
|
| 136 |
+
a = cmd.get("action", "unknown")
|
| 137 |
+
if a == "clarify":
|
| 138 |
+
return Plan("clarify", "py", "", f"need more information for '{cmd.get('action_ref', cmd.get('target', ''))}'".strip(), True, "safe", False, plat)
|
| 139 |
+
bad = suspicious_credentials(cmd) or ambiguous_pin(cmd, text)
|
| 140 |
+
if bad:
|
| 141 |
+
return Plan("clarify", "py", "", bad, True, "safe", False, plat, {"clarify_for": a})
|
| 142 |
+
return render(a, cmd, plat)
|
| 143 |
+
|
| 144 |
+
# 'pin no 11' is labelled board in some training rows and BCM in others, so the model's numbering for a bare pin is a
|
| 145 |
+
# guess. For anything that drives a pin (risk above safe) the user must say which numbering they mean.
|
| 146 |
+
_PIN_QUALIFIER = re.compile(r"\b(gpio|bcm|board|physical|phys|header)", re.I)
|
| 147 |
+
|
| 148 |
+
def ambiguous_pin(cmd, text):
|
| 149 |
+
"""Return a clarification message when a pin-driving action came from text with no gpio/bcm/board qualifier, else ''."""
|
| 150 |
+
a = cmd.get("action"); spec = CATALOG.get(a, {})
|
| 151 |
+
if text is None or "pin" not in cmd or "pin" not in spec.get("slots", []) or spec.get("risk") == "safe": return ""
|
| 152 |
+
if _PIN_QUALIFIER.search(text): return ""
|
| 153 |
+
n = int(cmd["pin"]); as_board = BOARD_TO_BCM.get(n); as_bcm = BCM_TO_BOARD.get(n)
|
| 154 |
+
board = f"physical/board pin {n}" + (f" (= GPIO {as_board})" if as_board is not None else " (not a GPIO)")
|
| 155 |
+
bcm = f"GPIO/BCM {n}" + (f" (= board pin {as_bcm})" if as_bcm is not None else " (not on the header)")
|
| 156 |
+
return f"pin {n} is ambiguous: {board} or {bcm}? Say 'board pin {n}' or 'gpio {n}'"
|
| 157 |
+
|
| 158 |
+
# words that are never a real password/ssid on their own: a model slip that copied a filler instead of the value
|
| 159 |
+
_FILLER = {"hai", "hain", "he", "h", "ka", "ki", "ke", "ko", "se", "pe", "par", "aur", "and", "is", "was", "to", "the", "please", "plz",
|
| 160 |
+
"password", "pass", "pwd", "passwd", "key", "naam", "name", "ssid", "wifi", "wi-fi", "network", "uska", "iska", "mera", "mere",
|
| 161 |
+
"ghar", "connect", "karo", "kar", "do", "jodo", "jod", "lagao", "yaar", "abhi", "jaldi", "pehle", "baad", "mein", "phir"}
|
| 162 |
+
# words that should never be inside a network name: seeing one means the model's copy span slipped
|
| 163 |
+
_NOT_IN_SSID = {"hai", "hain", "password", "pass", "pwd", "passwd", "key", "connect", "karo", "kar", "jodo", "ka", "ki", "ke", "se", "ghar", "mere", "naam",
|
| 164 |
+
"pehle", "baad", "mein", "phir"}
|
| 165 |
+
_CRED_ACTIONS = {"connect_wifi", "hotspot_on", "web_login", "forget_wifi", "show_wifi_password"}
|
| 166 |
+
|
| 167 |
+
def suspicious_credentials(cmd):
|
| 168 |
+
"""Return a clarification message when the parsed credential slots look like a mis-copy, else ''."""
|
| 169 |
+
a = cmd.get("action")
|
| 170 |
+
if a not in _CRED_ACTIONS: return ""
|
| 171 |
+
name = str(cmd.get("ssid") or cmd.get("username") or "").strip()
|
| 172 |
+
pw = cmd.get("password")
|
| 173 |
+
if pw is not None:
|
| 174 |
+
pws = str(pw).strip(); words = [w.strip(":,.;") for w in re.split(r"\s+", pws.lower())]
|
| 175 |
+
if not pws or all(w in _FILLER for w in words): return f"password looks wrong ('{pws}'), please say the password again"
|
| 176 |
+
if len(words) > 1 and any(w in _FILLER for w in words): return f"password '{pws}' looks like part of the sentence, please say the password again"
|
| 177 |
+
if name and pws.lower() == name.lower(): return "password came out the same as the network/user name, please repeat both"
|
| 178 |
+
if "ssid" in cmd and name:
|
| 179 |
+
words = [w.strip(":,.;") for w in re.split(r"\s+", name.lower())]
|
| 180 |
+
if all(w in _FILLER for w in words) or any(w in _NOT_IN_SSID for w in words):
|
| 181 |
+
return f"network name '{name}' looks wrong, please give the network name (and password) again"
|
| 182 |
+
return ""
|
| 183 |
+
|
| 184 |
+
# ---------------------------------------------------------------- gating
|
| 185 |
+
def gate(p, allow_caution=False, confirm_text=None):
|
| 186 |
+
if not p.supported: return False, p.note
|
| 187 |
+
if p.risk == "critical":
|
| 188 |
+
return (confirm_text == p.action), f"critical action: type the action name '{p.action}' to confirm"
|
| 189 |
+
if p.risk == "caution" and not allow_caution: return False, "caution action: enable 'allow caution actions' or confirm"
|
| 190 |
+
return True, "ok"
|
| 191 |
+
|
| 192 |
+
# ---------------------------------------------------------------- execution
|
| 193 |
+
_timers = {}
|
| 194 |
+
_last = {"plan": None}
|
| 195 |
+
def _open(target):
|
| 196 |
+
try:
|
| 197 |
+
if os.name == "nt": os.startfile(target); return "opened " + target
|
| 198 |
+
r = subprocess.run(["xdg-open", target], capture_output=True, text=True, timeout=10)
|
| 199 |
+
return ("opened " if r.returncode == 0 else "could not open (no desktop session): ") + target
|
| 200 |
+
except Exception as e:
|
| 201 |
+
return f"open failed: {e}"
|
| 202 |
+
|
| 203 |
+
def _key(combo, plat):
|
| 204 |
+
keys = [k.strip().lower() for k in combo.split("+")]
|
| 205 |
+
if plat == "win":
|
| 206 |
+
vks = [VK.get(k) for k in keys]
|
| 207 |
+
if None in vks: return "cmd_fail", f"unknown key in {combo}"
|
| 208 |
+
ps = T.WIN_KEYS + f"[K]::Press([byte[]]@({','.join(hex(v) for v in vks)}))"
|
| 209 |
+
return _shell("ps", ps)
|
| 210 |
+
x = "+".join(XKEY.get(k, k) for k in keys).replace("win+", "super+")
|
| 211 |
+
return _shell("sh", f"xdotool key {x} 2>/dev/null || wtype -k {x.split('+')[-1]}")
|
| 212 |
+
|
| 213 |
+
def _powershell():
|
| 214 |
+
"""PATH may not include PowerShell (e.g. started from Git Bash or a Store Python); fall back to the system copy."""
|
| 215 |
+
import shutil
|
| 216 |
+
return shutil.which("powershell") or os.path.join(os.environ.get("SystemRoot", r"C:\Windows"), "System32", "WindowsPowerShell", "v1.0", "powershell.exe")
|
| 217 |
+
|
| 218 |
+
def _shell(kind, command, timeout=25):
|
| 219 |
+
try:
|
| 220 |
+
if kind == "ps":
|
| 221 |
+
exe = _powershell() if os.name == "nt" else "pwsh"
|
| 222 |
+
import base64
|
| 223 |
+
enc = base64.b64encode(("$ProgressPreference='SilentlyContinue'; " + command).encode("utf-16-le")).decode()
|
| 224 |
+
argv = [exe, "-NoProfile", "-NonInteractive", "-ExecutionPolicy", "Bypass", "-EncodedCommand", enc]
|
| 225 |
+
r = subprocess.run(argv, capture_output=True, text=True, timeout=timeout)
|
| 226 |
+
elif kind == "cmd":
|
| 227 |
+
if os.name != "nt": return "unsupported", "cmd.exe command - not runnable on Linux"
|
| 228 |
+
r = subprocess.run(f'cmd.exe /d /s /c "{command}"', capture_output=True, text=True, timeout=timeout, shell=False)
|
| 229 |
+
else:
|
| 230 |
+
if os.name == "nt": return "unsupported", "bash command - not runnable on Windows"
|
| 231 |
+
r = subprocess.run(["bash", "-lc", command], capture_output=True, text=True, timeout=timeout)
|
| 232 |
+
out = (r.stdout + ("\n" + r.stderr if r.stderr.strip() else "")).strip()
|
| 233 |
+
return ("ok" if r.returncode == 0 else "error"), out[-4000:] or f"(exit {r.returncode})"
|
| 234 |
+
except subprocess.TimeoutExpired:
|
| 235 |
+
return "timeout", f"no answer in {timeout}s"
|
| 236 |
+
except FileNotFoundError as e:
|
| 237 |
+
return "error", f"shell not found: {e}"
|
| 238 |
+
|
| 239 |
+
def _builtin(name, cmd, plat):
|
| 240 |
+
if name == "noop": return "ok", "not a device command - nothing done"
|
| 241 |
+
if name == "clarify": return "ok", "asked user for the missing value"
|
| 242 |
+
if name == "help":
|
| 243 |
+
groups = {}
|
| 244 |
+
for a, s in CATALOG.items(): groups.setdefault(s["risk"], []).append(a)
|
| 245 |
+
return "ok", f"{len(CATALOG)} actions. safe: {len(groups.get('safe', []))}, caution: {len(groups.get('caution', []))}, critical: {len(groups.get('critical', []))}. Try: 'volume 60 karo', 'gpio 17 high karo', 'wifi Airtel_5G se connect karo password xyz'"
|
| 246 |
+
if name in ("timer", "reminder"):
|
| 247 |
+
secs = (cmd.get("amount", 0)) * {"sec": 1, "min": 60, "hour": 3600}.get(cmd.get("unit", "min"), 60)
|
| 248 |
+
msg = cmd.get("text", "timer done")
|
| 249 |
+
t = threading.Timer(secs, lambda: print(f"\a[{name}] {msg}")); t.daemon = True; t.start(); _timers[name] = t
|
| 250 |
+
return "ok", f"{name} set for {secs}s" + (f": {msg}" if name == "reminder" else "")
|
| 251 |
+
if name == "cancel_timer":
|
| 252 |
+
t = _timers.pop("timer", None); return "ok", "timer cancelled" if t and not t.cancel() else "no active timer"
|
| 253 |
+
if name == "alarm": return "ok", f"alarm registered for {cmd.get('time')} (in-process; use the OS clock app for persistence)"
|
| 254 |
+
if name == "cancel_alarm": return "ok", "alarm cancelled"
|
| 255 |
+
if name == "stopwatch_start": _timers["sw"] = time.time(); return "ok", "stopwatch started"
|
| 256 |
+
if name == "stopwatch_stop": s = _timers.pop("sw", None); return "ok", f"stopwatch: {time.time() - s:.1f}s" if s else "stopwatch was not running"
|
| 257 |
+
if name == "calculate":
|
| 258 |
+
e = str(cmd.get("expression", "")).lower()
|
| 259 |
+
e = re.sub(r"\bplus\b|\bjod\w*", "+", e); e = re.sub(r"\bminus\b", "-", e); e = re.sub(r"\btimes\b|\binto\b|\bx\b|\bguna\b", "*", e)
|
| 260 |
+
e = re.sub(r"\bdivided by\b|\bbhaag\b", "/", e); e = re.sub(r"(\d+(?:\.\d+)?)\s*(?:ka|of)?\s*(\d+(?:\.\d+)?)\s*percent(?: of)?", r"(\1*\2/100)", e)
|
| 261 |
+
e = re.sub(r"(\d+(?:\.\d+)?)\s*percent of\s*(\d+(?:\.\d+)?)", r"(\1*\2/100)", e); e = re.sub(r"sqrt of\s*(\d+)", r"(\1**0.5)", e)
|
| 262 |
+
e = re.sub(r"(\d+)\s*(?:ki|to the)\s*power\s*(\d+)", r"(\1**\2)", e); e = re.sub(r"(\d+)\s*se\s*(\d+)\s*ghatao", r"(\1-\2)", e)
|
| 263 |
+
if not re.fullmatch(r"[\d\s+\-*/().]+", e): return "error", f"could not parse expression: {cmd.get('expression')}"
|
| 264 |
+
try: return "ok", f"{cmd.get('expression')} = {eval(e, {'__builtins__': {}}, {})}"
|
| 265 |
+
except Exception as ex: return "error", str(ex)
|
| 266 |
+
if name == "gpio_pin_role":
|
| 267 |
+
if "role" in cmd: return "ok", f"{cmd['role']}: {ROLE_TO_PIN.get(str(cmd['role']).lower(), 'not a header role')}"
|
| 268 |
+
pin = int(cmd.get("pin", -1)); board = cmd.get("numbering") == "board"
|
| 269 |
+
if board and pin in BOARD_POWER: return "ok", f"board pin {pin} = {BOARD_POWER[pin]}"
|
| 270 |
+
bcm = BOARD_TO_BCM.get(pin, -1) if board else pin
|
| 271 |
+
return "ok", f"GPIO{bcm} (board {BCM_TO_BOARD.get(bcm, '?')}): {BCM_ROLE.get(bcm, 'general purpose I/O')}"
|
| 272 |
+
if name == "bcm_to_board": p = int(cmd["pin"]); return "ok", f"GPIO{p} is physical pin {BCM_TO_BOARD.get(p, 'n/a (not on header)')}"
|
| 273 |
+
if name == "board_to_bcm":
|
| 274 |
+
p = int(cmd["pin"])
|
| 275 |
+
if p in BOARD_POWER: return "ok", f"board pin {p} is {BOARD_POWER[p]} (not a GPIO)"
|
| 276 |
+
return "ok", f"physical pin {p} is GPIO{BOARD_TO_BCM.get(p, 'n/a')}"
|
| 277 |
+
if name == "web_login":
|
| 278 |
+
site = cmd.get("site", ""); url = site if site.startswith("http") else ("http://" + site if re.match(r"^(localhost|\d+\.\d+)", site) else "https://" + (site if "." in site else site + ".com"))
|
| 279 |
+
msg = _open(url)
|
| 280 |
+
return "ok", f"{msg}; login handler received username='{cmd.get('username')}' (password hidden) - form fill needs the browser-automation add-on"
|
| 281 |
+
if name == "send_message":
|
| 282 |
+
app, text = cmd.get("app", "sms"), urllib.parse.quote(str(cmd.get("text", "")))
|
| 283 |
+
url = {"whatsapp": f"https://web.whatsapp.com/send?text={text}", "telegram": f"tg://msg?text={text}", "sms": f"sms:?body={text}", "teams": "msteams:", "slack": "slack://open", "signal": "signal://"}.get(app, "")
|
| 284 |
+
return "ok", (_open(url) if url else "unknown app") + f" -> to {cmd.get('contact')}: {cmd.get('text')}"
|
| 285 |
+
if name == "find_in_page":
|
| 286 |
+
st, o = _key("ctrl+f", plat)
|
| 287 |
+
if st == "ok": _shell("sh" if plat != "win" else "ps", (f"xdotool type {q_sh(cmd.get('query',''))}" if plat != "win" else f"Add-Type -AssemblyName System.Windows.Forms; [System.Windows.Forms.SendKeys]::SendWait({q_ps(cmd.get('query',''))})"))
|
| 288 |
+
return st, f"find: {cmd.get('query')} ({o})"
|
| 289 |
+
if name == "repeat_last":
|
| 290 |
+
lp = _last["plan"]
|
| 291 |
+
return ("ok", "repeated: " + lp.command) if lp else ("error", "nothing to repeat")
|
| 292 |
+
return "error", f"unknown builtin {name}"
|
| 293 |
+
|
| 294 |
+
def run(p, cmd=None, dry_run=True):
|
| 295 |
+
if not p.supported: return {"status": "unsupported", "output": p.note, "command": p.command}
|
| 296 |
+
if p.action == "clarify": return {"status": "clarify", "output": "ask the user: " + (p.note or "need more information"), "command": ""}
|
| 297 |
+
if dry_run: return {"status": "dry_run", "output": "not executed (dry run)", "command": p.command}
|
| 298 |
+
cmd = cmd or {}
|
| 299 |
+
if p.kind == "py": st, out = _builtin(p.command or CMD[p.action][p.platform].split(":", 1)[1], cmd, p.platform)
|
| 300 |
+
elif p.kind == "open": st, out = "ok", _open(p.command)
|
| 301 |
+
elif p.kind == "key": st, out = _key(p.command, p.platform)
|
| 302 |
+
else: st, out = _shell(p.kind, p.command)
|
| 303 |
+
if st == "ok" and p.action != "repeat_last": _last["plan"] = p
|
| 304 |
+
return {"status": st, "output": out, "command": p.command}
|
executor/tables.py
ADDED
|
@@ -0,0 +1,333 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
'''Tables reused from laptop-agent (B) plus union extensions. Edit here to add apps / sites / folders / services.'''
|
| 2 |
+
|
| 3 |
+
WIN_AUDIO = r'''Add-Type -TypeDefinition @"
|
| 4 |
+
using System.Runtime.InteropServices;
|
| 5 |
+
[Guid("5CDF2C82-841E-4546-9722-0CF74078229A"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
|
| 6 |
+
interface IAudioEndpointVolume { int f(); int g(); int h(); int i();
|
| 7 |
+
int SetMasterVolumeLevelScalar(float fLevel, System.Guid pguidEventContext); int j();
|
| 8 |
+
int GetMasterVolumeLevelScalar(out float pfLevel); int k(); int l(); int m(); int n();
|
| 9 |
+
int SetMute([MarshalAs(UnmanagedType.Bool)] bool bMute, System.Guid pguidEventContext); int GetMute(out bool pbMute); }
|
| 10 |
+
[Guid("D666063F-1587-4E43-81F1-B948E807363F"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
|
| 11 |
+
interface IMMDevice { int Activate(ref System.Guid id, int clsCtx, int activationParams, out IAudioEndpointVolume aev); }
|
| 12 |
+
[Guid("A95664D2-9614-4F35-A746-DE8DB63617E6"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
|
| 13 |
+
interface IMMDeviceEnumerator { int f(); int GetDefaultAudioEndpoint(int dataFlow, int role, out IMMDevice endpoint); }
|
| 14 |
+
[ComImport, Guid("BCDE0395-E52F-467C-8E3D-C4579291692E")] class MMDeviceEnumeratorComObject { }
|
| 15 |
+
public class Audio {
|
| 16 |
+
static IAudioEndpointVolume Vol() { var enumerator = new MMDeviceEnumeratorComObject() as IMMDeviceEnumerator;
|
| 17 |
+
IMMDevice dev = null; Marshal.ThrowExceptionForHR(enumerator.GetDefaultAudioEndpoint(0, 1, out dev));
|
| 18 |
+
IAudioEndpointVolume epv = null; var epvid = typeof(IAudioEndpointVolume).GUID;
|
| 19 |
+
Marshal.ThrowExceptionForHR(dev.Activate(ref epvid, 23, 0, out epv)); return epv; }
|
| 20 |
+
public static float Volume { get { float v = -1; Marshal.ThrowExceptionForHR(Vol().GetMasterVolumeLevelScalar(out v)); return v; }
|
| 21 |
+
set { Marshal.ThrowExceptionForHR(Vol().SetMasterVolumeLevelScalar(value, System.Guid.Empty)); } }
|
| 22 |
+
public static bool Mute { get { bool m = false; Marshal.ThrowExceptionForHR(Vol().GetMute(out m)); return m; }
|
| 23 |
+
set { Marshal.ThrowExceptionForHR(Vol().SetMute(value, System.Guid.Empty)); } }
|
| 24 |
+
}
|
| 25 |
+
"@; '''
|
| 26 |
+
|
| 27 |
+
WIN_KEYS = r'''Add-Type -TypeDefinition @"
|
| 28 |
+
using System; using System.Runtime.InteropServices;
|
| 29 |
+
public class K { [DllImport("user32.dll")] public static extern void keybd_event(byte vk, byte scan, int flags, int extra);
|
| 30 |
+
public static void Press(byte[] vks){ foreach(var v in vks) keybd_event(v,0,0,0); Array.Reverse(vks); foreach(var v in vks) keybd_event(v,0,2,0);} }
|
| 31 |
+
"@; '''
|
| 32 |
+
|
| 33 |
+
WIN_BT = r'''Add-Type -AssemblyName System.Runtime.WindowsRuntime
|
| 34 |
+
$asTask = ([System.WindowsRuntimeSystemExtensions].GetMethods() | ? { $_.Name -eq 'AsTask' -and $_.GetParameters().Count -eq 1 -and $_.GetParameters()[0].ParameterType.Name -eq 'IAsyncOperation`1' })[0]
|
| 35 |
+
Function Await($t, $rt) { $n = $asTask.MakeGenericMethod($rt).Invoke($null, @($t)); $n.Wait(-1) | Out-Null; $n.Result }
|
| 36 |
+
[Windows.Devices.Radios.Radio,Windows.System.Devices,ContentType=WindowsRuntime] | Out-Null
|
| 37 |
+
[Windows.Devices.Radios.RadioAccessStatus,Windows.System.Devices,ContentType=WindowsRuntime] | Out-Null
|
| 38 |
+
Await ([Windows.Devices.Radios.Radio]::RequestAccessAsync()) ([Windows.Devices.Radios.RadioAccessStatus]) | Out-Null
|
| 39 |
+
$radios = Await ([Windows.Devices.Radios.Radio]::GetRadiosAsync()) ([System.Collections.Generic.IReadOnlyList[Windows.Devices.Radios.Radio]])
|
| 40 |
+
$bt = $radios | ? { $_.Kind -eq 'Bluetooth' }
|
| 41 |
+
[Windows.Devices.Radios.RadioState,Windows.System.Devices,ContentType=WindowsRuntime] | Out-Null
|
| 42 |
+
Await ($bt.SetStateAsync('STATE')) ([Windows.Devices.Radios.RadioAccessStatus]) | Out-Null'''
|
| 43 |
+
|
| 44 |
+
WIN_SCREENSHOT = r'''Add-Type -AssemblyName System.Windows.Forms,System.Drawing;
|
| 45 |
+
$b=[System.Windows.Forms.SystemInformation]::VirtualScreen; $bmp=New-Object System.Drawing.Bitmap $b.Width,$b.Height;
|
| 46 |
+
$g=[System.Drawing.Graphics]::FromImage($bmp); $g.CopyFromScreen($b.Left,$b.Top,0,0,$bmp.Size);
|
| 47 |
+
$p="$env:USERPROFILE\Pictures\screenshot_$(Get-Date -f yyyyMMdd_HHmmss).png"; $bmp.Save($p); "saved $p"'''
|
| 48 |
+
|
| 49 |
+
VK = {"ctrl": 0x11, "alt": 0x12, "shift": 0x10, "win": 0x5B, "tab": 0x09, "f4": 0x73, "f5": 0x74, "up": 0x26, "down": 0x28,
|
| 50 |
+
"left": 0x25, "right": 0x27, "plus": 0xBB, "minus": 0xBD, "0": 0x30, "a": 0x41, "c": 0x43, "d": 0x44, "s": 0x53,
|
| 51 |
+
"t": 0x54, "v": 0x56, "w": 0x57, "x": 0x58, "y": 0x59, "z": 0x5A, "media_play_pause": 0xB3, "media_next": 0xB0,
|
| 52 |
+
"media_prev": 0xB1, "vol_up": 0xAF, "vol_down": 0xAE, "vol_mute": 0xAD}
|
| 53 |
+
|
| 54 |
+
XDO = {"ctrl": "ctrl", "alt": "alt", "shift": "shift", "super": "super", "win": "super", "tab": "Tab", "f4": "F4", "f5": "F5",
|
| 55 |
+
"up": "Up", "down": "Down", "left": "Left", "right": "Right", "plus": "plus", "minus": "minus", "h": "h", "d": "d"}
|
| 56 |
+
|
| 57 |
+
WIN_PROC = {"chrome": "chrome.exe", "firefox": "firefox.exe", "edge": "msedge.exe", "notepad": "notepad.exe",
|
| 58 |
+
"calculator": "CalculatorApp.exe", "paint": "mspaint.exe", "word": "WINWORD.EXE", "excel": "EXCEL.EXE",
|
| 59 |
+
"powerpoint": "POWERPNT.EXE", "outlook": "OUTLOOK.EXE", "teams": "ms-teams.exe", "vscode": "Code.exe",
|
| 60 |
+
"terminal": "WindowsTerminal.exe", "cmd": "cmd.exe", "powershell": "powershell.exe", "file_explorer": None,
|
| 61 |
+
"task_manager": "Taskmgr.exe", "control_panel": None, "spotify": "Spotify.exe", "vlc": "vlc.exe",
|
| 62 |
+
"media_player": "wmplayer.exe", "whatsapp": "WhatsApp.exe", "telegram": "Telegram.exe", "zoom": "Zoom.exe",
|
| 63 |
+
"discord": "Discord.exe", "slack": "slack.exe", "camera": "WindowsCamera.exe", "photos": "Photos.exe",
|
| 64 |
+
"calendar": "HxOutlook.exe", "clock": "Time.exe", "snipping_tool": "SnippingTool.exe", "store": "WinStore.App.exe",
|
| 65 |
+
"obs": "obs64.exe", "steam": "steam.exe", "onenote": "ONENOTE.EXE", "sticky_notes": "Microsoft.Notes.exe"}
|
| 66 |
+
|
| 67 |
+
PI_PROC = {"chrome": "chromium", "chromium": "chromium", "firefox": "firefox", "notepad": "mousepad", "calculator": "galculator",
|
| 68 |
+
"word": "soffice", "excel": "soffice", "powerpoint": "soffice", "vscode": "code", "terminal": "lxterminal",
|
| 69 |
+
"cmd": "lxterminal", "file_explorer": "pcmanfm", "task_manager": "lxtask", "vlc": "vlc", "media_player": "vlc",
|
| 70 |
+
"telegram": "telegram-desktop", "camera": "rpicam-hello", "photos": "gpicview", "obs": "obs", "thonny": "thonny"}
|
| 71 |
+
|
| 72 |
+
APPS = {
|
| 73 |
+
"chrome": {
|
| 74 |
+
"win": "start chrome",
|
| 75 |
+
"pi": "chromium-browser &"
|
| 76 |
+
},
|
| 77 |
+
"firefox": {
|
| 78 |
+
"win": "start firefox",
|
| 79 |
+
"pi": "firefox &"
|
| 80 |
+
},
|
| 81 |
+
"edge": {
|
| 82 |
+
"win": "start msedge",
|
| 83 |
+
"pi": None
|
| 84 |
+
},
|
| 85 |
+
"chromium": {
|
| 86 |
+
"win": None,
|
| 87 |
+
"pi": "chromium-browser &"
|
| 88 |
+
},
|
| 89 |
+
"notepad": {
|
| 90 |
+
"win": "notepad",
|
| 91 |
+
"pi": "mousepad &"
|
| 92 |
+
},
|
| 93 |
+
"calculator": {
|
| 94 |
+
"win": "calc",
|
| 95 |
+
"pi": "galculator &"
|
| 96 |
+
},
|
| 97 |
+
"paint": {
|
| 98 |
+
"win": "start mspaint",
|
| 99 |
+
"pi": None
|
| 100 |
+
},
|
| 101 |
+
"word": {
|
| 102 |
+
"win": "start winword",
|
| 103 |
+
"pi": "libreoffice --writer &"
|
| 104 |
+
},
|
| 105 |
+
"excel": {
|
| 106 |
+
"win": "start excel",
|
| 107 |
+
"pi": "libreoffice --calc &"
|
| 108 |
+
},
|
| 109 |
+
"powerpoint": {
|
| 110 |
+
"win": "start powerpnt",
|
| 111 |
+
"pi": "libreoffice --impress &"
|
| 112 |
+
},
|
| 113 |
+
"outlook": {
|
| 114 |
+
"win": "start outlook",
|
| 115 |
+
"pi": None
|
| 116 |
+
},
|
| 117 |
+
"teams": {
|
| 118 |
+
"win": "start msteams:",
|
| 119 |
+
"pi": None
|
| 120 |
+
},
|
| 121 |
+
"vscode": {
|
| 122 |
+
"win": "code",
|
| 123 |
+
"pi": "code &"
|
| 124 |
+
},
|
| 125 |
+
"terminal": {
|
| 126 |
+
"win": "start wt || start cmd",
|
| 127 |
+
"pi": "x-terminal-emulator &"
|
| 128 |
+
},
|
| 129 |
+
"cmd": {
|
| 130 |
+
"win": "start cmd",
|
| 131 |
+
"pi": "lxterminal &"
|
| 132 |
+
},
|
| 133 |
+
"powershell": {
|
| 134 |
+
"win": "start powershell",
|
| 135 |
+
"pi": None
|
| 136 |
+
},
|
| 137 |
+
"file_explorer": {
|
| 138 |
+
"win": "explorer.exe",
|
| 139 |
+
"pi": "xdg-open ~ &"
|
| 140 |
+
},
|
| 141 |
+
"task_manager": {
|
| 142 |
+
"win": "taskmgr",
|
| 143 |
+
"pi": "x-terminal-emulator -e htop &"
|
| 144 |
+
},
|
| 145 |
+
"control_panel": {
|
| 146 |
+
"win": "start control",
|
| 147 |
+
"pi": None
|
| 148 |
+
},
|
| 149 |
+
"spotify": {
|
| 150 |
+
"win": "start spotify:",
|
| 151 |
+
"pi": None
|
| 152 |
+
},
|
| 153 |
+
"vlc": {
|
| 154 |
+
"win": "start vlc",
|
| 155 |
+
"pi": "vlc &"
|
| 156 |
+
},
|
| 157 |
+
"media_player": {
|
| 158 |
+
"win": "start wmplayer",
|
| 159 |
+
"pi": "vlc &"
|
| 160 |
+
},
|
| 161 |
+
"whatsapp": {
|
| 162 |
+
"win": "start whatsapp:",
|
| 163 |
+
"pi": None
|
| 164 |
+
},
|
| 165 |
+
"telegram": {
|
| 166 |
+
"win": "start tg:",
|
| 167 |
+
"pi": "telegram-desktop &"
|
| 168 |
+
},
|
| 169 |
+
"zoom": {
|
| 170 |
+
"win": "start zoommtg:",
|
| 171 |
+
"pi": None
|
| 172 |
+
},
|
| 173 |
+
"discord": {
|
| 174 |
+
"win": "start discord:",
|
| 175 |
+
"pi": None
|
| 176 |
+
},
|
| 177 |
+
"slack": {
|
| 178 |
+
"win": "start slack:",
|
| 179 |
+
"pi": None
|
| 180 |
+
},
|
| 181 |
+
"camera": {
|
| 182 |
+
"win": "start microsoft.windows.camera:",
|
| 183 |
+
"pi": "rpicam-hello -t 0 &"
|
| 184 |
+
},
|
| 185 |
+
"photos": {
|
| 186 |
+
"win": "start ms-photos:",
|
| 187 |
+
"pi": "gpicview &"
|
| 188 |
+
},
|
| 189 |
+
"calendar": {
|
| 190 |
+
"win": "start outlookcal:",
|
| 191 |
+
"pi": None
|
| 192 |
+
},
|
| 193 |
+
"clock": {
|
| 194 |
+
"win": "start ms-clock:",
|
| 195 |
+
"pi": None
|
| 196 |
+
},
|
| 197 |
+
"snipping_tool": {
|
| 198 |
+
"win": "start ms-screenclip:",
|
| 199 |
+
"pi": None
|
| 200 |
+
},
|
| 201 |
+
"store": {
|
| 202 |
+
"win": "start ms-windows-store:",
|
| 203 |
+
"pi": None
|
| 204 |
+
},
|
| 205 |
+
"obs": {
|
| 206 |
+
"win": "start obs64",
|
| 207 |
+
"pi": "obs &"
|
| 208 |
+
},
|
| 209 |
+
"steam": {
|
| 210 |
+
"win": "start steam:",
|
| 211 |
+
"pi": None
|
| 212 |
+
},
|
| 213 |
+
"onenote": {
|
| 214 |
+
"win": "start onenote:",
|
| 215 |
+
"pi": None
|
| 216 |
+
},
|
| 217 |
+
"thonny": {
|
| 218 |
+
"win": None,
|
| 219 |
+
"pi": "thonny &"
|
| 220 |
+
},
|
| 221 |
+
"sticky_notes": {
|
| 222 |
+
"win": "start ms-stickynotes:",
|
| 223 |
+
"pi": None
|
| 224 |
+
},
|
| 225 |
+
"browser": {
|
| 226 |
+
"win": "start msedge",
|
| 227 |
+
"pi": "chromium-browser &"
|
| 228 |
+
},
|
| 229 |
+
"disk_management": {
|
| 230 |
+
"win": "diskmgmt.msc",
|
| 231 |
+
"pi": "gparted &"
|
| 232 |
+
},
|
| 233 |
+
"signal": {
|
| 234 |
+
"win": "start signal://",
|
| 235 |
+
"pi": "signal-desktop &"
|
| 236 |
+
},
|
| 237 |
+
"sms": {
|
| 238 |
+
"win": None,
|
| 239 |
+
"pi": None
|
| 240 |
+
}
|
| 241 |
+
}
|
| 242 |
+
|
| 243 |
+
SITES = {
|
| 244 |
+
"youtube": "https://www.youtube.com",
|
| 245 |
+
"google": "https://www.google.com",
|
| 246 |
+
"gmail": "https://mail.google.com",
|
| 247 |
+
"facebook": "https://www.facebook.com",
|
| 248 |
+
"instagram": "https://www.instagram.com",
|
| 249 |
+
"twitter": "https://x.com",
|
| 250 |
+
"linkedin": "https://www.linkedin.com",
|
| 251 |
+
"github": "https://github.com",
|
| 252 |
+
"wikipedia": "https://www.wikipedia.org",
|
| 253 |
+
"amazon": "https://www.amazon.in",
|
| 254 |
+
"flipkart": "https://www.flipkart.com",
|
| 255 |
+
"netflix": "https://www.netflix.com",
|
| 256 |
+
"hotstar": "https://www.hotstar.com",
|
| 257 |
+
"chatgpt": "https://chatgpt.com",
|
| 258 |
+
"claude": "https://claude.ai",
|
| 259 |
+
"whatsapp_web": "https://web.whatsapp.com",
|
| 260 |
+
"stackoverflow": "https://stackoverflow.com",
|
| 261 |
+
"google_maps": "https://maps.google.com",
|
| 262 |
+
"google_drive": "https://drive.google.com",
|
| 263 |
+
"irctc": "https://www.irctc.co.in"
|
| 264 |
+
}
|
| 265 |
+
|
| 266 |
+
FOLDERS = {
|
| 267 |
+
"downloads": {
|
| 268 |
+
"win": "$env:USERPROFILE\\Downloads",
|
| 269 |
+
"pi": "~/Downloads"
|
| 270 |
+
},
|
| 271 |
+
"documents": {
|
| 272 |
+
"win": "$env:USERPROFILE\\Documents",
|
| 273 |
+
"pi": "~/Documents"
|
| 274 |
+
},
|
| 275 |
+
"desktop": {
|
| 276 |
+
"win": "$env:USERPROFILE\\Desktop",
|
| 277 |
+
"pi": "~/Desktop"
|
| 278 |
+
},
|
| 279 |
+
"pictures": {
|
| 280 |
+
"win": "$env:USERPROFILE\\Pictures",
|
| 281 |
+
"pi": "~/Pictures"
|
| 282 |
+
},
|
| 283 |
+
"music": {
|
| 284 |
+
"win": "$env:USERPROFILE\\Music",
|
| 285 |
+
"pi": "~/Music"
|
| 286 |
+
},
|
| 287 |
+
"videos": {
|
| 288 |
+
"win": "$env:USERPROFILE\\Videos",
|
| 289 |
+
"pi": "~/Videos"
|
| 290 |
+
},
|
| 291 |
+
"home": {
|
| 292 |
+
"win": "$env:USERPROFILE",
|
| 293 |
+
"pi": "~"
|
| 294 |
+
},
|
| 295 |
+
"c_drive": {
|
| 296 |
+
"win": "C:\\",
|
| 297 |
+
"pi": "/"
|
| 298 |
+
},
|
| 299 |
+
"d_drive": {
|
| 300 |
+
"win": "D:\\",
|
| 301 |
+
"pi": "/mnt"
|
| 302 |
+
}
|
| 303 |
+
}
|
| 304 |
+
|
| 305 |
+
SETTINGS_PAGES = {
|
| 306 |
+
"display": "ms-settings:display",
|
| 307 |
+
"sound": "ms-settings:sound",
|
| 308 |
+
"bluetooth": "ms-settings:bluetooth",
|
| 309 |
+
"wifi": "ms-settings:network-wifi",
|
| 310 |
+
"network": "ms-settings:network",
|
| 311 |
+
"battery": "ms-settings:batterysaver",
|
| 312 |
+
"power": "ms-settings:powersleep",
|
| 313 |
+
"update": "ms-settings:windowsupdate",
|
| 314 |
+
"apps": "ms-settings:appsfeatures",
|
| 315 |
+
"privacy": "ms-settings:privacy",
|
| 316 |
+
"notifications": "ms-settings:notifications",
|
| 317 |
+
"personalization": "ms-settings:personalization",
|
| 318 |
+
"date_time": "ms-settings:dateandtime",
|
| 319 |
+
"language": "ms-settings:regionlanguage",
|
| 320 |
+
"keyboard": "ms-settings:typing",
|
| 321 |
+
"mouse": "ms-settings:mousetouchpad",
|
| 322 |
+
"storage": "ms-settings:storagesense",
|
| 323 |
+
"accounts": "ms-settings:yourinfo",
|
| 324 |
+
"about": "ms-settings:about",
|
| 325 |
+
"default_apps": "ms-settings:defaultapps",
|
| 326 |
+
"printers": "ms-settings:printers"
|
| 327 |
+
}
|
| 328 |
+
|
| 329 |
+
SERVICE_UNITS = {"ssh": "ssh", "vnc": "vncserver-x11-serviced", "apache": "apache2", "nginx": "nginx", "docker": "docker", "bluetooth": "bluetooth", "cron": "cron", "mysql": "mariadb", "samba": "smbd", "mosquitto": "mosquitto", "nodered": "nodered", "pihole": "pihole-FTL", "spooler": "cups", "w32time": "systemd-timesyncd", "sshd": "ssh"}
|
| 330 |
+
|
| 331 |
+
WIN_SERVICES = {"spooler": "Spooler", "w32time": "W32Time", "ssh": "sshd", "docker": "com.docker.service", "mysql": "MySQL", "apache": "Apache2.4", "nginx": "nginx", "bluetooth": "bthserv", "cron": "Schedule", "vnc": "tvnserver", "samba": "LanmanServer", "mosquitto": "mosquitto", "nodered": "nodered", "pihole": "pihole"}
|
| 332 |
+
|
| 333 |
+
DISPLAY_MODES = {"pc_only": "DisplaySwitch.exe /internal", "duplicate": "DisplaySwitch.exe /clone", "extend": "DisplaySwitch.exe /extend", "second_only": "DisplaySwitch.exe /external"}
|
model/catalog.json
ADDED
|
@@ -0,0 +1,5539 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"actions": {
|
| 3 |
+
"add_persistent_mount": {
|
| 4 |
+
"slots": [
|
| 5 |
+
"device"
|
| 6 |
+
],
|
| 7 |
+
"optional": [],
|
| 8 |
+
"risk": "caution",
|
| 9 |
+
"needs_sudo": true,
|
| 10 |
+
"platforms": [
|
| 11 |
+
"pi",
|
| 12 |
+
"windows"
|
| 13 |
+
],
|
| 14 |
+
"desc": "Add an fstab mount",
|
| 15 |
+
"executable": true
|
| 16 |
+
},
|
| 17 |
+
"airplane_mode_off": {
|
| 18 |
+
"slots": [],
|
| 19 |
+
"optional": [],
|
| 20 |
+
"risk": "safe",
|
| 21 |
+
"needs_sudo": false,
|
| 22 |
+
"platforms": [
|
| 23 |
+
"pi",
|
| 24 |
+
"windows"
|
| 25 |
+
],
|
| 26 |
+
"desc": "Airplane mode off",
|
| 27 |
+
"executable": true
|
| 28 |
+
},
|
| 29 |
+
"airplane_mode_on": {
|
| 30 |
+
"slots": [],
|
| 31 |
+
"optional": [],
|
| 32 |
+
"risk": "caution",
|
| 33 |
+
"needs_sudo": false,
|
| 34 |
+
"platforms": [
|
| 35 |
+
"pi",
|
| 36 |
+
"windows"
|
| 37 |
+
],
|
| 38 |
+
"desc": "Airplane mode on (all radios off)",
|
| 39 |
+
"executable": true
|
| 40 |
+
},
|
| 41 |
+
"antivirus_scan": {
|
| 42 |
+
"slots": [],
|
| 43 |
+
"optional": [],
|
| 44 |
+
"risk": "caution",
|
| 45 |
+
"needs_sudo": false,
|
| 46 |
+
"platforms": [
|
| 47 |
+
"pi",
|
| 48 |
+
"windows"
|
| 49 |
+
],
|
| 50 |
+
"desc": "Run a quick antivirus scan",
|
| 51 |
+
"executable": true
|
| 52 |
+
},
|
| 53 |
+
"attach_session": {
|
| 54 |
+
"slots": [
|
| 55 |
+
"name"
|
| 56 |
+
],
|
| 57 |
+
"optional": [],
|
| 58 |
+
"risk": "safe",
|
| 59 |
+
"needs_sudo": false,
|
| 60 |
+
"platforms": [
|
| 61 |
+
"pi",
|
| 62 |
+
"windows"
|
| 63 |
+
],
|
| 64 |
+
"desc": "Attach to a session",
|
| 65 |
+
"executable": true
|
| 66 |
+
},
|
| 67 |
+
"backup_disk_image": {
|
| 68 |
+
"slots": [
|
| 69 |
+
"device"
|
| 70 |
+
],
|
| 71 |
+
"optional": [],
|
| 72 |
+
"risk": "critical",
|
| 73 |
+
"needs_sudo": true,
|
| 74 |
+
"platforms": [
|
| 75 |
+
"pi",
|
| 76 |
+
"windows"
|
| 77 |
+
],
|
| 78 |
+
"desc": "Image-backup a disk",
|
| 79 |
+
"executable": true
|
| 80 |
+
},
|
| 81 |
+
"battery_saver_off": {
|
| 82 |
+
"slots": [],
|
| 83 |
+
"optional": [],
|
| 84 |
+
"risk": "safe",
|
| 85 |
+
"needs_sudo": false,
|
| 86 |
+
"platforms": [
|
| 87 |
+
"pi",
|
| 88 |
+
"windows"
|
| 89 |
+
],
|
| 90 |
+
"desc": "Turn off battery saver",
|
| 91 |
+
"executable": true
|
| 92 |
+
},
|
| 93 |
+
"battery_saver_on": {
|
| 94 |
+
"slots": [],
|
| 95 |
+
"optional": [],
|
| 96 |
+
"risk": "safe",
|
| 97 |
+
"needs_sudo": false,
|
| 98 |
+
"platforms": [
|
| 99 |
+
"pi",
|
| 100 |
+
"windows"
|
| 101 |
+
],
|
| 102 |
+
"desc": "Turn on battery saver",
|
| 103 |
+
"executable": true
|
| 104 |
+
},
|
| 105 |
+
"bcm_to_board": {
|
| 106 |
+
"slots": [
|
| 107 |
+
"pin"
|
| 108 |
+
],
|
| 109 |
+
"optional": [],
|
| 110 |
+
"risk": "safe",
|
| 111 |
+
"needs_sudo": false,
|
| 112 |
+
"platforms": [
|
| 113 |
+
"pi"
|
| 114 |
+
],
|
| 115 |
+
"desc": "Convert BCM GPIO number to physical header pin",
|
| 116 |
+
"executable": true
|
| 117 |
+
},
|
| 118 |
+
"bluetooth_connect": {
|
| 119 |
+
"slots": [
|
| 120 |
+
"device"
|
| 121 |
+
],
|
| 122 |
+
"optional": [],
|
| 123 |
+
"risk": "safe",
|
| 124 |
+
"needs_sudo": false,
|
| 125 |
+
"platforms": [
|
| 126 |
+
"pi",
|
| 127 |
+
"windows"
|
| 128 |
+
],
|
| 129 |
+
"desc": "Connect a paired Bluetooth device",
|
| 130 |
+
"executable": true
|
| 131 |
+
},
|
| 132 |
+
"bluetooth_off": {
|
| 133 |
+
"slots": [],
|
| 134 |
+
"optional": [],
|
| 135 |
+
"risk": "caution",
|
| 136 |
+
"needs_sudo": false,
|
| 137 |
+
"platforms": [
|
| 138 |
+
"pi",
|
| 139 |
+
"windows"
|
| 140 |
+
],
|
| 141 |
+
"desc": "Turn Bluetooth off",
|
| 142 |
+
"executable": true
|
| 143 |
+
},
|
| 144 |
+
"bluetooth_on": {
|
| 145 |
+
"slots": [],
|
| 146 |
+
"optional": [],
|
| 147 |
+
"risk": "caution",
|
| 148 |
+
"needs_sudo": false,
|
| 149 |
+
"platforms": [
|
| 150 |
+
"pi",
|
| 151 |
+
"windows"
|
| 152 |
+
],
|
| 153 |
+
"desc": "Turn Bluetooth on",
|
| 154 |
+
"executable": true
|
| 155 |
+
},
|
| 156 |
+
"board_to_bcm": {
|
| 157 |
+
"slots": [
|
| 158 |
+
"pin",
|
| 159 |
+
"numbering"
|
| 160 |
+
],
|
| 161 |
+
"optional": [],
|
| 162 |
+
"risk": "safe",
|
| 163 |
+
"needs_sudo": false,
|
| 164 |
+
"platforms": [
|
| 165 |
+
"pi"
|
| 166 |
+
],
|
| 167 |
+
"desc": "Convert physical header pin to BCM GPIO number",
|
| 168 |
+
"executable": true
|
| 169 |
+
},
|
| 170 |
+
"bookmark_page": {
|
| 171 |
+
"slots": [],
|
| 172 |
+
"optional": [],
|
| 173 |
+
"risk": "safe",
|
| 174 |
+
"needs_sudo": false,
|
| 175 |
+
"platforms": [
|
| 176 |
+
"pi",
|
| 177 |
+
"windows"
|
| 178 |
+
],
|
| 179 |
+
"desc": "Bookmark current page",
|
| 180 |
+
"executable": true
|
| 181 |
+
},
|
| 182 |
+
"brightness_down": {
|
| 183 |
+
"slots": [],
|
| 184 |
+
"optional": [
|
| 185 |
+
"step"
|
| 186 |
+
],
|
| 187 |
+
"risk": "safe",
|
| 188 |
+
"needs_sudo": false,
|
| 189 |
+
"platforms": [
|
| 190 |
+
"pi",
|
| 191 |
+
"windows"
|
| 192 |
+
],
|
| 193 |
+
"desc": "Decrease brightness (default step 10)",
|
| 194 |
+
"executable": true
|
| 195 |
+
},
|
| 196 |
+
"brightness_up": {
|
| 197 |
+
"slots": [],
|
| 198 |
+
"optional": [
|
| 199 |
+
"step"
|
| 200 |
+
],
|
| 201 |
+
"risk": "safe",
|
| 202 |
+
"needs_sudo": false,
|
| 203 |
+
"platforms": [
|
| 204 |
+
"pi",
|
| 205 |
+
"windows"
|
| 206 |
+
],
|
| 207 |
+
"desc": "Increase brightness (default step 10)",
|
| 208 |
+
"executable": true
|
| 209 |
+
},
|
| 210 |
+
"browser_back": {
|
| 211 |
+
"slots": [],
|
| 212 |
+
"optional": [],
|
| 213 |
+
"risk": "safe",
|
| 214 |
+
"needs_sudo": false,
|
| 215 |
+
"platforms": [
|
| 216 |
+
"pi",
|
| 217 |
+
"windows"
|
| 218 |
+
],
|
| 219 |
+
"desc": "Browser back",
|
| 220 |
+
"executable": true
|
| 221 |
+
},
|
| 222 |
+
"browser_forward": {
|
| 223 |
+
"slots": [],
|
| 224 |
+
"optional": [],
|
| 225 |
+
"risk": "safe",
|
| 226 |
+
"needs_sudo": false,
|
| 227 |
+
"platforms": [
|
| 228 |
+
"pi",
|
| 229 |
+
"windows"
|
| 230 |
+
],
|
| 231 |
+
"desc": "Browser forward",
|
| 232 |
+
"executable": true
|
| 233 |
+
},
|
| 234 |
+
"build_project": {
|
| 235 |
+
"slots": [
|
| 236 |
+
"path"
|
| 237 |
+
],
|
| 238 |
+
"optional": [],
|
| 239 |
+
"risk": "caution",
|
| 240 |
+
"needs_sudo": false,
|
| 241 |
+
"platforms": [
|
| 242 |
+
"pi",
|
| 243 |
+
"windows"
|
| 244 |
+
],
|
| 245 |
+
"desc": "Build/compile a project",
|
| 246 |
+
"executable": true
|
| 247 |
+
},
|
| 248 |
+
"calculate": {
|
| 249 |
+
"slots": [
|
| 250 |
+
"expression"
|
| 251 |
+
],
|
| 252 |
+
"optional": [],
|
| 253 |
+
"risk": "safe",
|
| 254 |
+
"needs_sudo": false,
|
| 255 |
+
"platforms": [
|
| 256 |
+
"pi",
|
| 257 |
+
"windows"
|
| 258 |
+
],
|
| 259 |
+
"desc": "Evaluate an arithmetic expression",
|
| 260 |
+
"executable": true
|
| 261 |
+
},
|
| 262 |
+
"camera_photo": {
|
| 263 |
+
"slots": [],
|
| 264 |
+
"optional": [],
|
| 265 |
+
"risk": "safe",
|
| 266 |
+
"needs_sudo": false,
|
| 267 |
+
"platforms": [
|
| 268 |
+
"pi",
|
| 269 |
+
"windows"
|
| 270 |
+
],
|
| 271 |
+
"desc": "Take a photo with the camera",
|
| 272 |
+
"executable": true
|
| 273 |
+
},
|
| 274 |
+
"camera_video": {
|
| 275 |
+
"slots": [
|
| 276 |
+
"amount",
|
| 277 |
+
"unit"
|
| 278 |
+
],
|
| 279 |
+
"optional": [],
|
| 280 |
+
"risk": "safe",
|
| 281 |
+
"needs_sudo": false,
|
| 282 |
+
"platforms": [
|
| 283 |
+
"pi"
|
| 284 |
+
],
|
| 285 |
+
"desc": "Record video for a duration",
|
| 286 |
+
"executable": true
|
| 287 |
+
},
|
| 288 |
+
"cancel_alarm": {
|
| 289 |
+
"slots": [],
|
| 290 |
+
"optional": [],
|
| 291 |
+
"risk": "safe",
|
| 292 |
+
"needs_sudo": false,
|
| 293 |
+
"platforms": [
|
| 294 |
+
"pi",
|
| 295 |
+
"windows"
|
| 296 |
+
],
|
| 297 |
+
"desc": "Cancel alarm",
|
| 298 |
+
"executable": true
|
| 299 |
+
},
|
| 300 |
+
"cancel_shutdown": {
|
| 301 |
+
"slots": [],
|
| 302 |
+
"optional": [],
|
| 303 |
+
"risk": "caution",
|
| 304 |
+
"needs_sudo": false,
|
| 305 |
+
"platforms": [
|
| 306 |
+
"pi",
|
| 307 |
+
"windows"
|
| 308 |
+
],
|
| 309 |
+
"desc": "Cancel a scheduled shutdown/restart",
|
| 310 |
+
"executable": true
|
| 311 |
+
},
|
| 312 |
+
"cancel_timer": {
|
| 313 |
+
"slots": [],
|
| 314 |
+
"optional": [],
|
| 315 |
+
"risk": "safe",
|
| 316 |
+
"needs_sudo": false,
|
| 317 |
+
"platforms": [
|
| 318 |
+
"pi",
|
| 319 |
+
"windows"
|
| 320 |
+
],
|
| 321 |
+
"desc": "Cancel timer",
|
| 322 |
+
"executable": true
|
| 323 |
+
},
|
| 324 |
+
"check_ai_accelerator": {
|
| 325 |
+
"slots": [],
|
| 326 |
+
"optional": [],
|
| 327 |
+
"risk": "safe",
|
| 328 |
+
"needs_sudo": false,
|
| 329 |
+
"platforms": [
|
| 330 |
+
"pi"
|
| 331 |
+
],
|
| 332 |
+
"desc": "Detect AI HAT / Hailo NPU",
|
| 333 |
+
"executable": true
|
| 334 |
+
},
|
| 335 |
+
"check_filesystem": {
|
| 336 |
+
"slots": [
|
| 337 |
+
"device"
|
| 338 |
+
],
|
| 339 |
+
"optional": [],
|
| 340 |
+
"risk": "critical",
|
| 341 |
+
"needs_sudo": true,
|
| 342 |
+
"platforms": [
|
| 343 |
+
"pi",
|
| 344 |
+
"windows"
|
| 345 |
+
],
|
| 346 |
+
"desc": "fsck a filesystem",
|
| 347 |
+
"executable": true
|
| 348 |
+
},
|
| 349 |
+
"check_port": {
|
| 350 |
+
"slots": [
|
| 351 |
+
"host",
|
| 352 |
+
"port"
|
| 353 |
+
],
|
| 354 |
+
"optional": [],
|
| 355 |
+
"risk": "safe",
|
| 356 |
+
"needs_sudo": false,
|
| 357 |
+
"platforms": [
|
| 358 |
+
"pi",
|
| 359 |
+
"windows"
|
| 360 |
+
],
|
| 361 |
+
"desc": "Check if a TCP port is open on a host",
|
| 362 |
+
"executable": true
|
| 363 |
+
},
|
| 364 |
+
"check_updates": {
|
| 365 |
+
"slots": [],
|
| 366 |
+
"optional": [],
|
| 367 |
+
"risk": "safe",
|
| 368 |
+
"needs_sudo": false,
|
| 369 |
+
"platforms": [
|
| 370 |
+
"pi",
|
| 371 |
+
"windows"
|
| 372 |
+
],
|
| 373 |
+
"desc": "Check for OS updates",
|
| 374 |
+
"executable": true
|
| 375 |
+
},
|
| 376 |
+
"clarify": {
|
| 377 |
+
"slots": [],
|
| 378 |
+
"optional": [
|
| 379 |
+
"action"
|
| 380 |
+
],
|
| 381 |
+
"risk": "safe",
|
| 382 |
+
"needs_sudo": false,
|
| 383 |
+
"platforms": [
|
| 384 |
+
"pi",
|
| 385 |
+
"windows"
|
| 386 |
+
],
|
| 387 |
+
"desc": "Recognised request but a required value is missing/invalid or the target is ambiguous; ask the user",
|
| 388 |
+
"executable": true
|
| 389 |
+
},
|
| 390 |
+
"clear_notifications": {
|
| 391 |
+
"slots": [],
|
| 392 |
+
"optional": [],
|
| 393 |
+
"risk": "safe",
|
| 394 |
+
"needs_sudo": false,
|
| 395 |
+
"platforms": [
|
| 396 |
+
"pi",
|
| 397 |
+
"windows"
|
| 398 |
+
],
|
| 399 |
+
"desc": "Clear notifications",
|
| 400 |
+
"executable": true
|
| 401 |
+
},
|
| 402 |
+
"clear_temp_files": {
|
| 403 |
+
"slots": [],
|
| 404 |
+
"optional": [],
|
| 405 |
+
"risk": "critical",
|
| 406 |
+
"needs_sudo": false,
|
| 407 |
+
"platforms": [
|
| 408 |
+
"pi",
|
| 409 |
+
"windows"
|
| 410 |
+
],
|
| 411 |
+
"desc": "Delete temporary files",
|
| 412 |
+
"executable": true
|
| 413 |
+
},
|
| 414 |
+
"clipboard_history": {
|
| 415 |
+
"slots": [],
|
| 416 |
+
"optional": [],
|
| 417 |
+
"risk": "safe",
|
| 418 |
+
"needs_sudo": false,
|
| 419 |
+
"platforms": [
|
| 420 |
+
"pi",
|
| 421 |
+
"windows"
|
| 422 |
+
],
|
| 423 |
+
"desc": "Open clipboard history",
|
| 424 |
+
"executable": true
|
| 425 |
+
},
|
| 426 |
+
"clone_disk": {
|
| 427 |
+
"slots": [
|
| 428 |
+
"device"
|
| 429 |
+
],
|
| 430 |
+
"optional": [],
|
| 431 |
+
"risk": "critical",
|
| 432 |
+
"needs_sudo": true,
|
| 433 |
+
"platforms": [
|
| 434 |
+
"pi",
|
| 435 |
+
"windows"
|
| 436 |
+
],
|
| 437 |
+
"desc": "Clone the system to another disk",
|
| 438 |
+
"executable": true
|
| 439 |
+
},
|
| 440 |
+
"close_app": {
|
| 441 |
+
"slots": [
|
| 442 |
+
"app"
|
| 443 |
+
],
|
| 444 |
+
"optional": [],
|
| 445 |
+
"risk": "caution",
|
| 446 |
+
"needs_sudo": false,
|
| 447 |
+
"platforms": [
|
| 448 |
+
"pi",
|
| 449 |
+
"windows"
|
| 450 |
+
],
|
| 451 |
+
"desc": "Close an application (may lose unsaved work)",
|
| 452 |
+
"executable": true
|
| 453 |
+
},
|
| 454 |
+
"close_tab": {
|
| 455 |
+
"slots": [],
|
| 456 |
+
"optional": [],
|
| 457 |
+
"risk": "safe",
|
| 458 |
+
"needs_sudo": false,
|
| 459 |
+
"platforms": [
|
| 460 |
+
"pi",
|
| 461 |
+
"windows"
|
| 462 |
+
],
|
| 463 |
+
"desc": "Close current tab",
|
| 464 |
+
"executable": true
|
| 465 |
+
},
|
| 466 |
+
"close_window": {
|
| 467 |
+
"slots": [],
|
| 468 |
+
"optional": [],
|
| 469 |
+
"risk": "caution",
|
| 470 |
+
"needs_sudo": false,
|
| 471 |
+
"platforms": [
|
| 472 |
+
"pi",
|
| 473 |
+
"windows"
|
| 474 |
+
],
|
| 475 |
+
"desc": "Close current window (Alt+F4)",
|
| 476 |
+
"executable": true
|
| 477 |
+
},
|
| 478 |
+
"compress_file": {
|
| 479 |
+
"slots": [
|
| 480 |
+
"path"
|
| 481 |
+
],
|
| 482 |
+
"optional": [],
|
| 483 |
+
"risk": "safe",
|
| 484 |
+
"needs_sudo": false,
|
| 485 |
+
"platforms": [
|
| 486 |
+
"pi",
|
| 487 |
+
"windows"
|
| 488 |
+
],
|
| 489 |
+
"desc": "Zip a file/folder",
|
| 490 |
+
"executable": true
|
| 491 |
+
},
|
| 492 |
+
"connect_wifi": {
|
| 493 |
+
"slots": [
|
| 494 |
+
"ssid"
|
| 495 |
+
],
|
| 496 |
+
"optional": [
|
| 497 |
+
"password"
|
| 498 |
+
],
|
| 499 |
+
"risk": "caution",
|
| 500 |
+
"needs_sudo": false,
|
| 501 |
+
"platforms": [
|
| 502 |
+
"pi",
|
| 503 |
+
"windows"
|
| 504 |
+
],
|
| 505 |
+
"desc": "Connect to a Wi-Fi network (optional password)",
|
| 506 |
+
"executable": true
|
| 507 |
+
},
|
| 508 |
+
"convert_media": {
|
| 509 |
+
"slots": [
|
| 510 |
+
"file",
|
| 511 |
+
"format"
|
| 512 |
+
],
|
| 513 |
+
"optional": [],
|
| 514 |
+
"risk": "caution",
|
| 515 |
+
"needs_sudo": false,
|
| 516 |
+
"platforms": [
|
| 517 |
+
"pi",
|
| 518 |
+
"windows"
|
| 519 |
+
],
|
| 520 |
+
"desc": "Convert/transcode media",
|
| 521 |
+
"executable": true
|
| 522 |
+
},
|
| 523 |
+
"copy": {
|
| 524 |
+
"slots": [],
|
| 525 |
+
"optional": [],
|
| 526 |
+
"risk": "safe",
|
| 527 |
+
"needs_sudo": false,
|
| 528 |
+
"platforms": [
|
| 529 |
+
"pi",
|
| 530 |
+
"windows"
|
| 531 |
+
],
|
| 532 |
+
"desc": "Copy (Ctrl+C)",
|
| 533 |
+
"executable": true
|
| 534 |
+
},
|
| 535 |
+
"copy_file": {
|
| 536 |
+
"slots": [
|
| 537 |
+
"src",
|
| 538 |
+
"dst"
|
| 539 |
+
],
|
| 540 |
+
"optional": [],
|
| 541 |
+
"risk": "caution",
|
| 542 |
+
"needs_sudo": false,
|
| 543 |
+
"platforms": [
|
| 544 |
+
"pi",
|
| 545 |
+
"windows"
|
| 546 |
+
],
|
| 547 |
+
"desc": "copy file \"{src}\" to \"{dst}\"",
|
| 548 |
+
"executable": true
|
| 549 |
+
},
|
| 550 |
+
"copy_ssh_key": {
|
| 551 |
+
"slots": [
|
| 552 |
+
"host"
|
| 553 |
+
],
|
| 554 |
+
"optional": [],
|
| 555 |
+
"risk": "caution",
|
| 556 |
+
"needs_sudo": false,
|
| 557 |
+
"platforms": [
|
| 558 |
+
"pi",
|
| 559 |
+
"windows"
|
| 560 |
+
],
|
| 561 |
+
"desc": "Install SSH key on a host",
|
| 562 |
+
"executable": true
|
| 563 |
+
},
|
| 564 |
+
"create_calendar_event": {
|
| 565 |
+
"slots": [
|
| 566 |
+
"title",
|
| 567 |
+
"time"
|
| 568 |
+
],
|
| 569 |
+
"optional": [],
|
| 570 |
+
"risk": "safe",
|
| 571 |
+
"needs_sudo": false,
|
| 572 |
+
"platforms": [
|
| 573 |
+
"pi",
|
| 574 |
+
"windows"
|
| 575 |
+
],
|
| 576 |
+
"desc": "Create a calendar event",
|
| 577 |
+
"executable": true
|
| 578 |
+
},
|
| 579 |
+
"create_file": {
|
| 580 |
+
"slots": [
|
| 581 |
+
"path"
|
| 582 |
+
],
|
| 583 |
+
"optional": [],
|
| 584 |
+
"risk": "caution",
|
| 585 |
+
"needs_sudo": false,
|
| 586 |
+
"platforms": [
|
| 587 |
+
"pi",
|
| 588 |
+
"windows"
|
| 589 |
+
],
|
| 590 |
+
"desc": "create empty file \"{path}\"",
|
| 591 |
+
"executable": true
|
| 592 |
+
},
|
| 593 |
+
"create_folder": {
|
| 594 |
+
"slots": [
|
| 595 |
+
"path"
|
| 596 |
+
],
|
| 597 |
+
"optional": [],
|
| 598 |
+
"risk": "caution",
|
| 599 |
+
"needs_sudo": false,
|
| 600 |
+
"platforms": [
|
| 601 |
+
"pi",
|
| 602 |
+
"windows"
|
| 603 |
+
],
|
| 604 |
+
"desc": "Create a new folder on the desktop",
|
| 605 |
+
"executable": true
|
| 606 |
+
},
|
| 607 |
+
"create_service": {
|
| 608 |
+
"slots": [
|
| 609 |
+
"name"
|
| 610 |
+
],
|
| 611 |
+
"optional": [],
|
| 612 |
+
"risk": "critical",
|
| 613 |
+
"needs_sudo": true,
|
| 614 |
+
"platforms": [
|
| 615 |
+
"pi",
|
| 616 |
+
"windows"
|
| 617 |
+
],
|
| 618 |
+
"desc": "Create a systemd service",
|
| 619 |
+
"executable": true
|
| 620 |
+
},
|
| 621 |
+
"create_symlink": {
|
| 622 |
+
"slots": [
|
| 623 |
+
"path",
|
| 624 |
+
"link"
|
| 625 |
+
],
|
| 626 |
+
"optional": [],
|
| 627 |
+
"risk": "caution",
|
| 628 |
+
"needs_sudo": false,
|
| 629 |
+
"platforms": [
|
| 630 |
+
"pi",
|
| 631 |
+
"windows"
|
| 632 |
+
],
|
| 633 |
+
"desc": "Create a symbolic link",
|
| 634 |
+
"executable": true
|
| 635 |
+
},
|
| 636 |
+
"create_virtualenv": {
|
| 637 |
+
"slots": [
|
| 638 |
+
"path"
|
| 639 |
+
],
|
| 640 |
+
"optional": [],
|
| 641 |
+
"risk": "caution",
|
| 642 |
+
"needs_sudo": false,
|
| 643 |
+
"platforms": [
|
| 644 |
+
"pi",
|
| 645 |
+
"windows"
|
| 646 |
+
],
|
| 647 |
+
"desc": "Create a Python virtualenv",
|
| 648 |
+
"executable": true
|
| 649 |
+
},
|
| 650 |
+
"cut": {
|
| 651 |
+
"slots": [],
|
| 652 |
+
"optional": [],
|
| 653 |
+
"risk": "safe",
|
| 654 |
+
"needs_sudo": false,
|
| 655 |
+
"platforms": [
|
| 656 |
+
"pi",
|
| 657 |
+
"windows"
|
| 658 |
+
],
|
| 659 |
+
"desc": "Cut (Ctrl+X)",
|
| 660 |
+
"executable": true
|
| 661 |
+
},
|
| 662 |
+
"dark_mode_off": {
|
| 663 |
+
"slots": [],
|
| 664 |
+
"optional": [],
|
| 665 |
+
"risk": "safe",
|
| 666 |
+
"needs_sudo": false,
|
| 667 |
+
"platforms": [
|
| 668 |
+
"pi",
|
| 669 |
+
"windows"
|
| 670 |
+
],
|
| 671 |
+
"desc": "Switch to light theme",
|
| 672 |
+
"executable": true
|
| 673 |
+
},
|
| 674 |
+
"dark_mode_on": {
|
| 675 |
+
"slots": [],
|
| 676 |
+
"optional": [],
|
| 677 |
+
"risk": "safe",
|
| 678 |
+
"needs_sudo": false,
|
| 679 |
+
"platforms": [
|
| 680 |
+
"pi",
|
| 681 |
+
"windows"
|
| 682 |
+
],
|
| 683 |
+
"desc": "Switch to dark theme",
|
| 684 |
+
"executable": true
|
| 685 |
+
},
|
| 686 |
+
"delete_file": {
|
| 687 |
+
"slots": [
|
| 688 |
+
"path"
|
| 689 |
+
],
|
| 690 |
+
"optional": [],
|
| 691 |
+
"risk": "critical",
|
| 692 |
+
"needs_sudo": false,
|
| 693 |
+
"platforms": [
|
| 694 |
+
"pi",
|
| 695 |
+
"windows"
|
| 696 |
+
],
|
| 697 |
+
"desc": "Delete a file/folder by name (to recycle bin on Windows)",
|
| 698 |
+
"executable": true
|
| 699 |
+
},
|
| 700 |
+
"disable_auto_updates": {
|
| 701 |
+
"slots": [],
|
| 702 |
+
"optional": [],
|
| 703 |
+
"risk": "caution",
|
| 704 |
+
"needs_sudo": true,
|
| 705 |
+
"platforms": [
|
| 706 |
+
"pi",
|
| 707 |
+
"windows"
|
| 708 |
+
],
|
| 709 |
+
"desc": "Disable unattended updates",
|
| 710 |
+
"executable": true
|
| 711 |
+
},
|
| 712 |
+
"discover_devices": {
|
| 713 |
+
"slots": [],
|
| 714 |
+
"optional": [],
|
| 715 |
+
"risk": "safe",
|
| 716 |
+
"needs_sudo": false,
|
| 717 |
+
"platforms": [
|
| 718 |
+
"pi",
|
| 719 |
+
"windows"
|
| 720 |
+
],
|
| 721 |
+
"desc": "Discover mDNS/LAN devices",
|
| 722 |
+
"executable": true
|
| 723 |
+
},
|
| 724 |
+
"display_mode": {
|
| 725 |
+
"slots": [
|
| 726 |
+
"mode"
|
| 727 |
+
],
|
| 728 |
+
"optional": [],
|
| 729 |
+
"risk": "safe",
|
| 730 |
+
"needs_sudo": false,
|
| 731 |
+
"platforms": [
|
| 732 |
+
"pi",
|
| 733 |
+
"windows"
|
| 734 |
+
],
|
| 735 |
+
"desc": "Projection mode: pc_only / duplicate / extend / second_only",
|
| 736 |
+
"executable": true
|
| 737 |
+
},
|
| 738 |
+
"dnd_off": {
|
| 739 |
+
"slots": [],
|
| 740 |
+
"optional": [],
|
| 741 |
+
"risk": "safe",
|
| 742 |
+
"needs_sudo": false,
|
| 743 |
+
"platforms": [
|
| 744 |
+
"pi",
|
| 745 |
+
"windows"
|
| 746 |
+
],
|
| 747 |
+
"desc": "Do not disturb / focus mode off",
|
| 748 |
+
"executable": true
|
| 749 |
+
},
|
| 750 |
+
"dnd_on": {
|
| 751 |
+
"slots": [],
|
| 752 |
+
"optional": [],
|
| 753 |
+
"risk": "safe",
|
| 754 |
+
"needs_sudo": false,
|
| 755 |
+
"platforms": [
|
| 756 |
+
"pi",
|
| 757 |
+
"windows"
|
| 758 |
+
],
|
| 759 |
+
"desc": "Do not disturb / focus mode on",
|
| 760 |
+
"executable": true
|
| 761 |
+
},
|
| 762 |
+
"dns_lookup": {
|
| 763 |
+
"slots": [
|
| 764 |
+
"host"
|
| 765 |
+
],
|
| 766 |
+
"optional": [],
|
| 767 |
+
"risk": "safe",
|
| 768 |
+
"needs_sudo": false,
|
| 769 |
+
"platforms": [
|
| 770 |
+
"pi",
|
| 771 |
+
"windows"
|
| 772 |
+
],
|
| 773 |
+
"desc": "dns lookup {host}",
|
| 774 |
+
"executable": true
|
| 775 |
+
},
|
| 776 |
+
"docker_compose_up": {
|
| 777 |
+
"slots": [],
|
| 778 |
+
"optional": [],
|
| 779 |
+
"risk": "caution",
|
| 780 |
+
"needs_sudo": false,
|
| 781 |
+
"platforms": [
|
| 782 |
+
"pi",
|
| 783 |
+
"windows"
|
| 784 |
+
],
|
| 785 |
+
"desc": "Bring up a compose stack",
|
| 786 |
+
"executable": true
|
| 787 |
+
},
|
| 788 |
+
"docker_list": {
|
| 789 |
+
"slots": [],
|
| 790 |
+
"optional": [],
|
| 791 |
+
"risk": "safe",
|
| 792 |
+
"needs_sudo": false,
|
| 793 |
+
"platforms": [
|
| 794 |
+
"pi",
|
| 795 |
+
"windows"
|
| 796 |
+
],
|
| 797 |
+
"desc": "List containers",
|
| 798 |
+
"executable": true
|
| 799 |
+
},
|
| 800 |
+
"docker_prune": {
|
| 801 |
+
"slots": [],
|
| 802 |
+
"optional": [],
|
| 803 |
+
"risk": "critical",
|
| 804 |
+
"needs_sudo": false,
|
| 805 |
+
"platforms": [
|
| 806 |
+
"pi",
|
| 807 |
+
"windows"
|
| 808 |
+
],
|
| 809 |
+
"desc": "Prune unused docker data",
|
| 810 |
+
"executable": true
|
| 811 |
+
},
|
| 812 |
+
"docker_run": {
|
| 813 |
+
"slots": [
|
| 814 |
+
"image"
|
| 815 |
+
],
|
| 816 |
+
"optional": [],
|
| 817 |
+
"risk": "caution",
|
| 818 |
+
"needs_sudo": false,
|
| 819 |
+
"platforms": [
|
| 820 |
+
"pi",
|
| 821 |
+
"windows"
|
| 822 |
+
],
|
| 823 |
+
"desc": "Run a container from an image",
|
| 824 |
+
"executable": true
|
| 825 |
+
},
|
| 826 |
+
"docker_stop": {
|
| 827 |
+
"slots": [
|
| 828 |
+
"container"
|
| 829 |
+
],
|
| 830 |
+
"optional": [],
|
| 831 |
+
"risk": "caution",
|
| 832 |
+
"needs_sudo": false,
|
| 833 |
+
"platforms": [
|
| 834 |
+
"pi",
|
| 835 |
+
"windows"
|
| 836 |
+
],
|
| 837 |
+
"desc": "Stop a container",
|
| 838 |
+
"executable": true
|
| 839 |
+
},
|
| 840 |
+
"download_file": {
|
| 841 |
+
"slots": [
|
| 842 |
+
"url"
|
| 843 |
+
],
|
| 844 |
+
"optional": [],
|
| 845 |
+
"risk": "caution",
|
| 846 |
+
"needs_sudo": false,
|
| 847 |
+
"platforms": [
|
| 848 |
+
"pi",
|
| 849 |
+
"windows"
|
| 850 |
+
],
|
| 851 |
+
"desc": "Download a file from a URL",
|
| 852 |
+
"executable": true
|
| 853 |
+
},
|
| 854 |
+
"drop_caches": {
|
| 855 |
+
"slots": [],
|
| 856 |
+
"optional": [],
|
| 857 |
+
"risk": "critical",
|
| 858 |
+
"needs_sudo": true,
|
| 859 |
+
"platforms": [
|
| 860 |
+
"pi",
|
| 861 |
+
"windows"
|
| 862 |
+
],
|
| 863 |
+
"desc": "Drop page caches",
|
| 864 |
+
"executable": true
|
| 865 |
+
},
|
| 866 |
+
"edit_system_config": {
|
| 867 |
+
"slots": [],
|
| 868 |
+
"optional": [
|
| 869 |
+
"file"
|
| 870 |
+
],
|
| 871 |
+
"risk": "critical",
|
| 872 |
+
"needs_sudo": true,
|
| 873 |
+
"platforms": [
|
| 874 |
+
"pi",
|
| 875 |
+
"windows"
|
| 876 |
+
],
|
| 877 |
+
"desc": "Edit a system/boot config file",
|
| 878 |
+
"executable": true
|
| 879 |
+
},
|
| 880 |
+
"emoji_panel": {
|
| 881 |
+
"slots": [],
|
| 882 |
+
"optional": [],
|
| 883 |
+
"risk": "safe",
|
| 884 |
+
"needs_sudo": false,
|
| 885 |
+
"platforms": [
|
| 886 |
+
"pi",
|
| 887 |
+
"windows"
|
| 888 |
+
],
|
| 889 |
+
"desc": "Open emoji panel",
|
| 890 |
+
"executable": true
|
| 891 |
+
},
|
| 892 |
+
"empty_recycle_bin": {
|
| 893 |
+
"slots": [],
|
| 894 |
+
"optional": [],
|
| 895 |
+
"risk": "critical",
|
| 896 |
+
"needs_sudo": false,
|
| 897 |
+
"platforms": [
|
| 898 |
+
"pi",
|
| 899 |
+
"windows"
|
| 900 |
+
],
|
| 901 |
+
"desc": "Permanently empty recycle bin / trash",
|
| 902 |
+
"executable": true
|
| 903 |
+
},
|
| 904 |
+
"enable_auto_updates": {
|
| 905 |
+
"slots": [],
|
| 906 |
+
"optional": [],
|
| 907 |
+
"risk": "caution",
|
| 908 |
+
"needs_sudo": true,
|
| 909 |
+
"platforms": [
|
| 910 |
+
"pi",
|
| 911 |
+
"windows"
|
| 912 |
+
],
|
| 913 |
+
"desc": "Enable unattended security updates",
|
| 914 |
+
"executable": true
|
| 915 |
+
},
|
| 916 |
+
"enable_zram": {
|
| 917 |
+
"slots": [],
|
| 918 |
+
"optional": [],
|
| 919 |
+
"risk": "caution",
|
| 920 |
+
"needs_sudo": true,
|
| 921 |
+
"platforms": [
|
| 922 |
+
"pi",
|
| 923 |
+
"windows"
|
| 924 |
+
],
|
| 925 |
+
"desc": "Enable compressed RAM swap",
|
| 926 |
+
"executable": true
|
| 927 |
+
},
|
| 928 |
+
"expand_filesystem": {
|
| 929 |
+
"slots": [],
|
| 930 |
+
"optional": [],
|
| 931 |
+
"risk": "critical",
|
| 932 |
+
"needs_sudo": true,
|
| 933 |
+
"platforms": [
|
| 934 |
+
"pi"
|
| 935 |
+
],
|
| 936 |
+
"desc": "Expand root filesystem",
|
| 937 |
+
"executable": true
|
| 938 |
+
},
|
| 939 |
+
"extract_archive": {
|
| 940 |
+
"slots": [
|
| 941 |
+
"path"
|
| 942 |
+
],
|
| 943 |
+
"optional": [],
|
| 944 |
+
"risk": "safe",
|
| 945 |
+
"needs_sudo": false,
|
| 946 |
+
"platforms": [
|
| 947 |
+
"pi",
|
| 948 |
+
"windows"
|
| 949 |
+
],
|
| 950 |
+
"desc": "Extract an archive",
|
| 951 |
+
"executable": true
|
| 952 |
+
},
|
| 953 |
+
"factory_reset": {
|
| 954 |
+
"slots": [],
|
| 955 |
+
"optional": [],
|
| 956 |
+
"risk": "critical",
|
| 957 |
+
"needs_sudo": true,
|
| 958 |
+
"platforms": [
|
| 959 |
+
"pi",
|
| 960 |
+
"windows"
|
| 961 |
+
],
|
| 962 |
+
"desc": "factory reset computer",
|
| 963 |
+
"executable": true
|
| 964 |
+
},
|
| 965 |
+
"find_command": {
|
| 966 |
+
"slots": [
|
| 967 |
+
"name"
|
| 968 |
+
],
|
| 969 |
+
"optional": [],
|
| 970 |
+
"risk": "safe",
|
| 971 |
+
"needs_sudo": false,
|
| 972 |
+
"platforms": [
|
| 973 |
+
"pi",
|
| 974 |
+
"windows"
|
| 975 |
+
],
|
| 976 |
+
"desc": "Is a command installed / where",
|
| 977 |
+
"executable": true
|
| 978 |
+
},
|
| 979 |
+
"find_in_page": {
|
| 980 |
+
"slots": [
|
| 981 |
+
"query"
|
| 982 |
+
],
|
| 983 |
+
"optional": [],
|
| 984 |
+
"risk": "safe",
|
| 985 |
+
"needs_sudo": false,
|
| 986 |
+
"platforms": [
|
| 987 |
+
"pi",
|
| 988 |
+
"windows"
|
| 989 |
+
],
|
| 990 |
+
"desc": "Find text on page",
|
| 991 |
+
"executable": true
|
| 992 |
+
},
|
| 993 |
+
"firewall_allow": {
|
| 994 |
+
"slots": [
|
| 995 |
+
"port"
|
| 996 |
+
],
|
| 997 |
+
"optional": [],
|
| 998 |
+
"risk": "caution",
|
| 999 |
+
"needs_sudo": true,
|
| 1000 |
+
"platforms": [
|
| 1001 |
+
"pi",
|
| 1002 |
+
"windows"
|
| 1003 |
+
],
|
| 1004 |
+
"desc": "Allow a port",
|
| 1005 |
+
"executable": true
|
| 1006 |
+
},
|
| 1007 |
+
"firewall_deny": {
|
| 1008 |
+
"slots": [
|
| 1009 |
+
"port"
|
| 1010 |
+
],
|
| 1011 |
+
"optional": [],
|
| 1012 |
+
"risk": "critical",
|
| 1013 |
+
"needs_sudo": true,
|
| 1014 |
+
"platforms": [
|
| 1015 |
+
"pi",
|
| 1016 |
+
"windows"
|
| 1017 |
+
],
|
| 1018 |
+
"desc": "Block a port",
|
| 1019 |
+
"executable": true
|
| 1020 |
+
},
|
| 1021 |
+
"firewall_off": {
|
| 1022 |
+
"slots": [],
|
| 1023 |
+
"optional": [],
|
| 1024 |
+
"risk": "critical",
|
| 1025 |
+
"needs_sudo": true,
|
| 1026 |
+
"platforms": [
|
| 1027 |
+
"pi",
|
| 1028 |
+
"windows"
|
| 1029 |
+
],
|
| 1030 |
+
"desc": "Turn firewall OFF (security risk)",
|
| 1031 |
+
"executable": true
|
| 1032 |
+
},
|
| 1033 |
+
"firewall_on": {
|
| 1034 |
+
"slots": [],
|
| 1035 |
+
"optional": [],
|
| 1036 |
+
"risk": "caution",
|
| 1037 |
+
"needs_sudo": true,
|
| 1038 |
+
"platforms": [
|
| 1039 |
+
"pi",
|
| 1040 |
+
"windows"
|
| 1041 |
+
],
|
| 1042 |
+
"desc": "Turn firewall on",
|
| 1043 |
+
"executable": true
|
| 1044 |
+
},
|
| 1045 |
+
"firewall_status": {
|
| 1046 |
+
"slots": [],
|
| 1047 |
+
"optional": [],
|
| 1048 |
+
"risk": "safe",
|
| 1049 |
+
"needs_sudo": false,
|
| 1050 |
+
"platforms": [
|
| 1051 |
+
"pi",
|
| 1052 |
+
"windows"
|
| 1053 |
+
],
|
| 1054 |
+
"desc": "show firewall status",
|
| 1055 |
+
"executable": true
|
| 1056 |
+
},
|
| 1057 |
+
"fix_gpio_permissions": {
|
| 1058 |
+
"slots": [],
|
| 1059 |
+
"optional": [],
|
| 1060 |
+
"risk": "caution",
|
| 1061 |
+
"needs_sudo": true,
|
| 1062 |
+
"platforms": [
|
| 1063 |
+
"pi"
|
| 1064 |
+
],
|
| 1065 |
+
"desc": "Add user to gpio group / fix udev rules",
|
| 1066 |
+
"executable": true
|
| 1067 |
+
},
|
| 1068 |
+
"flash_firmware": {
|
| 1069 |
+
"slots": [],
|
| 1070 |
+
"optional": [],
|
| 1071 |
+
"risk": "critical",
|
| 1072 |
+
"needs_sudo": true,
|
| 1073 |
+
"platforms": [
|
| 1074 |
+
"pi",
|
| 1075 |
+
"windows"
|
| 1076 |
+
],
|
| 1077 |
+
"desc": "Flash firmware / bootloader EEPROM",
|
| 1078 |
+
"executable": true
|
| 1079 |
+
},
|
| 1080 |
+
"flush_dns": {
|
| 1081 |
+
"slots": [],
|
| 1082 |
+
"optional": [],
|
| 1083 |
+
"risk": "caution",
|
| 1084 |
+
"needs_sudo": false,
|
| 1085 |
+
"platforms": [
|
| 1086 |
+
"pi",
|
| 1087 |
+
"windows"
|
| 1088 |
+
],
|
| 1089 |
+
"desc": "Flush DNS cache",
|
| 1090 |
+
"executable": true
|
| 1091 |
+
},
|
| 1092 |
+
"forget_wifi": {
|
| 1093 |
+
"slots": [
|
| 1094 |
+
"ssid"
|
| 1095 |
+
],
|
| 1096 |
+
"optional": [],
|
| 1097 |
+
"risk": "caution",
|
| 1098 |
+
"needs_sudo": false,
|
| 1099 |
+
"platforms": [
|
| 1100 |
+
"pi",
|
| 1101 |
+
"windows"
|
| 1102 |
+
],
|
| 1103 |
+
"desc": "Forget a saved Wi-Fi network",
|
| 1104 |
+
"executable": true
|
| 1105 |
+
},
|
| 1106 |
+
"format_drive": {
|
| 1107 |
+
"slots": [],
|
| 1108 |
+
"optional": [],
|
| 1109 |
+
"risk": "critical",
|
| 1110 |
+
"needs_sudo": true,
|
| 1111 |
+
"platforms": [
|
| 1112 |
+
"pi",
|
| 1113 |
+
"windows"
|
| 1114 |
+
],
|
| 1115 |
+
"desc": "format drive",
|
| 1116 |
+
"executable": true
|
| 1117 |
+
},
|
| 1118 |
+
"fullscreen": {
|
| 1119 |
+
"slots": [],
|
| 1120 |
+
"optional": [],
|
| 1121 |
+
"risk": "safe",
|
| 1122 |
+
"needs_sudo": false,
|
| 1123 |
+
"platforms": [
|
| 1124 |
+
"pi",
|
| 1125 |
+
"windows"
|
| 1126 |
+
],
|
| 1127 |
+
"desc": "Toggle full screen (F11)",
|
| 1128 |
+
"executable": true
|
| 1129 |
+
},
|
| 1130 |
+
"get_bandwidth_usage": {
|
| 1131 |
+
"slots": [],
|
| 1132 |
+
"optional": [],
|
| 1133 |
+
"risk": "safe",
|
| 1134 |
+
"needs_sudo": false,
|
| 1135 |
+
"platforms": [
|
| 1136 |
+
"pi",
|
| 1137 |
+
"windows"
|
| 1138 |
+
],
|
| 1139 |
+
"desc": "Live/historical bandwidth usage",
|
| 1140 |
+
"executable": true
|
| 1141 |
+
},
|
| 1142 |
+
"get_battery": {
|
| 1143 |
+
"slots": [],
|
| 1144 |
+
"optional": [],
|
| 1145 |
+
"risk": "safe",
|
| 1146 |
+
"needs_sudo": false,
|
| 1147 |
+
"platforms": [
|
| 1148 |
+
"pi",
|
| 1149 |
+
"windows"
|
| 1150 |
+
],
|
| 1151 |
+
"desc": "Tell battery percentage / charging state",
|
| 1152 |
+
"executable": true
|
| 1153 |
+
},
|
| 1154 |
+
"get_boot_config": {
|
| 1155 |
+
"slots": [],
|
| 1156 |
+
"optional": [],
|
| 1157 |
+
"risk": "safe",
|
| 1158 |
+
"needs_sudo": false,
|
| 1159 |
+
"platforms": [
|
| 1160 |
+
"pi"
|
| 1161 |
+
],
|
| 1162 |
+
"desc": "Active boot/firmware config",
|
| 1163 |
+
"executable": true
|
| 1164 |
+
},
|
| 1165 |
+
"get_boot_logs": {
|
| 1166 |
+
"slots": [],
|
| 1167 |
+
"optional": [],
|
| 1168 |
+
"risk": "safe",
|
| 1169 |
+
"needs_sudo": false,
|
| 1170 |
+
"platforms": [
|
| 1171 |
+
"pi",
|
| 1172 |
+
"windows"
|
| 1173 |
+
],
|
| 1174 |
+
"desc": "Previous-boot logs",
|
| 1175 |
+
"executable": true
|
| 1176 |
+
},
|
| 1177 |
+
"get_boot_time": {
|
| 1178 |
+
"slots": [],
|
| 1179 |
+
"optional": [],
|
| 1180 |
+
"risk": "safe",
|
| 1181 |
+
"needs_sudo": false,
|
| 1182 |
+
"platforms": [
|
| 1183 |
+
"pi",
|
| 1184 |
+
"windows"
|
| 1185 |
+
],
|
| 1186 |
+
"desc": "Boot time and slowest units",
|
| 1187 |
+
"executable": true
|
| 1188 |
+
},
|
| 1189 |
+
"get_brightness": {
|
| 1190 |
+
"slots": [],
|
| 1191 |
+
"optional": [],
|
| 1192 |
+
"risk": "safe",
|
| 1193 |
+
"needs_sudo": false,
|
| 1194 |
+
"platforms": [
|
| 1195 |
+
"pi",
|
| 1196 |
+
"windows"
|
| 1197 |
+
],
|
| 1198 |
+
"desc": "show brightness",
|
| 1199 |
+
"executable": true
|
| 1200 |
+
},
|
| 1201 |
+
"get_cpu_clock": {
|
| 1202 |
+
"slots": [],
|
| 1203 |
+
"optional": [],
|
| 1204 |
+
"risk": "safe",
|
| 1205 |
+
"needs_sudo": false,
|
| 1206 |
+
"platforms": [
|
| 1207 |
+
"pi"
|
| 1208 |
+
],
|
| 1209 |
+
"desc": "show cpu clock",
|
| 1210 |
+
"executable": true
|
| 1211 |
+
},
|
| 1212 |
+
"get_cpu_governor": {
|
| 1213 |
+
"slots": [],
|
| 1214 |
+
"optional": [],
|
| 1215 |
+
"risk": "safe",
|
| 1216 |
+
"needs_sudo": false,
|
| 1217 |
+
"platforms": [
|
| 1218 |
+
"pi"
|
| 1219 |
+
],
|
| 1220 |
+
"desc": "Show CPU frequency governor",
|
| 1221 |
+
"executable": true
|
| 1222 |
+
},
|
| 1223 |
+
"get_cpu_pressure": {
|
| 1224 |
+
"slots": [],
|
| 1225 |
+
"optional": [],
|
| 1226 |
+
"risk": "safe",
|
| 1227 |
+
"needs_sudo": false,
|
| 1228 |
+
"platforms": [
|
| 1229 |
+
"pi",
|
| 1230 |
+
"windows"
|
| 1231 |
+
],
|
| 1232 |
+
"desc": "CPU pressure (PSI)",
|
| 1233 |
+
"executable": true
|
| 1234 |
+
},
|
| 1235 |
+
"get_cpu_usage": {
|
| 1236 |
+
"slots": [],
|
| 1237 |
+
"optional": [],
|
| 1238 |
+
"risk": "safe",
|
| 1239 |
+
"needs_sudo": false,
|
| 1240 |
+
"platforms": [
|
| 1241 |
+
"pi",
|
| 1242 |
+
"windows"
|
| 1243 |
+
],
|
| 1244 |
+
"desc": "Show CPU usage",
|
| 1245 |
+
"executable": true
|
| 1246 |
+
},
|
| 1247 |
+
"get_current_user": {
|
| 1248 |
+
"slots": [],
|
| 1249 |
+
"optional": [],
|
| 1250 |
+
"risk": "safe",
|
| 1251 |
+
"needs_sudo": false,
|
| 1252 |
+
"platforms": [
|
| 1253 |
+
"pi",
|
| 1254 |
+
"windows"
|
| 1255 |
+
],
|
| 1256 |
+
"desc": "show current user",
|
| 1257 |
+
"executable": true
|
| 1258 |
+
},
|
| 1259 |
+
"get_date": {
|
| 1260 |
+
"slots": [],
|
| 1261 |
+
"optional": [],
|
| 1262 |
+
"risk": "safe",
|
| 1263 |
+
"needs_sudo": false,
|
| 1264 |
+
"platforms": [
|
| 1265 |
+
"pi",
|
| 1266 |
+
"windows"
|
| 1267 |
+
],
|
| 1268 |
+
"desc": "Tell today's date / day",
|
| 1269 |
+
"executable": true
|
| 1270 |
+
},
|
| 1271 |
+
"get_default_gateway": {
|
| 1272 |
+
"slots": [],
|
| 1273 |
+
"optional": [],
|
| 1274 |
+
"risk": "safe",
|
| 1275 |
+
"needs_sudo": false,
|
| 1276 |
+
"platforms": [
|
| 1277 |
+
"pi",
|
| 1278 |
+
"windows"
|
| 1279 |
+
],
|
| 1280 |
+
"desc": "Default gateway/routing",
|
| 1281 |
+
"executable": true
|
| 1282 |
+
},
|
| 1283 |
+
"get_diagnostics": {
|
| 1284 |
+
"slots": [],
|
| 1285 |
+
"optional": [],
|
| 1286 |
+
"risk": "safe",
|
| 1287 |
+
"needs_sudo": false,
|
| 1288 |
+
"platforms": [
|
| 1289 |
+
"pi",
|
| 1290 |
+
"windows"
|
| 1291 |
+
],
|
| 1292 |
+
"desc": "Collect a full diagnostics/bug-report dump",
|
| 1293 |
+
"executable": true
|
| 1294 |
+
},
|
| 1295 |
+
"get_disk_health": {
|
| 1296 |
+
"slots": [],
|
| 1297 |
+
"optional": [],
|
| 1298 |
+
"risk": "safe",
|
| 1299 |
+
"needs_sudo": false,
|
| 1300 |
+
"platforms": [
|
| 1301 |
+
"pi",
|
| 1302 |
+
"windows"
|
| 1303 |
+
],
|
| 1304 |
+
"desc": "Disk/SSD/NVMe SMART health",
|
| 1305 |
+
"executable": true
|
| 1306 |
+
},
|
| 1307 |
+
"get_disk_io": {
|
| 1308 |
+
"slots": [],
|
| 1309 |
+
"optional": [],
|
| 1310 |
+
"risk": "safe",
|
| 1311 |
+
"needs_sudo": false,
|
| 1312 |
+
"platforms": [
|
| 1313 |
+
"pi",
|
| 1314 |
+
"windows"
|
| 1315 |
+
],
|
| 1316 |
+
"desc": "Live disk I/O by process",
|
| 1317 |
+
"executable": true
|
| 1318 |
+
},
|
| 1319 |
+
"get_disk_space": {
|
| 1320 |
+
"slots": [],
|
| 1321 |
+
"optional": [],
|
| 1322 |
+
"risk": "safe",
|
| 1323 |
+
"needs_sudo": false,
|
| 1324 |
+
"platforms": [
|
| 1325 |
+
"pi",
|
| 1326 |
+
"windows"
|
| 1327 |
+
],
|
| 1328 |
+
"desc": "Show disk / storage space",
|
| 1329 |
+
"executable": true
|
| 1330 |
+
},
|
| 1331 |
+
"get_ethernet_status": {
|
| 1332 |
+
"slots": [],
|
| 1333 |
+
"optional": [],
|
| 1334 |
+
"risk": "safe",
|
| 1335 |
+
"needs_sudo": false,
|
| 1336 |
+
"platforms": [
|
| 1337 |
+
"pi",
|
| 1338 |
+
"windows"
|
| 1339 |
+
],
|
| 1340 |
+
"desc": "Ethernet link speed/duplex",
|
| 1341 |
+
"executable": true
|
| 1342 |
+
},
|
| 1343 |
+
"get_fan_speed": {
|
| 1344 |
+
"slots": [],
|
| 1345 |
+
"optional": [],
|
| 1346 |
+
"risk": "safe",
|
| 1347 |
+
"needs_sudo": false,
|
| 1348 |
+
"platforms": [
|
| 1349 |
+
"pi"
|
| 1350 |
+
],
|
| 1351 |
+
"desc": "Fan RPM",
|
| 1352 |
+
"executable": true
|
| 1353 |
+
},
|
| 1354 |
+
"get_firmware_log": {
|
| 1355 |
+
"slots": [],
|
| 1356 |
+
"optional": [],
|
| 1357 |
+
"risk": "safe",
|
| 1358 |
+
"needs_sudo": false,
|
| 1359 |
+
"platforms": [
|
| 1360 |
+
"pi"
|
| 1361 |
+
],
|
| 1362 |
+
"desc": "VideoCore firmware log",
|
| 1363 |
+
"executable": true
|
| 1364 |
+
},
|
| 1365 |
+
"get_firmware_version": {
|
| 1366 |
+
"slots": [],
|
| 1367 |
+
"optional": [],
|
| 1368 |
+
"risk": "safe",
|
| 1369 |
+
"needs_sudo": false,
|
| 1370 |
+
"platforms": [
|
| 1371 |
+
"pi"
|
| 1372 |
+
],
|
| 1373 |
+
"desc": "show firmware version",
|
| 1374 |
+
"executable": true
|
| 1375 |
+
},
|
| 1376 |
+
"get_folder_sizes": {
|
| 1377 |
+
"slots": [],
|
| 1378 |
+
"optional": [],
|
| 1379 |
+
"risk": "safe",
|
| 1380 |
+
"needs_sudo": false,
|
| 1381 |
+
"platforms": [
|
| 1382 |
+
"pi",
|
| 1383 |
+
"windows"
|
| 1384 |
+
],
|
| 1385 |
+
"desc": "Which folders use the most space",
|
| 1386 |
+
"executable": true
|
| 1387 |
+
},
|
| 1388 |
+
"get_gpu_memory": {
|
| 1389 |
+
"slots": [],
|
| 1390 |
+
"optional": [],
|
| 1391 |
+
"risk": "safe",
|
| 1392 |
+
"needs_sudo": false,
|
| 1393 |
+
"platforms": [
|
| 1394 |
+
"pi"
|
| 1395 |
+
],
|
| 1396 |
+
"desc": "GPU/VideoCore memory split",
|
| 1397 |
+
"executable": true
|
| 1398 |
+
},
|
| 1399 |
+
"get_gpu_usage": {
|
| 1400 |
+
"slots": [],
|
| 1401 |
+
"optional": [],
|
| 1402 |
+
"risk": "safe",
|
| 1403 |
+
"needs_sudo": false,
|
| 1404 |
+
"platforms": [
|
| 1405 |
+
"pi",
|
| 1406 |
+
"windows"
|
| 1407 |
+
],
|
| 1408 |
+
"desc": "GPU usage",
|
| 1409 |
+
"executable": true
|
| 1410 |
+
},
|
| 1411 |
+
"get_hostname": {
|
| 1412 |
+
"slots": [],
|
| 1413 |
+
"optional": [],
|
| 1414 |
+
"risk": "safe",
|
| 1415 |
+
"needs_sudo": false,
|
| 1416 |
+
"platforms": [
|
| 1417 |
+
"pi",
|
| 1418 |
+
"windows"
|
| 1419 |
+
],
|
| 1420 |
+
"desc": "show hostname",
|
| 1421 |
+
"executable": true
|
| 1422 |
+
},
|
| 1423 |
+
"get_interrupts": {
|
| 1424 |
+
"slots": [],
|
| 1425 |
+
"optional": [],
|
| 1426 |
+
"risk": "safe",
|
| 1427 |
+
"needs_sudo": false,
|
| 1428 |
+
"platforms": [
|
| 1429 |
+
"pi",
|
| 1430 |
+
"windows"
|
| 1431 |
+
],
|
| 1432 |
+
"desc": "IRQ counts",
|
| 1433 |
+
"executable": true
|
| 1434 |
+
},
|
| 1435 |
+
"get_ip": {
|
| 1436 |
+
"slots": [],
|
| 1437 |
+
"optional": [],
|
| 1438 |
+
"risk": "safe",
|
| 1439 |
+
"needs_sudo": false,
|
| 1440 |
+
"platforms": [
|
| 1441 |
+
"pi",
|
| 1442 |
+
"windows"
|
| 1443 |
+
],
|
| 1444 |
+
"desc": "Show IP address",
|
| 1445 |
+
"executable": true
|
| 1446 |
+
},
|
| 1447 |
+
"get_kernel_log": {
|
| 1448 |
+
"slots": [],
|
| 1449 |
+
"optional": [],
|
| 1450 |
+
"risk": "safe",
|
| 1451 |
+
"needs_sudo": false,
|
| 1452 |
+
"platforms": [
|
| 1453 |
+
"pi",
|
| 1454 |
+
"windows"
|
| 1455 |
+
],
|
| 1456 |
+
"desc": "Show kernel ring-buffer (dmesg)",
|
| 1457 |
+
"executable": true
|
| 1458 |
+
},
|
| 1459 |
+
"get_kernel_version": {
|
| 1460 |
+
"slots": [],
|
| 1461 |
+
"optional": [],
|
| 1462 |
+
"risk": "safe",
|
| 1463 |
+
"needs_sudo": false,
|
| 1464 |
+
"platforms": [
|
| 1465 |
+
"pi",
|
| 1466 |
+
"windows"
|
| 1467 |
+
],
|
| 1468 |
+
"desc": "Show kernel version",
|
| 1469 |
+
"executable": true
|
| 1470 |
+
},
|
| 1471 |
+
"get_load_average": {
|
| 1472 |
+
"slots": [],
|
| 1473 |
+
"optional": [],
|
| 1474 |
+
"risk": "safe",
|
| 1475 |
+
"needs_sudo": false,
|
| 1476 |
+
"platforms": [
|
| 1477 |
+
"pi",
|
| 1478 |
+
"windows"
|
| 1479 |
+
],
|
| 1480 |
+
"desc": "Show system load average",
|
| 1481 |
+
"executable": true
|
| 1482 |
+
},
|
| 1483 |
+
"get_mac_address": {
|
| 1484 |
+
"slots": [],
|
| 1485 |
+
"optional": [],
|
| 1486 |
+
"risk": "safe",
|
| 1487 |
+
"needs_sudo": false,
|
| 1488 |
+
"platforms": [
|
| 1489 |
+
"pi",
|
| 1490 |
+
"windows"
|
| 1491 |
+
],
|
| 1492 |
+
"desc": "Show MAC address",
|
| 1493 |
+
"executable": true
|
| 1494 |
+
},
|
| 1495 |
+
"get_memory_pressure": {
|
| 1496 |
+
"slots": [],
|
| 1497 |
+
"optional": [],
|
| 1498 |
+
"risk": "safe",
|
| 1499 |
+
"needs_sudo": false,
|
| 1500 |
+
"platforms": [
|
| 1501 |
+
"pi",
|
| 1502 |
+
"windows"
|
| 1503 |
+
],
|
| 1504 |
+
"desc": "Memory pressure (PSI)",
|
| 1505 |
+
"executable": true
|
| 1506 |
+
},
|
| 1507 |
+
"get_per_core_usage": {
|
| 1508 |
+
"slots": [],
|
| 1509 |
+
"optional": [],
|
| 1510 |
+
"risk": "safe",
|
| 1511 |
+
"needs_sudo": false,
|
| 1512 |
+
"platforms": [
|
| 1513 |
+
"pi",
|
| 1514 |
+
"windows"
|
| 1515 |
+
],
|
| 1516 |
+
"desc": "Per-core CPU usage",
|
| 1517 |
+
"executable": true
|
| 1518 |
+
},
|
| 1519 |
+
"get_power_draw": {
|
| 1520 |
+
"slots": [],
|
| 1521 |
+
"optional": [],
|
| 1522 |
+
"risk": "safe",
|
| 1523 |
+
"needs_sudo": false,
|
| 1524 |
+
"platforms": [
|
| 1525 |
+
"pi"
|
| 1526 |
+
],
|
| 1527 |
+
"desc": "Show board power draw (Pi5 PMIC)",
|
| 1528 |
+
"executable": true
|
| 1529 |
+
},
|
| 1530 |
+
"get_public_ip": {
|
| 1531 |
+
"slots": [],
|
| 1532 |
+
"optional": [],
|
| 1533 |
+
"risk": "safe",
|
| 1534 |
+
"needs_sudo": false,
|
| 1535 |
+
"platforms": [
|
| 1536 |
+
"pi",
|
| 1537 |
+
"windows"
|
| 1538 |
+
],
|
| 1539 |
+
"desc": "Show public IP",
|
| 1540 |
+
"executable": true
|
| 1541 |
+
},
|
| 1542 |
+
"get_radio_status": {
|
| 1543 |
+
"slots": [],
|
| 1544 |
+
"optional": [],
|
| 1545 |
+
"risk": "safe",
|
| 1546 |
+
"needs_sudo": false,
|
| 1547 |
+
"platforms": [
|
| 1548 |
+
"pi",
|
| 1549 |
+
"windows"
|
| 1550 |
+
],
|
| 1551 |
+
"desc": "Is Wi-Fi/BT blocked (rfkill)",
|
| 1552 |
+
"executable": true
|
| 1553 |
+
},
|
| 1554 |
+
"get_ram_usage": {
|
| 1555 |
+
"slots": [],
|
| 1556 |
+
"optional": [],
|
| 1557 |
+
"risk": "safe",
|
| 1558 |
+
"needs_sudo": false,
|
| 1559 |
+
"platforms": [
|
| 1560 |
+
"pi",
|
| 1561 |
+
"windows"
|
| 1562 |
+
],
|
| 1563 |
+
"desc": "Show RAM / memory usage",
|
| 1564 |
+
"executable": true
|
| 1565 |
+
},
|
| 1566 |
+
"get_reboot_history": {
|
| 1567 |
+
"slots": [],
|
| 1568 |
+
"optional": [],
|
| 1569 |
+
"risk": "safe",
|
| 1570 |
+
"needs_sudo": false,
|
| 1571 |
+
"platforms": [
|
| 1572 |
+
"pi",
|
| 1573 |
+
"windows"
|
| 1574 |
+
],
|
| 1575 |
+
"desc": "Reboot/shutdown history",
|
| 1576 |
+
"executable": true
|
| 1577 |
+
},
|
| 1578 |
+
"get_sdcard_info": {
|
| 1579 |
+
"slots": [],
|
| 1580 |
+
"optional": [],
|
| 1581 |
+
"risk": "safe",
|
| 1582 |
+
"needs_sudo": false,
|
| 1583 |
+
"platforms": [
|
| 1584 |
+
"pi"
|
| 1585 |
+
],
|
| 1586 |
+
"desc": "SD card manufacturer/model",
|
| 1587 |
+
"executable": true
|
| 1588 |
+
},
|
| 1589 |
+
"get_service_logs": {
|
| 1590 |
+
"slots": [
|
| 1591 |
+
"service"
|
| 1592 |
+
],
|
| 1593 |
+
"optional": [],
|
| 1594 |
+
"risk": "safe",
|
| 1595 |
+
"needs_sudo": false,
|
| 1596 |
+
"platforms": [
|
| 1597 |
+
"pi",
|
| 1598 |
+
"windows"
|
| 1599 |
+
],
|
| 1600 |
+
"desc": "Show a service's logs",
|
| 1601 |
+
"executable": true
|
| 1602 |
+
},
|
| 1603 |
+
"get_slab_usage": {
|
| 1604 |
+
"slots": [],
|
| 1605 |
+
"optional": [],
|
| 1606 |
+
"risk": "safe",
|
| 1607 |
+
"needs_sudo": false,
|
| 1608 |
+
"platforms": [
|
| 1609 |
+
"pi",
|
| 1610 |
+
"windows"
|
| 1611 |
+
],
|
| 1612 |
+
"desc": "Kernel slab cache usage",
|
| 1613 |
+
"executable": true
|
| 1614 |
+
},
|
| 1615 |
+
"get_swap_usage": {
|
| 1616 |
+
"slots": [],
|
| 1617 |
+
"optional": [],
|
| 1618 |
+
"risk": "safe",
|
| 1619 |
+
"needs_sudo": false,
|
| 1620 |
+
"platforms": [
|
| 1621 |
+
"pi",
|
| 1622 |
+
"windows"
|
| 1623 |
+
],
|
| 1624 |
+
"desc": "Swap usage",
|
| 1625 |
+
"executable": true
|
| 1626 |
+
},
|
| 1627 |
+
"get_system_info": {
|
| 1628 |
+
"slots": [],
|
| 1629 |
+
"optional": [],
|
| 1630 |
+
"risk": "safe",
|
| 1631 |
+
"needs_sudo": false,
|
| 1632 |
+
"platforms": [
|
| 1633 |
+
"pi",
|
| 1634 |
+
"windows"
|
| 1635 |
+
],
|
| 1636 |
+
"desc": "Show system information (OS, CPU, model)",
|
| 1637 |
+
"executable": true
|
| 1638 |
+
},
|
| 1639 |
+
"get_temperature": {
|
| 1640 |
+
"slots": [],
|
| 1641 |
+
"optional": [],
|
| 1642 |
+
"risk": "safe",
|
| 1643 |
+
"needs_sudo": false,
|
| 1644 |
+
"platforms": [
|
| 1645 |
+
"pi",
|
| 1646 |
+
"windows"
|
| 1647 |
+
],
|
| 1648 |
+
"desc": "CPU / SoC temperature",
|
| 1649 |
+
"executable": true
|
| 1650 |
+
},
|
| 1651 |
+
"get_throttle_status": {
|
| 1652 |
+
"slots": [],
|
| 1653 |
+
"optional": [],
|
| 1654 |
+
"risk": "safe",
|
| 1655 |
+
"needs_sudo": false,
|
| 1656 |
+
"platforms": [
|
| 1657 |
+
"pi",
|
| 1658 |
+
"windows"
|
| 1659 |
+
],
|
| 1660 |
+
"desc": "Under-voltage / throttling status",
|
| 1661 |
+
"executable": true
|
| 1662 |
+
},
|
| 1663 |
+
"get_time": {
|
| 1664 |
+
"slots": [],
|
| 1665 |
+
"optional": [],
|
| 1666 |
+
"risk": "safe",
|
| 1667 |
+
"needs_sudo": false,
|
| 1668 |
+
"platforms": [
|
| 1669 |
+
"pi",
|
| 1670 |
+
"windows"
|
| 1671 |
+
],
|
| 1672 |
+
"desc": "Tell the current time",
|
| 1673 |
+
"executable": true
|
| 1674 |
+
},
|
| 1675 |
+
"get_time_sync": {
|
| 1676 |
+
"slots": [],
|
| 1677 |
+
"optional": [],
|
| 1678 |
+
"risk": "safe",
|
| 1679 |
+
"needs_sudo": false,
|
| 1680 |
+
"platforms": [
|
| 1681 |
+
"pi",
|
| 1682 |
+
"windows"
|
| 1683 |
+
],
|
| 1684 |
+
"desc": "NTP/time sync status",
|
| 1685 |
+
"executable": true
|
| 1686 |
+
},
|
| 1687 |
+
"get_uptime": {
|
| 1688 |
+
"slots": [],
|
| 1689 |
+
"optional": [],
|
| 1690 |
+
"risk": "safe",
|
| 1691 |
+
"needs_sudo": false,
|
| 1692 |
+
"platforms": [
|
| 1693 |
+
"pi",
|
| 1694 |
+
"windows"
|
| 1695 |
+
],
|
| 1696 |
+
"desc": "Show how long the system has been running",
|
| 1697 |
+
"executable": true
|
| 1698 |
+
},
|
| 1699 |
+
"get_voltage": {
|
| 1700 |
+
"slots": [],
|
| 1701 |
+
"optional": [],
|
| 1702 |
+
"risk": "safe",
|
| 1703 |
+
"needs_sudo": false,
|
| 1704 |
+
"platforms": [
|
| 1705 |
+
"pi"
|
| 1706 |
+
],
|
| 1707 |
+
"desc": "show core voltage",
|
| 1708 |
+
"executable": true
|
| 1709 |
+
},
|
| 1710 |
+
"get_volume": {
|
| 1711 |
+
"slots": [],
|
| 1712 |
+
"optional": [],
|
| 1713 |
+
"risk": "safe",
|
| 1714 |
+
"needs_sudo": false,
|
| 1715 |
+
"platforms": [
|
| 1716 |
+
"pi",
|
| 1717 |
+
"windows"
|
| 1718 |
+
],
|
| 1719 |
+
"desc": "Tell current volume",
|
| 1720 |
+
"executable": true
|
| 1721 |
+
},
|
| 1722 |
+
"get_wifi_signal": {
|
| 1723 |
+
"slots": [],
|
| 1724 |
+
"optional": [],
|
| 1725 |
+
"risk": "safe",
|
| 1726 |
+
"needs_sudo": false,
|
| 1727 |
+
"platforms": [
|
| 1728 |
+
"pi",
|
| 1729 |
+
"windows"
|
| 1730 |
+
],
|
| 1731 |
+
"desc": "Wi-Fi signal strength",
|
| 1732 |
+
"executable": true
|
| 1733 |
+
},
|
| 1734 |
+
"gpio_alt_functions": {
|
| 1735 |
+
"slots": [
|
| 1736 |
+
"pin"
|
| 1737 |
+
],
|
| 1738 |
+
"optional": [
|
| 1739 |
+
"numbering"
|
| 1740 |
+
],
|
| 1741 |
+
"risk": "safe",
|
| 1742 |
+
"needs_sudo": false,
|
| 1743 |
+
"platforms": [
|
| 1744 |
+
"pi"
|
| 1745 |
+
],
|
| 1746 |
+
"desc": "List ALT functions of a pin",
|
| 1747 |
+
"executable": true
|
| 1748 |
+
},
|
| 1749 |
+
"gpio_blink": {
|
| 1750 |
+
"slots": [
|
| 1751 |
+
"pin"
|
| 1752 |
+
],
|
| 1753 |
+
"optional": [
|
| 1754 |
+
"numbering",
|
| 1755 |
+
"interval",
|
| 1756 |
+
"count"
|
| 1757 |
+
],
|
| 1758 |
+
"risk": "caution",
|
| 1759 |
+
"needs_sudo": false,
|
| 1760 |
+
"platforms": [
|
| 1761 |
+
"pi"
|
| 1762 |
+
],
|
| 1763 |
+
"desc": "Blink a pin (optional interval ms, count)",
|
| 1764 |
+
"executable": true
|
| 1765 |
+
},
|
| 1766 |
+
"gpio_conflicts": {
|
| 1767 |
+
"slots": [],
|
| 1768 |
+
"optional": [],
|
| 1769 |
+
"risk": "safe",
|
| 1770 |
+
"needs_sudo": false,
|
| 1771 |
+
"platforms": [
|
| 1772 |
+
"pi"
|
| 1773 |
+
],
|
| 1774 |
+
"desc": "Which pins are reserved by overlays / I2C / SPI / UART",
|
| 1775 |
+
"executable": true
|
| 1776 |
+
},
|
| 1777 |
+
"gpio_debug": {
|
| 1778 |
+
"slots": [
|
| 1779 |
+
"pin"
|
| 1780 |
+
],
|
| 1781 |
+
"optional": [
|
| 1782 |
+
"numbering"
|
| 1783 |
+
],
|
| 1784 |
+
"risk": "safe",
|
| 1785 |
+
"needs_sudo": false,
|
| 1786 |
+
"platforms": [
|
| 1787 |
+
"pi"
|
| 1788 |
+
],
|
| 1789 |
+
"desc": "Diagnose one pin: mode, level, pull, overlay conflicts, chip, permissions",
|
| 1790 |
+
"executable": true
|
| 1791 |
+
},
|
| 1792 |
+
"gpio_debug_all": {
|
| 1793 |
+
"slots": [],
|
| 1794 |
+
"optional": [],
|
| 1795 |
+
"risk": "safe",
|
| 1796 |
+
"needs_sudo": false,
|
| 1797 |
+
"platforms": [
|
| 1798 |
+
"pi"
|
| 1799 |
+
],
|
| 1800 |
+
"desc": "Diagnose the whole GPIO subsystem",
|
| 1801 |
+
"executable": true
|
| 1802 |
+
},
|
| 1803 |
+
"gpio_info": {
|
| 1804 |
+
"slots": [
|
| 1805 |
+
"pin"
|
| 1806 |
+
],
|
| 1807 |
+
"optional": [
|
| 1808 |
+
"numbering"
|
| 1809 |
+
],
|
| 1810 |
+
"risk": "safe",
|
| 1811 |
+
"needs_sudo": false,
|
| 1812 |
+
"platforms": [
|
| 1813 |
+
"pi"
|
| 1814 |
+
],
|
| 1815 |
+
"desc": "Live mode/level/pull of a pin (pinctrl get)",
|
| 1816 |
+
"executable": true
|
| 1817 |
+
},
|
| 1818 |
+
"gpio_off": {
|
| 1819 |
+
"slots": [
|
| 1820 |
+
"pin"
|
| 1821 |
+
],
|
| 1822 |
+
"optional": [
|
| 1823 |
+
"numbering"
|
| 1824 |
+
],
|
| 1825 |
+
"risk": "critical",
|
| 1826 |
+
"needs_sudo": true,
|
| 1827 |
+
"platforms": [
|
| 1828 |
+
"pi",
|
| 1829 |
+
"windows"
|
| 1830 |
+
],
|
| 1831 |
+
"desc": "Set a GPIO pin LOW",
|
| 1832 |
+
"executable": true
|
| 1833 |
+
},
|
| 1834 |
+
"gpio_on": {
|
| 1835 |
+
"slots": [
|
| 1836 |
+
"pin"
|
| 1837 |
+
],
|
| 1838 |
+
"optional": [
|
| 1839 |
+
"numbering"
|
| 1840 |
+
],
|
| 1841 |
+
"risk": "critical",
|
| 1842 |
+
"needs_sudo": true,
|
| 1843 |
+
"platforms": [
|
| 1844 |
+
"pi",
|
| 1845 |
+
"windows"
|
| 1846 |
+
],
|
| 1847 |
+
"desc": "Set a GPIO pin HIGH (e.g. relay / LED on)",
|
| 1848 |
+
"executable": true
|
| 1849 |
+
},
|
| 1850 |
+
"gpio_pin_role": {
|
| 1851 |
+
"slots": [],
|
| 1852 |
+
"optional": [
|
| 1853 |
+
"pin",
|
| 1854 |
+
"numbering",
|
| 1855 |
+
"role"
|
| 1856 |
+
],
|
| 1857 |
+
"risk": "safe",
|
| 1858 |
+
"needs_sudo": false,
|
| 1859 |
+
"platforms": [
|
| 1860 |
+
"pi"
|
| 1861 |
+
],
|
| 1862 |
+
"desc": "What a pin is for (SDA/SCL/TXD/GND...) or where a role is",
|
| 1863 |
+
"executable": true
|
| 1864 |
+
},
|
| 1865 |
+
"gpio_pulse": {
|
| 1866 |
+
"slots": [
|
| 1867 |
+
"pin",
|
| 1868 |
+
"amount",
|
| 1869 |
+
"unit"
|
| 1870 |
+
],
|
| 1871 |
+
"optional": [
|
| 1872 |
+
"numbering"
|
| 1873 |
+
],
|
| 1874 |
+
"risk": "caution",
|
| 1875 |
+
"needs_sudo": false,
|
| 1876 |
+
"platforms": [
|
| 1877 |
+
"pi"
|
| 1878 |
+
],
|
| 1879 |
+
"desc": "Set a pin high for a duration then low",
|
| 1880 |
+
"executable": true
|
| 1881 |
+
},
|
| 1882 |
+
"gpio_pwm": {
|
| 1883 |
+
"slots": [
|
| 1884 |
+
"pin",
|
| 1885 |
+
"duty"
|
| 1886 |
+
],
|
| 1887 |
+
"optional": [
|
| 1888 |
+
"numbering",
|
| 1889 |
+
"freq"
|
| 1890 |
+
],
|
| 1891 |
+
"risk": "caution",
|
| 1892 |
+
"needs_sudo": true,
|
| 1893 |
+
"platforms": [
|
| 1894 |
+
"pi"
|
| 1895 |
+
],
|
| 1896 |
+
"desc": "PWM on a pin (duty %, optional Hz)",
|
| 1897 |
+
"executable": true
|
| 1898 |
+
},
|
| 1899 |
+
"gpio_read": {
|
| 1900 |
+
"slots": [
|
| 1901 |
+
"pin"
|
| 1902 |
+
],
|
| 1903 |
+
"optional": [
|
| 1904 |
+
"numbering"
|
| 1905 |
+
],
|
| 1906 |
+
"risk": "caution",
|
| 1907 |
+
"needs_sudo": false,
|
| 1908 |
+
"platforms": [
|
| 1909 |
+
"pi",
|
| 1910 |
+
"windows"
|
| 1911 |
+
],
|
| 1912 |
+
"desc": "Read GPIO pin state",
|
| 1913 |
+
"executable": true
|
| 1914 |
+
},
|
| 1915 |
+
"gpio_reset": {
|
| 1916 |
+
"slots": [
|
| 1917 |
+
"pin"
|
| 1918 |
+
],
|
| 1919 |
+
"optional": [
|
| 1920 |
+
"numbering"
|
| 1921 |
+
],
|
| 1922 |
+
"risk": "caution",
|
| 1923 |
+
"needs_sudo": false,
|
| 1924 |
+
"platforms": [
|
| 1925 |
+
"pi"
|
| 1926 |
+
],
|
| 1927 |
+
"desc": "Reset a pin to default input",
|
| 1928 |
+
"executable": true
|
| 1929 |
+
},
|
| 1930 |
+
"gpio_reset_all": {
|
| 1931 |
+
"slots": [],
|
| 1932 |
+
"optional": [],
|
| 1933 |
+
"risk": "caution",
|
| 1934 |
+
"needs_sudo": false,
|
| 1935 |
+
"platforms": [
|
| 1936 |
+
"pi"
|
| 1937 |
+
],
|
| 1938 |
+
"desc": "Reset all GPIO pins",
|
| 1939 |
+
"executable": true
|
| 1940 |
+
},
|
| 1941 |
+
"gpio_servo": {
|
| 1942 |
+
"slots": [
|
| 1943 |
+
"pin",
|
| 1944 |
+
"angle"
|
| 1945 |
+
],
|
| 1946 |
+
"optional": [
|
| 1947 |
+
"numbering"
|
| 1948 |
+
],
|
| 1949 |
+
"risk": "caution",
|
| 1950 |
+
"needs_sudo": true,
|
| 1951 |
+
"platforms": [
|
| 1952 |
+
"pi"
|
| 1953 |
+
],
|
| 1954 |
+
"desc": "Move a servo on a pin to an angle",
|
| 1955 |
+
"executable": true
|
| 1956 |
+
},
|
| 1957 |
+
"gpio_set_alt": {
|
| 1958 |
+
"slots": [
|
| 1959 |
+
"pin",
|
| 1960 |
+
"alt"
|
| 1961 |
+
],
|
| 1962 |
+
"optional": [
|
| 1963 |
+
"numbering"
|
| 1964 |
+
],
|
| 1965 |
+
"risk": "critical",
|
| 1966 |
+
"needs_sudo": true,
|
| 1967 |
+
"platforms": [
|
| 1968 |
+
"pi"
|
| 1969 |
+
],
|
| 1970 |
+
"desc": "Set a pin to an ALT function",
|
| 1971 |
+
"executable": true
|
| 1972 |
+
},
|
| 1973 |
+
"gpio_set_mode": {
|
| 1974 |
+
"slots": [
|
| 1975 |
+
"pin",
|
| 1976 |
+
"mode"
|
| 1977 |
+
],
|
| 1978 |
+
"optional": [
|
| 1979 |
+
"numbering"
|
| 1980 |
+
],
|
| 1981 |
+
"risk": "caution",
|
| 1982 |
+
"needs_sudo": false,
|
| 1983 |
+
"platforms": [
|
| 1984 |
+
"pi"
|
| 1985 |
+
],
|
| 1986 |
+
"desc": "Set a GPIO pin as input or output",
|
| 1987 |
+
"executable": true
|
| 1988 |
+
},
|
| 1989 |
+
"gpio_set_pull": {
|
| 1990 |
+
"slots": [
|
| 1991 |
+
"pin",
|
| 1992 |
+
"pull"
|
| 1993 |
+
],
|
| 1994 |
+
"optional": [
|
| 1995 |
+
"numbering"
|
| 1996 |
+
],
|
| 1997 |
+
"risk": "caution",
|
| 1998 |
+
"needs_sudo": false,
|
| 1999 |
+
"platforms": [
|
| 2000 |
+
"pi"
|
| 2001 |
+
],
|
| 2002 |
+
"desc": "Set internal pull-up/down/none on a pin",
|
| 2003 |
+
"executable": true
|
| 2004 |
+
},
|
| 2005 |
+
"gpio_stop_watch": {
|
| 2006 |
+
"slots": [],
|
| 2007 |
+
"optional": [
|
| 2008 |
+
"pin",
|
| 2009 |
+
"numbering"
|
| 2010 |
+
],
|
| 2011 |
+
"risk": "safe",
|
| 2012 |
+
"needs_sudo": false,
|
| 2013 |
+
"platforms": [
|
| 2014 |
+
"pi"
|
| 2015 |
+
],
|
| 2016 |
+
"desc": "Stop GPIO monitoring",
|
| 2017 |
+
"executable": true
|
| 2018 |
+
},
|
| 2019 |
+
"gpio_toggle": {
|
| 2020 |
+
"slots": [
|
| 2021 |
+
"pin"
|
| 2022 |
+
],
|
| 2023 |
+
"optional": [
|
| 2024 |
+
"numbering"
|
| 2025 |
+
],
|
| 2026 |
+
"risk": "caution",
|
| 2027 |
+
"needs_sudo": true,
|
| 2028 |
+
"platforms": [
|
| 2029 |
+
"pi"
|
| 2030 |
+
],
|
| 2031 |
+
"desc": "Toggle GPIO pin",
|
| 2032 |
+
"executable": true
|
| 2033 |
+
},
|
| 2034 |
+
"gpio_watch": {
|
| 2035 |
+
"slots": [
|
| 2036 |
+
"pin"
|
| 2037 |
+
],
|
| 2038 |
+
"optional": [
|
| 2039 |
+
"numbering",
|
| 2040 |
+
"edge"
|
| 2041 |
+
],
|
| 2042 |
+
"risk": "safe",
|
| 2043 |
+
"needs_sudo": false,
|
| 2044 |
+
"platforms": [
|
| 2045 |
+
"pi"
|
| 2046 |
+
],
|
| 2047 |
+
"desc": "Monitor a pin for edges / button presses",
|
| 2048 |
+
"executable": true
|
| 2049 |
+
},
|
| 2050 |
+
"harden_ssh": {
|
| 2051 |
+
"slots": [],
|
| 2052 |
+
"optional": [],
|
| 2053 |
+
"risk": "critical",
|
| 2054 |
+
"needs_sudo": true,
|
| 2055 |
+
"platforms": [
|
| 2056 |
+
"pi",
|
| 2057 |
+
"windows"
|
| 2058 |
+
],
|
| 2059 |
+
"desc": "Harden sshd (key-only, no root)",
|
| 2060 |
+
"executable": true
|
| 2061 |
+
},
|
| 2062 |
+
"hash_file": {
|
| 2063 |
+
"slots": [
|
| 2064 |
+
"path"
|
| 2065 |
+
],
|
| 2066 |
+
"optional": [],
|
| 2067 |
+
"risk": "safe",
|
| 2068 |
+
"needs_sudo": false,
|
| 2069 |
+
"platforms": [
|
| 2070 |
+
"pi",
|
| 2071 |
+
"windows"
|
| 2072 |
+
],
|
| 2073 |
+
"desc": "hash file \"{path}\"",
|
| 2074 |
+
"executable": true
|
| 2075 |
+
},
|
| 2076 |
+
"help": {
|
| 2077 |
+
"slots": [],
|
| 2078 |
+
"optional": [],
|
| 2079 |
+
"risk": "safe",
|
| 2080 |
+
"needs_sudo": false,
|
| 2081 |
+
"platforms": [
|
| 2082 |
+
"pi",
|
| 2083 |
+
"windows"
|
| 2084 |
+
],
|
| 2085 |
+
"desc": "help",
|
| 2086 |
+
"executable": true
|
| 2087 |
+
},
|
| 2088 |
+
"hibernate": {
|
| 2089 |
+
"slots": [],
|
| 2090 |
+
"optional": [],
|
| 2091 |
+
"risk": "critical",
|
| 2092 |
+
"needs_sudo": false,
|
| 2093 |
+
"platforms": [
|
| 2094 |
+
"pi",
|
| 2095 |
+
"windows"
|
| 2096 |
+
],
|
| 2097 |
+
"desc": "Hibernate",
|
| 2098 |
+
"executable": true
|
| 2099 |
+
},
|
| 2100 |
+
"high_contrast_off": {
|
| 2101 |
+
"slots": [],
|
| 2102 |
+
"optional": [],
|
| 2103 |
+
"risk": "safe",
|
| 2104 |
+
"needs_sudo": false,
|
| 2105 |
+
"platforms": [
|
| 2106 |
+
"pi",
|
| 2107 |
+
"windows"
|
| 2108 |
+
],
|
| 2109 |
+
"desc": "High contrast off",
|
| 2110 |
+
"executable": true
|
| 2111 |
+
},
|
| 2112 |
+
"high_contrast_on": {
|
| 2113 |
+
"slots": [],
|
| 2114 |
+
"optional": [],
|
| 2115 |
+
"risk": "safe",
|
| 2116 |
+
"needs_sudo": false,
|
| 2117 |
+
"platforms": [
|
| 2118 |
+
"pi",
|
| 2119 |
+
"windows"
|
| 2120 |
+
],
|
| 2121 |
+
"desc": "High contrast on",
|
| 2122 |
+
"executable": true
|
| 2123 |
+
},
|
| 2124 |
+
"hotspot_off": {
|
| 2125 |
+
"slots": [],
|
| 2126 |
+
"optional": [],
|
| 2127 |
+
"risk": "safe",
|
| 2128 |
+
"needs_sudo": false,
|
| 2129 |
+
"platforms": [
|
| 2130 |
+
"pi",
|
| 2131 |
+
"windows"
|
| 2132 |
+
],
|
| 2133 |
+
"desc": "Turn mobile hotspot off",
|
| 2134 |
+
"executable": true
|
| 2135 |
+
},
|
| 2136 |
+
"hotspot_on": {
|
| 2137 |
+
"slots": [],
|
| 2138 |
+
"optional": [
|
| 2139 |
+
"ssid",
|
| 2140 |
+
"password"
|
| 2141 |
+
],
|
| 2142 |
+
"risk": "safe",
|
| 2143 |
+
"needs_sudo": false,
|
| 2144 |
+
"platforms": [
|
| 2145 |
+
"pi",
|
| 2146 |
+
"windows"
|
| 2147 |
+
],
|
| 2148 |
+
"desc": "Turn on hotspot (optional ssid/password)",
|
| 2149 |
+
"executable": true
|
| 2150 |
+
},
|
| 2151 |
+
"i2c_dump": {
|
| 2152 |
+
"slots": [
|
| 2153 |
+
"address"
|
| 2154 |
+
],
|
| 2155 |
+
"optional": [],
|
| 2156 |
+
"risk": "safe",
|
| 2157 |
+
"needs_sudo": false,
|
| 2158 |
+
"platforms": [
|
| 2159 |
+
"pi"
|
| 2160 |
+
],
|
| 2161 |
+
"desc": "Dump all registers of an I2C device",
|
| 2162 |
+
"executable": true
|
| 2163 |
+
},
|
| 2164 |
+
"i2c_read": {
|
| 2165 |
+
"slots": [
|
| 2166 |
+
"address",
|
| 2167 |
+
"register"
|
| 2168 |
+
],
|
| 2169 |
+
"optional": [],
|
| 2170 |
+
"risk": "safe",
|
| 2171 |
+
"needs_sudo": false,
|
| 2172 |
+
"platforms": [
|
| 2173 |
+
"pi"
|
| 2174 |
+
],
|
| 2175 |
+
"desc": "Read a register from an I2C device",
|
| 2176 |
+
"executable": true
|
| 2177 |
+
},
|
| 2178 |
+
"i2c_scan": {
|
| 2179 |
+
"slots": [],
|
| 2180 |
+
"optional": [],
|
| 2181 |
+
"risk": "safe",
|
| 2182 |
+
"needs_sudo": false,
|
| 2183 |
+
"platforms": [
|
| 2184 |
+
"pi"
|
| 2185 |
+
],
|
| 2186 |
+
"desc": "Scan I2C bus",
|
| 2187 |
+
"executable": true
|
| 2188 |
+
},
|
| 2189 |
+
"i2c_write": {
|
| 2190 |
+
"slots": [
|
| 2191 |
+
"address",
|
| 2192 |
+
"register",
|
| 2193 |
+
"value"
|
| 2194 |
+
],
|
| 2195 |
+
"optional": [],
|
| 2196 |
+
"risk": "critical",
|
| 2197 |
+
"needs_sudo": true,
|
| 2198 |
+
"platforms": [
|
| 2199 |
+
"pi"
|
| 2200 |
+
],
|
| 2201 |
+
"desc": "Write a value to an I2C register",
|
| 2202 |
+
"executable": true
|
| 2203 |
+
},
|
| 2204 |
+
"incognito_window": {
|
| 2205 |
+
"slots": [],
|
| 2206 |
+
"optional": [],
|
| 2207 |
+
"risk": "safe",
|
| 2208 |
+
"needs_sudo": false,
|
| 2209 |
+
"platforms": [
|
| 2210 |
+
"pi",
|
| 2211 |
+
"windows"
|
| 2212 |
+
],
|
| 2213 |
+
"desc": "Private/incognito window",
|
| 2214 |
+
"executable": true
|
| 2215 |
+
},
|
| 2216 |
+
"install_package": {
|
| 2217 |
+
"slots": [
|
| 2218 |
+
"name"
|
| 2219 |
+
],
|
| 2220 |
+
"optional": [],
|
| 2221 |
+
"risk": "caution",
|
| 2222 |
+
"needs_sudo": true,
|
| 2223 |
+
"platforms": [
|
| 2224 |
+
"pi",
|
| 2225 |
+
"windows"
|
| 2226 |
+
],
|
| 2227 |
+
"desc": "Install a package/application by name",
|
| 2228 |
+
"executable": true
|
| 2229 |
+
},
|
| 2230 |
+
"install_python_package": {
|
| 2231 |
+
"slots": [
|
| 2232 |
+
"name"
|
| 2233 |
+
],
|
| 2234 |
+
"optional": [],
|
| 2235 |
+
"risk": "caution",
|
| 2236 |
+
"needs_sudo": false,
|
| 2237 |
+
"platforms": [
|
| 2238 |
+
"pi",
|
| 2239 |
+
"windows"
|
| 2240 |
+
],
|
| 2241 |
+
"desc": "pip-install a Python package",
|
| 2242 |
+
"executable": true
|
| 2243 |
+
},
|
| 2244 |
+
"install_updates": {
|
| 2245 |
+
"slots": [],
|
| 2246 |
+
"optional": [],
|
| 2247 |
+
"risk": "critical",
|
| 2248 |
+
"needs_sudo": true,
|
| 2249 |
+
"platforms": [
|
| 2250 |
+
"pi",
|
| 2251 |
+
"windows"
|
| 2252 |
+
],
|
| 2253 |
+
"desc": "Install OS updates (may reboot)",
|
| 2254 |
+
"executable": true
|
| 2255 |
+
},
|
| 2256 |
+
"interface_disable": {
|
| 2257 |
+
"slots": [
|
| 2258 |
+
"interface"
|
| 2259 |
+
],
|
| 2260 |
+
"optional": [],
|
| 2261 |
+
"risk": "critical",
|
| 2262 |
+
"needs_sudo": true,
|
| 2263 |
+
"platforms": [
|
| 2264 |
+
"pi"
|
| 2265 |
+
],
|
| 2266 |
+
"desc": "Disable Pi interface",
|
| 2267 |
+
"executable": true
|
| 2268 |
+
},
|
| 2269 |
+
"interface_enable": {
|
| 2270 |
+
"slots": [
|
| 2271 |
+
"interface"
|
| 2272 |
+
],
|
| 2273 |
+
"optional": [],
|
| 2274 |
+
"risk": "critical",
|
| 2275 |
+
"needs_sudo": true,
|
| 2276 |
+
"platforms": [
|
| 2277 |
+
"pi"
|
| 2278 |
+
],
|
| 2279 |
+
"desc": "Enable Pi interface (i2c/spi/serial/onewire/camera)",
|
| 2280 |
+
"executable": true
|
| 2281 |
+
},
|
| 2282 |
+
"kill_process": {
|
| 2283 |
+
"slots": [
|
| 2284 |
+
"pid"
|
| 2285 |
+
],
|
| 2286 |
+
"optional": [],
|
| 2287 |
+
"risk": "critical",
|
| 2288 |
+
"needs_sudo": false,
|
| 2289 |
+
"platforms": [
|
| 2290 |
+
"pi",
|
| 2291 |
+
"windows"
|
| 2292 |
+
],
|
| 2293 |
+
"desc": "kill process {pid}",
|
| 2294 |
+
"executable": true
|
| 2295 |
+
},
|
| 2296 |
+
"list_1wire_sensors": {
|
| 2297 |
+
"slots": [],
|
| 2298 |
+
"optional": [],
|
| 2299 |
+
"risk": "safe",
|
| 2300 |
+
"needs_sudo": false,
|
| 2301 |
+
"platforms": [
|
| 2302 |
+
"pi"
|
| 2303 |
+
],
|
| 2304 |
+
"desc": "List 1-Wire sensors",
|
| 2305 |
+
"executable": true
|
| 2306 |
+
},
|
| 2307 |
+
"list_arp": {
|
| 2308 |
+
"slots": [],
|
| 2309 |
+
"optional": [],
|
| 2310 |
+
"risk": "safe",
|
| 2311 |
+
"needs_sudo": false,
|
| 2312 |
+
"platforms": [
|
| 2313 |
+
"pi",
|
| 2314 |
+
"windows"
|
| 2315 |
+
],
|
| 2316 |
+
"desc": "ARP table (IP to MAC)",
|
| 2317 |
+
"executable": true
|
| 2318 |
+
},
|
| 2319 |
+
"list_audio_devices": {
|
| 2320 |
+
"slots": [],
|
| 2321 |
+
"optional": [],
|
| 2322 |
+
"risk": "safe",
|
| 2323 |
+
"needs_sudo": false,
|
| 2324 |
+
"platforms": [
|
| 2325 |
+
"pi",
|
| 2326 |
+
"windows"
|
| 2327 |
+
],
|
| 2328 |
+
"desc": "List audio capture/playback devices",
|
| 2329 |
+
"executable": true
|
| 2330 |
+
},
|
| 2331 |
+
"list_banned_ips": {
|
| 2332 |
+
"slots": [],
|
| 2333 |
+
"optional": [],
|
| 2334 |
+
"risk": "safe",
|
| 2335 |
+
"needs_sudo": false,
|
| 2336 |
+
"platforms": [
|
| 2337 |
+
"pi",
|
| 2338 |
+
"windows"
|
| 2339 |
+
],
|
| 2340 |
+
"desc": "List fail2ban bans",
|
| 2341 |
+
"executable": true
|
| 2342 |
+
},
|
| 2343 |
+
"list_bluetooth_devices": {
|
| 2344 |
+
"slots": [],
|
| 2345 |
+
"optional": [],
|
| 2346 |
+
"risk": "safe",
|
| 2347 |
+
"needs_sudo": false,
|
| 2348 |
+
"platforms": [
|
| 2349 |
+
"pi",
|
| 2350 |
+
"windows"
|
| 2351 |
+
],
|
| 2352 |
+
"desc": "List Bluetooth devices",
|
| 2353 |
+
"executable": true
|
| 2354 |
+
},
|
| 2355 |
+
"list_cameras": {
|
| 2356 |
+
"slots": [],
|
| 2357 |
+
"optional": [],
|
| 2358 |
+
"risk": "safe",
|
| 2359 |
+
"needs_sudo": false,
|
| 2360 |
+
"platforms": [
|
| 2361 |
+
"pi"
|
| 2362 |
+
],
|
| 2363 |
+
"desc": "list cameras",
|
| 2364 |
+
"executable": true
|
| 2365 |
+
},
|
| 2366 |
+
"list_connections": {
|
| 2367 |
+
"slots": [],
|
| 2368 |
+
"optional": [],
|
| 2369 |
+
"risk": "safe",
|
| 2370 |
+
"needs_sudo": false,
|
| 2371 |
+
"platforms": [
|
| 2372 |
+
"pi",
|
| 2373 |
+
"windows"
|
| 2374 |
+
],
|
| 2375 |
+
"desc": "show network connections",
|
| 2376 |
+
"executable": true
|
| 2377 |
+
},
|
| 2378 |
+
"list_disks": {
|
| 2379 |
+
"slots": [],
|
| 2380 |
+
"optional": [],
|
| 2381 |
+
"risk": "safe",
|
| 2382 |
+
"needs_sudo": false,
|
| 2383 |
+
"platforms": [
|
| 2384 |
+
"pi",
|
| 2385 |
+
"windows"
|
| 2386 |
+
],
|
| 2387 |
+
"desc": "list disk devices",
|
| 2388 |
+
"executable": true
|
| 2389 |
+
},
|
| 2390 |
+
"list_displays": {
|
| 2391 |
+
"slots": [],
|
| 2392 |
+
"optional": [],
|
| 2393 |
+
"risk": "safe",
|
| 2394 |
+
"needs_sudo": false,
|
| 2395 |
+
"platforms": [
|
| 2396 |
+
"pi",
|
| 2397 |
+
"windows"
|
| 2398 |
+
],
|
| 2399 |
+
"desc": "List connected displays and resolution",
|
| 2400 |
+
"executable": true
|
| 2401 |
+
},
|
| 2402 |
+
"list_failed_services": {
|
| 2403 |
+
"slots": [],
|
| 2404 |
+
"optional": [],
|
| 2405 |
+
"risk": "safe",
|
| 2406 |
+
"needs_sudo": false,
|
| 2407 |
+
"platforms": [
|
| 2408 |
+
"pi",
|
| 2409 |
+
"windows"
|
| 2410 |
+
],
|
| 2411 |
+
"desc": "List failed services",
|
| 2412 |
+
"executable": true
|
| 2413 |
+
},
|
| 2414 |
+
"list_files": {
|
| 2415 |
+
"slots": [
|
| 2416 |
+
"path"
|
| 2417 |
+
],
|
| 2418 |
+
"optional": [],
|
| 2419 |
+
"risk": "safe",
|
| 2420 |
+
"needs_sudo": false,
|
| 2421 |
+
"platforms": [
|
| 2422 |
+
"pi",
|
| 2423 |
+
"windows"
|
| 2424 |
+
],
|
| 2425 |
+
"desc": "list files in \"{path}\"",
|
| 2426 |
+
"executable": true
|
| 2427 |
+
},
|
| 2428 |
+
"list_free_gpio": {
|
| 2429 |
+
"slots": [],
|
| 2430 |
+
"optional": [],
|
| 2431 |
+
"risk": "safe",
|
| 2432 |
+
"needs_sudo": false,
|
| 2433 |
+
"platforms": [
|
| 2434 |
+
"pi"
|
| 2435 |
+
],
|
| 2436 |
+
"desc": "List unused GPIO pins",
|
| 2437 |
+
"executable": true
|
| 2438 |
+
},
|
| 2439 |
+
"list_gpio": {
|
| 2440 |
+
"slots": [],
|
| 2441 |
+
"optional": [],
|
| 2442 |
+
"risk": "safe",
|
| 2443 |
+
"needs_sudo": false,
|
| 2444 |
+
"platforms": [
|
| 2445 |
+
"pi"
|
| 2446 |
+
],
|
| 2447 |
+
"desc": "Read all GPIO pin states",
|
| 2448 |
+
"executable": true
|
| 2449 |
+
},
|
| 2450 |
+
"list_gpio_chips": {
|
| 2451 |
+
"slots": [],
|
| 2452 |
+
"optional": [],
|
| 2453 |
+
"risk": "safe",
|
| 2454 |
+
"needs_sudo": false,
|
| 2455 |
+
"platforms": [
|
| 2456 |
+
"pi"
|
| 2457 |
+
],
|
| 2458 |
+
"desc": "List gpiochips (gpiodetect)",
|
| 2459 |
+
"executable": true
|
| 2460 |
+
},
|
| 2461 |
+
"list_installed_apps": {
|
| 2462 |
+
"slots": [],
|
| 2463 |
+
"optional": [],
|
| 2464 |
+
"risk": "safe",
|
| 2465 |
+
"needs_sudo": false,
|
| 2466 |
+
"platforms": [
|
| 2467 |
+
"pi",
|
| 2468 |
+
"windows"
|
| 2469 |
+
],
|
| 2470 |
+
"desc": "List installed apps",
|
| 2471 |
+
"executable": true
|
| 2472 |
+
},
|
| 2473 |
+
"list_kernel_modules": {
|
| 2474 |
+
"slots": [],
|
| 2475 |
+
"optional": [],
|
| 2476 |
+
"risk": "safe",
|
| 2477 |
+
"needs_sudo": false,
|
| 2478 |
+
"platforms": [
|
| 2479 |
+
"pi",
|
| 2480 |
+
"windows"
|
| 2481 |
+
],
|
| 2482 |
+
"desc": "List loaded kernel modules",
|
| 2483 |
+
"executable": true
|
| 2484 |
+
},
|
| 2485 |
+
"list_llm_models": {
|
| 2486 |
+
"slots": [],
|
| 2487 |
+
"optional": [],
|
| 2488 |
+
"risk": "safe",
|
| 2489 |
+
"needs_sudo": false,
|
| 2490 |
+
"platforms": [
|
| 2491 |
+
"pi",
|
| 2492 |
+
"windows"
|
| 2493 |
+
],
|
| 2494 |
+
"desc": "List local LLM models",
|
| 2495 |
+
"executable": true
|
| 2496 |
+
},
|
| 2497 |
+
"list_logged_in_users": {
|
| 2498 |
+
"slots": [],
|
| 2499 |
+
"optional": [],
|
| 2500 |
+
"risk": "safe",
|
| 2501 |
+
"needs_sudo": false,
|
| 2502 |
+
"platforms": [
|
| 2503 |
+
"pi",
|
| 2504 |
+
"windows"
|
| 2505 |
+
],
|
| 2506 |
+
"desc": "Who is logged in",
|
| 2507 |
+
"executable": true
|
| 2508 |
+
},
|
| 2509 |
+
"list_open_files": {
|
| 2510 |
+
"slots": [],
|
| 2511 |
+
"optional": [
|
| 2512 |
+
"device"
|
| 2513 |
+
],
|
| 2514 |
+
"risk": "safe",
|
| 2515 |
+
"needs_sudo": false,
|
| 2516 |
+
"platforms": [
|
| 2517 |
+
"pi",
|
| 2518 |
+
"windows"
|
| 2519 |
+
],
|
| 2520 |
+
"desc": "What holds a device/port/file open",
|
| 2521 |
+
"executable": true
|
| 2522 |
+
},
|
| 2523 |
+
"list_open_ports": {
|
| 2524 |
+
"slots": [],
|
| 2525 |
+
"optional": [],
|
| 2526 |
+
"risk": "safe",
|
| 2527 |
+
"needs_sudo": false,
|
| 2528 |
+
"platforms": [
|
| 2529 |
+
"pi",
|
| 2530 |
+
"windows"
|
| 2531 |
+
],
|
| 2532 |
+
"desc": "List open/listening ports",
|
| 2533 |
+
"executable": true
|
| 2534 |
+
},
|
| 2535 |
+
"list_packages": {
|
| 2536 |
+
"slots": [],
|
| 2537 |
+
"optional": [],
|
| 2538 |
+
"risk": "safe",
|
| 2539 |
+
"needs_sudo": false,
|
| 2540 |
+
"platforms": [
|
| 2541 |
+
"pi",
|
| 2542 |
+
"windows"
|
| 2543 |
+
],
|
| 2544 |
+
"desc": "List installed packages",
|
| 2545 |
+
"executable": true
|
| 2546 |
+
},
|
| 2547 |
+
"list_partitions": {
|
| 2548 |
+
"slots": [],
|
| 2549 |
+
"optional": [],
|
| 2550 |
+
"risk": "safe",
|
| 2551 |
+
"needs_sudo": false,
|
| 2552 |
+
"platforms": [
|
| 2553 |
+
"pi",
|
| 2554 |
+
"windows"
|
| 2555 |
+
],
|
| 2556 |
+
"desc": "List disks/partitions/filesystems",
|
| 2557 |
+
"executable": true
|
| 2558 |
+
},
|
| 2559 |
+
"list_pci": {
|
| 2560 |
+
"slots": [],
|
| 2561 |
+
"optional": [],
|
| 2562 |
+
"risk": "safe",
|
| 2563 |
+
"needs_sudo": false,
|
| 2564 |
+
"platforms": [
|
| 2565 |
+
"pi"
|
| 2566 |
+
],
|
| 2567 |
+
"desc": "list pci devices",
|
| 2568 |
+
"executable": true
|
| 2569 |
+
},
|
| 2570 |
+
"list_printers": {
|
| 2571 |
+
"slots": [],
|
| 2572 |
+
"optional": [],
|
| 2573 |
+
"risk": "safe",
|
| 2574 |
+
"needs_sudo": false,
|
| 2575 |
+
"platforms": [
|
| 2576 |
+
"pi",
|
| 2577 |
+
"windows"
|
| 2578 |
+
],
|
| 2579 |
+
"desc": "List printers",
|
| 2580 |
+
"executable": true
|
| 2581 |
+
},
|
| 2582 |
+
"list_processes": {
|
| 2583 |
+
"slots": [],
|
| 2584 |
+
"optional": [],
|
| 2585 |
+
"risk": "safe",
|
| 2586 |
+
"needs_sudo": false,
|
| 2587 |
+
"platforms": [
|
| 2588 |
+
"pi",
|
| 2589 |
+
"windows"
|
| 2590 |
+
],
|
| 2591 |
+
"desc": "list running processes",
|
| 2592 |
+
"executable": true
|
| 2593 |
+
},
|
| 2594 |
+
"list_serial_ports": {
|
| 2595 |
+
"slots": [],
|
| 2596 |
+
"optional": [],
|
| 2597 |
+
"risk": "safe",
|
| 2598 |
+
"needs_sudo": false,
|
| 2599 |
+
"platforms": [
|
| 2600 |
+
"pi"
|
| 2601 |
+
],
|
| 2602 |
+
"desc": "List serial/UART ports",
|
| 2603 |
+
"executable": true
|
| 2604 |
+
},
|
| 2605 |
+
"list_services": {
|
| 2606 |
+
"slots": [],
|
| 2607 |
+
"optional": [],
|
| 2608 |
+
"risk": "safe",
|
| 2609 |
+
"needs_sudo": false,
|
| 2610 |
+
"platforms": [
|
| 2611 |
+
"pi",
|
| 2612 |
+
"windows"
|
| 2613 |
+
],
|
| 2614 |
+
"desc": "list services",
|
| 2615 |
+
"executable": true
|
| 2616 |
+
},
|
| 2617 |
+
"list_sessions": {
|
| 2618 |
+
"slots": [],
|
| 2619 |
+
"optional": [],
|
| 2620 |
+
"risk": "safe",
|
| 2621 |
+
"needs_sudo": false,
|
| 2622 |
+
"platforms": [
|
| 2623 |
+
"pi",
|
| 2624 |
+
"windows"
|
| 2625 |
+
],
|
| 2626 |
+
"desc": "List sessions",
|
| 2627 |
+
"executable": true
|
| 2628 |
+
},
|
| 2629 |
+
"list_spi_devices": {
|
| 2630 |
+
"slots": [],
|
| 2631 |
+
"optional": [],
|
| 2632 |
+
"risk": "safe",
|
| 2633 |
+
"needs_sudo": false,
|
| 2634 |
+
"platforms": [
|
| 2635 |
+
"pi"
|
| 2636 |
+
],
|
| 2637 |
+
"desc": "List SPI devices",
|
| 2638 |
+
"executable": true
|
| 2639 |
+
},
|
| 2640 |
+
"list_usb": {
|
| 2641 |
+
"slots": [],
|
| 2642 |
+
"optional": [],
|
| 2643 |
+
"risk": "safe",
|
| 2644 |
+
"needs_sudo": false,
|
| 2645 |
+
"platforms": [
|
| 2646 |
+
"pi"
|
| 2647 |
+
],
|
| 2648 |
+
"desc": "list usb devices",
|
| 2649 |
+
"executable": true
|
| 2650 |
+
},
|
| 2651 |
+
"list_wifi": {
|
| 2652 |
+
"slots": [],
|
| 2653 |
+
"optional": [],
|
| 2654 |
+
"risk": "safe",
|
| 2655 |
+
"needs_sudo": false,
|
| 2656 |
+
"platforms": [
|
| 2657 |
+
"pi",
|
| 2658 |
+
"windows"
|
| 2659 |
+
],
|
| 2660 |
+
"desc": "List available Wi-Fi networks",
|
| 2661 |
+
"executable": true
|
| 2662 |
+
},
|
| 2663 |
+
"load_overlay": {
|
| 2664 |
+
"slots": [
|
| 2665 |
+
"overlay"
|
| 2666 |
+
],
|
| 2667 |
+
"optional": [],
|
| 2668 |
+
"risk": "caution",
|
| 2669 |
+
"needs_sudo": true,
|
| 2670 |
+
"platforms": [
|
| 2671 |
+
"pi"
|
| 2672 |
+
],
|
| 2673 |
+
"desc": "Load a device-tree overlay",
|
| 2674 |
+
"executable": true
|
| 2675 |
+
},
|
| 2676 |
+
"lock_screen": {
|
| 2677 |
+
"slots": [],
|
| 2678 |
+
"optional": [],
|
| 2679 |
+
"risk": "caution",
|
| 2680 |
+
"needs_sudo": false,
|
| 2681 |
+
"platforms": [
|
| 2682 |
+
"pi",
|
| 2683 |
+
"windows"
|
| 2684 |
+
],
|
| 2685 |
+
"desc": "Lock the screen",
|
| 2686 |
+
"executable": true
|
| 2687 |
+
},
|
| 2688 |
+
"magnifier_off": {
|
| 2689 |
+
"slots": [],
|
| 2690 |
+
"optional": [],
|
| 2691 |
+
"risk": "safe",
|
| 2692 |
+
"needs_sudo": false,
|
| 2693 |
+
"platforms": [
|
| 2694 |
+
"pi",
|
| 2695 |
+
"windows"
|
| 2696 |
+
],
|
| 2697 |
+
"desc": "Close magnifier",
|
| 2698 |
+
"executable": true
|
| 2699 |
+
},
|
| 2700 |
+
"magnifier_on": {
|
| 2701 |
+
"slots": [],
|
| 2702 |
+
"optional": [],
|
| 2703 |
+
"risk": "safe",
|
| 2704 |
+
"needs_sudo": false,
|
| 2705 |
+
"platforms": [
|
| 2706 |
+
"pi",
|
| 2707 |
+
"windows"
|
| 2708 |
+
],
|
| 2709 |
+
"desc": "Open magnifier",
|
| 2710 |
+
"executable": true
|
| 2711 |
+
},
|
| 2712 |
+
"manage_users": {
|
| 2713 |
+
"slots": [],
|
| 2714 |
+
"optional": [
|
| 2715 |
+
"user"
|
| 2716 |
+
],
|
| 2717 |
+
"risk": "critical",
|
| 2718 |
+
"needs_sudo": true,
|
| 2719 |
+
"platforms": [
|
| 2720 |
+
"pi",
|
| 2721 |
+
"windows"
|
| 2722 |
+
],
|
| 2723 |
+
"desc": "Add/remove/modify a user or sudo access",
|
| 2724 |
+
"executable": true
|
| 2725 |
+
},
|
| 2726 |
+
"maximize_window": {
|
| 2727 |
+
"slots": [],
|
| 2728 |
+
"optional": [],
|
| 2729 |
+
"risk": "safe",
|
| 2730 |
+
"needs_sudo": false,
|
| 2731 |
+
"platforms": [
|
| 2732 |
+
"pi",
|
| 2733 |
+
"windows"
|
| 2734 |
+
],
|
| 2735 |
+
"desc": "Maximize current window",
|
| 2736 |
+
"executable": true
|
| 2737 |
+
},
|
| 2738 |
+
"media_next": {
|
| 2739 |
+
"slots": [],
|
| 2740 |
+
"optional": [],
|
| 2741 |
+
"risk": "safe",
|
| 2742 |
+
"needs_sudo": false,
|
| 2743 |
+
"platforms": [
|
| 2744 |
+
"pi",
|
| 2745 |
+
"windows"
|
| 2746 |
+
],
|
| 2747 |
+
"desc": "Next track / video",
|
| 2748 |
+
"executable": true
|
| 2749 |
+
},
|
| 2750 |
+
"media_pause": {
|
| 2751 |
+
"slots": [],
|
| 2752 |
+
"optional": [],
|
| 2753 |
+
"risk": "safe",
|
| 2754 |
+
"needs_sudo": false,
|
| 2755 |
+
"platforms": [
|
| 2756 |
+
"pi",
|
| 2757 |
+
"windows"
|
| 2758 |
+
],
|
| 2759 |
+
"desc": "Pause / stop media",
|
| 2760 |
+
"executable": true
|
| 2761 |
+
},
|
| 2762 |
+
"media_play": {
|
| 2763 |
+
"slots": [],
|
| 2764 |
+
"optional": [],
|
| 2765 |
+
"risk": "safe",
|
| 2766 |
+
"needs_sudo": false,
|
| 2767 |
+
"platforms": [
|
| 2768 |
+
"pi",
|
| 2769 |
+
"windows"
|
| 2770 |
+
],
|
| 2771 |
+
"desc": "Play / resume media",
|
| 2772 |
+
"executable": true
|
| 2773 |
+
},
|
| 2774 |
+
"media_play_pause": {
|
| 2775 |
+
"slots": [],
|
| 2776 |
+
"optional": [],
|
| 2777 |
+
"risk": "safe",
|
| 2778 |
+
"needs_sudo": false,
|
| 2779 |
+
"platforms": [
|
| 2780 |
+
"pi",
|
| 2781 |
+
"windows"
|
| 2782 |
+
],
|
| 2783 |
+
"desc": "play pause media",
|
| 2784 |
+
"executable": true
|
| 2785 |
+
},
|
| 2786 |
+
"media_prev": {
|
| 2787 |
+
"slots": [],
|
| 2788 |
+
"optional": [],
|
| 2789 |
+
"risk": "safe",
|
| 2790 |
+
"needs_sudo": false,
|
| 2791 |
+
"platforms": [
|
| 2792 |
+
"pi",
|
| 2793 |
+
"windows"
|
| 2794 |
+
],
|
| 2795 |
+
"desc": "Previous track / video",
|
| 2796 |
+
"executable": true
|
| 2797 |
+
},
|
| 2798 |
+
"mic_mute": {
|
| 2799 |
+
"slots": [],
|
| 2800 |
+
"optional": [],
|
| 2801 |
+
"risk": "safe",
|
| 2802 |
+
"needs_sudo": false,
|
| 2803 |
+
"platforms": [
|
| 2804 |
+
"pi",
|
| 2805 |
+
"windows"
|
| 2806 |
+
],
|
| 2807 |
+
"desc": "Mute microphone",
|
| 2808 |
+
"executable": true
|
| 2809 |
+
},
|
| 2810 |
+
"mic_unmute": {
|
| 2811 |
+
"slots": [],
|
| 2812 |
+
"optional": [],
|
| 2813 |
+
"risk": "safe",
|
| 2814 |
+
"needs_sudo": false,
|
| 2815 |
+
"platforms": [
|
| 2816 |
+
"pi",
|
| 2817 |
+
"windows"
|
| 2818 |
+
],
|
| 2819 |
+
"desc": "Unmute microphone",
|
| 2820 |
+
"executable": true
|
| 2821 |
+
},
|
| 2822 |
+
"minimize_window": {
|
| 2823 |
+
"slots": [],
|
| 2824 |
+
"optional": [],
|
| 2825 |
+
"risk": "safe",
|
| 2826 |
+
"needs_sudo": false,
|
| 2827 |
+
"platforms": [
|
| 2828 |
+
"pi",
|
| 2829 |
+
"windows"
|
| 2830 |
+
],
|
| 2831 |
+
"desc": "Minimize current window",
|
| 2832 |
+
"executable": true
|
| 2833 |
+
},
|
| 2834 |
+
"monitor_health": {
|
| 2835 |
+
"slots": [],
|
| 2836 |
+
"optional": [],
|
| 2837 |
+
"risk": "safe",
|
| 2838 |
+
"needs_sudo": false,
|
| 2839 |
+
"platforms": [
|
| 2840 |
+
"pi",
|
| 2841 |
+
"windows"
|
| 2842 |
+
],
|
| 2843 |
+
"desc": "Live temp/clock/throttle monitor",
|
| 2844 |
+
"executable": true
|
| 2845 |
+
},
|
| 2846 |
+
"monitor_hotplug": {
|
| 2847 |
+
"slots": [],
|
| 2848 |
+
"optional": [],
|
| 2849 |
+
"risk": "safe",
|
| 2850 |
+
"needs_sudo": false,
|
| 2851 |
+
"platforms": [
|
| 2852 |
+
"pi",
|
| 2853 |
+
"windows"
|
| 2854 |
+
],
|
| 2855 |
+
"desc": "Watch udev hotplug events",
|
| 2856 |
+
"executable": true
|
| 2857 |
+
},
|
| 2858 |
+
"mount_drive": {
|
| 2859 |
+
"slots": [
|
| 2860 |
+
"device"
|
| 2861 |
+
],
|
| 2862 |
+
"optional": [],
|
| 2863 |
+
"risk": "caution",
|
| 2864 |
+
"needs_sudo": true,
|
| 2865 |
+
"platforms": [
|
| 2866 |
+
"pi",
|
| 2867 |
+
"windows"
|
| 2868 |
+
],
|
| 2869 |
+
"desc": "Mount a drive",
|
| 2870 |
+
"executable": true
|
| 2871 |
+
},
|
| 2872 |
+
"move_file": {
|
| 2873 |
+
"slots": [
|
| 2874 |
+
"src",
|
| 2875 |
+
"dst"
|
| 2876 |
+
],
|
| 2877 |
+
"optional": [],
|
| 2878 |
+
"risk": "caution",
|
| 2879 |
+
"needs_sudo": false,
|
| 2880 |
+
"platforms": [
|
| 2881 |
+
"pi",
|
| 2882 |
+
"windows"
|
| 2883 |
+
],
|
| 2884 |
+
"desc": "move file \"{src}\" to \"{dst}\"",
|
| 2885 |
+
"executable": true
|
| 2886 |
+
},
|
| 2887 |
+
"mute": {
|
| 2888 |
+
"slots": [],
|
| 2889 |
+
"optional": [],
|
| 2890 |
+
"risk": "safe",
|
| 2891 |
+
"needs_sudo": false,
|
| 2892 |
+
"platforms": [
|
| 2893 |
+
"pi",
|
| 2894 |
+
"windows"
|
| 2895 |
+
],
|
| 2896 |
+
"desc": "Mute audio",
|
| 2897 |
+
"executable": true
|
| 2898 |
+
},
|
| 2899 |
+
"narrator_off": {
|
| 2900 |
+
"slots": [],
|
| 2901 |
+
"optional": [],
|
| 2902 |
+
"risk": "safe",
|
| 2903 |
+
"needs_sudo": false,
|
| 2904 |
+
"platforms": [
|
| 2905 |
+
"pi",
|
| 2906 |
+
"windows"
|
| 2907 |
+
],
|
| 2908 |
+
"desc": "Turn narrator / screen reader off",
|
| 2909 |
+
"executable": true
|
| 2910 |
+
},
|
| 2911 |
+
"narrator_on": {
|
| 2912 |
+
"slots": [],
|
| 2913 |
+
"optional": [],
|
| 2914 |
+
"risk": "safe",
|
| 2915 |
+
"needs_sudo": false,
|
| 2916 |
+
"platforms": [
|
| 2917 |
+
"pi",
|
| 2918 |
+
"windows"
|
| 2919 |
+
],
|
| 2920 |
+
"desc": "Turn narrator / screen reader on",
|
| 2921 |
+
"executable": true
|
| 2922 |
+
},
|
| 2923 |
+
"network_status": {
|
| 2924 |
+
"slots": [],
|
| 2925 |
+
"optional": [],
|
| 2926 |
+
"risk": "safe",
|
| 2927 |
+
"needs_sudo": false,
|
| 2928 |
+
"platforms": [
|
| 2929 |
+
"pi",
|
| 2930 |
+
"windows"
|
| 2931 |
+
],
|
| 2932 |
+
"desc": "Is internet connected? Show connection status",
|
| 2933 |
+
"executable": true
|
| 2934 |
+
},
|
| 2935 |
+
"new_tab": {
|
| 2936 |
+
"slots": [],
|
| 2937 |
+
"optional": [],
|
| 2938 |
+
"risk": "safe",
|
| 2939 |
+
"needs_sudo": false,
|
| 2940 |
+
"platforms": [
|
| 2941 |
+
"pi",
|
| 2942 |
+
"windows"
|
| 2943 |
+
],
|
| 2944 |
+
"desc": "Open a new browser tab",
|
| 2945 |
+
"executable": true
|
| 2946 |
+
},
|
| 2947 |
+
"new_virtual_desktop": {
|
| 2948 |
+
"slots": [],
|
| 2949 |
+
"optional": [],
|
| 2950 |
+
"risk": "safe",
|
| 2951 |
+
"needs_sudo": false,
|
| 2952 |
+
"platforms": [
|
| 2953 |
+
"pi",
|
| 2954 |
+
"windows"
|
| 2955 |
+
],
|
| 2956 |
+
"desc": "New virtual desktop",
|
| 2957 |
+
"executable": true
|
| 2958 |
+
},
|
| 2959 |
+
"next_tab": {
|
| 2960 |
+
"slots": [],
|
| 2961 |
+
"optional": [],
|
| 2962 |
+
"risk": "safe",
|
| 2963 |
+
"needs_sudo": false,
|
| 2964 |
+
"platforms": [
|
| 2965 |
+
"pi",
|
| 2966 |
+
"windows"
|
| 2967 |
+
],
|
| 2968 |
+
"desc": "Next tab",
|
| 2969 |
+
"executable": true
|
| 2970 |
+
},
|
| 2971 |
+
"night_light_off": {
|
| 2972 |
+
"slots": [],
|
| 2973 |
+
"optional": [],
|
| 2974 |
+
"risk": "safe",
|
| 2975 |
+
"needs_sudo": false,
|
| 2976 |
+
"platforms": [
|
| 2977 |
+
"pi",
|
| 2978 |
+
"windows"
|
| 2979 |
+
],
|
| 2980 |
+
"desc": "Turn off night light",
|
| 2981 |
+
"executable": true
|
| 2982 |
+
},
|
| 2983 |
+
"night_light_on": {
|
| 2984 |
+
"slots": [],
|
| 2985 |
+
"optional": [],
|
| 2986 |
+
"risk": "safe",
|
| 2987 |
+
"needs_sudo": false,
|
| 2988 |
+
"platforms": [
|
| 2989 |
+
"pi",
|
| 2990 |
+
"windows"
|
| 2991 |
+
],
|
| 2992 |
+
"desc": "Turn on night light / blue light filter",
|
| 2993 |
+
"executable": true
|
| 2994 |
+
},
|
| 2995 |
+
"onscreen_keyboard": {
|
| 2996 |
+
"slots": [],
|
| 2997 |
+
"optional": [],
|
| 2998 |
+
"risk": "safe",
|
| 2999 |
+
"needs_sudo": false,
|
| 3000 |
+
"platforms": [
|
| 3001 |
+
"pi",
|
| 3002 |
+
"windows"
|
| 3003 |
+
],
|
| 3004 |
+
"desc": "Open on-screen keyboard",
|
| 3005 |
+
"executable": true
|
| 3006 |
+
},
|
| 3007 |
+
"open_app": {
|
| 3008 |
+
"slots": [
|
| 3009 |
+
"app"
|
| 3010 |
+
],
|
| 3011 |
+
"optional": [],
|
| 3012 |
+
"risk": "caution",
|
| 3013 |
+
"needs_sudo": false,
|
| 3014 |
+
"platforms": [
|
| 3015 |
+
"pi",
|
| 3016 |
+
"windows"
|
| 3017 |
+
],
|
| 3018 |
+
"desc": "Open / launch an application",
|
| 3019 |
+
"executable": true
|
| 3020 |
+
},
|
| 3021 |
+
"open_config_tool": {
|
| 3022 |
+
"slots": [],
|
| 3023 |
+
"optional": [],
|
| 3024 |
+
"risk": "caution",
|
| 3025 |
+
"needs_sudo": false,
|
| 3026 |
+
"platforms": [
|
| 3027 |
+
"pi"
|
| 3028 |
+
],
|
| 3029 |
+
"desc": "Open raspi-config",
|
| 3030 |
+
"executable": true
|
| 3031 |
+
},
|
| 3032 |
+
"open_file": {
|
| 3033 |
+
"slots": [
|
| 3034 |
+
"path"
|
| 3035 |
+
],
|
| 3036 |
+
"optional": [],
|
| 3037 |
+
"risk": "safe",
|
| 3038 |
+
"needs_sudo": false,
|
| 3039 |
+
"platforms": [
|
| 3040 |
+
"pi",
|
| 3041 |
+
"windows"
|
| 3042 |
+
],
|
| 3043 |
+
"desc": "Open a file by name",
|
| 3044 |
+
"executable": true
|
| 3045 |
+
},
|
| 3046 |
+
"open_folder": {
|
| 3047 |
+
"slots": [
|
| 3048 |
+
"folder"
|
| 3049 |
+
],
|
| 3050 |
+
"optional": [],
|
| 3051 |
+
"risk": "safe",
|
| 3052 |
+
"needs_sudo": false,
|
| 3053 |
+
"platforms": [
|
| 3054 |
+
"pi",
|
| 3055 |
+
"windows"
|
| 3056 |
+
],
|
| 3057 |
+
"desc": "Open a well-known folder",
|
| 3058 |
+
"executable": true
|
| 3059 |
+
},
|
| 3060 |
+
"open_notification_center": {
|
| 3061 |
+
"slots": [],
|
| 3062 |
+
"optional": [],
|
| 3063 |
+
"risk": "safe",
|
| 3064 |
+
"needs_sudo": false,
|
| 3065 |
+
"platforms": [
|
| 3066 |
+
"pi",
|
| 3067 |
+
"windows"
|
| 3068 |
+
],
|
| 3069 |
+
"desc": "Open notification centre",
|
| 3070 |
+
"executable": true
|
| 3071 |
+
},
|
| 3072 |
+
"open_recycle_bin": {
|
| 3073 |
+
"slots": [],
|
| 3074 |
+
"optional": [],
|
| 3075 |
+
"risk": "safe",
|
| 3076 |
+
"needs_sudo": false,
|
| 3077 |
+
"platforms": [
|
| 3078 |
+
"pi",
|
| 3079 |
+
"windows"
|
| 3080 |
+
],
|
| 3081 |
+
"desc": "Open recycle bin / trash",
|
| 3082 |
+
"executable": true
|
| 3083 |
+
},
|
| 3084 |
+
"open_serial_terminal": {
|
| 3085 |
+
"slots": [
|
| 3086 |
+
"serial_port"
|
| 3087 |
+
],
|
| 3088 |
+
"optional": [
|
| 3089 |
+
"baud"
|
| 3090 |
+
],
|
| 3091 |
+
"risk": "caution",
|
| 3092 |
+
"needs_sudo": false,
|
| 3093 |
+
"platforms": [
|
| 3094 |
+
"pi"
|
| 3095 |
+
],
|
| 3096 |
+
"desc": "Open a serial console",
|
| 3097 |
+
"executable": true
|
| 3098 |
+
},
|
| 3099 |
+
"open_settings": {
|
| 3100 |
+
"slots": [],
|
| 3101 |
+
"optional": [
|
| 3102 |
+
"page"
|
| 3103 |
+
],
|
| 3104 |
+
"risk": "safe",
|
| 3105 |
+
"needs_sudo": false,
|
| 3106 |
+
"platforms": [
|
| 3107 |
+
"pi",
|
| 3108 |
+
"windows"
|
| 3109 |
+
],
|
| 3110 |
+
"desc": "Open settings (optionally a specific page)",
|
| 3111 |
+
"executable": true
|
| 3112 |
+
},
|
| 3113 |
+
"open_site": {
|
| 3114 |
+
"slots": [
|
| 3115 |
+
"site"
|
| 3116 |
+
],
|
| 3117 |
+
"optional": [],
|
| 3118 |
+
"risk": "safe",
|
| 3119 |
+
"needs_sudo": false,
|
| 3120 |
+
"platforms": [
|
| 3121 |
+
"pi",
|
| 3122 |
+
"windows"
|
| 3123 |
+
],
|
| 3124 |
+
"desc": "Open a known website",
|
| 3125 |
+
"executable": true
|
| 3126 |
+
},
|
| 3127 |
+
"open_url": {
|
| 3128 |
+
"slots": [
|
| 3129 |
+
"url"
|
| 3130 |
+
],
|
| 3131 |
+
"optional": [],
|
| 3132 |
+
"risk": "safe",
|
| 3133 |
+
"needs_sudo": false,
|
| 3134 |
+
"platforms": [
|
| 3135 |
+
"pi",
|
| 3136 |
+
"windows"
|
| 3137 |
+
],
|
| 3138 |
+
"desc": "Open an arbitrary URL / domain the user typed",
|
| 3139 |
+
"executable": true
|
| 3140 |
+
},
|
| 3141 |
+
"packet_capture": {
|
| 3142 |
+
"slots": [],
|
| 3143 |
+
"optional": [
|
| 3144 |
+
"iface"
|
| 3145 |
+
],
|
| 3146 |
+
"risk": "caution",
|
| 3147 |
+
"needs_sudo": true,
|
| 3148 |
+
"platforms": [
|
| 3149 |
+
"pi",
|
| 3150 |
+
"windows"
|
| 3151 |
+
],
|
| 3152 |
+
"desc": "Capture packets on an interface",
|
| 3153 |
+
"executable": true
|
| 3154 |
+
},
|
| 3155 |
+
"partition_disk": {
|
| 3156 |
+
"slots": [],
|
| 3157 |
+
"optional": [
|
| 3158 |
+
"device"
|
| 3159 |
+
],
|
| 3160 |
+
"risk": "critical",
|
| 3161 |
+
"needs_sudo": true,
|
| 3162 |
+
"platforms": [
|
| 3163 |
+
"pi",
|
| 3164 |
+
"windows"
|
| 3165 |
+
],
|
| 3166 |
+
"desc": "Partition or format a disk",
|
| 3167 |
+
"executable": true
|
| 3168 |
+
},
|
| 3169 |
+
"paste": {
|
| 3170 |
+
"slots": [],
|
| 3171 |
+
"optional": [],
|
| 3172 |
+
"risk": "safe",
|
| 3173 |
+
"needs_sudo": false,
|
| 3174 |
+
"platforms": [
|
| 3175 |
+
"pi",
|
| 3176 |
+
"windows"
|
| 3177 |
+
],
|
| 3178 |
+
"desc": "Paste (Ctrl+V)",
|
| 3179 |
+
"executable": true
|
| 3180 |
+
},
|
| 3181 |
+
"ping": {
|
| 3182 |
+
"slots": [
|
| 3183 |
+
"host"
|
| 3184 |
+
],
|
| 3185 |
+
"optional": [],
|
| 3186 |
+
"risk": "safe",
|
| 3187 |
+
"needs_sudo": false,
|
| 3188 |
+
"platforms": [
|
| 3189 |
+
"pi",
|
| 3190 |
+
"windows"
|
| 3191 |
+
],
|
| 3192 |
+
"desc": "Ping a host",
|
| 3193 |
+
"executable": true
|
| 3194 |
+
},
|
| 3195 |
+
"port_forward": {
|
| 3196 |
+
"slots": [
|
| 3197 |
+
"port"
|
| 3198 |
+
],
|
| 3199 |
+
"optional": [
|
| 3200 |
+
"host"
|
| 3201 |
+
],
|
| 3202 |
+
"risk": "caution",
|
| 3203 |
+
"needs_sudo": false,
|
| 3204 |
+
"platforms": [
|
| 3205 |
+
"pi",
|
| 3206 |
+
"windows"
|
| 3207 |
+
],
|
| 3208 |
+
"desc": "SSH port-forward",
|
| 3209 |
+
"executable": true
|
| 3210 |
+
},
|
| 3211 |
+
"power_mode": {
|
| 3212 |
+
"slots": [
|
| 3213 |
+
"mode"
|
| 3214 |
+
],
|
| 3215 |
+
"optional": [],
|
| 3216 |
+
"risk": "caution",
|
| 3217 |
+
"needs_sudo": false,
|
| 3218 |
+
"platforms": [
|
| 3219 |
+
"pi",
|
| 3220 |
+
"windows"
|
| 3221 |
+
],
|
| 3222 |
+
"desc": "Power plan: performance / balanced",
|
| 3223 |
+
"executable": true
|
| 3224 |
+
},
|
| 3225 |
+
"press_key": {
|
| 3226 |
+
"slots": [
|
| 3227 |
+
"key"
|
| 3228 |
+
],
|
| 3229 |
+
"optional": [],
|
| 3230 |
+
"risk": "caution",
|
| 3231 |
+
"needs_sudo": false,
|
| 3232 |
+
"platforms": [
|
| 3233 |
+
"pi",
|
| 3234 |
+
"windows"
|
| 3235 |
+
],
|
| 3236 |
+
"desc": "Press a single named key",
|
| 3237 |
+
"executable": true
|
| 3238 |
+
},
|
| 3239 |
+
"prev_tab": {
|
| 3240 |
+
"slots": [],
|
| 3241 |
+
"optional": [],
|
| 3242 |
+
"risk": "safe",
|
| 3243 |
+
"needs_sudo": false,
|
| 3244 |
+
"platforms": [
|
| 3245 |
+
"pi",
|
| 3246 |
+
"windows"
|
| 3247 |
+
],
|
| 3248 |
+
"desc": "Previous tab",
|
| 3249 |
+
"executable": true
|
| 3250 |
+
},
|
| 3251 |
+
"print_file": {
|
| 3252 |
+
"slots": [
|
| 3253 |
+
"path"
|
| 3254 |
+
],
|
| 3255 |
+
"optional": [],
|
| 3256 |
+
"risk": "caution",
|
| 3257 |
+
"needs_sudo": false,
|
| 3258 |
+
"platforms": [
|
| 3259 |
+
"pi",
|
| 3260 |
+
"windows"
|
| 3261 |
+
],
|
| 3262 |
+
"desc": "Print a file",
|
| 3263 |
+
"executable": true
|
| 3264 |
+
},
|
| 3265 |
+
"print_page": {
|
| 3266 |
+
"slots": [],
|
| 3267 |
+
"optional": [],
|
| 3268 |
+
"risk": "safe",
|
| 3269 |
+
"needs_sudo": false,
|
| 3270 |
+
"platforms": [
|
| 3271 |
+
"pi",
|
| 3272 |
+
"windows"
|
| 3273 |
+
],
|
| 3274 |
+
"desc": "Print (Ctrl+P)",
|
| 3275 |
+
"executable": true
|
| 3276 |
+
},
|
| 3277 |
+
"pull_llm_model": {
|
| 3278 |
+
"slots": [
|
| 3279 |
+
"model"
|
| 3280 |
+
],
|
| 3281 |
+
"optional": [],
|
| 3282 |
+
"risk": "caution",
|
| 3283 |
+
"needs_sudo": false,
|
| 3284 |
+
"platforms": [
|
| 3285 |
+
"pi",
|
| 3286 |
+
"windows"
|
| 3287 |
+
],
|
| 3288 |
+
"desc": "Download an LLM model",
|
| 3289 |
+
"executable": true
|
| 3290 |
+
},
|
| 3291 |
+
"read_file": {
|
| 3292 |
+
"slots": [
|
| 3293 |
+
"path"
|
| 3294 |
+
],
|
| 3295 |
+
"optional": [],
|
| 3296 |
+
"risk": "caution",
|
| 3297 |
+
"needs_sudo": false,
|
| 3298 |
+
"platforms": [
|
| 3299 |
+
"pi",
|
| 3300 |
+
"windows"
|
| 3301 |
+
],
|
| 3302 |
+
"desc": "read file \"{path}\"",
|
| 3303 |
+
"executable": true
|
| 3304 |
+
},
|
| 3305 |
+
"recent_files": {
|
| 3306 |
+
"slots": [],
|
| 3307 |
+
"optional": [],
|
| 3308 |
+
"risk": "safe",
|
| 3309 |
+
"needs_sudo": false,
|
| 3310 |
+
"platforms": [
|
| 3311 |
+
"pi",
|
| 3312 |
+
"windows"
|
| 3313 |
+
],
|
| 3314 |
+
"desc": "Show recent files",
|
| 3315 |
+
"executable": true
|
| 3316 |
+
},
|
| 3317 |
+
"record_audio": {
|
| 3318 |
+
"slots": [
|
| 3319 |
+
"amount",
|
| 3320 |
+
"unit"
|
| 3321 |
+
],
|
| 3322 |
+
"optional": [],
|
| 3323 |
+
"risk": "safe",
|
| 3324 |
+
"needs_sudo": false,
|
| 3325 |
+
"platforms": [
|
| 3326 |
+
"pi",
|
| 3327 |
+
"windows"
|
| 3328 |
+
],
|
| 3329 |
+
"desc": "Record audio from the mic for a duration",
|
| 3330 |
+
"executable": true
|
| 3331 |
+
},
|
| 3332 |
+
"redo": {
|
| 3333 |
+
"slots": [],
|
| 3334 |
+
"optional": [],
|
| 3335 |
+
"risk": "safe",
|
| 3336 |
+
"needs_sudo": false,
|
| 3337 |
+
"platforms": [
|
| 3338 |
+
"pi",
|
| 3339 |
+
"windows"
|
| 3340 |
+
],
|
| 3341 |
+
"desc": "Redo (Ctrl+Y)",
|
| 3342 |
+
"executable": true
|
| 3343 |
+
},
|
| 3344 |
+
"refresh": {
|
| 3345 |
+
"slots": [],
|
| 3346 |
+
"optional": [],
|
| 3347 |
+
"risk": "safe",
|
| 3348 |
+
"needs_sudo": false,
|
| 3349 |
+
"platforms": [
|
| 3350 |
+
"pi",
|
| 3351 |
+
"windows"
|
| 3352 |
+
],
|
| 3353 |
+
"desc": "Refresh / reload page",
|
| 3354 |
+
"executable": true
|
| 3355 |
+
},
|
| 3356 |
+
"remote_shell": {
|
| 3357 |
+
"slots": [
|
| 3358 |
+
"host"
|
| 3359 |
+
],
|
| 3360 |
+
"optional": [
|
| 3361 |
+
"user"
|
| 3362 |
+
],
|
| 3363 |
+
"risk": "caution",
|
| 3364 |
+
"needs_sudo": false,
|
| 3365 |
+
"platforms": [
|
| 3366 |
+
"pi",
|
| 3367 |
+
"windows"
|
| 3368 |
+
],
|
| 3369 |
+
"desc": "Open an SSH shell to a host",
|
| 3370 |
+
"executable": true
|
| 3371 |
+
},
|
| 3372 |
+
"rename_file": {
|
| 3373 |
+
"slots": [
|
| 3374 |
+
"src",
|
| 3375 |
+
"dst"
|
| 3376 |
+
],
|
| 3377 |
+
"optional": [],
|
| 3378 |
+
"risk": "caution",
|
| 3379 |
+
"needs_sudo": false,
|
| 3380 |
+
"platforms": [
|
| 3381 |
+
"pi",
|
| 3382 |
+
"windows"
|
| 3383 |
+
],
|
| 3384 |
+
"desc": "rename file \"{src}\" to \"{dst}\"",
|
| 3385 |
+
"executable": true
|
| 3386 |
+
},
|
| 3387 |
+
"reopen_tab": {
|
| 3388 |
+
"slots": [],
|
| 3389 |
+
"optional": [],
|
| 3390 |
+
"risk": "safe",
|
| 3391 |
+
"needs_sudo": false,
|
| 3392 |
+
"platforms": [
|
| 3393 |
+
"pi",
|
| 3394 |
+
"windows"
|
| 3395 |
+
],
|
| 3396 |
+
"desc": "Reopen last closed tab",
|
| 3397 |
+
"executable": true
|
| 3398 |
+
},
|
| 3399 |
+
"repair_packages": {
|
| 3400 |
+
"slots": [],
|
| 3401 |
+
"optional": [],
|
| 3402 |
+
"risk": "caution",
|
| 3403 |
+
"needs_sudo": true,
|
| 3404 |
+
"platforms": [
|
| 3405 |
+
"pi",
|
| 3406 |
+
"windows"
|
| 3407 |
+
],
|
| 3408 |
+
"desc": "Fix broken package state",
|
| 3409 |
+
"executable": true
|
| 3410 |
+
},
|
| 3411 |
+
"repeat_last": {
|
| 3412 |
+
"slots": [],
|
| 3413 |
+
"optional": [],
|
| 3414 |
+
"risk": "safe",
|
| 3415 |
+
"needs_sudo": false,
|
| 3416 |
+
"platforms": [
|
| 3417 |
+
"pi",
|
| 3418 |
+
"windows"
|
| 3419 |
+
],
|
| 3420 |
+
"desc": "Repeat the previous command",
|
| 3421 |
+
"executable": true
|
| 3422 |
+
},
|
| 3423 |
+
"restart": {
|
| 3424 |
+
"slots": [],
|
| 3425 |
+
"optional": [
|
| 3426 |
+
"amount",
|
| 3427 |
+
"unit",
|
| 3428 |
+
"at"
|
| 3429 |
+
],
|
| 3430 |
+
"risk": "critical",
|
| 3431 |
+
"needs_sudo": true,
|
| 3432 |
+
"platforms": [
|
| 3433 |
+
"pi",
|
| 3434 |
+
"windows"
|
| 3435 |
+
],
|
| 3436 |
+
"desc": "Restart / reboot (optional delay)",
|
| 3437 |
+
"executable": true
|
| 3438 |
+
},
|
| 3439 |
+
"rotate_screen": {
|
| 3440 |
+
"slots": [
|
| 3441 |
+
"orientation"
|
| 3442 |
+
],
|
| 3443 |
+
"optional": [],
|
| 3444 |
+
"risk": "safe",
|
| 3445 |
+
"needs_sudo": false,
|
| 3446 |
+
"platforms": [
|
| 3447 |
+
"pi",
|
| 3448 |
+
"windows"
|
| 3449 |
+
],
|
| 3450 |
+
"desc": "Set display orientation",
|
| 3451 |
+
"executable": true
|
| 3452 |
+
},
|
| 3453 |
+
"run_background": {
|
| 3454 |
+
"slots": [
|
| 3455 |
+
"command"
|
| 3456 |
+
],
|
| 3457 |
+
"optional": [],
|
| 3458 |
+
"risk": "critical",
|
| 3459 |
+
"needs_sudo": false,
|
| 3460 |
+
"platforms": [
|
| 3461 |
+
"pi",
|
| 3462 |
+
"windows"
|
| 3463 |
+
],
|
| 3464 |
+
"desc": "Run a command detached",
|
| 3465 |
+
"executable": true
|
| 3466 |
+
},
|
| 3467 |
+
"run_benchmark": {
|
| 3468 |
+
"slots": [
|
| 3469 |
+
"target"
|
| 3470 |
+
],
|
| 3471 |
+
"optional": [],
|
| 3472 |
+
"risk": "caution",
|
| 3473 |
+
"needs_sudo": false,
|
| 3474 |
+
"platforms": [
|
| 3475 |
+
"pi",
|
| 3476 |
+
"windows"
|
| 3477 |
+
],
|
| 3478 |
+
"desc": "Run a cpu/memory/disk benchmark",
|
| 3479 |
+
"executable": true
|
| 3480 |
+
},
|
| 3481 |
+
"run_command": {
|
| 3482 |
+
"slots": [
|
| 3483 |
+
"command"
|
| 3484 |
+
],
|
| 3485 |
+
"optional": [],
|
| 3486 |
+
"risk": "critical",
|
| 3487 |
+
"needs_sudo": false,
|
| 3488 |
+
"platforms": [
|
| 3489 |
+
"pi",
|
| 3490 |
+
"windows"
|
| 3491 |
+
],
|
| 3492 |
+
"desc": "Run an arbitrary shell command",
|
| 3493 |
+
"executable": true
|
| 3494 |
+
},
|
| 3495 |
+
"run_llm": {
|
| 3496 |
+
"slots": [
|
| 3497 |
+
"model"
|
| 3498 |
+
],
|
| 3499 |
+
"optional": [],
|
| 3500 |
+
"risk": "caution",
|
| 3501 |
+
"needs_sudo": false,
|
| 3502 |
+
"platforms": [
|
| 3503 |
+
"pi",
|
| 3504 |
+
"windows"
|
| 3505 |
+
],
|
| 3506 |
+
"desc": "Run a local LLM",
|
| 3507 |
+
"executable": true
|
| 3508 |
+
},
|
| 3509 |
+
"run_llm_benchmark": {
|
| 3510 |
+
"slots": [
|
| 3511 |
+
"model"
|
| 3512 |
+
],
|
| 3513 |
+
"optional": [],
|
| 3514 |
+
"risk": "safe",
|
| 3515 |
+
"needs_sudo": false,
|
| 3516 |
+
"platforms": [
|
| 3517 |
+
"pi",
|
| 3518 |
+
"windows"
|
| 3519 |
+
],
|
| 3520 |
+
"desc": "Benchmark an LLM",
|
| 3521 |
+
"executable": true
|
| 3522 |
+
},
|
| 3523 |
+
"run_network_benchmark": {
|
| 3524 |
+
"slots": [
|
| 3525 |
+
"host"
|
| 3526 |
+
],
|
| 3527 |
+
"optional": [],
|
| 3528 |
+
"risk": "caution",
|
| 3529 |
+
"needs_sudo": false,
|
| 3530 |
+
"platforms": [
|
| 3531 |
+
"pi",
|
| 3532 |
+
"windows"
|
| 3533 |
+
],
|
| 3534 |
+
"desc": "iperf LAN throughput test",
|
| 3535 |
+
"executable": true
|
| 3536 |
+
},
|
| 3537 |
+
"run_script": {
|
| 3538 |
+
"slots": [],
|
| 3539 |
+
"optional": [],
|
| 3540 |
+
"risk": "critical",
|
| 3541 |
+
"needs_sudo": true,
|
| 3542 |
+
"platforms": [
|
| 3543 |
+
"pi",
|
| 3544 |
+
"windows"
|
| 3545 |
+
],
|
| 3546 |
+
"desc": "run shell script",
|
| 3547 |
+
"executable": true
|
| 3548 |
+
},
|
| 3549 |
+
"run_stress_test": {
|
| 3550 |
+
"slots": [
|
| 3551 |
+
"amount",
|
| 3552 |
+
"unit"
|
| 3553 |
+
],
|
| 3554 |
+
"optional": [],
|
| 3555 |
+
"risk": "caution",
|
| 3556 |
+
"needs_sudo": false,
|
| 3557 |
+
"platforms": [
|
| 3558 |
+
"pi",
|
| 3559 |
+
"windows"
|
| 3560 |
+
],
|
| 3561 |
+
"desc": "Stress-test the CPU for a duration",
|
| 3562 |
+
"executable": true
|
| 3563 |
+
},
|
| 3564 |
+
"save_file": {
|
| 3565 |
+
"slots": [],
|
| 3566 |
+
"optional": [],
|
| 3567 |
+
"risk": "safe",
|
| 3568 |
+
"needs_sudo": false,
|
| 3569 |
+
"platforms": [
|
| 3570 |
+
"pi",
|
| 3571 |
+
"windows"
|
| 3572 |
+
],
|
| 3573 |
+
"desc": "Save current file (Ctrl+S)",
|
| 3574 |
+
"executable": true
|
| 3575 |
+
},
|
| 3576 |
+
"scan_lan": {
|
| 3577 |
+
"slots": [],
|
| 3578 |
+
"optional": [],
|
| 3579 |
+
"risk": "caution",
|
| 3580 |
+
"needs_sudo": false,
|
| 3581 |
+
"platforms": [
|
| 3582 |
+
"pi",
|
| 3583 |
+
"windows"
|
| 3584 |
+
],
|
| 3585 |
+
"desc": "Scan the LAN for devices",
|
| 3586 |
+
"executable": true
|
| 3587 |
+
},
|
| 3588 |
+
"scan_ports": {
|
| 3589 |
+
"slots": [
|
| 3590 |
+
"host"
|
| 3591 |
+
],
|
| 3592 |
+
"optional": [],
|
| 3593 |
+
"risk": "caution",
|
| 3594 |
+
"needs_sudo": false,
|
| 3595 |
+
"platforms": [
|
| 3596 |
+
"pi",
|
| 3597 |
+
"windows"
|
| 3598 |
+
],
|
| 3599 |
+
"desc": "Port-scan a host",
|
| 3600 |
+
"executable": true
|
| 3601 |
+
},
|
| 3602 |
+
"schedule_task": {
|
| 3603 |
+
"slots": [
|
| 3604 |
+
"command",
|
| 3605 |
+
"schedule"
|
| 3606 |
+
],
|
| 3607 |
+
"optional": [],
|
| 3608 |
+
"risk": "critical",
|
| 3609 |
+
"needs_sudo": false,
|
| 3610 |
+
"platforms": [
|
| 3611 |
+
"pi",
|
| 3612 |
+
"windows"
|
| 3613 |
+
],
|
| 3614 |
+
"desc": "Schedule a command (cron)",
|
| 3615 |
+
"executable": true
|
| 3616 |
+
},
|
| 3617 |
+
"screen_off": {
|
| 3618 |
+
"slots": [],
|
| 3619 |
+
"optional": [],
|
| 3620 |
+
"risk": "safe",
|
| 3621 |
+
"needs_sudo": false,
|
| 3622 |
+
"platforms": [
|
| 3623 |
+
"pi",
|
| 3624 |
+
"windows"
|
| 3625 |
+
],
|
| 3626 |
+
"desc": "Turn the display off (system keeps running)",
|
| 3627 |
+
"executable": true
|
| 3628 |
+
},
|
| 3629 |
+
"screen_record_start": {
|
| 3630 |
+
"slots": [],
|
| 3631 |
+
"optional": [],
|
| 3632 |
+
"risk": "safe",
|
| 3633 |
+
"needs_sudo": false,
|
| 3634 |
+
"platforms": [
|
| 3635 |
+
"pi",
|
| 3636 |
+
"windows"
|
| 3637 |
+
],
|
| 3638 |
+
"desc": "Start screen recording",
|
| 3639 |
+
"executable": true
|
| 3640 |
+
},
|
| 3641 |
+
"screen_record_stop": {
|
| 3642 |
+
"slots": [],
|
| 3643 |
+
"optional": [],
|
| 3644 |
+
"risk": "safe",
|
| 3645 |
+
"needs_sudo": false,
|
| 3646 |
+
"platforms": [
|
| 3647 |
+
"pi",
|
| 3648 |
+
"windows"
|
| 3649 |
+
],
|
| 3650 |
+
"desc": "Stop screen recording",
|
| 3651 |
+
"executable": true
|
| 3652 |
+
},
|
| 3653 |
+
"screenshot": {
|
| 3654 |
+
"slots": [],
|
| 3655 |
+
"optional": [],
|
| 3656 |
+
"risk": "safe",
|
| 3657 |
+
"needs_sudo": false,
|
| 3658 |
+
"platforms": [
|
| 3659 |
+
"pi",
|
| 3660 |
+
"windows"
|
| 3661 |
+
],
|
| 3662 |
+
"desc": "Take a screenshot",
|
| 3663 |
+
"executable": true
|
| 3664 |
+
},
|
| 3665 |
+
"scroll_down": {
|
| 3666 |
+
"slots": [],
|
| 3667 |
+
"optional": [],
|
| 3668 |
+
"risk": "safe",
|
| 3669 |
+
"needs_sudo": false,
|
| 3670 |
+
"platforms": [
|
| 3671 |
+
"pi",
|
| 3672 |
+
"windows"
|
| 3673 |
+
],
|
| 3674 |
+
"desc": "Scroll down",
|
| 3675 |
+
"executable": true
|
| 3676 |
+
},
|
| 3677 |
+
"scroll_up": {
|
| 3678 |
+
"slots": [],
|
| 3679 |
+
"optional": [],
|
| 3680 |
+
"risk": "safe",
|
| 3681 |
+
"needs_sudo": false,
|
| 3682 |
+
"platforms": [
|
| 3683 |
+
"pi",
|
| 3684 |
+
"windows"
|
| 3685 |
+
],
|
| 3686 |
+
"desc": "Scroll up",
|
| 3687 |
+
"executable": true
|
| 3688 |
+
},
|
| 3689 |
+
"search_files": {
|
| 3690 |
+
"slots": [
|
| 3691 |
+
"query"
|
| 3692 |
+
],
|
| 3693 |
+
"optional": [],
|
| 3694 |
+
"risk": "safe",
|
| 3695 |
+
"needs_sudo": false,
|
| 3696 |
+
"platforms": [
|
| 3697 |
+
"pi",
|
| 3698 |
+
"windows"
|
| 3699 |
+
],
|
| 3700 |
+
"desc": "Search files by name",
|
| 3701 |
+
"executable": true
|
| 3702 |
+
},
|
| 3703 |
+
"search_in_files": {
|
| 3704 |
+
"slots": [
|
| 3705 |
+
"query"
|
| 3706 |
+
],
|
| 3707 |
+
"optional": [],
|
| 3708 |
+
"risk": "safe",
|
| 3709 |
+
"needs_sudo": false,
|
| 3710 |
+
"platforms": [
|
| 3711 |
+
"pi",
|
| 3712 |
+
"windows"
|
| 3713 |
+
],
|
| 3714 |
+
"desc": "Search text inside files",
|
| 3715 |
+
"executable": true
|
| 3716 |
+
},
|
| 3717 |
+
"search_package": {
|
| 3718 |
+
"slots": [
|
| 3719 |
+
"name"
|
| 3720 |
+
],
|
| 3721 |
+
"optional": [],
|
| 3722 |
+
"risk": "safe",
|
| 3723 |
+
"needs_sudo": false,
|
| 3724 |
+
"platforms": [
|
| 3725 |
+
"pi",
|
| 3726 |
+
"windows"
|
| 3727 |
+
],
|
| 3728 |
+
"desc": "Search available packages",
|
| 3729 |
+
"executable": true
|
| 3730 |
+
},
|
| 3731 |
+
"select_all": {
|
| 3732 |
+
"slots": [],
|
| 3733 |
+
"optional": [],
|
| 3734 |
+
"risk": "safe",
|
| 3735 |
+
"needs_sudo": false,
|
| 3736 |
+
"platforms": [
|
| 3737 |
+
"pi",
|
| 3738 |
+
"windows"
|
| 3739 |
+
],
|
| 3740 |
+
"desc": "Select all (Ctrl+A)",
|
| 3741 |
+
"executable": true
|
| 3742 |
+
},
|
| 3743 |
+
"send_email": {
|
| 3744 |
+
"slots": [
|
| 3745 |
+
"to",
|
| 3746 |
+
"text"
|
| 3747 |
+
],
|
| 3748 |
+
"optional": [
|
| 3749 |
+
"subject"
|
| 3750 |
+
],
|
| 3751 |
+
"risk": "caution",
|
| 3752 |
+
"needs_sudo": false,
|
| 3753 |
+
"platforms": [
|
| 3754 |
+
"pi",
|
| 3755 |
+
"windows"
|
| 3756 |
+
],
|
| 3757 |
+
"desc": "Send an email",
|
| 3758 |
+
"executable": true
|
| 3759 |
+
},
|
| 3760 |
+
"send_message": {
|
| 3761 |
+
"slots": [
|
| 3762 |
+
"app",
|
| 3763 |
+
"contact",
|
| 3764 |
+
"text"
|
| 3765 |
+
],
|
| 3766 |
+
"optional": [],
|
| 3767 |
+
"risk": "caution",
|
| 3768 |
+
"needs_sudo": false,
|
| 3769 |
+
"platforms": [
|
| 3770 |
+
"pi",
|
| 3771 |
+
"windows"
|
| 3772 |
+
],
|
| 3773 |
+
"desc": "Send a chat/SMS message to a contact",
|
| 3774 |
+
"executable": true
|
| 3775 |
+
},
|
| 3776 |
+
"service_disable": {
|
| 3777 |
+
"slots": [
|
| 3778 |
+
"service"
|
| 3779 |
+
],
|
| 3780 |
+
"optional": [],
|
| 3781 |
+
"risk": "critical",
|
| 3782 |
+
"needs_sudo": true,
|
| 3783 |
+
"platforms": [
|
| 3784 |
+
"pi",
|
| 3785 |
+
"windows"
|
| 3786 |
+
],
|
| 3787 |
+
"desc": "Disable a service at boot (and stop)",
|
| 3788 |
+
"executable": true
|
| 3789 |
+
},
|
| 3790 |
+
"service_enable": {
|
| 3791 |
+
"slots": [
|
| 3792 |
+
"service"
|
| 3793 |
+
],
|
| 3794 |
+
"optional": [],
|
| 3795 |
+
"risk": "critical",
|
| 3796 |
+
"needs_sudo": true,
|
| 3797 |
+
"platforms": [
|
| 3798 |
+
"pi",
|
| 3799 |
+
"windows"
|
| 3800 |
+
],
|
| 3801 |
+
"desc": "Enable a service at boot (and start)",
|
| 3802 |
+
"executable": true
|
| 3803 |
+
},
|
| 3804 |
+
"service_restart": {
|
| 3805 |
+
"slots": [
|
| 3806 |
+
"service"
|
| 3807 |
+
],
|
| 3808 |
+
"optional": [],
|
| 3809 |
+
"risk": "critical",
|
| 3810 |
+
"needs_sudo": true,
|
| 3811 |
+
"platforms": [
|
| 3812 |
+
"pi",
|
| 3813 |
+
"windows"
|
| 3814 |
+
],
|
| 3815 |
+
"desc": "Restart a system service",
|
| 3816 |
+
"executable": true
|
| 3817 |
+
},
|
| 3818 |
+
"service_start": {
|
| 3819 |
+
"slots": [
|
| 3820 |
+
"service"
|
| 3821 |
+
],
|
| 3822 |
+
"optional": [],
|
| 3823 |
+
"risk": "critical",
|
| 3824 |
+
"needs_sudo": true,
|
| 3825 |
+
"platforms": [
|
| 3826 |
+
"pi",
|
| 3827 |
+
"windows"
|
| 3828 |
+
],
|
| 3829 |
+
"desc": "Start a system service",
|
| 3830 |
+
"executable": true
|
| 3831 |
+
},
|
| 3832 |
+
"service_status": {
|
| 3833 |
+
"slots": [
|
| 3834 |
+
"service"
|
| 3835 |
+
],
|
| 3836 |
+
"optional": [],
|
| 3837 |
+
"risk": "safe",
|
| 3838 |
+
"needs_sudo": false,
|
| 3839 |
+
"platforms": [
|
| 3840 |
+
"pi",
|
| 3841 |
+
"windows"
|
| 3842 |
+
],
|
| 3843 |
+
"desc": "Show a service's status",
|
| 3844 |
+
"executable": true
|
| 3845 |
+
},
|
| 3846 |
+
"service_stop": {
|
| 3847 |
+
"slots": [
|
| 3848 |
+
"service"
|
| 3849 |
+
],
|
| 3850 |
+
"optional": [],
|
| 3851 |
+
"risk": "critical",
|
| 3852 |
+
"needs_sudo": true,
|
| 3853 |
+
"platforms": [
|
| 3854 |
+
"pi",
|
| 3855 |
+
"windows"
|
| 3856 |
+
],
|
| 3857 |
+
"desc": "Stop a system service",
|
| 3858 |
+
"executable": true
|
| 3859 |
+
},
|
| 3860 |
+
"set_alarm": {
|
| 3861 |
+
"slots": [
|
| 3862 |
+
"time"
|
| 3863 |
+
],
|
| 3864 |
+
"optional": [],
|
| 3865 |
+
"risk": "safe",
|
| 3866 |
+
"needs_sudo": false,
|
| 3867 |
+
"platforms": [
|
| 3868 |
+
"pi",
|
| 3869 |
+
"windows"
|
| 3870 |
+
],
|
| 3871 |
+
"desc": "Set alarm at clock time (time=HH:MM 24h)",
|
| 3872 |
+
"executable": true
|
| 3873 |
+
},
|
| 3874 |
+
"set_audio_output": {
|
| 3875 |
+
"slots": [
|
| 3876 |
+
"output"
|
| 3877 |
+
],
|
| 3878 |
+
"optional": [],
|
| 3879 |
+
"risk": "safe",
|
| 3880 |
+
"needs_sudo": false,
|
| 3881 |
+
"platforms": [
|
| 3882 |
+
"pi",
|
| 3883 |
+
"windows"
|
| 3884 |
+
],
|
| 3885 |
+
"desc": "Switch audio output device",
|
| 3886 |
+
"executable": true
|
| 3887 |
+
},
|
| 3888 |
+
"set_boot_order": {
|
| 3889 |
+
"slots": [],
|
| 3890 |
+
"optional": [
|
| 3891 |
+
"order"
|
| 3892 |
+
],
|
| 3893 |
+
"risk": "critical",
|
| 3894 |
+
"needs_sudo": true,
|
| 3895 |
+
"platforms": [
|
| 3896 |
+
"pi"
|
| 3897 |
+
],
|
| 3898 |
+
"desc": "Set bootloader boot order",
|
| 3899 |
+
"executable": true
|
| 3900 |
+
},
|
| 3901 |
+
"set_boot_target": {
|
| 3902 |
+
"slots": [
|
| 3903 |
+
"target"
|
| 3904 |
+
],
|
| 3905 |
+
"optional": [],
|
| 3906 |
+
"risk": "caution",
|
| 3907 |
+
"needs_sudo": true,
|
| 3908 |
+
"platforms": [
|
| 3909 |
+
"pi",
|
| 3910 |
+
"windows"
|
| 3911 |
+
],
|
| 3912 |
+
"desc": "Boot to desktop or console",
|
| 3913 |
+
"executable": true
|
| 3914 |
+
},
|
| 3915 |
+
"set_brightness": {
|
| 3916 |
+
"slots": [
|
| 3917 |
+
"value"
|
| 3918 |
+
],
|
| 3919 |
+
"optional": [],
|
| 3920 |
+
"risk": "caution",
|
| 3921 |
+
"needs_sudo": false,
|
| 3922 |
+
"platforms": [
|
| 3923 |
+
"pi",
|
| 3924 |
+
"windows"
|
| 3925 |
+
],
|
| 3926 |
+
"desc": "Set screen brightness percent",
|
| 3927 |
+
"executable": true
|
| 3928 |
+
},
|
| 3929 |
+
"set_cpu_affinity": {
|
| 3930 |
+
"slots": [
|
| 3931 |
+
"pid",
|
| 3932 |
+
"cores"
|
| 3933 |
+
],
|
| 3934 |
+
"optional": [],
|
| 3935 |
+
"risk": "caution",
|
| 3936 |
+
"needs_sudo": false,
|
| 3937 |
+
"platforms": [
|
| 3938 |
+
"pi",
|
| 3939 |
+
"windows"
|
| 3940 |
+
],
|
| 3941 |
+
"desc": "Pin a process to cores",
|
| 3942 |
+
"executable": true
|
| 3943 |
+
},
|
| 3944 |
+
"set_cpu_governor": {
|
| 3945 |
+
"slots": [
|
| 3946 |
+
"governor"
|
| 3947 |
+
],
|
| 3948 |
+
"optional": [],
|
| 3949 |
+
"risk": "caution",
|
| 3950 |
+
"needs_sudo": true,
|
| 3951 |
+
"platforms": [
|
| 3952 |
+
"pi"
|
| 3953 |
+
],
|
| 3954 |
+
"desc": "Set CPU frequency governor",
|
| 3955 |
+
"executable": true
|
| 3956 |
+
},
|
| 3957 |
+
"set_default_printer": {
|
| 3958 |
+
"slots": [
|
| 3959 |
+
"name"
|
| 3960 |
+
],
|
| 3961 |
+
"optional": [],
|
| 3962 |
+
"risk": "safe",
|
| 3963 |
+
"needs_sudo": false,
|
| 3964 |
+
"platforms": [
|
| 3965 |
+
"pi",
|
| 3966 |
+
"windows"
|
| 3967 |
+
],
|
| 3968 |
+
"desc": "Set default printer",
|
| 3969 |
+
"executable": true
|
| 3970 |
+
},
|
| 3971 |
+
"set_disk_label": {
|
| 3972 |
+
"slots": [
|
| 3973 |
+
"device",
|
| 3974 |
+
"label"
|
| 3975 |
+
],
|
| 3976 |
+
"optional": [],
|
| 3977 |
+
"risk": "caution",
|
| 3978 |
+
"needs_sudo": true,
|
| 3979 |
+
"platforms": [
|
| 3980 |
+
"pi",
|
| 3981 |
+
"windows"
|
| 3982 |
+
],
|
| 3983 |
+
"desc": "Set a volume label",
|
| 3984 |
+
"executable": true
|
| 3985 |
+
},
|
| 3986 |
+
"set_display_scale": {
|
| 3987 |
+
"slots": [
|
| 3988 |
+
"value"
|
| 3989 |
+
],
|
| 3990 |
+
"optional": [],
|
| 3991 |
+
"risk": "safe",
|
| 3992 |
+
"needs_sudo": false,
|
| 3993 |
+
"platforms": [
|
| 3994 |
+
"pi",
|
| 3995 |
+
"windows"
|
| 3996 |
+
],
|
| 3997 |
+
"desc": "Set display scaling percent",
|
| 3998 |
+
"executable": true
|
| 3999 |
+
},
|
| 4000 |
+
"set_keyboard_layout": {
|
| 4001 |
+
"slots": [
|
| 4002 |
+
"layout"
|
| 4003 |
+
],
|
| 4004 |
+
"optional": [],
|
| 4005 |
+
"risk": "caution",
|
| 4006 |
+
"needs_sudo": true,
|
| 4007 |
+
"platforms": [
|
| 4008 |
+
"pi",
|
| 4009 |
+
"windows"
|
| 4010 |
+
],
|
| 4011 |
+
"desc": "Set keyboard layout",
|
| 4012 |
+
"executable": true
|
| 4013 |
+
},
|
| 4014 |
+
"set_locale": {
|
| 4015 |
+
"slots": [
|
| 4016 |
+
"locale"
|
| 4017 |
+
],
|
| 4018 |
+
"optional": [],
|
| 4019 |
+
"risk": "caution",
|
| 4020 |
+
"needs_sudo": true,
|
| 4021 |
+
"platforms": [
|
| 4022 |
+
"pi",
|
| 4023 |
+
"windows"
|
| 4024 |
+
],
|
| 4025 |
+
"desc": "Set system locale",
|
| 4026 |
+
"executable": true
|
| 4027 |
+
},
|
| 4028 |
+
"set_mouse_speed": {
|
| 4029 |
+
"slots": [
|
| 4030 |
+
"value"
|
| 4031 |
+
],
|
| 4032 |
+
"optional": [],
|
| 4033 |
+
"risk": "safe",
|
| 4034 |
+
"needs_sudo": false,
|
| 4035 |
+
"platforms": [
|
| 4036 |
+
"pi",
|
| 4037 |
+
"windows"
|
| 4038 |
+
],
|
| 4039 |
+
"desc": "Set mouse/pointer speed",
|
| 4040 |
+
"executable": true
|
| 4041 |
+
},
|
| 4042 |
+
"set_owner": {
|
| 4043 |
+
"slots": [
|
| 4044 |
+
"path",
|
| 4045 |
+
"user"
|
| 4046 |
+
],
|
| 4047 |
+
"optional": [],
|
| 4048 |
+
"risk": "critical",
|
| 4049 |
+
"needs_sudo": true,
|
| 4050 |
+
"platforms": [
|
| 4051 |
+
"pi",
|
| 4052 |
+
"windows"
|
| 4053 |
+
],
|
| 4054 |
+
"desc": "Change file ownership",
|
| 4055 |
+
"executable": true
|
| 4056 |
+
},
|
| 4057 |
+
"set_permissions": {
|
| 4058 |
+
"slots": [
|
| 4059 |
+
"path"
|
| 4060 |
+
],
|
| 4061 |
+
"optional": [],
|
| 4062 |
+
"risk": "critical",
|
| 4063 |
+
"needs_sudo": true,
|
| 4064 |
+
"platforms": [
|
| 4065 |
+
"pi",
|
| 4066 |
+
"windows"
|
| 4067 |
+
],
|
| 4068 |
+
"desc": "Change file permissions",
|
| 4069 |
+
"executable": true
|
| 4070 |
+
},
|
| 4071 |
+
"set_process_priority": {
|
| 4072 |
+
"slots": [
|
| 4073 |
+
"pid"
|
| 4074 |
+
],
|
| 4075 |
+
"optional": [
|
| 4076 |
+
"priority"
|
| 4077 |
+
],
|
| 4078 |
+
"risk": "caution",
|
| 4079 |
+
"needs_sudo": false,
|
| 4080 |
+
"platforms": [
|
| 4081 |
+
"pi",
|
| 4082 |
+
"windows"
|
| 4083 |
+
],
|
| 4084 |
+
"desc": "renice a process",
|
| 4085 |
+
"executable": true
|
| 4086 |
+
},
|
| 4087 |
+
"set_refresh_rate": {
|
| 4088 |
+
"slots": [
|
| 4089 |
+
"value"
|
| 4090 |
+
],
|
| 4091 |
+
"optional": [],
|
| 4092 |
+
"risk": "caution",
|
| 4093 |
+
"needs_sudo": false,
|
| 4094 |
+
"platforms": [
|
| 4095 |
+
"pi",
|
| 4096 |
+
"windows"
|
| 4097 |
+
],
|
| 4098 |
+
"desc": "Set monitor refresh rate (Hz)",
|
| 4099 |
+
"executable": true
|
| 4100 |
+
},
|
| 4101 |
+
"set_reminder": {
|
| 4102 |
+
"slots": [
|
| 4103 |
+
"amount",
|
| 4104 |
+
"text",
|
| 4105 |
+
"unit"
|
| 4106 |
+
],
|
| 4107 |
+
"optional": [],
|
| 4108 |
+
"risk": "safe",
|
| 4109 |
+
"needs_sudo": false,
|
| 4110 |
+
"platforms": [
|
| 4111 |
+
"pi",
|
| 4112 |
+
"windows"
|
| 4113 |
+
],
|
| 4114 |
+
"desc": "Reminder after a duration",
|
| 4115 |
+
"executable": true
|
| 4116 |
+
},
|
| 4117 |
+
"set_resolution": {
|
| 4118 |
+
"slots": [
|
| 4119 |
+
"resolution"
|
| 4120 |
+
],
|
| 4121 |
+
"optional": [],
|
| 4122 |
+
"risk": "caution",
|
| 4123 |
+
"needs_sudo": false,
|
| 4124 |
+
"platforms": [
|
| 4125 |
+
"pi",
|
| 4126 |
+
"windows"
|
| 4127 |
+
],
|
| 4128 |
+
"desc": "Set display resolution",
|
| 4129 |
+
"executable": true
|
| 4130 |
+
},
|
| 4131 |
+
"set_swap_size": {
|
| 4132 |
+
"slots": [
|
| 4133 |
+
"size"
|
| 4134 |
+
],
|
| 4135 |
+
"optional": [],
|
| 4136 |
+
"risk": "critical",
|
| 4137 |
+
"needs_sudo": true,
|
| 4138 |
+
"platforms": [
|
| 4139 |
+
"pi",
|
| 4140 |
+
"windows"
|
| 4141 |
+
],
|
| 4142 |
+
"desc": "Resize the swap file",
|
| 4143 |
+
"executable": true
|
| 4144 |
+
},
|
| 4145 |
+
"set_swappiness": {
|
| 4146 |
+
"slots": [
|
| 4147 |
+
"value"
|
| 4148 |
+
],
|
| 4149 |
+
"optional": [],
|
| 4150 |
+
"risk": "caution",
|
| 4151 |
+
"needs_sudo": true,
|
| 4152 |
+
"platforms": [
|
| 4153 |
+
"pi",
|
| 4154 |
+
"windows"
|
| 4155 |
+
],
|
| 4156 |
+
"desc": "Set vm.swappiness",
|
| 4157 |
+
"executable": true
|
| 4158 |
+
},
|
| 4159 |
+
"set_timer": {
|
| 4160 |
+
"slots": [
|
| 4161 |
+
"amount",
|
| 4162 |
+
"unit"
|
| 4163 |
+
],
|
| 4164 |
+
"optional": [],
|
| 4165 |
+
"risk": "safe",
|
| 4166 |
+
"needs_sudo": false,
|
| 4167 |
+
"platforms": [
|
| 4168 |
+
"pi",
|
| 4169 |
+
"windows"
|
| 4170 |
+
],
|
| 4171 |
+
"desc": "Set a countdown timer",
|
| 4172 |
+
"executable": true
|
| 4173 |
+
},
|
| 4174 |
+
"set_timezone": {
|
| 4175 |
+
"slots": [
|
| 4176 |
+
"tz"
|
| 4177 |
+
],
|
| 4178 |
+
"optional": [],
|
| 4179 |
+
"risk": "caution",
|
| 4180 |
+
"needs_sudo": true,
|
| 4181 |
+
"platforms": [
|
| 4182 |
+
"pi",
|
| 4183 |
+
"windows"
|
| 4184 |
+
],
|
| 4185 |
+
"desc": "Set the system timezone",
|
| 4186 |
+
"executable": true
|
| 4187 |
+
},
|
| 4188 |
+
"set_volume": {
|
| 4189 |
+
"slots": [
|
| 4190 |
+
"value"
|
| 4191 |
+
],
|
| 4192 |
+
"optional": [],
|
| 4193 |
+
"risk": "safe",
|
| 4194 |
+
"needs_sudo": false,
|
| 4195 |
+
"platforms": [
|
| 4196 |
+
"pi",
|
| 4197 |
+
"windows"
|
| 4198 |
+
],
|
| 4199 |
+
"desc": "Set master volume to an exact percent",
|
| 4200 |
+
"executable": true
|
| 4201 |
+
},
|
| 4202 |
+
"set_wallpaper": {
|
| 4203 |
+
"slots": [
|
| 4204 |
+
"path"
|
| 4205 |
+
],
|
| 4206 |
+
"optional": [],
|
| 4207 |
+
"risk": "safe",
|
| 4208 |
+
"needs_sudo": false,
|
| 4209 |
+
"platforms": [
|
| 4210 |
+
"pi",
|
| 4211 |
+
"windows"
|
| 4212 |
+
],
|
| 4213 |
+
"desc": "Set desktop wallpaper",
|
| 4214 |
+
"executable": true
|
| 4215 |
+
},
|
| 4216 |
+
"show_command_history": {
|
| 4217 |
+
"slots": [],
|
| 4218 |
+
"optional": [],
|
| 4219 |
+
"risk": "safe",
|
| 4220 |
+
"needs_sudo": false,
|
| 4221 |
+
"platforms": [
|
| 4222 |
+
"pi",
|
| 4223 |
+
"windows"
|
| 4224 |
+
],
|
| 4225 |
+
"desc": "Show command history",
|
| 4226 |
+
"executable": true
|
| 4227 |
+
},
|
| 4228 |
+
"show_desktop": {
|
| 4229 |
+
"slots": [],
|
| 4230 |
+
"optional": [],
|
| 4231 |
+
"risk": "safe",
|
| 4232 |
+
"needs_sudo": false,
|
| 4233 |
+
"platforms": [
|
| 4234 |
+
"pi",
|
| 4235 |
+
"windows"
|
| 4236 |
+
],
|
| 4237 |
+
"desc": "Minimize everything / show desktop",
|
| 4238 |
+
"executable": true
|
| 4239 |
+
},
|
| 4240 |
+
"show_pinout": {
|
| 4241 |
+
"slots": [],
|
| 4242 |
+
"optional": [],
|
| 4243 |
+
"risk": "safe",
|
| 4244 |
+
"needs_sudo": false,
|
| 4245 |
+
"platforms": [
|
| 4246 |
+
"pi"
|
| 4247 |
+
],
|
| 4248 |
+
"desc": "Show GPIO pinout",
|
| 4249 |
+
"executable": true
|
| 4250 |
+
},
|
| 4251 |
+
"show_wifi_password": {
|
| 4252 |
+
"slots": [],
|
| 4253 |
+
"optional": [
|
| 4254 |
+
"ssid"
|
| 4255 |
+
],
|
| 4256 |
+
"risk": "caution",
|
| 4257 |
+
"needs_sudo": false,
|
| 4258 |
+
"platforms": [
|
| 4259 |
+
"pi",
|
| 4260 |
+
"windows"
|
| 4261 |
+
],
|
| 4262 |
+
"desc": "Show a saved Wi-Fi password",
|
| 4263 |
+
"executable": true
|
| 4264 |
+
},
|
| 4265 |
+
"shutdown": {
|
| 4266 |
+
"slots": [],
|
| 4267 |
+
"optional": [
|
| 4268 |
+
"amount",
|
| 4269 |
+
"unit",
|
| 4270 |
+
"at"
|
| 4271 |
+
],
|
| 4272 |
+
"risk": "critical",
|
| 4273 |
+
"needs_sudo": true,
|
| 4274 |
+
"platforms": [
|
| 4275 |
+
"pi",
|
| 4276 |
+
"windows"
|
| 4277 |
+
],
|
| 4278 |
+
"desc": "Shut down the machine (optional delay)",
|
| 4279 |
+
"executable": true
|
| 4280 |
+
},
|
| 4281 |
+
"sign_out": {
|
| 4282 |
+
"slots": [],
|
| 4283 |
+
"optional": [],
|
| 4284 |
+
"risk": "critical",
|
| 4285 |
+
"needs_sudo": false,
|
| 4286 |
+
"platforms": [
|
| 4287 |
+
"pi",
|
| 4288 |
+
"windows"
|
| 4289 |
+
],
|
| 4290 |
+
"desc": "Sign out / log off the current user",
|
| 4291 |
+
"executable": true
|
| 4292 |
+
},
|
| 4293 |
+
"sleep": {
|
| 4294 |
+
"slots": [],
|
| 4295 |
+
"optional": [
|
| 4296 |
+
"amount",
|
| 4297 |
+
"unit"
|
| 4298 |
+
],
|
| 4299 |
+
"risk": "critical",
|
| 4300 |
+
"needs_sudo": false,
|
| 4301 |
+
"platforms": [
|
| 4302 |
+
"pi",
|
| 4303 |
+
"windows"
|
| 4304 |
+
],
|
| 4305 |
+
"desc": "Put the machine to sleep (optional delay)",
|
| 4306 |
+
"executable": true
|
| 4307 |
+
},
|
| 4308 |
+
"snap_left": {
|
| 4309 |
+
"slots": [],
|
| 4310 |
+
"optional": [],
|
| 4311 |
+
"risk": "safe",
|
| 4312 |
+
"needs_sudo": false,
|
| 4313 |
+
"platforms": [
|
| 4314 |
+
"pi",
|
| 4315 |
+
"windows"
|
| 4316 |
+
],
|
| 4317 |
+
"desc": "Snap window to left half",
|
| 4318 |
+
"executable": true
|
| 4319 |
+
},
|
| 4320 |
+
"snap_right": {
|
| 4321 |
+
"slots": [],
|
| 4322 |
+
"optional": [],
|
| 4323 |
+
"risk": "safe",
|
| 4324 |
+
"needs_sudo": false,
|
| 4325 |
+
"platforms": [
|
| 4326 |
+
"pi",
|
| 4327 |
+
"windows"
|
| 4328 |
+
],
|
| 4329 |
+
"desc": "Snap window to right half",
|
| 4330 |
+
"executable": true
|
| 4331 |
+
},
|
| 4332 |
+
"speed_test": {
|
| 4333 |
+
"slots": [],
|
| 4334 |
+
"optional": [],
|
| 4335 |
+
"risk": "safe",
|
| 4336 |
+
"needs_sudo": false,
|
| 4337 |
+
"platforms": [
|
| 4338 |
+
"pi",
|
| 4339 |
+
"windows"
|
| 4340 |
+
],
|
| 4341 |
+
"desc": "Internet speed test",
|
| 4342 |
+
"executable": true
|
| 4343 |
+
},
|
| 4344 |
+
"start_session": {
|
| 4345 |
+
"slots": [
|
| 4346 |
+
"name"
|
| 4347 |
+
],
|
| 4348 |
+
"optional": [],
|
| 4349 |
+
"risk": "safe",
|
| 4350 |
+
"needs_sudo": false,
|
| 4351 |
+
"platforms": [
|
| 4352 |
+
"pi",
|
| 4353 |
+
"windows"
|
| 4354 |
+
],
|
| 4355 |
+
"desc": "Start a tmux/screen session",
|
| 4356 |
+
"executable": true
|
| 4357 |
+
},
|
| 4358 |
+
"stop_llm": {
|
| 4359 |
+
"slots": [],
|
| 4360 |
+
"optional": [],
|
| 4361 |
+
"risk": "caution",
|
| 4362 |
+
"needs_sudo": false,
|
| 4363 |
+
"platforms": [
|
| 4364 |
+
"pi",
|
| 4365 |
+
"windows"
|
| 4366 |
+
],
|
| 4367 |
+
"desc": "Stop the local LLM",
|
| 4368 |
+
"executable": true
|
| 4369 |
+
},
|
| 4370 |
+
"stopwatch_start": {
|
| 4371 |
+
"slots": [],
|
| 4372 |
+
"optional": [],
|
| 4373 |
+
"risk": "safe",
|
| 4374 |
+
"needs_sudo": false,
|
| 4375 |
+
"platforms": [
|
| 4376 |
+
"pi",
|
| 4377 |
+
"windows"
|
| 4378 |
+
],
|
| 4379 |
+
"desc": "Start stopwatch",
|
| 4380 |
+
"executable": true
|
| 4381 |
+
},
|
| 4382 |
+
"stopwatch_stop": {
|
| 4383 |
+
"slots": [],
|
| 4384 |
+
"optional": [],
|
| 4385 |
+
"risk": "safe",
|
| 4386 |
+
"needs_sudo": false,
|
| 4387 |
+
"platforms": [
|
| 4388 |
+
"pi",
|
| 4389 |
+
"windows"
|
| 4390 |
+
],
|
| 4391 |
+
"desc": "Stop stopwatch",
|
| 4392 |
+
"executable": true
|
| 4393 |
+
},
|
| 4394 |
+
"switch_input_language": {
|
| 4395 |
+
"slots": [],
|
| 4396 |
+
"optional": [],
|
| 4397 |
+
"risk": "safe",
|
| 4398 |
+
"needs_sudo": false,
|
| 4399 |
+
"platforms": [
|
| 4400 |
+
"pi",
|
| 4401 |
+
"windows"
|
| 4402 |
+
],
|
| 4403 |
+
"desc": "Switch keyboard layout",
|
| 4404 |
+
"executable": true
|
| 4405 |
+
},
|
| 4406 |
+
"switch_user": {
|
| 4407 |
+
"slots": [],
|
| 4408 |
+
"optional": [],
|
| 4409 |
+
"risk": "caution",
|
| 4410 |
+
"needs_sudo": false,
|
| 4411 |
+
"platforms": [
|
| 4412 |
+
"pi",
|
| 4413 |
+
"windows"
|
| 4414 |
+
],
|
| 4415 |
+
"desc": "Switch user",
|
| 4416 |
+
"executable": true
|
| 4417 |
+
},
|
| 4418 |
+
"switch_window": {
|
| 4419 |
+
"slots": [],
|
| 4420 |
+
"optional": [],
|
| 4421 |
+
"risk": "safe",
|
| 4422 |
+
"needs_sudo": false,
|
| 4423 |
+
"platforms": [
|
| 4424 |
+
"pi",
|
| 4425 |
+
"windows"
|
| 4426 |
+
],
|
| 4427 |
+
"desc": "Switch to the next window (Alt+Tab)",
|
| 4428 |
+
"executable": true
|
| 4429 |
+
},
|
| 4430 |
+
"sync_time": {
|
| 4431 |
+
"slots": [],
|
| 4432 |
+
"optional": [],
|
| 4433 |
+
"risk": "safe",
|
| 4434 |
+
"needs_sudo": true,
|
| 4435 |
+
"platforms": [
|
| 4436 |
+
"pi",
|
| 4437 |
+
"windows"
|
| 4438 |
+
],
|
| 4439 |
+
"desc": "Force NTP time sync",
|
| 4440 |
+
"executable": true
|
| 4441 |
+
},
|
| 4442 |
+
"task_view": {
|
| 4443 |
+
"slots": [],
|
| 4444 |
+
"optional": [],
|
| 4445 |
+
"risk": "safe",
|
| 4446 |
+
"needs_sudo": false,
|
| 4447 |
+
"platforms": [
|
| 4448 |
+
"pi",
|
| 4449 |
+
"windows"
|
| 4450 |
+
],
|
| 4451 |
+
"desc": "Open task view / all windows",
|
| 4452 |
+
"executable": true
|
| 4453 |
+
},
|
| 4454 |
+
"touchpad_off": {
|
| 4455 |
+
"slots": [],
|
| 4456 |
+
"optional": [],
|
| 4457 |
+
"risk": "caution",
|
| 4458 |
+
"needs_sudo": false,
|
| 4459 |
+
"platforms": [
|
| 4460 |
+
"pi",
|
| 4461 |
+
"windows"
|
| 4462 |
+
],
|
| 4463 |
+
"desc": "Disable touchpad",
|
| 4464 |
+
"executable": true
|
| 4465 |
+
},
|
| 4466 |
+
"touchpad_on": {
|
| 4467 |
+
"slots": [],
|
| 4468 |
+
"optional": [],
|
| 4469 |
+
"risk": "safe",
|
| 4470 |
+
"needs_sudo": false,
|
| 4471 |
+
"platforms": [
|
| 4472 |
+
"pi",
|
| 4473 |
+
"windows"
|
| 4474 |
+
],
|
| 4475 |
+
"desc": "Enable touchpad",
|
| 4476 |
+
"executable": true
|
| 4477 |
+
},
|
| 4478 |
+
"traceroute": {
|
| 4479 |
+
"slots": [
|
| 4480 |
+
"host"
|
| 4481 |
+
],
|
| 4482 |
+
"optional": [],
|
| 4483 |
+
"risk": "safe",
|
| 4484 |
+
"needs_sudo": false,
|
| 4485 |
+
"platforms": [
|
| 4486 |
+
"pi",
|
| 4487 |
+
"windows"
|
| 4488 |
+
],
|
| 4489 |
+
"desc": "Traceroute to a host",
|
| 4490 |
+
"executable": true
|
| 4491 |
+
},
|
| 4492 |
+
"transcribe_audio": {
|
| 4493 |
+
"slots": [
|
| 4494 |
+
"file"
|
| 4495 |
+
],
|
| 4496 |
+
"optional": [
|
| 4497 |
+
"language"
|
| 4498 |
+
],
|
| 4499 |
+
"risk": "safe",
|
| 4500 |
+
"needs_sudo": false,
|
| 4501 |
+
"platforms": [
|
| 4502 |
+
"pi",
|
| 4503 |
+
"windows"
|
| 4504 |
+
],
|
| 4505 |
+
"desc": "Speech-to-text a file",
|
| 4506 |
+
"executable": true
|
| 4507 |
+
},
|
| 4508 |
+
"transfer_files": {
|
| 4509 |
+
"slots": [
|
| 4510 |
+
"file",
|
| 4511 |
+
"host"
|
| 4512 |
+
],
|
| 4513 |
+
"optional": [],
|
| 4514 |
+
"risk": "caution",
|
| 4515 |
+
"needs_sudo": false,
|
| 4516 |
+
"platforms": [
|
| 4517 |
+
"pi",
|
| 4518 |
+
"windows"
|
| 4519 |
+
],
|
| 4520 |
+
"desc": "Copy/rsync/scp files to a host",
|
| 4521 |
+
"executable": true
|
| 4522 |
+
},
|
| 4523 |
+
"type_text": {
|
| 4524 |
+
"slots": [
|
| 4525 |
+
"text"
|
| 4526 |
+
],
|
| 4527 |
+
"optional": [],
|
| 4528 |
+
"risk": "safe",
|
| 4529 |
+
"needs_sudo": false,
|
| 4530 |
+
"platforms": [
|
| 4531 |
+
"pi",
|
| 4532 |
+
"windows"
|
| 4533 |
+
],
|
| 4534 |
+
"desc": "Type the given text at the cursor",
|
| 4535 |
+
"executable": true
|
| 4536 |
+
},
|
| 4537 |
+
"unban_ip": {
|
| 4538 |
+
"slots": [
|
| 4539 |
+
"ip"
|
| 4540 |
+
],
|
| 4541 |
+
"optional": [],
|
| 4542 |
+
"risk": "caution",
|
| 4543 |
+
"needs_sudo": true,
|
| 4544 |
+
"platforms": [
|
| 4545 |
+
"pi",
|
| 4546 |
+
"windows"
|
| 4547 |
+
],
|
| 4548 |
+
"desc": "Unban an IP",
|
| 4549 |
+
"executable": true
|
| 4550 |
+
},
|
| 4551 |
+
"undo": {
|
| 4552 |
+
"slots": [],
|
| 4553 |
+
"optional": [],
|
| 4554 |
+
"risk": "safe",
|
| 4555 |
+
"needs_sudo": false,
|
| 4556 |
+
"platforms": [
|
| 4557 |
+
"pi",
|
| 4558 |
+
"windows"
|
| 4559 |
+
],
|
| 4560 |
+
"desc": "Undo (Ctrl+Z)",
|
| 4561 |
+
"executable": true
|
| 4562 |
+
},
|
| 4563 |
+
"uninstall_app": {
|
| 4564 |
+
"slots": [
|
| 4565 |
+
"app"
|
| 4566 |
+
],
|
| 4567 |
+
"optional": [],
|
| 4568 |
+
"risk": "critical",
|
| 4569 |
+
"needs_sudo": false,
|
| 4570 |
+
"platforms": [
|
| 4571 |
+
"pi",
|
| 4572 |
+
"windows"
|
| 4573 |
+
],
|
| 4574 |
+
"desc": "Uninstall an app",
|
| 4575 |
+
"executable": true
|
| 4576 |
+
},
|
| 4577 |
+
"uninstall_package": {
|
| 4578 |
+
"slots": [
|
| 4579 |
+
"name"
|
| 4580 |
+
],
|
| 4581 |
+
"optional": [],
|
| 4582 |
+
"risk": "critical",
|
| 4583 |
+
"needs_sudo": true,
|
| 4584 |
+
"platforms": [
|
| 4585 |
+
"pi",
|
| 4586 |
+
"windows"
|
| 4587 |
+
],
|
| 4588 |
+
"desc": "Remove a package",
|
| 4589 |
+
"executable": true
|
| 4590 |
+
},
|
| 4591 |
+
"unknown": {
|
| 4592 |
+
"slots": [],
|
| 4593 |
+
"optional": [],
|
| 4594 |
+
"risk": "safe",
|
| 4595 |
+
"needs_sudo": false,
|
| 4596 |
+
"platforms": [
|
| 4597 |
+
"pi",
|
| 4598 |
+
"windows"
|
| 4599 |
+
],
|
| 4600 |
+
"desc": "Not a laptop command / not understood - do nothing",
|
| 4601 |
+
"executable": true
|
| 4602 |
+
},
|
| 4603 |
+
"unmount_drive": {
|
| 4604 |
+
"slots": [
|
| 4605 |
+
"device"
|
| 4606 |
+
],
|
| 4607 |
+
"optional": [],
|
| 4608 |
+
"risk": "caution",
|
| 4609 |
+
"needs_sudo": true,
|
| 4610 |
+
"platforms": [
|
| 4611 |
+
"pi",
|
| 4612 |
+
"windows"
|
| 4613 |
+
],
|
| 4614 |
+
"desc": "Unmount/eject a drive",
|
| 4615 |
+
"executable": true
|
| 4616 |
+
},
|
| 4617 |
+
"unmute": {
|
| 4618 |
+
"slots": [],
|
| 4619 |
+
"optional": [],
|
| 4620 |
+
"risk": "safe",
|
| 4621 |
+
"needs_sudo": false,
|
| 4622 |
+
"platforms": [
|
| 4623 |
+
"pi",
|
| 4624 |
+
"windows"
|
| 4625 |
+
],
|
| 4626 |
+
"desc": "Unmute audio",
|
| 4627 |
+
"executable": true
|
| 4628 |
+
},
|
| 4629 |
+
"update_packages": {
|
| 4630 |
+
"slots": [],
|
| 4631 |
+
"optional": [],
|
| 4632 |
+
"risk": "safe",
|
| 4633 |
+
"needs_sudo": true,
|
| 4634 |
+
"platforms": [
|
| 4635 |
+
"pi",
|
| 4636 |
+
"windows"
|
| 4637 |
+
],
|
| 4638 |
+
"desc": "Refresh package lists",
|
| 4639 |
+
"executable": true
|
| 4640 |
+
},
|
| 4641 |
+
"volume_down": {
|
| 4642 |
+
"slots": [],
|
| 4643 |
+
"optional": [
|
| 4644 |
+
"step"
|
| 4645 |
+
],
|
| 4646 |
+
"risk": "safe",
|
| 4647 |
+
"needs_sudo": false,
|
| 4648 |
+
"platforms": [
|
| 4649 |
+
"pi",
|
| 4650 |
+
"windows"
|
| 4651 |
+
],
|
| 4652 |
+
"desc": "Decrease volume (default step 10)",
|
| 4653 |
+
"executable": true
|
| 4654 |
+
},
|
| 4655 |
+
"volume_up": {
|
| 4656 |
+
"slots": [],
|
| 4657 |
+
"optional": [
|
| 4658 |
+
"step"
|
| 4659 |
+
],
|
| 4660 |
+
"risk": "safe",
|
| 4661 |
+
"needs_sudo": false,
|
| 4662 |
+
"platforms": [
|
| 4663 |
+
"pi",
|
| 4664 |
+
"windows"
|
| 4665 |
+
],
|
| 4666 |
+
"desc": "Increase volume (default step 10)",
|
| 4667 |
+
"executable": true
|
| 4668 |
+
},
|
| 4669 |
+
"vpn_connect": {
|
| 4670 |
+
"slots": [],
|
| 4671 |
+
"optional": [],
|
| 4672 |
+
"risk": "safe",
|
| 4673 |
+
"needs_sudo": false,
|
| 4674 |
+
"platforms": [
|
| 4675 |
+
"pi",
|
| 4676 |
+
"windows"
|
| 4677 |
+
],
|
| 4678 |
+
"desc": "Connect VPN",
|
| 4679 |
+
"executable": true
|
| 4680 |
+
},
|
| 4681 |
+
"vpn_disconnect": {
|
| 4682 |
+
"slots": [],
|
| 4683 |
+
"optional": [],
|
| 4684 |
+
"risk": "caution",
|
| 4685 |
+
"needs_sudo": false,
|
| 4686 |
+
"platforms": [
|
| 4687 |
+
"pi",
|
| 4688 |
+
"windows"
|
| 4689 |
+
],
|
| 4690 |
+
"desc": "Disconnect VPN",
|
| 4691 |
+
"executable": true
|
| 4692 |
+
},
|
| 4693 |
+
"watch_command": {
|
| 4694 |
+
"slots": [
|
| 4695 |
+
"command"
|
| 4696 |
+
],
|
| 4697 |
+
"optional": [
|
| 4698 |
+
"interval"
|
| 4699 |
+
],
|
| 4700 |
+
"risk": "caution",
|
| 4701 |
+
"needs_sudo": false,
|
| 4702 |
+
"platforms": [
|
| 4703 |
+
"pi",
|
| 4704 |
+
"windows"
|
| 4705 |
+
],
|
| 4706 |
+
"desc": "Re-run a command on an interval",
|
| 4707 |
+
"executable": true
|
| 4708 |
+
},
|
| 4709 |
+
"web_login": {
|
| 4710 |
+
"slots": [
|
| 4711 |
+
"site",
|
| 4712 |
+
"username",
|
| 4713 |
+
"password"
|
| 4714 |
+
],
|
| 4715 |
+
"optional": [],
|
| 4716 |
+
"risk": "caution",
|
| 4717 |
+
"needs_sudo": false,
|
| 4718 |
+
"platforms": [
|
| 4719 |
+
"pi",
|
| 4720 |
+
"windows"
|
| 4721 |
+
],
|
| 4722 |
+
"desc": "Open a website and log in with supplied credentials",
|
| 4723 |
+
"executable": true
|
| 4724 |
+
},
|
| 4725 |
+
"web_search": {
|
| 4726 |
+
"slots": [
|
| 4727 |
+
"query"
|
| 4728 |
+
],
|
| 4729 |
+
"optional": [],
|
| 4730 |
+
"risk": "safe",
|
| 4731 |
+
"needs_sudo": false,
|
| 4732 |
+
"platforms": [
|
| 4733 |
+
"pi",
|
| 4734 |
+
"windows"
|
| 4735 |
+
],
|
| 4736 |
+
"desc": "Google search for a query",
|
| 4737 |
+
"executable": true
|
| 4738 |
+
},
|
| 4739 |
+
"wifi_off": {
|
| 4740 |
+
"slots": [],
|
| 4741 |
+
"optional": [],
|
| 4742 |
+
"risk": "critical",
|
| 4743 |
+
"needs_sudo": false,
|
| 4744 |
+
"platforms": [
|
| 4745 |
+
"pi",
|
| 4746 |
+
"windows"
|
| 4747 |
+
],
|
| 4748 |
+
"desc": "Turn Wi-Fi off",
|
| 4749 |
+
"executable": true
|
| 4750 |
+
},
|
| 4751 |
+
"wifi_on": {
|
| 4752 |
+
"slots": [],
|
| 4753 |
+
"optional": [],
|
| 4754 |
+
"risk": "caution",
|
| 4755 |
+
"needs_sudo": false,
|
| 4756 |
+
"platforms": [
|
| 4757 |
+
"pi",
|
| 4758 |
+
"windows"
|
| 4759 |
+
],
|
| 4760 |
+
"desc": "Turn Wi-Fi on",
|
| 4761 |
+
"executable": true
|
| 4762 |
+
},
|
| 4763 |
+
"youtube_search": {
|
| 4764 |
+
"slots": [
|
| 4765 |
+
"query"
|
| 4766 |
+
],
|
| 4767 |
+
"optional": [],
|
| 4768 |
+
"risk": "safe",
|
| 4769 |
+
"needs_sudo": false,
|
| 4770 |
+
"platforms": [
|
| 4771 |
+
"pi",
|
| 4772 |
+
"windows"
|
| 4773 |
+
],
|
| 4774 |
+
"desc": "Search / play something on YouTube",
|
| 4775 |
+
"executable": true
|
| 4776 |
+
},
|
| 4777 |
+
"zoom_in": {
|
| 4778 |
+
"slots": [],
|
| 4779 |
+
"optional": [],
|
| 4780 |
+
"risk": "safe",
|
| 4781 |
+
"needs_sudo": false,
|
| 4782 |
+
"platforms": [
|
| 4783 |
+
"pi",
|
| 4784 |
+
"windows"
|
| 4785 |
+
],
|
| 4786 |
+
"desc": "Zoom in",
|
| 4787 |
+
"executable": true
|
| 4788 |
+
},
|
| 4789 |
+
"zoom_out": {
|
| 4790 |
+
"slots": [],
|
| 4791 |
+
"optional": [],
|
| 4792 |
+
"risk": "safe",
|
| 4793 |
+
"needs_sudo": false,
|
| 4794 |
+
"platforms": [
|
| 4795 |
+
"pi",
|
| 4796 |
+
"windows"
|
| 4797 |
+
],
|
| 4798 |
+
"desc": "Zoom out",
|
| 4799 |
+
"executable": true
|
| 4800 |
+
},
|
| 4801 |
+
"zoom_reset": {
|
| 4802 |
+
"slots": [],
|
| 4803 |
+
"optional": [],
|
| 4804 |
+
"risk": "safe",
|
| 4805 |
+
"needs_sudo": false,
|
| 4806 |
+
"platforms": [
|
| 4807 |
+
"pi",
|
| 4808 |
+
"windows"
|
| 4809 |
+
],
|
| 4810 |
+
"desc": "Reset zoom to 100%",
|
| 4811 |
+
"executable": true
|
| 4812 |
+
}
|
| 4813 |
+
},
|
| 4814 |
+
"slot_types": {
|
| 4815 |
+
"action": "enum",
|
| 4816 |
+
"address": "text",
|
| 4817 |
+
"alt": "enum",
|
| 4818 |
+
"amount": "int",
|
| 4819 |
+
"angle": "int",
|
| 4820 |
+
"app": "enum",
|
| 4821 |
+
"at": "time",
|
| 4822 |
+
"baud": "int",
|
| 4823 |
+
"command": "text",
|
| 4824 |
+
"contact": "text",
|
| 4825 |
+
"container": "text",
|
| 4826 |
+
"cores": "text",
|
| 4827 |
+
"count": "int",
|
| 4828 |
+
"device": "text",
|
| 4829 |
+
"dst": "text",
|
| 4830 |
+
"duty": "int",
|
| 4831 |
+
"edge": "enum",
|
| 4832 |
+
"expression": "text",
|
| 4833 |
+
"file": "text",
|
| 4834 |
+
"folder": "enum",
|
| 4835 |
+
"format": "text",
|
| 4836 |
+
"freq": "int",
|
| 4837 |
+
"governor": "enum",
|
| 4838 |
+
"host": "text",
|
| 4839 |
+
"iface": "text",
|
| 4840 |
+
"image": "text",
|
| 4841 |
+
"interface": "enum",
|
| 4842 |
+
"interval": "int",
|
| 4843 |
+
"ip": "text",
|
| 4844 |
+
"key": "enum",
|
| 4845 |
+
"label": "text",
|
| 4846 |
+
"language": "text",
|
| 4847 |
+
"layout": "text",
|
| 4848 |
+
"link": "text",
|
| 4849 |
+
"locale": "text",
|
| 4850 |
+
"mode": "enum",
|
| 4851 |
+
"model": "text",
|
| 4852 |
+
"name": "text",
|
| 4853 |
+
"numbering": "enum",
|
| 4854 |
+
"order": "text",
|
| 4855 |
+
"orientation": "enum",
|
| 4856 |
+
"output": "enum",
|
| 4857 |
+
"overlay": "text",
|
| 4858 |
+
"page": "enum",
|
| 4859 |
+
"password": "text",
|
| 4860 |
+
"path": "text",
|
| 4861 |
+
"pid": "int",
|
| 4862 |
+
"pin": "int",
|
| 4863 |
+
"port": "int",
|
| 4864 |
+
"priority": "text",
|
| 4865 |
+
"pull": "enum",
|
| 4866 |
+
"query": "text",
|
| 4867 |
+
"register": "text",
|
| 4868 |
+
"resolution": "text",
|
| 4869 |
+
"role": "text",
|
| 4870 |
+
"schedule": "text",
|
| 4871 |
+
"serial_port": "text",
|
| 4872 |
+
"service": "enum",
|
| 4873 |
+
"site": "enum",
|
| 4874 |
+
"size": "int",
|
| 4875 |
+
"src": "text",
|
| 4876 |
+
"ssid": "text",
|
| 4877 |
+
"step": "int",
|
| 4878 |
+
"subject": "text",
|
| 4879 |
+
"target": "enum",
|
| 4880 |
+
"text": "text",
|
| 4881 |
+
"time": "time",
|
| 4882 |
+
"title": "text",
|
| 4883 |
+
"to": "text",
|
| 4884 |
+
"tz": "text",
|
| 4885 |
+
"unit": "enum",
|
| 4886 |
+
"url": "text",
|
| 4887 |
+
"user": "text",
|
| 4888 |
+
"username": "text",
|
| 4889 |
+
"value": "int"
|
| 4890 |
+
},
|
| 4891 |
+
"action_slot_types": {
|
| 4892 |
+
"web_login.site": "text",
|
| 4893 |
+
"create_calendar_event.time": "text",
|
| 4894 |
+
"set_mouse_speed.value": "text"
|
| 4895 |
+
},
|
| 4896 |
+
"enums": {
|
| 4897 |
+
"action": [
|
| 4898 |
+
"add_persistent_mount",
|
| 4899 |
+
"airplane_mode_off",
|
| 4900 |
+
"airplane_mode_on",
|
| 4901 |
+
"antivirus_scan",
|
| 4902 |
+
"attach_session",
|
| 4903 |
+
"backup_disk_image",
|
| 4904 |
+
"battery_saver_off",
|
| 4905 |
+
"battery_saver_on",
|
| 4906 |
+
"bcm_to_board",
|
| 4907 |
+
"bluetooth_connect",
|
| 4908 |
+
"bluetooth_off",
|
| 4909 |
+
"bluetooth_on",
|
| 4910 |
+
"board_to_bcm",
|
| 4911 |
+
"bookmark_page",
|
| 4912 |
+
"brightness_down",
|
| 4913 |
+
"brightness_up",
|
| 4914 |
+
"browser_back",
|
| 4915 |
+
"browser_forward",
|
| 4916 |
+
"build_project",
|
| 4917 |
+
"calculate",
|
| 4918 |
+
"camera_photo",
|
| 4919 |
+
"camera_video",
|
| 4920 |
+
"cancel_alarm",
|
| 4921 |
+
"cancel_shutdown",
|
| 4922 |
+
"cancel_timer",
|
| 4923 |
+
"check_ai_accelerator",
|
| 4924 |
+
"check_filesystem",
|
| 4925 |
+
"check_port",
|
| 4926 |
+
"check_updates",
|
| 4927 |
+
"clarify",
|
| 4928 |
+
"clear_notifications",
|
| 4929 |
+
"clear_temp_files",
|
| 4930 |
+
"clipboard_history",
|
| 4931 |
+
"clone_disk",
|
| 4932 |
+
"close_app",
|
| 4933 |
+
"close_tab",
|
| 4934 |
+
"close_window",
|
| 4935 |
+
"compress_file",
|
| 4936 |
+
"connect_wifi",
|
| 4937 |
+
"convert_media",
|
| 4938 |
+
"copy",
|
| 4939 |
+
"copy_file",
|
| 4940 |
+
"copy_ssh_key",
|
| 4941 |
+
"create_calendar_event",
|
| 4942 |
+
"create_file",
|
| 4943 |
+
"create_folder",
|
| 4944 |
+
"create_service",
|
| 4945 |
+
"create_symlink",
|
| 4946 |
+
"create_virtualenv",
|
| 4947 |
+
"cut",
|
| 4948 |
+
"dark_mode_off",
|
| 4949 |
+
"dark_mode_on",
|
| 4950 |
+
"delete_file",
|
| 4951 |
+
"disable_auto_updates",
|
| 4952 |
+
"discover_devices",
|
| 4953 |
+
"display_mode",
|
| 4954 |
+
"dnd_off",
|
| 4955 |
+
"dnd_on",
|
| 4956 |
+
"dns_lookup",
|
| 4957 |
+
"docker_compose_up",
|
| 4958 |
+
"docker_list",
|
| 4959 |
+
"docker_prune",
|
| 4960 |
+
"docker_run",
|
| 4961 |
+
"docker_stop",
|
| 4962 |
+
"download_file",
|
| 4963 |
+
"drop_caches",
|
| 4964 |
+
"edit_system_config",
|
| 4965 |
+
"emoji_panel",
|
| 4966 |
+
"empty_recycle_bin",
|
| 4967 |
+
"enable_auto_updates",
|
| 4968 |
+
"enable_zram",
|
| 4969 |
+
"expand_filesystem",
|
| 4970 |
+
"extract_archive",
|
| 4971 |
+
"factory_reset",
|
| 4972 |
+
"find_command",
|
| 4973 |
+
"find_in_page",
|
| 4974 |
+
"firewall_allow",
|
| 4975 |
+
"firewall_deny",
|
| 4976 |
+
"firewall_off",
|
| 4977 |
+
"firewall_on",
|
| 4978 |
+
"firewall_status",
|
| 4979 |
+
"fix_gpio_permissions",
|
| 4980 |
+
"flash_firmware",
|
| 4981 |
+
"flush_dns",
|
| 4982 |
+
"forget_wifi",
|
| 4983 |
+
"format_drive",
|
| 4984 |
+
"fullscreen",
|
| 4985 |
+
"get_bandwidth_usage",
|
| 4986 |
+
"get_battery",
|
| 4987 |
+
"get_boot_config",
|
| 4988 |
+
"get_boot_logs",
|
| 4989 |
+
"get_boot_time",
|
| 4990 |
+
"get_brightness",
|
| 4991 |
+
"get_cpu_clock",
|
| 4992 |
+
"get_cpu_governor",
|
| 4993 |
+
"get_cpu_pressure",
|
| 4994 |
+
"get_cpu_usage",
|
| 4995 |
+
"get_current_user",
|
| 4996 |
+
"get_date",
|
| 4997 |
+
"get_default_gateway",
|
| 4998 |
+
"get_diagnostics",
|
| 4999 |
+
"get_disk_health",
|
| 5000 |
+
"get_disk_io",
|
| 5001 |
+
"get_disk_space",
|
| 5002 |
+
"get_ethernet_status",
|
| 5003 |
+
"get_fan_speed",
|
| 5004 |
+
"get_firmware_log",
|
| 5005 |
+
"get_firmware_version",
|
| 5006 |
+
"get_folder_sizes",
|
| 5007 |
+
"get_gpu_memory",
|
| 5008 |
+
"get_gpu_usage",
|
| 5009 |
+
"get_hostname",
|
| 5010 |
+
"get_interrupts",
|
| 5011 |
+
"get_ip",
|
| 5012 |
+
"get_kernel_log",
|
| 5013 |
+
"get_kernel_version",
|
| 5014 |
+
"get_load_average",
|
| 5015 |
+
"get_mac_address",
|
| 5016 |
+
"get_memory_pressure",
|
| 5017 |
+
"get_per_core_usage",
|
| 5018 |
+
"get_power_draw",
|
| 5019 |
+
"get_public_ip",
|
| 5020 |
+
"get_radio_status",
|
| 5021 |
+
"get_ram_usage",
|
| 5022 |
+
"get_reboot_history",
|
| 5023 |
+
"get_sdcard_info",
|
| 5024 |
+
"get_service_logs",
|
| 5025 |
+
"get_slab_usage",
|
| 5026 |
+
"get_swap_usage",
|
| 5027 |
+
"get_system_info",
|
| 5028 |
+
"get_temperature",
|
| 5029 |
+
"get_throttle_status",
|
| 5030 |
+
"get_time",
|
| 5031 |
+
"get_time_sync",
|
| 5032 |
+
"get_uptime",
|
| 5033 |
+
"get_voltage",
|
| 5034 |
+
"get_volume",
|
| 5035 |
+
"get_wifi_signal",
|
| 5036 |
+
"gpio_alt_functions",
|
| 5037 |
+
"gpio_blink",
|
| 5038 |
+
"gpio_conflicts",
|
| 5039 |
+
"gpio_debug",
|
| 5040 |
+
"gpio_debug_all",
|
| 5041 |
+
"gpio_info",
|
| 5042 |
+
"gpio_off",
|
| 5043 |
+
"gpio_on",
|
| 5044 |
+
"gpio_pin_role",
|
| 5045 |
+
"gpio_pulse",
|
| 5046 |
+
"gpio_pwm",
|
| 5047 |
+
"gpio_read",
|
| 5048 |
+
"gpio_reset",
|
| 5049 |
+
"gpio_reset_all",
|
| 5050 |
+
"gpio_servo",
|
| 5051 |
+
"gpio_set_alt",
|
| 5052 |
+
"gpio_set_mode",
|
| 5053 |
+
"gpio_set_pull",
|
| 5054 |
+
"gpio_stop_watch",
|
| 5055 |
+
"gpio_toggle",
|
| 5056 |
+
"gpio_watch",
|
| 5057 |
+
"harden_ssh",
|
| 5058 |
+
"hash_file",
|
| 5059 |
+
"help",
|
| 5060 |
+
"hibernate",
|
| 5061 |
+
"high_contrast_off",
|
| 5062 |
+
"high_contrast_on",
|
| 5063 |
+
"hotspot_off",
|
| 5064 |
+
"hotspot_on",
|
| 5065 |
+
"i2c_dump",
|
| 5066 |
+
"i2c_read",
|
| 5067 |
+
"i2c_scan",
|
| 5068 |
+
"i2c_write",
|
| 5069 |
+
"incognito_window",
|
| 5070 |
+
"install_package",
|
| 5071 |
+
"install_python_package",
|
| 5072 |
+
"install_updates",
|
| 5073 |
+
"interface_disable",
|
| 5074 |
+
"interface_enable",
|
| 5075 |
+
"kill_process",
|
| 5076 |
+
"list_1wire_sensors",
|
| 5077 |
+
"list_arp",
|
| 5078 |
+
"list_audio_devices",
|
| 5079 |
+
"list_banned_ips",
|
| 5080 |
+
"list_bluetooth_devices",
|
| 5081 |
+
"list_cameras",
|
| 5082 |
+
"list_connections",
|
| 5083 |
+
"list_disks",
|
| 5084 |
+
"list_displays",
|
| 5085 |
+
"list_failed_services",
|
| 5086 |
+
"list_files",
|
| 5087 |
+
"list_free_gpio",
|
| 5088 |
+
"list_gpio",
|
| 5089 |
+
"list_gpio_chips",
|
| 5090 |
+
"list_installed_apps",
|
| 5091 |
+
"list_kernel_modules",
|
| 5092 |
+
"list_llm_models",
|
| 5093 |
+
"list_logged_in_users",
|
| 5094 |
+
"list_open_files",
|
| 5095 |
+
"list_open_ports",
|
| 5096 |
+
"list_packages",
|
| 5097 |
+
"list_partitions",
|
| 5098 |
+
"list_pci",
|
| 5099 |
+
"list_printers",
|
| 5100 |
+
"list_processes",
|
| 5101 |
+
"list_serial_ports",
|
| 5102 |
+
"list_services",
|
| 5103 |
+
"list_sessions",
|
| 5104 |
+
"list_spi_devices",
|
| 5105 |
+
"list_usb",
|
| 5106 |
+
"list_wifi",
|
| 5107 |
+
"load_overlay",
|
| 5108 |
+
"lock_screen",
|
| 5109 |
+
"magnifier_off",
|
| 5110 |
+
"magnifier_on",
|
| 5111 |
+
"manage_users",
|
| 5112 |
+
"maximize_window",
|
| 5113 |
+
"media_next",
|
| 5114 |
+
"media_pause",
|
| 5115 |
+
"media_play",
|
| 5116 |
+
"media_play_pause",
|
| 5117 |
+
"media_prev",
|
| 5118 |
+
"mic_mute",
|
| 5119 |
+
"mic_unmute",
|
| 5120 |
+
"minimize_window",
|
| 5121 |
+
"monitor_health",
|
| 5122 |
+
"monitor_hotplug",
|
| 5123 |
+
"mount_drive",
|
| 5124 |
+
"move_file",
|
| 5125 |
+
"mute",
|
| 5126 |
+
"narrator_off",
|
| 5127 |
+
"narrator_on",
|
| 5128 |
+
"network_status",
|
| 5129 |
+
"new_tab",
|
| 5130 |
+
"new_virtual_desktop",
|
| 5131 |
+
"next_tab",
|
| 5132 |
+
"night_light_off",
|
| 5133 |
+
"night_light_on",
|
| 5134 |
+
"onscreen_keyboard",
|
| 5135 |
+
"open_app",
|
| 5136 |
+
"open_config_tool",
|
| 5137 |
+
"open_file",
|
| 5138 |
+
"open_folder",
|
| 5139 |
+
"open_notification_center",
|
| 5140 |
+
"open_recycle_bin",
|
| 5141 |
+
"open_serial_terminal",
|
| 5142 |
+
"open_settings",
|
| 5143 |
+
"open_site",
|
| 5144 |
+
"open_url",
|
| 5145 |
+
"packet_capture",
|
| 5146 |
+
"partition_disk",
|
| 5147 |
+
"paste",
|
| 5148 |
+
"ping",
|
| 5149 |
+
"port_forward",
|
| 5150 |
+
"power_mode",
|
| 5151 |
+
"press_key",
|
| 5152 |
+
"prev_tab",
|
| 5153 |
+
"print_file",
|
| 5154 |
+
"print_page",
|
| 5155 |
+
"pull_llm_model",
|
| 5156 |
+
"read_file",
|
| 5157 |
+
"recent_files",
|
| 5158 |
+
"record_audio",
|
| 5159 |
+
"redo",
|
| 5160 |
+
"refresh",
|
| 5161 |
+
"remote_shell",
|
| 5162 |
+
"rename_file",
|
| 5163 |
+
"reopen_tab",
|
| 5164 |
+
"repair_packages",
|
| 5165 |
+
"repeat_last",
|
| 5166 |
+
"restart",
|
| 5167 |
+
"rotate_screen",
|
| 5168 |
+
"run_background",
|
| 5169 |
+
"run_benchmark",
|
| 5170 |
+
"run_command",
|
| 5171 |
+
"run_llm",
|
| 5172 |
+
"run_llm_benchmark",
|
| 5173 |
+
"run_network_benchmark",
|
| 5174 |
+
"run_script",
|
| 5175 |
+
"run_stress_test",
|
| 5176 |
+
"save_file",
|
| 5177 |
+
"scan_lan",
|
| 5178 |
+
"scan_ports",
|
| 5179 |
+
"schedule_task",
|
| 5180 |
+
"screen_off",
|
| 5181 |
+
"screen_record_start",
|
| 5182 |
+
"screen_record_stop",
|
| 5183 |
+
"screenshot",
|
| 5184 |
+
"scroll_down",
|
| 5185 |
+
"scroll_up",
|
| 5186 |
+
"search_files",
|
| 5187 |
+
"search_in_files",
|
| 5188 |
+
"search_package",
|
| 5189 |
+
"select_all",
|
| 5190 |
+
"send_email",
|
| 5191 |
+
"send_message",
|
| 5192 |
+
"service_disable",
|
| 5193 |
+
"service_enable",
|
| 5194 |
+
"service_restart",
|
| 5195 |
+
"service_start",
|
| 5196 |
+
"service_status",
|
| 5197 |
+
"service_stop",
|
| 5198 |
+
"set_alarm",
|
| 5199 |
+
"set_audio_output",
|
| 5200 |
+
"set_boot_order",
|
| 5201 |
+
"set_boot_target",
|
| 5202 |
+
"set_brightness",
|
| 5203 |
+
"set_cpu_affinity",
|
| 5204 |
+
"set_cpu_governor",
|
| 5205 |
+
"set_default_printer",
|
| 5206 |
+
"set_disk_label",
|
| 5207 |
+
"set_display_scale",
|
| 5208 |
+
"set_keyboard_layout",
|
| 5209 |
+
"set_locale",
|
| 5210 |
+
"set_mouse_speed",
|
| 5211 |
+
"set_owner",
|
| 5212 |
+
"set_permissions",
|
| 5213 |
+
"set_process_priority",
|
| 5214 |
+
"set_refresh_rate",
|
| 5215 |
+
"set_reminder",
|
| 5216 |
+
"set_resolution",
|
| 5217 |
+
"set_swap_size",
|
| 5218 |
+
"set_swappiness",
|
| 5219 |
+
"set_timer",
|
| 5220 |
+
"set_timezone",
|
| 5221 |
+
"set_volume",
|
| 5222 |
+
"set_wallpaper",
|
| 5223 |
+
"show_command_history",
|
| 5224 |
+
"show_desktop",
|
| 5225 |
+
"show_pinout",
|
| 5226 |
+
"show_wifi_password",
|
| 5227 |
+
"shutdown",
|
| 5228 |
+
"sign_out",
|
| 5229 |
+
"sleep",
|
| 5230 |
+
"snap_left",
|
| 5231 |
+
"snap_right",
|
| 5232 |
+
"speed_test",
|
| 5233 |
+
"start_session",
|
| 5234 |
+
"stop_llm",
|
| 5235 |
+
"stopwatch_start",
|
| 5236 |
+
"stopwatch_stop",
|
| 5237 |
+
"switch_input_language",
|
| 5238 |
+
"switch_user",
|
| 5239 |
+
"switch_window",
|
| 5240 |
+
"sync_time",
|
| 5241 |
+
"task_view",
|
| 5242 |
+
"touchpad_off",
|
| 5243 |
+
"touchpad_on",
|
| 5244 |
+
"traceroute",
|
| 5245 |
+
"transcribe_audio",
|
| 5246 |
+
"transfer_files",
|
| 5247 |
+
"type_text",
|
| 5248 |
+
"unban_ip",
|
| 5249 |
+
"undo",
|
| 5250 |
+
"uninstall_app",
|
| 5251 |
+
"uninstall_package",
|
| 5252 |
+
"unknown",
|
| 5253 |
+
"unmount_drive",
|
| 5254 |
+
"unmute",
|
| 5255 |
+
"update_packages",
|
| 5256 |
+
"volume_down",
|
| 5257 |
+
"volume_up",
|
| 5258 |
+
"vpn_connect",
|
| 5259 |
+
"vpn_disconnect",
|
| 5260 |
+
"watch_command",
|
| 5261 |
+
"web_login",
|
| 5262 |
+
"web_search",
|
| 5263 |
+
"wifi_off",
|
| 5264 |
+
"wifi_on",
|
| 5265 |
+
"youtube_search",
|
| 5266 |
+
"zoom_in",
|
| 5267 |
+
"zoom_out",
|
| 5268 |
+
"zoom_reset"
|
| 5269 |
+
],
|
| 5270 |
+
"alt": [
|
| 5271 |
+
"a0",
|
| 5272 |
+
"a1",
|
| 5273 |
+
"a2",
|
| 5274 |
+
"a3",
|
| 5275 |
+
"a4",
|
| 5276 |
+
"a5"
|
| 5277 |
+
],
|
| 5278 |
+
"app": [
|
| 5279 |
+
"browser",
|
| 5280 |
+
"calculator",
|
| 5281 |
+
"calendar",
|
| 5282 |
+
"camera",
|
| 5283 |
+
"chrome",
|
| 5284 |
+
"chromium",
|
| 5285 |
+
"clock",
|
| 5286 |
+
"cmd",
|
| 5287 |
+
"control_panel",
|
| 5288 |
+
"discord",
|
| 5289 |
+
"disk_management",
|
| 5290 |
+
"edge",
|
| 5291 |
+
"excel",
|
| 5292 |
+
"file_explorer",
|
| 5293 |
+
"firefox",
|
| 5294 |
+
"media_player",
|
| 5295 |
+
"notepad",
|
| 5296 |
+
"obs",
|
| 5297 |
+
"onenote",
|
| 5298 |
+
"outlook",
|
| 5299 |
+
"paint",
|
| 5300 |
+
"photos",
|
| 5301 |
+
"powerpoint",
|
| 5302 |
+
"powershell",
|
| 5303 |
+
"signal",
|
| 5304 |
+
"slack",
|
| 5305 |
+
"sms",
|
| 5306 |
+
"snipping_tool",
|
| 5307 |
+
"spotify",
|
| 5308 |
+
"steam",
|
| 5309 |
+
"sticky_notes",
|
| 5310 |
+
"store",
|
| 5311 |
+
"task_manager",
|
| 5312 |
+
"teams",
|
| 5313 |
+
"telegram",
|
| 5314 |
+
"terminal",
|
| 5315 |
+
"thonny",
|
| 5316 |
+
"vlc",
|
| 5317 |
+
"vscode",
|
| 5318 |
+
"whatsapp",
|
| 5319 |
+
"word",
|
| 5320 |
+
"zoom"
|
| 5321 |
+
],
|
| 5322 |
+
"edge": [
|
| 5323 |
+
"both",
|
| 5324 |
+
"falling",
|
| 5325 |
+
"rising"
|
| 5326 |
+
],
|
| 5327 |
+
"folder": [
|
| 5328 |
+
"c_drive",
|
| 5329 |
+
"d_drive",
|
| 5330 |
+
"desktop",
|
| 5331 |
+
"documents",
|
| 5332 |
+
"downloads",
|
| 5333 |
+
"home",
|
| 5334 |
+
"music",
|
| 5335 |
+
"pictures",
|
| 5336 |
+
"videos"
|
| 5337 |
+
],
|
| 5338 |
+
"governor": [
|
| 5339 |
+
"conservative",
|
| 5340 |
+
"ondemand",
|
| 5341 |
+
"performance",
|
| 5342 |
+
"powersave",
|
| 5343 |
+
"schedutil"
|
| 5344 |
+
],
|
| 5345 |
+
"interface": [
|
| 5346 |
+
"camera",
|
| 5347 |
+
"i2c",
|
| 5348 |
+
"onewire",
|
| 5349 |
+
"serial",
|
| 5350 |
+
"spi"
|
| 5351 |
+
],
|
| 5352 |
+
"key": [
|
| 5353 |
+
"backspace",
|
| 5354 |
+
"delete",
|
| 5355 |
+
"down",
|
| 5356 |
+
"end",
|
| 5357 |
+
"enter",
|
| 5358 |
+
"escape",
|
| 5359 |
+
"f11",
|
| 5360 |
+
"f5",
|
| 5361 |
+
"home",
|
| 5362 |
+
"left",
|
| 5363 |
+
"page_down",
|
| 5364 |
+
"right",
|
| 5365 |
+
"space",
|
| 5366 |
+
"tab",
|
| 5367 |
+
"up"
|
| 5368 |
+
],
|
| 5369 |
+
"mode": [
|
| 5370 |
+
"balanced",
|
| 5371 |
+
"duplicate",
|
| 5372 |
+
"extend",
|
| 5373 |
+
"input",
|
| 5374 |
+
"output",
|
| 5375 |
+
"pc_only",
|
| 5376 |
+
"performance",
|
| 5377 |
+
"second_only"
|
| 5378 |
+
],
|
| 5379 |
+
"numbering": [
|
| 5380 |
+
"board"
|
| 5381 |
+
],
|
| 5382 |
+
"orientation": [
|
| 5383 |
+
"landscape",
|
| 5384 |
+
"landscape_flipped",
|
| 5385 |
+
"portrait"
|
| 5386 |
+
],
|
| 5387 |
+
"output": [
|
| 5388 |
+
"bluetooth",
|
| 5389 |
+
"hdmi",
|
| 5390 |
+
"headphones",
|
| 5391 |
+
"speakers"
|
| 5392 |
+
],
|
| 5393 |
+
"page": [
|
| 5394 |
+
"about",
|
| 5395 |
+
"accounts",
|
| 5396 |
+
"apps",
|
| 5397 |
+
"battery",
|
| 5398 |
+
"bluetooth",
|
| 5399 |
+
"date_time",
|
| 5400 |
+
"default_apps",
|
| 5401 |
+
"display",
|
| 5402 |
+
"keyboard",
|
| 5403 |
+
"language",
|
| 5404 |
+
"mouse",
|
| 5405 |
+
"network",
|
| 5406 |
+
"notifications",
|
| 5407 |
+
"personalization",
|
| 5408 |
+
"power",
|
| 5409 |
+
"printers",
|
| 5410 |
+
"privacy",
|
| 5411 |
+
"sound",
|
| 5412 |
+
"storage",
|
| 5413 |
+
"update",
|
| 5414 |
+
"wifi"
|
| 5415 |
+
],
|
| 5416 |
+
"pull": [
|
| 5417 |
+
"down",
|
| 5418 |
+
"none",
|
| 5419 |
+
"up"
|
| 5420 |
+
],
|
| 5421 |
+
"service": [
|
| 5422 |
+
"abhi",
|
| 5423 |
+
"apache",
|
| 5424 |
+
"bhai",
|
| 5425 |
+
"bluetooth",
|
| 5426 |
+
"cron",
|
| 5427 |
+
"diijye",
|
| 5428 |
+
"dijie",
|
| 5429 |
+
"dijiye",
|
| 5430 |
+
"docker",
|
| 5431 |
+
"kijiye",
|
| 5432 |
+
"mosquitto",
|
| 5433 |
+
"mysql",
|
| 5434 |
+
"nginx",
|
| 5435 |
+
"nodered",
|
| 5436 |
+
"pihole",
|
| 5437 |
+
"plase",
|
| 5438 |
+
"please",
|
| 5439 |
+
"samba",
|
| 5440 |
+
"spooler",
|
| 5441 |
+
"ssh",
|
| 5442 |
+
"thanks",
|
| 5443 |
+
"vnc",
|
| 5444 |
+
"w32time",
|
| 5445 |
+
"zara"
|
| 5446 |
+
],
|
| 5447 |
+
"site": [
|
| 5448 |
+
"amazon",
|
| 5449 |
+
"chatgpt",
|
| 5450 |
+
"claude",
|
| 5451 |
+
"facebook",
|
| 5452 |
+
"flipkart",
|
| 5453 |
+
"github",
|
| 5454 |
+
"gmail",
|
| 5455 |
+
"google",
|
| 5456 |
+
"google_drive",
|
| 5457 |
+
"google_maps",
|
| 5458 |
+
"hotstar",
|
| 5459 |
+
"instagram",
|
| 5460 |
+
"irctc",
|
| 5461 |
+
"linkedin",
|
| 5462 |
+
"netflix",
|
| 5463 |
+
"stackoverflow",
|
| 5464 |
+
"twitter",
|
| 5465 |
+
"whatsapp_web",
|
| 5466 |
+
"wikipedia",
|
| 5467 |
+
"youtube"
|
| 5468 |
+
],
|
| 5469 |
+
"target": [
|
| 5470 |
+
"console",
|
| 5471 |
+
"cpu",
|
| 5472 |
+
"desktop",
|
| 5473 |
+
"disk",
|
| 5474 |
+
"graphical",
|
| 5475 |
+
"headless",
|
| 5476 |
+
"memory",
|
| 5477 |
+
"text"
|
| 5478 |
+
],
|
| 5479 |
+
"unit": [
|
| 5480 |
+
"hour",
|
| 5481 |
+
"min",
|
| 5482 |
+
"sec"
|
| 5483 |
+
]
|
| 5484 |
+
},
|
| 5485 |
+
"int_ranges": {
|
| 5486 |
+
"amount": [
|
| 5487 |
+
0,
|
| 5488 |
+
999
|
| 5489 |
+
],
|
| 5490 |
+
"angle": [
|
| 5491 |
+
0,
|
| 5492 |
+
180
|
| 5493 |
+
],
|
| 5494 |
+
"baud": [
|
| 5495 |
+
1,
|
| 5496 |
+
999999
|
| 5497 |
+
],
|
| 5498 |
+
"count": [
|
| 5499 |
+
1,
|
| 5500 |
+
99
|
| 5501 |
+
],
|
| 5502 |
+
"duty": [
|
| 5503 |
+
0,
|
| 5504 |
+
100
|
| 5505 |
+
],
|
| 5506 |
+
"freq": [
|
| 5507 |
+
1,
|
| 5508 |
+
99999
|
| 5509 |
+
],
|
| 5510 |
+
"interval": [
|
| 5511 |
+
1,
|
| 5512 |
+
9999
|
| 5513 |
+
],
|
| 5514 |
+
"pid": [
|
| 5515 |
+
1,
|
| 5516 |
+
999999
|
| 5517 |
+
],
|
| 5518 |
+
"pin": [
|
| 5519 |
+
0,
|
| 5520 |
+
40
|
| 5521 |
+
],
|
| 5522 |
+
"port": [
|
| 5523 |
+
1,
|
| 5524 |
+
65535
|
| 5525 |
+
],
|
| 5526 |
+
"size": [
|
| 5527 |
+
1,
|
| 5528 |
+
99999
|
| 5529 |
+
],
|
| 5530 |
+
"step": [
|
| 5531 |
+
1,
|
| 5532 |
+
100
|
| 5533 |
+
],
|
| 5534 |
+
"value": [
|
| 5535 |
+
0,
|
| 5536 |
+
255
|
| 5537 |
+
]
|
| 5538 |
+
}
|
| 5539 |
+
}
|
model/catalog.py
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""Union catalog (371 actions) in the shape the tokenizer/grammar expect.
|
| 2 |
+
Slot types: enum (closed set, canonical value), int (digits within range), time (HH:MM), text (verbatim substring of input).
|
| 3 |
+
A slot's type is global (SLOT_TYPES) unless ACTION_SLOT_TYPES overrides it for one action, e.g. web_login.site is text
|
| 4 |
+
while open_site.site is enum; create_calendar_event.time is text while set_alarm.time is HH:MM.
|
| 5 |
+
"""
|
| 6 |
+
import json, os
|
| 7 |
+
HERE = os.path.dirname(os.path.abspath(__file__))
|
| 8 |
+
_C = json.load(open(os.path.join(HERE, "catalog.json")))
|
| 9 |
+
ACTIONS = _C["actions"]
|
| 10 |
+
SLOT_TYPES = _C["slot_types"]
|
| 11 |
+
ACTION_SLOT_TYPES = _C["action_slot_types"]
|
| 12 |
+
ENUMS = _C["enums"]
|
| 13 |
+
INT_RANGES = {k: tuple(v) for k, v in _C["int_ranges"].items()}
|
| 14 |
+
ACTION_NAMES = list(ACTIONS)
|
| 15 |
+
|
| 16 |
+
|
| 17 |
+
def slot_type(action, slot):
|
| 18 |
+
return ACTION_SLOT_TYPES.get(f"{action}.{slot}", SLOT_TYPES[slot])
|
| 19 |
+
|
| 20 |
+
|
| 21 |
+
def slot_order(action):
|
| 22 |
+
a = ACTIONS[action]
|
| 23 |
+
return a["slots"] + a["optional"]
|
model/config.json
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"max_out": 112,
|
| 3 |
+
"n_dec": 3,
|
| 4 |
+
"h": 8,
|
| 5 |
+
"n_enc": 5,
|
| 6 |
+
"d": 256,
|
| 7 |
+
"n_out": 1052,
|
| 8 |
+
"n_in": 200,
|
| 9 |
+
"max_in": 128,
|
| 10 |
+
"f": 768
|
| 11 |
+
}
|
model/grammar.py
ADDED
|
@@ -0,0 +1,100 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""
|
| 2 |
+
Grammar-constrained decoding: every output is schema-valid.
|
| 3 |
+
action -> required slots (catalog order) -> optional slots (catalog order) -> <eos>
|
| 4 |
+
enum: only listed values | int: digits within the slot's range | time: HH:MM | text: verbatim substring of the input
|
| 5 |
+
"""
|
| 6 |
+
import os, sys
|
| 7 |
+
HERE = os.path.dirname(os.path.abspath(__file__)); sys.path.insert(0, HERE)
|
| 8 |
+
from catalog import ACTIONS, SLOT_TYPES, INT_RANGES, slot_type, slot_order # noqa
|
| 9 |
+
from tokenizer import EOS # noqa
|
| 10 |
+
|
| 11 |
+
|
| 12 |
+
class Grammar:
|
| 13 |
+
def __init__(self, tok):
|
| 14 |
+
self.tok = tok
|
| 15 |
+
self.action_ids = [tok.out_idx[a] for a in ACTIONS]
|
| 16 |
+
self.enum_start = {} # slot -> enum token ids
|
| 17 |
+
for t, (s, _) in tok.enum_tokens.items():
|
| 18 |
+
self.enum_start.setdefault(s, []).append(tok.out_idx[t])
|
| 19 |
+
self.key_id = {k[:-1]: tok.out_idx[k] for k in tok.key_tokens}
|
| 20 |
+
self.id2slot = {}
|
| 21 |
+
for s, ids in self.enum_start.items():
|
| 22 |
+
for i in ids: self.id2slot[i] = s
|
| 23 |
+
for s, i in self.key_id.items(): self.id2slot[i] = s
|
| 24 |
+
self.char_of = {v: k for k, v in tok.char_id.items()}
|
| 25 |
+
self.digit = {d: tok.char_id[str(d)] for d in range(10)}
|
| 26 |
+
self.colon = tok.char_id[":"]
|
| 27 |
+
|
| 28 |
+
def starts(self, action, slot):
|
| 29 |
+
return self.enum_start.get(slot, []) if slot_type(action, slot) == "enum" else [self.key_id[slot]]
|
| 30 |
+
|
| 31 |
+
def _parse(self, prefix):
|
| 32 |
+
if not prefix:
|
| 33 |
+
return None, [], None, "", False
|
| 34 |
+
action = self.tok.out_vocab[prefix[0]]
|
| 35 |
+
done, cur, buf, in_text, quotes = [], None, "", False, 0
|
| 36 |
+
for i in prefix[1:]:
|
| 37 |
+
if i in self.id2slot and not in_text:
|
| 38 |
+
if cur is not None: done.append(cur)
|
| 39 |
+
cur, buf, quotes = self.id2slot[i], "", 0
|
| 40 |
+
if slot_type(action, cur) == "enum":
|
| 41 |
+
done.append(cur); cur = None
|
| 42 |
+
elif i == self.tok.quote:
|
| 43 |
+
quotes += 1; in_text = quotes == 1
|
| 44 |
+
if quotes == 2: done.append(cur); cur = None
|
| 45 |
+
else:
|
| 46 |
+
buf += self.char_of.get(i, "")
|
| 47 |
+
return action, done, cur, buf, in_text
|
| 48 |
+
|
| 49 |
+
def _next(self, action, done):
|
| 50 |
+
a = ACTIONS[action]; order = slot_order(action)
|
| 51 |
+
emitted = [s for s in order if s in done]
|
| 52 |
+
last = order.index(emitted[-1]) if emitted else -1
|
| 53 |
+
for s in a["slots"]:
|
| 54 |
+
if s not in done: return [s], False
|
| 55 |
+
if "amount" in done and "unit" in a["optional"] and "unit" not in done:
|
| 56 |
+
return ["unit"], False
|
| 57 |
+
opts = [s for s in a["optional"] if order.index(s) > last and s not in done]
|
| 58 |
+
if "unit" in opts and "amount" not in done: opts.remove("unit")
|
| 59 |
+
return opts, True
|
| 60 |
+
|
| 61 |
+
def allowed(self, prefix, src_text):
|
| 62 |
+
if not prefix:
|
| 63 |
+
return self.action_ids
|
| 64 |
+
action, done, cur, buf, in_text = self._parse(prefix)
|
| 65 |
+
if cur is not None:
|
| 66 |
+
ty = slot_type(action, cur)
|
| 67 |
+
if ty == "int":
|
| 68 |
+
lo, hi = INT_RANGES[cur]; out = []
|
| 69 |
+
if buf != "0":
|
| 70 |
+
for d in range(10):
|
| 71 |
+
if not buf and d == 0 and lo > 0: continue
|
| 72 |
+
if int(buf + str(d)) <= hi: out.append(self.digit[d])
|
| 73 |
+
if buf and lo <= int(buf) <= hi:
|
| 74 |
+
nxt, end = self._next(action, done + [cur])
|
| 75 |
+
out += [i for s in nxt for i in self.starts(action, s)]
|
| 76 |
+
if end: out.append(EOS)
|
| 77 |
+
return out
|
| 78 |
+
if ty == "time": # HH:MM
|
| 79 |
+
n = len(buf)
|
| 80 |
+
if n == 0: return [self.digit[d] for d in range(3)]
|
| 81 |
+
if n == 1: return [self.digit[d] for d in range(10) if int(buf + str(d)) <= 23]
|
| 82 |
+
if n == 2: return [self.colon]
|
| 83 |
+
if n == 3: return [self.digit[d] for d in range(6)]
|
| 84 |
+
if n == 4: return [self.digit[d] for d in range(10)]
|
| 85 |
+
nxt, end = self._next(action, done + [cur])
|
| 86 |
+
out = [i for s in nxt for i in self.starts(action, s)]
|
| 87 |
+
if end: out.append(EOS)
|
| 88 |
+
return out
|
| 89 |
+
if ty == "text":
|
| 90 |
+
if not in_text: return [self.tok.quote]
|
| 91 |
+
out = []
|
| 92 |
+
for c, cid in self.tok.char_id.items():
|
| 93 |
+
if (buf + c) in src_text and not (not buf and c == " ") and not (buf.endswith(" ") and c == " "):
|
| 94 |
+
out.append(cid)
|
| 95 |
+
if buf and not buf.endswith(" "): out.append(self.tok.quote)
|
| 96 |
+
return out
|
| 97 |
+
nxt, end = self._next(action, done)
|
| 98 |
+
out = [i for s in nxt for i in self.starts(action, s)]
|
| 99 |
+
if end: out.append(EOS)
|
| 100 |
+
return out
|
model/model.npz
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:30ff9a19e8f007cabcaa2133b61d0a3389adcac16e354763babf874d8d0d74c8
|
| 3 |
+
size 23912849
|
model/normalize.py
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""Input normalisation (what the encoder sees) and case recovery for copied free-text slots."""
|
| 2 |
+
import re
|
| 3 |
+
|
| 4 |
+
def normalize(s):
|
| 5 |
+
s = s.lower().replace('"', " ").replace("`", " ").replace("’", "'").replace("“", " ").replace("”", " ")
|
| 6 |
+
s = re.sub(r"\s+", " ", s).strip()
|
| 7 |
+
return s
|
| 8 |
+
|
| 9 |
+
def recover_case(raw, value):
|
| 10 |
+
"""The decoder copies free text in lowercase; find the same span in the raw input and return it with original case."""
|
| 11 |
+
if not value:
|
| 12 |
+
return value
|
| 13 |
+
m = re.search(re.escape(value), raw, re.I)
|
| 14 |
+
if m:
|
| 15 |
+
return m.group(0)
|
| 16 |
+
# whitespace may have been collapsed / quotes stripped: try a whitespace-tolerant match
|
| 17 |
+
pat = r"\s*".join(re.escape(c) if c != " " else r"[\s\"]+" for c in value)
|
| 18 |
+
m = re.search(pat, raw, re.I)
|
| 19 |
+
return m.group(0).strip(' "') if m else value
|
model/runtime.py
ADDED
|
@@ -0,0 +1,75 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""Pure-numpy inference runtime (no torch) for the union command model.
|
| 2 |
+
from runtime import CommandModel
|
| 3 |
+
m = CommandModel("artifacts/final"); m.predict("volume saath pe kar do")
|
| 4 |
+
-> {"action": "set_volume", "value": 60, "_meta": {...}}
|
| 5 |
+
"""
|
| 6 |
+
import json, math, os, re, sys, time
|
| 7 |
+
import numpy as np
|
| 8 |
+
HERE = os.path.dirname(os.path.abspath(__file__)); sys.path.insert(0, HERE)
|
| 9 |
+
from tokenizer import Tokenizer, BOS, EOS, PAD # noqa
|
| 10 |
+
from grammar import Grammar # noqa
|
| 11 |
+
from normalize import normalize, recover_case # noqa
|
| 12 |
+
from catalog import ACTIONS, slot_type # noqa
|
| 13 |
+
from snap import snap_target # noqa
|
| 14 |
+
|
| 15 |
+
def _erf(x):
|
| 16 |
+
s = np.sign(x); x = np.abs(x); t = 1.0 / (1.0 + 0.3275911 * x)
|
| 17 |
+
y = 1.0 - (((((1.061405429 * t - 1.453152027) * t) + 1.421413741) * t - 0.284496736) * t + 0.254829592) * t * np.exp(-x * x)
|
| 18 |
+
return s * y
|
| 19 |
+
def gelu(x): return 0.5 * x * (1.0 + _erf(x / math.sqrt(2.0)))
|
| 20 |
+
def layernorm(x, g, b, eps=1e-5):
|
| 21 |
+
m = x.mean(-1, keepdims=True); v = ((x - m) ** 2).mean(-1, keepdims=True); return (x - m) / np.sqrt(v + eps) * g + b
|
| 22 |
+
def softmax(x): x = x - x.max(-1, keepdims=True); e = np.exp(x); return e / e.sum(-1, keepdims=True)
|
| 23 |
+
|
| 24 |
+
class CommandModel:
|
| 25 |
+
def __init__(self, path):
|
| 26 |
+
self.cfg = json.load(open(os.path.join(path, "config.json")))
|
| 27 |
+
w = np.load(os.path.join(path, "model.npz")); self.W = {k: w[k].astype(np.float32) for k in w.files}
|
| 28 |
+
self.h = self.cfg["h"]; self.tok = Tokenizer(); self.gram = Grammar(self.tok)
|
| 29 |
+
self.max_in, self.max_out = self.cfg.get("max_in", 128), self.cfg.get("max_out", 112)
|
| 30 |
+
def _lin(self, x, n): return x @ self.W[n + ".weight"].T + self.W[n + ".bias"]
|
| 31 |
+
def _mha(self, x, mem, pre, mask):
|
| 32 |
+
T, D = x.shape; S = mem.shape[0]; h, dk = self.h, D // self.h
|
| 33 |
+
q = self._lin(x, pre + ".q").reshape(T, h, dk).transpose(1, 0, 2); k = self._lin(mem, pre + ".k").reshape(S, h, dk).transpose(1, 0, 2); v = self._lin(mem, pre + ".v").reshape(S, h, dk).transpose(1, 0, 2)
|
| 34 |
+
att = q @ k.transpose(0, 2, 1) / math.sqrt(dk)
|
| 35 |
+
if mask is not None: att = np.where(mask, att, -1e9)
|
| 36 |
+
return self._lin((softmax(att) @ v).transpose(1, 0, 2).reshape(T, D), pre + ".o")
|
| 37 |
+
def _ff(self, x, pre): return self._lin(gelu(self._lin(x, pre + ".a")), pre + ".b")
|
| 38 |
+
def _ln(self, x, pre): return layernorm(x, self.W[pre + ".weight"], self.W[pre + ".bias"])
|
| 39 |
+
def encode(self, ids):
|
| 40 |
+
W = self.W; x = W["in_emb.weight"][ids] + W["in_pos.weight"][:len(ids)]
|
| 41 |
+
for i in range(self.cfg["n_enc"]):
|
| 42 |
+
p = f"enc.{i}"; y = self._ln(x, p + ".ln1"); x = x + self._mha(y, y, p + ".att", None); x = x + self._ff(self._ln(x, p + ".ln2"), p + ".ff")
|
| 43 |
+
return self._ln(x, "enc_ln")
|
| 44 |
+
def decode_step(self, prefix, mem):
|
| 45 |
+
W = self.W; T = len(prefix); x = W["out_emb.weight"][prefix] + W["out_pos.weight"][:T]; causal = np.tril(np.ones((T, T), dtype=bool))[None]
|
| 46 |
+
for i in range(self.cfg["n_dec"]):
|
| 47 |
+
p = f"dec.{i}"; y = self._ln(x, p + ".ln1"); x = x + self._mha(y, y, p + ".self_att", causal); x = x + self._mha(self._ln(x, p + ".ln2"), mem, p + ".cross", None); x = x + self._ff(self._ln(x, p + ".ln3"), p + ".ff")
|
| 48 |
+
return self._ln(x, "dec_ln")[-1] @ W["out_emb.weight"].T
|
| 49 |
+
def predict_raw(self, text):
|
| 50 |
+
t = normalize(text); ids = self.tok.encode_in(t, self.max_in) or [self.tok.in_idx[" "]]
|
| 51 |
+
mem = self.encode(np.array(ids)); seq, logp, nt, alts = [BOS], 0.0, 0, None
|
| 52 |
+
for _ in range(self.max_out - 1):
|
| 53 |
+
logits = self.decode_step(np.array(seq), mem); allowed = self.gram.allowed(seq[1:], t) or [EOS]
|
| 54 |
+
p = softmax(logits[allowed]); j = int(p.argmax())
|
| 55 |
+
if alts is None: alts = [(self.tok.out_vocab[allowed[k]], float(p[k])) for k in np.argsort(-p)[:3]]
|
| 56 |
+
logp += math.log(max(p[j], 1e-12)); nt += 1; seq.append(allowed[j])
|
| 57 |
+
if allowed[j] == EOS: break
|
| 58 |
+
return snap_target(text, self.tok.decode_out(seq)), math.exp(logp / max(nt, 1)), t, alts
|
| 59 |
+
def predict(self, text):
|
| 60 |
+
t0 = time.perf_counter(); canon, conf, norm, alts = self.predict_raw(text)
|
| 61 |
+
out = to_json(canon, text)
|
| 62 |
+
out["_meta"] = {"canonical": canon, "confidence": round(conf, 4), "normalized_input": norm, "latency_ms": round((time.perf_counter() - t0) * 1000, 1),
|
| 63 |
+
"risk": ACTIONS.get(out["action"], {}).get("risk", "safe"), "alternatives": [{"action": a, "p": round(p, 4)} for a, p in alts]}
|
| 64 |
+
return out
|
| 65 |
+
|
| 66 |
+
def to_json(canon, raw_text=None):
|
| 67 |
+
parts = canon.split(" ", 1); action = parts[0]; out = {"action": action}
|
| 68 |
+
if len(parts) > 1:
|
| 69 |
+
for m in re.finditer(r'(\w+)=("[^"]*"|\S+)', parts[1]):
|
| 70 |
+
k, v = m.group(1), m.group(2); ty = slot_type(action, k) if action in ACTIONS and k in __import__("catalog").SLOT_TYPES else "text"
|
| 71 |
+
if v.startswith('"'):
|
| 72 |
+
v = v[1:-1]; out[k] = recover_case(raw_text, v) if raw_text else v
|
| 73 |
+
elif ty == "int" and v.isdigit(): out[k] = int(v)
|
| 74 |
+
else: out[k] = v
|
| 75 |
+
return out
|
model/snap.py
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""Post-decode repair: extend a free-text value that was cut mid-word (letters/digits only) to the full word in the input."""
|
| 2 |
+
import re
|
| 3 |
+
from normalize import normalize
|
| 4 |
+
AN = re.compile(r"[a-z0-9ऀ-ॿ]")
|
| 5 |
+
def _occurrences(t, v):
|
| 6 |
+
i = t.find(v); out = []
|
| 7 |
+
while i >= 0: out.append(i); i = t.find(v, i + 1)
|
| 8 |
+
return out
|
| 9 |
+
def snap_value(t, v):
|
| 10 |
+
if not v or not AN.match(v[0]) and not AN.match(v[-1]): return v
|
| 11 |
+
best = None
|
| 12 |
+
for i in _occurrences(t, v):
|
| 13 |
+
j = i + len(v); a, b = i, j
|
| 14 |
+
while b < len(t) and AN.match(t[b]) and AN.match(t[b-1]): b += 1
|
| 15 |
+
while a > 0 and AN.match(t[a-1]) and AN.match(t[a]): a -= 1
|
| 16 |
+
left_ok = (a == i) # this occurrence already starts on a word boundary
|
| 17 |
+
cand = t[a:b]
|
| 18 |
+
score = (left_ok, -(len(cand) - len(v))) # prefer boundary-aligned, then minimal extension
|
| 19 |
+
if best is None or score > best[0]: best = (score, cand)
|
| 20 |
+
return best[1] if best else v
|
| 21 |
+
TOKEN_SLOTS = {"ssid", "password"} # wifi credentials never start/end in the middle of a whitespace-delimited token
|
| 22 |
+
TOKEN_ACTIONS = ("connect_wifi", "hotspot_on", "forget_wifi", "show_wifi_password") # not web_login: user:pass / user/pass are one token there
|
| 23 |
+
SEP = "/:" # ssid/pass and ssid:pass are one token
|
| 24 |
+
def snap_token(t, v):
|
| 25 |
+
"""Extend a credential value to whole whitespace tokens (drops trailing , ;)."""
|
| 26 |
+
if not v or v not in t: return v
|
| 27 |
+
best = None
|
| 28 |
+
for i in _occurrences(t, v):
|
| 29 |
+
a, b = i, i + len(v)
|
| 30 |
+
while a > 0 and not t[a-1].isspace() and t[a-1] not in SEP: a -= 1
|
| 31 |
+
while b < len(t) and not t[b].isspace() and t[b] not in SEP: b += 1
|
| 32 |
+
cand = t[a:i] + v + t[i+len(v):b].rstrip(",;.")
|
| 33 |
+
if len(cand) < len(v): cand = v
|
| 34 |
+
score = (a == i and b == i + len(v), -(len(cand) - len(v)))
|
| 35 |
+
if best is None or score > best[0]: best = (score, cand)
|
| 36 |
+
return best[1]
|
| 37 |
+
def snap_target(text, target):
|
| 38 |
+
t = normalize(text); wifi = target.startswith(TOKEN_ACTIONS)
|
| 39 |
+
def fix(m):
|
| 40 |
+
k, v = m.group(1), m.group(2)
|
| 41 |
+
v = snap_value(t, v)
|
| 42 |
+
if k in TOKEN_SLOTS and wifi: v = snap_token(t, v)
|
| 43 |
+
return f'{k}="{v}"'
|
| 44 |
+
return re.sub(r'(\w+)="([^"]*)"', fix, target)
|
| 45 |
+
if __name__ == "__main__":
|
| 46 |
+
import json, sys
|
| 47 |
+
run, name = sys.argv[1], sys.argv[2]
|
| 48 |
+
R = [json.loads(l) for l in open(f"{run}/eval/{name}.jsonl")]
|
| 49 |
+
before = sum(r["ok"] for r in R); fixed = broke = 0
|
| 50 |
+
for r in R:
|
| 51 |
+
s = snap_target(r["text"], r["pred"])
|
| 52 |
+
if s == r["target"] and not r["ok"]: fixed += 1; print(" FIXED:", r["text"][:55], "|", r["pred"][:55], "->", s[:55])
|
| 53 |
+
if s != r["target"] and r["ok"]: broke += 1; print(" BROKE:", r["text"][:55], "|", r["pred"][:55], "->", s[:55])
|
| 54 |
+
print(f"{name}: exact {before/len(R):.4f} -> {(before+fixed-broke)/len(R):.4f} fixed {fixed} broke {broke}")
|
model/tokenizer.py
ADDED
|
@@ -0,0 +1,87 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""
|
| 2 |
+
Input: characters (lowercased, Devanagari allowed). Output: hybrid tokens
|
| 3 |
+
- one token per action 'set_volume'
|
| 4 |
+
- one token per enum slot+value 'app=chrome', 'unit=min', 'action=set_volume'
|
| 5 |
+
- one token per int/text/time slot key 'value=', 'query=', 'time='
|
| 6 |
+
- character tokens for digits / free text; '"' delimits free text
|
| 7 |
+
"""
|
| 8 |
+
import re, sys, os
|
| 9 |
+
HERE = os.path.dirname(os.path.abspath(__file__)); sys.path.insert(0, HERE)
|
| 10 |
+
from catalog import ACTIONS, ENUMS, SLOT_TYPES, ACTION_SLOT_TYPES, slot_type # noqa
|
| 11 |
+
|
| 12 |
+
PAD, BOS, EOS, UNK = 0, 1, 2, 3
|
| 13 |
+
SPECIALS = ["<pad>", "<bos>", "<eos>", "<unk>"]
|
| 14 |
+
TEXT_CHARS = list(" abcdefghijklmnopqrstuvwxyz0123456789.,?!'%+-:/_@#&()*=;$~<>[]|\\{}^")
|
| 15 |
+
IN_CHARS = TEXT_CHARS + ['"', "`"] + [chr(c) for c in range(0x0900, 0x097F)]
|
| 16 |
+
|
| 17 |
+
|
| 18 |
+
class Tokenizer:
|
| 19 |
+
def __init__(self):
|
| 20 |
+
self.in_vocab = SPECIALS + list(dict.fromkeys(IN_CHARS))
|
| 21 |
+
self.in_idx = {c: i for i, c in enumerate(self.in_vocab)}
|
| 22 |
+
out = list(SPECIALS)
|
| 23 |
+
self.action_tokens = list(ACTIONS.keys())
|
| 24 |
+
out += self.action_tokens
|
| 25 |
+
self.enum_tokens = {}
|
| 26 |
+
for slot, ty in SLOT_TYPES.items():
|
| 27 |
+
if ty == "enum":
|
| 28 |
+
for v in ENUMS[slot]:
|
| 29 |
+
tok = f"{slot}={v}"; self.enum_tokens[tok] = (slot, v); out.append(tok)
|
| 30 |
+
# a key token exists for every slot that is int/text/time in ANY action (global type or override)
|
| 31 |
+
keyed = {s for s, ty in SLOT_TYPES.items() if ty != "enum"} | {k.split(".")[1] for k, ty in ACTION_SLOT_TYPES.items() if ty != "enum"}
|
| 32 |
+
self.key_tokens = [f"{s}=" for s in sorted(keyed)]
|
| 33 |
+
out += self.key_tokens
|
| 34 |
+
out.append('"')
|
| 35 |
+
self.char_tokens = TEXT_CHARS
|
| 36 |
+
out += [f"c:{c}" for c in TEXT_CHARS]
|
| 37 |
+
self.out_vocab = out
|
| 38 |
+
self.out_idx = {t: i for i, t in enumerate(out)}
|
| 39 |
+
self.quote = self.out_idx['"']
|
| 40 |
+
self.char_id = {c: self.out_idx[f"c:{c}"] for c in TEXT_CHARS}
|
| 41 |
+
self.digit_ids = [self.char_id[str(d)] for d in range(10)]
|
| 42 |
+
|
| 43 |
+
def encode_in(self, text, max_len=128):
|
| 44 |
+
return [self.in_idx.get(c, UNK) for c in text[:max_len]]
|
| 45 |
+
|
| 46 |
+
def encode_out(self, target):
|
| 47 |
+
toks = [BOS]
|
| 48 |
+
parts = target.split(" ", 1)
|
| 49 |
+
action = parts[0]
|
| 50 |
+
toks.append(self.out_idx[action])
|
| 51 |
+
if len(parts) > 1:
|
| 52 |
+
for m in re.finditer(r'(\w+)=("[^"]*"|\S+)', parts[1]):
|
| 53 |
+
k, v = m.group(1), m.group(2)
|
| 54 |
+
ty = slot_type(action, k)
|
| 55 |
+
if ty == "enum":
|
| 56 |
+
toks.append(self.out_idx[f"{k}={v}"])
|
| 57 |
+
elif ty == "int":
|
| 58 |
+
toks.append(self.out_idx[f"{k}="]); toks += [self.char_id[d] for d in v]
|
| 59 |
+
elif ty == "time":
|
| 60 |
+
toks.append(self.out_idx[f"{k}="]); toks += [self.char_id[c] for c in v.strip('"')]
|
| 61 |
+
else:
|
| 62 |
+
toks.append(self.out_idx[f"{k}="]); toks.append(self.quote)
|
| 63 |
+
toks += [self.char_id.get(c, self.char_id["?"]) for c in v[1:-1]]
|
| 64 |
+
toks.append(self.quote)
|
| 65 |
+
toks.append(EOS)
|
| 66 |
+
return toks
|
| 67 |
+
|
| 68 |
+
def decode_out(self, ids):
|
| 69 |
+
s, in_text = [], False
|
| 70 |
+
for i in ids:
|
| 71 |
+
if i in (BOS, PAD):
|
| 72 |
+
continue
|
| 73 |
+
if i == EOS:
|
| 74 |
+
break
|
| 75 |
+
t = self.out_vocab[i]
|
| 76 |
+
if t == '"':
|
| 77 |
+
s.append('"'); in_text = not in_text
|
| 78 |
+
elif t.startswith("c:"):
|
| 79 |
+
s.append(t[2:])
|
| 80 |
+
elif t in self.enum_tokens or t in self.key_tokens:
|
| 81 |
+
s.append(" " + t)
|
| 82 |
+
else:
|
| 83 |
+
s.append(t)
|
| 84 |
+
return "".join(s)
|
| 85 |
+
|
| 86 |
+
def to_json_dict(self):
|
| 87 |
+
return {"in_vocab": self.in_vocab, "out_vocab": self.out_vocab}
|
pytorch/model.pt
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:d58de968346270a752718cc2af71f924226635b6c22b82c030f957fda63f978b
|
| 3 |
+
size 25804315
|
pytorch/model.py
ADDED
|
@@ -0,0 +1,99 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""Tiny char-level Transformer encoder-decoder (pre-LN), written by hand so the numpy runtime can mirror it exactly."""
|
| 2 |
+
import math
|
| 3 |
+
import torch
|
| 4 |
+
import torch.nn as nn
|
| 5 |
+
import torch.nn.functional as F
|
| 6 |
+
|
| 7 |
+
|
| 8 |
+
class MHA(nn.Module):
|
| 9 |
+
def __init__(self, d, h):
|
| 10 |
+
super().__init__()
|
| 11 |
+
self.h, self.dk = h, d // h
|
| 12 |
+
self.q = nn.Linear(d, d); self.k = nn.Linear(d, d); self.v = nn.Linear(d, d); self.o = nn.Linear(d, d)
|
| 13 |
+
|
| 14 |
+
def forward(self, x, mem, mask):
|
| 15 |
+
B, T, D = x.shape
|
| 16 |
+
S = mem.shape[1]
|
| 17 |
+
q = self.q(x).view(B, T, self.h, self.dk).transpose(1, 2)
|
| 18 |
+
k = self.k(mem).view(B, S, self.h, self.dk).transpose(1, 2)
|
| 19 |
+
v = self.v(mem).view(B, S, self.h, self.dk).transpose(1, 2)
|
| 20 |
+
y = F.scaled_dot_product_attention(q, k, v, attn_mask=mask)
|
| 21 |
+
return self.o(y.transpose(1, 2).reshape(B, T, D))
|
| 22 |
+
|
| 23 |
+
|
| 24 |
+
class FF(nn.Module):
|
| 25 |
+
def __init__(self, d, f, p):
|
| 26 |
+
super().__init__()
|
| 27 |
+
self.a = nn.Linear(d, f); self.b = nn.Linear(f, d); self.drop = nn.Dropout(p)
|
| 28 |
+
|
| 29 |
+
def forward(self, x):
|
| 30 |
+
return self.b(self.drop(F.gelu(self.a(x))))
|
| 31 |
+
|
| 32 |
+
|
| 33 |
+
class EncLayer(nn.Module):
|
| 34 |
+
def __init__(self, d, h, f, p):
|
| 35 |
+
super().__init__()
|
| 36 |
+
self.ln1 = nn.LayerNorm(d); self.att = MHA(d, h); self.ln2 = nn.LayerNorm(d); self.ff = FF(d, f, p); self.drop = nn.Dropout(p)
|
| 37 |
+
|
| 38 |
+
def forward(self, x, mask):
|
| 39 |
+
y = self.ln1(x)
|
| 40 |
+
x = x + self.drop(self.att(y, y, mask))
|
| 41 |
+
return x + self.drop(self.ff(self.ln2(x)))
|
| 42 |
+
|
| 43 |
+
|
| 44 |
+
class DecLayer(nn.Module):
|
| 45 |
+
def __init__(self, d, h, f, p):
|
| 46 |
+
super().__init__()
|
| 47 |
+
self.ln1 = nn.LayerNorm(d); self.self_att = MHA(d, h)
|
| 48 |
+
self.ln2 = nn.LayerNorm(d); self.cross = MHA(d, h)
|
| 49 |
+
self.ln3 = nn.LayerNorm(d); self.ff = FF(d, f, p); self.drop = nn.Dropout(p)
|
| 50 |
+
|
| 51 |
+
def forward(self, x, mem, self_mask, cross_mask):
|
| 52 |
+
y = self.ln1(x)
|
| 53 |
+
x = x + self.drop(self.self_att(y, y, self_mask))
|
| 54 |
+
x = x + self.drop(self.cross(self.ln2(x), mem, cross_mask))
|
| 55 |
+
return x + self.drop(self.ff(self.ln3(x)))
|
| 56 |
+
|
| 57 |
+
|
| 58 |
+
class Seq2Seq(nn.Module):
|
| 59 |
+
def __init__(self, n_in, n_out, d=192, h=4, f=512, n_enc=4, n_dec=2, max_in=96, max_out=64, p=0.1):
|
| 60 |
+
super().__init__()
|
| 61 |
+
self.cfg = dict(n_in=n_in, n_out=n_out, d=d, h=h, f=f, n_enc=n_enc, n_dec=n_dec, max_in=max_in, max_out=max_out, p=p)
|
| 62 |
+
self.in_emb = nn.Embedding(n_in, d); self.in_pos = nn.Embedding(max_in, d)
|
| 63 |
+
self.out_emb = nn.Embedding(n_out, d); self.out_pos = nn.Embedding(max_out, d)
|
| 64 |
+
self.enc = nn.ModuleList([EncLayer(d, h, f, p) for _ in range(n_enc)])
|
| 65 |
+
self.dec = nn.ModuleList([DecLayer(d, h, f, p) for _ in range(n_dec)])
|
| 66 |
+
self.enc_ln = nn.LayerNorm(d); self.dec_ln = nn.LayerNorm(d)
|
| 67 |
+
self.drop = nn.Dropout(p)
|
| 68 |
+
self.scale = math.sqrt(d)
|
| 69 |
+
for m in self.modules():
|
| 70 |
+
if isinstance(m, nn.Linear):
|
| 71 |
+
nn.init.normal_(m.weight, std=0.02); nn.init.zeros_(m.bias)
|
| 72 |
+
elif isinstance(m, nn.Embedding):
|
| 73 |
+
nn.init.normal_(m.weight, std=0.02)
|
| 74 |
+
|
| 75 |
+
def encode(self, src):
|
| 76 |
+
B, S = src.shape
|
| 77 |
+
pad = (src == 0)
|
| 78 |
+
mask = (~pad)[:, None, None, :] # True = attend
|
| 79 |
+
x = self.drop(self.in_emb(src) + self.in_pos(torch.arange(S, device=src.device)))
|
| 80 |
+
for l in self.enc:
|
| 81 |
+
x = l(x, mask)
|
| 82 |
+
return self.enc_ln(x), mask
|
| 83 |
+
|
| 84 |
+
def decode(self, tgt, mem, mem_mask):
|
| 85 |
+
B, T = tgt.shape
|
| 86 |
+
causal = torch.ones(T, T, dtype=torch.bool, device=tgt.device).tril()[None, None]
|
| 87 |
+
x = self.drop(self.out_emb(tgt) + self.out_pos(torch.arange(T, device=tgt.device)))
|
| 88 |
+
for l in self.dec:
|
| 89 |
+
x = l(x, mem, causal, mem_mask)
|
| 90 |
+
x = self.dec_ln(x)
|
| 91 |
+
return x @ self.out_emb.weight.t() # tied output projection
|
| 92 |
+
|
| 93 |
+
def forward(self, src, tgt_in):
|
| 94 |
+
mem, mm = self.encode(src)
|
| 95 |
+
return self.decode(tgt_in, mem, mm)
|
| 96 |
+
|
| 97 |
+
|
| 98 |
+
def n_params(m):
|
| 99 |
+
return sum(p.numel() for p in m.parameters())
|
quickstart.py
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""Parse commands and show what the sample executor would run. Nothing is executed.
|
| 2 |
+
python quickstart.py "volume 40 kar do" "connect to wifi Redmi Note 12 password hello@123"
|
| 3 |
+
python quickstart.py # interactive
|
| 4 |
+
"""
|
| 5 |
+
import json, os, platform, sys
|
| 6 |
+
# small matrices: a few BLAS threads are much faster than one per core (see eval/BENCHMARK.md). Must be set before numpy loads.
|
| 7 |
+
_threads = "2" if platform.machine().lower() in ("aarch64", "arm64") else "4"
|
| 8 |
+
os.environ.setdefault("OPENBLAS_NUM_THREADS", _threads); os.environ.setdefault("OMP_NUM_THREADS", _threads)
|
| 9 |
+
HERE = os.path.dirname(os.path.abspath(__file__))
|
| 10 |
+
sys.path.insert(0, os.path.join(HERE, "model")); sys.path.insert(0, os.path.join(HERE, "executor"))
|
| 11 |
+
from runtime import CommandModel # noqa: E402
|
| 12 |
+
import executor as EX # noqa: E402
|
| 13 |
+
|
| 14 |
+
model = CommandModel(os.path.join(HERE, "model"))
|
| 15 |
+
|
| 16 |
+
def show(text):
|
| 17 |
+
out = model.predict(text); meta = out.pop("_meta")
|
| 18 |
+
plan = EX.plan(out, None, text) # None = this machine's platform; text lets it ask about bare GPIO pins
|
| 19 |
+
print(json.dumps({"text": text, "command": out, "confidence": meta["confidence"], "latency_ms": meta["latency_ms"],
|
| 20 |
+
"risk": plan.risk, "plan": plan.action, "would_run": plan.command or plan.note}, ensure_ascii=False, indent=1))
|
| 21 |
+
|
| 22 |
+
if len(sys.argv) > 1:
|
| 23 |
+
for t in sys.argv[1:]: show(t)
|
| 24 |
+
else:
|
| 25 |
+
print("type a command (empty line to quit)")
|
| 26 |
+
while True:
|
| 27 |
+
t = input("> ").strip()
|
| 28 |
+
if not t: break
|
| 29 |
+
show(t)
|
requirements.txt
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
numpy>=1.24
|
| 2 |
+
fastapi>=0.100
|
| 3 |
+
uvicorn>=0.23
|
| 4 |
+
pydantic>=2
|
run.bat
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
@echo off
|
| 2 |
+
rem Start the test UI on Windows. Usage: run.bat [port] | run.bat cli | run.bat report | run.bat test [--full] | run.bat install <trained.zip>
|
| 3 |
+
cd /d "%~dp0"
|
| 4 |
+
set PORT=%1
|
| 5 |
+
if "%PORT%"=="" set PORT=8000
|
| 6 |
+
if not exist .venv ( python -m venv .venv || ( echo Python 3.9+ required: https://python.org & pause & exit /b 1 ) )
|
| 7 |
+
call .venv\Scripts\activate.bat
|
| 8 |
+
python -c "import numpy,fastapi,uvicorn" 2>nul || pip install -q -r requirements.txt
|
| 9 |
+
if "%1"=="cli" ( python ui\cli.py & exit /b )
|
| 10 |
+
if "%1"=="report" ( python eval\make_report.py & exit /b )
|
| 11 |
+
if "%1"=="test" ( python eval\smoke_test.py %2 & exit /b )
|
| 12 |
+
if "%1"=="install" ( python tools\install_model.py "%~2" & exit /b )
|
| 13 |
+
echo Union Command Agent UI -^> http://localhost:%PORT% (Ctrl+C to stop)
|
| 14 |
+
start "" http://localhost:%PORT%
|
| 15 |
+
set PORT=%PORT%
|
| 16 |
+
python ui\app.py
|
run.sh
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/usr/bin/env bash
|
| 2 |
+
# Start the test UI (Linux / Raspberry Pi / macOS). Usage: ./run.sh [port] | ./run.sh cli | ./run.sh report | ./run.sh test [--full] | ./run.sh install <trained.zip>
|
| 3 |
+
cd "$(dirname "$0")"
|
| 4 |
+
PORT="${1:-8000}"
|
| 5 |
+
if [ ! -d .venv ]; then python3 -m venv .venv || { echo "python3-venv missing: sudo apt install python3-venv"; exit 1; }; fi
|
| 6 |
+
. .venv/bin/activate
|
| 7 |
+
python -c "import numpy,fastapi,uvicorn" 2>/dev/null || pip install -q -r requirements.txt
|
| 8 |
+
if [ "$1" = "cli" ]; then python ui/cli.py; exit; fi
|
| 9 |
+
if [ "$1" = "report" ]; then python eval/make_report.py; exit; fi
|
| 10 |
+
if [ "$1" = "test" ]; then python eval/smoke_test.py $2; exit; fi
|
| 11 |
+
if [ "$1" = "install" ]; then python tools/install_model.py "$2"; exit; fi
|
| 12 |
+
echo "Union Command Agent UI -> http://localhost:$PORT (Ctrl+C to stop)"
|
| 13 |
+
( sleep 2; xdg-open "http://localhost:$PORT" >/dev/null 2>&1 || true ) &
|
| 14 |
+
PORT=$PORT python ui/app.py
|
tools/install_model.py
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""Install a model trained on Colab into this agent.
|
| 2 |
+
python tools/install_model.py path/to/union-agent-trained.zip
|
| 3 |
+
- backs up the current model/ to model_backup_<timestamp>/
|
| 4 |
+
- copies model.npz + config.json from the zip's export/ into model/ (runtime code in model/ is kept)
|
| 5 |
+
- copies the zip's eval summary to eval/model_eval_summary.json (used by the report) and train log to training/
|
| 6 |
+
- runs a quick load + 3-prompt sanity check
|
| 7 |
+
Roll back: delete model/ and rename the backup folder to model/.
|
| 8 |
+
"""
|
| 9 |
+
import json, os, shutil, sys, time, zipfile
|
| 10 |
+
HERE = os.path.dirname(os.path.abspath(__file__)); ROOT = os.path.dirname(HERE)
|
| 11 |
+
|
| 12 |
+
def main(zpath):
|
| 13 |
+
if not os.path.exists(zpath): sys.exit(f"not found: {zpath}")
|
| 14 |
+
z = zipfile.ZipFile(zpath)
|
| 15 |
+
names = z.namelist()
|
| 16 |
+
def find(suffix):
|
| 17 |
+
c = [n for n in names if n.endswith(suffix) and "__MACOSX" not in n]
|
| 18 |
+
return min(c, key=len) if c else None
|
| 19 |
+
npz, cfg, summ, log = find("model.npz"), find("config.json"), find("eval/summary.json"), find("train_log.jsonl")
|
| 20 |
+
if not npz or not cfg: sys.exit("zip has no model.npz/config.json (expected the export/ folder from the Colab notebook)")
|
| 21 |
+
cfg_new = json.loads(z.read(cfg))
|
| 22 |
+
need = {"n_in", "n_out", "d", "h", "f", "n_enc", "n_dec", "max_in", "max_out"}
|
| 23 |
+
if not need <= set(cfg_new): sys.exit(f"{cfg} is not a model config (missing {need - set(cfg_new)})")
|
| 24 |
+
cur_cfg = json.load(open(os.path.join(ROOT, "model", "config.json")))
|
| 25 |
+
if (cfg_new["n_in"], cfg_new["n_out"]) != (cur_cfg["n_in"], cur_cfg["n_out"]):
|
| 26 |
+
sys.exit(f"vocab mismatch: new model n_in/n_out {cfg_new['n_in']}/{cfg_new['n_out']} vs agent {cur_cfg['n_in']}/{cur_cfg['n_out']} "
|
| 27 |
+
"(model trained with a different tokenizer/catalog; copy the whole export/ folder over model/ instead)")
|
| 28 |
+
bak = os.path.join(ROOT, "model_backup_" + time.strftime("%Y%m%d_%H%M%S"))
|
| 29 |
+
shutil.copytree(os.path.join(ROOT, "model"), bak, ignore=shutil.ignore_patterns("__pycache__"))
|
| 30 |
+
open(os.path.join(ROOT, "model", "model.npz"), "wb").write(z.read(npz))
|
| 31 |
+
json.dump({k: cfg_new[k] for k in need}, open(os.path.join(ROOT, "model", "config.json"), "w"), indent=1)
|
| 32 |
+
if summ: open(os.path.join(ROOT, "eval", "model_eval_summary.json"), "wb").write(z.read(summ))
|
| 33 |
+
if log: open(os.path.join(ROOT, "training", "train_log_colab.jsonl"), "wb").write(z.read(log))
|
| 34 |
+
print(f"installed {npz} (d={cfg_new['d']}, enc={cfg_new['n_enc']}, dec={cfg_new['n_dec']}); previous model backed up to {os.path.basename(bak)}")
|
| 35 |
+
sys.path.insert(0, os.path.join(ROOT, "model"))
|
| 36 |
+
from runtime import CommandModel
|
| 37 |
+
m = CommandModel(os.path.join(ROOT, "model"))
|
| 38 |
+
print("params:", sum(v.size for v in m.W.values()))
|
| 39 |
+
for p in ("awaaz pachaas pe rakh do", "wifi Airtel_5G se connect karo password Wifi@2024", "board pin 11 pe led jalao"):
|
| 40 |
+
o = m.predict(p); print(" ", p, "->", {k: v for k, v in o.items() if k != "_meta"})
|
| 41 |
+
if summ:
|
| 42 |
+
s = json.loads(z.read(summ))
|
| 43 |
+
for k in ("val", "test_strict", "curated", "wifi_holdout"):
|
| 44 |
+
if k in s: print(f" {k:14s} exact {s[k]['exact']*100:.2f}% action {s[k]['action']*100:.2f}%")
|
| 45 |
+
print("next: ./run.sh test and ./run.sh report (Windows: run.bat test / run.bat report)")
|
| 46 |
+
|
| 47 |
+
if __name__ == "__main__":
|
| 48 |
+
if len(sys.argv) != 2: sys.exit(__doc__)
|
| 49 |
+
main(sys.argv[1])
|
ui/app.py
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""Test UI + API for the union command agent. python ui/app.py -> http://localhost:8000
|
| 2 |
+
Model (numpy runtime) -> executor plan (dry-run by default) -> optional execution with risk gating."""
|
| 3 |
+
import json, os, sys, platform as _pf
|
| 4 |
+
HERE = os.path.dirname(os.path.abspath(__file__)); ROOT = os.path.dirname(HERE)
|
| 5 |
+
sys.path.insert(0, os.path.join(ROOT, "model")); sys.path.insert(0, os.path.join(ROOT, "executor"))
|
| 6 |
+
from fastapi import FastAPI # noqa
|
| 7 |
+
from fastapi.responses import HTMLResponse, JSONResponse # noqa
|
| 8 |
+
from pydantic import BaseModel # noqa
|
| 9 |
+
from runtime import CommandModel # noqa
|
| 10 |
+
import executor as EX # noqa
|
| 11 |
+
|
| 12 |
+
MODEL = CommandModel(os.path.join(ROOT, "model"))
|
| 13 |
+
CAT = EX.CATALOG
|
| 14 |
+
app = FastAPI(title="union command agent")
|
| 15 |
+
|
| 16 |
+
class Req(BaseModel):
|
| 17 |
+
text: str; platform: str = "auto"; execute: bool = False; allow_caution: bool = False; confirm: str = ""
|
| 18 |
+
class Batch(BaseModel):
|
| 19 |
+
texts: list; platform: str = "auto"
|
| 20 |
+
|
| 21 |
+
def _plat(p): return EX.platform_name() if p in ("auto", "", None) else ("win" if p.startswith("win") else "pi")
|
| 22 |
+
|
| 23 |
+
def handle(text, platform="auto", execute=False, allow_caution=False, confirm=""):
|
| 24 |
+
plat = _plat(platform); out = MODEL.predict(text); cmd = {k: v for k, v in out.items() if k != "_meta"}
|
| 25 |
+
p = EX.plan(cmd, plat, text); ok, why = EX.gate(p, allow_caution, confirm or None)
|
| 26 |
+
res = {"text": text, "platform": plat, "model": cmd, "meta": out["_meta"], "plan": p.to_dict(), "gate": {"ok": ok, "reason": why}, "spec": CAT.get(cmd["action"], {}), "run": None}
|
| 27 |
+
if execute:
|
| 28 |
+
res["run"] = EX.run(p, cmd, dry_run=False) if ok else {"status": "blocked", "output": why, "command": p.command}
|
| 29 |
+
return res
|
| 30 |
+
|
| 31 |
+
@app.get("/", response_class=HTMLResponse)
|
| 32 |
+
def index(): return open(os.path.join(HERE, "static", "index.html"), encoding="utf-8").read()
|
| 33 |
+
@app.get("/api/info")
|
| 34 |
+
def info(): return {"actions": len(CAT), "host": _pf.node(), "os": _pf.system(), "platform": EX.platform_name(), "model_params": int(sum(v.size for v in MODEL.W.values()))}
|
| 35 |
+
@app.get("/api/prompts")
|
| 36 |
+
def prompts(): return json.load(open(os.path.join(HERE, "prompts.json"), encoding="utf-8"))
|
| 37 |
+
@app.get("/api/catalog")
|
| 38 |
+
def catalog(): return CAT
|
| 39 |
+
@app.post("/api/predict")
|
| 40 |
+
def predict(r: Req): return handle(r.text, r.platform, r.execute, r.allow_caution, r.confirm)
|
| 41 |
+
@app.post("/api/batch")
|
| 42 |
+
def batch(b: Batch): return [handle(t, b.platform) for t in b.texts if t.strip()]
|
| 43 |
+
|
| 44 |
+
if __name__ == "__main__":
|
| 45 |
+
import uvicorn
|
| 46 |
+
uvicorn.run(app, host="127.0.0.1", port=int(os.environ.get("PORT", 8000)))
|
ui/cli.py
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""Terminal agent: type a command, see the parse + plan, confirm to execute."""
|
| 2 |
+
import os, sys, json
|
| 3 |
+
ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
| 4 |
+
sys.path.insert(0, os.path.join(ROOT, "model")); sys.path.insert(0, os.path.join(ROOT, "executor"))
|
| 5 |
+
from runtime import CommandModel; import executor as EX
|
| 6 |
+
m = CommandModel(os.path.join(ROOT, "model")); print(f"union command agent · {len(EX.CATALOG)} actions · platform {EX.platform_name()} · type 'quit' to exit")
|
| 7 |
+
while True:
|
| 8 |
+
try: t = input("\n> ").strip()
|
| 9 |
+
except (EOFError, KeyboardInterrupt): break
|
| 10 |
+
if not t or t in ("quit", "exit"): break
|
| 11 |
+
out = m.predict(t); cmd = {k: v for k, v in out.items() if k != "_meta"}; p = EX.plan(cmd, None, t)
|
| 12 |
+
print(json.dumps(cmd, ensure_ascii=False), f"(conf {out['_meta']['confidence']:.2f}, risk {p.risk})")
|
| 13 |
+
if not p.supported: print(" ", p.note); continue
|
| 14 |
+
print(f" [{p.kind}] {p.command}")
|
| 15 |
+
if p.kind == "py" and p.action in ("unknown", "clarify"): print(" ", EX.run(p, cmd, dry_run=False)["output"]); continue
|
| 16 |
+
conf = input(f" run it? (y / type '{p.action}' if critical / n) ").strip()
|
| 17 |
+
ok, why = EX.gate(p, allow_caution=conf.lower() == "y", confirm_text=conf)
|
| 18 |
+
if not ok and conf.lower() != "y": print(" ", why); continue
|
| 19 |
+
r = EX.run(p, cmd, dry_run=False); print(f" {r['status']}: {r['output'][:600]}")
|
ui/prompts.json
ADDED
|
@@ -0,0 +1,2306 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"examples": [
|
| 3 |
+
"volume level 60!",
|
| 4 |
+
"bhaiya vloume badhao please",
|
| 5 |
+
"i have a meeting so silent mode chalu karo!!",
|
| 6 |
+
"please brightness please 49 kar dena na",
|
| 7 |
+
"yaar turn on blue light filter",
|
| 8 |
+
"switch to darkmode thank you",
|
| 9 |
+
"hey turn off the mera computer?",
|
| 10 |
+
"machine dobara chalu karo",
|
| 11 |
+
"zara please abort the scheduled shutdown abhi",
|
| 12 |
+
"bhai ab screen ko lock kar dena abhi",
|
| 13 |
+
"laptop sleep thank you",
|
| 14 |
+
"zara ab wireless ko chalu kar dena abhi",
|
| 15 |
+
"hey pi ACT-Fibernet wifi pe swiitch karo",
|
| 16 |
+
"hotspot on kar do plz",
|
| 17 |
+
"aas paas ke wf dikhao",
|
| 18 |
+
"what is my ip address.",
|
| 19 |
+
"laptop what ip does the internet see",
|
| 20 |
+
"hey computer please ping the host raspberrypi.local kar sakte ho",
|
| 21 |
+
"mbps kitna aa raha hai jaldi",
|
| 22 |
+
"please pair my airpods turant",
|
| 23 |
+
"kindly please launch the task manager window na",
|
| 24 |
+
"edge close, baccha ro raha hai",
|
| 25 |
+
"claude site le aao",
|
| 26 |
+
"internet pe lata mangeshkar search kr do turant",
|
| 27 |
+
"hi youtube pe horror example where shaam dikhao",
|
| 28 |
+
"zomato open karke , cred design_ritu/Star#999 se sign in kar do",
|
| 29 |
+
"new tab in browser abhi",
|
| 30 |
+
"i am done for today toh dictate dear sir?",
|
| 31 |
+
"screenshot kr de main so raha hoon",
|
| 32 |
+
"download launch karo",
|
| 33 |
+
"hey computer \"demo/report17.txt\" wala folder bana dena thanks",
|
| 34 |
+
"kindly \"demo/report0.txt\" file ke andar ka text bata dena please",
|
| 35 |
+
"boss make a copy of \"bill march.py\" at videos/old/photo.csv",
|
| 36 |
+
"\"pm kisan_backup\" remove kar",
|
| 37 |
+
"look for file bhav dutskusskan garmi on my computer abhi ke abhi",
|
| 38 |
+
"make a zip of project backup",
|
| 39 |
+
"zara tell me the installed operating system version zara",
|
| 40 |
+
"could you pi ki chip abhi kitni garam hai zara",
|
| 41 |
+
"what is the throttled",
|
| 42 |
+
"guest aaye hain cpu load usage kitna hai",
|
| 43 |
+
"free ram pls",
|
| 44 |
+
"zara tell me available disk storage",
|
| 45 |
+
"HEY COMPUTER PLEASE SHOW CONNECTED USB DEVICES NA",
|
| 46 |
+
"please system ki running process list bata dena for me",
|
| 47 |
+
"zara please end the running process id 7673 na",
|
| 48 |
+
"kindly \"ssh\" service ki current state bata dena thanks",
|
| 49 |
+
"jaldi se docker daemon restart karo pls",
|
| 50 |
+
"python3-pip install karo for me",
|
| 51 |
+
"any new update...",
|
| 52 |
+
"meeting shuru hone wali hai toh kaunse container chal rahe hain",
|
| 53 |
+
"terminal me df -h chalao, call pe hoon",
|
| 54 |
+
"mere liye please set gpio pin 27 to high for me",
|
| 55 |
+
"bhaiya gpio pin 26 low karo",
|
| 56 |
+
"bhai please read the value of gpio pin 27 zara",
|
| 57 |
+
"23 number pin pe pwm eighty percent kar do",
|
| 58 |
+
"sero 24 number pin ajgle 180 jaldi se",
|
| 59 |
+
"pin number 36 ki heater ko 3 baar jhapkao",
|
| 60 |
+
"log edges on gpio 26 jaldi se",
|
| 61 |
+
"hey laptop the pump on 40-pin header pin 32 does not turj on",
|
| 62 |
+
"gpio 4 ko pullup kro yaar",
|
| 63 |
+
"what is the bcm number of pin 31 jaldi se",
|
| 64 |
+
"suno miso kaoon sa pin hai",
|
| 65 |
+
"computer i2c bus scan krdo turant",
|
| 66 |
+
"could you please i2cget 0x76 0x10, battery bachani hai",
|
| 67 |
+
"plz start timr chhaalis minat",
|
| 68 |
+
"raat ho gayi hai toh alarm at 3:15am",
|
| 69 |
+
"can you 253 secs baad call mom ka reminder lagana",
|
| 70 |
+
"3.5 times 4 calculate kzro",
|
| 71 |
+
"client ko bolo slack pe ki happy birthday bhai",
|
| 72 |
+
"ek kaam karo send team.lead@neurealm.com an email saying 5 min me aata hoon",
|
| 73 |
+
"kal dopahar 1 baje doctor visit ka event banao",
|
| 74 |
+
"show me what you can do main so raha hoon",
|
| 75 |
+
"please order groceries online kar sakte ho",
|
| 76 |
+
"run a cotnainer"
|
| 77 |
+
],
|
| 78 |
+
"all_activities": [
|
| 79 |
+
{
|
| 80 |
+
"prompt": "mujhe kaam karna hai so the usb drive ko boot pe mount krdo",
|
| 81 |
+
"action": "add_persistent_mount",
|
| 82 |
+
"device": "both",
|
| 83 |
+
"risk": "caution"
|
| 84 |
+
},
|
| 85 |
+
{
|
| 86 |
+
"prompt": "flight mde disable",
|
| 87 |
+
"action": "airplane_mode_off",
|
| 88 |
+
"device": "both",
|
| 89 |
+
"risk": "safe"
|
| 90 |
+
},
|
| 91 |
+
{
|
| 92 |
+
"prompt": "jara aeroplane mode mein daal do",
|
| 93 |
+
"action": "airplane_mode_on",
|
| 94 |
+
"device": "both",
|
| 95 |
+
"risk": "caution"
|
| 96 |
+
},
|
| 97 |
+
{
|
| 98 |
+
"prompt": "laptop scan karo virus ke liye...",
|
| 99 |
+
"action": "antivirus_scan",
|
| 100 |
+
"device": "both",
|
| 101 |
+
"risk": "caution"
|
| 102 |
+
},
|
| 103 |
+
{
|
| 104 |
+
"prompt": "mummy bula rahi hai toh reattach to build",
|
| 105 |
+
"action": "attach_session",
|
| 106 |
+
"device": "both",
|
| 107 |
+
"risk": "safe"
|
| 108 |
+
},
|
| 109 |
+
{
|
| 110 |
+
"prompt": "create a disk image of nvme0n1 quickly",
|
| 111 |
+
"action": "backup_disk_image",
|
| 112 |
+
"device": "both",
|
| 113 |
+
"risk": "critical"
|
| 114 |
+
},
|
| 115 |
+
{
|
| 116 |
+
"prompt": "battery saver hatao, call pe hoon",
|
| 117 |
+
"action": "battery_saver_off",
|
| 118 |
+
"device": "both",
|
| 119 |
+
"risk": "safe"
|
| 120 |
+
},
|
| 121 |
+
{
|
| 122 |
+
"prompt": "bhai battery saver mode start karna",
|
| 123 |
+
"action": "battery_saver_on",
|
| 124 |
+
"device": "both",
|
| 125 |
+
"risk": "safe"
|
| 126 |
+
},
|
| 127 |
+
{
|
| 128 |
+
"prompt": "bcm 11 physical pin kaun sa hai",
|
| 129 |
+
"action": "bcm_to_board",
|
| 130 |
+
"device": "pi",
|
| 131 |
+
"risk": "safe"
|
| 132 |
+
},
|
| 133 |
+
{
|
| 134 |
+
"prompt": "please pair my airpods turant",
|
| 135 |
+
"action": "bluetooth_connect",
|
| 136 |
+
"device": "both",
|
| 137 |
+
"risk": "safe"
|
| 138 |
+
},
|
| 139 |
+
{
|
| 140 |
+
"prompt": "zara ab bluetooth band kar dena abhi",
|
| 141 |
+
"action": "bluetooth_off",
|
| 142 |
+
"device": "both",
|
| 143 |
+
"risk": "caution"
|
| 144 |
+
},
|
| 145 |
+
{
|
| 146 |
+
"prompt": "bluetooth connection chalu kro yaar",
|
| 147 |
+
"action": "bluetooth_on",
|
| 148 |
+
"device": "both",
|
| 149 |
+
"risk": "caution"
|
| 150 |
+
},
|
| 151 |
+
{
|
| 152 |
+
"prompt": "what is the bcm number of pin 31 jaldi se",
|
| 153 |
+
"action": "board_to_bcm",
|
| 154 |
+
"device": "pi",
|
| 155 |
+
"risk": "safe"
|
| 156 |
+
},
|
| 157 |
+
{
|
| 158 |
+
"prompt": "please jaldi is page ko bookmark kar do please",
|
| 159 |
+
"action": "bookmark_page",
|
| 160 |
+
"device": "both",
|
| 161 |
+
"risk": "safe"
|
| 162 |
+
},
|
| 163 |
+
{
|
| 164 |
+
"prompt": "screen dim karo kaam ho gaya",
|
| 165 |
+
"action": "brightness_down",
|
| 166 |
+
"device": "both",
|
| 167 |
+
"risk": "safe"
|
| 168 |
+
},
|
| 169 |
+
{
|
| 170 |
+
"prompt": "inc roshni a little",
|
| 171 |
+
"action": "brightness_up",
|
| 172 |
+
"device": "both",
|
| 173 |
+
"risk": "safe"
|
| 174 |
+
},
|
| 175 |
+
{
|
| 176 |
+
"prompt": "back in the browser, neend aa rahi hai",
|
| 177 |
+
"action": "browser_back",
|
| 178 |
+
"device": "both",
|
| 179 |
+
"risk": "safe"
|
| 180 |
+
},
|
| 181 |
+
{
|
| 182 |
+
"prompt": "agle in the browser",
|
| 183 |
+
"action": "browser_forward",
|
| 184 |
+
"device": "both",
|
| 185 |
+
"risk": "safe"
|
| 186 |
+
},
|
| 187 |
+
{
|
| 188 |
+
"prompt": "ek kaam karo kick off cmake build in ~/models",
|
| 189 |
+
"action": "build_project",
|
| 190 |
+
"device": "both",
|
| 191 |
+
"risk": "caution"
|
| 192 |
+
},
|
| 193 |
+
{
|
| 194 |
+
"prompt": "3.5 times 4 calculate kzro",
|
| 195 |
+
"action": "calculate",
|
| 196 |
+
"device": "both",
|
| 197 |
+
"risk": "safe"
|
| 198 |
+
},
|
| 199 |
+
{
|
| 200 |
+
"prompt": "capture a image because baccha ro raha hai",
|
| 201 |
+
"action": "camera_photo",
|
| 202 |
+
"device": "both",
|
| 203 |
+
"risk": "safe"
|
| 204 |
+
},
|
| 205 |
+
{
|
| 206 |
+
"prompt": "bhaiya camera se 209 min video record karna",
|
| 207 |
+
"action": "camera_video",
|
| 208 |
+
"device": "pi",
|
| 209 |
+
"risk": "safe"
|
| 210 |
+
},
|
| 211 |
+
{
|
| 212 |
+
"prompt": "please jaldi alarm off kar do quickly",
|
| 213 |
+
"action": "cancel_alarm",
|
| 214 |
+
"device": "both",
|
| 215 |
+
"risk": "safe"
|
| 216 |
+
},
|
| 217 |
+
{
|
| 218 |
+
"prompt": "zara please abort the scheduled shutdown abhi",
|
| 219 |
+
"action": "cancel_shutdown",
|
| 220 |
+
"device": "both",
|
| 221 |
+
"risk": "caution"
|
| 222 |
+
},
|
| 223 |
+
{
|
| 224 |
+
"prompt": "main bahar ja raha hoon, timer cancel karo zara",
|
| 225 |
+
"action": "cancel_timer",
|
| 226 |
+
"device": "both",
|
| 227 |
+
"risk": "safe"
|
| 228 |
+
},
|
| 229 |
+
{
|
| 230 |
+
"prompt": "hello ai hat dikha",
|
| 231 |
+
"action": "check_ai_accelerator",
|
| 232 |
+
"device": "pi",
|
| 233 |
+
"risk": "safe"
|
| 234 |
+
},
|
| 235 |
+
{
|
| 236 |
+
"prompt": "ek kaam karo mmcblk0 pe fsck run karo",
|
| 237 |
+
"action": "check_filesystem",
|
| 238 |
+
"device": "both",
|
| 239 |
+
"risk": "critical"
|
| 240 |
+
},
|
| 241 |
+
{
|
| 242 |
+
"prompt": "call aane wala hai, 8.8.8.8 ka port 22 check kar dena na",
|
| 243 |
+
"action": "check_port",
|
| 244 |
+
"device": "both",
|
| 245 |
+
"risk": "safe"
|
| 246 |
+
},
|
| 247 |
+
{
|
| 248 |
+
"prompt": "any new update...",
|
| 249 |
+
"action": "check_updates",
|
| 250 |
+
"device": "both",
|
| 251 |
+
"risk": "safe"
|
| 252 |
+
},
|
| 253 |
+
{
|
| 254 |
+
"prompt": "run a cotnainer",
|
| 255 |
+
"action": "clarify",
|
| 256 |
+
"device": "both",
|
| 257 |
+
"risk": "safe"
|
| 258 |
+
},
|
| 259 |
+
{
|
| 260 |
+
"prompt": "jaldi se notifications saaf kar asap",
|
| 261 |
+
"action": "clear_notifications",
|
| 262 |
+
"device": "both",
|
| 263 |
+
"risk": "safe"
|
| 264 |
+
},
|
| 265 |
+
{
|
| 266 |
+
"prompt": "can you wipe cache files",
|
| 267 |
+
"action": "clear_temp_files",
|
| 268 |
+
"device": "both",
|
| 269 |
+
"risk": "critical"
|
| 270 |
+
},
|
| 271 |
+
{
|
| 272 |
+
"prompt": "give me copied items abhi ke abhi",
|
| 273 |
+
"action": "clipboard_history",
|
| 274 |
+
"device": "both",
|
| 275 |
+
"risk": "safe"
|
| 276 |
+
},
|
| 277 |
+
{
|
| 278 |
+
"prompt": "sd card ko sda1 pe clone krdo",
|
| 279 |
+
"action": "clone_disk",
|
| 280 |
+
"device": "both",
|
| 281 |
+
"risk": "critical"
|
| 282 |
+
},
|
| 283 |
+
{
|
| 284 |
+
"prompt": "edge close, baccha ro raha hai",
|
| 285 |
+
"action": "close_app",
|
| 286 |
+
"device": "both",
|
| 287 |
+
"risk": "caution"
|
| 288 |
+
},
|
| 289 |
+
{
|
| 290 |
+
"prompt": "ok google close this tab",
|
| 291 |
+
"action": "close_tab",
|
| 292 |
+
"device": "both",
|
| 293 |
+
"risk": "safe"
|
| 294 |
+
},
|
| 295 |
+
{
|
| 296 |
+
"prompt": "ek kaam karo close this",
|
| 297 |
+
"action": "close_window",
|
| 298 |
+
"device": "both",
|
| 299 |
+
"risk": "caution"
|
| 300 |
+
},
|
| 301 |
+
{
|
| 302 |
+
"prompt": "make a zip of project backup",
|
| 303 |
+
"action": "compress_file",
|
| 304 |
+
"device": "both",
|
| 305 |
+
"risk": "safe"
|
| 306 |
+
},
|
| 307 |
+
{
|
| 308 |
+
"prompt": "hey pi ACT-Fibernet wifi pe swiitch karo",
|
| 309 |
+
"action": "connect_wifi",
|
| 310 |
+
"device": "both",
|
| 311 |
+
"risk": "caution"
|
| 312 |
+
},
|
| 313 |
+
{
|
| 314 |
+
"prompt": "test.wav ko flac me convert kar do plz",
|
| 315 |
+
"action": "convert_media",
|
| 316 |
+
"device": "both",
|
| 317 |
+
"risk": "caution"
|
| 318 |
+
},
|
| 319 |
+
{
|
| 320 |
+
"prompt": "copy selected text jaldi se",
|
| 321 |
+
"action": "copy",
|
| 322 |
+
"device": "both",
|
| 323 |
+
"risk": "safe"
|
| 324 |
+
},
|
| 325 |
+
{
|
| 326 |
+
"prompt": "boss make a copy of \"bill march.py\" at videos/old/photo.csv",
|
| 327 |
+
"action": "copy_file",
|
| 328 |
+
"device": "both",
|
| 329 |
+
"risk": "caution"
|
| 330 |
+
},
|
| 331 |
+
{
|
| 332 |
+
"prompt": "mere liye 192.168.0.10 ke liye key auth setup karo",
|
| 333 |
+
"action": "copy_ssh_key",
|
| 334 |
+
"device": "both",
|
| 335 |
+
"risk": "caution"
|
| 336 |
+
},
|
| 337 |
+
{
|
| 338 |
+
"prompt": "kal dopahar 1 baje doctor visit ka event banao",
|
| 339 |
+
"action": "create_calendar_event",
|
| 340 |
+
"device": "both",
|
| 341 |
+
"risk": "safe"
|
| 342 |
+
},
|
| 343 |
+
{
|
| 344 |
+
"prompt": "bhaiya new file \"college/old/photo.png\", battery bachani hai",
|
| 345 |
+
"action": "create_file",
|
| 346 |
+
"device": "both",
|
| 347 |
+
"risk": "caution"
|
| 348 |
+
},
|
| 349 |
+
{
|
| 350 |
+
"prompt": "hey computer \"demo/report17.txt\" wala folder bana dena thanks",
|
| 351 |
+
"action": "create_folder",
|
| 352 |
+
"device": "both",
|
| 353 |
+
"risk": "caution"
|
| 354 |
+
},
|
| 355 |
+
{
|
| 356 |
+
"prompt": "make backup start at boot as a service, aankh dukh rahi hai",
|
| 357 |
+
"action": "create_service",
|
| 358 |
+
"device": "both",
|
| 359 |
+
"risk": "critical"
|
| 360 |
+
},
|
| 361 |
+
{
|
| 362 |
+
"prompt": "/opt/app ko /home/pi/start.sh se link krdo",
|
| 363 |
+
"action": "create_symlink",
|
| 364 |
+
"device": "both",
|
| 365 |
+
"risk": "caution"
|
| 366 |
+
},
|
| 367 |
+
{
|
| 368 |
+
"prompt": "~/venv pe virtualenv banao",
|
| 369 |
+
"action": "create_virtualenv",
|
| 370 |
+
"device": "both",
|
| 371 |
+
"risk": "caution"
|
| 372 |
+
},
|
| 373 |
+
{
|
| 374 |
+
"prompt": "please jaldi ctrl x please",
|
| 375 |
+
"action": "cut",
|
| 376 |
+
"device": "both",
|
| 377 |
+
"risk": "safe"
|
| 378 |
+
},
|
| 379 |
+
{
|
| 380 |
+
"prompt": "call aane wala hai so dark mode hatao",
|
| 381 |
+
"action": "dark_mode_off",
|
| 382 |
+
"device": "both",
|
| 383 |
+
"risk": "safe"
|
| 384 |
+
},
|
| 385 |
+
{
|
| 386 |
+
"prompt": "switch to darkmode thank you",
|
| 387 |
+
"action": "dark_mode_on",
|
| 388 |
+
"device": "both",
|
| 389 |
+
"risk": "safe"
|
| 390 |
+
},
|
| 391 |
+
{
|
| 392 |
+
"prompt": "\"pm kisan_backup\" remove kar",
|
| 393 |
+
"action": "delete_file",
|
| 394 |
+
"device": "both",
|
| 395 |
+
"risk": "critical"
|
| 396 |
+
},
|
| 397 |
+
{
|
| 398 |
+
"prompt": "please jaldi disable unattended upgrades",
|
| 399 |
+
"action": "disable_auto_updates",
|
| 400 |
+
"device": "both",
|
| 401 |
+
"risk": "caution"
|
| 402 |
+
},
|
| 403 |
+
{
|
| 404 |
+
"prompt": "local devices discover karna, neend aa rahi hai",
|
| 405 |
+
"action": "discover_devices",
|
| 406 |
+
"device": "both",
|
| 407 |
+
"risk": "safe"
|
| 408 |
+
},
|
| 409 |
+
{
|
| 410 |
+
"prompt": "display duplicate par set karo?",
|
| 411 |
+
"action": "display_mode",
|
| 412 |
+
"device": "both",
|
| 413 |
+
"risk": "safe"
|
| 414 |
+
},
|
| 415 |
+
{
|
| 416 |
+
"prompt": "focus mode band karo right now",
|
| 417 |
+
"action": "dnd_off",
|
| 418 |
+
"device": "both",
|
| 419 |
+
"risk": "safe"
|
| 420 |
+
},
|
| 421 |
+
{
|
| 422 |
+
"prompt": "quiet hours lagao quickly",
|
| 423 |
+
"action": "dnd_on",
|
| 424 |
+
"device": "both",
|
| 425 |
+
"risk": "safe"
|
| 426 |
+
},
|
| 427 |
+
{
|
| 428 |
+
"prompt": "could you please resolve the hostname localhost kar sakte ho",
|
| 429 |
+
"action": "dns_lookup",
|
| 430 |
+
"device": "both",
|
| 431 |
+
"risk": "safe"
|
| 432 |
+
},
|
| 433 |
+
{
|
| 434 |
+
"prompt": "ok google compose stack chalu karo?",
|
| 435 |
+
"action": "docker_compose_up",
|
| 436 |
+
"device": "both",
|
| 437 |
+
"risk": "caution"
|
| 438 |
+
},
|
| 439 |
+
{
|
| 440 |
+
"prompt": "meeting shuru hone wali hai toh kaunse container chal rahe hain",
|
| 441 |
+
"action": "docker_list",
|
| 442 |
+
"device": "both",
|
| 443 |
+
"risk": "safe"
|
| 444 |
+
},
|
| 445 |
+
{
|
| 446 |
+
"prompt": "can you docker space free karna",
|
| 447 |
+
"action": "docker_prune",
|
| 448 |
+
"device": "both",
|
| 449 |
+
"risk": "critical"
|
| 450 |
+
},
|
| 451 |
+
{
|
| 452 |
+
"prompt": "suno grafana ka container start karo",
|
| 453 |
+
"action": "docker_run",
|
| 454 |
+
"device": "both",
|
| 455 |
+
"risk": "caution"
|
| 456 |
+
},
|
| 457 |
+
{
|
| 458 |
+
"prompt": "my-app ko stop kar!",
|
| 459 |
+
"action": "docker_stop",
|
| 460 |
+
"device": "both",
|
| 461 |
+
"risk": "caution"
|
| 462 |
+
},
|
| 463 |
+
{
|
| 464 |
+
"prompt": "computer http://192.168.1.10/firmware.bin download karo right now",
|
| 465 |
+
"action": "download_file",
|
| 466 |
+
"device": "both",
|
| 467 |
+
"risk": "caution"
|
| 468 |
+
},
|
| 469 |
+
{
|
| 470 |
+
"prompt": "hi cached memory free kar dena yaar",
|
| 471 |
+
"action": "drop_caches",
|
| 472 |
+
"device": "both",
|
| 473 |
+
"risk": "critical"
|
| 474 |
+
},
|
| 475 |
+
{
|
| 476 |
+
"prompt": "hi add a line to the boot config",
|
| 477 |
+
"action": "edit_system_config",
|
| 478 |
+
"device": "both",
|
| 479 |
+
"risk": "critical"
|
| 480 |
+
},
|
| 481 |
+
{
|
| 482 |
+
"prompt": "what is emojis thank you",
|
| 483 |
+
"action": "emoji_panel",
|
| 484 |
+
"device": "both",
|
| 485 |
+
"risk": "safe"
|
| 486 |
+
},
|
| 487 |
+
{
|
| 488 |
+
"prompt": "kachra dabba khali kar de for me",
|
| 489 |
+
"action": "empty_recycle_bin",
|
| 490 |
+
"device": "both",
|
| 491 |
+
"risk": "critical"
|
| 492 |
+
},
|
| 493 |
+
{
|
| 494 |
+
"prompt": "install security patches automatically zara",
|
| 495 |
+
"action": "enable_auto_updates",
|
| 496 |
+
"device": "both",
|
| 497 |
+
"risk": "caution"
|
| 498 |
+
},
|
| 499 |
+
{
|
| 500 |
+
"prompt": "movie dekhni hai so make up compressed swap",
|
| 501 |
+
"action": "enable_zram",
|
| 502 |
+
"device": "both",
|
| 503 |
+
"risk": "caution"
|
| 504 |
+
},
|
| 505 |
+
{
|
| 506 |
+
"prompt": "i am done for today toh poora sd card use krdo",
|
| 507 |
+
"action": "expand_filesystem",
|
| 508 |
+
"device": "pi",
|
| 509 |
+
"risk": "critical"
|
| 510 |
+
},
|
| 511 |
+
{
|
| 512 |
+
"prompt": "project.tar.gz ko extract karo asap",
|
| 513 |
+
"action": "extract_archive",
|
| 514 |
+
"device": "both",
|
| 515 |
+
"risk": "safe"
|
| 516 |
+
},
|
| 517 |
+
{
|
| 518 |
+
"prompt": "mere liye please restore factory settings on this computer for me",
|
| 519 |
+
"action": "factory_reset",
|
| 520 |
+
"device": "both",
|
| 521 |
+
"risk": "critical"
|
| 522 |
+
},
|
| 523 |
+
{
|
| 524 |
+
"prompt": "nmap install hai kya pls",
|
| 525 |
+
"action": "find_command",
|
| 526 |
+
"device": "both",
|
| 527 |
+
"risk": "safe"
|
| 528 |
+
},
|
| 529 |
+
{
|
| 530 |
+
"prompt": "mujhe kaam karna hai, find arijit singh songs in the page",
|
| 531 |
+
"action": "find_in_page",
|
| 532 |
+
"device": "both",
|
| 533 |
+
"risk": "safe"
|
| 534 |
+
},
|
| 535 |
+
{
|
| 536 |
+
"prompt": "firewall me port 8000 allow karo for me",
|
| 537 |
+
"action": "firewall_allow",
|
| 538 |
+
"device": "both",
|
| 539 |
+
"risk": "caution"
|
| 540 |
+
},
|
| 541 |
+
{
|
| 542 |
+
"prompt": "plz port 443 rok do firewall me",
|
| 543 |
+
"action": "firewall_deny",
|
| 544 |
+
"device": "both",
|
| 545 |
+
"risk": "critical"
|
| 546 |
+
},
|
| 547 |
+
{
|
| 548 |
+
"prompt": "processor usage usage yaar ki zarurat nahi, firrwal hata do?",
|
| 549 |
+
"action": "firewall_off",
|
| 550 |
+
"device": "both",
|
| 551 |
+
"risk": "critical"
|
| 552 |
+
},
|
| 553 |
+
{
|
| 554 |
+
"prompt": "the firewall turn on thanks",
|
| 555 |
+
"action": "firewall_on",
|
| 556 |
+
"device": "both",
|
| 557 |
+
"risk": "caution"
|
| 558 |
+
},
|
| 559 |
+
{
|
| 560 |
+
"prompt": "system ke firewall ki details bata dena thanks",
|
| 561 |
+
"action": "firewall_status",
|
| 562 |
+
"device": "both",
|
| 563 |
+
"risk": "safe"
|
| 564 |
+
},
|
| 565 |
+
{
|
| 566 |
+
"prompt": "gpio accwss do mere user ko",
|
| 567 |
+
"action": "fix_gpio_permissions",
|
| 568 |
+
"device": "pi",
|
| 569 |
+
"risk": "caution"
|
| 570 |
+
},
|
| 571 |
+
{
|
| 572 |
+
"prompt": "rpi-update start karo bhai",
|
| 573 |
+
"action": "flash_firmware",
|
| 574 |
+
"device": "both",
|
| 575 |
+
"risk": "critical"
|
| 576 |
+
},
|
| 577 |
+
{
|
| 578 |
+
"prompt": "clear dns cache zara",
|
| 579 |
+
"action": "flush_dns",
|
| 580 |
+
"device": "both",
|
| 581 |
+
"risk": "caution"
|
| 582 |
+
},
|
| 583 |
+
{
|
| 584 |
+
"prompt": "online class hai toh forget the network Jio_5G_Home",
|
| 585 |
+
"action": "forget_wifi",
|
| 586 |
+
"device": "both",
|
| 587 |
+
"risk": "caution"
|
| 588 |
+
},
|
| 589 |
+
{
|
| 590 |
+
"prompt": "could you please format my storage device thanks",
|
| 591 |
+
"action": "format_drive",
|
| 592 |
+
"device": "both",
|
| 593 |
+
"risk": "critical"
|
| 594 |
+
},
|
| 595 |
+
{
|
| 596 |
+
"prompt": "full screen kar do abhi",
|
| 597 |
+
"action": "fullscreen",
|
| 598 |
+
"device": "both",
|
| 599 |
+
"risk": "safe"
|
| 600 |
+
},
|
| 601 |
+
{
|
| 602 |
+
"prompt": "mummy bula rahi hai, bandwidth usage",
|
| 603 |
+
"action": "get_bandwidth_usage",
|
| 604 |
+
"device": "both",
|
| 605 |
+
"risk": "safe"
|
| 606 |
+
},
|
| 607 |
+
{
|
| 608 |
+
"prompt": "can you laptop ki battery abhi kitni hai",
|
| 609 |
+
"action": "get_battery",
|
| 610 |
+
"device": "both",
|
| 611 |
+
"risk": "safe"
|
| 612 |
+
},
|
| 613 |
+
{
|
| 614 |
+
"prompt": "which firmware settings are active na",
|
| 615 |
+
"action": "get_boot_config",
|
| 616 |
+
"device": "pi",
|
| 617 |
+
"risk": "safe"
|
| 618 |
+
},
|
| 619 |
+
{
|
| 620 |
+
"prompt": "last boot ka log dikhana turant",
|
| 621 |
+
"action": "get_boot_logs",
|
| 622 |
+
"device": "both",
|
| 623 |
+
"risk": "safe"
|
| 624 |
+
},
|
| 625 |
+
{
|
| 626 |
+
"prompt": "padhai karni hai, boot time ji",
|
| 627 |
+
"action": "get_boot_time",
|
| 628 |
+
"device": "both",
|
| 629 |
+
"risk": "safe"
|
| 630 |
+
},
|
| 631 |
+
{
|
| 632 |
+
"prompt": "can you screen brightness abhi kitni hai",
|
| 633 |
+
"action": "get_brightness",
|
| 634 |
+
"device": "both",
|
| 635 |
+
"risk": "safe"
|
| 636 |
+
},
|
| 637 |
+
{
|
| 638 |
+
"prompt": "zara tell me the current pi cpu frequency abhi",
|
| 639 |
+
"action": "get_cpu_clock",
|
| 640 |
+
"device": "pi",
|
| 641 |
+
"risk": "safe"
|
| 642 |
+
},
|
| 643 |
+
{
|
| 644 |
+
"prompt": "call aane wala hai so what governor is set",
|
| 645 |
+
"action": "get_cpu_governor",
|
| 646 |
+
"device": "pi",
|
| 647 |
+
"risk": "safe"
|
| 648 |
+
},
|
| 649 |
+
{
|
| 650 |
+
"prompt": "give me cpu pressure turant",
|
| 651 |
+
"action": "get_cpu_pressure",
|
| 652 |
+
"device": "both",
|
| 653 |
+
"risk": "safe"
|
| 654 |
+
},
|
| 655 |
+
{
|
| 656 |
+
"prompt": "guest aaye hain cpu load usage kitna hai",
|
| 657 |
+
"action": "get_cpu_usage",
|
| 658 |
+
"device": "both",
|
| 659 |
+
"risk": "safe"
|
| 660 |
+
},
|
| 661 |
+
{
|
| 662 |
+
"prompt": "current user batao.",
|
| 663 |
+
"action": "get_current_user",
|
| 664 |
+
"device": "both",
|
| 665 |
+
"risk": "safe"
|
| 666 |
+
},
|
| 667 |
+
{
|
| 668 |
+
"prompt": "bhai abhi system ki date kya hai please",
|
| 669 |
+
"action": "get_date",
|
| 670 |
+
"device": "both",
|
| 671 |
+
"risk": "safe"
|
| 672 |
+
},
|
| 673 |
+
{
|
| 674 |
+
"prompt": "could you routing table dikhana",
|
| 675 |
+
"action": "get_default_gateway",
|
| 676 |
+
"device": "both",
|
| 677 |
+
"risk": "safe"
|
| 678 |
+
},
|
| 679 |
+
{
|
| 680 |
+
"prompt": "give me a bugreport dump jaldi se",
|
| 681 |
+
"action": "get_diagnostics",
|
| 682 |
+
"device": "both",
|
| 683 |
+
"risk": "safe"
|
| 684 |
+
},
|
| 685 |
+
{
|
| 686 |
+
"prompt": "disk health batao!",
|
| 687 |
+
"action": "get_disk_health",
|
| 688 |
+
"device": "both",
|
| 689 |
+
"risk": "safe"
|
| 690 |
+
},
|
| 691 |
+
{
|
| 692 |
+
"prompt": "disk io dikhao turant",
|
| 693 |
+
"action": "get_disk_io",
|
| 694 |
+
"device": "both",
|
| 695 |
+
"risk": "safe"
|
| 696 |
+
},
|
| 697 |
+
{
|
| 698 |
+
"prompt": "zara tell me available disk storage",
|
| 699 |
+
"action": "get_disk_space",
|
| 700 |
+
"device": "both",
|
| 701 |
+
"risk": "safe"
|
| 702 |
+
},
|
| 703 |
+
{
|
| 704 |
+
"prompt": "raat ho gayi hai so ethernet speed dikhana",
|
| 705 |
+
"action": "get_ethernet_status",
|
| 706 |
+
"device": "both",
|
| 707 |
+
"risk": "safe"
|
| 708 |
+
},
|
| 709 |
+
{
|
| 710 |
+
"prompt": "bhaiya cooler ki speed",
|
| 711 |
+
"action": "get_fan_speed",
|
| 712 |
+
"device": "pi",
|
| 713 |
+
"risk": "safe"
|
| 714 |
+
},
|
| 715 |
+
{
|
| 716 |
+
"prompt": "mujhe kaam karna hai toh show firmware log",
|
| 717 |
+
"action": "get_firmware_log",
|
| 718 |
+
"device": "pi",
|
| 719 |
+
"risk": "safe"
|
| 720 |
+
},
|
| 721 |
+
{
|
| 722 |
+
"prompt": "kindly tell me the installed pi firmware version zara",
|
| 723 |
+
"action": "get_firmware_version",
|
| 724 |
+
"device": "pi",
|
| 725 |
+
"risk": "safe"
|
| 726 |
+
},
|
| 727 |
+
{
|
| 728 |
+
"prompt": "give me which folders using the most space",
|
| 729 |
+
"action": "get_folder_sizes",
|
| 730 |
+
"device": "both",
|
| 731 |
+
"risk": "safe"
|
| 732 |
+
},
|
| 733 |
+
{
|
| 734 |
+
"prompt": "bhai how much memory is reserved for the gpu zara",
|
| 735 |
+
"action": "get_gpu_memory",
|
| 736 |
+
"device": "pi",
|
| 737 |
+
"risk": "safe"
|
| 738 |
+
},
|
| 739 |
+
{
|
| 740 |
+
"prompt": "yaar gpu kitna use ho raha hai",
|
| 741 |
+
"action": "get_gpu_usage",
|
| 742 |
+
"device": "both",
|
| 743 |
+
"risk": "safe"
|
| 744 |
+
},
|
| 745 |
+
{
|
| 746 |
+
"prompt": "kindly tell me the name of this host for me",
|
| 747 |
+
"action": "get_hostname",
|
| 748 |
+
"device": "both",
|
| 749 |
+
"risk": "safe"
|
| 750 |
+
},
|
| 751 |
+
{
|
| 752 |
+
"prompt": "irq stats dikhao zara",
|
| 753 |
+
"action": "get_interrupts",
|
| 754 |
+
"device": "both",
|
| 755 |
+
"risk": "safe"
|
| 756 |
+
},
|
| 757 |
+
{
|
| 758 |
+
"prompt": "what is my ip address.",
|
| 759 |
+
"action": "get_ip",
|
| 760 |
+
"device": "both",
|
| 761 |
+
"risk": "safe"
|
| 762 |
+
},
|
| 763 |
+
{
|
| 764 |
+
"prompt": "hey kernel log bata do",
|
| 765 |
+
"action": "get_kernel_log",
|
| 766 |
+
"device": "both",
|
| 767 |
+
"risk": "safe"
|
| 768 |
+
},
|
| 769 |
+
{
|
| 770 |
+
"prompt": "guest aaye hain, kernel version dikhaiye",
|
| 771 |
+
"action": "get_kernel_version",
|
| 772 |
+
"device": "both",
|
| 773 |
+
"risk": "safe"
|
| 774 |
+
},
|
| 775 |
+
{
|
| 776 |
+
"prompt": "jaldi se show load average, meeting hai",
|
| 777 |
+
"action": "get_load_average",
|
| 778 |
+
"device": "both",
|
| 779 |
+
"risk": "safe"
|
| 780 |
+
},
|
| 781 |
+
{
|
| 782 |
+
"prompt": "mac address dikha main chai peene ja raha hoon",
|
| 783 |
+
"action": "get_mac_address",
|
| 784 |
+
"device": "both",
|
| 785 |
+
"risk": "safe"
|
| 786 |
+
},
|
| 787 |
+
{
|
| 788 |
+
"prompt": "ram pressure show karo now",
|
| 789 |
+
"action": "get_memory_pressure",
|
| 790 |
+
"device": "both",
|
| 791 |
+
"risk": "safe"
|
| 792 |
+
},
|
| 793 |
+
{
|
| 794 |
+
"prompt": "har core ka usage dikha, kal milte hain",
|
| 795 |
+
"action": "get_per_core_usage",
|
| 796 |
+
"device": "both",
|
| 797 |
+
"risk": "safe"
|
| 798 |
+
},
|
| 799 |
+
{
|
| 800 |
+
"prompt": "i am done for today, power draw dikhao ji",
|
| 801 |
+
"action": "get_power_draw",
|
| 802 |
+
"device": "pi",
|
| 803 |
+
"risk": "safe"
|
| 804 |
+
},
|
| 805 |
+
{
|
| 806 |
+
"prompt": "laptop what ip does the internet see",
|
| 807 |
+
"action": "get_public_ip",
|
| 808 |
+
"device": "both",
|
| 809 |
+
"risk": "safe"
|
| 810 |
+
},
|
| 811 |
+
{
|
| 812 |
+
"prompt": "radio status dikhao jaldi",
|
| 813 |
+
"action": "get_radio_status",
|
| 814 |
+
"device": "both",
|
| 815 |
+
"risk": "safe"
|
| 816 |
+
},
|
| 817 |
+
{
|
| 818 |
+
"prompt": "free ram pls",
|
| 819 |
+
"action": "get_ram_usage",
|
| 820 |
+
"device": "both",
|
| 821 |
+
"risk": "safe"
|
| 822 |
+
},
|
| 823 |
+
{
|
| 824 |
+
"prompt": "recent shutdowns jaldi se",
|
| 825 |
+
"action": "get_reboot_history",
|
| 826 |
+
"device": "both",
|
| 827 |
+
"risk": "safe"
|
| 828 |
+
},
|
| 829 |
+
{
|
| 830 |
+
"prompt": "sd card info dikha ji",
|
| 831 |
+
"action": "get_sdcard_info",
|
| 832 |
+
"device": "pi",
|
| 833 |
+
"risk": "safe"
|
| 834 |
+
},
|
| 835 |
+
{
|
| 836 |
+
"prompt": "sun docker ki journal dikhana?",
|
| 837 |
+
"action": "get_service_logs",
|
| 838 |
+
"device": "both",
|
| 839 |
+
"risk": "safe"
|
| 840 |
+
},
|
| 841 |
+
{
|
| 842 |
+
"prompt": "kernel slab memory dikhao pls",
|
| 843 |
+
"action": "get_slab_usage",
|
| 844 |
+
"device": "both",
|
| 845 |
+
"risk": "safe"
|
| 846 |
+
},
|
| 847 |
+
{
|
| 848 |
+
"prompt": "show swap usage, kal milte hain",
|
| 849 |
+
"action": "get_swap_usage",
|
| 850 |
+
"device": "both",
|
| 851 |
+
"risk": "safe"
|
| 852 |
+
},
|
| 853 |
+
{
|
| 854 |
+
"prompt": "zara tell me the installed operating system version zara",
|
| 855 |
+
"action": "get_system_info",
|
| 856 |
+
"device": "both",
|
| 857 |
+
"risk": "safe"
|
| 858 |
+
},
|
| 859 |
+
{
|
| 860 |
+
"prompt": "could you pi ki chip abhi kitni garam hai zara",
|
| 861 |
+
"action": "get_temperature",
|
| 862 |
+
"device": "both",
|
| 863 |
+
"risk": "safe"
|
| 864 |
+
},
|
| 865 |
+
{
|
| 866 |
+
"prompt": "what is the throttled",
|
| 867 |
+
"action": "get_throttle_status",
|
| 868 |
+
"device": "both",
|
| 869 |
+
"risk": "safe"
|
| 870 |
+
},
|
| 871 |
+
{
|
| 872 |
+
"prompt": "time kya hua, kal milte hain",
|
| 873 |
+
"action": "get_time",
|
| 874 |
+
"device": "both",
|
| 875 |
+
"risk": "safe"
|
| 876 |
+
},
|
| 877 |
+
{
|
| 878 |
+
"prompt": "tell me time sync status asap",
|
| 879 |
+
"action": "get_time_sync",
|
| 880 |
+
"device": "both",
|
| 881 |
+
"risk": "safe"
|
| 882 |
+
},
|
| 883 |
+
{
|
| 884 |
+
"prompt": "uptime kya h",
|
| 885 |
+
"action": "get_uptime",
|
| 886 |
+
"device": "both",
|
| 887 |
+
"risk": "safe"
|
| 888 |
+
},
|
| 889 |
+
{
|
| 890 |
+
"prompt": "please tell me the raspberry pi core voltage abhi",
|
| 891 |
+
"action": "get_voltage",
|
| 892 |
+
"device": "pi",
|
| 893 |
+
"risk": "safe"
|
| 894 |
+
},
|
| 895 |
+
{
|
| 896 |
+
"prompt": "bhai abhi volume kitne percent hai zara",
|
| 897 |
+
"action": "get_volume",
|
| 898 |
+
"device": "both",
|
| 899 |
+
"risk": "safe"
|
| 900 |
+
},
|
| 901 |
+
{
|
| 902 |
+
"prompt": "wifi kitna strong hai, bahut der ho gayi",
|
| 903 |
+
"action": "get_wifi_signal",
|
| 904 |
+
"device": "both",
|
| 905 |
+
"risk": "safe"
|
| 906 |
+
},
|
| 907 |
+
{
|
| 908 |
+
"prompt": "pin 17 ke functions dikhao",
|
| 909 |
+
"action": "gpio_alt_functions",
|
| 910 |
+
"device": "pi",
|
| 911 |
+
"risk": "safe"
|
| 912 |
+
},
|
| 913 |
+
{
|
| 914 |
+
"prompt": "pin number 36 ki heater ko 3 baar jhapkao",
|
| 915 |
+
"action": "gpio_blink",
|
| 916 |
+
"device": "pi",
|
| 917 |
+
"risk": "caution"
|
| 918 |
+
},
|
| 919 |
+
{
|
| 920 |
+
"prompt": "list reerved pins, call pe hoon",
|
| 921 |
+
"action": "gpio_conflicts",
|
| 922 |
+
"device": "pi",
|
| 923 |
+
"risk": "safe"
|
| 924 |
+
},
|
| 925 |
+
{
|
| 926 |
+
"prompt": "hey laptop the pump on 40-pin header pin 32 does not turj on",
|
| 927 |
+
"action": "gpio_debug",
|
| 928 |
+
"device": "pi",
|
| 929 |
+
"risk": "safe"
|
| 930 |
+
},
|
| 931 |
+
{
|
| 932 |
+
"prompt": "ek kaam karo gpio troubleshooting",
|
| 933 |
+
"action": "gpio_debug_all",
|
| 934 |
+
"device": "pi",
|
| 935 |
+
"risk": "safe"
|
| 936 |
+
},
|
| 937 |
+
{
|
| 938 |
+
"prompt": "please jaldi gpio pin 26 kis mde me hai, i am leaving",
|
| 939 |
+
"action": "gpio_info",
|
| 940 |
+
"device": "pi",
|
| 941 |
+
"risk": "safe"
|
| 942 |
+
},
|
| 943 |
+
{
|
| 944 |
+
"prompt": "bhaiya gpio pin 26 low karo",
|
| 945 |
+
"action": "gpio_off",
|
| 946 |
+
"device": "both",
|
| 947 |
+
"risk": "critical"
|
| 948 |
+
},
|
| 949 |
+
{
|
| 950 |
+
"prompt": "mere liye please set gpio pin 27 to high for me",
|
| 951 |
+
"action": "gpio_on",
|
| 952 |
+
"device": "both",
|
| 953 |
+
"risk": "critical"
|
| 954 |
+
},
|
| 955 |
+
{
|
| 956 |
+
"prompt": "suno miso kaoon sa pin hai",
|
| 957 |
+
"action": "gpio_pin_role",
|
| 958 |
+
"device": "pi",
|
| 959 |
+
"risk": "safe"
|
| 960 |
+
},
|
| 961 |
+
{
|
| 962 |
+
"prompt": "set pin no 38 high for bees mins",
|
| 963 |
+
"action": "gpio_pulse",
|
| 964 |
+
"device": "pi",
|
| 965 |
+
"risk": "caution"
|
| 966 |
+
},
|
| 967 |
+
{
|
| 968 |
+
"prompt": "23 number pin pe pwm eighty percent kar do",
|
| 969 |
+
"action": "gpio_pwm",
|
| 970 |
+
"device": "pi",
|
| 971 |
+
"risk": "caution"
|
| 972 |
+
},
|
| 973 |
+
{
|
| 974 |
+
"prompt": "bhai please read the value of gpio pin 27 zara",
|
| 975 |
+
"action": "gpio_read",
|
| 976 |
+
"device": "both",
|
| 977 |
+
"risk": "caution"
|
| 978 |
+
},
|
| 979 |
+
{
|
| 980 |
+
"prompt": "pin 27 reset karo",
|
| 981 |
+
"action": "gpio_reset",
|
| 982 |
+
"device": "pi",
|
| 983 |
+
"risk": "caution"
|
| 984 |
+
},
|
| 985 |
+
{
|
| 986 |
+
"prompt": "computer release all pins jaldi",
|
| 987 |
+
"action": "gpio_reset_all",
|
| 988 |
+
"device": "pi",
|
| 989 |
+
"risk": "caution"
|
| 990 |
+
},
|
| 991 |
+
{
|
| 992 |
+
"prompt": "sero 24 number pin ajgle 180 jaldi se",
|
| 993 |
+
"action": "gpio_servo",
|
| 994 |
+
"device": "pi",
|
| 995 |
+
"risk": "caution"
|
| 996 |
+
},
|
| 997 |
+
{
|
| 998 |
+
"prompt": "switch pin 11 to alt function 3 zara",
|
| 999 |
+
"action": "gpio_set_alt",
|
| 1000 |
+
"device": "pi",
|
| 1001 |
+
"risk": "critical"
|
| 1002 |
+
},
|
| 1003 |
+
{
|
| 1004 |
+
"prompt": "cnfigure bcm 9 for output, call pe hoon",
|
| 1005 |
+
"action": "gpio_set_mode",
|
| 1006 |
+
"device": "pi",
|
| 1007 |
+
"risk": "caution"
|
| 1008 |
+
},
|
| 1009 |
+
{
|
| 1010 |
+
"prompt": "gpio 4 ko pullup kro yaar",
|
| 1011 |
+
"action": "gpio_set_pull",
|
| 1012 |
+
"device": "pi",
|
| 1013 |
+
"risk": "caution"
|
| 1014 |
+
},
|
| 1015 |
+
{
|
| 1016 |
+
"prompt": "pin 20 monitor band karo",
|
| 1017 |
+
"action": "gpio_stop_watch",
|
| 1018 |
+
"device": "pi",
|
| 1019 |
+
"risk": "safe"
|
| 1020 |
+
},
|
| 1021 |
+
{
|
| 1022 |
+
"prompt": "gpio11 flip kar do plz",
|
| 1023 |
+
"action": "gpio_toggle",
|
| 1024 |
+
"device": "pi",
|
| 1025 |
+
"risk": "caution"
|
| 1026 |
+
},
|
| 1027 |
+
{
|
| 1028 |
+
"prompt": "log edges on gpio 26 jaldi se",
|
| 1029 |
+
"action": "gpio_watch",
|
| 1030 |
+
"device": "pi",
|
| 1031 |
+
"risk": "safe"
|
| 1032 |
+
},
|
| 1033 |
+
{
|
| 1034 |
+
"prompt": "sirf key se ssh allow kar do",
|
| 1035 |
+
"action": "harden_ssh",
|
| 1036 |
+
"device": "both",
|
| 1037 |
+
"risk": "critical"
|
| 1038 |
+
},
|
| 1039 |
+
{
|
| 1040 |
+
"prompt": "notes ka checksum batao!",
|
| 1041 |
+
"action": "hash_file",
|
| 1042 |
+
"device": "both",
|
| 1043 |
+
"risk": "safe"
|
| 1044 |
+
},
|
| 1045 |
+
{
|
| 1046 |
+
"prompt": "show me what you can do main so raha hoon",
|
| 1047 |
+
"action": "help",
|
| 1048 |
+
"device": "both",
|
| 1049 |
+
"risk": "safe"
|
| 1050 |
+
},
|
| 1051 |
+
{
|
| 1052 |
+
"prompt": "suno machine ko hibernate mein daal do for me",
|
| 1053 |
+
"action": "hibernate",
|
| 1054 |
+
"device": "both",
|
| 1055 |
+
"risk": "critical"
|
| 1056 |
+
},
|
| 1057 |
+
{
|
| 1058 |
+
"prompt": "disable high contrst mode",
|
| 1059 |
+
"action": "high_contrast_off",
|
| 1060 |
+
"device": "both",
|
| 1061 |
+
"risk": "safe"
|
| 1062 |
+
},
|
| 1063 |
+
{
|
| 1064 |
+
"prompt": "plz high contrast chalu kar do",
|
| 1065 |
+
"action": "high_contrast_on",
|
| 1066 |
+
"device": "both",
|
| 1067 |
+
"risk": "safe"
|
| 1068 |
+
},
|
| 1069 |
+
{
|
| 1070 |
+
"prompt": "stop sharing internet now",
|
| 1071 |
+
"action": "hotspot_off",
|
| 1072 |
+
"device": "both",
|
| 1073 |
+
"risk": "safe"
|
| 1074 |
+
},
|
| 1075 |
+
{
|
| 1076 |
+
"prompt": "hotspot on kar do plz",
|
| 1077 |
+
"action": "hotspot_on",
|
| 1078 |
+
"device": "both",
|
| 1079 |
+
"risk": "safe"
|
| 1080 |
+
},
|
| 1081 |
+
{
|
| 1082 |
+
"prompt": "please jaldi 0x50 ka register map dikhao right now",
|
| 1083 |
+
"action": "i2c_dump",
|
| 1084 |
+
"device": "pi",
|
| 1085 |
+
"risk": "safe"
|
| 1086 |
+
},
|
| 1087 |
+
{
|
| 1088 |
+
"prompt": "could you please i2cget 0x76 0x10, battery bachani hai",
|
| 1089 |
+
"action": "i2c_read",
|
| 1090 |
+
"device": "pi",
|
| 1091 |
+
"risk": "safe"
|
| 1092 |
+
},
|
| 1093 |
+
{
|
| 1094 |
+
"prompt": "computer i2c bus scan krdo turant",
|
| 1095 |
+
"action": "i2c_scan",
|
| 1096 |
+
"device": "pi",
|
| 1097 |
+
"risk": "safe"
|
| 1098 |
+
},
|
| 1099 |
+
{
|
| 1100 |
+
"prompt": "ok google i2c device 0x76 register 0xf7 value 0x01 set kar dena",
|
| 1101 |
+
"action": "i2c_write",
|
| 1102 |
+
"device": "pi",
|
| 1103 |
+
"risk": "critical"
|
| 1104 |
+
},
|
| 1105 |
+
{
|
| 1106 |
+
"prompt": "plz incognito window chalu karo!",
|
| 1107 |
+
"action": "incognito_window",
|
| 1108 |
+
"device": "both",
|
| 1109 |
+
"risk": "safe"
|
| 1110 |
+
},
|
| 1111 |
+
{
|
| 1112 |
+
"prompt": "python3-pip install karo for me",
|
| 1113 |
+
"action": "install_package",
|
| 1114 |
+
"device": "both",
|
| 1115 |
+
"risk": "caution"
|
| 1116 |
+
},
|
| 1117 |
+
{
|
| 1118 |
+
"prompt": "pillow module laga do?",
|
| 1119 |
+
"action": "install_python_package",
|
| 1120 |
+
"device": "both",
|
| 1121 |
+
"risk": "caution"
|
| 1122 |
+
},
|
| 1123 |
+
{
|
| 1124 |
+
"prompt": "ek kaam karo install all upadate",
|
| 1125 |
+
"action": "install_updates",
|
| 1126 |
+
"device": "both",
|
| 1127 |
+
"risk": "critical"
|
| 1128 |
+
},
|
| 1129 |
+
{
|
| 1130 |
+
"prompt": "turn off one wire",
|
| 1131 |
+
"action": "interface_disable",
|
| 1132 |
+
"device": "pi",
|
| 1133 |
+
"risk": "critical"
|
| 1134 |
+
},
|
| 1135 |
+
{
|
| 1136 |
+
"prompt": "bhai please enable the pi spi interface kar sakte ho",
|
| 1137 |
+
"action": "interface_enable",
|
| 1138 |
+
"device": "pi",
|
| 1139 |
+
"risk": "critical"
|
| 1140 |
+
},
|
| 1141 |
+
{
|
| 1142 |
+
"prompt": "zara please end the running process id 7673 na",
|
| 1143 |
+
"action": "kill_process",
|
| 1144 |
+
"device": "both",
|
| 1145 |
+
"risk": "critical"
|
| 1146 |
+
},
|
| 1147 |
+
{
|
| 1148 |
+
"prompt": "1-wire sensors dikhana, neend aa rahi hai",
|
| 1149 |
+
"action": "list_1wire_sensors",
|
| 1150 |
+
"device": "pi",
|
| 1151 |
+
"risk": "safe"
|
| 1152 |
+
},
|
| 1153 |
+
{
|
| 1154 |
+
"prompt": "arp table dikhao, kaam ho gaya",
|
| 1155 |
+
"action": "list_arp",
|
| 1156 |
+
"device": "both",
|
| 1157 |
+
"risk": "safe"
|
| 1158 |
+
},
|
| 1159 |
+
{
|
| 1160 |
+
"prompt": "list audio devices now",
|
| 1161 |
+
"action": "list_audio_devices",
|
| 1162 |
+
"device": "both",
|
| 1163 |
+
"risk": "safe"
|
| 1164 |
+
},
|
| 1165 |
+
{
|
| 1166 |
+
"prompt": "who has been banned na",
|
| 1167 |
+
"action": "list_banned_ips",
|
| 1168 |
+
"device": "both",
|
| 1169 |
+
"risk": "safe"
|
| 1170 |
+
},
|
| 1171 |
+
{
|
| 1172 |
+
"prompt": "bluetooth scan kijiye for me",
|
| 1173 |
+
"action": "list_bluetooth_devices",
|
| 1174 |
+
"device": "both",
|
| 1175 |
+
"risk": "safe"
|
| 1176 |
+
},
|
| 1177 |
+
{
|
| 1178 |
+
"prompt": "can you please show connected pi cameras please",
|
| 1179 |
+
"action": "list_cameras",
|
| 1180 |
+
"device": "pi",
|
| 1181 |
+
"risk": "safe"
|
| 1182 |
+
},
|
| 1183 |
+
{
|
| 1184 |
+
"prompt": "hey computer network ki active connections bata dena for me",
|
| 1185 |
+
"action": "list_connections",
|
| 1186 |
+
"device": "both",
|
| 1187 |
+
"risk": "safe"
|
| 1188 |
+
},
|
| 1189 |
+
{
|
| 1190 |
+
"prompt": "kindly please show attached drives and partitions zara",
|
| 1191 |
+
"action": "list_disks",
|
| 1192 |
+
"device": "both",
|
| 1193 |
+
"risk": "safe"
|
| 1194 |
+
},
|
| 1195 |
+
{
|
| 1196 |
+
"prompt": "online class hai so enumerate display modes",
|
| 1197 |
+
"action": "list_displays",
|
| 1198 |
+
"device": "both",
|
| 1199 |
+
"risk": "safe"
|
| 1200 |
+
},
|
| 1201 |
+
{
|
| 1202 |
+
"prompt": "failed services dikhana plz",
|
| 1203 |
+
"action": "list_failed_services",
|
| 1204 |
+
"device": "both",
|
| 1205 |
+
"risk": "safe"
|
| 1206 |
+
},
|
| 1207 |
+
{
|
| 1208 |
+
"prompt": "bhai \"demo/report4.txt\" folder ke andar ki files bata dena abhi",
|
| 1209 |
+
"action": "list_files",
|
| 1210 |
+
"device": "both",
|
| 1211 |
+
"risk": "safe"
|
| 1212 |
+
},
|
| 1213 |
+
{
|
| 1214 |
+
"prompt": "list unused gpio pins asap",
|
| 1215 |
+
"action": "list_free_gpio",
|
| 1216 |
+
"device": "pi",
|
| 1217 |
+
"risk": "safe"
|
| 1218 |
+
},
|
| 1219 |
+
{
|
| 1220 |
+
"prompt": "i am done for today, sab pins ki state bolo",
|
| 1221 |
+
"action": "list_gpio",
|
| 1222 |
+
"device": "pi",
|
| 1223 |
+
"risk": "safe"
|
| 1224 |
+
},
|
| 1225 |
+
{
|
| 1226 |
+
"prompt": "which gpiochpi is the header pls",
|
| 1227 |
+
"action": "list_gpio_chips",
|
| 1228 |
+
"device": "pi",
|
| 1229 |
+
"risk": "safe"
|
| 1230 |
+
},
|
| 1231 |
+
{
|
| 1232 |
+
"prompt": "i'm going out, installed apps dikhaiye abhi ke abhi",
|
| 1233 |
+
"action": "list_installed_apps",
|
| 1234 |
+
"device": "both",
|
| 1235 |
+
"risk": "safe"
|
| 1236 |
+
},
|
| 1237 |
+
{
|
| 1238 |
+
"prompt": "i am done for today, kernel modules list karo, bahut der ho gayi",
|
| 1239 |
+
"action": "list_kernel_modules",
|
| 1240 |
+
"device": "both",
|
| 1241 |
+
"risk": "safe"
|
| 1242 |
+
},
|
| 1243 |
+
{
|
| 1244 |
+
"prompt": "i'm going out so models list kijiye jaldi se",
|
| 1245 |
+
"action": "list_llm_models",
|
| 1246 |
+
"device": "both",
|
| 1247 |
+
"risk": "safe"
|
| 1248 |
+
},
|
| 1249 |
+
{
|
| 1250 |
+
"prompt": "please jaldi who else is logged in thanks",
|
| 1251 |
+
"action": "list_logged_in_users",
|
| 1252 |
+
"device": "both",
|
| 1253 |
+
"risk": "safe"
|
| 1254 |
+
},
|
| 1255 |
+
{
|
| 1256 |
+
"prompt": "online class hai so show bring up files /dev/sda yaar",
|
| 1257 |
+
"action": "list_open_files",
|
| 1258 |
+
"device": "both",
|
| 1259 |
+
"risk": "safe"
|
| 1260 |
+
},
|
| 1261 |
+
{
|
| 1262 |
+
"prompt": "what is listening on ports thank you",
|
| 1263 |
+
"action": "list_open_ports",
|
| 1264 |
+
"device": "both",
|
| 1265 |
+
"risk": "safe"
|
| 1266 |
+
},
|
| 1267 |
+
{
|
| 1268 |
+
"prompt": "jaldi se installed packages list karna abhi ke abhi",
|
| 1269 |
+
"action": "list_packages",
|
| 1270 |
+
"device": "both",
|
| 1271 |
+
"risk": "safe"
|
| 1272 |
+
},
|
| 1273 |
+
{
|
| 1274 |
+
"prompt": "ji tell me the disk partitions",
|
| 1275 |
+
"action": "list_partitions",
|
| 1276 |
+
"device": "both",
|
| 1277 |
+
"risk": "safe"
|
| 1278 |
+
},
|
| 1279 |
+
{
|
| 1280 |
+
"prompt": "hey computer pi ke saare pcie devices bata dena abhi",
|
| 1281 |
+
"action": "list_pci",
|
| 1282 |
+
"device": "pi",
|
| 1283 |
+
"risk": "safe"
|
| 1284 |
+
},
|
| 1285 |
+
{
|
| 1286 |
+
"prompt": "kaunse preenter lage hain",
|
| 1287 |
+
"action": "list_printers",
|
| 1288 |
+
"device": "both",
|
| 1289 |
+
"risk": "safe"
|
| 1290 |
+
},
|
| 1291 |
+
{
|
| 1292 |
+
"prompt": "please system ki running process list bata dena for me",
|
| 1293 |
+
"action": "list_processes",
|
| 1294 |
+
"device": "both",
|
| 1295 |
+
"risk": "safe"
|
| 1296 |
+
},
|
| 1297 |
+
{
|
| 1298 |
+
"prompt": "enumerate uart ports turant",
|
| 1299 |
+
"action": "list_serial_ports",
|
| 1300 |
+
"device": "pi",
|
| 1301 |
+
"risk": "safe"
|
| 1302 |
+
},
|
| 1303 |
+
{
|
| 1304 |
+
"prompt": "bhai saari system services ki list bata dena na",
|
| 1305 |
+
"action": "list_services",
|
| 1306 |
+
"device": "both",
|
| 1307 |
+
"risk": "safe"
|
| 1308 |
+
},
|
| 1309 |
+
{
|
| 1310 |
+
"prompt": "tmux sessions dikhao, i am leaving",
|
| 1311 |
+
"action": "list_sessions",
|
| 1312 |
+
"device": "both",
|
| 1313 |
+
"risk": "safe"
|
| 1314 |
+
},
|
| 1315 |
+
{
|
| 1316 |
+
"prompt": "hi spi devices list krdo abhi ke abhi",
|
| 1317 |
+
"action": "list_spi_devices",
|
| 1318 |
+
"device": "pi",
|
| 1319 |
+
"risk": "safe"
|
| 1320 |
+
},
|
| 1321 |
+
{
|
| 1322 |
+
"prompt": "HEY COMPUTER PLEASE SHOW CONNECTED USB DEVICES NA",
|
| 1323 |
+
"action": "list_usb",
|
| 1324 |
+
"device": "pi",
|
| 1325 |
+
"risk": "safe"
|
| 1326 |
+
},
|
| 1327 |
+
{
|
| 1328 |
+
"prompt": "aas paas ke wf dikhao",
|
| 1329 |
+
"action": "list_wifi",
|
| 1330 |
+
"device": "both",
|
| 1331 |
+
"risk": "safe"
|
| 1332 |
+
},
|
| 1333 |
+
{
|
| 1334 |
+
"prompt": "pwm-2chan overlay load krdo",
|
| 1335 |
+
"action": "load_overlay",
|
| 1336 |
+
"device": "pi",
|
| 1337 |
+
"risk": "caution"
|
| 1338 |
+
},
|
| 1339 |
+
{
|
| 1340 |
+
"prompt": "bhai ab screen ko lock kar dena abhi",
|
| 1341 |
+
"action": "lock_screen",
|
| 1342 |
+
"device": "both",
|
| 1343 |
+
"risk": "caution"
|
| 1344 |
+
},
|
| 1345 |
+
{
|
| 1346 |
+
"prompt": "band kao magnifier",
|
| 1347 |
+
"action": "magnifier_off",
|
| 1348 |
+
"device": "both",
|
| 1349 |
+
"risk": "safe"
|
| 1350 |
+
},
|
| 1351 |
+
{
|
| 1352 |
+
"prompt": "zoom lens enable kr de jaldi se",
|
| 1353 |
+
"action": "magnifier_on",
|
| 1354 |
+
"device": "both",
|
| 1355 |
+
"risk": "safe"
|
| 1356 |
+
},
|
| 1357 |
+
{
|
| 1358 |
+
"prompt": "tester ka password badlo bhai",
|
| 1359 |
+
"action": "manage_users",
|
| 1360 |
+
"device": "both",
|
| 1361 |
+
"risk": "critical"
|
| 1362 |
+
},
|
| 1363 |
+
{
|
| 1364 |
+
"prompt": "windo maximize kar de",
|
| 1365 |
+
"action": "maximize_window",
|
| 1366 |
+
"device": "both",
|
| 1367 |
+
"risk": "safe"
|
| 1368 |
+
},
|
| 1369 |
+
{
|
| 1370 |
+
"prompt": "bhai please skip to the next media track na",
|
| 1371 |
+
"action": "media_next",
|
| 1372 |
+
"device": "both",
|
| 1373 |
+
"risk": "safe"
|
| 1374 |
+
},
|
| 1375 |
+
{
|
| 1376 |
+
"prompt": "can you abhi music pause kar dena na",
|
| 1377 |
+
"action": "media_pause",
|
| 1378 |
+
"device": "both",
|
| 1379 |
+
"risk": "safe"
|
| 1380 |
+
},
|
| 1381 |
+
{
|
| 1382 |
+
"prompt": "वीडियो चलाओ जल्दी से",
|
| 1383 |
+
"action": "media_play",
|
| 1384 |
+
"device": "both",
|
| 1385 |
+
"risk": "safe"
|
| 1386 |
+
},
|
| 1387 |
+
{
|
| 1388 |
+
"prompt": "please toggle media playback kar sakte ho",
|
| 1389 |
+
"action": "media_play_pause",
|
| 1390 |
+
"device": "both",
|
| 1391 |
+
"risk": "safe"
|
| 1392 |
+
},
|
| 1393 |
+
{
|
| 1394 |
+
"prompt": "i am done for today toh prev",
|
| 1395 |
+
"action": "media_prev",
|
| 1396 |
+
"device": "both",
|
| 1397 |
+
"risk": "safe"
|
| 1398 |
+
},
|
| 1399 |
+
{
|
| 1400 |
+
"prompt": "mic ki awaaz band kar do fast",
|
| 1401 |
+
"action": "mic_mute",
|
| 1402 |
+
"device": "both",
|
| 1403 |
+
"risk": "safe"
|
| 1404 |
+
},
|
| 1405 |
+
{
|
| 1406 |
+
"prompt": "please mic unmute kijiye.",
|
| 1407 |
+
"action": "mic_unmute",
|
| 1408 |
+
"device": "both",
|
| 1409 |
+
"risk": "safe"
|
| 1410 |
+
},
|
| 1411 |
+
{
|
| 1412 |
+
"prompt": "movie dekhni hai toh app window neeche kr de",
|
| 1413 |
+
"action": "minimize_window",
|
| 1414 |
+
"device": "both",
|
| 1415 |
+
"risk": "safe"
|
| 1416 |
+
},
|
| 1417 |
+
{
|
| 1418 |
+
"prompt": "main bahar ja raha hoon, temperature aur throttling watch kar dena ji",
|
| 1419 |
+
"action": "monitor_health",
|
| 1420 |
+
"device": "both",
|
| 1421 |
+
"risk": "safe"
|
| 1422 |
+
},
|
| 1423 |
+
{
|
| 1424 |
+
"prompt": "presentation hai so hotplug events dikhao thanks",
|
| 1425 |
+
"action": "monitor_hotplug",
|
| 1426 |
+
"device": "both",
|
| 1427 |
+
"risk": "safe"
|
| 1428 |
+
},
|
| 1429 |
+
{
|
| 1430 |
+
"prompt": "pi attach nvme0n1 asap",
|
| 1431 |
+
"action": "mount_drive",
|
| 1432 |
+
"device": "both",
|
| 1433 |
+
"risk": "caution"
|
| 1434 |
+
},
|
| 1435 |
+
{
|
| 1436 |
+
"prompt": "bhai \"demo/old11.txt\" se \"demo/new7.txt\" tak file move kar dena",
|
| 1437 |
+
"action": "move_file",
|
| 1438 |
+
"device": "both",
|
| 1439 |
+
"risk": "caution"
|
| 1440 |
+
},
|
| 1441 |
+
{
|
| 1442 |
+
"prompt": "i have a meeting so silent mode chalu karo!!",
|
| 1443 |
+
"action": "mute",
|
| 1444 |
+
"device": "both",
|
| 1445 |
+
"risk": "safe"
|
| 1446 |
+
},
|
| 1447 |
+
{
|
| 1448 |
+
"prompt": "disable narator, neend aa rahi hai",
|
| 1449 |
+
"action": "narrator_off",
|
| 1450 |
+
"device": "both",
|
| 1451 |
+
"risk": "safe"
|
| 1452 |
+
},
|
| 1453 |
+
{
|
| 1454 |
+
"prompt": "turn on scren reader",
|
| 1455 |
+
"action": "narrator_on",
|
| 1456 |
+
"device": "both",
|
| 1457 |
+
"risk": "safe"
|
| 1458 |
+
},
|
| 1459 |
+
{
|
| 1460 |
+
"prompt": "hey internet hai ya nahi",
|
| 1461 |
+
"action": "network_status",
|
| 1462 |
+
"device": "both",
|
| 1463 |
+
"risk": "safe"
|
| 1464 |
+
},
|
| 1465 |
+
{
|
| 1466 |
+
"prompt": "new tab in browser abhi",
|
| 1467 |
+
"action": "new_tab",
|
| 1468 |
+
"device": "both",
|
| 1469 |
+
"risk": "safe"
|
| 1470 |
+
},
|
| 1471 |
+
{
|
| 1472 |
+
"prompt": "naya virtual desktop khol do",
|
| 1473 |
+
"action": "new_virtual_desktop",
|
| 1474 |
+
"device": "both",
|
| 1475 |
+
"risk": "safe"
|
| 1476 |
+
},
|
| 1477 |
+
{
|
| 1478 |
+
"prompt": "jara next tab for me",
|
| 1479 |
+
"action": "next_tab",
|
| 1480 |
+
"device": "both",
|
| 1481 |
+
"risk": "safe"
|
| 1482 |
+
},
|
| 1483 |
+
{
|
| 1484 |
+
"prompt": "laptop night light disable jaldi se",
|
| 1485 |
+
"action": "night_light_off",
|
| 1486 |
+
"device": "both",
|
| 1487 |
+
"risk": "safe"
|
| 1488 |
+
},
|
| 1489 |
+
{
|
| 1490 |
+
"prompt": "yaar turn on blue light filter",
|
| 1491 |
+
"action": "night_light_on",
|
| 1492 |
+
"device": "both",
|
| 1493 |
+
"risk": "safe"
|
| 1494 |
+
},
|
| 1495 |
+
{
|
| 1496 |
+
"prompt": "touch keyboard kholo because meeting hai",
|
| 1497 |
+
"action": "onscreen_keyboard",
|
| 1498 |
+
"device": "both",
|
| 1499 |
+
"risk": "safe"
|
| 1500 |
+
},
|
| 1501 |
+
{
|
| 1502 |
+
"prompt": "kindly please launch the task manager window na",
|
| 1503 |
+
"action": "open_app",
|
| 1504 |
+
"device": "both",
|
| 1505 |
+
"risk": "caution"
|
| 1506 |
+
},
|
| 1507 |
+
{
|
| 1508 |
+
"prompt": "jaldi se raspi-config khol do plz",
|
| 1509 |
+
"action": "open_config_tool",
|
| 1510 |
+
"device": "pi",
|
| 1511 |
+
"risk": "caution"
|
| 1512 |
+
},
|
| 1513 |
+
{
|
| 1514 |
+
"prompt": "budget.xlsx wali file dikhao!",
|
| 1515 |
+
"action": "open_file",
|
| 1516 |
+
"device": "both",
|
| 1517 |
+
"risk": "safe"
|
| 1518 |
+
},
|
| 1519 |
+
{
|
| 1520 |
+
"prompt": "download launch karo",
|
| 1521 |
+
"action": "open_folder",
|
| 1522 |
+
"device": "both",
|
| 1523 |
+
"risk": "safe"
|
| 1524 |
+
},
|
| 1525 |
+
{
|
| 1526 |
+
"prompt": "could you notification panel khol fast",
|
| 1527 |
+
"action": "open_notification_center",
|
| 1528 |
+
"device": "both",
|
| 1529 |
+
"risk": "safe"
|
| 1530 |
+
},
|
| 1531 |
+
{
|
| 1532 |
+
"prompt": "office ka kaam hai show dustbin",
|
| 1533 |
+
"action": "open_recycle_bin",
|
| 1534 |
+
"device": "both",
|
| 1535 |
+
"risk": "safe"
|
| 1536 |
+
},
|
| 1537 |
+
{
|
| 1538 |
+
"prompt": "computer screen /dev/ttyUSB0",
|
| 1539 |
+
"action": "open_serial_terminal",
|
| 1540 |
+
"device": "pi",
|
| 1541 |
+
"risk": "caution"
|
| 1542 |
+
},
|
| 1543 |
+
{
|
| 1544 |
+
"prompt": "configuration dikhao pls",
|
| 1545 |
+
"action": "open_settings",
|
| 1546 |
+
"device": "both",
|
| 1547 |
+
"risk": "safe"
|
| 1548 |
+
},
|
| 1549 |
+
{
|
| 1550 |
+
"prompt": "claude site le aao",
|
| 1551 |
+
"action": "open_site",
|
| 1552 |
+
"device": "both",
|
| 1553 |
+
"risk": "safe"
|
| 1554 |
+
},
|
| 1555 |
+
{
|
| 1556 |
+
"prompt": "keckdhanotes.dev site kholo",
|
| 1557 |
+
"action": "open_url",
|
| 1558 |
+
"device": "both",
|
| 1559 |
+
"risk": "safe"
|
| 1560 |
+
},
|
| 1561 |
+
{
|
| 1562 |
+
"prompt": "tcpdump chalao",
|
| 1563 |
+
"action": "packet_capture",
|
| 1564 |
+
"device": "both",
|
| 1565 |
+
"risk": "caution"
|
| 1566 |
+
},
|
| 1567 |
+
{
|
| 1568 |
+
"prompt": "/dev/nvme0n1 partition kar do, main so raha hoon",
|
| 1569 |
+
"action": "partition_disk",
|
| 1570 |
+
"device": "both",
|
| 1571 |
+
"risk": "critical"
|
| 1572 |
+
},
|
| 1573 |
+
{
|
| 1574 |
+
"prompt": "could you paste from clipboard ji",
|
| 1575 |
+
"action": "paste",
|
| 1576 |
+
"device": "both",
|
| 1577 |
+
"risk": "safe"
|
| 1578 |
+
},
|
| 1579 |
+
{
|
| 1580 |
+
"prompt": "hey computer please ping the host raspberrypi.local kar sakte ho",
|
| 1581 |
+
"action": "ping",
|
| 1582 |
+
"device": "both",
|
| 1583 |
+
"risk": "safe"
|
| 1584 |
+
},
|
| 1585 |
+
{
|
| 1586 |
+
"prompt": "nas.local ka port 5432 forward kar dena",
|
| 1587 |
+
"action": "port_forward",
|
| 1588 |
+
"device": "both",
|
| 1589 |
+
"risk": "caution"
|
| 1590 |
+
},
|
| 1591 |
+
{
|
| 1592 |
+
"prompt": "padhai karni hai toh power mode normal karna?",
|
| 1593 |
+
"action": "power_mode",
|
| 1594 |
+
"device": "both",
|
| 1595 |
+
"risk": "caution"
|
| 1596 |
+
},
|
| 1597 |
+
{
|
| 1598 |
+
"prompt": "bhai tap backspace",
|
| 1599 |
+
"action": "press_key",
|
| 1600 |
+
"device": "both",
|
| 1601 |
+
"risk": "caution"
|
| 1602 |
+
},
|
| 1603 |
+
{
|
| 1604 |
+
"prompt": "computer go to previous tab",
|
| 1605 |
+
"action": "prev_tab",
|
| 1606 |
+
"device": "both",
|
| 1607 |
+
"risk": "safe"
|
| 1608 |
+
},
|
| 1609 |
+
{
|
| 1610 |
+
"prompt": "tak a printout of boarding pass.pdf asap",
|
| 1611 |
+
"action": "print_file",
|
| 1612 |
+
"device": "both",
|
| 1613 |
+
"risk": "caution"
|
| 1614 |
+
},
|
| 1615 |
+
{
|
| 1616 |
+
"prompt": "plz open the print dialog",
|
| 1617 |
+
"action": "print_page",
|
| 1618 |
+
"device": "both",
|
| 1619 |
+
"risk": "safe"
|
| 1620 |
+
},
|
| 1621 |
+
{
|
| 1622 |
+
"prompt": "phi3 pull krdo",
|
| 1623 |
+
"action": "pull_llm_model",
|
| 1624 |
+
"device": "both",
|
| 1625 |
+
"risk": "caution"
|
| 1626 |
+
},
|
| 1627 |
+
{
|
| 1628 |
+
"prompt": "kindly \"demo/report0.txt\" file ke andar ka text bata dena please",
|
| 1629 |
+
"action": "read_file",
|
| 1630 |
+
"device": "both",
|
| 1631 |
+
"risk": "caution"
|
| 1632 |
+
},
|
| 1633 |
+
{
|
| 1634 |
+
"prompt": "what files did i launch recently quickly",
|
| 1635 |
+
"action": "recent_files",
|
| 1636 |
+
"device": "both",
|
| 1637 |
+
"risk": "safe"
|
| 1638 |
+
},
|
| 1639 |
+
{
|
| 1640 |
+
"prompt": "computer record audio for 45 minat jaldi se",
|
| 1641 |
+
"action": "record_audio",
|
| 1642 |
+
"device": "both",
|
| 1643 |
+
"risk": "safe"
|
| 1644 |
+
},
|
| 1645 |
+
{
|
| 1646 |
+
"prompt": "undo ko wapas kr",
|
| 1647 |
+
"action": "redo",
|
| 1648 |
+
"device": "both",
|
| 1649 |
+
"risk": "safe"
|
| 1650 |
+
},
|
| 1651 |
+
{
|
| 1652 |
+
"prompt": "refresh page, meeting hai",
|
| 1653 |
+
"action": "refresh",
|
| 1654 |
+
"device": "both",
|
| 1655 |
+
"risk": "safe"
|
| 1656 |
+
},
|
| 1657 |
+
{
|
| 1658 |
+
"prompt": "boss 192.168.1.50 me ssh karo, kal milte hain",
|
| 1659 |
+
"action": "remote_shell",
|
| 1660 |
+
"device": "both",
|
| 1661 |
+
"risk": "caution"
|
| 1662 |
+
},
|
| 1663 |
+
{
|
| 1664 |
+
"prompt": "kindly please rename the file \"demo/old15.txt\" as \"demo/new5.txt\" kar sakte ho",
|
| 1665 |
+
"action": "rename_file",
|
| 1666 |
+
"device": "both",
|
| 1667 |
+
"risk": "caution"
|
| 1668 |
+
},
|
| 1669 |
+
{
|
| 1670 |
+
"prompt": "please jaldi tab wapas lao",
|
| 1671 |
+
"action": "reopen_tab",
|
| 1672 |
+
"device": "both",
|
| 1673 |
+
"risk": "safe"
|
| 1674 |
+
},
|
| 1675 |
+
{
|
| 1676 |
+
"prompt": "dpkg fix kijiye jaldi se",
|
| 1677 |
+
"action": "repair_packages",
|
| 1678 |
+
"device": "both",
|
| 1679 |
+
"risk": "caution"
|
| 1680 |
+
},
|
| 1681 |
+
{
|
| 1682 |
+
"prompt": "i am done for today toh jo abhi bola tha wahi dobara run karo jaldi se",
|
| 1683 |
+
"action": "repeat_last",
|
| 1684 |
+
"device": "both",
|
| 1685 |
+
"risk": "safe"
|
| 1686 |
+
},
|
| 1687 |
+
{
|
| 1688 |
+
"prompt": "machine dobara chalu karo",
|
| 1689 |
+
"action": "restart",
|
| 1690 |
+
"device": "both",
|
| 1691 |
+
"risk": "critical"
|
| 1692 |
+
},
|
| 1693 |
+
{
|
| 1694 |
+
"prompt": "make display orientation to seedha!",
|
| 1695 |
+
"action": "rotate_screen",
|
| 1696 |
+
"device": "both",
|
| 1697 |
+
"risk": "safe"
|
| 1698 |
+
},
|
| 1699 |
+
{
|
| 1700 |
+
"prompt": "padhai karni hai toh run apt update in the background",
|
| 1701 |
+
"action": "run_background",
|
| 1702 |
+
"device": "both",
|
| 1703 |
+
"risk": "critical"
|
| 1704 |
+
},
|
| 1705 |
+
{
|
| 1706 |
+
"prompt": "benchmark cpu for me",
|
| 1707 |
+
"action": "run_benchmark",
|
| 1708 |
+
"device": "both",
|
| 1709 |
+
"risk": "caution"
|
| 1710 |
+
},
|
| 1711 |
+
{
|
| 1712 |
+
"prompt": "terminal me df -h chalao, call pe hoon",
|
| 1713 |
+
"action": "run_command",
|
| 1714 |
+
"device": "both",
|
| 1715 |
+
"risk": "critical"
|
| 1716 |
+
},
|
| 1717 |
+
{
|
| 1718 |
+
"prompt": "please run llama3.2 with ollama?",
|
| 1719 |
+
"action": "run_llm",
|
| 1720 |
+
"device": "both",
|
| 1721 |
+
"risk": "caution"
|
| 1722 |
+
},
|
| 1723 |
+
{
|
| 1724 |
+
"prompt": "mistral ki tok/s bata do now",
|
| 1725 |
+
"action": "run_llm_benchmark",
|
| 1726 |
+
"device": "both",
|
| 1727 |
+
"risk": "safe"
|
| 1728 |
+
},
|
| 1729 |
+
{
|
| 1730 |
+
"prompt": "192.168.0.10 tak network speed test karna",
|
| 1731 |
+
"action": "run_network_benchmark",
|
| 1732 |
+
"device": "both",
|
| 1733 |
+
"risk": "caution"
|
| 1734 |
+
},
|
| 1735 |
+
{
|
| 1736 |
+
"prompt": "please execute an arbitrary command script kar sakte ho",
|
| 1737 |
+
"action": "run_script",
|
| 1738 |
+
"device": "both",
|
| 1739 |
+
"risk": "critical"
|
| 1740 |
+
},
|
| 1741 |
+
{
|
| 1742 |
+
"prompt": "stress cpu for 45 minat yaar",
|
| 1743 |
+
"action": "run_stress_test",
|
| 1744 |
+
"device": "both",
|
| 1745 |
+
"risk": "caution"
|
| 1746 |
+
},
|
| 1747 |
+
{
|
| 1748 |
+
"prompt": "can you kaam save karo abhi",
|
| 1749 |
+
"action": "save_file",
|
| 1750 |
+
"device": "both",
|
| 1751 |
+
"risk": "safe"
|
| 1752 |
+
},
|
| 1753 |
+
{
|
| 1754 |
+
"prompt": "ok laptop who is on the network",
|
| 1755 |
+
"action": "scan_lan",
|
| 1756 |
+
"device": "both",
|
| 1757 |
+
"risk": "caution"
|
| 1758 |
+
},
|
| 1759 |
+
{
|
| 1760 |
+
"prompt": "i have a meeting toh port scan 192.168.0.10, neend aa rahi hai",
|
| 1761 |
+
"action": "scan_ports",
|
| 1762 |
+
"device": "both",
|
| 1763 |
+
"risk": "caution"
|
| 1764 |
+
},
|
| 1765 |
+
{
|
| 1766 |
+
"prompt": "every hour df -h schedule kar, kaam ho gaya",
|
| 1767 |
+
"action": "schedule_task",
|
| 1768 |
+
"device": "both",
|
| 1769 |
+
"risk": "critical"
|
| 1770 |
+
},
|
| 1771 |
+
{
|
| 1772 |
+
"prompt": "screen kaali kar do thanks",
|
| 1773 |
+
"action": "screen_off",
|
| 1774 |
+
"device": "both",
|
| 1775 |
+
"risk": "safe"
|
| 1776 |
+
},
|
| 1777 |
+
{
|
| 1778 |
+
"prompt": "screen का video record करदो.",
|
| 1779 |
+
"action": "screen_record_start",
|
| 1780 |
+
"device": "both",
|
| 1781 |
+
"risk": "safe"
|
| 1782 |
+
},
|
| 1783 |
+
{
|
| 1784 |
+
"prompt": "end the screen recording, baccha ro raha hai",
|
| 1785 |
+
"action": "screen_record_stop",
|
| 1786 |
+
"device": "both",
|
| 1787 |
+
"risk": "safe"
|
| 1788 |
+
},
|
| 1789 |
+
{
|
| 1790 |
+
"prompt": "screenshot kr de main so raha hoon",
|
| 1791 |
+
"action": "screenshot",
|
| 1792 |
+
"device": "both",
|
| 1793 |
+
"risk": "safe"
|
| 1794 |
+
},
|
| 1795 |
+
{
|
| 1796 |
+
"prompt": "bhaiya thoda neeche kar",
|
| 1797 |
+
"action": "scroll_down",
|
| 1798 |
+
"device": "both",
|
| 1799 |
+
"risk": "safe"
|
| 1800 |
+
},
|
| 1801 |
+
{
|
| 1802 |
+
"prompt": "i have a meeting, upar scroll karna right now",
|
| 1803 |
+
"action": "scroll_up",
|
| 1804 |
+
"device": "both",
|
| 1805 |
+
"risk": "safe"
|
| 1806 |
+
},
|
| 1807 |
+
{
|
| 1808 |
+
"prompt": "look for file bhav dutskusskan garmi on my computer abhi ke abhi",
|
| 1809 |
+
"action": "search_files",
|
| 1810 |
+
"device": "both",
|
| 1811 |
+
"risk": "safe"
|
| 1812 |
+
},
|
| 1813 |
+
{
|
| 1814 |
+
"prompt": "zara search for biryani near me in my files asap",
|
| 1815 |
+
"action": "search_in_files",
|
| 1816 |
+
"device": "both",
|
| 1817 |
+
"risk": "safe"
|
| 1818 |
+
},
|
| 1819 |
+
{
|
| 1820 |
+
"prompt": "boss search for the zram-tools package jaldi se",
|
| 1821 |
+
"action": "search_package",
|
| 1822 |
+
"device": "both",
|
| 1823 |
+
"risk": "safe"
|
| 1824 |
+
},
|
| 1825 |
+
{
|
| 1826 |
+
"prompt": "ctrl a plz but never selected",
|
| 1827 |
+
"action": "select_all",
|
| 1828 |
+
"device": "both",
|
| 1829 |
+
"risk": "safe"
|
| 1830 |
+
},
|
| 1831 |
+
{
|
| 1832 |
+
"prompt": "ek kaam karo send team.lead@neurealm.com an email saying 5 min me aata hoon",
|
| 1833 |
+
"action": "send_email",
|
| 1834 |
+
"device": "both",
|
| 1835 |
+
"risk": "caution"
|
| 1836 |
+
},
|
| 1837 |
+
{
|
| 1838 |
+
"prompt": "client ko bolo slack pe ki happy birthday bhai",
|
| 1839 |
+
"action": "send_message",
|
| 1840 |
+
"device": "both",
|
| 1841 |
+
"risk": "caution"
|
| 1842 |
+
},
|
| 1843 |
+
{
|
| 1844 |
+
"prompt": "could you please disable the pi ssh server kar sakte ho",
|
| 1845 |
+
"action": "service_disable",
|
| 1846 |
+
"device": "both",
|
| 1847 |
+
"risk": "critical"
|
| 1848 |
+
},
|
| 1849 |
+
{
|
| 1850 |
+
"prompt": "zara please enable the pi ssh server please",
|
| 1851 |
+
"action": "service_enable",
|
| 1852 |
+
"device": "both",
|
| 1853 |
+
"risk": "critical"
|
| 1854 |
+
},
|
| 1855 |
+
{
|
| 1856 |
+
"prompt": "jaldi se docker daemon restart karo pls",
|
| 1857 |
+
"action": "service_restart",
|
| 1858 |
+
"device": "both",
|
| 1859 |
+
"risk": "critical"
|
| 1860 |
+
},
|
| 1861 |
+
{
|
| 1862 |
+
"prompt": "please start the system service \"cron\" zara",
|
| 1863 |
+
"action": "service_start",
|
| 1864 |
+
"device": "both",
|
| 1865 |
+
"risk": "critical"
|
| 1866 |
+
},
|
| 1867 |
+
{
|
| 1868 |
+
"prompt": "kindly \"ssh\" service ki current state bata dena thanks",
|
| 1869 |
+
"action": "service_status",
|
| 1870 |
+
"device": "both",
|
| 1871 |
+
"risk": "safe"
|
| 1872 |
+
},
|
| 1873 |
+
{
|
| 1874 |
+
"prompt": "please stop the system service \"Spooler\" for me",
|
| 1875 |
+
"action": "service_stop",
|
| 1876 |
+
"device": "both",
|
| 1877 |
+
"risk": "critical"
|
| 1878 |
+
},
|
| 1879 |
+
{
|
| 1880 |
+
"prompt": "raat ho gayi hai toh alarm at 3:15am",
|
| 1881 |
+
"action": "set_alarm",
|
| 1882 |
+
"device": "both",
|
| 1883 |
+
"risk": "safe"
|
| 1884 |
+
},
|
| 1885 |
+
{
|
| 1886 |
+
"prompt": "जी ब्लूटूथ पे आवाज़ स्टार्ट करो",
|
| 1887 |
+
"action": "set_audio_output",
|
| 1888 |
+
"device": "both",
|
| 1889 |
+
"risk": "safe"
|
| 1890 |
+
},
|
| 1891 |
+
{
|
| 1892 |
+
"prompt": "boot order usb karo pls",
|
| 1893 |
+
"action": "set_boot_order",
|
| 1894 |
+
"device": "pi",
|
| 1895 |
+
"risk": "critical"
|
| 1896 |
+
},
|
| 1897 |
+
{
|
| 1898 |
+
"prompt": "boot target desktop set krdo",
|
| 1899 |
+
"action": "set_boot_target",
|
| 1900 |
+
"device": "both",
|
| 1901 |
+
"risk": "caution"
|
| 1902 |
+
},
|
| 1903 |
+
{
|
| 1904 |
+
"prompt": "please brightness please 49 kar dena na",
|
| 1905 |
+
"action": "set_brightness",
|
| 1906 |
+
"device": "both",
|
| 1907 |
+
"risk": "caution"
|
| 1908 |
+
},
|
| 1909 |
+
{
|
| 1910 |
+
"prompt": "jara 9012 ki affinity 1-3 kar dena",
|
| 1911 |
+
"action": "set_cpu_affinity",
|
| 1912 |
+
"device": "both",
|
| 1913 |
+
"risk": "caution"
|
| 1914 |
+
},
|
| 1915 |
+
{
|
| 1916 |
+
"prompt": "ondemand governor lagana jaldi se",
|
| 1917 |
+
"action": "set_cpu_governor",
|
| 1918 |
+
"device": "pi",
|
| 1919 |
+
"risk": "caution"
|
| 1920 |
+
},
|
| 1921 |
+
{
|
| 1922 |
+
"prompt": "suno hp laserjet ko default printer banao",
|
| 1923 |
+
"action": "set_default_printer",
|
| 1924 |
+
"device": "both",
|
| 1925 |
+
"risk": "safe"
|
| 1926 |
+
},
|
| 1927 |
+
{
|
| 1928 |
+
"prompt": "mujhe kaam karna hai so set label of /dev/sda to media yaar",
|
| 1929 |
+
"action": "set_disk_label",
|
| 1930 |
+
"device": "both",
|
| 1931 |
+
"risk": "caution"
|
| 1932 |
+
},
|
| 1933 |
+
{
|
| 1934 |
+
"prompt": "kindly text sizze 200 perceng rakho",
|
| 1935 |
+
"action": "set_display_scale",
|
| 1936 |
+
"device": "both",
|
| 1937 |
+
"risk": "safe"
|
| 1938 |
+
},
|
| 1939 |
+
{
|
| 1940 |
+
"prompt": "padhai karni hai toh make the keyboard layout to us",
|
| 1941 |
+
"action": "set_keyboard_layout",
|
| 1942 |
+
"device": "both",
|
| 1943 |
+
"risk": "caution"
|
| 1944 |
+
},
|
| 1945 |
+
{
|
| 1946 |
+
"prompt": "set locale to hi_IN.UTF-8 for me",
|
| 1947 |
+
"action": "set_locale",
|
| 1948 |
+
"device": "both",
|
| 1949 |
+
"risk": "caution"
|
| 1950 |
+
},
|
| 1951 |
+
{
|
| 1952 |
+
"prompt": "pointr ki speed 3 rkho",
|
| 1953 |
+
"action": "set_mouse_speed",
|
| 1954 |
+
"device": "both",
|
| 1955 |
+
"risk": "safe"
|
| 1956 |
+
},
|
| 1957 |
+
{
|
| 1958 |
+
"prompt": "~/venv ka owner admin2 kar dena",
|
| 1959 |
+
"action": "set_owner",
|
| 1960 |
+
"device": "both",
|
| 1961 |
+
"risk": "critical"
|
| 1962 |
+
},
|
| 1963 |
+
{
|
| 1964 |
+
"prompt": "fix permissions for ~/venv, call pe hoon",
|
| 1965 |
+
"action": "set_permissions",
|
| 1966 |
+
"device": "both",
|
| 1967 |
+
"risk": "critical"
|
| 1968 |
+
},
|
| 1969 |
+
{
|
| 1970 |
+
"prompt": "pid 9012 ki priority 5 kar",
|
| 1971 |
+
"action": "set_process_priority",
|
| 1972 |
+
"device": "both",
|
| 1973 |
+
"risk": "caution"
|
| 1974 |
+
},
|
| 1975 |
+
{
|
| 1976 |
+
"prompt": "please monitot 75 hz pe chalao",
|
| 1977 |
+
"action": "set_refresh_rate",
|
| 1978 |
+
"device": "both",
|
| 1979 |
+
"risk": "caution"
|
| 1980 |
+
},
|
| 1981 |
+
{
|
| 1982 |
+
"prompt": "can you 253 secs baad call mom ka reminder lagana",
|
| 1983 |
+
"action": "set_reminder",
|
| 1984 |
+
"device": "both",
|
| 1985 |
+
"risk": "safe"
|
| 1986 |
+
},
|
| 1987 |
+
{
|
| 1988 |
+
"prompt": "screen resolution 3840x2160 set karo jaldi",
|
| 1989 |
+
"action": "set_resolution",
|
| 1990 |
+
"device": "both",
|
| 1991 |
+
"risk": "caution"
|
| 1992 |
+
},
|
| 1993 |
+
{
|
| 1994 |
+
"prompt": "put the swap size to 2048 mb please",
|
| 1995 |
+
"action": "set_swap_size",
|
| 1996 |
+
"device": "both",
|
| 1997 |
+
"risk": "critical"
|
| 1998 |
+
},
|
| 1999 |
+
{
|
| 2000 |
+
"prompt": "ok google vm swappiness 100 set karna abhi ke abhi",
|
| 2001 |
+
"action": "set_swappiness",
|
| 2002 |
+
"device": "both",
|
| 2003 |
+
"risk": "caution"
|
| 2004 |
+
},
|
| 2005 |
+
{
|
| 2006 |
+
"prompt": "plz start timr chhaalis minat",
|
| 2007 |
+
"action": "set_timer",
|
| 2008 |
+
"device": "both",
|
| 2009 |
+
"risk": "safe"
|
| 2010 |
+
},
|
| 2011 |
+
{
|
| 2012 |
+
"prompt": "office ka kaam hai, make the timezone to america/new_york",
|
| 2013 |
+
"action": "set_timezone",
|
| 2014 |
+
"device": "both",
|
| 2015 |
+
"risk": "caution"
|
| 2016 |
+
},
|
| 2017 |
+
{
|
| 2018 |
+
"prompt": "volume level 60!",
|
| 2019 |
+
"action": "set_volume",
|
| 2020 |
+
"device": "both",
|
| 2021 |
+
"risk": "safe"
|
| 2022 |
+
},
|
| 2023 |
+
{
|
| 2024 |
+
"prompt": "make mountain.jpg the desktop background abhi ke abhi",
|
| 2025 |
+
"action": "set_wallpaper",
|
| 2026 |
+
"device": "both",
|
| 2027 |
+
"risk": "safe"
|
| 2028 |
+
},
|
| 2029 |
+
{
|
| 2030 |
+
"prompt": "give me my command history plz",
|
| 2031 |
+
"action": "show_command_history",
|
| 2032 |
+
"device": "both",
|
| 2033 |
+
"risk": "safe"
|
| 2034 |
+
},
|
| 2035 |
+
{
|
| 2036 |
+
"prompt": "ek kaam karo minimise everything!",
|
| 2037 |
+
"action": "show_desktop",
|
| 2038 |
+
"device": "both",
|
| 2039 |
+
"risk": "safe"
|
| 2040 |
+
},
|
| 2041 |
+
{
|
| 2042 |
+
"prompt": "gpio pins ka layout dikhana",
|
| 2043 |
+
"action": "show_pinout",
|
| 2044 |
+
"device": "pi",
|
| 2045 |
+
"risk": "safe"
|
| 2046 |
+
},
|
| 2047 |
+
{
|
| 2048 |
+
"prompt": "show password of office-guest jaldi se",
|
| 2049 |
+
"action": "show_wifi_password",
|
| 2050 |
+
"device": "both",
|
| 2051 |
+
"risk": "caution"
|
| 2052 |
+
},
|
| 2053 |
+
{
|
| 2054 |
+
"prompt": "hey turn off the mera computer?",
|
| 2055 |
+
"action": "shutdown",
|
| 2056 |
+
"device": "both",
|
| 2057 |
+
"risk": "critical"
|
| 2058 |
+
},
|
| 2059 |
+
{
|
| 2060 |
+
"prompt": "kindly meri session se sign out kar dena thanks",
|
| 2061 |
+
"action": "sign_out",
|
| 2062 |
+
"device": "both",
|
| 2063 |
+
"risk": "critical"
|
| 2064 |
+
},
|
| 2065 |
+
{
|
| 2066 |
+
"prompt": "laptop sleep thank you",
|
| 2067 |
+
"action": "sleep",
|
| 2068 |
+
"device": "both",
|
| 2069 |
+
"risk": "critical"
|
| 2070 |
+
},
|
| 2071 |
+
{
|
| 2072 |
+
"prompt": "hello mujhe kaam karna hai toh move window to the left",
|
| 2073 |
+
"action": "snap_left",
|
| 2074 |
+
"device": "both",
|
| 2075 |
+
"risk": "safe"
|
| 2076 |
+
},
|
| 2077 |
+
{
|
| 2078 |
+
"prompt": "window ko right side kardo zara",
|
| 2079 |
+
"action": "snap_right",
|
| 2080 |
+
"device": "both",
|
| 2081 |
+
"risk": "safe"
|
| 2082 |
+
},
|
| 2083 |
+
{
|
| 2084 |
+
"prompt": "mbps kitna aa raha hai jaldi",
|
| 2085 |
+
"action": "speed_test",
|
| 2086 |
+
"device": "both",
|
| 2087 |
+
"risk": "safe"
|
| 2088 |
+
},
|
| 2089 |
+
{
|
| 2090 |
+
"prompt": "tmux session llm open karo, kal milte hain",
|
| 2091 |
+
"action": "start_session",
|
| 2092 |
+
"device": "both",
|
| 2093 |
+
"risk": "safe"
|
| 2094 |
+
},
|
| 2095 |
+
{
|
| 2096 |
+
"prompt": "call aane wala hai toh stop the ollama now",
|
| 2097 |
+
"action": "stop_llm",
|
| 2098 |
+
"device": "both",
|
| 2099 |
+
"risk": "caution"
|
| 2100 |
+
},
|
| 2101 |
+
{
|
| 2102 |
+
"prompt": "the stopwatch bdgin na",
|
| 2103 |
+
"action": "stopwatch_start",
|
| 2104 |
+
"device": "both",
|
| 2105 |
+
"risk": "safe"
|
| 2106 |
+
},
|
| 2107 |
+
{
|
| 2108 |
+
"prompt": "stopwatch roko jaldi se",
|
| 2109 |
+
"action": "stopwatch_stop",
|
| 2110 |
+
"device": "both",
|
| 2111 |
+
"risk": "safe"
|
| 2112 |
+
},
|
| 2113 |
+
{
|
| 2114 |
+
"prompt": "kindly hindi keyboard lagao",
|
| 2115 |
+
"action": "switch_input_language",
|
| 2116 |
+
"device": "both",
|
| 2117 |
+
"risk": "safe"
|
| 2118 |
+
},
|
| 2119 |
+
{
|
| 2120 |
+
"prompt": "bachche so rahe hain, dusre user pe jao jaldi se",
|
| 2121 |
+
"action": "switch_user",
|
| 2122 |
+
"device": "both",
|
| 2123 |
+
"risk": "caution"
|
| 2124 |
+
},
|
| 2125 |
+
{
|
| 2126 |
+
"prompt": "dock right nahi go to next window",
|
| 2127 |
+
"action": "switch_window",
|
| 2128 |
+
"device": "both",
|
| 2129 |
+
"risk": "safe"
|
| 2130 |
+
},
|
| 2131 |
+
{
|
| 2132 |
+
"prompt": "zara time sync kar dena, bahut der ho gayi",
|
| 2133 |
+
"action": "sync_time",
|
| 2134 |
+
"device": "both",
|
| 2135 |
+
"risk": "safe"
|
| 2136 |
+
},
|
| 2137 |
+
{
|
| 2138 |
+
"prompt": "mere liye show all windows",
|
| 2139 |
+
"action": "task_view",
|
| 2140 |
+
"device": "both",
|
| 2141 |
+
"risk": "safe"
|
| 2142 |
+
},
|
| 2143 |
+
{
|
| 2144 |
+
"prompt": "office ka kaam hai, touchpad off",
|
| 2145 |
+
"action": "touchpad_off",
|
| 2146 |
+
"device": "both",
|
| 2147 |
+
"risk": "caution"
|
| 2148 |
+
},
|
| 2149 |
+
{
|
| 2150 |
+
"prompt": "kindly touchpad on kaaro right now",
|
| 2151 |
+
"action": "touchpad_on",
|
| 2152 |
+
"device": "both",
|
| 2153 |
+
"risk": "safe"
|
| 2154 |
+
},
|
| 2155 |
+
{
|
| 2156 |
+
"prompt": "ek kaam karo trace the route to raspberrypi.local?",
|
| 2157 |
+
"action": "traceroute",
|
| 2158 |
+
"device": "both",
|
| 2159 |
+
"risk": "safe"
|
| 2160 |
+
},
|
| 2161 |
+
{
|
| 2162 |
+
"prompt": "transcribe note.wav in en abhi",
|
| 2163 |
+
"action": "transcribe_audio",
|
| 2164 |
+
"device": "both",
|
| 2165 |
+
"risk": "safe"
|
| 2166 |
+
},
|
| 2167 |
+
{
|
| 2168 |
+
"prompt": "data.csv ko 192.168.1.50 pe transfer kar do",
|
| 2169 |
+
"action": "transfer_files",
|
| 2170 |
+
"device": "both",
|
| 2171 |
+
"risk": "caution"
|
| 2172 |
+
},
|
| 2173 |
+
{
|
| 2174 |
+
"prompt": "i am done for today toh dictate dear sir?",
|
| 2175 |
+
"action": "type_text",
|
| 2176 |
+
"device": "both",
|
| 2177 |
+
"risk": "safe"
|
| 2178 |
+
},
|
| 2179 |
+
{
|
| 2180 |
+
"prompt": "ek kaam karo whitelist 172.16.0.9 fast",
|
| 2181 |
+
"action": "unban_ip",
|
| 2182 |
+
"device": "both",
|
| 2183 |
+
"risk": "caution"
|
| 2184 |
+
},
|
| 2185 |
+
{
|
| 2186 |
+
"prompt": "i am done for today toh ctrl z",
|
| 2187 |
+
"action": "undo",
|
| 2188 |
+
"device": "both",
|
| 2189 |
+
"risk": "safe"
|
| 2190 |
+
},
|
| 2191 |
+
{
|
| 2192 |
+
"prompt": "can you please zoom uninstall kr do",
|
| 2193 |
+
"action": "uninstall_app",
|
| 2194 |
+
"device": "both",
|
| 2195 |
+
"risk": "critical"
|
| 2196 |
+
},
|
| 2197 |
+
{
|
| 2198 |
+
"prompt": "remove glances package",
|
| 2199 |
+
"action": "uninstall_package",
|
| 2200 |
+
"device": "both",
|
| 2201 |
+
"risk": "critical"
|
| 2202 |
+
},
|
| 2203 |
+
{
|
| 2204 |
+
"prompt": "please order groceries online kar sakte ho",
|
| 2205 |
+
"action": "unknown",
|
| 2206 |
+
"device": "both",
|
| 2207 |
+
"risk": "safe"
|
| 2208 |
+
},
|
| 2209 |
+
{
|
| 2210 |
+
"prompt": "unmount /dev/sda1 thank you",
|
| 2211 |
+
"action": "unmount_drive",
|
| 2212 |
+
"device": "both",
|
| 2213 |
+
"risk": "caution"
|
| 2214 |
+
},
|
| 2215 |
+
{
|
| 2216 |
+
"prompt": "mere liye please restore my speaker audio kar sakte ho",
|
| 2217 |
+
"action": "unmute",
|
| 2218 |
+
"device": "both",
|
| 2219 |
+
"risk": "safe"
|
| 2220 |
+
},
|
| 2221 |
+
{
|
| 2222 |
+
"prompt": "ok laptop package list update karo, ghar ja raha hoon",
|
| 2223 |
+
"action": "update_packages",
|
| 2224 |
+
"device": "both",
|
| 2225 |
+
"risk": "safe"
|
| 2226 |
+
},
|
| 2227 |
+
{
|
| 2228 |
+
"prompt": "soun kam karo for me",
|
| 2229 |
+
"action": "volume_down",
|
| 2230 |
+
"device": "both",
|
| 2231 |
+
"risk": "safe"
|
| 2232 |
+
},
|
| 2233 |
+
{
|
| 2234 |
+
"prompt": "bhaiya vloume badhao please",
|
| 2235 |
+
"action": "volume_up",
|
| 2236 |
+
"device": "both",
|
| 2237 |
+
"risk": "safe"
|
| 2238 |
+
},
|
| 2239 |
+
{
|
| 2240 |
+
"prompt": "vpn se connect kar do",
|
| 2241 |
+
"action": "vpn_connect",
|
| 2242 |
+
"device": "both",
|
| 2243 |
+
"risk": "safe"
|
| 2244 |
+
},
|
| 2245 |
+
{
|
| 2246 |
+
"prompt": "please vpn connection band kro",
|
| 2247 |
+
"action": "vpn_disconnect",
|
| 2248 |
+
"device": "both",
|
| 2249 |
+
"risk": "caution"
|
| 2250 |
+
},
|
| 2251 |
+
{
|
| 2252 |
+
"prompt": "python3 server.py watch kijiye jaldi se",
|
| 2253 |
+
"action": "watch_command",
|
| 2254 |
+
"device": "both",
|
| 2255 |
+
"risk": "caution"
|
| 2256 |
+
},
|
| 2257 |
+
{
|
| 2258 |
+
"prompt": "zomato open karke , cred design_ritu/Star#999 se sign in kar do",
|
| 2259 |
+
"action": "web_login",
|
| 2260 |
+
"device": "both",
|
| 2261 |
+
"risk": "caution"
|
| 2262 |
+
},
|
| 2263 |
+
{
|
| 2264 |
+
"prompt": "internet pe lata mangeshkar search kr do turant",
|
| 2265 |
+
"action": "web_search",
|
| 2266 |
+
"device": "both",
|
| 2267 |
+
"risk": "safe"
|
| 2268 |
+
},
|
| 2269 |
+
{
|
| 2270 |
+
"prompt": "can you please disable this computer's wifi zara",
|
| 2271 |
+
"action": "wifi_off",
|
| 2272 |
+
"device": "both",
|
| 2273 |
+
"risk": "critical"
|
| 2274 |
+
},
|
| 2275 |
+
{
|
| 2276 |
+
"prompt": "zara ab wireless ko chalu kar dena abhi",
|
| 2277 |
+
"action": "wifi_on",
|
| 2278 |
+
"device": "both",
|
| 2279 |
+
"risk": "caution"
|
| 2280 |
+
},
|
| 2281 |
+
{
|
| 2282 |
+
"prompt": "hi youtube pe horror example where shaam dikhao",
|
| 2283 |
+
"action": "youtube_search",
|
| 2284 |
+
"device": "both",
|
| 2285 |
+
"risk": "safe"
|
| 2286 |
+
},
|
| 2287 |
+
{
|
| 2288 |
+
"prompt": "jaldi se text bada karo",
|
| 2289 |
+
"action": "zoom_in",
|
| 2290 |
+
"device": "both",
|
| 2291 |
+
"risk": "safe"
|
| 2292 |
+
},
|
| 2293 |
+
{
|
| 2294 |
+
"prompt": "chhota karke dikhao, main abhi aata hoon",
|
| 2295 |
+
"action": "zoom_out",
|
| 2296 |
+
"device": "both",
|
| 2297 |
+
"risk": "safe"
|
| 2298 |
+
},
|
| 2299 |
+
{
|
| 2300 |
+
"prompt": "padhai karni hai so zoom pehle jaisa karo",
|
| 2301 |
+
"action": "zoom_reset",
|
| 2302 |
+
"device": "both",
|
| 2303 |
+
"risk": "safe"
|
| 2304 |
+
}
|
| 2305 |
+
]
|
| 2306 |
+
}
|
ui/static/index.html
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<!doctype html>
|
| 2 |
+
<html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">
|
| 3 |
+
<title>Union Command Agent — test UI</title>
|
| 4 |
+
<style>
|
| 5 |
+
:root{--bg:#0f1115;--panel:#171a21;--panel2:#1e222b;--border:#2a2f3a;--text:#e6e8ee;--muted:#9aa3b2;--acc:#c51a4a;--ok:#6cc04a;--warn:#f2c94c;--bad:#ff6b6b;--code:#0b0d12}
|
| 6 |
+
*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--text);font:14px/1.45 system-ui,Segoe UI,Roboto,sans-serif}
|
| 7 |
+
header{position:sticky;top:0;z-index:5;background:var(--panel);border-bottom:1px solid var(--border);padding:10px 16px;display:flex;gap:14px;align-items:center;flex-wrap:wrap}
|
| 8 |
+
h1{font-size:16px;margin:0;display:flex;gap:8px;align-items:center}h1 .dot{width:10px;height:10px;border-radius:50%;background:var(--acc);box-shadow:0 0 8px var(--acc)}
|
| 9 |
+
.muted{color:var(--muted);font-size:12px}select,input[type=text],textarea,button{background:var(--code);color:var(--text);border:1px solid var(--border);border-radius:6px;padding:7px 10px;font:inherit}
|
| 10 |
+
button{background:var(--panel2);cursor:pointer}button:hover{border-color:var(--acc)}button.primary{background:var(--acc);border-color:var(--acc);color:#fff}
|
| 11 |
+
main{padding:14px 16px 60px;max-width:1500px;margin:0 auto;display:grid;grid-template-columns:340px 1fr;gap:14px}@media(max-width:1000px){main{grid-template-columns:1fr}}
|
| 12 |
+
.card{background:var(--panel);border:1px solid var(--border);border-radius:8px;padding:12px}.card h3{margin:0 0 8px;font-size:13px;text-transform:uppercase;letter-spacing:.05em;color:var(--muted)}
|
| 13 |
+
textarea{width:100%;min-height:380px;font-family:ui-monospace,Consolas,monospace;font-size:12.5px;resize:vertical}
|
| 14 |
+
.row{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin:6px 0}.single{display:flex;gap:8px}.single input{flex:1;font-size:15px}
|
| 15 |
+
table{width:100%;border-collapse:collapse;font-size:12.5px}th{text-align:left;padding:8px;font-size:11px;text-transform:uppercase;letter-spacing:.04em;color:var(--muted);background:var(--panel2);border-bottom:1px solid var(--border)}
|
| 16 |
+
td{padding:7px 8px;border-bottom:1px solid var(--border);vertical-align:top}code,pre{font-family:ui-monospace,Consolas,Menlo,monospace}pre{margin:0;white-space:pre-wrap;word-break:break-all;background:var(--code);padding:6px 8px;border-radius:5px;font-size:12px;max-height:160px;overflow:auto}
|
| 17 |
+
.pill{display:inline-block;font-size:11px;padding:1px 7px;border-radius:10px;border:1px solid var(--border);color:var(--muted)}.safe{color:var(--ok);border-color:#2f5a20}.caution{color:var(--warn);border-color:#5a4a1a}.critical{color:var(--bad);border-color:#5a2020}
|
| 18 |
+
.ok{color:var(--ok)}.bad{color:var(--bad)}.warn{color:var(--warn)}.act{color:var(--ok);font-weight:600}.conf{color:var(--muted)}
|
| 19 |
+
#stats{margin-left:auto;display:flex;gap:14px}kbd{border:1px solid var(--border);border-radius:4px;padding:0 5px;font-size:11px;color:var(--muted)}
|
| 20 |
+
</style></head><body>
|
| 21 |
+
<header><h1><span class="dot"></span>Union Command Agent</h1><span class="muted" id="info">loading…</span>
|
| 22 |
+
<label class="muted">platform <select id="plat"><option value="auto">auto (this machine)</option><option value="pi">Raspberry Pi / Linux</option><option value="windows">Windows</option></select></label>
|
| 23 |
+
<label class="muted"><input type="checkbox" id="exec"> execute (default: dry-run)</label>
|
| 24 |
+
<label class="muted"><input type="checkbox" id="caution"> allow caution actions</label>
|
| 25 |
+
<div id="stats" class="muted"></div></header>
|
| 26 |
+
<main>
|
| 27 |
+
<section class="card"><h3>Prompts (one per line — editable)</h3>
|
| 28 |
+
<div class="row"><button id="loadEx">Load examples</button><button id="loadAll">Load all activities</button><button id="clear">Clear</button><button class="primary" id="runAll">Run all ▶</button></div>
|
| 29 |
+
<textarea id="prompts" spellcheck="false" placeholder="volume 60 karo gpio 17 high karo wifi Airtel_5G se connect karo password Wifi@2024"></textarea>
|
| 30 |
+
<div class="muted" style="margin-top:6px">Tip: Run all is always dry-run. Use the <b>Execute</b> button per row to actually run one action (critical actions ask you to type the action name).</div></section>
|
| 31 |
+
<section>
|
| 32 |
+
<div class="card" style="margin-bottom:12px"><h3>Single prompt</h3><div class="single"><input type="text" id="one" placeholder="e.g. github.com kholo aur cred rahul99/gh@2024 se login karo"><button class="primary" id="runOne">Run</button></div></div>
|
| 33 |
+
<div class="card"><h3>Results <span class="muted" id="count"></span></h3>
|
| 34 |
+
<table><thead><tr><th style="width:22%">prompt</th><th style="width:22%">model → intent</th><th style="width:36%">executor plan</th><th>status</th></tr></thead><tbody id="tb"></tbody></table></div>
|
| 35 |
+
</section></main>
|
| 36 |
+
<script>
|
| 37 |
+
const $=s=>document.querySelector(s);const tb=$("#tb");let results=[];
|
| 38 |
+
fetch("/api/info").then(r=>r.json()).then(i=>{$("#info").textContent=`${i.actions} actions · ${(i.model_params/1e6).toFixed(2)}M params · running on ${i.host} (${i.os})`});
|
| 39 |
+
function esc(s){return String(s??"").replace(/[&<>"]/g,c=>({"&":"&","<":"<",">":">",'"':"""}[c]))}
|
| 40 |
+
function render(){tb.innerHTML=results.map((r,i)=>{const m=r.model,meta=r.meta,p=r.plan,run=r.run;const args=Object.entries(m).filter(([k])=>k!=="action").map(([k,v])=>`<div><span class="muted">${esc(k)}=</span>${esc(k==="password"?"••••••":JSON.stringify(v))}</div>`).join("");
|
| 41 |
+
const cmd=p.supported?`<pre>[${esc(p.kind)}] ${esc(p.command)}</pre>`:`<span class="warn">${esc(p.note)}</span>`;
|
| 42 |
+
let st=`<span class="pill">${r.gate.ok?"gate ok":"gated"}</span> <span class="muted">${esc(r.gate.reason)}</span>`;
|
| 43 |
+
if(run)st+=`<div class="${run.status==="ok"?"ok":run.status==="dry_run"?"muted":"bad"}"><b>${esc(run.status)}</b></div><pre>${esc(run.output)}</pre>`;
|
| 44 |
+
return `<tr><td>${esc(r.text)}<div class="muted">${esc(r.platform)} · ${meta.latency_ms} ms</div></td><td><div class="act">${esc(m.action)}</div>${args}<div class="conf">conf ${(meta.confidence*100).toFixed(1)}% <span class="pill ${esc(meta.risk)}">${esc(meta.risk)}</span>${r.spec.needs_sudo?' <span class="pill">sudo</span>':''}</div><div class="muted">alt: ${meta.alternatives.slice(1).map(a=>esc(a.action)+" "+(a.p*100).toFixed(0)+"%").join(", ")}</div></td><td>${cmd}</td><td>${st}<div style="margin-top:6px"><button data-i="${i}" class="ex">Execute</button></div></td></tr>`}).join("");
|
| 45 |
+
$("#count").textContent=results.length?`(${results.length})`:"";document.querySelectorAll(".ex").forEach(b=>b.onclick=()=>execute(+b.dataset.i));}
|
| 46 |
+
async function predict(text,execute=false,confirm=""){const r=await fetch("/api/predict",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({text,platform:$("#plat").value,execute,allow_caution:$("#caution").checked,confirm})});return r.json()}
|
| 47 |
+
async function execute(i){const r=results[i];let confirm="";if(r.plan.risk==="critical"){confirm=prompt(`CRITICAL action. Type the action name to confirm:\n${r.plan.action}\n\n${r.plan.command}`)||"";if(confirm!==r.plan.action){alert("not confirmed");return}}
|
| 48 |
+
results[i]=await predict(r.text,true,confirm);render()}
|
| 49 |
+
$("#runOne").onclick=async()=>{const t=$("#one").value.trim();if(!t)return;results.unshift(await predict(t,$("#exec").checked&&false));render()};
|
| 50 |
+
$("#one").addEventListener("keydown",e=>{if(e.key==="Enter")$("#runOne").click()});
|
| 51 |
+
$("#runAll").onclick=async()=>{const lines=$("#prompts").value.split("\n").map(s=>s.trim()).filter(Boolean);if(!lines.length)return;$("#runAll").disabled=true;results=[];render();const r=await fetch("/api/batch",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({texts:lines,platform:$("#plat").value})});results=await r.json();render();
|
| 52 |
+
const ok=results.filter(x=>x.model.action!=="unknown").length;$("#stats").innerHTML=`<span>${results.length} prompts</span><span>${ok} recognised</span><span>${results.filter(x=>x.plan.supported).length} runnable here</span>`;$("#runAll").disabled=false};
|
| 53 |
+
$("#loadEx").onclick=async()=>{const p=await (await fetch("/api/prompts")).json();$("#prompts").value=p.examples.join("\n")};
|
| 54 |
+
$("#loadAll").onclick=async()=>{const p=await (await fetch("/api/prompts")).json();$("#prompts").value=p.all_activities.map(x=>x.prompt).join("\n")};
|
| 55 |
+
$("#clear").onclick=()=>{$("#prompts").value="";results=[];render()};
|
| 56 |
+
</script></body></html>
|