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.

Files changed (117) hide show
  1. machineconfig/cluster/remote/script_execution.py +0 -1
  2. machineconfig/cluster/sessions_managers/zellij_utils/process_monitor.py +2 -4
  3. machineconfig/jobs/installer/check_installations.py +2 -2
  4. machineconfig/jobs/installer/custom_dev/nerfont_windows_helper.py +12 -12
  5. machineconfig/jobs/installer/installer_data.json +53 -2
  6. machineconfig/jobs/windows/archive/archive_pygraphviz.ps1 +1 -3
  7. machineconfig/profile/create_helper.py +26 -0
  8. machineconfig/profile/{create.py → create_links.py} +6 -6
  9. machineconfig/profile/{create_frontend.py → create_links_export.py} +6 -10
  10. machineconfig/profile/{shell.py → create_shell_profile.py} +12 -37
  11. machineconfig/scripts/linux/{share_cloud.sh → other/share_cloud.sh} +3 -0
  12. machineconfig/scripts/linux/z_ls +2 -2
  13. machineconfig/scripts/python/agents.py +0 -1
  14. machineconfig/scripts/python/ai/initai.py +3 -4
  15. machineconfig/scripts/python/ai/scripts/lint_and_type_check.ps1 +0 -1
  16. machineconfig/scripts/python/ai/scripts/lint_and_type_check.sh +0 -1
  17. machineconfig/scripts/python/ai/solutions/generic.py +1 -0
  18. machineconfig/scripts/python/croshell.py +12 -2
  19. machineconfig/scripts/python/croshell_helpers/start_slidev.py +2 -2
  20. machineconfig/scripts/python/devops.py +4 -21
  21. machineconfig/scripts/python/devops_helpers/cli_config.py +8 -8
  22. machineconfig/scripts/python/devops_helpers/cli_config_dotfile.py +3 -3
  23. machineconfig/scripts/python/devops_helpers/cli_nw.py +2 -1
  24. machineconfig/scripts/python/devops_helpers/cli_repos.py +1 -3
  25. machineconfig/scripts/python/devops_helpers/cli_self.py +22 -9
  26. machineconfig/scripts/python/devops_helpers/cli_share_server.py +109 -0
  27. machineconfig/scripts/python/devops_helpers/cli_terminal.py +35 -23
  28. machineconfig/scripts/python/devops_helpers/devops_status.py +7 -80
  29. machineconfig/scripts/python/devops_helpers/devops_update_repos.py +64 -45
  30. machineconfig/scripts/python/devops_helpers/themes/choose_pwsh_theme.ps1 +16 -15
  31. machineconfig/scripts/python/devops_navigator.py +183 -80
  32. machineconfig/scripts/python/fire_jobs.py +4 -1
  33. machineconfig/scripts/python/ftpx.py +0 -1
  34. machineconfig/scripts/python/helpers_fire/{fire_gemini.py → agentic_frameworks/fire_gemini.py} +12 -9
  35. machineconfig/scripts/python/helpers_fire/agentic_frameworks/fire_qwen.py +43 -0
  36. machineconfig/scripts/python/helpers_fire/fire_agents_help_launch.py +4 -4
  37. machineconfig/scripts/python/helpers_fire/template.ps1 +29 -0
  38. machineconfig/scripts/python/helpers_fire/template.sh +1 -1
  39. machineconfig/scripts/python/helpers_repos/cloud_repo_sync.py +3 -3
  40. machineconfig/scripts/python/interactive.py +5 -4
  41. machineconfig/scripts/python/nw/mount_nfs +1 -1
  42. machineconfig/scripts/python/nw/mount_nw_drive +1 -2
  43. machineconfig/scripts/python/repos_helpers/count_lines_frontend.py +1 -1
  44. machineconfig/scripts/python/repos_helpers/entrypoint.py +2 -2
  45. machineconfig/scripts/python/repos_helpers/record.py +2 -2
  46. machineconfig/scripts/python/sessions_helpers/sessions_multiprocess.py +3 -1
  47. machineconfig/scripts/windows/{mount_nfs.ps1 → mounts/mount_nfs.ps1} +1 -3
  48. machineconfig/scripts/windows/{mount_ssh.ps1 → mounts/mount_ssh.ps1} +1 -1
  49. machineconfig/settings/lf/linux/lfrc +4 -7
  50. machineconfig/settings/lf/windows/lfrc +4 -22
  51. machineconfig/settings/lvim/windows/archive/config_additional.lua +0 -6
  52. machineconfig/settings/pistol/pistol.conf +1 -1
  53. machineconfig/settings/shells/bash/init.sh +9 -8
  54. machineconfig/settings/shells/pwsh/init.ps1 +10 -4
  55. machineconfig/settings/svim/linux/init.toml +0 -4
  56. machineconfig/settings/svim/windows/init.toml +0 -3
  57. machineconfig/setup_linux/web_shortcuts/interactive.sh +22 -0
  58. machineconfig/setup_windows/web_shortcuts/interactive.ps1 +34 -1
  59. machineconfig/utils/files/dbms.py +4 -1
  60. machineconfig/utils/installer_utils/installer.py +12 -0
  61. machineconfig/utils/installer_utils/installer_abc.py +26 -9
  62. machineconfig/utils/installer_utils/installer_class.py +1 -1
  63. machineconfig/utils/io.py +0 -18
  64. machineconfig/utils/scheduler.py +3 -4
  65. machineconfig/utils/source_of_truth.py +2 -4
  66. machineconfig/utils/ssh.py +1 -1
  67. {machineconfig-5.37.dist-info → machineconfig-5.39.dist-info}/METADATA +8 -4
  68. {machineconfig-5.37.dist-info → machineconfig-5.39.dist-info}/RECORD +84 -114
  69. machineconfig/jobs/windows/start_terminal.ps1 +0 -6
  70. machineconfig/jobs/windows/startup_file.cmd +0 -2
  71. machineconfig/scripts/cloud/init.sh +0 -105
  72. machineconfig/scripts/linux/agents +0 -2
  73. machineconfig/scripts/linux/cloud +0 -2
  74. machineconfig/scripts/linux/croshell +0 -3
  75. machineconfig/scripts/linux/devops +0 -2
  76. machineconfig/scripts/linux/fire +0 -2
  77. machineconfig/scripts/linux/ftpx +0 -2
  78. machineconfig/scripts/linux/kill_process +0 -2
  79. machineconfig/scripts/linux/sessions +0 -2
  80. machineconfig/scripts/linux/start_terminals +0 -3
  81. machineconfig/scripts/windows/agents.ps1 +0 -1
  82. machineconfig/scripts/windows/cloud.ps1 +0 -1
  83. machineconfig/scripts/windows/croshell.ps1 +0 -1
  84. machineconfig/scripts/windows/devops.ps1 +0 -1
  85. machineconfig/scripts/windows/fire.ps1 +0 -1
  86. machineconfig/scripts/windows/ftpx.ps1 +0 -1
  87. machineconfig/scripts/windows/gpt.ps1 +0 -1
  88. machineconfig/scripts/windows/grep.ps1 +0 -2
  89. machineconfig/scripts/windows/kill_process.ps1 +0 -1
  90. machineconfig/scripts/windows/nano.ps1 +0 -3
  91. machineconfig/scripts/windows/pomodoro.ps1 +0 -1
  92. machineconfig/scripts/windows/reload_path.ps1 +0 -3
  93. machineconfig/scripts/windows/scheduler.ps1 +0 -1
  94. machineconfig/scripts/windows/sessions.ps1 +0 -1
  95. machineconfig/scripts/windows/snapshot.ps1 +0 -1
  96. machineconfig/scripts/windows/start_slidev.ps1 +0 -1
  97. machineconfig/scripts/windows/start_terminals.ps1 +0 -1
  98. machineconfig/scripts/windows/wsl_rdp_windows_port_forwarding.ps1 +0 -46
  99. machineconfig/scripts/windows/wsl_ssh_windows_port_forwarding.ps1 +0 -76
  100. machineconfig/setup_linux/machineconfig.sh +0 -20
  101. machineconfig/setup_windows/machineconfig.ps1 +0 -27
  102. /machineconfig/scripts/linux/{share_nfs → other/share_nfs} +0 -0
  103. /machineconfig/scripts/linux/{share_smb → other/share_smb} +0 -0
  104. /machineconfig/scripts/linux/{start_docker → other/start_docker} +0 -0
  105. /machineconfig/scripts/linux/{switch_ip → other/switch_ip} +0 -0
  106. /machineconfig/scripts/{windows/share_nfs.ps1 → python/helpers_fire/agentic_frameworks/__init__.py} +0 -0
  107. /machineconfig/scripts/python/helpers_fire/{fire_crush.json → agentic_frameworks/fire_crush.json} +0 -0
  108. /machineconfig/scripts/python/helpers_fire/{fire_crush.py → agentic_frameworks/fire_crush.py} +0 -0
  109. /machineconfig/scripts/python/helpers_fire/{fire_cursor_agents.py → agentic_frameworks/fire_cursor_agents.py} +0 -0
  110. /machineconfig/scripts/windows/{mount_nw.ps1 → mounts/mount_nw.ps1} +0 -0
  111. /machineconfig/scripts/windows/{mount_smb.ps1 → mounts/mount_smb.ps1} +0 -0
  112. /machineconfig/scripts/windows/{share_cloud.cmd → mounts/share_cloud.cmd} +0 -0
  113. /machineconfig/scripts/windows/{share_smb.ps1 → mounts/share_smb.ps1} +0 -0
  114. /machineconfig/scripts/windows/{unlock_bitlocker.ps1 → mounts/unlock_bitlocker.ps1} +0 -0
  115. {machineconfig-5.37.dist-info → machineconfig-5.39.dist-info}/WHEEL +0 -0
  116. {machineconfig-5.37.dist-info → machineconfig-5.39.dist-info}/entry_points.txt +0 -0
  117. {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.repos"
177
+ module_path="machineconfig.scripts.python.devops_helpers.cli_repos"
178
178
  ))
