tide-commander 1.99.0 → 1.100.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/dist/assets/{BossLogsModal-CDel834o.js → BossLogsModal-CgiqbrpI.js} +1 -1
  2. package/dist/assets/{BossSpawnModal-BB9wL5VV.js → BossSpawnModal-Dm-Rlit6.js} +1 -1
  3. package/dist/assets/{ControlsModal-D5RE5MvT.js → ControlsModal-CS5PL1Dr.js} +1 -1
  4. package/dist/assets/{DockerLogsModal-B27P1JpZ.js → DockerLogsModal-CoDsW7Zf.js} +1 -1
  5. package/dist/assets/{EmbeddedEditor-DP1jqsT_.js → EmbeddedEditor-B53miU1u.js} +1 -1
  6. package/dist/assets/{GmailOAuthSetup-DvuL5G8Q.js → GmailOAuthSetup-DHYC56vA.js} +1 -1
  7. package/dist/assets/{GoogleOAuthSetup-CG6bSCjv.js → GoogleOAuthSetup-BrXFYUFW.js} +1 -1
  8. package/dist/assets/{IframeModal-ClnUGmJV.js → IframeModal-BrGdxNuG.js} +1 -1
  9. package/dist/assets/{IntegrationsPanel-0vdfxZRq.js → IntegrationsPanel-B5D_jOhk.js} +2 -2
  10. package/dist/assets/{LogViewerModal-DLQlrZ4O.js → LogViewerModal-KHXuxGNe.js} +1 -1
  11. package/dist/assets/{MonitoringModal-DiC9TNCy.js → MonitoringModal-Co_fx9fM.js} +1 -1
  12. package/dist/assets/{PM2LogsModal-BgPrnaP5.js → PM2LogsModal-CzSWbJw2.js} +1 -1
  13. package/dist/assets/{RestoreArchivedAreaModal-CIN1OrOW.js → RestoreArchivedAreaModal-DEgMLH7w.js} +1 -1
  14. package/dist/assets/{Scene2DCanvas-Bap6brvv.js → Scene2DCanvas-bKf_xYPZ.js} +1 -1
  15. package/dist/assets/{SceneManager-CidCW0PR.js → SceneManager-Djv8JsV0.js} +1 -1
  16. package/dist/assets/{SkillsPanel-DHQTPaP2.js → SkillsPanel-DolU9i4d.js} +1 -1
  17. package/dist/assets/{SlackMultiInstanceSetup-CQK4D89W.js → SlackMultiInstanceSetup-sRiMZQ6x.js} +1 -1
  18. package/dist/assets/{SpawnModal-Cx_k3HHC.js → SpawnModal-Cwb4vyWw.js} +1 -1
  19. package/dist/assets/{SubordinateAssignmentModal-C1DOv51H.js → SubordinateAssignmentModal-D2AUyLhd.js} +1 -1
  20. package/dist/assets/{TriggerManagerPanel-jP5RBK2L.js → TriggerManagerPanel-WEJXvsjq.js} +1 -1
  21. package/dist/assets/{WorkflowEditorPanel-Dh6mZ8M4.js → WorkflowEditorPanel-CqCKn-BW.js} +1 -1
  22. package/dist/assets/{index-DP5sMNS9.js → index-BGpBSg5x.js} +1 -1
  23. package/dist/assets/{index-B-ttQFx4.js → index-Bi9RecAa.js} +2 -2
  24. package/dist/assets/{index-enJvXAbe.js → index-BqTABon1.js} +1 -1
  25. package/dist/assets/{index-DsKaX6TJ.js → index-C2z1QKUl.js} +1 -1
  26. package/dist/assets/{index-BXnThzaG.js → index-CJXhFnBD.js} +1 -1
  27. package/dist/assets/{index-DfEbuBH8.js → index-C_tlEtg3.js} +1 -1
  28. package/dist/assets/{index-D96LXKm4.js → index-Ck5CfDGK.js} +1 -1
  29. package/dist/assets/{index-Cwlm-Pqi.js → index-D1nrHGW6.js} +3 -3
  30. package/dist/assets/{index-CYwFXTQZ.js → index-DThdfn9f.js} +1 -1
  31. package/dist/assets/{main-B7wf_xU_.js → main-CBiZdw6w.js} +4 -4
  32. package/dist/assets/{web-IGuhG0xr.js → web-C6kv8URU.js} +1 -1
  33. package/dist/assets/{web-BHmmnvF7.js → web-hRik7e7W.js} +1 -1
  34. package/dist/assets/{web-SOehUGgT.js → web-ns0ZWeh3.js} +1 -1
  35. package/dist/index.html +1 -1
  36. package/dist/src/packages/server/cli.js +26 -0
  37. package/package.json +1 -1
