@slycode/slycode 0.2.19 → 0.2.21
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 +5 -0
- package/dist/bridge/claude-utils.js +8 -1
- package/dist/bridge/claude-utils.js.map +1 -1
- package/dist/bridge/pty-handler.js +82 -14
- package/dist/bridge/pty-handler.js.map +1 -1
- package/dist/messaging/index.js +6 -6
- package/dist/messaging/index.js.map +1 -1
- package/dist/messaging/stt.d.ts +1 -1
- package/dist/messaging/stt.js +41 -9
- package/dist/messaging/stt.js.map +1 -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/react-loadable-manifest.json +1 -1
- package/dist/web/.next/server/app/page_client-reference-manifest.js +1 -1
- package/dist/web/.next/server/app/project/[id]/page/react-loadable-manifest.json +1 -1
- package/dist/web/.next/server/app/project/[id]/page_client-reference-manifest.js +1 -1
- package/dist/web/.next/server/chunks/[root-of-the-server]__f3e501b6._.js +1 -1
- package/dist/web/.next/server/chunks/ssr/src_components_c4135402._.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/{8cb404d087e9f3c7.js → 4049cceee6a49323.js} +1 -1
- package/dist/web/.next/static/chunks/{0a4b215957655f38.js → 7813de6392004c3f.js} +1 -1
- package/dist/web/.next/static/chunks/{c7a853519f3ebcb8.js → 94b526560cbd7bc0.js} +1 -1
- package/dist/web/.next/static/chunks/{e52d73ad4544e983.js → a199b72c0ad65aea.js} +1 -1
- package/dist/web/src/app/api/projects/route.ts +11 -2
- package/dist/web/src/components/CardModal.tsx +31 -24
- package/dist/web/src/components/Terminal.tsx +12 -0
- package/dist/web/tsconfig.tsbuildinfo +1 -1
- package/lib/cli/update.d.ts.map +1 -1
- package/lib/cli/update.js +3 -0
- package/lib/cli/update.js.map +1 -1
- package/package.json +2 -2
- package/templates/kanban-seed.json +1 -1
- /package/dist/web/.next/static/{qMss0q1Ox38k4U6oxip2H → 0sPAbk-Qw-InZ0rdHjHnC}/_buildManifest.js +0 -0
- /package/dist/web/.next/static/{qMss0q1Ox38k4U6oxip2H → 0sPAbk-Qw-InZ0rdHjHnC}/_clientMiddlewareManifest.json +0 -0
- /package/dist/web/.next/static/{qMss0q1Ox38k4U6oxip2H → 0sPAbk-Qw-InZ0rdHjHnC}/_ssgManifest.js +0 -0
|
@@ -649,33 +649,40 @@ export function CardModal({ card, stage, projectId, projectPath, onClose, onUpda
|
|
|
649
649
|
};
|
|
650
650
|
const currentDocPath = getDocPath(activeTab);
|
|
651
651
|
|
|
652
|
-
// Track loaded docs by path
|
|
652
|
+
// Track loaded docs by path
|
|
653
653
|
const [loadedDocs, setLoadedDocs] = useState<Record<string, string>>({});
|
|
654
654
|
const [docErrors, setDocErrors] = useState<Record<string, string>>({});
|
|
655
655
|
|
|
656
|
-
//
|
|
656
|
+
// Re-fetch document every time a doc tab is selected (always show latest from disk)
|
|
657
657
|
useEffect(() => {
|
|
658
658
|
const isDocTab = activeTab === 'design' || activeTab === 'feature' || activeTab === 'test';
|
|
659
|
-
if (isDocTab
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
}
|
|
677
|
-
|
|
678
|
-
|
|
659
|
+
if (!isDocTab || !currentDocPath) return;
|
|
660
|
+
|
|
661
|
+
// eslint-disable-next-line react-hooks/set-state-in-effect -- gating fetch with loading flag
|
|
662
|
+
setDocLoading(true);
|
|
663
|
+
const fetchPath = currentDocPath;
|
|
664
|
+
fetch(`/api/file?path=${encodeURIComponent(fetchPath)}&projectId=${encodeURIComponent(projectId)}`)
|
|
665
|
+
.then((res) => res.json())
|
|
666
|
+
.then((data) => {
|
|
667
|
+
if (data.error) {
|
|
668
|
+
setDocErrors((prev) => ({ ...prev, [fetchPath]: data.error }));
|
|
669
|
+
} else {
|
|
670
|
+
setDocErrors((prev) => {
|
|
671
|
+
const next = { ...prev };
|
|
672
|
+
delete next[fetchPath];
|
|
673
|
+
return next;
|
|
674
|
+
});
|
|
675
|
+
setLoadedDocs((prev) => ({ ...prev, [fetchPath]: data.content }));
|
|
676
|
+
}
|
|
677
|
+
})
|
|
678
|
+
.catch((err) => {
|
|
679
|
+
setDocErrors((prev) => ({ ...prev, [fetchPath]: err.message }));
|
|
680
|
+
})
|
|
681
|
+
.finally(() => {
|
|
682
|
+
setDocLoading(false);
|
|
683
|
+
});
|
|
684
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps -- intentionally re-fetch on every tab switch
|
|
685
|
+
}, [activeTab, currentDocPath, projectId]);
|
|
679
686
|
|
|
680
687
|
const handleTitleSave = () => {
|
|
681
688
|
if (editedTitle.trim() && editedTitle !== card.title) {
|
|
@@ -1623,12 +1630,12 @@ export function CardModal({ card, stage, projectId, projectPath, onClose, onUpda
|
|
|
1623
1630
|
)}
|
|
1624
1631
|
</button>
|
|
1625
1632
|
)}
|
|
1626
|
-
{docLoading && !loadedDocs[currentDocPath!] && (
|
|
1633
|
+
{docLoading && !loadedDocs[currentDocPath!] && !docErrors[currentDocPath!] && (
|
|
1627
1634
|
<div className="flex items-center justify-center py-8">
|
|
1628
1635
|
<div className="text-void-500">Loading document...</div>
|
|
1629
1636
|
</div>
|
|
1630
1637
|
)}
|
|
1631
|
-
{currentDocPath && docErrors[currentDocPath] && (
|
|
1638
|
+
{currentDocPath && docErrors[currentDocPath] && !loadedDocs[currentDocPath] && (
|
|
1632
1639
|
<div className="rounded-lg bg-red-50 p-4 text-red-700 dark:bg-red-900/20 dark:text-red-300">
|
|
1633
1640
|
Error loading document: {docErrors[currentDocPath]}
|
|
1634
1641
|
</div>
|
|
@@ -134,6 +134,18 @@ export const Terminal = forwardRef<TerminalHandle, TerminalProps>(function Termi
|
|
|
134
134
|
};
|
|
135
135
|
|
|
136
136
|
terminal.attachCustomKeyEventHandler((e: KeyboardEvent) => {
|
|
137
|
+
// Shift+Enter → send CSI u escape sequence for "insert newline" instead
|
|
138
|
+
// of xterm's default \r (which submits). CLI tools like Claude Code,
|
|
139
|
+
// Codex, and Gemini interpret \x1b[13;2u as newline insertion.
|
|
140
|
+
// Must return false for ALL event types (keydown, keypress) to prevent
|
|
141
|
+
// xterm from sending \r via the keypress path.
|
|
142
|
+
if (e.key === 'Enter' && e.shiftKey && !e.ctrlKey && !e.altKey && !e.metaKey) {
|
|
143
|
+
if (e.type === 'keydown') {
|
|
144
|
+
pasteText('\x1b[13;2u');
|
|
145
|
+
}
|
|
146
|
+
return false;
|
|
147
|
+
}
|
|
148
|
+
|
|
137
149
|
if (e.type !== 'keydown') return true;
|
|
138
150
|
if (!((e.ctrlKey || e.metaKey) && e.key === 'v' && !e.shiftKey)) return true;
|
|
139
151
|
|