Fix OAuth server and browser opener for Termux - #3

Merged
louisgv merged 1 commit into
mainfrom
fix/termux-oauth-compat
Feb 7, 2026
Merged

Fix OAuth server and browser opener for Termux#3
louisgv merged 1 commit into
mainfrom
fix/termux-oauth-compat

Conversation

@louisgv

Copy link
Copy Markdown
Collaborator

Summary

  • Add nc_listen helper that detects busybox netcat (Termux) and uses -p flag for port binding
  • Add termux-open-url support to open_browser for opening auth URLs on Termux
  • Deduplicate inline browser opener in try_oauth_flow to use shared open_browser function

Test plan

  • Verify OAuth flow works on Termux (busybox nc with -p flag)
  • Verify OAuth flow still works on macOS/Linux (standard nc)
  • Verify browser opens correctly on Termux via termux-open-url

🤖 Generated with Claude Code

- Add nc_listen helper that detects busybox nc and uses -p flag accordingly
- Add termux-open-url support to open_browser
- Deduplicate inline browser opener in try_oauth_flow to use open_browser
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@louisgv
louisgv merged commit 2f3a6be into mainFeb 7, 2026
@louisgv
louisgv deleted the fix/termux-oauth-compat branch February 7, 2026 05:55
louisgv pushed a commit that referenced this pull request Feb 8, 2026
Migrated aws-lightsail, e2b, gcp, lambda, and modal libraries to use
the shared library pattern established in earlier refactoring rounds.
Changes:
- Added shared/common.sh sourcing block (local-first, remote-fallback)
- Added bash safety flags (set -eo pipefail) to all 5 libraries
- Removed duplicate provider-agnostic functions:
- Logging (log_info, log_warn, log_error)
- Input handling (safe_read)
- OAuth flow (try_oauth_flow, get_openrouter_api_key_oauth)
- SSH helpers (generate_ssh_key_if_missing, etc.)
- Retained cloud-specific functions:
- API wrappers and CLI integration
- Server provisioning and lifecycle management
- Cloud-specific validation and configuration
Impact:
- Net reduction: 460 lines (-545 added +85)
- Eliminates code duplication across 5 providers
- Improves consistency and maintainability
- All libraries now follow the same architectural pattern
Task: #3 (score 56 - highest priority)
Also addresses Task #4 (bash safety flags)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
louisgv pushed a commit that referenced this pull request Feb 8, 2026
improve.sh:
- Cloud Scouts get 2 slots, Agent Scout gets 1 (and only if justified)
- Agent discovery requires evidence: 1000+ GH stars, 50+ HN points,
100+ Reddit upvotes — at least 2 of these
- New Issue Responder role checks gh issues for user requests
- Agents must be searched on HN Algolia API, Reddit, GitHub before adding
- Priority order: fill gaps > new clouds > new agents > issue triage
CLAUDE.md:
- Reordered: clouds are priority #2, agents are #3 with strict gate
- Added community buzz requirements with specific thresholds
- Added GitHub issue response as #4
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
AhmedTMM added a commit to AhmedTMM/spawn that referenced this pull request Mar 22, 2026
Diff-aware AI review (OpenRouterLabs#2):
- Includes git diff since last successful E2E run (tracked via
e2e-last-green tag) alongside logs in the AI review prompt
- AI can now do causal analysis: "this 404 likely caused by commit X
which deleted file Y"
- Tag advances only when all E2E tests pass
Predictive reference check (OpenRouterLabs#3):
- New CI workflow runs on PRs touching sh/, packages/cli/, packer/
- Cross-references CDN URLs (openrouter.ai/labs/spawn/...) against
actual files in sh/ — catches broken URLs before merge
- Also checks: raw GitHub URLs, Packer script refs, shell source
paths, manifest.json implemented entries vs sh/ scripts
- Comments on PR with specific broken references and fails the check
- Would have caught sprite-keep-running.sh never existing in the repo
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@louisgv
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Fix OAuth server and browser opener for Termux - #3

Merged
louisgv merged 1 commit into
mainfrom
fix/termux-oauth-compat
Feb 7, 2026
Merged

Fix OAuth server and browser opener for Termux#3
louisgv merged 1 commit into
mainfrom
fix/termux-oauth-compat

Conversation

@louisgv

Copy link
Copy Markdown
Collaborator

Summary

  • Add nc_listen helper that detects busybox netcat (Termux) and uses -p flag for port binding
  • Add termux-open-url support to open_browser for opening auth URLs on Termux
  • Deduplicate inline browser opener in try_oauth_flow to use shared open_browser function

Test plan

  • Verify OAuth flow works on Termux (busybox nc with -p flag)
  • Verify OAuth flow still works on macOS/Linux (standard nc)
  • Verify browser opens correctly on Termux via termux-open-url

🤖 Generated with Claude Code

- Add nc_listen helper that detects busybox nc and uses -p flag accordingly
- Add termux-open-url support to open_browser
- Deduplicate inline browser opener in try_oauth_flow to use open_browser
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@louisgv
louisgv merged commit 2f3a6be into mainFeb 7, 2026
@louisgv
louisgv deleted the fix/termux-oauth-compat branch February 7, 2026 05:55
louisgv pushed a commit that referenced this pull request Feb 8, 2026
Migrated aws-lightsail, e2b, gcp, lambda, and modal libraries to use
the shared library pattern established in earlier refactoring rounds.
Changes:
- Added shared/common.sh sourcing block (local-first, remote-fallback)
- Added bash safety flags (set -eo pipefail) to all 5 libraries
- Removed duplicate provider-agnostic functions:
- Logging (log_info, log_warn, log_error)
- Input handling (safe_read)
- OAuth flow (try_oauth_flow, get_openrouter_api_key_oauth)
- SSH helpers (generate_ssh_key_if_missing, etc.)
- Retained cloud-specific functions:
- API wrappers and CLI integration
- Server provisioning and lifecycle management
- Cloud-specific validation and configuration
Impact:
- Net reduction: 460 lines (-545 added +85)
- Eliminates code duplication across 5 providers
- Improves consistency and maintainability
- All libraries now follow the same architectural pattern
Task: #3 (score 56 - highest priority)
Also addresses Task #4 (bash safety flags)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
louisgv pushed a commit that referenced this pull request Feb 8, 2026
improve.sh:
- Cloud Scouts get 2 slots, Agent Scout gets 1 (and only if justified)
- Agent discovery requires evidence: 1000+ GH stars, 50+ HN points,
100+ Reddit upvotes — at least 2 of these
- New Issue Responder role checks gh issues for user requests
- Agents must be searched on HN Algolia API, Reddit, GitHub before adding
- Priority order: fill gaps > new clouds > new agents > issue triage
CLAUDE.md:
- Reordered: clouds are priority #2, agents are #3 with strict gate
- Added community buzz requirements with specific thresholds
- Added GitHub issue response as #4
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
AhmedTMM added a commit to AhmedTMM/spawn that referenced this pull request Mar 22, 2026
Diff-aware AI review (OpenRouterLabs#2):
- Includes git diff since last successful E2E run (tracked via
e2e-last-green tag) alongside logs in the AI review prompt
- AI can now do causal analysis: "this 404 likely caused by commit X
which deleted file Y"
- Tag advances only when all E2E tests pass
Predictive reference check (OpenRouterLabs#3):
- New CI workflow runs on PRs touching sh/, packages/cli/, packer/
- Cross-references CDN URLs (openrouter.ai/labs/spawn/...) against
actual files in sh/ — catches broken URLs before merge
- Also checks: raw GitHub URLs, Packer script refs, shell source
paths, manifest.json implemented entries vs sh/ scripts
- Comments on PR with specific broken references and fails the check
- Would have caught sprite-keep-running.sh never existing in the repo
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@louisgv
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Fix OAuth server and browser opener for Termux - #3

Merged
louisgv merged 1 commit into
mainfrom
fix/termux-oauth-compat
Feb 7, 2026
Merged

Fix OAuth server and browser opener for Termux#3
louisgv merged 1 commit into
mainfrom
fix/termux-oauth-compat

Conversation

@louisgv

Copy link
Copy Markdown
Collaborator

Summary

  • Add nc_listen helper that detects busybox netcat (Termux) and uses -p flag for port binding
  • Add termux-open-url support to open_browser for opening auth URLs on Termux
  • Deduplicate inline browser opener in try_oauth_flow to use shared open_browser function

Test plan

  • Verify OAuth flow works on Termux (busybox nc with -p flag)
  • Verify OAuth flow still works on macOS/Linux (standard nc)
  • Verify browser opens correctly on Termux via termux-open-url

🤖 Generated with Claude Code

- Add nc_listen helper that detects busybox nc and uses -p flag accordingly
- Add termux-open-url support to open_browser
- Deduplicate inline browser opener in try_oauth_flow to use open_browser
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@louisgv
louisgv merged commit 2f3a6be into mainFeb 7, 2026
@louisgv
louisgv deleted the fix/termux-oauth-compat branch February 7, 2026 05:55
louisgv pushed a commit that referenced this pull request Feb 8, 2026
Migrated aws-lightsail, e2b, gcp, lambda, and modal libraries to use
the shared library pattern established in earlier refactoring rounds.
Changes:
- Added shared/common.sh sourcing block (local-first, remote-fallback)
- Added bash safety flags (set -eo pipefail) to all 5 libraries
- Removed duplicate provider-agnostic functions:
- Logging (log_info, log_warn, log_error)
- Input handling (safe_read)
- OAuth flow (try_oauth_flow, get_openrouter_api_key_oauth)
- SSH helpers (generate_ssh_key_if_missing, etc.)
- Retained cloud-specific functions:
- API wrappers and CLI integration
- Server provisioning and lifecycle management
- Cloud-specific validation and configuration
Impact:
- Net reduction: 460 lines (-545 added +85)
- Eliminates code duplication across 5 providers
- Improves consistency and maintainability
- All libraries now follow the same architectural pattern
Task: #3 (score 56 - highest priority)
Also addresses Task #4 (bash safety flags)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
louisgv pushed a commit that referenced this pull request Feb 8, 2026
improve.sh:
- Cloud Scouts get 2 slots, Agent Scout gets 1 (and only if justified)
- Agent discovery requires evidence: 1000+ GH stars, 50+ HN points,
100+ Reddit upvotes — at least 2 of these
- New Issue Responder role checks gh issues for user requests
- Agents must be searched on HN Algolia API, Reddit, GitHub before adding
- Priority order: fill gaps > new clouds > new agents > issue triage
CLAUDE.md:
- Reordered: clouds are priority #2, agents are #3 with strict gate
- Added community buzz requirements with specific thresholds
- Added GitHub issue response as #4
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
AhmedTMM added a commit to AhmedTMM/spawn that referenced this pull request Mar 22, 2026
Diff-aware AI review (OpenRouterLabs#2):
- Includes git diff since last successful E2E run (tracked via
e2e-last-green tag) alongside logs in the AI review prompt
- AI can now do causal analysis: "this 404 likely caused by commit X
which deleted file Y"
- Tag advances only when all E2E tests pass
Predictive reference check (OpenRouterLabs#3):
- New CI workflow runs on PRs touching sh/, packages/cli/, packer/
- Cross-references CDN URLs (openrouter.ai/labs/spawn/...) against
actual files in sh/ — catches broken URLs before merge
- Also checks: raw GitHub URLs, Packer script refs, shell source
paths, manifest.json implemented entries vs sh/ scripts
- Comments on PR with specific broken references and fails the check
- Would have caught sprite-keep-running.sh never existing in the repo
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@louisgv
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Fix OAuth server and browser opener for Termux - #3

Merged
louisgv merged 1 commit into
mainfrom
fix/termux-oauth-compat
Feb 7, 2026
Merged

Fix OAuth server and browser opener for Termux#3
louisgv merged 1 commit into
mainfrom
fix/termux-oauth-compat

Conversation

@louisgv

Copy link
Copy Markdown
Collaborator

Summary

  • Add nc_listen helper that detects busybox netcat (Termux) and uses -p flag for port binding
  • Add termux-open-url support to open_browser for opening auth URLs on Termux
  • Deduplicate inline browser opener in try_oauth_flow to use shared open_browser function

Test plan

  • Verify OAuth flow works on Termux (busybox nc with -p flag)
  • Verify OAuth flow still works on macOS/Linux (standard nc)
  • Verify browser opens correctly on Termux via termux-open-url

🤖 Generated with Claude Code

- Add nc_listen helper that detects busybox nc and uses -p flag accordingly
- Add termux-open-url support to open_browser
- Deduplicate inline browser opener in try_oauth_flow to use open_browser
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@louisgv
louisgv merged commit 2f3a6be into mainFeb 7, 2026
@louisgv
louisgv deleted the fix/termux-oauth-compat branch February 7, 2026 05:55
louisgv pushed a commit that referenced this pull request Feb 8, 2026
Migrated aws-lightsail, e2b, gcp, lambda, and modal libraries to use
the shared library pattern established in earlier refactoring rounds.
Changes:
- Added shared/common.sh sourcing block (local-first, remote-fallback)
- Added bash safety flags (set -eo pipefail) to all 5 libraries
- Removed duplicate provider-agnostic functions:
- Logging (log_info, log_warn, log_error)
- Input handling (safe_read)
- OAuth flow (try_oauth_flow, get_openrouter_api_key_oauth)
- SSH helpers (generate_ssh_key_if_missing, etc.)
- Retained cloud-specific functions:
- API wrappers and CLI integration
- Server provisioning and lifecycle management
- Cloud-specific validation and configuration
Impact:
- Net reduction: 460 lines (-545 added +85)
- Eliminates code duplication across 5 providers
- Improves consistency and maintainability
- All libraries now follow the same architectural pattern
Task: #3 (score 56 - highest priority)
Also addresses Task #4 (bash safety flags)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
louisgv pushed a commit that referenced this pull request Feb 8, 2026
improve.sh:
- Cloud Scouts get 2 slots, Agent Scout gets 1 (and only if justified)
- Agent discovery requires evidence: 1000+ GH stars, 50+ HN points,
100+ Reddit upvotes — at least 2 of these
- New Issue Responder role checks gh issues for user requests
- Agents must be searched on HN Algolia API, Reddit, GitHub before adding
- Priority order: fill gaps > new clouds > new agents > issue triage
CLAUDE.md:
- Reordered: clouds are priority #2, agents are #3 with strict gate
- Added community buzz requirements with specific thresholds
- Added GitHub issue response as #4
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
AhmedTMM added a commit to AhmedTMM/spawn that referenced this pull request Mar 22, 2026
Diff-aware AI review (OpenRouterLabs#2):
- Includes git diff since last successful E2E run (tracked via
e2e-last-green tag) alongside logs in the AI review prompt
- AI can now do causal analysis: "this 404 likely caused by commit X
which deleted file Y"
- Tag advances only when all E2E tests pass
Predictive reference check (OpenRouterLabs#3):
- New CI workflow runs on PRs touching sh/, packages/cli/, packer/
- Cross-references CDN URLs (openrouter.ai/labs/spawn/...) against
actual files in sh/ — catches broken URLs before merge
- Also checks: raw GitHub URLs, Packer script refs, shell source
paths, manifest.json implemented entries vs sh/ scripts
- Comments on PR with specific broken references and fails the check
- Would have caught sprite-keep-running.sh never existing in the repo
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@louisgv
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Fix OAuth server and browser opener for Termux - #3

Merged
louisgv merged 1 commit into
mainfrom
fix/termux-oauth-compat
Feb 7, 2026
Merged

Fix OAuth server and browser opener for Termux#3
louisgv merged 1 commit into
mainfrom
fix/termux-oauth-compat

Conversation

@louisgv

Copy link
Copy Markdown
Collaborator

Summary

  • Add nc_listen helper that detects busybox netcat (Termux) and uses -p flag for port binding
  • Add termux-open-url support to open_browser for opening auth URLs on Termux
  • Deduplicate inline browser opener in try_oauth_flow to use shared open_browser function

Test plan

  • Verify OAuth flow works on Termux (busybox nc with -p flag)
  • Verify OAuth flow still works on macOS/Linux (standard nc)
  • Verify browser opens correctly on Termux via termux-open-url

🤖 Generated with Claude Code

- Add nc_listen helper that detects busybox nc and uses -p flag accordingly
- Add termux-open-url support to open_browser
- Deduplicate inline browser opener in try_oauth_flow to use open_browser
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@louisgv
louisgv merged commit 2f3a6be into mainFeb 7, 2026
@louisgv
louisgv deleted the fix/termux-oauth-compat branch February 7, 2026 05:55
louisgv pushed a commit that referenced this pull request Feb 8, 2026
Migrated aws-lightsail, e2b, gcp, lambda, and modal libraries to use
the shared library pattern established in earlier refactoring rounds.
Changes:
- Added shared/common.sh sourcing block (local-first, remote-fallback)
- Added bash safety flags (set -eo pipefail) to all 5 libraries
- Removed duplicate provider-agnostic functions:
- Logging (log_info, log_warn, log_error)
- Input handling (safe_read)
- OAuth flow (try_oauth_flow, get_openrouter_api_key_oauth)
- SSH helpers (generate_ssh_key_if_missing, etc.)
- Retained cloud-specific functions:
- API wrappers and CLI integration
- Server provisioning and lifecycle management
- Cloud-specific validation and configuration
Impact:
- Net reduction: 460 lines (-545 added +85)
- Eliminates code duplication across 5 providers
- Improves consistency and maintainability
- All libraries now follow the same architectural pattern
Task: #3 (score 56 - highest priority)
Also addresses Task #4 (bash safety flags)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
louisgv pushed a commit that referenced this pull request Feb 8, 2026
improve.sh:
- Cloud Scouts get 2 slots, Agent Scout gets 1 (and only if justified)
- Agent discovery requires evidence: 1000+ GH stars, 50+ HN points,
100+ Reddit upvotes — at least 2 of these
- New Issue Responder role checks gh issues for user requests
- Agents must be searched on HN Algolia API, Reddit, GitHub before adding
- Priority order: fill gaps > new clouds > new agents > issue triage
CLAUDE.md:
- Reordered: clouds are priority #2, agents are #3 with strict gate
- Added community buzz requirements with specific thresholds
- Added GitHub issue response as #4
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
AhmedTMM added a commit to AhmedTMM/spawn that referenced this pull request Mar 22, 2026
Diff-aware AI review (OpenRouterLabs#2):
- Includes git diff since last successful E2E run (tracked via
e2e-last-green tag) alongside logs in the AI review prompt
- AI can now do causal analysis: "this 404 likely caused by commit X
which deleted file Y"
- Tag advances only when all E2E tests pass
Predictive reference check (OpenRouterLabs#3):
- New CI workflow runs on PRs touching sh/, packages/cli/, packer/
- Cross-references CDN URLs (openrouter.ai/labs/spawn/...) against
actual files in sh/ — catches broken URLs before merge
- Also checks: raw GitHub URLs, Packer script refs, shell source
paths, manifest.json implemented entries vs sh/ scripts
- Comments on PR with specific broken references and fails the check
- Would have caught sprite-keep-running.sh never existing in the repo
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@louisgv
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Fix OAuth server and browser opener for Termux - #3

Merged
louisgv merged 1 commit into
mainfrom
fix/termux-oauth-compat
Feb 7, 2026
Merged

Fix OAuth server and browser opener for Termux#3
louisgv merged 1 commit into
mainfrom
fix/termux-oauth-compat

Conversation

@louisgv

Copy link
Copy Markdown
Collaborator

Summary

  • Add nc_listen helper that detects busybox netcat (Termux) and uses -p flag for port binding
  • Add termux-open-url support to open_browser for opening auth URLs on Termux
  • Deduplicate inline browser opener in try_oauth_flow to use shared open_browser function

Test plan

  • Verify OAuth flow works on Termux (busybox nc with -p flag)
  • Verify OAuth flow still works on macOS/Linux (standard nc)
  • Verify browser opens correctly on Termux via termux-open-url

🤖 Generated with Claude Code

- Add nc_listen helper that detects busybox nc and uses -p flag accordingly
- Add termux-open-url support to open_browser
- Deduplicate inline browser opener in try_oauth_flow to use open_browser
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@louisgv
louisgv merged commit 2f3a6be into mainFeb 7, 2026
@louisgv
louisgv deleted the fix/termux-oauth-compat branch February 7, 2026 05:55
louisgv pushed a commit that referenced this pull request Feb 8, 2026
Migrated aws-lightsail, e2b, gcp, lambda, and modal libraries to use
the shared library pattern established in earlier refactoring rounds.
Changes:
- Added shared/common.sh sourcing block (local-first, remote-fallback)
- Added bash safety flags (set -eo pipefail) to all 5 libraries
- Removed duplicate provider-agnostic functions:
- Logging (log_info, log_warn, log_error)
- Input handling (safe_read)
- OAuth flow (try_oauth_flow, get_openrouter_api_key_oauth)
- SSH helpers (generate_ssh_key_if_missing, etc.)
- Retained cloud-specific functions:
- API wrappers and CLI integration
- Server provisioning and lifecycle management
- Cloud-specific validation and configuration
Impact:
- Net reduction: 460 lines (-545 added +85)
- Eliminates code duplication across 5 providers
- Improves consistency and maintainability
- All libraries now follow the same architectural pattern
Task: #3 (score 56 - highest priority)
Also addresses Task #4 (bash safety flags)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
louisgv pushed a commit that referenced this pull request Feb 8, 2026
improve.sh:
- Cloud Scouts get 2 slots, Agent Scout gets 1 (and only if justified)
- Agent discovery requires evidence: 1000+ GH stars, 50+ HN points,
100+ Reddit upvotes — at least 2 of these
- New Issue Responder role checks gh issues for user requests
- Agents must be searched on HN Algolia API, Reddit, GitHub before adding
- Priority order: fill gaps > new clouds > new agents > issue triage
CLAUDE.md:
- Reordered: clouds are priority #2, agents are #3 with strict gate
- Added community buzz requirements with specific thresholds
- Added GitHub issue response as #4
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
AhmedTMM added a commit to AhmedTMM/spawn that referenced this pull request Mar 22, 2026
Diff-aware AI review (OpenRouterLabs#2):
- Includes git diff since last successful E2E run (tracked via
e2e-last-green tag) alongside logs in the AI review prompt
- AI can now do causal analysis: "this 404 likely caused by commit X
which deleted file Y"
- Tag advances only when all E2E tests pass
Predictive reference check (OpenRouterLabs#3):
- New CI workflow runs on PRs touching sh/, packages/cli/, packer/
- Cross-references CDN URLs (openrouter.ai/labs/spawn/...) against
actual files in sh/ — catches broken URLs before merge
- Also checks: raw GitHub URLs, Packer script refs, shell source
paths, manifest.json implemented entries vs sh/ scripts
- Comments on PR with specific broken references and fails the check
- Would have caught sprite-keep-running.sh never existing in the repo
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@louisgv
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Fix OAuth server and browser opener for Termux - #3

Merged
louisgv merged 1 commit into
mainfrom
fix/termux-oauth-compat
Feb 7, 2026
Merged

Fix OAuth server and browser opener for Termux#3
louisgv merged 1 commit into
mainfrom
fix/termux-oauth-compat

Conversation

@louisgv

Copy link
Copy Markdown
Collaborator

Summary

  • Add nc_listen helper that detects busybox netcat (Termux) and uses -p flag for port binding
  • Add termux-open-url support to open_browser for opening auth URLs on Termux
  • Deduplicate inline browser opener in try_oauth_flow to use shared open_browser function

Test plan

  • Verify OAuth flow works on Termux (busybox nc with -p flag)
  • Verify OAuth flow still works on macOS/Linux (standard nc)
  • Verify browser opens correctly on Termux via termux-open-url

🤖 Generated with Claude Code

- Add nc_listen helper that detects busybox nc and uses -p flag accordingly
- Add termux-open-url support to open_browser
- Deduplicate inline browser opener in try_oauth_flow to use open_browser
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@louisgv
louisgv merged commit 2f3a6be into mainFeb 7, 2026
@louisgv
louisgv deleted the fix/termux-oauth-compat branch February 7, 2026 05:55
louisgv pushed a commit that referenced this pull request Feb 8, 2026
Migrated aws-lightsail, e2b, gcp, lambda, and modal libraries to use
the shared library pattern established in earlier refactoring rounds.
Changes:
- Added shared/common.sh sourcing block (local-first, remote-fallback)
- Added bash safety flags (set -eo pipefail) to all 5 libraries
- Removed duplicate provider-agnostic functions:
- Logging (log_info, log_warn, log_error)
- Input handling (safe_read)
- OAuth flow (try_oauth_flow, get_openrouter_api_key_oauth)
- SSH helpers (generate_ssh_key_if_missing, etc.)
- Retained cloud-specific functions:
- API wrappers and CLI integration
- Server provisioning and lifecycle management
- Cloud-specific validation and configuration
Impact:
- Net reduction: 460 lines (-545 added +85)
- Eliminates code duplication across 5 providers
- Improves consistency and maintainability
- All libraries now follow the same architectural pattern
Task: #3 (score 56 - highest priority)
Also addresses Task #4 (bash safety flags)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
louisgv pushed a commit that referenced this pull request Feb 8, 2026
improve.sh:
- Cloud Scouts get 2 slots, Agent Scout gets 1 (and only if justified)
- Agent discovery requires evidence: 1000+ GH stars, 50+ HN points,
100+ Reddit upvotes — at least 2 of these
- New Issue Responder role checks gh issues for user requests
- Agents must be searched on HN Algolia API, Reddit, GitHub before adding
- Priority order: fill gaps > new clouds > new agents > issue triage
CLAUDE.md:
- Reordered: clouds are priority #2, agents are #3 with strict gate
- Added community buzz requirements with specific thresholds
- Added GitHub issue response as #4
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
AhmedTMM added a commit to AhmedTMM/spawn that referenced this pull request Mar 22, 2026
Diff-aware AI review (OpenRouterLabs#2):
- Includes git diff since last successful E2E run (tracked via
e2e-last-green tag) alongside logs in the AI review prompt
- AI can now do causal analysis: "this 404 likely caused by commit X
which deleted file Y"
- Tag advances only when all E2E tests pass
Predictive reference check (OpenRouterLabs#3):
- New CI workflow runs on PRs touching sh/, packages/cli/, packer/
- Cross-references CDN URLs (openrouter.ai/labs/spawn/...) against
actual files in sh/ — catches broken URLs before merge
- Also checks: raw GitHub URLs, Packer script refs, shell source
paths, manifest.json implemented entries vs sh/ scripts
- Comments on PR with specific broken references and fails the check
- Would have caught sprite-keep-running.sh never existing in the repo
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@louisgv
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Fix OAuth server and browser opener for Termux - #3

Merged
louisgv merged 1 commit into
mainfrom
fix/termux-oauth-compat
Feb 7, 2026
Merged

Fix OAuth server and browser opener for Termux#3
louisgv merged 1 commit into
mainfrom
fix/termux-oauth-compat

Conversation

@louisgv

Copy link
Copy Markdown
Collaborator

Summary

  • Add nc_listen helper that detects busybox netcat (Termux) and uses -p flag for port binding
  • Add termux-open-url support to open_browser for opening auth URLs on Termux
  • Deduplicate inline browser opener in try_oauth_flow to use shared open_browser function

Test plan

  • Verify OAuth flow works on Termux (busybox nc with -p flag)
  • Verify OAuth flow still works on macOS/Linux (standard nc)
  • Verify browser opens correctly on Termux via termux-open-url

🤖 Generated with Claude Code

- Add nc_listen helper that detects busybox nc and uses -p flag accordingly
- Add termux-open-url support to open_browser
- Deduplicate inline browser opener in try_oauth_flow to use open_browser
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@louisgv
louisgv merged commit 2f3a6be into mainFeb 7, 2026
@louisgv
louisgv deleted the fix/termux-oauth-compat branch February 7, 2026 05:55
louisgv pushed a commit that referenced this pull request Feb 8, 2026
Migrated aws-lightsail, e2b, gcp, lambda, and modal libraries to use
the shared library pattern established in earlier refactoring rounds.
Changes:
- Added shared/common.sh sourcing block (local-first, remote-fallback)
- Added bash safety flags (set -eo pipefail) to all 5 libraries
- Removed duplicate provider-agnostic functions:
- Logging (log_info, log_warn, log_error)
- Input handling (safe_read)
- OAuth flow (try_oauth_flow, get_openrouter_api_key_oauth)
- SSH helpers (generate_ssh_key_if_missing, etc.)
- Retained cloud-specific functions:
- API wrappers and CLI integration
- Server provisioning and lifecycle management
- Cloud-specific validation and configuration
Impact:
- Net reduction: 460 lines (-545 added +85)
- Eliminates code duplication across 5 providers
- Improves consistency and maintainability
- All libraries now follow the same architectural pattern
Task: #3 (score 56 - highest priority)
Also addresses Task #4 (bash safety flags)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
louisgv pushed a commit that referenced this pull request Feb 8, 2026
improve.sh:
- Cloud Scouts get 2 slots, Agent Scout gets 1 (and only if justified)
- Agent discovery requires evidence: 1000+ GH stars, 50+ HN points,
100+ Reddit upvotes — at least 2 of these
- New Issue Responder role checks gh issues for user requests
- Agents must be searched on HN Algolia API, Reddit, GitHub before adding
- Priority order: fill gaps > new clouds > new agents > issue triage
CLAUDE.md:
- Reordered: clouds are priority #2, agents are #3 with strict gate
- Added community buzz requirements with specific thresholds
- Added GitHub issue response as #4
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
AhmedTMM added a commit to AhmedTMM/spawn that referenced this pull request Mar 22, 2026
Diff-aware AI review (OpenRouterLabs#2):
- Includes git diff since last successful E2E run (tracked via
e2e-last-green tag) alongside logs in the AI review prompt
- AI can now do causal analysis: "this 404 likely caused by commit X
which deleted file Y"
- Tag advances only when all E2E tests pass
Predictive reference check (OpenRouterLabs#3):
- New CI workflow runs on PRs touching sh/, packages/cli/, packer/
- Cross-references CDN URLs (openrouter.ai/labs/spawn/...) against
actual files in sh/ — catches broken URLs before merge
- Also checks: raw GitHub URLs, Packer script refs, shell source
paths, manifest.json implemented entries vs sh/ scripts
- Comments on PR with specific broken references and fails the check
- Would have caught sprite-keep-running.sh never existing in the repo
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@louisgv