machineconfig 5.37__py3-none-any.whl → 5.39__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of machineconfig might be problematic. Click here for more details.
- machineconfig/cluster/remote/script_execution.py +0 -1
- machineconfig/cluster/sessions_managers/zellij_utils/process_monitor.py +2 -4
- machineconfig/jobs/installer/check_installations.py +2 -2
- machineconfig/jobs/installer/custom_dev/nerfont_windows_helper.py +12 -12
- machineconfig/jobs/installer/installer_data.json +53 -2
- machineconfig/jobs/windows/archive/archive_pygraphviz.ps1 +1 -3
- machineconfig/profile/create_helper.py +26 -0
- machineconfig/profile/{create.py → create_links.py} +6 -6
- machineconfig/profile/{create_frontend.py → create_links_export.py} +6 -10
- machineconfig/profile/{shell.py → create_shell_profile.py} +12 -37
- machineconfig/scripts/linux/{share_cloud.sh → other/share_cloud.sh} +3 -0
- machineconfig/scripts/linux/z_ls +2 -2
- machineconfig/scripts/python/agents.py +0 -1
- machineconfig/scripts/python/ai/initai.py +3 -4
- machineconfig/scripts/python/ai/scripts/lint_and_type_check.ps1 +0 -1
- machineconfig/scripts/python/ai/scripts/lint_and_type_check.sh +0 -1
- machineconfig/scripts/python/ai/solutions/generic.py +1 -0
- machineconfig/scripts/python/croshell.py +12 -2
- machineconfig/scripts/python/croshell_helpers/start_slidev.py +2 -2
- machineconfig/scripts/python/devops.py +4 -21
- machineconfig/scripts/python/devops_helpers/cli_config.py +8 -8
- machineconfig/scripts/python/devops_helpers/cli_config_dotfile.py +3 -3
- machineconfig/scripts/python/devops_helpers/cli_nw.py +2 -1
- machineconfig/scripts/python/devops_helpers/cli_repos.py +1 -3
- machineconfig/scripts/python/devops_helpers/cli_self.py +22 -9
- machineconfig/scripts/python/devops_helpers/cli_share_server.py +109 -0
- machineconfig/scripts/python/devops_helpers/cli_terminal.py +35 -23
- machineconfig/scripts/python/devops_helpers/devops_status.py +7 -80
- machineconfig/scripts/python/devops_helpers/devops_update_repos.py +64 -45
- machineconfig/scripts/python/devops_helpers/themes/choose_pwsh_theme.ps1 +16 -15
- machineconfig/scripts/python/devops_navigator.py +183 -80
- machineconfig/scripts/python/fire_jobs.py +4 -1
- machineconfig/scripts/python/ftpx.py +0 -1
- machineconfig/scripts/python/helpers_fire/{fire_gemini.py → agentic_frameworks/fire_gemini.py} +12 -9
- machineconfig/scripts/python/helpers_fire/agentic_frameworks/fire_qwen.py +43 -0
- machineconfig/scripts/python/helpers_fire/fire_agents_help_launch.py +4 -4
- machineconfig/scripts/python/helpers_fire/template.ps1 +29 -0
- machineconfig/scripts/python/helpers_fire/template.sh +1 -1
- machineconfig/scripts/python/helpers_repos/cloud_repo_sync.py +3 -3
- machineconfig/scripts/python/interactive.py +5 -4
- machineconfig/scripts/python/nw/mount_nfs +1 -1
- machineconfig/scripts/python/nw/mount_nw_drive +1 -2
- machineconfig/scripts/python/repos_helpers/count_lines_frontend.py +1 -1
- machineconfig/scripts/python/repos_helpers/entrypoint.py +2 -2
- machineconfig/scripts/python/repos_helpers/record.py +2 -2
- machineconfig/scripts/python/sessions_helpers/sessions_multiprocess.py +3 -1
- machineconfig/scripts/windows/{mount_nfs.ps1 → mounts/mount_nfs.ps1} +1 -3
- machineconfig/scripts/windows/{mount_ssh.ps1 → mounts/mount_ssh.ps1} +1 -1
- machineconfig/settings/lf/linux/lfrc +4 -7
- machineconfig/settings/lf/windows/lfrc +4 -22
- machineconfig/settings/lvim/windows/archive/config_additional.lua +0 -6
- machineconfig/settings/pistol/pistol.conf +1 -1
- machineconfig/settings/shells/bash/init.sh +9 -8
- machineconfig/settings/shells/pwsh/init.ps1 +10 -4
- machineconfig/settings/svim/linux/init.toml +0 -4
- machineconfig/settings/svim/windows/init.toml +0 -3
- machineconfig/setup_linux/web_shortcuts/interactive.sh +22 -0
- machineconfig/setup_windows/web_shortcuts/interactive.ps1 +34 -1
- machineconfig/utils/files/dbms.py +4 -1
- machineconfig/utils/installer_utils/installer.py +12 -0
- machineconfig/utils/installer_utils/installer_abc.py +26 -9
- machineconfig/utils/installer_utils/installer_class.py +1 -1
- machineconfig/utils/io.py +0 -18
- machineconfig/utils/scheduler.py +3 -4
- machineconfig/utils/source_of_truth.py +2 -4
- machineconfig/utils/ssh.py +1 -1
- {machineconfig-5.37.dist-info → machineconfig-5.39.dist-info}/METADATA +8 -4
- {machineconfig-5.37.dist-info → machineconfig-5.39.dist-info}/RECORD +84 -114
- machineconfig/jobs/windows/start_terminal.ps1 +0 -6
- machineconfig/jobs/windows/startup_file.cmd +0 -2
- machineconfig/scripts/cloud/init.sh +0 -105
- machineconfig/scripts/linux/agents +0 -2
- machineconfig/scripts/linux/cloud +0 -2
- machineconfig/scripts/linux/croshell +0 -3
- machineconfig/scripts/linux/devops +0 -2
- machineconfig/scripts/linux/fire +0 -2
- machineconfig/scripts/linux/ftpx +0 -2
- machineconfig/scripts/linux/kill_process +0 -2
- machineconfig/scripts/linux/sessions +0 -2
- machineconfig/scripts/linux/start_terminals +0 -3
- machineconfig/scripts/windows/agents.ps1 +0 -1
- machineconfig/scripts/windows/cloud.ps1 +0 -1
- machineconfig/scripts/windows/croshell.ps1 +0 -1
- machineconfig/scripts/windows/devops.ps1 +0 -1
- machineconfig/scripts/windows/fire.ps1 +0 -1
- machineconfig/scripts/windows/ftpx.ps1 +0 -1
- machineconfig/scripts/windows/gpt.ps1 +0 -1
- machineconfig/scripts/windows/grep.ps1 +0 -2
- machineconfig/scripts/windows/kill_process.ps1 +0 -1
- machineconfig/scripts/windows/nano.ps1 +0 -3
- machineconfig/scripts/windows/pomodoro.ps1 +0 -1
- machineconfig/scripts/windows/reload_path.ps1 +0 -3
- machineconfig/scripts/windows/scheduler.ps1 +0 -1
- machineconfig/scripts/windows/sessions.ps1 +0 -1
- machineconfig/scripts/windows/snapshot.ps1 +0 -1
- machineconfig/scripts/windows/start_slidev.ps1 +0 -1
- machineconfig/scripts/windows/start_terminals.ps1 +0 -1
- machineconfig/scripts/windows/wsl_rdp_windows_port_forwarding.ps1 +0 -46
- machineconfig/scripts/windows/wsl_ssh_windows_port_forwarding.ps1 +0 -76
- machineconfig/setup_linux/machineconfig.sh +0 -20
- machineconfig/setup_windows/machineconfig.ps1 +0 -27
- /machineconfig/scripts/linux/{share_nfs → other/share_nfs} +0 -0
- /machineconfig/scripts/linux/{share_smb → other/share_smb} +0 -0
- /machineconfig/scripts/linux/{start_docker → other/start_docker} +0 -0
- /machineconfig/scripts/linux/{switch_ip → other/switch_ip} +0 -0
- /machineconfig/scripts/{windows/share_nfs.ps1 → python/helpers_fire/agentic_frameworks/__init__.py} +0 -0
- /machineconfig/scripts/python/helpers_fire/{fire_crush.json → agentic_frameworks/fire_crush.json} +0 -0
- /machineconfig/scripts/python/helpers_fire/{fire_crush.py → agentic_frameworks/fire_crush.py} +0 -0
- /machineconfig/scripts/python/helpers_fire/{fire_cursor_agents.py → agentic_frameworks/fire_cursor_agents.py} +0 -0
- /machineconfig/scripts/windows/{mount_nw.ps1 → mounts/mount_nw.ps1} +0 -0
- /machineconfig/scripts/windows/{mount_smb.ps1 → mounts/mount_smb.ps1} +0 -0
- /machineconfig/scripts/windows/{share_cloud.cmd → mounts/share_cloud.cmd} +0 -0
- /machineconfig/scripts/windows/{share_smb.ps1 → mounts/share_smb.ps1} +0 -0
- /machineconfig/scripts/windows/{unlock_bitlocker.ps1 → mounts/unlock_bitlocker.ps1} +0 -0
- {machineconfig-5.37.dist-info → machineconfig-5.39.dist-info}/WHEEL +0 -0
- {machineconfig-5.37.dist-info → machineconfig-5.39.dist-info}/entry_points.txt +0 -0
- {machineconfig-5.37.dist-info → machineconfig-5.39.dist-info}/top_level.txt +0 -0
|
@@ -174,48 +174,80 @@ class CommandTree(Tree[CommandInfo]):
|
|
|
174
174
|
command="devops repos",
|
|
175
175
|
parent="devops",
|
|
176
176
|
is_group=True,
|
|
177
|
-
module_path="machineconfig.scripts.python.
|
|
177
|
+
module_path="machineconfig.scripts.python.devops_helpers.cli_repos"
|
|
178
178
|
))
|
|
179
179
|
|
|
180
180
|
# repos subcommands
|
|
181
|
-
|
|
181
|
+
repos_node.add("🚀 push - Push changes across repositories", data=CommandInfo(
|
|
182
|
+
name="push",
|
|
183
|
+
description="Push changes across repositories",
|
|
184
|
+
command="devops repos push",
|
|
185
|
+
parent="repos",
|
|
186
|
+
help_text="devops repos push --directory <dir> --recursive --no-sync"
|
|
187
|
+
))
|
|
188
|
+
|
|
189
|
+
repos_node.add("⬇️ pull - Pull changes across repositories", data=CommandInfo(
|
|
190
|
+
name="pull",
|
|
191
|
+
description="Pull changes across repositories",
|
|
192
|
+
command="devops repos pull",
|
|
193
|
+
parent="repos",
|
|
194
|
+
help_text="devops repos pull --directory <dir> --recursive --no-sync"
|
|
195
|
+
))
|
|
196
|
+
|
|
197
|
+
repos_node.add("💾 commit - Commit changes across repositories", data=CommandInfo(
|
|
198
|
+
name="commit",
|
|
199
|
+
description="Commit changes across repositories",
|
|
200
|
+
command="devops repos commit",
|
|
201
|
+
parent="repos",
|
|
202
|
+
help_text="devops repos commit --directory <dir> --recursive --no-sync"
|
|
203
|
+
))
|
|
204
|
+
|
|
205
|
+
repos_node.add("🔄 sync - Sync changes across repositories", data=CommandInfo(
|
|
182
206
|
name="sync",
|
|
183
|
-
description="
|
|
207
|
+
description="Pull, commit, and push changes across repositories",
|
|
184
208
|
command="devops repos sync",
|
|
185
209
|
parent="repos",
|
|
210
|
+
help_text="devops repos sync --directory <dir> --recursive --no-sync"
|
|
211
|
+
))
|
|
212
|
+
|
|
213
|
+
mirror_node = repos_node.add("🔄 mirror - Manage repository specifications", data=CommandInfo(
|
|
214
|
+
name="mirror",
|
|
215
|
+
description="Manage repository specifications and syncing",
|
|
216
|
+
command="devops repos mirror",
|
|
217
|
+
parent="repos",
|
|
186
218
|
is_group=True
|
|
187
219
|
))
|
|
188
220
|
|
|
189
|
-
|
|
221
|
+
mirror_node.add("📝 capture - Record repositories into repos.json", data=CommandInfo(
|
|
190
222
|
name="capture",
|
|
191
223
|
description="Record repositories into a repos.json specification",
|
|
192
|
-
command="devops repos
|
|
193
|
-
parent="
|
|
194
|
-
help_text="devops repos
|
|
224
|
+
command="devops repos mirror capture",
|
|
225
|
+
parent="mirror",
|
|
226
|
+
help_text="devops repos mirror capture --directory <dir> --cloud <cloud>"
|
|
195
227
|
))
|
|
196
228
|
|
|
197
|
-
|
|
229
|
+
mirror_node.add("📥 clone - Clone repositories from repos.json", data=CommandInfo(
|
|
198
230
|
name="clone",
|
|
199
231
|
description="Clone repositories described by repos.json",
|
|
200
|
-
command="devops repos
|
|
201
|
-
parent="
|
|
202
|
-
help_text="devops repos
|
|
232
|
+
command="devops repos mirror clone",
|
|
233
|
+
parent="mirror",
|
|
234
|
+
help_text="devops repos mirror clone --directory <dir> --cloud <cloud>"
|
|
203
235
|
))
|
|
204
236
|
|
|
205
|
-
|
|
237
|
+
mirror_node.add("🔀 checkout-to-commit - Check out specific commits", data=CommandInfo(
|
|
206
238
|
name="checkout-to-commit",
|
|
207
239
|
description="Check out specific commits listed in specification",
|
|
208
|
-
command="devops repos
|
|
209
|
-
parent="
|
|
210
|
-
help_text="devops repos
|
|
240
|
+
command="devops repos mirror checkout-to-commit",
|
|
241
|
+
parent="mirror",
|
|
242
|
+
help_text="devops repos mirror checkout-to-commit --directory <dir> --cloud <cloud>"
|
|
211
243
|
))
|
|
212
244
|
|
|
213
|
-
|
|
245
|
+
mirror_node.add("🔀 checkout-to-branch - Check out to main branch", data=CommandInfo(
|
|
214
246
|
name="checkout-to-branch",
|
|
215
247
|
description="Check out to the main branch defined in specification",
|
|
216
|
-
command="devops repos
|
|
217
|
-
parent="
|
|
218
|
-
help_text="devops repos
|
|
248
|
+
command="devops repos mirror checkout-to-branch",
|
|
249
|
+
parent="mirror",
|
|
250
|
+
help_text="devops repos mirror checkout-to-branch --directory <dir> --cloud <cloud>"
|
|
219
251
|
))
|
|
220
252
|
|
|
221
253
|
repos_node.add("🔍 analyze - Analyze repositories", data=CommandInfo(
|
|
@@ -226,6 +258,30 @@ class CommandTree(Tree[CommandInfo]):
|
|
|
226
258
|
help_text="devops repos analyze --directory <dir>"
|
|
227
259
|
))
|
|
228
260
|
|
|
261
|
+
repos_node.add("🔐 secure - Securely sync git repository", data=CommandInfo(
|
|
262
|
+
name="secure",
|
|
263
|
+
description="Securely sync git repository to/from cloud with encryption",
|
|
264
|
+
command="devops repos secure",
|
|
265
|
+
parent="repos",
|
|
266
|
+
help_text="devops repos secure <path> --cloud <cloud> --encrypt --decrypt"
|
|
267
|
+
))
|
|
268
|
+
|
|
269
|
+
repos_node.add("🎬 viz - Visualize repository activity", data=CommandInfo(
|
|
270
|
+
name="viz",
|
|
271
|
+
description="Visualize repository activity using Gource",
|
|
272
|
+
command="devops repos viz",
|
|
273
|
+
parent="repos",
|
|
274
|
+
help_text="devops repos viz --repo <path> --output <file> --resolution <res> --seconds-per-day <spd>"
|
|
275
|
+
))
|
|
276
|
+
|
|
277
|
+
repos_node.add("🧹 cleanup - Clean repository directories", data=CommandInfo(
|
|
278
|
+
name="cleanup",
|
|
279
|
+
description="Clean repository directories from cache files",
|
|
280
|
+
command="devops repos cleanup",
|
|
281
|
+
parent="repos",
|
|
282
|
+
help_text="devops repos cleanup --repo <path> --recursive"
|
|
283
|
+
))
|
|
284
|
+
|
|
229
285
|
# config subcommands
|
|
230
286
|
config_node = devops_node.add("⚙️ config - Configuration management", data=CommandInfo(
|
|
231
287
|
name="config",
|
|
@@ -267,6 +323,14 @@ class CommandTree(Tree[CommandInfo]):
|
|
|
267
323
|
help_text="devops config shell <copy|reference>"
|
|
268
324
|
))
|
|
269
325
|
|
|
326
|
+
config_node.add("🔗 pwsh_theme - Configure PowerShell theme", data=CommandInfo(
|
|
327
|
+
name="pwsh_theme",
|
|
328
|
+
description="Configure your PowerShell theme",
|
|
329
|
+
command="devops config pwsh_theme",
|
|
330
|
+
parent="config",
|
|
331
|
+
help_text="devops config pwsh_theme"
|
|
332
|
+
))
|
|
333
|
+
|
|
270
334
|
# data subcommands
|
|
271
335
|
data_node = devops_node.add("💾 data - Data operations", data=CommandInfo(
|
|
272
336
|
name="data",
|
|
@@ -309,28 +373,28 @@ class CommandTree(Tree[CommandInfo]):
|
|
|
309
373
|
help_text="devops network share-terminal"
|
|
310
374
|
))
|
|
311
375
|
|
|
312
|
-
network_node.add("
|
|
313
|
-
name="
|
|
314
|
-
description="SSH
|
|
315
|
-
command="devops network
|
|
376
|
+
network_node.add("� install_ssh_server - Install SSH server", data=CommandInfo(
|
|
377
|
+
name="install_ssh_server",
|
|
378
|
+
description="Install SSH server",
|
|
379
|
+
command="devops network install_ssh_server",
|
|
316
380
|
parent="network",
|
|
317
|
-
help_text="devops network
|
|
381
|
+
help_text="devops network install_ssh_server"
|
|
318
382
|
))
|
|
319
383
|
|
|
320
|
-
network_node.add("
|
|
321
|
-
name="
|
|
322
|
-
description="SSH
|
|
323
|
-
command="devops network
|
|
384
|
+
network_node.add("� add_ssh_key - Add SSH public key", data=CommandInfo(
|
|
385
|
+
name="add_ssh_key",
|
|
386
|
+
description="Add SSH public key to this machine",
|
|
387
|
+
command="devops network add_ssh_key",
|
|
324
388
|
parent="network",
|
|
325
|
-
help_text="devops network
|
|
389
|
+
help_text="devops network add_ssh_key --path <file> --choose --value --github <username>"
|
|
326
390
|
))
|
|
327
391
|
|
|
328
|
-
network_node.add("
|
|
329
|
-
name="
|
|
330
|
-
description="SSH
|
|
331
|
-
command="devops network
|
|
392
|
+
network_node.add("�️ add_ssh_identity - Add SSH identity", data=CommandInfo(
|
|
393
|
+
name="add_ssh_identity",
|
|
394
|
+
description="Add SSH identity (private key) to this machine",
|
|
395
|
+
command="devops network add_ssh_identity",
|
|
332
396
|
parent="network",
|
|
333
|
-
help_text="devops network
|
|
397
|
+
help_text="devops network add_ssh_identity"
|
|
334
398
|
))
|
|
335
399
|
|
|
336
400
|
# self subcommands
|
|
@@ -344,7 +408,7 @@ class CommandTree(Tree[CommandInfo]):
|
|
|
344
408
|
|
|
345
409
|
self_node.add("🔄 update - Update essential repos", data=CommandInfo(
|
|
346
410
|
name="update",
|
|
347
|
-
description="
|
|
411
|
+
description="Update essential repos",
|
|
348
412
|
command="devops self update",
|
|
349
413
|
parent="self",
|
|
350
414
|
help_text="devops self update"
|
|
@@ -352,7 +416,7 @@ class CommandTree(Tree[CommandInfo]):
|
|
|
352
416
|
|
|
353
417
|
self_node.add("🤖 interactive - Interactive configuration", data=CommandInfo(
|
|
354
418
|
name="interactive",
|
|
355
|
-
description="
|
|
419
|
+
description="Interactive configuration of machine",
|
|
356
420
|
command="devops self interactive",
|
|
357
421
|
parent="self",
|
|
358
422
|
help_text="devops self interactive"
|
|
@@ -360,7 +424,7 @@ class CommandTree(Tree[CommandInfo]):
|
|
|
360
424
|
|
|
361
425
|
self_node.add("📊 status - Machine status", data=CommandInfo(
|
|
362
426
|
name="status",
|
|
363
|
-
description="
|
|
427
|
+
description="Status of machine, shell profile, apps, symlinks, dotfiles, etc.",
|
|
364
428
|
command="devops self status",
|
|
365
429
|
parent="self",
|
|
366
430
|
help_text="devops self status"
|
|
@@ -368,12 +432,20 @@ class CommandTree(Tree[CommandInfo]):
|
|
|
368
432
|
|
|
369
433
|
self_node.add("📋 clone - Clone machineconfig", data=CommandInfo(
|
|
370
434
|
name="clone",
|
|
371
|
-
description="
|
|
435
|
+
description="Clone machineconfig locally and incorporate to shell profile",
|
|
372
436
|
command="devops self clone",
|
|
373
437
|
parent="self",
|
|
374
438
|
help_text="devops self clone"
|
|
375
439
|
))
|
|
376
440
|
|
|
441
|
+
self_node.add("📚 navigate - Navigate command structure", data=CommandInfo(
|
|
442
|
+
name="navigate",
|
|
443
|
+
description="Navigate command structure with TUI",
|
|
444
|
+
command="devops self navigate",
|
|
445
|
+
parent="self",
|
|
446
|
+
help_text="devops self navigate"
|
|
447
|
+
))
|
|
448
|
+
|
|
377
449
|
# fire command
|
|
378
450
|
self.root.add("🔥 fire - Fire jobs execution", data=CommandInfo(
|
|
379
451
|
name="fire",
|
|
@@ -398,7 +470,7 @@ class CommandTree(Tree[CommandInfo]):
|
|
|
398
470
|
description="Create a new AI agent",
|
|
399
471
|
command="agents create",
|
|
400
472
|
parent="agents",
|
|
401
|
-
help_text="agents create"
|
|
473
|
+
help_text="agents create --context-path <file> --keyword-search <term> --filename-pattern <pattern> --agent <type> --machine <target> --model <model> --provider <provider> --prompt <text> --prompt-path <file> --job-name <name> --tasks-per-prompt <num> --separate-prompt-from-context --output-path <file> --agents-dir <dir>"
|
|
402
474
|
))
|
|
403
475
|
|
|
404
476
|
agents_node.add("📦 collect - Collect agent data", data=CommandInfo(
|
|
@@ -406,15 +478,31 @@ class CommandTree(Tree[CommandInfo]):
|
|
|
406
478
|
description="Collect agent data",
|
|
407
479
|
command="agents collect",
|
|
408
480
|
parent="agents",
|
|
409
|
-
help_text="agents collect"
|
|
481
|
+
help_text="agents collect --agent-dir <dir> --output-path <file> --separator <sep>"
|
|
410
482
|
))
|
|
411
483
|
|
|
412
|
-
agents_node.add("📝
|
|
413
|
-
name="
|
|
484
|
+
agents_node.add("📝 make-template - Create agent template", data=CommandInfo(
|
|
485
|
+
name="make-template",
|
|
414
486
|
description="Create a template for fire agents",
|
|
415
|
-
command="agents
|
|
487
|
+
command="agents make-template",
|
|
416
488
|
parent="agents",
|
|
417
|
-
help_text="agents
|
|
489
|
+
help_text="agents make-template"
|
|
490
|
+
))
|
|
491
|
+
|
|
492
|
+
agents_node.add("⚙️ make-config - Initialize AI configurations", data=CommandInfo(
|
|
493
|
+
name="make-config",
|
|
494
|
+
description="Initialize AI configurations in the current repository",
|
|
495
|
+
command="agents make-config",
|
|
496
|
+
parent="agents",
|
|
497
|
+
help_text="agents make-config"
|
|
498
|
+
))
|
|
499
|
+
|
|
500
|
+
agents_node.add("📝 make-todo - Generate todo markdown", data=CommandInfo(
|
|
501
|
+
name="make-todo",
|
|
502
|
+
description="Generate a markdown file listing all Python files in the repo",
|
|
503
|
+
command="agents make-todo",
|
|
504
|
+
parent="agents",
|
|
505
|
+
help_text="agents make-todo"
|
|
418
506
|
))
|
|
419
507
|
|
|
420
508
|
# sessions command
|
|
@@ -439,7 +527,7 @@ class CommandTree(Tree[CommandInfo]):
|
|
|
439
527
|
description="Run session layout",
|
|
440
528
|
command="sessions run",
|
|
441
529
|
parent="sessions",
|
|
442
|
-
help_text="sessions run"
|
|
530
|
+
help_text="sessions run --layout-path <file> --max-tabs <num> --max-layouts <num> --sleep-inbetween <sec> --monitor --parallel --kill-upon-completion --choose <names> --choose-interactively"
|
|
443
531
|
))
|
|
444
532
|
|
|
445
533
|
sessions_node.add("⚖️ balance-load - Balance load", data=CommandInfo(
|
|
@@ -447,56 +535,71 @@ class CommandTree(Tree[CommandInfo]):
|
|
|
447
535
|
description="Balance load across sessions",
|
|
448
536
|
command="sessions balance-load",
|
|
449
537
|
parent="sessions",
|
|
450
|
-
help_text="sessions balance-load"
|
|
538
|
+
help_text="sessions balance-load --layout-path <file> --max-thresh <num> --thresh-type <number|weight> --breaking-method <moreLayouts|combineTabs> --output-path <file>"
|
|
451
539
|
))
|
|
452
540
|
|
|
453
|
-
#
|
|
454
|
-
|
|
455
|
-
name="
|
|
456
|
-
description="
|
|
457
|
-
command="",
|
|
458
|
-
is_group=True
|
|
541
|
+
# cloud command
|
|
542
|
+
cloud_node = self.root.add("☁️ cloud - Cloud storage operations", data=CommandInfo(
|
|
543
|
+
name="cloud",
|
|
544
|
+
description="Cloud storage operations",
|
|
545
|
+
command="cloud",
|
|
546
|
+
is_group=True,
|
|
547
|
+
module_path="machineconfig.scripts.python.cloud"
|
|
548
|
+
))
|
|
549
|
+
|
|
550
|
+
cloud_node.add("🔄 sync - Synchronize with cloud", data=CommandInfo(
|
|
551
|
+
name="sync",
|
|
552
|
+
description="Synchronize files/folders between local and cloud storage",
|
|
553
|
+
command="cloud sync",
|
|
554
|
+
parent="cloud",
|
|
555
|
+
help_text="cloud sync <source> <target> --cloud <provider> --recursive --exclude <patterns>"
|
|
459
556
|
))
|
|
460
557
|
|
|
461
|
-
|
|
462
|
-
name="
|
|
463
|
-
description="
|
|
464
|
-
command="
|
|
465
|
-
parent="
|
|
466
|
-
help_text="
|
|
558
|
+
cloud_node.add("📤 copy - Copy to/from cloud", data=CommandInfo(
|
|
559
|
+
name="copy",
|
|
560
|
+
description="Copy files/folders to/from cloud storage",
|
|
561
|
+
command="cloud copy",
|
|
562
|
+
parent="cloud",
|
|
563
|
+
help_text="cloud copy <source> <target> --cloud <provider> --recursive --exclude <patterns>"
|
|
467
564
|
))
|
|
468
565
|
|
|
469
|
-
|
|
470
|
-
name="
|
|
471
|
-
description="
|
|
472
|
-
command="
|
|
473
|
-
parent="
|
|
474
|
-
help_text="
|
|
566
|
+
cloud_node.add("🔗 mount - Mount cloud storage", data=CommandInfo(
|
|
567
|
+
name="mount",
|
|
568
|
+
description="Mount cloud storage as local drive",
|
|
569
|
+
command="cloud mount",
|
|
570
|
+
parent="cloud",
|
|
571
|
+
help_text="cloud mount <remote> <mount_point> --cloud <provider> --daemon --allow-other"
|
|
475
572
|
))
|
|
476
573
|
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
574
|
+
# croshell command
|
|
575
|
+
self.root.add("� croshell - Interactive shell", data=CommandInfo(
|
|
576
|
+
name="croshell",
|
|
577
|
+
description="Interactive shell with various options",
|
|
578
|
+
command="croshell",
|
|
579
|
+
is_group=False,
|
|
580
|
+
module_path="machineconfig.scripts.python.croshell",
|
|
581
|
+
help_text="croshell --python --fzf --ve <env> --profile <profile> --read <file> --jupyter --streamlit --visidata"
|
|
483
582
|
))
|
|
484
583
|
|
|
485
|
-
|
|
584
|
+
# ftpx command
|
|
585
|
+
self.root.add("📡 ftpx - File transfer", data=CommandInfo(
|
|
586
|
+
name="ftpx",
|
|
587
|
+
description="File transfer between machines",
|
|
588
|
+
command="ftpx",
|
|
589
|
+
is_group=False,
|
|
590
|
+
module_path="machineconfig.scripts.python.ftpx",
|
|
591
|
+
help_text="ftpx <source> <target> --recursive --zipFirst --cloud"
|
|
592
|
+
))
|
|
593
|
+
|
|
594
|
+
# kill_process command
|
|
595
|
+
self.root.add("💀 kill_process - Kill processes", data=CommandInfo(
|
|
486
596
|
name="kill_process",
|
|
487
597
|
description="Kill running processes",
|
|
488
598
|
command="kill_process",
|
|
489
|
-
|
|
599
|
+
is_group=False,
|
|
600
|
+
module_path="machineconfig.utils.procs",
|
|
490
601
|
help_text="kill_process"
|
|
491
602
|
))
|
|
492
|
-
|
|
493
|
-
utils_node.add("🎨 choose_wezterm_theme - Choose terminal theme", data=CommandInfo(
|
|
494
|
-
name="choose_wezterm_theme",
|
|
495
|
-
description="Choose WezTerm theme interactively",
|
|
496
|
-
command="choose_wezterm_theme",
|
|
497
|
-
parent="utilities",
|
|
498
|
-
help_text="choose_wezterm_theme"
|
|
499
|
-
))
|
|
500
603
|
|
|
501
604
|
|
|
502
605
|
class CommandDetail(Static):
|
|
@@ -46,7 +46,10 @@ def route(args: FireJobArgs, fire_args: str = "") -> None:
|
|
|
46
46
|
# ========================= preparing kwargs_dict
|
|
47
47
|
if choice_file.suffix == ".py":
|
|
48
48
|
kwargs_dict = extract_kwargs(args) # This now returns empty dict, but kept for compatibility
|
|
49
|
-
|
|
49
|
+
ve_root = args.ve or ve_root_from_file
|
|
50
|
+
if ve_root is None:
|
|
51
|
+
raise ValueError(f"Could not determine virtual environment for file {choice_file}. Please ensure it is within a recognized project structure or specify the `--ve` option.")
|
|
52
|
+
activate_ve_line = get_ve_activate_line(ve_root=ve_root)
|
|
50
53
|
else:
|
|
51
54
|
activate_ve_line = ""
|
|
52
55
|
kwargs_dict = {}
|
machineconfig/scripts/python/helpers_fire/{fire_gemini.py → agentic_frameworks/fire_gemini.py}
RENAMED
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
from pathlib import Path
|
|
3
3
|
import shlex
|
|
4
4
|
from machineconfig.scripts.python.helpers_fire.fire_agents_helper_types import MATCHINE
|
|
5
|
-
from typing import Optional
|
|
5
|
+
from typing import Optional, Literal
|
|
6
6
|
|
|
7
7
|
|
|
8
|
-
def fire_gemini(api_key: Optional[str], prompt_path: Path,
|
|
9
|
-
|
|
8
|
+
def fire_gemini(api_key: Optional[str], model: Literal["gemini-2.5-pro"], provider: Literal["google"], machine: MATCHINE, prompt_path: Path, repo_root: Path) -> str:
|
|
9
|
+
_ = provider
|
|
10
10
|
# model = "gemini-2.5-flash-lite"
|
|
11
11
|
# model = None # auto-select
|
|
12
12
|
# if model is None:
|
|
@@ -27,14 +27,17 @@ def fire_gemini(api_key: Optional[str], prompt_path: Path, machine: MATCHINE) ->
|
|
|
27
27
|
{define_api_key}
|
|
28
28
|
echo "Using Gemini API key $GEMINI_API_KEY"
|
|
29
29
|
gemini {model_arg} --yolo --prompt {safe_path}
|
|
30
|
-
|
|
30
|
+
"""
|
|
31
|
+
|
|
32
|
+
|
|
31
33
|
case "docker":
|
|
32
|
-
|
|
34
|
+
assert api_key is not None, "When using docker, api_key must be provided."
|
|
35
|
+
cmd = f"""
|
|
33
36
|
docker run -it --rm \
|
|
34
|
-
-e GEMINI_API_KEY="
|
|
35
|
-
-v "
|
|
36
|
-
-w "/workspace/
|
|
37
|
-
|
|
37
|
+
-e GEMINI_API_KEY="{api_key}" \
|
|
38
|
+
-v "{repo_root}:/workspace/{repo_root.name}" \
|
|
39
|
+
-w "/workspace/{repo_root.name}" \
|
|
40
|
+
statistician/machineconfig:latest \
|
|
38
41
|
gemini --prompt "$PATH_PROMPT"
|
|
39
42
|
"""
|
|
40
43
|
return cmd
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
|
|
2
|
+
from pathlib import Path
|
|
3
|
+
import shlex
|
|
4
|
+
from machineconfig.scripts.python.helpers_fire.fire_agents_helper_types import MATCHINE
|
|
5
|
+
from typing import Optional, Literal
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
def fire_qwen(config_dir: Optional[str], model: Literal["qwen"], provider: Literal["qwen"], machine: MATCHINE, prompt_path: Path, repo_root: Path) -> str:
|
|
9
|
+
# assert model == "qwen", "Only qwen is supported currently."
|
|
10
|
+
# assert provider == "qwen", "Only qwen is supported currently."
|
|
11
|
+
# model = "qwen"
|
|
12
|
+
# model = "gemini-2.5-flash-lite"
|
|
13
|
+
# model = None # auto-select
|
|
14
|
+
# if model is None:
|
|
15
|
+
# model_arg = ""
|
|
16
|
+
# else:
|
|
17
|
+
_ = provider
|
|
18
|
+
# model_arg = f"--model {shlex.quote(model)}"
|
|
19
|
+
# Need a real shell for the pipeline; otherwise '| gemini ...' is passed as args to 'cat'
|
|
20
|
+
safe_path = shlex.quote(str(prompt_path))
|
|
21
|
+
|
|
22
|
+
match machine:
|
|
23
|
+
case "local":
|
|
24
|
+
# Export the environment variable so it's available to subshells
|
|
25
|
+
cmd = f"""
|
|
26
|
+
qwen --yolo --prompt {safe_path}
|
|
27
|
+
"""
|
|
28
|
+
case "docker":
|
|
29
|
+
assert config_dir is not None, "When using docker, config_dir must be provided."
|
|
30
|
+
assert Path(config_dir).exists(), f"Provided config_dir {config_dir} does not exist."
|
|
31
|
+
oauth_creds = Path(config_dir).joinpath("oauth_creds.json")
|
|
32
|
+
settings = Path(config_dir).joinpath("settings.json")
|
|
33
|
+
|
|
34
|
+
cmd = f"""
|
|
35
|
+
docker run -it --rm \
|
|
36
|
+
-v "{repo_root}:/workspace/{repo_root.name}" \
|
|
37
|
+
-v {shlex.quote(str(oauth_creds))}:/root/.qwen/oauth_creds.json \
|
|
38
|
+
-v {shlex.quote(str(settings))}:/root/.qwen/settings.json \
|
|
39
|
+
-w "/workspace/{repo_root.name}" \
|
|
40
|
+
statistician/machineconfig:latest \
|
|
41
|
+
qwen --prompt "$PATH_PROMPT"
|
|
42
|
+
"""
|
|
43
|
+
return cmd
|
|
@@ -66,14 +66,14 @@ sleep 0.1
|
|
|
66
66
|
assert provider == "google", "Gemini agent only works with google provider."
|
|
67
67
|
api_keys = get_api_keys(provider="google")
|
|
68
68
|
api_key = api_keys[idx % len(api_keys)] if len(api_keys) > 0 else None
|
|
69
|
-
from machineconfig.scripts.python.helpers_fire.fire_gemini import fire_gemini
|
|
70
|
-
cmd = fire_gemini(api_key=api_key, prompt_path=prompt_path, machine=machine)
|
|
69
|
+
from machineconfig.scripts.python.helpers_fire.agentic_frameworks.fire_gemini import fire_gemini
|
|
70
|
+
cmd = fire_gemini(api_key=api_key, prompt_path=prompt_path, machine=machine, model="gemini-2.5-pro", provider="google", repo_root=repo_root)
|
|
71
71
|
case "cursor-agent":
|
|
72
|
-
from machineconfig.scripts.python.helpers_fire.fire_cursor_agents import fire_cursor
|
|
72
|
+
from machineconfig.scripts.python.helpers_fire.agentic_frameworks.fire_cursor_agents import fire_cursor
|
|
73
73
|
cmd = fire_cursor(prompt_path=prompt_path, machine=machine, api_key=None)
|
|
74
74
|
raise NotImplementedError("Cursor agent is not implemented yet, api key missing")
|
|
75
75
|
case "crush":
|
|
76
|
-
from machineconfig.scripts.python.helpers_fire.fire_crush import fire_crush
|
|
76
|
+
from machineconfig.scripts.python.helpers_fire.agentic_frameworks.fire_crush import fire_crush
|
|
77
77
|
api_keys = get_api_keys(provider=provider)
|
|
78
78
|
api_key = api_keys[idx % len(api_keys)] if len(api_keys) > 0 else None
|
|
79
79
|
cmd = fire_crush(api_key=api_key, prompt_path=prompt_path, machine=machine, repo_root=repo_root, model=model, provider=provider)
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
#Requires -Version 5.1
|
|
2
|
+
|
|
3
|
+
$JOB_NAME = "outpatient_mapping"
|
|
4
|
+
$REPO_ROOT = "$HOME/code/ machineconfig"
|
|
5
|
+
$CONTEXT_PATH = "$REPO_ROOT/src/machineconfig/scripts/python/fire_jobs.py"
|
|
6
|
+
$PROMPT_PATH = "$REPO_ROOT/src/machineconfig/scripts/python/helpers_fire/prompt.txt"
|
|
7
|
+
|
|
8
|
+
$AGENTS_DIR = "$REPO_ROOT/.ai/agents/$JOB_NAME"
|
|
9
|
+
$LAYOUT_PATH_UNBALANCED = "$REPO_ROOT/.ai/agents/$JOB_NAME/layout_unbalanced.json"
|
|
10
|
+
|
|
11
|
+
agents create `
|
|
12
|
+
--context-path "$CONTEXT_PATH" `
|
|
13
|
+
--tasks-per-prompt 1 `
|
|
14
|
+
--machine docker `
|
|
15
|
+
--agent crush `
|
|
16
|
+
--model "zai/glm-4.6" `
|
|
17
|
+
--provider openrouter `
|
|
18
|
+
--separator 'def ' `
|
|
19
|
+
--prompt-path "$PROMPT_PATH" `
|
|
20
|
+
--output-path "$LAYOUT_PATH_UNBALANCED" `
|
|
21
|
+
--agents-dir "$AGENTS_DIR"
|
|
22
|
+
|
|
23
|
+
# $LAYOUT_BALANCED_PATH = "$REPO_ROOT/.ai/agents/$JOB_NAME/layout_balanced.json"
|
|
24
|
+
# sessions balance-load $LAYOUT_PATH --max-thresh 6 --breaking-method moreLayouts --thresh-type number --output-path $LAYOUT_BALANCED_PATH
|
|
25
|
+
# sessions run $LAYOUT_BALANCED_PATH --kill-upon-completion
|
|
26
|
+
|
|
27
|
+
sessions run $LAYOUT_PATH_UNBALANCED
|
|
28
|
+
|
|
29
|
+
# agents collect $AGENTS_DIR "$REPO_ROOT/.ai/agents/$JOB_NAME/collected.txt"
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
# set -e # Exit immediately if a command exits with a non-zero status.
|
|
4
4
|
|
|
5
5
|
JOB_NAME="outpatient_mapping"
|
|
6
|
-
REPO_ROOT="$HOME/code/machineconfig"
|
|
6
|
+
REPO_ROOT="$HOME/code/ machineconfig"
|
|
7
7
|
CONTEXT_PATH="$REPO_ROOT/src/machineconfig/scripts/python/fire_jobs.py"
|
|
8
8
|
PROMPT_PATH="$REPO_ROOT/src/machineconfig/scripts/python/helpers_fire/prompt.txt"
|
|
9
9
|
|
|
@@ -5,7 +5,7 @@ import typer
|
|
|
5
5
|
|
|
6
6
|
from machineconfig.utils.path_extended import PathExtended
|
|
7
7
|
from machineconfig.utils.terminal import Response
|
|
8
|
-
from machineconfig.utils.source_of_truth import
|
|
8
|
+
from machineconfig.utils.source_of_truth import CONFIG_ROOT, DEFAULTS_PATH
|
|
9
9
|
from machineconfig.utils.code import get_shell_file_executing_python_script, write_shell_script_to_file
|
|
10
10
|
|
|
11
11
|
import platform
|
|
@@ -38,8 +38,8 @@ def main(
|
|
|
38
38
|
repo_local_root = PathExtended.cwd() if repo is None else PathExtended(repo).expanduser().absolute()
|
|
39
39
|
repo_local_obj = git.Repo(repo_local_root, search_parent_directories=True)
|
|
40
40
|
repo_local_root = PathExtended(repo_local_obj.working_dir) # cwd might have been in a sub directory of repo_root, so its better to redefine it.
|
|
41
|
-
PathExtended(
|
|
42
|
-
repo_remote_root = PathExtended(
|
|
41
|
+
PathExtended(CONFIG_ROOT).joinpath("remote").mkdir(parents=True, exist_ok=True)
|
|
42
|
+
repo_remote_root = PathExtended(CONFIG_ROOT).joinpath("remote", repo_local_root.rel2home()) # .delete(sure=True)
|
|
43
43
|
|
|
44
44
|
try:
|
|
45
45
|
console.print(Panel("📥 DOWNLOADING REMOTE REPOSITORY", title_align="left", border_style="blue"))
|
|
@@ -51,8 +51,9 @@ def display_header() -> None:
|
|
|
51
51
|
╚═════════════════════════════════════════════════════════════════════════════════════════════════════════════╝
|
|
52
52
|
"""
|
|
53
53
|
|
|
54
|
+
import machineconfig
|
|
54
55
|
version = get_machineconfig_version()
|
|
55
|
-
title = f"✨ MACHINE CONFIGURATION v{version} ✨"
|
|
56
|
+
title = f"✨ MACHINE CONFIGURATION v{version}, @ {machineconfig.__file__} ✨"
|
|
56
57
|
subtitle = "🎯 Your digital life manager. Dotfiles, data, code and more."
|
|
57
58
|
bug_report = "🐛 Please report bugs to Alex Al-Saffar @ https://github.com/thisismygitrepo/machineconfig"
|
|
58
59
|
|
|
@@ -108,7 +109,7 @@ def get_installation_choices() -> list[str]:
|
|
|
108
109
|
]
|
|
109
110
|
# Add Windows-specific options
|
|
110
111
|
if platform.system() == "Windows":
|
|
111
|
-
choices.append(Choice(value="install_windows_desktop", title="💻 Install Windows Desktop Apps -
|
|
112
|
+
choices.append(Choice(value="install_windows_desktop", title="💻 Install Windows Desktop Apps - Install nerd fonts and set WT config.", checked=False))
|
|
112
113
|
selected = questionary.checkbox("Select the installation options you want to execute:", choices=choices, show_description=True).ask()
|
|
113
114
|
return selected or []
|
|
114
115
|
|
|
@@ -149,8 +150,8 @@ Set-Service -Name sshd -StartupType 'Automatic'"""
|
|
|
149
150
|
console.print(Panel("🐚 [bold green]SHELL PROFILE[/bold green]\n[italic]Shell configuration setup[/italic]", border_style="green"))
|
|
150
151
|
console.print("🔧 Configuring shell profile", style="bold cyan")
|
|
151
152
|
try:
|
|
152
|
-
from machineconfig.profile.
|
|
153
|
-
create_default_shell_profile(
|
|
153
|
+
from machineconfig.profile.create_shell_profile import create_default_shell_profile
|
|
154
|
+
create_default_shell_profile()
|
|
154
155
|
console.print("✅ Shell profile configured successfully", style="bold green")
|
|
155
156
|
except Exception as e:
|
|
156
157
|
console.print(f"❌ Error configuring shell profile: {e}", style="bold red")
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
# mkdir ~/data/local
|
|
6
6
|
# sudo mount -o nolock,noatime,nodiratime,proto=tcp,timeo=600,retrans=2,noac alex-p51s-5:/home/alex/data/local ./data/local
|
|
7
7
|
|
|
8
|
-
uv run --python 3.13 --
|
|
8
|
+
uv run --python 3.13 --with machineconfig python -m machineconfig.scripts.python.mount_nfs
|
|
9
9
|
# Check if remote server is reachable and share folder exists
|
|
10
10
|
if ! ping -c 1 "$remote_server" &> /dev/null; then
|
|
11
11
|
echo "💥 Error: Remote server $remote_server is not reachable."
|
|
@@ -17,8 +17,7 @@ drive_location=''
|
|
|
17
17
|
mount_point=''
|
|
18
18
|
username=''
|
|
19
19
|
password=''
|
|
20
|
-
|
|
21
|
-
uv run --PYTHON 3.13 --no-dev --project $HOME/code/machineconfig python -m machineconfig.scripts.python.mount_nw_drive
|
|
20
|
+
machineconfig.scripts.python.mount_nw_drive
|
|
22
21
|
|
|
23
22
|
# Check if mount point directory exists, create if not
|
|
24
23
|
if [ ! -d "$mount_point" ]; then
|