feat(fleet): generalize topology + 'Go Standalone' mode - #339

Merged
jeonghun-jj-lee merged 1 commit into
mainfrom
feat/fleet-generalize-standalone
Aug 11, 2026
Merged

feat(fleet): generalize topology + 'Go Standalone' mode#339
jeonghun-jj-lee merged 1 commit into
mainfrom
feat/fleet-generalize-standalone

Conversation

@jeonghun-jj-lee

@jeonghun-jj-leejeonghun-jj-lee commented Aug 11, 2026

Copy link
Copy Markdown
Contributor

Summary

Replace hardcoded Aaron's-Mac-mini hostname with configurable fleet.json. Change 'Local Fallback' from a temporary escape hatch into a permanent 'Go Standalone' mode switch that restores purely-local Amicode.

Key changes

  • ~/.amico/ops/fleet/fleet.json is the single source of truth for fleet role (standalone|server|client) and canonical server coordinates (host, port, sshAlias)
  • No file = standalone (safe zero-config default — pre-fleet behavior)
  • Guard script reads fleet.json instead of scutil hostname comparison
  • 'Go Standalone' command replaces 'Enter Local Fallback' — permanent mode switch, not a temporary escape hatch
  • Drop 'Exit Local Fallback' and 'Rejoin' commands (re-enrollment deferred)
  • fleet_health.ts reads from fleet.json; health checks skip when standalone
  • install.sh reads fleet.json; skips entirely for standalone
  • CI gate verifies guard references fleet.json (not a hardcoded hostname)
  • CONTEXT.md glossary updated: 'Local fallback' → 'Go Standalone'
  • Remove all references to Aarons-Mac-mini, /Users/aaron/, amico-mini
  • Tunnel plist uses FLEET_SSH_ALIAS placeholder (templating deferred to Enroll)
  • Legacy fallback.json migrated to fleet.json on activation

Tests

  • 21 fleet-specific tests pass (rewritten for new API)
  • 931/935 total tests pass (4 failures are pre-existing e2e timeout, unrelated)
  • TypeScript compiles cleanly
  • CI gate (assert_fleet_guard.sh) passes

Deferred (follow-up)

  • 'Enroll' command (join a fleet from command palette)
  • Canonical session pull (merge server sessions into local DB with remote icon)
  • Tunnel plist templating from fleet.json fields

Closes#338

Summary by CodeRabbit

  • New Features

    • Added configurable fleet roles: standalone, server, and client.
    • Added Go Standalone to leave a fleet and run locally.
    • Fleet status now reflects tunnel availability and can reconnect automatically.
    • Fleet configuration uses fleet.json, including configurable tunnel ports.
  • Bug Fixes

    • Improved handling of missing or invalid fleet configuration.
    • Prevented client machines from starting local servers unintentionally.
  • Documentation

    • Updated fleet setup, verification, installation, health checks, and standalone-mode guidance.

Replace hardcoded Aaron's-Mac-mini hostname with configurable fleet.json:
- ~/.amico/ops/fleet/fleet.json is the single source of truth for fleet role
(standalone|server|client) and canonical server coordinates (host, port, sshAlias)
- No file = standalone (safe zero-config default, pre-fleet behavior)
- Guard script reads fleet.json instead of scutil hostname comparison
- 'Go Standalone' command replaces 'Enter Local Fallback' — permanent mode
switch, not a temporary escape hatch
- Drop 'Exit Local Fallback' and 'Rejoin' commands (re-enrollment deferred)
- fleet_health.ts reads from fleet.json; health checks skip when standalone
- install.sh reads fleet.json; skips entirely for standalone
- CI gate verifies guard references fleet.json (not a hardcoded hostname)
- CONTEXT.md glossary updated: 'Local fallback' → 'Go Standalone'
- Remove all references to Aarons-Mac-mini, /Users/aaron/, amico-mini
- Tunnel plist uses FLEET_SSH_ALIAS placeholder (templating deferred to Enroll)
- Legacy fallback.json migrated to fleet.json on activation
Closes#338
@jeonghun-jj-lee
jeonghun-jj-lee marked this pull request as ready for review August 11, 2026 15:39
@jeonghun-jj-lee
jeonghun-jj-lee merged commit fc3a403 into mainAug 11, 2026
6 checks passed
@jeonghun-jj-lee
jeonghun-jj-lee deleted the feat/fleet-generalize-standalone branch August 11, 2026 15:39
@coderabbitai

coderabbitaiBot commented Aug 11, 2026

Copy link
Copy Markdown

Review Change Stack

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 7e13cf99-b3e8-4099-ae66-d26d2c1ed1a5

📥 Commits

Reviewing files that changed from the base of the PR and between 2e5ed2c and f76d31e.

📒 Files selected for processing (17)
  • CONTEXT.md
  • packages/extension/package.json
  • packages/extension/scripts/assert_fleet_guard.sh
  • packages/extension/src/extension.ts
  • packages/extension/src/fleet_fallback.ts
  • packages/extension/src/fleet_health.ts
  • packages/extension/src/terminal.ts
  • packages/extension/test/fleet_fallback.test.ts
  • packages/extension/test/fleet_health.test.ts
  • packages/extension/tools/fleet/README.md
  • packages/extension/tools/fleet/amico-opencode-fleet-guard
  • packages/extension/tools/fleet/co.harmoniqs.amico-tunnel.plist
  • packages/extension/tools/fleet/install.sh
  • tools/fleet/README.md
  • tools/fleet/amico-opencode-fleet-guard
  • tools/fleet/co.harmoniqs.amico-tunnel.plist
  • tools/fleet/install.sh

📝 Walkthrough

Walkthrough

Fleet behavior now uses fleet.json for roles and canonical server settings. The extension replaces fallback and rejoin flows with Go Standalone. Guards, installers, health checks, tunnel wiring, tests, and documentation use the new model.

Changes

Fleet generalization

