@slycode/slycode 0.2.14 → 0.2.16

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 (77) hide show
  1. package/dist/bridge/claude-utils.d.ts +2 -3
  2. package/dist/bridge/claude-utils.js +28 -17
  3. package/dist/bridge/claude-utils.js.map +1 -1
  4. package/dist/bridge/pty-handler.js +40 -0
  5. package/dist/bridge/pty-handler.js.map +1 -1
  6. package/dist/bridge/session-manager.js +3 -3
  7. package/dist/bridge/session-manager.js.map +1 -1
  8. package/dist/messaging/bridge-client.js +1 -1
  9. package/dist/messaging/channels/telegram.d.ts +25 -5
  10. package/dist/messaging/channels/telegram.js +258 -152
  11. package/dist/messaging/channels/telegram.js.map +1 -1
  12. package/dist/messaging/index.js +5 -3
  13. package/dist/messaging/index.js.map +1 -1
  14. package/dist/messaging/state.d.ts +3 -0
  15. package/dist/messaging/state.js +13 -0
  16. package/dist/messaging/state.js.map +1 -1
  17. package/dist/messaging/types.d.ts +2 -0
  18. package/dist/scripts/slycode-env-wrapper.sh +10 -1
  19. package/dist/web/.next/BUILD_ID +1 -1
  20. package/dist/web/.next/build-manifest.json +2 -2
  21. package/dist/web/.next/server/app/_global-error.html +2 -2
  22. package/dist/web/.next/server/app/_global-error.rsc +1 -1
  23. package/dist/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  24. package/dist/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  25. package/dist/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  26. package/dist/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  27. package/dist/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  28. package/dist/web/.next/server/app/_not-found.html +1 -1
  29. package/dist/web/.next/server/app/_not-found.rsc +1 -1
  30. package/dist/web/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
  31. package/dist/web/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  32. package/dist/web/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
  33. package/dist/web/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  34. package/dist/web/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  35. package/dist/web/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  36. package/dist/web/.next/server/app/page_client-reference-manifest.js +1 -1
  37. package/dist/web/.next/server/app/project/[id]/page_client-reference-manifest.js +1 -1
  38. package/dist/web/.next/server/chunks/src_lib_scheduler_ts_03988e3e._.js +1 -1
  39. package/dist/web/.next/server/chunks/src_lib_scheduler_ts_7120457c._.js +1 -1
  40. package/dist/web/.next/server/chunks/ssr/[root-of-the-server]__1f5fc489._.js +1 -1
  41. package/dist/web/.next/server/chunks/ssr/[root-of-the-server]__bcbe4bf2._.js +1 -1
  42. package/dist/web/.next/server/pages/404.html +1 -1
  43. package/dist/web/.next/server/pages/500.html +2 -2
  44. package/dist/web/.next/static/chunks/{cfec56fdddd52361.js → 3d5195b57fc05540.js} +1 -1
  45. package/dist/web/.next/static/chunks/59fb302a5bfd2dc0.js +4 -0
  46. package/dist/web/src/components/ClaudeTerminalPanel.tsx +31 -1
  47. package/dist/web/src/lib/scheduler.ts +11 -2
  48. package/dist/web/tsconfig.tsbuildinfo +1 -1
  49. package/lib/cli/restart.d.ts.map +1 -1
  50. package/lib/cli/restart.js +5 -9
  51. package/lib/cli/restart.js.map +1 -1
  52. package/lib/cli/start.d.ts.map +1 -1
  53. package/lib/cli/start.js +38 -10
  54. package/lib/cli/start.js.map +1 -1
  55. package/lib/cli/update.js +1 -1
  56. package/lib/cli/update.js.map +1 -1
  57. package/lib/platform/service-common.d.ts +24 -0
  58. package/lib/platform/service-common.d.ts.map +1 -0
  59. package/lib/platform/service-common.js +119 -0
  60. package/lib/platform/service-common.js.map +1 -0
  61. package/lib/platform/service-detect.d.ts.map +1 -1
  62. package/lib/platform/service-detect.js +32 -20
  63. package/lib/platform/service-detect.js.map +1 -1
  64. package/lib/platform/service-linux.d.ts +1 -1
  65. package/lib/platform/service-linux.d.ts.map +1 -1
  66. package/lib/platform/service-linux.js +10 -77
  67. package/lib/platform/service-linux.js.map +1 -1
  68. package/lib/platform/service-macos.d.ts +1 -1
  69. package/lib/platform/service-macos.d.ts.map +1 -1
  70. package/lib/platform/service-macos.js +176 -49
  71. package/lib/platform/service-macos.js.map +1 -1
  72. package/package.json +3 -4
  73. package/templates/kanban-seed.json +1 -1
  74. package/dist/web/.next/static/chunks/c5d50c930f4e26a6.js +0 -4
  75. /package/dist/web/.next/static/{y4wg5RLBkOtdMpGszS8Fs → 8LS_5MpE4jB-m4LMauTfz}/_buildManifest.js +0 -0
  76. /package/dist/web/.next/static/{y4wg5RLBkOtdMpGszS8Fs → 8LS_5MpE4jB-m4LMauTfz}/_clientMiddlewareManifest.json +0 -0
  77. /package/dist/web/.next/static/{y4wg5RLBkOtdMpGszS8Fs → 8LS_5MpE4jB-m4LMauTfz}/_ssgManifest.js +0 -0