179
179
 
180
180
  # repos subcommands
181
- sync_node = repos_node.add("🔄 sync - Synchronize repositories", data=CommandInfo(
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="Synchronize repositories",
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
- sync_node.add("📝 capture - Record repositories into repos.json", data=CommandInfo(
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 sync capture",
193
- parent="sync",
194
- help_text="devops repos sync capture --directory <dir> --cloud <cloud>"
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
- sync_node.add("📥 clone - Clone repositories from repos.json", data=CommandInfo(
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 sync clone",
201
- parent="sync",
202
- help_text="devops repos sync clone --directory <dir> --cloud <cloud>"
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
- sync_node.add("🔀 checkout-to-commit - Check out specific commits", data=CommandInfo(
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 sync checkout-to-commit",
209
- parent="sync",
210
- help_text="devops repos sync checkout-to-commit --directory <dir> --cloud <cloud>"
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
- sync_node.add("🔀 checkout-to-branch - Check out to main branch", data=CommandInfo(
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 sync checkout-to-branch",
217
- parent="sync",
218
- help_text="devops repos sync checkout-to-branch --directory <dir> --cloud <cloud>"
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("🔑 add-key - Add SSH public key", data=CommandInfo(
313
- name="add-key",
314
- description="SSH add pub key to this machine",
315
- command="devops network add-key",
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 add-key"
381
+ help_text="devops network install_ssh_server"
318
382
  ))
319
383
 
320
- network_node.add("🗝️ add-identity - Add SSH identity", data=CommandInfo(
321
- name="add-identity",
322
- description="SSH add identity (private key) to this machine",
323
- command="devops network add-identity",
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 add-identity"
389
+ help_text="devops network add_ssh_key --path <file> --choose --value --github <username>"
326
390
  ))
327
391
 
328
- network_node.add("📡 setup - SSH setup", data=CommandInfo(
329
- name="setup",
330
- description="SSH setup",
331
- command="devops network setup",
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 setup"
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="UPDATE essential repos",
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="INTERACTIVE configuration of machine",
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="STATUS of machine, shell profile, apps, symlinks, dotfiles, etc.",
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="CLONE machineconfig locally and incorporate to shell profile",
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("📝 create-template - Create agent template", data=CommandInfo(
413
- name="create-template",
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 create-template",
487
+ command="agents make-template",
416
488
  parent="agents",
417
- help_text="agents create-template"
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
- # Other utility commands
454
- utils_node = self.root.add("🔧 Utilities", data=CommandInfo(
455
- name="utilities",
456
- description="Utility commands",
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
- utils_node.add("☁️ cloud_mount - Mount cloud storage", data=CommandInfo(
462
- name="cloud_mount",
463
- description="Mount cloud storage using rclone",
464
- command="cloud_mount",
465
- parent="utilities",
466
- help_text="cloud_mount --cloud <cloud> --destination <path> --network <network>"
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
- utils_node.add("☁️ cloud_copy - Copy to/from cloud", data=CommandInfo(
470
- name="cloud_copy",
471
- description="Copy files to/from cloud storage",
472
- command="cloud_copy",
473
- parent="utilities",
474
- help_text="cloud_copy"
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
- utils_node.add("☁️ cloud_sync - Sync with cloud", data=CommandInfo(
478
- name="cloud_sync",
479
- description="Sync files with cloud storage",
480
- command="cloud_sync",
481
- parent="utilities",
482
- help_text="cloud_sync"
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
- utils_node.add("🔧 kill_process - Kill processes", data=CommandInfo(
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
- parent="utilities",
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
- activate_ve_line = get_ve_activate_line(ve_root=args.ve or ve_root_from_file or "$HOME/code/machineconfig/.venv")
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 = {}
@@ -1,4 +1,3 @@
1
- #!/usr/bin/env -S uv run --no-dev --project /home/alex/code/machineconfig --script
2
1
  """Sx & Rx
3
2
 
4
3
  TODO: add support for cases in which source or target has non 22 default port number and is defineda as user@host:port:path which makes 2 colons in the string.
@@ -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, machine: MATCHINE) -> str:
9
- model = "gemini-2.5-pro"
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
- cmd = """
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="$GEMINI_API_KEY" \
35
- -v "/home/alex/code/machineconfig:/workspace/machineconfig" \
36
- -w "/workspace/machineconfig" \
37
- gemini-cli:latest \
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 CONFIG_PATH, DEFAULTS_PATH
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(CONFIG_PATH).joinpath("remote").mkdir(parents=True, exist_ok=True)
42
- repo_remote_root = PathExtended(CONFIG_PATH).joinpath("remote", repo_local_root.rel2home()) # .delete(sure=True)
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 - Brave, Windows Terminal, PowerShell, VSCode (Windows only)", checked=False))
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.shell import create_default_shell_profile
153
- create_default_shell_profile(method="copy")
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 --no-dev --project $HOME/code/machineconfig python -m machineconfig.scripts.python.mount_nfs
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