@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.
- package/dist/bridge/claude-utils.d.ts +2 -3
- package/dist/bridge/claude-utils.js +28 -17
- package/dist/bridge/claude-utils.js.map +1 -1
- package/dist/bridge/pty-handler.js +40 -0
- package/dist/bridge/pty-handler.js.map +1 -1
- package/dist/bridge/session-manager.js +3 -3
- package/dist/bridge/session-manager.js.map +1 -1
- package/dist/messaging/bridge-client.js +1 -1
- package/dist/messaging/channels/telegram.d.ts +25 -5
- package/dist/messaging/channels/telegram.js +258 -152
- package/dist/messaging/channels/telegram.js.map +1 -1
- package/dist/messaging/index.js +5 -3
- package/dist/messaging/index.js.map +1 -1
- package/dist/messaging/state.d.ts +3 -0
- package/dist/messaging/state.js +13 -0
- package/dist/messaging/state.js.map +1 -1
- package/dist/messaging/types.d.ts +2 -0
- package/dist/scripts/slycode-env-wrapper.sh +10 -1
- package/dist/web/.next/BUILD_ID +1 -1
- package/dist/web/.next/build-manifest.json +2 -2
- package/dist/web/.next/server/app/_global-error.html +2 -2
- package/dist/web/.next/server/app/_global-error.rsc +1 -1
- package/dist/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/dist/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/dist/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/dist/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/dist/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/dist/web/.next/server/app/_not-found.html +1 -1
- package/dist/web/.next/server/app/_not-found.rsc +1 -1
- package/dist/web/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
- package/dist/web/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/dist/web/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
- package/dist/web/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/dist/web/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/dist/web/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
- package/dist/web/.next/server/app/page_client-reference-manifest.js +1 -1
- package/dist/web/.next/server/app/project/[id]/page_client-reference-manifest.js +1 -1
- package/dist/web/.next/server/chunks/src_lib_scheduler_ts_03988e3e._.js +1 -1
- package/dist/web/.next/server/chunks/src_lib_scheduler_ts_7120457c._.js +1 -1
- package/dist/web/.next/server/chunks/ssr/[root-of-the-server]__1f5fc489._.js +1 -1
- package/dist/web/.next/server/chunks/ssr/[root-of-the-server]__bcbe4bf2._.js +1 -1
- package/dist/web/.next/server/pages/404.html +1 -1
- package/dist/web/.next/server/pages/500.html +2 -2
- package/dist/web/.next/static/chunks/{cfec56fdddd52361.js → 3d5195b57fc05540.js} +1 -1
- package/dist/web/.next/static/chunks/59fb302a5bfd2dc0.js +4 -0
- package/dist/web/src/components/ClaudeTerminalPanel.tsx +31 -1
- package/dist/web/src/lib/scheduler.ts +11 -2
- package/dist/web/tsconfig.tsbuildinfo +1 -1
- package/lib/cli/restart.d.ts.map +1 -1
- package/lib/cli/restart.js +5 -9
- package/lib/cli/restart.js.map +1 -1
- package/lib/cli/start.d.ts.map +1 -1
- package/lib/cli/start.js +38 -10
- package/lib/cli/start.js.map +1 -1
- package/lib/cli/update.js +1 -1
- package/lib/cli/update.js.map +1 -1
- package/lib/platform/service-common.d.ts +24 -0
- package/lib/platform/service-common.d.ts.map +1 -0
- package/lib/platform/service-common.js +119 -0
- package/lib/platform/service-common.js.map +1 -0
- package/lib/platform/service-detect.d.ts.map +1 -1
- package/lib/platform/service-detect.js +32 -20
- package/lib/platform/service-detect.js.map +1 -1
- package/lib/platform/service-linux.d.ts +1 -1
- package/lib/platform/service-linux.d.ts.map +1 -1
- package/lib/platform/service-linux.js +10 -77
- package/lib/platform/service-linux.js.map +1 -1
- package/lib/platform/service-macos.d.ts +1 -1
- package/lib/platform/service-macos.d.ts.map +1 -1
- package/lib/platform/service-macos.js +176 -49
- package/lib/platform/service-macos.js.map +1 -1
- package/package.json +3 -4
- package/templates/kanban-seed.json +1 -1
- package/dist/web/.next/static/chunks/c5d50c930f4e26a6.js +0 -4
- /package/dist/web/.next/static/{y4wg5RLBkOtdMpGszS8Fs → 8LS_5MpE4jB-m4LMauTfz}/_buildManifest.js +0 -0
- /package/dist/web/.next/static/{y4wg5RLBkOtdMpGszS8Fs → 8LS_5MpE4jB-m4LMauTfz}/_clientMiddlewareManifest.json +0 -0
- /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,
|
|
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
|
|
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,
|
|
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' },
|