@@ -1 +1 @@
1
- import{ck as s}from"./main-B7wf_xU_.js";import"./vendor-react--Eh9ivFN.js";import"./vendor-three-Chj50gSY.js";class l extends s{constructor(){super(...arguments),this.pending=[],this.deliveredNotifications=[],this.hasNotificationSupport=()=>{if(!("Notification"in window)||!Notification.requestPermission)return!1;if(Notification.permission!=="granted")try{new Notification("")}catch(i){if(i instanceof Error&&i.name==="TypeError")return!1}return!0}}async getDeliveredNotifications(){const i=[];for(const t of this.deliveredNotifications){const e={title:t.title,id:parseInt(t.tag),body:t.body};i.push(e)}return{notifications:i}}async removeDeliveredNotifications(i){for(const t of i.notifications){const e=this.deliveredNotifications.find(n=>n.tag===String(t.id));e==null||e.close(),this.deliveredNotifications=this.deliveredNotifications.filter(()=>!e)}}async removeAllDeliveredNotifications(){for(const i of this.deliveredNotifications)i.close();this.deliveredNotifications=[]}async createChannel(){throw this.unimplemented("Not implemented on web.")}async deleteChannel(){throw this.unimplemented("Not implemented on web.")}async listChannels(){throw this.unimplemented("Not implemented on web.")}async schedule(i){if(!this.hasNotificationSupport())throw this.unavailable("Notifications not supported in this browser.");for(const t of i.notifications)this.sendNotification(t);return{notifications:i.notifications.map(t=>({id:t.id}))}}async getPending(){return{notifications:this.pending}}async registerActionTypes(){throw this.unimplemented("Not implemented on web.")}async cancel(i){this.pending=this.pending.filter(t=>!i.notifications.find(e=>e.id===t.id))}async areEnabled(){const{display:i}=await this.checkPermissions();return{value:i==="granted"}}async changeExactNotificationSetting(){throw this.unimplemented("Not implemented on web.")}async checkExactNotificationSetting(){throw this.unimplemented("Not implemented on web.")}async requestPermissions(){if(!this.hasNotificationSupport())throw this.unavailable("Notifications not supported in this browser.");return{display:this.transformNotificationPermission(await Notification.requestPermission())}}async checkPermissions(){if(!this.hasNotificationSupport())throw this.unavailable("Notifications not supported in this browser.");return{display:this.transformNotificationPermission(Notification.permission)}}transformNotificationPermission(i){switch(i){case"granted":return"granted";case"denied":return"denied";default:return"prompt"}}sendPending(){var i;const t=[],e=new Date().getTime();for(const n of this.pending)!((i=n.schedule)===null||i===void 0)&&i.at&&n.schedule.at.getTime()<=e&&(this.buildNotification(n),t.push(n));this.pending=this.pending.filter(n=>!t.find(o=>o===n))}sendNotification(i){var t;if(!((t=i.schedule)===null||t===void 0)&&t.at){const e=i.schedule.at.getTime()-new Date().getTime();this.pending.push(i),setTimeout(()=>{this.sendPending()},e);return}this.buildNotification(i)}buildNotification(i){const t=new Notification(i.title,{body:i.body,tag:String(i.id)});return t.addEventListener("click",this.onClick.bind(this,i),!1),t.addEventListener("show",this.onShow.bind(this,i),!1),t.addEventListener("close",()=>{this.deliveredNotifications=this.deliveredNotifications.filter(()=>!this)},!1),this.deliveredNotifications.push(t),t}onClick(i){const t={actionId:"tap",notification:i};this.notifyListeners("localNotificationActionPerformed",t)}onShow(i){this.notifyListeners("localNotificationReceived",i)}}export{l as LocalNotificationsWeb};
1
+ import{ck as s}from"./main-CBiZdw6w.js";import"./vendor-react--Eh9ivFN.js";import"./vendor-three-Chj50gSY.js";class l extends s{constructor(){super(...arguments),this.pending=[],this.deliveredNotifications=[],this.hasNotificationSupport=()=>{if(!("Notification"in window)||!Notification.requestPermission)return!1;if(Notification.permission!=="granted")try{new Notification("")}catch(i){if(i instanceof Error&&i.name==="TypeError")return!1}return!0}}async getDeliveredNotifications(){const i=[];for(const t of this.deliveredNotifications){const e={title:t.title,id:parseInt(t.tag),body:t.body};i.push(e)}return{notifications:i}}async removeDeliveredNotifications(i){for(const t of i.notifications){const e=this.deliveredNotifications.find(n=>n.tag===String(t.id));e==null||e.close(),this.deliveredNotifications=this.deliveredNotifications.filter(()=>!e)}}async removeAllDeliveredNotifications(){for(const i of this.deliveredNotifications)i.close();this.deliveredNotifications=[]}async createChannel(){throw this.unimplemented("Not implemented on web.")}async deleteChannel(){throw this.unimplemented("Not implemented on web.")}async listChannels(){throw this.unimplemented("Not implemented on web.")}async schedule(i){if(!this.hasNotificationSupport())throw this.unavailable("Notifications not supported in this browser.");for(const t of i.notifications)this.sendNotification(t);return{notifications:i.notifications.map(t=>({id:t.id}))}}async getPending(){return{notifications:this.pending}}async registerActionTypes(){throw this.unimplemented("Not implemented on web.")}async cancel(i){this.pending=this.pending.filter(t=>!i.notifications.find(e=>e.id===t.id))}async areEnabled(){const{display:i}=await this.checkPermissions();return{value:i==="granted"}}async changeExactNotificationSetting(){throw this.unimplemented("Not implemented on web.")}async checkExactNotificationSetting(){throw this.unimplemented("Not implemented on web.")}async requestPermissions(){if(!this.hasNotificationSupport())throw this.unavailable("Notifications not supported in this browser.");return{display:this.transformNotificationPermission(await Notification.requestPermission())}}async checkPermissions(){if(!this.hasNotificationSupport())throw this.unavailable("Notifications not supported in this browser.");return{display:this.transformNotificationPermission(Notification.permission)}}transformNotificationPermission(i){switch(i){case"granted":return"granted";case"denied":return"denied";default:return"prompt"}}sendPending(){var i;const t=[],e=new Date().getTime();for(const n of this.pending)!((i=n.schedule)===null||i===void 0)&&i.at&&n.schedule.at.getTime()<=e&&(this.buildNotification(n),t.push(n));this.pending=this.pending.filter(n=>!t.find(o=>o===n))}sendNotification(i){var t;if(!((t=i.schedule)===null||t===void 0)&&t.at){const e=i.schedule.at.getTime()-new Date().getTime();this.pending.push(i),setTimeout(()=>{this.sendPending()},e);return}this.buildNotification(i)}buildNotification(i){const t=new Notification(i.title,{body:i.body,tag:String(i.id)});return t.addEventListener("click",this.onClick.bind(this,i),!1),t.addEventListener("show",this.onShow.bind(this,i),!1),t.addEventListener("close",()=>{this.deliveredNotifications=this.deliveredNotifications.filter(()=>!this)},!1),this.deliveredNotifications.push(t),t}onClick(i){const t={actionId:"tap",notification:i};this.notifyListeners("localNotificationActionPerformed",t)}onShow(i){this.notifyListeners("localNotificationReceived",i)}}export{l as LocalNotificationsWeb};
@@ -1 +1 @@
1
- import{ck as a}from"./main-B7wf_xU_.js";import{ImpactStyle as i,NotificationType as r}from"./index-B-ttQFx4.js";import"./vendor-react--Eh9ivFN.js";import"./vendor-three-Chj50gSY.js";class h extends a{constructor(){super(...arguments),this.selectionStarted=!1}async impact(t){const e=this.patternForImpact(t==null?void 0:t.style);this.vibrateWithPattern(e)}async notification(t){const e=this.patternForNotification(t==null?void 0:t.type);this.vibrateWithPattern(e)}async vibrate(t){const e=(t==null?void 0:t.duration)||300;this.vibrateWithPattern([e])}async selectionStart(){this.selectionStarted=!0}async selectionChanged(){this.selectionStarted&&this.vibrateWithPattern([70])}async selectionEnd(){this.selectionStarted=!1}patternForImpact(t=i.Heavy){return t===i.Medium?[43]:t===i.Light?[20]:[61]}patternForNotification(t=r.Success){return t===r.Warning?[30,40,30,50,60]:t===r.Error?[27,45,50]:[35,65,21]}vibrateWithPattern(t){if(navigator.vibrate)navigator.vibrate(t);else throw this.unavailable("Browser does not support the vibrate API")}}export{h as HapticsWeb};
1
+ import{ck as a}from"./main-CBiZdw6w.js";import{ImpactStyle as i,NotificationType as r}from"./index-Bi9RecAa.js";import"./vendor-react--Eh9ivFN.js";import"./vendor-three-Chj50gSY.js";class h extends a{constructor(){super(...arguments),this.selectionStarted=!1}async impact(t){const e=this.patternForImpact(t==null?void 0:t.style);this.vibrateWithPattern(e)}async notification(t){const e=this.patternForNotification(t==null?void 0:t.type);this.vibrateWithPattern(e)}async vibrate(t){const e=(t==null?void 0:t.duration)||300;this.vibrateWithPattern([e])}async selectionStart(){this.selectionStarted=!0}async selectionChanged(){this.selectionStarted&&this.vibrateWithPattern([70])}async selectionEnd(){this.selectionStarted=!1}patternForImpact(t=i.Heavy){return t===i.Medium?[43]:t===i.Light?[20]:[61]}patternForNotification(t=r.Success){return t===r.Warning?[30,40,30,50,60]:t===r.Error?[27,45,50]:[35,65,21]}vibrateWithPattern(t){if(navigator.vibrate)navigator.vibrate(t);else throw this.unavailable("Browser does not support the vibrate API")}}export{h as HapticsWeb};
@@ -1 +1 @@
1
- import{ck as t}from"./main-B7wf_xU_.js";import"./vendor-react--Eh9ivFN.js";import"./vendor-three-Chj50gSY.js";class o extends t{constructor(){super(),this.handleVisibilityChange=()=>{const e={isActive:document.hidden!==!0};this.notifyListeners("appStateChange",e),document.hidden?this.notifyListeners("pause",null):this.notifyListeners("resume",null)},document.addEventListener("visibilitychange",this.handleVisibilityChange,!1)}exitApp(){throw this.unimplemented("Not implemented on web.")}async getInfo(){throw this.unimplemented("Not implemented on web.")}async getLaunchUrl(){return{url:""}}async getState(){return{isActive:document.hidden!==!0}}async minimizeApp(){throw this.unimplemented("Not implemented on web.")}async toggleBackButtonHandler(){throw this.unimplemented("Not implemented on web.")}async getAppLanguage(){return{value:navigator.language.split("-")[0].toLowerCase()}}}export{o as AppWeb};
1
+ import{ck as t}from"./main-CBiZdw6w.js";import"./vendor-react--Eh9ivFN.js";import"./vendor-three-Chj50gSY.js";class o extends t{constructor(){super(),this.handleVisibilityChange=()=>{const e={isActive:document.hidden!==!0};this.notifyListeners("appStateChange",e),document.hidden?this.notifyListeners("pause",null):this.notifyListeners("resume",null)},document.addEventListener("visibilitychange",this.handleVisibilityChange,!1)}exitApp(){throw this.unimplemented("Not implemented on web.")}async getInfo(){throw this.unimplemented("Not implemented on web.")}async getLaunchUrl(){return{url:""}}async getState(){return{isActive:document.hidden!==!0}}async minimizeApp(){throw this.unimplemented("Not implemented on web.")}async toggleBackButtonHandler(){throw this.unimplemented("Not implemented on web.")}async getAppLanguage(){return{value:navigator.language.split("-")[0].toLowerCase()}}}export{o as AppWeb};
package/dist/index.html CHANGED
@@ -22,7 +22,7 @@
22
22
  <link rel="icon" type="image/png" sizes="16x16" href="/assets/icons/favicon-16x16.png" />