Layer / File(s)Summary
Fleet configuration model
packages/extension/src/fleet_fallback.ts, packages/extension/src/terminal.ts, packages/extension/test/fleet_fallback.test.ts
FleetConfig replaces fallback state. It supports role detection, canonical port lookup, standalone switching, legacy migration, and configuration cleanup.
Extension fleet and standalone flow
packages/extension/src/extension.ts, packages/extension/package.json
The extension reads fleet roles, probes configurable tunnels, offers Go Standalone, unloads the tunnel, restarts a local server, and reconnects after restart.
Fleet health and CI validation
packages/extension/src/fleet_health.ts, packages/extension/test/fleet_health.test.ts, packages/extension/scripts/assert_fleet_guard.sh
Health checks report fleet roles and validate configured ports and tunnels. CI validates fleet configuration references.
Fleet guard, installer, and tunnel wiring
tools/fleet/*, packages/extension/tools/fleet/*
Guards and installers read fleet.json, client roles prevent local spawning, configured ports replace the fixed port, and tunnels use FLEET_SSH_ALIAS.
Fleet terminology and operations
CONTEXT.md, tools/fleet/README.md, packages/extension/tools/fleet/README.md
Documentation defines fleet roles, installation, verification, health checks, and the Go Standalone procedure.

Estimated code review effort: 4 (Complex) | ~45 minutes

Suggested reviewers:aarontrowbridge

Sequence Diagram(s)

sequenceDiagram
participant VSCodeExtension
participant FleetConfig as fleet.json
participant SSHTunnel
participant LocalServer
VSCodeExtension->>FleetConfig: Read role and canonical port
VSCodeExtension->>SSHTunnel: Probe or unload tunnel
VSCodeExtension->>FleetConfig: Write standalone role
VSCodeExtension->>LocalServer: Restart local server
Loading
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/fleet-generalize-standalone

Comment @coderabbitai help to get the list of available commands.

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.

Generalize fleet: configurable topology + "Go Standalone" mode

1 participant

@jeonghun-jj-lee
, '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

feat(fleet): generalize topology + 'Go Standalone' mode - #339

Merged
jeonghun-jj-lee merged 1 commit into
mainfrom
feat/fleet-generalize-standalone
Aug 11, 2026
Merged

feat(fleet): generalize topology + 'Go Standalone' mode#339
jeonghun-jj-lee merged 1 commit into
mainfrom
feat/fleet-generalize-standalone

Conversation

@jeonghun-jj-lee

@jeonghun-jj-leejeonghun-jj-lee commented Aug 11, 2026

Copy link
Copy Markdown
Contributor

Summary

Replace hardcoded Aaron's-Mac-mini hostname with configurable fleet.json. Change 'Local Fallback' from a temporary escape hatch into a permanent 'Go Standalone' mode switch that restores purely-local Amicode.

Key changes

  • ~/.amico/ops/fleet/fleet.json is the single source of truth for fleet role (standalone|server|client) and canonical server coordinates (host, port, sshAlias)
  • No file = standalone (safe zero-config default — pre-fleet behavior)
  • Guard script reads fleet.json instead of scutil hostname comparison
  • 'Go Standalone' command replaces 'Enter Local Fallback' — permanent mode switch, not a temporary escape hatch
  • Drop 'Exit Local Fallback' and 'Rejoin' commands (re-enrollment deferred)
  • fleet_health.ts reads from fleet.json; health checks skip when standalone
  • install.sh reads fleet.json; skips entirely for standalone
  • CI gate verifies guard references fleet.json (not a hardcoded hostname)
  • CONTEXT.md glossary updated: 'Local fallback' → 'Go Standalone'
  • Remove all references to Aarons-Mac-mini, /Users/aaron/, amico-mini
  • Tunnel plist uses FLEET_SSH_ALIAS placeholder (templating deferred to Enroll)
  • Legacy fallback.json migrated to fleet.json on activation

Tests

  • 21 fleet-specific tests pass (rewritten for new API)
  • 931/935 total tests pass (4 failures are pre-existing e2e timeout, unrelated)
  • TypeScript compiles cleanly
  • CI gate (assert_fleet_guard.sh) passes

Deferred (follow-up)

  • 'Enroll' command (join a fleet from command palette)
  • Canonical session pull (merge server sessions into local DB with remote icon)
  • Tunnel plist templating from fleet.json fields

Closes#338

Summary by CodeRabbit

  • New Features

    • Added configurable fleet roles: standalone, server, and client.
    • Added Go Standalone to leave a fleet and run locally.
    • Fleet status now reflects tunnel availability and can reconnect automatically.
    • Fleet configuration uses fleet.json, including configurable tunnel ports.
  • Bug Fixes

    • Improved handling of missing or invalid fleet configuration.
    • Prevented client machines from starting local servers unintentionally.
  • Documentation

    • Updated fleet setup, verification, installation, health checks, and standalone-mode guidance.

Replace hardcoded Aaron's-Mac-mini hostname with configurable fleet.json:
- ~/.amico/ops/fleet/fleet.json is the single source of truth for fleet role
(standalone|server|client) and canonical server coordinates (host, port, sshAlias)
- No file = standalone (safe zero-config default, pre-fleet behavior)
- Guard script reads fleet.json instead of scutil hostname comparison
- 'Go Standalone' command replaces 'Enter Local Fallback' — permanent mode
switch, not a temporary escape hatch
- Drop 'Exit Local Fallback' and 'Rejoin' commands (re-enrollment deferred)
- fleet_health.ts reads from fleet.json; health checks skip when standalone
- install.sh reads fleet.json; skips entirely for standalone
- CI gate verifies guard references fleet.json (not a hardcoded hostname)
- CONTEXT.md glossary updated: 'Local fallback' → 'Go Standalone'
- Remove all references to Aarons-Mac-mini, /Users/aaron/, amico-mini
- Tunnel plist uses FLEET_SSH_ALIAS placeholder (templating deferred to Enroll)
- Legacy fallback.json migrated to fleet.json on activation
Closes#338
@jeonghun-jj-lee
jeonghun-jj-lee marked this pull request as ready for review August 11, 2026 15:39
@jeonghun-jj-lee
jeonghun-jj-lee merged commit fc3a403 into mainAug 11, 2026
6 checks passed
@jeonghun-jj-lee
jeonghun-jj-lee deleted the feat/fleet-generalize-standalone branch August 11, 2026 15:39
@coderabbitai

coderabbitaiBot commented Aug 11, 2026

Copy link
Copy Markdown

Review Change Stack

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 7e13cf99-b3e8-4099-ae66-d26d2c1ed1a5

📥 Commits

Reviewing files that changed from the base of the PR and between 2e5ed2c and f76d31e.

📒 Files selected for processing (17)
  • CONTEXT.md
  • packages/extension/package.json
  • packages/extension/scripts/assert_fleet_guard.sh
  • packages/extension/src/extension.ts
  • packages/extension/src/fleet_fallback.ts
  • packages/extension/src/fleet_health.ts
  • packages/extension/src/terminal.ts
  • packages/extension/test/fleet_fallback.test.ts
  • packages/extension/test/fleet_health.test.ts
  • packages/extension/tools/fleet/README.md
  • packages/extension/tools/fleet/amico-opencode-fleet-guard
  • packages/extension/tools/fleet/co.harmoniqs.amico-tunnel.plist
  • packages/extension/tools/fleet/install.sh
  • tools/fleet/README.md
  • tools/fleet/amico-opencode-fleet-guard
  • tools/fleet/co.harmoniqs.amico-tunnel.plist
  • tools/fleet/install.sh

📝 Walkthrough

Walkthrough

Fleet behavior now uses fleet.json for roles and canonical server settings. The extension replaces fallback and rejoin flows with Go Standalone. Guards, installers, health checks, tunnel wiring, tests, and documentation use the new model.

Changes

Fleet generalization

Layer / File(s)Summary
Fleet configuration model
packages/extension/src/fleet_fallback.ts, packages/extension/src/terminal.ts, packages/extension/test/fleet_fallback.test.ts
FleetConfig replaces fallback state. It supports role detection, canonical port lookup, standalone switching, legacy migration, and configuration cleanup.
Extension fleet and standalone flow
packages/extension/src/extension.ts, packages/extension/package.json
The extension reads fleet roles, probes configurable tunnels, offers Go Standalone, unloads the tunnel, restarts a local server, and reconnects after restart.
Fleet health and CI validation
packages/extension/src/fleet_health.ts, packages/extension/test/fleet_health.test.ts, packages/extension/scripts/assert_fleet_guard.sh
Health checks report fleet roles and validate configured ports and tunnels. CI validates fleet configuration references.
Fleet guard, installer, and tunnel wiring
tools/fleet/*, packages/extension/tools/fleet/*
Guards and installers read fleet.json, client roles prevent local spawning, configured ports replace the fixed port, and tunnels use FLEET_SSH_ALIAS.
Fleet terminology and operations
CONTEXT.md, tools/fleet/README.md, packages/extension/tools/fleet/README.md
Documentation defines fleet roles, installation, verification, health checks, and the Go Standalone procedure.

Estimated code review effort: 4 (Complex) | ~45 minutes

Suggested reviewers:aarontrowbridge

Sequence Diagram(s)

sequenceDiagram
participant VSCodeExtension
participant FleetConfig as fleet.json
participant SSHTunnel
participant LocalServer
VSCodeExtension->>FleetConfig: Read role and canonical port
VSCodeExtension->>SSHTunnel: Probe or unload tunnel
VSCodeExtension->>FleetConfig: Write standalone role
VSCodeExtension->>LocalServer: Restart local server
Loading
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/fleet-generalize-standalone

Comment @coderabbitai help to get the list of available commands.

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.

Generalize fleet: configurable topology + "Go Standalone" mode

1 participant

@jeonghun-jj-lee
, '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

feat(fleet): generalize topology + 'Go Standalone' mode - #339

Merged
jeonghun-jj-lee merged 1 commit into
mainfrom
feat/fleet-generalize-standalone
Aug 11, 2026
Merged

feat(fleet): generalize topology + 'Go Standalone' mode#339
jeonghun-jj-lee merged 1 commit into
mainfrom
feat/fleet-generalize-standalone

Conversation

@jeonghun-jj-lee

@jeonghun-jj-leejeonghun-jj-lee commented Aug 11, 2026

Copy link
Copy Markdown
Contributor

Summary

Replace hardcoded Aaron's-Mac-mini hostname with configurable fleet.json. Change 'Local Fallback' from a temporary escape hatch into a permanent 'Go Standalone' mode switch that restores purely-local Amicode.

Key changes

  • ~/.amico/ops/fleet/fleet.json is the single source of truth for fleet role (standalone|server|client) and canonical server coordinates (host, port, sshAlias)
  • No file = standalone (safe zero-config default — pre-fleet behavior)
  • Guard script reads fleet.json instead of scutil hostname comparison
  • 'Go Standalone' command replaces 'Enter Local Fallback' — permanent mode switch, not a temporary escape hatch
  • Drop 'Exit Local Fallback' and 'Rejoin' commands (re-enrollment deferred)
  • fleet_health.ts reads from fleet.json; health checks skip when standalone
  • install.sh reads fleet.json; skips entirely for standalone
  • CI gate verifies guard references fleet.json (not a hardcoded hostname)
  • CONTEXT.md glossary updated: 'Local fallback' → 'Go Standalone'
  • Remove all references to Aarons-Mac-mini, /Users/aaron/, amico-mini
  • Tunnel plist uses FLEET_SSH_ALIAS placeholder (templating deferred to Enroll)
  • Legacy fallback.json migrated to fleet.json on activation

Tests

  • 21 fleet-specific tests pass (rewritten for new API)
  • 931/935 total tests pass (4 failures are pre-existing e2e timeout, unrelated)
  • TypeScript compiles cleanly
  • CI gate (assert_fleet_guard.sh) passes

Deferred (follow-up)

  • 'Enroll' command (join a fleet from command palette)
  • Canonical session pull (merge server sessions into local DB with remote icon)
  • Tunnel plist templating from fleet.json fields

Closes#338

Summary by CodeRabbit

  • New Features

    • Added configurable fleet roles: standalone, server, and client.
    • Added Go Standalone to leave a fleet and run locally.
    • Fleet status now reflects tunnel availability and can reconnect automatically.
    • Fleet configuration uses fleet.json, including configurable tunnel ports.
  • Bug Fixes

    • Improved handling of missing or invalid fleet configuration.
    • Prevented client machines from starting local servers unintentionally.
  • Documentation

    • Updated fleet setup, verification, installation, health checks, and standalone-mode guidance.

Replace hardcoded Aaron's-Mac-mini hostname with configurable fleet.json:
- ~/.amico/ops/fleet/fleet.json is the single source of truth for fleet role
(standalone|server|client) and canonical server coordinates (host, port, sshAlias)
- No file = standalone (safe zero-config default, pre-fleet behavior)
- Guard script reads fleet.json instead of scutil hostname comparison
- 'Go Standalone' command replaces 'Enter Local Fallback' — permanent mode
switch, not a temporary escape hatch
- Drop 'Exit Local Fallback' and 'Rejoin' commands (re-enrollment deferred)
- fleet_health.ts reads from fleet.json; health checks skip when standalone
- install.sh reads fleet.json; skips entirely for standalone
- CI gate verifies guard references fleet.json (not a hardcoded hostname)
- CONTEXT.md glossary updated: 'Local fallback' → 'Go Standalone'
- Remove all references to Aarons-Mac-mini, /Users/aaron/, amico-mini
- Tunnel plist uses FLEET_SSH_ALIAS placeholder (templating deferred to Enroll)
- Legacy fallback.json migrated to fleet.json on activation
Closes#338
@jeonghun-jj-lee
jeonghun-jj-lee marked this pull request as ready for review August 11, 2026 15:39
@jeonghun-jj-lee
jeonghun-jj-lee merged commit fc3a403 into mainAug 11, 2026
6 checks passed
@jeonghun-jj-lee
jeonghun-jj-lee deleted the feat/fleet-generalize-standalone branch August 11, 2026 15:39
@coderabbitai

coderabbitaiBot commented Aug 11, 2026

Copy link
Copy Markdown

Review Change Stack

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 7e13cf99-b3e8-4099-ae66-d26d2c1ed1a5

📥 Commits

Reviewing files that changed from the base of the PR and between 2e5ed2c and f76d31e.

📒 Files selected for processing (17)
  • CONTEXT.md
  • packages/extension/package.json
  • packages/extension/scripts/assert_fleet_guard.sh
  • packages/extension/src/extension.ts
  • packages/extension/src/fleet_fallback.ts
  • packages/extension/src/fleet_health.ts
  • packages/extension/src/terminal.ts
  • packages/extension/test/fleet_fallback.test.ts
  • packages/extension/test/fleet_health.test.ts
  • packages/extension/tools/fleet/README.md
  • packages/extension/tools/fleet/amico-opencode-fleet-guard
  • packages/extension/tools/fleet/co.harmoniqs.amico-tunnel.plist
  • packages/extension/tools/fleet/install.sh
  • tools/fleet/README.md
  • tools/fleet/amico-opencode-fleet-guard
  • tools/fleet/co.harmoniqs.amico-tunnel.plist
  • tools/fleet/install.sh

📝 Walkthrough

Walkthrough

Fleet behavior now uses fleet.json for roles and canonical server settings. The extension replaces fallback and rejoin flows with Go Standalone. Guards, installers, health checks, tunnel wiring, tests, and documentation use the new model.

Changes

Fleet generalization

Layer / File(s)Summary
Fleet configuration model
packages/extension/src/fleet_fallback.ts, packages/extension/src/terminal.ts, packages/extension/test/fleet_fallback.test.ts
FleetConfig replaces fallback state. It supports role detection, canonical port lookup, standalone switching, legacy migration, and configuration cleanup.
Extension fleet and standalone flow
packages/extension/src/extension.ts, packages/extension/package.json
The extension reads fleet roles, probes configurable tunnels, offers Go Standalone, unloads the tunnel, restarts a local server, and reconnects after restart.
Fleet health and CI validation
packages/extension/src/fleet_health.ts, packages/extension/test/fleet_health.test.ts, packages/extension/scripts/assert_fleet_guard.sh
Health checks report fleet roles and validate configured ports and tunnels. CI validates fleet configuration references.
Fleet guard, installer, and tunnel wiring
tools/fleet/*, packages/extension/tools/fleet/*
Guards and installers read fleet.json, client roles prevent local spawning, configured ports replace the fixed port, and tunnels use FLEET_SSH_ALIAS.
Fleet terminology and operations
CONTEXT.md, tools/fleet/README.md, packages/extension/tools/fleet/README.md
Documentation defines fleet roles, installation, verification, health checks, and the Go Standalone procedure.

Estimated code review effort: 4 (Complex) | ~45 minutes

Suggested reviewers:aarontrowbridge

Sequence Diagram(s)

sequenceDiagram
participant VSCodeExtension
participant FleetConfig as fleet.json
participant SSHTunnel
participant LocalServer
VSCodeExtension->>FleetConfig: Read role and canonical port
VSCodeExtension->>SSHTunnel: Probe or unload tunnel
VSCodeExtension->>FleetConfig: Write standalone role
VSCodeExtension->>LocalServer: Restart local server
Loading
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/fleet-generalize-standalone

Comment @coderabbitai help to get the list of available commands.

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.

Generalize fleet: configurable topology + "Go Standalone" mode

1 participant

@jeonghun-jj-lee
, '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

feat(fleet): generalize topology + 'Go Standalone' mode - #339

Merged
jeonghun-jj-lee merged 1 commit into
mainfrom
feat/fleet-generalize-standalone
Aug 11, 2026
Merged

feat(fleet): generalize topology + 'Go Standalone' mode#339
jeonghun-jj-lee merged 1 commit into
mainfrom
feat/fleet-generalize-standalone

Conversation

@jeonghun-jj-lee

@jeonghun-jj-leejeonghun-jj-lee commented Aug 11, 2026

Copy link
Copy Markdown
Contributor

Summary

Replace hardcoded Aaron's-Mac-mini hostname with configurable fleet.json. Change 'Local Fallback' from a temporary escape hatch into a permanent 'Go Standalone' mode switch that restores purely-local Amicode.

Key changes

  • ~/.amico/ops/fleet/fleet.json is the single source of truth for fleet role (standalone|server|client) and canonical server coordinates (host, port, sshAlias)
  • No file = standalone (safe zero-config default — pre-fleet behavior)
  • Guard script reads fleet.json instead of scutil hostname comparison
  • 'Go Standalone' command replaces 'Enter Local Fallback' — permanent mode switch, not a temporary escape hatch
  • Drop 'Exit Local Fallback' and 'Rejoin' commands (re-enrollment deferred)
  • fleet_health.ts reads from fleet.json; health checks skip when standalone
  • install.sh reads fleet.json; skips entirely for standalone
  • CI gate verifies guard references fleet.json (not a hardcoded hostname)
  • CONTEXT.md glossary updated: 'Local fallback' → 'Go Standalone'
  • Remove all references to Aarons-Mac-mini, /Users/aaron/, amico-mini
  • Tunnel plist uses FLEET_SSH_ALIAS placeholder (templating deferred to Enroll)
  • Legacy fallback.json migrated to fleet.json on activation

Tests

  • 21 fleet-specific tests pass (rewritten for new API)
  • 931/935 total tests pass (4 failures are pre-existing e2e timeout, unrelated)
  • TypeScript compiles cleanly
  • CI gate (assert_fleet_guard.sh) passes

Deferred (follow-up)

  • 'Enroll' command (join a fleet from command palette)
  • Canonical session pull (merge server sessions into local DB with remote icon)
  • Tunnel plist templating from fleet.json fields

Closes#338

Summary by CodeRabbit

  • New Features

    • Added configurable fleet roles: standalone, server, and client.
    • Added Go Standalone to leave a fleet and run locally.
    • Fleet status now reflects tunnel availability and can reconnect automatically.
    • Fleet configuration uses fleet.json, including configurable tunnel ports.
  • Bug Fixes

    • Improved handling of missing or invalid fleet configuration.
    • Prevented client machines from starting local servers unintentionally.
  • Documentation

    • Updated fleet setup, verification, installation, health checks, and standalone-mode guidance.

Replace hardcoded Aaron's-Mac-mini hostname with configurable fleet.json:
- ~/.amico/ops/fleet/fleet.json is the single source of truth for fleet role
(standalone|server|client) and canonical server coordinates (host, port, sshAlias)
- No file = standalone (safe zero-config default, pre-fleet behavior)
- Guard script reads fleet.json instead of scutil hostname comparison
- 'Go Standalone' command replaces 'Enter Local Fallback' — permanent mode
switch, not a temporary escape hatch
- Drop 'Exit Local Fallback' and 'Rejoin' commands (re-enrollment deferred)
- fleet_health.ts reads from fleet.json; health checks skip when standalone
- install.sh reads fleet.json; skips entirely for standalone
- CI gate verifies guard references fleet.json (not a hardcoded hostname)
- CONTEXT.md glossary updated: 'Local fallback' → 'Go Standalone'
- Remove all references to Aarons-Mac-mini, /Users/aaron/, amico-mini
- Tunnel plist uses FLEET_SSH_ALIAS placeholder (templating deferred to Enroll)
- Legacy fallback.json migrated to fleet.json on activation
Closes#338
@jeonghun-jj-lee
jeonghun-jj-lee marked this pull request as ready for review August 11, 2026 15:39
@jeonghun-jj-lee
jeonghun-jj-lee merged commit fc3a403 into mainAug 11, 2026
6 checks passed
@jeonghun-jj-lee
jeonghun-jj-lee deleted the feat/fleet-generalize-standalone branch August 11, 2026 15:39
@coderabbitai

coderabbitaiBot commented Aug 11, 2026

Copy link
Copy Markdown

Review Change Stack

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 7e13cf99-b3e8-4099-ae66-d26d2c1ed1a5

📥 Commits

Reviewing files that changed from the base of the PR and between 2e5ed2c and f76d31e.

📒 Files selected for processing (17)
  • CONTEXT.md
  • packages/extension/package.json
  • packages/extension/scripts/assert_fleet_guard.sh
  • packages/extension/src/extension.ts
  • packages/extension/src/fleet_fallback.ts
  • packages/extension/src/fleet_health.ts
  • packages/extension/src/terminal.ts
  • packages/extension/test/fleet_fallback.test.ts
  • packages/extension/test/fleet_health.test.ts
  • packages/extension/tools/fleet/README.md
  • packages/extension/tools/fleet/amico-opencode-fleet-guard
  • packages/extension/tools/fleet/co.harmoniqs.amico-tunnel.plist
  • packages/extension/tools/fleet/install.sh
  • tools/fleet/README.md
  • tools/fleet/amico-opencode-fleet-guard
  • tools/fleet/co.harmoniqs.amico-tunnel.plist
  • tools/fleet/install.sh

📝 Walkthrough

Walkthrough

Fleet behavior now uses fleet.json for roles and canonical server settings. The extension replaces fallback and rejoin flows with Go Standalone. Guards, installers, health checks, tunnel wiring, tests, and documentation use the new model.

Changes

Fleet generalization

Layer / File(s)Summary
Fleet configuration model
packages/extension/src/fleet_fallback.ts, packages/extension/src/terminal.ts, packages/extension/test/fleet_fallback.test.ts
FleetConfig replaces fallback state. It supports role detection, canonical port lookup, standalone switching, legacy migration, and configuration cleanup.
Extension fleet and standalone flow
packages/extension/src/extension.ts, packages/extension/package.json
The extension reads fleet roles, probes configurable tunnels, offers Go Standalone, unloads the tunnel, restarts a local server, and reconnects after restart.
Fleet health and CI validation
packages/extension/src/fleet_health.ts, packages/extension/test/fleet_health.test.ts, packages/extension/scripts/assert_fleet_guard.sh
Health checks report fleet roles and validate configured ports and tunnels. CI validates fleet configuration references.
Fleet guard, installer, and tunnel wiring
tools/fleet/*, packages/extension/tools/fleet/*
Guards and installers read fleet.json, client roles prevent local spawning, configured ports replace the fixed port, and tunnels use FLEET_SSH_ALIAS.
Fleet terminology and operations
CONTEXT.md, tools/fleet/README.md, packages/extension/tools/fleet/README.md
Documentation defines fleet roles, installation, verification, health checks, and the Go Standalone procedure.

Estimated code review effort: 4 (Complex) | ~45 minutes

Suggested reviewers:aarontrowbridge

Sequence Diagram(s)

sequenceDiagram
participant VSCodeExtension
participant FleetConfig as fleet.json
participant SSHTunnel
participant LocalServer
VSCodeExtension->>FleetConfig: Read role and canonical port
VSCodeExtension->>SSHTunnel: Probe or unload tunnel
VSCodeExtension->>FleetConfig: Write standalone role
VSCodeExtension->>LocalServer: Restart local server
Loading
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/fleet-generalize-standalone

Comment @coderabbitai help to get the list of available commands.

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.

Generalize fleet: configurable topology + "Go Standalone" mode

1 participant

@jeonghun-jj-lee
, '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

feat(fleet): generalize topology + 'Go Standalone' mode - #339

Merged
jeonghun-jj-lee merged 1 commit into
mainfrom
feat/fleet-generalize-standalone
Aug 11, 2026
Merged

feat(fleet): generalize topology + 'Go Standalone' mode#339
jeonghun-jj-lee merged 1 commit into
mainfrom
feat/fleet-generalize-standalone

Conversation

@jeonghun-jj-lee

@jeonghun-jj-leejeonghun-jj-lee commented Aug 11, 2026

Copy link
Copy Markdown
Contributor

Summary

Replace hardcoded Aaron's-Mac-mini hostname with configurable fleet.json. Change 'Local Fallback' from a temporary escape hatch into a permanent 'Go Standalone' mode switch that restores purely-local Amicode.

Key changes

  • ~/.amico/ops/fleet/fleet.json is the single source of truth for fleet role (standalone|server|client) and canonical server coordinates (host, port, sshAlias)
  • No file = standalone (safe zero-config default — pre-fleet behavior)
  • Guard script reads fleet.json instead of scutil hostname comparison
  • 'Go Standalone' command replaces 'Enter Local Fallback' — permanent mode switch, not a temporary escape hatch
  • Drop 'Exit Local Fallback' and 'Rejoin' commands (re-enrollment deferred)
  • fleet_health.ts reads from fleet.json; health checks skip when standalone
  • install.sh reads fleet.json; skips entirely for standalone
  • CI gate verifies guard references fleet.json (not a hardcoded hostname)
  • CONTEXT.md glossary updated: 'Local fallback' → 'Go Standalone'
  • Remove all references to Aarons-Mac-mini, /Users/aaron/, amico-mini
  • Tunnel plist uses FLEET_SSH_ALIAS placeholder (templating deferred to Enroll)
  • Legacy fallback.json migrated to fleet.json on activation

Tests

  • 21 fleet-specific tests pass (rewritten for new API)
  • 931/935 total tests pass (4 failures are pre-existing e2e timeout, unrelated)
  • TypeScript compiles cleanly
  • CI gate (assert_fleet_guard.sh) passes

Deferred (follow-up)

  • 'Enroll' command (join a fleet from command palette)
  • Canonical session pull (merge server sessions into local DB with remote icon)
  • Tunnel plist templating from fleet.json fields

Closes#338

Summary by CodeRabbit

  • New Features

    • Added configurable fleet roles: standalone, server, and client.
    • Added Go Standalone to leave a fleet and run locally.
    • Fleet status now reflects tunnel availability and can reconnect automatically.
    • Fleet configuration uses fleet.json, including configurable tunnel ports.
  • Bug Fixes

    • Improved handling of missing or invalid fleet configuration.
    • Prevented client machines from starting local servers unintentionally.
  • Documentation

    • Updated fleet setup, verification, installation, health checks, and standalone-mode guidance.

Replace hardcoded Aaron's-Mac-mini hostname with configurable fleet.json:
- ~/.amico/ops/fleet/fleet.json is the single source of truth for fleet role
(standalone|server|client) and canonical server coordinates (host, port, sshAlias)
- No file = standalone (safe zero-config default, pre-fleet behavior)
- Guard script reads fleet.json instead of scutil hostname comparison
- 'Go Standalone' command replaces 'Enter Local Fallback' — permanent mode
switch, not a temporary escape hatch
- Drop 'Exit Local Fallback' and 'Rejoin' commands (re-enrollment deferred)
- fleet_health.ts reads from fleet.json; health checks skip when standalone
- install.sh reads fleet.json; skips entirely for standalone
- CI gate verifies guard references fleet.json (not a hardcoded hostname)
- CONTEXT.md glossary updated: 'Local fallback' → 'Go Standalone'
- Remove all references to Aarons-Mac-mini, /Users/aaron/, amico-mini
- Tunnel plist uses FLEET_SSH_ALIAS placeholder (templating deferred to Enroll)
- Legacy fallback.json migrated to fleet.json on activation
Closes#338
@jeonghun-jj-lee
jeonghun-jj-lee marked this pull request as ready for review August 11, 2026 15:39
@jeonghun-jj-lee
jeonghun-jj-lee merged commit fc3a403 into mainAug 11, 2026
6 checks passed
@jeonghun-jj-lee
jeonghun-jj-lee deleted the feat/fleet-generalize-standalone branch August 11, 2026 15:39
@coderabbitai

coderabbitaiBot commented Aug 11, 2026

Copy link
Copy Markdown

Review Change Stack

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 7e13cf99-b3e8-4099-ae66-d26d2c1ed1a5

📥 Commits

Reviewing files that changed from the base of the PR and between 2e5ed2c and f76d31e.

📒 Files selected for processing (17)
  • CONTEXT.md
  • packages/extension/package.json
  • packages/extension/scripts/assert_fleet_guard.sh
  • packages/extension/src/extension.ts
  • packages/extension/src/fleet_fallback.ts
  • packages/extension/src/fleet_health.ts
  • packages/extension/src/terminal.ts
  • packages/extension/test/fleet_fallback.test.ts
  • packages/extension/test/fleet_health.test.ts
  • packages/extension/tools/fleet/README.md
  • packages/extension/tools/fleet/amico-opencode-fleet-guard
  • packages/extension/tools/fleet/co.harmoniqs.amico-tunnel.plist
  • packages/extension/tools/fleet/install.sh
  • tools/fleet/README.md
  • tools/fleet/amico-opencode-fleet-guard
  • tools/fleet/co.harmoniqs.amico-tunnel.plist
  • tools/fleet/install.sh

📝 Walkthrough

Walkthrough

Fleet behavior now uses fleet.json for roles and canonical server settings. The extension replaces fallback and rejoin flows with Go Standalone. Guards, installers, health checks, tunnel wiring, tests, and documentation use the new model.

Changes

Fleet generalization

Layer / File(s)Summary
Fleet configuration model
packages/extension/src/fleet_fallback.ts, packages/extension/src/terminal.ts, packages/extension/test/fleet_fallback.test.ts
FleetConfig replaces fallback state. It supports role detection, canonical port lookup, standalone switching, legacy migration, and configuration cleanup.
Extension fleet and standalone flow
packages/extension/src/extension.ts, packages/extension/package.json
The extension reads fleet roles, probes configurable tunnels, offers Go Standalone, unloads the tunnel, restarts a local server, and reconnects after restart.
Fleet health and CI validation
packages/extension/src/fleet_health.ts, packages/extension/test/fleet_health.test.ts, packages/extension/scripts/assert_fleet_guard.sh
Health checks report fleet roles and validate configured ports and tunnels. CI validates fleet configuration references.
Fleet guard, installer, and tunnel wiring
tools/fleet/*, packages/extension/tools/fleet/*
Guards and installers read fleet.json, client roles prevent local spawning, configured ports replace the fixed port, and tunnels use FLEET_SSH_ALIAS.
Fleet terminology and operations
CONTEXT.md, tools/fleet/README.md, packages/extension/tools/fleet/README.md
Documentation defines fleet roles, installation, verification, health checks, and the Go Standalone procedure.

Estimated code review effort: 4 (Complex) | ~45 minutes

Suggested reviewers:aarontrowbridge

Sequence Diagram(s)

sequenceDiagram
participant VSCodeExtension
participant FleetConfig as fleet.json
participant SSHTunnel
participant LocalServer
VSCodeExtension->>FleetConfig: Read role and canonical port
VSCodeExtension->>SSHTunnel: Probe or unload tunnel
VSCodeExtension->>FleetConfig: Write standalone role
VSCodeExtension->>LocalServer: Restart local server
Loading
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/fleet-generalize-standalone

Comment @coderabbitai help to get the list of available commands.

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.

Generalize fleet: configurable topology + "Go Standalone" mode

1 participant

@jeonghun-jj-lee
, '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

feat(fleet): generalize topology + 'Go Standalone' mode - #339

Merged
jeonghun-jj-lee merged 1 commit into
mainfrom
feat/fleet-generalize-standalone
Aug 11, 2026
Merged

feat(fleet): generalize topology + 'Go Standalone' mode#339
jeonghun-jj-lee merged 1 commit into
mainfrom
feat/fleet-generalize-standalone

Conversation

@jeonghun-jj-lee

@jeonghun-jj-leejeonghun-jj-lee commented Aug 11, 2026

Copy link
Copy Markdown
Contributor

Summary

Replace hardcoded Aaron's-Mac-mini hostname with configurable fleet.json. Change 'Local Fallback' from a temporary escape hatch into a permanent 'Go Standalone' mode switch that restores purely-local Amicode.

Key changes

  • ~/.amico/ops/fleet/fleet.json is the single source of truth for fleet role (standalone|server|client) and canonical server coordinates (host, port, sshAlias)
  • No file = standalone (safe zero-config default — pre-fleet behavior)
  • Guard script reads fleet.json instead of scutil hostname comparison
  • 'Go Standalone' command replaces 'Enter Local Fallback' — permanent mode switch, not a temporary escape hatch
  • Drop 'Exit Local Fallback' and 'Rejoin' commands (re-enrollment deferred)
  • fleet_health.ts reads from fleet.json; health checks skip when standalone
  • install.sh reads fleet.json; skips entirely for standalone
  • CI gate verifies guard references fleet.json (not a hardcoded hostname)
  • CONTEXT.md glossary updated: 'Local fallback' → 'Go Standalone'
  • Remove all references to Aarons-Mac-mini, /Users/aaron/, amico-mini
  • Tunnel plist uses FLEET_SSH_ALIAS placeholder (templating deferred to Enroll)
  • Legacy fallback.json migrated to fleet.json on activation

Tests

  • 21 fleet-specific tests pass (rewritten for new API)
  • 931/935 total tests pass (4 failures are pre-existing e2e timeout, unrelated)
  • TypeScript compiles cleanly
  • CI gate (assert_fleet_guard.sh) passes

Deferred (follow-up)

  • 'Enroll' command (join a fleet from command palette)
  • Canonical session pull (merge server sessions into local DB with remote icon)
  • Tunnel plist templating from fleet.json fields

Closes#338

Summary by CodeRabbit

  • New Features

    • Added configurable fleet roles: standalone, server, and client.
    • Added Go Standalone to leave a fleet and run locally.
    • Fleet status now reflects tunnel availability and can reconnect automatically.
    • Fleet configuration uses fleet.json, including configurable tunnel ports.
  • Bug Fixes

    • Improved handling of missing or invalid fleet configuration.
    • Prevented client machines from starting local servers unintentionally.
  • Documentation

    • Updated fleet setup, verification, installation, health checks, and standalone-mode guidance.

Replace hardcoded Aaron's-Mac-mini hostname with configurable fleet.json:
- ~/.amico/ops/fleet/fleet.json is the single source of truth for fleet role
(standalone|server|client) and canonical server coordinates (host, port, sshAlias)
- No file = standalone (safe zero-config default, pre-fleet behavior)
- Guard script reads fleet.json instead of scutil hostname comparison
- 'Go Standalone' command replaces 'Enter Local Fallback' — permanent mode
switch, not a temporary escape hatch
- Drop 'Exit Local Fallback' and 'Rejoin' commands (re-enrollment deferred)
- fleet_health.ts reads from fleet.json; health checks skip when standalone
- install.sh reads fleet.json; skips entirely for standalone
- CI gate verifies guard references fleet.json (not a hardcoded hostname)
- CONTEXT.md glossary updated: 'Local fallback' → 'Go Standalone'
- Remove all references to Aarons-Mac-mini, /Users/aaron/, amico-mini
- Tunnel plist uses FLEET_SSH_ALIAS placeholder (templating deferred to Enroll)
- Legacy fallback.json migrated to fleet.json on activation
Closes#338
@jeonghun-jj-lee
jeonghun-jj-lee marked this pull request as ready for review August 11, 2026 15:39
@jeonghun-jj-lee
jeonghun-jj-lee merged commit fc3a403 into mainAug 11, 2026
6 checks passed
@jeonghun-jj-lee
jeonghun-jj-lee deleted the feat/fleet-generalize-standalone branch August 11, 2026 15:39
@coderabbitai

coderabbitaiBot commented Aug 11, 2026

Copy link
Copy Markdown

Review Change Stack

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 7e13cf99-b3e8-4099-ae66-d26d2c1ed1a5

📥 Commits

Reviewing files that changed from the base of the PR and between 2e5ed2c and f76d31e.

📒 Files selected for processing (17)
  • CONTEXT.md
  • packages/extension/package.json
  • packages/extension/scripts/assert_fleet_guard.sh
  • packages/extension/src/extension.ts
  • packages/extension/src/fleet_fallback.ts
  • packages/extension/src/fleet_health.ts
  • packages/extension/src/terminal.ts
  • packages/extension/test/fleet_fallback.test.ts
  • packages/extension/test/fleet_health.test.ts
  • packages/extension/tools/fleet/README.md
  • packages/extension/tools/fleet/amico-opencode-fleet-guard
  • packages/extension/tools/fleet/co.harmoniqs.amico-tunnel.plist
  • packages/extension/tools/fleet/install.sh
  • tools/fleet/README.md
  • tools/fleet/amico-opencode-fleet-guard
  • tools/fleet/co.harmoniqs.amico-tunnel.plist
  • tools/fleet/install.sh

📝 Walkthrough

Walkthrough

Fleet behavior now uses fleet.json for roles and canonical server settings. The extension replaces fallback and rejoin flows with Go Standalone. Guards, installers, health checks, tunnel wiring, tests, and documentation use the new model.

Changes

Fleet generalization

Layer / File(s)Summary
Fleet configuration model
packages/extension/src/fleet_fallback.ts, packages/extension/src/terminal.ts, packages/extension/test/fleet_fallback.test.ts
FleetConfig replaces fallback state. It supports role detection, canonical port lookup, standalone switching, legacy migration, and configuration cleanup.
Extension fleet and standalone flow
packages/extension/src/extension.ts, packages/extension/package.json
The extension reads fleet roles, probes configurable tunnels, offers Go Standalone, unloads the tunnel, restarts a local server, and reconnects after restart.
Fleet health and CI validation
packages/extension/src/fleet_health.ts, packages/extension/test/fleet_health.test.ts, packages/extension/scripts/assert_fleet_guard.sh
Health checks report fleet roles and validate configured ports and tunnels. CI validates fleet configuration references.
Fleet guard, installer, and tunnel wiring
tools/fleet/*, packages/extension/tools/fleet/*
Guards and installers read fleet.json, client roles prevent local spawning, configured ports replace the fixed port, and tunnels use FLEET_SSH_ALIAS.
Fleet terminology and operations
CONTEXT.md, tools/fleet/README.md, packages/extension/tools/fleet/README.md
Documentation defines fleet roles, installation, verification, health checks, and the Go Standalone procedure.

Estimated code review effort: 4 (Complex) | ~45 minutes

Suggested reviewers:aarontrowbridge

Sequence Diagram(s)

sequenceDiagram
participant VSCodeExtension
participant FleetConfig as fleet.json
participant SSHTunnel
participant LocalServer
VSCodeExtension->>FleetConfig: Read role and canonical port
VSCodeExtension->>SSHTunnel: Probe or unload tunnel
VSCodeExtension->>FleetConfig: Write standalone role
VSCodeExtension->>LocalServer: Restart local server
Loading
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/fleet-generalize-standalone

Comment @coderabbitai help to get the list of available commands.

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.

Generalize fleet: configurable topology + "Go Standalone" mode

1 participant

@jeonghun-jj-lee
, '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

feat(fleet): generalize topology + 'Go Standalone' mode - #339

Merged
jeonghun-jj-lee merged 1 commit into
mainfrom
feat/fleet-generalize-standalone
Aug 11, 2026
Merged

feat(fleet): generalize topology + 'Go Standalone' mode#339
jeonghun-jj-lee merged 1 commit into
mainfrom
feat/fleet-generalize-standalone

Conversation

@jeonghun-jj-lee

@jeonghun-jj-leejeonghun-jj-lee commented Aug 11, 2026

Copy link
Copy Markdown
Contributor

Summary

Replace hardcoded Aaron's-Mac-mini hostname with configurable fleet.json. Change 'Local Fallback' from a temporary escape hatch into a permanent 'Go Standalone' mode switch that restores purely-local Amicode.

Key changes

  • ~/.amico/ops/fleet/fleet.json is the single source of truth for fleet role (standalone|server|client) and canonical server coordinates (host, port, sshAlias)
  • No file = standalone (safe zero-config default — pre-fleet behavior)
  • Guard script reads fleet.json instead of scutil hostname comparison
  • 'Go Standalone' command replaces 'Enter Local Fallback' — permanent mode switch, not a temporary escape hatch
  • Drop 'Exit Local Fallback' and 'Rejoin' commands (re-enrollment deferred)
  • fleet_health.ts reads from fleet.json; health checks skip when standalone
  • install.sh reads fleet.json; skips entirely for standalone
  • CI gate verifies guard references fleet.json (not a hardcoded hostname)
  • CONTEXT.md glossary updated: 'Local fallback' → 'Go Standalone'
  • Remove all references to Aarons-Mac-mini, /Users/aaron/, amico-mini
  • Tunnel plist uses FLEET_SSH_ALIAS placeholder (templating deferred to Enroll)
  • Legacy fallback.json migrated to fleet.json on activation

Tests

  • 21 fleet-specific tests pass (rewritten for new API)
  • 931/935 total tests pass (4 failures are pre-existing e2e timeout, unrelated)
  • TypeScript compiles cleanly
  • CI gate (assert_fleet_guard.sh) passes

Deferred (follow-up)

  • 'Enroll' command (join a fleet from command palette)
  • Canonical session pull (merge server sessions into local DB with remote icon)
  • Tunnel plist templating from fleet.json fields

Closes#338

Summary by CodeRabbit

  • New Features

    • Added configurable fleet roles: standalone, server, and client.
    • Added Go Standalone to leave a fleet and run locally.
    • Fleet status now reflects tunnel availability and can reconnect automatically.
    • Fleet configuration uses fleet.json, including configurable tunnel ports.
  • Bug Fixes

    • Improved handling of missing or invalid fleet configuration.
    • Prevented client machines from starting local servers unintentionally.
  • Documentation

    • Updated fleet setup, verification, installation, health checks, and standalone-mode guidance.

Replace hardcoded Aaron's-Mac-mini hostname with configurable fleet.json:
- ~/.amico/ops/fleet/fleet.json is the single source of truth for fleet role
(standalone|server|client) and canonical server coordinates (host, port, sshAlias)
- No file = standalone (safe zero-config default, pre-fleet behavior)
- Guard script reads fleet.json instead of scutil hostname comparison
- 'Go Standalone' command replaces 'Enter Local Fallback' — permanent mode
switch, not a temporary escape hatch
- Drop 'Exit Local Fallback' and 'Rejoin' commands (re-enrollment deferred)
- fleet_health.ts reads from fleet.json; health checks skip when standalone
- install.sh reads fleet.json; skips entirely for standalone
- CI gate verifies guard references fleet.json (not a hardcoded hostname)
- CONTEXT.md glossary updated: 'Local fallback' → 'Go Standalone'
- Remove all references to Aarons-Mac-mini, /Users/aaron/, amico-mini
- Tunnel plist uses FLEET_SSH_ALIAS placeholder (templating deferred to Enroll)
- Legacy fallback.json migrated to fleet.json on activation
Closes#338
@jeonghun-jj-lee
jeonghun-jj-lee marked this pull request as ready for review August 11, 2026 15:39
@jeonghun-jj-lee
jeonghun-jj-lee merged commit fc3a403 into mainAug 11, 2026
6 checks passed
@jeonghun-jj-lee
jeonghun-jj-lee deleted the feat/fleet-generalize-standalone branch August 11, 2026 15:39
@coderabbitai

coderabbitaiBot commented Aug 11, 2026

Copy link
Copy Markdown

Review Change Stack

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 7e13cf99-b3e8-4099-ae66-d26d2c1ed1a5

📥 Commits

Reviewing files that changed from the base of the PR and between 2e5ed2c and f76d31e.

📒 Files selected for processing (17)
  • CONTEXT.md
  • packages/extension/package.json
  • packages/extension/scripts/assert_fleet_guard.sh
  • packages/extension/src/extension.ts
  • packages/extension/src/fleet_fallback.ts
  • packages/extension/src/fleet_health.ts
  • packages/extension/src/terminal.ts
  • packages/extension/test/fleet_fallback.test.ts
  • packages/extension/test/fleet_health.test.ts
  • packages/extension/tools/fleet/README.md
  • packages/extension/tools/fleet/amico-opencode-fleet-guard
  • packages/extension/tools/fleet/co.harmoniqs.amico-tunnel.plist
  • packages/extension/tools/fleet/install.sh
  • tools/fleet/README.md
  • tools/fleet/amico-opencode-fleet-guard
  • tools/fleet/co.harmoniqs.amico-tunnel.plist
  • tools/fleet/install.sh

📝 Walkthrough

Walkthrough

Fleet behavior now uses fleet.json for roles and canonical server settings. The extension replaces fallback and rejoin flows with Go Standalone. Guards, installers, health checks, tunnel wiring, tests, and documentation use the new model.

Changes

Fleet generalization

Layer / File(s)Summary
Fleet configuration model
packages/extension/src/fleet_fallback.ts, packages/extension/src/terminal.ts, packages/extension/test/fleet_fallback.test.ts
FleetConfig replaces fallback state. It supports role detection, canonical port lookup, standalone switching, legacy migration, and configuration cleanup.
Extension fleet and standalone flow
packages/extension/src/extension.ts, packages/extension/package.json
The extension reads fleet roles, probes configurable tunnels, offers Go Standalone, unloads the tunnel, restarts a local server, and reconnects after restart.
Fleet health and CI validation
packages/extension/src/fleet_health.ts, packages/extension/test/fleet_health.test.ts, packages/extension/scripts/assert_fleet_guard.sh
Health checks report fleet roles and validate configured ports and tunnels. CI validates fleet configuration references.
Fleet guard, installer, and tunnel wiring
tools/fleet/*, packages/extension/tools/fleet/*
Guards and installers read fleet.json, client roles prevent local spawning, configured ports replace the fixed port, and tunnels use FLEET_SSH_ALIAS.
Fleet terminology and operations
CONTEXT.md, tools/fleet/README.md, packages/extension/tools/fleet/README.md
Documentation defines fleet roles, installation, verification, health checks, and the Go Standalone procedure.

Estimated code review effort: 4 (Complex) | ~45 minutes

Suggested reviewers:aarontrowbridge

Sequence Diagram(s)

sequenceDiagram
participant VSCodeExtension
participant FleetConfig as fleet.json
participant SSHTunnel
participant LocalServer
VSCodeExtension->>FleetConfig: Read role and canonical port
VSCodeExtension->>SSHTunnel: Probe or unload tunnel
VSCodeExtension->>FleetConfig: Write standalone role
VSCodeExtension->>LocalServer: Restart local server
Loading
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/fleet-generalize-standalone

Comment @coderabbitai help to get the list of available commands.

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.

Generalize fleet: configurable topology + "Go Standalone" mode

1 participant

@jeonghun-jj-lee
, '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

feat(fleet): generalize topology + 'Go Standalone' mode - #339

Merged
jeonghun-jj-lee merged 1 commit into
mainfrom
feat/fleet-generalize-standalone
Aug 11, 2026
Merged

feat(fleet): generalize topology + 'Go Standalone' mode#339
jeonghun-jj-lee merged 1 commit into
mainfrom
feat/fleet-generalize-standalone

Conversation

@jeonghun-jj-lee

@jeonghun-jj-leejeonghun-jj-lee commented Aug 11, 2026

Copy link
Copy Markdown
Contributor

Summary

Replace hardcoded Aaron's-Mac-mini hostname with configurable fleet.json. Change 'Local Fallback' from a temporary escape hatch into a permanent 'Go Standalone' mode switch that restores purely-local Amicode.

Key changes

  • ~/.amico/ops/fleet/fleet.json is the single source of truth for fleet role (standalone|server|client) and canonical server coordinates (host, port, sshAlias)
  • No file = standalone (safe zero-config default — pre-fleet behavior)
  • Guard script reads fleet.json instead of scutil hostname comparison
  • 'Go Standalone' command replaces 'Enter Local Fallback' — permanent mode switch, not a temporary escape hatch
  • Drop 'Exit Local Fallback' and 'Rejoin' commands (re-enrollment deferred)
  • fleet_health.ts reads from fleet.json; health checks skip when standalone
  • install.sh reads fleet.json; skips entirely for standalone
  • CI gate verifies guard references fleet.json (not a hardcoded hostname)
  • CONTEXT.md glossary updated: 'Local fallback' → 'Go Standalone'
  • Remove all references to Aarons-Mac-mini, /Users/aaron/, amico-mini
  • Tunnel plist uses FLEET_SSH_ALIAS placeholder (templating deferred to Enroll)
  • Legacy fallback.json migrated to fleet.json on activation

Tests

  • 21 fleet-specific tests pass (rewritten for new API)
  • 931/935 total tests pass (4 failures are pre-existing e2e timeout, unrelated)
  • TypeScript compiles cleanly
  • CI gate (assert_fleet_guard.sh) passes

Deferred (follow-up)

  • 'Enroll' command (join a fleet from command palette)
  • Canonical session pull (merge server sessions into local DB with remote icon)
  • Tunnel plist templating from fleet.json fields

Closes#338

Summary by CodeRabbit

  • New Features

    • Added configurable fleet roles: standalone, server, and client.
    • Added Go Standalone to leave a fleet and run locally.
    • Fleet status now reflects tunnel availability and can reconnect automatically.
    • Fleet configuration uses fleet.json, including configurable tunnel ports.
  • Bug Fixes

    • Improved handling of missing or invalid fleet configuration.
    • Prevented client machines from starting local servers unintentionally.
  • Documentation

    • Updated fleet setup, verification, installation, health checks, and standalone-mode guidance.

Replace hardcoded Aaron's-Mac-mini hostname with configurable fleet.json:
- ~/.amico/ops/fleet/fleet.json is the single source of truth for fleet role
(standalone|server|client) and canonical server coordinates (host, port, sshAlias)
- No file = standalone (safe zero-config default, pre-fleet behavior)
- Guard script reads fleet.json instead of scutil hostname comparison
- 'Go Standalone' command replaces 'Enter Local Fallback' — permanent mode
switch, not a temporary escape hatch
- Drop 'Exit Local Fallback' and 'Rejoin' commands (re-enrollment deferred)
- fleet_health.ts reads from fleet.json; health checks skip when standalone
- install.sh reads fleet.json; skips entirely for standalone
- CI gate verifies guard references fleet.json (not a hardcoded hostname)
- CONTEXT.md glossary updated: 'Local fallback' → 'Go Standalone'
- Remove all references to Aarons-Mac-mini, /Users/aaron/, amico-mini
- Tunnel plist uses FLEET_SSH_ALIAS placeholder (templating deferred to Enroll)
- Legacy fallback.json migrated to fleet.json on activation
Closes#338
@jeonghun-jj-lee
jeonghun-jj-lee marked this pull request as ready for review August 11, 2026 15:39
@jeonghun-jj-lee
jeonghun-jj-lee merged commit fc3a403 into mainAug 11, 2026
6 checks passed
@jeonghun-jj-lee
jeonghun-jj-lee deleted the feat/fleet-generalize-standalone branch August 11, 2026 15:39
@coderabbitai

coderabbitaiBot commented Aug 11, 2026

Copy link
Copy Markdown

Review Change Stack

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 7e13cf99-b3e8-4099-ae66-d26d2c1ed1a5

📥 Commits

Reviewing files that changed from the base of the PR and between 2e5ed2c and f76d31e.

📒 Files selected for processing (17)
  • CONTEXT.md
  • packages/extension/package.json
  • packages/extension/scripts/assert_fleet_guard.sh
  • packages/extension/src/extension.ts
  • packages/extension/src/fleet_fallback.ts
  • packages/extension/src/fleet_health.ts
  • packages/extension/src/terminal.ts
  • packages/extension/test/fleet_fallback.test.ts
  • packages/extension/test/fleet_health.test.ts
  • packages/extension/tools/fleet/README.md
  • packages/extension/tools/fleet/amico-opencode-fleet-guard
  • packages/extension/tools/fleet/co.harmoniqs.amico-tunnel.plist
  • packages/extension/tools/fleet/install.sh
  • tools/fleet/README.md
  • tools/fleet/amico-opencode-fleet-guard
  • tools/fleet/co.harmoniqs.amico-tunnel.plist
  • tools/fleet/install.sh

📝 Walkthrough

Walkthrough

Fleet behavior now uses fleet.json for roles and canonical server settings. The extension replaces fallback and rejoin flows with Go Standalone. Guards, installers, health checks, tunnel wiring, tests, and documentation use the new model.

Changes

Fleet generalization

Layer / File(s)Summary
Fleet configuration model
packages/extension/src/fleet_fallback.ts, packages/extension/src/terminal.ts, packages/extension/test/fleet_fallback.test.ts
FleetConfig replaces fallback state. It supports role detection, canonical port lookup, standalone switching, legacy migration, and configuration cleanup.
Extension fleet and standalone flow
packages/extension/src/extension.ts, packages/extension/package.json
The extension reads fleet roles, probes configurable tunnels, offers Go Standalone, unloads the tunnel, restarts a local server, and reconnects after restart.
Fleet health and CI validation
packages/extension/src/fleet_health.ts, packages/extension/test/fleet_health.test.ts, packages/extension/scripts/assert_fleet_guard.sh
Health checks report fleet roles and validate configured ports and tunnels. CI validates fleet configuration references.
Fleet guard, installer, and tunnel wiring
tools/fleet/*, packages/extension/tools/fleet/*
Guards and installers read fleet.json, client roles prevent local spawning, configured ports replace the fixed port, and tunnels use FLEET_SSH_ALIAS.
Fleet terminology and operations
CONTEXT.md, tools/fleet/README.md, packages/extension/tools/fleet/README.md
Documentation defines fleet roles, installation, verification, health checks, and the Go Standalone procedure.

Estimated code review effort: 4 (Complex) | ~45 minutes

Suggested reviewers:aarontrowbridge

Sequence Diagram(s)

sequenceDiagram
participant VSCodeExtension
participant FleetConfig as fleet.json
participant SSHTunnel
participant LocalServer
VSCodeExtension->>FleetConfig: Read role and canonical port
VSCodeExtension->>SSHTunnel: Probe or unload tunnel
VSCodeExtension->>FleetConfig: Write standalone role
VSCodeExtension->>LocalServer: Restart local server
Loading
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/fleet-generalize-standalone

Comment @coderabbitai help to get the list of available commands.

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.

Generalize fleet: configurable topology + "Go Standalone" mode

1 participant

@jeonghun-jj-lee