deployvm 0.1.3__tar.gz

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.
@@ -0,0 +1,48 @@
1
+ # SQLite databases
2
+ *.db
3
+ *.db?*
4
+ *.db-journal
5
+ *.db-wal
6
+ *.db-shm
7
+
8
+ # Daemon runtime files
9
+ daemon.lock
10
+ daemon.log
11
+ daemon.pid
12
+ bd.sock
13
+ sync-state.json
14
+ last-touched
15
+
16
+ # Local version tracking (prevents upgrade notification spam after git ops)
17
+ .local_version
18
+
19
+ # Legacy database files
20
+ db.sqlite
21
+ bd.db
22
+
23
+ # Worktree redirect file (contains relative path to main repo's .beads/)
24
+ # Must not be committed as paths would be wrong in other clones
25
+ redirect
26
+
27
+ # Merge artifacts (temporary files from 3-way merge)
28
+ beads.base.jsonl
29
+ beads.base.meta.json
30
+ beads.left.jsonl
31
+ beads.left.meta.json
32
+ beads.right.jsonl
33
+ beads.right.meta.json
34
+
35
+ # Sync state (local-only, per-machine)
36
+ # These files are machine-specific and should not be shared across clones
37
+ .sync.lock
38
+ sync_base.jsonl
39
+ export-state/
40
+
41
+ # Process semaphore slot files (runtime concurrency limiting)
42
+ sem/
43
+
44
+ # NOTE: Do NOT add negation patterns (e.g., !issues.jsonl) here.
45
+ # They would override fork protection in .git/info/exclude, allowing
46
+ # contributors to accidentally commit upstream issue databases.
47
+ # The JSONL files (issues.jsonl, interactions.jsonl) and config files
48
+ # are tracked by git by default since no pattern above ignores them.
File without changes
@@ -0,0 +1 @@
1
+ 0.49.6
@@ -0,0 +1,81 @@
1
+ # Beads - AI-Native Issue Tracking
2
+
3
+ Welcome to Beads! This repository uses **Beads** for issue tracking - a modern, AI-native tool designed to live directly in your codebase alongside your code.
4
+
5
+ ## What is Beads?
6
+
7
+ Beads is issue tracking that lives in your repo, making it perfect for AI coding agents and developers who want their issues close to their code. No web UI required - everything works through the CLI and integrates seamlessly with git.
8
+
9
+ **Learn more:** [github.com/steveyegge/beads](https://github.com/steveyegge/beads)
10
+
11
+ ## Quick Start
12
+
13
+ ### Essential Commands
14
+
15
+ ```bash
16
+ # Create new issues
17
+ bd create "Add user authentication"
18
+
19
+ # View all issues
20
+ bd list
21
+
22
+ # View issue details
23
+ bd show <issue-id>
24
+
25
+ # Update issue status
26
+ bd update <issue-id> --status in_progress
27
+ bd update <issue-id> --status done
28
+
29
+ # Sync with git remote
30
+ bd sync
31
+ ```
32
+
33
+ ### Working with Issues
34
+
35
+ Issues in Beads are:
36
+ - **Git-native**: Stored in `.beads/issues.jsonl` and synced like code
37
+ - **AI-friendly**: CLI-first design works perfectly with AI coding agents
38
+ - **Branch-aware**: Issues can follow your branch workflow
39
+ - **Always in sync**: Auto-syncs with your commits
40
+
41
+ ## Why Beads?
42
+
43
+ ✨ **AI-Native Design**
44
+ - Built specifically for AI-assisted development workflows
45
+ - CLI-first interface works seamlessly with AI coding agents
46
+ - No context switching to web UIs
47
+
48
+ 🚀 **Developer Focused**
49
+ - Issues live in your repo, right next to your code
50
+ - Works offline, syncs when you push
51
+ - Fast, lightweight, and stays out of your way
52
+
53
+ 🔧 **Git Integration**
54
+ - Automatic sync with git commits
55
+ - Branch-aware issue tracking
56
+ - Intelligent JSONL merge resolution
57
+
58
+ ## Get Started with Beads
59
+
60
+ Try Beads in your own projects:
61
+
62
+ ```bash
63
+ # Install Beads
64
+ curl -sSL https://raw.githubusercontent.com/steveyegge/beads/main/scripts/install.sh | bash
65
+
66
+ # Initialize in your repo
67
+ bd init
68
+
69
+ # Create your first issue
70
+ bd create "Try out Beads"
71
+ ```
72
+
73
+ ## Learn More
74
+
75
+ - **Documentation**: [github.com/steveyegge/beads/docs](https://github.com/steveyegge/beads/tree/main/docs)
76
+ - **Quick Start Guide**: Run `bd quickstart`
77
+ - **Examples**: [github.com/steveyegge/beads/examples](https://github.com/steveyegge/beads/tree/main/examples)
78
+
79
+ ---
80
+
81
+ *Beads: Issue tracking that moves at the speed of thought* ⚡
Binary file
Binary file
Binary file
@@ -0,0 +1,27 @@
1
+ {"id":"webserver-15m","title":"Investigate MCP/anyio Python 3.13 compatibility crash in chatboti","description":"The chatboti FastAPI app crashes on startup with a RuntimeError from anyio/MCP:\n\nRuntimeError: Attempted to exit cancel scope in a different task than it was entered in\n\nError occurs in:\n- /home/deploy/chatboti/.venv/lib/python3.13/site-packages/mcp/client/stdio/__init__.py\n- /home/deploy/chatboti/.venv/lib/python3.13/site-packages/anyio/_backends/_asyncio.py\n\nThe error happens during MCP session initialization in chatboti/agent.py when calling await self._mcp_session.initialize().\n\nThis appears to be a Python 3.13 compatibility issue with the anyio library's cancel scope handling across tasks. The MCP stdio client is likely using anyio patterns that worked in Python 3.12 but break in 3.13 due to stricter asyncio semantics.\n\nInvestigation needed:\n1. Check anyio and MCP library versions in chatboti\n2. Review Python 3.13 changes to asyncio/cancel scopes\n3. Check if there are updated anyio/MCP versions that fix this\n4. Determine if we need to pin Python version or update dependencies\n5. Test if downgrading to Python 3.12 resolves the issue\n\nLogs show the app deploys successfully but crashes immediately on startup when trying to connect to the MCP server.","notes":"Investigation findings:\n- Currently using: mcp==1.20.0, anyio==4.11.0, Python 3.13.5\n- Found MCP SDK issue #521: https://github.com/modelcontextprotocol/python-sdk/issues/521\n- Root cause: anyio cancel scopes entered in one task, exited in another\n- Latest versions: mcp 1.26.0, anyio 4.12.1 (includes Python 3.13 fixes)\n- Solution: upgrade both mcp and anyio to latest versions\nVersion upgrade didn't fix the issue. Error still occurs with mcp==1.26.0, anyio==4.12.1.\n\nRoot cause: AsyncExitStack usage causes context managers to be exited in different task than entered. Need to refactor agent.py to use direct 'async with' statements instead of AsyncExitStack.","status":"closed","priority":2,"issue_type":"bug","owner":"apposite@gmail.com","created_at":"2026-02-12T13:15:28.795242+11:00","created_by":"Bosco Ho","updated_at":"2026-02-12T13:33:33.760777+11:00","closed_at":"2026-02-12T13:33:33.760777+11:00","close_reason":"Fixed Python 3.13 anyio cancel scope crash.\n\nSolution:\n1. Upgraded mcp to 1.26.0 and anyio to 4.12.1\n2. Refactored agent.py to use AsyncExitStack pattern \n3. Fixed server.py to manually manage InfoAgent lifecycle (connect/disconnect) instead of using async context manager within FastAPI lifespan\n\nRoot cause: Using 'async with InfoAgent()' inside lifespan caused AsyncExitStack cleanup in different task context, violating anyio requirement that cancel scopes must be entered/exited in same task.\n\nTesting: Server now starts successfully, all endpoints responding correctly with MCP tools loaded."}
2
+ {"id":"webserver-1wn","title":"Fix chatboti-deploy: use no-SSL by default","status":"closed","priority":2,"issue_type":"task","owner":"apposite@gmail.com","created_at":"2026-02-12T14:18:55.226037+11:00","created_by":"Bosco Ho","updated_at":"2026-02-12T14:19:13.662404+11:00","closed_at":"2026-02-12T14:19:13.662404+11:00","close_reason":"Fixed chatboti-deploy.sh to use --no-ssl (IP-only) instead of SSL with domain"}
3
+ {"id":"webserver-1zr","title":"Phase 2: Extract server.py module","description":"Extract SSH operations, file transfer, network validation, server setup, nginx/DNS config into server.py. Medium risk, widely used.","status":"closed","priority":2,"issue_type":"task","owner":"apposite@gmail.com","created_at":"2026-02-11T18:18:40.200751+11:00","created_by":"Bosco Ho","updated_at":"2026-02-11T18:26:10.957835+11:00","closed_at":"2026-02-11T18:26:10.957835+11:00","close_reason":"Extracted server.py module with SSH, rsync, nginx, DNS, validation functions. All imports working.","dependencies":[{"issue_id":"webserver-1zr","depends_on_id":"webserver-xgo","type":"blocks","created_at":"2026-02-11T18:18:51.841424+11:00","created_by":"Bosco Ho"}]}
4
+ {"id":"webserver-3hz","title":"Enhance AWS credential filtering to preserve/add AWS_REGION","status":"closed","priority":2,"issue_type":"task","owner":"apposite@gmail.com","created_at":"2026-02-12T14:20:31.474317+11:00","created_by":"Bosco Ho","updated_at":"2026-02-12T14:20:40.330283+11:00","closed_at":"2026-02-12T14:20:40.330283+11:00","close_reason":"Enhanced AWS credential filtering to ensure AWS_REGION is preserved or added from profile config"}
5
+ {"id":"webserver-3le","title":"Add VM_SIZES validation and help text to providers","description":"Add VM_SIZES class constants to providers for validation and better UX.\n\nCurrently vm_size has no validation - users can pass invalid sizes.\n\nAdd:\n- AWSProvider.VM_SIZES class constant\n- DigitalOceanProvider.VM_SIZES class constant\n- Validation in validate_config()\n- Error messages showing valid sizes\n- CLI help text showing valid sizes (cyclopts)\n\nBenefits:\n- Fail fast with helpful errors\n- Better documentation in --help\n- Consistent with REGIONS validation","status":"closed","priority":2,"issue_type":"task","owner":"apposite@gmail.com","created_at":"2026-02-12T10:28:31.63296+11:00","created_by":"Bosco Ho","updated_at":"2026-02-12T10:30:31.247793+11:00","closed_at":"2026-02-12T10:30:31.247793+11:00","close_reason":"Added VM_SIZES validation and help text.\n\nChanges:\n- Added AWSProvider.VM_SIZES class constant (17 instance types)\n- Added DigitalOceanProvider.VM_SIZES class constant (7 sizes)\n- Updated validate_config() for both providers to validate vm_size\n- Added vm_size parameter documentation in CLI help text\n- Error messages now show all valid sizes\n\nTesting:\n- Invalid AWS size: Shows valid AWS types\n- Invalid DO size: Shows valid DO sizes\n- Help text shows examples for both providers\n\nResult: Better UX with early validation and helpful errors"}
6
+ {"id":"webserver-4jo","title":"Audit provider options usage and remove unused data","description":"Audit PROVIDER_OPTIONS to determine which fields are actually used.\n\nCurrent PROVIDER_OPTIONS contains:\n- regions (list of valid regions)\n- vm_sizes (list of valid VM sizes) \n- os_images (list of valid OS images)\n\nInvestigation:\n- Search for all uses of PROVIDER_OPTIONS in codebase\n- Check if validation is actually performed\n- Determine if data is used or just informational\n- Remove unused fields entirely\n\nThis should be done BEFORE inlining to avoid moving unnecessary code.","notes":"Audit complete. Findings:\n\nPROVIDER_OPTIONS usage:\n- Only AWS regions are actually validated (line 489)\n- DigitalOcean regions: NOT validated\n- vm_sizes (both providers): NOT used anywhere\n- os_images (both providers): NOT used anywhere\n\nPROVIDER_OPTIONS is:\n- Exported in __init__.py but never imported by external code\n- Only used internally in _validate_and_normalize_region() for AWS\n\nRecommendation:\n1. Remove vm_sizes and os_images entirely (unused)\n2. Keep AWS regions for validation\n3. Remove DigitalOcean regions (not validated, not used)\n4. Inline AWS regions as AWSProvider.REGIONS class constant\n5. Remove PROVIDER_OPTIONS dict entirely\n6. Remove from __init__.py exports","status":"closed","priority":2,"issue_type":"task","owner":"apposite@gmail.com","created_at":"2026-02-12T10:22:23.372691+11:00","created_by":"Bosco Ho","updated_at":"2026-02-12T10:25:57.006844+11:00","closed_at":"2026-02-12T10:25:57.006844+11:00","close_reason":"Removed unused PROVIDER_OPTIONS data and inlined AWS regions.\n\n- Removed vm_sizes and os_images (unused for both providers)\n- Removed DigitalOcean regions (not validated, not used)\n- Inlined AWS regions as AWSProvider.REGIONS class constant\n- Removed PROVIDER_OPTIONS dict entirely \n- Removed from __init__.py exports\n\nResult: -48 lines, cleaner code, better encapsulation"}
7
+ {"id":"webserver-5eu","title":"Remove obvious comments/docstrings and rewrite remaining in Sphinx format","status":"closed","priority":2,"issue_type":"task","owner":"apposite@gmail.com","created_at":"2026-02-11T17:39:09.260911+11:00","created_by":"Bosco Ho","updated_at":"2026-02-11T18:00:02.161966+11:00","closed_at":"2026-02-11T18:00:02.161966+11:00","close_reason":"Removed obvious comments/docstrings, rewrote remaining docstrings in concise Sphinx format. Reduced file from 2614 to 2332 lines (282 lines removed)."}
8
+ {"id":"webserver-5hm","title":"Wrap complex strings with quotes in log messages","description":"Improve log readability by consistently wrapping complex strings with single quotes.\n\nCurrent inconsistency:\n [INFO] Creating instance chatboti on aws...\n [INFO] Using AMI: ami-0abc123\n [ERROR] No Route53 hosted zone found for example.com\n\nProposed consistency:\n [INFO] Creating instance 'chatboti' on 'aws'...\n [INFO] Using AMI: 'ami-0abc123'\n [ERROR] No Route53 hosted zone found for 'example.com'\n\nStrings to quote:\n- Instance names\n- Domain names\n- File paths\n- AMI IDs\n- Security group names\n- IAM role names\n- VM sizes\n- Region names\n- Provider names\n- IP addresses\n- SSH key names\n\nBenefits:\n- Clearer distinction between log text and values\n- Easier to parse logs programmatically\n- More professional appearance\n- Helps identify empty/whitespace values\n\nScope:\n- Review all log(), warn(), error() calls in:\n - deploy_vm/cli.py\n - deploy_vm/providers.py\n - deploy_vm/server.py\n - deploy_vm/utils.py\n- Apply consistent quoting pattern\n- Consider f-string pattern: log(f\"Creating instance '{name}' on '{provider}'...\")\n\nExample patterns:\n log(f\"Creating instance '{name}'...\")\n error(f\"Invalid region: '{region}'\")\n warn(f\"File not found: '{path}'\")\n\nNotes:\n- Don't quote simple words (on, in, with, etc.)\n- Always quote user-provided values\n- Always quote identifiers (names, IDs, paths)","status":"closed","priority":3,"issue_type":"task","owner":"apposite@gmail.com","created_at":"2026-02-12T11:45:23.508088+11:00","created_by":"Bosco Ho","updated_at":"2026-02-12T13:01:41.293605+11:00","closed_at":"2026-02-12T13:01:41.293605+11:00","close_reason":"Added quotes to all complex strings in logs"}
9
+ {"id":"webserver-5qj","title":"Strip AWS_PROFILE from .env before uploading to AWS instances","description":"When deploying FastAPI apps to AWS EC2, automatically remove AWS_PROFILE from .env files before uploading.\n\nProblem:\n- Local development uses AWS_PROFILE in .env for AWS credentials\n- EC2 instances use IAM instance profiles (no AWS_PROFILE needed)\n- If AWS_PROFILE is uploaded, it can interfere with IAM role credentials\n- App on EC2 might try to use non-existent profile instead of IAM role\n\nExample scenario:\nLocal .env:\n AWS_PROFILE=myprofile\n AWS_REGION=us-east-1\n OTHER_VAR=value\n\nShould become on EC2 instance:\n AWS_REGION=us-east-1\n OTHER_VAR=value\n\nSolution approach:\n1. When uploading .env in deploy_fastapi() or deploy_nuxt()\n2. Detect if target is AWS provider\n3. Read .env file\n4. Filter out AWS_PROFILE line\n5. Upload filtered version\n\nImplementation location:\n- deploy_vm/server.py: deploy_fastapi() function\n- Look for where .env is uploaded\n- Add filtering step before upload\n\nCode pattern:\n if provider == 'aws' and env_file.exists():\n # Read .env\n lines = env_file.read_text().splitlines()\n # Filter out AWS_PROFILE\n filtered = [l for l in lines if not l.startswith('AWS_PROFILE=')]\n # Upload filtered version\n ...\n\nAlternative considerations:\n- Also filter AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY?\n- Add warning when filtering occurs?\n- Log what was filtered?\n- Consider whitelist approach instead?\n\nRelated:\n- This complements the IAM role setup we already do\n- Ensures app uses IAM role credentials correctly\n- Prevents credential conflicts\n\nPriority: P2 (can cause auth issues in production)","status":"closed","priority":2,"issue_type":"task","owner":"apposite@gmail.com","created_at":"2026-02-12T11:59:59.80564+11:00","created_by":"Bosco Ho","updated_at":"2026-02-12T12:46:43.443908+11:00","closed_at":"2026-02-12T12:46:43.443908+11:00","close_reason":"Implemented AWS credential filtering from .env files"}
10
+ {"id":"webserver-8f1","title":"Rename --provider-name to --provider in CLI","description":"Rename the --provider-name flag to just --provider for brevity across all CLI commands.\n\nCurrent usage (verbose):\n deploy-vm instance create my-server --provider-name aws\n deploy-vm dns nameservers example.com --provider-name aws\n deploy-vm nginx ssl my-server example.com user@example.com --provider-name aws\n\nProposed usage (concise):\n deploy-vm instance create my-server --provider aws\n deploy-vm dns nameservers example.com --provider aws\n deploy-vm nginx ssl my-server example.com user@example.com --provider aws\n\nChanges needed:\n1. Update cli.py - rename all 'provider_name' parameters to 'provider'\n2. Update function signatures (get_provider, create_instance, etc.)\n3. Update docstrings and help text\n4. Update README.md examples\n5. Update DOMAIN_SETUP.md examples\n6. Keep backward compatibility or document breaking change\n\nFiles to modify:\n- deploy_vm/cli.py (all commands with provider_name parameter)\n- deploy_vm/providers.py (get_provider function signature)\n- README.md (all example commands)\n- DOMAIN_SETUP.md (all example commands)\n\nConsiderations:\n- Breaking change - existing scripts using --provider-name will break\n- Could support both flags temporarily with deprecation warning\n- Or just update and document as breaking change in changelog\n\nType: Refactoring for better UX","status":"closed","priority":2,"issue_type":"task","owner":"apposite@gmail.com","created_at":"2026-02-12T11:20:13.20746+11:00","created_by":"Bosco Ho","updated_at":"2026-02-12T12:59:23.250998+11:00","closed_at":"2026-02-12T12:59:23.250998+11:00","close_reason":"Renamed --provider-name to --provider for better UX"}
11
+ {"id":"webserver-8xt","title":"Auto-create Route53 hosted zone in dns nameservers command","description":"Update dns nameservers command to automatically create Route53 hosted zone if it doesn't exist, removing manual step for users","status":"closed","priority":2,"issue_type":"feature","owner":"apposite@gmail.com","created_at":"2026-02-11T20:45:03.783158+11:00","created_by":"Bosco Ho","updated_at":"2026-02-11T20:47:20.962402+11:00","closed_at":"2026-02-11T20:47:20.962402+11:00","close_reason":"Enhanced dns nameservers to cache results in JSON file"}
12
+ {"id":"webserver-9nu","title":"Add os_image field to instance.json for AWS provider","description":"Support specifying os_image in instance.json configuration for AWS deployments","status":"closed","priority":2,"issue_type":"task","owner":"apposite@gmail.com","created_at":"2026-02-11T19:47:40.203776+11:00","created_by":"Bosco Ho","updated_at":"2026-02-12T10:36:38.849896+11:00","closed_at":"2026-02-12T10:36:38.849896+11:00","close_reason":"Implemented: AWS now saves resolved AMI ID to instance.json"}
13
+ {"id":"webserver-ac3","title":"Add dns nameservers command","description":"Add command to display Route53 or DigitalOcean nameservers for a domain with setup instructions","status":"closed","priority":2,"issue_type":"feature","owner":"apposite@gmail.com","created_at":"2026-02-11T20:37:30.625705+11:00","created_by":"Bosco Ho","updated_at":"2026-02-11T20:37:37.833003+11:00","closed_at":"2026-02-11T20:37:37.833003+11:00","close_reason":"Implemented dns nameservers command for AWS Route53 and DigitalOcean"}
14
+ {"id":"webserver-ayw","title":"Review certbot renewal strategy","description":"Review and document how certbot renewals work in deploy-vm.\n\nCurrent state:\n- certbot installs cron job automatically for renewals\n- Certificates renew every 90 days\n- No manual intervention needed (theoretically)\n\nQuestions to investigate:\n1. Does certbot cron job work correctly on Ubuntu instances?\n2. Should we add a manual 'deploy-vm ssl renew' command for troubleshooting?\n3. Should we add monitoring/alerts for certificate expiration?\n4. Should we document renewal process in DOMAIN_SETUP.md?\n5. What happens if renewal fails? (email notifications?)\n\nTasks:\n- Test certbot auto-renewal on a running instance\n- Document renewal process in DOMAIN_SETUP.md\n- Consider adding manual renewal command\n- Consider adding expiry check to 'instance verify'\n\nReferences:\n- certbot auto-renewal: https://certbot.eff.org/docs/using.html#automated-renewals\n- Current implementation: setup_nginx_ssl() in server.py\n- Future enhancement mentioned in DOMAIN_SETUP.md line ~425","status":"open","priority":3,"issue_type":"task","owner":"apposite@gmail.com","created_at":"2026-02-12T11:19:26.656804+11:00","created_by":"Bosco Ho","updated_at":"2026-02-12T11:19:26.656804+11:00"}
15
+ {"id":"webserver-bl6","title":"Add docstrings to DigitalOceanProvider methods","description":"Add Sphinx-style docstrings to DigitalOceanProvider methods: validate_auth, instance_exists, create_instance, delete_instance, list_instances, dns_create_a_record, dns_delete_a_record. Focus on lines 60-250 in providers.py.","status":"closed","priority":3,"issue_type":"task","owner":"apposite@gmail.com","created_at":"2026-02-12T11:03:57.887773+11:00","created_by":"Bosco Ho","updated_at":"2026-02-12T11:05:35.205856+11:00","closed_at":"2026-02-12T11:05:35.205856+11:00","close_reason":"Added Sphinx docstrings to all existing DigitalOceanProvider methods (validate_auth, instance_exists, create_instance, delete_instance, list_instances). Note: dns_create_a_record and dns_delete_a_record methods don't exist in the codebase."}
16
+ {"id":"webserver-eub","title":"Add docstrings to AWSProvider helper methods","description":"Add Sphinx-style docstrings to AWSProvider private helper methods: _validate_vpc, _get_my_ip, _ensure_iam_role_and_profile, _ensure_ssh_key, _ensure_security_group. Focus on lines 500-700 in providers.py.","status":"closed","priority":3,"issue_type":"task","owner":"apposite@gmail.com","created_at":"2026-02-12T11:03:59.55398+11:00","created_by":"Bosco Ho","updated_at":"2026-02-12T11:05:34.078308+11:00","closed_at":"2026-02-12T11:05:34.078308+11:00","close_reason":"Added Sphinx docstrings to all AWSProvider helper methods"}
17
+ {"id":"webserver-fn0","title":"Create domain setup specification document","description":"Document how domain/DNS integration works for AWS and DigitalOcean providers, including setup, troubleshooting, and usage patterns","status":"closed","priority":2,"issue_type":"task","owner":"apposite@gmail.com","created_at":"2026-02-11T20:36:23.509121+11:00","created_by":"Bosco Ho","updated_at":"2026-02-11T20:36:30.298585+11:00","closed_at":"2026-02-11T20:36:30.298585+11:00","close_reason":"Created comprehensive DOMAIN_SETUP.md specification document"}
18
+ {"id":"webserver-kic","title":"Inline PROVIDER_OPTIONS into individual Provider classes","description":"Move PROVIDER_OPTIONS dictionary data into class-level constants.\n\nCurrently PROVIDER_OPTIONS is a global dict. Should be inlined as:\n- AWSProvider.REGIONS\n- AWSProvider.VM_SIZES \n- AWSProvider.OS_IMAGES\n- DigitalOceanProvider.REGIONS\n- DigitalOceanProvider.VM_SIZES\n- DigitalOceanProvider.OS_IMAGES\n\nBenefits: Better encapsulation, clearer ownership, eliminates global state\n\nFiles: deploy_vm/providers.py","status":"closed","priority":2,"issue_type":"task","owner":"apposite@gmail.com","created_at":"2026-02-12T10:22:30.316601+11:00","created_by":"Bosco Ho","updated_at":"2026-02-12T10:38:11.549399+11:00","closed_at":"2026-02-12T10:38:11.549399+11:00","close_reason":"Completed: All useful PROVIDER_OPTIONS data now inlined as class constants","dependencies":[{"issue_id":"webserver-kic","depends_on_id":"webserver-4jo","type":"blocks","created_at":"2026-02-12T10:22:34.913802+11:00","created_by":"Bosco Ho"}]}
19
+ {"id":"webserver-lkf","title":"Document .env pattern for app credentials","status":"closed","priority":2,"issue_type":"task","owner":"apposite@gmail.com","created_at":"2026-02-12T14:21:47.043125+11:00","created_by":"Bosco Ho","updated_at":"2026-02-12T14:22:09.039525+11:00","closed_at":"2026-02-12T14:22:09.039525+11:00","close_reason":"Added documentation for .env pattern and AWS credential handling"}
20
+ {"id":"webserver-mg0","title":"Extract _ensure_security_group from create_instance","description":"Extract security group handling logic (lines 742-842) into _ensure_security_group() helper method.\n\nTakes: ec2 client\nReturns: sg_id\nLogic: Find existing security group, or create new one with:\n- VPC validation and selection\n- Security group creation with tags\n- Firewall rules (SSH, HTTP, HTTPS)\n- IP restriction for SSH\n\nResult: ~100 lines extracted from create_instance","status":"closed","priority":2,"issue_type":"task","owner":"apposite@gmail.com","created_at":"2026-02-12T10:44:48.360271+11:00","created_by":"Bosco Ho","updated_at":"2026-02-12T10:46:47.064834+11:00","closed_at":"2026-02-12T10:46:47.064834+11:00","close_reason":"Extracted _ensure_security_group helper method"}
21
+ {"id":"webserver-mm8","title":"Extract _ensure_ssh_key from create_instance","description":"Extract SSH key handling logic (lines 728-740) into _ensure_ssh_key() helper method.\n\nTakes: ec2 client, key_content, fingerprint\nReturns: key_name\nLogic: Check if key exists, upload if not\n\nResult: ~13 lines extracted from create_instance","status":"closed","priority":2,"issue_type":"task","owner":"apposite@gmail.com","created_at":"2026-02-12T10:44:46.023266+11:00","created_by":"Bosco Ho","updated_at":"2026-02-12T10:45:47.035529+11:00","closed_at":"2026-02-12T10:45:47.035529+11:00","close_reason":"Extracted _ensure_ssh_key helper method"}
22
+ {"id":"webserver-q6s","title":"Simplify chatboti-deploy: drop SSL option, hard-code values","status":"closed","priority":2,"issue_type":"task","owner":"apposite@gmail.com","created_at":"2026-02-12T14:18:04.149174+11:00","created_by":"Bosco Ho","updated_at":"2026-02-12T14:18:29.114263+11:00","closed_at":"2026-02-12T14:18:29.114263+11:00","close_reason":"Simplified chatboti-deploy.sh: removed SSL option, hard-coded deployment values"}
23
+ {"id":"webserver-qaz","title":"Fix undefined provider variable and add SSH user helper","status":"closed","priority":1,"issue_type":"bug","owner":"apposite@gmail.com","created_at":"2026-02-11T18:15:27.566225+11:00","created_by":"Bosco Ho","updated_at":"2026-02-11T18:17:32.220706+11:00","closed_at":"2026-02-11T18:17:32.220706+11:00","close_reason":"Added get_ssh_user() helper and fixed 4 undefined provider bugs"}
24
+ {"id":"webserver-vzw","title":"Add docstrings to server.py utility functions","description":"Add Sphinx-style docstrings to functions in server.py: setup_firewall, setup_swap, create_user, load_instance, save_instance, add_app_to_instance.","status":"closed","priority":3,"issue_type":"task","owner":"apposite@gmail.com","created_at":"2026-02-12T11:04:01.57288+11:00","created_by":"Bosco Ho","updated_at":"2026-02-12T11:06:02.465276+11:00","closed_at":"2026-02-12T11:06:02.465276+11:00","close_reason":"Added Sphinx docstrings to all server.py utility functions"}
25
+ {"id":"webserver-x2i","title":"Add IAM role support for AWS EC2 instances","description":"Enable AWS Bedrock and other AWS service access from EC2 by adding IAM role/instance profile support. Changes needed: (1) Add iam_role parameter to CLI, (2) Implement IAM role creation/lookup in AWS provider, (3) Attach instance profile during ec2.run_instances, (4) Update docs","status":"closed","priority":2,"issue_type":"feature","owner":"apposite@gmail.com","created_at":"2026-02-12T07:33:46.335768+11:00","created_by":"Bosco Ho","updated_at":"2026-02-12T07:37:39.60058+11:00","closed_at":"2026-02-12T07:37:39.60058+11:00","close_reason":"Implemented IAM role support for AWS EC2 instances. Added --iam-role flag, automatic role/profile creation, Bedrock access, and documentation."}
26
+ {"id":"webserver-x68","title":"Phase 3: Extract apps.py and refactor CLI","description":"Create BaseApp, NuxtApp, FastAPIApp classes. Update cli.py with imports. Create package structure. Medium-high risk.","status":"closed","priority":2,"issue_type":"task","owner":"apposite@gmail.com","created_at":"2026-02-11T18:18:41.73517+11:00","created_by":"Bosco Ho","updated_at":"2026-02-11T18:30:18.893756+11:00","closed_at":"2026-02-11T18:30:18.893756+11:00","close_reason":"Extracted apps.py with BaseApp, NuxtApp, FastAPIApp. Refactored deploy_vm.py to cli.py.","dependencies":[{"issue_id":"webserver-x68","depends_on_id":"webserver-xgo","type":"blocks","created_at":"2026-02-11T18:18:52.347716+11:00","created_by":"Bosco Ho"},{"issue_id":"webserver-x68","depends_on_id":"webserver-1zr","type":"blocks","created_at":"2026-02-11T18:18:52.489956+11:00","created_by":"Bosco Ho"}]}
27
+ {"id":"webserver-xgo","title":"Phase 1: Extract providers.py module","description":"Extract Provider Protocol, cloud provider classes, and factory function into separate providers.py module. Low risk, isolated code.","status":"closed","priority":2,"issue_type":"task","owner":"apposite@gmail.com","created_at":"2026-02-11T18:18:38.890087+11:00","created_by":"Bosco Ho","updated_at":"2026-02-11T18:22:08.577926+11:00","closed_at":"2026-02-11T18:22:08.577926+11:00","close_reason":"Extracted providers module with Protocol, DigitalOcean, and AWS classes. Imports working."}
@@ -0,0 +1 @@
1
+ {"version":"0.49.6","timestamp":"2026-02-17T13:04:24.02083+11:00","commit":"1f32a1c"}
@@ -0,0 +1,67 @@
1
+ # Beads Configuration File
2
+ # This file configures default behavior for all bd commands in this repository
3
+ # All settings can also be set via environment variables (BD_* prefix)
4
+ # or overridden with command-line flags
5
+
6
+ # Issue prefix for this repository (used by bd init)
7
+ # If not set, bd init will auto-detect from directory name
8
+ # Example: issue-prefix: "myproject" creates issues like "myproject-1", "myproject-2", etc.
9
+ # issue-prefix: ""
10
+
11
+ # Use no-db mode: load from JSONL, no SQLite, write back after each command
12
+ # When true, bd will use .beads/issues.jsonl as the source of truth
13
+ # instead of SQLite database
14
+ # no-db: false
15
+
16
+ # Disable daemon for RPC communication (forces direct database access)
17
+ # no-daemon: false
18
+
19
+ # Disable auto-flush of database to JSONL after mutations
20
+ # no-auto-flush: false
21
+
22
+ # Disable auto-import from JSONL when it's newer than database
23
+ # no-auto-import: false
24
+
25
+ # Enable JSON output by default
26
+ # json: false
27
+
28
+ # Default actor for audit trails (overridden by BD_ACTOR or --actor)
29
+ # actor: ""
30
+
31
+ # Path to database (overridden by BEADS_DB or --db)
32
+ # db: ""
33
+
34
+ # Auto-start daemon if not running (can also use BEADS_AUTO_START_DAEMON)
35
+ # auto-start-daemon: true
36
+
37
+ # Debounce interval for auto-flush (can also use BEADS_FLUSH_DEBOUNCE)
38
+ # flush-debounce: "5s"
39
+
40
+ # Export events (audit trail) to .beads/events.jsonl on each flush/sync
41
+ # When enabled, new events are appended incrementally using a high-water mark.
42
+ # Use 'bd export --events' to trigger manually regardless of this setting.
43
+ # events-export: false
44
+
45
+ # Git branch for beads commits (bd sync will commit to this branch)
46
+ # IMPORTANT: Set this for team projects so all clones use the same sync branch.
47
+ # This setting persists across clones (unlike database config which is gitignored).
48
+ # Can also use BEADS_SYNC_BRANCH env var for local override.
49
+ # If not set, bd sync will require you to run 'bd config set sync.branch <branch>'.
50
+ # sync-branch: "beads-sync"
51
+
52
+ # Multi-repo configuration (experimental - bd-307)
53
+ # Allows hydrating from multiple repositories and routing writes to the correct JSONL
54
+ # repos:
55
+ # primary: "." # Primary repo (where this database lives)
56
+ # additional: # Additional repos to hydrate from (read-only)
57
+ # - ~/beads-planning # Personal planning repo
58
+ # - ~/work-planning # Work planning repo
59
+
60
+ # Integration settings (access with 'bd config get/set')
61
+ # These are stored in the database, not in this file:
62
+ # - jira.url
63
+ # - jira.project
64
+ # - linear.url
65
+ # - linear.api-key
66
+ # - github.org
67
+ # - github.repo
@@ -0,0 +1,7 @@
1
+ {
2
+ "pid": 46978,
3
+ "parent_pid": 46969,
4
+ "database": "/Users/boscoh/p/webserver/.beads/beads.db",
5
+ "version": "0.49.6",
6
+ "started_at": "2026-02-17T02:04:23.945744Z"
7
+ }