23
23
  <link rel="apple-touch-icon" sizes="180x180" href="/assets/icons/apple-touch-icon.png" />
24
24
  <title>Tide Commander</title>
25
- <script type="module" crossorigin src="/assets/main-B7wf_xU_.js"></script>
25
+ <script type="module" crossorigin src="/assets/main-CBiZdw6w.js"></script>
26
26
  <link rel="modulepreload" crossorigin href="/assets/vendor-react--Eh9ivFN.js">
27
27
  <link rel="modulepreload" crossorigin href="/assets/vendor-three-Chj50gSY.js">
28
28
  <link rel="stylesheet" crossorigin href="/assets/main-DLzFxLC1.css">
@@ -49,6 +49,8 @@ Options:
49
49
  --generate-auth-token
50
50
  Generate a secure AUTH_TOKEN automatically
51
51
  -f, --foreground Run in foreground (default is background)
52
+ --no-daemon Alias for --foreground; runs the server attached to the
53
+ current terminal so logs print here and Ctrl+C stops it.
52
54
  --lines <n> Number of log lines for logs command (default: 100)
53
55
  --follow Follow logs stream (like tail -f)
54
56
  -h, --help Show this help message
@@ -130,6 +132,7 @@ function parseArgs(argv) {
130
132
  break;
131
133
  case '-f':
132
134
  case '--foreground':
135
+ case '--no-daemon':
133
136
  if (options.command === 'logs') {
134
137
  options.follow = true;
135
138
  }
@@ -790,6 +793,29 @@ async function main() {
790
793
  authEnabled: Boolean(process.env.AUTH_TOKEN),
791
794
  });