@@ -142,6 +142,8 @@ export function ClaudeTerminalPanel({
142
142
  const imagePasteInProgressRef = useRef(false);
143
143
  // Exit output toast state (persists across terminal unmount)
144
144
  const [exitToast, setExitToast] = useState<{ code: number; output: string } | null>(null);
145
+ // Spawn error toast — shown when session creation fails (e.g. posix_spawnp failed)
146
+ const [spawnError, setSpawnError] = useState<string | null>(null);
145
147
 
146
148
  // Instruction file check state
147
149
  const [instructionFileCheck, setInstructionFileCheck] = useState<{ needed: boolean; targetFile?: string; copySource?: string } | null>(null);
@@ -294,6 +296,7 @@ export function ClaudeTerminalPanel({
294
296
  setIsStarting(true);
295
297
  setShowCustomPrompt(false);
296
298
  setExitToast(null);
299
+ setSpawnError(null);
297
300
  try {
298
301
  // Build prompt if action provided — context is opt-in via {{cardContext}} etc.
299
302
  let prompt: string | undefined;
@@ -328,9 +331,13 @@ export function ClaudeTerminalPanel({
328
331
  if (instructionFileCheck?.needed && createInstructionFile) {
329
332
  setInstructionFileCheck(null);
330
333
  }
334
+ } else {
335
+ const body = await res.json().catch(() => ({ error: 'Unknown error' }));
336
+ setSpawnError(body.error || `Failed to start session (HTTP ${res.status})`);
331
337
  }
332
338
  } catch (err) {
333
339
  console.error('Failed to start session:', err);
340
+ setSpawnError('Could not reach the bridge server');
334
341
  } finally {
335
342
  setIsStarting(false);
336
343
  setCustomPrompt('');
@@ -484,7 +491,7 @@ export function ClaudeTerminalPanel({
484
491
  // Delay before Enter — multi-line pastes trigger bracket paste mode
485
492
  // and need time to process before \r can submit
486
493
  if (submit) {
487
- await new Promise(r => setTimeout(r, 300));
494
+ await new Promise(r => setTimeout(r, 600));
488
495
  await fetch(`${bridgeUrl}/sessions/${encodeURIComponent(sessionName)}/input`, {
489
496
  method: 'POST',
490
497
  headers: { 'Content-Type': 'application/json' },
@@ -782,6 +789,29 @@ export function ClaudeTerminalPanel({
782
789
  </div>
783
790
  )}
784
791
 
792
+ {/* Spawn error toast — shown when session creation fails entirely */}
793
+ {spawnError && (
794
+ <div className="absolute bottom-3 right-3 left-3 z-50 rounded-lg border border-red-500/30 bg-void-800/95 shadow-(--shadow-overlay) backdrop-blur-sm">
795
+ <div className="flex items-start justify-between gap-2 px-3 py-2">
796
+ <div className="flex items-center gap-1.5 text-xs font-medium text-red-400">
797
+ <svg className="h-3.5 w-3.5 flex-shrink-0" fill="none" viewBox="0 0 24 24" stroke="currentColor" strokeWidth="2">
798
+ <path strokeLinecap="round" strokeLinejoin="round" d="M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-2.5L13.732 4c-.77-.833-1.964-.833-2.732 0L4.082 16.5c-.77.833.192 2.5 1.732 2.5z" />
799
+ </svg>
800
+ Failed to start session
801
+ </div>
802
+ <button
803
+ onClick={() => setSpawnError(null)}
804
+ className="text-void-500 hover:text-void-300 flex-shrink-0"
805
+ >
806
+ <svg className="h-3.5 w-3.5" fill="none" viewBox="0 0 24 24" stroke="currentColor" strokeWidth="2">
807
+ <path strokeLinecap="round" strokeLinejoin="round" d="M6 18L18 6M6 6l12 12" />
808
+ </svg>
809
+ </button>
810
+ </div>
811
+ <pre className="max-h-32 overflow-auto px-3 pb-2 text-xs text-void-300 font-mono whitespace-pre-wrap">{spawnError}</pre>
812
+ </div>
813
+ )}
814
+
785
815
  {/* Footer controls - only when running */}
786
816
  {isRunning && (
787
817
  <div className={`flex flex-shrink-0 items-center gap-2 px-3 py-2 ${footerClassName || 'border-t border-void-700 bg-void-800'}`}>
@@ -457,8 +457,17 @@ export async function triggerAutomation(
457
457
  const inputRes = await fetchWithTimeout(`${BRIDGE_URL}/sessions/${encodeURIComponent(sessionName)}/input`, {
458
458
  method: 'POST',
459
459
  headers: { 'Content-Type': 'application/json' },
460
- body: JSON.stringify({ data: fullPrompt + '\r' }),
460
+ body: JSON.stringify({ data: fullPrompt }),
461
461
  });
462
+ if (inputRes.ok) {
463
+ // Delay before Enter to let PTY process the text
464
+ await new Promise(r => setTimeout(r, 600));
465
+ await fetchWithTimeout(`${BRIDGE_URL}/sessions/${encodeURIComponent(sessionName)}/input`, {
466
+ method: 'POST',
467
+ headers: { 'Content-Type': 'application/json' },
468
+ body: JSON.stringify({ data: '\r' }),
469
+ });
470
+ }
462
471
  if (!inputRes.ok) {
463
472
  const body = await inputRes.text();
464
473
  return logAndReturn({ cardId: card.id, projectId, success: false, error: `Input failed (${inputRes.status}): ${body}` });
@@ -520,7 +529,7 @@ export async function triggerAutomation(
520
529
  });
521
530
 
522
531
  if (retryRes.ok) {
523
- await new Promise(r => setTimeout(r, 200));
532
+ await new Promise(r => setTimeout(r, 600));
524
533
  await fetchWithTimeout(`${BRIDGE_URL}/sessions/${encodeURIComponent(sessionName)}/input`, {
525
534
  method: 'POST',
526
535
  headers: { 'Content-Type': 'application/json' },