machineconfig 1.97__py3-none-any.whl → 2.1__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/cloud_manager.py +22 -29
- machineconfig/cluster/data_transfer.py +2 -3
- machineconfig/cluster/distribute.py +0 -2
- machineconfig/cluster/file_manager.py +4 -5
- machineconfig/cluster/job_params.py +1 -4
- machineconfig/cluster/loader_runner.py +8 -11
- machineconfig/cluster/remote_machine.py +4 -5
- machineconfig/cluster/script_execution.py +2 -2
- machineconfig/cluster/script_notify_upon_completion.py +0 -1
- machineconfig/cluster/sessions_managers/archive/create_zellij_template.py +4 -6
- machineconfig/cluster/sessions_managers/archive/session_managers.py +0 -1
- machineconfig/cluster/sessions_managers/enhanced_command_runner.py +35 -75
- machineconfig/cluster/sessions_managers/wt_local.py +113 -185
- machineconfig/cluster/sessions_managers/wt_local_manager.py +127 -197
- machineconfig/cluster/sessions_managers/wt_remote.py +60 -67
- machineconfig/cluster/sessions_managers/wt_remote_manager.py +110 -149
- machineconfig/cluster/sessions_managers/wt_utils/layout_generator.py +61 -64
- machineconfig/cluster/sessions_managers/wt_utils/process_monitor.py +72 -172
- machineconfig/cluster/sessions_managers/wt_utils/remote_executor.py +27 -60
- machineconfig/cluster/sessions_managers/wt_utils/session_manager.py +58 -137
- machineconfig/cluster/sessions_managers/wt_utils/status_reporter.py +46 -74
- machineconfig/cluster/sessions_managers/zellij_local.py +91 -147
- machineconfig/cluster/sessions_managers/zellij_local_manager.py +165 -190
- machineconfig/cluster/sessions_managers/zellij_remote.py +51 -58
- machineconfig/cluster/sessions_managers/zellij_remote_manager.py +40 -46
- machineconfig/cluster/sessions_managers/zellij_utils/example_usage.py +19 -17
- machineconfig/cluster/sessions_managers/zellij_utils/layout_generator.py +30 -31
- machineconfig/cluster/sessions_managers/zellij_utils/process_monitor.py +64 -134
- machineconfig/cluster/sessions_managers/zellij_utils/remote_executor.py +7 -11
- machineconfig/cluster/sessions_managers/zellij_utils/session_manager.py +27 -55
- machineconfig/cluster/sessions_managers/zellij_utils/status_reporter.py +14 -13
- machineconfig/cluster/templates/cli_click.py +0 -1
- machineconfig/cluster/templates/cli_gooey.py +0 -2
- machineconfig/cluster/templates/cli_trogon.py +0 -1
- machineconfig/cluster/templates/run_cloud.py +0 -1
- machineconfig/cluster/templates/run_cluster.py +0 -1
- machineconfig/cluster/templates/run_remote.py +0 -1
- machineconfig/cluster/templates/utils.py +27 -11
- machineconfig/jobs/__pycache__/__init__.cpython-313.pyc +0 -0
- machineconfig/jobs/linux/msc/cli_agents.sh +16 -0
- machineconfig/jobs/python/check_installations.py +9 -9
- machineconfig/jobs/python/create_bootable_media.py +0 -2
- machineconfig/jobs/python/python_cargo_build_share.py +2 -2
- machineconfig/jobs/python/python_ve_symlink.py +9 -11
- machineconfig/jobs/python/tasks.py +0 -1
- machineconfig/jobs/python/vscode/api.py +5 -5
- machineconfig/jobs/python/vscode/link_ve.py +20 -21
- machineconfig/jobs/python/vscode/select_interpreter.py +28 -29
- machineconfig/jobs/python/vscode/sync_code.py +14 -18
- machineconfig/jobs/python_custom_installers/__pycache__/__init__.cpython-313.pyc +0 -0
- machineconfig/jobs/python_custom_installers/archive/ngrok.py +15 -15
- machineconfig/jobs/python_custom_installers/dev/aider.py +10 -18
- machineconfig/jobs/python_custom_installers/dev/alacritty.py +12 -21
- machineconfig/jobs/python_custom_installers/dev/brave.py +13 -22
- machineconfig/jobs/python_custom_installers/dev/bypass_paywall.py +13 -20
- machineconfig/jobs/python_custom_installers/dev/code.py +17 -24
- machineconfig/jobs/python_custom_installers/dev/cursor.py +10 -21
- machineconfig/jobs/python_custom_installers/dev/docker_desktop.py +12 -11
- machineconfig/jobs/python_custom_installers/dev/espanso.py +19 -23
- machineconfig/jobs/python_custom_installers/dev/goes.py +9 -16
- machineconfig/jobs/python_custom_installers/dev/lvim.py +13 -21
- machineconfig/jobs/python_custom_installers/dev/nerdfont.py +15 -22
- machineconfig/jobs/python_custom_installers/dev/redis.py +15 -23
- machineconfig/jobs/python_custom_installers/dev/wezterm.py +15 -22
- machineconfig/jobs/python_custom_installers/dev/winget.py +32 -50
- machineconfig/jobs/python_custom_installers/docker.py +15 -24
- machineconfig/jobs/python_custom_installers/gh.py +18 -26
- machineconfig/jobs/python_custom_installers/hx.py +33 -17
- machineconfig/jobs/python_custom_installers/warp-cli.py +15 -23
- machineconfig/jobs/python_generic_installers/__pycache__/__init__.cpython-313.pyc +0 -0
- machineconfig/jobs/python_generic_installers/config.json +412 -389
- machineconfig/jobs/python_linux_installers/__pycache__/__init__.cpython-313.pyc +0 -0
- machineconfig/jobs/python_windows_installers/dev/config.json +1 -1
- machineconfig/jobs/windows/archive/archive_pygraphviz.ps1 +1 -1
- machineconfig/jobs/windows/msc/cli_agents.bat +0 -0
- machineconfig/jobs/windows/msc/cli_agents.ps1 +0 -0
- machineconfig/jobs/windows/start_terminal.ps1 +1 -1
- machineconfig/logger.py +50 -0
- machineconfig/profile/create.py +50 -36
- machineconfig/profile/create_hardlinks.py +33 -26
- machineconfig/profile/shell.py +87 -60
- machineconfig/scripts/__pycache__/__init__.cpython-313.pyc +0 -0
- machineconfig/scripts/cloud/init.sh +2 -2
- machineconfig/scripts/linux/checkout_versions +1 -1
- machineconfig/scripts/linux/choose_wezterm_theme +1 -1
- machineconfig/scripts/linux/cloud_copy +1 -1
- machineconfig/scripts/linux/cloud_manager +1 -1
- machineconfig/scripts/linux/cloud_mount +1 -1
- machineconfig/scripts/linux/cloud_repo_sync +1 -1
- machineconfig/scripts/linux/cloud_sync +1 -1
- machineconfig/scripts/linux/croshell +1 -1
- machineconfig/scripts/linux/devops +3 -5
- machineconfig/scripts/linux/fire +2 -1
- machineconfig/scripts/linux/fire_agents +3 -3
- machineconfig/scripts/linux/ftpx +1 -1
- machineconfig/scripts/linux/gh_models +1 -1
- machineconfig/scripts/linux/kill_process +1 -1
- machineconfig/scripts/linux/mcinit +2 -2
- machineconfig/scripts/linux/repos +1 -1
- machineconfig/scripts/linux/scheduler +1 -1
- machineconfig/scripts/linux/start_slidev +1 -1
- machineconfig/scripts/linux/start_terminals +1 -1
- machineconfig/scripts/linux/url2md +1 -1
- machineconfig/scripts/linux/warp-cli.sh +122 -0
- machineconfig/scripts/linux/wifi_conn +1 -1
- machineconfig/scripts/python/__pycache__/__init__.cpython-313.pyc +0 -0
- machineconfig/scripts/python/__pycache__/croshell.cpython-313.pyc +0 -0
- machineconfig/scripts/python/__pycache__/devops.cpython-313.pyc +0 -0
- machineconfig/scripts/python/__pycache__/devops_devapps_install.cpython-313.pyc +0 -0
- machineconfig/scripts/python/__pycache__/devops_update_repos.cpython-313.pyc +0 -0
- machineconfig/scripts/python/__pycache__/fire_jobs.cpython-313.pyc +0 -0
- machineconfig/scripts/python/ai/__init__.py +0 -0
- machineconfig/scripts/python/ai/__pycache__/__init__.cpython-313.pyc +0 -0
- machineconfig/scripts/python/ai/__pycache__/generate_files.cpython-313.pyc +0 -0
- machineconfig/scripts/python/ai/__pycache__/mcinit.cpython-313.pyc +0 -0
- machineconfig/scripts/python/ai/chatmodes/Thinking-Beast-Mode.chatmode.md +337 -0
- machineconfig/scripts/python/ai/chatmodes/Ultimate-Transparent-Thinking-Beast-Mode.chatmode.md +644 -0
- machineconfig/scripts/python/ai/chatmodes/deepResearch.chatmode.md +81 -0
- machineconfig/scripts/python/ai/configs/.gemini/settings.json +81 -0
- machineconfig/scripts/python/ai/generate_files.py +84 -0
- machineconfig/scripts/python/ai/instructions/python/dev.instructions.md +45 -0
- machineconfig/scripts/python/ai/mcinit.py +107 -0
- machineconfig/scripts/python/ai/prompts/allLintersAndTypeCheckers.prompt.md +5 -0
- machineconfig/scripts/python/ai/prompts/research-report-skeleton.prompt.md +38 -0
- machineconfig/scripts/python/ai/scripts/lint_and_type_check.sh +52 -0
- machineconfig/scripts/python/archive/tmate_conn.py +5 -5
- machineconfig/scripts/python/archive/tmate_start.py +3 -3
- machineconfig/scripts/python/choose_wezterm_theme.py +2 -2
- machineconfig/scripts/python/cloud_copy.py +20 -19
- machineconfig/scripts/python/cloud_mount.py +10 -8
- machineconfig/scripts/python/cloud_repo_sync.py +15 -15
- machineconfig/scripts/python/cloud_sync.py +1 -1
- machineconfig/scripts/python/croshell.py +18 -16
- machineconfig/scripts/python/devops.py +6 -6
- machineconfig/scripts/python/devops_add_identity.py +9 -7
- machineconfig/scripts/python/devops_add_ssh_key.py +19 -19
- machineconfig/scripts/python/devops_backup_retrieve.py +14 -14
- machineconfig/scripts/python/devops_devapps_install.py +3 -3
- machineconfig/scripts/python/devops_update_repos.py +141 -53
- machineconfig/scripts/python/dotfile.py +3 -3
- machineconfig/scripts/python/fire_agents.py +202 -41
- machineconfig/scripts/python/fire_jobs.py +20 -21
- machineconfig/scripts/python/ftpx.py +4 -3
- machineconfig/scripts/python/gh_models.py +94 -94
- machineconfig/scripts/python/helpers/__pycache__/__init__.cpython-313.pyc +0 -0
- machineconfig/scripts/python/helpers/__pycache__/helpers4.cpython-313.pyc +0 -0
- machineconfig/scripts/python/helpers/cloud_helpers.py +3 -3
- machineconfig/scripts/python/helpers/helpers2.py +3 -3
- machineconfig/scripts/python/helpers/helpers4.py +8 -7
- machineconfig/scripts/python/helpers/helpers5.py +7 -7
- machineconfig/scripts/python/helpers/repo_sync_helpers.py +2 -2
- machineconfig/scripts/python/mount_nfs.py +4 -3
- machineconfig/scripts/python/mount_nw_drive.py +4 -4
- machineconfig/scripts/python/mount_ssh.py +4 -3
- machineconfig/scripts/python/repos.py +9 -9
- machineconfig/scripts/python/scheduler.py +1 -1
- machineconfig/scripts/python/start_slidev.py +9 -8
- machineconfig/scripts/python/start_terminals.py +1 -1
- machineconfig/scripts/python/viewer.py +40 -40
- machineconfig/scripts/python/wifi_conn.py +65 -66
- machineconfig/scripts/python/wsl_windows_transfer.py +2 -2
- machineconfig/scripts/windows/checkout_version.ps1 +1 -3
- machineconfig/scripts/windows/choose_wezterm_theme.ps1 +1 -3
- machineconfig/scripts/windows/cloud_copy.ps1 +2 -6
- machineconfig/scripts/windows/cloud_manager.ps1 +1 -1
- machineconfig/scripts/windows/cloud_repo_sync.ps1 +1 -2
- machineconfig/scripts/windows/cloud_sync.ps1 +2 -2
- machineconfig/scripts/windows/croshell.ps1 +2 -2
- machineconfig/scripts/windows/devops.ps1 +1 -4
- machineconfig/scripts/windows/dotfile.ps1 +1 -3
- machineconfig/scripts/windows/fire.ps1 +1 -1
- machineconfig/scripts/windows/ftpx.ps1 +2 -2
- machineconfig/scripts/windows/gpt.ps1 +1 -1
- machineconfig/scripts/windows/kill_process.ps1 +1 -2
- machineconfig/scripts/windows/mcinit.ps1 +2 -2
- machineconfig/scripts/windows/mount_nfs.ps1 +1 -1
- machineconfig/scripts/windows/mount_ssh.ps1 +1 -1
- machineconfig/scripts/windows/pomodoro.ps1 +1 -1
- machineconfig/scripts/windows/py2exe.ps1 +1 -3
- machineconfig/scripts/windows/repos.ps1 +1 -1
- machineconfig/scripts/windows/scheduler.ps1 +1 -1
- machineconfig/scripts/windows/snapshot.ps1 +2 -2
- machineconfig/scripts/windows/start_slidev.ps1 +1 -1
- machineconfig/scripts/windows/start_terminals.ps1 +1 -1
- machineconfig/scripts/windows/wifi_conn.ps1 +1 -1
- machineconfig/scripts/windows/wsl_windows_transfer.ps1 +1 -3
- machineconfig/settings/lf/linux/lfrc +1 -1
- machineconfig/settings/linters/.ruff.toml +2 -2
- machineconfig/settings/linters/.ruff_cache/.gitignore +2 -0
- machineconfig/settings/linters/.ruff_cache/CACHEDIR.TAG +1 -0
- machineconfig/settings/lvim/windows/archive/config_additional.lua +1 -1
- machineconfig/settings/shells/ipy/profiles/default/startup/playext.py +71 -71
- machineconfig/settings/shells/wt/settings.json +8 -8
- machineconfig/settings/svim/linux/init.toml +1 -1
- machineconfig/settings/svim/windows/init.toml +1 -1
- machineconfig/setup_linux/web_shortcuts/croshell.sh +0 -54
- machineconfig/setup_linux/web_shortcuts/interactive.sh +6 -6
- machineconfig/setup_linux/web_shortcuts/tmp.sh +2 -0
- machineconfig/setup_windows/web_shortcuts/all.ps1 +2 -2
- machineconfig/setup_windows/web_shortcuts/ascii_art.ps1 +1 -1
- machineconfig/setup_windows/web_shortcuts/croshell.ps1 +1 -1
- machineconfig/setup_windows/web_shortcuts/interactive.ps1 +5 -5
- machineconfig/setup_windows/wt_and_pwsh/install_fonts.ps1 +51 -15
- machineconfig/setup_windows/wt_and_pwsh/set_pwsh_theme.py +75 -18
- machineconfig/setup_windows/wt_and_pwsh/set_wt_settings.py +52 -42
- machineconfig/utils/ai/browser_user_wrapper.py +5 -5
- machineconfig/utils/ai/generate_file_checklist.py +19 -22
- machineconfig/utils/ai/url2md.py +5 -3
- machineconfig/utils/cloud/onedrive/setup_oauth.py +5 -4
- machineconfig/utils/cloud/onedrive/transaction.py +192 -227
- machineconfig/utils/code.py +71 -43
- machineconfig/utils/installer.py +77 -85
- machineconfig/utils/installer_utils/installer_abc.py +29 -17
- machineconfig/utils/installer_utils/installer_class.py +188 -83
- machineconfig/utils/io_save.py +3 -15
- machineconfig/utils/links.py +22 -11
- machineconfig/utils/notifications.py +197 -0
- machineconfig/utils/options.py +38 -25
- machineconfig/utils/path.py +18 -6
- machineconfig/utils/path_reduced.py +637 -316
- machineconfig/utils/procs.py +69 -63
- machineconfig/utils/scheduling.py +11 -13
- machineconfig/utils/ssh.py +351 -0
- machineconfig/utils/terminal.py +225 -0
- machineconfig/utils/utils.py +13 -12
- machineconfig/utils/utils2.py +43 -10
- machineconfig/utils/utils5.py +242 -46
- machineconfig/utils/ve.py +11 -6
- {machineconfig-1.97.dist-info → machineconfig-2.1.dist-info}/METADATA +15 -9
- {machineconfig-1.97.dist-info → machineconfig-2.1.dist-info}/RECORD +232 -235
- machineconfig/cluster/self_ssh.py +0 -57
- machineconfig/jobs/__pycache__/__init__.cpython-311.pyc +0 -0
- machineconfig/jobs/python/__pycache__/__init__.cpython-311.pyc +0 -0
- machineconfig/jobs/python/archive/python_tools.txt +0 -12
- machineconfig/jobs/python/vscode/__pycache__/select_interpreter.cpython-311.pyc +0 -0
- machineconfig/jobs/python_custom_installers/__pycache__/__init__.cpython-311.pyc +0 -0
- machineconfig/jobs/python_generic_installers/__pycache__/__init__.cpython-311.pyc +0 -0
- machineconfig/jobs/python_generic_installers/update.py +0 -3
- machineconfig/jobs/python_linux_installers/__pycache__/__init__.cpython-311.pyc +0 -0
- machineconfig/profile/__pycache__/__init__.cpython-311.pyc +0 -0
- machineconfig/profile/__pycache__/create.cpython-311.pyc +0 -0
- machineconfig/profile/__pycache__/shell.cpython-311.pyc +0 -0
- machineconfig/scripts/__pycache__/__init__.cpython-311.pyc +0 -0
- machineconfig/scripts/linux/activate_ve +0 -87
- machineconfig/scripts/python/__pycache__/__init__.cpython-311.pyc +0 -0
- machineconfig/scripts/python/__pycache__/cloud_copy.cpython-311.pyc +0 -0
- machineconfig/scripts/python/__pycache__/cloud_mount.cpython-311.pyc +0 -0
- machineconfig/scripts/python/__pycache__/cloud_sync.cpython-311.pyc +0 -0
- machineconfig/scripts/python/__pycache__/croshell.cpython-311.pyc +0 -0
- machineconfig/scripts/python/__pycache__/devops.cpython-311.pyc +0 -0
- machineconfig/scripts/python/__pycache__/devops_backup_retrieve.cpython-311.pyc +0 -0
- machineconfig/scripts/python/__pycache__/devops_devapps_install.cpython-311.pyc +0 -0
- machineconfig/scripts/python/__pycache__/devops_update_repos.cpython-311.pyc +0 -0
- machineconfig/scripts/python/__pycache__/fire_agents.cpython-311.pyc +0 -0
- machineconfig/scripts/python/__pycache__/fire_jobs.cpython-311.pyc +0 -0
- machineconfig/scripts/python/__pycache__/get_zellij_cmd.cpython-311.pyc +0 -0
- machineconfig/scripts/python/__pycache__/repos.cpython-311.pyc +0 -0
- machineconfig/scripts/python/ai/__pycache__/init.cpython-311.pyc +0 -0
- machineconfig/scripts/python/ai/init.py +0 -56
- machineconfig/scripts/python/ai/rules/python/dev.md +0 -31
- machineconfig/scripts/python/helpers/__pycache__/__init__.cpython-311.pyc +0 -0
- machineconfig/scripts/python/helpers/__pycache__/cloud_helpers.cpython-311.pyc +0 -0
- machineconfig/scripts/python/helpers/__pycache__/helpers2.cpython-311.pyc +0 -0
- machineconfig/scripts/python/helpers/__pycache__/helpers4.cpython-311.pyc +0 -0
- machineconfig/scripts/python/helpers/__pycache__/repo_sync_helpers.cpython-311.pyc +0 -0
- machineconfig/scripts/windows/activate_ve.ps1 +0 -54
- {machineconfig-1.97.dist-info → machineconfig-2.1.dist-info}/WHEEL +0 -0
- {machineconfig-1.97.dist-info → machineconfig-2.1.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: 'Autonomous, multi-step web research with numbered citations, cross-source verification, and a final Markdown report.'
|
|
3
|
+
tools: ['extensions', 'fetch', 'websearch', 'search', 'githubRepo', 'editFiles']
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Deep Research mode
|
|
7
|
+
|
|
8
|
+
You are a rigorous research agent. Emulate the behavior of OpenAI “Deep Research” and Perplexity “Pro/Research” modes:
|
|
9
|
+
- Plan first, then execute iterative searches and browsing.
|
|
10
|
+
- Read broadly, follow relevant links recursively, and take structured notes.
|
|
11
|
+
- Attribute every non-trivial claim with numbered citations and quotes.
|
|
12
|
+
- Cross-verify important facts across independent, high-quality sources.
|
|
13
|
+
- Produce a clean, self-contained Markdown report saved to ./.ai/deep_research_$suffix.md.
|
|
14
|
+
|
|
15
|
+
This mode is read-heavy. Do not modify project code. Only create or update files under ./.ai/.
|
|
16
|
+
|
|
17
|
+
## Inputs and outputs
|
|
18
|
+
- Input: a research question or task, optional `suffix` for report naming, optional provided URLs.
|
|
19
|
+
- Output: a Markdown report written to ./.ai/deep_research_$suffix.md and a concise chat summary with key findings and links.
|
|
20
|
+
|
|
21
|
+
## Tools you should use
|
|
22
|
+
- fetch: fetch page contents for provided or discovered URLs.
|
|
23
|
+
- websearch: perform web searches to discover authoritative sources. Iterate as needed.
|
|
24
|
+
- search: only for searching the local workspace when relevant (not the web).
|
|
25
|
+
- githubRepo: optionally pull examples or repos if directly relevant.
|
|
26
|
+
- editFiles: create/update the report file under ./.ai/.
|
|
27
|
+
|
|
28
|
+
## Execution protocol
|
|
29
|
+
Follow these phases every time. Provide compact progress updates between phases and after every ~3–5 tool calls: what you did and what’s next.
|
|
30
|
+
|
|
31
|
+
1) Planning and scope
|
|
32
|
+
- Restate the question. Extract explicit and implicit sub-questions as a checklist.
|
|
33
|
+
- Define success criteria (decision to be made, comparison outcome, data needed, etc.).
|
|
34
|
+
- Draft a search plan: keywords, entities, time range/recency requirements, likely primary sources, and anticipated pitfalls.
|
|
35
|
+
|
|
36
|
+
2) Initial search and source triage
|
|
37
|
+
- Use websearch to find diverse, reputable sources (docs, standards, primary data, peer-reviewed or recognized outlets). Prefer primary sources where possible.
|
|
38
|
+
- For each candidate, use fetch to open it. Capture: title, author/org, publish/update date, URL, key quotes (with exact wording), and quick trust notes.
|
|
39
|
+
- Track sources in a table within your working notes (not necessarily in the final report) to avoid duplication.
|
|
40
|
+
|
|
41
|
+
3) Recursive exploration and verification
|
|
42
|
+
- Follow relevant links found in good sources (fetch them). Stop when additional sources stop changing conclusions materially.
|
|
43
|
+
- Cross-check critical numbers, timelines, and quotes against at least two independent sources when available.
|
|
44
|
+
- If sources conflict, explain the disagreement and weigh credibility (recency, expertise, methodology, bias, primary vs. secondary).
|
|
45
|
+
|
|
46
|
+
4) Synthesis and reporting
|
|
47
|
+
- Draft a clear, structured Markdown report with:
|
|
48
|
+
- Title and date
|
|
49
|
+
- Executive summary (bulleted, 5–10 lines, with [n] citations inline)
|
|
50
|
+
- Key findings (short sections, each claim supported by [n] citations and brief quotes)
|
|
51
|
+
- Analysis (trade-offs, areas of uncertainty, limitations, and what to watch next)
|
|
52
|
+
- Recommendations or direct answers, if applicable (with citations)
|
|
53
|
+
- Appendix: Sources list with numbered entries [n], each including title, author/org, date (published/updated), URL, and quoted snippets used
|
|
54
|
+
- Ensure the report is readable and skimmable. Keep sentences concise.
|
|
55
|
+
|
|
56
|
+
5) Save the report
|
|
57
|
+
- Determine `$suffix` in this order: (a) user-provided; else (b) a short kebab-case slug from the question; append date (YYYYMMDD) if helpful.
|
|
58
|
+
- Ensure directory ./.ai exists; create it if missing.
|
|
59
|
+
- Write the report to ./.ai/deep_research_$suffix.md using editFiles.
|
|
60
|
+
|
|
61
|
+
6) Final checks
|
|
62
|
+
- Verify every non-obvious statement has a citation [n] pointing to a source in Appendix.
|
|
63
|
+
- Verify dates are present for sources when available; prefer the most recent reputable sources.
|
|
64
|
+
- Remove dead links if discovered; replace with archived or alternative sources when possible.
|
|
65
|
+
- Share a concise chat summary with 3–6 bullets and the saved file path.
|
|
66
|
+
|
|
67
|
+
## Citation rules
|
|
68
|
+
- Use numeric references [1], [2], ... inline; match them in the Appendix.
|
|
69
|
+
- Quote short key phrases exactly (with quotation marks) and include context.
|
|
70
|
+
- Include publish/update date and access date (today) when available.
|
|
71
|
+
- Prefer primary documentation, official standards, authors/organizations with recognized expertise, and recent updates.
|
|
72
|
+
|
|
73
|
+
## Guardrails and quality
|
|
74
|
+
- Be explicit when uncertain; avoid speculation. If evidence is weak, state it.
|
|
75
|
+
- Distinguish proven facts vs. interpretations. Label opinions as such.
|
|
76
|
+
- Avoid paywalled content if it prevents verification; seek alternative open sources or include accessible abstracts.
|
|
77
|
+
- If new questions arise, loop back with targeted websearch/fetch until conclusions are well-supported.
|
|
78
|
+
|
|
79
|
+
## Usage
|
|
80
|
+
- In chat, switch to “Deep Research” mode. Provide your query and optionally `suffix:` or `filename:` hint (e.g., suffix: chiplet-market-2025).
|
|
81
|
+
- This mode will produce the report and post the saved path, e.g., ./.ai/deep_research_chiplet-market-2025.md.
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
{
|
|
2
|
+
// Appearance
|
|
3
|
+
"theme": "Default", // Could also be "GitHub", "Dracula", etc.
|
|
4
|
+
|
|
5
|
+
// Authentication
|
|
6
|
+
"selectedAuthType": "gemini-api-key", // Options: "gemini-api-key", "oauth-personal", "vertex-ai"
|
|
7
|
+
|
|
8
|
+
// Tool usage and safety
|
|
9
|
+
"sandbox": false, // Enable with true or specify backend ("docker", "podman")
|
|
10
|
+
"autoAccept": true, // Auto-approve safe tool calls
|
|
11
|
+
"usageStatisticsEnabled": false, // Collect anonymized usage stats
|
|
12
|
+
"telemetry": {
|
|
13
|
+
"enabled": false,
|
|
14
|
+
"target": "remote", // or "local"
|
|
15
|
+
"logPrompts": false
|
|
16
|
+
},
|
|
17
|
+
|
|
18
|
+
// Work environment configuration
|
|
19
|
+
"preferredEditor": "vim", // or "vscode", "nano", etc.
|
|
20
|
+
"fileFiltering": {
|
|
21
|
+
"respectGitIgnore": true,
|
|
22
|
+
"enableRecursiveFileSearch": true
|
|
23
|
+
},
|
|
24
|
+
|
|
25
|
+
// Context and workspace behavior
|
|
26
|
+
"contextFileName": "GEMINI.md", // Can also be an array of filenames
|
|
27
|
+
"includeDirectories": [], // e.g., ["../shared", "~/common-utils"]
|
|
28
|
+
"chatCompression": {
|
|
29
|
+
"contextPercentageThreshold": 0.5 // Threshold for compressing history
|
|
30
|
+
},
|
|
31
|
+
|
|
32
|
+
// Bug reporting customization
|
|
33
|
+
"bugCommand": {
|
|
34
|
+
"urlTemplate": "https://github.com/google-gemini/gemini-cli/issues/new?template=bug_report.yml&title={title}&info={info}"
|
|
35
|
+
},
|
|
36
|
+
|
|
37
|
+
// Extensions and integrations via MCP servers
|
|
38
|
+
"mcpServers": {
|
|
39
|
+
// Example structure; override or extend as needed
|
|
40
|
+
// "myServer": {
|
|
41
|
+
// "command": "my_mcp_tool",
|
|
42
|
+
// "args": [],
|
|
43
|
+
// "httpUrl": "http://localhost:####/mcp",
|
|
44
|
+
// "headers": {},
|
|
45
|
+
// "timeout": 10000,
|
|
46
|
+
// "trust": false,
|
|
47
|
+
// "includeTools": [],
|
|
48
|
+
// "excludeTools": []
|
|
49
|
+
// }
|
|
50
|
+
},
|
|
51
|
+
|
|
52
|
+
// Control which tools are available
|
|
53
|
+
"coreTools": [
|
|
54
|
+
"EditTool",
|
|
55
|
+
"GlobTool",
|
|
56
|
+
"WebSearchTool",
|
|
57
|
+
"ReadFileTool",
|
|
58
|
+
"LSTool",
|
|
59
|
+
"ReadManyFilesTool",
|
|
60
|
+
"MemoryTool",
|
|
61
|
+
"GrepTool",
|
|
62
|
+
"ShellTool",
|
|
63
|
+
"WebFetchTool",
|
|
64
|
+
"WriteFileTool"
|
|
65
|
+
],
|
|
66
|
+
"excludeTools": [],
|
|
67
|
+
|
|
68
|
+
// Custom color themes (optional)
|
|
69
|
+
"customThemes": {
|
|
70
|
+
"MyCustomTheme": {
|
|
71
|
+
"name": "MyCustomTheme",
|
|
72
|
+
"type": "custom",
|
|
73
|
+
"Background": "#181818",
|
|
74
|
+
"Foreground": "#F8F8F2",
|
|
75
|
+
"AccentBlue": "#61AFEF",
|
|
76
|
+
"AccentPurple": "#C678DD",
|
|
77
|
+
"AccentGreen": "#98C379"
|
|
78
|
+
// Add more as desired
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
|
|
2
|
+
#!/usr/bin/env python3
|
|
3
|
+
"""Script to generate a markdown table with checkboxes for all Python files in the repo."""
|
|
4
|
+
|
|
5
|
+
from pathlib import Path
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
def get_python_files(repo_root: Path) -> list[str]:
|
|
9
|
+
"""Get all Python files relative to repo root."""
|
|
10
|
+
# Get all .py files recursively
|
|
11
|
+
py_files = list(repo_root.glob("**/*.py"))
|
|
12
|
+
|
|
13
|
+
# Filter out files in .venv and __pycache__ directories
|
|
14
|
+
filtered_files = []
|
|
15
|
+
for file_path in py_files:
|
|
16
|
+
relative_path = file_path.relative_to(repo_root)
|
|
17
|
+
path_parts = relative_path.parts
|
|
18
|
+
|
|
19
|
+
# Skip files in .venv or __pycache__ directories
|
|
20
|
+
if any(part in {".venv", "__pycache__"} for part in path_parts):
|
|
21
|
+
continue
|
|
22
|
+
|
|
23
|
+
filtered_files.append(str(relative_path))
|
|
24
|
+
|
|
25
|
+
return sorted(filtered_files)
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def generate_markdown_table(files: list[str]) -> str:
|
|
29
|
+
"""Generate markdown table with checkboxes."""
|
|
30
|
+
header = "# Python Files Checklist\n\n"
|
|
31
|
+
table = "| Index | File Path | Status |\n|-------|-----------|--------|\n"
|
|
32
|
+
|
|
33
|
+
for index, file_path in enumerate(files, start=1):
|
|
34
|
+
# Remove leading ./ if present
|
|
35
|
+
clean_path = file_path.lstrip('./')
|
|
36
|
+
table += f"| {index} | {clean_path} | - [ ] |\n"
|
|
37
|
+
|
|
38
|
+
return header + table
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
def main() -> None:
|
|
42
|
+
"""Main function."""
|
|
43
|
+
repo_root = Path.cwd()
|
|
44
|
+
if not repo_root.joinpath("pyproject.toml").exists():
|
|
45
|
+
raise RuntimeError(f" {repo_root} Not a repo root")
|
|
46
|
+
output_file = repo_root / ".ai" / "all_files_with_index.md"
|
|
47
|
+
|
|
48
|
+
print(f"Repo root: {repo_root}")
|
|
49
|
+
print(f"Output file: {output_file}")
|
|
50
|
+
|
|
51
|
+
# Ensure output directory exists
|
|
52
|
+
output_file.parent.mkdir(parents=True, exist_ok=True)
|
|
53
|
+
|
|
54
|
+
# Get Python files
|
|
55
|
+
python_files = get_python_files(repo_root)
|
|
56
|
+
print(f"Found {len(python_files)} Python files")
|
|
57
|
+
|
|
58
|
+
# Generate markdown
|
|
59
|
+
markdown_content = generate_markdown_table(python_files)
|
|
60
|
+
print(f"Generated markdown content length: {len(markdown_content)}")
|
|
61
|
+
|
|
62
|
+
# Write to file
|
|
63
|
+
output_file.write_text(markdown_content)
|
|
64
|
+
print(f"Generated {output_file} with {len(python_files)} Python files")
|
|
65
|
+
|
|
66
|
+
# Create 5 symlinks to repo_root at ~/code_copies/${repo_name}_copy_{i}
|
|
67
|
+
import pathlib
|
|
68
|
+
# import os
|
|
69
|
+
repo_root = pathlib.Path.cwd().resolve()
|
|
70
|
+
repo_name: str = pathlib.Path(repo_root).name
|
|
71
|
+
symlink_dir: pathlib.Path = pathlib.Path.home() / "code_copies"
|
|
72
|
+
symlink_dir.mkdir(exist_ok=True)
|
|
73
|
+
for i in range(1, 6):
|
|
74
|
+
symlink_path: pathlib.Path = symlink_dir / f"{repo_name}_copy_{i}"
|
|
75
|
+
if symlink_path.exists() or symlink_path.is_symlink():
|
|
76
|
+
symlink_path.unlink()
|
|
77
|
+
symlink_path.symlink_to(repo_root, target_is_directory=True)
|
|
78
|
+
# Windows equivalent (comment):
|
|
79
|
+
# for /l %i in (1,1,5) do mklink /D "%USERPROFILE%\code_copies\{repo_name}_copy_%i" "C:\path\to\repo_root"
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
if __name__ == "__main__":
|
|
83
|
+
main()
|
|
84
|
+
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
|
|
2
|
+
---
|
|
3
|
+
applyTo: "**/*.py"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Python Development Environment and tooling:
|
|
7
|
+
* If you find that uv is not available in terminal, look for how to install it in https://github.com/astral-sh/uv
|
|
8
|
+
* To initialize a new python project, use `cd $repo_root; uv init --python 3.13`
|
|
9
|
+
* To create virtual env, use `cd $repo_root; uv venv`.
|
|
10
|
+
* To install venv and dependency of an existing project, use `cd $repo_root; uv sync`.
|
|
11
|
+
* Please run any python file using `uv run $file.py`
|
|
12
|
+
* Same for tools, e.g. `un run python pytest $file_path`
|
|
13
|
+
* To add a package, use `cd $repo_root; uv add <package_name>`.
|
|
14
|
+
* Please never mention versions of package, so uv will bring the latest.
|
|
15
|
+
* On this note, I have to say that I am seriously concerned about AI using very outdated coding style.
|
|
16
|
+
* Use python 3.13 syntax features.
|
|
17
|
+
* Use modern standards, e.g. Path from pathlib.
|
|
18
|
+
* Never touch `pyproject.toml` manually, this file is strictly managed by `uv` tool on your behalf.
|
|
19
|
+
* If you are writing a test or any temporary script for discovering or undestanding something as an intermediate step, then,
|
|
20
|
+
please keep all your temp scripts and files under ./.ai/tmp_scripts directory, its included in .gitignore and won't litter the repo.
|
|
21
|
+
Its also nice if you create a subdirectory therein to contain relevant files for the task at hand, to avoid confusion with other files from other ai agents working simulataneously on other things.
|
|
22
|
+
* When you run a command in the terminal, please don't assume that it will run in the correct repo root directory. Always cd first to the repo root, or the desired directory, then run the command.
|
|
23
|
+
|
|
24
|
+
# Python Coding Rules
|
|
25
|
+
* Please type hint all the code. Use fully quilaified types, not just generics like dict, list, etc, rather dict[str, int], list[float], 'npt.NDarray[np.float32]', etc.
|
|
26
|
+
* Use `Any` type only if absoloutely necessary.
|
|
27
|
+
* Please use `# type: ignore blah blah`, to silence any warning from pyright or other linters and type checkers, but only when necessary. Otherwise, listen to them and adjust accordingly, or use cast from typing.
|
|
28
|
+
* Use typeddict, dataclasses and literals when necessary to avoid blackbox str or dict[str, str] etc.
|
|
29
|
+
* ALL functions / methods etc must clearly indicate the return type.
|
|
30
|
+
* Do not leave dangling imports or variables unused, prefix their name with underscore if necessary to undicate they are unused.
|
|
31
|
+
* Please prefer to use absolute imports, avoid relatives when possible.
|
|
32
|
+
* Use triple quotes and triple double quotes f-strings for string formatting and avoid when possible all goofy escaping when interpolation.
|
|
33
|
+
* If needed, opt for polars not pandas, whenever possible.
|
|
34
|
+
* when finished, run a linting static analysis check against files you touched, Any fix any mistakes.
|
|
35
|
+
* Please run `uv run -m pyright $file_touched` and address all issues. if `pyright is not there, first run `uv add pyright --dev`.
|
|
36
|
+
* For all type checkers and linters, like mypy, pyright, pyrefly and pylint, there are config files at different levels of the repo all the way up to home directory level. You don't need to worry about them, just be mindful that they exist. The tools themselves will respect the configs therein.
|
|
37
|
+
* If you want to run all linters and pycheckers agains the entire project to make sure everything is clean, I prepared a nice shell script, you can run it from the repo root as `./.scripts/lint_and_typecheck.sh`. It will produce markdown files that are you are meant to look at @ ./.linters/*.md
|
|
38
|
+
|
|
39
|
+
# General Programming Ethos:
|
|
40
|
+
* Make sure all the code is rigorous, no lazy stuff.
|
|
41
|
+
* For example, always avoid default values in arguments of functions. Those are evil and cause confusion. Always be explicit in parameter passing.
|
|
42
|
+
* Please never ever attempt to change code files by writing meta code to do string manipulation on files, e.g. with `sed` command with terminal. Please do change the files one by one, no matter how many there is. Don't worry about time, nor context window size, its okay, take your time and do the legwork. You can stop in the middle and we will have another LLM to help with the rest.
|
|
43
|
+
* Please avoid writing README files and avoid docstring and comments in code unless absolutely necessary. Use clear naming conventions instead of documenting.
|
|
44
|
+
* Always prefer to functional style of programming over OOP.
|
|
45
|
+
* When passing arguments or constructing dicts or lists or tuples, avoid breaking lines too much, try to use ~ 150 characters per line before breaking to new one.
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
from pathlib import Path
|
|
4
|
+
from typing import Optional
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
installations = """
|
|
8
|
+
uv add --upgrade-package pylint pyright mypy pyrefly ty --dev # linters and type checkers
|
|
9
|
+
uv add --upgrade-package pytest --dev
|
|
10
|
+
"""
|
|
11
|
+
|
|
12
|
+
def get_repo_root(path: Path) -> Optional[Path]:
|
|
13
|
+
from git import Repo, InvalidGitRepositoryError
|
|
14
|
+
try:
|
|
15
|
+
repo = Repo(path, search_parent_directories=True)
|
|
16
|
+
root = repo.working_tree_dir
|
|
17
|
+
if root is not None:
|
|
18
|
+
return Path(root)
|
|
19
|
+
except InvalidGitRepositoryError:
|
|
20
|
+
pass
|
|
21
|
+
return None
|
|
22
|
+
|
|
23
|
+
def add_ai_configs(repo_root: Path):
|
|
24
|
+
import machineconfig as mc
|
|
25
|
+
mc_root = Path(mc.__file__).parent
|
|
26
|
+
|
|
27
|
+
repo_root_resolved = get_repo_root(repo_root)
|
|
28
|
+
if repo_root_resolved is not None: repo_root = repo_root_resolved # this means you can run the command from any subdirectory of the repo.
|
|
29
|
+
|
|
30
|
+
if repo_root.joinpath("pyproject.toml").exists() is False:
|
|
31
|
+
uv_init = input(f"{repo_root} does not seem to be a python project (no pyproject.toml found), would you like to initialize one? (y/n) ")
|
|
32
|
+
if uv_init.strip().lower() == "y":
|
|
33
|
+
command_to_run = """
|
|
34
|
+
uv init --python 3.13
|
|
35
|
+
uv venv
|
|
36
|
+
"""
|
|
37
|
+
import subprocess
|
|
38
|
+
subprocess.run(command_to_run, shell=True, check=True)
|
|
39
|
+
else:
|
|
40
|
+
print("Terminating mcinit ...")
|
|
41
|
+
return
|
|
42
|
+
|
|
43
|
+
instructions_repository_dir = mc_root.joinpath("scripts/python/ai/instructions")
|
|
44
|
+
chatmodes_dir = mc_root.joinpath("scripts/python/ai/chatmodes")
|
|
45
|
+
prompts_dir = mc_root.joinpath("scripts/python/ai/prompts")
|
|
46
|
+
# python_rules_file = instructions_repository_dir.joinpath("python/dev.md")
|
|
47
|
+
|
|
48
|
+
# VSCODE:
|
|
49
|
+
# as per: https://docs.github.com/en/copilot/how-tos/configure-custom-instructions/add-repository-instructions
|
|
50
|
+
# Copilot Chat on github website chat & basic guideline.
|
|
51
|
+
repo_root.joinpath(".github/chatmodes").mkdir(parents=True, exist_ok=True)
|
|
52
|
+
repo_root.joinpath(".github/prompts").mkdir(parents=True, exist_ok=True)
|
|
53
|
+
repo_root.joinpath(".github/instructions").mkdir(parents=True, exist_ok=True)
|
|
54
|
+
for a_chatmode in chatmodes_dir.iterdir():
|
|
55
|
+
repo_root.joinpath(".github/chatmodes", a_chatmode.name.split(".")[0] + ".chatmode.md").write_text(data=a_chatmode.read_text(encoding="utf-8"), encoding="utf-8")
|
|
56
|
+
for a_prompt in prompts_dir.iterdir():
|
|
57
|
+
repo_root.joinpath(".github/prompts", a_prompt.name.split(".")[0] + ".prompt.md").write_text(data=a_prompt.read_text(encoding="utf-8"), encoding="utf-8")
|
|
58
|
+
for an_instruction in instructions_repository_dir.rglob("*.md"):
|
|
59
|
+
repo_root.joinpath(".github/instructions", an_instruction.name.split(".")[0] + ".instruction.md").write_text(data=an_instruction.read_text(encoding="utf-8"), encoding="utf-8")
|
|
60
|
+
tmp = repo_root.joinpath(".github/copilot-instructions.md")
|
|
61
|
+
|
|
62
|
+
generic_instructions = instructions_repository_dir.joinpath("python/dev.instructions.md")
|
|
63
|
+
tmp.write_text(data=generic_instructions.read_text(encoding="utf-8"), encoding="utf-8")
|
|
64
|
+
|
|
65
|
+
# CURSOR, GEMINI, CLAUDE CODE, CRUSH, CLINE.
|
|
66
|
+
tmp = repo_root.joinpath(".cursor/rules/python_dev.mdc")
|
|
67
|
+
tmp.parent.mkdir(parents=True, exist_ok=True)
|
|
68
|
+
tmp.write_text(data=generic_instructions.read_text(encoding="utf-8"), encoding="utf-8")
|
|
69
|
+
tmp = repo_root.joinpath("CLAUDE.md")
|
|
70
|
+
tmp.write_text(data=generic_instructions.read_text(encoding="utf-8"), encoding="utf-8")
|
|
71
|
+
tmp = repo_root.joinpath("CRUSH.md")
|
|
72
|
+
tmp.write_text(data=generic_instructions.read_text(encoding="utf-8"), encoding="utf-8")
|
|
73
|
+
|
|
74
|
+
tmp = repo_root.joinpath("GEMINI.md")
|
|
75
|
+
tmp.write_text(data=generic_instructions.read_text(encoding="utf-8"), encoding="utf-8")
|
|
76
|
+
gemini_settings = mc_root.joinpath("scripts/python/ai/configs/.gemini/settings.json")
|
|
77
|
+
repo_root.joinpath(".gemini").mkdir(parents=True, exist_ok=True)
|
|
78
|
+
repo_root.joinpath(".gemini/settings.json").write_text(data=gemini_settings.read_text(encoding="utf-8"), encoding="utf-8")
|
|
79
|
+
|
|
80
|
+
tmp = repo_root.joinpath(".clinerules")
|
|
81
|
+
tmp.mkdir(parents=True, exist_ok=True)
|
|
82
|
+
tmp.joinpath("python_dev.md").write_text(data=generic_instructions.read_text(encoding="utf-8"), encoding="utf-8")
|
|
83
|
+
|
|
84
|
+
# OTHERS
|
|
85
|
+
scripts_dir = mc_root.joinpath("scripts/python/ai/scripts")
|
|
86
|
+
repo_root.joinpath(".scripts").mkdir(parents=True, exist_ok=True)
|
|
87
|
+
for a_script in scripts_dir.iterdir():
|
|
88
|
+
repo_root.joinpath(".scripts", a_script.name).write_text(data=a_script.read_text(encoding="utf-8"), encoding="utf-8")
|
|
89
|
+
|
|
90
|
+
dot_ai_dir = repo_root.joinpath(".ai")
|
|
91
|
+
dot_ai_dir.mkdir(parents=True, exist_ok=True)
|
|
92
|
+
dot_git_ignore_path = repo_root.joinpath(".gitignore")
|
|
93
|
+
if dot_git_ignore_path.exists():
|
|
94
|
+
dot_git_ignore_content = dot_git_ignore_path.read_text(encoding="utf-8")
|
|
95
|
+
to_add: list[str] = []
|
|
96
|
+
to_check_for: list[str] = [".links", "notebooks", ".ai", ".scripts",
|
|
97
|
+
"GEMINI.md", "CLAUDE.md", ".cursor", ".github"]
|
|
98
|
+
for item in to_check_for:
|
|
99
|
+
if item not in dot_git_ignore_content:
|
|
100
|
+
to_add.append(item)
|
|
101
|
+
# if "*.ipynb"
|
|
102
|
+
if len(to_add) > 0:
|
|
103
|
+
dot_git_ignore_path.write_text(data=dot_git_ignore_content + "\n" + "\n".join(to_add), encoding="utf-8")
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
if __name__ == "__main__":
|
|
107
|
+
add_ai_configs(repo_root=Path.cwd())
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
```prompt
|
|
2
|
+
---
|
|
3
|
+
description: 'A minimal skeleton for deep research reports.'
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# <Title>
|
|
7
|
+
|
|
8
|
+
Date: <YYYY-MM-DD>
|
|
9
|
+
|
|
10
|
+
## Executive summary
|
|
11
|
+
- <key point 1> [n]
|
|
12
|
+
- <key point 2> [n]
|
|
13
|
+
- <key point 3> [n]
|
|
14
|
+
|
|
15
|
+
## Key findings
|
|
16
|
+
### <Finding A>
|
|
17
|
+
- Claim: <text> [n]
|
|
18
|
+
- Evidence: "<quote>" [n]
|
|
19
|
+
- Notes: <brief trust/limitations>
|
|
20
|
+
|
|
21
|
+
### <Finding B>
|
|
22
|
+
- Claim: <text> [n]
|
|
23
|
+
- Evidence: "<quote>" [n]
|
|
24
|
+
|
|
25
|
+
## Analysis
|
|
26
|
+
- Trade-offs
|
|
27
|
+
- Uncertainties
|
|
28
|
+
- What to watch next
|
|
29
|
+
|
|
30
|
+
## Recommendations / Direct answer
|
|
31
|
+
- <concise recommendation or answer> [n]
|
|
32
|
+
|
|
33
|
+
## Appendix: Sources
|
|
34
|
+
[1] <Title> — <Author/Org>, <Date>. <URL>
|
|
35
|
+
[2] <Title> — <Author/Org>, <Date>. <URL>
|
|
36
|
+
[3] <Title> — <Author/Org>, <Date>. <URL>
|
|
37
|
+
|
|
38
|
+
```
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
|
|
2
|
+
# gotch1: make sure we are in the right directory: repo root. Solution: check if .pyproject.toml exists, otherwise stop.
|
|
3
|
+
if [ ! -f "./pyproject.toml" ]; then
|
|
4
|
+
echo "Error: pyproject.toml not found in the current directory. Please run this script from the root of a Python project."
|
|
5
|
+
exit 1
|
|
6
|
+
fi
|
|
7
|
+
|
|
8
|
+
echo "Running linting and type checking..."
|
|
9
|
+
|
|
10
|
+
echo "Setting up environment..."
|
|
11
|
+
# uv add pylint pyright mypy pyrefly ruff ty --dev # linters and type checkers
|
|
12
|
+
# uv add --dev cleanpy pylint pyright mypy pyrefly --upgrade-package cleanpy pylint pyright mypy pyrefly
|
|
13
|
+
uv add --dev pyright --upgrade-package pyright
|
|
14
|
+
uv add --dev pylint --upgrade-package pylint
|
|
15
|
+
uv add --dev mypy --upgrade-package mypy
|
|
16
|
+
uv add --dev pyrefly --upgrade-package pyrefly
|
|
17
|
+
uv add --dev cleanpy --upgrade-package cleanpy
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
uv add types-requests types-toml types-PyYAML types-pytz types-paramiko types-urllib3 --dev
|
|
21
|
+
uv add types-mysqlclient types-SQLAlchemy --dev
|
|
22
|
+
|
|
23
|
+
uv run -m cleanpy .
|
|
24
|
+
uv run -m ruff clean
|
|
25
|
+
# uv run -m ruff format .
|
|
26
|
+
uv run -m ruff check . --fix
|
|
27
|
+
uv run --with machineconfig -m machineconfig.scripts.python.ai.generate_files
|
|
28
|
+
|
|
29
|
+
mkdir .linters
|
|
30
|
+
|
|
31
|
+
echo "Running pyright..."
|
|
32
|
+
rm ./.linters/pyright_result.md || true
|
|
33
|
+
uv run pyright . > ./.linters/pyright_result.md
|
|
34
|
+
echo "Results of pyright are in ./.linters/pyright_result.md"
|
|
35
|
+
|
|
36
|
+
rm ./.linters/mypy_result.md || true
|
|
37
|
+
uv run mypy . > ./.linters/mypy_result.md
|
|
38
|
+
echo "Results of mypy are in ./.linters/mypy_result.md"
|
|
39
|
+
|
|
40
|
+
rm ./.linters/pylint_result.md || true
|
|
41
|
+
uv run pylint ./src/ > ./.linters/pylint_result.md
|
|
42
|
+
echo "Results of pylint are in ./.linters/pylint_result.md"
|
|
43
|
+
|
|
44
|
+
rm ./.linters/pylint_result.md || true
|
|
45
|
+
uv run pyrefly check . > ./.linters/pyrefly_result.md
|
|
46
|
+
echo "Results of pyrefly are in ./.linters/pyrefly_result.md"
|
|
47
|
+
|
|
48
|
+
rm ./.linters/ruff_result.md || true
|
|
49
|
+
uv run ruff check . > ./.linters/ruff_result.md
|
|
50
|
+
echo "Results of ruff are in ./.linters/ruff_result.md"
|
|
51
|
+
|
|
52
|
+
echo "All done! Please check the .linters directory for results."
|
|
@@ -21,19 +21,19 @@ def get_conn_string(sess_name: str) -> str:
|
|
|
21
21
|
|
|
22
22
|
def main():
|
|
23
23
|
console.print(Panel("🔌 Tmate Connection Manager", title="[bold]Welcome[/bold]"))
|
|
24
|
-
|
|
24
|
+
|
|
25
25
|
parser = argparse.ArgumentParser(description='Tmate launcher')
|
|
26
26
|
parser.add_argument("sess_name", help="session name", default=random.choices(list(string.digits + string.ascii_letters), k=20))
|
|
27
27
|
args = parser.parse_args()
|
|
28
|
-
|
|
28
|
+
|
|
29
29
|
console.print(f"🔍 Looking up session: {args.sess_name}")
|
|
30
30
|
conn_string = get_conn_string(args.sess_name)
|
|
31
|
-
|
|
31
|
+
|
|
32
32
|
console.print(Panel(f"SSH Connection String: ssh {conn_string}", title="[bold green]SSH Connection[/bold green]"))
|
|
33
|
-
|
|
33
|
+
|
|
34
34
|
console.print("🚀 Connecting to tmate session...")
|
|
35
35
|
os.system(f"ssh {conn_string}")
|
|
36
|
-
|
|
36
|
+
|
|
37
37
|
console.print("✅ Connection closed")
|
|
38
38
|
|
|
39
39
|
|
|
@@ -30,13 +30,13 @@ def main():
|
|
|
30
30
|
console.print(f"🔍 Looking up session configuration: {args.sess_name}")
|
|
31
31
|
sess_name = creds['sessions_names'][args.sess_name]
|
|
32
32
|
api_key = creds['keys']['api_key']
|
|
33
|
-
|
|
33
|
+
|
|
34
34
|
console.print(Panel(f"🚀 Starting tmate session: {sess_name}", title="[bold green]Session Info[/bold green]"))
|
|
35
|
-
|
|
35
|
+
|
|
36
36
|
res = f"tmate -a ~/.ssh/authorized_keys -k {api_key} -n {sess_name} -F"
|
|
37
37
|
console.print("[bold cyan]Running:[/bold cyan] tmate with configured API key and session name")
|
|
38
38
|
os.system(res)
|
|
39
|
-
|
|
39
|
+
|
|
40
40
|
console.print("[green]Tmate session ended[/green]")
|
|
41
41
|
|
|
42
42
|
|
|
@@ -51,13 +51,13 @@ def main2():
|
|
|
51
51
|
|
|
52
52
|
def set_theme(theme: str):
|
|
53
53
|
print(f"🔄 Setting WezTerm theme to: {theme}")
|
|
54
|
-
txt_lines = PathExtended("~/.config/wezterm/wezterm.lua").expanduser().read_text().splitlines()
|
|
54
|
+
txt_lines = PathExtended("~/.config/wezterm/wezterm.lua").expanduser().read_text(encoding="utf-8").splitlines()
|
|
55
55
|
res_lines = []
|
|
56
56
|
for line in txt_lines:
|
|
57
57
|
if 'config.color_scheme = ' in line:
|
|
58
58
|
res_lines.append(f"config.color_scheme = '{theme}'")
|
|
59
59
|
else: res_lines.append(line)
|
|
60
|
-
PathExtended("~/.config/wezterm/wezterm.lua").expanduser().write_text('\n'.join(res_lines))
|
|
60
|
+
PathExtended("~/.config/wezterm/wezterm.lua").expanduser().write_text('\n'.join(res_lines), encoding="utf-8")
|
|
61
61
|
time.sleep(0.1)
|
|
62
62
|
print("💾 Configuration saved")
|
|
63
63
|
|