792
795
  }
796
+ {
797
+ const cyan = '\x1b[36m';
798
+ const dim = '\x1b[2m';
799
+ const reset = '\x1b[0m';
800
+ const port = process.env.PORT || '6200';
801
+ const host = process.env.HOST || 'localhost';
802
+ const protocol = process.env.HTTPS === '1' ? 'https' : 'http';
803
+ console.log(`${cyan}🌊 Running in foreground${reset} ${dim}(${protocol}://${host}:${port} — press Ctrl+C to stop)${reset}`);
804
+ }
805
+ // Forward shutdown signals to the child so the server stops cleanly and the
806
+ // PID file is removed by child.on('exit') below. Without this, Ctrl+C in a
807
+ // raw terminal can race the parent's default SIGINT handler and leak the PID.
808
+ const forwardSignal = (signal) => {
809
+ try {
810
+ child.kill(signal);
811
+ }
812
+ catch {
813
+ // child may already be gone — let exit handler do the cleanup
814
+ }
815
+ };
816
+ process.on('SIGINT', () => forwardSignal('SIGINT'));
817
+ process.on('SIGTERM', () => forwardSignal('SIGTERM'));
818
+ process.on('SIGHUP', () => forwardSignal('SIGHUP'));
793
819
  child.on('exit', (code, signal) => {
794
820
  clearPidFile();
795
821
  clearServerMeta();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tide-commander",
3
- "version": "1.99.0",
3
+ "version": "1.100.0",
4
4
  "description": "Visual multi-agent orchestrator and manager for Claude Code with 3D/2D interface",
5
5
  "repository": {
6
6
  "type": "git",